@n1k1t/unit-generator
Version:
Coverage based unit tests AI generator
59 lines • 2.39 kB
JavaScript
;
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