UNPKG

piral-cli

Version:

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

172 lines • 7.69 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.buildPiletDefaults = void 0; exports.buildPilet = buildPilet; const path_1 = require("path"); const types_1 = require("../types"); const bundler_1 = require("../bundler"); const common_1 = require("../common"); function createMetadata(outDir, outFile, pilets, publicPath) { return (0, common_1.writeJson)(outDir, outFile, pilets.map((p) => ({ name: p.package.name, version: p.package.version, link: `${publicPath}${p.id}/${p.outFile}`, ...(0, common_1.getPiletSpecMeta)(p.path, `${publicPath}${p.id}/`), }))); } function copyPilets(outDir, pilets) { return Promise.all(pilets.map(async (p) => { const files = await (0, common_1.getFileNames)(p.outDir); for (const file of files) { await (0, common_1.copy)((0, path_1.resolve)(p.outDir, file), (0, path_1.resolve)(outDir, p.id, file), common_1.ForceOverwrite.yes); } })); } exports.buildPiletDefaults = { entry: './src/index', target: './dist/index.js', publicUrl: '/', minify: true, logLevel: types_1.LogLevels.info, type: 'default', fresh: false, sourceMaps: true, watch: false, contentHash: true, optimizeModules: false, schemaVersion: undefined, concurrency: common_1.cpuCount, declaration: true, }; async function buildPilet(baseDir = process.cwd(), options = {}) { const { entry = exports.buildPiletDefaults.entry, target = exports.buildPiletDefaults.target, publicUrl: originalPublicUrl = exports.buildPiletDefaults.publicUrl, logLevel = exports.buildPiletDefaults.logLevel, minify = exports.buildPiletDefaults.minify, sourceMaps = exports.buildPiletDefaults.sourceMaps, watch = exports.buildPiletDefaults.watch, contentHash = exports.buildPiletDefaults.contentHash, fresh = exports.buildPiletDefaults.fresh, concurrency = exports.buildPiletDefaults.concurrency, optimizeModules = exports.buildPiletDefaults.optimizeModules, schemaVersion: originalSchemaVersion = exports.buildPiletDefaults.schemaVersion, declaration = exports.buildPiletDefaults.declaration, type = exports.buildPiletDefaults.type, _ = {}, hooks = {}, bundlerName, app, } = options; (0, common_1.ensure)('baseDir', baseDir, 'string'); (0, common_1.ensure)('publicUrl', originalPublicUrl, 'string'); (0, common_1.ensure)('entry', entry, 'string'); (0, common_1.ensure)('_', _, 'object'); (0, common_1.ensure)('hooks', hooks, 'object'); (0, common_1.ensure)('target', target, 'string'); const publicUrl = (0, common_1.normalizePublicUrl)(originalPublicUrl); const fullBase = (0, path_1.resolve)(process.cwd(), baseDir); const entryList = Array.isArray(entry) ? entry : [entry]; const manifest = 'pilets.json'; (0, common_1.setLogLevel)(logLevel); await hooks.onBegin?.({ options, fullBase }); (0, common_1.progress)('Reading configuration ...'); const allEntries = await (0, common_1.matchAnyPilet)(fullBase, entryList); (0, common_1.log)('generalDebug_0003', `Found the following entries: ${allEntries.join(', ')}`); if (allEntries.length === 0) { (0, common_1.fail)('entryFileMissing_0077'); } const pilets = await (0, common_1.concurrentWorkers)(allEntries, concurrency, async (entryModule) => { const { piletPackage, root, outDir, apps, outFile, dest } = await (0, common_1.triggerBuildPilet)({ _, app, bundlerName, contentHash, entryModule, fresh, logLevel, minify, optimizeModules, originalSchemaVersion, sourceMaps, target, watch, hooks, declaration, }); (0, common_1.logDone)(`Pilet "${piletPackage.name}" built successfully!`); return { id: piletPackage.name.replace(/[^a-zA-Z0-9\-]/gi, ''), root, apps, outDir, outFile, path: dest, package: piletPackage, }; }); if (type === 'standalone') { const distDir = (0, path_1.dirname)((0, path_1.resolve)(fullBase, target)); const outDir = (0, path_1.resolve)(distDir, 'standalone'); const outFile = 'index.html'; const { apps, root } = pilets[0]; if (apps.length === 0) { (0, common_1.fail)('appInstancesNotGiven_0012'); } const { appPackage, appFile } = apps[0]; const piralInstances = [appPackage.name]; const isEmulator = (0, common_1.checkAppShellPackage)(appPackage); (0, common_1.logInfo)('Building standalone solution ...'); await (0, common_1.removeDirectory)(outDir); (0, common_1.progress)('Copying files ...'); await copyPilets(outDir, pilets); await createMetadata(outDir, manifest, pilets, publicUrl); if (isEmulator) { // in case of an emulator assets are not "seen" by the bundler, so we // just copy overthing over - this should work in most cases. await (0, common_1.copy)((0, path_1.dirname)(appFile), outDir, common_1.ForceOverwrite.yes); (0, common_1.progress)('Optimizing app shell ...'); // we don't need to care about externals or other things that are already // part of the emulator await (0, bundler_1.callPiralBuild)({ root, piralInstances, emulator: false, standalone: true, optimizeModules: false, sourceMaps, watch: false, contentHash, minify, externals: [], publicUrl, outFile, outDir, entryFiles: appFile, logLevel, ignored: [], _, }, bundlerName); } else { // in this case we can just do the same steps as if const { ignored, externals } = await (0, common_1.retrievePiletsInfo)(appFile); await (0, bundler_1.callPiralBuild)({ root, piralInstances, emulator: false, standalone: true, optimizeModules: false, sourceMaps, watch: false, contentHash, minify, externals: (0, common_1.flattenExternals)(externals), publicUrl, outFile, outDir, entryFiles: appFile, logLevel, ignored, _, }, bundlerName); } const html = await (0, common_1.readText)(outDir, outFile); const newHtml = html.replace('<script', // place the assignment before the first seen script `<script>window['dbg:pilet-api']=${JSON.stringify(publicUrl + manifest)};</script><script`); await (0, common_1.writeText)(outDir, outFile, newHtml); (0, common_1.logDone)(`Standalone app available at "${outDir}"!`); } else if (type === 'manifest') { const outDir = (0, path_1.dirname)((0, path_1.resolve)(fullBase, target)); (0, common_1.logInfo)('Building pilet manifest ...'); (0, common_1.progress)('Copying files ...'); await copyPilets(outDir, pilets); await createMetadata(outDir, manifest, pilets, publicUrl); (0, common_1.logDone)(`Manifest available at "${outDir}/${manifest}"!`); } await hooks.onEnd?.({}); } //# sourceMappingURL=build-pilet.js.map