mirror of
https://github.com/jlengrand/create-1.git
synced 2026-03-10 00:01:23 +00:00
feat: allow passing custom EJS options
This commit is contained in:
committed by
Thomas Allmer
parent
dbf501d458
commit
dcf386a1fe
@@ -66,16 +66,16 @@ class Generator {
|
||||
return path.join(this.options.destinationPath, destination);
|
||||
}
|
||||
|
||||
copyTemplate(from, to) {
|
||||
copyTemplate(from, to, this.templateData);
|
||||
copyTemplate(from, to, ejsOptions = {}) {
|
||||
copyTemplate(from, to, this.templateData, ejsOptions);
|
||||
}
|
||||
|
||||
copyTemplateJsonInto(from, to, options = { mode: 'merge' }) {
|
||||
copyTemplateJsonInto(from, to, this.templateData, options);
|
||||
copyTemplateJsonInto(from, to, options = { mode: 'merge' }, ejsOptions = {}) {
|
||||
copyTemplateJsonInto(from, to, this.templateData, options, ejsOptions);
|
||||
}
|
||||
|
||||
async copyTemplates(from, to = this.destinationPath()) {
|
||||
return copyTemplates(from, to, this.templateData);
|
||||
async copyTemplates(from, to = this.destinationPath(), ejsOptions = {}) {
|
||||
return copyTemplates(from, to, this.templateData, ejsOptions);
|
||||
}
|
||||
|
||||
async end() {
|
||||
|
||||
21
src/core.js
21
src/core.js
@@ -89,13 +89,16 @@ export function resetVirtualFiles() {
|
||||
* processTemplate('prefix <%= name %> suffix', { name: 'foo' })
|
||||
* // prefix foo suffix
|
||||
*
|
||||
* It's also possible to pass custom options to EJS render like changing the delimiter of tags.
|
||||
*
|
||||
* @param {string} _fileContent Template as a string
|
||||
* @param {object} data Object of all the variables to repalce
|
||||
* @param {ejs.Options} ejsOptions
|
||||
* @returns {string} Template with all replacements
|
||||
*/
|
||||
export function processTemplate(_fileContent, data = {}) {
|
||||
export function processTemplate(_fileContent, data = {}, ejsOptions = {}) {
|
||||
let fileContent = _fileContent;
|
||||
fileContent = render(fileContent, data, { debug: false, filename: 'template' });
|
||||
fileContent = render(fileContent, data, { debug: false, filename: 'template', ...ejsOptions });
|
||||
return fileContent;
|
||||
}
|
||||
|
||||
@@ -342,11 +345,12 @@ export function optionsToCommand(options, generatorName = '@open-wc') {
|
||||
* @param {string} fromPath
|
||||
* @param {string} toPath
|
||||
* @param {object} data
|
||||
* @param {ejs.Options} ejsOptions
|
||||
*/
|
||||
export function copyTemplate(fromPath, toPath, data) {
|
||||
export function copyTemplate(fromPath, toPath, data, ejsOptions = {}) {
|
||||
const fileContent = readFileFromPath(fromPath);
|
||||
if (fileContent) {
|
||||
const processed = processTemplate(fileContent, data);
|
||||
const processed = processTemplate(fileContent, data, ejsOptions);
|
||||
writeFileToPath(toPath, processed);
|
||||
}
|
||||
}
|
||||
@@ -356,8 +360,9 @@ export function copyTemplate(fromPath, toPath, data) {
|
||||
* @param {string} fromGlob
|
||||
* @param {string} [toDir] Directory to copy into
|
||||
* @param {object} data Replace parameters in files
|
||||
* @param {ejs.Options} ejsOptions
|
||||
*/
|
||||
export function copyTemplates(fromGlob, toDir = process.cwd(), data = {}) {
|
||||
export function copyTemplates(fromGlob, toDir = process.cwd(), data = {}, ejsOptions = {}) {
|
||||
return new Promise(resolve => {
|
||||
glob(fromGlob, { dot: true }, (er, files) => {
|
||||
const copiedFiles = [];
|
||||
@@ -365,7 +370,7 @@ export function copyTemplates(fromGlob, toDir = process.cwd(), data = {}) {
|
||||
if (!fs.lstatSync(filePath).isDirectory()) {
|
||||
const fileContent = readFileFromPath(filePath);
|
||||
if (fileContent !== false) {
|
||||
const processed = processTemplate(fileContent, data);
|
||||
const processed = processTemplate(fileContent, data, ejsOptions);
|
||||
|
||||
// find path write to (force / also on windows)
|
||||
const replace = path.join(fromGlob.replace(/\*/g, '')).replace(/\\(?! )/g, '/');
|
||||
@@ -386,18 +391,20 @@ export function copyTemplates(fromGlob, toDir = process.cwd(), data = {}) {
|
||||
* @param {string} fromPath
|
||||
* @param {string} toPath
|
||||
* @param {object} data
|
||||
* @param {ejs.Options} ejsOptions
|
||||
*/
|
||||
export function copyTemplateJsonInto(
|
||||
fromPath,
|
||||
toPath,
|
||||
data = {},
|
||||
{ mode = 'merge' } = { mode: 'merge' },
|
||||
ejsOptions = {},
|
||||
) {
|
||||
const content = readFileFromPath(fromPath);
|
||||
if (content === false) {
|
||||
return;
|
||||
}
|
||||
const processed = processTemplate(content, data);
|
||||
const processed = processTemplate(content, data, ejsOptions);
|
||||
const mergeMeObj = JSON.parse(processed);
|
||||
|
||||
const overwriteMerge = (destinationArray, sourceArray) => sourceArray;
|
||||
|
||||
@@ -40,6 +40,12 @@ describe('processTemplate', () => {
|
||||
expect(e).to.be.an.instanceof(ReferenceError);
|
||||
}
|
||||
});
|
||||
|
||||
it('allows passing custom EJS options like changing the delimiter', async () => {
|
||||
expect(
|
||||
processTemplate('prefix <?= name ?> suffix', { name: 'foo' }, { delimiter: '?' }),
|
||||
).to.equal('prefix foo suffix');
|
||||
});
|
||||
});
|
||||
|
||||
describe('writeFileToPath', () => {
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
{
|
||||
"devDependencies": {
|
||||
"eslint": "^7.18.0",
|
||||
"eslint": "^7.24.0",
|
||||
"@open-wc/eslint-config": "^4.2.0",
|
||||
"prettier": "^2.2.1",
|
||||
"eslint-config-prettier": "^7.2.0",
|
||||
"husky": "^4.3.8",
|
||||
"lint-staged": "^10.5.3",
|
||||
"@web/test-runner": "^0.12.7",
|
||||
"lint-staged": "^10.5.4",
|
||||
"@web/test-runner": "^0.12.20",
|
||||
"@open-wc/testing": "^2.5.32",
|
||||
"@web/dev-server-storybook": "^0.3.3",
|
||||
"@web/dev-server-storybook": "^0.3.5",
|
||||
"@open-wc/building-rollup": "^1.9.4",
|
||||
"deepmerge": "^4.2.2",
|
||||
"rimraf": "^3.0.2",
|
||||
"rollup": "^2.38.0",
|
||||
"@web/dev-server": "^0.1.5"
|
||||
"rollup": "^2.45.2",
|
||||
"@web/dev-server": "^0.1.12"
|
||||
},
|
||||
"scripts": {
|
||||
"lint": "eslint --ext .js,.html . --ignore-path .gitignore && prettier \"**/*.js\" --check --ignore-path .gitignore",
|
||||
|
||||
Reference in New Issue
Block a user