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/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
- declare type MatcherHintOptions = {
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
- declare type DiffOptions = {
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
- declare type MatcherState = {
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
- declare type SyncExpectationResult = {
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
- declare type RawMatcherFn<T extends MatcherState = MatcherState> = {
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
- private ctx;
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
- declare type SnapshotStateOptions = {
669
+ interface SnapshotStateOptions {
664
670
  updateSnapshot: SnapshotUpdateState;
665
671
  expand?: boolean;
666
672
  snapshotFormat?: OptionsReceived;
667
- };
668
- declare type SnapshotMatchOptions = {
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
- open?: boolean;
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: (id: string) => Promise<string | undefined>;
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-2509fe43.js';
2
- export { a as afterAll, d as afterEach, b as beforeAll, c as beforeEach, e as expect } from './index-6397bdab.js';
3
- export { f as fn, i as isMockFunction, s as spies, a as spyOn } from './jest-mock-30625866.js';
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
- private ctx;
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
- declare type SnapshotStateOptions = {
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
- open?: boolean;
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-9e44ed60.js';
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-04ac7bc9.js';
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