msw 1.3.2 → 2.0.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/README.md +32 -29
- package/browser/package.json +5 -0
- package/cli/init.js +3 -3
- package/config/constants.js +1 -2
- package/lib/browser/index.d.ts +104 -0
- package/lib/browser/index.js +751 -0
- package/lib/browser/index.mjs +733 -0
- package/lib/core/GraphQLHandler-b42ca96f.d.ts +74 -0
- package/lib/core/HttpResponse.d.ts +2 -0
- package/lib/core/HttpResponse.js +94 -0
- package/lib/core/HttpResponse.mjs +77 -0
- package/lib/core/RequestHandler-1a5dbdc7.d.ts +172 -0
- package/lib/core/SetupApi.d.ts +26 -0
- package/lib/core/SetupApi.js +83 -0
- package/lib/core/SetupApi.mjs +63 -0
- package/lib/core/bypass.d.ts +16 -0
- package/lib/core/bypass.js +36 -0
- package/lib/core/bypass.mjs +16 -0
- package/lib/core/delay.d.ts +18 -0
- package/lib/core/delay.js +92 -0
- package/lib/core/delay.mjs +72 -0
- package/lib/core/graphql.d.ts +109 -0
- package/lib/core/graphql.js +112 -0
- package/lib/core/graphql.mjs +96 -0
- package/lib/core/handlers/GraphQLHandler.d.ts +5 -0
- package/lib/core/handlers/GraphQLHandler.js +145 -0
- package/lib/core/handlers/GraphQLHandler.mjs +130 -0
- package/lib/core/handlers/HttpHandler.d.ts +62 -0
- package/lib/core/handlers/HttpHandler.js +149 -0
- package/lib/core/handlers/HttpHandler.mjs +133 -0
- package/lib/core/handlers/RequestHandler.d.ts +2 -0
- package/lib/core/handlers/RequestHandler.js +180 -0
- package/lib/core/handlers/RequestHandler.mjs +162 -0
- package/lib/core/http.d.ts +26 -0
- package/lib/core/http.js +39 -0
- package/lib/core/http.mjs +22 -0
- package/lib/core/http.spec.d.ts +2 -0
- package/lib/core/http.spec.js +15 -0
- package/lib/core/http.spec.mjs +14 -0
- package/lib/core/index.d.ts +18 -0
- package/lib/core/index.js +49 -0
- package/lib/core/index.mjs +28 -0
- package/lib/core/passthrough.d.ts +17 -0
- package/lib/core/passthrough.js +32 -0
- package/lib/core/passthrough.mjs +12 -0
- package/lib/core/sharedOptions.d.ts +66 -0
- package/lib/core/sharedOptions.js +16 -0
- package/lib/core/sharedOptions.mjs +0 -0
- package/lib/core/typeUtils.d.ts +7 -0
- package/lib/core/typeUtils.js +16 -0
- package/lib/core/typeUtils.mjs +0 -0
- package/lib/core/utils/HttpResponse/decorators.d.ts +12 -0
- package/lib/core/utils/HttpResponse/decorators.js +80 -0
- package/lib/core/utils/HttpResponse/decorators.mjs +52 -0
- package/lib/core/utils/getResponse.d.ts +2 -0
- package/lib/core/utils/getResponse.js +64 -0
- package/lib/core/utils/getResponse.mjs +44 -0
- package/lib/core/utils/handleRequest.d.ts +30 -0
- package/lib/core/utils/handleRequest.js +102 -0
- package/lib/core/utils/handleRequest.mjs +82 -0
- package/lib/core/utils/internal/Disposable.d.ts +7 -0
- package/lib/core/utils/internal/Disposable.js +53 -0
- package/lib/core/utils/internal/Disposable.mjs +33 -0
- package/lib/core/utils/internal/checkGlobals.d.ts +3 -0
- package/lib/core/utils/internal/checkGlobals.js +33 -0
- package/lib/core/utils/internal/checkGlobals.mjs +13 -0
- package/lib/core/utils/internal/devUtils.d.ts +19 -0
- package/lib/core/utils/internal/devUtils.js +40 -0
- package/lib/core/utils/internal/devUtils.mjs +20 -0
- package/lib/core/utils/internal/getCallFrame.d.ts +6 -0
- package/lib/core/utils/internal/getCallFrame.js +40 -0
- package/lib/core/utils/internal/getCallFrame.mjs +20 -0
- package/lib/core/utils/internal/isIterable.d.ts +6 -0
- package/lib/core/utils/internal/isIterable.js +29 -0
- package/lib/core/utils/internal/isIterable.mjs +9 -0
- package/lib/core/utils/internal/isObject.d.ts +6 -0
- package/lib/core/utils/internal/isObject.js +26 -0
- package/lib/core/utils/internal/isObject.mjs +6 -0
- package/lib/core/utils/internal/isStringEqual.d.ts +6 -0
- package/lib/core/utils/internal/isStringEqual.js +26 -0
- package/lib/core/utils/internal/isStringEqual.mjs +6 -0
- package/lib/core/utils/internal/jsonParse.d.ts +7 -0
- package/lib/core/utils/internal/jsonParse.js +30 -0
- package/lib/core/utils/internal/jsonParse.mjs +10 -0
- package/lib/core/utils/internal/mergeRight.d.ts +7 -0
- package/lib/core/utils/internal/mergeRight.js +39 -0
- package/lib/core/utils/internal/mergeRight.mjs +19 -0
- package/lib/core/utils/internal/parseGraphQLRequest.d.ts +5 -0
- package/lib/core/utils/internal/parseGraphQLRequest.js +184 -0
- package/lib/core/utils/internal/parseGraphQLRequest.mjs +165 -0
- package/lib/core/utils/internal/parseMultipartData.d.ts +10 -0
- package/lib/core/utils/internal/parseMultipartData.js +81 -0
- package/lib/core/utils/internal/parseMultipartData.mjs +61 -0
- package/lib/core/utils/internal/pipeEvents.d.ts +8 -0
- package/lib/core/utils/internal/pipeEvents.js +34 -0
- package/lib/core/utils/internal/pipeEvents.mjs +14 -0
- package/lib/core/utils/internal/requestHandlerUtils.d.ts +8 -0
- package/lib/core/utils/internal/requestHandlerUtils.js +36 -0
- package/lib/core/utils/internal/requestHandlerUtils.mjs +16 -0
- package/lib/core/utils/internal/toReadonlyArray.d.ts +6 -0
- package/lib/core/utils/internal/toReadonlyArray.js +28 -0
- package/lib/core/utils/internal/toReadonlyArray.mjs +8 -0
- package/lib/core/utils/internal/tryCatch.d.ts +3 -0
- package/lib/core/utils/internal/tryCatch.js +31 -0
- package/lib/core/utils/internal/tryCatch.mjs +11 -0
- package/lib/core/utils/internal/uuidv4.d.ts +3 -0
- package/lib/core/utils/internal/uuidv4.js +26 -0
- package/lib/core/utils/internal/uuidv4.mjs +6 -0
- package/lib/core/utils/logging/getStatusCodeColor.d.ts +11 -0
- package/lib/core/utils/logging/getStatusCodeColor.js +39 -0
- package/lib/core/utils/logging/getStatusCodeColor.mjs +19 -0
- package/lib/core/utils/logging/getTimestamp.d.ts +6 -0
- package/lib/core/utils/logging/getTimestamp.js +27 -0
- package/lib/core/utils/logging/getTimestamp.mjs +7 -0
- package/lib/core/utils/logging/serializeRequest.d.ts +12 -0
- package/lib/core/utils/logging/serializeRequest.js +55 -0
- package/lib/core/utils/logging/serializeRequest.mjs +35 -0
- package/lib/core/utils/logging/serializeResponse.d.ts +9 -0
- package/lib/core/utils/logging/serializeResponse.js +69 -0
- package/lib/core/utils/logging/serializeResponse.mjs +39 -0
- package/lib/core/utils/matching/matchRequestUrl.d.ts +19 -0
- package/lib/core/utils/matching/matchRequestUrl.js +50 -0
- package/lib/core/utils/matching/matchRequestUrl.mjs +30 -0
- package/lib/core/utils/matching/normalizePath.d.ts +12 -0
- package/lib/core/utils/matching/normalizePath.js +32 -0
- package/lib/core/utils/matching/normalizePath.mjs +12 -0
- package/lib/core/utils/request/getPublicUrlFromRequest.d.ts +7 -0
- package/lib/core/utils/request/getPublicUrlFromRequest.js +30 -0
- package/lib/core/utils/request/getPublicUrlFromRequest.mjs +10 -0
- package/lib/core/utils/request/getRequestCookies.d.ts +8 -0
- package/lib/core/utils/request/getRequestCookies.js +88 -0
- package/lib/core/utils/request/getRequestCookies.mjs +60 -0
- package/lib/core/utils/request/onUnhandledRequest.d.ts +12 -0
- package/lib/core/utils/request/onUnhandledRequest.js +193 -0
- package/lib/core/utils/request/onUnhandledRequest.mjs +165 -0
- package/lib/core/utils/request/readResponseCookies.d.ts +3 -0
- package/lib/core/utils/request/readResponseCookies.js +45 -0
- package/lib/core/utils/request/readResponseCookies.mjs +27 -0
- package/lib/core/utils/toResponseInit.d.ts +3 -0
- package/lib/core/utils/toResponseInit.js +30 -0
- package/lib/core/utils/toResponseInit.mjs +10 -0
- package/lib/core/utils/url/cleanUrl.d.ts +7 -0
- package/lib/core/utils/url/cleanUrl.js +31 -0
- package/lib/core/utils/url/cleanUrl.mjs +11 -0
- package/lib/core/utils/url/getAbsoluteUrl.d.ts +6 -0
- package/lib/core/utils/url/getAbsoluteUrl.js +37 -0
- package/lib/core/utils/url/getAbsoluteUrl.mjs +17 -0
- package/lib/core/utils/url/isAbsoluteUrl.d.ts +6 -0
- package/lib/core/utils/url/isAbsoluteUrl.js +26 -0
- package/lib/core/utils/url/isAbsoluteUrl.mjs +6 -0
- package/lib/iife/index.js +6203 -12360
- package/lib/mockServiceWorker.js +82 -93
- package/lib/native/index.d.ts +67 -7
- package/lib/native/index.js +74 -1500
- package/lib/native/index.mjs +69 -1514
- package/lib/node/index.d.ts +68 -9
- package/lib/node/index.js +77 -1508
- package/lib/node/index.mjs +71 -1521
- package/native/package.json +2 -1
- package/node/package.json +2 -1
- package/package.json +53 -23
- package/lib/SetupServerApi-1855d9c6.d.ts +0 -20
- package/lib/glossary-de6278a9.d.ts +0 -385
- package/lib/iife/index.js.map +0 -1
- package/lib/index.d.ts +0 -365
- package/lib/index.js +0 -2295
- package/lib/index.js.map +0 -1
- package/lib/node/index.js.map +0 -1
- package/lib/node/index.mjs.map +0 -1
|
@@ -0,0 +1,751 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __defProps = Object.defineProperties;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
6
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
8
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
10
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
11
|
+
var __spreadValues = (a, b) => {
|
|
12
|
+
for (var prop in b || (b = {}))
|
|
13
|
+
if (__hasOwnProp.call(b, prop))
|
|
14
|
+
__defNormalProp(a, prop, b[prop]);
|
|
15
|
+
if (__getOwnPropSymbols)
|
|
16
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
17
|
+
if (__propIsEnum.call(b, prop))
|
|
18
|
+
__defNormalProp(a, prop, b[prop]);
|
|
19
|
+
}
|
|
20
|
+
return a;
|
|
21
|
+
};
|
|
22
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
23
|
+
var __export = (target, all) => {
|
|
24
|
+
for (var name in all)
|
|
25
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
26
|
+
};
|
|
27
|
+
var __copyProps = (to, from, except, desc) => {
|
|
28
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
29
|
+
for (let key of __getOwnPropNames(from))
|
|
30
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
31
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
32
|
+
}
|
|
33
|
+
return to;
|
|
34
|
+
};
|
|
35
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
36
|
+
var __async = (__this, __arguments, generator) => {
|
|
37
|
+
return new Promise((resolve, reject) => {
|
|
38
|
+
var fulfilled = (value) => {
|
|
39
|
+
try {
|
|
40
|
+
step(generator.next(value));
|
|
41
|
+
} catch (e) {
|
|
42
|
+
reject(e);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
var rejected = (value) => {
|
|
46
|
+
try {
|
|
47
|
+
step(generator.throw(value));
|
|
48
|
+
} catch (e) {
|
|
49
|
+
reject(e);
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
53
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
54
|
+
});
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
// src/browser/index.ts
|
|
58
|
+
var browser_exports = {};
|
|
59
|
+
__export(browser_exports, {
|
|
60
|
+
SetupWorkerApi: () => SetupWorkerApi,
|
|
61
|
+
setupWorker: () => setupWorker
|
|
62
|
+
});
|
|
63
|
+
module.exports = __toCommonJS(browser_exports);
|
|
64
|
+
|
|
65
|
+
// src/browser/setupWorker/setupWorker.ts
|
|
66
|
+
var import_outvariant = require("outvariant");
|
|
67
|
+
var import_is_node_process = require("is-node-process");
|
|
68
|
+
|
|
69
|
+
// src/browser/setupWorker/start/createStartHandler.ts
|
|
70
|
+
var import_until3 = require("@open-draft/until");
|
|
71
|
+
var import_devUtils6 = require("../core/utils/internal/devUtils.js");
|
|
72
|
+
|
|
73
|
+
// src/browser/setupWorker/start/utils/getWorkerInstance.ts
|
|
74
|
+
var import_until = require("@open-draft/until");
|
|
75
|
+
var import_devUtils = require("../core/utils/internal/devUtils.js");
|
|
76
|
+
|
|
77
|
+
// src/browser/utils/getAbsoluteWorkerUrl.ts
|
|
78
|
+
function getAbsoluteWorkerUrl(workerUrl) {
|
|
79
|
+
return new URL(workerUrl, location.href).href;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// src/browser/setupWorker/start/utils/getWorkerByRegistration.ts
|
|
83
|
+
function getWorkerByRegistration(registration, absoluteWorkerUrl, findWorker) {
|
|
84
|
+
const allStates = [
|
|
85
|
+
registration.active,
|
|
86
|
+
registration.installing,
|
|
87
|
+
registration.waiting
|
|
88
|
+
];
|
|
89
|
+
const relevantStates = allStates.filter((state) => {
|
|
90
|
+
return state != null;
|
|
91
|
+
});
|
|
92
|
+
const worker = relevantStates.find((worker2) => {
|
|
93
|
+
return findWorker(worker2.scriptURL, absoluteWorkerUrl);
|
|
94
|
+
});
|
|
95
|
+
return worker || null;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// src/browser/setupWorker/start/utils/getWorkerInstance.ts
|
|
99
|
+
var getWorkerInstance = (_0, ..._1) => __async(void 0, [_0, ..._1], function* (url, options = {}, findWorker) {
|
|
100
|
+
const absoluteWorkerUrl = getAbsoluteWorkerUrl(url);
|
|
101
|
+
const mockRegistrations = yield navigator.serviceWorker.getRegistrations().then(
|
|
102
|
+
(registrations) => registrations.filter(
|
|
103
|
+
(registration) => getWorkerByRegistration(registration, absoluteWorkerUrl, findWorker)
|
|
104
|
+
)
|
|
105
|
+
);
|
|
106
|
+
if (!navigator.serviceWorker.controller && mockRegistrations.length > 0) {
|
|
107
|
+
location.reload();
|
|
108
|
+
}
|
|
109
|
+
const [existingRegistration] = mockRegistrations;
|
|
110
|
+
if (existingRegistration) {
|
|
111
|
+
return existingRegistration.update().then(() => {
|
|
112
|
+
return [
|
|
113
|
+
getWorkerByRegistration(
|
|
114
|
+
existingRegistration,
|
|
115
|
+
absoluteWorkerUrl,
|
|
116
|
+
findWorker
|
|
117
|
+
),
|
|
118
|
+
existingRegistration
|
|
119
|
+
];
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
const registrationResult = yield (0, import_until.until)(
|
|
123
|
+
() => __async(void 0, null, function* () {
|
|
124
|
+
const registration = yield navigator.serviceWorker.register(url, options);
|
|
125
|
+
return [
|
|
126
|
+
// Compare existing worker registration by its worker URL,
|
|
127
|
+
// to prevent irrelevant workers to resolve here (such as Codesandbox worker).
|
|
128
|
+
getWorkerByRegistration(registration, absoluteWorkerUrl, findWorker),
|
|
129
|
+
registration
|
|
130
|
+
];
|
|
131
|
+
})
|
|
132
|
+
);
|
|
133
|
+
if (registrationResult.error) {
|
|
134
|
+
const isWorkerMissing = registrationResult.error.message.includes("(404)");
|
|
135
|
+
if (isWorkerMissing) {
|
|
136
|
+
const scopeUrl = new URL((options == null ? void 0 : options.scope) || "/", location.href);
|
|
137
|
+
throw new Error(
|
|
138
|
+
import_devUtils.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.
|
|
139
|
+
|
|
140
|
+
Did you forget to run "npx msw init <PUBLIC_DIR>"?
|
|
141
|
+
|
|
142
|
+
Learn more about creating the Service Worker script: https://mswjs.io/docs/cli/init`)
|
|
143
|
+
);
|
|
144
|
+
}
|
|
145
|
+
throw new Error(
|
|
146
|
+
import_devUtils.devUtils.formatMessage(
|
|
147
|
+
"Failed to register the Service Worker:\n\n%s",
|
|
148
|
+
registrationResult.error.message
|
|
149
|
+
)
|
|
150
|
+
);
|
|
151
|
+
}
|
|
152
|
+
return registrationResult.data;
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
// src/browser/setupWorker/start/utils/enableMocking.ts
|
|
156
|
+
var import_devUtils3 = require("../core/utils/internal/devUtils.js");
|
|
157
|
+
|
|
158
|
+
// src/browser/setupWorker/start/utils/printStartMessage.ts
|
|
159
|
+
var import_devUtils2 = require("../core/utils/internal/devUtils.js");
|
|
160
|
+
function printStartMessage(args = {}) {
|
|
161
|
+
if (args.quiet) {
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
const message = args.message || "Mocking enabled.";
|
|
165
|
+
console.groupCollapsed(
|
|
166
|
+
`%c${import_devUtils2.devUtils.formatMessage(message)}`,
|
|
167
|
+
"color:orangered;font-weight:bold;"
|
|
168
|
+
);
|
|
169
|
+
console.log(
|
|
170
|
+
"%cDocumentation: %chttps://mswjs.io/docs",
|
|
171
|
+
"font-weight:bold",
|
|
172
|
+
"font-weight:normal"
|
|
173
|
+
);
|
|
174
|
+
console.log("Found an issue? https://github.com/mswjs/msw/issues");
|
|
175
|
+
if (args.workerUrl) {
|
|
176
|
+
console.log("Worker script URL:", args.workerUrl);
|
|
177
|
+
}
|
|
178
|
+
if (args.workerScope) {
|
|
179
|
+
console.log("Worker scope:", args.workerScope);
|
|
180
|
+
}
|
|
181
|
+
console.groupEnd();
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// src/browser/setupWorker/start/utils/enableMocking.ts
|
|
185
|
+
function enableMocking(context, options) {
|
|
186
|
+
return __async(this, null, function* () {
|
|
187
|
+
var _a, _b;
|
|
188
|
+
context.workerChannel.send("MOCK_ACTIVATE");
|
|
189
|
+
yield context.events.once("MOCKING_ENABLED");
|
|
190
|
+
if (context.isMockingEnabled) {
|
|
191
|
+
import_devUtils3.devUtils.warn(
|
|
192
|
+
`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.`
|
|
193
|
+
);
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
context.isMockingEnabled = true;
|
|
197
|
+
printStartMessage({
|
|
198
|
+
quiet: options.quiet,
|
|
199
|
+
workerScope: (_a = context.registration) == null ? void 0 : _a.scope,
|
|
200
|
+
workerUrl: (_b = context.worker) == null ? void 0 : _b.scriptURL
|
|
201
|
+
});
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
// src/browser/setupWorker/start/utils/createMessageChannel.ts
|
|
206
|
+
var WorkerChannel = class {
|
|
207
|
+
constructor(port) {
|
|
208
|
+
this.port = port;
|
|
209
|
+
}
|
|
210
|
+
postMessage(event, ...rest) {
|
|
211
|
+
const [data, transfer] = rest;
|
|
212
|
+
this.port.postMessage(
|
|
213
|
+
{ type: event, data },
|
|
214
|
+
{
|
|
215
|
+
// @ts-ignore ReadableStream can be transferred
|
|
216
|
+
// but TypeScript doesn't acknowledge that.
|
|
217
|
+
transfer
|
|
218
|
+
}
|
|
219
|
+
);
|
|
220
|
+
}
|
|
221
|
+
};
|
|
222
|
+
|
|
223
|
+
// src/browser/utils/pruneGetRequestBody.ts
|
|
224
|
+
function pruneGetRequestBody(request) {
|
|
225
|
+
if (["HEAD", "GET"].includes(request.method)) {
|
|
226
|
+
return void 0;
|
|
227
|
+
}
|
|
228
|
+
return request.body;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
// src/browser/utils/parseWorkerRequest.ts
|
|
232
|
+
function parseWorkerRequest(incomingRequest) {
|
|
233
|
+
return new Request(incomingRequest.url, __spreadProps(__spreadValues({}, incomingRequest), {
|
|
234
|
+
body: pruneGetRequestBody(incomingRequest)
|
|
235
|
+
}));
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
// src/browser/setupWorker/start/createRequestListener.ts
|
|
239
|
+
var import_handleRequest = require("../core/utils/handleRequest.js");
|
|
240
|
+
var import_devUtils4 = require("../core/utils/internal/devUtils.js");
|
|
241
|
+
var import_toResponseInit = require("../core/utils/toResponseInit.js");
|
|
242
|
+
var createRequestListener = (context, options) => {
|
|
243
|
+
return (event, message) => __async(void 0, null, function* () {
|
|
244
|
+
var _b;
|
|
245
|
+
const messageChannel = new WorkerChannel(event.ports[0]);
|
|
246
|
+
const requestId = message.payload.id;
|
|
247
|
+
const request = parseWorkerRequest(message.payload);
|
|
248
|
+
const requestCloneForLogs = request.clone();
|
|
249
|
+
try {
|
|
250
|
+
let _a;
|
|
251
|
+
yield (0, import_handleRequest.handleRequest)(
|
|
252
|
+
request,
|
|
253
|
+
requestId,
|
|
254
|
+
context.requestHandlers,
|
|
255
|
+
options,
|
|
256
|
+
context.emitter,
|
|
257
|
+
{
|
|
258
|
+
onPassthroughResponse() {
|
|
259
|
+
messageChannel.postMessage("NOT_FOUND");
|
|
260
|
+
},
|
|
261
|
+
onMockedResponse(_0, _1) {
|
|
262
|
+
return __async(this, arguments, function* (response, { handler, parsedResult }) {
|
|
263
|
+
const responseClone = response.clone();
|
|
264
|
+
const responseInit = (0, import_toResponseInit.toResponseInit)(response);
|
|
265
|
+
if (context.supports.readableStreamTransfer) {
|
|
266
|
+
const responseStream = response.body;
|
|
267
|
+
messageChannel.postMessage(
|
|
268
|
+
"MOCK_RESPONSE",
|
|
269
|
+
__spreadProps(__spreadValues({}, responseInit), {
|
|
270
|
+
body: responseStream
|
|
271
|
+
}),
|
|
272
|
+
responseStream ? [responseStream] : void 0
|
|
273
|
+
);
|
|
274
|
+
} else {
|
|
275
|
+
const responseBuffer = yield responseClone.arrayBuffer();
|
|
276
|
+
messageChannel.postMessage("MOCK_RESPONSE", __spreadProps(__spreadValues({}, responseInit), {
|
|
277
|
+
body: responseBuffer
|
|
278
|
+
}));
|
|
279
|
+
}
|
|
280
|
+
if (!options.quiet) {
|
|
281
|
+
context.emitter.once("response:mocked", ({ response: response2 }) => {
|
|
282
|
+
handler.log({
|
|
283
|
+
request: requestCloneForLogs,
|
|
284
|
+
response: response2,
|
|
285
|
+
parsedResult
|
|
286
|
+
});
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
);
|
|
293
|
+
} catch (error) {
|
|
294
|
+
if (error instanceof Error) {
|
|
295
|
+
import_devUtils4.devUtils.error(
|
|
296
|
+
`Uncaught exception in the request handler for "%s %s":
|
|
297
|
+
|
|
298
|
+
%s
|
|
299
|
+
|
|
300
|
+
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`,
|
|
301
|
+
request.method,
|
|
302
|
+
request.url,
|
|
303
|
+
(_b = error.stack) != null ? _b : error
|
|
304
|
+
);
|
|
305
|
+
messageChannel.postMessage("MOCK_RESPONSE", {
|
|
306
|
+
status: 500,
|
|
307
|
+
statusText: "Request Handler Error",
|
|
308
|
+
headers: {
|
|
309
|
+
"Content-Type": "application/json"
|
|
310
|
+
},
|
|
311
|
+
body: JSON.stringify({
|
|
312
|
+
name: error.name,
|
|
313
|
+
message: error.message,
|
|
314
|
+
stack: error.stack
|
|
315
|
+
})
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
});
|
|
320
|
+
};
|
|
321
|
+
|
|
322
|
+
// src/browser/utils/requestIntegrityCheck.ts
|
|
323
|
+
function requestIntegrityCheck(context, serviceWorker) {
|
|
324
|
+
return __async(this, null, function* () {
|
|
325
|
+
context.workerChannel.send("INTEGRITY_CHECK_REQUEST");
|
|
326
|
+
const { payload: actualChecksum } = yield context.events.once(
|
|
327
|
+
"INTEGRITY_CHECK_RESPONSE"
|
|
328
|
+
);
|
|
329
|
+
if (actualChecksum !== "0877fcdc026242810f5bfde0d7178db4") {
|
|
330
|
+
throw new Error(
|
|
331
|
+
`Currently active Service Worker (${actualChecksum}) is behind the latest published one (${"0877fcdc026242810f5bfde0d7178db4"}).`
|
|
332
|
+
);
|
|
333
|
+
}
|
|
334
|
+
return serviceWorker;
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
// src/browser/utils/deferNetworkRequestsUntil.ts
|
|
339
|
+
var import_until2 = require("@open-draft/until");
|
|
340
|
+
function deferNetworkRequestsUntil(predicatePromise) {
|
|
341
|
+
const originalXhrSend = window.XMLHttpRequest.prototype.send;
|
|
342
|
+
window.XMLHttpRequest.prototype.send = function(...args) {
|
|
343
|
+
(0, import_until2.until)(() => predicatePromise).then(() => {
|
|
344
|
+
window.XMLHttpRequest.prototype.send = originalXhrSend;
|
|
345
|
+
this.send(...args);
|
|
346
|
+
});
|
|
347
|
+
};
|
|
348
|
+
const originalFetch = window.fetch;
|
|
349
|
+
window.fetch = (...args) => __async(this, null, function* () {
|
|
350
|
+
yield (0, import_until2.until)(() => predicatePromise);
|
|
351
|
+
window.fetch = originalFetch;
|
|
352
|
+
return window.fetch(...args);
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
// src/browser/setupWorker/start/createResponseListener.ts
|
|
357
|
+
function createResponseListener(context) {
|
|
358
|
+
return (_, message) => {
|
|
359
|
+
var _a;
|
|
360
|
+
const { payload: responseJson } = message;
|
|
361
|
+
if ((_a = responseJson.type) == null ? void 0 : _a.includes("opaque")) {
|
|
362
|
+
return;
|
|
363
|
+
}
|
|
364
|
+
const response = responseJson.status === 0 ? Response.error() : new Response(responseJson.body, responseJson);
|
|
365
|
+
context.emitter.emit(
|
|
366
|
+
responseJson.isMockedResponse ? "response:mocked" : "response:bypass",
|
|
367
|
+
{
|
|
368
|
+
response,
|
|
369
|
+
/**
|
|
370
|
+
* @todo @fixme In this context, we don't know anything about
|
|
371
|
+
* the request.
|
|
372
|
+
*/
|
|
373
|
+
request: null,
|
|
374
|
+
requestId: responseJson.requestId
|
|
375
|
+
}
|
|
376
|
+
);
|
|
377
|
+
};
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
// src/browser/setupWorker/start/utils/validateWorkerScope.ts
|
|
381
|
+
var import_devUtils5 = require("../core/utils/internal/devUtils.js");
|
|
382
|
+
function validateWorkerScope(registration, options) {
|
|
383
|
+
if (!(options == null ? void 0 : options.quiet) && !location.href.startsWith(registration.scope)) {
|
|
384
|
+
import_devUtils5.devUtils.warn(
|
|
385
|
+
`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.
|
|
386
|
+
|
|
387
|
+
- (Recommended) Register the worker at the root level ("/") of your application.
|
|
388
|
+
- Set the "Service-Worker-Allowed" response header to allow out-of-scope workers.`
|
|
389
|
+
);
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
// src/browser/setupWorker/start/createStartHandler.ts
|
|
394
|
+
var createStartHandler = (context) => {
|
|
395
|
+
return function start(options, customOptions) {
|
|
396
|
+
const startWorkerInstance = () => __async(this, null, function* () {
|
|
397
|
+
context.events.removeAllListeners();
|
|
398
|
+
context.workerChannel.on(
|
|
399
|
+
"REQUEST",
|
|
400
|
+
createRequestListener(context, options)
|
|
401
|
+
);
|
|
402
|
+
context.workerChannel.on("RESPONSE", createResponseListener(context));
|
|
403
|
+
const instance = yield getWorkerInstance(
|
|
404
|
+
options.serviceWorker.url,
|
|
405
|
+
options.serviceWorker.options,
|
|
406
|
+
options.findWorker
|
|
407
|
+
);
|
|
408
|
+
const [worker, registration] = instance;
|
|
409
|
+
if (!worker) {
|
|
410
|
+
const missingWorkerMessage = (customOptions == null ? void 0 : customOptions.findWorker) ? import_devUtils6.devUtils.formatMessage(
|
|
411
|
+
`Failed to locate the Service Worker registration using a custom "findWorker" predicate.
|
|
412
|
+
|
|
413
|
+
Please ensure that the custom predicate properly locates the Service Worker registration at "%s".
|
|
414
|
+
More details: https://mswjs.io/docs/api/setup-worker/start#findworker
|
|
415
|
+
`,
|
|
416
|
+
options.serviceWorker.url
|
|
417
|
+
) : import_devUtils6.devUtils.formatMessage(
|
|
418
|
+
`Failed to locate the Service Worker registration.
|
|
419
|
+
|
|
420
|
+
This most likely means that the worker script URL "%s" cannot resolve against the actual public hostname (%s). This may happen if your application runs behind a proxy, or has a dynamic hostname.
|
|
421
|
+
|
|
422
|
+
Please consider using a custom "serviceWorker.url" option to point to the actual worker script location, or a custom "findWorker" option to resolve the Service Worker registration manually. More details: https://mswjs.io/docs/api/setup-worker/start`,
|
|
423
|
+
options.serviceWorker.url,
|
|
424
|
+
location.host
|
|
425
|
+
);
|
|
426
|
+
throw new Error(missingWorkerMessage);
|
|
427
|
+
}
|
|
428
|
+
context.worker = worker;
|
|
429
|
+
context.registration = registration;
|
|
430
|
+
context.events.addListener(window, "beforeunload", () => {
|
|
431
|
+
if (worker.state !== "redundant") {
|
|
432
|
+
context.workerChannel.send("CLIENT_CLOSED");
|
|
433
|
+
}
|
|
434
|
+
window.clearInterval(context.keepAliveInterval);
|
|
435
|
+
});
|
|
436
|
+
const integrityCheckResult = yield (0, import_until3.until)(
|
|
437
|
+
() => requestIntegrityCheck(context, worker)
|
|
438
|
+
);
|
|
439
|
+
if (integrityCheckResult.error) {
|
|
440
|
+
import_devUtils6.devUtils.error(`Detected outdated Service Worker: ${integrityCheckResult.error.message}
|
|
441
|
+
|
|
442
|
+
The mocking is still enabled, but it's highly recommended that you update your Service Worker by running:
|
|
443
|
+
|
|
444
|
+
$ npx msw init <PUBLIC_DIR>
|
|
445
|
+
|
|
446
|
+
This is necessary to ensure that the Service Worker is in sync with the library to guarantee its stability.
|
|
447
|
+
If this message still persists after updating, please report an issue: https://github.com/open-draft/msw/issues `);
|
|
448
|
+
}
|
|
449
|
+
context.keepAliveInterval = window.setInterval(
|
|
450
|
+
() => context.workerChannel.send("KEEPALIVE_REQUEST"),
|
|
451
|
+
5e3
|
|
452
|
+
);
|
|
453
|
+
validateWorkerScope(registration, context.startOptions);
|
|
454
|
+
return registration;
|
|
455
|
+
});
|
|
456
|
+
const workerRegistration = startWorkerInstance().then(
|
|
457
|
+
(registration) => __async(this, null, function* () {
|
|
458
|
+
const pendingInstance = registration.installing || registration.waiting;
|
|
459
|
+
if (pendingInstance) {
|
|
460
|
+
yield new Promise((resolve) => {
|
|
461
|
+
pendingInstance.addEventListener("statechange", () => {
|
|
462
|
+
if (pendingInstance.state === "activated") {
|
|
463
|
+
return resolve();
|
|
464
|
+
}
|
|
465
|
+
});
|
|
466
|
+
});
|
|
467
|
+
}
|
|
468
|
+
yield enableMocking(context, options).catch((error) => {
|
|
469
|
+
throw new Error(`Failed to enable mocking: ${error == null ? void 0 : error.message}`);
|
|
470
|
+
});
|
|
471
|
+
return registration;
|
|
472
|
+
})
|
|
473
|
+
);
|
|
474
|
+
if (options.waitUntilReady) {
|
|
475
|
+
deferNetworkRequestsUntil(workerRegistration);
|
|
476
|
+
}
|
|
477
|
+
return workerRegistration;
|
|
478
|
+
};
|
|
479
|
+
};
|
|
480
|
+
|
|
481
|
+
// src/browser/setupWorker/stop/createStop.ts
|
|
482
|
+
var import_devUtils8 = require("../core/utils/internal/devUtils.js");
|
|
483
|
+
|
|
484
|
+
// src/browser/setupWorker/stop/utils/printStopMessage.ts
|
|
485
|
+
var import_devUtils7 = require("../core/utils/internal/devUtils.js");
|
|
486
|
+
function printStopMessage(args = {}) {
|
|
487
|
+
if (args.quiet) {
|
|
488
|
+
return;
|
|
489
|
+
}
|
|
490
|
+
console.log(
|
|
491
|
+
`%c${import_devUtils7.devUtils.formatMessage("Mocking disabled.")}`,
|
|
492
|
+
"color:orangered;font-weight:bold;"
|
|
493
|
+
);
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
// src/browser/setupWorker/stop/createStop.ts
|
|
497
|
+
var createStop = (context) => {
|
|
498
|
+
return function stop() {
|
|
499
|
+
var _a;
|
|
500
|
+
if (!context.isMockingEnabled) {
|
|
501
|
+
import_devUtils8.devUtils.warn(
|
|
502
|
+
'Found a redundant "worker.stop()" call. Note that stopping the worker while mocking already stopped has no effect. Consider removing this "worker.stop()" call.'
|
|
503
|
+
);
|
|
504
|
+
return;
|
|
505
|
+
}
|
|
506
|
+
context.workerChannel.send("MOCK_DEACTIVATE");
|
|
507
|
+
context.isMockingEnabled = false;
|
|
508
|
+
window.clearInterval(context.keepAliveInterval);
|
|
509
|
+
printStopMessage({ quiet: (_a = context.startOptions) == null ? void 0 : _a.quiet });
|
|
510
|
+
};
|
|
511
|
+
};
|
|
512
|
+
|
|
513
|
+
// src/browser/setupWorker/start/utils/prepareStartHandler.ts
|
|
514
|
+
var import_mergeRight = require("../core/utils/internal/mergeRight.js");
|
|
515
|
+
var DEFAULT_START_OPTIONS = {
|
|
516
|
+
serviceWorker: {
|
|
517
|
+
url: "/mockServiceWorker.js",
|
|
518
|
+
options: null
|
|
519
|
+
},
|
|
520
|
+
quiet: false,
|
|
521
|
+
waitUntilReady: true,
|
|
522
|
+
onUnhandledRequest: "warn",
|
|
523
|
+
findWorker(scriptURL, mockServiceWorkerUrl) {
|
|
524
|
+
return scriptURL === mockServiceWorkerUrl;
|
|
525
|
+
}
|
|
526
|
+
};
|
|
527
|
+
|
|
528
|
+
// src/browser/setupWorker/start/createFallbackRequestListener.ts
|
|
529
|
+
var import_interceptors = require("@mswjs/interceptors");
|
|
530
|
+
var import_fetch = require("@mswjs/interceptors/fetch");
|
|
531
|
+
var import_XMLHttpRequest = require("@mswjs/interceptors/XMLHttpRequest");
|
|
532
|
+
var import_handleRequest2 = require("../core/utils/handleRequest.js");
|
|
533
|
+
function createFallbackRequestListener(context, options) {
|
|
534
|
+
const interceptor = new import_interceptors.BatchInterceptor({
|
|
535
|
+
name: "fallback",
|
|
536
|
+
interceptors: [new import_fetch.FetchInterceptor(), new import_XMLHttpRequest.XMLHttpRequestInterceptor()]
|
|
537
|
+
});
|
|
538
|
+
interceptor.on("request", (_0) => __async(this, [_0], function* ({ request, requestId }) {
|
|
539
|
+
const requestCloneForLogs = request.clone();
|
|
540
|
+
const response = yield (0, import_handleRequest2.handleRequest)(
|
|
541
|
+
request,
|
|
542
|
+
requestId,
|
|
543
|
+
context.requestHandlers,
|
|
544
|
+
options,
|
|
545
|
+
context.emitter,
|
|
546
|
+
{
|
|
547
|
+
onMockedResponse(_, { handler, parsedResult }) {
|
|
548
|
+
if (!options.quiet) {
|
|
549
|
+
context.emitter.once("response:mocked", ({ response: response2 }) => {
|
|
550
|
+
handler.log({
|
|
551
|
+
request: requestCloneForLogs,
|
|
552
|
+
response: response2,
|
|
553
|
+
parsedResult
|
|
554
|
+
});
|
|
555
|
+
});
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
);
|
|
560
|
+
if (response) {
|
|
561
|
+
request.respondWith(response);
|
|
562
|
+
}
|
|
563
|
+
}));
|
|
564
|
+
interceptor.on(
|
|
565
|
+
"response",
|
|
566
|
+
({ response, isMockedResponse, request, requestId }) => {
|
|
567
|
+
context.emitter.emit(
|
|
568
|
+
isMockedResponse ? "response:mocked" : "response:bypass",
|
|
569
|
+
{
|
|
570
|
+
response,
|
|
571
|
+
request,
|
|
572
|
+
requestId
|
|
573
|
+
}
|
|
574
|
+
);
|
|
575
|
+
}
|
|
576
|
+
);
|
|
577
|
+
interceptor.apply();
|
|
578
|
+
return interceptor;
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
// src/browser/setupWorker/start/createFallbackStart.ts
|
|
582
|
+
function createFallbackStart(context) {
|
|
583
|
+
return function start(options) {
|
|
584
|
+
return __async(this, null, function* () {
|
|
585
|
+
context.fallbackInterceptor = createFallbackRequestListener(
|
|
586
|
+
context,
|
|
587
|
+
options
|
|
588
|
+
);
|
|
589
|
+
printStartMessage({
|
|
590
|
+
message: "Mocking enabled (fallback mode).",
|
|
591
|
+
quiet: options.quiet
|
|
592
|
+
});
|
|
593
|
+
return void 0;
|
|
594
|
+
});
|
|
595
|
+
};
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
// src/browser/setupWorker/stop/createFallbackStop.ts
|
|
599
|
+
function createFallbackStop(context) {
|
|
600
|
+
return function stop() {
|
|
601
|
+
var _a, _b;
|
|
602
|
+
(_a = context.fallbackInterceptor) == null ? void 0 : _a.dispose();
|
|
603
|
+
printStopMessage({ quiet: (_b = context.startOptions) == null ? void 0 : _b.quiet });
|
|
604
|
+
};
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
// src/browser/setupWorker/setupWorker.ts
|
|
608
|
+
var import_devUtils9 = require("../core/utils/internal/devUtils.js");
|
|
609
|
+
var import_SetupApi = require("../core/SetupApi.js");
|
|
610
|
+
var import_mergeRight2 = require("../core/utils/internal/mergeRight.js");
|
|
611
|
+
|
|
612
|
+
// src/browser/utils/supportsReadableStreamTransfer.ts
|
|
613
|
+
function supportsReadableStreamTransfer() {
|
|
614
|
+
try {
|
|
615
|
+
const stream = new ReadableStream({
|
|
616
|
+
start: (controller) => controller.close()
|
|
617
|
+
});
|
|
618
|
+
const message = new MessageChannel();
|
|
619
|
+
message.port1.postMessage(stream, [stream]);
|
|
620
|
+
return true;
|
|
621
|
+
} catch (error) {
|
|
622
|
+
return false;
|
|
623
|
+
}
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
// src/browser/setupWorker/setupWorker.ts
|
|
627
|
+
var SetupWorkerApi = class extends import_SetupApi.SetupApi {
|
|
628
|
+
constructor(...handlers) {
|
|
629
|
+
super(...handlers);
|
|
630
|
+
this.startHandler = null;
|
|
631
|
+
this.stopHandler = null;
|
|
632
|
+
(0, import_outvariant.invariant)(
|
|
633
|
+
!(0, import_is_node_process.isNodeProcess)(),
|
|
634
|
+
import_devUtils9.devUtils.formatMessage(
|
|
635
|
+
"Failed to execute `setupWorker` in a non-browser environment. Consider using `setupServer` for Node.js environment instead."
|
|
636
|
+
)
|
|
637
|
+
);
|
|
638
|
+
this.listeners = [];
|
|
639
|
+
this.context = this.createWorkerContext();
|
|
640
|
+
}
|
|
641
|
+
createWorkerContext() {
|
|
642
|
+
const context = {
|
|
643
|
+
// Mocking is not considered enabled until the worker
|
|
644
|
+
// signals back the successful activation event.
|
|
645
|
+
isMockingEnabled: false,
|
|
646
|
+
startOptions: null,
|
|
647
|
+
worker: null,
|
|
648
|
+
registration: null,
|
|
649
|
+
requestHandlers: this.currentHandlers,
|
|
650
|
+
emitter: this.emitter,
|
|
651
|
+
workerChannel: {
|
|
652
|
+
on: (eventType, callback) => {
|
|
653
|
+
this.context.events.addListener(navigator.serviceWorker, "message", (event) => {
|
|
654
|
+
if (event.source !== this.context.worker) {
|
|
655
|
+
return;
|
|
656
|
+
}
|
|
657
|
+
const message = event.data;
|
|
658
|
+
if (!message) {
|
|
659
|
+
return;
|
|
660
|
+
}
|
|
661
|
+
if (message.type === eventType) {
|
|
662
|
+
callback(event, message);
|
|
663
|
+
}
|
|
664
|
+
});
|
|
665
|
+
},
|
|
666
|
+
send: (type) => {
|
|
667
|
+
var _a;
|
|
668
|
+
(_a = this.context.worker) == null ? void 0 : _a.postMessage(type);
|
|
669
|
+
}
|
|
670
|
+
},
|
|
671
|
+
events: {
|
|
672
|
+
addListener: (target, eventType, callback) => {
|
|
673
|
+
target.addEventListener(eventType, callback);
|
|
674
|
+
this.listeners.push({
|
|
675
|
+
eventType,
|
|
676
|
+
target,
|
|
677
|
+
callback
|
|
678
|
+
});
|
|
679
|
+
return () => {
|
|
680
|
+
target.removeEventListener(eventType, callback);
|
|
681
|
+
};
|
|
682
|
+
},
|
|
683
|
+
removeAllListeners: () => {
|
|
684
|
+
for (const { target, eventType, callback } of this.listeners) {
|
|
685
|
+
target.removeEventListener(eventType, callback);
|
|
686
|
+
}
|
|
687
|
+
this.listeners = [];
|
|
688
|
+
},
|
|
689
|
+
once: (eventType) => {
|
|
690
|
+
const bindings = [];
|
|
691
|
+
return new Promise((resolve, reject) => {
|
|
692
|
+
const handleIncomingMessage = (event) => {
|
|
693
|
+
try {
|
|
694
|
+
const message = event.data;
|
|
695
|
+
if (message.type === eventType) {
|
|
696
|
+
resolve(message);
|
|
697
|
+
}
|
|
698
|
+
} catch (error) {
|
|
699
|
+
reject(error);
|
|
700
|
+
}
|
|
701
|
+
};
|
|
702
|
+
bindings.push(
|
|
703
|
+
this.context.events.addListener(
|
|
704
|
+
navigator.serviceWorker,
|
|
705
|
+
"message",
|
|
706
|
+
handleIncomingMessage
|
|
707
|
+
),
|
|
708
|
+
this.context.events.addListener(
|
|
709
|
+
navigator.serviceWorker,
|
|
710
|
+
"messageerror",
|
|
711
|
+
reject
|
|
712
|
+
)
|
|
713
|
+
);
|
|
714
|
+
}).finally(() => {
|
|
715
|
+
bindings.forEach((unbind) => unbind());
|
|
716
|
+
});
|
|
717
|
+
}
|
|
718
|
+
},
|
|
719
|
+
supports: {
|
|
720
|
+
serviceWorkerApi: !("serviceWorker" in navigator) || location.protocol === "file:",
|
|
721
|
+
readableStreamTransfer: supportsReadableStreamTransfer()
|
|
722
|
+
}
|
|
723
|
+
};
|
|
724
|
+
Object.defineProperties(context, {
|
|
725
|
+
requestHandlers: {
|
|
726
|
+
get: () => this.currentHandlers
|
|
727
|
+
}
|
|
728
|
+
});
|
|
729
|
+
this.startHandler = context.supports.serviceWorkerApi ? createFallbackStart(context) : createStartHandler(context);
|
|
730
|
+
this.stopHandler = context.supports.serviceWorkerApi ? createFallbackStop(context) : createStop(context);
|
|
731
|
+
return context;
|
|
732
|
+
}
|
|
733
|
+
start() {
|
|
734
|
+
return __async(this, arguments, function* (options = {}) {
|
|
735
|
+
this.context.startOptions = (0, import_mergeRight2.mergeRight)(
|
|
736
|
+
DEFAULT_START_OPTIONS,
|
|
737
|
+
options
|
|
738
|
+
);
|
|
739
|
+
return yield this.startHandler(this.context.startOptions, options);
|
|
740
|
+
});
|
|
741
|
+
}
|
|
742
|
+
stop() {
|
|
743
|
+
super.dispose();
|
|
744
|
+
this.context.events.removeAllListeners();
|
|
745
|
+
this.context.emitter.removeAllListeners();
|
|
746
|
+
this.stopHandler();
|
|
747
|
+
}
|
|
748
|
+
};
|
|
749
|
+
function setupWorker(...handlers) {
|
|
750
|
+
return new SetupWorkerApi(...handlers);
|
|
751
|
+
}
|