vitest 0.2.3 → 0.2.7
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/LICENSE.md +34 -5
- package/dist/{_commonjsHelpers-bdec4bbd.js → _commonjsHelpers-c9e3b764.js} +6 -2
- package/dist/cli.js +1089 -20
- package/dist/client-f15310bf.js +9442 -0
- package/dist/create-bc179830.js +9208 -0
- package/dist/{diff-abc9f1a4.js → diff-275cfd15.js} +3 -3
- package/dist/entry.js +139 -100
- package/dist/{globals-67f38862.js → globals-1e6cf014.js} +8 -8
- package/dist/{index-6102d563.js → index-08faa6e3.js} +3 -3
- package/dist/index-26cb6e63.js +1644 -0
- package/dist/{index-87602a5a.js → index-2e2d319c.js} +2 -2
- package/dist/index-4cd25949.js +782 -0
- package/dist/index-7975be53.js +331 -0
- package/dist/index.d.ts +132 -98
- package/dist/index.js +7 -7
- package/dist/jest-mock.js +99 -0
- package/dist/node.d.ts +67 -56
- package/dist/node.js +9 -8
- package/dist/setup-cb313f20.js +4402 -0
- package/dist/{source-map-002462f4.js → source-map-799c200a.js} +2 -2
- package/dist/vi-ec8761e0.js +5916 -0
- package/dist/worker.js +19 -177
- package/package.json +16 -15
- package/dist/create-b3e0df3f.js +0 -9169
- package/dist/index-0c3a317d.js +0 -2411
- package/dist/index-1085cee5.js +0 -9288
- package/dist/index-825cb54c.js +0 -331
- package/dist/jest-mock-113430de.js +0 -99
- package/dist/setup-0edb4bff.js +0 -4389
- package/dist/vi-7f0c5d26.js +0 -5750
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { ViteDevServer, TransformResult, CommonServerOptions } from 'vite';
|
|
2
|
-
import { Profiler } from 'inspector';
|
|
3
2
|
import { MessagePort } from 'worker_threads';
|
|
4
3
|
import { SpyImpl } from 'tinyspy';
|
|
5
4
|
export { assert, default as chai, should } from 'chai';
|
|
@@ -228,11 +227,6 @@ declare class Any extends AsymmetricMatcher<any> {
|
|
|
228
227
|
toAsymmetricMatcher(): string;
|
|
229
228
|
}
|
|
230
229
|
|
|
231
|
-
interface FetchResult$1 {
|
|
232
|
-
code?: string;
|
|
233
|
-
externalize?: string;
|
|
234
|
-
}
|
|
235
|
-
|
|
236
230
|
interface DepsHandlingOptions {
|
|
237
231
|
external?: (string | RegExp)[];
|
|
238
232
|
inline?: (string | RegExp)[];
|
|
@@ -242,6 +236,22 @@ interface DepsHandlingOptions {
|
|
|
242
236
|
*/
|
|
243
237
|
fallbackCJS?: boolean;
|
|
244
238
|
}
|
|
239
|
+
interface StartOfSourceMap$1 {
|
|
240
|
+
file?: string;
|
|
241
|
+
sourceRoot?: string;
|
|
242
|
+
}
|
|
243
|
+
interface RawSourceMap$1 extends StartOfSourceMap$1 {
|
|
244
|
+
version: string;
|
|
245
|
+
sources: string[];
|
|
246
|
+
names: string[];
|
|
247
|
+
sourcesContent?: string[];
|
|
248
|
+
mappings: string;
|
|
249
|
+
}
|
|
250
|
+
interface FetchResult$1 {
|
|
251
|
+
code?: string;
|
|
252
|
+
externalize?: string;
|
|
253
|
+
map?: RawSourceMap$1;
|
|
254
|
+
}
|
|
245
255
|
interface ViteNodeResolveId$1 {
|
|
246
256
|
external?: boolean | 'absolute' | 'relative';
|
|
247
257
|
id: string;
|
|
@@ -252,9 +262,9 @@ interface ViteNodeResolveId$1 {
|
|
|
252
262
|
interface ViteNodeServerOptions {
|
|
253
263
|
/**
|
|
254
264
|
* Inject inline sourcemap to modules
|
|
255
|
-
* @default
|
|
265
|
+
* @default 'inline'
|
|
256
266
|
*/
|
|
257
|
-
sourcemap?: boolean;
|
|
267
|
+
sourcemap?: 'inline' | boolean;
|
|
258
268
|
/**
|
|
259
269
|
* Deps handling
|
|
260
270
|
*/
|
|
@@ -273,7 +283,10 @@ declare class ViteNodeServer {
|
|
|
273
283
|
options: ViteNodeServerOptions;
|
|
274
284
|
private fetchPromiseMap;
|
|
275
285
|
private transformPromiseMap;
|
|
276
|
-
|
|
286
|
+
fetchCache: Map<string, {
|
|
287
|
+
timestamp: number;
|
|
288
|
+
result: FetchResult$1;
|
|
289
|
+
}>;
|
|
277
290
|
constructor(server: ViteDevServer, options?: ViteNodeServerOptions);
|
|
278
291
|
shouldExternalize(id: string): Promise<string | false>;
|
|
279
292
|
resolveId(id: string, importer?: string): Promise<ViteNodeResolveId$1 | null>;
|
|
@@ -318,7 +331,6 @@ declare class Vitest {
|
|
|
318
331
|
server: ViteDevServer;
|
|
319
332
|
state: StateManager;
|
|
320
333
|
snapshot: SnapshotManager;
|
|
321
|
-
coverage: Profiler.TakePreciseCoverageReturnType[];
|
|
322
334
|
reporters: Reporter[];
|
|
323
335
|
console: Console;
|
|
324
336
|
pool: WorkerPool | undefined;
|
|
@@ -331,7 +343,6 @@ declare class Vitest {
|
|
|
331
343
|
vitenode: ViteNodeServer;
|
|
332
344
|
invalidates: Set<string>;
|
|
333
345
|
changedTests: Set<string>;
|
|
334
|
-
visitedFilesMap: Map<string, RawSourceMap>;
|
|
335
346
|
runningPromise?: Promise<void>;
|
|
336
347
|
closingPromise?: Promise<void>;
|
|
337
348
|
isFirstRun: boolean;
|
|
@@ -472,6 +483,65 @@ declare const ReportersMap: {
|
|
|
472
483
|
};
|
|
473
484
|
declare type BuiltinReporters = keyof typeof ReportersMap;
|
|
474
485
|
|
|
486
|
+
declare type Awaitable<T> = T | PromiseLike<T>;
|
|
487
|
+
declare type Nullable<T> = T | null | undefined;
|
|
488
|
+
declare type Arrayable<T> = T | Array<T>;
|
|
489
|
+
declare type ArgumentsType<T> = T extends (...args: infer U) => any ? U : never;
|
|
490
|
+
declare type MergeInsertions<T> = T extends object ? {
|
|
491
|
+
[K in keyof T]: MergeInsertions<T[K]>;
|
|
492
|
+
} : T;
|
|
493
|
+
declare type DeepMerge<F, S> = MergeInsertions<{
|
|
494
|
+
[K in keyof F | keyof S]: K extends keyof S & keyof F ? DeepMerge<F[K], S[K]> : K extends keyof S ? S[K] : K extends keyof F ? F[K] : never;
|
|
495
|
+
}>;
|
|
496
|
+
interface Constructable {
|
|
497
|
+
new (...args: any[]): any;
|
|
498
|
+
}
|
|
499
|
+
interface ModuleCache {
|
|
500
|
+
promise?: Promise<any>;
|
|
501
|
+
exports?: any;
|
|
502
|
+
code?: string;
|
|
503
|
+
}
|
|
504
|
+
interface EnvironmentReturn {
|
|
505
|
+
teardown: (global: any) => Awaitable<void>;
|
|
506
|
+
}
|
|
507
|
+
interface Environment {
|
|
508
|
+
name: string;
|
|
509
|
+
setup(global: any, options: Record<string, any>): Awaitable<EnvironmentReturn>;
|
|
510
|
+
}
|
|
511
|
+
interface UserConsoleLog {
|
|
512
|
+
content: string;
|
|
513
|
+
type: 'stdout' | 'stderr';
|
|
514
|
+
taskId?: string;
|
|
515
|
+
time: number;
|
|
516
|
+
}
|
|
517
|
+
interface Position {
|
|
518
|
+
line: number;
|
|
519
|
+
column: number;
|
|
520
|
+
}
|
|
521
|
+
interface ParsedStack {
|
|
522
|
+
method: string;
|
|
523
|
+
file: string;
|
|
524
|
+
line: number;
|
|
525
|
+
column: number;
|
|
526
|
+
sourcePos?: Position;
|
|
527
|
+
}
|
|
528
|
+
interface ErrorWithDiff extends Error {
|
|
529
|
+
name: string;
|
|
530
|
+
nameStr?: string;
|
|
531
|
+
stack?: string;
|
|
532
|
+
stackStr?: string;
|
|
533
|
+
stacks?: ParsedStack[];
|
|
534
|
+
showDiff?: boolean;
|
|
535
|
+
actual?: any;
|
|
536
|
+
expected?: any;
|
|
537
|
+
operator?: string;
|
|
538
|
+
}
|
|
539
|
+
interface ModuleGraphData {
|
|
540
|
+
graph: Record<string, string[]>;
|
|
541
|
+
externalized: string[];
|
|
542
|
+
inlined: string[];
|
|
543
|
+
}
|
|
544
|
+
|
|
475
545
|
declare type CoverageReporter = 'clover' | 'cobertura' | 'html-spa' | 'html' | 'json-summary' | 'json' | 'lcov' | 'lcovonly' | 'none' | 'teamcity' | 'text-lcov' | 'text-summary' | 'text';
|
|
476
546
|
interface C8Options {
|
|
477
547
|
/**
|
|
@@ -521,6 +591,7 @@ interface C8Options {
|
|
|
521
591
|
all?: boolean;
|
|
522
592
|
}
|
|
523
593
|
interface ResolvedC8Options extends Required<C8Options> {
|
|
594
|
+
tempDirectory: string;
|
|
524
595
|
}
|
|
525
596
|
|
|
526
597
|
interface JSDOMOptions {
|
|
@@ -603,76 +674,6 @@ interface JSDOMOptions {
|
|
|
603
674
|
resources?: 'usable' | any;
|
|
604
675
|
}
|
|
605
676
|
|
|
606
|
-
declare type Awaitable<T> = T | PromiseLike<T>;
|
|
607
|
-
declare type Nullable<T> = T | null | undefined;
|
|
608
|
-
declare type Arrayable<T> = T | Array<T>;
|
|
609
|
-
declare type ArgumentsType<T> = T extends (...args: infer U) => any ? U : never;
|
|
610
|
-
declare type MergeInsertions<T> = T extends object ? {
|
|
611
|
-
[K in keyof T]: MergeInsertions<T[K]>;
|
|
612
|
-
} : T;
|
|
613
|
-
declare type DeepMerge<F, S> = MergeInsertions<{
|
|
614
|
-
[K in keyof F | keyof S]: K extends keyof S & keyof F ? DeepMerge<F[K], S[K]> : K extends keyof S ? S[K] : K extends keyof F ? F[K] : never;
|
|
615
|
-
}>;
|
|
616
|
-
interface Constructable {
|
|
617
|
-
new (...args: any[]): any;
|
|
618
|
-
}
|
|
619
|
-
interface ModuleCache {
|
|
620
|
-
promise?: Promise<any>;
|
|
621
|
-
exports?: any;
|
|
622
|
-
code?: string;
|
|
623
|
-
}
|
|
624
|
-
interface EnvironmentReturn {
|
|
625
|
-
teardown: (global: any) => Awaitable<void>;
|
|
626
|
-
}
|
|
627
|
-
interface Environment {
|
|
628
|
-
name: string;
|
|
629
|
-
setup(global: any, options: Record<string, any>): Awaitable<EnvironmentReturn>;
|
|
630
|
-
}
|
|
631
|
-
interface UserConsoleLog {
|
|
632
|
-
content: string;
|
|
633
|
-
type: 'stdout' | 'stderr';
|
|
634
|
-
taskId?: string;
|
|
635
|
-
time: number;
|
|
636
|
-
}
|
|
637
|
-
interface Position {
|
|
638
|
-
line: number;
|
|
639
|
-
column: number;
|
|
640
|
-
}
|
|
641
|
-
interface ParsedStack {
|
|
642
|
-
method: string;
|
|
643
|
-
file: string;
|
|
644
|
-
line: number;
|
|
645
|
-
column: number;
|
|
646
|
-
sourcePos?: Position;
|
|
647
|
-
}
|
|
648
|
-
interface ErrorWithDiff extends Error {
|
|
649
|
-
name: string;
|
|
650
|
-
nameStr?: string;
|
|
651
|
-
stack?: string;
|
|
652
|
-
stackStr?: string;
|
|
653
|
-
stacks?: ParsedStack[];
|
|
654
|
-
showDiff?: boolean;
|
|
655
|
-
actual?: any;
|
|
656
|
-
expected?: any;
|
|
657
|
-
operator?: string;
|
|
658
|
-
}
|
|
659
|
-
interface ModuleGraphData {
|
|
660
|
-
graph: Record<string, string[]>;
|
|
661
|
-
externalized: string[];
|
|
662
|
-
inlined: string[];
|
|
663
|
-
}
|
|
664
|
-
interface StartOfSourceMap {
|
|
665
|
-
file?: string;
|
|
666
|
-
sourceRoot?: string;
|
|
667
|
-
}
|
|
668
|
-
interface RawSourceMap extends StartOfSourceMap {
|
|
669
|
-
version: string;
|
|
670
|
-
sources: string[];
|
|
671
|
-
names: string[];
|
|
672
|
-
sourcesContent?: string[];
|
|
673
|
-
mappings: string;
|
|
674
|
-
}
|
|
675
|
-
|
|
676
677
|
declare type ChainableFunction<T extends string, Args extends any[], R = any> = {
|
|
677
678
|
(...args: Args): R;
|
|
678
679
|
} & {
|
|
@@ -714,11 +715,20 @@ interface Test extends TaskBase {
|
|
|
714
715
|
declare type Task = Test | Suite | File;
|
|
715
716
|
declare type DoneCallback = (error?: any) => void;
|
|
716
717
|
declare type TestFunction = (done: DoneCallback) => Awaitable<void>;
|
|
717
|
-
declare type
|
|
718
|
+
declare type EachFunction = <T>(cases: T[]) => (name: string, fn: (...args: T extends any[] ? T : [T]) => void) => void;
|
|
719
|
+
declare type TestAPI = ChainableFunction<'concurrent' | 'only' | 'skip' | 'todo' | 'fails', [
|
|
718
720
|
name: string,
|
|
719
721
|
fn?: TestFunction,
|
|
720
722
|
timeout?: number
|
|
721
|
-
], void
|
|
723
|
+
], void> & {
|
|
724
|
+
each: EachFunction;
|
|
725
|
+
};
|
|
726
|
+
declare type SuiteAPI = ChainableFunction<'concurrent' | 'only' | 'skip' | 'todo', [
|
|
727
|
+
name: string,
|
|
728
|
+
factory?: SuiteFactory
|
|
729
|
+
], SuiteCollector> & {
|
|
730
|
+
each: EachFunction;
|
|
731
|
+
};
|
|
722
732
|
declare type HookListener<T extends any[]> = (...args: T) => Awaitable<void>;
|
|
723
733
|
interface SuiteHooks {
|
|
724
734
|
beforeAll: HookListener<[Suite]>[];
|
|
@@ -730,13 +740,13 @@ interface SuiteCollector {
|
|
|
730
740
|
readonly name: string;
|
|
731
741
|
readonly mode: RunMode;
|
|
732
742
|
type: 'collector';
|
|
733
|
-
test:
|
|
743
|
+
test: TestAPI;
|
|
734
744
|
tasks: (Suite | Test | SuiteCollector)[];
|
|
735
745
|
collect: (file?: File) => Promise<Suite>;
|
|
736
746
|
clear: () => void;
|
|
737
747
|
on: <T extends keyof SuiteHooks>(name: T, ...fn: SuiteHooks[T]) => void;
|
|
738
748
|
}
|
|
739
|
-
declare type
|
|
749
|
+
declare type SuiteFactory = (test: (name: string, fn: TestFunction) => void) => Awaitable<void>;
|
|
740
750
|
interface RuntimeContext {
|
|
741
751
|
tasks: (SuiteCollector | Test)[];
|
|
742
752
|
currentSuite: SuiteCollector | null;
|
|
@@ -990,10 +1000,16 @@ interface InlineConfig {
|
|
|
990
1000
|
*/
|
|
991
1001
|
api?: boolean | number | ApiConfig;
|
|
992
1002
|
/**
|
|
993
|
-
*
|
|
1003
|
+
* Enable Vitest UI
|
|
994
1004
|
* @internal WIP
|
|
995
1005
|
*/
|
|
996
1006
|
ui?: boolean;
|
|
1007
|
+
/**
|
|
1008
|
+
* Open UI automatically.
|
|
1009
|
+
*
|
|
1010
|
+
* @default true
|
|
1011
|
+
*/
|
|
1012
|
+
open?: boolean;
|
|
997
1013
|
/**
|
|
998
1014
|
* Base url for the UI
|
|
999
1015
|
*
|
|
@@ -1048,6 +1064,10 @@ interface UserConfig extends InlineConfig {
|
|
|
1048
1064
|
* Pass with no tests
|
|
1049
1065
|
*/
|
|
1050
1066
|
passWithNoTests?: boolean;
|
|
1067
|
+
/**
|
|
1068
|
+
* Allow tests and suites that are marked as only
|
|
1069
|
+
*/
|
|
1070
|
+
allowOnly?: boolean;
|
|
1051
1071
|
/**
|
|
1052
1072
|
* Run tests that cover a list of source files
|
|
1053
1073
|
*/
|
|
@@ -1064,9 +1084,21 @@ interface ResolvedConfig extends Omit<Required<UserConfig>, 'config' | 'filters'
|
|
|
1064
1084
|
api?: ApiConfig;
|
|
1065
1085
|
}
|
|
1066
1086
|
|
|
1087
|
+
interface StartOfSourceMap {
|
|
1088
|
+
file?: string;
|
|
1089
|
+
sourceRoot?: string;
|
|
1090
|
+
}
|
|
1091
|
+
interface RawSourceMap extends StartOfSourceMap {
|
|
1092
|
+
version: string;
|
|
1093
|
+
sources: string[];
|
|
1094
|
+
names: string[];
|
|
1095
|
+
sourcesContent?: string[];
|
|
1096
|
+
mappings: string;
|
|
1097
|
+
}
|
|
1067
1098
|
interface FetchResult {
|
|
1068
1099
|
code?: string;
|
|
1069
1100
|
externalize?: string;
|
|
1101
|
+
map?: RawSourceMap;
|
|
1070
1102
|
}
|
|
1071
1103
|
declare type FetchFunction = (id: string) => Promise<FetchResult>;
|
|
1072
1104
|
interface ViteNodeResolveId {
|
|
@@ -1094,13 +1126,12 @@ interface WorkerRPC {
|
|
|
1094
1126
|
onCollected: (files: File[]) => void;
|
|
1095
1127
|
onTaskUpdate: (pack: TaskResultPack[]) => void;
|
|
1096
1128
|
snapshotSaved: (snapshot: SnapshotResult) => void;
|
|
1097
|
-
coverageCollected: (coverage: Profiler.TakePreciseCoverageReturnType) => void;
|
|
1098
1129
|
}
|
|
1099
1130
|
|
|
1100
|
-
declare const suite:
|
|
1101
|
-
declare const test:
|
|
1102
|
-
declare const describe:
|
|
1103
|
-
declare const it:
|
|
1131
|
+
declare const suite: SuiteAPI;
|
|
1132
|
+
declare const test: TestAPI;
|
|
1133
|
+
declare const describe: SuiteAPI;
|
|
1134
|
+
declare const it: TestAPI;
|
|
1104
1135
|
|
|
1105
1136
|
declare const beforeAll: (fn: SuiteHooks['beforeAll'][0], timeout?: number | undefined) => void;
|
|
1106
1137
|
declare const afterAll: (fn: SuiteHooks['afterAll'][0], timeout?: number | undefined) => void;
|
|
@@ -1185,8 +1216,7 @@ declare const spies: Set<SpyInstance<any[], any>>;
|
|
|
1185
1216
|
declare function isMockFunction(fn: any): fn is EnhancedSpy;
|
|
1186
1217
|
declare function spyOn<T, S extends Properties<Required<T>>>(obj: T, methodName: S, accesType: 'get'): SpyInstance<[], T[S]>;
|
|
1187
1218
|
declare function spyOn<T, G extends Properties<Required<T>>>(obj: T, methodName: G, accesType: 'set'): SpyInstance<[T[G]], void>;
|
|
1188
|
-
declare function spyOn<T, M extends Classes<Required<T
|
|
1189
|
-
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 ? SpyInstance<A, R> : never;
|
|
1219
|
+
declare function spyOn<T, M extends (Methods<Required<T>> | Classes<Required<T>>)>(obj: T, methodName: M): Required<T>[M] extends (...args: infer A) => infer R | (new (...args: infer A) => infer R) ? SpyInstance<A, R> : never;
|
|
1190
1220
|
declare function fn<TArgs extends any[] = any[], R = any>(): SpyInstanceFn<TArgs, R>;
|
|
1191
1221
|
declare function fn<TArgs extends any[] = any[], R = any>(implementation: (...args: TArgs) => R): SpyInstanceFn<TArgs, R>;
|
|
1192
1222
|
|
|
@@ -1312,6 +1342,10 @@ declare type Promisify<O> = {
|
|
|
1312
1342
|
[K in keyof O]: O[K] extends (...args: infer A) => infer R ? O extends R ? Promisify<O[K]> : (...args: A) => Promise<R> : O[K];
|
|
1313
1343
|
};
|
|
1314
1344
|
declare global {
|
|
1345
|
+
namespace jest {
|
|
1346
|
+
interface Matchers<R, T = {}> {
|
|
1347
|
+
}
|
|
1348
|
+
}
|
|
1315
1349
|
namespace Vi {
|
|
1316
1350
|
interface ExpectStatic extends Chai.ExpectStatic, AsymmetricMatchersContaining {
|
|
1317
1351
|
<T>(actual: T, message?: string): Vi.Assertion<T>;
|
|
@@ -1325,7 +1359,7 @@ declare global {
|
|
|
1325
1359
|
setState(state: Partial<MatcherState>): void;
|
|
1326
1360
|
not: AsymmetricMatchersContaining;
|
|
1327
1361
|
}
|
|
1328
|
-
interface JestAssertion<T = any> {
|
|
1362
|
+
interface JestAssertion<T = any> extends jest.Matchers<void, T> {
|
|
1329
1363
|
toMatchSnapshot<U extends {
|
|
1330
1364
|
[P in keyof T]: any;
|
|
1331
1365
|
}>(snapshot: Partial<U>, message?: string): void;
|
|
@@ -1385,14 +1419,14 @@ declare global {
|
|
|
1385
1419
|
toHaveNthReturnedWith<E>(nthCall: number, value: E): void;
|
|
1386
1420
|
nthReturnedWith<E>(nthCall: number, value: E): void;
|
|
1387
1421
|
}
|
|
1388
|
-
type
|
|
1389
|
-
[K in keyof A]: A[K] extends Chai.Assertion ? Assertion<any> : A[K] extends (...args: any[]) => any ? A[K] :
|
|
1422
|
+
type VitestAssertion<A> = {
|
|
1423
|
+
[K in keyof A]: A[K] extends Chai.Assertion ? Assertion<any> : A[K] extends (...args: any[]) => any ? A[K] : VitestAssertion<A[K]>;
|
|
1390
1424
|
};
|
|
1391
|
-
interface Assertion<T = any> extends
|
|
1425
|
+
interface Assertion<T = any> extends VitestAssertion<Chai.Assertion>, JestAssertion<T> {
|
|
1392
1426
|
resolves: Promisify<Assertion<T>>;
|
|
1393
1427
|
rejects: Promisify<Assertion<T>>;
|
|
1394
1428
|
}
|
|
1395
1429
|
}
|
|
1396
1430
|
}
|
|
1397
1431
|
|
|
1398
|
-
export { ApiConfig, ArgumentsType, Arrayable, Awaitable, BuiltinEnvironment, Constructable, DeepMerge, DoneCallback, EnhancedSpy, Environment, EnvironmentOptions, EnvironmentReturn, ErrorWithDiff, File, HookListener, InlineConfig, JSDOMOptions, JestMockCompatContext, MaybeMocked, MaybeMockedConstructor, MaybeMockedDeep, MergeInsertions, MockWithArgs, MockedFunction, MockedFunctionDeep, MockedObject, MockedObjectDeep, ModuleCache, ModuleGraphData, Nullable, ParsedStack, Position,
|
|
1432
|
+
export { ApiConfig, ArgumentsType, Arrayable, Awaitable, BuiltinEnvironment, C8Options, Constructable, CoverageReporter, DeepMerge, DoneCallback, EachFunction, EnhancedSpy, Environment, EnvironmentOptions, EnvironmentReturn, ErrorWithDiff, File, HookListener, InlineConfig, JSDOMOptions, JestMockCompatContext, MaybeMocked, MaybeMockedConstructor, MaybeMockedDeep, MergeInsertions, MockWithArgs, MockedFunction, MockedFunctionDeep, MockedObject, MockedObjectDeep, ModuleCache, ModuleGraphData, Nullable, ParsedStack, Position, Reporter, ResolveIdFunction, ResolvedC8Options, ResolvedConfig, RunMode, RuntimeContext, SnapshotData, SnapshotMatchOptions, SnapshotResult, SnapshotStateOptions, SnapshotSummary, SnapshotUpdateState, SpyInstance, SpyInstanceFn, Suite, SuiteAPI, SuiteCollector, SuiteFactory, SuiteHooks, Task, TaskBase, TaskResult, TaskResultPack, TaskState, Test, TestAPI, TestFunction, TransformResultWithSource, 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,12 +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-
|
|
3
|
-
export {
|
|
1
|
+
export { d as describe, i as it, c as suite, t as test, e as vi, v as vitest } from './vi-ec8761e0.js';
|
|
2
|
+
export { a as afterAll, d as afterEach, b as beforeAll, c as beforeEach, e as expect } from './index-08faa6e3.js';
|
|
3
|
+
export { fn, isMockFunction, spies, spyOn } from './jest-mock.js';
|
|
4
4
|
export { assert, default as chai, should } from 'chai';
|
|
5
|
-
import '
|
|
5
|
+
import 'util';
|
|
6
|
+
import './index-2e2d319c.js';
|
|
6
7
|
import 'tty';
|
|
7
8
|
import 'local-pkg';
|
|
8
|
-
import './source-map-
|
|
9
|
-
import './_commonjsHelpers-
|
|
10
|
-
import 'util';
|
|
9
|
+
import './source-map-799c200a.js';
|
|
10
|
+
import './_commonjsHelpers-c9e3b764.js';
|
|
11
11
|
import 'tinyspy';
|
|
12
12
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbXSwic291cmNlc0NvbnRlbnQiOltdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OyJ9
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { util } from 'chai';
|
|
2
|
+
import * as tinyspy from 'tinyspy';
|
|
3
|
+
|
|
4
|
+
const spies = new Set();
|
|
5
|
+
function isMockFunction(fn2) {
|
|
6
|
+
return typeof fn2 === "function" && "__isSpy" in fn2 && fn2.__isSpy;
|
|
7
|
+
}
|
|
8
|
+
function spyOn(obj, method, accessType) {
|
|
9
|
+
const dictionary = {
|
|
10
|
+
get: "getter",
|
|
11
|
+
set: "setter"
|
|
12
|
+
};
|
|
13
|
+
const objMethod = accessType ? { [dictionary[accessType]]: method } : method;
|
|
14
|
+
const stub = tinyspy.spyOn(obj, objMethod);
|
|
15
|
+
return enhanceSpy(stub);
|
|
16
|
+
}
|
|
17
|
+
let callOrder = 0;
|
|
18
|
+
function enhanceSpy(spy) {
|
|
19
|
+
const stub = spy;
|
|
20
|
+
let implementation;
|
|
21
|
+
let instances = [];
|
|
22
|
+
let invocations = [];
|
|
23
|
+
const mockContext = {
|
|
24
|
+
get calls() {
|
|
25
|
+
return stub.calls;
|
|
26
|
+
},
|
|
27
|
+
get instances() {
|
|
28
|
+
return instances;
|
|
29
|
+
},
|
|
30
|
+
get invocationCallOrder() {
|
|
31
|
+
return invocations;
|
|
32
|
+
},
|
|
33
|
+
get results() {
|
|
34
|
+
return stub.results.map(([callType, value]) => {
|
|
35
|
+
const type = callType === "error" ? "throw" : "return";
|
|
36
|
+
return { type, value };
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
let onceImplementations = [];
|
|
41
|
+
let name = stub.name;
|
|
42
|
+
stub.getMockName = () => name || "vi.fn()";
|
|
43
|
+
stub.mockName = (n) => {
|
|
44
|
+
name = n;
|
|
45
|
+
return stub;
|
|
46
|
+
};
|
|
47
|
+
stub.mockClear = () => {
|
|
48
|
+
stub.reset();
|
|
49
|
+
instances = [];
|
|
50
|
+
invocations = [];
|
|
51
|
+
return stub;
|
|
52
|
+
};
|
|
53
|
+
stub.mockReset = () => {
|
|
54
|
+
stub.mockClear();
|
|
55
|
+
implementation = () => void 0;
|
|
56
|
+
onceImplementations = [];
|
|
57
|
+
return stub;
|
|
58
|
+
};
|
|
59
|
+
stub.mockRestore = () => {
|
|
60
|
+
stub.mockReset();
|
|
61
|
+
implementation = void 0;
|
|
62
|
+
return stub;
|
|
63
|
+
};
|
|
64
|
+
stub.getMockImplementation = () => implementation;
|
|
65
|
+
stub.mockImplementation = (fn2) => {
|
|
66
|
+
implementation = fn2;
|
|
67
|
+
return stub;
|
|
68
|
+
};
|
|
69
|
+
stub.mockImplementationOnce = (fn2) => {
|
|
70
|
+
onceImplementations.push(fn2);
|
|
71
|
+
return stub;
|
|
72
|
+
};
|
|
73
|
+
stub.mockReturnThis = () => stub.mockImplementation(function() {
|
|
74
|
+
return this;
|
|
75
|
+
});
|
|
76
|
+
stub.mockReturnValue = (val) => stub.mockImplementation(() => val);
|
|
77
|
+
stub.mockReturnValueOnce = (val) => stub.mockImplementationOnce(() => val);
|
|
78
|
+
stub.mockResolvedValue = (val) => stub.mockImplementation(() => Promise.resolve(val));
|
|
79
|
+
stub.mockResolvedValueOnce = (val) => stub.mockImplementationOnce(() => Promise.resolve(val));
|
|
80
|
+
stub.mockRejectedValue = (val) => stub.mockImplementation(() => Promise.reject(val));
|
|
81
|
+
stub.mockRejectedValueOnce = (val) => stub.mockImplementationOnce(() => Promise.reject(val));
|
|
82
|
+
util.addProperty(stub, "mock", () => mockContext);
|
|
83
|
+
stub.willCall(function(...args) {
|
|
84
|
+
instances.push(this);
|
|
85
|
+
invocations.push(++callOrder);
|
|
86
|
+
const impl = onceImplementations.shift() || implementation || stub.getOriginal() || (() => {
|
|
87
|
+
});
|
|
88
|
+
return impl.apply(this, args);
|
|
89
|
+
});
|
|
90
|
+
spies.add(stub);
|
|
91
|
+
return stub;
|
|
92
|
+
}
|
|
93
|
+
function fn(implementation) {
|
|
94
|
+
return enhanceSpy(tinyspy.spyOn({ fn: implementation || (() => {
|
|
95
|
+
}) }, "fn"));
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export { fn, isMockFunction, spies, spyOn };
|
|
99
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamVzdC1tb2NrLmpzIiwic291cmNlcyI6WyIuLi9zcmMvaW50ZWdyYXRpb25zL2plc3QtbW9jay50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1dGlsIH0gZnJvbSAnY2hhaSdcbmltcG9ydCB0eXBlIHsgU3B5SW1wbCB9IGZyb20gJ3RpbnlzcHknXG5pbXBvcnQgKiBhcyB0aW55c3B5IGZyb20gJ3RpbnlzcHknXG5cbmludGVyZmFjZSBNb2NrUmVzdWx0UmV0dXJuPFQ+IHtcbiAgdHlwZTogJ3JldHVybidcbiAgdmFsdWU6IFRcbn1cbmludGVyZmFjZSBNb2NrUmVzdWx0SW5jb21wbGV0ZSB7XG4gIHR5cGU6ICdpbmNvbXBsZXRlJ1xuICB2YWx1ZTogdW5kZWZpbmVkXG59XG5pbnRlcmZhY2UgTW9ja1Jlc3VsdFRocm93IHtcbiAgdHlwZTogJ3Rocm93J1xuICB2YWx1ZTogYW55XG59XG5cbnR5cGUgTW9ja1Jlc3VsdDxUPiA9IE1vY2tSZXN1bHRSZXR1cm48VD4gfCBNb2NrUmVzdWx0VGhyb3cgfCBNb2NrUmVzdWx0SW5jb21wbGV0ZVxuXG5leHBvcnQgaW50ZXJmYWNlIEplc3RNb2NrQ29tcGF0Q29udGV4dDxUQXJncywgVFJldHVybnM+IHtcbiAgY2FsbHM6IFRBcmdzW11cbiAgaW5zdGFuY2VzOiBUUmV0dXJuc1tdXG4gIGludm9jYXRpb25DYWxsT3JkZXI6IG51bWJlcltdXG4gIHJlc3VsdHM6IE1vY2tSZXN1bHQ8VFJldHVybnM+W11cbn1cblxudHlwZSBQcm9jZWR1cmUgPSAoLi4uYXJnczogYW55W10pID0+IGFueVxuXG50eXBlIE1ldGhvZHM8VD4gPSB7XG4gIFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgUHJvY2VkdXJlID8gSyA6IG5ldmVyXG59W2tleW9mIFRdICYgc3RyaW5nXG50eXBlIFByb3BlcnRpZXM8VD4gPSB7XG4gIFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgUHJvY2VkdXJlID8gbmV2ZXIgOiBLXG59W2tleW9mIFRdICYgc3RyaW5nXG50eXBlIENsYXNzZXM8VD4gPSB7XG4gIFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55ID8gSyA6IG5ldmVyXG59W2tleW9mIFRdICYgc3RyaW5nXG5cbmV4cG9ydCBpbnRlcmZhY2UgU3B5SW5zdGFuY2U8VEFyZ3MgZXh0ZW5kcyBhbnlbXSA9IGFueVtdLCBUUmV0dXJucyA9IGFueT4ge1xuICBnZXRNb2NrTmFtZSgpOiBzdHJpbmdcbiAgbW9ja05hbWUobjogc3RyaW5nKTogdGhpc1xuICBtb2NrOiBKZXN0TW9ja0NvbXBhdENvbnRleHQ8VEFyZ3MsIFRSZXR1cm5zPlxuICBtb2NrQ2xlYXIoKTogdGhpc1xuICBtb2NrUmVzZXQoKTogdGhpc1xuICBtb2NrUmVzdG9yZSgpOiB2b2lkXG4gIGdldE1vY2tJbXBsZW1lbnRhdGlvbigpOiAoKC4uLmFyZ3M6IFRBcmdzKSA9PiBUUmV0dXJucykgfCB1bmRlZmluZWRcbiAgbW9ja0ltcGxlbWVudGF0aW9uKGZuOiAoKC4uLmFyZ3M6IFRBcmdzKSA9PiBUUmV0dXJucykgfCAoKCkgPT4gUHJvbWlzZTxUUmV0dXJucz4pKTogdGhpc1xuICBtb2NrSW1wbGVtZW50YXRpb25PbmNlKGZuOiAoKC4uLmFyZ3M6IFRBcmdzKSA9PiBUUmV0dXJucykgfCAoKCkgPT4gUHJvbWlzZTxUUmV0dXJucz4pKTogdGhpc1xuICBtb2NrUmV0dXJuVGhpcygpOiB0aGlzXG4gIG1vY2tSZXR1cm5WYWx1ZShvYmo6IFRSZXR1cm5zKTogdGhpc1xuICBtb2NrUmV0dXJuVmFsdWVPbmNlKG9iajogVFJldHVybnMpOiB0aGlzXG4gIG1vY2tSZXNvbHZlZFZhbHVlKG9iajogQXdhaXRlZDxUUmV0dXJucz4pOiB0aGlzXG4gIG1vY2tSZXNvbHZlZFZhbHVlT25jZShvYmo6IEF3YWl0ZWQ8VFJldHVybnM+KTogdGhpc1xuICBtb2NrUmVqZWN0ZWRWYWx1ZShvYmo6IGFueSk6IHRoaXNcbiAgbW9ja1JlamVjdGVkVmFsdWVPbmNlKG9iajogYW55KTogdGhpc1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNweUluc3RhbmNlRm48VEFyZ3MgZXh0ZW5kcyBhbnlbXSA9IGFueSwgVFJldHVybnMgPSBhbnk+IGV4dGVuZHMgU3B5SW5zdGFuY2U8VEFyZ3MsIFRSZXR1cm5zPiB7XG4gICguLi5hcmdzOiBUQXJncyk6IFRSZXR1cm5zXG59XG5cbmV4cG9ydCB0eXBlIE1heWJlTW9ja2VkQ29uc3RydWN0b3I8VD4gPSBUIGV4dGVuZHMgbmV3IChcbiAgLi4uYXJnczogQXJyYXk8YW55PlxuKSA9PiBpbmZlciBSXG4gID8gU3B5SW5zdGFuY2VGbjxDb25zdHJ1Y3RvclBhcmFtZXRlcnM8VD4sIFI+XG4gIDogVFxuZXhwb3J0IHR5cGUgTW9ja2VkRnVuY3Rpb248VCBleHRlbmRzIFByb2NlZHVyZT4gPSBNb2NrV2l0aEFyZ3M8VD4gJiB7XG4gIFtLIGluIGtleW9mIFRdOiBUW0tdO1xufVxuZXhwb3J0IHR5cGUgTW9ja2VkRnVuY3Rpb25EZWVwPFQgZXh0ZW5kcyBQcm9jZWR1cmU+ID0gTW9ja1dpdGhBcmdzPFQ+ICYgTW9ja2VkT2JqZWN0RGVlcDxUPlxuZXhwb3J0IHR5cGUgTW9ja2VkT2JqZWN0PFQ+ID0gTWF5YmVNb2NrZWRDb25zdHJ1Y3RvcjxUPiAmIHtcbiAgW0sgaW4gTWV0aG9kczxUPl06IFRbS10gZXh0ZW5kcyBQcm9jZWR1cmVcbiAgICA/IE1vY2tlZEZ1bmN0aW9uPFRbS10+XG4gICAgOiBUW0tdO1xufSAmIHsgW0sgaW4gUHJvcGVydGllczxUPl06IFRbS10gfVxuZXhwb3J0IHR5cGUgTW9ja2VkT2JqZWN0RGVlcDxUPiA9IE1heWJlTW9ja2VkQ29uc3RydWN0b3I8VD4gJiB7XG4gIFtLIGluIE1ldGhvZHM8VD5dOiBUW0tdIGV4dGVuZHMgUHJvY2VkdXJlXG4gICAgPyBNb2NrZWRGdW5jdGlvbkRlZXA8VFtLXT5cbiAgICA6IFRbS107XG59ICYgeyBbSyBpbiBQcm9wZXJ0aWVzPFQ+XTogTWF5YmVNb2NrZWREZWVwPFRbS10+IH1cblxuZXhwb3J0IHR5cGUgTWF5YmVNb2NrZWREZWVwPFQ+ID0gVCBleHRlbmRzIFByb2NlZHVyZVxuICA/IE1vY2tlZEZ1bmN0aW9uRGVlcDxUPlxuICA6IFQgZXh0ZW5kcyBvYmplY3RcbiAgICA/IE1vY2tlZE9iamVjdERlZXA8VD5cbiAgICA6IFRcblxuZXhwb3J0IHR5cGUgTWF5YmVNb2NrZWQ8VD4gPSBUIGV4dGVuZHMgUHJvY2VkdXJlXG4gID8gTW9ja2VkRnVuY3Rpb248VD5cbiAgOiBUIGV4dGVuZHMgb2JqZWN0XG4gICAgPyBNb2NrZWRPYmplY3Q8VD5cbiAgICA6IFRcblxuZXhwb3J0IHR5cGUgRW5oYW5jZWRTcHk8VEFyZ3MgZXh0ZW5kcyBhbnlbXSA9IGFueVtdLCBUUmV0dXJucyA9IGFueT4gPSBTcHlJbnN0YW5jZTxUQXJncywgVFJldHVybnM+ICYgU3B5SW1wbDxUQXJncywgVFJldHVybnM+XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9ja1dpdGhBcmdzPFQgZXh0ZW5kcyBQcm9jZWR1cmU+XG4gIGV4dGVuZHMgU3B5SW5zdGFuY2VGbjxQYXJhbWV0ZXJzPFQ+LCBSZXR1cm5UeXBlPFQ+PiB7XG4gIG5ldyAoLi4uYXJnczogVCBleHRlbmRzIG5ldyAoLi4uYXJnczogYW55KSA9PiBhbnkgPyBDb25zdHJ1Y3RvclBhcmFtZXRlcnM8VD4gOiBuZXZlcik6IFRcbiAgKC4uLmFyZ3M6IFBhcmFtZXRlcnM8VD4pOiBSZXR1cm5UeXBlPFQ+XG59XG5cbmV4cG9ydCBjb25zdCBzcGllcyA9IG5ldyBTZXQ8U3B5SW5zdGFuY2U+KClcblxuZXhwb3J0IGZ1bmN0aW9uIGlzTW9ja0Z1bmN0aW9uKGZuOiBhbnkpOiBmbiBpcyBFbmhhbmNlZFNweSB7XG4gIHJldHVybiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbidcbiAgJiYgJ19faXNTcHknIGluIGZuXG4gICYmIGZuLl9faXNTcHlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNweU9uPFQsIFMgZXh0ZW5kcyBQcm9wZXJ0aWVzPFJlcXVpcmVkPFQ+Pj4oXG4gIG9iajogVCxcbiAgbWV0aG9kTmFtZTogUyxcbiAgYWNjZXNUeXBlOiAnZ2V0Jyxcbik6IFNweUluc3RhbmNlPFtdLCBUW1NdPlxuZXhwb3J0IGZ1bmN0aW9uIHNweU9uPFQsIEcgZXh0ZW5kcyBQcm9wZXJ0aWVzPFJlcXVpcmVkPFQ+Pj4oXG4gIG9iajogVCxcbiAgbWV0aG9kTmFtZTogRyxcbiAgYWNjZXNUeXBlOiAnc2V0Jyxcbik6IFNweUluc3RhbmNlPFtUW0ddXSwgdm9pZD5cbmV4cG9ydCBmdW5jdGlvbiBzcHlPbjxULCBNIGV4dGVuZHMgKE1ldGhvZHM8UmVxdWlyZWQ8VD4+IHwgQ2xhc3NlczxSZXF1aXJlZDxUPj4pPihcbiAgb2JqOiBULFxuICBtZXRob2ROYW1lOiBNLFxuKTogUmVxdWlyZWQ8VD5bTV0gZXh0ZW5kcyAoLi4uYXJnczogaW5mZXIgQSkgPT4gaW5mZXIgUiB8IChuZXcgKC4uLmFyZ3M6IGluZmVyIEEpID0+IGluZmVyIFIpID8gU3B5SW5zdGFuY2U8QSwgUj4gOiBuZXZlclxuZXhwb3J0IGZ1bmN0aW9uIHNweU9uPFQsIEsgZXh0ZW5kcyBrZXlvZiBUPihcbiAgb2JqOiBULFxuICBtZXRob2Q6IEssXG4gIGFjY2Vzc1R5cGU/OiAnZ2V0JyB8ICdzZXQnLFxuKTogU3B5SW5zdGFuY2Uge1xuICBjb25zdCBkaWN0aW9uYXJ5ID0ge1xuICAgIGdldDogJ2dldHRlcicsXG4gICAgc2V0OiAnc2V0dGVyJyxcbiAgfSBhcyBjb25zdFxuICBjb25zdCBvYmpNZXRob2QgPSBhY2Nlc3NUeXBlID8geyBbZGljdGlvbmFyeVthY2Nlc3NUeXBlXV06IG1ldGhvZCB9IDogbWV0aG9kXG5cbiAgY29uc3Qgc3R1YiA9IHRpbnlzcHkuc3B5T24ob2JqLCBvYmpNZXRob2QgYXMgYW55KVxuXG4gIHJldHVybiBlbmhhbmNlU3B5KHN0dWIpIGFzIFNweUluc3RhbmNlXG59XG5cbmxldCBjYWxsT3JkZXIgPSAwXG5cbmZ1bmN0aW9uIGVuaGFuY2VTcHk8VEFyZ3MgZXh0ZW5kcyBhbnlbXSwgVFJldHVybnM+KFxuICBzcHk6IFNweUltcGw8VEFyZ3MsIFRSZXR1cm5zPixcbik6IFNweUluc3RhbmNlPFRBcmdzLCBUUmV0dXJucz4ge1xuICBjb25zdCBzdHViID0gc3B5IGFzIHVua25vd24gYXMgRW5oYW5jZWRTcHk8VEFyZ3MsIFRSZXR1cm5zPlxuXG4gIGxldCBpbXBsZW1lbnRhdGlvbjogKCguLi5hcmdzOiBUQXJncykgPT4gVFJldHVybnMpIHwgdW5kZWZpbmVkXG5cbiAgbGV0IGluc3RhbmNlczogYW55W10gPSBbXVxuICBsZXQgaW52b2NhdGlvbnM6IG51bWJlcltdID0gW11cblxuICBjb25zdCBtb2NrQ29udGV4dCA9IHtcbiAgICBnZXQgY2FsbHMoKSB7XG4gICAgICByZXR1cm4gc3R1Yi5jYWxsc1xuICAgIH0sXG4gICAgZ2V0IGluc3RhbmNlcygpIHtcbiAgICAgIHJldHVybiBpbnN0YW5jZXNcbiAgICB9LFxuICAgIGdldCBpbnZvY2F0aW9uQ2FsbE9yZGVyKCkge1xuICAgICAgcmV0dXJuIGludm9jYXRpb25zXG4gICAgfSxcbiAgICBnZXQgcmVzdWx0cygpIHtcbiAgICAgIHJldHVybiBzdHViLnJlc3VsdHMubWFwKChbY2FsbFR5cGUsIHZhbHVlXSkgPT4ge1xuICAgICAgICBjb25zdCB0eXBlID0gY2FsbFR5cGUgPT09ICdlcnJvcicgPyAndGhyb3cnIDogJ3JldHVybidcbiAgICAgICAgcmV0dXJuIHsgdHlwZSwgdmFsdWUgfVxuICAgICAgfSlcbiAgICB9LFxuICB9XG5cbiAgbGV0IG9uY2VJbXBsZW1lbnRhdGlvbnM6ICgoLi4uYXJnczogVEFyZ3MpID0+IFRSZXR1cm5zKVtdID0gW11cblxuICBsZXQgbmFtZTogc3RyaW5nID0gKHN0dWIgYXMgYW55KS5uYW1lXG5cbiAgc3R1Yi5nZXRNb2NrTmFtZSA9ICgpID0+IG5hbWUgfHwgJ3ZpLmZuKCknXG4gIHN0dWIubW9ja05hbWUgPSAobikgPT4ge1xuICAgIG5hbWUgPSBuXG4gICAgcmV0dXJuIHN0dWJcbiAgfVxuXG4gIHN0dWIubW9ja0NsZWFyID0gKCkgPT4ge1xuICAgIHN0dWIucmVzZXQoKVxuICAgIGluc3RhbmNlcyA9IFtdXG4gICAgaW52b2NhdGlvbnMgPSBbXVxuICAgIHJldHVybiBzdHViXG4gIH1cblxuICBzdHViLm1vY2tSZXNldCA9ICgpID0+IHtcbiAgICBzdHViLm1vY2tDbGVhcigpXG4gICAgaW1wbGVtZW50YXRpb24gPSAoKSA9PiB1bmRlZmluZWQgYXMgdW5rbm93biBhcyBUUmV0dXJuc1xuICAgIG9uY2VJbXBsZW1lbnRhdGlvbnMgPSBbXVxuICAgIHJldHVybiBzdHViXG4gIH1cblxuICBzdHViLm1vY2tSZXN0b3JlID0gKCkgPT4ge1xuICAgIHN0dWIubW9ja1Jlc2V0KClcbiAgICBpbXBsZW1lbnRhdGlvbiA9IHVuZGVmaW5lZFxuICAgIHJldHVybiBzdHViXG4gIH1cblxuICBzdHViLmdldE1vY2tJbXBsZW1lbnRhdGlvbiA9ICgpID0+IGltcGxlbWVudGF0aW9uXG4gIHN0dWIubW9ja0ltcGxlbWVudGF0aW9uID0gKGZuOiAoLi4uYXJnczogVEFyZ3MpID0+IFRSZXR1cm5zKSA9PiB7XG4gICAgaW1wbGVtZW50YXRpb24gPSBmblxuICAgIHJldHVybiBzdHViXG4gIH1cblxuICBzdHViLm1vY2tJbXBsZW1lbnRhdGlvbk9uY2UgPSAoZm46ICguLi5hcmdzOiBUQXJncykgPT4gVFJldHVybnMpID0+IHtcbiAgICBvbmNlSW1wbGVtZW50YXRpb25zLnB1c2goZm4pXG4gICAgcmV0dXJuIHN0dWJcbiAgfVxuXG4gIHN0dWIubW9ja1JldHVyblRoaXMgPSAoKSA9PlxuICAgIHN0dWIubW9ja0ltcGxlbWVudGF0aW9uKGZ1bmN0aW9uKHRoaXM6IFRSZXR1cm5zKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0pXG5cbiAgc3R1Yi5tb2NrUmV0dXJuVmFsdWUgPSAodmFsOiBUUmV0dXJucykgPT4gc3R1Yi5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gdmFsKVxuICBzdHViLm1vY2tSZXR1cm5WYWx1ZU9uY2UgPSAodmFsOiBUUmV0dXJucykgPT4gc3R1Yi5tb2NrSW1wbGVtZW50YXRpb25PbmNlKCgpID0+IHZhbClcblxuICBzdHViLm1vY2tSZXNvbHZlZFZhbHVlID0gKHZhbDogQXdhaXRlZDxUUmV0dXJucz4pID0+XG4gICAgc3R1Yi5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gUHJvbWlzZS5yZXNvbHZlKHZhbCBhcyBUUmV0dXJucykpXG5cbiAgc3R1Yi5tb2NrUmVzb2x2ZWRWYWx1ZU9uY2UgPSAodmFsOiBBd2FpdGVkPFRSZXR1cm5zPikgPT5cbiAgICBzdHViLm1vY2tJbXBsZW1lbnRhdGlvbk9uY2UoKCkgPT4gUHJvbWlzZS5yZXNvbHZlKHZhbCBhcyBUUmV0dXJucykpXG5cbiAgc3R1Yi5tb2NrUmVqZWN0ZWRWYWx1ZSA9ICh2YWw6IHVua25vd24pID0+XG4gICAgc3R1Yi5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gUHJvbWlzZS5yZWplY3QodmFsKSlcblxuICBzdHViLm1vY2tSZWplY3RlZFZhbHVlT25jZSA9ICh2YWw6IHVua25vd24pID0+XG4gICAgc3R1Yi5tb2NrSW1wbGVtZW50YXRpb25PbmNlKCgpID0+IFByb21pc2UucmVqZWN0KHZhbCkpXG5cbiAgdXRpbC5hZGRQcm9wZXJ0eShzdHViLCAnbW9jaycsICgpID0+IG1vY2tDb250ZXh0KVxuXG4gIHN0dWIud2lsbENhbGwoZnVuY3Rpb24odGhpczogdW5rbm93biwgLi4uYXJncykge1xuICAgIGluc3RhbmNlcy5wdXNoKHRoaXMpXG4gICAgaW52b2NhdGlvbnMucHVzaCgrK2NhbGxPcmRlcilcbiAgICBjb25zdCBpbXBsID0gb25jZUltcGxlbWVudGF0aW9ucy5zaGlmdCgpIHx8IGltcGxlbWVudGF0aW9uIHx8IHN0dWIuZ2V0T3JpZ2luYWwoKSB8fCAoKCkgPT4ge30pXG4gICAgcmV0dXJuIGltcGwuYXBwbHkodGhpcywgYXJncylcbiAgfSlcblxuICBzcGllcy5hZGQoc3R1YilcblxuICByZXR1cm4gc3R1YiBhcyBhbnlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZuPFRBcmdzIGV4dGVuZHMgYW55W10gPSBhbnlbXSwgUiA9IGFueT4oKTogU3B5SW5zdGFuY2VGbjxUQXJncywgUj5cbmV4cG9ydCBmdW5jdGlvbiBmbjxUQXJncyBleHRlbmRzIGFueVtdID0gYW55W10sIFIgPSBhbnk+KFxuICBpbXBsZW1lbnRhdGlvbjogKC4uLmFyZ3M6IFRBcmdzKSA9PiBSXG4pOiBTcHlJbnN0YW5jZUZuPFRBcmdzLCBSPlxuZXhwb3J0IGZ1bmN0aW9uIGZuPFRBcmdzIGV4dGVuZHMgYW55W10gPSBhbnlbXSwgUiA9IGFueT4oXG4gIGltcGxlbWVudGF0aW9uPzogKC4uLmFyZ3M6IFRBcmdzKSA9PiBSLFxuKTogU3B5SW5zdGFuY2VGbjxUQXJncywgUj4ge1xuICByZXR1cm4gZW5oYW5jZVNweSh0aW55c3B5LnNweU9uKHsgZm46IGltcGxlbWVudGF0aW9uIHx8ICgoKSA9PiB7fSkgfSwgJ2ZuJykpIGFzIHVua25vd24gYXMgU3B5SW5zdGFuY2VGblxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVZLE1BQUMsS0FBSyxHQUFHLElBQUksR0FBRyxHQUFHO0FBQ3hCLFNBQVMsY0FBYyxDQUFDLEdBQUcsRUFBRTtBQUNwQyxFQUFFLE9BQU8sT0FBTyxHQUFHLEtBQUssVUFBVSxJQUFJLFNBQVMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQztBQUN0RSxDQUFDO0FBQ00sU0FBUyxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUU7QUFDL0MsRUFBRSxNQUFNLFVBQVUsR0FBRztBQUNyQixJQUFJLEdBQUcsRUFBRSxRQUFRO0FBQ2pCLElBQUksR0FBRyxFQUFFLFFBQVE7QUFDakIsR0FBRyxDQUFDO0FBQ0osRUFBRSxNQUFNLFNBQVMsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLEVBQUUsR0FBRyxNQUFN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
|