UNPKG

@n1k1t/unit-generator

Version:

Coverage based unit tests AI generator

87 lines 4.1 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const get_cursor_position_1 = __importDefault(require("get-cursor-position")); const path_1 = __importDefault(require("path")); const promises_1 = __importDefault(require("fs/promises")); const promises_2 = require("readline/promises"); const child_process_1 = require("child_process"); const utils_1 = require("../utils"); const env_1 = __importDefault(require("../env")); exports.default = async (parameters = {}) => { const intervals = []; const timestamp = Date.now(); const cwd = process.cwd(); const iterations = parameters.iterations ?? Number(env_1.default.iterations); const target = parameters.target ?? Number(env_1.default.target); const terminal = new promises_2.Readline(process.stdout); const cursor = get_cursor_position_1.default.sync(); const ignore = await (0, utils_1.extractIgnorePaths)(cwd); const extracted = await (0, utils_1.extractFilesCoverage)(path_1.default.join(cwd, env_1.default.cobertura), { ignore, target, paths: parameters.paths, limit: parameters.limit, all: parameters.all, }); const processed = extracted.map((item) => { const parsed = path_1.default.parse(item.file); const temp = path_1.default.join(path_1.default.relative(cwd, path_1.default.join(__dirname, '../')), 'generated', item.id); return Object.assign(item, { target, temp, spec: path_1.default.join(parsed.dir, `${parsed.name}.spec${parsed.ext}`), cobertura: path_1.default.join(temp, 'cobertura-coverage.xml'), status: (0, utils_1.cast)('PENDING'), spent: 0, }); }); if (!parameters.verbose) { intervals.push(setInterval(() => (0, utils_1.actualizeProcessedCoverageRate)(cwd, processed), 1000), setInterval(() => { terminal.cursorTo(0, cursor.row - 1).clearScreenDown().commit(); (0, utils_1.renderProcessedCoverage)(timestamp, processed); }, 100)); } await Promise.all(processed.map(async (item) => { const jest = [ `${env_1.default.command} -- ${item.spec}`, '--coverage --forceExit --silent', `--coverageDirectory=${item.temp}`, `--collectCoverageFrom=${item.file}`, ].join(' '); if (!(await promises_1.default.stat(item.spec).catch(() => null))) { await promises_1.default.writeFile(item.spec, Buffer.from([]), 'utf8'); } if (!(await promises_1.default.stat(item.temp).catch(() => null))) { await promises_1.default.mkdir(item.temp); } const spawned = (0, child_process_1.spawn)('keploy', [ 'gen', `--model="${parameters.model ?? env_1.default.model}"`, `--test-command="${jest}"`, `--test-file-path="${item.spec}"`, `--max-iterations="${iterations}"`, `--source-file-path="${item.file}"`, `--expected-coverage="${item.target * 100}"`, `--coverage-report-path="${item.cobertura}"`, ], { shell: true, env: Object.assign(process.env, { API_KEY: env_1.default.token }), }); if (parameters.verbose) { spawned.stdout.on('data', (chunk) => process.stdout.write(chunk)); } await new Promise((resolve) => spawned.once('exit', (code) => { item.status = code === 0 ? 'DONE' : 'ERROR'; resolve(); })); await (0, utils_1.actualizeProcessedCoverageRate)(cwd, [item], { force: true }); await promises_1.default.rm(item.temp, { recursive: true, force: true }); })); intervals.forEach((interval) => interval.unref()); terminal.cursorTo(0, cursor.row - 1).clearScreenDown().commit(); (0, utils_1.renderProcessedCoverage)(timestamp, processed); }; //# sourceMappingURL=generate.js.map