@foal/cli
Version:
CLI tool for FoalTS
80 lines (79 loc) • 2.94 kB
JavaScript
;
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;