supercov 0.0.11 → 0.0.13
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/README.md +28 -23
- package/bin/supercov.js +8 -19
- package/package.json +31 -43
- package/{dist → runtime/javascript}/atomic.js +0 -1
- package/{dist → runtime/javascript}/launchSupervisor.js +45 -2
- package/{dist → runtime/javascript}/nodeAssert.js +0 -1
- package/{dist → runtime/javascript}/nodeAssertAdapter.js +0 -1
- package/{dist → runtime/javascript}/nodeAssertStrict.js +0 -1
- package/{dist → runtime/javascript}/nodeTest.js +0 -1
- package/{dist → runtime/javascript}/playwright.js +0 -1
- package/{dist → runtime/javascript}/playwrightReporter.js +0 -1
- package/{dist → runtime/javascript}/provenance.js +0 -1
- package/{dist → runtime/javascript}/register.mjs +3 -2
- package/{dist → runtime/javascript}/resolve-loader.mjs +0 -42
- package/{dist → runtime/javascript}/runnerEvidence.js +0 -1
- package/{dist → runtime/javascript}/transport.js +0 -1
- package/{dist → runtime/javascript}/vitest.js +0 -1
- package/{dist → runtime/javascript}/vitestReporter.js +0 -1
- package/dist/agentJson.d.ts +0 -45
- package/dist/agentJson.d.ts.map +0 -1
- package/dist/agentJson.js +0 -102
- package/dist/agentJson.js.map +0 -1
- package/dist/analyze.d.ts +0 -12
- package/dist/analyze.d.ts.map +0 -1
- package/dist/analyze.js +0 -704
- package/dist/analyze.js.map +0 -1
- package/dist/atomic.d.ts +0 -6
- package/dist/atomic.d.ts.map +0 -1
- package/dist/atomic.js.map +0 -1
- package/dist/buildCache.d.ts +0 -14
- package/dist/buildCache.d.ts.map +0 -1
- package/dist/buildCache.js +0 -84
- package/dist/buildCache.js.map +0 -1
- package/dist/cli.d.ts +0 -2
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -797
- package/dist/cli.js.map +0 -1
- package/dist/directInstrumenter.d.ts +0 -8
- package/dist/directInstrumenter.d.ts.map +0 -1
- package/dist/directInstrumenter.js +0 -112
- package/dist/directInstrumenter.js.map +0 -1
- package/dist/engineEvidence.d.ts +0 -9
- package/dist/engineEvidence.d.ts.map +0 -1
- package/dist/engineEvidence.js +0 -31
- package/dist/engineEvidence.js.map +0 -1
- package/dist/engineInstrumenter.d.ts +0 -16
- package/dist/engineInstrumenter.d.ts.map +0 -1
- package/dist/engineInstrumenter.js +0 -50
- package/dist/engineInstrumenter.js.map +0 -1
- package/dist/engineProcess.d.ts +0 -11
- package/dist/engineProcess.d.ts.map +0 -1
- package/dist/engineProcess.js +0 -59
- package/dist/engineProcess.js.map +0 -1
- package/dist/esmInterceptor.d.ts +0 -6
- package/dist/esmInterceptor.d.ts.map +0 -1
- package/dist/esmInterceptor.js +0 -63
- package/dist/esmInterceptor.js.map +0 -1
- package/dist/evidenceArchive.d.ts +0 -38
- package/dist/evidenceArchive.d.ts.map +0 -1
- package/dist/evidenceArchive.js +0 -156
- package/dist/evidenceArchive.js.map +0 -1
- package/dist/instrumenter.d.ts +0 -18
- package/dist/instrumenter.d.ts.map +0 -1
- package/dist/instrumenter.js +0 -1644
- package/dist/instrumenter.js.map +0 -1
- package/dist/integrity.d.ts +0 -10
- package/dist/integrity.d.ts.map +0 -1
- package/dist/integrity.js +0 -213
- package/dist/integrity.js.map +0 -1
- package/dist/launchSupervisor.d.ts +0 -38
- package/dist/launchSupervisor.d.ts.map +0 -1
- package/dist/launchSupervisor.js.map +0 -1
- package/dist/merge.d.ts +0 -2
- package/dist/merge.d.ts.map +0 -1
- package/dist/merge.js +0 -119
- package/dist/merge.js.map +0 -1
- package/dist/nodeAssert.d.ts +0 -31
- package/dist/nodeAssert.d.ts.map +0 -1
- package/dist/nodeAssert.js.map +0 -1
- package/dist/nodeAssertAdapter.d.ts +0 -6
- package/dist/nodeAssertAdapter.d.ts.map +0 -1
- package/dist/nodeAssertAdapter.js.map +0 -1
- package/dist/nodeAssertStrict.d.ts +0 -31
- package/dist/nodeAssertStrict.d.ts.map +0 -1
- package/dist/nodeAssertStrict.js.map +0 -1
- package/dist/nodeAssertionInstrumenter.d.ts +0 -8
- package/dist/nodeAssertionInstrumenter.d.ts.map +0 -1
- package/dist/nodeAssertionInstrumenter.js +0 -271
- package/dist/nodeAssertionInstrumenter.js.map +0 -1
- package/dist/nodeTest.d.ts +0 -15
- package/dist/nodeTest.d.ts.map +0 -1
- package/dist/nodeTest.js.map +0 -1
- package/dist/playwright.d.ts +0 -9
- package/dist/playwright.d.ts.map +0 -1
- package/dist/playwright.js.map +0 -1
- package/dist/playwrightReporter.d.ts +0 -6
- package/dist/playwrightReporter.d.ts.map +0 -1
- package/dist/playwrightReporter.js.map +0 -1
- package/dist/processDiagnostics.d.ts +0 -34
- package/dist/processDiagnostics.d.ts.map +0 -1
- package/dist/processDiagnostics.js +0 -155
- package/dist/processDiagnostics.js.map +0 -1
- package/dist/project.d.ts +0 -21
- package/dist/project.d.ts.map +0 -1
- package/dist/project.js +0 -331
- package/dist/project.js.map +0 -1
- package/dist/provenance.d.ts +0 -9
- package/dist/provenance.d.ts.map +0 -1
- package/dist/provenance.js.map +0 -1
- package/dist/query.d.ts +0 -81
- package/dist/query.d.ts.map +0 -1
- package/dist/query.js +0 -1656
- package/dist/query.js.map +0 -1
- package/dist/queryCache.d.ts +0 -15
- package/dist/queryCache.d.ts.map +0 -1
- package/dist/queryCache.js +0 -95
- package/dist/queryCache.js.map +0 -1
- package/dist/queueAdapters.d.ts +0 -15
- package/dist/queueAdapters.d.ts.map +0 -1
- package/dist/queueAdapters.js +0 -55
- package/dist/queueAdapters.js.map +0 -1
- package/dist/register.d.mts +0 -2
- package/dist/register.d.mts.map +0 -1
- package/dist/register.mjs.map +0 -1
- package/dist/reporter.d.ts +0 -13
- package/dist/reporter.d.ts.map +0 -1
- package/dist/reporter.js +0 -252
- package/dist/reporter.js.map +0 -1
- package/dist/resolve-loader.d.mts +0 -3
- package/dist/resolve-loader.d.mts.map +0 -1
- package/dist/resolve-loader.mjs.map +0 -1
- package/dist/runAnalysis.d.ts +0 -19
- package/dist/runAnalysis.d.ts.map +0 -1
- package/dist/runAnalysis.js +0 -171
- package/dist/runAnalysis.js.map +0 -1
- package/dist/runnerEvidence.d.ts +0 -19
- package/dist/runnerEvidence.d.ts.map +0 -1
- package/dist/runnerEvidence.js.map +0 -1
- package/dist/runtime.d.ts +0 -140
- package/dist/runtime.d.ts.map +0 -1
- package/dist/runtime.js.map +0 -1
- package/dist/runtimeIsolation.d.ts +0 -3
- package/dist/runtimeIsolation.d.ts.map +0 -1
- package/dist/runtimeIsolation.js +0 -9
- package/dist/runtimeIsolation.js.map +0 -1
- package/dist/sourceDiscovery.d.ts +0 -9
- package/dist/sourceDiscovery.d.ts.map +0 -1
- package/dist/sourceDiscovery.js +0 -242
- package/dist/sourceDiscovery.js.map +0 -1
- package/dist/transport.d.ts +0 -17
- package/dist/transport.d.ts.map +0 -1
- package/dist/transport.js.map +0 -1
- package/dist/types.d.ts +0 -378
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -1
- package/dist/vitePlugin.d.ts +0 -13
- package/dist/vitePlugin.d.ts.map +0 -1
- package/dist/vitePlugin.js +0 -139
- package/dist/vitePlugin.js.map +0 -1
- package/dist/vitest.d.ts +0 -2
- package/dist/vitest.d.ts.map +0 -1
- package/dist/vitest.js.map +0 -1
- package/dist/vitestReporter.d.ts +0 -43
- package/dist/vitestReporter.d.ts.map +0 -1
- package/dist/vitestReporter.js.map +0 -1
- package/dist/waivers.d.ts +0 -52
- package/dist/waivers.d.ts.map +0 -1
- package/dist/waivers.js +0 -121
- package/dist/waivers.js.map +0 -1
- package/dist/workspace.d.ts +0 -117
- package/dist/workspace.d.ts.map +0 -1
- package/dist/workspace.js +0 -680
- package/dist/workspace.js.map +0 -1
- /package/{dist → runtime/javascript}/runtime.js +0 -0
package/dist/waivers.d.ts
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import type { McdcDecisionResult } from "./types.ts";
|
|
2
|
-
export declare const WAIVERS_FILE = "supercov.waivers.json";
|
|
3
|
-
export declare const WAIVERS_SCHEMA_VERSION = 1;
|
|
4
|
-
/**
|
|
5
|
-
* A reviewed statement that one MC/DC condition has no satisfiable
|
|
6
|
-
* independence pair. Waivers never change measured coverage: waived
|
|
7
|
-
* conditions stay uncovered in every raw total and are reported as a
|
|
8
|
-
* separate category alongside them.
|
|
9
|
-
*/
|
|
10
|
-
export interface CoverageWaiver {
|
|
11
|
-
file: string;
|
|
12
|
-
/** Decision ID or the decision's exact source text (whitespace-insensitive). */
|
|
13
|
-
decision?: string;
|
|
14
|
-
/** Disambiguates identical decision sources at different locations. */
|
|
15
|
-
line?: number;
|
|
16
|
-
/** Condition source text (whitespace-insensitive), or "C<n>" with a decision. */
|
|
17
|
-
condition: string;
|
|
18
|
-
reason: string;
|
|
19
|
-
}
|
|
20
|
-
export interface CoverageWaiverMatch {
|
|
21
|
-
waiver: CoverageWaiver;
|
|
22
|
-
decisionId: string;
|
|
23
|
-
file: string;
|
|
24
|
-
line: number;
|
|
25
|
-
conditionIndex: number;
|
|
26
|
-
conditionSource: string;
|
|
27
|
-
/** A waiver on a condition that is actually covered contradicts the review. */
|
|
28
|
-
covered: boolean;
|
|
29
|
-
}
|
|
30
|
-
export interface CoverageWaiverEvaluation {
|
|
31
|
-
path: string;
|
|
32
|
-
waivers: CoverageWaiver[];
|
|
33
|
-
/** Uncovered conditions excused by a reviewed waiver. */
|
|
34
|
-
applied: CoverageWaiverMatch[];
|
|
35
|
-
/** Waivers whose condition the run proves covered. */
|
|
36
|
-
contradicted: CoverageWaiverMatch[];
|
|
37
|
-
/** Waivers that match no decision condition in this run. */
|
|
38
|
-
unmatched: CoverageWaiver[];
|
|
39
|
-
/** decision ID -> condition index -> waiver, for annotating views. */
|
|
40
|
-
waivedByDecision: Map<string, Map<number, CoverageWaiver>>;
|
|
41
|
-
/** file -> count of applied waivers, for per-file gap views. */
|
|
42
|
-
appliedByFile: Map<string, number>;
|
|
43
|
-
}
|
|
44
|
-
export declare function readCoverageWaivers(root: string): {
|
|
45
|
-
path: string;
|
|
46
|
-
waivers: CoverageWaiver[];
|
|
47
|
-
} | undefined;
|
|
48
|
-
export declare function evaluateCoverageWaivers(decisions: McdcDecisionResult[], source: {
|
|
49
|
-
path: string;
|
|
50
|
-
waivers: CoverageWaiver[];
|
|
51
|
-
}): CoverageWaiverEvaluation;
|
|
52
|
-
//# sourceMappingURL=waivers.d.ts.map
|
package/dist/waivers.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"waivers.d.ts","sourceRoot":"","sources":["../src/waivers.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,eAAO,MAAM,YAAY,0BAA0B,CAAC;AACpD,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,gFAAgF;IAChF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iFAAiF;IACjF,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,cAAc,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,+EAA+E;IAC/E,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,yDAAyD;IACzD,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,sDAAsD;IACtD,YAAY,EAAE,mBAAmB,EAAE,CAAC;IACpC,4DAA4D;IAC5D,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,sEAAsE;IACtE,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC;IAC3D,gEAAgE;IAChE,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAcD,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,GACX;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,cAAc,EAAE,CAAA;CAAE,GAAG,SAAS,CAuDzD;AAED,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,kBAAkB,EAAE,EAC/B,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,cAAc,EAAE,CAAA;CAAE,GAClD,wBAAwB,CAmE1B"}
|
package/dist/waivers.js
DELETED
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
import { readFileSync } from "node:fs";
|
|
2
|
-
import { resolve } from "node:path";
|
|
3
|
-
import { SupercovError } from "./agentJson.js";
|
|
4
|
-
export const WAIVERS_FILE = "supercov.waivers.json";
|
|
5
|
-
export const WAIVERS_SCHEMA_VERSION = 1;
|
|
6
|
-
function normalizedSource(source) {
|
|
7
|
-
return source.replace(/\s+/g, " ").trim();
|
|
8
|
-
}
|
|
9
|
-
function invalidWaiver(index, problem) {
|
|
10
|
-
return new SupercovError("INVALID_ARGUMENT", `${WAIVERS_FILE} waiver ${index + 1} ${problem}`, { details: { file: WAIVERS_FILE, waiver: index + 1 } });
|
|
11
|
-
}
|
|
12
|
-
export function readCoverageWaivers(root) {
|
|
13
|
-
const path = resolve(root, WAIVERS_FILE);
|
|
14
|
-
let raw;
|
|
15
|
-
try {
|
|
16
|
-
raw = readFileSync(path, "utf8");
|
|
17
|
-
}
|
|
18
|
-
catch {
|
|
19
|
-
return undefined;
|
|
20
|
-
}
|
|
21
|
-
let parsed;
|
|
22
|
-
try {
|
|
23
|
-
parsed = JSON.parse(raw);
|
|
24
|
-
}
|
|
25
|
-
catch (error) {
|
|
26
|
-
throw new SupercovError("INVALID_ARGUMENT", `${WAIVERS_FILE} is not valid JSON: ${error instanceof Error ? error.message : String(error)}`, { details: { file: WAIVERS_FILE } });
|
|
27
|
-
}
|
|
28
|
-
const record = parsed;
|
|
29
|
-
if (record?.version !== WAIVERS_SCHEMA_VERSION || !Array.isArray(record.waivers)) {
|
|
30
|
-
throw new SupercovError("INVALID_ARGUMENT", `${WAIVERS_FILE} must be {"version": 1, "waivers": [...]}`, { details: { file: WAIVERS_FILE } });
|
|
31
|
-
}
|
|
32
|
-
const waivers = record.waivers.map((entry, index) => {
|
|
33
|
-
const waiver = entry;
|
|
34
|
-
if (typeof waiver?.file !== "string" || waiver.file.length === 0)
|
|
35
|
-
throw invalidWaiver(index, "requires a non-empty file");
|
|
36
|
-
if (typeof waiver.condition !== "string" || waiver.condition.length === 0)
|
|
37
|
-
throw invalidWaiver(index, "requires a non-empty condition");
|
|
38
|
-
if (typeof waiver.reason !== "string" || waiver.reason.trim().length === 0)
|
|
39
|
-
throw invalidWaiver(index, "requires a non-empty reason");
|
|
40
|
-
if (waiver.decision !== undefined && typeof waiver.decision !== "string")
|
|
41
|
-
throw invalidWaiver(index, "has a non-string decision");
|
|
42
|
-
if (waiver.line !== undefined &&
|
|
43
|
-
(!Number.isSafeInteger(waiver.line) || waiver.line < 1))
|
|
44
|
-
throw invalidWaiver(index, "has a non-positive line");
|
|
45
|
-
if (/^C\d+$/.test(waiver.condition) && !waiver.decision)
|
|
46
|
-
throw invalidWaiver(index, `uses the positional condition ${waiver.condition} without a decision`);
|
|
47
|
-
return {
|
|
48
|
-
file: waiver.file,
|
|
49
|
-
...(waiver.decision !== undefined ? { decision: waiver.decision } : {}),
|
|
50
|
-
...(waiver.line !== undefined ? { line: waiver.line } : {}),
|
|
51
|
-
condition: waiver.condition,
|
|
52
|
-
reason: waiver.reason,
|
|
53
|
-
};
|
|
54
|
-
});
|
|
55
|
-
return { path, waivers };
|
|
56
|
-
}
|
|
57
|
-
export function evaluateCoverageWaivers(decisions, source) {
|
|
58
|
-
const applied = [];
|
|
59
|
-
const contradicted = [];
|
|
60
|
-
const unmatched = [];
|
|
61
|
-
const waivedByDecision = new Map();
|
|
62
|
-
const appliedByFile = new Map();
|
|
63
|
-
for (const waiver of source.waivers) {
|
|
64
|
-
const matches = [];
|
|
65
|
-
for (const decision of decisions) {
|
|
66
|
-
if (decision.meta.file !== waiver.file)
|
|
67
|
-
continue;
|
|
68
|
-
if (waiver.line !== undefined && decision.meta.line !== waiver.line)
|
|
69
|
-
continue;
|
|
70
|
-
if (waiver.decision !== undefined &&
|
|
71
|
-
decision.meta.id !== waiver.decision &&
|
|
72
|
-
normalizedSource(decision.meta.source) !==
|
|
73
|
-
normalizedSource(waiver.decision))
|
|
74
|
-
continue;
|
|
75
|
-
for (const condition of decision.conditions) {
|
|
76
|
-
const positional = `C${condition.index + 1}`;
|
|
77
|
-
if (waiver.condition !== positional &&
|
|
78
|
-
normalizedSource(condition.source) !==
|
|
79
|
-
normalizedSource(waiver.condition))
|
|
80
|
-
continue;
|
|
81
|
-
matches.push({
|
|
82
|
-
waiver,
|
|
83
|
-
decisionId: decision.meta.id,
|
|
84
|
-
file: decision.meta.file,
|
|
85
|
-
line: decision.meta.line,
|
|
86
|
-
conditionIndex: condition.index,
|
|
87
|
-
conditionSource: condition.source,
|
|
88
|
-
covered: condition.covered,
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
if (matches.length === 0) {
|
|
93
|
-
unmatched.push(waiver);
|
|
94
|
-
continue;
|
|
95
|
-
}
|
|
96
|
-
for (const match of matches) {
|
|
97
|
-
if (match.covered) {
|
|
98
|
-
contradicted.push(match);
|
|
99
|
-
continue;
|
|
100
|
-
}
|
|
101
|
-
const byCondition = waivedByDecision.get(match.decisionId) ??
|
|
102
|
-
new Map();
|
|
103
|
-
if (byCondition.has(match.conditionIndex))
|
|
104
|
-
continue;
|
|
105
|
-
applied.push(match);
|
|
106
|
-
byCondition.set(match.conditionIndex, match.waiver);
|
|
107
|
-
waivedByDecision.set(match.decisionId, byCondition);
|
|
108
|
-
appliedByFile.set(match.file, (appliedByFile.get(match.file) ?? 0) + 1);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
return {
|
|
112
|
-
path: source.path,
|
|
113
|
-
waivers: source.waivers,
|
|
114
|
-
applied,
|
|
115
|
-
contradicted,
|
|
116
|
-
unmatched,
|
|
117
|
-
waivedByDecision,
|
|
118
|
-
appliedByFile,
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
//# sourceMappingURL=waivers.js.map
|
package/dist/waivers.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"waivers.js","sourceRoot":"","sources":["../src/waivers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG/C,MAAM,CAAC,MAAM,YAAY,GAAG,uBAAuB,CAAC;AACpD,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AA6CxC,SAAS,gBAAgB,CAAC,MAAc;IACtC,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC5C,CAAC;AAED,SAAS,aAAa,CAAC,KAAa,EAAE,OAAe;IACnD,OAAO,IAAI,aAAa,CACtB,kBAAkB,EAClB,GAAG,YAAY,WAAW,KAAK,GAAG,CAAC,IAAI,OAAO,EAAE,EAChD,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,GAAG,CAAC,EAAE,EAAE,CACvD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,IAAY;IAEZ,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACzC,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,aAAa,CACrB,kBAAkB,EAClB,GAAG,YAAY,uBAAuB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAC9F,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,CACpC,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,MAAkD,CAAC;IAClE,IAAI,MAAM,EAAE,OAAO,KAAK,sBAAsB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACjF,MAAM,IAAI,aAAa,CACrB,kBAAkB,EAClB,GAAG,YAAY,2CAA2C,EAC1D,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,CACpC,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAClD,MAAM,MAAM,GAAG,KAAgC,CAAC;QAChD,IAAI,OAAO,MAAM,EAAE,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;YAC9D,MAAM,aAAa,CAAC,KAAK,EAAE,2BAA2B,CAAC,CAAC;QAC1D,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;YACvE,MAAM,aAAa,CAAC,KAAK,EAAE,gCAAgC,CAAC,CAAC;QAC/D,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;YACxE,MAAM,aAAa,CAAC,KAAK,EAAE,6BAA6B,CAAC,CAAC;QAC5D,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ;YACtE,MAAM,aAAa,CAAC,KAAK,EAAE,2BAA2B,CAAC,CAAC;QAC1D,IACE,MAAM,CAAC,IAAI,KAAK,SAAS;YACzB,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;YAEvD,MAAM,aAAa,CAAC,KAAK,EAAE,yBAAyB,CAAC,CAAC;QACxD,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ;YACrD,MAAM,aAAa,CACjB,KAAK,EACL,iCAAiC,MAAM,CAAC,SAAS,qBAAqB,CACvE,CAAC;QACJ,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,GAAG,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvE,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,SAA+B,EAC/B,MAAmD;IAEnD,MAAM,OAAO,GAA0B,EAAE,CAAC;IAC1C,MAAM,YAAY,GAA0B,EAAE,CAAC;IAC/C,MAAM,SAAS,GAAqB,EAAE,CAAC;IACvC,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAuC,CAAC;IACxE,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEhD,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACpC,MAAM,OAAO,GAA0B,EAAE,CAAC;QAC1C,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI;gBAAE,SAAS;YACjD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI;gBACjE,SAAS;YACX,IACE,MAAM,CAAC,QAAQ,KAAK,SAAS;gBAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,QAAQ;gBACpC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;oBACpC,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC;gBAEnC,SAAS;YACX,KAAK,MAAM,SAAS,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;gBAC5C,MAAM,UAAU,GAAG,IAAI,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;gBAC7C,IACE,MAAM,CAAC,SAAS,KAAK,UAAU;oBAC/B,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC;wBAChC,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC;oBAEpC,SAAS;gBACX,OAAO,CAAC,IAAI,CAAC;oBACX,MAAM;oBACN,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE;oBAC5B,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI;oBACxB,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI;oBACxB,cAAc,EAAE,SAAS,CAAC,KAAK;oBAC/B,eAAe,EAAE,SAAS,CAAC,MAAM;oBACjC,OAAO,EAAE,SAAS,CAAC,OAAO;iBAC3B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvB,SAAS;QACX,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAClB,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACzB,SAAS;YACX,CAAC;YACD,MAAM,WAAW,GACf,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC;gBACtC,IAAI,GAAG,EAA0B,CAAC;YACpC,IAAI,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC;gBAAE,SAAS;YACpD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpB,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YACpD,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;YACpD,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IACD,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO;QACP,YAAY;QACZ,SAAS;QACT,gBAAgB;QAChB,aAAa;KACd,CAAC;AACJ,CAAC"}
|
package/dist/workspace.d.ts
DELETED
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
export declare const RUN_STORE_CONTRACT_VERSION = 1;
|
|
2
|
-
export type RunStateStatus = "preparing" | "building" | "testing" | "publishing" | "complete" | "failed" | "interrupted" | "abandoned";
|
|
3
|
-
export interface RunState {
|
|
4
|
-
id: string;
|
|
5
|
-
pid: number;
|
|
6
|
-
root: string;
|
|
7
|
-
workspace: string;
|
|
8
|
-
startedAt: string;
|
|
9
|
-
updatedAt: string;
|
|
10
|
-
status: RunStateStatus;
|
|
11
|
-
signal?: NodeJS.Signals;
|
|
12
|
-
error?: string;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Unlinking a large tree (workspace copies, per-attempt evidence) can take
|
|
16
|
-
* minutes of uninterruptible I/O — observed at 26+ minutes on a real project.
|
|
17
|
-
* Removal must never block the command: rename the tree into the store's
|
|
18
|
-
* trash (atomic on the same filesystem, so the path disappears instantly) and
|
|
19
|
-
* let a detached deleter unlink it after this process has already returned.
|
|
20
|
-
* A crash between rename and unlink just leaves the entry in the trash, and
|
|
21
|
-
* every later invocation sweeps whatever it finds there.
|
|
22
|
-
*/
|
|
23
|
-
export declare function removeStoredTreeDeferred(root: string, target: string): string | undefined;
|
|
24
|
-
/** The detached deleter's whole program; also executed verbatim by tests. */
|
|
25
|
-
export declare const TRASH_DELETER_SCRIPT: string;
|
|
26
|
-
/** Unlink everything in the trash without making anyone wait for it. */
|
|
27
|
-
export declare function spawnTrashDeleter(root: string): void;
|
|
28
|
-
/**
|
|
29
|
-
* The instrumented workspace deliberately lives outside the dotted store.
|
|
30
|
-
* Widely used libraries treat *any* dot-prefixed path segment as a hidden
|
|
31
|
-
* dotfile — `send` (and therefore `express.static`, `serve-static` and
|
|
32
|
-
* `res.sendFile`) answers 404 for them by default — so an application under
|
|
33
|
-
* test cannot serve its own files from a dotted workspace. Copied test files
|
|
34
|
-
* are kept out of the user's ordinary runner discovery by
|
|
35
|
-
* `pruneCachedWorkspaceSources` at run end, not by hiding the path.
|
|
36
|
-
*/
|
|
37
|
-
export declare function workspaceContainerPath(root: string): string;
|
|
38
|
-
export declare function isolatedWorkspacePath(root: string, runId: string): string;
|
|
39
|
-
/**
|
|
40
|
-
* Stable isolated namespace used as a live mount by VM/container runners.
|
|
41
|
-
* Its path must remain stable so providers whose snapshot key includes mount
|
|
42
|
-
* paths can reuse an instrumented snapshot across equivalent coverage runs.
|
|
43
|
-
* The project lock makes refreshes single-writer.
|
|
44
|
-
*/
|
|
45
|
-
export declare function cachedWorkspacePath(root: string): string;
|
|
46
|
-
/**
|
|
47
|
-
* Remove the copied source and test files from the stable cached workspace
|
|
48
|
-
* once a run ends. Between runs those copies are pure liability: the next
|
|
49
|
-
* refresh re-copies them anyway, but an ordinary test runner invoked at the
|
|
50
|
-
* project root (whose default discovery does not exclude dot-directories —
|
|
51
|
-
* Vitest 4 excludes only node_modules and .git) would find the copied test
|
|
52
|
-
* files and silently double-count the user's suite. Keep only what the next
|
|
53
|
-
* run genuinely reuses: dependency symlinks, the generated adapter directory,
|
|
54
|
-
* and the instrumented build artifacts the build cache declares.
|
|
55
|
-
*/
|
|
56
|
-
export declare function pruneCachedWorkspaceSources(root: string): string[];
|
|
57
|
-
export interface CacheRecoveryResult {
|
|
58
|
-
restoredPrevious: boolean;
|
|
59
|
-
removedStaging: number;
|
|
60
|
-
removedPrevious: number;
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Recover the stable cache at transaction boundaries that SIGKILL or a host
|
|
64
|
-
* crash can interrupt. A staging tree is never live. A previous tree is
|
|
65
|
-
* restored only when the stable name is absent; otherwise it is obsolete.
|
|
66
|
-
*/
|
|
67
|
-
export declare function recoverCachedWorkspace(root: string): CacheRecoveryResult;
|
|
68
|
-
export declare function writeRunState(root: string, runId: string, state: Omit<RunState, "updatedAt">): RunState;
|
|
69
|
-
export declare function updateRunState(root: string, runId: string, update: Partial<Omit<RunState, "id" | "root" | "workspace" | "startedAt">>): RunState;
|
|
70
|
-
/**
|
|
71
|
-
* A published run is self-contained only once its raw-evidence archive exists.
|
|
72
|
-
* At that point loose evidence and per-run state are transactional leftovers,
|
|
73
|
-
* not user history. Derive every deletion target from root + run ID.
|
|
74
|
-
*/
|
|
75
|
-
export declare function finalizePublishedRunStorage(root: string, runId: string): boolean;
|
|
76
|
-
/** Recover dead runs and finish any publication whose atomic rename landed. */
|
|
77
|
-
export declare function recoverAbandonedRuns(root: string): string[];
|
|
78
|
-
export interface ProjectLock {
|
|
79
|
-
path: string;
|
|
80
|
-
release: () => void;
|
|
81
|
-
}
|
|
82
|
-
export declare function acquireProjectLock(root: string, runId: string): ProjectLock;
|
|
83
|
-
/** Create a copy-on-write project snapshot whose build outputs are disposable. */
|
|
84
|
-
export declare function prepareIsolatedWorkspace(root: string, runId: string): string;
|
|
85
|
-
interface CachePreparationHooks {
|
|
86
|
-
/** Internal fault-injection seam used by the crash-boundary regression. */
|
|
87
|
-
beforePublish?: (staging: string) => void;
|
|
88
|
-
/** Internal fault-injection seam used by the crash-boundary regression. */
|
|
89
|
-
afterPreviousMoved?: (previous: string) => void;
|
|
90
|
-
/** Internal fault-injection seam used by the crash-boundary regression. */
|
|
91
|
-
afterPublished?: (workspace: string) => void;
|
|
92
|
-
/** Internal fault-injection seam for copy fallback and ENOSPC tests. */
|
|
93
|
-
copyFile?: (source: string, destination: string) => void;
|
|
94
|
-
/** Exact-fingerprint build artifacts carried into the refreshed snapshot. */
|
|
95
|
-
reusePaths?: string[];
|
|
96
|
-
/** Internal seam for simulating platform rename failures. */
|
|
97
|
-
rename?: (source: string, destination: string) => void;
|
|
98
|
-
}
|
|
99
|
-
/** Refresh the stable, disposable instrumented-build namespace. */
|
|
100
|
-
export declare function prepareCachedWorkspace(root: string, hooks?: CachePreparationHooks): string;
|
|
101
|
-
export declare function removeIsolatedWorkspace(root: string, runId: string): void;
|
|
102
|
-
export interface CleanupOptions {
|
|
103
|
-
keep: number;
|
|
104
|
-
dryRun: boolean;
|
|
105
|
-
}
|
|
106
|
-
export interface CleanupResult {
|
|
107
|
-
removedRuns: string[];
|
|
108
|
-
removedWorkspaces: string[];
|
|
109
|
-
removedEvidence: string[];
|
|
110
|
-
removedBuildCache: boolean;
|
|
111
|
-
}
|
|
112
|
-
/** Cleanup is itself a project-wide transaction, so it cannot race a run. */
|
|
113
|
-
export declare function cleanCoverageStorage(root: string, options: CleanupOptions): CleanupResult;
|
|
114
|
-
/** Explicit history retention that deliberately preserves the shared cache. */
|
|
115
|
-
export declare function pruneCoverageStorage(root: string, options: CleanupOptions): CleanupResult;
|
|
116
|
-
export {};
|
|
117
|
-
//# sourceMappingURL=workspace.d.ts.map
|
package/dist/workspace.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"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"}
|