velocious 1.0.603 → 1.0.604
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 +23 -1
- package/build/configuration.js +19 -0
- package/build/database/drivers/base.js +105 -7
- package/build/database/drivers/mysql/index.js +21 -6
- package/build/database/pool/async-tracked-multi-connection.js +136 -28
- package/build/database/pool/base.js +1 -1
- package/build/environment-handlers/base.js +16 -0
- package/build/environment-handlers/node/cli/commands/test.js +220 -84
- package/build/environment-handlers/node.js +40 -1
- package/build/src/configuration.d.ts +9 -0
- package/build/src/configuration.d.ts.map +1 -1
- package/build/src/configuration.js +17 -1
- package/build/src/database/drivers/base.d.ts +40 -1
- package/build/src/database/drivers/base.d.ts.map +1 -1
- package/build/src/database/drivers/base.js +97 -8
- package/build/src/database/drivers/mysql/index.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/index.js +25 -9
- package/build/src/database/pool/async-tracked-multi-connection.d.ts +42 -2
- package/build/src/database/pool/async-tracked-multi-connection.d.ts.map +1 -1
- package/build/src/database/pool/async-tracked-multi-connection.js +119 -30
- package/build/src/database/pool/base.d.ts +11 -1
- package/build/src/database/pool/base.d.ts.map +1 -1
- package/build/src/database/pool/base.js +2 -2
- package/build/src/environment-handlers/base.d.ts +14 -0
- package/build/src/environment-handlers/base.d.ts.map +1 -1
- package/build/src/environment-handlers/base.js +15 -1
- package/build/src/environment-handlers/node/cli/commands/test.d.ts +22 -0
- package/build/src/environment-handlers/node/cli/commands/test.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/test.js +200 -82
- package/build/src/environment-handlers/node.d.ts +14 -0
- package/build/src/environment-handlers/node.d.ts.map +1 -1
- package/build/src/environment-handlers/node.js +38 -2
- package/build/src/testing/test-filter-parser.d.ts +15 -0
- package/build/src/testing/test-filter-parser.d.ts.map +1 -1
- package/build/src/testing/test-filter-parser.js +57 -6
- package/build/src/testing/test-profile-activity.d.ts +7 -0
- package/build/src/testing/test-profile-activity.d.ts.map +1 -0
- package/build/src/testing/test-profile-activity.js +13 -0
- package/build/src/testing/test-profile-context.d.ts +15 -0
- package/build/src/testing/test-profile-context.d.ts.map +1 -0
- package/build/src/testing/test-profile-context.js +25 -0
- package/build/src/testing/test-profile-output.d.ts +30 -0
- package/build/src/testing/test-profile-output.d.ts.map +1 -0
- package/build/src/testing/test-profile-output.js +204 -0
- package/build/src/testing/test-profiler.d.ts +668 -0
- package/build/src/testing/test-profiler.d.ts.map +1 -0
- package/build/src/testing/test-profiler.js +847 -0
- package/build/src/testing/test-runner.d.ts +85 -2
- package/build/src/testing/test-runner.d.ts.map +1 -1
- package/build/src/testing/test-runner.js +182 -33
- package/build/testing/test-filter-parser.js +57 -5
- package/build/testing/test-profile-activity.js +14 -0
- package/build/testing/test-profile-context.js +28 -0
- package/build/testing/test-profile-output.js +240 -0
- package/build/testing/test-profiler.js +917 -0
- package/build/testing/test-runner.js +196 -33
- package/build/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/configuration.js +19 -0
- package/src/database/drivers/base.js +105 -7
- package/src/database/drivers/mysql/index.js +21 -6
- package/src/database/pool/async-tracked-multi-connection.js +136 -28
- package/src/database/pool/base.js +1 -1
- package/src/environment-handlers/base.js +16 -0
- package/src/environment-handlers/node/cli/commands/test.js +220 -84
- package/src/environment-handlers/node.js +40 -1
- package/src/testing/test-filter-parser.js +57 -5
- package/src/testing/test-profile-activity.js +14 -0
- package/src/testing/test-profile-context.js +28 -0
- package/src/testing/test-profile-output.js +240 -0
- package/src/testing/test-profiler.js +917 -0
- package/src/testing/test-runner.js +196 -33
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../../../../../src/environment-handlers/node/cli/commands/test.js"],"names":[],"mappings":"AAEA,OAAO,WAAW,MAAM,iCAAiC,CAAA;
|
|
1
|
+
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../../../../../src/environment-handlers/node/cli/commands/test.js"],"names":[],"mappings":"AAEA,OAAO,WAAW,MAAM,iCAAiC,CAAA;AAYzD,MAAM,CAAC,OAAO,OAAO,wBAAyB,SAAQ,WAAW;IACzD,OAAO,kBAgOZ;CACF;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CAAC,EAAC,GAAG,EAAE,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,wBAAwB,EAAC,EAPpH;IAAqB,GAAG,EAAhB,MAAM,CACd;IAAsB,OAAO,EAArB,OAAO,CACf;IAAsB,eAAe,AAArC,CACA,EADQ,MAAM,CACd;IAAsB,kBAAkB,AAAxC,CACA,EADQ,MAAM,CACd;IAAsB,wBAAwB,AAA9C,CACA,EADQ,MAAM,CACd;CAEoH,GAF1G;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,wBAAwB,EAAE,MAAM,GAAG,SAAS,CAAA;CAAC,CA0BzJ;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,kBAAkB,EAHhD,MAAM,GAAG,SAGuC,GAF9C,OAAO,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,CAY9D;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAHrC,MAAM,GAAG,SAG4B,GAFnC,MAAM,CAMlB"}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
// @ts-check
|
|
2
2
|
import BaseCommand from "../../../../cli/base-command.js";
|
|
3
3
|
import fs from "fs/promises";
|
|
4
|
+
import path from "node:path";
|
|
4
5
|
import picocolors from "picocolors";
|
|
5
6
|
import TestFilesFinder from "../../../../testing/test-files-finder.js";
|
|
7
|
+
import TestProfiler from "../../../../testing/test-profiler.js";
|
|
8
|
+
import { formatTestProfileSummary, writeTestProfileOutputs } from "../../../../testing/test-profile-output.js";
|
|
6
9
|
import TestRunner from "../../../../testing/test-runner.js";
|
|
7
10
|
import TestSuiteSplitter from "../../../../testing/test-suite-splitter.js";
|
|
8
11
|
import { normalizeExamplePatterns, parseFilters } from "../../../../testing/test-filter-parser.js";
|
|
@@ -23,100 +26,215 @@ export default class VelociousCliCommandsTest extends BaseCommand {
|
|
|
23
26
|
directories.push(`${this.directory()}/tests`);
|
|
24
27
|
directories.push(`${this.directory()}/spec`);
|
|
25
28
|
}
|
|
26
|
-
const { includeTags, excludeTags, examplePatterns, filteredProcessArgs, groups, groupNumber, timingManifestPath } = parseFilters(this.processArgs || []);
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
const timingManifest = await loadTimingManifest(timingManifestPath);
|
|
34
|
-
const splitter = new TestSuiteSplitter({ groups, groupNumber, testFiles, baseDirectory: directory, timingManifest });
|
|
35
|
-
testFiles = splitter.getGroupFiles();
|
|
36
|
-
console.log(picocolors.cyan(`Running group ${groupNumber} of ${groups} (${testFiles.length} files)`));
|
|
37
|
-
}
|
|
38
|
-
const testRunner = new TestRunner({
|
|
39
|
-
configuration: this.getConfiguration(),
|
|
40
|
-
excludeTags,
|
|
41
|
-
includeTags,
|
|
42
|
-
testFiles,
|
|
43
|
-
lineFilters: testFilesFinder.getLineFiltersByFile(),
|
|
44
|
-
examplePatterns: normalizeExamplePatterns(examplePatterns)
|
|
29
|
+
const { includeTags, excludeTags, examplePatterns, filteredProcessArgs, groups, groupNumber, profile, profileJsonPath, timingManifestPath, timingManifestOutputPath } = parseFilters(this.processArgs || []);
|
|
30
|
+
const profileOptions = resolveTestProfileOptions({
|
|
31
|
+
cwd: process.cwd(),
|
|
32
|
+
profile,
|
|
33
|
+
profileJsonPath,
|
|
34
|
+
timingManifestPath,
|
|
35
|
+
timingManifestOutputPath
|
|
45
36
|
});
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
37
|
+
const selection = {
|
|
38
|
+
excludeTagCount: excludeTags.length,
|
|
39
|
+
hasExampleFilters: examplePatterns.length > 0,
|
|
40
|
+
includeTagCount: includeTags.length,
|
|
41
|
+
shard: groups !== undefined && groupNumber !== undefined ? { groups, groupNumber } : undefined
|
|
42
|
+
};
|
|
43
|
+
const profiler = profileOptions.profile
|
|
44
|
+
? new TestProfiler({ configuration: this.getConfiguration(), projectDirectory: directory, selection })
|
|
45
|
+
: undefined;
|
|
46
|
+
const testFilesFinder = new TestFilesFinder({ directory, directories, processArgs: filteredProcessArgs });
|
|
47
|
+
/** @type {TestRunner | undefined} */
|
|
48
|
+
let testRunner;
|
|
49
|
+
let profileFinalized = false;
|
|
50
|
+
/**
|
|
51
|
+
* Finalizes requested outputs once for every command outcome.
|
|
52
|
+
* @param {string} status - Run status.
|
|
53
|
+
* @returns {Promise<void>} - Resolves after requested outputs are written.
|
|
54
|
+
*/
|
|
55
|
+
const finalizeProfile = async (status) => {
|
|
56
|
+
if (!profiler || profileFinalized)
|
|
49
57
|
return;
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
58
|
+
profileFinalized = true;
|
|
59
|
+
const failed = testRunner?.getFailedTests() ?? 0;
|
|
60
|
+
const passed = testRunner?.getSuccessfulTests() ?? 0;
|
|
61
|
+
const profileDocument = profiler.finish({
|
|
62
|
+
counts: {
|
|
63
|
+
discovered: testRunner?.getTestsCount() ?? 0,
|
|
64
|
+
executed: testRunner?.getExecutedTestsCount() ?? 0,
|
|
65
|
+
failed,
|
|
66
|
+
passed
|
|
67
|
+
},
|
|
68
|
+
focused: Boolean(testRunner?.anyTestsFocussed),
|
|
69
|
+
status
|
|
70
|
+
});
|
|
71
|
+
await writeTestProfileOutputs({
|
|
72
|
+
profile: profileDocument,
|
|
73
|
+
profileJsonPath: profileOptions.profileJsonPath,
|
|
74
|
+
timingManifestOutputPath: profileOptions.timingManifestOutputPath
|
|
75
|
+
});
|
|
76
|
+
console.log(`\n${formatTestProfileSummary(profileDocument, profileOptions)}`);
|
|
77
|
+
};
|
|
78
|
+
try {
|
|
79
|
+
const discoverTestFiles = async () => {
|
|
80
|
+
let discoveredTestFiles = await testFilesFinder.findTestFiles();
|
|
81
|
+
if (groups !== undefined || groupNumber !== undefined) {
|
|
82
|
+
if (groups === undefined || groupNumber === undefined) {
|
|
83
|
+
throw new Error("Both --groups and --group-number must be provided together");
|
|
84
|
+
}
|
|
85
|
+
const timingManifest = await loadTimingManifest(profileOptions.timingManifestPath);
|
|
86
|
+
const splitter = new TestSuiteSplitter({
|
|
87
|
+
groups,
|
|
88
|
+
groupNumber,
|
|
89
|
+
testFiles: discoveredTestFiles,
|
|
90
|
+
baseDirectory: directory,
|
|
91
|
+
timingManifest
|
|
92
|
+
});
|
|
93
|
+
discoveredTestFiles = splitter.getGroupFiles();
|
|
94
|
+
console.log(picocolors.cyan(`Running group ${groupNumber} of ${groups} (${discoveredTestFiles.length} files)`));
|
|
95
|
+
}
|
|
96
|
+
return discoveredTestFiles;
|
|
97
|
+
};
|
|
98
|
+
const testFiles = profiler
|
|
99
|
+
? await profiler.measurePhase("discovery", discoverTestFiles)
|
|
100
|
+
: await discoverTestFiles();
|
|
101
|
+
profiler?.setSelection({ fileCount: testFiles.length });
|
|
102
|
+
testRunner = new TestRunner({
|
|
103
|
+
configuration: this.getConfiguration(),
|
|
104
|
+
excludeTags,
|
|
105
|
+
includeTags,
|
|
106
|
+
testFiles,
|
|
107
|
+
lineFilters: testFilesFinder.getLineFiltersByFile(),
|
|
108
|
+
examplePatterns: normalizeExamplePatterns(examplePatterns),
|
|
109
|
+
profiler
|
|
110
|
+
});
|
|
111
|
+
const activeTestRunner = testRunner;
|
|
112
|
+
let signalHandled = false;
|
|
113
|
+
const handleSignal = async (/** @type {string} */ signal) => {
|
|
114
|
+
if (signalHandled)
|
|
115
|
+
return;
|
|
116
|
+
signalHandled = true;
|
|
117
|
+
profiler?.interrupt();
|
|
118
|
+
console.error(`\nReceived ${signal}, running afterAll hooks before exit...`);
|
|
119
|
+
try {
|
|
120
|
+
await activeTestRunner.runAfterAllsForActiveScopes();
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
console.error("Failed while running afterAll hooks:", error);
|
|
124
|
+
}
|
|
125
|
+
finally {
|
|
126
|
+
try {
|
|
127
|
+
await finalizeProfile("interrupted");
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
console.error("Failed while writing interrupted test profile:", error);
|
|
131
|
+
}
|
|
132
|
+
process.exit(130);
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
process.once("SIGINT", () => { void handleSignal("SIGINT"); });
|
|
136
|
+
process.once("SIGTERM", () => { void handleSignal("SIGTERM"); });
|
|
137
|
+
await testRunner.prepare();
|
|
138
|
+
if (testRunner.getTestsCount() === 0) {
|
|
139
|
+
await finalizeProfile("no-tests");
|
|
140
|
+
throw new Error(`${testRunner.getTestsCount()} tests was found in ${testFiles.length} file(s)`);
|
|
57
141
|
}
|
|
58
|
-
|
|
59
|
-
|
|
142
|
+
await testRunner.run();
|
|
143
|
+
const executedTests = testRunner.getExecutedTestsCount();
|
|
144
|
+
const lineFilters = testRunner.getLineFilters();
|
|
145
|
+
const hasLineFilters = Object.keys(lineFilters).length > 0;
|
|
146
|
+
const hasExampleFilters = examplePatterns.length > 0;
|
|
147
|
+
const hasTagFilters = includeTags.length > 0 || excludeTags.length > 0;
|
|
148
|
+
if ((hasTagFilters || hasLineFilters || hasExampleFilters) && executedTests === 0) {
|
|
149
|
+
console.error(picocolors.red("\nNo tests matched the provided filters"));
|
|
150
|
+
await finalizeProfile("no-tests");
|
|
151
|
+
process.exit(1);
|
|
60
152
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
const hasTagFilters = includeTags.length > 0 || excludeTags.length > 0;
|
|
74
|
-
if ((hasTagFilters || hasLineFilters || hasExampleFilters) && executedTests === 0) {
|
|
75
|
-
console.error(picocolors.red("\nNo tests matched the provided filters"));
|
|
76
|
-
process.exit(1);
|
|
77
|
-
}
|
|
78
|
-
// Report the slowest tests so suite hotspots are visible every run. Defaults to
|
|
79
|
-
// the top 10; tune with VELOCIOUS_SLOW_TEST_COUNT (0 disables). Skipped for
|
|
80
|
-
// single-test runs where it would just be noise.
|
|
81
|
-
const slowTestCount = resolveSlowTestCount(process.env.VELOCIOUS_SLOW_TEST_COUNT);
|
|
82
|
-
if (slowTestCount > 0 && executedTests > 1) {
|
|
83
|
-
const slowestTests = testRunner.getSlowestTests(slowTestCount);
|
|
84
|
-
if (slowestTests.length > 0) {
|
|
85
|
-
console.log(picocolors.cyan(`\nSlowest ${slowestTests.length} tests:`));
|
|
86
|
-
for (const slowTest of slowestTests) {
|
|
87
|
-
const location = slowTest.filePath && slowTest.line ? ` (${slowTest.filePath}:${slowTest.line})` : "";
|
|
88
|
-
console.log(picocolors.cyan(` ${String(slowTest.durationMs).padStart(6)}ms ${slowTest.fullDescription}${location}`));
|
|
153
|
+
// Report the slowest tests so suite hotspots are visible every run. Defaults to
|
|
154
|
+
// the top 10; tune with VELOCIOUS_SLOW_TEST_COUNT (0 disables). Skipped for
|
|
155
|
+
// single-test runs where it would just be noise.
|
|
156
|
+
const slowTestCount = resolveSlowTestCount(process.env.VELOCIOUS_SLOW_TEST_COUNT);
|
|
157
|
+
if (slowTestCount > 0 && executedTests > 1) {
|
|
158
|
+
const slowestTests = testRunner.getSlowestTests(slowTestCount);
|
|
159
|
+
if (slowestTests.length > 0) {
|
|
160
|
+
console.log(picocolors.cyan(`\nSlowest ${slowestTests.length} tests:`));
|
|
161
|
+
for (const slowTest of slowestTests) {
|
|
162
|
+
const location = slowTest.filePath && slowTest.line ? ` (${slowTest.filePath}:${slowTest.line})` : "";
|
|
163
|
+
console.log(picocolors.cyan(` ${String(slowTest.durationMs).padStart(6)}ms ${slowTest.fullDescription}${location}`));
|
|
164
|
+
}
|
|
89
165
|
}
|
|
90
166
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
167
|
+
if (testRunner.isFailed()) {
|
|
168
|
+
await testRunner.persistFailedTestConsoleOutputsToAssets();
|
|
169
|
+
const failedTests = testRunner.getFailedTestDetails();
|
|
170
|
+
if (failedTests.length > 0) {
|
|
171
|
+
console.error(picocolors.red("\nFailed tests:"));
|
|
172
|
+
for (const failed of failedTests) {
|
|
173
|
+
const location = failed.filePath && failed.line
|
|
174
|
+
? ` (${failed.filePath}:${failed.line})`
|
|
175
|
+
: "";
|
|
176
|
+
console.error(picocolors.red(`- ${failed.fullDescription}${location}`));
|
|
177
|
+
if (failed.consoleLogPath) {
|
|
178
|
+
console.error(picocolors.red(` Console log: ${failed.consoleLogPath}`));
|
|
179
|
+
}
|
|
104
180
|
}
|
|
105
181
|
}
|
|
182
|
+
console.error(picocolors.red(`\nTest run failed with ${testRunner.getFailedTests()} failed tests and ${testRunner.getSuccessfulTests()} successfull`));
|
|
183
|
+
await finalizeProfile("failed");
|
|
184
|
+
process.exit(1);
|
|
185
|
+
}
|
|
186
|
+
else if (testRunner.areAnyTestsFocussed()) {
|
|
187
|
+
console.error(picocolors.red(`\nFocussed run with ${testRunner.getFailedTests()} failed tests and ${testRunner.getSuccessfulTests()} successfull`));
|
|
188
|
+
await finalizeProfile("focused");
|
|
189
|
+
process.exit(1);
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
console.log(picocolors.green(`\nTest run succeeded with ${testRunner.getSuccessfulTests()} successful tests`));
|
|
193
|
+
await finalizeProfile("passed");
|
|
194
|
+
process.exit(0);
|
|
106
195
|
}
|
|
107
|
-
console.error(picocolors.red(`\nTest run failed with ${testRunner.getFailedTests()} failed tests and ${testRunner.getSuccessfulTests()} successfull`));
|
|
108
|
-
process.exit(1);
|
|
109
|
-
}
|
|
110
|
-
else if (testRunner.areAnyTestsFocussed()) {
|
|
111
|
-
console.error(picocolors.red(`\nFocussed run with ${testRunner.getFailedTests()} failed tests and ${testRunner.getSuccessfulTests()} successfull`));
|
|
112
|
-
process.exit(1);
|
|
113
196
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
197
|
+
catch (error) {
|
|
198
|
+
try {
|
|
199
|
+
await finalizeProfile("error");
|
|
200
|
+
}
|
|
201
|
+
catch (profileError) {
|
|
202
|
+
throw new AggregateError([error, profileError], "Test command and profile finalization both failed", { cause: profileError });
|
|
203
|
+
}
|
|
204
|
+
throw error;
|
|
117
205
|
}
|
|
118
206
|
}
|
|
119
207
|
}
|
|
208
|
+
/**
|
|
209
|
+
* Resolves and validates profiling paths before test discovery starts.
|
|
210
|
+
* @param {object} args - Raw profiling options.
|
|
211
|
+
* @param {string} args.cwd - Command working directory.
|
|
212
|
+
* @param {boolean} args.profile - Whether console profiling was requested.
|
|
213
|
+
* @param {string} [args.profileJsonPath] - Rich profile output path.
|
|
214
|
+
* @param {string} [args.timingManifestPath] - Timing manifest input path.
|
|
215
|
+
* @param {string} [args.timingManifestOutputPath] - Timing manifest output path.
|
|
216
|
+
* @returns {{profile: boolean, profileJsonPath: string | undefined, timingManifestPath: string | undefined, timingManifestOutputPath: string | undefined}} - Resolved profiling options.
|
|
217
|
+
*/
|
|
218
|
+
export function resolveTestProfileOptions({ cwd, profile, profileJsonPath, timingManifestPath, timingManifestOutputPath }) {
|
|
219
|
+
const resolvedProfileJsonPath = profileJsonPath ? path.resolve(cwd, profileJsonPath) : undefined;
|
|
220
|
+
const resolvedTimingManifestPath = timingManifestPath ? path.resolve(cwd, timingManifestPath) : undefined;
|
|
221
|
+
const resolvedTimingManifestOutputPath = timingManifestOutputPath
|
|
222
|
+
? path.resolve(cwd, timingManifestOutputPath)
|
|
223
|
+
: undefined;
|
|
224
|
+
if (resolvedProfileJsonPath && resolvedTimingManifestOutputPath && resolvedProfileJsonPath === resolvedTimingManifestOutputPath) {
|
|
225
|
+
throw new Error("Test profiling output paths must be different");
|
|
226
|
+
}
|
|
227
|
+
if (resolvedTimingManifestPath && (resolvedProfileJsonPath === resolvedTimingManifestPath ||
|
|
228
|
+
resolvedTimingManifestOutputPath === resolvedTimingManifestPath)) {
|
|
229
|
+
throw new Error("Test profiling outputs must not overwrite --timing-manifest input");
|
|
230
|
+
}
|
|
231
|
+
return {
|
|
232
|
+
profile: profile || Boolean(resolvedProfileJsonPath || resolvedTimingManifestOutputPath),
|
|
233
|
+
profileJsonPath: resolvedProfileJsonPath,
|
|
234
|
+
timingManifestPath: resolvedTimingManifestPath,
|
|
235
|
+
timingManifestOutputPath: resolvedTimingManifestOutputPath
|
|
236
|
+
};
|
|
237
|
+
}
|
|
120
238
|
/**
|
|
121
239
|
* Loads an optional JSON timing manifest. Unreadable or malformed input intentionally falls back to heuristics.
|
|
122
240
|
* @param {string | undefined} timingManifestPath - Timing manifest path.
|
|
@@ -146,4 +264,4 @@ export function resolveSlowTestCount(rawEnvValue) {
|
|
|
146
264
|
return 10;
|
|
147
265
|
return Math.max(0, Math.floor(Number(rawEnvValue)) || 0);
|
|
148
266
|
}
|
|
149
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9lbnZpcm9ubWVudC1oYW5kbGVycy9ub2RlL2NsaS9jb21tYW5kcy90ZXN0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLFdBQVcsTUFBTSxpQ0FBaUMsQ0FBQTtBQUN6RCxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDNUIsT0FBTyxVQUFVLE1BQU0sWUFBWSxDQUFBO0FBQ25DLE9BQU8sZUFBZSxNQUFNLDBDQUEwQyxDQUFBO0FBQ3RFLE9BQU8sVUFBVSxNQUFNLG9DQUFvQyxDQUFBO0FBQzNELE9BQU8saUJBQWlCLE1BQU0sNENBQTRDLENBQUE7QUFDMUUsT0FBTyxFQUFDLHdCQUF3QixFQUFFLFlBQVksRUFBQyxNQUFNLDJDQUEyQyxDQUFBO0FBQ2hHLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLDhCQUE4QixDQUFBO0FBRXJFLE1BQU0sQ0FBQyxPQUFPLE9BQU8sd0JBQXlCLFNBQVEsV0FBVztJQUMvRCxLQUFLLENBQUMsT0FBTztRQUNYLE1BQU0sd0JBQXdCLEVBQUUsQ0FBQTtRQUNoQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUE7UUFFOUMsSUFBSSxTQUFTLENBQUE7UUFDYixNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUE7UUFFdEIsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDbkMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUE7WUFDMUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUE7UUFDbEQsQ0FBQzthQUFNLENBQUM7WUFDTixTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFBO1lBQzVCLFdBQVcsQ0FBQyxJQUFJLENB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QU0sQ0FBQyxLQUFLLFVBQVUsa0JBQWtCLENBQUMsa0JBQWtCO0lBQ3pELElBQUksQ0FBQyxrQkFBa0I7UUFBRSxPQUFPLFNBQVMsQ0FBQTtJQUV6QyxJQUFJLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDbEUsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixJQUFJLEtBQUssWUFBWSxLQUFLO1lBQUUsT0FBTyxTQUFTLENBQUE7UUFFNUMsTUFBTSxLQUFLLENBQUE7SUFDYixDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxXQUFXO0lBQzlDLElBQUksV0FBVyxLQUFLLFNBQVM7UUFBRSxPQUFPLEVBQUUsQ0FBQTtJQUV4QyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7QUFDMUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgQmFzZUNvbW1hbmQgZnJvbSBcIi4uLy4uLy4uLy4uL2NsaS9iYXNlLWNvbW1hbmQuanNcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy9wcm9taXNlc1wiXG5pbXBvcnQgcGljb2NvbG9ycyBmcm9tIFwicGljb2NvbG9yc1wiXG5pbXBvcnQgVGVzdEZpbGVzRmluZGVyIGZyb20gXCIuLi8uLi8uLi8uLi90ZXN0aW5nL3Rlc3QtZmlsZXMtZmluZGVyLmpzXCJcbmltcG9ydCBUZXN0UnVubmVyIGZyb20gXCIuLi8uLi8uLi8uLi90ZXN0aW5nL3Rlc3QtcnVubmVyLmpzXCJcbmltcG9ydCBUZXN0U3VpdGVTcGxpdHRlciBmcm9tIFwiLi4vLi4vLi4vLi4vdGVzdGluZy90ZXN0LXN1aXRlLXNwbGl0dGVyLmpzXCJcbmltcG9ydCB7bm9ybWFsaXplRXhhbXBsZVBhdHRlcm5zLCBwYXJzZUZpbHRlcnN9IGZyb20gXCIuLi8uLi8uLi8uLi90ZXN0aW5nL3Rlc3QtZmlsdGVyLXBhcnNlci5qc1wiXG5pbXBvcnQge3ByZXBhcmVTb3VyY2VQZWVyUGFja2FnZX0gZnJvbSBcIi4uLy4uL3NvdXJjZS1wZWVyLXBhY2thZ2UuanNcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNDbGlDb21tYW5kc1Rlc3QgZXh0ZW5kcyBCYXNlQ29tbWFuZCB7XG4gIGFzeW5jIGV4ZWN1dGUoKSB7XG4gICAgYXdhaXQgcHJlcGFyZVNvdXJjZVBlZXJQYWNrYWdlKClcbiAgICB0aGlzLmdldENvbmZpZ3VyYXRpb24oKS5zZXRFbnZpcm9ubWVudChcInRlc3RcIilcblxuICAgIGxldCBkaXJlY3RvcnlcbiAgICBjb25zdCBkaXJlY3RvcmllcyA9IFtdXG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuVkVMT0NJT1VTX1RFU1RfRElSKSB7XG4gICAgICBkaXJlY3RvcnkgPSBwcm9jZXNzLmVudi5WRUxPQ0lPVVNfVEVTVF9ESVJcbiAgICAgIGRpcmVjdG9yaWVzLnB1c2gocHJvY2Vzcy5lbnYuVkVMT0NJT1VTX1RFU1RfRElSKVxuICAgIH0gZWxzZSB7XG4gICAgICBkaXJlY3RvcnkgPSB0aGlzLmRpcmVjdG9yeSgpXG4gICAgICBkaXJlY3Rvcmllcy5wdXNoKGAke3RoaXMuZGlyZWN0b3J5KCl9L19fdGVzdHNfX2ApXG4gICAgICBkaXJlY3Rvcmllcy5wdXNoKGAke3RoaXMuZGlyZWN0b3J5KCl9L3Rlc3RzYClcbiAgICAgIGRpcmVjdG9yaWVzLnB1c2goYCR7dGhpcy5kaXJlY3RvcnkoKX0vc3BlY2ApXG4gICAgfVxuXG4gICAgY29uc3Qge2luY2x1ZGVUYWdzLCBleGNsdWRlVGFncywgZXhhbXBsZVBhdHRlcm5zLCBmaWx0ZXJlZFByb2Nlc3NBcmdzLCBncm91cHMsIGdyb3VwTnVtYmVyLCB0aW1pbmdNYW5pZmVzdFBhdGh9ID0gcGFyc2VGaWx0ZXJzKHRoaXMucHJvY2Vzc0FyZ3MgfHwgW10pXG4gICAgY29uc3QgdGVzdEZpbGVzRmluZGVyID0gbmV3IFRlc3RGaWxlc0ZpbmRlcih7ZGlyZWN0b3J5LCBkaXJlY3RvcmllcywgcHJvY2Vzc0FyZ3M6IGZpbHRlcmVkUHJvY2Vzc0FyZ3N9KVxuICAgIGxldCB0ZXN0RmlsZXMgPSBhd2FpdCB0ZXN0RmlsZXNGaW5kZXIuZmluZFRlc3RGaWxlcygpXG5cbiAgICBpZiAoZ3JvdXBzICE9PSB1bmRlZmluZWQgfHwgZ3JvdXBOdW1iZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGdyb3VwcyA9PT0gdW5kZWZpbmVkIHx8IGdyb3VwTnVtYmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQm90aCAtLWdyb3VwcyBhbmQgLS1ncm91cC1udW1iZXIgbXVzdCBiZSBwcm92aWRlZCB0b2dldGhlclwiKVxuICAgICAgfVxuXG4gICAgICBjb25zdCB0aW1pbmdNYW5pZmVzdCA9IGF3YWl0IGxvYWRUaW1pbmdNYW5pZmVzdCh0aW1pbmdNYW5pZmVzdFBhdGgpXG4gICAgICBjb25zdCBzcGxpdHRlciA9IG5ldyBUZXN0U3VpdGVTcGxpdHRlcih7Z3JvdXBzLCBncm91cE51bWJlciwgdGVzdEZpbGVzLCBiYXNlRGlyZWN0b3J5OiBkaXJlY3RvcnksIHRpbWluZ01hbmlmZXN0fSlcblxuICAgICAgdGVzdEZpbGVzID0gc3BsaXR0ZXIuZ2V0R3JvdXBGaWxlcygpXG4gICAgICBjb25zb2xlLmxvZyhwaWNvY29sb3JzLmN5YW4oYFJ1bm5pbmcgZ3JvdXAgJHtncm91cE51bWJlcn0gb2YgJHtncm91cHN9ICgke3Rlc3RGaWxlcy5sZW5ndGh9IGZpbGVzKWApKVxuICAgIH1cblxuICAgIGNvbnN0IHRlc3RSdW5uZXIgPSBuZXcgVGVzdFJ1bm5lcih7XG4gICAgICBjb25maWd1cmF0aW9uOiB0aGlzLmdldENvbmZpZ3VyYXRpb24oKSxcbiAgICAgIGV4Y2x1ZGVUYWdzLFxuICAgICAgaW5jbHVkZVRhZ3MsXG4gICAgICB0ZXN0RmlsZXMsXG4gICAgICBsaW5lRmlsdGVyczogdGVzdEZpbGVzRmluZGVyLmdldExpbmVGaWx0ZXJzQnlGaWxlKCksXG4gICAgICBleGFtcGxlUGF0dGVybnM6IG5vcm1hbGl6ZUV4YW1wbGVQYXR0ZXJucyhleGFtcGxlUGF0dGVybnMpXG4gICAgfSlcbiAgICBsZXQgc2lnbmFsSGFuZGxlZCA9IGZhbHNlXG5cbiAgICBjb25zdCBoYW5kbGVTaWduYWwgPSBhc3luYyAoLyoqIEB0eXBlIHtzdHJpbmd9ICovIHNpZ25hbCkgPT4ge1xuICAgICAgaWYgKHNpZ25hbEhhbmRsZWQpIHJldHVyblxuICAgICAgc2lnbmFsSGFuZGxlZCA9IHRydWVcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFxcblJlY2VpdmVkICR7c2lnbmFsfSwgcnVubmluZyBhZnRlckFsbCBob29rcyBiZWZvcmUgZXhpdC4uLmApXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRlc3RSdW5uZXIucnVuQWZ0ZXJBbGxzRm9yQWN0aXZlU2NvcGVzKClcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgd2hpbGUgcnVubmluZyBhZnRlckFsbCBob29rczpcIiwgZXJyb3IpXG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBwcm9jZXNzLmV4aXQoMTMwKVxuICAgICAgfVxuICAgIH1cblxuICAgIHByb2Nlc3Mub25jZShcIlNJR0lOVFwiLCAoKSA9PiB7IHZvaWQgaGFuZGxlU2lnbmFsKFwiU0lHSU5UXCIpIH0pXG4gICAgcHJvY2Vzcy5vbmNlKFwiU0lHVEVSTVwiLCAoKSA9PiB7IHZvaWQgaGFuZGxlU2lnbmFsKFwiU0lHVEVSTVwiKSB9KVxuXG4gICAgYXdhaXQgdGVzdFJ1bm5lci5wcmVwYXJlKClcblxuICAgIGlmICh0ZXN0UnVubmVyLmdldFRlc3RzQ291bnQoKSA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3Rlc3RSdW5uZXIuZ2V0VGVzdHNDb3VudCgpfSB0ZXN0cyB3YXMgZm91bmQgaW4gJHt0ZXN0RmlsZXMubGVuZ3RofSBmaWxlKHMpYClcbiAgICB9XG5cbiAgICBhd2FpdCB0ZXN0UnVubmVyLnJ1bigpXG5cbiAgICBjb25zdCBleGVjdXRlZFRlc3RzID0gdGVzdFJ1bm5lci5nZXRFeGVjdXRlZFRlc3RzQ291bnQoKVxuXG4gICAgY29uc3QgbGluZUZpbHRlcnMgPSB0ZXN0UnVubmVyLmdldExpbmVGaWx0ZXJzKClcbiAgICBjb25zdCBoYXNMaW5lRmlsdGVycyA9IE9iamVjdC5rZXlzKGxpbmVGaWx0ZXJzKS5sZW5ndGggPiAwXG4gICAgY29uc3QgaGFzRXhhbXBsZUZpbHRlcnMgPSBleGFtcGxlUGF0dGVybnMubGVuZ3RoID4gMFxuICAgIGNvbnN0IGhhc1RhZ0ZpbHRlcnMgPSBpbmNsdWRlVGFncy5sZW5ndGggPiAwIHx8IGV4Y2x1ZGVUYWdzLmxlbmd0aCA+IDBcblxuICAgIGlmICgoaGFzVGFnRmlsdGVycyB8fCBoYXNMaW5lRmlsdGVycyB8fCBoYXNFeGFtcGxlRmlsdGVycykgJiYgZXhlY3V0ZWRUZXN0cyA9PT0gMCkge1xuICAgICAgY29uc29sZS5lcnJvcihwaWNvY29sb3JzLnJlZChcIlxcbk5vIHRlc3RzIG1hdGNoZWQgdGhlIHByb3ZpZGVkIGZpbHRlcnNcIikpXG4gICAgICBwcm9jZXNzLmV4aXQoMSlcbiAgICB9XG5cbiAgICAvLyBSZXBvcnQgdGhlIHNsb3dlc3QgdGVzdHMgc28gc3VpdGUgaG90c3BvdHMgYXJlIHZpc2libGUgZXZlcnkgcnVuLiBEZWZhdWx0cyB0b1xuICAgIC8vIHRoZSB0b3AgMTA7IHR1bmUgd2l0aCBWRUxPQ0lPVVNfU0xPV19URVNUX0NPVU5UICgwIGRpc2FibGVzKS4gU2tpcHBlZCBmb3JcbiAgICAvLyBzaW5nbGUtdGVzdCBydW5zIHdoZXJlIGl0IHdvdWxkIGp1c3QgYmUgbm9pc2UuXG4gICAgY29uc3Qgc2xvd1Rlc3RDb3VudCA9IHJlc29sdmVTbG93VGVzdENvdW50KHByb2Nlc3MuZW52LlZFTE9DSU9VU19TTE9XX1RFU1RfQ09VTlQpXG5cbiAgICBpZiAoc2xvd1Rlc3RDb3VudCA+IDAgJiYgZXhlY3V0ZWRUZXN0cyA+IDEpIHtcbiAgICAgIGNvbnN0IHNsb3dlc3RUZXN0cyA9IHRlc3RSdW5uZXIuZ2V0U2xvd2VzdFRlc3RzKHNsb3dUZXN0Q291bnQpXG5cbiAgICAgIGlmIChzbG93ZXN0VGVzdHMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhwaWNvY29sb3JzLmN5YW4oYFxcblNsb3dlc3QgJHtzbG93ZXN0VGVzdHMubGVuZ3RofSB0ZXN0czpgKSlcblxuICAgICAgICBmb3IgKGNvbnN0IHNsb3dUZXN0IG9mIHNsb3dlc3RUZXN0cykge1xuICAgICAgICAgIGNvbnN0IGxvY2F0aW9uID0gc2xvd1Rlc3QuZmlsZVBhdGggJiYgc2xvd1Rlc3QubGluZSA/IGAgKCR7c2xvd1Rlc3QuZmlsZVBhdGh9OiR7c2xvd1Rlc3QubGluZX0pYCA6IFwiXCJcblxuICAgICAgICAgIGNvbnNvbGUubG9nKHBpY29jb2xvcnMuY3lhbihgICAke1N0cmluZyhzbG93VGVzdC5kdXJhdGlvbk1zKS5wYWRTdGFydCg2KX1tcyAgJHtzbG93VGVzdC5mdWxsRGVzY3JpcHRpb259JHtsb2NhdGlvbn1gKSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0ZXN0UnVubmVyLmlzRmFpbGVkKCkpIHtcbiAgICAgIGF3YWl0IHRlc3RSdW5uZXIucGVyc2lzdEZhaWxlZFRlc3RDb25zb2xlT3V0cHV0c1RvQXNzZXRzKClcbiAgICAgIGNvbnN0IGZhaWxlZFRlc3RzID0gdGVzdFJ1bm5lci5nZXRGYWlsZWRUZXN0RGV0YWlscygpXG5cbiAgICAgIGlmIChmYWlsZWRUZXN0cy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zb2xlLmVycm9yKHBpY29jb2xvcnMucmVkKFwiXFxuRmFpbGVkIHRlc3RzOlwiKSlcblxuICAgICAgICBmb3IgKGNvbnN0IGZhaWxlZCBvZiBmYWlsZWRUZXN0cykge1xuICAgICAgICAgIGNvbnN0IGxvY2F0aW9uID0gZmFpbGVkLmZpbGVQYXRoICYmIGZhaWxlZC5saW5lXG4gICAgICAgICAgICA/IGAgKCR7ZmFpbGVkLmZpbGVQYXRofToke2ZhaWxlZC5saW5lfSlgXG4gICAgICAgICAgICA6IFwiXCJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKHBpY29jb2xvcnMucmVkKGAtICR7ZmFpbGVkLmZ1bGxEZXNjcmlwdGlvbn0ke2xvY2F0aW9ufWApKVxuXG4gICAgICAgICAgaWYgKGZhaWxlZC5jb25zb2xlTG9nUGF0aCkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihwaWNvY29sb3JzLnJlZChgICBDb25zb2xlIGxvZzogJHtmYWlsZWQuY29uc29sZUxvZ1BhdGh9YCkpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnNvbGUuZXJyb3IocGljb2NvbG9ycy5yZWQoYFxcblRlc3QgcnVuIGZhaWxlZCB3aXRoICR7dGVzdFJ1bm5lci5nZXRGYWlsZWRUZXN0cygpfSBmYWlsZWQgdGVzdHMgYW5kICR7dGVzdFJ1bm5lci5nZXRTdWNjZXNzZnVsVGVzdHMoKX0gc3VjY2Vzc2Z1bGxgKSlcbiAgICAgIHByb2Nlc3MuZXhpdCgxKVxuICAgIH0gZWxzZSBpZiAodGVzdFJ1bm5lci5hcmVBbnlUZXN0c0ZvY3Vzc2VkKCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IocGljb2NvbG9ycy5yZWQoYFxcbkZvY3Vzc2VkIHJ1biB3aXRoICR7dGVzdFJ1bm5lci5nZXRGYWlsZWRUZXN0cygpfSBmYWlsZWQgdGVzdHMgYW5kICR7dGVzdFJ1bm5lci5nZXRTdWNjZXNzZnVsVGVzdHMoKX0gc3VjY2Vzc2Z1bGxgKSlcbiAgICAgIHByb2Nlc3MuZXhpdCgxKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhwaWNvY29sb3JzLmdyZWVuKGBcXG5UZXN0IHJ1biBzdWNjZWVkZWQgd2l0aCAke3Rlc3RSdW5uZXIuZ2V0U3VjY2Vzc2Z1bFRlc3RzKCl9IHN1Y2Nlc3NmdWwgdGVzdHNgKSlcbiAgICAgIHByb2Nlc3MuZXhpdCgwKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIExvYWRzIGFuIG9wdGlvbmFsIEpTT04gdGltaW5nIG1hbmlmZXN0LiBVbnJlYWRhYmxlIG9yIG1hbGZvcm1lZCBpbnB1dCBpbnRlbnRpb25hbGx5IGZhbGxzIGJhY2sgdG8gaGV1cmlzdGljcy5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgdW5kZWZpbmVkfSB0aW1pbmdNYW5pZmVzdFBhdGggLSBUaW1pbmcgbWFuaWZlc3QgcGF0aC5cbiAqIEByZXR1cm5zIHtQcm9taXNlPFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+IHwgdW5kZWZpbmVkPn0gLSBQYXJzZWQgbWFuaWZlc3Qgd2hlbiByZWFkYWJsZSBhbmQgdmFsaWQgSlNPTi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRUaW1pbmdNYW5pZmVzdCh0aW1pbmdNYW5pZmVzdFBhdGgpIHtcbiAgaWYgKCF0aW1pbmdNYW5pZmVzdFBhdGgpIHJldHVybiB1bmRlZmluZWRcblxuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKGF3YWl0IGZzLnJlYWRGaWxlKHRpbWluZ01hbmlmZXN0UGF0aCwgXCJ1dGY4XCIpKVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICB0aHJvdyBlcnJvclxuICB9XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgaG93IG1hbnkgc2xvd2VzdCB0ZXN0cyB0byByZXBvcnQgZnJvbSB0aGUgYFZFTE9DSU9VU19TTE9XX1RFU1RfQ09VTlRgXG4gKiBlbnYgdmFsdWU6IGRlZmF1bHRzIHRvIDEwIHdoZW4gdW5zZXQ7IDAgKG9yIGFuIHVucGFyc2VhYmxlIHZhbHVlKSBkaXNhYmxlcyB0aGVcbiAqIHJlcG9ydDsgb3RoZXJ3aXNlIHRoZSBmbG9vcmVkLCBub24tbmVnYXRpdmUgaW50ZWdlci5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgdW5kZWZpbmVkfSByYXdFbnZWYWx1ZSAtIFJhdyBlbnYgdmFsdWUuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSAtIE51bWJlciBvZiBzbG93ZXN0IHRlc3RzIHRvIHJlcG9ydCAoMCBkaXNhYmxlcykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlU2xvd1Rlc3RDb3VudChyYXdFbnZWYWx1ZSkge1xuICBpZiAocmF3RW52VmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIDEwXG5cbiAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGguZmxvb3IoTnVtYmVyKHJhd0VudlZhbHVlKSkgfHwgMClcbn1cbiJdfQ==
|
|
267
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9lbnZpcm9ubWVudC1oYW5kbGVycy9ub2RlL2NsaS9jb21tYW5kcy90ZXN0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLFdBQVcsTUFBTSxpQ0FBaUMsQ0FBQTtBQUN6RCxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDNUIsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFBO0FBQzVCLE9BQU8sVUFBVSxNQUFNLFlBQVksQ0FBQTtBQUNuQyxPQUFPLGVBQWUsTUFBTSwwQ0FBMEMsQ0FBQTtBQUN0RSxPQUFPLFlBQVksTUFBTSxzQ0FBc0MsQ0FBQTtBQUMvRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQTtBQUM5RyxPQUFPLFVBQVUsTUFBTSxvQ0FBb0MsQ0FBQTtBQUMzRCxPQUFPLGlCQUFpQixNQUFNLDRDQUE0QyxDQUFBO0FBQzFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxZQUFZLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQTtBQUNsRyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQTtBQUV2RSxNQUFNLENBQUMsT0FBTyxPQUFPLHdCQUF5QixTQUFRLFdBQVc7SUFDL0QsS0FBSyxDQUFDLE9BQU87UUFDWCxNQUFNLHdCQUF3QixFQUFFLENBQUE7UUFDaEMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBRTlDLElBQUksU0FBUyxDQUFBO1FBQ2IsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFBO1FBRXRCLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ25DLFNBQVMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFBO1lBQzFDLFdBQVcsQ0FBQyxJQUFJLENBQUMs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QUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsSUFBSSxLQUFLLFlBQVksS0FBSztZQUFFLE9BQU8sU0FBUyxDQUFBO1FBRTVDLE1BQU0sS0FBSyxDQUFBO0lBQ2IsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsV0FBVztJQUM5QyxJQUFJLFdBQVcsS0FBSyxTQUFTO1FBQUUsT0FBTyxFQUFFLENBQUE7SUFFeEMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0FBQzFELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IEJhc2VDb21tYW5kIGZyb20gXCIuLi8uLi8uLi8uLi9jbGkvYmFzZS1jb21tYW5kLmpzXCJcbmltcG9ydCBmcyBmcm9tIFwiZnMvcHJvbWlzZXNcIlxuaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiXG5pbXBvcnQgcGljb2NvbG9ycyBmcm9tIFwicGljb2NvbG9yc1wiXG5pbXBvcnQgVGVzdEZpbGVzRmluZGVyIGZyb20gXCIuLi8uLi8uLi8uLi90ZXN0aW5nL3Rlc3QtZmlsZXMtZmluZGVyLmpzXCJcbmltcG9ydCBUZXN0UHJvZmlsZXIgZnJvbSBcIi4uLy4uLy4uLy4uL3Rlc3RpbmcvdGVzdC1wcm9maWxlci5qc1wiXG5pbXBvcnQgeyBmb3JtYXRUZXN0UHJvZmlsZVN1bW1hcnksIHdyaXRlVGVzdFByb2ZpbGVPdXRwdXRzIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3Rlc3RpbmcvdGVzdC1wcm9maWxlLW91dHB1dC5qc1wiXG5pbXBvcnQgVGVzdFJ1bm5lciBmcm9tIFwiLi4vLi4vLi4vLi4vdGVzdGluZy90ZXN0LXJ1bm5lci5qc1wiXG5pbXBvcnQgVGVzdFN1aXRlU3BsaXR0ZXIgZnJvbSBcIi4uLy4uLy4uLy4uL3Rlc3RpbmcvdGVzdC1zdWl0ZS1zcGxpdHRlci5qc1wiXG5pbXBvcnQgeyBub3JtYWxpemVFeGFtcGxlUGF0dGVybnMsIHBhcnNlRmlsdGVycyB9IGZyb20gXCIuLi8uLi8uLi8uLi90ZXN0aW5nL3Rlc3QtZmlsdGVyLXBhcnNlci5qc1wiXG5pbXBvcnQgeyBwcmVwYXJlU291cmNlUGVlclBhY2thZ2UgfSBmcm9tIFwiLi4vLi4vc291cmNlLXBlZXItcGFja2FnZS5qc1wiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0NsaUNvbW1hbmRzVGVzdCBleHRlbmRzIEJhc2VDb21tYW5kIHtcbiAgYXN5bmMgZXhlY3V0ZSgpIHtcbiAgICBhd2FpdCBwcmVwYXJlU291cmNlUGVlclBhY2thZ2UoKVxuICAgIHRoaXMuZ2V0Q29uZmlndXJhdGlvbigpLnNldEVudmlyb25tZW50KFwidGVzdFwiKVxuXG4gICAgbGV0IGRpcmVjdG9yeVxuICAgIGNvbnN0IGRpcmVjdG9yaWVzID0gW11cblxuICAgIGlmIChwcm9jZXNzLmVudi5WRUxPQ0lPVVNfVEVTVF9ESVIpIHtcbiAgICAgIGRpcmVjdG9yeSA9IHByb2Nlc3MuZW52LlZFTE9DSU9VU19URVNUX0RJUlxuICAgICAgZGlyZWN0b3JpZXMucHVzaChwcm9jZXNzLmVudi5WRUxPQ0lPVVNfVEVTVF9ESVIpXG4gICAgfSBlbHNlIHtcbiAgICAgIGRpcmVjdG9yeSA9IHRoaXMuZGlyZWN0b3J5KClcbiAgICAgIGRpcmVjdG9yaWVzLnB1c2goYCR7dGhpcy5kaXJlY3RvcnkoKX0vX190ZXN0c19fYClcbiAgICAgIGRpcmVjdG9yaWVzLnB1c2goYCR7dGhpcy5kaXJlY3RvcnkoKX0vdGVzdHNgKVxuICAgICAgZGlyZWN0b3JpZXMucHVzaChgJHt0aGlzLmRpcmVjdG9yeSgpfS9zcGVjYClcbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBpbmNsdWRlVGFncyxcbiAgICAgIGV4Y2x1ZGVUYWdzLFxuICAgICAgZXhhbXBsZVBhdHRlcm5zLFxuICAgICAgZmlsdGVyZWRQcm9jZXNzQXJncyxcbiAgICAgIGdyb3VwcyxcbiAgICAgIGdyb3VwTnVtYmVyLFxuICAgICAgcHJvZmlsZSxcbiAgICAgIHByb2ZpbGVKc29uUGF0aCxcbiAgICAgIHRpbWluZ01hbmlmZXN0UGF0aCxcbiAgICAgIHRpbWluZ01hbmlmZXN0T3V0cHV0UGF0aFxuICAgIH0gPSBwYXJzZUZpbHRlcnModGhpcy5wcm9jZXNzQXJncyB8fCBbXSlcbiAgICBjb25zdCBwcm9maWxlT3B0aW9ucyA9IHJlc29sdmVUZXN0UHJvZmlsZU9wdGlvbnMoe1xuICAgICAgY3dkOiBwcm9jZXNzLmN3ZCgpLFxuICAgICAgcHJvZmlsZSxcbiAgICAgIHByb2ZpbGVKc29uUGF0aCxcbiAgICAgIHRpbWluZ01hbmlmZXN0UGF0aCxcbiAgICAgIHRpbWluZ01hbmlmZXN0T3V0cHV0UGF0aFxuICAgIH0pXG4gICAgY29uc3Qgc2VsZWN0aW9uID0ge1xuICAgICAgZXhjbHVkZVRhZ0NvdW50OiBleGNsdWRlVGFncy5sZW5ndGgsXG4gICAgICBoYXNFeGFtcGxlRmlsdGVyczogZXhhbXBsZVBhdHRlcm5zLmxlbmd0aCA+IDAsXG4gICAgICBpbmNsdWRlVGFnQ291bnQ6IGluY2x1ZGVUYWdzLmxlbmd0aCxcbiAgICAgIHNoYXJkOiBncm91cHMgIT09IHVuZGVmaW5lZCAmJiBncm91cE51bWJlciAhPT0gdW5kZWZpbmVkID8ge2dyb3VwcywgZ3JvdXBOdW1iZXJ9IDogdW5kZWZpbmVkXG4gICAgfVxuICAgIGNvbnN0IHByb2ZpbGVyID0gcHJvZmlsZU9wdGlvbnMucHJvZmlsZVxuICAgICAgPyBuZXcgVGVzdFByb2ZpbGVyKHtjb25maWd1cmF0aW9uOiB0aGlzLmdldENvbmZpZ3VyYXRpb24oKSwgcHJvamVjdERpcmVjdG9yeTogZGlyZWN0b3J5LCBzZWxlY3Rpb259KVxuICAgICAgOiB1bmRlZmluZWRcbiAgICBjb25zdCB0ZXN0RmlsZXNGaW5kZXIgPSBuZXcgVGVzdEZpbGVzRmluZGVyKHtkaXJlY3RvcnksIGRpcmVjdG9yaWVzLCBwcm9jZXNzQXJnczogZmlsdGVyZWRQcm9jZXNzQXJnc30pXG4gICAgLyoqIEB0eXBlIHtUZXN0UnVubmVyIHwgdW5kZWZpbmVkfSAqL1xuICAgIGxldCB0ZXN0UnVubmVyXG4gICAgbGV0IHByb2ZpbGVGaW5hbGl6ZWQgPSBmYWxzZVxuXG4gICAgLyoqXG4gICAgICogRmluYWxpemVzIHJlcXVlc3RlZCBvdXRwdXRzIG9uY2UgZm9yIGV2ZXJ5IGNvbW1hbmQgb3V0Y29tZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RhdHVzIC0gUnVuIHN0YXR1cy5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyBhZnRlciByZXF1ZXN0ZWQgb3V0cHV0cyBhcmUgd3JpdHRlbi5cbiAgICAgKi9cbiAgICBjb25zdCBmaW5hbGl6ZVByb2ZpbGUgPSBhc3luYyAoc3RhdHVzKSA9PiB7XG4gICAgICBpZiAoIXByb2ZpbGVyIHx8IHByb2ZpbGVGaW5hbGl6ZWQpIHJldHVyblxuXG4gICAgICBwcm9maWxlRmluYWxpemVkID0gdHJ1ZVxuICAgICAgY29uc3QgZmFpbGVkID0gdGVzdFJ1bm5lcj8uZ2V0RmFpbGVkVGVzdHMoKSA/PyAwXG4gICAgICBjb25zdCBwYXNzZWQgPSB0ZXN0UnVubmVyPy5nZXRTdWNjZXNzZnVsVGVzdHMoKSA/PyAwXG4gICAgICBjb25zdCBwcm9maWxlRG9jdW1lbnQgPSBwcm9maWxlci5maW5pc2goe1xuICAgICAgICBjb3VudHM6IHtcbiAgICAgICAgICBkaXNjb3ZlcmVkOiB0ZXN0UnVubmVyPy5nZXRUZXN0c0NvdW50KCkgPz8gMCxcbiAgICAgICAgICBleGVjdXRlZDogdGVzdFJ1bm5lcj8uZ2V0RXhlY3V0ZWRUZXN0c0NvdW50KCkgPz8gMCxcbiAgICAgICAgICBmYWlsZWQsXG4gICAgICAgICAgcGFzc2VkXG4gICAgICAgIH0sXG4gICAgICAgIGZvY3VzZWQ6IEJvb2xlYW4odGVzdFJ1bm5lcj8uYW55VGVzdHNGb2N1c3NlZCksXG4gICAgICAgIHN0YXR1c1xuICAgICAgfSlcblxuICAgICAgYXdhaXQgd3JpdGVUZXN0UHJvZmlsZU91dHB1dHMoe1xuICAgICAgICBwcm9maWxlOiBwcm9maWxlRG9jdW1lbnQsXG4gICAgICAgIHByb2ZpbGVKc29uUGF0aDogcHJvZmlsZU9wdGlvbnMucHJvZmlsZUpzb25QYXRoLFxuICAgICAgICB0aW1pbmdNYW5pZmVzdE91dHB1dFBhdGg6IHByb2ZpbGVPcHRpb25zLnRpbWluZ01hbmlmZXN0T3V0cHV0UGF0aFxuICAgICAgfSlcbiAgICAgIGNvbnNvbGUubG9nKGBcXG4ke2Zvcm1hdFRlc3RQcm9maWxlU3VtbWFyeShwcm9maWxlRG9jdW1lbnQsIHByb2ZpbGVPcHRpb25zKX1gKVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBkaXNjb3ZlclRlc3RGaWxlcyA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgbGV0IGRpc2NvdmVyZWRUZXN0RmlsZXMgPSBhd2FpdCB0ZXN0RmlsZXNGaW5kZXIuZmluZFRlc3RGaWxlcygpXG5cbiAgICAgICAgaWYgKGdyb3VwcyAhPT0gdW5kZWZpbmVkIHx8IGdyb3VwTnVtYmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAoZ3JvdXBzID09PSB1bmRlZmluZWQgfHwgZ3JvdXBOdW1iZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQm90aCAtLWdyb3VwcyBhbmQgLS1ncm91cC1udW1iZXIgbXVzdCBiZSBwcm92aWRlZCB0b2dldGhlclwiKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHRpbWluZ01hbmlmZXN0ID0gYXdhaXQgbG9hZFRpbWluZ01hbmlmZXN0KHByb2ZpbGVPcHRpb25zLnRpbWluZ01hbmlmZXN0UGF0aClcbiAgICAgICAgICBjb25zdCBzcGxpdHRlciA9IG5ldyBUZXN0U3VpdGVTcGxpdHRlcih7XG4gICAgICAgICAgICBncm91cHMsXG4gICAgICAgICAgICBncm91cE51bWJlcixcbiAgICAgICAgICAgIHRlc3RGaWxlczogZGlzY292ZXJlZFRlc3RGaWxlcyxcbiAgICAgICAgICAgIGJhc2VEaXJlY3Rvcnk6IGRpcmVjdG9yeSxcbiAgICAgICAgICAgIHRpbWluZ01hbmlmZXN0XG4gICAgICAgICAgfSlcblxuICAgICAgICAgIGRpc2NvdmVyZWRUZXN0RmlsZXMgPSBzcGxpdHRlci5nZXRHcm91cEZpbGVzKClcbiAgICAgICAgICBjb25zb2xlLmxvZyhwaWNvY29sb3JzLmN5YW4oYFJ1bm5pbmcgZ3JvdXAgJHtncm91cE51bWJlcn0gb2YgJHtncm91cHN9ICgke2Rpc2NvdmVyZWRUZXN0RmlsZXMubGVuZ3RofSBmaWxlcylgKSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkaXNjb3ZlcmVkVGVzdEZpbGVzXG4gICAgICB9XG4gICAgICBjb25zdCB0ZXN0RmlsZXMgPSBwcm9maWxlclxuICAgICAgICA/IGF3YWl0IHByb2ZpbGVyLm1lYXN1cmVQaGFzZShcImRpc2NvdmVyeVwiLCBkaXNjb3ZlclRlc3RGaWxlcylcbiAgICAgICAgOiBhd2FpdCBkaXNjb3ZlclRlc3RGaWxlcygpXG5cbiAgICAgIHByb2ZpbGVyPy5zZXRTZWxlY3Rpb24oe2ZpbGVDb3VudDogdGVzdEZpbGVzLmxlbmd0aH0pXG4gICAgICB0ZXN0UnVubmVyID0gbmV3IFRlc3RSdW5uZXIoe1xuICAgICAgICBjb25maWd1cmF0aW9uOiB0aGlzLmdldENvbmZpZ3VyYXRpb24oKSxcbiAgICAgICAgZXhjbHVkZVRhZ3MsXG4gICAgICAgIGluY2x1ZGVUYWdzLFxuICAgICAgICB0ZXN0RmlsZXMsXG4gICAgICAgIGxpbmVGaWx0ZXJzOiB0ZXN0RmlsZXNGaW5kZXIuZ2V0TGluZUZpbHRlcnNCeUZpbGUoKSxcbiAgICAgICAgZXhhbXBsZVBhdHRlcm5zOiBub3JtYWxpemVFeGFtcGxlUGF0dGVybnMoZXhhbXBsZVBhdHRlcm5zKSxcbiAgICAgICAgcHJvZmlsZXJcbiAgICAgIH0pXG4gICAgICBjb25zdCBhY3RpdmVUZXN0UnVubmVyID0gdGVzdFJ1bm5lclxuICAgICAgbGV0IHNpZ25hbEhhbmRsZWQgPSBmYWxzZVxuXG4gICAgICBjb25zdCBoYW5kbGVTaWduYWwgPSBhc3luYyAoLyoqIEB0eXBlIHtzdHJpbmd9ICovIHNpZ25hbCkgPT4ge1xuICAgICAgICBpZiAoc2lnbmFsSGFuZGxlZCkgcmV0dXJuXG4gICAgICAgIHNpZ25hbEhhbmRsZWQgPSB0cnVlXG4gICAgICAgIHByb2ZpbGVyPy5pbnRlcnJ1cHQoKVxuICAgICAgICBjb25zb2xlLmVycm9yKGBcXG5SZWNlaXZlZCAke3NpZ25hbH0sIHJ1bm5pbmcgYWZ0ZXJBbGwgaG9va3MgYmVmb3JlIGV4aXQuLi5gKVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgYWN0aXZlVGVzdFJ1bm5lci5ydW5BZnRlckFsbHNGb3JBY3RpdmVTY29wZXMoKVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgd2hpbGUgcnVubmluZyBhZnRlckFsbCBob29rczpcIiwgZXJyb3IpXG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IGZpbmFsaXplUHJvZmlsZShcImludGVycnVwdGVkXCIpXG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgd2hpbGUgd3JpdGluZyBpbnRlcnJ1cHRlZCB0ZXN0IHByb2ZpbGU6XCIsIGVycm9yKVxuICAgICAgICAgIH1cbiAgICAgICAgICBwcm9jZXNzLmV4aXQoMTMwKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHByb2Nlc3Mub25jZShcIlNJR0lOVFwiLCAoKSA9PiB7IHZvaWQgaGFuZGxlU2lnbmFsKFwiU0lHSU5UXCIpIH0pXG4gICAgICBwcm9jZXNzLm9uY2UoXCJTSUdURVJNXCIsICgpID0+IHsgdm9pZCBoYW5kbGVTaWduYWwoXCJTSUdURVJNXCIpIH0pXG5cbiAgICAgIGF3YWl0IHRlc3RSdW5uZXIucHJlcGFyZSgpXG5cbiAgICAgIGlmICh0ZXN0UnVubmVyLmdldFRlc3RzQ291bnQoKSA9PT0gMCkge1xuICAgICAgICBhd2FpdCBmaW5hbGl6ZVByb2ZpbGUoXCJuby10ZXN0c1wiKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGVzdFJ1bm5lci5nZXRUZXN0c0NvdW50KCl9IHRlc3RzIHdhcyBmb3VuZCBpbiAke3Rlc3RGaWxlcy5sZW5ndGh9IGZpbGUocylgKVxuICAgICAgfVxuXG4gICAgICBhd2FpdCB0ZXN0UnVubmVyLnJ1bigpXG5cbiAgICAgIGNvbnN0IGV4ZWN1dGVkVGVzdHMgPSB0ZXN0UnVubmVyLmdldEV4ZWN1dGVkVGVzdHNDb3VudCgpXG4gICAgICBjb25zdCBsaW5lRmlsdGVycyA9IHRlc3RSdW5uZXIuZ2V0TGluZUZpbHRlcnMoKVxuICAgICAgY29uc3QgaGFzTGluZUZpbHRlcnMgPSBPYmplY3Qua2V5cyhsaW5lRmlsdGVycykubGVuZ3RoID4gMFxuICAgICAgY29uc3QgaGFzRXhhbXBsZUZpbHRlcnMgPSBleGFtcGxlUGF0dGVybnMubGVuZ3RoID4gMFxuICAgICAgY29uc3QgaGFzVGFnRmlsdGVycyA9IGluY2x1ZGVUYWdzLmxlbmd0aCA+IDAgfHwgZXhjbHVkZVRhZ3MubGVuZ3RoID4gMFxuXG4gICAgICBpZiAoKGhhc1RhZ0ZpbHRlcnMgfHwgaGFzTGluZUZpbHRlcnMgfHwgaGFzRXhhbXBsZUZpbHRlcnMpICYmIGV4ZWN1dGVkVGVzdHMgPT09IDApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihwaWNvY29sb3JzLnJlZChcIlxcbk5vIHRlc3RzIG1hdGNoZWQgdGhlIHByb3ZpZGVkIGZpbHRlcnNcIikpXG4gICAgICAgIGF3YWl0IGZpbmFsaXplUHJvZmlsZShcIm5vLXRlc3RzXCIpXG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKVxuICAgICAgfVxuXG4gICAgICAvLyBSZXBvcnQgdGhlIHNsb3dlc3QgdGVzdHMgc28gc3VpdGUgaG90c3BvdHMgYXJlIHZpc2libGUgZXZlcnkgcnVuLiBEZWZhdWx0cyB0b1xuICAgICAgLy8gdGhlIHRvcCAxMDsgdHVuZSB3aXRoIFZFTE9DSU9VU19TTE9XX1RFU1RfQ09VTlQgKDAgZGlzYWJsZXMpLiBTa2lwcGVkIGZvclxuICAgICAgLy8gc2luZ2xlLXRlc3QgcnVucyB3aGVyZSBpdCB3b3VsZCBqdXN0IGJlIG5vaXNlLlxuICAgICAgY29uc3Qgc2xvd1Rlc3RDb3VudCA9IHJlc29sdmVTbG93VGVzdENvdW50KHByb2Nlc3MuZW52LlZFTE9DSU9VU19TTE9XX1RFU1RfQ09VTlQpXG5cbiAgICAgIGlmIChzbG93VGVzdENvdW50ID4gMCAmJiBleGVjdXRlZFRlc3RzID4gMSkge1xuICAgICAgICBjb25zdCBzbG93ZXN0VGVzdHMgPSB0ZXN0UnVubmVyLmdldFNsb3dlc3RUZXN0cyhzbG93VGVzdENvdW50KVxuXG4gICAgICAgIGlmIChzbG93ZXN0VGVzdHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKHBpY29jb2xvcnMuY3lhbihgXFxuU2xvd2VzdCAke3Nsb3dlc3RUZXN0cy5sZW5ndGh9IHRlc3RzOmApKVxuXG4gICAgICAgICAgZm9yIChjb25zdCBzbG93VGVzdCBvZiBzbG93ZXN0VGVzdHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvY2F0aW9uID0gc2xvd1Rlc3QuZmlsZVBhdGggJiYgc2xvd1Rlc3QubGluZSA/IGAgKCR7c2xvd1Rlc3QuZmlsZVBhdGh9OiR7c2xvd1Rlc3QubGluZX0pYCA6IFwiXCJcblxuICAgICAgICAgICAgY29uc29sZS5sb2cocGljb2NvbG9ycy5jeWFuKGAgICR7U3RyaW5nKHNsb3dUZXN0LmR1cmF0aW9uTXMpLnBhZFN0YXJ0KDYpfW1zICAke3Nsb3dUZXN0LmZ1bGxEZXNjcmlwdGlvbn0ke2xvY2F0aW9ufWApKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGVzdFJ1bm5lci5pc0ZhaWxlZCgpKSB7XG4gICAgICAgIGF3YWl0IHRlc3RSdW5uZXIucGVyc2lzdEZhaWxlZFRlc3RDb25zb2xlT3V0cHV0c1RvQXNzZXRzKClcbiAgICAgICAgY29uc3QgZmFpbGVkVGVzdHMgPSB0ZXN0UnVubmVyLmdldEZhaWxlZFRlc3REZXRhaWxzKClcblxuICAgICAgICBpZiAoZmFpbGVkVGVzdHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IocGljb2NvbG9ycy5yZWQoXCJcXG5GYWlsZWQgdGVzdHM6XCIpKVxuXG4gICAgICAgICAgZm9yIChjb25zdCBmYWlsZWQgb2YgZmFpbGVkVGVzdHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvY2F0aW9uID0gZmFpbGVkLmZpbGVQYXRoICYmIGZhaWxlZC5saW5lXG4gICAgICAgICAgICAgID8gYCAoJHtmYWlsZWQuZmlsZVBhdGh9OiR7ZmFpbGVkLmxpbmV9KWBcbiAgICAgICAgICAgICAgOiBcIlwiXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKHBpY29jb2xvcnMucmVkKGAtICR7ZmFpbGVkLmZ1bGxEZXNjcmlwdGlvbn0ke2xvY2F0aW9ufWApKVxuXG4gICAgICAgICAgICBpZiAoZmFpbGVkLmNvbnNvbGVMb2dQYXRoKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IocGljb2NvbG9ycy5yZWQoYCAgQ29uc29sZSBsb2c6ICR7ZmFpbGVkLmNvbnNvbGVMb2dQYXRofWApKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUuZXJyb3IocGljb2NvbG9ycy5yZWQoYFxcblRlc3QgcnVuIGZhaWxlZCB3aXRoICR7dGVzdFJ1bm5lci5nZXRGYWlsZWRUZXN0cygpfSBmYWlsZWQgdGVzdHMgYW5kICR7dGVzdFJ1bm5lci5nZXRTdWNjZXNzZnVsVGVzdHMoKX0gc3VjY2Vzc2Z1bGxgKSlcbiAgICAgICAgYXdhaXQgZmluYWxpemVQcm9maWxlKFwiZmFpbGVkXCIpXG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKVxuICAgICAgfSBlbHNlIGlmICh0ZXN0UnVubmVyLmFyZUFueVRlc3RzRm9jdXNzZWQoKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKHBpY29jb2xvcnMucmVkKGBcXG5Gb2N1c3NlZCBydW4gd2l0aCAke3Rlc3RSdW5uZXIuZ2V0RmFpbGVkVGVzdHMoKX0gZmFpbGVkIHRlc3RzIGFuZCAke3Rlc3RSdW5uZXIuZ2V0U3VjY2Vzc2Z1bFRlc3RzKCl9IHN1Y2Nlc3NmdWxsYCkpXG4gICAgICAgIGF3YWl0IGZpbmFsaXplUHJvZmlsZShcImZvY3VzZWRcIilcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhwaWNvY29sb3JzLmdyZWVuKGBcXG5UZXN0IHJ1biBzdWNjZWVkZWQgd2l0aCAke3Rlc3RSdW5uZXIuZ2V0U3VjY2Vzc2Z1bFRlc3RzKCl9IHN1Y2Nlc3NmdWwgdGVzdHNgKSlcbiAgICAgICAgYXdhaXQgZmluYWxpemVQcm9maWxlKFwicGFzc2VkXCIpXG4gICAgICAgIHByb2Nlc3MuZXhpdCgwKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBmaW5hbGl6ZVByb2ZpbGUoXCJlcnJvclwiKVxuICAgICAgfSBjYXRjaCAocHJvZmlsZUVycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBBZ2dyZWdhdGVFcnJvcihbZXJyb3IsIHByb2ZpbGVFcnJvcl0sIFwiVGVzdCBjb21tYW5kIGFuZCBwcm9maWxlIGZpbmFsaXphdGlvbiBib3RoIGZhaWxlZFwiLCB7Y2F1c2U6IHByb2ZpbGVFcnJvcn0pXG4gICAgICB9XG5cbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgYW5kIHZhbGlkYXRlcyBwcm9maWxpbmcgcGF0aHMgYmVmb3JlIHRlc3QgZGlzY292ZXJ5IHN0YXJ0cy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gUmF3IHByb2ZpbGluZyBvcHRpb25zLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuY3dkIC0gQ29tbWFuZCB3b3JraW5nIGRpcmVjdG9yeS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYXJncy5wcm9maWxlIC0gV2hldGhlciBjb25zb2xlIHByb2ZpbGluZyB3YXMgcmVxdWVzdGVkLlxuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLnByb2ZpbGVKc29uUGF0aF0gLSBSaWNoIHByb2ZpbGUgb3V0cHV0IHBhdGguXG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MudGltaW5nTWFuaWZlc3RQYXRoXSAtIFRpbWluZyBtYW5pZmVzdCBpbnB1dCBwYXRoLlxuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLnRpbWluZ01hbmlmZXN0T3V0cHV0UGF0aF0gLSBUaW1pbmcgbWFuaWZlc3Qgb3V0cHV0IHBhdGguXG4gKiBAcmV0dXJucyB7e3Byb2ZpbGU6IGJvb2xlYW4sIHByb2ZpbGVKc29uUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLCB0aW1pbmdNYW5pZmVzdFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCwgdGltaW5nTWFuaWZlc3RPdXRwdXRQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWR9fSAtIFJlc29sdmVkIHByb2ZpbGluZyBvcHRpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVRlc3RQcm9maWxlT3B0aW9ucyh7Y3dkLCBwcm9maWxlLCBwcm9maWxlSnNvblBhdGgsIHRpbWluZ01hbmlmZXN0UGF0aCwgdGltaW5nTWFuaWZlc3RPdXRwdXRQYXRofSkge1xuICBjb25zdCByZXNvbHZlZFByb2ZpbGVKc29uUGF0aCA9IHByb2ZpbGVKc29uUGF0aCA/IHBhdGgucmVzb2x2ZShjd2QsIHByb2ZpbGVKc29uUGF0aCkgOiB1bmRlZmluZWRcbiAgY29uc3QgcmVzb2x2ZWRUaW1pbmdNYW5pZmVzdFBhdGggPSB0aW1pbmdNYW5pZmVzdFBhdGggPyBwYXRoLnJlc29sdmUoY3dkLCB0aW1pbmdNYW5pZmVzdFBhdGgpIDogdW5kZWZpbmVkXG4gIGNvbnN0IHJlc29sdmVkVGltaW5nTWFuaWZlc3RPdXRwdXRQYXRoID0gdGltaW5nTWFuaWZlc3RPdXRwdXRQYXRoXG4gICAgPyBwYXRoLnJlc29sdmUoY3dkLCB0aW1pbmdNYW5pZmVzdE91dHB1dFBhdGgpXG4gICAgOiB1bmRlZmluZWRcblxuICBpZiAocmVzb2x2ZWRQcm9maWxlSnNvblBhdGggJiYgcmVzb2x2ZWRUaW1pbmdNYW5pZmVzdE91dHB1dFBhdGggJiYgcmVzb2x2ZWRQcm9maWxlSnNvblBhdGggPT09IHJlc29sdmVkVGltaW5nTWFuaWZlc3RPdXRwdXRQYXRoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiVGVzdCBwcm9maWxpbmcgb3V0cHV0IHBhdGhzIG11c3QgYmUgZGlmZmVyZW50XCIpXG4gIH1cblxuICBpZiAocmVzb2x2ZWRUaW1pbmdNYW5pZmVzdFBhdGggJiYgKFxuICAgIHJlc29sdmVkUHJvZmlsZUpzb25QYXRoID09PSByZXNvbHZlZFRpbWluZ01hbmlmZXN0UGF0aCB8fFxuICAgIHJlc29sdmVkVGltaW5nTWFuaWZlc3RPdXRwdXRQYXRoID09PSByZXNvbHZlZFRpbWluZ01hbmlmZXN0UGF0aFxuICApKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiVGVzdCBwcm9maWxpbmcgb3V0cHV0cyBtdXN0IG5vdCBvdmVyd3JpdGUgLS10aW1pbmctbWFuaWZlc3QgaW5wdXRcIilcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcHJvZmlsZTogcHJvZmlsZSB8fCBCb29sZWFuKHJlc29sdmVkUHJvZmlsZUpzb25QYXRoIHx8IHJlc29sdmVkVGltaW5nTWFuaWZlc3RPdXRwdXRQYXRoKSxcbiAgICBwcm9maWxlSnNvblBhdGg6IHJlc29sdmVkUHJvZmlsZUpzb25QYXRoLFxuICAgIHRpbWluZ01hbmlmZXN0UGF0aDogcmVzb2x2ZWRUaW1pbmdNYW5pZmVzdFBhdGgsXG4gICAgdGltaW5nTWFuaWZlc3RPdXRwdXRQYXRoOiByZXNvbHZlZFRpbWluZ01hbmlmZXN0T3V0cHV0UGF0aFxuICB9XG59XG5cbi8qKlxuICogTG9hZHMgYW4gb3B0aW9uYWwgSlNPTiB0aW1pbmcgbWFuaWZlc3QuIFVucmVhZGFibGUgb3IgbWFsZm9ybWVkIGlucHV0IGludGVudGlvbmFsbHkgZmFsbHMgYmFjayB0byBoZXVyaXN0aWNzLlxuICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IHRpbWluZ01hbmlmZXN0UGF0aCAtIFRpbWluZyBtYW5pZmVzdCBwYXRoLlxuICogQHJldHVybnMge1Byb21pc2U8UmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4gfCB1bmRlZmluZWQ+fSAtIFBhcnNlZCBtYW5pZmVzdCB3aGVuIHJlYWRhYmxlIGFuZCB2YWxpZCBKU09OLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFRpbWluZ01hbmlmZXN0KHRpbWluZ01hbmlmZXN0UGF0aCkge1xuICBpZiAoIXRpbWluZ01hbmlmZXN0UGF0aCkgcmV0dXJuIHVuZGVmaW5lZFxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoYXdhaXQgZnMucmVhZEZpbGUodGltaW5nTWFuaWZlc3RQYXRoLCBcInV0ZjhcIikpXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHJldHVybiB1bmRlZmluZWRcblxuICAgIHRocm93IGVycm9yXG4gIH1cbn1cblxuLyoqXG4gKiBSZXNvbHZlcyBob3cgbWFueSBzbG93ZXN0IHRlc3RzIHRvIHJlcG9ydCBmcm9tIHRoZSBgVkVMT0NJT1VTX1NMT1dfVEVTVF9DT1VOVGBcbiAqIGVudiB2YWx1ZTogZGVmYXVsdHMgdG8gMTAgd2hlbiB1bnNldDsgMCAob3IgYW4gdW5wYXJzZWFibGUgdmFsdWUpIGRpc2FibGVzIHRoZVxuICogcmVwb3J0OyBvdGhlcndpc2UgdGhlIGZsb29yZWQsIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLlxuICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IHJhd0VudlZhbHVlIC0gUmF3IGVudiB2YWx1ZS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IC0gTnVtYmVyIG9mIHNsb3dlc3QgdGVzdHMgdG8gcmVwb3J0ICgwIGRpc2FibGVzKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVTbG93VGVzdENvdW50KHJhd0VudlZhbHVlKSB7XG4gIGlmIChyYXdFbnZWYWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gMTBcblxuICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcihOdW1iZXIocmF3RW52VmFsdWUpKSB8fCAwKVxufVxuIl19
|
|
@@ -7,6 +7,7 @@ export type TimezoneStore = {
|
|
|
7
7
|
offsetMinutes: number;
|
|
8
8
|
requestTiming?: import("../http-server/client/request-timing.js").default;
|
|
9
9
|
tenant?: ReturnType<typeof JSON.parse>;
|
|
10
|
+
testProfileContext?: import("../testing/test-profiler.js").TestProfileAsyncContext;
|
|
10
11
|
timeZone?: string;
|
|
11
12
|
};
|
|
12
13
|
export default class VelociousEnvironmentHandlerNode extends Base {
|
|
@@ -74,6 +75,19 @@ export default class VelociousEnvironmentHandlerNode extends Base {
|
|
|
74
75
|
* @returns {T} - Callback result.
|
|
75
76
|
*/
|
|
76
77
|
runWithSharedTransactionCoordinatorOwner<T>(connection: object, owner: symbol, callback: () => T): T;
|
|
78
|
+
/**
|
|
79
|
+
* Runs work with async-safe test profile attribution.
|
|
80
|
+
* @template T
|
|
81
|
+
* @param {import("../testing/test-profiler.js").TestProfileAsyncContext | undefined} context - Captured profile context, or an explicit absence of attribution.
|
|
82
|
+
* @param {() => T} callback - Profiled work.
|
|
83
|
+
* @returns {T} - Callback result.
|
|
84
|
+
*/
|
|
85
|
+
runWithTestProfileContext<T>(context: import("../testing/test-profiler.js").TestProfileAsyncContext | undefined, callback: () => T): T;
|
|
86
|
+
/**
|
|
87
|
+
* Gets the current async-safe test profile attribution context.
|
|
88
|
+
* @returns {import("../testing/test-profiler.js").TestProfileAsyncContext | undefined} - Current context.
|
|
89
|
+
*/
|
|
90
|
+
getCurrentTestProfileContext(): import("../testing/test-profiler.js").TestProfileAsyncContext | undefined;
|
|
77
91
|
/**
|
|
78
92
|
* Find commands result.
|
|
79
93
|
* @type {import("./base.js").CommandFileObjectType[] | undefined} */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../src/environment-handlers/node.js"],"names":[],"mappings":"AAEA,OAAO,wCAAwC,CAAA;AAC/C,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,wBAAwB,MAAM,mCAAmC,CAAA;AAmCxE,OAAO,oBAAoB,MAAM,kCAAkC,CAAA;AAKhE,
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../src/environment-handlers/node.js"],"names":[],"mappings":"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"}
|