68 lines
6.8 KiB
JavaScript
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')),
|
|
}, { description: '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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9ydW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQTtBQUV2QixPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQTtBQUN4QixPQUFPLEtBQUssYUFBYSxNQUFNLGVBQWUsQ0FBQTtBQUM5QyxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQTtBQUU1QixPQUFPLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQ2hELE9BQU8sRUFBRSxJQUFJLElBQUksTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDcEQsT0FBTyxFQUFFLE1BQU0sSUFBSSxHQUFHLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDNUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBTzNDLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3BDLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztJQUNyQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDL0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQ2hDLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUM5QyxXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO0NBQ3RGLEVBQUUs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
|