supercov 0.0.8 → 0.0.11
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 +14 -1
- package/bin/native.js +87 -0
- package/bin/supercov.js +20 -3
- package/dist/agentJson.d.ts +2 -1
- package/dist/agentJson.d.ts.map +1 -1
- package/dist/agentJson.js +18 -0
- package/dist/agentJson.js.map +1 -1
- package/dist/analyze.d.ts.map +1 -1
- package/dist/analyze.js +9 -5
- package/dist/analyze.js.map +1 -1
- package/dist/cli.js +126 -23
- package/dist/cli.js.map +1 -1
- package/dist/directInstrumenter.d.ts.map +1 -1
- package/dist/directInstrumenter.js +39 -19
- package/dist/directInstrumenter.js.map +1 -1
- package/dist/engineEvidence.d.ts +9 -0
- package/dist/engineEvidence.d.ts.map +1 -0
- package/dist/engineEvidence.js +31 -0
- package/dist/engineEvidence.js.map +1 -0
- package/dist/engineInstrumenter.d.ts +16 -0
- package/dist/engineInstrumenter.d.ts.map +1 -0
- package/dist/engineInstrumenter.js +50 -0
- package/dist/engineInstrumenter.js.map +1 -0
- package/dist/engineProcess.d.ts +11 -0
- package/dist/engineProcess.d.ts.map +1 -0
- package/dist/engineProcess.js +59 -0
- package/dist/engineProcess.js.map +1 -0
- package/dist/evidenceArchive.d.ts +1 -0
- package/dist/evidenceArchive.d.ts.map +1 -1
- package/dist/evidenceArchive.js +59 -13
- package/dist/evidenceArchive.js.map +1 -1
- package/dist/instrumenter.d.ts +8 -1
- package/dist/instrumenter.d.ts.map +1 -1
- package/dist/instrumenter.js +585 -113
- package/dist/instrumenter.js.map +1 -1
- package/dist/integrity.d.ts.map +1 -1
- package/dist/integrity.js +20 -1
- package/dist/integrity.js.map +1 -1
- package/dist/launchSupervisor.d.ts.map +1 -1
- package/dist/launchSupervisor.js +3 -0
- package/dist/launchSupervisor.js.map +1 -1
- package/dist/merge.d.ts.map +1 -1
- package/dist/merge.js +9 -6
- package/dist/merge.js.map +1 -1
- package/dist/nodeAssert.d.ts +31 -0
- package/dist/nodeAssert.d.ts.map +1 -0
- package/dist/nodeAssert.js +30 -0
- package/dist/nodeAssert.js.map +1 -0
- package/dist/nodeAssertAdapter.d.ts +6 -0
- package/dist/nodeAssertAdapter.d.ts.map +1 -0
- package/dist/nodeAssertAdapter.js +94 -0
- package/dist/nodeAssertAdapter.js.map +1 -0
- package/dist/nodeAssertStrict.d.ts +31 -0
- package/dist/nodeAssertStrict.d.ts.map +1 -0
- package/dist/nodeAssertStrict.js +28 -0
- package/dist/nodeAssertStrict.js.map +1 -0
- package/dist/nodeAssertionInstrumenter.d.ts +8 -0
- package/dist/nodeAssertionInstrumenter.d.ts.map +1 -0
- package/dist/nodeAssertionInstrumenter.js +271 -0
- package/dist/nodeAssertionInstrumenter.js.map +1 -0
- package/dist/nodeTest.d.ts.map +1 -1
- package/dist/nodeTest.js +14 -5
- package/dist/nodeTest.js.map +1 -1
- package/dist/playwright.d.ts.map +1 -1
- package/dist/playwright.js +177 -89
- package/dist/playwright.js.map +1 -1
- package/dist/processDiagnostics.d.ts +34 -0
- package/dist/processDiagnostics.d.ts.map +1 -0
- package/dist/processDiagnostics.js +155 -0
- package/dist/processDiagnostics.js.map +1 -0
- package/dist/project.d.ts +1 -0
- package/dist/project.d.ts.map +1 -1
- package/dist/project.js +39 -4
- package/dist/project.js.map +1 -1
- package/dist/query.d.ts +11 -0
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +224 -11
- package/dist/query.js.map +1 -1
- package/dist/register.mjs +97 -4
- package/dist/register.mjs.map +1 -1
- package/dist/resolve-loader.d.mts.map +1 -1
- package/dist/resolve-loader.mjs +16 -2
- package/dist/resolve-loader.mjs.map +1 -1
- package/dist/runAnalysis.d.ts.map +1 -1
- package/dist/runAnalysis.js +3 -1
- package/dist/runAnalysis.js.map +1 -1
- package/dist/runnerEvidence.d.ts +3 -3
- package/dist/runnerEvidence.d.ts.map +1 -1
- package/dist/runnerEvidence.js +7 -4
- package/dist/runnerEvidence.js.map +1 -1
- package/dist/runtime.d.ts +77 -4
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +395 -26
- package/dist/runtime.js.map +1 -1
- package/dist/runtimeIsolation.d.ts +3 -0
- package/dist/runtimeIsolation.d.ts.map +1 -0
- package/dist/runtimeIsolation.js +9 -0
- package/dist/runtimeIsolation.js.map +1 -0
- package/dist/sourceDiscovery.d.ts.map +1 -1
- package/dist/sourceDiscovery.js +7 -2
- package/dist/sourceDiscovery.js.map +1 -1
- package/dist/transport.js +2 -2
- package/dist/transport.js.map +1 -1
- package/dist/vitePlugin.d.ts.map +1 -1
- package/dist/vitePlugin.js +21 -7
- package/dist/vitePlugin.js.map +1 -1
- package/dist/vitest.js +38 -7
- package/dist/vitest.js.map +1 -1
- package/dist/waivers.d.ts +52 -0
- package/dist/waivers.d.ts.map +1 -0
- package/dist/waivers.js +121 -0
- package/dist/waivers.js.map +1 -0
- package/dist/workspace.d.ts +36 -0
- package/dist/workspace.d.ts.map +1 -1
- package/dist/workspace.js +216 -37
- package/dist/workspace.js.map +1 -1
- package/package.json +29 -3
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type InstrumentMcdcResult } from "./instrumenter.ts";
|
|
2
|
+
export interface InstrumentSource {
|
|
3
|
+
file: string;
|
|
4
|
+
source: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function instrumentationEngineIdentity(): {
|
|
7
|
+
engine: "typescript" | "rust";
|
|
8
|
+
artifact?: string;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Frozen migration boundary shared by direct and build-tool instrumentation.
|
|
12
|
+
* Rust receives one whole batch whenever the caller already has an inventory.
|
|
13
|
+
*/
|
|
14
|
+
export declare function instrumentSources(cases: InstrumentSource[]): InstrumentMcdcResult[];
|
|
15
|
+
export declare function instrumentSource(source: string, file: string): InstrumentMcdcResult;
|
|
16
|
+
//# sourceMappingURL=engineInstrumenter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engineInstrumenter.d.ts","sourceRoot":"","sources":["../src/engineInstrumenter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAkB,KAAK,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAQ9E,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAaD,wBAAgB,6BAA6B,IAAI;IAC/C,MAAM,EAAE,YAAY,GAAG,MAAM,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAOA;AA+BD;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,gBAAgB,EAAE,GACxB,oBAAoB,EAAE,CAIxB;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACX,oBAAoB,CAEtB"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { readFileSync } from "node:fs";
|
|
3
|
+
import { instrumentMcdc } from "./instrumenter.js";
|
|
4
|
+
import { requireRustEngineBinary, runRustEngineJson, rustEngineEnabled, } from "./engineProcess.js";
|
|
5
|
+
export function instrumentationEngineIdentity() {
|
|
6
|
+
if (!rustEngineEnabled())
|
|
7
|
+
return { engine: "typescript" };
|
|
8
|
+
const binary = requireRustEngineBinary();
|
|
9
|
+
return {
|
|
10
|
+
engine: "rust",
|
|
11
|
+
artifact: createHash("sha256").update(readFileSync(binary)).digest("hex"),
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
function rustBatch(cases) {
|
|
15
|
+
if (cases.length === 0)
|
|
16
|
+
return [];
|
|
17
|
+
const outputs = runRustEngineJson("__instrument-js", cases);
|
|
18
|
+
if (outputs.length !== cases.length)
|
|
19
|
+
throw new Error(`Rust engine candidate returned ${outputs.length} result(s) for ${cases.length} input(s)`);
|
|
20
|
+
return outputs.map((output, index) => {
|
|
21
|
+
if (output.engine !== "rust-oxc")
|
|
22
|
+
throw new Error(`Unexpected Rust engine identity for ${cases[index].file}`);
|
|
23
|
+
return {
|
|
24
|
+
code: output.code,
|
|
25
|
+
map: output.map,
|
|
26
|
+
decisions: output.decisions,
|
|
27
|
+
manifest: {
|
|
28
|
+
decisions: output.decisions,
|
|
29
|
+
points: output.points,
|
|
30
|
+
branches: output.branches,
|
|
31
|
+
...(output.coverageLimitations.length > 0
|
|
32
|
+
? { limitations: output.coverageLimitations }
|
|
33
|
+
: {}),
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Frozen migration boundary shared by direct and build-tool instrumentation.
|
|
40
|
+
* Rust receives one whole batch whenever the caller already has an inventory.
|
|
41
|
+
*/
|
|
42
|
+
export function instrumentSources(cases) {
|
|
43
|
+
return rustEngineEnabled()
|
|
44
|
+
? rustBatch(cases)
|
|
45
|
+
: cases.map(({ file, source }) => instrumentMcdc(source, file));
|
|
46
|
+
}
|
|
47
|
+
export function instrumentSource(source, file) {
|
|
48
|
+
return instrumentSources([{ file, source }])[0];
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=engineInstrumenter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engineInstrumenter.js","sourceRoot":"","sources":["../src/engineInstrumenter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,cAAc,EAA6B,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAmB5B,MAAM,UAAU,6BAA6B;IAI3C,IAAI,CAAC,iBAAiB,EAAE;QAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IAC1D,MAAM,MAAM,GAAG,uBAAuB,EAAE,CAAC;IACzC,OAAO;QACL,MAAM,EAAE,MAAM;QACd,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;KAC1E,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,KAAyB;IAC1C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,iBAAiB,CAC/B,iBAAiB,EACjB,KAAK,CACN,CAAC;IACF,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;QACjC,MAAM,IAAI,KAAK,CACb,kCAAkC,OAAO,CAAC,MAAM,kBAAkB,KAAK,CAAC,MAAM,WAAW,CAC1F,CAAC;IACJ,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QACnC,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU;YAC9B,MAAM,IAAI,KAAK,CAAC,uCAAuC,KAAK,CAAC,KAAK,CAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/E,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,GAAG,EAAE,MAAM,CAAC,GAAkC;YAC9C,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,QAAQ,EAAE;gBACR,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,GAAG,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC;oBACvC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,mBAAmB,EAAE;oBAC7C,CAAC,CAAC,EAAE,CAAC;aACR;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAyB;IAEzB,OAAO,iBAAiB,EAAE;QACxB,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC;QAClB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,MAAc,EACd,IAAY;IAEZ,OAAO,iBAAiB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare function rustEngineEnabled(): boolean;
|
|
2
|
+
export declare function rustEngineBinaryPath(): string;
|
|
3
|
+
export declare function requireRustEngineBinary(): string;
|
|
4
|
+
/**
|
|
5
|
+
* Temporary private migration transport. Product behavior remains
|
|
6
|
+
* fire-and-forget; this child boundary disappears when the Rust CLI owns the
|
|
7
|
+
* whole command. Keeping one generic, bounded JSON exchange avoids creating a
|
|
8
|
+
* bespoke Node implementation for every Rust-owned engine slice meanwhile.
|
|
9
|
+
*/
|
|
10
|
+
export declare function runRustEngineJson<Input, Output>(command: string, input: Input, maxBuffer?: number): Output;
|
|
11
|
+
//# sourceMappingURL=engineProcess.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engineProcess.d.ts","sourceRoot":"","sources":["../src/engineProcess.ts"],"names":[],"mappings":"AAMA,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAI7C;AAED,wBAAgB,uBAAuB,IAAI,MAAM,CAOhD;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAC7C,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,KAAK,EACZ,SAAS,SAAqB,GAC7B,MAAM,CA8BR"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { existsSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { spawnSync } from "node:child_process";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { tmpdir } from "node:os";
|
|
5
|
+
import { resolve } from "node:path";
|
|
6
|
+
export function rustEngineEnabled() {
|
|
7
|
+
return process.env["SUPERCOV_ENGINE"] === "rust";
|
|
8
|
+
}
|
|
9
|
+
export function rustEngineBinaryPath() {
|
|
10
|
+
const configured = process.env["SUPERCOV_RUST_BINARY"];
|
|
11
|
+
if (configured)
|
|
12
|
+
return configured;
|
|
13
|
+
return fileURLToPath(new URL("../target/debug/supercov", import.meta.url));
|
|
14
|
+
}
|
|
15
|
+
export function requireRustEngineBinary() {
|
|
16
|
+
const binary = rustEngineBinaryPath();
|
|
17
|
+
if (!existsSync(binary))
|
|
18
|
+
throw new Error(`Rust engine candidate binary not found at ${binary}. Build it with cargo build -p supercov or set SUPERCOV_RUST_BINARY.`);
|
|
19
|
+
return binary;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Temporary private migration transport. Product behavior remains
|
|
23
|
+
* fire-and-forget; this child boundary disappears when the Rust CLI owns the
|
|
24
|
+
* whole command. Keeping one generic, bounded JSON exchange avoids creating a
|
|
25
|
+
* bespoke Node implementation for every Rust-owned engine slice meanwhile.
|
|
26
|
+
*/
|
|
27
|
+
export function runRustEngineJson(command, input, maxBuffer = 1024 * 1024 * 1024) {
|
|
28
|
+
const temporary = mkdtempSync(resolve(tmpdir(), "supercov-rust-input-"));
|
|
29
|
+
try {
|
|
30
|
+
const inputPath = resolve(temporary, "input.json");
|
|
31
|
+
writeFileSync(inputPath, JSON.stringify(input));
|
|
32
|
+
const child = spawnSync(requireRustEngineBinary(), [command], {
|
|
33
|
+
encoding: "utf8",
|
|
34
|
+
maxBuffer,
|
|
35
|
+
timeout: 120_000,
|
|
36
|
+
env: {
|
|
37
|
+
...process.env,
|
|
38
|
+
SUPERCOV_INTERNAL_ENGINE: "1",
|
|
39
|
+
SUPERCOV_INTERNAL_INPUT_FILE: inputPath,
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
if (child.error)
|
|
43
|
+
throw child.error;
|
|
44
|
+
if (child.status !== 0)
|
|
45
|
+
throw new Error(`Rust engine command ${command} failed with exit ${child.status}: ${child.stderr.trim()}`);
|
|
46
|
+
try {
|
|
47
|
+
return JSON.parse(child.stdout);
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
throw new Error(`Rust engine command ${command} returned invalid JSON`, {
|
|
51
|
+
cause: error,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
finally {
|
|
56
|
+
rmSync(temporary, { recursive: true, force: true });
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=engineProcess.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engineProcess.js","sourceRoot":"","sources":["../src/engineProcess.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,UAAU,iBAAiB;IAC/B,OAAO,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,MAAM,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACvD,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC;IAClC,OAAO,aAAa,CAAC,IAAI,GAAG,CAAC,0BAA0B,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,MAAM,MAAM,GAAG,oBAAoB,EAAE,CAAC;IACtC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QACrB,MAAM,IAAI,KAAK,CACb,6CAA6C,MAAM,sEAAsE,CAC1H,CAAC;IACJ,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAe,EACf,KAAY,EACZ,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI;IAE9B,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,sBAAsB,CAAC,CAAC,CAAC;IACzE,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QACnD,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,SAAS,CAAC,uBAAuB,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE;YAC5D,QAAQ,EAAE,MAAM;YAChB,SAAS;YACT,OAAO,EAAE,OAAO;YAChB,GAAG,EAAE;gBACH,GAAG,OAAO,CAAC,GAAG;gBACd,wBAAwB,EAAE,GAAG;gBAC7B,4BAA4B,EAAE,SAAS;aACxC;SACF,CAAC,CAAC;QACH,IAAI,KAAK,CAAC,KAAK;YAAE,MAAM,KAAK,CAAC,KAAK,CAAC;QACnC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YACpB,MAAM,IAAI,KAAK,CACb,uBAAuB,OAAO,qBAAqB,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAC1F,CAAC;QACJ,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAW,CAAC;QAC5C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,uBAAuB,OAAO,wBAAwB,EAAE;gBACtE,KAAK,EAAE,KAAK;aACb,CAAC,CAAC;QACL,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evidenceArchive.d.ts","sourceRoot":"","sources":["../src/evidenceArchive.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"evidenceArchive.d.ts","sourceRoot":"","sources":["../src/evidenceArchive.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,+BAA+B,IAAI,CAAC;AACjD,eAAO,MAAM,sBAAsB,0BAA0B,CAAC;AAE9D,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,OAAO,+BAA+B,CAAC;IACtD,MAAM,EAAE,mBAAmB,CAAC;IAC5B,KAAK,EAAE,oBAAoB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,uBAAuB;IACtC,aAAa,EAAE,OAAO,+BAA+B,CAAC;IACtD,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE,iBAAiB,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,qBAAqB,GAC7B;IACE,SAAS,EAAE,MAAM,CAAC;IAClB,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GACD;IACE,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAmFN;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,GAAG,qBAAqB,EAAE,EAC1C,WAAW,EAAE,MAAM,GAClB,uBAAuB,CAuBzB;AAED,gFAAgF;AAChF,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,oBAAoB,EAAE,EAC/B,WAAW,EAAE,MAAM,GAClB,uBAAuB,CAKzB;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAmDjE"}
|
package/dist/evidenceArchive.js
CHANGED
|
@@ -1,15 +1,48 @@
|
|
|
1
|
-
import { existsSync, readFileSync, readdirSync, } from "node:fs";
|
|
1
|
+
import { existsSync, lstatSync, readFileSync, readdirSync, } from "node:fs";
|
|
2
2
|
import { relative, resolve, sep } from "node:path";
|
|
3
3
|
import { gunzipSync, gzipSync } from "node:zlib";
|
|
4
4
|
import { atomicWriteFileSync } from "./atomic.js";
|
|
5
5
|
export const EVIDENCE_ARCHIVE_SCHEMA_VERSION = 2;
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
export const EVIDENCE_ARCHIVE_MAGIC = "SUPERCOV-EVIDENCE-2\n";
|
|
7
|
+
const ARCHIVE_MAGIC = Buffer.from(EVIDENCE_ARCHIVE_MAGIC);
|
|
8
|
+
function compareCodePoints(left, right) {
|
|
9
|
+
const leftPoints = [...left];
|
|
10
|
+
const rightPoints = [...right];
|
|
11
|
+
const length = Math.min(leftPoints.length, rightPoints.length);
|
|
12
|
+
for (let index = 0; index < length; index += 1) {
|
|
13
|
+
const leftPoint = leftPoints[index].codePointAt(0);
|
|
14
|
+
const rightPoint = rightPoints[index].codePointAt(0);
|
|
15
|
+
if (leftPoint !== rightPoint)
|
|
16
|
+
return leftPoint - rightPoint;
|
|
17
|
+
}
|
|
18
|
+
return leftPoints.length - rightPoints.length;
|
|
19
|
+
}
|
|
20
|
+
function validArchivePath(path) {
|
|
21
|
+
return (path.length > 0 &&
|
|
22
|
+
!path.startsWith("/") &&
|
|
23
|
+
!path.endsWith("/") &&
|
|
24
|
+
!path.includes("\\") &&
|
|
25
|
+
!path.includes("\0") &&
|
|
26
|
+
path.split("/").every((part) => part.length > 0 && part !== "." && part !== ".."));
|
|
27
|
+
}
|
|
28
|
+
function requireArchivePath(path) {
|
|
29
|
+
if (!validArchivePath(path))
|
|
30
|
+
throw new Error(`Invalid Supercov evidence archive path: ${JSON.stringify(path)}`);
|
|
31
|
+
}
|
|
32
|
+
function canonicalEntries(entries) {
|
|
33
|
+
const files = [...entries].sort((left, right) => compareCodePoints(left.path, right.path));
|
|
34
|
+
for (const file of files)
|
|
35
|
+
requireArchivePath(file.path);
|
|
9
36
|
for (let index = 1; index < files.length; index += 1) {
|
|
10
37
|
if (files[index - 1].path === files[index].path)
|
|
11
38
|
throw new Error(`Duplicate Supercov evidence archive path: ${files[index].path}`);
|
|
12
39
|
}
|
|
40
|
+
if (!files.some((file) => file.path === "manifest.json"))
|
|
41
|
+
throw new Error("Supercov evidence archive is missing manifest.json");
|
|
42
|
+
return files;
|
|
43
|
+
}
|
|
44
|
+
function writeEntries(entries, destination) {
|
|
45
|
+
const files = canonicalEntries(entries);
|
|
13
46
|
const chunks = [ARCHIVE_MAGIC];
|
|
14
47
|
for (const { path, contents } of files) {
|
|
15
48
|
const header = Buffer.from(`${JSON.stringify({ path, bytes: contents.byteLength })}\n`);
|
|
@@ -41,7 +74,7 @@ function evidenceFiles(directory) {
|
|
|
41
74
|
return [path];
|
|
42
75
|
throw new Error(`Unsupported raw evidence entry: ${path}`);
|
|
43
76
|
})
|
|
44
|
-
.sort(
|
|
77
|
+
.sort(compareCodePoints);
|
|
45
78
|
}
|
|
46
79
|
/**
|
|
47
80
|
* Pack the evidence needed to reproduce a report into one deterministic gzip
|
|
@@ -53,19 +86,21 @@ export function writeEvidenceArchive(evidence, destination) {
|
|
|
53
86
|
? [{ directory: evidence }]
|
|
54
87
|
: evidence;
|
|
55
88
|
const files = sources.flatMap((source) => {
|
|
56
|
-
if ("file" in source)
|
|
89
|
+
if ("file" in source) {
|
|
90
|
+
requireArchivePath(source.path);
|
|
91
|
+
if (!lstatSync(source.file).isFile())
|
|
92
|
+
throw new Error(`Unsupported raw evidence entry: ${source.file}`);
|
|
57
93
|
return [{ path: source.path, sourcePath: source.file }];
|
|
94
|
+
}
|
|
95
|
+
if (source.prefix)
|
|
96
|
+
requireArchivePath(source.prefix);
|
|
58
97
|
return evidenceFiles(source.directory).map((path) => ({
|
|
59
98
|
path: [source.prefix, relative(source.directory, path).split(sep).join("/")]
|
|
60
99
|
.filter(Boolean)
|
|
61
100
|
.join("/"),
|
|
62
101
|
sourcePath: path,
|
|
63
102
|
}));
|
|
64
|
-
})
|
|
65
|
-
for (let index = 1; index < files.length; index += 1) {
|
|
66
|
-
if (files[index - 1].path === files[index].path)
|
|
67
|
-
throw new Error(`Duplicate Supercov evidence archive path: ${files[index].path}`);
|
|
68
|
-
}
|
|
103
|
+
});
|
|
69
104
|
return writeEntries(files.map(({ path, sourcePath }) => ({ path, contents: readFileSync(sourcePath) })), destination);
|
|
70
105
|
}
|
|
71
106
|
/** Write already-decoded evidence, used for integrity-checked shard merging. */
|
|
@@ -77,6 +112,7 @@ export function readEvidenceArchive(path) {
|
|
|
77
112
|
if (!serialized.subarray(0, ARCHIVE_MAGIC.byteLength).equals(ARCHIVE_MAGIC))
|
|
78
113
|
throw new Error(`Unsupported Supercov evidence archive: ${path}`);
|
|
79
114
|
const files = [];
|
|
115
|
+
let previousPath;
|
|
80
116
|
let offset = ARCHIVE_MAGIC.byteLength;
|
|
81
117
|
while (offset < serialized.byteLength) {
|
|
82
118
|
if (offset + 4 > serialized.byteLength)
|
|
@@ -85,14 +121,21 @@ export function readEvidenceArchive(path) {
|
|
|
85
121
|
offset += 4;
|
|
86
122
|
if (offset + headerSize > serialized.byteLength)
|
|
87
123
|
throw new Error(`Truncated Supercov evidence archive: ${path}`);
|
|
88
|
-
const
|
|
124
|
+
const encodedHeader = serialized.subarray(offset, offset + headerSize);
|
|
125
|
+
if (encodedHeader.at(-1) !== 0x0a)
|
|
126
|
+
throw new Error(`Invalid Supercov evidence archive entry: ${path}`);
|
|
127
|
+
const header = JSON.parse(encodedHeader.subarray(0, -1).toString("utf8"));
|
|
89
128
|
offset += headerSize;
|
|
90
|
-
if (
|
|
129
|
+
if (typeof header.path !== "string" ||
|
|
130
|
+
!validArchivePath(header.path) ||
|
|
91
131
|
!Number.isSafeInteger(header.bytes) ||
|
|
92
132
|
header.bytes < 0 ||
|
|
133
|
+
!encodedHeader.equals(Buffer.from(`${JSON.stringify({ path: header.path, bytes: header.bytes })}\n`)) ||
|
|
93
134
|
offset + header.bytes > serialized.byteLength) {
|
|
94
135
|
throw new Error(`Invalid Supercov evidence archive entry: ${path}`);
|
|
95
136
|
}
|
|
137
|
+
if (previousPath !== undefined && compareCodePoints(previousPath, header.path) >= 0)
|
|
138
|
+
throw new Error(`Invalid Supercov evidence archive entry ordering: ${path}`);
|
|
96
139
|
files.push({
|
|
97
140
|
path: header.path,
|
|
98
141
|
contents: serialized
|
|
@@ -100,7 +143,10 @@ export function readEvidenceArchive(path) {
|
|
|
100
143
|
.toString("utf8"),
|
|
101
144
|
});
|
|
102
145
|
offset += header.bytes;
|
|
146
|
+
previousPath = header.path;
|
|
103
147
|
}
|
|
148
|
+
if (!files.some((file) => file.path === "manifest.json"))
|
|
149
|
+
throw new Error(`Coverage manifest is missing from ${path}`);
|
|
104
150
|
return {
|
|
105
151
|
schemaVersion: EVIDENCE_ARCHIVE_SCHEMA_VERSION,
|
|
106
152
|
format: "supercov-evidence",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evidenceArchive.js","sourceRoot":"","sources":["../src/evidenceArchive.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,YAAY,EACZ,WAAW,GACZ,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"evidenceArchive.js","sourceRoot":"","sources":["../src/evidenceArchive.ts"],"names":[],"mappings":"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"}
|
package/dist/instrumenter.d.ts
CHANGED
|
@@ -6,6 +6,13 @@ export interface InstrumentMcdcResult {
|
|
|
6
6
|
manifest: CoverageManifest;
|
|
7
7
|
decisions: McdcDecisionMeta[];
|
|
8
8
|
}
|
|
9
|
-
export
|
|
9
|
+
export interface InstrumentMcdcOptions {
|
|
10
|
+
/** Experimental probe transport; v1 remains the public default. */
|
|
11
|
+
probeVersion?: 1 | 2;
|
|
12
|
+
}
|
|
13
|
+
/** Number encoding remains exact while both 3^n and its doubled outcome index are safe. */
|
|
14
|
+
export declare const PROBE_V2_MAX_CONDITIONS = 32;
|
|
15
|
+
export declare const PROBE_V2_DENSE_CONDITION_LIMIT = 6;
|
|
16
|
+
export declare function instrumentMcdc(code: string, file: string, options?: InstrumentMcdcOptions): InstrumentMcdcResult;
|
|
10
17
|
export declare const mcdcRuntimeModuleId = "virtual:supercov-runtime";
|
|
11
18
|
//# sourceMappingURL=instrumenter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumenter.d.ts","sourceRoot":"","sources":["../src/instrumenter.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,kBAAkB,CAAC;AAIxC,OAAO,KAAK,EAEV,gBAAgB,EAGhB,gBAAgB,EACjB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"instrumenter.d.ts","sourceRoot":"","sources":["../src/instrumenter.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,kBAAkB,CAAC;AAIxC,OAAO,KAAK,EAEV,gBAAgB,EAGhB,gBAAgB,EACjB,MAAM,YAAY,CAAC;AA2jBpB,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC;IACxC,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,SAAS,EAAE,gBAAgB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,qBAAqB;IACpC,mEAAmE;IACnE,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;CACtB;AAED,2FAA2F;AAC3F,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAC1C,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAEhD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,qBAA0B,GAClC,oBAAoB,CAgrDtB;AAED,eAAO,MAAM,mBAAmB,6BAAiB,CAAC"}
|