You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
webpack-plugin/src/engines/nunjucks.js

77 lines
1.7 KiB

2 years ago
const nunjucks = require('nunjucks')
const fs = require('fs')
1 year ago
const assign = require('assign-deep')
2 years ago
1 year ago
const configStore = require('./../config.js')
const { asset, resize } = require('./helpers.js')
1 year ago
const PageQuery = require('./../queries/pages.js')
2 years ago
/**
1 year ago
* nunjucks
*
2 years ago
*
* @author Björn Hase <me@herr-hase.wtf>
* @license http://opensource.org/licenses/MIT The MIT License
1 year ago
* @link https://gitea.node001.net/HerrHase/siteomat-webpack-plugin.git
2 years ago
*
*/
class Engine {
1 year ago
/**
*
*
* @param {string} views
* @param {object} site
* @param {object} options
*
*/
2 years ago
constructor(views, site, options) {
1 year ago
// merge data
this._options = assign({}, {
2 years ago
autoescapes: true,
2 years ago
throwOnUndefined: true,
web: {
async: true
}
2 years ago
}, options)
this.nunjucks = nunjucks.configure(views, this._options)
1 year ago
// add filter: resize
2 years ago
this.nunjucks.addFilter('resize', (...args) => {
const done = args.pop()
const options = args?.[2] ? {} : args[2]
resize(args[0], args[1], options, done)
}, true)
2 years ago
1 year ago
// adding defaults for view, data from site.yml, functions and pageQuery
2 years ago
this._defaults = {
site: site,
asset: asset,
pageQuery: new PageQuery(configStore.get('source'))
2 years ago
}
}
/**
* render
*
* @param {string} view
* @param {object} data
* @return {string}
*
*/
2 years ago
render(view, data, done) {
1 year ago
// merge data
1 year ago
data = assign(data, this._defaults)
2 years ago
2 years ago
this.nunjucks.render(view, data, (error, response) => {
done(error, response)
2 years ago
})
}
}
2 years ago
module.exports = Engine