vitest 0.0.135 → 0.0.139
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/cli.js +6 -6
- package/dist/{diff-04ac7bc9.js → diff-5dfc7eb4.js} +2 -4
- package/dist/entry.js +21 -10
- package/dist/{global-3d90eb55.js → global-f971f18f.js} +4 -4
- package/dist/index-21eabd8a.js +8727 -0
- package/dist/{index-6397bdab.js → index-314cb4d9.js} +3 -3
- package/dist/index-64aafe4b.js +1 -1
- package/dist/index-8cb72062.js +9255 -0
- package/dist/index.d.ts +58 -22
- package/dist/index.js +3 -3
- package/dist/jest-mock-6c629944.js +95 -0
- package/dist/node.d.ts +42 -7
- package/dist/node.js +3 -3
- package/dist/{setup-a9c8349a.js → setup-7a362fbc.js} +9 -10
- package/dist/{vi-2509fe43.js → vi-567ba572.js} +2 -2
- package/dist/worker.js +25 -33
- package/package.json +5 -5
- package/dist/externalize-b979f524.js +0 -9259
- package/dist/index-9e44ed60.js +0 -8544
- package/dist/index-e909c175.js +0 -63
- package/dist/jest-mock-30625866.js +0 -94
package/dist/index.d.ts
CHANGED
|
@@ -98,7 +98,7 @@ declare const RECEIVED_COLOR: Formatter;
|
|
|
98
98
|
declare const INVERTED_COLOR: Formatter;
|
|
99
99
|
declare const BOLD_WEIGHT: Formatter;
|
|
100
100
|
declare const DIM_COLOR: Formatter;
|
|
101
|
-
|
|
101
|
+
interface MatcherHintOptions {
|
|
102
102
|
comment?: string;
|
|
103
103
|
expectedColor?: Formatter;
|
|
104
104
|
isDirectExpectCall?: boolean;
|
|
@@ -107,12 +107,12 @@ declare type MatcherHintOptions = {
|
|
|
107
107
|
receivedColor?: Formatter;
|
|
108
108
|
secondArgument?: string;
|
|
109
109
|
secondArgumentColor?: Formatter;
|
|
110
|
-
}
|
|
110
|
+
}
|
|
111
111
|
declare function matcherHint(matcherName: string, received?: string, expected?: string, options?: MatcherHintOptions): string;
|
|
112
112
|
declare const stringify: (object: unknown, maxDepth?: number) => string;
|
|
113
113
|
declare const printReceived: (object: unknown) => string;
|
|
114
114
|
declare const printExpected: (value: unknown) => string;
|
|
115
|
-
|
|
115
|
+
interface DiffOptions {
|
|
116
116
|
aAnnotation?: string;
|
|
117
117
|
aColor?: Formatter;
|
|
118
118
|
aIndicator?: string;
|
|
@@ -131,7 +131,7 @@ declare type DiffOptions = {
|
|
|
131
131
|
omitAnnotationLines?: boolean;
|
|
132
132
|
patchColor?: Formatter;
|
|
133
133
|
compareKeys?: any;
|
|
134
|
-
}
|
|
134
|
+
}
|
|
135
135
|
declare function diff(a: any, b: any, options?: DiffOptions): string;
|
|
136
136
|
|
|
137
137
|
declare const jestMatcherUtils_EXPECTED_COLOR: typeof EXPECTED_COLOR;
|
|
@@ -164,7 +164,7 @@ declare namespace jestMatcherUtils {
|
|
|
164
164
|
}
|
|
165
165
|
|
|
166
166
|
declare type Tester = (a: any, b: any) => boolean | undefined;
|
|
167
|
-
|
|
167
|
+
interface MatcherState {
|
|
168
168
|
assertionCalls: number;
|
|
169
169
|
currentTestName?: string;
|
|
170
170
|
dontThrow?: () => void;
|
|
@@ -183,21 +183,19 @@ declare type MatcherState = {
|
|
|
183
183
|
iterableEquality: Tester;
|
|
184
184
|
subsetEquality: Tester;
|
|
185
185
|
};
|
|
186
|
-
}
|
|
187
|
-
|
|
186
|
+
}
|
|
187
|
+
interface SyncExpectationResult {
|
|
188
188
|
pass: boolean;
|
|
189
189
|
message: () => string;
|
|
190
190
|
actual?: any;
|
|
191
191
|
expected?: any;
|
|
192
|
-
}
|
|
192
|
+
}
|
|
193
193
|
declare type AsyncExpectationResult = Promise<SyncExpectationResult>;
|
|
194
194
|
declare type ExpectationResult = SyncExpectationResult | AsyncExpectationResult;
|
|
195
|
-
|
|
195
|
+
interface RawMatcherFn<T extends MatcherState = MatcherState> {
|
|
196
196
|
(this: T, received: any, expected: any, options?: any): ExpectationResult;
|
|
197
|
-
}
|
|
198
|
-
declare type MatchersObject<T extends MatcherState = MatcherState> =
|
|
199
|
-
[id: string]: RawMatcherFn<T>;
|
|
200
|
-
};
|
|
197
|
+
}
|
|
198
|
+
declare type MatchersObject<T extends MatcherState = MatcherState> = Record<string, RawMatcherFn<T>>;
|
|
201
199
|
|
|
202
200
|
interface AsymmetricMatcherInterface {
|
|
203
201
|
asymmetricMatch(other: unknown): boolean;
|
|
@@ -307,6 +305,7 @@ declare class Vitest {
|
|
|
307
305
|
visitedFilesMap: Map<string, RawSourceMap>;
|
|
308
306
|
runningPromise?: Promise<void>;
|
|
309
307
|
closingPromise?: Promise<void>;
|
|
308
|
+
externalizeCache: Map<string, Promise<string | false>>;
|
|
310
309
|
isFirstRun: boolean;
|
|
311
310
|
restartsCount: number;
|
|
312
311
|
private _onRestartListeners;
|
|
@@ -327,6 +326,7 @@ declare class Vitest {
|
|
|
327
326
|
report<T extends keyof Reporter>(name: T, ...args: ArgumentsType<Reporter[T]>): Promise<void>;
|
|
328
327
|
globTestFiles(filters?: string[]): Promise<string[]>;
|
|
329
328
|
isTargetFile(id: string): boolean;
|
|
329
|
+
shouldExternalize(id: string): Promise<string | false>;
|
|
330
330
|
onServerRestarted(fn: () => void): void;
|
|
331
331
|
}
|
|
332
332
|
|
|
@@ -386,9 +386,14 @@ declare class VerboseReporter extends DefaultReporter {
|
|
|
386
386
|
}
|
|
387
387
|
|
|
388
388
|
declare class TapReporter implements Reporter {
|
|
389
|
-
|
|
389
|
+
protected ctx: Vitest;
|
|
390
|
+
onInit(ctx: Vitest): void;
|
|
391
|
+
protected logTasks(tasks: Task[], currentIdent: string): void;
|
|
392
|
+
onFinished(files?: File[]): Promise<void>;
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
declare class TapFlatReporter extends TapReporter {
|
|
390
396
|
onInit(ctx: Vitest): void;
|
|
391
|
-
logTasks(tasks: Task[], currentIdent: string): void;
|
|
392
397
|
onFinished(files?: File[]): Promise<void>;
|
|
393
398
|
}
|
|
394
399
|
|
|
@@ -397,6 +402,7 @@ declare const ReportersMap: {
|
|
|
397
402
|
verbose: typeof VerboseReporter;
|
|
398
403
|
dot: typeof DotReporter;
|
|
399
404
|
tap: typeof TapReporter;
|
|
405
|
+
'tap-flat': typeof TapFlatReporter;
|
|
400
406
|
};
|
|
401
407
|
declare type BuiltinReporters = keyof typeof ReportersMap;
|
|
402
408
|
|
|
@@ -660,19 +666,19 @@ interface Reporter {
|
|
|
660
666
|
|
|
661
667
|
declare type SnapshotData = Record<string, string>;
|
|
662
668
|
declare type SnapshotUpdateState = 'all' | 'new' | 'none';
|
|
663
|
-
|
|
669
|
+
interface SnapshotStateOptions {
|
|
664
670
|
updateSnapshot: SnapshotUpdateState;
|
|
665
671
|
expand?: boolean;
|
|
666
672
|
snapshotFormat?: OptionsReceived;
|
|
667
|
-
}
|
|
668
|
-
|
|
673
|
+
}
|
|
674
|
+
interface SnapshotMatchOptions {
|
|
669
675
|
testName: string;
|
|
670
676
|
received: unknown;
|
|
671
677
|
key?: string;
|
|
672
678
|
inlineSnapshot?: string;
|
|
673
679
|
isInline: boolean;
|
|
674
680
|
error?: Error;
|
|
675
|
-
}
|
|
681
|
+
}
|
|
676
682
|
interface SnapshotResult {
|
|
677
683
|
filepath: string;
|
|
678
684
|
added: number;
|
|
@@ -886,7 +892,33 @@ interface InlineConfig {
|
|
|
886
892
|
* Open Vitest UI
|
|
887
893
|
* @internal WIP
|
|
888
894
|
*/
|
|
889
|
-
|
|
895
|
+
ui?: boolean;
|
|
896
|
+
/**
|
|
897
|
+
* Base url for the UI
|
|
898
|
+
*
|
|
899
|
+
* @default '/__vitest__/'
|
|
900
|
+
*/
|
|
901
|
+
uiBase?: string;
|
|
902
|
+
/**
|
|
903
|
+
* Determine the transform method of modules
|
|
904
|
+
*/
|
|
905
|
+
transformMode?: {
|
|
906
|
+
/**
|
|
907
|
+
* Use SSR transform pipeline for the specified files.
|
|
908
|
+
* Vite plugins will receive `ssr: true` flag when processing those files.
|
|
909
|
+
*
|
|
910
|
+
* @default [/\.([cm]?[jt]sx?|json)$/]
|
|
911
|
+
*/
|
|
912
|
+
ssr?: RegExp[];
|
|
913
|
+
/**
|
|
914
|
+
* First do a normal transform pipeline (targeting browser),
|
|
915
|
+
* then then do a SSR rewrite to run the code in Node.
|
|
916
|
+
* Vite plugins will receive `ssr: false` flag when processing those files.
|
|
917
|
+
*
|
|
918
|
+
* @default other than `ssr`
|
|
919
|
+
*/
|
|
920
|
+
web?: RegExp[];
|
|
921
|
+
};
|
|
890
922
|
}
|
|
891
923
|
interface UserConfig extends InlineConfig {
|
|
892
924
|
/**
|
|
@@ -937,8 +969,12 @@ interface WorkerContext {
|
|
|
937
969
|
files: string[];
|
|
938
970
|
invalidates?: string[];
|
|
939
971
|
}
|
|
972
|
+
declare type FetchFunction = (id: string) => Promise<{
|
|
973
|
+
code?: string;
|
|
974
|
+
externalize?: string;
|
|
975
|
+
}>;
|
|
940
976
|
interface WorkerRPC {
|
|
941
|
-
fetch:
|
|
977
|
+
fetch: FetchFunction;
|
|
942
978
|
getSourceMap: (id: string, force?: boolean) => Promise<RawSourceMap | undefined>;
|
|
943
979
|
onWorkerExit: (code?: number) => void;
|
|
944
980
|
onUserLog: (log: UserConsoleLog) => void;
|
|
@@ -1228,4 +1264,4 @@ declare global {
|
|
|
1228
1264
|
}
|
|
1229
1265
|
}
|
|
1230
1266
|
|
|
1231
|
-
export { ApiConfig, ArgumentsType, Arrayable, Awaitable, BuiltinEnvironment, DoneCallback, EnhancedSpy, Environment, EnvironmentOptions, EnvironmentReturn, ErrorWithDiff, File, HookListener, InlineConfig, JSDOMOptions, JestMockCompat, JestMockCompatContext, JestMockCompatFn, MaybeMocked, MaybeMockedConstructor, MaybeMockedDeep, MockWithArgs, MockedFunction, MockedFunctionDeep, MockedObject, MockedObjectDeep, ModuleCache, ModuleGraphData, 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, TransformResultWithSource, UncheckedSnapshot, UserConfig, UserConsoleLog, WebSocketEvents, WebSocketHandlers, WorkerContext, WorkerRPC, afterAll, afterEach, beforeAll, beforeEach, describe, expect, fn, isMockFunction, it, spies, spyOn, suite, test, vi, vitest };
|
|
1267
|
+
export { ApiConfig, ArgumentsType, Arrayable, Awaitable, BuiltinEnvironment, DoneCallback, EnhancedSpy, Environment, EnvironmentOptions, EnvironmentReturn, ErrorWithDiff, FetchFunction, File, HookListener, InlineConfig, JSDOMOptions, JestMockCompat, JestMockCompatContext, JestMockCompatFn, MaybeMocked, MaybeMockedConstructor, MaybeMockedDeep, MockWithArgs, MockedFunction, MockedFunctionDeep, MockedObject, MockedObjectDeep, ModuleCache, ModuleGraphData, 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, 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,6 +1,6 @@
|
|
|
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 { f as fn, i as isMockFunction, s as spies, a as spyOn } from './jest-mock-
|
|
1
|
+
export { d as describe, i as it, c as suite, t as test, e as vi, v as vitest } from './vi-567ba572.js';
|
|
2
|
+
export { a as afterAll, d as afterEach, b as beforeAll, c as beforeEach, e as expect } from './index-314cb4d9.js';
|
|
3
|
+
export { f as fn, i as isMockFunction, s as spies, a as spyOn } from './jest-mock-6c629944.js';
|
|
4
4
|
export { assert, default as chai, should } from 'chai';
|
|
5
5
|
import './index-64aafe4b.js';
|
|
6
6
|
import 'url';
|
|
@@ -0,0 +1,95 @@
|
|
|
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
|
+
function enhanceSpy(spy) {
|
|
18
|
+
const stub = spy;
|
|
19
|
+
let implementation;
|
|
20
|
+
let instances = [];
|
|
21
|
+
const mockContext = {
|
|
22
|
+
get calls() {
|
|
23
|
+
return stub.calls;
|
|
24
|
+
},
|
|
25
|
+
get instances() {
|
|
26
|
+
return instances;
|
|
27
|
+
},
|
|
28
|
+
get invocationCallOrder() {
|
|
29
|
+
return [];
|
|
30
|
+
},
|
|
31
|
+
get results() {
|
|
32
|
+
return stub.results.map(([callType, value]) => {
|
|
33
|
+
const type = callType === "error" ? "throw" : "return";
|
|
34
|
+
return { type, value };
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
let onceImplementations = [];
|
|
39
|
+
let name = stub.name;
|
|
40
|
+
stub.getMockName = () => name || "vi.fn()";
|
|
41
|
+
stub.mockName = (n) => {
|
|
42
|
+
name = n;
|
|
43
|
+
return stub;
|
|
44
|
+
};
|
|
45
|
+
stub.mockClear = () => {
|
|
46
|
+
stub.reset();
|
|
47
|
+
instances = [];
|
|
48
|
+
return stub;
|
|
49
|
+
};
|
|
50
|
+
stub.mockReset = () => {
|
|
51
|
+
stub.mockClear();
|
|
52
|
+
implementation = () => void 0;
|
|
53
|
+
onceImplementations = [];
|
|
54
|
+
return stub;
|
|
55
|
+
};
|
|
56
|
+
stub.mockRestore = () => {
|
|
57
|
+
stub.mockReset();
|
|
58
|
+
implementation = void 0;
|
|
59
|
+
return stub;
|
|
60
|
+
};
|
|
61
|
+
stub.getMockImplementation = () => implementation;
|
|
62
|
+
stub.mockImplementation = (fn2) => {
|
|
63
|
+
implementation = fn2;
|
|
64
|
+
return stub;
|
|
65
|
+
};
|
|
66
|
+
stub.mockImplementationOnce = (fn2) => {
|
|
67
|
+
onceImplementations.push(fn2);
|
|
68
|
+
return stub;
|
|
69
|
+
};
|
|
70
|
+
stub.mockReturnThis = () => stub.mockImplementation(function() {
|
|
71
|
+
return this;
|
|
72
|
+
});
|
|
73
|
+
stub.mockReturnValue = (val) => stub.mockImplementation(() => val);
|
|
74
|
+
stub.mockReturnValueOnce = (val) => stub.mockImplementationOnce(() => val);
|
|
75
|
+
stub.mockResolvedValue = (val) => stub.mockImplementation(() => Promise.resolve(val));
|
|
76
|
+
stub.mockResolvedValueOnce = (val) => stub.mockImplementationOnce(() => Promise.resolve(val));
|
|
77
|
+
stub.mockRejectedValue = (val) => stub.mockImplementation(() => Promise.reject(val));
|
|
78
|
+
stub.mockRejectedValueOnce = (val) => stub.mockImplementationOnce(() => Promise.reject(val));
|
|
79
|
+
util.addProperty(stub, "mock", () => mockContext);
|
|
80
|
+
stub.willCall(function(...args) {
|
|
81
|
+
instances.push(this);
|
|
82
|
+
const impl = onceImplementations.shift() || implementation || stub.getOriginal() || (() => {
|
|
83
|
+
});
|
|
84
|
+
return impl.apply(this, args);
|
|
85
|
+
});
|
|
86
|
+
spies.add(stub);
|
|
87
|
+
return stub;
|
|
88
|
+
}
|
|
89
|
+
function fn(implementation) {
|
|
90
|
+
return enhanceSpy(tinyspy.spyOn({ fn: implementation || (() => {
|
|
91
|
+
}) }, "fn"));
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export { spyOn as a, fn as f, isMockFunction as i, spies as s };
|
|
95
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamVzdC1tb2NrLTZjNjI5OTQ0LmpzIiwic291cmNlcyI6WyIuLi9zcmMvaW50ZWdyYXRpb25zL2plc3QtbW9jay50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1dGlsIH0gZnJvbSAnY2hhaSdcbmltcG9ydCB0eXBlIHsgU3B5SW1wbCB9IGZyb20gJ3RpbnlzcHknXG5pbXBvcnQgKiBhcyB0aW55c3B5IGZyb20gJ3RpbnlzcHknXG5cbmludGVyZmFjZSBNb2NrUmVzdWx0UmV0dXJuPFQ+IHtcbiAgdHlwZTogJ3JldHVybidcbiAgdmFsdWU6IFRcbn1cbmludGVyZmFjZSBNb2NrUmVzdWx0SW5jb21wbGV0ZSB7XG4gIHR5cGU6ICdpbmNvbXBsZXRlJ1xuICB2YWx1ZTogdW5kZWZpbmVkXG59XG5pbnRlcmZhY2UgTW9ja1Jlc3VsdFRocm93IHtcbiAgdHlwZTogJ3Rocm93J1xuICB2YWx1ZTogYW55XG59XG5cbnR5cGUgTW9ja1Jlc3VsdDxUPiA9IE1vY2tSZXN1bHRSZXR1cm48VD4gfCBNb2NrUmVzdWx0VGhyb3cgfCBNb2NrUmVzdWx0SW5jb21wbGV0ZVxuXG5leHBvcnQgaW50ZXJmYWNlIEplc3RNb2NrQ29tcGF0Q29udGV4dDxUQXJncywgVFJldHVybnM+IHtcbiAgY2FsbHM6IFRBcmdzW11cbiAgaW5zdGFuY2VzOiBUUmV0dXJuc1tdXG4gIC8vIFRPRE86IGRvZXNuJ3Qgd29ya1xuICBpbnZvY2F0aW9uQ2FsbE9yZGVyOiBudW1iZXJbXVxuICByZXN1bHRzOiBNb2NrUmVzdWx0PFRSZXR1cm5zPltdXG59XG5cbnR5cGUgUHJvY2VkdXJlID0gKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnlcblxudHlwZSBNZXRob2RzPFQ+ID0ge1xuICBbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIFByb2NlZHVyZSA/IEsgOiBuZXZlclxufVtrZXlvZiBUXSAmIHN0cmluZ1xudHlwZSBQcm9wZXJ0aWVzPFQ+ID0ge1xuICBbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIFByb2NlZHVyZSA/IG5ldmVyIDogS1xufVtrZXlvZiBUXSAmIHN0cmluZ1xudHlwZSBDbGFzc2VzPFQ+ID0ge1xuICBbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIG5ldyAoLi4uYXJnczogYW55W10pID0+IGFueSA/IEsgOiBuZXZlclxufVtrZXlvZiBUXSAmIHN0cmluZ1xuXG5leHBvcnQgaW50ZXJmYWNlIEplc3RNb2NrQ29tcGF0PFRBcmdzIGV4dGVuZHMgYW55W10gPSBhbnlbXSwgVFJldHVybnMgPSBhbnk+IHtcbiAgZ2V0TW9ja05hbWUoKTogc3RyaW5nXG4gIG1vY2tOYW1lKG46IHN0cmluZyk6IHRoaXNcbiAgbW9jazogSmVzdE1vY2tDb21wYXRDb250ZXh0PFRBcmdzLCBUUmV0dXJucz5cbiAgbW9ja0NsZWFyKCk6IHRoaXNcbiAgbW9ja1Jlc2V0KCk6IHRoaXNcbiAgbW9ja1Jlc3RvcmUoKTogdm9pZFxuICBnZXRNb2NrSW1wbGVtZW50YXRpb24oKTogKCguLi5hcmdzOiBUQXJncykgPT4gVFJldHVybnMpIHwgdW5kZWZpbmVkXG4gIG1vY2tJbXBsZW1lbnRhdGlvbihmbjogKCguLi5hcmdzOiBUQXJncykgPT4gVFJldHVybnMpIHwgKCgpID0+IFByb21pc2U8VFJldHVybnM+KSk6IHRoaXNcbiAgbW9ja0ltcGxlbWVudGF0aW9uT25jZShmbjogKCguLi5hcmdzOiBUQXJncykgPT4gVFJldHVybnMpIHwgKCgpID0+IFByb21pc2U8VFJldHVybnM+KSk6IHRoaXNcbiAgbW9ja1JldHVyblRoaXMoKTogdGhpc1xuICBtb2NrUmV0dXJuVmFsdWUob2JqOiBUUmV0dXJucyk6IHRoaXNcbiAgbW9ja1JldHVyblZhbHVlT25jZShvYmo6IFRSZXR1cm5zKTogdGhpc1xuICBtb2NrUmVzb2x2ZWRWYWx1ZShvYmo6IEF3YWl0ZWQ8VFJldHVybnM+KTogdGhpc1xuICBtb2NrUmVzb2x2ZWRWYWx1ZU9uY2Uob2JqOiBBd2FpdGVkPFRSZXR1cm5zPik6IHRoaXNcbiAgbW9ja1JlamVjdGVkVmFsdWUob2JqOiBhbnkpOiB0aGlzXG4gIG1vY2tSZWplY3RlZFZhbHVlT25jZShvYmo6IGFueSk6IHRoaXNcbn1cblxuZXhwb3J0IGludGVyZmFjZSBKZXN0TW9ja0NvbXBhdEZuPFRBcmdzIGV4dGVuZHMgYW55W10gPSBhbnksIFRSZXR1cm5zID0gYW55PiBleHRlbmRzIEplc3RNb2NrQ29tcGF0PFRBcmdzLCBUUmV0dXJucz4ge1xuICAoLi4uYXJnczogVEFyZ3MpOiBUUmV0dXJuc1xufVxuXG5leHBvcnQgdHlwZSBNYXliZU1vY2tlZENvbnN0cnVjdG9yPFQ+ID0gVCBleHRlbmRzIG5ldyAoXG4gIC4uLmFyZ3M6IEFycmF5PGFueT5cbikgPT4gaW5mZXIgUlxuICA/IEplc3RNb2NrQ29tcGF0Rm48Q29uc3RydWN0b3JQYXJhbWV0ZXJzPFQ+LCBSPlxuICA6IFRcbmV4cG9ydCB0eXBlIE1vY2tlZEZ1bmN0aW9uPFQgZXh0ZW5kcyBQcm9jZWR1cmU+ID0gTW9ja1dpdGhBcmdzPFQ+ICYge1xuICBbSyBpbiBrZXlvZiBUXTogVFtLXTtcbn1cbmV4cG9ydCB0eXBlIE1vY2tlZEZ1bmN0aW9uRGVlcDxUIGV4dGVuZHMgUHJvY2VkdXJlPiA9IE1vY2tXaXRoQXJnczxUPiAmIE1vY2tlZE9iamVjdERlZXA8VD5cbmV4cG9ydCB0eXBlIE1vY2tlZE9iamVjdDxUPiA9IE1heWJlTW9ja2VkQ29uc3RydWN0b3I8VD4gJiB7XG4gIFtLIGluIE1ldGhvZHM8VD5dOiBUW0tdIGV4dGVuZHMgUHJvY2VkdXJlXG4gICAgPyBNb2NrZWRGdW5jdGlvbjxUW0tdPlxuICAgIDogVFtLXTtcbn0gJiB7IFtLIGluIFByb3BlcnRpZXM8VD5dOiBUW0tdIH1cbmV4cG9ydCB0eXBlIE1vY2tlZE9iamVjdERlZXA8VD4gPSBNYXliZU1vY2tlZENvbnN0cnVjdG9yPFQ+ICYge1xuICBbSyBpbiBNZXRob2RzPFQ+XTogVFtLXSBleHRlbmRzIFByb2NlZHVyZVxuICAgID8gTW9ja2VkRnVuY3Rpb25EZWVwPFRbS10+XG4gICAgOiBUW0tdO1xufSAmIHsgW0sgaW4gUHJvcGVydGllczxUPl06IE1heWJlTW9ja2VkRGVlcDxUW0tdPiB9XG5cbmV4cG9ydCB0eXBlIE1heWJlTW9ja2VkRGVlcDxUPiA9IFQgZXh0ZW5kcyBQcm9jZWR1cmVcbiAgPyBNb2NrZWRGdW5jdGlvbkRlZXA8VD5cbiAgOiBUIGV4dGVuZHMgb2JqZWN0XG4gICAgPyBNb2NrZWRPYmplY3REZWVwPFQ+XG4gICAgOiBUXG5cbmV4cG9ydCB0eXBlIE1heWJlTW9ja2VkPFQ+ID0gVCBleHRlbmRzIFByb2NlZHVyZVxuICA/IE1vY2tlZEZ1bmN0aW9uPFQ+XG4gIDogVCBleHRlbmRzIG9iamVjdFxuICAgID8gTW9ja2VkT2JqZWN0PFQ+XG4gICAgOiBUXG5cbmV4cG9ydCB0eXBlIEVuaGFuY2VkU3B5PFRBcmdzIGV4dGVuZHMgYW55W10gPSBhbnlbXSwgVFJldHVybnMgPSBhbnk+ID0gSmVzdE1vY2tDb21wYXQ8VEFyZ3MsIFRSZXR1cm5zPiAmIFNweUltcGw8VEFyZ3MsIFRSZXR1cm5zPlxuXG5leHBvcnQgaW50ZXJmYWNlIE1vY2tXaXRoQXJnczxUIGV4dGVuZHMgUHJvY2VkdXJlPlxuICBleHRlbmRzIEplc3RNb2NrQ29tcGF0Rm48UGFyYW1ldGVyczxUPiwgUmV0dXJuVHlwZTxUPj4ge1xuICBuZXcgKC4uLmFyZ3M6IFQgZXh0ZW5kcyBuZXcgKC4uLmFyZ3M6IGFueSkgPT4gYW55ID8gQ29uc3RydWN0b3JQYXJhbWV0ZXJzPFQ+IDogbmV2ZXIpOiBUXG4gICguLi5hcmdzOiBQYXJhbWV0ZXJzPFQ+KTogUmV0dXJuVHlwZTxUPlxufVxuXG5leHBvcnQgY29uc3Qgc3BpZXMgPSBuZXcgU2V0PEplc3RNb2NrQ29tcGF0PigpXG5cbmV4cG9ydCBmdW5jdGlvbiBpc01vY2tGdW5jdGlvbihmbjogYW55KTogZm4gaXMgRW5oYW5jZWRTcHkge1xuICByZXR1cm4gdHlwZW9mIGZuID09PSAnZnVuY3Rpb24nXG4gICYmICdfX2lzU3B5JyBpbiBmblxuICAmJiBmbi5fX2lzU3B5XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzcHlPbjxULCBTIGV4dGVuZHMgUHJvcGVydGllczxSZXF1aXJlZDxUPj4+KFxuICBvYmo6IFQsXG4gIG1ldGhvZE5hbWU6IFMsXG4gIGFjY2VzVHlwZTogJ2dldCcsXG4pOiBKZXN0TW9ja0NvbXBhdDxbVFtTXV0sIHZvaWQ+XG5leHBvcnQgZnVuY3Rpb24gc3B5T248VCwgRyBleHRlbmRzIFByb3BlcnRpZXM8UmVxdWlyZWQ8VD4+PihcbiAgb2JqOiBULFxuICBtZXRob2ROYW1lOiBHLFxuICBhY2Nlc1R5cGU6ICdzZXQnLFxuKTogSmVzdE1vY2tDb21wYXQ8W10sIFRbR10+XG5leHBvcnQgZnVuY3Rpb24gc3B5T248VCwgTSBleHRlbmRzIENsYXNzZXM8UmVxdWlyZWQ8VD4+PihcbiAgb2JqZWN0OiBULFxuICBtZXRob2Q6IE1cbik6IFJlcXVpcmVkPFQ+W01dIGV4dGVuZHMgbmV3ICguLi5hcmdzOiBpbmZlciBBKSA9PiBpbmZlciBSXG4gID8gSmVzdE1vY2tDb21wYXQ8QSwgUj5cbiAgOiBuZXZlclxuZXhwb3J0IGZ1bmN0aW9uIHNweU9uPFQsIE0gZXh0ZW5kcyBNZXRob2RzPFJlcXVpcmVkPFQ+Pj4oXG4gIG9iajogVCxcbiAgbWV0aG9kTmFtZTogTSxcbiAgbW9jaz86IFRbTV1cbik6IFJlcXVpcmVkPFQ+W01dIGV4dGVuZHMgKC4uLmFyZ3M6IGluZmVyIEEpID0+IGluZmVyIFIgPyBKZXN0TW9ja0NvbXBhdDxBLCBSPiA6IG5ldmVyXG5leHBvcnQgZnVuY3Rpb24gc3B5T248VCwgSyBleHRlbmRzIGtleW9mIFQ+KFxuICBvYmo6IFQsXG4gIG1ldGhvZDogSyxcbiAgYWNjZXNzVHlwZT86ICdnZXQnIHwgJ3NldCcsXG4pOiBKZXN0TW9ja0NvbXBhdCB7XG4gIGNvbnN0IGRpY3Rpb25hcnkgPSB7XG4gICAgZ2V0OiAnZ2V0dGVyJyxcbiAgICBzZXQ6ICdzZXR0ZXInLFxuICB9IGFzIGNvbnN0XG4gIGNvbnN0IG9iak1ldGhvZCA9IGFjY2Vzc1R5cGUgPyB7IFtkaWN0aW9uYXJ5W2FjY2Vzc1R5cGVdXTogbWV0aG9kIH0gOiBtZXRob2RcblxuICBjb25zdCBzdHViID0gdGlueXNweS5zcHlPbihvYmosIG9iak1ldGhvZCBhcyBhbnkpXG5cbiAgcmV0dXJuIGVuaGFuY2VTcHkoc3R1YikgYXMgSmVzdE1vY2tDb21wYXRcbn1cblxuZnVuY3Rpb24gZW5oYW5jZVNweTxUQXJncyBleHRlbmRzIGFueVtdLCBUUmV0dXJucz4oXG4gIHNweTogU3B5SW1wbDxUQXJncywgVFJldHVybnM+LFxuKTogSmVzdE1vY2tDb21wYXQ8VEFyZ3MsIFRSZXR1cm5zPiB7XG4gIGNvbnN0IHN0dWIgPSBzcHkgYXMgdW5rbm93biBhcyBFbmhhbmNlZFNweTxUQXJncywgVFJldHVybnM+XG5cbiAgbGV0IGltcGxlbWVudGF0aW9uOiAoKC4uLmFyZ3M6IFRBcmdzKSA9PiBUUmV0dXJucykgfCB1bmRlZmluZWRcblxuICBsZXQgaW5zdGFuY2VzOiBhbnlbXSA9IFtdXG5cbiAgY29uc3QgbW9ja0NvbnRleHQgPSB7XG4gICAgZ2V0IGNhbGxzKCkge1xuICAgICAgcmV0dXJuIHN0dWIuY2FsbHNcbiAgICB9LFxuICAgIGdldCBpbnN0YW5jZXMoKSB7XG4gICAgICByZXR1cm4gaW5zdGFuY2VzXG4gICAgfSxcbiAgICAvLyBub3Qgc3VwcG9ydGVkXG4gICAgZ2V0IGludm9jYXRpb25DYWxsT3JkZXIoKSB7XG4gICAgICByZXR1cm4gW11cbiAgICB9LFxuICAgIGdldCByZXN1bHRzKCkge1xuICAgICAgcmV0dXJuIHN0dWIucmVzdWx0cy5tYXAoKFtjYWxsVHlwZSwgdmFsdWVdKSA9PiB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBjYWxsVHlwZSA9PT0gJ2Vycm9yJyA/ICd0aHJvdycgOiAncmV0dXJuJ1xuICAgICAgICByZXR1cm4geyB0eXBlLCB2YWx1ZSB9XG4gICAgICB9KVxuICAgIH0sXG4gIH1cblxuICBsZXQgb25jZUltcGxlbWVudGF0aW9uczogKCguLi5hcmdzOiBUQXJncykgPT4gVFJldHVybnMpW10gPSBbXVxuXG4gIGxldCBuYW1lOiBzdHJpbmcgPSAoc3R1YiBhcyBhbnkpLm5hbWVcblxuICBzdHViLmdldE1vY2tOYW1lID0gKCkgPT4gbmFtZSB8fCAndmkuZm4oKSdcbiAgc3R1Yi5tb2NrTmFtZSA9IChuKSA9PiB7XG4gICAgbmFtZSA9IG5cbiAgICByZXR1cm4gc3R1YlxuICB9XG5cbiAgc3R1Yi5tb2NrQ2xlYXIgPSAoKSA9PiB7XG4gICAgc3R1Yi5yZXNldCgpXG4gICAgaW5zdGFuY2VzID0gW11cbiAgICByZXR1cm4gc3R1YlxuICB9XG5cbiAgc3R1Yi5tb2NrUmVzZXQgPSAoKSA9PiB7XG4gICAgc3R1Yi5tb2NrQ2xlYXIoKVxuICAgIGltcGxlbWVudGF0aW9uID0gKCkgPT4gdW5kZWZpbmVkIGFzIHVua25vd24gYXMgVFJldHVybnNcbiAgICBvbmNlSW1wbGVtZW50YXRpb25zID0gW11cbiAgICByZXR1cm4gc3R1YlxuICB9XG5cbiAgc3R1Yi5tb2NrUmVzdG9yZSA9ICgpID0+IHtcbiAgICBzdHViLm1vY2tSZXNldCgpXG4gICAgaW1wbGVtZW50YXRpb24gPSB1bmRlZmluZWRcbiAgICByZXR1cm4gc3R1YlxuICB9XG5cbiAgc3R1Yi5nZXRNb2NrSW1wbGVtZW50YXRpb24gPSAoKSA9PiBpbXBsZW1lbnRhdGlvblxuICBzdHViLm1vY2tJbXBsZW1lbnRhdGlvbiA9IChmbjogKC4uLmFyZ3M6IFRBcmdzKSA9PiBUUmV0dXJucykgPT4ge1xuICAgIGltcGxlbWVudGF0aW9uID0gZm5cbiAgICByZXR1cm4gc3R1YlxuICB9XG5cbiAgc3R1Yi5tb2NrSW1wbGVtZW50YXRpb25PbmNlID0gKGZuOiAoLi4uYXJnczogVEFyZ3MpID0+IFRSZXR1cm5zKSA9PiB7XG4gICAgb25jZUltcGxlbWVudGF0aW9ucy5wdXNoKGZuKVxuICAgIHJldHVybiBzdHViXG4gIH1cblxuICBzdHViLm1vY2tSZXR1cm5UaGlzID0gKCkgPT5cbiAgICBzdHViLm1vY2tJbXBsZW1lbnRhdGlvbihmdW5jdGlvbih0aGlzOiBUUmV0dXJucykge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9KVxuXG4gIHN0dWIubW9ja1JldHVyblZhbHVlID0gKHZhbDogVFJldHVybnMpID0+IHN0dWIubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHZhbClcbiAgc3R1Yi5tb2NrUmV0dXJuVmFsdWVPbmNlID0gKHZhbDogVFJldHVybnMpID0+IHN0dWIubW9ja0ltcGxlbWVudGF0aW9uT25jZSgoKSA9PiB2YWwpXG5cbiAgc3R1Yi5tb2NrUmVzb2x2ZWRWYWx1ZSA9ICh2YWw6IEF3YWl0ZWQ8VFJldHVybnM+KSA9PlxuICAgIHN0dWIubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IFByb21pc2UucmVzb2x2ZSh2YWwgYXMgVFJldHVybnMpKVxuXG4gIHN0dWIubW9ja1Jlc29sdmVkVmFsdWVPbmNlID0gKHZhbDogQXdhaXRlZDxUUmV0dXJucz4pID0+XG4gICAgc3R1Yi5tb2NrSW1wbGVtZW50YXRpb25PbmNlKCgpID0+IFByb21pc2UucmVzb2x2ZSh2YWwgYXMgVFJldHVybnMpKVxuXG4gIHN0dWIubW9ja1JlamVjdGVkVmFsdWUgPSAodmFsOiB1bmtub3duKSA9PlxuICAgIHN0dWIubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IFByb21pc2UucmVqZWN0KHZhbCkpXG5cbiAgc3R1Yi5tb2NrUmVqZWN0ZWRWYWx1ZU9uY2UgPSAodmFsOiB1bmtub3duKSA9PlxuICAgIHN0dWIubW9ja0ltcGxlbWVudGF0aW9uT25jZSgoKSA9PiBQcm9taXNlLnJlamVjdCh2YWwpKVxuXG4gIHV0aWwuYWRkUHJvcGVydHkoc3R1YiwgJ21vY2snLCAoKSA9PiBtb2NrQ29udGV4dClcblxuICBzdHViLndpbGxDYWxsKGZ1bmN0aW9uKHRoaXM6IHVua25vd24sIC4uLmFyZ3MpIHtcbiAgICBpbnN0YW5jZXMucHVzaCh0aGlzKVxuICAgIGNvbnN0IGltcGwgPSBvbmNlSW1wbGVtZW50YXRpb25zLnNoaWZ0KCkgfHwgaW1wbGVtZW50YXRpb24gfHwgc3R1Yi5nZXRPcmlnaW5hbCgpIHx8ICgoKSA9PiB7fSlcbiAgICByZXR1cm4gaW1wbC5hcHBseSh0aGlzLCBhcmdzKVxuICB9KVxuXG4gIHNwaWVzLmFkZChzdHViKVxuXG4gIHJldHVybiBzdHViIGFzIGFueVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZm48VEFyZ3MgZXh0ZW5kcyBhbnlbXSA9IGFueVtdLCBSID0gYW55PigpOiBKZXN0TW9ja0NvbXBhdEZuPFRBcmdzLCBSPlxuZXhwb3J0IGZ1bmN0aW9uIGZuPFRBcmdzIGV4dGVuZHMgYW55W10gPSBhbnlbXSwgUiA9IGFueT4oXG4gIGltcGxlbWVudGF0aW9uOiAoLi4uYXJnczogVEFyZ3MpID0+IFJcbik6IEplc3RNb2NrQ29tcGF0Rm48VEFyZ3MsIFI+XG5leHBvcnQgZnVuY3Rpb24gZm48VEFyZ3MgZXh0ZW5kcyBhbnlbXSA9IGFueVtdLCBSID0gYW55PihcbiAgaW1wbGVtZW50YXRpb24/OiAoLi4uYXJnczogVEFyZ3MpID0+IFIsXG4pOiBKZXN0TW9ja0NvbXBhdEZuPFRBcmdzLCBSPiB7XG4gIHJldHVybiBlbmhhbmNlU3B5KHRpbnlzcHkuc3B5T24oeyBmbjogaW1wbGVtZW50YXRpb24gfHwgKCgpID0+IHt9KSB9LCAnZm4nKSkgYXMgdW5rbm93biBhcyBKZXN0TW9ja0NvbXBhdEZuXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRVksTUFBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLEdBQUc7QUFDeEIsU0FBUyxjQUFjLENBQUMsR0FBRyxFQUFFO0FBQ3BDLEVBQUUsT0FBTyxPQUFPLEdBQUcsS0FBSyxVQUFVLElBQUksU0FBUyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDO0FBQ3RFLENBQUM7QUFDTSxTQUFTLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRTtBQUMvQyxFQUFFLE1BQU0sVUFBVSxHQUFHO0FBQ3JCLElBQUksR0FBRyxFQUFFLFFBQVE7QUFDakIsSUFB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
|
package/dist/node.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CommonServerOptions, ViteDevServer, UserConfig as UserConfig$1 } from 'vite';
|
|
1
|
+
import { CommonServerOptions, ViteDevServer, UserConfig as UserConfig$1, Plugin as Plugin$1 } from 'vite';
|
|
2
2
|
|
|
3
3
|
interface StartOfSourceMap {
|
|
4
4
|
file?: string;
|
|
@@ -69,9 +69,14 @@ declare class VerboseReporter extends DefaultReporter {
|
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
declare class TapReporter implements Reporter {
|
|
72
|
-
|
|
72
|
+
protected ctx: Vitest;
|
|
73
|
+
onInit(ctx: Vitest): void;
|
|
74
|
+
protected logTasks(tasks: Task[], currentIdent: string): void;
|
|
75
|
+
onFinished(files?: File[]): Promise<void>;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
declare class TapFlatReporter extends TapReporter {
|
|
73
79
|
onInit(ctx: Vitest): void;
|
|
74
|
-
logTasks(tasks: Task[], currentIdent: string): void;
|
|
75
80
|
onFinished(files?: File[]): Promise<void>;
|
|
76
81
|
}
|
|
77
82
|
|
|
@@ -80,6 +85,7 @@ declare const ReportersMap: {
|
|
|
80
85
|
verbose: typeof VerboseReporter;
|
|
81
86
|
dot: typeof DotReporter;
|
|
82
87
|
tap: typeof TapReporter;
|
|
88
|
+
'tap-flat': typeof TapFlatReporter;
|
|
83
89
|
};
|
|
84
90
|
declare type BuiltinReporters = keyof typeof ReportersMap;
|
|
85
91
|
|
|
@@ -376,11 +382,11 @@ declare type Plugin = NewPlugin | OldPlugin;
|
|
|
376
382
|
declare type Plugins = Array<Plugin>;
|
|
377
383
|
|
|
378
384
|
declare type SnapshotUpdateState = 'all' | 'new' | 'none';
|
|
379
|
-
|
|
385
|
+
interface SnapshotStateOptions {
|
|
380
386
|
updateSnapshot: SnapshotUpdateState;
|
|
381
387
|
expand?: boolean;
|
|
382
388
|
snapshotFormat?: OptionsReceived;
|
|
383
|
-
}
|
|
389
|
+
}
|
|
384
390
|
interface SnapshotResult {
|
|
385
391
|
filepath: string;
|
|
386
392
|
added: number;
|
|
@@ -594,7 +600,33 @@ interface InlineConfig {
|
|
|
594
600
|
* Open Vitest UI
|
|
595
601
|
* @internal WIP
|
|
596
602
|
*/
|
|
597
|
-
|
|
603
|
+
ui?: boolean;
|
|
604
|
+
/**
|
|
605
|
+
* Base url for the UI
|
|
606
|
+
*
|
|
607
|
+
* @default '/__vitest__/'
|
|
608
|
+
*/
|
|
609
|
+
uiBase?: string;
|
|
610
|
+
/**
|
|
611
|
+
* Determine the transform method of modules
|
|
612
|
+
*/
|
|
613
|
+
transformMode?: {
|
|
614
|
+
/**
|
|
615
|
+
* Use SSR transform pipeline for the specified files.
|
|
616
|
+
* Vite plugins will receive `ssr: true` flag when processing those files.
|
|
617
|
+
*
|
|
618
|
+
* @default [/\.([cm]?[jt]sx?|json)$/]
|
|
619
|
+
*/
|
|
620
|
+
ssr?: RegExp[];
|
|
621
|
+
/**
|
|
622
|
+
* First do a normal transform pipeline (targeting browser),
|
|
623
|
+
* then then do a SSR rewrite to run the code in Node.
|
|
624
|
+
* Vite plugins will receive `ssr: false` flag when processing those files.
|
|
625
|
+
*
|
|
626
|
+
* @default other than `ssr`
|
|
627
|
+
*/
|
|
628
|
+
web?: RegExp[];
|
|
629
|
+
};
|
|
598
630
|
}
|
|
599
631
|
interface UserConfig extends InlineConfig {
|
|
600
632
|
/**
|
|
@@ -683,6 +715,7 @@ declare class Vitest {
|
|
|
683
715
|
visitedFilesMap: Map<string, RawSourceMap>;
|
|
684
716
|
runningPromise?: Promise<void>;
|
|
685
717
|
closingPromise?: Promise<void>;
|
|
718
|
+
externalizeCache: Map<string, Promise<string | false>>;
|
|
686
719
|
isFirstRun: boolean;
|
|
687
720
|
restartsCount: number;
|
|
688
721
|
private _onRestartListeners;
|
|
@@ -703,9 +736,11 @@ declare class Vitest {
|
|
|
703
736
|
report<T extends keyof Reporter>(name: T, ...args: ArgumentsType<Reporter[T]>): Promise<void>;
|
|
704
737
|
globTestFiles(filters?: string[]): Promise<string[]>;
|
|
705
738
|
isTargetFile(id: string): boolean;
|
|
739
|
+
shouldExternalize(id: string): Promise<string | false>;
|
|
706
740
|
onServerRestarted(fn: () => void): void;
|
|
707
741
|
}
|
|
708
742
|
|
|
743
|
+
declare function VitestPlugin(options?: UserConfig, viteOverrides?: UserConfig$1, ctx?: Vitest): Promise<Plugin$1[]>;
|
|
709
744
|
declare function createVitest(options: UserConfig, viteOverrides?: UserConfig$1): Promise<Vitest>;
|
|
710
745
|
|
|
711
|
-
export { Vitest, createVitest };
|
|
746
|
+
export { Vitest, VitestPlugin, createVitest };
|
package/dist/node.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { c as createVitest } from './index-
|
|
1
|
+
export { V as VitestPlugin, c as createVitest } from './index-21eabd8a.js';
|
|
2
2
|
import 'fs';
|
|
3
3
|
import './index-64aafe4b.js';
|
|
4
4
|
import 'url';
|
|
@@ -14,12 +14,12 @@ import 'events';
|
|
|
14
14
|
import './constants-d24b670d.js';
|
|
15
15
|
import './magic-string.es-94000aea.js';
|
|
16
16
|
import 'perf_hooks';
|
|
17
|
-
import './diff-
|
|
17
|
+
import './diff-5dfc7eb4.js';
|
|
18
18
|
import './index-648e7ab2.js';
|
|
19
19
|
import './_commonjsHelpers-c9e3b764.js';
|
|
20
20
|
import 'assert';
|
|
21
21
|
import 'module';
|
|
22
|
+
import './index-8cb72062.js';
|
|
22
23
|
import 'worker_threads';
|
|
23
24
|
import 'tinypool';
|
|
24
|
-
import './index-e909c175.js';
|
|
25
25
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5qcyIsInNvdXJjZXMiOltdLCJzb3VyY2VzQ29udGVudCI6W10sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OyJ9
|