UNPKG

code-workshop-kit

Version:
135 lines 5.39 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.scaffoldFiles = exports.scaffold = exports.copyTemplates = void 0; const core_js_1 = require("@open-wc/create/dist/core.js"); const chalk_1 = __importDefault(require("chalk")); const command_line_args_1 = __importDefault(require("command-line-args")); const esm_1 = __importDefault(require("esm")); const fs_1 = __importDefault(require("fs")); const glob_1 = __importDefault(require("glob")); const path_1 = __importDefault(require("path")); // Fork from @open-wc/create to allow functions that return strings inside data obj. If we add this to @open-wc/create both forks can be deleted here. function processTemplate(_fileContent, data) { let fileContent = _fileContent; if (data) { Object.keys(data).forEach((key) => { let replacement = ''; if (typeof data[key] === 'function') { replacement = data[key](); } else { replacement = data[key]; } fileContent = fileContent.replace(new RegExp(`<%= ${key} %>`, 'g'), replacement); }); } return fileContent; } // Fork from @open-wc/create function copyTemplates(fromGlob, toDir = process.cwd(), data) { return new Promise((resolve) => { glob_1.default(fromGlob, { dot: true }, (err, files) => { const copiedFiles = []; files.forEach((filePath) => { if (!fs_1.default.lstatSync(filePath).isDirectory()) { const fileContent = core_js_1.readFileFromPath(filePath); if (fileContent !== false) { const processed = processTemplate(fileContent, data); // find path write to (force / also on windows) const replace = path_1.default.join(fromGlob.replace(/\*/g, '')).replace(/\\(?! )/g, '/'); const toPath = filePath.replace(replace, `${toDir}/`); // write file to path? copiedFiles.push({ toPath, processed }); } } }); resolve(copiedFiles); }); }); } exports.copyTemplates = copyTemplates; const scaffold = async (_opts) => { const opts = { force: false, logStartup: true, dir: '/', ..._opts, }; const logger = (str) => { if (opts.logStartup !== false) { // eslint-disable-next-line no-console console.log(str); } }; logger(chalk_1.default.bold('code-workshop-kit scaffold started...')); logger(''); if (opts.dir && opts.dir.startsWith('/')) { // eslint-disable-next-line no-param-reassign opts.dir = `.${opts.dir}`; } const pathToWorkshop = path_1.default.resolve(process.cwd(), opts.dir, 'cwk.config.js'); const pathToOutputDir = path_1.default.resolve(pathToWorkshop, '../', 'participants'); const pathToInputDir = path_1.default.resolve(pathToWorkshop, '../', 'template'); if (opts.workshop || fs_1.default.existsSync(pathToWorkshop)) { let workshop; if (opts.workshop) { ({ workshop } = opts); } else { // We know we are in NodeJS so force module typecast to NodeModule const esmRequire = esm_1.default(module); workshop = esmRequire(pathToWorkshop).default; } const { participants = [], templateData } = workshop; participants.forEach((name) => { logger(`${chalk_1.default.white('Scaffolding for:')} ${chalk_1.default.cyanBright(name)}`); copyTemplates(path_1.default.resolve(process.cwd(), `${pathToInputDir}/**/*`), path_1.default.resolve(process.cwd(), `${pathToOutputDir}/${name}`), { participantName: name, ...templateData, }).then((files) => { files.forEach((file) => { core_js_1.writeFileToPathOnDisk(file.toPath, file.processed, { override: opts.force, ask: false, }); }); }); }); } else { throw new Error(`Error: Cannot find cwk.config.js at ${pathToWorkshop}`); } if (opts.logStartup !== false) { logger(''); } }; exports.scaffold = scaffold; const scaffoldFiles = (opts = {}) => { let cliConfig = {}; if (opts.argv) { const scaffoldDefinitions = [ { name: 'force', alias: 'f', type: Boolean, description: 'If set, it will (re-)scaffold for the participants and overwrite the current files without warning', }, { name: 'dir', alias: 'd', type: String, description: 'If set, will search for cwk.config.js in this directory', }, ]; cliConfig = command_line_args_1.default(scaffoldDefinitions, { argv: opts.argv }); } exports.scaffold({ ...opts, ...cliConfig, }); }; exports.scaffoldFiles = scaffoldFiles; //# sourceMappingURL=scaffold-files.js.map