vitest 0.0.129 → 0.0.133

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 (40) hide show
  1. package/dist/_commonjsHelpers-c9e3b764.js +1 -0
  2. package/dist/cli.js +10 -9
  3. package/dist/constants-0211a379.js +34 -0
  4. package/dist/diff-18d4a7eb.js +4750 -0
  5. package/dist/entry.js +94 -33
  6. package/dist/externalize-2f63779d.js +1 -0
  7. package/dist/global-5d1fb309.js +21 -0
  8. package/dist/index-26cb6e63.js +1644 -0
  9. package/dist/index-354a6abd.js +40 -0
  10. package/dist/index-4cd25949.js +782 -0
  11. package/dist/index-720a83c6.js +396 -0
  12. package/dist/index-7975be53.js +331 -0
  13. package/dist/index-7f7acd60.js +8548 -0
  14. package/dist/index-e909c175.js +63 -0
  15. package/dist/index-fa899e66.js +5708 -0
  16. package/dist/index.d.ts +142 -27
  17. package/dist/index.js +4 -3
  18. package/dist/jest-mock-30625866.js +1 -0
  19. package/dist/magic-string.es-94000aea.js +1361 -0
  20. package/dist/node.d.ts +111 -4
  21. package/dist/node.js +9 -8
  22. package/dist/rpc-8c7cc374.js +1 -0
  23. package/dist/setup-5aaf533e.js +4365 -0
  24. package/dist/vi-aec007e7.js +3461 -0
  25. package/dist/worker.js +11 -7
  26. package/package.json +9 -9
  27. package/dist/constants-868b9a2e.js +0 -33
  28. package/dist/diff-be830986.js +0 -4751
  29. package/dist/global-0254dd68.js +0 -20
  30. package/dist/index-06712022.js +0 -39
  31. package/dist/index-42a3a132.js +0 -366
  32. package/dist/index-42d44ee5.js +0 -1643
  33. package/dist/index-93dcb598.js +0 -5707
  34. package/dist/index-a73f33e0.js +0 -62
  35. package/dist/index-cb02ee01.js +0 -330
  36. package/dist/index-cce5de77.js +0 -781
  37. package/dist/index-d30b5ed0.js +0 -8579
  38. package/dist/magic-string.es-98a8bfa0.js +0 -1360
  39. package/dist/setup-6e09a65a.js +0 -4364
  40. package/dist/vi-fe26a646.js +0 -3460
package/dist/index.d.ts CHANGED
@@ -1,12 +1,98 @@
1
- import { OptionsReceived, Plugin } from 'pretty-format';
2
- import { Formatter } from 'picocolors/types';
3
1
  import { ViteDevServer, CommonServerOptions } from 'vite';
4
- import { RawSourceMap } from 'source-map-js';
5
2
  import { MessagePort } from 'worker_threads';
6
3
  import { SpyImpl } from 'tinyspy';
7
4
  export { Spy, SpyFn } from 'tinyspy';
8
5
  export { assert, default as chai, should } from 'chai';
9
6
 
7
+ /**
8
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
9
+ *
10
+ * This source code is licensed under the MIT license found in the
11
+ * LICENSE file in the root directory of this source tree.
12
+ */
13
+ declare type Colors = {
14
+ comment: {
15
+ close: string;
16
+ open: string;
17
+ };
18
+ content: {
19
+ close: string;
20
+ open: string;
21
+ };
22
+ prop: {
23
+ close: string;
24
+ open: string;
25
+ };
26
+ tag: {
27
+ close: string;
28
+ open: string;
29
+ };
30
+ value: {
31
+ close: string;
32
+ open: string;
33
+ };
34
+ };
35
+ declare type Indent = (arg0: string) => string;
36
+ declare type Refs = Array<unknown>;
37
+ declare type Print = (arg0: unknown) => string;
38
+ declare type ThemeReceived = {
39
+ comment?: string;
40
+ content?: string;
41
+ prop?: string;
42
+ tag?: string;
43
+ value?: string;
44
+ };
45
+ declare type CompareKeys = ((a: string, b: string) => number) | undefined;
46
+ interface PrettyFormatOptions {
47
+ callToJSON?: boolean;
48
+ compareKeys?: CompareKeys;
49
+ escapeRegex?: boolean;
50
+ escapeString?: boolean;
51
+ highlight?: boolean;
52
+ indent?: number;
53
+ maxDepth?: number;
54
+ min?: boolean;
55
+ plugins?: Plugins;
56
+ printBasicPrototype?: boolean;
57
+ printFunctionName?: boolean;
58
+ theme?: ThemeReceived;
59
+ }
60
+ declare type OptionsReceived = PrettyFormatOptions;
61
+ declare type Config = {
62
+ callToJSON: boolean;
63
+ compareKeys: CompareKeys;
64
+ colors: Colors;
65
+ escapeRegex: boolean;
66
+ escapeString: boolean;
67
+ indent: string;
68
+ maxDepth: number;
69
+ min: boolean;
70
+ plugins: Plugins;
71
+ printBasicPrototype: boolean;
72
+ printFunctionName: boolean;
73
+ spacingInner: string;
74
+ spacingOuter: string;
75
+ };
76
+ declare type Printer = (val: unknown, config: Config, indentation: string, depth: number, refs: Refs, hasCalledToJSON?: boolean) => string;
77
+ declare type Test$1 = (arg0: any) => boolean;
78
+ declare type NewPlugin = {
79
+ serialize: (val: any, config: Config, indentation: string, depth: number, refs: Refs, printer: Printer) => string;
80
+ test: Test$1;
81
+ };
82
+ declare type PluginOptions = {
83
+ edgeSpacing: string;
84
+ min: boolean;
85
+ spacing: string;
86
+ };
87
+ declare type OldPlugin = {
88
+ print: (val: unknown, print: Print, indent: Indent, options: PluginOptions, colors: Colors) => string;
89
+ test: Test$1;
90
+ };
91
+ declare type Plugin = NewPlugin | OldPlugin;
92
+ declare type Plugins = Array<Plugin>;
93
+
94
+ declare type Formatter = (input: string | number | null | undefined) => string;
95
+
10
96
  declare const EXPECTED_COLOR: Formatter;
