@gnapi/cotester 1.2.4 → 1.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/analyzer.d.ts +5 -0
- package/dist/analyzer.js +7 -2
- package/dist/analyzer.js.map +1 -1
- package/dist/auditLogger.d.ts +46 -0
- package/dist/auditLogger.js +107 -0
- package/dist/auditLogger.js.map +1 -0
- package/dist/checker.d.ts +3 -1
- package/dist/checker.js +1 -0
- package/dist/checker.js.map +1 -1
- package/dist/cli.js +39 -0
- package/dist/cli.js.map +1 -1
- package/dist/configManager.d.ts +27 -0
- package/dist/configManager.js +87 -17
- package/dist/configManager.js.map +1 -1
- package/dist/fileWorker.js +6 -1
- package/dist/fileWorker.js.map +1 -1
- package/dist/frameworkAdapter.d.ts +51 -0
- package/dist/frameworkAdapter.js +77 -0
- package/dist/frameworkAdapter.js.map +1 -0
- package/dist/generator.d.ts +24 -1
- package/dist/generator.js +167 -69
- package/dist/generator.js.map +1 -1
- package/dist/hooksInstaller.d.ts +1 -0
- package/dist/hooksInstaller.js +246 -0
- package/dist/hooksInstaller.js.map +1 -0
- package/dist/importRepairer.d.ts +22 -0
- package/dist/importRepairer.js +226 -0
- package/dist/importRepairer.js.map +1 -0
- package/dist/interfaceShapeResolver.js +8 -3
- package/dist/interfaceShapeResolver.js.map +1 -1
- package/dist/migrator.d.ts +49 -0
- package/dist/migrator.js +335 -0
- package/dist/migrator.js.map +1 -0
- package/dist/mockGenerator.js +25 -1
- package/dist/mockGenerator.js.map +1 -1
- package/dist/reporter.d.ts +10 -0
- package/dist/reporter.js +270 -0
- package/dist/reporter.js.map +1 -0
- package/dist/scenarioEngine.js +4 -1
- package/dist/scenarioEngine.js.map +1 -1
- package/dist/sensitiveValueDetector.d.ts +62 -0
- package/dist/sensitiveValueDetector.js +147 -0
- package/dist/sensitiveValueDetector.js.map +1 -0
- package/dist/sharedMockRegistry.d.ts +27 -0
- package/dist/sharedMockRegistry.js +223 -0
- package/dist/sharedMockRegistry.js.map +1 -0
- package/dist/watcher.js +10 -1
- package/dist/watcher.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Abstracts test-framework-specific syntax so the generator can emit
|
|
3
|
+
* either Jest or Vitest output without conditional logic scattered everywhere.
|
|
4
|
+
*/
|
|
5
|
+
export interface TestFrameworkAdapter {
|
|
6
|
+
/** Top-level import line(s) required by the framework (empty for Jest). */
|
|
7
|
+
frameworkImport(): string;
|
|
8
|
+
/** Produce `jest.mock(...)` / `vi.mock(...)` call for a module. */
|
|
9
|
+
mockModule(importPath: string, importedNames: string[]): string;
|
|
10
|
+
/** Check string used to detect an existing mock in a file. */
|
|
11
|
+
mockModuleCheck(importPath: string): string;
|
|
12
|
+
/** `jest.fn()` / `vi.fn()` */
|
|
13
|
+
mockFn(): string;
|
|
14
|
+
/** `jest.clearAllMocks()` / `vi.clearAllMocks()` */
|
|
15
|
+
clearAllMocks(): string;
|
|
16
|
+
/**
|
|
17
|
+
* Cast expression prefix for setting up a mock return value on a named import.
|
|
18
|
+
* Jest: `(name as jest.Mock)`
|
|
19
|
+
* Vitest: `vi.mocked(name)`
|
|
20
|
+
*/
|
|
21
|
+
mockCast(name: string): string;
|
|
22
|
+
/** `<cast>.mockResolvedValue(val)` */
|
|
23
|
+
mockResolvedValue(name: string, val: string): string;
|
|
24
|
+
/** `<cast>.mockReturnValue(val)` */
|
|
25
|
+
mockReturnValue(name: string, val: string): string;
|
|
26
|
+
/** `jest.fn().mockReturnValue(val)` / `vi.fn().mockReturnValue(val)` — for inline chained stubs */
|
|
27
|
+
mockFnReturnValue(val: string): string;
|
|
28
|
+
}
|
|
29
|
+
export declare class JestAdapter implements TestFrameworkAdapter {
|
|
30
|
+
frameworkImport(): string;
|
|
31
|
+
mockModule(importPath: string, importedNames: string[]): string;
|
|
32
|
+
mockModuleCheck(importPath: string): string;
|
|
33
|
+
mockFn(): string;
|
|
34
|
+
clearAllMocks(): string;
|
|
35
|
+
mockCast(name: string): string;
|
|
36
|
+
mockResolvedValue(name: string, val: string): string;
|
|
37
|
+
mockReturnValue(name: string, val: string): string;
|
|
38
|
+
mockFnReturnValue(val: string): string;
|
|
39
|
+
}
|
|
40
|
+
export declare class VitestAdapter implements TestFrameworkAdapter {
|
|
41
|
+
frameworkImport(): string;
|
|
42
|
+
mockModule(importPath: string, importedNames: string[]): string;
|
|
43
|
+
mockModuleCheck(importPath: string): string;
|
|
44
|
+
mockFn(): string;
|
|
45
|
+
clearAllMocks(): string;
|
|
46
|
+
mockCast(name: string): string;
|
|
47
|
+
mockResolvedValue(name: string, val: string): string;
|
|
48
|
+
mockReturnValue(name: string, val: string): string;
|
|
49
|
+
mockFnReturnValue(val: string): string;
|
|
50
|
+
}
|
|
51
|
+
export declare function createAdapter(framework?: "jest" | "vitest"): TestFrameworkAdapter;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Abstracts test-framework-specific syntax so the generator can emit
|
|
4
|
+
* either Jest or Vitest output without conditional logic scattered everywhere.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.VitestAdapter = exports.JestAdapter = void 0;
|
|
8
|
+
exports.createAdapter = createAdapter;
|
|
9
|
+
// ── Jest adapter ──────────────────────────────────────────────────────────────
|
|
10
|
+
class JestAdapter {
|
|
11
|
+
frameworkImport() {
|
|
12
|
+
return "";
|
|
13
|
+
}
|
|
14
|
+
mockModule(importPath, importedNames) {
|
|
15
|
+
const fns = importedNames.map((n) => ` ${n}: jest.fn(),`).join("\n");
|
|
16
|
+
return `jest.mock('${importPath}', () => ({\n${fns}\n}));`;
|
|
17
|
+
}
|
|
18
|
+
mockModuleCheck(importPath) {
|
|
19
|
+
return `jest.mock('${importPath}'`;
|
|
20
|
+
}
|
|
21
|
+
mockFn() {
|
|
22
|
+
return "jest.fn()";
|
|
23
|
+
}
|
|
24
|
+
clearAllMocks() {
|
|
25
|
+
return "jest.clearAllMocks();";
|
|
26
|
+
}
|
|
27
|
+
mockCast(name) {
|
|
28
|
+
return `(${name} as jest.Mock)`;
|
|
29
|
+
}
|
|
30
|
+
mockResolvedValue(name, val) {
|
|
31
|
+
return `${this.mockCast(name)}.mockResolvedValue(${val});`;
|
|
32
|
+
}
|
|
33
|
+
mockReturnValue(name, val) {
|
|
34
|
+
return `${this.mockCast(name)}.mockReturnValue(${val});`;
|
|
35
|
+
}
|
|
36
|
+
mockFnReturnValue(val) {
|
|
37
|
+
return `jest.fn().mockReturnValue(${val})`;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
exports.JestAdapter = JestAdapter;
|
|
41
|
+
// ── Vitest adapter ────────────────────────────────────────────────────────────
|
|
42
|
+
class VitestAdapter {
|
|
43
|
+
frameworkImport() {
|
|
44
|
+
return "import { describe, test, expect, vi, beforeEach } from 'vitest';";
|
|
45
|
+
}
|
|
46
|
+
mockModule(importPath, importedNames) {
|
|
47
|
+
const fns = importedNames.map((n) => ` ${n}: vi.fn(),`).join("\n");
|
|
48
|
+
return `vi.mock('${importPath}', () => ({\n${fns}\n}));`;
|
|
49
|
+
}
|
|
50
|
+
mockModuleCheck(importPath) {
|
|
51
|
+
return `vi.mock('${importPath}'`;
|
|
52
|
+
}
|
|
53
|
+
mockFn() {
|
|
54
|
+
return "vi.fn()";
|
|
55
|
+
}
|
|
56
|
+
clearAllMocks() {
|
|
57
|
+
return "vi.clearAllMocks();";
|
|
58
|
+
}
|
|
59
|
+
mockCast(name) {
|
|
60
|
+
return `vi.mocked(${name})`;
|
|
61
|
+
}
|
|
62
|
+
mockResolvedValue(name, val) {
|
|
63
|
+
return `${this.mockCast(name)}.mockResolvedValue(${val});`;
|
|
64
|
+
}
|
|
65
|
+
mockReturnValue(name, val) {
|
|
66
|
+
return `${this.mockCast(name)}.mockReturnValue(${val});`;
|
|
67
|
+
}
|
|
68
|
+
mockFnReturnValue(val) {
|
|
69
|
+
return `vi.fn().mockReturnValue(${val})`;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
exports.VitestAdapter = VitestAdapter;
|
|
73
|
+
// ── Factory ───────────────────────────────────────────────────────────────────
|
|
74
|
+
function createAdapter(framework = "jest") {
|
|
75
|
+
return framework === "vitest" ? new VitestAdapter() : new JestAdapter();
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=frameworkAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frameworkAdapter.js","sourceRoot":"","sources":["../src/frameworkAdapter.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAuHH,sCAEC;AAtFD,iFAAiF;AAEjF,MAAa,WAAW;IACpB,eAAe;QACX,OAAO,EAAE,CAAC;IACd,CAAC;IAED,UAAU,CAAC,UAAkB,EAAE,aAAuB;QAClD,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtE,OAAO,cAAc,UAAU,gBAAgB,GAAG,QAAQ,CAAC;IAC/D,CAAC;IAED,eAAe,CAAC,UAAkB;QAC9B,OAAO,cAAc,UAAU,GAAG,CAAC;IACvC,CAAC;IAED,MAAM;QACF,OAAO,WAAW,CAAC;IACvB,CAAC;IAED,aAAa;QACT,OAAO,uBAAuB,CAAC;IACnC,CAAC;IAED,QAAQ,CAAC,IAAY;QACjB,OAAO,IAAI,IAAI,gBAAgB,CAAC;IACpC,CAAC;IAED,iBAAiB,CAAC,IAAY,EAAE,GAAW;QACvC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;IAC/D,CAAC;IAED,eAAe,CAAC,IAAY,EAAE,GAAW;QACrC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;IAC7D,CAAC;IAED,iBAAiB,CAAC,GAAW;QACzB,OAAO,6BAA6B,GAAG,GAAG,CAAC;IAC/C,CAAC;CACJ;AArCD,kCAqCC;AAED,iFAAiF;AAEjF,MAAa,aAAa;IACtB,eAAe;QACX,OAAO,kEAAkE,CAAC;IAC9E,CAAC;IAED,UAAU,CAAC,UAAkB,EAAE,aAAuB;QAClD,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpE,OAAO,YAAY,UAAU,gBAAgB,GAAG,QAAQ,CAAC;IAC7D,CAAC;IAED,eAAe,CAAC,UAAkB;QAC9B,OAAO,YAAY,UAAU,GAAG,CAAC;IACrC,CAAC;IAED,MAAM;QACF,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,aAAa;QACT,OAAO,qBAAqB,CAAC;IACjC,CAAC;IAED,QAAQ,CAAC,IAAY;QACjB,OAAO,aAAa,IAAI,GAAG,CAAC;IAChC,CAAC;IAED,iBAAiB,CAAC,IAAY,EAAE,GAAW;QACvC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;IAC/D,CAAC;IAED,eAAe,CAAC,IAAY,EAAE,GAAW;QACrC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;IAC7D,CAAC;IAED,iBAAiB,CAAC,GAAW;QACzB,OAAO,2BAA2B,GAAG,GAAG,CAAC;IAC7C,CAAC;CACJ;AArCD,sCAqCC;AAED,iFAAiF;AAEjF,SAAgB,aAAa,CAAC,YAA+B,MAAM;IAC/D,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC;AAC5E,CAAC"}
|
package/dist/generator.d.ts
CHANGED
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
import { TestScenario } from "./scenarioEngine";
|
|
2
2
|
import { MockFileResult } from "./mockGenerator";
|
|
3
|
+
/**
|
|
4
|
+
* Marker placed as the very first line of every generated test file.
|
|
5
|
+
* Its presence lets cotester know the file was scaffolded (not hand-written),
|
|
6
|
+
* but function-level merging works regardless of whether the marker is present.
|
|
7
|
+
*/
|
|
8
|
+
export declare const TESTGEN_MARKER = "// @cotester-generated";
|
|
9
|
+
/**
|
|
10
|
+
* Format version written into the second line of every generated test file.
|
|
11
|
+
* Used by `cotester migrate` to detect files produced by older versions and
|
|
12
|
+
* upgrade them in-place. Increment this when the generated format changes.
|
|
13
|
+
*/
|
|
14
|
+
export declare const CURRENT_FILE_VERSION = 2;
|
|
15
|
+
export declare const VERSION_MARKER = "// @cotester-version: 2";
|
|
16
|
+
/** Returned by generateTestFile — carries the test file path and audit data. */
|
|
17
|
+
export interface GenerateResult {
|
|
18
|
+
testFilePath: string;
|
|
19
|
+
/** Function names for which a new describe block was written */
|
|
20
|
+
added: string[];
|
|
21
|
+
/** Function names whose signature changed (describe existed, warning injected) */
|
|
22
|
+
merged: string[];
|
|
23
|
+
/** Function names already covered and left untouched */
|
|
24
|
+
skipped: string[];
|
|
25
|
+
}
|
|
3
26
|
/**
|
|
4
27
|
* Generate (or merge into) a test file for the given source file.
|
|
5
28
|
*
|
|
@@ -13,4 +36,4 @@ import { MockFileResult } from "./mockGenerator";
|
|
|
13
36
|
* Individual functions/methods that already have a describe block are never
|
|
14
37
|
* touched, preserving any hand-written assertions inside them.
|
|
15
38
|
*/
|
|
16
|
-
export declare function generateTestFile(srcFilePath: string, scenarios: TestScenario[], projectRoot: string, srcDir: string, testDir: string, mockResult: MockFileResult | null, tableThreshold?: number, dryRun?: boolean): Promise<
|
|
39
|
+
export declare function generateTestFile(srcFilePath: string, scenarios: TestScenario[], projectRoot: string, srcDir: string, testDir: string, mockResult: MockFileResult | null, tableThreshold?: number, dryRun?: boolean, framework?: "jest" | "vitest", snapshotForComplexTypes?: boolean): Promise<GenerateResult | null>;
|