UNPKG

@foal/cli

Version:

CLI tool for FoalTS

80 lines (79 loc) 2.94 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.RunScriptCommandService = void 0; // std const fs_1 = require("fs"); const crypto_1 = require("crypto"); // 3p const ajv_1 = require("ajv"); const ajv_formats_1 = require("ajv-formats"); class RunScriptCommandService { utilService; constructor(utilService) { this.utilService = utilService; } async run(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(() => this.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 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 = this.utilService.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.`); } } } exports.RunScriptCommandService = RunScriptCommandService;