msw 2.0.14 → 2.1.0
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/cli/index.js +11 -3
- package/cli/init.js +126 -73
- package/config/scripts/postinstall.js +8 -20
- package/lib/browser/index.js +111 -176
- package/lib/browser/index.js.map +1 -1
- package/lib/browser/index.mjs +111 -179
- package/lib/browser/index.mjs.map +1 -1
- package/lib/core/{GraphQLHandler-JB4bsrLF.d.ts → GraphQLHandler-LZ8jH42-.d.ts} +1 -1
- package/lib/core/{GraphQLHandler-mT-MmgeB.d.mts → GraphQLHandler-c0pfLv8e.d.mts} +1 -1
- package/lib/core/HttpResponse.d.mts +1 -1
- package/lib/core/HttpResponse.d.ts +1 -1
- package/lib/core/{RequestHandler-rmY-HeFN.d.ts → RequestHandler-SdFwV297.d.ts} +8 -1
- package/lib/core/{RequestHandler-YiqamK0M.d.mts → RequestHandler-hEwneHZE.d.mts} +8 -1
- package/lib/core/SetupApi.d.mts +1 -1
- package/lib/core/SetupApi.d.ts +1 -1
- package/lib/core/SetupApi.js +5 -0
- package/lib/core/SetupApi.js.map +1 -1
- package/lib/core/SetupApi.mjs +5 -0
- package/lib/core/SetupApi.mjs.map +1 -1
- package/lib/core/delay.js +24 -46
- package/lib/core/delay.js.map +1 -1
- package/lib/core/delay.mjs +24 -46
- package/lib/core/delay.mjs.map +1 -1
- package/lib/core/graphql.d.mts +2 -2
- package/lib/core/graphql.d.ts +2 -2
- package/lib/core/graphql.js +3 -19
- package/lib/core/graphql.js.map +1 -1
- package/lib/core/graphql.mjs +3 -21
- package/lib/core/graphql.mjs.map +1 -1
- package/lib/core/handlers/GraphQLHandler.d.mts +2 -2
- package/lib/core/handlers/GraphQLHandler.d.ts +2 -2
- package/lib/core/handlers/GraphQLHandler.js +51 -77
- package/lib/core/handlers/GraphQLHandler.js.map +1 -1
- package/lib/core/handlers/GraphQLHandler.mjs +51 -77
- package/lib/core/handlers/GraphQLHandler.mjs.map +1 -1
- package/lib/core/handlers/HttpHandler.d.mts +1 -1
- package/lib/core/handlers/HttpHandler.d.ts +1 -1
- package/lib/core/handlers/HttpHandler.js +29 -55
- package/lib/core/handlers/HttpHandler.js.map +1 -1
- package/lib/core/handlers/HttpHandler.mjs +29 -55
- package/lib/core/handlers/HttpHandler.mjs.map +1 -1
- package/lib/core/handlers/RequestHandler.d.mts +1 -1
- package/lib/core/handlers/RequestHandler.d.ts +1 -1
- package/lib/core/handlers/RequestHandler.js +79 -103
- package/lib/core/handlers/RequestHandler.js.map +1 -1
- package/lib/core/handlers/RequestHandler.mjs +79 -105
- package/lib/core/handlers/RequestHandler.mjs.map +1 -1
- package/lib/core/http.d.mts +1 -1
- package/lib/core/http.d.ts +1 -1
- package/lib/core/index.d.mts +2 -2
- package/lib/core/index.d.ts +2 -2
- package/lib/core/sharedOptions.d.mts +1 -1
- package/lib/core/sharedOptions.d.ts +1 -1
- package/lib/core/utils/HttpResponse/decorators.d.mts +1 -1
- package/lib/core/utils/HttpResponse/decorators.d.ts +1 -1
- package/lib/core/utils/HttpResponse/decorators.js +7 -24
- package/lib/core/utils/HttpResponse/decorators.js.map +1 -1
- package/lib/core/utils/HttpResponse/decorators.mjs +7 -26
- package/lib/core/utils/HttpResponse/decorators.mjs.map +1 -1
- package/lib/core/utils/getResponse.d.mts +1 -1
- package/lib/core/utils/getResponse.d.ts +1 -1
- package/lib/core/utils/getResponse.js +11 -26
- package/lib/core/utils/getResponse.js.map +1 -1
- package/lib/core/utils/getResponse.mjs +11 -26
- package/lib/core/utils/getResponse.mjs.map +1 -1
- package/lib/core/utils/handleRequest.d.mts +1 -1
- package/lib/core/utils/handleRequest.d.ts +1 -1
- package/lib/core/utils/handleRequest.js +49 -72
- package/lib/core/utils/handleRequest.js.map +1 -1
- package/lib/core/utils/handleRequest.mjs +49 -72
- package/lib/core/utils/handleRequest.mjs.map +1 -1
- package/lib/core/utils/internal/Disposable.js +3 -27
- package/lib/core/utils/internal/Disposable.js.map +1 -1
- package/lib/core/utils/internal/Disposable.mjs +3 -27
- package/lib/core/utils/internal/Disposable.mjs.map +1 -1
- package/lib/core/utils/internal/parseGraphQLRequest.d.mts +2 -2
- package/lib/core/utils/internal/parseGraphQLRequest.d.ts +2 -2
- package/lib/core/utils/internal/parseGraphQLRequest.js +72 -112
- package/lib/core/utils/internal/parseGraphQLRequest.js.map +1 -1
- package/lib/core/utils/internal/parseGraphQLRequest.mjs +72 -113
- package/lib/core/utils/internal/parseGraphQLRequest.mjs.map +1 -1
- package/lib/core/utils/internal/parseMultipartData.d.mts +1 -1
- package/lib/core/utils/internal/parseMultipartData.d.ts +1 -1
- package/lib/core/utils/internal/parseMultipartData.js +3 -4
- package/lib/core/utils/internal/parseMultipartData.js.map +1 -1
- package/lib/core/utils/internal/parseMultipartData.mjs +3 -4
- package/lib/core/utils/internal/parseMultipartData.mjs.map +1 -1
- package/lib/core/utils/internal/requestHandlerUtils.d.mts +1 -1
- package/lib/core/utils/internal/requestHandlerUtils.d.ts +1 -1
- package/lib/core/utils/internal/tryCatch.js +1 -1
- package/lib/core/utils/internal/tryCatch.js.map +1 -1
- package/lib/core/utils/internal/tryCatch.mjs +1 -1
- package/lib/core/utils/internal/tryCatch.mjs.map +1 -1
- package/lib/core/utils/logging/serializeRequest.js +9 -31
- package/lib/core/utils/logging/serializeRequest.js.map +1 -1
- package/lib/core/utils/logging/serializeRequest.mjs +9 -31
- package/lib/core/utils/logging/serializeRequest.mjs.map +1 -1
- package/lib/core/utils/logging/serializeResponse.js +11 -33
- package/lib/core/utils/logging/serializeResponse.js.map +1 -1
- package/lib/core/utils/logging/serializeResponse.mjs +11 -33
- package/lib/core/utils/logging/serializeResponse.mjs.map +1 -1
- package/lib/core/utils/request/getRequestCookies.js +9 -18
- package/lib/core/utils/request/getRequestCookies.js.map +1 -1
- package/lib/core/utils/request/getRequestCookies.mjs +9 -20
- package/lib/core/utils/request/getRequestCookies.mjs.map +1 -1
- package/lib/core/utils/request/onUnhandledRequest.d.mts +1 -1
- package/lib/core/utils/request/onUnhandledRequest.d.ts +1 -1
- package/lib/core/utils/request/onUnhandledRequest.js +62 -84
- package/lib/core/utils/request/onUnhandledRequest.js.map +1 -1
- package/lib/core/utils/request/onUnhandledRequest.mjs +62 -84
- package/lib/core/utils/request/onUnhandledRequest.mjs.map +1 -1
- package/lib/core/utils/request/readResponseCookies.js +1 -18
- package/lib/core/utils/request/readResponseCookies.js.map +1 -1
- package/lib/core/utils/request/readResponseCookies.mjs +1 -20
- package/lib/core/utils/request/readResponseCookies.mjs.map +1 -1
- package/lib/iife/index.js +678 -958
- package/lib/iife/index.js.map +1 -1
- package/lib/mockServiceWorker.js +2 -2
- package/lib/native/index.js +5 -23
- package/lib/native/index.js.map +1 -1
- package/lib/native/index.mjs +5 -24
- package/lib/native/index.mjs.map +1 -1
- package/lib/node/index.js +5 -23
- package/lib/node/index.js.map +1 -1
- package/lib/node/index.mjs +5 -24
- package/lib/node/index.mjs.map +1 -1
- package/package.json +32 -37
- package/src/browser/setupWorker/setupWorker.ts +6 -0
- package/src/browser/setupWorker/start/createStartHandler.ts +0 -8
- package/src/core/handlers/RequestHandler.ts +23 -4
- package/src/core/utils/getResponse.ts +12 -6
- package/src/core/utils/handleRequest.test.ts +20 -0
- package/src/core/utils/handleRequest.ts +4 -3
package/lib/browser/index.mjs
CHANGED
|
@@ -1,49 +1,9 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __defProps = Object.defineProperties;
|
|
3
|
-
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
|
-
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
7
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
8
|
-
var __spreadValues = (a, b) => {
|
|
9
|
-
for (var prop in b || (b = {}))
|
|
10
|
-
if (__hasOwnProp.call(b, prop))
|
|
11
|
-
__defNormalProp(a, prop, b[prop]);
|
|
12
|
-
if (__getOwnPropSymbols)
|
|
13
|
-
for (var prop of __getOwnPropSymbols(b)) {
|
|
14
|
-
if (__propIsEnum.call(b, prop))
|
|
15
|
-
__defNormalProp(a, prop, b[prop]);
|
|
16
|
-
}
|
|
17
|
-
return a;
|
|
18
|
-
};
|
|
19
|
-
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
20
|
-
var __async = (__this, __arguments, generator) => {
|
|
21
|
-
return new Promise((resolve, reject) => {
|
|
22
|
-
var fulfilled = (value) => {
|
|
23
|
-
try {
|
|
24
|
-
step(generator.next(value));
|
|
25
|
-
} catch (e) {
|
|
26
|
-
reject(e);
|
|
27
|
-
}
|
|
28
|
-
};
|
|
29
|
-
var rejected = (value) => {
|
|
30
|
-
try {
|
|
31
|
-
step(generator.throw(value));
|
|
32
|
-
} catch (e) {
|
|
33
|
-
reject(e);
|
|
34
|
-
}
|
|
35
|
-
};
|
|
36
|
-
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
37
|
-
step((generator = generator.apply(__this, __arguments)).next());
|
|
38
|
-
});
|
|
39
|
-
};
|
|
40
|
-
|
|
41
1
|
// src/browser/setupWorker/setupWorker.ts
|
|
42
2
|
import { invariant } from "outvariant";
|
|
43
3
|
import { isNodeProcess } from "is-node-process";
|
|
44
4
|
|
|
45
5
|
// src/browser/setupWorker/start/createStartHandler.ts
|
|
46
|
-
import { until as
|
|
6
|
+
import { until as until2 } from "@open-draft/until";
|
|
47
7
|
import { devUtils as devUtils6 } from '../core/utils/internal/devUtils.mjs';
|
|
48
8
|
|
|
49
9
|
// src/browser/setupWorker/start/utils/getWorkerInstance.ts
|
|
@@ -72,9 +32,9 @@ function getWorkerByRegistration(registration, absoluteWorkerUrl, findWorker) {
|
|
|
72
32
|
}
|
|
73
33
|
|
|
74
34
|
// src/browser/setupWorker/start/utils/getWorkerInstance.ts
|
|
75
|
-
var getWorkerInstance =
|
|
35
|
+
var getWorkerInstance = async (url, options = {}, findWorker) => {
|
|
76
36
|
const absoluteWorkerUrl = getAbsoluteWorkerUrl(url);
|
|
77
|
-
const mockRegistrations =
|
|
37
|
+
const mockRegistrations = await navigator.serviceWorker.getRegistrations().then(
|
|
78
38
|
(registrations) => registrations.filter(
|
|
79
39
|
(registration) => getWorkerByRegistration(registration, absoluteWorkerUrl, findWorker)
|
|
80
40
|
)
|
|
@@ -95,21 +55,21 @@ var getWorkerInstance = (_0, ..._1) => __async(void 0, [_0, ..._1], function* (u
|
|
|
95
55
|
];
|
|
96
56
|
});
|
|
97
57
|
}
|
|
98
|
-
const registrationResult =
|
|
99
|
-
() =>
|
|
100
|
-
const registration =
|
|
58
|
+
const registrationResult = await until(
|
|
59
|
+
async () => {
|
|
60
|
+
const registration = await navigator.serviceWorker.register(url, options);
|
|
101
61
|
return [
|
|
102
62
|
// Compare existing worker registration by its worker URL,
|
|
103
63
|
// to prevent irrelevant workers to resolve here (such as Codesandbox worker).
|
|
104
64
|
getWorkerByRegistration(registration, absoluteWorkerUrl, findWorker),
|
|
105
65
|
registration
|
|
106
66
|
];
|
|
107
|
-
}
|
|
67
|
+
}
|
|
108
68
|
);
|
|
109
69
|
if (registrationResult.error) {
|
|
110
70
|
const isWorkerMissing = registrationResult.error.message.includes("(404)");
|
|
111
71
|
if (isWorkerMissing) {
|
|
112
|
-
const scopeUrl = new URL(
|
|
72
|
+
const scopeUrl = new URL(options?.scope || "/", location.href);
|
|
113
73
|
throw new Error(
|
|
114
74
|
devUtils.formatMessage(`Failed to register a Service Worker for scope ('${scopeUrl.href}') with script ('${absoluteWorkerUrl}'): Service Worker script does not exist at the given path.
|
|
115
75
|
|
|
@@ -126,7 +86,7 @@ Learn more about creating the Service Worker script: https://mswjs.io/docs/cli/i
|
|
|
126
86
|
);
|
|
127
87
|
}
|
|
128
88
|
return registrationResult.data;
|
|
129
|
-
}
|
|
89
|
+
};
|
|
130
90
|
|
|
131
91
|
// src/browser/setupWorker/start/utils/enableMocking.ts
|
|
132
92
|
import { devUtils as devUtils3 } from '../core/utils/internal/devUtils.mjs';
|
|
@@ -158,23 +118,20 @@ function printStartMessage(args = {}) {
|
|
|
158
118
|
}
|
|
159
119
|
|
|
160
120
|
// src/browser/setupWorker/start/utils/enableMocking.ts
|
|
161
|
-
function enableMocking(context, options) {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
workerScope: (_a = context.registration) == null ? void 0 : _a.scope,
|
|
176
|
-
workerUrl: (_b = context.worker) == null ? void 0 : _b.scriptURL
|
|
177
|
-
});
|
|
121
|
+
async function enableMocking(context, options) {
|
|
122
|
+
context.workerChannel.send("MOCK_ACTIVATE");
|
|
123
|
+
await context.events.once("MOCKING_ENABLED");
|
|
124
|
+
if (context.isMockingEnabled) {
|
|
125
|
+
devUtils3.warn(
|
|
126
|
+
`Found a redundant "worker.start()" call. Note that starting the worker while mocking is already enabled will have no effect. Consider removing this "worker.start()" call.`
|
|
127
|
+
);
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
context.isMockingEnabled = true;
|
|
131
|
+
printStartMessage({
|
|
132
|
+
quiet: options.quiet,
|
|
133
|
+
workerScope: context.registration?.scope,
|
|
134
|
+
workerUrl: context.worker?.scriptURL
|
|
178
135
|
});
|
|
179
136
|
}
|
|
180
137
|
|
|
@@ -199,9 +156,10 @@ function pruneGetRequestBody(request) {
|
|
|
199
156
|
|
|
200
157
|
// src/browser/utils/parseWorkerRequest.ts
|
|
201
158
|
function parseWorkerRequest(incomingRequest) {
|
|
202
|
-
return new Request(incomingRequest.url,
|
|
159
|
+
return new Request(incomingRequest.url, {
|
|
160
|
+
...incomingRequest,
|
|
203
161
|
body: pruneGetRequestBody(incomingRequest)
|
|
204
|
-
})
|
|
162
|
+
});
|
|
205
163
|
}
|
|
206
164
|
|
|
207
165
|
// src/browser/setupWorker/start/createRequestListener.ts
|
|
@@ -209,15 +167,13 @@ import { handleRequest } from '../core/utils/handleRequest.mjs';
|
|
|
209
167
|
import { devUtils as devUtils4 } from '../core/utils/internal/devUtils.mjs';
|
|
210
168
|
import { toResponseInit } from '../core/utils/toResponseInit.mjs';
|
|
211
169
|
var createRequestListener = (context, options) => {
|
|
212
|
-
return (event, message) =>
|
|
213
|
-
var _b;
|
|
170
|
+
return async (event, message) => {
|
|
214
171
|
const messageChannel = new WorkerChannel(event.ports[0]);
|
|
215
172
|
const requestId = message.payload.id;
|
|
216
173
|
const request = parseWorkerRequest(message.payload);
|
|
217
174
|
const requestCloneForLogs = request.clone();
|
|
218
175
|
try {
|
|
219
|
-
|
|
220
|
-
yield handleRequest(
|
|
176
|
+
await handleRequest(
|
|
221
177
|
request,
|
|
222
178
|
requestId,
|
|
223
179
|
context.requestHandlers,
|
|
@@ -227,36 +183,36 @@ var createRequestListener = (context, options) => {
|
|
|
227
183
|
onPassthroughResponse() {
|
|
228
184
|
messageChannel.postMessage("NOT_FOUND");
|
|
229
185
|
},
|
|
230
|
-
onMockedResponse(
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
186
|
+
async onMockedResponse(response, { handler, parsedResult }) {
|
|
187
|
+
const responseClone = response.clone();
|
|
188
|
+
const responseCloneForLogs = response.clone();
|
|
189
|
+
const responseInit = toResponseInit(response);
|
|
190
|
+
if (context.supports.readableStreamTransfer) {
|
|
191
|
+
const responseStreamOrNull = response.body;
|
|
192
|
+
messageChannel.postMessage(
|
|
193
|
+
"MOCK_RESPONSE",
|
|
194
|
+
{
|
|
195
|
+
...responseInit,
|
|
196
|
+
body: responseStreamOrNull
|
|
197
|
+
},
|
|
198
|
+
responseStreamOrNull ? [responseStreamOrNull] : void 0
|
|
199
|
+
);
|
|
200
|
+
} else {
|
|
201
|
+
const responseBufferOrNull = response.body === null ? null : await responseClone.arrayBuffer();
|
|
202
|
+
messageChannel.postMessage("MOCK_RESPONSE", {
|
|
203
|
+
...responseInit,
|
|
204
|
+
body: responseBufferOrNull
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
if (!options.quiet) {
|
|
208
|
+
context.emitter.once("response:mocked", () => {
|
|
209
|
+
handler.log({
|
|
210
|
+
request: requestCloneForLogs,
|
|
211
|
+
response: responseCloneForLogs,
|
|
212
|
+
parsedResult
|
|
257
213
|
});
|
|
258
|
-
}
|
|
259
|
-
}
|
|
214
|
+
});
|
|
215
|
+
}
|
|
260
216
|
}
|
|
261
217
|
}
|
|
262
218
|
);
|
|
@@ -270,7 +226,7 @@ var createRequestListener = (context, options) => {
|
|
|
270
226
|
This exception has been gracefully handled as a 500 response, however, it's strongly recommended to resolve this error, as it indicates a mistake in your code. If you wish to mock an error response, please see this guide: https://mswjs.io/docs/recipes/mocking-error-responses`,
|
|
271
227
|
request.method,
|
|
272
228
|
request.url,
|
|
273
|
-
|
|
229
|
+
error.stack ?? error
|
|
274
230
|
);
|
|
275
231
|
messageChannel.postMessage("MOCK_RESPONSE", {
|
|
276
232
|
status: 500,
|
|
@@ -286,50 +242,29 @@ This exception has been gracefully handled as a 500 response, however, it's stro
|
|
|
286
242
|
});
|
|
287
243
|
}
|
|
288
244
|
}
|
|
289
|
-
}
|
|
245
|
+
};
|
|
290
246
|
};
|
|
291
247
|
|
|
292
248
|
// src/browser/utils/requestIntegrityCheck.ts
|
|
293
|
-
function requestIntegrityCheck(context, serviceWorker) {
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
249
|
+
async function requestIntegrityCheck(context, serviceWorker) {
|
|
250
|
+
context.workerChannel.send("INTEGRITY_CHECK_REQUEST");
|
|
251
|
+
const { payload: actualChecksum } = await context.events.once(
|
|
252
|
+
"INTEGRITY_CHECK_RESPONSE"
|
|
253
|
+
);
|
|
254
|
+
if (actualChecksum !== "223d191a56023cd36aa88c802961b911") {
|
|
255
|
+
throw new Error(
|
|
256
|
+
`Currently active Service Worker (${actualChecksum}) is behind the latest published one (${"223d191a56023cd36aa88c802961b911"}).`
|
|
298
257
|
);
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
`Currently active Service Worker (${actualChecksum}) is behind the latest published one (${"c5f7f8e188b673ea4e677df7ea3c5a39"}).`
|
|
302
|
-
);
|
|
303
|
-
}
|
|
304
|
-
return serviceWorker;
|
|
305
|
-
});
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
// src/browser/utils/deferNetworkRequestsUntil.ts
|
|
309
|
-
import { until as until2 } from "@open-draft/until";
|
|
310
|
-
function deferNetworkRequestsUntil(predicatePromise) {
|
|
311
|
-
const originalXhrSend = window.XMLHttpRequest.prototype.send;
|
|
312
|
-
window.XMLHttpRequest.prototype.send = function(...args) {
|
|
313
|
-
until2(() => predicatePromise).then(() => {
|
|
314
|
-
window.XMLHttpRequest.prototype.send = originalXhrSend;
|
|
315
|
-
this.send(...args);
|
|
316
|
-
});
|
|
317
|
-
};
|
|
318
|
-
const originalFetch = window.fetch;
|
|
319
|
-
window.fetch = (...args) => __async(this, null, function* () {
|
|
320
|
-
yield until2(() => predicatePromise);
|
|
321
|
-
window.fetch = originalFetch;
|
|
322
|
-
return window.fetch(...args);
|
|
323
|
-
});
|
|
258
|
+
}
|
|
259
|
+
return serviceWorker;
|
|
324
260
|
}
|
|
325
261
|
|
|
326
262
|
// src/browser/setupWorker/start/createResponseListener.ts
|
|
327
263
|
import { isResponseWithoutBody } from "@mswjs/interceptors";
|
|
328
264
|
function createResponseListener(context) {
|
|
329
265
|
return (_, message) => {
|
|
330
|
-
var _a;
|
|
331
266
|
const { payload: responseJson } = message;
|
|
332
|
-
if (
|
|
267
|
+
if (responseJson.type?.includes("opaque")) {
|
|
333
268
|
return;
|
|
334
269
|
}
|
|
335
270
|
const response = responseJson.status === 0 ? Response.error() : new Response(
|
|
@@ -360,7 +295,7 @@ function createResponseListener(context) {
|
|
|
360
295
|
// src/browser/setupWorker/start/utils/validateWorkerScope.ts
|
|
361
296
|
import { devUtils as devUtils5 } from '../core/utils/internal/devUtils.mjs';
|
|
362
297
|
function validateWorkerScope(registration, options) {
|
|
363
|
-
if (!
|
|
298
|
+
if (!options?.quiet && !location.href.startsWith(registration.scope)) {
|
|
364
299
|
devUtils5.warn(
|
|
365
300
|
`Cannot intercept requests on this page because it's outside of the worker's scope ("${registration.scope}"). If you wish to mock API requests on this page, you must resolve this scope issue.
|
|
366
301
|
|
|
@@ -373,21 +308,21 @@ function validateWorkerScope(registration, options) {
|
|
|
373
308
|
// src/browser/setupWorker/start/createStartHandler.ts
|
|
374
309
|
var createStartHandler = (context) => {
|
|
375
310
|
return function start(options, customOptions) {
|
|
376
|
-
const startWorkerInstance = () =>
|
|
311
|
+
const startWorkerInstance = async () => {
|
|
377
312
|
context.events.removeAllListeners();
|
|
378
313
|
context.workerChannel.on(
|
|
379
314
|
"REQUEST",
|
|
380
315
|
createRequestListener(context, options)
|
|
381
316
|
);
|
|
382
317
|
context.workerChannel.on("RESPONSE", createResponseListener(context));
|
|
383
|
-
const instance =
|
|
318
|
+
const instance = await getWorkerInstance(
|
|
384
319
|
options.serviceWorker.url,
|
|
385
320
|
options.serviceWorker.options,
|
|
386
321
|
options.findWorker
|
|
387
322
|
);
|
|
388
323
|
const [worker, registration] = instance;
|
|
389
324
|
if (!worker) {
|
|
390
|
-
const missingWorkerMessage =
|
|
325
|
+
const missingWorkerMessage = customOptions?.findWorker ? devUtils6.formatMessage(
|
|
391
326
|
`Failed to locate the Service Worker registration using a custom "findWorker" predicate.
|
|
392
327
|
|
|
393
328
|
Please ensure that the custom predicate properly locates the Service Worker registration at "%s".
|
|
@@ -413,7 +348,7 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
|
|
|
413
348
|
}
|
|
414
349
|
window.clearInterval(context.keepAliveInterval);
|
|
415
350
|
});
|
|
416
|
-
const integrityCheckResult =
|
|
351
|
+
const integrityCheckResult = await until2(
|
|
417
352
|
() => requestIntegrityCheck(context, worker)
|
|
418
353
|
);
|
|
419
354
|
if (integrityCheckResult.error) {
|
|
@@ -432,12 +367,12 @@ If this message still persists after updating, please report an issue: https://g
|
|
|
432
367
|
);
|
|
433
368
|
validateWorkerScope(registration, context.startOptions);
|
|
434
369
|
return registration;
|
|
435
|
-
}
|
|
370
|
+
};
|
|
436
371
|
const workerRegistration = startWorkerInstance().then(
|
|
437
|
-
(registration) =>
|
|
372
|
+
async (registration) => {
|
|
438
373
|
const pendingInstance = registration.installing || registration.waiting;
|
|
439
374
|
if (pendingInstance) {
|
|
440
|
-
|
|
375
|
+
await new Promise((resolve) => {
|
|
441
376
|
pendingInstance.addEventListener("statechange", () => {
|
|
442
377
|
if (pendingInstance.state === "activated") {
|
|
443
378
|
return resolve();
|
|
@@ -445,15 +380,12 @@ If this message still persists after updating, please report an issue: https://g
|
|
|
445
380
|
});
|
|
446
381
|
});
|
|
447
382
|
}
|
|
448
|
-
|
|
449
|
-
throw new Error(`Failed to enable mocking: ${error
|
|
383
|
+
await enableMocking(context, options).catch((error) => {
|
|
384
|
+
throw new Error(`Failed to enable mocking: ${error?.message}`);
|
|
450
385
|
});
|
|
451
386
|
return registration;
|
|
452
|
-
}
|
|
387
|
+
}
|
|
453
388
|
);
|
|
454
|
-
if (options.waitUntilReady) {
|
|
455
|
-
deferNetworkRequestsUntil(workerRegistration);
|
|
456
|
-
}
|
|
457
389
|
return workerRegistration;
|
|
458
390
|
};
|
|
459
391
|
};
|
|
@@ -476,7 +408,6 @@ function printStopMessage(args = {}) {
|
|
|
476
408
|
// src/browser/setupWorker/stop/createStop.ts
|
|
477
409
|
var createStop = (context) => {
|
|
478
410
|
return function stop() {
|
|
479
|
-
var _a;
|
|
480
411
|
if (!context.isMockingEnabled) {
|
|
481
412
|
devUtils8.warn(
|
|
482
413
|
'Found a redundant "worker.stop()" call. Note that stopping the worker while mocking already stopped has no effect. Consider removing this "worker.stop()" call.'
|
|
@@ -486,7 +417,7 @@ var createStop = (context) => {
|
|
|
486
417
|
context.workerChannel.send("MOCK_DEACTIVATE");
|
|
487
418
|
context.isMockingEnabled = false;
|
|
488
419
|
window.clearInterval(context.keepAliveInterval);
|
|
489
|
-
printStopMessage({ quiet:
|
|
420
|
+
printStopMessage({ quiet: context.startOptions?.quiet });
|
|
490
421
|
};
|
|
491
422
|
};
|
|
492
423
|
|
|
@@ -517,9 +448,9 @@ function createFallbackRequestListener(context, options) {
|
|
|
517
448
|
name: "fallback",
|
|
518
449
|
interceptors: [new FetchInterceptor(), new XMLHttpRequestInterceptor()]
|
|
519
450
|
});
|
|
520
|
-
interceptor.on("request",
|
|
451
|
+
interceptor.on("request", async ({ request, requestId }) => {
|
|
521
452
|
const requestCloneForLogs = request.clone();
|
|
522
|
-
const response =
|
|
453
|
+
const response = await handleRequest2(
|
|
523
454
|
request,
|
|
524
455
|
requestId,
|
|
525
456
|
context.requestHandlers,
|
|
@@ -542,7 +473,7 @@ function createFallbackRequestListener(context, options) {
|
|
|
542
473
|
if (response) {
|
|
543
474
|
request.respondWith(response);
|
|
544
475
|
}
|
|
545
|
-
})
|
|
476
|
+
});
|
|
546
477
|
interceptor.on(
|
|
547
478
|
"response",
|
|
548
479
|
({ response, isMockedResponse, request, requestId }) => {
|
|
@@ -562,27 +493,24 @@ function createFallbackRequestListener(context, options) {
|
|
|
562
493
|
|
|
563
494
|
// src/browser/setupWorker/start/createFallbackStart.ts
|
|
564
495
|
function createFallbackStart(context) {
|
|
565
|
-
return function start(options) {
|
|
566
|
-
|
|
567
|
-
context
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
quiet: options.quiet
|
|
574
|
-
});
|
|
575
|
-
return void 0;
|
|
496
|
+
return async function start(options) {
|
|
497
|
+
context.fallbackInterceptor = createFallbackRequestListener(
|
|
498
|
+
context,
|
|
499
|
+
options
|
|
500
|
+
);
|
|
501
|
+
printStartMessage({
|
|
502
|
+
message: "Mocking enabled (fallback mode).",
|
|
503
|
+
quiet: options.quiet
|
|
576
504
|
});
|
|
505
|
+
return void 0;
|
|
577
506
|
};
|
|
578
507
|
}
|
|
579
508
|
|
|
580
509
|
// src/browser/setupWorker/stop/createFallbackStop.ts
|
|
581
510
|
function createFallbackStop(context) {
|
|
582
511
|
return function stop() {
|
|
583
|
-
|
|
584
|
-
(
|
|
585
|
-
printStopMessage({ quiet: (_b = context.startOptions) == null ? void 0 : _b.quiet });
|
|
512
|
+
context.fallbackInterceptor?.dispose();
|
|
513
|
+
printStopMessage({ quiet: context.startOptions?.quiet });
|
|
586
514
|
};
|
|
587
515
|
}
|
|
588
516
|
|
|
@@ -607,10 +535,12 @@ function supportsReadableStreamTransfer() {
|
|
|
607
535
|
|
|
608
536
|
// src/browser/setupWorker/setupWorker.ts
|
|
609
537
|
var SetupWorkerApi = class extends SetupApi {
|
|
538
|
+
context;
|
|
539
|
+
startHandler = null;
|
|
540
|
+
stopHandler = null;
|
|
541
|
+
listeners;
|
|
610
542
|
constructor(...handlers) {
|
|
611
543
|
super(...handlers);
|
|
612
|
-
this.startHandler = null;
|
|
613
|
-
this.stopHandler = null;
|
|
614
544
|
invariant(
|
|
615
545
|
!isNodeProcess(),
|
|
616
546
|
devUtils9.formatMessage(
|
|
@@ -646,8 +576,7 @@ var SetupWorkerApi = class extends SetupApi {
|
|
|
646
576
|
});
|
|
647
577
|
},
|
|
648
578
|
send: (type) => {
|
|
649
|
-
|
|
650
|
-
(_a = this.context.worker) == null ? void 0 : _a.postMessage(type);
|
|
579
|
+
this.context.worker?.postMessage(type);
|
|
651
580
|
}
|
|
652
581
|
},
|
|
653
582
|
events: {
|
|
@@ -712,14 +641,17 @@ var SetupWorkerApi = class extends SetupApi {
|
|
|
712
641
|
this.stopHandler = context.supports.serviceWorkerApi ? createFallbackStop(context) : createStop(context);
|
|
713
642
|
return context;
|
|
714
643
|
}
|
|
715
|
-
start() {
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
options
|
|
644
|
+
async start(options = {}) {
|
|
645
|
+
if (options.waitUntilReady === true) {
|
|
646
|
+
devUtils9.warn(
|
|
647
|
+
'The "waitUntilReady" option has been deprecated. Please remove it from this "worker.start()" call. Follow the recommended Browser integration (https://mswjs.io/docs/integrations/browser) to eliminate any race conditions between the Service Worker registration and any requests made by your application on initial render.'
|
|
720
648
|
);
|
|
721
|
-
|
|
722
|
-
|
|
649
|
+
}
|
|
650
|
+
this.context.startOptions = mergeRight2(
|
|
651
|
+
DEFAULT_START_OPTIONS,
|
|
652
|
+
options
|
|
653
|
+
);
|
|
654
|
+
return await this.startHandler(this.context.startOptions, options);
|
|
723
655
|
}
|
|
724
656
|
stop() {
|
|
725
657
|
super.dispose();
|