2023-10-03 11:14:36 +08:00
|
|
|
'use strict';
|
|
|
|
|
|
|
|
const path = require('path');
|
|
|
|
const pug = require('pug');
|
|
|
|
|
|
|
|
const configPath = path.join(process.cwd(), 'pug.config');
|
|
|
|
const defaultConfig = { compile: {} }; // avoids key errors
|
|
|
|
|
|
|
|
let hasConfig = true;
|
|
|
|
try {
|
|
|
|
require.resolve(configPath);
|
|
|
|
} catch {
|
|
|
|
hasConfig = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
const config = hasConfig ? require(configPath) : defaultConfig;
|
|
|
|
|
|
|
|
// Validate non-standard keys -- e.g. 'compile'.
|
|
|
|
const hasProp = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop);
|
|
|
|
const invalidKeys = Object.keys(config).filter(k => !hasProp(defaultConfig, k));
|
|
|
|
if (invalidKeys.length > 0) {
|
|
|
|
throw Error(`Unsupported PUG config keys: ${invalidKeys.join(', ')}`);
|
|
|
|
}
|
|
|
|
|
|
|
|
function pugCompile(data) {
|
|
|
|
const opts = {
|
|
|
|
...config.compile,
|
|
|
|
filename: data.path // always used
|
|
|
|
};
|
|
|
|
return pug.compile(data.text, opts);
|
|
|
|
}
|
|
|
|
|
|
|
|
function pugRenderer(data, locals) {
|
|
|
|
return pugCompile(data)(locals);
|
|
|
|
}
|
|
|
|
|
|
|
|
pugRenderer.compile = pugCompile;
|
|
|
|
|
|
|
|
module.exports = pugRenderer;
|