39 lines
1.1 KiB
JavaScript
39 lines
1.1 KiB
JavaScript
import { resolve } from 'node:path';
|
|
import { fileURLToPath } from 'node:url';
|
|
|
|
import { compileFile, compile } from 'pug';
|
|
import intel from 'intel';
|
|
|
|
const log = intel.getLogger('sitespeedio.plugin.html');
|
|
const __dirname = fileURLToPath(new URL('.', import.meta.url));
|
|
const basePath = resolve(__dirname, 'templates');
|
|
|
|
const templateCache = {};
|
|
|
|
function getTemplate(templateName) {
|
|
if (!templateName.endsWith('.pug')) templateName = templateName + '.pug';
|
|
|
|
const template = templateCache[templateName];
|
|
if (template) {
|
|
return template;
|
|
}
|
|
|
|
const filename = resolve(basePath, templateName);
|
|
const renderedTemplate = compileFile(filename);
|
|
|
|
templateCache[templateName] = renderedTemplate;
|
|
return renderedTemplate;
|
|
}
|
|
|
|
export function renderTemplate(templateName, locals) {
|
|
try {
|
|
return getTemplate(templateName)(locals);
|
|
} catch (error) {
|
|
log.error('Could not generate %s, %s', templateName, error.message);
|
|
}
|
|
}
|
|
export function addTemplate(templateName, templateString) {
|
|
const compiledTemplate = compile(templateString);
|
|
templateCache[templateName + '.pug'] = compiledTemplate;
|
|
}
|