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.
@@ -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;AAE3B,OAAO,MAAM,MAAM,aAAa,CAAA;AAChC,OAAO,EAAC,eAAe,EAAE,gBAAgB,EAAC,MAAM,mBAAmB,CAAA;AAE/D,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;;;;GAIG;AACH,iBAAS,MAAM,CAAC,GAAG,EAHR,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAGpB,GAFN,MAAM,CAIlB;kBAFQ,MAAM;;;;AAOf,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
+ {"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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0aW5nL3Rlc3QuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFDTCxRQUFRLEVBQ1IsU0FBUyxFQUNULFNBQVMsRUFDVCxVQUFVLEVBQ1YsY0FBYyxFQUNkLGtCQUFrQixFQUNsQixRQUFRLEVBQ1IsU0FBUyxFQUNULEdBQUcsRUFDSCxFQUFFLEVBQ0YsSUFBSSxFQUNKLFlBQVksRUFDWixTQUFTLEVBQ1QsR0FBRyxFQUNILEtBQUssRUFDTixNQUFNLG9CQUFvQixDQUFBO0FBQzNCLE9BQU8sWUFBWSxNQUFNLDJCQUEyQixDQUFBO0FBQ3BELE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQTtBQUNoQyxPQUFPLEVBQUMsZUFBZSxFQUFFLGdCQUFnQixFQUFDLE1BQU0sbUJBQW1CLENBQUE7QUFFbkUsNkZBQTZGO0FBRTdGOzs7Ozs7O0dBT0c7QUFFSDs7OztHQUlHO0FBQ0gsU0FBUyxNQUFNLENBQUMsR0FBRztJQUNqQixPQUFPLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBQ3hCLENBQUM7QUFFRCxNQUFNLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUE7QUFDMUMsTUFBTSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUE7QUFFeEMsb0RBQW9EO0FBQ3BELE1BQU0sVUFBVSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUE7QUFFckM7Ozs7R0FJRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsS0FBSztJQUM3QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUM3RixJQUFJLEtBQUssS0FBSyxJQUFJLElBQUks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Q0QsdURBQXVEO0FBQ3ZELE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQTtBQUM3QixNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBRXBCLHdGQUF3RjtBQUN4RixNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRTtJQUN4QixRQUFRO0lBQ1IsU0FBUztJQUNULFNBQVM7SUFDVCxVQUFVO0lBQ1YsY0FBYztJQUNkLFFBQVE7SUFDUixNQUFNO0lBQ04sU0FBUztJQUNULEdBQUc7SUFDSCxFQUFFO0lBQ0YsSUFBSTtJQUNKLFVBQVU7SUFDVixTQUFTO0lBQ1QsR0FBRztJQUNILEtBQUs7Q0FDTixDQUFDLENBQUE7QUFFRixPQUFPLEVBQ0wsUUFBUSxFQUNSLFNBQVMsRUFDVCxTQUFTLEVBQ1QsVUFBVSxFQUNWLGNBQWMsRUFDZCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxHQUFHLEVBQ0gsRUFBRSxFQUNGLElBQUksRUFDSixTQUFTLEVBQ1QsR0FBRyxFQUNILEtBQUssRUFDTCxlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLFVBQVUsRUFDVixVQUFVLEVBQ1YsS0FBSyxFQUNMLFlBQVksRUFDYixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7XG4gIGFmdGVyQWxsLFxuICBhZnRlckVhY2gsXG4gIGJlZm9yZUFsbCxcbiAgYmVmb3JlRWFjaCxcbiAgY29uZmlndXJlVGVzdHMsXG4gIGRlZmF1bHRUZXN0Q29udGV4dCxcbiAgZGVzY3JpYmUsXG4gIGZkZXNjcmliZSxcbiAgZml0LFxuICBpdCxcbiAgdGVzdCxcbiAgd2FpdEZvckV2ZW50LFxuICB4ZGVzY3JpYmUsXG4gIHhpdCxcbiAgeHRlc3Rcbn0gZnJvbSBcIkB2ZWxvY2lvdXMvdGVzdGluZ1wiXG5pbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gXCIuLi91dGlscy9ldmVudC1lbWl0dGVyLmpzXCJcbmltcG9ydCBFeHBlY3QgZnJvbSBcIi4vZXhwZWN0LmpzXCJcbmltcG9ydCB7YXJyYXlDb250YWluaW5nLCBvYmplY3RDb250YWluaW5nfSBmcm9tIFwiLi9leHBlY3QtdXRpbHMuanNcIlxuXG4vKiogQHR5cGVkZWYgeyh0eXBlb2YgZGVmYXVsdFRlc3RDb250ZXh0LnJlZ2lzdHJ5LnN1aXRlcylbbnVtYmVyXX0gUGFja2FnZVN1aXRlRGVjbGFyYXRpb24gKi9cblxuLyoqXG4gKiBWZWxvY2lvdXNUZXN0Q29uZmlnIHR5cGUuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBWZWxvY2lvdXNUZXN0Q29uZmlnXG4gKiBAcHJvcGVydHkge1wiZmFpbHVyZVwiIHwgXCJsaXZlXCJ9IGNvbnNvbGVPdXRwdXQgLSBDb25zb2xlIG91dHB1dCBtb2RlLlxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gZXhjbHVkZVRhZ3MgLSBUYWdzIGV4Y2x1ZGVkIGJ5IGRlZmF1bHQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gZGVmYXVsdFRpbWVvdXRTZWNvbmRzIC0gRGVmYXVsdCB0aW1lb3V0IGluIHNlY29uZHMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gZmFpbGVkQ29uc29sZU91dHB1dE1heExpbmVzIC0gTWF4aW11bSBmYWlsZWQgY29uc29sZSBsaW5lcyB0byBwcmludCBpbmxpbmUuXG4gKi9cblxuLyoqXG4gKiBSdW5zIGV4cGVjdC5cbiAqIEBwYXJhbSB7UmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59IGFyZyAtIEFyZy5cbiAqIEByZXR1cm5zIHtFeHBlY3R9IC0gVGhlIGV4cGVjdC5cbiAqL1xuZnVuY3Rpb24gZXhwZWN0KGFyZykge1xuICByZXR1cm4gbmV3IEV4cGVjdChhcmcpXG59XG5cbmV4cGVjdC5vYmplY3RDb250YWluaW5nID0gb2JqZWN0Q29udGFpbmluZ1xuZXhwZWN0LmFycmF5Q29udGFpbmluZyA9IGFycmF5Q29udGFpbmluZ1xuXG4vKiogVmVsb2Npb3VzLW93bmVkIGF3YWl0ZWQgY29tcGF0aWJpbGl0eSBldmVudHMuICovXG5jb25zdCB0ZXN0RXZlbnRzID0gbmV3IEV2ZW50RW1pdHRlcigpXG5cbi8qKlxuICogRGV0YWNoZXMgYW5kIGZyZWV6ZXMgZGVjbGFyYXRpb24gbWV0YWRhdGEgZXhwb3NlZCBieSB0aGUgY29tcGF0aWJpbGl0eSB2aWV3LlxuICogQHBhcmFtIHtSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0gdmFsdWUgLSBQYWNrYWdlIGRlY2xhcmF0aW9uIHZhbHVlLlxuICogQHJldHVybnMge1JldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+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"