@descryy/runtime-test-runner 0.4.12 → 0.4.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/dist/bounded-file.d.ts +18 -0
- package/dist/bounded-file.d.ts.map +1 -0
- package/dist/bounded-file.js +77 -0
- package/dist/bounded-file.js.map +1 -0
- package/dist/child-environment.d.ts +12 -0
- package/dist/child-environment.d.ts.map +1 -0
- package/dist/child-environment.js +124 -0
- package/dist/child-environment.js.map +1 -0
- package/dist/coverage-capture.d.ts +23 -0
- package/dist/coverage-capture.d.ts.map +1 -0
- package/dist/coverage-capture.js +165 -0
- package/dist/coverage-capture.js.map +1 -0
- package/dist/executed-coverage.d.ts +45 -0
- package/dist/executed-coverage.d.ts.map +1 -0
- package/dist/executed-coverage.js +143 -0
- package/dist/executed-coverage.js.map +1 -0
- package/dist/go-cover-profile.d.ts +29 -0
- package/dist/go-cover-profile.d.ts.map +1 -0
- package/dist/go-cover-profile.js +162 -0
- package/dist/go-cover-profile.js.map +1 -0
- package/dist/go-test.d.ts +29 -2
- package/dist/go-test.d.ts.map +1 -1
- package/dist/go-test.js +149 -30
- package/dist/go-test.js.map +1 -1
- package/dist/graph-mapping.d.ts +1 -0
- package/dist/graph-mapping.d.ts.map +1 -1
- package/dist/graph-mapping.js +78 -1
- package/dist/graph-mapping.js.map +1 -1
- package/dist/index.d.ts +21 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -1
- package/dist/index.js.map +1 -1
- package/dist/lexers/c-family.d.ts +4 -0
- package/dist/lexers/c-family.d.ts.map +1 -0
- package/dist/lexers/c-family.js +221 -0
- package/dist/lexers/c-family.js.map +1 -0
- package/dist/lexers/chars.d.ts +7 -0
- package/dist/lexers/chars.d.ts.map +1 -0
- package/dist/lexers/chars.js +49 -0
- package/dist/lexers/chars.js.map +1 -0
- package/dist/lexers/index.d.ts +7 -0
- package/dist/lexers/index.d.ts.map +1 -0
- package/dist/lexers/index.js +5 -0
- package/dist/lexers/index.js.map +1 -0
- package/dist/lexers/python.d.ts +3 -0
- package/dist/lexers/python.d.ts.map +1 -0
- package/dist/lexers/python.js +101 -0
- package/dist/lexers/python.js.map +1 -0
- package/dist/quality/annotations.d.ts +14 -0
- package/dist/quality/annotations.d.ts.map +1 -0
- package/dist/quality/annotations.js +147 -0
- package/dist/quality/annotations.js.map +1 -0
- package/dist/quality/assertion-kinds.d.ts +18 -0
- package/dist/quality/assertion-kinds.d.ts.map +1 -0
- package/dist/quality/assertion-kinds.js +25 -0
- package/dist/quality/assertion-kinds.js.map +1 -0
- package/dist/quality/chains.d.ts +25 -0
- package/dist/quality/chains.d.ts.map +1 -0
- package/dist/quality/chains.js +129 -0
- package/dist/quality/chains.js.map +1 -0
- package/dist/quality/common.d.ts +31 -0
- package/dist/quality/common.d.ts.map +1 -0
- package/dist/quality/common.js +211 -0
- package/dist/quality/common.js.map +1 -0
- package/dist/quality/csharp-family.d.ts +9 -0
- package/dist/quality/csharp-family.d.ts.map +1 -0
- package/dist/quality/csharp-family.js +560 -0
- package/dist/quality/csharp-family.js.map +1 -0
- package/dist/quality/detect.d.ts +3 -0
- package/dist/quality/detect.d.ts.map +1 -0
- package/dist/quality/detect.js +348 -0
- package/dist/quality/detect.js.map +1 -0
- package/dist/quality/durations.d.ts +4 -0
- package/dist/quality/durations.d.ts.map +1 -0
- package/dist/quality/durations.js +177 -0
- package/dist/quality/durations.js.map +1 -0
- package/dist/quality/expressions.d.ts +7 -0
- package/dist/quality/expressions.d.ts.map +1 -0
- package/dist/quality/expressions.js +123 -0
- package/dist/quality/expressions.js.map +1 -0
- package/dist/quality/facts.d.ts +5 -0
- package/dist/quality/facts.d.ts.map +1 -0
- package/dist/quality/facts.js +183 -0
- package/dist/quality/facts.js.map +1 -0
- package/dist/quality/failure-of.d.ts +4 -0
- package/dist/quality/failure-of.d.ts.map +1 -0
- package/dist/quality/failure-of.js +233 -0
- package/dist/quality/failure-of.js.map +1 -0
- package/dist/quality/frameworks.d.ts +5 -0
- package/dist/quality/frameworks.d.ts.map +1 -0
- package/dist/quality/frameworks.js +20 -0
- package/dist/quality/frameworks.js.map +1 -0
- package/dist/quality/go-family.d.ts +6 -0
- package/dist/quality/go-family.d.ts.map +1 -0
- package/dist/quality/go-family.js +393 -0
- package/dist/quality/go-family.js.map +1 -0
- package/dist/quality/index.d.ts +10 -0
- package/dist/quality/index.d.ts.map +1 -0
- package/dist/quality/index.js +19 -0
- package/dist/quality/index.js.map +1 -0
- package/dist/quality/java-family.d.ts +12 -0
- package/dist/quality/java-family.d.ts.map +1 -0
- package/dist/quality/java-family.js +529 -0
- package/dist/quality/java-family.js.map +1 -0
- package/dist/quality/js-assertions.d.ts +11 -0
- package/dist/quality/js-assertions.d.ts.map +1 -0
- package/dist/quality/js-assertions.js +297 -0
- package/dist/quality/js-assertions.js.map +1 -0
- package/dist/quality/js-family.d.ts +3 -0
- package/dist/quality/js-family.d.ts.map +1 -0
- package/dist/quality/js-family.js +470 -0
- package/dist/quality/js-family.js.map +1 -0
- package/dist/quality/python-family.d.ts +6 -0
- package/dist/quality/python-family.d.ts.map +1 -0
- package/dist/quality/python-family.js +786 -0
- package/dist/quality/python-family.js.map +1 -0
- package/dist/quality/scope.d.ts +26 -0
- package/dist/quality/scope.d.ts.map +1 -0
- package/dist/quality/scope.js +33 -0
- package/dist/quality/scope.js.map +1 -0
- package/dist/quality/selectors.d.ts +14 -0
- package/dist/quality/selectors.d.ts.map +1 -0
- package/dist/quality/selectors.js +137 -0
- package/dist/quality/selectors.js.map +1 -0
- package/dist/quality/statuses.d.ts +7 -0
- package/dist/quality/statuses.d.ts.map +1 -0
- package/dist/quality/statuses.js +143 -0
- package/dist/quality/statuses.js.map +1 -0
- package/dist/quality/stream.d.ts +23 -0
- package/dist/quality/stream.d.ts.map +1 -0
- package/dist/quality/stream.js +194 -0
- package/dist/quality/stream.js.map +1 -0
- package/dist/quality/types.d.ts +88 -0
- package/dist/quality/types.d.ts.map +1 -0
- package/dist/quality/types.js +2 -0
- package/dist/quality/types.js.map +1 -0
- package/dist/run-timeout.d.ts +25 -0
- package/dist/run-timeout.d.ts.map +1 -0
- package/dist/run-timeout.js +52 -0
- package/dist/run-timeout.js.map +1 -0
- package/dist/runner-wrappers.d.ts +74 -0
- package/dist/runner-wrappers.d.ts.map +1 -0
- package/dist/runner-wrappers.js +604 -0
- package/dist/runner-wrappers.js.map +1 -0
- package/dist/swift-xctest.d.ts +15 -2
- package/dist/swift-xctest.d.ts.map +1 -1
- package/dist/swift-xctest.js +143 -20
- package/dist/swift-xctest.js.map +1 -1
- package/dist/test-runner-collector.d.ts +56 -6
- package/dist/test-runner-collector.d.ts.map +1 -1
- package/dist/test-runner-collector.js +265 -113
- package/dist/test-runner-collector.js.map +1 -1
- package/dist/testgen/csharp-facts.d.ts +3 -0
- package/dist/testgen/csharp-facts.d.ts.map +1 -0
- package/dist/testgen/csharp-facts.js +306 -0
- package/dist/testgen/csharp-facts.js.map +1 -0
- package/dist/testgen/csharp-profile.d.ts +14 -0
- package/dist/testgen/csharp-profile.d.ts.map +1 -0
- package/dist/testgen/csharp-profile.js +233 -0
- package/dist/testgen/csharp-profile.js.map +1 -0
- package/dist/testgen/declarations.d.ts +10 -0
- package/dist/testgen/declarations.d.ts.map +1 -0
- package/dist/testgen/declarations.js +110 -0
- package/dist/testgen/declarations.js.map +1 -0
- package/dist/testgen/facts-common.d.ts +33 -0
- package/dist/testgen/facts-common.d.ts.map +1 -0
- package/dist/testgen/facts-common.js +76 -0
- package/dist/testgen/facts-common.js.map +1 -0
- package/dist/testgen/failure.d.ts +4 -0
- package/dist/testgen/failure.d.ts.map +1 -0
- package/dist/testgen/failure.js +106 -0
- package/dist/testgen/failure.js.map +1 -0
- package/dist/testgen/frameworks.d.ts +6 -0
- package/dist/testgen/frameworks.d.ts.map +1 -0
- package/dist/testgen/frameworks.js +516 -0
- package/dist/testgen/frameworks.js.map +1 -0
- package/dist/testgen/go-facts.d.ts +11 -0
- package/dist/testgen/go-facts.d.ts.map +1 -0
- package/dist/testgen/go-facts.js +237 -0
- package/dist/testgen/go-facts.js.map +1 -0
- package/dist/testgen/go-profile.d.ts +6 -0
- package/dist/testgen/go-profile.d.ts.map +1 -0
- package/dist/testgen/go-profile.js +155 -0
- package/dist/testgen/go-profile.js.map +1 -0
- package/dist/testgen/index.d.ts +28 -0
- package/dist/testgen/index.d.ts.map +1 -0
- package/dist/testgen/index.js +21 -0
- package/dist/testgen/index.js.map +1 -0
- package/dist/testgen/java-build.d.ts +13 -0
- package/dist/testgen/java-build.d.ts.map +1 -0
- package/dist/testgen/java-build.js +250 -0
- package/dist/testgen/java-build.js.map +1 -0
- package/dist/testgen/java-facts.d.ts +3 -0
- package/dist/testgen/java-facts.d.ts.map +1 -0
- package/dist/testgen/java-facts.js +349 -0
- package/dist/testgen/java-facts.js.map +1 -0
- package/dist/testgen/java-profile.d.ts +13 -0
- package/dist/testgen/java-profile.d.ts.map +1 -0
- package/dist/testgen/java-profile.js +194 -0
- package/dist/testgen/java-profile.js.map +1 -0
- package/dist/testgen/languages.d.ts +11 -0
- package/dist/testgen/languages.d.ts.map +1 -0
- package/dist/testgen/languages.js +63 -0
- package/dist/testgen/languages.js.map +1 -0
- package/dist/testgen/lexer.d.ts +19 -0
- package/dist/testgen/lexer.d.ts.map +1 -0
- package/dist/testgen/lexer.js +257 -0
- package/dist/testgen/lexer.js.map +1 -0
- package/dist/testgen/mutant-core.d.ts +19 -0
- package/dist/testgen/mutant-core.d.ts.map +1 -0
- package/dist/testgen/mutant-core.js +39 -0
- package/dist/testgen/mutant-core.js.map +1 -0
- package/dist/testgen/mutants-lang.d.ts +6 -0
- package/dist/testgen/mutants-lang.d.ts.map +1 -0
- package/dist/testgen/mutants-lang.js +291 -0
- package/dist/testgen/mutants-lang.js.map +1 -0
- package/dist/testgen/mutants.d.ts +9 -0
- package/dist/testgen/mutants.d.ts.map +1 -0
- package/dist/testgen/mutants.js +148 -0
- package/dist/testgen/mutants.js.map +1 -0
- package/dist/testgen/paths.d.ts +32 -0
- package/dist/testgen/paths.d.ts.map +1 -0
- package/dist/testgen/paths.js +211 -0
- package/dist/testgen/paths.js.map +1 -0
- package/dist/testgen/process.d.ts +19 -0
- package/dist/testgen/process.d.ts.map +1 -0
- package/dist/testgen/process.js +89 -0
- package/dist/testgen/process.js.map +1 -0
- package/dist/testgen/profile-failure.d.ts +7 -0
- package/dist/testgen/profile-failure.d.ts.map +1 -0
- package/dist/testgen/profile-failure.js +29 -0
- package/dist/testgen/profile-failure.js.map +1 -0
- package/dist/testgen/python-facts.d.ts +11 -0
- package/dist/testgen/python-facts.d.ts.map +1 -0
- package/dist/testgen/python-facts.js +380 -0
- package/dist/testgen/python-facts.js.map +1 -0
- package/dist/testgen/python-profile.d.ts +4 -0
- package/dist/testgen/python-profile.d.ts.map +1 -0
- package/dist/testgen/python-profile.js +344 -0
- package/dist/testgen/python-profile.js.map +1 -0
- package/dist/testgen/source-facts.d.ts +30 -0
- package/dist/testgen/source-facts.d.ts.map +1 -0
- package/dist/testgen/source-facts.js +497 -0
- package/dist/testgen/source-facts.js.map +1 -0
- package/dist/testgen/stubs.d.ts +4 -0
- package/dist/testgen/stubs.d.ts.map +1 -0
- package/dist/testgen/stubs.js +66 -0
- package/dist/testgen/stubs.js.map +1 -0
- package/dist/testgen/toolchain.d.ts +23 -0
- package/dist/testgen/toolchain.d.ts.map +1 -0
- package/dist/testgen/toolchain.js +201 -0
- package/dist/testgen/toolchain.js.map +1 -0
- package/dist/testgen/types.d.ts +67 -0
- package/dist/testgen/types.d.ts.map +1 -0
- package/dist/testgen/types.js +2 -0
- package/dist/testgen/types.js.map +1 -0
- package/dist/v8-coverage.d.ts +21 -0
- package/dist/v8-coverage.d.ts.map +1 -0
- package/dist/v8-coverage.js +217 -0
- package/dist/v8-coverage.js.map +1 -0
- package/dist/vitest-reporter.d.ts +46 -13
- package/dist/vitest-reporter.d.ts.map +1 -1
- package/dist/vitest-reporter.js +119 -26
- package/dist/vitest-reporter.js.map +1 -1
- package/dist/vitest-version.d.ts +21 -0
- package/dist/vitest-version.d.ts.map +1 -0
- package/dist/vitest-version.js +98 -0
- package/dist/vitest-version.js.map +1 -0
- package/package.json +14 -8
- package/reporters/junit/classes/DescryJUnitListener.class +0 -0
- package/reporters/junit/classes/META-INF/services/org.junit.platform.launcher.TestExecutionListener +1 -0
- package/reporters/minitest/descry_minitest_reporter.rb +150 -0
- package/reporters/phpunit/DescryPhpUnitExtension.php +209 -0
- package/reporters/pytest/descry_pytest_plugin.py +397 -0
- package/reporters/rspec/descry_rspec_formatter.rb +175 -0
- package/reporters/xunit/bin/Release/netstandard2.0/Descry.TestLogger.deps.json +203 -0
- package/reporters/xunit/bin/Release/netstandard2.0/Descry.TestLogger.dll +0 -0
- package/reporters/xunit/bin/Release/netstandard2.0/Descry.TestLogger.pdb +0 -0
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
const OPEN_TO_CLOSE = { "(": ")", "[": "]", "{": "}" };
|
|
2
|
+
const CLOSE_TO_OPEN = { ")": "(", "]": "[", "}": "{" };
|
|
3
|
+
const TEXT_LIMIT = 240;
|
|
4
|
+
export function buildStream(source, tokens) {
|
|
5
|
+
const toks = tokens.filter((token) => token.kind !== "comment");
|
|
6
|
+
const match = new Int32Array(toks.length).fill(-1);
|
|
7
|
+
const enclosingBrace = new Int32Array(toks.length).fill(-1);
|
|
8
|
+
const stack = [];
|
|
9
|
+
const braceStack = [];
|
|
10
|
+
const counts = { "(": 0, "[": 0, "{": 0 };
|
|
11
|
+
for (let index = 0; index < toks.length; index += 1) {
|
|
12
|
+
const token = toks[index];
|
|
13
|
+
enclosingBrace[index] = braceStack.length === 0 ? -1 : braceStack[braceStack.length - 1];
|
|
14
|
+
if (token.kind !== "punctuator")
|
|
15
|
+
continue;
|
|
16
|
+
const text = token.text;
|
|
17
|
+
if (OPEN_TO_CLOSE[text] !== undefined) {
|
|
18
|
+
stack.push(index);
|
|
19
|
+
counts[text] = counts[text] + 1;
|
|
20
|
+
if (text === "{")
|
|
21
|
+
braceStack.push(index);
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
const opener = CLOSE_TO_OPEN[text];
|
|
25
|
+
if (opener === undefined || counts[opener] === 0)
|
|
26
|
+
continue;
|
|
27
|
+
for (;;) {
|
|
28
|
+
const top = stack.pop();
|
|
29
|
+
const topText = toks[top].text;
|
|
30
|
+
counts[topText] = counts[topText] - 1;
|
|
31
|
+
if (topText === "{")
|
|
32
|
+
braceStack.pop();
|
|
33
|
+
if (topText === opener) {
|
|
34
|
+
match[top] = index;
|
|
35
|
+
match[index] = top;
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
if (text === "}")
|
|
40
|
+
enclosingBrace[index] = braceStack.length === 0 ? -1 : braceStack[braceStack.length - 1];
|
|
41
|
+
}
|
|
42
|
+
return { source, toks, match, enclosingBrace };
|
|
43
|
+
}
|
|
44
|
+
export function isPunct(stream, index, text) {
|
|
45
|
+
const token = stream.toks[index];
|
|
46
|
+
return token !== undefined && token.kind === "punctuator" && token.text === text;
|
|
47
|
+
}
|
|
48
|
+
export function isIdent(stream, index, text) {
|
|
49
|
+
const token = stream.toks[index];
|
|
50
|
+
return token !== undefined && token.kind === "identifier" && (text === undefined || token.text === text);
|
|
51
|
+
}
|
|
52
|
+
export function textAt(stream, index) {
|
|
53
|
+
return stream.toks[index]?.text ?? "";
|
|
54
|
+
}
|
|
55
|
+
export function lineOf(stream, index) {
|
|
56
|
+
return stream.toks[index]?.line ?? 0;
|
|
57
|
+
}
|
|
58
|
+
export function endLineOf(token) {
|
|
59
|
+
if (token.kind !== "string" && token.kind !== "template")
|
|
60
|
+
return token.line;
|
|
61
|
+
let lines = 0;
|
|
62
|
+
for (let i = 0; i < token.text.length; i += 1)
|
|
63
|
+
if (token.text.charCodeAt(i) === 10)
|
|
64
|
+
lines += 1;
|
|
65
|
+
return token.line + lines;
|
|
66
|
+
}
|
|
67
|
+
export function textOf(stream, from, to, limit = TEXT_LIMIT) {
|
|
68
|
+
const first = stream.toks[from];
|
|
69
|
+
const last = stream.toks[to];
|
|
70
|
+
if (first === undefined || last === undefined || to < from)
|
|
71
|
+
return "";
|
|
72
|
+
const raw = stream.source.slice(first.start, last.end).replace(/\s+/g, " ").trim();
|
|
73
|
+
return raw.length <= limit ? raw : `${raw.slice(0, limit - 1)}…`;
|
|
74
|
+
}
|
|
75
|
+
export function splitTopLevel(stream, from, to, separator = ",") {
|
|
76
|
+
const parts = [];
|
|
77
|
+
let start = from;
|
|
78
|
+
let index = from;
|
|
79
|
+
while (index <= to) {
|
|
80
|
+
const token = stream.toks[index];
|
|
81
|
+
if (token.kind === "punctuator") {
|
|
82
|
+
if (OPEN_TO_CLOSE[token.text] !== undefined && stream.match[index] > index && stream.match[index] <= to) {
|
|
83
|
+
index = stream.match[index] + 1;
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
if (token.text === separator) {
|
|
87
|
+
if (index > start)
|
|
88
|
+
parts.push([start, index - 1]);
|
|
89
|
+
start = index + 1;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
index += 1;
|
|
93
|
+
}
|
|
94
|
+
if (start <= to)
|
|
95
|
+
parts.push([start, to]);
|
|
96
|
+
return parts;
|
|
97
|
+
}
|
|
98
|
+
export function argumentRanges(stream, open, close) {
|
|
99
|
+
if (open < 0 || close <= open + 1)
|
|
100
|
+
return [];
|
|
101
|
+
return splitTopLevel(stream, open + 1, close - 1);
|
|
102
|
+
}
|
|
103
|
+
export function stringValue(token) {
|
|
104
|
+
if (token === undefined)
|
|
105
|
+
return null;
|
|
106
|
+
if (token.kind === "template") {
|
|
107
|
+
const text = token.text;
|
|
108
|
+
if (text.length >= 2 && text.startsWith("`") && text.endsWith("`") && !text.includes("${"))
|
|
109
|
+
return text.slice(1, -1);
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
if (token.kind !== "string")
|
|
113
|
+
return null;
|
|
114
|
+
const text = token.text;
|
|
115
|
+
const open = text.search(/["'`]/);
|
|
116
|
+
if (open === -1)
|
|
117
|
+
return null;
|
|
118
|
+
const prefix = text.slice(0, open).toLowerCase();
|
|
119
|
+
const rest = text.slice(open);
|
|
120
|
+
const quote = rest[0];
|
|
121
|
+
const tripled = rest.length >= 6 && rest.startsWith(quote.repeat(3));
|
|
122
|
+
const width = tripled ? 3 : 1;
|
|
123
|
+
const closed = rest.length >= width * 2 && rest.endsWith(quote.repeat(width));
|
|
124
|
+
const inner = rest.slice(width, closed ? rest.length - width : rest.length);
|
|
125
|
+
if (prefix.includes("$") || prefix.includes("f")) {
|
|
126
|
+
if (inner.includes("{"))
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
if (quote === "`" || prefix.includes("r") || prefix.includes("@")) {
|
|
130
|
+
return prefix.includes("@") ? inner.replaceAll('""', '"') : inner;
|
|
131
|
+
}
|
|
132
|
+
return inner.replace(/\\(["'\\nrt])/g, (_whole, escaped) => (escaped === "n" ? "\n" : escaped === "r" ? "\r" : escaped === "t" ? "\t" : escaped));
|
|
133
|
+
}
|
|
134
|
+
export function numberValue(token) {
|
|
135
|
+
if (token === undefined || token.kind !== "number")
|
|
136
|
+
return null;
|
|
137
|
+
const cleaned = token.text.replace(/_/g, "");
|
|
138
|
+
const hex = /^0[xX]([0-9a-fA-F]+)[uUlL]*$/.exec(cleaned);
|
|
139
|
+
if (hex !== null)
|
|
140
|
+
return Number.parseInt(hex[1], 16);
|
|
141
|
+
const binary = /^0[bB]([01]+)[uUlL]*$/.exec(cleaned);
|
|
142
|
+
if (binary !== null)
|
|
143
|
+
return Number.parseInt(binary[1], 2);
|
|
144
|
+
const octal = /^0[oO]([0-7]+)$/.exec(cleaned);
|
|
145
|
+
if (octal !== null)
|
|
146
|
+
return Number.parseInt(octal[1], 8);
|
|
147
|
+
const decimal = /^(\d+\.?\d*(?:[eE][+-]?\d+)?|\.\d+(?:[eE][+-]?\d+)?)[fFdDmMlLuU]*$/.exec(cleaned);
|
|
148
|
+
if (decimal === null)
|
|
149
|
+
return null;
|
|
150
|
+
const value = Number(decimal[1]);
|
|
151
|
+
return Number.isFinite(value) ? value : null;
|
|
152
|
+
}
|
|
153
|
+
export function singleString(stream, range) {
|
|
154
|
+
if (range === undefined)
|
|
155
|
+
return null;
|
|
156
|
+
if (range[0] === range[1])
|
|
157
|
+
return stringValue(stream.toks[range[0]]);
|
|
158
|
+
return null;
|
|
159
|
+
}
|
|
160
|
+
export function firstStringIn(stream, range) {
|
|
161
|
+
if (range === undefined)
|
|
162
|
+
return null;
|
|
163
|
+
for (let index = range[0]; index <= range[1]; index += 1) {
|
|
164
|
+
const value = stringValue(stream.toks[index]);
|
|
165
|
+
if (value !== null)
|
|
166
|
+
return value;
|
|
167
|
+
}
|
|
168
|
+
return null;
|
|
169
|
+
}
|
|
170
|
+
export function findRangeStart(stream, startLine) {
|
|
171
|
+
let low = 0;
|
|
172
|
+
let high = stream.toks.length;
|
|
173
|
+
while (low < high) {
|
|
174
|
+
const middle = (low + high) >> 1;
|
|
175
|
+
if (stream.toks[middle].line < startLine)
|
|
176
|
+
low = middle + 1;
|
|
177
|
+
else
|
|
178
|
+
high = middle;
|
|
179
|
+
}
|
|
180
|
+
return low;
|
|
181
|
+
}
|
|
182
|
+
export function findRangeEnd(stream, endLine) {
|
|
183
|
+
let low = 0;
|
|
184
|
+
let high = stream.toks.length;
|
|
185
|
+
while (low < high) {
|
|
186
|
+
const middle = (low + high) >> 1;
|
|
187
|
+
if (stream.toks[middle].line <= endLine)
|
|
188
|
+
low = middle + 1;
|
|
189
|
+
else
|
|
190
|
+
high = middle;
|
|
191
|
+
}
|
|
192
|
+
return low - 1;
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/quality/stream.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
export type AssertionStrength = "strong" | "weak" | "existence" | "snapshot";
|
|
2
|
+
export type AssertionExpectation = {
|
|
3
|
+
readonly kind: "status";
|
|
4
|
+
readonly value: number;
|
|
5
|
+
} | {
|
|
6
|
+
readonly kind: "throws";
|
|
7
|
+
} | {
|
|
8
|
+
readonly kind: "value";
|
|
9
|
+
} | {
|
|
10
|
+
readonly kind: "visible";
|
|
11
|
+
} | {
|
|
12
|
+
readonly kind: "url";
|
|
13
|
+
};
|
|
14
|
+
export interface AssertionFact {
|
|
15
|
+
readonly line: number;
|
|
16
|
+
readonly strength: AssertionStrength;
|
|
17
|
+
readonly expects: AssertionExpectation | null;
|
|
18
|
+
readonly text: string;
|
|
19
|
+
}
|
|
20
|
+
export type MockKind = "module" | "function" | "timer" | "network";
|
|
21
|
+
export interface MockFact {
|
|
22
|
+
readonly line: number;
|
|
23
|
+
readonly module: string | null;
|
|
24
|
+
readonly symbol: string | null;
|
|
25
|
+
readonly kind: MockKind;
|
|
26
|
+
}
|
|
27
|
+
export interface SleepFact {
|
|
28
|
+
readonly line: number;
|
|
29
|
+
readonly ms: number | null;
|
|
30
|
+
}
|
|
31
|
+
export interface SelectorFact {
|
|
32
|
+
readonly line: number;
|
|
33
|
+
readonly text: string;
|
|
34
|
+
readonly stability: "stable" | "unstable";
|
|
35
|
+
}
|
|
36
|
+
export interface SharedStateFact {
|
|
37
|
+
readonly line: number;
|
|
38
|
+
readonly name: string;
|
|
39
|
+
}
|
|
40
|
+
export interface HookFact {
|
|
41
|
+
readonly line: number;
|
|
42
|
+
readonly kind: "setup" | "teardown";
|
|
43
|
+
readonly scope: "each" | "all";
|
|
44
|
+
}
|
|
45
|
+
export interface HelperCallFact {
|
|
46
|
+
readonly line: number;
|
|
47
|
+
readonly name: string;
|
|
48
|
+
}
|
|
49
|
+
export interface TestSourceFacts {
|
|
50
|
+
readonly framework: string | null;
|
|
51
|
+
readonly assertions: readonly AssertionFact[];
|
|
52
|
+
readonly mocks: readonly MockFact[];
|
|
53
|
+
readonly sleeps: readonly SleepFact[];
|
|
54
|
+
readonly selectors: readonly SelectorFact[];
|
|
55
|
+
readonly sharedState: readonly SharedStateFact[];
|
|
56
|
+
readonly hooks: readonly HookFact[];
|
|
57
|
+
readonly helperCalls: readonly HelperCallFact[];
|
|
58
|
+
readonly skipped: boolean;
|
|
59
|
+
readonly focused: boolean;
|
|
60
|
+
}
|
|
61
|
+
export interface QualityRange {
|
|
62
|
+
readonly startLine: number;
|
|
63
|
+
readonly endLine: number;
|
|
64
|
+
}
|
|
65
|
+
export type FailureKind = "assertion" | "error" | "timeout" | "unknown";
|
|
66
|
+
export interface FailureLocation {
|
|
67
|
+
readonly file: string;
|
|
68
|
+
readonly line: number;
|
|
69
|
+
}
|
|
70
|
+
export interface NormalisedFailure {
|
|
71
|
+
readonly kind: FailureKind;
|
|
72
|
+
readonly message: string;
|
|
73
|
+
readonly location: FailureLocation | null;
|
|
74
|
+
}
|
|
75
|
+
export interface Unsupported {
|
|
76
|
+
readonly unsupported: string;
|
|
77
|
+
}
|
|
78
|
+
export interface TestQualityCatalog {
|
|
79
|
+
readonly version: 1;
|
|
80
|
+
readonly frameworkNames: readonly string[];
|
|
81
|
+
frameworkOf(testFile: string, repoRoot: string): string | null;
|
|
82
|
+
isTestFile(path: string, repoRoot: string): boolean;
|
|
83
|
+
factsFor(source: string, range: QualityRange, framework: string | null): TestSourceFacts | Unsupported;
|
|
84
|
+
failureOf(error: unknown): NormalisedFailure;
|
|
85
|
+
}
|
|
86
|
+
export type QualityFramework = "node:test" | "jest" | "vitest" | "mocha" | "playwright" | "pytest" | "unittest" | "junit" | "go" | "xunit";
|
|
87
|
+
export type QualityLanguage = "javascript" | "python" | "java" | "go" | "csharp";
|
|
88
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/quality/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/quality/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { EmitFn } from "@descryy/runtime-contracts";
|
|
2
|
+
import type { ManagedProcess } from "@descryy/runtime-controller";
|
|
3
|
+
export declare const DEFAULT_TEST_RUN_TIMEOUT_MS: number;
|
|
4
|
+
export declare const LARGEST_RUN_TIMEOUT_MS = 2147483647;
|
|
5
|
+
export type RunTimeoutResolution = {
|
|
6
|
+
readonly ok: true;
|
|
7
|
+
readonly timeoutMs: number;
|
|
8
|
+
} | {
|
|
9
|
+
readonly ok: false;
|
|
10
|
+
readonly reason: string;
|
|
11
|
+
};
|
|
12
|
+
export declare function resolveRunTimeout(timeoutMs: number | undefined): RunTimeoutResolution;
|
|
13
|
+
export declare function runTimeoutReason(runner: string, timeoutMs: number): string;
|
|
14
|
+
export interface RunTimeoutGuard {
|
|
15
|
+
readonly timedOut: () => boolean;
|
|
16
|
+
readonly cancel: () => void;
|
|
17
|
+
}
|
|
18
|
+
export declare function armRunTimeout(managed: ManagedProcess, details: {
|
|
19
|
+
readonly runner: string;
|
|
20
|
+
readonly timeoutMs: number;
|
|
21
|
+
readonly emit: EmitFn;
|
|
22
|
+
readonly service: string | null;
|
|
23
|
+
readonly processId: string;
|
|
24
|
+
}): RunTimeoutGuard;
|
|
25
|
+
//# sourceMappingURL=run-timeout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-timeout.d.ts","sourceRoot":"","sources":["../src/run-timeout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAIlE,eAAO,MAAM,2BAA2B,QAAiB,CAAC;AAC1D,eAAO,MAAM,sBAAsB,aAAgB,CAAC;AAEpD,MAAM,MAAM,oBAAoB,GAAG;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvI,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,oBAAoB,CAcrF;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAK1E;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACnJ,eAAe,CA4BjB"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { COLLECTOR_VERSION } from "./collector-version.js";
|
|
2
|
+
export const DEFAULT_TEST_RUN_TIMEOUT_MS = 30 * 60 * 1000;
|
|
3
|
+
export const LARGEST_RUN_TIMEOUT_MS = 2_147_483_647;
|
|
4
|
+
export function resolveRunTimeout(timeoutMs) {
|
|
5
|
+
if (timeoutMs === undefined)
|
|
6
|
+
return { ok: true, timeoutMs: DEFAULT_TEST_RUN_TIMEOUT_MS };
|
|
7
|
+
if (!Number.isSafeInteger(timeoutMs) || timeoutMs <= 0) {
|
|
8
|
+
return { ok: false, reason: `timeoutMs must be a positive whole number of milliseconds, got ${String(timeoutMs)}; nothing was run.` };
|
|
9
|
+
}
|
|
10
|
+
if (timeoutMs > LARGEST_RUN_TIMEOUT_MS) {
|
|
11
|
+
return {
|
|
12
|
+
ok: false,
|
|
13
|
+
reason: `timeoutMs must be at most ${String(LARGEST_RUN_TIMEOUT_MS)} ms (about 24.8 days; a larger delay makes the timer fire immediately), got ${String(timeoutMs)}; ` +
|
|
14
|
+
"nothing was run. Omit timeoutMs for the default, or pass the largest allowed value for the longest deadline.",
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
return { ok: true, timeoutMs };
|
|
18
|
+
}
|
|
19
|
+
export function runTimeoutReason(runner, timeoutMs) {
|
|
20
|
+
return (`the ${runner} run did not finish within ${String(timeoutMs)} ms and was stopped; ` +
|
|
21
|
+
"tests that had not reported a result by then were not observed, so the results reported for this run are incomplete.");
|
|
22
|
+
}
|
|
23
|
+
export function armRunTimeout(managed, details) {
|
|
24
|
+
let fired = false;
|
|
25
|
+
const timer = setTimeout(() => {
|
|
26
|
+
fired = true;
|
|
27
|
+
details.emit({
|
|
28
|
+
timestamp: new Date().toISOString(),
|
|
29
|
+
source: "test-runner",
|
|
30
|
+
service: details.service,
|
|
31
|
+
process: details.processId,
|
|
32
|
+
traceId: null,
|
|
33
|
+
requestId: null,
|
|
34
|
+
correlationId: null,
|
|
35
|
+
graphNodeId: null,
|
|
36
|
+
stackTrace: null,
|
|
37
|
+
confidence: 1,
|
|
38
|
+
redactionStatus: "pending-redaction",
|
|
39
|
+
collectorVersion: COLLECTOR_VERSION,
|
|
40
|
+
eventType: "COLLECTOR_ERROR",
|
|
41
|
+
payload: { collector: details.runner, reason: runTimeoutReason(details.runner, details.timeoutMs), timeoutMs: details.timeoutMs },
|
|
42
|
+
sourceLocation: null,
|
|
43
|
+
});
|
|
44
|
+
void managed.kill();
|
|
45
|
+
}, details.timeoutMs);
|
|
46
|
+
const cancel = () => {
|
|
47
|
+
clearTimeout(timer);
|
|
48
|
+
};
|
|
49
|
+
void managed.waitForExit().then(cancel);
|
|
50
|
+
return { timedOut: () => fired, cancel };
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=run-timeout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-timeout.js","sourceRoot":"","sources":["../src/run-timeout.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,MAAM,CAAC,MAAM,2BAA2B,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAC1D,MAAM,CAAC,MAAM,sBAAsB,GAAG,aAAa,CAAC;AAIpD,MAAM,UAAU,iBAAiB,CAAC,SAA6B;IAC7D,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,2BAA2B,EAAE,CAAC;IACzF,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QACvD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,kEAAkE,MAAM,CAAC,SAAS,CAAC,oBAAoB,EAAE,CAAC;IACxI,CAAC;IACD,IAAI,SAAS,GAAG,sBAAsB,EAAE,CAAC;QACvC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EACJ,6BAA6B,MAAM,CAAC,sBAAsB,CAAC,+EAA+E,MAAM,CAAC,SAAS,CAAC,IAAI;gBAC/J,8GAA8G;SACjH,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAc,EAAE,SAAiB;IAChE,OAAO,CACL,OAAO,MAAM,8BAA8B,MAAM,CAAC,SAAS,CAAC,uBAAuB;QACnF,sHAAsH,CACvH,CAAC;AACJ,CAAC;AAOD,MAAM,UAAU,aAAa,CAC3B,OAAuB,EACvB,OAAoJ;IAEpJ,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;QAC5B,KAAK,GAAG,IAAI,CAAC;QACb,OAAO,CAAC,IAAI,CAAC;YACX,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,MAAM,EAAE,aAAa;YACrB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,OAAO,CAAC,SAAS;YAC1B,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,IAAI;YACf,aAAa,EAAE,IAAI;YACnB,WAAW,EAAE,IAAI;YACjB,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE,CAAC;YACb,eAAe,EAAE,mBAAmB;YACpC,gBAAgB,EAAE,iBAAiB;YACnC,SAAS,EAAE,iBAAiB;YAC5B,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,gBAAgB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE;YACjI,cAAc,EAAE,IAAI;SACrB,CAAC,CAAC;QACH,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACtB,MAAM,MAAM,GAAG,GAAS,EAAE;QACxB,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC,CAAC;IACF,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxC,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runner wrappers -- the tools a project runs its tests through: `uv run pytest`,
|
|
3
|
+
* `poetry run pytest`, `npx vitest run`, `pnpm exec jest`.
|
|
4
|
+
*
|
|
5
|
+
* **Declared grammar, never a guess.** Each wrapper lists which of its own flags take a value,
|
|
6
|
+
* which take none, and which are refused (with why). The runner is the first token after the
|
|
7
|
+
* wrapper's own flags, so `uv run --with pytest python -m unittest` is not mistaken for pytest,
|
|
8
|
+
* and a flag the grammar does not know is refused by name rather than skipped past -- a wrong
|
|
9
|
+
* split would silently drop a flag the caller wrote.
|
|
10
|
+
*
|
|
11
|
+
* **Nothing is installed during a run.** A wrapper that would build, sync or download an
|
|
12
|
+
* environment is either run offline or refused with the command that prepares it. Where the
|
|
13
|
+
* environment lives outside the repository, `locateWrapperEnvironment` finds it (from files, or
|
|
14
|
+
* by the wrapper's own read-only query) so the sandbox can bind it read-only.
|
|
15
|
+
*/
|
|
16
|
+
export type WrapperEcosystem = "python" | "node";
|
|
17
|
+
/** A wrapper as matched on one command: what to put in front of the runner when spawning it. */
|
|
18
|
+
export interface WrapperMatch {
|
|
19
|
+
readonly name: string;
|
|
20
|
+
readonly ecosystem: WrapperEcosystem;
|
|
21
|
+
/** The wrapper binary exactly as the caller wrote it. */
|
|
22
|
+
readonly command: string;
|
|
23
|
+
/** The wrapper's own tokens, subcommand included, up to the runner. */
|
|
24
|
+
readonly args: readonly string[];
|
|
25
|
+
/** Written directly in front of the runner's own name when spawning (`test:` for `hatch run test:pytest`), else empty. */
|
|
26
|
+
readonly innerPrefix: string;
|
|
27
|
+
/** A project directory the caller passed to the wrapper (`poetry -C backend`, `uv run --project svc`), relative to cwd. */
|
|
28
|
+
readonly projectDir: string | null;
|
|
29
|
+
readonly downloads: boolean;
|
|
30
|
+
}
|
|
31
|
+
export type UnwrapResult = {
|
|
32
|
+
readonly kind: "none";
|
|
33
|
+
} | {
|
|
34
|
+
readonly kind: "wrapped";
|
|
35
|
+
readonly wrapper: WrapperMatch;
|
|
36
|
+
readonly inner: {
|
|
37
|
+
readonly command: string;
|
|
38
|
+
readonly args: readonly string[];
|
|
39
|
+
};
|
|
40
|
+
} | {
|
|
41
|
+
readonly kind: "refused";
|
|
42
|
+
readonly reason: string;
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Splits a command into wrapper and runner, when it is a wrapper. Pure: reads nothing from disk.
|
|
46
|
+
* `none` for a command no wrapper grammar claims; `refused` for one it claims and cannot split.
|
|
47
|
+
*/
|
|
48
|
+
export declare function unwrapRunnerCommand(command: string, args: readonly string[]): UnwrapResult;
|
|
49
|
+
/** The argv to spawn: the wrapper, its own tokens, then the runner with its (reporter-extended) args. */
|
|
50
|
+
export declare function wrappedSpawnArgs(wrapper: WrapperMatch, runnerCommand: string, runnerArgs: readonly string[]): readonly string[];
|
|
51
|
+
export type WrapperEnvironment = {
|
|
52
|
+
readonly ok: true;
|
|
53
|
+
/** Paths the run reads and must not change, outside the repository: bind them read-only. */
|
|
54
|
+
readonly readOnlyRoots: readonly string[];
|
|
55
|
+
/** Added to the child's environment: offline switches and a throwaway cache. */
|
|
56
|
+
readonly env: Readonly<Record<string, string>>;
|
|
57
|
+
/** What the run will not do that the wrapper normally would, said to the caller. */
|
|
58
|
+
readonly disclosures: readonly string[];
|
|
59
|
+
readonly cleanup?: () => void;
|
|
60
|
+
} | {
|
|
61
|
+
readonly ok: false;
|
|
62
|
+
readonly reason: string;
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* Where a wrapper's environment lives, and how to run it without it changing: the read-only roots
|
|
66
|
+
* the sandbox binds, the offline switches, and what that means for the caller. Refuses -- with
|
|
67
|
+
* the command that fixes it -- when there is no environment yet, because creating one is an
|
|
68
|
+
* install, and a run never installs.
|
|
69
|
+
*
|
|
70
|
+
* `env` is what the child will run with; `runnerCommand` is the runner's own name, needed for the
|
|
71
|
+
* wrappers that would otherwise download it.
|
|
72
|
+
*/
|
|
73
|
+
export declare function locateWrapperEnvironment(wrapper: WrapperMatch, cwd: string, env: Readonly<Record<string, string | undefined>>, runnerCommand?: string): WrapperEnvironment;
|
|
74
|
+
//# sourceMappingURL=runner-wrappers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner-wrappers.d.ts","sourceRoot":"","sources":["../src/runner-wrappers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAWH,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,MAAM,CAAC;AA0JjD,gGAAgG;AAChG,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACrC,yDAAyD;IACzD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,uEAAuE;IACvE,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,0HAA0H;IAC1H,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,2HAA2H;IAC3H,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,MAAM,YAAY,GACpB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,CAAA;CAAE,GAC5I;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAqD1D;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,YAAY,CA2D1F;AAWD,yGAAyG;AACzG,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,MAAM,EAAE,CAE/H;AAID,MAAM,MAAM,kBAAkB,GAC1B;IACE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAClB,4FAA4F;IAC5F,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,gFAAgF;IAChF,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/C,oFAAoF;IACpF,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CAC/B,GACD;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAwMpD;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,YAAY,EACrB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,EACjD,aAAa,CAAC,EAAE,MAAM,GACrB,kBAAkB,CA6GpB"}
|