From c42119dee519865f7107c4c2a8c61fd84c9943de Mon Sep 17 00:00:00 2001 From: HerrHase Date: Sun, 20 Nov 2022 17:15:35 +0100 Subject: [PATCH] integrate sharp --- output.png | Bin 0 -> 28759 bytes package-lock.json | 12 +++ package.json | 1 + .../site/blog/cliche-vegan-messenger/index.md | 15 --- resources/site/blog/index.md | 7 -- resources/views/home.njk | 2 +- src/config.js | 36 +++++++ src/engine.js | 24 +++-- src/happySite.js | 37 +++++-- src/helpers/engine.js | 17 ++- src/media.js | 101 ++++++++++++++++++ src/models/page.js | 9 +- web.png | Bin 0 -> 28759 bytes 13 files changed, 207 insertions(+), 54 deletions(-) create mode 100644 output.png delete mode 100644 resources/site/blog/cliche-vegan-messenger/index.md delete mode 100644 resources/site/blog/index.md create mode 100644 src/config.js create mode 100644 src/media.js create mode 100644 web.png diff --git a/output.png b/output.png new file mode 100644 index 0000000000000000000000000000000000000000..ba25a8b49696c4739bb9ef36e6cf3b5aeb58fc97 GIT binary patch literal 28759 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≀^ZsEkFQ{XX_@gK0`|qzf69DtIqUBEf`^wA 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 SQ~l8Z0000= 6" } }, + "node_modules/crypto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz", + "integrity": "sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==", + "deprecated": "This package is no longer supported. It's now a built-in Node module. If you've depended on crypto, you should switch to the one that's built-in." + }, "node_modules/dayjs": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.6.tgz", @@ -967,6 +974,11 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==" }, + "crypto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz", + "integrity": "sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==" + }, "dayjs": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.6.tgz", diff --git a/package.json b/package.json index a82e9f0..99cb31e 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "main": "index.js", "description": "Generating a Website from a Markdown Generator", "dependencies": { + "crypto": "^1.0.1", "dayjs": "^1.11.6", "fast-xml-parser": "^4.0.11", "html-minifier": "^4.0.0", diff --git a/resources/site/blog/cliche-vegan-messenger/index.md b/resources/site/blog/cliche-vegan-messenger/index.md deleted file mode 100644 index e30a302..0000000 --- a/resources/site/blog/cliche-vegan-messenger/index.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "Cliche Vegan Messenger" -date_published: "2022-01-10 10:00" -view: "post.njk" -tags: - - tumeric - - heard - - bag -media: - teaser: 'jep.jpg' -meta: - description: "DSA yes plz hot chicken green juice" - robots: "index, follow" ---- -## TEST \ No newline at end of file diff --git a/resources/site/blog/index.md b/resources/site/blog/index.md deleted file mode 100644 index 988d654..0000000 --- a/resources/site/blog/index.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Blog" -view: "blog.njk" -meta: - description: "DSA yes plz hot chicken green juice" - robots: "index, follow" ---- \ No newline at end of file diff --git a/resources/views/home.njk b/resources/views/home.njk index 1f46c37..b209dda 100644 --- a/resources/views/home.njk +++ b/resources/views/home.njk @@ -2,7 +2,7 @@ {% block main %} - + {{ page.content | safe }} {% endblock %} \ No newline at end of file diff --git a/src/config.js b/src/config.js new file mode 100644 index 0000000..53a8f40 --- /dev/null +++ b/src/config.js @@ -0,0 +1,36 @@ +/** + * + * + */ + +class ConfigStore { + + constructor() { + if (!ConfigStore.instance) { + ConfigStore.instance = this; + this._data = {} + } + + return ConfigStore.instance; + } + + /** + * + */ + set(key, value) { + this._data[key] = value + } + + /** + * + * + */ + get(key) { + return this._data[key] + } +} + +// create instance +const instance = new ConfigStore(); + +export default instance \ No newline at end of file diff --git a/src/engine.js b/src/engine.js index 074e7b4..87c6125 100644 --- a/src/engine.js +++ b/src/engine.js @@ -1,7 +1,8 @@ import nunjucks from 'nunjucks' import { minify } from 'html-minifier' +import fs from 'fs' -import { asset, media } from './helpers/engine.js' +import { asset, resize } from './helpers/engine.js' /** * engine - handle eta.js @@ -18,13 +19,19 @@ class Engine { // merge options this._options = Object.assign({}, { autoescapes: true, - throwOnUndefined: true + throwOnUndefined: true, + web: { + async: true + } }, options) this.nunjucks = nunjucks.configure(views, this._options) - this.nunjucks.addFilter('media', function(options) { - return media(options) - }) + this.nunjucks.addFilter('resize', (...args) => { + const done = args.pop() + const options = args?.[2] ? {} : args[2] + + resize(args[0], args[1], options, done) + }, true) // adding defaults for view, function and data from config.yml this._defaults = { @@ -41,12 +48,11 @@ class Engine { * @return {string} * */ - render(view, data) { + render(view, data, done) { data = Object.assign({}, data, this._defaults) - return minify(this.nunjucks.render(view, data), { - removeComments: true, - collapseWhitespace: true + this.nunjucks.render(view, data, (error, response) => { + done(error, response) }) } diff --git a/src/happySite.js b/src/happySite.js index ae3e9f9..48a167a 100644 --- a/src/happySite.js +++ b/src/happySite.js @@ -8,12 +8,17 @@ import Sitemap from './sitemap.js' import PagesQuery from './queries/pages.js' import parseYamlFile from './parsers/yaml.js' +import configStore from './config.js' + /** + * Main + * + * * * @author Björn Hase * @license http://opensource.org/licenses/MIT The MIT License * @link https://gitea.node001.net/HerrHase/happy-site-webpack-plugin.git - * + * */ class HappySite { @@ -29,6 +34,10 @@ class HappySite { this._destination = destination this._views = views + configStore.set('source', source) + configStore.set('destination', destination) + configStore.set('views', views) + // get config for site if (fs.existsSync(this._source + '/site.yml')) { const file = fs.readFileSync(this._source + '/site.yml', 'utf8') @@ -37,6 +46,8 @@ class HappySite { throw new Error('site.yml not found in ' + this._source + '!') } + configStore.set('site', this._site) + this._engine = new Engine(views, this._site) } @@ -52,14 +63,26 @@ class HappySite { // run through pages and generate html files results.forEach((page) => { - const content = page.render(this._engine) + page.render(this._engine, (error, content) => { - // create directories and write file from page - mkdirp(this._destination + page.pathname).then(() => { - fs.writeFileSync(this._destination + page.pathname + '/' + page.filename, content) - }) + // show errors + if (error) { + console.error(error) + } + + // if no content show error message + if (!content) { + console.error('Error! Rendering Page ' + '"' + page.filename + '" is null') + return; + } - sitemap.addPage(page) + // create directories and write file from page + mkdirp(this._destination + page.pathname).then(() => { + fs.writeFileSync(this._destination + page.pathname + '/' + page.filename, content) + }) + + sitemap.addPage(page) + }) }) // write sitemap diff --git a/src/helpers/engine.js b/src/helpers/engine.js index e408906..b858996 100644 --- a/src/helpers/engine.js +++ b/src/helpers/engine.js @@ -1,8 +1,7 @@ import path from 'path' import * as fs from 'fs' -import sharp from 'sharp' -const basePath = path.join(path.resolve()) +import Media from './../media.js' /** * asset - checks manifest.json for given path and return @@ -19,7 +18,7 @@ function asset(staticPath) let result = staticPath // path to mix-manifest - const file = basePath + 'mix-manifest.json' + const file = path.join(path.resolve()) + 'mix-manifest.json' if (fs.existsSync(file)) { @@ -43,14 +42,12 @@ function asset(staticPath) * */ -function media(src, options) +async function resize(src, sizes, options, done) { - console.log(basePath) - console.log(path.resolve(src)) - sharp(src) - .toFile('output.png', (error, info) => { console.log(error) }) + const media = new Media() - return src + src = await media.resize(src, sizes, options) + done(null, src) } -export { asset, media } \ No newline at end of file +export { asset, resize } \ No newline at end of file diff --git a/src/media.js b/src/media.js new file mode 100644 index 0000000..2a140c2 --- /dev/null +++ b/src/media.js @@ -0,0 +1,101 @@ +import path from 'path' +import * as fs from 'fs' + +import sharp from 'sharp' +import mkdirp from 'mkdirp' +import crypto from 'crypto' +import slugify from 'slugify' + +import configStore from './config.js' + +/** + * + * + */ +class Media { + + constructor() { + this._DIR_ASSETS = '/assets/' + } + + /** + * + * @param {string} srcPath + * @param {object} sizes + * @param {Object} [options={}] + * @return {string} + * + */ + async resize(src, sizes, options = {}) { + + this._extension = path.extname(src) + this._filename = slugify(path.basename(src, this._extension)) + + this._process = await sharp(configStore.get('source') + '/' + src) + + // resize without options and with options + if (Object.getOwnPropertyNames(options).length === 0) { + await this._process + .resize(sizes) + } else { + this._process + .resize(sizes, options) + } + + // optimize + this._optimize() + + const fileBuffer = await this._process + .toBuffer() + + const relativeDestinationPath = this._DIR_ASSETS + this._resolveRelativeDestinationPath(fileBuffer) + + // create directories and write file + mkdirp.sync(configStore.get('destination') + relativeDestinationPath) + fs.writeFileSync(configStore.get('destination') + relativeDestinationPath + '/' + this._filename + this._extension, fileBuffer) + + return relativeDestinationPath + '/' + this._filename + this._extension + } + + /** + * @TODO much nicer to add a hook system so behavior can be change + * + * + * @param {string} extension + * + */ + _optimize() { + if (this._extension === '.gif') { + this._process + .gif({ + reoptimise: true + }) + } else { + + // change extension + this._extension = '.webp' + this._process + + .webp({ + lossless: true + }) + } + } + + /** + * resolve path to write file, hash will be get from fileBuffer and + * + * + * @param {object} fileBuffer + * @return {string} + * + */ + _resolveRelativeDestinationPath(fileBuffer) { + const hash = crypto.createHash('sha1') + hash.update(fileBuffer) + + return hash.digest('hex').match(new RegExp('.{1,8}', 'g')).join('/') + } +} + +export default Media \ No newline at end of file diff --git a/src/models/page.js b/src/models/page.js index 69b34f8..c253364 100644 --- a/src/models/page.js +++ b/src/models/page.js @@ -1,6 +1,7 @@ import path from 'path' import slugify from 'slugify' import merge from 'lodash.merge' +import nunjucks from 'nunjucks' import parseMarkdownFile from './../parsers/markdown.js' @@ -53,7 +54,7 @@ class Page { * @return {string} * */ - render(engine) { + render(engine, done) { const page = Object.assign({}, this._fields) @@ -61,11 +62,9 @@ class Page { page.blocks = this._blocks page.path = this.pathname + '/' + this.filename - const result = engine.render(this._fields.view, { + return engine.render(this._fields.view, { page: page - }) - - return result + }, done) } /** diff --git a/web.png b/web.png new file mode 100644 index 0000000000000000000000000000000000000000..ba25a8b49696c4739bb9ef36e6cf3b5aeb58fc97 GIT binary patch literal 28759 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≀^ZsEkFQ{XX_@gK0`|qzf69DtIqUBEf`^wA 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 SQ~l8Z0000