mirror of
https://github.com/strapi/strapi.git
synced 2025-07-19 07:02:26 +00:00
64 lines
1.5 KiB
JavaScript
64 lines
1.5 KiB
JavaScript
![]() |
'use strict';
|
||
|
|
||
|
/**
|
||
|
* Module dependencies
|
||
|
*/
|
||
|
|
||
|
// Node.js core.
|
||
|
const path = require('path');
|
||
|
|
||
|
// Public node modules.
|
||
|
const _ = require('lodash');
|
||
|
const fs = require('fs-extra');
|
||
|
const reportback = require('reportback')();
|
||
|
|
||
|
// Local dependencies.
|
||
|
const fileHelper = require('../file');
|
||
|
|
||
|
/**
|
||
|
* Read a dynamic template, compile it using scope.
|
||
|
* Then use `file` helper to write it to its destination.
|
||
|
*/
|
||
|
|
||
|
module.exports = function (options, cb) {
|
||
|
cb = reportback.extend(cb, {
|
||
|
noTemplate: 'error',
|
||
|
alreadyExists: 'error'
|
||
|
});
|
||
|
|
||
|
// Compute the canonical path to a template
|
||
|
// given its relative path from its source generator's
|
||
|
// `templates` directory.
|
||
|
const absTemplatePath = path.resolve(options.templatesDirectory, options.templatePath);
|
||
|
|
||
|
fs.readFile(absTemplatePath, 'utf8', function (err, contents) {
|
||
|
if (err) {
|
||
|
err = err instanceof Error ? err : new Error(err);
|
||
|
err.message = 'Template error: ' + err.message;
|
||
|
err.path = absTemplatePath;
|
||
|
if (err.code === 'ENOENT') {
|
||
|
return cb.noTemplate(err);
|
||
|
} else {
|
||
|
return cb(err);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
try {
|
||
|
const compiled = _.template(contents);
|
||
|
contents = compiled(options);
|
||
|
|
||
|
// With Lodash templates, HTML entities are escaped by default.
|
||
|
// Default assumption is we don't want that, so we'll reverse it.
|
||
|
if (!options.escapeHTMLEntities) {
|
||
|
contents = _.unescape(contents);
|
||
|
}
|
||
|
} catch (e) {
|
||
|
return cb(e);
|
||
|
}
|
||
|
|
||
|
return fileHelper(_.merge(options, {
|
||
|
contents: contents
|
||
|
}), cb);
|
||
|
});
|
||
|
};
|