velocious 1.0.668 → 1.0.669
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 +11 -6
- package/build/src/testing/expect-utils.d.ts +1 -51
- package/build/src/testing/expect-utils.d.ts.map +1 -1
- package/build/src/testing/expect-utils.js +2 -205
- package/build/src/testing/expect.d.ts +1 -171
- package/build/src/testing/expect.d.ts.map +1 -1
- package/build/src/testing/expect.js +2 -667
- package/build/src/testing/test.d.ts +1 -13
- package/build/src/testing/test.d.ts.map +1 -1
- package/build/src/testing/test.js +2 -14
- package/build/testing/expect-utils.js +1 -242
- package/build/testing/expect.js +1 -760
- package/build/testing/test.js +3 -14
- package/package.json +3 -4
- package/src/testing/expect-utils.js +1 -242
- package/src/testing/expect.js +1 -760
- package/src/testing/test.js +3 -14
- package/build/src/testing/base-expect.d.ts +0 -15
- package/build/src/testing/base-expect.d.ts.map +0 -1
- package/build/src/testing/base-expect.js +0 -16
- package/build/src/testing/expect-to-change.d.ts +0 -32
- package/build/src/testing/expect-to-change.d.ts.map +0 -1
- package/build/src/testing/expect-to-change.js +0 -46
- package/build/testing/base-expect.js +0 -17
- package/build/testing/expect-to-change.js +0 -55
- package/src/testing/base-expect.js +0 -17
- package/src/testing/expect-to-change.js +0 -55
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import { afterAll, afterEach, beforeAll, beforeEach, configureTests, defaultTestContext, describe, fdescribe, fit, it, test, waitForEvent, xdescribe, xit, xtest } from "@velocious/testing";
|
|
2
|
-
import Expect from "./expect.js";
|
|
3
|
-
import { arrayContaining, objectContaining } from "./expect-utils.js";
|
|
1
|
+
import { afterAll, afterEach, arrayContaining, beforeAll, beforeEach, configureTests, defaultTestContext, describe, expect, fdescribe, fit, it, objectContaining, test, waitForEvent, xdescribe, xit, xtest } from "@velocious/testing";
|
|
4
2
|
export type PackageSuiteDeclaration = (typeof defaultTestContext.registry.suites)[number];
|
|
5
3
|
export type VelociousTestConfig = {
|
|
6
4
|
/**
|
|
@@ -29,16 +27,6 @@ export type VelociousTestConfig = {
|
|
|
29
27
|
* @property {number} defaultTimeoutSeconds - Default timeout in seconds.
|
|
30
28
|
* @property {number} failedConsoleOutputMaxLines - Maximum failed console lines to print inline.
|
|
31
29
|
*/
|
|
32
|
-
/**
|
|
33
|
-
* Runs expect.
|
|
34
|
-
* @param {ReturnType<typeof JSON.parse>} arg - Arg.
|
|
35
|
-
* @returns {Expect} - The expect.
|
|
36
|
-
*/
|
|
37
|
-
declare function expect(arg: ReturnType<typeof JSON.parse>): Expect;
|
|
38
|
-
declare namespace expect {
|
|
39
|
-
export { objectContaining };
|
|
40
|
-
export { arrayContaining };
|
|
41
|
-
}
|
|
42
30
|
/** Velocious-owned awaited compatibility events. */
|
|
43
31
|
declare const testEvents: import("eventemitter3").EventEmitter<string | symbol, any>;
|
|
44
32
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../../src/testing/test.js"],"names":[],"mappings":"AAEA,OAAO,EACL,QAAQ,EACR,SAAS,EACT,SAAS,EACT,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,QAAQ,EACR,SAAS,EACT,GAAG,EACH,EAAE,EACF,IAAI,EACJ,YAAY,EACZ,SAAS,EACT,GAAG,EACH,KAAK,EACN,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../../src/testing/test.js"],"names":[],"mappings":"AAEA,OAAO,EACL,QAAQ,EACR,SAAS,EACT,eAAe,EACf,SAAS,EACT,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,QAAQ,EACR,MAAM,EACN,SAAS,EACT,GAAG,EACH,EAAE,EACF,gBAAgB,EAChB,IAAI,EACJ,YAAY,EACZ,SAAS,EACT,GAAG,EACH,KAAK,EACN,MAAM,oBAAoB,CAAA;AAGvB,YAA+D,uBAAuB,GAA5E,CAAC,OAAO,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAyB;AAIvF,YAAkB,mBAAmB,GACrC;;;;IAA+B,aAAa,EAAjC,SAAS,GAAG,MAAM,CAC7B;;;;IAAqB,WAAW,EAArB,MAAM,EAAE,CACnB;;;;IAAmB,qBAAqB,EAA7B,MAAM,CACjB;;;;IAAmB,2BAA2B,EAAnC,MAAM,CACnB;CAAA,CAAA;AATD,6FAA6F;AAE7F;;;;;;;GAOG;AAEH,oDAAoD;AACpD,QAAA,MAAM,UAAU,4DAAqB,CAAA;AAmBrC;;;GAGG;AACH,QAAA,MAAM,UAAU,EAFN,mBAWT,CAAA;AAqGD,uDAAuD;AACvD,QAAA,MAAM,KAAK,EADA,OAAO,kBAAkB,EAAE,aACT,CAAA;AAsB7B,OAAO,EACL,QAAQ,EACR,SAAS,EACT,SAAS,EACT,UAAU,EACV,cAAc,EACd,QAAQ,EACR,MAAM,EACN,SAAS,EACT,GAAG,EACH,EAAE,EACF,IAAI,EACJ,SAAS,EACT,GAAG,EACH,KAAK,EACL,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,KAAK,EACL,YAAY,EACb,CAAA"}
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
// @ts-check
|
|
2
|
-
import { afterAll, afterEach, beforeAll, beforeEach, configureTests, defaultTestContext, describe, fdescribe, fit, it, test, waitForEvent, xdescribe, xit, xtest } from "@velocious/testing";
|
|
2
|
+
import { afterAll, afterEach, arrayContaining, beforeAll, beforeEach, configureTests, defaultTestContext, describe, expect, fdescribe, fit, it, objectContaining, test, waitForEvent, xdescribe, xit, xtest } from "@velocious/testing";
|
|
3
3
|
import EventEmitter from "../utils/event-emitter.js";
|
|
4
|
-
import Expect from "./expect.js";
|
|
5
|
-
import { arrayContaining, objectContaining } from "./expect-utils.js";
|
|
6
4
|
/** @typedef {(typeof defaultTestContext.registry.suites)[number]} PackageSuiteDeclaration */
|
|
7
5
|
/**
|
|
8
6
|
* VelociousTestConfig type.
|
|
@@ -12,16 +10,6 @@ import { arrayContaining, objectContaining } from "./expect-utils.js";
|
|
|
12
10
|
* @property {number} defaultTimeoutSeconds - Default timeout in seconds.
|
|
13
11
|
* @property {number} failedConsoleOutputMaxLines - Maximum failed console lines to print inline.
|
|
14
12
|
*/
|
|
15
|
-
/**
|
|
16
|
-
* Runs expect.
|
|
17
|
-
* @param {ReturnType<typeof JSON.parse>} arg - Arg.
|
|
18
|
-
* @returns {Expect} - The expect.
|
|
19
|
-
*/
|
|
20
|
-
function expect(arg) {
|
|
21
|
-
return new Expect(arg);
|
|
22
|
-
}
|
|
23
|
-
expect.objectContaining = objectContaining;
|
|
24
|
-
expect.arrayContaining = arrayContaining;
|
|
25
13
|
/** Velocious-owned awaited compatibility events. */
|
|
26
14
|
const testEvents = new EventEmitter();
|
|
27
15
|
/**
|
|
@@ -168,4 +156,4 @@ Object.assign(globalThis, {
|
|
|
168
156
|
xtest
|
|
169
157
|
});
|
|
170
158
|
export { afterAll, afterEach, beforeAll, beforeEach, configureTests, describe, expect, fdescribe, fit, it, test, xdescribe, xit, xtest, arrayContaining, objectContaining, testConfig, testEvents, tests, waitForEvent };
|
|
171
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0aW5nL3Rlc3QuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFDTCxRQUFRLEVBQ1IsU0FBUyxFQUNULFNBQVMsRUFDVCxVQUFVLEVBQ1YsY0FBYyxFQUNkLGtCQUFrQixFQUNsQixRQUFRLEVBQ1IsU0FBUyxFQUNULEdBQUcsRUFDSCxFQUFFLEVBQ0YsSUFBSSxFQUNKLFlBQVksRUFDWixTQUFTLEVBQ1QsR0FBRyxFQUNILEtBQUssRUFDTixNQUFNLG9CQUFvQixDQUFBO0FBQzNCLE9BQU8sWUFBWSxNQUFNLDJCQUEyQixDQUFBO0FBQ3BELE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQTtBQUNoQyxPQUFPLEVBQUMsZUFBZSxFQUFFLGdCQUFnQixFQUFDLE1BQU0sbUJBQW1CLENBQUE7QUFFbkUsNkZBQTZGO0FBRTdGOzs7Ozs7O0dBT0c7QUFFSDs7OztHQUlHO0FBQ0gsU0FBUyxNQUFNLENBQUMsR0FBRztJQUNqQixPQUFPLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBQ3hCLENBQUM7QUFFRCxNQUFNLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUE7QUFDMUMsTUFBTSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUE7QUFFeEMsb0RBQW9EO0FBQ3BELE1BQU0sVUFBVSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUE7QUFFckM7Ozs7R0FJRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsS0FBSztJQUM3QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUM3RixJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtRQUFFLE9BQU8sS0FBSyxDQUFBO0lBRTdELDREQUE0RDtJQUM1RCxNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUE7SUFFekIsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFBO0lBRS9GLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQTtBQUN0QyxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLEdBQUc7SUFDakIsSUFBSSxhQUFhLEtBQUssT0FBTyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFBLENBQUMsQ0FBQztJQUN0RSxJQUFJLGFBQWEsQ0FBQyxLQUFLLElBQUksa0JBQWtCLENBQUMsY0FBYyxDQUFDLEVBQUMsYUFBYSxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUEsQ0FBQyxDQUFDO0lBQ3RGLElBQUksV0FBVyxLQUFLLE9BQU8sa0JBQWtCLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQSxDQUFDLENBQUM7SUFDbEUsSUFBSSxXQUFXLENBQUMsS0FBSyxJQUFJLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxFQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUNsRixJQUFJLHFCQUFxQixLQUFLLE9BQU8sa0JBQWtCLENBQUMsTUFBTSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQSxDQUFDLENBQUM7SUFDeEYsSUFBSSxxQkFBcUIsQ0FBQyxLQUFLLElBQUksa0JBQWtCLENBQUMsY0FBYyxDQUFDLEVBQUMscUJBQXFCLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFDdEcsSUFBSSwyQkFBMkIsS0FBSyxPQUFPLGtCQUFrQixDQUFDLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQSxDQUFDLENBQUM7SUFDbEcsSUFBSSwyQkFBMkIsQ0FBQyxLQUFLLElBQUksa0JBQWtCLENBQUMsY0FBYyxDQUFDLEVBQUMsMkJBQTJCLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQSxDQUFDLENBQUM7Q0FDbkgsQ0FBQTtBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxZQUFZLENBQUMsS0FBSztJQUN6QixrRUFBa0U7SUFDbEUsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFBO0lBQ3pCLHVFQUF1RTtJQUN2RSxNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUE7SUFFMUIsS0FBSyxNQUFNLFdBQVcsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdEMsTUFBTSxXQUFXLEdBQUcsRUFBQyxHQUFHLFdBQVcsQ0FBQyxPQUFPLEVBQUMsQ0FBQTtRQUU1QyxJQUFJLFdBQVcsQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLE9BQU8sV0FBVyxDQUFDLE9BQU8sS0FBSyxRQUFRO1lBQUUsV0FBVyxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFBO1FBQ3ZILElBQUksV0FBVyxDQUFDLGNBQWMsS0FBSyxTQUFTLElBQUksT0FBTyxXQUFXLENBQUMsU0FBUyxLQUFLLFFBQVE7WUFBRSxXQUFXLENBQUMsY0FBYyxHQUFHLFdBQVcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFBO1FBQ3BKLGNBQWMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUMvQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsV0FBVyxDQUFDO1lBQ25DLFFBQVEsRUFBRSxXQUFXLENBQUMsUUFBUSxDQUFDLFFBQVE7WUFDdkMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxRQUFRO1lBQzlCLElBQUksRUFBRSxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUk7U0FDaEMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELEtBQUssTUFBTSxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU07UUFBRSxlQUFlLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUVuRixNQUFNLFVBQVUsR0FBRztRQUNqQixTQUFTLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBQyxDQUFDLENBQUMsQ0FBQztRQUN0RyxXQUFXLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBQyxDQUFDLENBQUMsQ0FBQztRQUN6RyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUNyQyxVQUFVLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBQyxDQUFDLENBQUMsQ0FBQztRQUN4RyxZQUFZLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBQyxDQUFDLENBQUMsQ0FBQztRQUMzRyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRO1FBQ2pDLElBQUksRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUk7UUFDekIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO1FBQ3BDLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQztLQUNyQyxDQUFBO0lBRUQsd0VBQXdFO0lBQ3hFLE9BQU8sdURBQXVELENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUE7QUFDNUYsQ0FBQztBQUVEOzs7R0FHRztBQUNILDRFQUE0RTtBQUM1RSxNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUE7QUFDekIsNkVBQTZFO0FBQzdFLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxDQUFBO0FBQzNCLDRFQUE0RTtBQUM1RSxNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUE7QUFDMUIsNkVBQTZFO0FBQzdFLE1BQU0saUJBQWlCLEdBQUcsRUFBRSxDQUFBO0FBQzVCLE1BQU0sb0JBQW9CLEdBQUcsRUFBQyxnQkFBZ0IsRUFBRSxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUMsRUFBQyxDQUFBO0FBRXBFLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUE7QUFDN0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO0FBQy9CLE1BQU0sQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUE7QUFDOUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO0FBQ2hDLE1BQU0sQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtBQUNwRCxNQUFNLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUE7QUFFbkMsTUFBTSxlQUFlLEdBQUc7SUFDdEIsSUFBSSxTQUFTLEtBQUssT0FBTyxjQUFjLENBQUEsQ0FBQyxDQUFDO0lBQ3pDLElBQUksV0FBVyxLQUFLLE9BQU8sZ0JBQWdCLENBQUEsQ0FBQyxDQUFDO0lBQzdDLElBQUksSUFBSSxLQUFLLE9BQU8sb0JBQW9CLENBQUEsQ0FBQyxDQUFDO0lBQzFDLElBQUksVUFBVSxLQUFLLE9BQU8sZUFBZSxDQUFBLENBQUMsQ0FBQztJQUMzQyxJQUFJLFlBQVksS0FBSyxPQUFPLGlCQUFpQixDQUFBLENBQUMsQ0FBQztJQUMvQyxJQUFJLFFBQVEsS0FBSyxPQUFPLFNBQVMsQ0FBQSxDQUFDLENBQUM7SUFDbkMsSUFBSSxJQUFJLEtBQUssT0FBTyxTQUFTLENBQUEsQ0FBQyxDQUFDO0lBQy9CLElBQUksSUFBSTtRQUNOLHVFQUF1RTtRQUN2RSxNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUE7UUFFMUIsS0FBSyxNQUFNLEtBQUssSUFBSSxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdkQsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLEVBQUUsRUFBRSxDQUFDO2dCQUN0QixLQUFLLE1BQU0sVUFBVSxJQUFJLEtBQUssQ0FBQyxNQUFNO29CQUFFLGVBQWUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1lBQ3BHLENBQUM7aUJBQU0sQ0FBQztnQkFDTixlQUFlLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUNuRCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQTtJQUN2QyxDQUFDO0lBQ0QsSUFBSSxLQUFLO1FBQ1Asa0VBQWtFO1FBQ2xFLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQTtRQUV6QixLQUFLLE1BQU0sS0FBSyxJQUFJLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN2RCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssRUFBRTtnQkFBRSxTQUFRO1lBRS9CLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUMxRCxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFBO0lBQ3RDLENBQUM7Q0FDRixDQUFBO0FBQ0QsdURBQXVEO0FBQ3ZELE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQTtBQUM3QixNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBRXBCLHdGQUF3RjtBQUN4RixNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRTtJQUN4QixRQUFRO0lBQ1IsU0FBUztJQUNULFNBQVM7SUFDVCxVQUFVO0lBQ1YsY0FBYztJQUNkLFFBQVE7SUFDUixNQUFNO0lBQ04sU0FBUztJQUNULEdBQUc7SUFDSCxFQUFFO0lBQ0YsSUFBSTtJQUNKLFVBQVU7SUFDVixTQUFTO0lBQ1QsR0FBRztJQUNILEtBQUs7Q0FDTixDQUFDLENBQUE7QUFFRixPQUFPLEVBQ0wsUUFBUSxFQUNSLFNBQVMsRUFDVCxTQUFTLEVBQ1QsVUFBVSxFQUNWLGNBQWMsRUFDZCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxHQUFHLEVBQ0gsRUFBRSxFQUNGLElBQUksRUFDSixTQUFTLEVBQ1QsR0FBRyxFQUNILEtBQUssRUFDTCxlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLFVBQVUsRUFDVixVQUFVLEVBQ1YsS0FBSyxFQUNMLFlBQVksRUFDYixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7XG4gIGFmdGVyQWxsLFxuICBhZnRlckVhY2gsXG4gIGJlZm9yZUFsbCxcbiAgYmVmb3JlRWFjaCxcbiAgY29uZmlndXJlVGVzdHMsXG4gIGRlZmF1bHRUZXN0Q29udGV4dCxcbiAgZGVzY3JpYmUsXG4gIGZkZXNjcmliZSxcbiAgZml0LFxuICBpdCxcbiAgdGVzdCxcbiAgd2FpdEZvckV2ZW50LFxuICB4ZGVzY3JpYmUsXG4gIHhpdCxcbiAgeHRlc3Rcbn0gZnJvbSBcIkB2ZWxvY2lvdXMvdGVzdGluZ1wiXG5pbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gXCIuLi91dGlscy9ldmVudC1lbWl0dGVyLmpzXCJcbmltcG9ydCBFeHBlY3QgZnJvbSBcIi4vZXhwZWN0LmpzXCJcbmltcG9ydCB7YXJyYXlDb250YWluaW5nLCBvYmplY3RDb250YWluaW5nfSBmcm9tIFwiLi9leHBlY3QtdXRpbHMuanNcIlxuXG4vKiogQHR5cGVkZWYgeyh0eXBlb2YgZGVmYXVsdFRlc3RDb250ZXh0LnJlZ2lzdHJ5LnN1aXRlcylbbnVtYmVyXX0gUGFja2FnZVN1aXRlRGVjbGFyYXRpb24gKi9cblxuLyoqXG4gKiBWZWxvY2lvdXNUZXN0Q29uZmlnIHR5cGUuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBWZWxvY2lvdXNUZXN0Q29uZmlnXG4gKiBAcHJvcGVydHkge1wiZmFpbHVyZVwiIHwgXCJsaXZlXCJ9IGNvbnNvbGVPdXRwdXQgLSBDb25zb2xlIG91dHB1dCBtb2RlLlxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gZXhjbHVkZVRhZ3MgLSBUYWdzIGV4Y2x1ZGVkIGJ5IGRlZmF1bHQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gZGVmYXVsdFRpbWVvdXRTZWNvbmRzIC0gRGVmYXVsdCB0aW1lb3V0IGluIHNlY29uZHMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gZmFpbGVkQ29uc29sZU91dHB1dE1heExpbmVzIC0gTWF4aW11bSBmYWlsZWQgY29uc29sZSBsaW5lcyB0byBwcmludCBpbmxpbmUuXG4gKi9cblxuLyoqXG4gKiBSdW5zIGV4cGVjdC5cbiAqIEBwYXJhbSB7UmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59IGFyZyAtIEFyZy5cbiAqIEByZXR1cm5zIHtFeHBlY3R9IC0gVGhlIGV4cGVjdC5cbiAqL1xuZnVuY3Rpb24gZXhwZWN0KGFyZykge1xuICByZXR1cm4gbmV3IEV4cGVjdChhcmcpXG59XG5cbmV4cGVjdC5vYmplY3RDb250YWluaW5nID0gb2JqZWN0Q29udGFpbmluZ1xuZXhwZWN0LmFycmF5Q29udGFpbmluZyA9IGFycmF5Q29udGFpbmluZ1xuXG4vKiogVmVsb2Npb3VzLW93bmVkIGF3YWl0ZWQgY29tcGF0aWJpbGl0eSBldmVudHMuICovXG5jb25zdCB0ZXN0RXZlbnRzID0gbmV3IEV2ZW50RW1pdHRlcigpXG5cbi8qKlxuICogRGV0YWNoZXMgYW5kIGZyZWV6ZXMgZGVjbGFyYXRpb24gbWV0YWRhdGEgZXhwb3NlZCBieSB0aGUgY29tcGF0aWJpbGl0eSB2aWV3LlxuICogQHBhcmFtIHtSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0gdmFsdWUgLSBQYWNrYWdlIGRlY2xhcmF0aW9uIHZhbHVlLlxuICogQHJldHVybnMge1JldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSAtIEltbXV0YWJsZSBkZXRhY2hlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gcmVhZE9ubHlTbmFwc2hvdCh2YWx1ZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiBPYmplY3QuZnJlZXplKHZhbHVlLm1hcCgoZW50cnkpID0+IHJlYWRPbmx5U25hcHNob3QoZW50cnkpKSlcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIHZhbHVlXG5cbiAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj59ICovXG4gIGNvbnN0IHByb2plY3RlZFZhbHVlID0ge31cblxuICBmb3IgKGNvbnN0IFtrZXksIGVudHJ5XSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSkpIHByb2plY3RlZFZhbHVlW2tleV0gPSByZWFkT25seVNuYXBzaG90KGVudHJ5KVxuXG4gIHJldHVybiBPYmplY3QuZnJlZXplKHByb2plY3RlZFZhbHVlKVxufVxuXG4vKipcbiAqIEJhY2t3YXJkLWNvbXBhdGlibGUgdmlldyBvZiB0aGUgcGFja2FnZSBjb25maWd1cmF0aW9uLlxuICogQHR5cGUge1ZlbG9jaW91c1Rlc3RDb25maWd9XG4gKi9cbmNvbnN0IHRlc3RDb25maWcgPSB7XG4gIGdldCBjb25zb2xlT3V0cHV0KCkgeyByZXR1cm4gZGVmYXVsdFRlc3RDb250ZXh0LmNvbmZpZy5jb25zb2xlT3V0cHV0IH0sXG4gIHNldCBjb25zb2xlT3V0cHV0KHZhbHVlKSB7IGRlZmF1bHRUZXN0Q29udGV4dC5jb25maWd1cmVUZXN0cyh7Y29uc29sZU91dHB1dDogdmFsdWV9KSB9LFxuICBnZXQgZXhjbHVkZVRhZ3MoKSB7IHJldHVybiBkZWZhdWx0VGVzdENvbnRleHQuY29uZmlnLmV4Y2x1ZGVUYWdzIH0sXG4gIHNldCBleGNsdWRlVGFncyh2YWx1ZSkgeyBkZWZhdWx0VGVzdENvbnRleHQuY29uZmlndXJlVGVzdHMoe2V4Y2x1ZGVUYWdzOiB2YWx1ZX0pIH0sXG4gIGdldCBkZWZhdWx0VGltZW91dFNlY29uZHMoKSB7IHJldHVybiBkZWZhdWx0VGVzdENvbnRleHQuY29uZmlnLmRlZmF1bHRUaW1lb3V0TXMgLyAxMDAwIH0sXG4gIHNldCBkZWZhdWx0VGltZW91dFNlY29uZHModmFsdWUpIHsgZGVmYXVsdFRlc3RDb250ZXh0LmNvbmZpZ3VyZVRlc3RzKHtkZWZhdWx0VGltZW91dFNlY29uZHM6IHZhbHVlfSkgfSxcbiAgZ2V0IGZhaWxlZENvbnNvbGVPdXRwdXRNYXhMaW5lcygpIHsgcmV0dXJuIGRlZmF1bHRUZXN0Q29udGV4dC5jb25maWcuZmFpbGVkQ29uc29sZU91dHB1dE1heExpbmVzIH0sXG4gIHNldCBmYWlsZWRDb25zb2xlT3V0cHV0TWF4TGluZXModmFsdWUpIHsgZGVmYXVsdFRlc3RDb250ZXh0LmNvbmZpZ3VyZVRlc3RzKHtmYWlsZWRDb25zb2xlT3V0cHV0TWF4TGluZXM6IHZhbHVlfSkgfVxufVxuXG4vKipcbiAqIFByb2plY3RzIG9uZSBwYWNrYWdlIHN1aXRlIGludG8gdGhlIGRlcHJlY2F0ZWQgbGVnYWN5IGluc3BlY3Rpb24gc2hhcGUuXG4gKiBUaGUgcmV0dXJuZWQgb2JqZWN0cyBhcmUgc25hcHNob3RzIGFuZCBuZXZlciBwYXJ0aWNpcGF0ZSBpbiBleGVjdXRpb24uXG4gKiBAcGFyYW0ge1BhY2thZ2VTdWl0ZURlY2xhcmF0aW9ufSBzdWl0ZSAtIFBhY2thZ2UgZGVjbGFyYXRpb24uXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi90ZXN0LXJ1bm5lci5qc1wiKS5UZXN0c0FyZ3VtZW50fSAtIFJlYWQtb25seSBjb21wYXRpYmlsaXR5IHNuYXBzaG90LlxuICovXG5mdW5jdGlvbiBwcm9qZWN0U3VpdGUoc3VpdGUpIHtcbiAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuL3Rlc3QtcnVubmVyLmpzXCIpLlRlc3REYXRhPn0gKi9cbiAgY29uc3QgcHJvamVjdGVkVGVzdHMgPSB7fVxuICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIGltcG9ydChcIi4vdGVzdC1ydW5uZXIuanNcIikuVGVzdHNBcmd1bWVudD59ICovXG4gIGNvbnN0IHByb2plY3RlZFN1aXRlcyA9IHt9XG5cbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBzdWl0ZS50ZXN0cykge1xuICAgIGNvbnN0IG11dGFibGVBcmdzID0gey4uLmRlY2xhcmF0aW9uLm9wdGlvbnN9XG5cbiAgICBpZiAobXV0YWJsZUFyZ3MucmV0cnkgPT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgbXV0YWJsZUFyZ3MucmV0cmllcyA9PT0gXCJudW1iZXJcIikgbXV0YWJsZUFyZ3MucmV0cnkgPSBtdXRhYmxlQXJncy5yZXRyaWVzXG4gICAgaWYgKG11dGFibGVBcmdzLnRpbWVvdXRTZWNvbmRzID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIG11dGFibGVBcmdzLnRpbWVvdXRNcyA9PT0gXCJudW1iZXJcIikgbXV0YWJsZUFyZ3MudGltZW91dFNlY29uZHMgPSBtdXRhYmxlQXJncy50aW1lb3V0TXMgLyAxMDAwXG4gICAgcHJvamVjdGVkVGVzdHNbZGVjbGFyYXRpb24ubmFtZV0gPSBPYmplY3QuZnJlZXplKHtcbiAgICAgIGFyZ3M6IHJlYWRPbmx5U25hcHNob3QobXV0YWJsZUFyZ3MpLFxuICAgICAgZmlsZVBhdGg6IGRlY2xhcmF0aW9uLmxvY2F0aW9uLmZpbGVQYXRoLFxuICAgICAgZnVuY3Rpb246IGRlY2xhcmF0aW9uLmNhbGxiYWNrLFxuICAgICAgbGluZTogZGVjbGFyYXRpb24ubG9jYXRpb24ubGluZVxuICAgIH0pXG4gIH1cblxuICBmb3IgKGNvbnN0IGNoaWxkIG9mIHN1aXRlLnN1aXRlcykgcHJvamVjdGVkU3VpdGVzW2NoaWxkLm5hbWVdID0gcHJvamVjdFN1aXRlKGNoaWxkKVxuXG4gIGNvbnN0IHByb2plY3Rpb24gPSB7XG4gICAgYWZ0ZXJBbGxzOiBPYmplY3QuZnJlZXplKHN1aXRlLmhvb2tzLmFmdGVyQWxsLm1hcCgoaG9vaykgPT4gT2JqZWN0LmZyZWV6ZSh7Y2FsbGJhY2s6IGhvb2suY2FsbGJhY2t9KSkpLFxuICAgIGFmdGVyRWFjaGVzOiBPYmplY3QuZnJlZXplKHN1aXRlLmhvb2tzLmFmdGVyRWFjaC5tYXAoKGhvb2spID0+IE9iamVjdC5mcmVlemUoe2NhbGxiYWNrOiBob29rLmNhbGxiYWNrfSkpKSxcbiAgICBhcmdzOiByZWFkT25seVNuYXBzaG90KHN1aXRlLm9wdGlvbnMpLFxuICAgIGJlZm9yZUFsbHM6IE9iamVjdC5mcmVlemUoc3VpdGUuaG9va3MuYmVmb3JlQWxsLm1hcCgoaG9vaykgPT4gT2JqZWN0LmZyZWV6ZSh7Y2FsbGJhY2s6IGhvb2suY2FsbGJhY2t9KSkpLFxuICAgIGJlZm9yZUVhY2hlczogT2JqZWN0LmZyZWV6ZShzdWl0ZS5ob29rcy5iZWZvcmVFYWNoLm1hcCgoaG9vaykgPT4gT2JqZWN0LmZyZWV6ZSh7Y2FsbGJhY2s6IGhvb2suY2FsbGJhY2t9KSkpLFxuICAgIGZpbGVQYXRoOiBzdWl0ZS5sb2NhdGlvbi5maWxlUGF0aCxcbiAgICBsaW5lOiBzdWl0ZS5sb2NhdGlvbi5saW5lLFxuICAgIHN1YnM6IE9iamVjdC5mcmVlemUocHJvamVjdGVkU3VpdGVzKSxcbiAgICB0ZXN0czogT2JqZWN0LmZyZWV6ZShwcm9qZWN0ZWRUZXN0cylcbiAgfVxuXG4gIC8vIE5hcnJvd3MgdGhlIGltbXV0YWJsZSBzbmFwc2hvdCB0byB0aGUgaGlzdG9yaWNhbCBpbnNwZWN0aW9uIGNvbnRyYWN0LlxuICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3Rlc3QtcnVubmVyLmpzXCIpLlRlc3RzQXJndW1lbnR9ICovIChPYmplY3QuZnJlZXplKHByb2plY3Rpb24pKVxufVxuXG4vKipcbiAqIERlcHJlY2F0ZWQgcmVhZC1vbmx5IGRlY2xhcmF0aW9uIHByb2plY3Rpb24uIFBhY2thZ2UgZGVjbGFyYXRpb25zIGluXG4gKiBkZWZhdWx0VGVzdENvbnRleHQgYXJlIHRoZSBzb2xlIGV4ZWN1dGlvbiBzb3VyY2UuXG4gKi9cbi8qKiBAdHlwZSB7aW1wb3J0KFwiLi90ZXN0LXJ1bm5lci5qc1wiKS5CZWZvcmVBZnRlckFsbENhbGxiYWNrT2JqZWN0VHlwZVtdfSAqL1xuY29uc3QgZW1wdHlBZnRlckFsbHMgPSBbXVxuLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3Rlc3QtcnVubmVyLmpzXCIpLkFmdGVyQmVmb3JlRWFjaENhbGxiYWNrT2JqZWN0VHlwZVtdfSAqL1xuY29uc3QgZW1wdHlBZnRlckVhY2hlcyA9IFtdXG4vKiogQHR5cGUge2ltcG9ydChcIi4vdGVzdC1ydW5uZXIuanNcIikuQmVmb3JlQWZ0ZXJBbGxDYWxsYmFja09iamVjdFR5cGVbXX0gKi9cbmNvbnN0IGVtcHR5QmVmb3JlQWxscyA9IFtdXG4vKiogQHR5cGUge2ltcG9ydChcIi4vdGVzdC1ydW5uZXIuanNcIikuQWZ0ZXJCZWZvcmVFYWNoQ2FsbGJhY2tPYmplY3RUeXBlW119ICovXG5jb25zdCBlbXB0eUJlZm9yZUVhY2hlcyA9IFtdXG5jb25zdCBkZWZhdWx0VGVzdEFyZ3VtZW50cyA9IHtkYXRhYmFzZUNsZWFuaW5nOiB7dHJhbnNhY3Rpb246IHRydWV9fVxuXG5PYmplY3QuZnJlZXplKGVtcHR5QWZ0ZXJBbGxzKVxuT2JqZWN0LmZyZWV6ZShlbXB0eUFmdGVyRWFjaGVzKVxuT2JqZWN0LmZyZWV6ZShlbXB0eUJlZm9yZUFsbHMpXG5PYmplY3QuZnJlZXplKGVtcHR5QmVmb3JlRWFjaGVzKVxuT2JqZWN0LmZyZWV6ZShkZWZhdWx0VGVzdEFyZ3VtZW50cy5kYXRhYmFzZUNsZWFuaW5nKVxuT2JqZWN0LmZyZWV6ZShkZWZhdWx0VGVzdEFyZ3VtZW50cylcblxuY29uc3QgdGVzdHNQcm9qZWN0aW9uID0ge1xuICBnZXQgYWZ0ZXJBbGxzKCkgeyByZXR1cm4gZW1wdHlBZnRlckFsbHMgfSxcbiAgZ2V0IGFmdGVyRWFjaGVzKCkgeyByZXR1cm4gZW1wdHlBZnRlckVhY2hlcyB9LFxuICBnZXQgYXJncygpIHsgcmV0dXJuIGRlZmF1bHRUZXN0QXJndW1lbnRzIH0sXG4gIGdldCBiZWZvcmVBbGxzKCkgeyByZXR1cm4gZW1wdHlCZWZvcmVBbGxzIH0sXG4gIGdldCBiZWZvcmVFYWNoZXMoKSB7IHJldHVybiBlbXB0eUJlZm9yZUVhY2hlcyB9LFxuICBnZXQgZmlsZVBhdGgoKSB7IHJldHVybiB1bmRlZmluZWQgfSxcbiAgZ2V0IGxpbmUoKSB7IHJldHVybiB1bmRlZmluZWQgfSxcbiAgZ2V0IHN1YnMoKSB7XG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuL3Rlc3QtcnVubmVyLmpzXCIpLlRlc3RzQXJndW1lbnQ+fSAqL1xuICAgIGNvbnN0IHByb2plY3RlZFN1aXRlcyA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IHN1aXRlIG9mIGRlZmF1bHRUZXN0Q29udGV4dC5yZWdpc3RyeS5zdWl0ZXMpIHtcbiAgICAgIGlmIChzdWl0ZS5uYW1lID09PSBcIlwiKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGRTdWl0ZSBvZiBzdWl0ZS5zdWl0ZXMpIHByb2plY3RlZFN1aXRlc1tjaGlsZFN1aXRlLm5hbWVdID0gcHJvamVjdFN1aXRlKGNoaWxkU3VpdGUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9qZWN0ZWRTdWl0ZXNbc3VpdGUubmFtZV0gPSBwcm9qZWN0U3VpdGUoc3VpdGUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUocHJvamVjdGVkU3VpdGVzKVxuICB9LFxuICBnZXQgdGVzdHMoKSB7XG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuL3Rlc3QtcnVubmVyLmpzXCIpLlRlc3REYXRhPn0gKi9cbiAgICBjb25zdCBwcm9qZWN0ZWRUZXN0cyA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IHN1aXRlIG9mIGRlZmF1bHRUZXN0Q29udGV4dC5yZWdpc3RyeS5zdWl0ZXMpIHtcbiAgICAgIGlmIChzdWl0ZS5uYW1lICE9PSBcIlwiKSBjb250aW51ZVxuXG4gICAgICBPYmplY3QuYXNzaWduKHByb2plY3RlZFRlc3RzLCBwcm9qZWN0U3VpdGUoc3VpdGUpLnRlc3RzKVxuICAgIH1cblxuICAgIHJldHVybiBPYmplY3QuZnJlZXplKHByb2plY3RlZFRlc3RzKVxuICB9XG59XG4vKiogQHR5cGUge2ltcG9ydChcIi4vdGVzdC1ydW5uZXIuanNcIikuVGVzdHNBcmd1bWVudH0gKi9cbmNvbnN0IHRlc3RzID0gdGVzdHNQcm9qZWN0aW9uXG5PYmplY3QuZnJlZXplKHRlc3RzKVxuXG4vLyBNYWtlIHRoZSBjb21wYXRpYmlsaXR5IGZhY2FkZSBnbG9iYWwgc28gZXhpc3RpbmcgdGVzdCBmaWxlcyByZW1haW4gc291cmNlLWNvbXBhdGlibGUuXG5PYmplY3QuYXNzaWduKGdsb2JhbFRoaXMsIHtcbiAgYWZ0ZXJBbGwsXG4gIGFmdGVyRWFjaCxcbiAgYmVmb3JlQWxsLFxuICBiZWZvcmVFYWNoLFxuICBjb25maWd1cmVUZXN0cyxcbiAgZGVzY3JpYmUsXG4gIGV4cGVjdCxcbiAgZmRlc2NyaWJlLFxuICBmaXQsXG4gIGl0LFxuICB0ZXN0LFxuICB0ZXN0RXZlbnRzLFxuICB4ZGVzY3JpYmUsXG4gIHhpdCxcbiAgeHRlc3Rcbn0pXG5cbmV4cG9ydCB7XG4gIGFmdGVyQWxsLFxuICBhZnRlckVhY2gsXG4gIGJlZm9yZUFsbCxcbiAgYmVmb3JlRWFjaCxcbiAgY29uZmlndXJlVGVzdHMsXG4gIGRlc2NyaWJlLFxuICBleHBlY3QsXG4gIGZkZXNjcmliZSxcbiAgZml0LFxuICBpdCxcbiAgdGVzdCxcbiAgeGRlc2NyaWJlLFxuICB4aXQsXG4gIHh0ZXN0LFxuICBhcnJheUNvbnRhaW5pbmcsXG4gIG9iamVjdENvbnRhaW5pbmcsXG4gIHRlc3RDb25maWcsXG4gIHRlc3RFdmVudHMsXG4gIHRlc3RzLFxuICB3YWl0Rm9yRXZlbnRcbn1cbiJdfQ==
|
|
159
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0aW5nL3Rlc3QuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFDTCxRQUFRLEVBQ1IsU0FBUyxFQUNULGVBQWUsRUFDZixTQUFTLEVBQ1QsVUFBVSxFQUNWLGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1QsR0FBRyxFQUNILEVBQUUsRUFDRixnQkFBZ0IsRUFDaEIsSUFBSSxFQUNKLFlBQVksRUFDWixTQUFTLEVBQ1QsR0FBRyxFQUNILEtBQUssRUFDTixNQUFNLG9CQUFvQixDQUFBO0FBQzNCLE9BQU8sWUFBWSxNQUFNLDJCQUEyQixDQUFBO0FBRXBELDZGQUE2RjtBQUU3Rjs7Ozs7OztHQU9HO0FBRUgsb0RBQW9EO0FBQ3BELE1BQU0sVUFBVSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUE7QUFFckM7Ozs7R0FJRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsS0FBSztJQUM3QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUM3RixJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtRQUFFLE9BQU8sS0FBSyxDQUFBO0lBRTdELDREQUE0RDtJQUM1RCxNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUE7SUFFekIsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFBO0lB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QUc7SUFDSCxFQUFFO0lBQ0YsSUFBSTtJQUNKLFVBQVU7SUFDVixTQUFTO0lBQ1QsR0FBRztJQUNILEtBQUs7Q0FDTixDQUFDLENBQUE7QUFFRixPQUFPLEVBQ0wsUUFBUSxFQUNSLFNBQVMsRUFDVCxTQUFTLEVBQ1QsVUFBVSxFQUNWLGNBQWMsRUFDZCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxHQUFHLEVBQ0gsRUFBRSxFQUNGLElBQUksRUFDSixTQUFTLEVBQ1QsR0FBRyxFQUNILEtBQUssRUFDTCxlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLFVBQVUsRUFDVixVQUFVLEVBQ1YsS0FBSyxFQUNMLFlBQVksRUFDYixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7XG4gIGFmdGVyQWxsLFxuICBhZnRlckVhY2gsXG4gIGFycmF5Q29udGFpbmluZyxcbiAgYmVmb3JlQWxsLFxuICBiZWZvcmVFYWNoLFxuICBjb25maWd1cmVUZXN0cyxcbiAgZGVmYXVsdFRlc3RDb250ZXh0LFxuICBkZXNjcmliZSxcbiAgZXhwZWN0LFxuICBmZGVzY3JpYmUsXG4gIGZpdCxcbiAgaXQsXG4gIG9iamVjdENvbnRhaW5pbmcsXG4gIHRlc3QsXG4gIHdhaXRGb3JFdmVudCxcbiAgeGRlc2NyaWJlLFxuICB4aXQsXG4gIHh0ZXN0XG59IGZyb20gXCJAdmVsb2Npb3VzL3Rlc3RpbmdcIlxuaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tIFwiLi4vdXRpbHMvZXZlbnQtZW1pdHRlci5qc1wiXG5cbi8qKiBAdHlwZWRlZiB7KHR5cGVvZiBkZWZhdWx0VGVzdENvbnRleHQucmVnaXN0cnkuc3VpdGVzKVtudW1iZXJdfSBQYWNrYWdlU3VpdGVEZWNsYXJhdGlvbiAqL1xuXG4vKipcbiAqIFZlbG9jaW91c1Rlc3RDb25maWcgdHlwZS5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFZlbG9jaW91c1Rlc3RDb25maWdcbiAqIEBwcm9wZXJ0eSB7XCJmYWlsdXJlXCIgfCBcImxpdmVcIn0gY29uc29sZU91dHB1dCAtIENvbnNvbGUgb3V0cHV0IG1vZGUuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBleGNsdWRlVGFncyAtIFRhZ3MgZXhjbHVkZWQgYnkgZGVmYXVsdC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBkZWZhdWx0VGltZW91dFNlY29uZHMgLSBEZWZhdWx0IHRpbWVvdXQgaW4gc2Vjb25kcy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBmYWlsZWRDb25zb2xlT3V0cHV0TWF4TGluZXMgLSBNYXhpbXVtIGZhaWxlZCBjb25zb2xlIGxpbmVzIHRvIHByaW50IGlubGluZS5cbiAqL1xuXG4vKiogVmVsb2Npb3VzLW93bmVkIGF3YWl0ZWQgY29tcGF0aWJpbGl0eSBldmVudHMuICovXG5jb25zdCB0ZXN0RXZlbnRzID0gbmV3IEV2ZW50RW1pdHRlcigpXG5cbi8qKlxuICogRGV0YWNoZXMgYW5kIGZyZWV6ZXMgZGVjbGFyYXRpb24gbWV0YWRhdGEgZXhwb3NlZCBieSB0aGUgY29tcGF0aWJpbGl0eSB2aWV3LlxuICogQHBhcmFtIHtSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0gdmFsdWUgLSBQYWNrYWdlIGRlY2xhcmF0aW9uIHZhbHVlLlxuICogQHJldHVybnMge1JldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSAtIEltbXV0YWJsZSBkZXRhY2hlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gcmVhZE9ubHlTbmFwc2hvdCh2YWx1ZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiBPYmplY3QuZnJlZXplKHZhbHVlLm1hcCgoZW50cnkpID0+IHJlYWRPbmx5U25hcHNob3QoZW50cnkpKSlcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIHZhbHVlXG5cbiAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj59ICovXG4gIGNvbnN0IHByb2plY3RlZFZhbHVlID0ge31cblxuICBmb3IgKGNvbnN0IFtrZXksIGVudHJ5XSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSkpIHByb2plY3RlZFZhbHVlW2tleV0gPSByZWFkT25seVNuYXBzaG90KGVudHJ5KVxuXG4gIHJldHVybiBPYmplY3QuZnJlZXplKHByb2plY3RlZFZhbHVlKVxufVxuXG4vKipcbiAqIEJhY2t3YXJkLWNvbXBhdGlibGUgdmlldyBvZiB0aGUgcGFja2FnZSBjb25maWd1cmF0aW9uLlxuICogQHR5cGUge1ZlbG9jaW91c1Rlc3RDb25maWd9XG4gKi9cbmNvbnN0IHRlc3RDb25maWcgPSB7XG4gIGdldCBjb25zb2xlT3V0cHV0KCkgeyByZXR1cm4gZGVmYXVsdFRlc3RDb250ZXh0LmNvbmZpZy5jb25zb2xlT3V0cHV0IH0sXG4gIHNldCBjb25zb2xlT3V0cHV0KHZhbHVlKSB7IGRlZmF1bHRUZXN0Q29udGV4dC5jb25maWd1cmVUZXN0cyh7Y29uc29sZU91dHB1dDogdmFsdWV9KSB9LFxuICBnZXQgZXhjbHVkZVRhZ3MoKSB7IHJldHVybiBkZWZhdWx0VGVzdENvbnRleHQuY29uZmlnLmV4Y2x1ZGVUYWdzIH0sXG4gIHNldCBleGNsdWRlVGFncyh2YWx1ZSkgeyBkZWZhdWx0VGVzdENvbnRleHQuY29uZmlndXJlVGVzdHMoe2V4Y2x1ZGVUYWdzOiB2YWx1ZX0pIH0sXG4gIGdldCBkZWZhdWx0VGltZW91dFNlY29uZHMoKSB7IHJldHVybiBkZWZhdWx0VGVzdENvbnRleHQuY29uZmlnLmRlZmF1bHRUaW1lb3V0TXMgLyAxMDAwIH0sXG4gIHNldCBkZWZhdWx0VGltZW91dFNlY29uZHModmFsdWUpIHsgZGVmYXVsdFRlc3RDb250ZXh0LmNvbmZpZ3VyZVRlc3RzKHtkZWZhdWx0VGltZW91dFNlY29uZHM6IHZhbHVlfSkgfSxcbiAgZ2V0IGZhaWxlZENvbnNvbGVPdXRwdXRNYXhMaW5lcygpIHsgcmV0dXJuIGRlZmF1bHRUZXN0Q29udGV4dC5jb25maWcuZmFpbGVkQ29uc29sZU91dHB1dE1heExpbmVzIH0sXG4gIHNldCBmYWlsZWRDb25zb2xlT3V0cHV0TWF4TGluZXModmFsdWUpIHsgZGVmYXVsdFRlc3RDb250ZXh0LmNvbmZpZ3VyZVRlc3RzKHtmYWlsZWRDb25zb2xlT3V0cHV0TWF4TGluZXM6IHZhbHVlfSkgfVxufVxuXG4vKipcbiAqIFByb2plY3RzIG9uZSBwYWNrYWdlIHN1aXRlIGludG8gdGhlIGRlcHJlY2F0ZWQgbGVnYWN5IGluc3BlY3Rpb24gc2hhcGUuXG4gKiBUaGUgcmV0dXJuZWQgb2JqZWN0cyBhcmUgc25hcHNob3RzIGFuZCBuZXZlciBwYXJ0aWNpcGF0ZSBpbiBleGVjdXRpb24uXG4gKiBAcGFyYW0ge1BhY2thZ2VTdWl0ZURlY2xhcmF0aW9ufSBzdWl0ZSAtIFBhY2thZ2UgZGVjbGFyYXRpb24uXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi90ZXN0LXJ1bm5lci5qc1wiKS5UZXN0c0FyZ3VtZW50fSAtIFJlYWQtb25seSBjb21wYXRpYmlsaXR5IHNuYXBzaG90LlxuICovXG5mdW5jdGlvbiBwcm9qZWN0U3VpdGUoc3VpdGUpIHtcbiAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuL3Rlc3QtcnVubmVyLmpzXCIpLlRlc3REYXRhPn0gKi9cbiAgY29uc3QgcHJvamVjdGVkVGVzdHMgPSB7fVxuICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIGltcG9ydChcIi4vdGVzdC1ydW5uZXIuanNcIikuVGVzdHNBcmd1bWVudD59ICovXG4gIGNvbnN0IHByb2plY3RlZFN1aXRlcyA9IHt9XG5cbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBzdWl0ZS50ZXN0cykge1xuICAgIGNvbnN0IG11dGFibGVBcmdzID0gey4uLmRlY2xhcmF0aW9uLm9wdGlvbnN9XG5cbiAgICBpZiAobXV0YWJsZUFyZ3MucmV0cnkgPT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgbXV0YWJsZUFyZ3MucmV0cmllcyA9PT0gXCJudW1iZXJcIikgbXV0YWJsZUFyZ3MucmV0cnkgPSBtdXRhYmxlQXJncy5yZXRyaWVzXG4gICAgaWYgKG11dGFibGVBcmdzLnRpbWVvdXRTZWNvbmRzID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIG11dGFibGVBcmdzLnRpbWVvdXRNcyA9PT0gXCJudW1iZXJcIikgbXV0YWJsZUFyZ3MudGltZW91dFNlY29uZHMgPSBtdXRhYmxlQXJncy50aW1lb3V0TXMgLyAxMDAwXG4gICAgcHJvamVjdGVkVGVzdHNbZGVjbGFyYXRpb24ubmFtZV0gPSBPYmplY3QuZnJlZXplKHtcbiAgICAgIGFyZ3M6IHJlYWRPbmx5U25hcHNob3QobXV0YWJsZUFyZ3MpLFxuICAgICAgZmlsZVBhdGg6IGRlY2xhcmF0aW9uLmxvY2F0aW9uLmZpbGVQYXRoLFxuICAgICAgZnVuY3Rpb246IGRlY2xhcmF0aW9uLmNhbGxiYWNrLFxuICAgICAgbGluZTogZGVjbGFyYXRpb24ubG9jYXRpb24ubGluZVxuICAgIH0pXG4gIH1cblxuICBmb3IgKGNvbnN0IGNoaWxkIG9mIHN1aXRlLnN1aXRlcykgcHJvamVjdGVkU3VpdGVzW2NoaWxkLm5hbWVdID0gcHJvamVjdFN1aXRlKGNoaWxkKVxuXG4gIGNvbnN0IHByb2plY3Rpb24gPSB7XG4gICAgYWZ0ZXJBbGxzOiBPYmplY3QuZnJlZXplKHN1aXRlLmhvb2tzLmFmdGVyQWxsLm1hcCgoaG9vaykgPT4gT2JqZWN0LmZyZWV6ZSh7Y2FsbGJhY2s6IGhvb2suY2FsbGJhY2t9KSkpLFxuICAgIGFmdGVyRWFjaGVzOiBPYmplY3QuZnJlZXplKHN1aXRlLmhvb2tzLmFmdGVyRWFjaC5tYXAoKGhvb2spID0+IE9iamVjdC5mcmVlemUoe2NhbGxiYWNrOiBob29rLmNhbGxiYWNrfSkpKSxcbiAgICBhcmdzOiByZWFkT25seVNuYXBzaG90KHN1aXRlLm9wdGlvbnMpLFxuICAgIGJlZm9yZUFsbHM6IE9iamVjdC5mcmVlemUoc3VpdGUuaG9va3MuYmVmb3JlQWxsLm1hcCgoaG9vaykgPT4gT2JqZWN0LmZyZWV6ZSh7Y2FsbGJhY2s6IGhvb2suY2FsbGJhY2t9KSkpLFxuICAgIGJlZm9yZUVhY2hlczogT2JqZWN0LmZyZWV6ZShzdWl0ZS5ob29rcy5iZWZvcmVFYWNoLm1hcCgoaG9vaykgPT4gT2JqZWN0LmZyZWV6ZSh7Y2FsbGJhY2s6IGhvb2suY2FsbGJhY2t9KSkpLFxuICAgIGZpbGVQYXRoOiBzdWl0ZS5sb2NhdGlvbi5maWxlUGF0aCxcbiAgICBsaW5lOiBzdWl0ZS5sb2NhdGlvbi5saW5lLFxuICAgIHN1YnM6IE9iamVjdC5mcmVlemUocHJvamVjdGVkU3VpdGVzKSxcbiAgICB0ZXN0czogT2JqZWN0LmZyZWV6ZShwcm9qZWN0ZWRUZXN0cylcbiAgfVxuXG4gIC8vIE5hcnJvd3MgdGhlIGltbXV0YWJsZSBzbmFwc2hvdCB0byB0aGUgaGlzdG9yaWNhbCBpbnNwZWN0aW9uIGNvbnRyYWN0LlxuICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3Rlc3QtcnVubmVyLmpzXCIpLlRlc3RzQXJndW1lbnR9ICovIChPYmplY3QuZnJlZXplKHByb2plY3Rpb24pKVxufVxuXG4vKipcbiAqIERlcHJlY2F0ZWQgcmVhZC1vbmx5IGRlY2xhcmF0aW9uIHByb2plY3Rpb24uIFBhY2thZ2UgZGVjbGFyYXRpb25zIGluXG4gKiBkZWZhdWx0VGVzdENvbnRleHQgYXJlIHRoZSBzb2xlIGV4ZWN1dGlvbiBzb3VyY2UuXG4gKi9cbi8qKiBAdHlwZSB7aW1wb3J0KFwiLi90ZXN0LXJ1bm5lci5qc1wiKS5CZWZvcmVBZnRlckFsbENhbGxiYWNrT2JqZWN0VHlwZVtdfSAqL1xuY29uc3QgZW1wdHlBZnRlckFsbHMgPSBbXVxuLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3Rlc3QtcnVubmVyLmpzXCIpLkFmdGVyQmVmb3JlRWFjaENhbGxiYWNrT2JqZWN0VHlwZVtdfSAqL1xuY29uc3QgZW1wdHlBZnRlckVhY2hlcyA9IFtdXG4vKiogQHR5cGUge2ltcG9ydChcIi4vdGVzdC1ydW5uZXIuanNcIikuQmVmb3JlQWZ0ZXJBbGxDYWxsYmFja09iamVjdFR5cGVbXX0gKi9cbmNvbnN0IGVtcHR5QmVmb3JlQWxscyA9IFtdXG4vKiogQHR5cGUge2ltcG9ydChcIi4vdGVzdC1ydW5uZXIuanNcIikuQWZ0ZXJCZWZvcmVFYWNoQ2FsbGJhY2tPYmplY3RUeXBlW119ICovXG5jb25zdCBlbXB0eUJlZm9yZUVhY2hlcyA9IFtdXG5jb25zdCBkZWZhdWx0VGVzdEFyZ3VtZW50cyA9IHtkYXRhYmFzZUNsZWFuaW5nOiB7dHJhbnNhY3Rpb246IHRydWV9fVxuXG5PYmplY3QuZnJlZXplKGVtcHR5QWZ0ZXJBbGxzKVxuT2JqZWN0LmZyZWV6ZShlbXB0eUFmdGVyRWFjaGVzKVxuT2JqZWN0LmZyZWV6ZShlbXB0eUJlZm9yZUFsbHMpXG5PYmplY3QuZnJlZXplKGVtcHR5QmVmb3JlRWFjaGVzKVxuT2JqZWN0LmZyZWV6ZShkZWZhdWx0VGVzdEFyZ3VtZW50cy5kYXRhYmFzZUNsZWFuaW5nKVxuT2JqZWN0LmZyZWV6ZShkZWZhdWx0VGVzdEFyZ3VtZW50cylcblxuY29uc3QgdGVzdHNQcm9qZWN0aW9uID0ge1xuICBnZXQgYWZ0ZXJBbGxzKCkgeyByZXR1cm4gZW1wdHlBZnRlckFsbHMgfSxcbiAgZ2V0IGFmdGVyRWFjaGVzKCkgeyByZXR1cm4gZW1wdHlBZnRlckVhY2hlcyB9LFxuICBnZXQgYXJncygpIHsgcmV0dXJuIGRlZmF1bHRUZXN0QXJndW1lbnRzIH0sXG4gIGdldCBiZWZvcmVBbGxzKCkgeyByZXR1cm4gZW1wdHlCZWZvcmVBbGxzIH0sXG4gIGdldCBiZWZvcmVFYWNoZXMoKSB7IHJldHVybiBlbXB0eUJlZm9yZUVhY2hlcyB9LFxuICBnZXQgZmlsZVBhdGgoKSB7IHJldHVybiB1bmRlZmluZWQgfSxcbiAgZ2V0IGxpbmUoKSB7IHJldHVybiB1bmRlZmluZWQgfSxcbiAgZ2V0IHN1YnMoKSB7XG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuL3Rlc3QtcnVubmVyLmpzXCIpLlRlc3RzQXJndW1lbnQ+fSAqL1xuICAgIGNvbnN0IHByb2plY3RlZFN1aXRlcyA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IHN1aXRlIG9mIGRlZmF1bHRUZXN0Q29udGV4dC5yZWdpc3RyeS5zdWl0ZXMpIHtcbiAgICAgIGlmIChzdWl0ZS5uYW1lID09PSBcIlwiKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGRTdWl0ZSBvZiBzdWl0ZS5zdWl0ZXMpIHByb2plY3RlZFN1aXRlc1tjaGlsZFN1aXRlLm5hbWVdID0gcHJvamVjdFN1aXRlKGNoaWxkU3VpdGUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9qZWN0ZWRTdWl0ZXNbc3VpdGUubmFtZV0gPSBwcm9qZWN0U3VpdGUoc3VpdGUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUocHJvamVjdGVkU3VpdGVzKVxuICB9LFxuICBnZXQgdGVzdHMoKSB7XG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuL3Rlc3QtcnVubmVyLmpzXCIpLlRlc3REYXRhPn0gKi9cbiAgICBjb25zdCBwcm9qZWN0ZWRUZXN0cyA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IHN1aXRlIG9mIGRlZmF1bHRUZXN0Q29udGV4dC5yZWdpc3RyeS5zdWl0ZXMpIHtcbiAgICAgIGlmIChzdWl0ZS5uYW1lICE9PSBcIlwiKSBjb250aW51ZVxuXG4gICAgICBPYmplY3QuYXNzaWduKHByb2plY3RlZFRlc3RzLCBwcm9qZWN0U3VpdGUoc3VpdGUpLnRlc3RzKVxuICAgIH1cblxuICAgIHJldHVybiBPYmplY3QuZnJlZXplKHByb2plY3RlZFRlc3RzKVxuICB9XG59XG4vKiogQHR5cGUge2ltcG9ydChcIi4vdGVzdC1ydW5uZXIuanNcIikuVGVzdHNBcmd1bWVudH0gKi9cbmNvbnN0IHRlc3RzID0gdGVzdHNQcm9qZWN0aW9uXG5PYmplY3QuZnJlZXplKHRlc3RzKVxuXG4vLyBNYWtlIHRoZSBjb21wYXRpYmlsaXR5IGZhY2FkZSBnbG9iYWwgc28gZXhpc3RpbmcgdGVzdCBmaWxlcyByZW1haW4gc291cmNlLWNvbXBhdGlibGUuXG5PYmplY3QuYXNzaWduKGdsb2JhbFRoaXMsIHtcbiAgYWZ0ZXJBbGwsXG4gIGFmdGVyRWFjaCxcbiAgYmVmb3JlQWxsLFxuICBiZWZvcmVFYWNoLFxuICBjb25maWd1cmVUZXN0cyxcbiAgZGVzY3JpYmUsXG4gIGV4cGVjdCxcbiAgZmRlc2NyaWJlLFxuICBmaXQsXG4gIGl0LFxuICB0ZXN0LFxuICB0ZXN0RXZlbnRzLFxuICB4ZGVzY3JpYmUsXG4gIHhpdCxcbiAgeHRlc3Rcbn0pXG5cbmV4cG9ydCB7XG4gIGFmdGVyQWxsLFxuICBhZnRlckVhY2gsXG4gIGJlZm9yZUFsbCxcbiAgYmVmb3JlRWFjaCxcbiAgY29uZmlndXJlVGVzdHMsXG4gIGRlc2NyaWJlLFxuICBleHBlY3QsXG4gIGZkZXNjcmliZSxcbiAgZml0LFxuICBpdCxcbiAgdGVzdCxcbiAgeGRlc2NyaWJlLFxuICB4aXQsXG4gIHh0ZXN0LFxuICBhcnJheUNvbnRhaW5pbmcsXG4gIG9iamVjdENvbnRhaW5pbmcsXG4gIHRlc3RDb25maWcsXG4gIHRlc3RFdmVudHMsXG4gIHRlc3RzLFxuICB3YWl0Rm9yRXZlbnRcbn1cbiJdfQ==
|
|
@@ -1,246 +1,5 @@
|
|
|
1
1
|
// @ts-check
|
|
2
2
|
|
|
3
|
-
import {anythingDifferent} from "set-state-compare/build/diff-utils.js"
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Runs object containing.
|
|
7
|
-
* @param {ReturnType<typeof JSON.parse>} value - Value.
|
|
8
|
-
* @returns {{__velociousMatcher: string, value: ReturnType<typeof JSON.parse>}} - Matcher wrapper.
|
|
9
|
-
*/
|
|
10
|
-
function objectContaining(value) {
|
|
11
|
-
if (value === null || typeof value !== "object") {
|
|
12
|
-
throw new Error(`Expected object but got ${typeof value}`)
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
return {
|
|
16
|
-
__velociousMatcher: "objectContaining",
|
|
17
|
-
value
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Runs array containing.
|
|
23
|
-
* @param {ReturnType<typeof JSON.parse>} value - Value.
|
|
24
|
-
* @returns {{__velociousMatcher: string, value: ReturnType<typeof JSON.parse>}} - Matcher wrapper.
|
|
25
|
-
*/
|
|
26
|
-
function arrayContaining(value) {
|
|
27
|
-
if (!Array.isArray(value)) {
|
|
28
|
-
throw new Error(`Expected array but got ${typeof value}`)
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
return {
|
|
32
|
-
__velociousMatcher: "arrayContaining",
|
|
33
|
-
value
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Runs is object like.
|
|
39
|
-
* @param {ReturnType<typeof JSON.parse>} value - Value.
|
|
40
|
-
* @returns {boolean} - Whether object-like.
|
|
41
|
-
*/
|
|
42
|
-
function isObjectLike(value) {
|
|
43
|
-
return value !== null && typeof value === "object"
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* Runs is array containing.
|
|
48
|
-
* @param {ReturnType<typeof JSON.parse>} value - Value.
|
|
49
|
-
* @returns {boolean} - Whether arrayContaining matcher.
|
|
50
|
-
*/
|
|
51
|
-
function isArrayContaining(value) {
|
|
52
|
-
return !!value && typeof value === "object" && (/** @type {ReturnType<typeof JSON.parse>} */ (value)).__velociousMatcher === "arrayContaining"
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* Runs is object containing.
|
|
57
|
-
* @param {ReturnType<typeof JSON.parse>} value - Value.
|
|
58
|
-
* @returns {boolean} - Whether objectContaining matcher.
|
|
59
|
-
*/
|
|
60
|
-
function isObjectContaining(value) {
|
|
61
|
-
return !!value && typeof value === "object" && (/** @type {ReturnType<typeof JSON.parse>} */ (value)).__velociousMatcher === "objectContaining"
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* Runs is plain object.
|
|
66
|
-
* @param {ReturnType<typeof JSON.parse>} value - Value.
|
|
67
|
-
* @returns {boolean} - Whether plain object.
|
|
68
|
-
*/
|
|
69
|
-
function isPlainObject(value) {
|
|
70
|
-
if (!value || typeof value !== "object") return false
|
|
71
|
-
|
|
72
|
-
const prototype = Object.getPrototypeOf(value)
|
|
73
|
-
|
|
74
|
-
return prototype === Object.prototype || prototype === null
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Runs values equal.
|
|
79
|
-
* @param {ReturnType<typeof JSON.parse>} actual - Actual value.
|
|
80
|
-
* @param {ReturnType<typeof JSON.parse>} expected - Expected value.
|
|
81
|
-
* @returns {boolean} - Whether values are equal.
|
|
82
|
-
*/
|
|
83
|
-
function valuesEqual(actual, expected) {
|
|
84
|
-
if (actual instanceof Date && expected instanceof Date) {
|
|
85
|
-
return actual.getTime() === expected.getTime()
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
if (actual instanceof RegExp && expected instanceof RegExp) {
|
|
89
|
-
return actual.source === expected.source && actual.flags === expected.flags
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
return Object.is(actual, expected)
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* Runs collect match differences.
|
|
97
|
-
* @param {ReturnType<typeof JSON.parse>} actual - Actual value.
|
|
98
|
-
* @param {ReturnType<typeof JSON.parse>} expected - Expected value.
|
|
99
|
-
* @param {string} path - Path.
|
|
100
|
-
* @param {Record<string, Array<ReturnType<typeof JSON.parse>>>} differences - Differences.
|
|
101
|
-
* @returns {void} - No return value.
|
|
102
|
-
*/
|
|
103
|
-
function collectMatchDifferences(actual, expected, path, differences) {
|
|
104
|
-
if (isObjectContaining(expected)) {
|
|
105
|
-
collectMatchDifferences(actual, /** @type {ReturnType<typeof JSON.parse>} */ (expected).value, path, differences)
|
|
106
|
-
return
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
if (isArrayContaining(expected)) {
|
|
110
|
-
const {matches} = matchArrayContaining(actual, /** @type {Array<ReturnType<typeof JSON.parse>>} */ (/** @type {ReturnType<typeof JSON.parse>} */ (expected).value))
|
|
111
|
-
|
|
112
|
-
if (!matches) {
|
|
113
|
-
differences[path || "$"] = [expected, actual]
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
return
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
if (Array.isArray(expected)) {
|
|
120
|
-
if (!Array.isArray(actual)) {
|
|
121
|
-
differences[path || "$"] = [expected, actual]
|
|
122
|
-
return
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
for (let i = 0; i < expected.length; i++) {
|
|
126
|
-
const nextPath = `${path}[${i}]`
|
|
127
|
-
collectMatchDifferences(actual[i], expected[i], nextPath, differences)
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
return
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
if (isPlainObject(expected)) {
|
|
134
|
-
if (!isObjectLike(actual)) {
|
|
135
|
-
differences[path || "$"] = [expected, actual]
|
|
136
|
-
return
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
const expectedObject = /** @type {Record<string, ReturnType<typeof JSON.parse>>} */ (expected)
|
|
140
|
-
const actualObject = /** @type {Record<string, ReturnType<typeof JSON.parse>>} */ (actual)
|
|
141
|
-
|
|
142
|
-
for (const key of Object.keys(expectedObject)) {
|
|
143
|
-
const nextPath = path ? `${path}.${key}` : key
|
|
144
|
-
|
|
145
|
-
if (!Object.prototype.hasOwnProperty.call(actualObject, key)) {
|
|
146
|
-
differences[nextPath] = [expectedObject[key], undefined]
|
|
147
|
-
continue
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
collectMatchDifferences(actualObject[key], expectedObject[key], nextPath, differences)
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
return
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
if (!valuesEqual(actual, expected)) {
|
|
157
|
-
differences[path || "$"] = [expected, actual]
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
/**
|
|
162
|
-
* Runs match object.
|
|
163
|
-
* @param {ReturnType<typeof JSON.parse>} actual - Actual value.
|
|
164
|
-
* @param {Record<string, ReturnType<typeof JSON.parse>> | Array<ReturnType<typeof JSON.parse>>} expected - Expected value.
|
|
165
|
-
* @returns {{matches: boolean, differences: Record<string, Array<ReturnType<typeof JSON.parse>>>}} - Match result.
|
|
166
|
-
*/
|
|
167
|
-
function matchObject(actual, expected) {
|
|
168
|
-
/**
|
|
169
|
-
* Differences.
|
|
170
|
-
* @type {Record<string, Array<ReturnType<typeof JSON.parse>>>} */
|
|
171
|
-
const differences = {}
|
|
172
|
-
|
|
173
|
-
collectMatchDifferences(actual, expected, "", differences)
|
|
174
|
-
|
|
175
|
-
return {
|
|
176
|
-
matches: Object.keys(differences).length === 0,
|
|
177
|
-
differences
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
/**
|
|
182
|
-
* Runs match array containing.
|
|
183
|
-
* @param {ReturnType<typeof JSON.parse>} actual - Actual value.
|
|
184
|
-
* @param {Array<ReturnType<typeof JSON.parse>>} expected - Expected values.
|
|
185
|
-
* @returns {{matches: boolean, differences: Record<string, Array<ReturnType<typeof JSON.parse>>>}} - Match result.
|
|
186
|
-
*/
|
|
187
|
-
function matchArrayContaining(actual, expected) {
|
|
188
|
-
/**
|
|
189
|
-
* Differences.
|
|
190
|
-
* @type {Record<string, Array<ReturnType<typeof JSON.parse>>>} */
|
|
191
|
-
const differences = {}
|
|
192
|
-
|
|
193
|
-
if (!Array.isArray(actual)) {
|
|
194
|
-
differences["$"] = [expected, actual]
|
|
195
|
-
return {matches: false, differences}
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
const usedIndexes = new Set()
|
|
199
|
-
|
|
200
|
-
for (const expectedItem of expected) {
|
|
201
|
-
let matchedIndex = -1
|
|
202
|
-
|
|
203
|
-
for (let i = 0; i < actual.length; i++) {
|
|
204
|
-
if (usedIndexes.has(i)) continue
|
|
205
|
-
|
|
206
|
-
if (isObjectContaining(expectedItem)) {
|
|
207
|
-
const {matches} = matchObject(actual[i], /** @type {ReturnType<typeof JSON.parse>} */ (expectedItem).value)
|
|
208
|
-
if (matches) {
|
|
209
|
-
matchedIndex = i
|
|
210
|
-
break
|
|
211
|
-
}
|
|
212
|
-
continue
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
if (isArrayContaining(expectedItem)) {
|
|
216
|
-
const {matches} = matchArrayContaining(actual[i], /** @type {ReturnType<typeof JSON.parse>} */ (expectedItem).value)
|
|
217
|
-
if (matches) {
|
|
218
|
-
matchedIndex = i
|
|
219
|
-
break
|
|
220
|
-
}
|
|
221
|
-
continue
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
if (!anythingDifferent(actual[i], expectedItem)) {
|
|
225
|
-
matchedIndex = i
|
|
226
|
-
break
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
if (matchedIndex >= 0) {
|
|
231
|
-
usedIndexes.add(matchedIndex)
|
|
232
|
-
} else {
|
|
233
|
-
differences["$"] = [expected, actual]
|
|
234
|
-
break
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
return {
|
|
239
|
-
matches: Object.keys(differences).length === 0,
|
|
240
|
-
differences
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
|
|
244
3
|
export {
|
|
245
4
|
arrayContaining,
|
|
246
5
|
isArrayContaining,
|
|
@@ -248,4 +7,4 @@ export {
|
|
|
248
7
|
matchArrayContaining,
|
|
249
8
|
matchObject,
|
|
250
9
|
objectContaining
|
|
251
|
-
}
|
|
10
|
+
} from "@velocious/testing"
|