11
97
  declare const RECEIVED_COLOR: Formatter;
12
98
  declare const INVERTED_COLOR: Formatter;
@@ -101,6 +187,8 @@ declare type MatcherState = {
101
187
  declare type SyncExpectationResult = {
102
188
  pass: boolean;
103
189
  message: () => string;
190
+ actual?: any;
191
+ expected?: any;
104
192
  };
105
193
  declare type AsyncExpectationResult = Promise<SyncExpectationResult>;
106
194
  declare type ExpectationResult = SyncExpectationResult | AsyncExpectationResult;
@@ -162,6 +250,19 @@ declare class StringMatching extends AsymmetricMatcher<RegExp> {
162
250
  getExpectedType(): string;
163
251
  }
164
252
 
253
+ interface StartOfSourceMap {
254
+ file?: string;
255
+ sourceRoot?: string;
256
+ }
257
+
258
+ interface RawSourceMap extends StartOfSourceMap {
259
+ version: string;
260
+ sources: string[];
261
+ names: string[];
262
+ sourcesContent?: string[];
263
+ mappings: string;
264
+ }
265
+
165
266
  declare class SnapshotManager {
166
267
  config: ResolvedConfig;
167
268
  summary: SnapshotSummary;
@@ -284,10 +385,18 @@ declare class VerboseReporter extends DefaultReporter {
284
385
  constructor();
285
386
  }
286
387
 
388
+ declare class TapReporter implements Reporter {
389
+ private ctx;
390
+ onInit(ctx: Vitest): void;
391
+ logTasks(tasks: Task[], currentIdent: string): void;
392
+ onFinished(files?: File[]): Promise<void>;
393
+ }
394
+
287
395
  declare const ReportersMap: {
288
396
  default: typeof DefaultReporter;
289
397
  verbose: typeof VerboseReporter;
290
398
  dot: typeof DotReporter;
399
+ tap: typeof TapReporter;
291
400
  };
292
401
  declare type BuiltinReporters = keyof typeof ReportersMap;
293
402
 
@@ -710,6 +819,7 @@ interface UserConfig extends InlineConfig {
710
819
  related?: string[] | string;
711
820
  }
712
821
  interface ResolvedConfig extends Omit<Required<UserConfig>, 'config' | 'filters' | 'coverage' | 'testNamePattern' | 'related' | 'api'> {
822
+ base?: string;
713
823
  config?: string;
714
824
  filters?: string[];
715
825
  testNamePattern?: RegExp;
@@ -770,6 +880,16 @@ interface JestMockCompatContext<T, Y> {
770
880
  invocationCallOrder: number[];
771
881
  results: MockResult<T>[];
772
882
  }
883
+ declare type Procedure = (...args: any[]) => any;
884
+ declare type Methods<T> = {
885
+ [K in keyof T]: T[K] extends Procedure ? K : never;
886
+ }[keyof T] & string;
887
+ declare type Properties<T> = {
888
+ [K in keyof T]: T[K] extends Procedure ? never : K;
889
+ }[keyof T] & string;
890
+ declare type Classes<T> = {
891
+ [K in keyof T]: T[K] extends new (...args: any[]) => any ? K : never;
892
+ }[keyof T] & string;
773
893
  interface JestMockCompat<TArgs extends any[] = any[], TReturns = any> {
774
894
  getMockName(): string;
775
895
  mockName(n: string): this;
@@ -791,41 +911,34 @@ interface JestMockCompat<TArgs extends any[] = any[], TReturns = any> {
791
911
  interface JestMockCompatFn<TArgs extends any[] = any, TReturns = any> extends JestMockCompat<TArgs, TReturns> {
792
912
  (...args: TArgs): TReturns;
793
913
  }
794
- declare type MockableFunction = (...args: Array<any>) => any;
795
- declare type MethodKeysOf<T> = {
796
- [K in keyof T]: T[K] extends MockableFunction ? K : never;
797
- }[keyof T];
798
- declare type PropertyKeysOf<T> = {
799
- [K in keyof T]: T[K] extends MockableFunction ? never : K;
800
- }[keyof T];
801
- declare type ArgumentsOf<T> = T extends (...args: infer A) => any ? A : never;
802
- declare type ConstructorArgumentsOf<T> = T extends new (...args: infer A) => any ? A : never;
803
- declare type MaybeMockedConstructor<T> = T extends new (...args: Array<any>) => infer R ? JestMockCompatFn<ConstructorArgumentsOf<T>, R> : T;
804
- declare type MockedFunction<T extends MockableFunction> = MockWithArgs<T> & {
914
+ declare type MaybeMockedConstructor<T> = T extends new (...args: Array<any>) => infer R ? JestMockCompatFn<ConstructorParameters<T>, R> : T;
915
+ declare type MockedFunction<T extends Procedure> = MockWithArgs<T> & {
805
916
  [K in keyof T]: T[K];
806
917
  };
807
- declare type MockedFunctionDeep<T extends MockableFunction> = MockWithArgs<T> & MockedObjectDeep<T>;
918
+ declare type MockedFunctionDeep<T extends Procedure> = MockWithArgs<T> & MockedObjectDeep<T>;
808
919
  declare type MockedObject<T> = MaybeMockedConstructor<T> & {
809
- [K in MethodKeysOf<T>]: T[K] extends MockableFunction ? MockedFunction<T[K]> : T[K];
920
+ [K in Methods<T>]: T[K] extends Procedure ? MockedFunction<T[K]> : T[K];
810
921
  } & {
811
- [K in PropertyKeysOf<T>]: T[K];
922
+ [K in Properties<T>]: T[K];
812
923
  };
813
924
  declare type MockedObjectDeep<T> = MaybeMockedConstructor<T> & {
814
- [K in MethodKeysOf<T>]: T[K] extends MockableFunction ? MockedFunctionDeep<T[K]> : T[K];
925
+ [K in Methods<T>]: T[K] extends Procedure ? MockedFunctionDeep<T[K]> : T[K];
815
926
  } & {
816
- [K in PropertyKeysOf<T>]: MaybeMockedDeep<T[K]>;
927
+ [K in Properties<T>]: MaybeMockedDeep<T[K]>;
817
928
  };
818
- declare type MaybeMockedDeep<T> = T extends MockableFunction ? MockedFunctionDeep<T> : T extends object ? MockedObjectDeep<T> : T;
819
- declare type MaybeMocked<T> = T extends MockableFunction ? MockedFunction<T> : T extends object ? MockedObject<T> : T;
929
+ declare type MaybeMockedDeep<T> = T extends Procedure ? MockedFunctionDeep<T> : T extends object ? MockedObjectDeep<T> : T;
930
+ declare type MaybeMocked<T> = T extends Procedure ? MockedFunction<T> : T extends object ? MockedObject<T> : T;
820
931
  declare type EnhancedSpy<TArgs extends any[] = any[], TReturns = any> = JestMockCompat<TArgs, TReturns> & SpyImpl<TArgs, TReturns>;
821
- interface MockWithArgs<T extends MockableFunction> extends JestMockCompatFn<ArgumentsOf<T>, ReturnType<T>> {
822
- new (...args: ConstructorArgumentsOf<T>): T;
823
- (...args: ArgumentsOf<T>): ReturnType<T>;
932
+ interface MockWithArgs<T extends Procedure> extends JestMockCompatFn<Parameters<T>, ReturnType<T>> {
933
+ new (...args: T extends new (...args: any) => any ? ConstructorParameters<T> : never): T;
934
+ (...args: Parameters<T>): ReturnType<T>;
824
935
  }
825
936
  declare const spies: Set<JestMockCompat<any[], any>>;
826
937
  declare function isMockFunction(fn: any): fn is EnhancedSpy;
827
- declare function spyOn<T, K extends keyof T>(obj: T, method: K, accessType?: 'get' | 'set'): T[K] extends (...args: infer TArgs) => infer TReturnValue ? JestMockCompat<TArgs, TReturnValue> : JestMockCompat;
828
- declare type Awaited<T> = T extends Promise<infer R> ? R : never;
938
+ declare function spyOn<T, S extends Properties<Required<T>>>(obj: T, methodName: S, accesType: 'get'): JestMockCompat<[T[S]], void>;
939
+ declare function spyOn<T, G extends Properties<Required<T>>>(obj: T, methodName: G, accesType: 'set'): JestMockCompat<[], T[G]>;
940
+ declare function spyOn<T, M extends Classes<Required<T>>>(object: T, method: M): Required<T>[M] extends new (...args: infer A) => infer R ? JestMockCompat<A, R> : never;
941
+ declare function spyOn<T, M extends Methods<Required<T>>>(obj: T, methodName: M, mock?: T[M]): Required<T>[M] extends (...args: infer A) => infer R ? JestMockCompat<A, R> : never;
829
942
  declare function fn<TArgs extends any[] = any[], R = any>(): JestMockCompatFn<TArgs, R>;
830
943
  declare function fn<TArgs extends any[] = any[], R = any>(implementation: (...args: TArgs) => R): JestMockCompatFn<TArgs, R>;
831
944
 
@@ -952,7 +1065,9 @@ declare global {
952
1065
  not: AsymmetricMatchersContaining;
953
1066
  }
954
1067
  interface JestAssertions {
1068
+ toMatchSnapshot(snapshot: object, message?: string): void;
955
1069
  toMatchSnapshot(message?: string): void;
1070
+ toMatchInlineSnapshot(properties: object, snapshot?: string, message?: string): void;
956
1071
  toMatchInlineSnapshot(snapshot?: string, message?: string): void;
957
1072
  toThrowErrorMatchingSnapshot(message?: string): void;
958
1073
  toThrowErrorMatchingInlineSnapshot(snapshot?: string, message?: string): void;
@@ -1013,4 +1128,4 @@ declare global {
1013
1128
  }
1014
1129
  }
1015
1130
 
1016
- export { ApiConfig, ArgumentsOf, ArgumentsType, Arrayable, Awaitable, BuiltinEnvironment, ConstructorArgumentsOf, DoneCallback, EnhancedSpy, Environment, EnvironmentReturn, ErrorWithDiff, File, HookListener, InlineConfig, JestMockCompat, JestMockCompatContext, JestMockCompatFn, MaybeMocked, MaybeMockedConstructor, MaybeMockedDeep, MethodKeysOf, MockWithArgs, MockableFunction, MockedFunction, MockedFunctionDeep, MockedObject, MockedObjectDeep, ModuleCache, Nullable, ParsedStack, Position, PropertyKeysOf, Reporter, ResolvedConfig, RunMode, RuntimeContext, SnapshotData, SnapshotMatchOptions, SnapshotResult, SnapshotStateOptions, SnapshotSummary, SnapshotUpdateState, Suite, SuiteCollector, SuiteHooks, Task, TaskBase, TaskResult, TaskResultPack, TaskState, Test, TestCollector, TestFactory, TestFunction, UncheckedSnapshot, UserConfig, UserConsoleLog, WebSocketEvents, WebSocketHandlers, WorkerContext, WorkerRPC, afterAll, afterEach, beforeAll, beforeEach, describe, expect, fn, isMockFunction, it, spies, spyOn, suite, test, vi, vitest };
1131
+ export { ApiConfig, ArgumentsType, Arrayable, Awaitable, BuiltinEnvironment, DoneCallback, EnhancedSpy, Environment, EnvironmentReturn, ErrorWithDiff, File, HookListener, InlineConfig, JestMockCompat, JestMockCompatContext, JestMockCompatFn, MaybeMocked, MaybeMockedConstructor, MaybeMockedDeep, MockWithArgs, MockedFunction, MockedFunctionDeep, MockedObject, MockedObjectDeep, ModuleCache, Nullable, ParsedStack, Position, Reporter, ResolvedConfig, RunMode, RuntimeContext, SnapshotData, SnapshotMatchOptions, SnapshotResult, SnapshotStateOptions, SnapshotSummary, SnapshotUpdateState, Suite, SuiteCollector, SuiteHooks, Task, TaskBase, TaskResult, TaskResultPack, TaskState, Test, TestCollector, TestFactory, TestFunction, UncheckedSnapshot, UserConfig, UserConsoleLog, WebSocketEvents, WebSocketHandlers, WorkerContext, WorkerRPC, afterAll, afterEach, beforeAll, beforeEach, describe, expect, fn, isMockFunction, it, spies, spyOn, suite, test, vi, vitest };
package/dist/index.js CHANGED
@@ -1,11 +1,12 @@
1
- export { d as describe, i as it, c as suite, t as test, e as vi, v as vitest } from './vi-fe26a646.js';
2
- export { a as afterAll, d as afterEach, b as beforeAll, c as beforeEach, e as expect } from './index-06712022.js';
1
+ export { d as describe, i as it, c as suite, t as test, e as vi, v as vitest } from './vi-aec007e7.js';
2
+ export { a as afterAll, d as afterEach, b as beforeAll, c as beforeEach, e as expect } from './index-354a6abd.js';
3
3
  export { f as fn, i as isMockFunction, s as spies, a as spyOn } from './jest-mock-30625866.js';
4
4
  export { assert, default as chai, should } from 'chai';
5
- import './index-42a3a132.js';
5
+ import './index-720a83c6.js';
6
6
  import 'url';
7
7
  import 'tty';
8
8
  import 'local-pkg';
9
9
  import 'path';
10
10
  import './_commonjsHelpers-c9e3b764.js';
11
11
  import 'tinyspy';
12
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbXSwic291cmNlc0NvbnRlbnQiOltdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OyJ9
@@ -91,3 +91,4 @@ function fn(implementation) {
91
91
  }
92
92
 
93
93
  export { spyOn as a, fn as f, isMockFunction as i, spies as s };
94
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamVzdC1tb2NrLTMwNjI1ODY2LmpzIiwic291cmNlcyI6WyIuLi9zcmMvaW50ZWdyYXRpb25zL2plc3QtbW9jay50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1dGlsIH0gZnJvbSAnY2hhaSdcbmltcG9ydCB0eXBlIHsgU3B5SW1wbCB9IGZyb20gJ3RpbnlzcHknXG5pbXBvcnQgKiBhcyB0aW55c3B5IGZyb20gJ3RpbnlzcHknXG5cbmludGVyZmFjZSBNb2NrUmVzdWx0UmV0dXJuPFQ+IHtcbiAgdHlwZTogJ3JldHVybidcbiAgdmFsdWU6IFRcbn1cbmludGVyZmFjZSBNb2NrUmVzdWx0SW5jb21wbGV0ZSB7XG4gIHR5cGU6ICdpbmNvbXBsZXRlJ1xuICB2YWx1ZTogdW5kZWZpbmVkXG59XG5pbnRlcmZhY2UgTW9ja1Jlc3VsdFRocm93IHtcbiAgdHlwZTogJ3Rocm93J1xuICB2YWx1ZTogYW55XG59XG5cbnR5cGUgTW9ja1Jlc3VsdDxUPiA9IE1vY2tSZXN1bHRSZXR1cm48VD4gfCBNb2NrUmVzdWx0VGhyb3cgfCBNb2NrUmVzdWx0SW5jb21wbGV0ZVxuXG5leHBvcnQgaW50ZXJmYWNlIEplc3RNb2NrQ29tcGF0Q29udGV4dDxULCBZPiB7XG4gIGNhbGxzOiBZW11cbiAgaW5zdGFuY2VzOiBUW11cbiAgLy8gVE9ETzogZG9lc24ndCB3b3JrXG4gIGludm9jYXRpb25DYWxsT3JkZXI6IG51bWJlcltdXG4gIHJlc3VsdHM6IE1vY2tSZXN1bHQ8VD5bXVxufVxuXG50eXBlIFByb2NlZHVyZSA9ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55XG5cbnR5cGUgTWV0aG9kczxUPiA9IHtcbiAgW0sgaW4ga2V5b2YgVF06IFRbS10gZXh0ZW5kcyBQcm9jZWR1cmUgPyBLIDogbmV2ZXJcbn1ba2V5b2YgVF0gJiBzdHJpbmdcbnR5cGUgUHJvcGVydGllczxUPiA9IHtcbiAgW0sgaW4ga2V5b2YgVF06IFRbS10gZXh0ZW5kcyBQcm9jZWR1cmUgPyBuZXZlciA6IEtcbn1ba2V5b2YgVF0gJiBzdHJpbmdcbnR5cGUgQ2xhc3NlczxUPiA9IHtcbiAgW0sgaW4ga2V5b2YgVF06IFRbS10gZXh0ZW5kcyBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkgPyBLIDogbmV2ZXJcbn1ba2V5b2YgVF0gJiBzdHJpbmdcblxuZXhwb3J0IGludGVyZmFjZSBKZXN0TW9ja0NvbXBhdDxUQXJncyBleHRlbmRzIGFueVtdID0gYW55W10sIFRSZXR1cm5zID0gYW55PiB7XG4gIGdldE1vY2tOYW1lKCk6IHN0cmluZ1xuICBtb2NrTmFtZShuOiBzdHJpbmcpOiB0aGlzXG4gIG1vY2s6IEplc3RNb2NrQ29tcGF0Q29udGV4dDxUQXJncywgVFJldHVybnM+XG4gIG1vY2tDbGVhcigpOiB0aGlzXG4gIG1vY2tSZXNldCgpOiB0aGlzXG4gIG1vY2tSZXN0b3JlKCk6IHZvaWRcbiAgZ2V0TW9ja0ltcGxlbWVudGF0aW9uKCk6ICgoLi4uYXJnczogVEFyZ3MpID0+IFRSZXR1cm5zKSB8IHVuZGVmaW5lZFxuICBtb2NrSW1wbGVtZW50YXRpb24oZm46ICgoLi4uYXJnczogVEFyZ3MpID0+IFRSZXR1cm5zKSB8ICgoKSA9PiBQcm9taXNlPFRSZXR1cm5zPikpOiB0aGlzXG4gIG1vY2tJbXBsZW1lbnRhdGlvbk9uY2UoZm46ICgoLi4uYXJnczogVEFyZ3MpID0+IFRSZXR1cm5zKSB8ICgoKSA9PiBQcm9taXNlPFRSZXR1cm5zPikpOiB0aGlzXG4gIG1vY2tSZXR1cm5UaGlzKCk6IHRoaXNcbiAgbW9ja1JldHVyblZhbHVlKG9iajogVFJldHVybnMpOiB0aGlzXG4gIG1vY2tSZXR1cm5WYWx1ZU9uY2Uob2JqOiBUUmV0dXJucyk6IHRoaXNcbiAgbW9ja1Jlc29sdmVkVmFsdWUob2JqOiBBd2FpdGVkPFRSZXR1cm5zPik6IHRoaXNcbiAgbW9ja1Jlc29sdmVkVmFsdWVPbmNlKG9iajogQXdhaXRlZDxUUmV0dXJucz4pOiB0aGlzXG4gIG1vY2tSZWplY3RlZFZhbHVlKG9iajogYW55KTogdGhpc1xuICBtb2NrUmVqZWN0ZWRWYWx1ZU9uY2Uob2JqOiBhbnkpOiB0aGlzXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSmVzdE1vY2tDb21wYXRGbjxUQXJncyBleHRlbmRzIGFueVtdID0gYW55LCBUUmV0dXJucyA9IGFueT4gZXh0ZW5kcyBKZXN0TW9ja0NvbXBhdDxUQXJncywgVFJldHVybnM+IHtcbiAgKC4uLmFyZ3M6IFRBcmdzKTogVFJldHVybnNcbn1cblxuZXhwb3J0IHR5cGUgTWF5YmVNb2NrZWRDb25zdHJ1Y3RvcjxUPiA9IFQgZXh0ZW5kcyBuZXcgKFxuICAuLi5hcmdzOiBBcnJheTxhbnk+XG4pID0+IGluZmVyIFJcbiAgPyBKZXN0TW9ja0NvbXBhdEZuPENvbnN0cnVjdG9yUGFyYW1ldGVyczxUPiwgUj5cbiAgOiBUXG5leHBvcnQgdHlwZSBNb2NrZWRGdW5jdGlvbjxUIGV4dGVuZHMgUHJvY2VkdXJlPiA9IE1vY2tXaXRoQXJnczxUPiAmIHtcbiAgW0sgaW4ga2V5b2YgVF06IFRbS107XG59XG5leHBvcnQgdHlwZSBNb2NrZWRGdW5jdGlvbkRlZXA8VCBleHRlbmRzIFByb2NlZHVyZT4gPSBNb2NrV2l0aEFyZ3M8VD4gJiBNb2NrZWRPYmplY3REZWVwPFQ+XG5leHBvcnQgdHlwZSBNb2NrZWRPYmplY3Q8VD4gPSBNYXliZU1vY2tlZENvbnN0cnVjdG9yPFQ+ICYge1xuICBbSyBpbiBNZXRob2RzPFQ+XTogVFtLXSBleHRlbmRzIFByb2NlZHVyZVxuICAgID8gTW9ja2VkRnVuY3Rpb248VFtLXT5cbiAgICA6IFRbS107XG59ICYge1tLIGluIFByb3BlcnRpZXM8VD5dOiBUW0tdfVxuZXhwb3J0IHR5cGUgTW9ja2VkT2JqZWN0RGVlcDxUPiA9IE1heWJlTW9ja2VkQ29uc3RydWN0b3I8VD4gJiB7XG4gIFtLIGluIE1ldGhvZHM8VD5dOiBUW0tdIGV4dGVuZHMgUHJvY2VkdXJlXG4gICAgPyBNb2NrZWRGdW5jdGlvbkRlZXA8VFtLXT5cbiAgICA6IFRbS107XG59ICYge1tLIGluIFByb3BlcnRpZXM8VD5dOiBNYXliZU1vY2tlZERlZXA8VFtLXT59XG5cbmV4cG9ydCB0eXBlIE1heWJlTW9ja2VkRGVlcDxUPiA9IFQgZXh0ZW5kcyBQcm9jZWR1cmVcbiAgPyBNb2NrZWRGdW5jdGlvbkRlZXA8VD5cbiAgOiBUIGV4dGVuZHMgb2JqZWN0XG4gICAgPyBNb2NrZWRPYmplY3REZWVwPFQ+XG4gICAgOiBUXG5cbmV4cG9ydCB0eXBlIE1heWJlTW9ja2VkPFQ+ID0gVCBleHRlbmRzIFByb2NlZHVyZVxuICA/IE1vY2tlZEZ1bmN0aW9uPFQ+XG4gIDogVCBleHRlbmRzIG9iamVjdFxuICAgID8gTW9ja2VkT2JqZWN0PFQ+XG4gICAgOiBUXG5cbmV4cG9ydCB0eXBlIEVuaGFuY2VkU3B5PFRBcmdzIGV4dGVuZHMgYW55W10gPSBhbnlbXSwgVFJldHVybnMgPSBhbnk+ID0gSmVzdE1vY2tDb21wYXQ8VEFyZ3MsIFRSZXR1cm5zPiAmIFNweUltcGw8VEFyZ3MsIFRSZXR1cm5zPlxuXG5leHBvcnQgaW50ZXJmYWNlIE1vY2tXaXRoQXJnczxUIGV4dGVuZHMgUHJvY2VkdXJlPlxuICBleHRlbmRzIEplc3RNb2NrQ29tcGF0Rm48UGFyYW1ldGVyczxUPiwgUmV0dXJuVHlwZTxUPj4ge1xuICBuZXcgKC4uLmFyZ3M6IFQgZXh0ZW5kcyBuZXcgKC4uLmFyZ3M6IGFueSkgPT4gYW55ID8gQ29uc3RydWN0b3JQYXJhbWV0ZXJzPFQ+IDogbmV2ZXIpOiBUXG4gICguLi5hcmdzOiBQYXJhbWV0ZXJzPFQ+KTogUmV0dXJuVHlwZTxUPlxufVxuXG5leHBvcnQgY29uc3Qgc3BpZXMgPSBuZXcgU2V0PEplc3RNb2NrQ29tcGF0PigpXG5cbmV4cG9ydCBmdW5jdGlvbiBpc01vY2tGdW5jdGlvbihmbjogYW55KTogZm4gaXMgRW5oYW5jZWRTcHkge1xuICByZXR1cm4gdHlwZW9mIGZuID09PSAnZnVuY3Rpb24nXG4gICYmICdfX2lzU3B5JyBpbiBmblxuICAmJiBmbi5fX2lzU3B5XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzcHlPbjxULCBTIGV4dGVuZHMgUHJvcGVydGllczxSZXF1aXJlZDxUPj4+KFxuICBvYmo6IFQsXG4gIG1ldGhvZE5hbWU6IFMsXG4gIGFjY2VzVHlwZTogJ2dldCcsXG4pOiBKZXN0TW9ja0NvbXBhdDxbVFtTXV0sIHZvaWQ+XG5leHBvcnQgZnVuY3Rpb24gc3B5T248VCwgRyBleHRlbmRzIFByb3BlcnRpZXM8UmVxdWlyZWQ8VD4+PihcbiAgb2JqOiBULFxuICBtZXRob2ROYW1lOiBHLFxuICBhY2Nlc1R5cGU6ICdzZXQnLFxuKTogSmVzdE1vY2tDb21wYXQ8W10sIFRbR10+XG5leHBvcnQgZnVuY3Rpb24gc3B5T248VCwgTSBleHRlbmRzIENsYXNzZXM8UmVxdWlyZWQ8VD4+PihcbiAgb2JqZWN0OiBULFxuICBtZXRob2Q6IE1cbik6IFJlcXVpcmVkPFQ+W01dIGV4dGVuZHMgbmV3ICguLi5hcmdzOiBpbmZlciBBKSA9PiBpbmZlciBSXG4gID8gSmVzdE1vY2tDb21wYXQ8QSwgUj5cbiAgOiBuZXZlclxuZXhwb3J0IGZ1bmN0aW9uIHNweU9uPFQsIE0gZXh0ZW5kcyBNZXRob2RzPFJlcXVpcmVkPFQ+Pj4oXG4gIG9iajogVCxcbiAgbWV0aG9kTmFtZTogTSxcbiAgbW9jaz86IFRbTV1cbik6IFJlcXVpcmVkPFQ+W01dIGV4dGVuZHMgKC4uLmFyZ3M6IGluZmVyIEEpID0+IGluZmVyIFIgPyBKZXN0TW9ja0NvbXBhdDxBLCBSPiA6IG5ldmVyXG5leHBvcnQgZnVuY3Rpb24gc3B5T248VCwgSyBleHRlbmRzIGtleW9mIFQ+KFxuICBvYmo6IFQsXG4gIG1ldGhvZDogSyxcbiAgYWNjZXNzVHlwZT86ICdnZXQnIHwgJ3NldCcsXG4pOiBKZXN0TW9ja0NvbXBhdCB7XG4gIGNvbnN0IGRpY3Rpb25hcnkgPSB7XG4gICAgZ2V0OiAnZ2V0dGVyJyxcbiAgICBzZXQ6ICdzZXR0ZXInLFxuICB9IGFzIGNvbnN0XG4gIGNvbnN0IG9iak1ldGhvZCA9IGFjY2Vzc1R5cGUgPyB7IFtkaWN0aW9uYXJ5W2FjY2Vzc1R5cGVdXTogbWV0aG9kIH0gOiBtZXRob2RcblxuICBjb25zdCBzdHViID0gdGlueXNweS5zcHlPbihvYmosIG9iak1ldGhvZCBhcyBhbnkpXG5cbiAgcmV0dXJuIGVuaGFuY2VTcHkoc3R1YikgYXMgSmVzdE1vY2tDb21wYXRcbn1cblxuZnVuY3Rpb24gZW5oYW5jZVNweTxUQXJncyBleHRlbmRzIGFueVtdLCBUUmV0dXJucz4oXG4gIHNweTogU3B5SW1wbDxUQXJncywgVFJldHVybnM+LFxuKTogSmVzdE1vY2tDb21wYXQ8VEFyZ3MsIFRSZXR1cm5zPiB7XG4gIGNvbnN0IHN0dWIgPSBzcHkgYXMgdW5rbm93biBhcyBFbmhhbmNlZFNweTxUQXJncywgVFJldHVybnM+XG5cbiAgbGV0IGltcGxlbWVudGF0aW9uOiAoKC4uLmFyZ3M6IFRBcmdzKSA9PiBUUmV0dXJucykgfCB1bmRlZmluZWRcblxuICBjb25zdCBpbnN0YW5jZXM6IGFueVtdID0gW11cblxuICBjb25zdCBtb2NrQ29udGV4dCA9IHtcbiAgICBnZXQgY2FsbHMoKSB7XG4gICAgICByZXR1cm4gc3R1Yi5jYWxsc1xuICAgIH0sXG4gICAgZ2V0IGluc3RhbmNlcygpIHtcbiAgICAgIHJldHVybiBpbnN0YW5jZXNcbiAgICB9LFxuICAgIC8vIG5vdCBzdXBwb3J0ZWRcbiAgICBnZXQgaW52b2NhdGlvbkNhbGxPcmRlcigpIHtcbiAgICAgIHJldHVybiBbXVxuICAgIH0sXG4gICAgZ2V0IHJlc3VsdHMoKSB7XG4gICAgICByZXR1cm4gc3R1Yi5yZXN1bHRzLm1hcCgoW2NhbGxUeXBlLCB2YWx1ZV0pID0+IHtcbiAgICAgICAgY29uc3QgdHlwZSA9IGNhbGxUeXBlID09PSAnZXJyb3InID8gJ3Rocm93JyA6ICdyZXR1cm4nXG4gICAgICAgIHJldHVybiB7IHR5cGUsIHZhbHVlIH1cbiAgICAgIH0pXG4gICAgfSxcbiAgfVxuXG4gIGxldCBvbmNlSW1wbGVtZW50YXRpb25zOiAoKC4uLmFyZ3M6IFRBcmdzKSA9PiBUUmV0dXJucylbXSA9IFtdXG5cbiAgbGV0IG5hbWU6IHN0cmluZyA9IChzdHViIGFzIGFueSkubmFtZVxuXG4gIHN0dWIuZ2V0TW9ja05hbWUgPSAoKSA9PiBuYW1lIHx8ICd2aS5mbigpJ1xuICBzdHViLm1vY2tOYW1lID0gKG4pID0+IHtcbiAgICBuYW1lID0gblxuICAgIHJldHVybiBzdHViXG4gIH1cblxuICBzdHViLm1vY2tDbGVhciA9ICgpID0+IHtcbiAgICBzdHViLnJlc2V0KClcbiAgICByZXR1cm4gc3R1YlxuICB9XG5cbiAgc3R1Yi5tb2NrUmVzZXQgPSAoKSA9PiB7XG4gICAgc3R1Yi5yZXNldCgpXG4gICAgaW1wbGVtZW50YXRpb24gPSAoKSA9PiB1bmRlZmluZWQgYXMgdW5rbm93biBhcyBUUmV0dXJuc1xuICAgIG9uY2VJbXBsZW1lbnRhdGlvbnMgPSBbXVxuICAgIHJldHVybiBzdHViXG4gIH1cblxuICBzdHViLm1vY2tSZXN0b3JlID0gKCkgPT4ge1xuICAgIHN0dWIubW9ja1Jlc2V0KClcbiAgICBpbXBsZW1lbnRhdGlvbiA9IHVuZGVmaW5lZFxuICAgIHJldHVybiBzdHViXG4gIH1cblxuICBzdHViLmdldE1vY2tJbXBsZW1lbnRhdGlvbiA9ICgpID0+IGltcGxlbWVudGF0aW9uXG4gIHN0dWIubW9ja0ltcGxlbWVudGF0aW9uID0gKGZuOiAoLi4uYXJnczogVEFyZ3MpID0+IFRSZXR1cm5zKSA9PiB7XG4gICAgaW1wbGVtZW50YXRpb24gPSBmblxuICAgIHJldHVybiBzdHViXG4gIH1cblxuICBzdHViLm1vY2tJbXBsZW1lbnRhdGlvbk9uY2UgPSAoZm46ICguLi5hcmdzOiBUQXJncykgPT4gVFJldHVybnMpID0+IHtcbiAgICBvbmNlSW1wbGVtZW50YXRpb25zLnB1c2goZm4pXG4gICAgcmV0dXJuIHN0dWJcbiAgfVxuXG4gIHN0dWIubW9ja1JldHVyblRoaXMgPSAoKSA9PlxuICAgIHN0dWIubW9ja0ltcGxlbWVudGF0aW9uKGZ1bmN0aW9uKHRoaXM6IFRSZXR1cm5zKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0pXG5cbiAgc3R1Yi5tb2NrUmV0dXJuVmFsdWUgPSAodmFsOiBUUmV0dXJucykgPT4gc3R1Yi5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gdmFsKVxuICBzdHViLm1vY2tSZXR1cm5WYWx1ZU9uY2UgPSAodmFsOiBUUmV0dXJucykgPT4gc3R1Yi5tb2NrSW1wbGVtZW50YXRpb25PbmNlKCgpID0+IHZhbClcblxuICBzdHViLm1vY2tSZXNvbHZlZFZhbHVlID0gKHZhbDogQXdhaXRlZDxUUmV0dXJucz4pID0+XG4gICAgc3R1Yi5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gUHJvbWlzZS5yZXNvbHZlKHZhbCBhcyBUUmV0dXJucykpXG5cbiAgc3R1Yi5tb2NrUmVzb2x2ZWRWYWx1ZU9uY2UgPSAodmFsOiBBd2FpdGVkPFRSZXR1cm5zPikgPT5cbiAgICBzdHViLm1vY2tJbXBsZW1lbnRhdGlvbk9uY2UoKCkgPT4gUHJvbWlzZS5yZXNvbHZlKHZhbCBhcyBUUmV0dXJucykpXG5cbiAgc3R1Yi5tb2NrUmVqZWN0ZWRWYWx1ZSA9ICh2YWw6IHVua25vd24pID0+XG4gICAgc3R1Yi5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gUHJvbWlzZS5yZWplY3QodmFsKSlcblxuICBzdHViLm1vY2tSZWplY3RlZFZhbHVlT25jZSA9ICh2YWw6IHVua25vd24pID0+XG4gICAgc3R1Yi5tb2NrSW1wbGVtZW50YXRpb25PbmNlKCgpID0+IFByb21pc2UucmVqZWN0KHZhbCkpXG5cbiAgdXRpbC5hZGRQcm9wZXJ0eShzdHViLCAnbW9jaycsICgpID0+IG1vY2tDb250ZXh0KVxuXG4gIHN0dWIud2lsbENhbGwoZnVuY3Rpb24odGhpczogdW5rbm93biwgLi4uYXJncykge1xuICAgIGluc3RhbmNlcy5wdXNoKHRoaXMpXG4gICAgY29uc3QgaW1wbCA9IG9uY2VJbXBsZW1lbnRhdGlvbnMuc2hpZnQoKSB8fCBpbXBsZW1lbnRhdGlvbiB8fCBzdHViLmdldE9yaWdpbmFsKCkgfHwgKCgpID0+IHt9KVxuICAgIHJldHVybiBpbXBsLmFwcGx5KHRoaXMsIGFyZ3MpXG4gIH0pXG5cbiAgc3BpZXMuYWRkKHN0dWIpXG5cbiAgcmV0dXJuIHN0dWIgYXMgYW55XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmbjxUQXJncyBleHRlbmRzIGFueVtdID0gYW55W10sIFIgPSBhbnk+KCk6IEplc3RNb2NrQ29tcGF0Rm48VEFyZ3MsIFI+XG5leHBvcnQgZnVuY3Rpb24gZm48VEFyZ3MgZXh0ZW5kcyBhbnlbXSA9IGFueVtdLCBSID0gYW55PihcbiAgaW1wbGVtZW50YXRpb246ICguLi5hcmdzOiBUQXJncykgPT4gUlxuKTogSmVzdE1vY2tDb21wYXRGbjxUQXJncywgUj5cbmV4cG9ydCBmdW5jdGlvbiBmbjxUQXJncyBleHRlbmRzIGFueVtdID0gYW55W10sIFIgPSBhbnk+KFxuICBpbXBsZW1lbnRhdGlvbj86ICguLi5hcmdzOiBUQXJncykgPT4gUixcbik6IEplc3RNb2NrQ29tcGF0Rm48VEFyZ3MsIFI+IHtcbiAgcmV0dXJuIGVuaGFuY2VTcHkodGlueXNweS5zcHlPbih7IGZuOiBpbXBsZW1lbnRhdGlvbiB8fCAoKCkgPT4ge30pIH0sICdmbicpKSBhcyB1bmtub3duIGFzIEplc3RNb2NrQ29tcGF0Rm5cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFWSxNQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsR0FBRztBQUN4QixTQUFTLGNBQWMsQ0FBQyxHQUFHLEVBQUU7QUFDcEMsRUFBRSxPQUFPLE9BQU8sR0FBRyxLQUFLLFVBQVUsSUFBSSxTQUFTLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUM7QUFDdEUsQ0FBQztBQUNNLFNBQVMsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFO0FBQy9DLEVBQUUsTUFBTSxVQUFVLEdBQUc7QUFDckIsSUFBSSxHQUFHLEVBQUUsUUFBUTtBQUNqQixJQUFJLEdBQUcsRUFBRSxRQUFRO0FBQ2pCLEdBQUcsQ0FBQztBQUNKLEVBQUUsTUFBTSxTQUFTLEdB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