UNPKG

@foal/cli

Version:

CLI tool for FoalTS

77 lines (76 loc) 2.69 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.runScript = runScript; exports.execScript = execScript; // std const fs_1 = require("fs"); const crypto_1 = require("crypto"); // 3p const ajv_1 = require("ajv"); const ajv_formats_1 = require("ajv-formats"); // FoalTS const get_command_line_arguments_util_1 = require("./get-command-line-arguments.util"); // TODO: test this function async function runScript({ name }, argv) { try { const { Logger, ServiceManager } = require(require.resolve('@foal/core', { paths: [process.cwd()], })); const services = new ServiceManager(); const logger = services.get(Logger); logger.initLogContext(() => execScript({ name }, argv, services, logger).catch(error => console.error(error))); } catch (error) { if (error.code === 'MODULE_NOT_FOUND') { console.error('@foal/core module not found. Are you sure you are in a FoalTS project?'); return; } throw error; } } async function execScript({ name }, argv, services, logger) { logger.addLogContext({ scriptId: (0, crypto_1.randomUUID)(), scriptName: name }); if (!(0, fs_1.existsSync)(`build/scripts/${name}.js`)) { if ((0, fs_1.existsSync)(`src/scripts/${name}.ts`)) { logger.error(`Script "${name}" not found in build/scripts/ but found in src/scripts/. Did you forget to build it?`); } else { logger.error(`Script "${name}" not found.`); } return; } const { main, schema } = require(require.resolve(`./build/scripts/${name}`, { paths: [process.cwd()], })); if (!main) { logger.error(`No "main" function found in script "${name}".`); return; } const args = (0, get_command_line_arguments_util_1.getCommandLineArguments)(argv); if (schema) { const ajv = new ajv_1.default({ useDefaults: true, allErrors: true }); (0, ajv_formats_1.default)(ajv); if (!ajv.validate(schema, args)) { ajv.errors.forEach(err => { if (err.instancePath) { logger.error(`Script argument "${err.instancePath.split('/')[1]}" ${err.message}.`); } else { logger.error(`Script arguments ${err.message}.`); } }); return; } } try { await main(args, services, logger); logger.info(`Script "${name}" completed.`); } catch (error) { logger.error(error.message, { error }); logger.error(`Script "${name}" failed.`); } }