vitest 0.0.136 → 0.0.140
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 +24 -0
- package/dist/cli.js +10 -9
- package/dist/{constants-d24b670d.js → constants-124522a1.js} +2 -2
- package/dist/{diff-04ac7bc9.js → diff-deb11fa7.js} +4 -5
- package/dist/entry.js +204 -22
- package/dist/global-7907d87d.js +22 -0
- package/dist/index-1b2eb03b.js +187 -0
- package/dist/index-3faf3d6e.js +8807 -0
- package/dist/{index-6397bdab.js → index-4a8eca63.js} +3 -3
- package/dist/index-53aca3c1.js +205 -0
- package/dist/index-c037b40c.js +9272 -0
- package/dist/index.d.ts +47 -23
- package/dist/index.js +5 -7
- package/dist/jest-mock-6c629944.js +95 -0
- package/dist/node.d.ts +31 -8
- package/dist/node.js +12 -11
- package/dist/{setup-6bff359f.js → setup-901b91d4.js} +68 -83
- package/dist/{vi-2509fe43.js → vi-8e5d0623.js} +3 -3
- package/dist/worker.js +227 -215
- package/package.json +10 -8
- package/dist/externalize-b979f524.js +0 -9259
- package/dist/global-3d90eb55.js +0 -21
- package/dist/index-0b823579.js +0 -8588
- package/dist/index-64aafe4b.js +0 -396
- package/dist/index-e909c175.js +0 -63
- package/dist/jest-mock-30625866.js +0 -94
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ViteDevServer, CommonServerOptions, TransformResult } from 'vite';
|
|
2
|
+
import { ViteNodeServer } from 'vite-node/server';
|
|
2
3
|
import { MessagePort } from 'worker_threads';
|
|
3
4
|
import { SpyImpl } from 'tinyspy';
|
|
4
5
|
export { Spy, SpyFn } from 'tinyspy';
|
|
@@ -98,7 +99,7 @@ declare const RECEIVED_COLOR: Formatter;
|
|
|
98
99
|
declare const INVERTED_COLOR: Formatter;
|
|
99
100
|
declare const BOLD_WEIGHT: Formatter;
|
|
100
101
|
declare const DIM_COLOR: Formatter;
|
|
101
|
-
|
|
102
|
+
interface MatcherHintOptions {
|
|
102
103
|
comment?: string;
|
|
103
104
|
expectedColor?: Formatter;
|
|
104
105
|
isDirectExpectCall?: boolean;
|
|
@@ -107,12 +108,12 @@ declare type MatcherHintOptions = {
|
|
|
107
108
|
receivedColor?: Formatter;
|
|
108
109
|
secondArgument?: string;
|
|
109
110
|
secondArgumentColor?: Formatter;
|
|
110
|
-
}
|
|
111
|
+
}
|
|
111
112
|
declare function matcherHint(matcherName: string, received?: string, expected?: string, options?: MatcherHintOptions): string;
|
|
112
113
|
declare const stringify: (object: unknown, maxDepth?: number) => string;
|
|
113
114
|
declare const printReceived: (object: unknown) => string;
|
|
114
115
|
declare const printExpected: (value: unknown) => string;
|
|
115
|
-
|
|
116
|
+
interface DiffOptions {
|
|
116
117
|
aAnnotation?: string;
|
|
117
118
|
aColor?: Formatter;
|
|
118
119
|
aIndicator?: string;
|
|
@@ -131,7 +132,7 @@ declare type DiffOptions = {
|
|
|
131
132
|
omitAnnotationLines?: boolean;
|
|
132
133
|
patchColor?: Formatter;
|
|
133
134
|
compareKeys?: any;
|
|
134
|
-
}
|
|
135
|
+
}
|
|
135
136
|
declare function diff(a: any, b: any, options?: DiffOptions): string;
|
|
136
137
|
|
|
137
138
|
declare const jestMatcherUtils_EXPECTED_COLOR: typeof EXPECTED_COLOR;
|
|
@@ -164,7 +165,7 @@ declare namespace jestMatcherUtils {
|
|
|
164
165
|
}
|
|
165
166
|
|
|
166
167
|
declare type Tester = (a: any, b: any) => boolean | undefined;
|
|
167
|
-
|
|
168
|
+
interface MatcherState {
|
|
168
169
|
assertionCalls: number;
|
|
169
170
|
currentTestName?: string;
|
|
170
171
|
dontThrow?: () => void;
|
|
@@ -183,21 +184,19 @@ declare type MatcherState = {
|
|
|
183
184
|
iterableEquality: Tester;
|
|
184
185
|
subsetEquality: Tester;
|
|
185
186
|
};
|
|
186
|
-
}
|
|
187
|
-
|
|
187
|
+
}
|
|
188
|
+
interface SyncExpectationResult {
|
|
188
189
|
pass: boolean;
|
|
189
190
|
message: () => string;
|
|
190
191
|
actual?: any;
|
|
191
192
|
expected?: any;
|
|
192
|
-
}
|
|
193
|
+
}
|
|
193
194
|
declare type AsyncExpectationResult = Promise<SyncExpectationResult>;
|
|
194
195
|
declare type ExpectationResult = SyncExpectationResult | AsyncExpectationResult;
|
|
195
|
-
|
|
196
|
+
interface RawMatcherFn<T extends MatcherState = MatcherState> {
|
|
196
197
|
(this: T, received: any, expected: any, options?: any): ExpectationResult;
|
|
197
|
-
}
|
|
198
|
-
declare type MatchersObject<T extends MatcherState = MatcherState> =
|
|
199
|
-
[id: string]: RawMatcherFn<T>;
|
|
200
|
-
};
|
|
198
|
+
}
|
|
199
|
+
declare type MatchersObject<T extends MatcherState = MatcherState> = Record<string, RawMatcherFn<T>>;
|
|
201
200
|
|
|
202
201
|
interface AsymmetricMatcherInterface {
|
|
203
202
|
asymmetricMatch(other: unknown): boolean;
|
|
@@ -302,6 +301,7 @@ declare class Vitest {
|
|
|
302
301
|
errorStream: NodeJS.WriteStream & {
|
|
303
302
|
fd: 2;
|
|
304
303
|
};
|
|
304
|
+
vitenode: ViteNodeServer;
|
|
305
305
|
invalidates: Set<string>;
|
|
306
306
|
changedTests: Set<string>;
|
|
307
307
|
visitedFilesMap: Map<string, RawSourceMap>;
|
|
@@ -666,19 +666,19 @@ interface Reporter {
|
|
|
666
666
|
|
|
667
667
|
declare type SnapshotData = Record<string, string>;
|
|
668
668
|
declare type SnapshotUpdateState = 'all' | 'new' | 'none';
|
|
669
|
-
|
|
669
|
+
interface SnapshotStateOptions {
|
|
670
670
|
updateSnapshot: SnapshotUpdateState;
|
|
671
671
|
expand?: boolean;
|
|
672
672
|
snapshotFormat?: OptionsReceived;
|
|
673
|
-
}
|
|
674
|
-
|
|
673
|
+
}
|
|
674
|
+
interface SnapshotMatchOptions {
|
|
675
675
|
testName: string;
|
|
676
676
|
received: unknown;
|
|
677
677
|
key?: string;
|
|
678
678
|
inlineSnapshot?: string;
|
|
679
679
|
isInline: boolean;
|
|
680
680
|
error?: Error;
|
|
681
|
-
}
|
|
681
|
+
}
|
|
682
682
|
interface SnapshotResult {
|
|
683
683
|
filepath: string;
|
|
684
684
|
added: number;
|
|
@@ -845,6 +845,10 @@ interface InlineConfig {
|
|
|
845
845
|
* Path to setup files
|
|
846
846
|
*/
|
|
847
847
|
setupFiles?: string | string[];
|
|
848
|
+
/**
|
|
849
|
+
* Path to global setup files
|
|
850
|
+
*/
|
|
851
|
+
globalSetup?: string | string[];
|
|
848
852
|
/**
|
|
849
853
|
* Pattern of file paths to be ignore from triggering watch rerun
|
|
850
854
|
*
|
|
@@ -899,6 +903,26 @@ interface InlineConfig {
|
|
|
899
903
|
* @default '/__vitest__/'
|
|
900
904
|
*/
|
|
901
905
|
uiBase?: string;
|
|
906
|
+
/**
|
|
907
|
+
* Determine the transform method of modules
|
|
908
|
+
*/
|
|
909
|
+
transformMode?: {
|
|
910
|
+
/**
|
|
911
|
+
* Use SSR transform pipeline for the specified files.
|
|
912
|
+
* Vite plugins will receive `ssr: true` flag when processing those files.
|
|
913
|
+
*
|
|
914
|
+
* @default [/\.([cm]?[jt]sx?|json)$/]
|
|
915
|
+
*/
|
|
916
|
+
ssr?: RegExp[];
|
|
917
|
+
/**
|
|
918
|
+
* First do a normal transform pipeline (targeting browser),
|
|
919
|
+
* then then do a SSR rewrite to run the code in Node.
|
|
920
|
+
* Vite plugins will receive `ssr: false` flag when processing those files.
|
|
921
|
+
*
|
|
922
|
+
* @default other than `ssr`
|
|
923
|
+
*/
|
|
924
|
+
web?: RegExp[];
|
|
925
|
+
};
|
|
902
926
|
}
|
|
903
927
|
interface UserConfig extends InlineConfig {
|
|
904
928
|
/**
|
|
@@ -934,10 +958,6 @@ interface ResolvedConfig extends Omit<Required<UserConfig>, 'config' | 'filters'
|
|
|
934
958
|
filters?: string[];
|
|
935
959
|
testNamePattern?: RegExp;
|
|
936
960
|
related?: string[];
|
|
937
|
-
depsInline: (string | RegExp)[];
|
|
938
|
-
depsExternal: (string | RegExp)[];
|
|
939
|
-
fallbackCJS: boolean;
|
|
940
|
-
interpretDefault: boolean;
|
|
941
961
|
coverage: ResolvedC8Options;
|
|
942
962
|
snapshotOptions: SnapshotStateOptions;
|
|
943
963
|
api?: ApiConfig;
|
|
@@ -949,8 +969,12 @@ interface WorkerContext {
|
|
|
949
969
|
files: string[];
|
|
950
970
|
invalidates?: string[];
|
|
951
971
|
}
|
|
972
|
+
declare type FetchFunction = (id: string) => Promise<{
|
|
973
|
+
code?: string;
|
|
974
|
+
externalize?: string;
|
|
975
|
+
}>;
|
|
952
976
|
interface WorkerRPC {
|
|
953
|
-
fetch:
|
|
977
|
+
fetch: FetchFunction;
|
|
954
978
|
getSourceMap: (id: string, force?: boolean) => Promise<RawSourceMap | undefined>;
|
|
955
979
|
onWorkerExit: (code?: number) => void;
|
|
956
980
|
onUserLog: (log: UserConsoleLog) => void;
|
|
@@ -1240,4 +1264,4 @@ declare global {
|
|
|
1240
1264
|
}
|
|
1241
1265
|
}
|
|
1242
1266
|
|
|
1243
|
-
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,12 +1,10 @@
|
|
|
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-8e5d0623.js';
|
|
2
|
+
export { a as afterAll, d as afterEach, b as beforeAll, c as beforeEach, e as expect } from './index-4a8eca63.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
|
-
import './index-
|
|
6
|
-
import 'url';
|
|
5
|
+
import './index-53aca3c1.js';
|
|
7
6
|
import 'tty';
|
|
8
7
|
import 'local-pkg';
|
|
9
|
-
import 'path';
|
|
10
8
|
import './_commonjsHelpers-c9e3b764.js';
|
|
11
9
|
import 'tinyspy';
|
|
12
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
10
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbXSwic291cmNlc0NvbnRlbnQiOltdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7OzsifQ==
|
|
@@ -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,5 @@
|
|
|
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
|
+
import { ViteNodeServer } from 'vite-node/server';
|
|
2
3
|
|
|
3
4
|
interface StartOfSourceMap {
|
|
4
5
|
file?: string;
|
|
@@ -382,11 +383,11 @@ declare type Plugin = NewPlugin | OldPlugin;
|
|
|
382
383
|
declare type Plugins = Array<Plugin>;
|
|
383
384
|
|
|
384
385
|
declare type SnapshotUpdateState = 'all' | 'new' | 'none';
|
|
385
|
-
|
|
386
|
+
interface SnapshotStateOptions {
|
|
386
387
|
updateSnapshot: SnapshotUpdateState;
|
|
387
388
|
expand?: boolean;
|
|
388
389
|
snapshotFormat?: OptionsReceived;
|
|
389
|
-
}
|
|
390
|
+
}
|
|
390
391
|
interface SnapshotResult {
|
|
391
392
|
filepath: string;
|
|
392
393
|
added: number;
|
|
@@ -553,6 +554,10 @@ interface InlineConfig {
|
|
|
553
554
|
* Path to setup files
|
|
554
555
|
*/
|
|
555
556
|
setupFiles?: string | string[];
|
|
557
|
+
/**
|
|
558
|
+
* Path to global setup files
|
|
559
|
+
*/
|
|
560
|
+
globalSetup?: string | string[];
|
|
556
561
|
/**
|
|
557
562
|
* Pattern of file paths to be ignore from triggering watch rerun
|
|
558
563
|
*
|
|
@@ -607,6 +612,26 @@ interface InlineConfig {
|
|
|
607
612
|
* @default '/__vitest__/'
|
|
608
613
|
*/
|
|
609
614
|
uiBase?: string;
|
|
615
|
+
/**
|
|
616
|
+
* Determine the transform method of modules
|
|
617
|
+
*/
|
|
618
|
+
transformMode?: {
|
|
619
|
+
/**
|
|
620
|
+
* Use SSR transform pipeline for the specified files.
|
|
621
|
+
* Vite plugins will receive `ssr: true` flag when processing those files.
|
|
622
|
+
*
|
|
623
|
+
* @default [/\.([cm]?[jt]sx?|json)$/]
|
|
624
|
+
*/
|
|
625
|
+
ssr?: RegExp[];
|
|
626
|
+
/**
|
|
627
|
+
* First do a normal transform pipeline (targeting browser),
|
|
628
|
+
* then then do a SSR rewrite to run the code in Node.
|
|
629
|
+
* Vite plugins will receive `ssr: false` flag when processing those files.
|
|
630
|
+
*
|
|
631
|
+
* @default other than `ssr`
|
|
632
|
+
*/
|
|
633
|
+
web?: RegExp[];
|
|
634
|
+
};
|
|
610
635
|
}
|
|
611
636
|
interface UserConfig extends InlineConfig {
|
|
612
637
|
/**
|
|
@@ -642,10 +667,6 @@ interface ResolvedConfig extends Omit<Required<UserConfig>, 'config' | 'filters'
|
|
|
642
667
|
filters?: string[];
|
|
643
668
|
testNamePattern?: RegExp;
|
|
644
669
|
related?: string[];
|
|
645
|
-
depsInline: (string | RegExp)[];
|
|
646
|
-
depsExternal: (string | RegExp)[];
|
|
647
|
-
fallbackCJS: boolean;
|
|
648
|
-
interpretDefault: boolean;
|
|
649
670
|
coverage: ResolvedC8Options;
|
|
650
671
|
snapshotOptions: SnapshotStateOptions;
|
|
651
672
|
api?: ApiConfig;
|
|
@@ -690,6 +711,7 @@ declare class Vitest {
|
|
|
690
711
|
errorStream: NodeJS.WriteStream & {
|
|
691
712
|
fd: 2;
|
|
692
713
|
};
|
|
714
|
+
vitenode: ViteNodeServer;
|
|
693
715
|
invalidates: Set<string>;
|
|
694
716
|
changedTests: Set<string>;
|
|
695
717
|
visitedFilesMap: Map<string, RawSourceMap>;
|
|
@@ -718,6 +740,7 @@ declare class Vitest {
|
|
|
718
740
|
onServerRestarted(fn: () => void): void;
|
|
719
741
|
}
|
|
720
742
|
|
|
743
|
+
declare function VitestPlugin(options?: UserConfig, viteOverrides?: UserConfig$1, ctx?: Vitest): Promise<Plugin$1[]>;
|
|
721
744
|
declare function createVitest(options: UserConfig, viteOverrides?: UserConfig$1): Promise<Vitest>;
|
|
722
745
|
|
|
723
|
-
export { Vitest, createVitest };
|
|
746
|
+
export { Vitest, VitestPlugin, createVitest };
|
package/dist/node.js
CHANGED
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
export { c as createVitest } from './index-
|
|
1
|
+
export { V as VitestPlugin, c as createVitest } from './index-3faf3d6e.js';
|
|
2
2
|
import 'fs';
|
|
3
|
-
import './index-
|
|
4
|
-
import 'url';
|
|
5
|
-
import 'tty';
|
|
6
|
-
import 'local-pkg';
|
|
3
|
+
import './index-1b2eb03b.js';
|
|
7
4
|
import 'path';
|
|
8
5
|
import 'vite';
|
|
9
6
|
import 'process';
|
|
@@ -11,15 +8,19 @@ import 'os';
|
|
|
11
8
|
import 'util';
|
|
12
9
|
import 'stream';
|
|
13
10
|
import 'events';
|
|
14
|
-
import './
|
|
11
|
+
import './index-53aca3c1.js';
|
|
12
|
+
import 'tty';
|
|
13
|
+
import 'local-pkg';
|
|
14
|
+
import './index-c037b40c.js';
|
|
15
|
+
import 'module';
|
|
16
|
+
import 'url';
|
|
17
|
+
import 'assert';
|
|
18
|
+
import './constants-124522a1.js';
|
|
15
19
|
import './magic-string.es-94000aea.js';
|
|
16
20
|
import 'perf_hooks';
|
|
17
|
-
import './diff-
|
|
21
|
+
import './diff-deb11fa7.js';
|
|
18
22
|
import './index-648e7ab2.js';
|
|
19
23
|
import './_commonjsHelpers-c9e3b764.js';
|
|
20
|
-
import 'assert';
|
|
21
|
-
import 'module';
|
|
22
24
|
import 'worker_threads';
|
|
23
25
|
import 'tinypool';
|
|
24
|
-
|
|
25
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5qcyIsInNvdXJjZXMiOltdLCJzb3VyY2VzQ29udGVudCI6W10sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OyJ9
|
|
26
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5qcyIsInNvdXJjZXMiOltdLCJzb3VyY2VzQ29udGVudCI6W10sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsifQ==
|