piral-cli
Version:
The standard CLI for creating and building a Piral instance or a Pilet.
110 lines • 6.06 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.newPiletDefaults = void 0;
exports.newPilet = newPilet;
const path_1 = require("path");
const types_1 = require("../types");
const common_1 = require("../common");
exports.newPiletDefaults = {
target: '.',
registry: common_1.config.registry,
source: undefined,
forceOverwrite: common_1.ForceOverwrite.no,
language: common_1.config.language,
install: true,
template: undefined,
logLevel: types_1.LogLevels.info,
npmClient: undefined,
bundlerName: 'none',
variables: {},
name: undefined,
cert: undefined,
allowSelfSigned: common_1.config.allowSelfSigned,
};
async function newPilet(baseDir = process.cwd(), options = {}) {
const { target = exports.newPiletDefaults.target, registry = exports.newPiletDefaults.registry, source = exports.newPiletDefaults.source, forceOverwrite = exports.newPiletDefaults.forceOverwrite, language = exports.newPiletDefaults.language, install = exports.newPiletDefaults.install, template = exports.newPiletDefaults.template, logLevel = exports.newPiletDefaults.logLevel, bundlerName = exports.newPiletDefaults.bundlerName, variables = exports.newPiletDefaults.variables, npmClient: defaultNpmClient = exports.newPiletDefaults.npmClient, name = exports.newPiletDefaults.name, cert = exports.newPiletDefaults.cert, allowSelfSigned = exports.newPiletDefaults.allowSelfSigned, } = options;
(0, common_1.ensure)('baseDir', baseDir, 'string');
(0, common_1.ensure)('source', source, 'string');
(0, common_1.ensure)('target', target, 'string');
(0, common_1.ensure)('template', template, ['string', 'undefined']);
(0, common_1.ensure)('variables', variables, 'object');
const fullBase = (0, path_1.resolve)(process.cwd(), baseDir);
const root = (0, path_1.resolve)(fullBase, target);
(0, common_1.setLogLevel)(logLevel);
(0, common_1.progress)('Preparing source and target ...');
const success = await (0, common_1.createDirectory)(root);
if (success) {
const npmClient = await (0, common_1.determineNpmClient)(root, defaultNpmClient);
const ca = await (0, common_1.getCertificate)(cert);
const agent = (0, common_1.getAgent)({ ca, allowSelfSigned });
const projectName = name || (0, path_1.basename)(root);
(0, common_1.progress)(`Scaffolding new pilet in %s ...`, root);
await (0, common_1.createFileIfNotExists)(root, 'package.json', JSON.stringify({
name: projectName,
version: '1.0.0',
description: '',
keywords: ['pilet'],
dependencies: {},
devDependencies: {},
peerDependencies: {},
scripts: {},
main: 'dist/index.js',
types: 'dist/index.d.ts',
files: ['dist'],
}, undefined, 2));
await (0, common_1.initNpmProject)(npmClient, projectName, root);
if (registry !== exports.newPiletDefaults.registry) {
(0, common_1.progress)(`Setting up npm registry (%s) ...`, registry);
await (0, common_1.createFileIfNotExists)(root, '.npmrc', `registry=${registry}\n`, forceOverwrite);
}
await (0, common_1.createFileIfNotExists)(root, common_1.piletJson, JSON.stringify({
$schema: common_1.piletJsonSchemaUrl,
schemaVersion: common_1.defaultSchemaVersion,
importmapVersions: common_1.defaultImportmapVersions,
remoteTypesTarget: common_1.defaultRemoteTypesTarget,
piralInstances: {},
}, undefined, 2));
const sourceName = source || `empty-piral@${common_1.cliVersion}`;
const packageName = await (0, common_1.installPiralInstance)(sourceName, fullBase, root, npmClient, agent, true);
const piralInfo = await (0, common_1.readPiralPackage)(root, packageName);
const isEmulator = (0, common_1.checkAppShellPackage)(piralInfo);
const { preScaffold, postScaffold, files, template: preSelectedTemplate } = (0, common_1.getPiletsInfo)(piralInfo);
if (preScaffold) {
(0, common_1.progress)(`Running preScaffold script ...`);
(0, common_1.log)('generalDebug_0003', `Run: ${preScaffold}`);
await (0, common_1.runScript)(preScaffold, root);
}
(0, common_1.progress)(`Taking care of templating ...`);
const data = (0, common_1.getPiletScaffoldData)(language, root, packageName, variables);
await (0, common_1.patchPiletPackage)(root, piralInfo, isEmulator, npmClient, {
language,
bundler: bundlerName,
});
const chosenTemplate = template || preSelectedTemplate || 'default';
await (0, common_1.scaffoldPiletSourceFiles)(chosenTemplate, registry, data, forceOverwrite);
if (isEmulator) {
// in the emulator case we get the files (and files_once) from the contained tarballs
await (0, common_1.copyPiralFiles)(root, packageName, piralInfo, common_1.ForceOverwrite.yes, data);
}
else {
// otherwise, we perform the same action as in the emulator creation
// just with a different target; not a created directory, but the root
const packageRoot = (0, common_1.getPiralPath)(root, packageName);
await (0, common_1.copyScaffoldingFiles)(packageRoot, root, files, piralInfo, data);
}
if (install) {
(0, common_1.progress)(`Installing dependencies ...`);
await (0, common_1.installNpmDependencies)(npmClient, root);
}
if (postScaffold) {
(0, common_1.progress)(`Running postScaffold script ...`);
(0, common_1.log)('generalDebug_0003', `Run: ${postScaffold}`);
await (0, common_1.runScript)(postScaffold, root);
}
(0, common_1.logDone)(`Pilet scaffolded successfully!`);
}
else {
(0, common_1.fail)('cannotCreateDirectory_0044');
}
}
//# sourceMappingURL=new-pilet.js.map