piral-cli
Version:
The standard CLI for creating and building a Piral instance or a Pilet.
86 lines • 4.25 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.runEmulatorPiralDefaults = void 0;
exports.runEmulatorPiral = runEmulatorPiral;
const os_1 = require("os");
const fs_1 = require("fs");
const path_1 = require("path");
const kras_1 = require("kras");
const types_1 = require("../types");
const common_1 = require("../common");
exports.runEmulatorPiralDefaults = {
logLevel: types_1.LogLevels.info,
open: common_1.config.openBrowser,
port: common_1.config.port,
strictPort: common_1.config.strictPort,
registry: common_1.config.registry,
npmClient: undefined,
cert: undefined,
allowSelfSigned: common_1.config.allowSelfSigned,
};
function createTempDir() {
const root = (0, path_1.join)((0, os_1.tmpdir)(), 'piral-cli-');
return new Promise((resolve, reject) => (0, fs_1.mkdtemp)(root, (err, dir) => {
if (err) {
reject(err);
}
else {
resolve(dir);
}
}));
}
async function runEmulatorPiral(baseDir = process.cwd(), options = {}) {
const { open = exports.runEmulatorPiralDefaults.open, port: originalPort = exports.runEmulatorPiralDefaults.port, strictPort = exports.runEmulatorPiralDefaults.strictPort, logLevel = exports.runEmulatorPiralDefaults.logLevel, npmClient: defaultNpmClient = exports.runEmulatorPiralDefaults.npmClient, registry = exports.runEmulatorPiralDefaults.registry, cert = exports.runEmulatorPiralDefaults.cert, allowSelfSigned = exports.runEmulatorPiralDefaults.allowSelfSigned, app, feed, } = options;
(0, common_1.ensure)('baseDir', baseDir, 'string');
(0, common_1.ensure)('app', app, 'string');
const publicUrl = '/';
const api = common_1.config.piletApi;
const fullBase = (0, path_1.resolve)(process.cwd(), baseDir);
const baseMocks = (0, path_1.resolve)(fullBase, 'mocks');
(0, common_1.setLogLevel)(logLevel);
(0, common_1.progress)('Reading configuration ...');
process.stderr?.setMaxListeners(16);
process.stdout?.setMaxListeners(16);
process.stdin?.setMaxListeners(16);
const appRoot = await createTempDir();
const ca = await (0, common_1.getCertificate)(cert);
const agent = (0, common_1.getAgent)({ ca, allowSelfSigned });
if (registry !== exports.runEmulatorPiralDefaults.registry) {
(0, common_1.progress)(`Setting up npm registry (%s) ...`, registry);
await (0, common_1.createFileIfNotExists)(appRoot, '.npmrc', `registry=${registry}
always-auth=true`, common_1.ForceOverwrite.yes);
}
const npmClient = await (0, common_1.determineNpmClient)(appRoot, defaultNpmClient);
const packageName = await (0, common_1.installPiralInstance)(app, fullBase, appRoot, npmClient, agent);
const piral = await (0, common_1.findPiralInstance)(packageName, appRoot, { port: originalPort }, agent);
const port = await (0, common_1.getAvailablePort)(piral.port, strictPort);
const krasBaseConfig = (0, path_1.resolve)(fullBase, kras_1.krasrc);
const krasRootConfig = (0, path_1.resolve)(appRoot, kras_1.krasrc);
const initial = (0, common_1.createInitialKrasConfig)(baseMocks, [], { [api]: '' }, feed);
const required = {
injectors: {
piral: {
active: false,
},
pilet: {
active: true,
pilets: [],
app: (0, path_1.dirname)(piral.app),
publicUrl,
handle: [publicUrl, api],
api,
},
},
};
const configs = [krasBaseConfig, krasRootConfig];
const krasConfig = (0, kras_1.readKrasConfig)({ port, initial, required }, ...configs);
(0, common_1.log)('generalVerbose_0004', `Using kras with configuration: ${JSON.stringify(krasConfig, undefined, 2)}`);
const krasServer = (0, kras_1.buildKrasWithCli)(krasConfig);
krasServer.setMaxListeners(16);
krasServer.removeAllListeners('open');
krasServer.on('open', (0, common_1.notifyServerOnline)(publicUrl, krasConfig.api));
await krasServer.start();
(0, common_1.openBrowser)(open, port, publicUrl, !!krasConfig.ssl);
await new Promise((resolve) => krasServer.on('close', resolve));
}
//# sourceMappingURL=run-emulator-piral.js.map