/** * Node.js native test runner lens (node:test) * * Supports parsing output from: * - node --test (default spec reporter) * - node --test --test-reporter tap (TAP format) * - tsx --test (TypeScript support) */ import { BaseLens } from '../base/BaseLens.js'; import { LensResult, ExecuteResult } from '../../types/index.js'; /** * Test failure info */ interface NodeTestFailure { file: string; testName: string; message: string; line?: number; column?: number; expected?: string; actual?: string; } /** * Coverage info for a single file */ interface NodeCoverageFile { file: string; lineCoverage: number; branchCoverage: number; functionCoverage: number; uncoveredLines: string; } /** * Parsed Node test output */ interface NodeTestParsedOutput { passed: number; failed: number; skipped: number; cancelled: number; todo: number; totalTests: number; totalSuites: number; duration: number; testFiles: string[]; failures: NodeTestFailure[]; isTapFormat: boolean; coverageFiles: NodeCoverageFile[]; totalLineCoverage: number; totalBranchCoverage: number; totalFunctionCoverage: number; } /** * Lens for Node.js native test runner */ export declare class NodeTestLens extends BaseLens { readonly name = "node-test"; readonly description = "Node.js native test runner"; readonly languages: string[]; readonly supportedTools: string[]; readonly requirements: import("../..").LensRequirements; private pathMapper?; /** * Calculate quality score (0-100) from Node test results * * Scoring algorithm: * - Base score from test pass rate: (passedTests / totalTests) × 100 * - If coverage available: weighted 70% pass rate + 30% line coverage * - Penalty for skipped tests: -0.5 points per skipped test (relative to total) * - Floor at 0, cap at 100 */ static calculateQualityScore(result: LensResult): number; /** * Parse Node test output (supports both spec and TAP formats) */ parse(output: ExecuteResult): NodeTestParsedOutput; /** * Parse coverage report from Node.js test output * * Format (spec mode): * ℹ start of coverage report * ℹ ---------------------------------------------------------- * ℹ file | line % | branch % | funcs % | uncovered lines * ℹ ---------------------------------------------------------- * ℹ src | | | | * ℹ math.mjs | 68.75 | 100.00 | 50.00 | 10-11 14-16 * ℹ ---------------------------------------------------------- * ℹ all files | 68.75 | 100.00 | 50.00 | * ℹ ---------------------------------------------------------- * ℹ end of coverage report * * Format (TAP mode): * # start of coverage report * # ------------------------------------------------------ * # file | line % | branch % | funcs % | uncovered lines * # ------------------------------------------------------ * # src | | | | * # math.mjs | 68.75 | 100.00 | 50.00 | 10-11 14-16 * # ------------------------------------------------------ * # all files | 68.75 | 100.00 | 50.00 | * # ------------------------------------------------------ * # end of coverage report */ private parseCoverage; /** * Parse TAP format output * * TAP version 13 * # Subtest: test name * ok 1 - test name * not ok 2 - failing test * --- * duration_ms: 0.5 * ... * 1..N * # tests N * # pass X * # fail Y */ private parseTapOutput; /** * Parse YAML block from TAP failure */ private parseYamlFailure; /** * Parse spec format output (default Node.js test reporter) * * ✔ passing test (0.5ms) * ✖ failing test (1.2ms) * ﹣ skipped test (0.1ms) # reason * ℹ tests 10 * ℹ pass 8 * ℹ fail 2 */ private parseSpecOutput; /** * Format Node test results to standard format */ format(parsed: NodeTestParsedOutput): LensResult; /** * Get or create path mapper */ private getPathMapper; } export {}; //# sourceMappingURL=NodeTestLens.d.ts.map