UNPKG

@n1k1t/unit-generator

Version:

Coverage based unit tests AI generator

90 lines 4.23 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.buildRenderer = exports.extractIgnoredPaths = exports.extractCoberturaItems = void 0; const get_cursor_position_1 = __importDefault(require("get-cursor-position")); const minimatch_1 = __importDefault(require("minimatch")); const path_1 = __importDefault(require("path")); const promises_1 = __importDefault(require("fs/promises")); const fast_glob_1 = __importDefault(require("fast-glob")); const lodash_1 = __importDefault(require("lodash")); const promises_2 = require("readline/promises"); const models_1 = require("../models"); const extractCoberturaItems = async (location, options) => { const target = options?.target ?? 1; const cwd = options?.cwd ?? process.cwd(); const paths = (options?.paths?.map((nested) => path_1.default.join(cwd, nested)) ?? []).map((nested) => { const parsed = path_1.default.parse(nested); if (!parsed.ext.length && !parsed.name.endsWith('*')) { return path_1.default.join(nested, '*'); } if (parsed.ext.length && parsed.name.endsWith('.spec')) { return path_1.default.join(parsed.dir, `${parsed.name.replace('.spec', '')}${parsed.ext}`); } return nested; }); const cobertura = await models_1.Cobertura.build(location); const project = await models_1.Project.build({ cwd }); const ignore = project.sources.ignore.concat(options?.ignore ?? []); const map = new Map(cobertura.items.map((item) => [item.path, item])); const found = paths.length ? await (0, fast_glob_1.default)(paths, { cwd, ignore, onlyFiles: true }) : cobertura.items.map((item) => item.path); const filtered = found .map((nested) => { const item = map.get(nested) ?? models_1.CoberturaItem.build(nested); return item.assign({ path: path_1.default.relative(cwd, item.path) }); }) .filter((item) => { const parsed = path_1.default.parse(item.path); if (item.rate >= target) { return false; } if (parsed.ext !== '.ts' && parsed.ext !== '.js') { return false; } if (parsed.name.endsWith('.spec')) { return false; } if (options?.ignore?.length && options.ignore.some((pattern) => (0, minimatch_1.default)(item.path, pattern))) { return false; } if (ignore.some((pattern) => (0, minimatch_1.default)(item.path, pattern))) { return false; } return true; }); return lodash_1.default.sortBy(filtered, ['path']).slice(0, options?.limit ?? Infinity); }; exports.extractCoberturaItems = extractCoberturaItems; const extractIgnoredPaths = async (cwd) => { const raw = await promises_1.default.readFile(path_1.default.join(cwd, '.unitignore'), 'utf8').catch(() => null); return raw?.split('\n').map((segment) => segment.trim()).filter(Boolean) ?? []; }; exports.extractIgnoredPaths = extractIgnoredPaths; const buildRenderer = () => { const terminal = new promises_2.Readline(process.stdout); const cursor = get_cursor_position_1.default.sync(); return (assistants) => { terminal.cursorTo(0, cursor.row - 1).clearScreenDown().commit(); console.log(`model: ${assistants[0]?.context.provider.model}`); console.log(''); console.table(assistants.map((assistant) => ({ file: assistant.source.code.path, rate: assistant.source.cobertura.rate, target: assistant.source.target, iteration: assistant.steps.length, strategy: assistant.state.strategy, action: assistant.is(['COMPLETED']) ? '✓' : assistant.state.action ? `${assistant.state.action.status === 'OK' ? '✓' : '✗'} ${assistant.state.action.message}` : '⏱', spent: Number((assistant.calculateTimeSpent() / 1000).toFixed(3)), }))); }; }; exports.buildRenderer = buildRenderer; //# sourceMappingURL=utils.js.map