UNPKG

@n1k1t/unit-generator

Version:

Coverage based unit tests AI generator

59 lines 2.39 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Bash = exports.BashExecError = void 0; const string_argv_1 = __importDefault(require("string-argv")); const child_process_1 = require("child_process"); class BashExecError extends Error { constructor(cmd, code, stderr, source) { super(source?.message ?? stderr.split('\n').find((line) => line.toLowerCase().includes('error')) ?? 'Bash execution error'); this.cmd = cmd; this.code = code; this.stderr = stderr; this.source = source; } } exports.BashExecError = BashExecError; class Bash { constructor(provided) { this.provided = provided; } /** Executes bash commands (resolves `stderr` into `{ status: 'ERROR', error: BashExecError(...) }`) */ async exec(cmd) { const options = { cwd: this.provided?.cwd ?? process.cwd(), env: this.provided?.env ?? process.env, stdio: ['ignore', 'pipe', 'pipe'], }; const args = (0, string_argv_1.default)(this.provided?.argv0 ? `${this.provided.argv0} ${cmd}` : cmd); const spawned = (0, child_process_1.spawn)(args[0], args.slice(1), options); const stdout = []; const stderr = []; return new Promise((resolve) => { spawned.once('error', (error) => resolve({ status: 'ERROR', error: new BashExecError(args.join(' '), -1, (stderr.length ? stderr : stdout).join('').trim(), error), })); spawned.once('exit', (code) => !code ? resolve({ status: 'OK', stdout: stdout.join('') }) : resolve({ status: 'ERROR', error: new BashExecError(args.join(' '), code, (stderr.length ? stderr : stdout).join('').trim()), })); spawned.stderr?.on('data', (chunk) => stderr.push(chunk.toString('utf8'))); spawned.stdout?.on('data', (chunk) => stdout.push(chunk.toString('utf8'))); }); } static build(provided) { return new Bash(provided); } } exports.Bash = Bash; //# sourceMappingURL=bash.js.map