1- import { channel } from '@vitest/browser/client'
2- import type {
3- IframeChannelEvent ,
4- IframeMockFactoryRequestEvent ,
5- IframeMockingDoneEvent ,
6- } from '@vitest/browser/client'
7- import type { MockedModuleSerialized } from '@vitest/mocker'
8- import { ManualMockedModule } from '@vitest/mocker'
91import { ModuleMockerMSWInterceptor } from '@vitest/mocker/browser'
10- import { nanoid } from '@vitest/utils'
11-
12- export class VitestBrowserModuleMockerInterceptor extends ModuleMockerMSWInterceptor {
13- override async register ( event : MockedModuleSerialized ) : Promise < void > {
14- if ( event . type === 'manual' ) {
15- const module = ManualMockedModule . fromJSON ( event , async ( ) => {
16- const keys = await getFactoryExports ( event . url )
17- return Object . fromEntries ( keys . map ( key => [ key , null ] ) )
18- } )
19- await super . register ( module )
20- }
21- else {
22- await this . init ( )
23- this . mocks . register ( event )
24- }
25- channel . postMessage ( < IframeMockingDoneEvent > { type : 'mock:done' } )
26- }
27-
28- override async delete ( url : string ) : Promise < void > {
29- await super . delete ( url )
30- channel . postMessage ( < IframeMockingDoneEvent > { type : 'unmock:done' } )
31- }
32- }
2+ import { getConfig } from '../utils'
333
344export function createModuleMockerInterceptor ( ) {
35- return new VitestBrowserModuleMockerInterceptor ( {
5+ const debug = getConfig ( ) . env . VITEST_BROWSER_DEBUG
6+ return new ModuleMockerMSWInterceptor ( {
367 globalThisAccessor : '"__vitest_mocker__"' ,
378 mswOptions : {
389 serviceWorker : {
@@ -42,31 +13,7 @@ export function createModuleMockerInterceptor() {
4213 } ,
4314 } ,
4415 onUnhandledRequest : 'bypass' ,
45- quiet : true ,
16+ quiet : ! ( debug && debug !== 'false' ) ,
4617 } ,
4718 } )
4819}
49-
50- function getFactoryExports ( id : string ) {
51- const eventId = nanoid ( )
52- channel . postMessage ( {
53- type : 'mock-factory:request' ,
54- eventId,
55- id,
56- } satisfies IframeMockFactoryRequestEvent )
57- return new Promise < string [ ] > ( ( resolve , reject ) => {
58- channel . addEventListener (
59- 'message' ,
60- function onMessage ( e : MessageEvent < IframeChannelEvent > ) {
61- if ( e . data . type === 'mock-factory:response' && e . data . eventId === eventId ) {
62- resolve ( e . data . exports )
63- channel . removeEventListener ( 'message' , onMessage )
64- }
65- if ( e . data . type === 'mock-factory:error' && e . data . eventId === eventId ) {
66- reject ( e . data . error )
67- channel . removeEventListener ( 'message' , onMessage )
68- }
69- } ,
70- )
71- } )
72- }
0 commit comments