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.
Files changed (72) hide show
  1. package/README.md +23 -1
  2. package/build/configuration.js +19 -0
  3. package/build/database/drivers/base.js +105 -7
  4. package/build/database/drivers/mysql/index.js +21 -6
  5. package/build/database/pool/async-tracked-multi-connection.js +136 -28
  6. package/build/database/pool/base.js +1 -1
  7. package/build/environment-handlers/base.js +16 -0
  8. package/build/environment-handlers/node/cli/commands/test.js +220 -84
  9. package/build/environment-handlers/node.js +40 -1
  10. package/build/src/configuration.d.ts +9 -0
  11. package/build/src/configuration.d.ts.map +1 -1
  12. package/build/src/configuration.js +17 -1
  13. package/build/src/database/drivers/base.d.ts +40 -1
  14. package/build/src/database/drivers/base.d.ts.map +1 -1
  15. package/build/src/database/drivers/base.js +97 -8
  16. package/build/src/database/drivers/mysql/index.d.ts.map +1 -1
  17. package/build/src/database/drivers/mysql/index.js +25 -9
  18. package/build/src/database/pool/async-tracked-multi-connection.d.ts +42 -2
  19. package/build/src/database/pool/async-tracked-multi-connection.d.ts.map +1 -1
  20. package/build/src/database/pool/async-tracked-multi-connection.js +119 -30
  21. package/build/src/database/pool/base.d.ts +11 -1
  22. package/build/src/database/pool/base.d.ts.map +1 -1
  23. package/build/src/database/pool/base.js +2 -2
  24. package/build/src/environment-handlers/base.d.ts +14 -0
  25. package/build/src/environment-handlers/base.d.ts.map +1 -1
  26. package/build/src/environment-handlers/base.js +15 -1
  27. package/build/src/environment-handlers/node/cli/commands/test.d.ts +22 -0
  28. package/build/src/environment-handlers/node/cli/commands/test.d.ts.map +1 -1
  29. package/build/src/environment-handlers/node/cli/commands/test.js +200 -82
  30. package/build/src/environment-handlers/node.d.ts +14 -0
  31. package/build/src/environment-handlers/node.d.ts.map +1 -1
  32. package/build/src/environment-handlers/node.js +38 -2
  33. package/build/src/testing/test-filter-parser.d.ts +15 -0
  34. package/build/src/testing/test-filter-parser.d.ts.map +1 -1
  35. package/build/src/testing/test-filter-parser.js +57 -6
  36. package/build/src/testing/test-profile-activity.d.ts +7 -0
  37. package/build/src/testing/test-profile-activity.d.ts.map +1 -0
  38. package/build/src/testing/test-profile-activity.js +13 -0
  39. package/build/src/testing/test-profile-context.d.ts +15 -0
  40. package/build/src/testing/test-profile-context.d.ts.map +1 -0
  41. package/build/src/testing/test-profile-context.js +25 -0
  42. package/build/src/testing/test-profile-output.d.ts +30 -0
  43. package/build/src/testing/test-profile-output.d.ts.map +1 -0
  44. package/build/src/testing/test-profile-output.js +204 -0
  45. package/build/src/testing/test-profiler.d.ts +668 -0
  46. package/build/src/testing/test-profiler.d.ts.map +1 -0
  47. package/build/src/testing/test-profiler.js +847 -0
  48. package/build/src/testing/test-runner.d.ts +85 -2
  49. package/build/src/testing/test-runner.d.ts.map +1 -1
  50. package/build/src/testing/test-runner.js +182 -33
  51. package/build/testing/test-filter-parser.js +57 -5
  52. package/build/testing/test-profile-activity.js +14 -0
  53. package/build/testing/test-profile-context.js +28 -0
  54. package/build/testing/test-profile-output.js +240 -0
  55. package/build/testing/test-profiler.js +917 -0
  56. package/build/testing/test-runner.js +196 -33
  57. package/build/tsconfig.tsbuildinfo +1 -1
  58. package/package.json +1 -1
  59. package/src/configuration.js +19 -0
  60. package/src/database/drivers/base.js +105 -7
  61. package/src/database/drivers/mysql/index.js +21 -6
  62. package/src/database/pool/async-tracked-multi-connection.js +136 -28
  63. package/src/database/pool/base.js +1 -1
  64. package/src/environment-handlers/base.js +16 -0
  65. package/src/environment-handlers/node/cli/commands/test.js +220 -84
  66. package/src/environment-handlers/node.js +40 -1
  67. package/src/testing/test-filter-parser.js +57 -5
  68. package/src/testing/test-profile-activity.js +14 -0
  69. package/src/testing/test-profile-context.js +28 -0
  70. package/src/testing/test-profile-output.js +240 -0
  71. package/src/testing/test-profiler.js +917 -0
  72. 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;AASzD,MAAM,CAAC,OAAO,OAAO,wBAAyB,SAAQ,WAAW;IACzD,OAAO,kBA+HZ;CACF;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
+ {"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 testFilesFinder = new TestFilesFinder({ directory, directories, processArgs: filteredProcessArgs });
28
- let testFiles = await testFilesFinder.findTestFiles();
29
- if (groups !== undefined || groupNumber !== undefined) {
30
- if (groups === undefined || groupNumber === undefined) {
31
- throw new Error("Both --groups and --group-number must be provided together");
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
- let signalHandled = false;
47
- const handleSignal = async (/** @type {string} */ signal) => {
48
- if (signalHandled)
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
- signalHandled = true;
51
- console.error(`\nReceived ${signal}, running afterAll hooks before exit...`);
52
- try {
53
- await testRunner.runAfterAllsForActiveScopes();
54
- }
55
- catch (error) {
56
- console.error("Failed while running afterAll hooks:", error);
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
- finally {
59
- process.exit(130);
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
- process.once("SIGINT", () => { void handleSignal("SIGINT"); });
63
- process.once("SIGTERM", () => { void handleSignal("SIGTERM"); });
64
- await testRunner.prepare();
65
- if (testRunner.getTestsCount() === 0) {
66
- throw new Error(`${testRunner.getTestsCount()} tests was found in ${testFiles.length} file(s)`);
67
- }
68
- await testRunner.run();
69
- const executedTests = testRunner.getExecutedTestsCount();
70
- const lineFilters = testRunner.getLineFilters();
71
- const hasLineFilters = Object.keys(lineFilters).length > 0;
72
- const hasExampleFilters = examplePatterns.length > 0;
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
- if (testRunner.isFailed()) {
93
- await testRunner.persistFailedTestConsoleOutputsToAssets();
94
- const failedTests = testRunner.getFailedTestDetails();
95
- if (failedTests.length > 0) {
96
- console.error(picocolors.red("\nFailed tests:"));
97
- for (const failed of failedTests) {
98
- const location = failed.filePath && failed.line
99
- ? ` (${failed.filePath}:${failed.line})`
100
- : "";
101
- console.error(picocolors.red(`- ${failed.fullDescription}${location}`));
102
- if (failed.consoleLogPath) {
103
- console.error(picocolors.red(` Console log: ${failed.consoleLogPath}`));
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
- else {
115
- console.log(picocolors.green(`\nTest run succeeded with ${testRunner.getSuccessfulTests()} successful tests`));
116
- process.exit(0);
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":"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"}
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../src/environment-handlers/node.js"],"names":[],"mappings":"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"}