|
1 | 1 | import { Emitter } from 'strict-event-emitter' |
| 2 | +import type { DeferredPromise } from '@open-draft/deferred-promise' |
2 | 3 | import { |
3 | 4 | LifeCycleEventEmitter, |
4 | 5 | LifeCycleEventsMap, |
5 | 6 | SharedOptions, |
6 | 7 | } from '~/core/sharedOptions' |
7 | | -import { ServiceWorkerMessage } from './start/utils/createMessageChannel' |
8 | 8 | import { RequestHandler } from '~/core/handlers/RequestHandler' |
9 | 9 | import type { HttpRequestEventMap, Interceptor } from '@mswjs/interceptors' |
10 | 10 | import type { RequiredDeep } from '~/core/typeUtils' |
11 | 11 | import type { WebSocketHandler } from '~/core/handlers/WebSocketHandler' |
12 | | - |
13 | | -type RequestWithoutMethods = Omit< |
14 | | - Request, |
15 | | - | 'text' |
16 | | - | 'body' |
17 | | - | 'json' |
18 | | - | 'blob' |
19 | | - | 'arrayBuffer' |
20 | | - | 'formData' |
21 | | - | 'clone' |
22 | | - | 'signal' |
23 | | - | 'isHistoryNavigation' |
24 | | - | 'isReloadNavigation' |
25 | | -> |
26 | | - |
27 | | -/** |
28 | | - * Request representation received from the worker message event. |
29 | | - */ |
30 | | -export interface ServiceWorkerIncomingRequest extends RequestWithoutMethods { |
31 | | - /** |
32 | | - * Unique ID of the request generated once the request is |
33 | | - * intercepted by the "fetch" event in the Service Worker. |
34 | | - */ |
35 | | - id: string |
36 | | - body?: ArrayBuffer | null |
37 | | -} |
38 | | - |
39 | | -type ServiceWorkerIncomingResponse = { |
40 | | - isMockedResponse: boolean |
41 | | - request: ServiceWorkerIncomingRequest |
42 | | - response: Pick< |
43 | | - Response, |
44 | | - 'type' | 'ok' | 'status' | 'statusText' | 'body' | 'headers' | 'redirected' |
45 | | - > |
46 | | -} |
47 | | - |
48 | | -/** |
49 | | - * Map of the events that can be received from the Service Worker. |
50 | | - */ |
51 | | -export interface ServiceWorkerIncomingEventsMap { |
52 | | - MOCKING_ENABLED: { |
53 | | - client: { |
54 | | - id: string |
55 | | - frameType: string |
56 | | - } |
57 | | - } |
58 | | - INTEGRITY_CHECK_RESPONSE: { |
59 | | - packageVersion: string |
60 | | - checksum: string |
61 | | - } |
62 | | - KEEPALIVE_RESPONSE: never |
63 | | - REQUEST: ServiceWorkerIncomingRequest |
64 | | - RESPONSE: ServiceWorkerIncomingResponse |
65 | | -} |
66 | | - |
67 | | -/** |
68 | | - * Map of the events that can be sent to the Service Worker |
69 | | - * from any execution context. |
70 | | - */ |
71 | | -type ServiceWorkerOutgoingEventTypes = |
72 | | - | 'MOCK_ACTIVATE' |
73 | | - | 'MOCK_DEACTIVATE' |
74 | | - | 'INTEGRITY_CHECK_REQUEST' |
75 | | - | 'KEEPALIVE_REQUEST' |
76 | | - | 'CLIENT_CLOSED' |
| 12 | +import type { WorkerChannel } from '../utils/workerChannel' |
77 | 13 |
|
78 | 14 | export interface StringifiedResponse extends ResponseInit { |
79 | 15 | body: string | ArrayBuffer | ReadableStream<Uint8Array> | null |
80 | 16 | } |
81 | 17 |
|
82 | | -interface StrictEventListener<EventType extends Event> { |
83 | | - (event: EventType): void |
84 | | -} |
85 | | - |
86 | | -export interface SetupWorkerInternalContext { |
| 18 | +export type SetupWorkerInternalContext = { |
87 | 19 | isMockingEnabled: boolean |
| 20 | + workerStoppedAt?: number |
88 | 21 | startOptions: RequiredDeep<StartOptions> |
89 | | - worker: ServiceWorker | null |
90 | | - registration: ServiceWorkerRegistration | null |
| 22 | + workerPromise: DeferredPromise<ServiceWorker> |
| 23 | + registration: ServiceWorkerRegistration | undefined |
91 | 24 | getRequestHandlers: () => Array<RequestHandler | WebSocketHandler> |
92 | 25 | emitter: Emitter<LifeCycleEventsMap> |
93 | 26 | keepAliveInterval?: number |
94 | | - workerChannel: { |
95 | | - /** |
96 | | - * Adds a Service Worker event listener. |
97 | | - */ |
98 | | - on<EventType extends keyof ServiceWorkerIncomingEventsMap>( |
99 | | - eventType: EventType, |
100 | | - callback: ( |
101 | | - event: MessageEvent, |
102 | | - message: ServiceWorkerMessage< |
103 | | - EventType, |
104 | | - ServiceWorkerIncomingEventsMap[EventType] |
105 | | - >, |
106 | | - ) => void, |
107 | | - ): void |
108 | | - send<EventType extends ServiceWorkerOutgoingEventTypes>( |
109 | | - eventType: EventType, |
110 | | - ): void |
111 | | - } |
112 | | - events: { |
113 | | - /** |
114 | | - * Adds an event listener on the given target. |
115 | | - * Returns a clean-up function that removes that listener. |
116 | | - */ |
117 | | - addListener<EventType extends Event>( |
118 | | - target: EventTarget, |
119 | | - eventType: string, |
120 | | - callback: StrictEventListener<EventType>, |
121 | | - ): () => void |
122 | | - /** |
123 | | - * Removes all currently attached listeners. |
124 | | - */ |
125 | | - removeAllListeners(): void |
126 | | - /** |
127 | | - * Awaits a given message type from the Service Worker. |
128 | | - */ |
129 | | - once<EventType extends keyof ServiceWorkerIncomingEventsMap>( |
130 | | - eventType: EventType, |
131 | | - ): Promise< |
132 | | - ServiceWorkerMessage<EventType, ServiceWorkerIncomingEventsMap[EventType]> |
133 | | - > |
134 | | - } |
| 27 | + workerChannel: WorkerChannel |
135 | 28 | supports: { |
136 | 29 | serviceWorkerApi: boolean |
137 | 30 | readableStreamTransfer: boolean |
@@ -184,10 +77,12 @@ export interface StartOptions extends SharedOptions { |
184 | 77 | } |
185 | 78 |
|
186 | 79 | export type StartReturnType = Promise<ServiceWorkerRegistration | undefined> |
| 80 | + |
187 | 81 | export type StartHandler = ( |
188 | 82 | options: RequiredDeep<StartOptions>, |
189 | 83 | initialOptions: StartOptions, |
190 | 84 | ) => StartReturnType |
| 85 | + |
191 | 86 | export type StopHandler = () => void |
192 | 87 |
|
193 | 88 | export interface SetupWorker { |
|
0 commit comments