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.
- package/dist/_commonjsHelpers-c9e3b764.js +1 -0
- package/dist/cli.js +10 -9
- package/dist/constants-0211a379.js +34 -0
- package/dist/diff-18d4a7eb.js +4750 -0
- package/dist/entry.js +94 -33
- package/dist/externalize-2f63779d.js +1 -0
- package/dist/global-5d1fb309.js +21 -0
- package/dist/index-26cb6e63.js +1644 -0
- package/dist/index-354a6abd.js +40 -0
- package/dist/index-4cd25949.js +782 -0
- package/dist/index-720a83c6.js +396 -0
- package/dist/index-7975be53.js +331 -0
- package/dist/index-7f7acd60.js +8548 -0
- package/dist/index-e909c175.js +63 -0
- package/dist/index-fa899e66.js +5708 -0
- package/dist/index.d.ts +142 -27
- package/dist/index.js +4 -3
- package/dist/jest-mock-30625866.js +1 -0
- package/dist/magic-string.es-94000aea.js +1361 -0
- package/dist/node.d.ts +111 -4
- package/dist/node.js +9 -8
- package/dist/rpc-8c7cc374.js +1 -0
- package/dist/setup-5aaf533e.js +4365 -0
- package/dist/vi-aec007e7.js +3461 -0
- package/dist/worker.js +11 -7
- package/package.json +9 -9
- package/dist/constants-868b9a2e.js +0 -33
- package/dist/diff-be830986.js +0 -4751
- package/dist/global-0254dd68.js +0 -20
- package/dist/index-06712022.js +0 -39
- package/dist/index-42a3a132.js +0 -366
- package/dist/index-42d44ee5.js +0 -1643
- package/dist/index-93dcb598.js +0 -5707
- package/dist/index-a73f33e0.js +0 -62
- package/dist/index-cb02ee01.js +0 -330
- package/dist/index-cce5de77.js +0 -781
- package/dist/index-d30b5ed0.js +0 -8579
- package/dist/magic-string.es-98a8bfa0.js +0 -1360
- package/dist/setup-6e09a65a.js +0 -4364
- 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
|
|
795
|
-
declare type
|
|
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
|
|
918
|
+
declare type MockedFunctionDeep<T extends Procedure> = MockWithArgs<T> & MockedObjectDeep<T>;
|
|
808
919
|
declare type MockedObject<T> = MaybeMockedConstructor<T> & {
|
|
809
|
-
[K in
|
|
920
|
+
[K in Methods<T>]: T[K] extends Procedure ? MockedFunction<T[K]> : T[K];
|
|
810
921
|
} & {
|
|
811
|
-
[K in
|
|
922
|
+
[K in Properties<T>]: T[K];
|
|
812
923
|
};
|
|
813
924
|
declare type MockedObjectDeep<T> = MaybeMockedConstructor<T> & {
|
|
814
|
-
[K in
|
|
925
|
+
[K in Methods<T>]: T[K] extends Procedure ? MockedFunctionDeep<T[K]> : T[K];
|
|
815
926
|
} & {
|
|
816
|
-
[K in
|
|
927
|
+
[K in Properties<T>]: MaybeMockedDeep<T[K]>;
|
|
817
928
|
};
|
|
818
|
-
declare type MaybeMockedDeep<T> = T extends
|
|
819
|
-
declare type MaybeMocked<T> = T extends
|
|
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
|
|
822
|
-
new (...args:
|
|
823
|
-
(...args:
|
|
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,
|
|
828
|
-
declare
|
|
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,
|
|
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-
|
|
2
|
-
export { a as afterAll, d as afterEach, b as beforeAll, c as beforeEach, e as expect } from './index-
|
|
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-
|
|
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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
|