mono/packages/commons/dist/lib/run.js
2026-03-19 17:40:06 +01:00

68 lines
6.8 KiB
JavaScript

import { z } from 'zod';
import * as fs from 'fs';
import * as child_process from 'child_process';
import * as path from 'path';
import { sync as read } from '@polymech/fs/read';
import { sync as exists } from '@polymech/fs/exists';
import { logger as log } from '../logger.js';
import { toYargs } from '@polymech/commons';
export const zodSchema = () => z.object({
config: z.string().default('default'),
dry: z.boolean().default(false),
list: z.boolean().default(false),
projectPath: z.string().default(process.cwd()),
logFilePath: z.string().default(path.join(process.cwd(), 'log-configuration.json')),
}).describe('RunDebugSchema');
export const run = async (options, argv) => {
options = { ...options, ...argv };
const vscodeDir = path.join(options.projectPath, '.vscode');
const launchFile = path.join(vscodeDir, 'launch.json');
if (!exists(launchFile)) {
log.error('No launch.json found in the .vscode directory.');
return false;
}
if (!exists(options.projectPath)) {
log.error('Invalid project path:', options.projectPath);
return false;
}
const launchConfig = read(launchFile, 'json');
const config = launchConfig.configurations.find((c) => c.name === options.config);
if (!config) {
log.error(`Debug configuration with name "${options.config}" not found.`, launchConfig.configurations.map((c) => c.name), argv);
return false;
}
let command = config.program;
if (command === '${workspaceFolder}\\src\\main.ts' || command === '${workspaceFolder}\\src\\main.js') {
command = 'node.exe ./main.js';
}
if (!command) {
log.error('The configuration does not contain a "program" to execute.');
return false;
}
const args = config.args || [];
const exe_options = { cwd: options.projectPath };
log.debug('Executing debug configuration:', command, exe_options);
if (options.list) {
log.info('Listing the debug configuration:', launchConfig.configurations.map((c) => c.name));
return true;
}
if (options.dry) {
log.info('Dry run of the debug configuration:', config);
return true;
}
try {
const ret = child_process.execFileSync(command, args, {
cwd: options.projectPath,
stdio: 'inherit',
shell: true
});
}
catch (err) {
const logData = `${new Date().toISOString()} ERROR: ${err}`;
fs.appendFileSync(options.logFilePath, logData, 'utf-8');
log.error('Failed to execute the debug configuration:', err);
return false;
}
};
export const yargsOptions = (yargs) => toYargs(yargs, zodSchema());
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9ydW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQTtBQUV2QixPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQTtBQUN4QixPQUFPLEtBQUssYUFBYSxNQUFNLGVBQWUsQ0FBQTtBQUM5QyxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQTtBQUU1QixPQUFPLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQ2hELE9BQU8sRUFBRSxJQUFJLElBQUksTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDcEQsT0FBTyxFQUFFLE1BQU0sSUFBSSxHQUFHLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDNUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBTzNDLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3BDLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztJQUNyQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDL0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQ2hDLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUM5QyxXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO0NBQ3RGLENBQUMs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