UNPKG

piral-cli

Version:

The standard CLI for creating and building a Piral instance or a Pilet.

120 lines 5.04 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getPiralScaffoldData = getPiralScaffoldData; exports.scaffoldPiralSourceFiles = scaffoldPiralSourceFiles; exports.getPiletScaffoldData = getPiletScaffoldData; exports.scaffoldPiletSourceFiles = scaffoldPiletSourceFiles; const path_1 = require("path"); const npm_1 = require("./npm"); const io_1 = require("./io"); const info_1 = require("./info"); const log_1 = require("./log"); function getTemplatePackage(templatePackageName) { const idx = templatePackageName.indexOf('@', 1); const normalizedName = idx > 0 && !(0, path_1.isAbsolute)(templatePackageName) ? templatePackageName.substring(0, idx) : templatePackageName; try { return require(normalizedName); } catch (err) { (0, log_1.log)('generalVerbose_0004', err); (0, log_1.fail)('generalError_0002', `Could not load the template "${templatePackageName}". Package "${normalizedName}" could not be resolved due to ${err?.message || 'an unspecified error'}.`); } } async function getTemplateFiles(templatePackageName, registry, root, data, forceOverwrite) { // debug in monorepo such as "../templates/pilet-template-react/lib/index.js" if (templatePackageName.startsWith('.')) { templatePackageName = (0, path_1.resolve)(process.cwd(), templatePackageName); } else { if (templatePackageName.indexOf('@', 1) === -1) { templatePackageName = `${templatePackageName}@latest`; } await (0, npm_1.installNpmPackageFromOptionalRegistry)(templatePackageName, __dirname, registry); } const templateRunner = getTemplatePackage(templatePackageName); const logLevel = (0, log_1.getLogLevel)(); const details = { forceOverwrite, cliVersion: info_1.cliVersion, isWindows: info_1.isWindows, logLevel, }; if (typeof templateRunner === 'function') { return await templateRunner(root, data, details); } else if ('default' in templateRunner && typeof templateRunner.default === 'function') { return await templateRunner.default(root, data, details); } else { (0, log_1.fail)('generalError_0002', `The provided template package "${templatePackageName}" does not export a template factory function.`); } } function writeFiles(root, files, forceOverwrite) { const rootPackage = (0, path_1.resolve)(root, 'package.json'); return Promise.all(files .filter((file) => { if (typeof file.path !== 'string') { (0, log_1.log)('generalWarning_0001', `The supplied file path ("${file.path}") is not a string. Skipping.`); return false; } else if (typeof file.content === 'undefined') { (0, log_1.log)('generalWarning_0001', `The file "${file.path}" did not specify any content. Skipping.`); return false; } return true; }) .map((file) => { const target = (0, path_1.resolve)(root, file.path); const name = (0, path_1.basename)(target); const dir = (0, path_1.dirname)(target); if (target !== rootPackage) { return (0, io_1.createFileIfNotExists)(dir, name, file.content, forceOverwrite); } else { return (0, io_1.updateExistingJson)(dir, name, JSON.parse(file.content.toString('utf8'))); } })); } function getTemplatePackageName(type, template) { if (template.indexOf('/') === -1 && !template.startsWith('.')) { return `@smapiot/${type}-template-${template}`; } return template; } function getPiralScaffoldData(language, root, app, packageName, variables) { const src = (0, path_1.dirname)((0, path_1.join)(root, app)); return { ...variables, root, src, language, packageName, reactVersion: parseInt(variables.reactVersion) || 18, reactRouterVersion: parseInt(variables.reactRouterVersion) || 5, }; } async function scaffoldPiralSourceFiles(template, registry, data, forceOverwrite) { const { src, root } = data; const templatePackageName = getTemplatePackageName('piral', template); await (0, io_1.createDirectory)(src); const files = await getTemplateFiles(templatePackageName, registry, root, data, forceOverwrite); await writeFiles(root, files, forceOverwrite); } function getPiletScaffoldData(language, root, sourceName, variables) { const src = (0, path_1.join)(root, 'src'); return { ...variables, root, src, language, sourceName, }; } async function scaffoldPiletSourceFiles(template, registry, data, forceOverwrite) { const { src, root } = data; const templatePackageName = getTemplatePackageName('pilet', template); await (0, io_1.createDirectory)(src); const files = await getTemplateFiles(templatePackageName, registry, root, data, forceOverwrite); await writeFiles(root, files, forceOverwrite); } //# sourceMappingURL=scaffold.js.map