msw 2.6.2 → 2.6.4
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 +6 -1
- package/lib/browser/index.js +1 -1
- package/lib/browser/index.mjs +1 -1
- package/lib/core/bypass.js +1 -1
- package/lib/core/bypass.js.map +1 -1
- package/lib/core/bypass.mjs +1 -1
- package/lib/core/bypass.mjs.map +1 -1
- package/lib/core/utils/handleRequest.d.mts +0 -5
- package/lib/core/utils/handleRequest.d.ts +0 -5
- package/lib/core/utils/handleRequest.js +3 -7
- package/lib/core/utils/handleRequest.js.map +1 -1
- package/lib/core/utils/handleRequest.mjs +3 -7
- package/lib/core/utils/handleRequest.mjs.map +1 -1
- package/lib/iife/index.js +5 -9
- package/lib/iife/index.js.map +1 -1
- package/lib/mockServiceWorker.js +10 -8
- package/lib/native/index.js +17 -1
- package/lib/native/index.js.map +1 -1
- package/lib/native/index.mjs +17 -1
- package/lib/native/index.mjs.map +1 -1
- package/lib/node/index.js +17 -1
- package/lib/node/index.js.map +1 -1
- package/lib/node/index.mjs +17 -1
- package/lib/node/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/core/bypass.test.ts +25 -14
- package/src/core/bypass.ts +7 -5
- package/src/core/passthrough.test.ts +1 -3
- package/src/core/utils/handleRequest.test.ts +5 -90
- package/src/core/utils/handleRequest.ts +4 -17
- package/src/mockServiceWorker.js +8 -6
- package/src/node/SetupServerCommonApi.ts +23 -0
package/README.md
CHANGED
|
@@ -240,11 +240,16 @@ Mock Service Worker is trusted by hundreds of thousands of engineers around the
|
|
|
240
240
|
<img src="media/sponsors/replay.svg" alt="Replay" height="64" />
|
|
241
241
|
</a>
|
|
242
242
|
</td>
|
|
243
|
-
|
|
243
|
+
<td>
|
|
244
244
|
<a href="https://codemod.com/" target="_blank">
|
|
245
245
|
<img src="media/sponsors/codemod.svg" alt="Codemod" height="64" width="128" />
|
|
246
246
|
</a>
|
|
247
247
|
</td>
|
|
248
|
+
<td>
|
|
249
|
+
<a href="https://github.com/ryanmagoon" target="_blank">
|
|
250
|
+
<img src="https://github.com/ryanmagoon.png" alt="Ryan Magoon" height="64" />
|
|
251
|
+
</a>
|
|
252
|
+
</td>
|
|
248
253
|
</tr>
|
|
249
254
|
</table>
|
|
250
255
|
|
package/lib/browser/index.js
CHANGED
|
@@ -390,7 +390,7 @@ var import_devUtils5 = require("../core/utils/internal/devUtils.js");
|
|
|
390
390
|
async function checkWorkerIntegrity(context) {
|
|
391
391
|
context.workerChannel.send("INTEGRITY_CHECK_REQUEST");
|
|
392
392
|
const { payload } = await context.events.once("INTEGRITY_CHECK_RESPONSE");
|
|
393
|
-
if (payload.checksum !== "
|
|
393
|
+
if (payload.checksum !== "ca7800994cc8bfb5eb961e037c877074") {
|
|
394
394
|
import_devUtils5.devUtils.warn(
|
|
395
395
|
`The currently registered Service Worker has been generated by a different version of MSW (${payload.packageVersion}) and may not be fully compatible with the installed version.
|
|
396
396
|
|
package/lib/browser/index.mjs
CHANGED
|
@@ -363,7 +363,7 @@ import { devUtils as devUtils5 } from '../core/utils/internal/devUtils.mjs';
|
|
|
363
363
|
async function checkWorkerIntegrity(context) {
|
|
364
364
|
context.workerChannel.send("INTEGRITY_CHECK_REQUEST");
|
|
365
365
|
const { payload } = await context.events.once("INTEGRITY_CHECK_RESPONSE");
|
|
366
|
-
if (payload.checksum !== "
|
|
366
|
+
if (payload.checksum !== "ca7800994cc8bfb5eb961e037c877074") {
|
|
367
367
|
devUtils5.warn(
|
|
368
368
|
`The currently registered Service Worker has been generated by a different version of MSW (${payload.packageVersion}) and may not be fully compatible with the installed version.
|
|
369
369
|
|
package/lib/core/bypass.js
CHANGED
|
@@ -36,7 +36,7 @@ function bypass(input, init) {
|
|
|
36
36
|
request.url
|
|
37
37
|
);
|
|
38
38
|
const requestClone = request.clone();
|
|
39
|
-
requestClone.headers.
|
|
39
|
+
requestClone.headers.append("accept", "msw/passthrough");
|
|
40
40
|
return requestClone;
|
|
41
41
|
}
|
|
42
42
|
//# sourceMappingURL=bypass.js.map
|
package/lib/core/bypass.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/bypass.ts"],"sourcesContent":["import { invariant } from 'outvariant'\n\nexport type BypassRequestInput = string | URL | Request\n\n/**\n * Creates a `Request` instance that will always be ignored by MSW.\n *\n * @example\n * import { bypass } from 'msw'\n *\n * fetch(bypass('/resource'))\n * fetch(bypass(new URL('/resource', 'https://example.com)))\n * fetch(bypass(new Request('https://example.com/resource')))\n *\n * @see {@link https://mswjs.io/docs/api/bypass `bypass()` API reference}\n */\nexport function bypass(input: BypassRequestInput, init?: RequestInit): Request {\n // Always create a new Request instance.\n // This way, the \"init\" modifications will propagate\n // to the bypass request instance automatically.\n const request = new Request(\n // If given a Request instance, clone it not to exhaust\n // the original request's body.\n input instanceof Request ? input.clone() : input,\n init,\n )\n\n invariant(\n !request.bodyUsed,\n 'Failed to create a bypassed request to \"%s %s\": given request instance already has its body read. Make sure to clone the intercepted request if you wish to read its body before bypassing it.',\n request.method,\n request.url,\n )\n\n const requestClone = request.clone()\n\n
|
|
1
|
+
{"version":3,"sources":["../../src/core/bypass.ts"],"sourcesContent":["import { invariant } from 'outvariant'\n\nexport type BypassRequestInput = string | URL | Request\n\n/**\n * Creates a `Request` instance that will always be ignored by MSW.\n *\n * @example\n * import { bypass } from 'msw'\n *\n * fetch(bypass('/resource'))\n * fetch(bypass(new URL('/resource', 'https://example.com)))\n * fetch(bypass(new Request('https://example.com/resource')))\n *\n * @see {@link https://mswjs.io/docs/api/bypass `bypass()` API reference}\n */\nexport function bypass(input: BypassRequestInput, init?: RequestInit): Request {\n // Always create a new Request instance.\n // This way, the \"init\" modifications will propagate\n // to the bypass request instance automatically.\n const request = new Request(\n // If given a Request instance, clone it not to exhaust\n // the original request's body.\n input instanceof Request ? input.clone() : input,\n init,\n )\n\n invariant(\n !request.bodyUsed,\n 'Failed to create a bypassed request to \"%s %s\": given request instance already has its body read. Make sure to clone the intercepted request if you wish to read its body before bypassing it.',\n request.method,\n request.url,\n )\n\n const requestClone = request.clone()\n\n /**\n * Send the internal request header that would instruct MSW\n * to perform this request as-is, ignoring any matching handlers.\n * @note Use the `accept` header to support scenarios when the\n * request cannot have headers (e.g. `sendBeacon` requests).\n */\n requestClone.headers.append('accept', 'msw/passthrough')\n\n return requestClone\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAA0B;AAgBnB,SAAS,OAAO,OAA2B,MAA6B;AAI7E,QAAM,UAAU,IAAI;AAAA;AAAA;AAAA,IAGlB,iBAAiB,UAAU,MAAM,MAAM,IAAI;AAAA,IAC3C;AAAA,EACF;AAEA;AAAA,IACE,CAAC,QAAQ;AAAA,IACT;AAAA,IACA,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AAEA,QAAM,eAAe,QAAQ,MAAM;AAQnC,eAAa,QAAQ,OAAO,UAAU,iBAAiB;AAEvD,SAAO;AACT;","names":[]}
|
package/lib/core/bypass.mjs
CHANGED
package/lib/core/bypass.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/bypass.ts"],"sourcesContent":["import { invariant } from 'outvariant'\n\nexport type BypassRequestInput = string | URL | Request\n\n/**\n * Creates a `Request` instance that will always be ignored by MSW.\n *\n * @example\n * import { bypass } from 'msw'\n *\n * fetch(bypass('/resource'))\n * fetch(bypass(new URL('/resource', 'https://example.com)))\n * fetch(bypass(new Request('https://example.com/resource')))\n *\n * @see {@link https://mswjs.io/docs/api/bypass `bypass()` API reference}\n */\nexport function bypass(input: BypassRequestInput, init?: RequestInit): Request {\n // Always create a new Request instance.\n // This way, the \"init\" modifications will propagate\n // to the bypass request instance automatically.\n const request = new Request(\n // If given a Request instance, clone it not to exhaust\n // the original request's body.\n input instanceof Request ? input.clone() : input,\n init,\n )\n\n invariant(\n !request.bodyUsed,\n 'Failed to create a bypassed request to \"%s %s\": given request instance already has its body read. Make sure to clone the intercepted request if you wish to read its body before bypassing it.',\n request.method,\n request.url,\n )\n\n const requestClone = request.clone()\n\n
|
|
1
|
+
{"version":3,"sources":["../../src/core/bypass.ts"],"sourcesContent":["import { invariant } from 'outvariant'\n\nexport type BypassRequestInput = string | URL | Request\n\n/**\n * Creates a `Request` instance that will always be ignored by MSW.\n *\n * @example\n * import { bypass } from 'msw'\n *\n * fetch(bypass('/resource'))\n * fetch(bypass(new URL('/resource', 'https://example.com)))\n * fetch(bypass(new Request('https://example.com/resource')))\n *\n * @see {@link https://mswjs.io/docs/api/bypass `bypass()` API reference}\n */\nexport function bypass(input: BypassRequestInput, init?: RequestInit): Request {\n // Always create a new Request instance.\n // This way, the \"init\" modifications will propagate\n // to the bypass request instance automatically.\n const request = new Request(\n // If given a Request instance, clone it not to exhaust\n // the original request's body.\n input instanceof Request ? input.clone() : input,\n init,\n )\n\n invariant(\n !request.bodyUsed,\n 'Failed to create a bypassed request to \"%s %s\": given request instance already has its body read. Make sure to clone the intercepted request if you wish to read its body before bypassing it.',\n request.method,\n request.url,\n )\n\n const requestClone = request.clone()\n\n /**\n * Send the internal request header that would instruct MSW\n * to perform this request as-is, ignoring any matching handlers.\n * @note Use the `accept` header to support scenarios when the\n * request cannot have headers (e.g. `sendBeacon` requests).\n */\n requestClone.headers.append('accept', 'msw/passthrough')\n\n return requestClone\n}\n"],"mappings":"AAAA,SAAS,iBAAiB;AAgBnB,SAAS,OAAO,OAA2B,MAA6B;AAI7E,QAAM,UAAU,IAAI;AAAA;AAAA;AAAA,IAGlB,iBAAiB,UAAU,MAAM,MAAM,IAAI;AAAA,IAC3C;AAAA,EACF;AAEA;AAAA,IACE,CAAC,QAAQ;AAAA,IACT;AAAA,IACA,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AAEA,QAAM,eAAe,QAAQ,MAAM;AAQnC,eAAa,QAAQ,OAAO,UAAU,iBAAiB;AAEvD,SAAO;AACT;","names":[]}
|
|
@@ -19,11 +19,6 @@ interface HandleRequestOptions {
|
|
|
19
19
|
*/
|
|
20
20
|
baseUrl?: string;
|
|
21
21
|
};
|
|
22
|
-
/**
|
|
23
|
-
* Transforms a `MockedResponse` instance returned from a handler
|
|
24
|
-
* to a response instance supported by the lower tooling (i.e. interceptors).
|
|
25
|
-
*/
|
|
26
|
-
transformResponse?(response: Response): Response;
|
|
27
22
|
/**
|
|
28
23
|
* Invoked whenever a request is performed as-is.
|
|
29
24
|
*/
|
|
@@ -19,11 +19,6 @@ interface HandleRequestOptions {
|
|
|
19
19
|
*/
|
|
20
20
|
baseUrl?: string;
|
|
21
21
|
};
|
|
22
|
-
/**
|
|
23
|
-
* Transforms a `MockedResponse` instance returned from a handler
|
|
24
|
-
* to a response instance supported by the lower tooling (i.e. interceptors).
|
|
25
|
-
*/
|
|
26
|
-
transformResponse?(response: Response): Response;
|
|
27
22
|
/**
|
|
28
23
|
* Invoked whenever a request is performed as-is.
|
|
29
24
|
*/
|
|
@@ -27,7 +27,7 @@ var import_onUnhandledRequest = require("./request/onUnhandledRequest.js");
|
|
|
27
27
|
var import_storeResponseCookies = require("./request/storeResponseCookies.js");
|
|
28
28
|
async function handleRequest(request, requestId, handlers, options, emitter, handleRequestOptions) {
|
|
29
29
|
emitter.emit("request:start", { request, requestId });
|
|
30
|
-
if (request.headers.get("
|
|
30
|
+
if (request.headers.get("accept")?.includes("msw/passthrough")) {
|
|
31
31
|
emitter.emit("request:end", { request, requestId });
|
|
32
32
|
handleRequestOptions?.onPassthroughResponse?.(request);
|
|
33
33
|
return;
|
|
@@ -69,12 +69,8 @@ async function handleRequest(request, requestId, handlers, options, emitter, han
|
|
|
69
69
|
(0, import_storeResponseCookies.storeResponseCookies)(request, response);
|
|
70
70
|
emitter.emit("request:match", { request, requestId });
|
|
71
71
|
const requiredLookupResult = lookupResult.data;
|
|
72
|
-
|
|
73
|
-
handleRequestOptions?.onMockedResponse?.(
|
|
74
|
-
transformedResponse,
|
|
75
|
-
requiredLookupResult
|
|
76
|
-
);
|
|
72
|
+
handleRequestOptions?.onMockedResponse?.(response, requiredLookupResult);
|
|
77
73
|
emitter.emit("request:end", { request, requestId });
|
|
78
|
-
return
|
|
74
|
+
return response;
|
|
79
75
|
}
|
|
80
76
|
//# sourceMappingURL=handleRequest.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/utils/handleRequest.ts"],"sourcesContent":["import { until } from '@open-draft/until'\nimport { Emitter } from 'strict-event-emitter'\nimport { LifeCycleEventsMap, SharedOptions } from '../sharedOptions'\nimport { RequiredDeep } from '../typeUtils'\nimport type { RequestHandler } from '../handlers/RequestHandler'\nimport { HandlersExecutionResult, executeHandlers } from './executeHandlers'\nimport { onUnhandledRequest } from './request/onUnhandledRequest'\nimport { storeResponseCookies } from './request/storeResponseCookies'\n\nexport interface HandleRequestOptions {\n /**\n * `resolutionContext` is not part of the general public api\n * but is exposed to aid in creating extensions like\n * `@mswjs/http-middleware`.\n */\n resolutionContext?: {\n /**\n * A base url to use when resolving relative urls.\n * @note This is primarily used by the `@mswjs/http-middleware`\n * to resolve relative urls in the context of the running server\n */\n baseUrl?: string\n }\n\n /**\n *
|
|
1
|
+
{"version":3,"sources":["../../../src/core/utils/handleRequest.ts"],"sourcesContent":["import { until } from '@open-draft/until'\nimport { Emitter } from 'strict-event-emitter'\nimport { LifeCycleEventsMap, SharedOptions } from '../sharedOptions'\nimport { RequiredDeep } from '../typeUtils'\nimport type { RequestHandler } from '../handlers/RequestHandler'\nimport { HandlersExecutionResult, executeHandlers } from './executeHandlers'\nimport { onUnhandledRequest } from './request/onUnhandledRequest'\nimport { storeResponseCookies } from './request/storeResponseCookies'\n\nexport interface HandleRequestOptions {\n /**\n * `resolutionContext` is not part of the general public api\n * but is exposed to aid in creating extensions like\n * `@mswjs/http-middleware`.\n */\n resolutionContext?: {\n /**\n * A base url to use when resolving relative urls.\n * @note This is primarily used by the `@mswjs/http-middleware`\n * to resolve relative urls in the context of the running server\n */\n baseUrl?: string\n }\n\n /**\n * Invoked whenever a request is performed as-is.\n */\n onPassthroughResponse?(request: Request): void\n\n /**\n * Invoked when the mocked response is ready to be sent.\n */\n onMockedResponse?(\n response: Response,\n handler: RequiredDeep<HandlersExecutionResult>,\n ): void\n}\n\nexport async function handleRequest(\n request: Request,\n requestId: string,\n handlers: Array<RequestHandler>,\n options: RequiredDeep<SharedOptions>,\n emitter: Emitter<LifeCycleEventsMap>,\n handleRequestOptions?: HandleRequestOptions,\n): Promise<Response | undefined> {\n emitter.emit('request:start', { request, requestId })\n\n // Perform requests wrapped in \"bypass()\" as-is.\n if (request.headers.get('accept')?.includes('msw/passthrough')) {\n emitter.emit('request:end', { request, requestId })\n handleRequestOptions?.onPassthroughResponse?.(request)\n return\n }\n\n // Resolve a mocked response from the list of request handlers.\n const lookupResult = await until(() => {\n return executeHandlers({\n request,\n requestId,\n handlers,\n resolutionContext: handleRequestOptions?.resolutionContext,\n })\n })\n\n if (lookupResult.error) {\n // Allow developers to react to unhandled exceptions in request handlers.\n emitter.emit('unhandledException', {\n error: lookupResult.error,\n request,\n requestId,\n })\n throw lookupResult.error\n }\n\n // If the handler lookup returned nothing, no request handler was found\n // matching this request. Report the request as unhandled.\n if (!lookupResult.data) {\n await onUnhandledRequest(request, options.onUnhandledRequest)\n emitter.emit('request:unhandled', { request, requestId })\n emitter.emit('request:end', { request, requestId })\n handleRequestOptions?.onPassthroughResponse?.(request)\n return\n }\n\n const { response } = lookupResult.data\n\n // When the handled request returned no mocked response, warn the developer,\n // as it may be an oversight on their part. Perform the request as-is.\n if (!response) {\n emitter.emit('request:end', { request, requestId })\n handleRequestOptions?.onPassthroughResponse?.(request)\n return\n }\n\n // Perform the request as-is when the developer explicitly returned \"req.passthrough()\".\n // This produces no warning as the request was handled.\n if (\n response.status === 302 &&\n response.headers.get('x-msw-intention') === 'passthrough'\n ) {\n emitter.emit('request:end', { request, requestId })\n handleRequestOptions?.onPassthroughResponse?.(request)\n return\n }\n\n // Store all the received response cookies in the cookie jar.\n storeResponseCookies(request, response)\n\n emitter.emit('request:match', { request, requestId })\n\n const requiredLookupResult =\n lookupResult.data as RequiredDeep<HandlersExecutionResult>\n\n handleRequestOptions?.onMockedResponse?.(response, requiredLookupResult)\n\n emitter.emit('request:end', { request, requestId })\n\n return response\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAsB;AAKtB,6BAAyD;AACzD,gCAAmC;AACnC,kCAAqC;AA+BrC,eAAsB,cACpB,SACA,WACA,UACA,SACA,SACA,sBAC+B;AAC/B,UAAQ,KAAK,iBAAiB,EAAE,SAAS,UAAU,CAAC;AAGpD,MAAI,QAAQ,QAAQ,IAAI,QAAQ,GAAG,SAAS,iBAAiB,GAAG;AAC9D,YAAQ,KAAK,eAAe,EAAE,SAAS,UAAU,CAAC;AAClD,0BAAsB,wBAAwB,OAAO;AACrD;AAAA,EACF;AAGA,QAAM,eAAe,UAAM,oBAAM,MAAM;AACrC,eAAO,wCAAgB;AAAA,MACrB;AAAA,MACA;AAAA,MACA;AAAA,MACA,mBAAmB,sBAAsB;AAAA,IAC3C,CAAC;AAAA,EACH,CAAC;AAED,MAAI,aAAa,OAAO;AAEtB,YAAQ,KAAK,sBAAsB;AAAA,MACjC,OAAO,aAAa;AAAA,MACpB;AAAA,MACA;AAAA,IACF,CAAC;AACD,UAAM,aAAa;AAAA,EACrB;AAIA,MAAI,CAAC,aAAa,MAAM;AACtB,cAAM,8CAAmB,SAAS,QAAQ,kBAAkB;AAC5D,YAAQ,KAAK,qBAAqB,EAAE,SAAS,UAAU,CAAC;AACxD,YAAQ,KAAK,eAAe,EAAE,SAAS,UAAU,CAAC;AAClD,0BAAsB,wBAAwB,OAAO;AACrD;AAAA,EACF;AAEA,QAAM,EAAE,SAAS,IAAI,aAAa;AAIlC,MAAI,CAAC,UAAU;AACb,YAAQ,KAAK,eAAe,EAAE,SAAS,UAAU,CAAC;AAClD,0BAAsB,wBAAwB,OAAO;AACrD;AAAA,EACF;AAIA,MACE,SAAS,WAAW,OACpB,SAAS,QAAQ,IAAI,iBAAiB,MAAM,eAC5C;AACA,YAAQ,KAAK,eAAe,EAAE,SAAS,UAAU,CAAC;AAClD,0BAAsB,wBAAwB,OAAO;AACrD;AAAA,EACF;AAGA,wDAAqB,SAAS,QAAQ;AAEtC,UAAQ,KAAK,iBAAiB,EAAE,SAAS,UAAU,CAAC;AAEpD,QAAM,uBACJ,aAAa;AAEf,wBAAsB,mBAAmB,UAAU,oBAAoB;AAEvE,UAAQ,KAAK,eAAe,EAAE,SAAS,UAAU,CAAC;AAElD,SAAO;AACT;","names":[]}
|
|
@@ -4,7 +4,7 @@ import { onUnhandledRequest } from './request/onUnhandledRequest.mjs';
|
|
|
4
4
|
import { storeResponseCookies } from './request/storeResponseCookies.mjs';
|
|
5
5
|
async function handleRequest(request, requestId, handlers, options, emitter, handleRequestOptions) {
|
|
6
6
|
emitter.emit("request:start", { request, requestId });
|
|
7
|
-
if (request.headers.get("
|
|
7
|
+
if (request.headers.get("accept")?.includes("msw/passthrough")) {
|
|
8
8
|
emitter.emit("request:end", { request, requestId });
|
|
9
9
|
handleRequestOptions?.onPassthroughResponse?.(request);
|
|
10
10
|
return;
|
|
@@ -46,13 +46,9 @@ async function handleRequest(request, requestId, handlers, options, emitter, han
|
|
|
46
46
|
storeResponseCookies(request, response);
|
|
47
47
|
emitter.emit("request:match", { request, requestId });
|
|
48
48
|
const requiredLookupResult = lookupResult.data;
|
|
49
|
-
|
|
50
|
-
handleRequestOptions?.onMockedResponse?.(
|
|
51
|
-
transformedResponse,
|
|
52
|
-
requiredLookupResult
|
|
53
|
-
);
|
|
49
|
+
handleRequestOptions?.onMockedResponse?.(response, requiredLookupResult);
|
|
54
50
|
emitter.emit("request:end", { request, requestId });
|
|
55
|
-
return
|
|
51
|
+
return response;
|
|
56
52
|
}
|
|
57
53
|
export {
|
|
58
54
|
handleRequest
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/utils/handleRequest.ts"],"sourcesContent":["import { until } from '@open-draft/until'\nimport { Emitter } from 'strict-event-emitter'\nimport { LifeCycleEventsMap, SharedOptions } from '../sharedOptions'\nimport { RequiredDeep } from '../typeUtils'\nimport type { RequestHandler } from '../handlers/RequestHandler'\nimport { HandlersExecutionResult, executeHandlers } from './executeHandlers'\nimport { onUnhandledRequest } from './request/onUnhandledRequest'\nimport { storeResponseCookies } from './request/storeResponseCookies'\n\nexport interface HandleRequestOptions {\n /**\n * `resolutionContext` is not part of the general public api\n * but is exposed to aid in creating extensions like\n * `@mswjs/http-middleware`.\n */\n resolutionContext?: {\n /**\n * A base url to use when resolving relative urls.\n * @note This is primarily used by the `@mswjs/http-middleware`\n * to resolve relative urls in the context of the running server\n */\n baseUrl?: string\n }\n\n /**\n *
|
|
1
|
+
{"version":3,"sources":["../../../src/core/utils/handleRequest.ts"],"sourcesContent":["import { until } from '@open-draft/until'\nimport { Emitter } from 'strict-event-emitter'\nimport { LifeCycleEventsMap, SharedOptions } from '../sharedOptions'\nimport { RequiredDeep } from '../typeUtils'\nimport type { RequestHandler } from '../handlers/RequestHandler'\nimport { HandlersExecutionResult, executeHandlers } from './executeHandlers'\nimport { onUnhandledRequest } from './request/onUnhandledRequest'\nimport { storeResponseCookies } from './request/storeResponseCookies'\n\nexport interface HandleRequestOptions {\n /**\n * `resolutionContext` is not part of the general public api\n * but is exposed to aid in creating extensions like\n * `@mswjs/http-middleware`.\n */\n resolutionContext?: {\n /**\n * A base url to use when resolving relative urls.\n * @note This is primarily used by the `@mswjs/http-middleware`\n * to resolve relative urls in the context of the running server\n */\n baseUrl?: string\n }\n\n /**\n * Invoked whenever a request is performed as-is.\n */\n onPassthroughResponse?(request: Request): void\n\n /**\n * Invoked when the mocked response is ready to be sent.\n */\n onMockedResponse?(\n response: Response,\n handler: RequiredDeep<HandlersExecutionResult>,\n ): void\n}\n\nexport async function handleRequest(\n request: Request,\n requestId: string,\n handlers: Array<RequestHandler>,\n options: RequiredDeep<SharedOptions>,\n emitter: Emitter<LifeCycleEventsMap>,\n handleRequestOptions?: HandleRequestOptions,\n): Promise<Response | undefined> {\n emitter.emit('request:start', { request, requestId })\n\n // Perform requests wrapped in \"bypass()\" as-is.\n if (request.headers.get('accept')?.includes('msw/passthrough')) {\n emitter.emit('request:end', { request, requestId })\n handleRequestOptions?.onPassthroughResponse?.(request)\n return\n }\n\n // Resolve a mocked response from the list of request handlers.\n const lookupResult = await until(() => {\n return executeHandlers({\n request,\n requestId,\n handlers,\n resolutionContext: handleRequestOptions?.resolutionContext,\n })\n })\n\n if (lookupResult.error) {\n // Allow developers to react to unhandled exceptions in request handlers.\n emitter.emit('unhandledException', {\n error: lookupResult.error,\n request,\n requestId,\n })\n throw lookupResult.error\n }\n\n // If the handler lookup returned nothing, no request handler was found\n // matching this request. Report the request as unhandled.\n if (!lookupResult.data) {\n await onUnhandledRequest(request, options.onUnhandledRequest)\n emitter.emit('request:unhandled', { request, requestId })\n emitter.emit('request:end', { request, requestId })\n handleRequestOptions?.onPassthroughResponse?.(request)\n return\n }\n\n const { response } = lookupResult.data\n\n // When the handled request returned no mocked response, warn the developer,\n // as it may be an oversight on their part. Perform the request as-is.\n if (!response) {\n emitter.emit('request:end', { request, requestId })\n handleRequestOptions?.onPassthroughResponse?.(request)\n return\n }\n\n // Perform the request as-is when the developer explicitly returned \"req.passthrough()\".\n // This produces no warning as the request was handled.\n if (\n response.status === 302 &&\n response.headers.get('x-msw-intention') === 'passthrough'\n ) {\n emitter.emit('request:end', { request, requestId })\n handleRequestOptions?.onPassthroughResponse?.(request)\n return\n }\n\n // Store all the received response cookies in the cookie jar.\n storeResponseCookies(request, response)\n\n emitter.emit('request:match', { request, requestId })\n\n const requiredLookupResult =\n lookupResult.data as RequiredDeep<HandlersExecutionResult>\n\n handleRequestOptions?.onMockedResponse?.(response, requiredLookupResult)\n\n emitter.emit('request:end', { request, requestId })\n\n return response\n}\n"],"mappings":"AAAA,SAAS,aAAa;AAKtB,SAAkC,uBAAuB;AACzD,SAAS,0BAA0B;AACnC,SAAS,4BAA4B;AA+BrC,eAAsB,cACpB,SACA,WACA,UACA,SACA,SACA,sBAC+B;AAC/B,UAAQ,KAAK,iBAAiB,EAAE,SAAS,UAAU,CAAC;AAGpD,MAAI,QAAQ,QAAQ,IAAI,QAAQ,GAAG,SAAS,iBAAiB,GAAG;AAC9D,YAAQ,KAAK,eAAe,EAAE,SAAS,UAAU,CAAC;AAClD,0BAAsB,wBAAwB,OAAO;AACrD;AAAA,EACF;AAGA,QAAM,eAAe,MAAM,MAAM,MAAM;AACrC,WAAO,gBAAgB;AAAA,MACrB;AAAA,MACA;AAAA,MACA;AAAA,MACA,mBAAmB,sBAAsB;AAAA,IAC3C,CAAC;AAAA,EACH,CAAC;AAED,MAAI,aAAa,OAAO;AAEtB,YAAQ,KAAK,sBAAsB;AAAA,MACjC,OAAO,aAAa;AAAA,MACpB;AAAA,MACA;AAAA,IACF,CAAC;AACD,UAAM,aAAa;AAAA,EACrB;AAIA,MAAI,CAAC,aAAa,MAAM;AACtB,UAAM,mBAAmB,SAAS,QAAQ,kBAAkB;AAC5D,YAAQ,KAAK,qBAAqB,EAAE,SAAS,UAAU,CAAC;AACxD,YAAQ,KAAK,eAAe,EAAE,SAAS,UAAU,CAAC;AAClD,0BAAsB,wBAAwB,OAAO;AACrD;AAAA,EACF;AAEA,QAAM,EAAE,SAAS,IAAI,aAAa;AAIlC,MAAI,CAAC,UAAU;AACb,YAAQ,KAAK,eAAe,EAAE,SAAS,UAAU,CAAC;AAClD,0BAAsB,wBAAwB,OAAO;AACrD;AAAA,EACF;AAIA,MACE,SAAS,WAAW,OACpB,SAAS,QAAQ,IAAI,iBAAiB,MAAM,eAC5C;AACA,YAAQ,KAAK,eAAe,EAAE,SAAS,UAAU,CAAC;AAClD,0BAAsB,wBAAwB,OAAO;AACrD;AAAA,EACF;AAGA,uBAAqB,SAAS,QAAQ;AAEtC,UAAQ,KAAK,iBAAiB,EAAE,SAAS,UAAU,CAAC;AAEpD,QAAM,uBACJ,aAAa;AAEf,wBAAsB,mBAAmB,UAAU,oBAAoB;AAEvE,UAAQ,KAAK,eAAe,EAAE,SAAS,UAAU,CAAC;AAElD,SAAO;AACT;","names":[]}
|
package/lib/iife/index.js
CHANGED
|
@@ -28799,7 +28799,7 @@ Read more: https://mswjs.io/docs/getting-started/mocks`;
|
|
|
28799
28799
|
// src/core/utils/handleRequest.ts
|
|
28800
28800
|
async function handleRequest(request, requestId, handlers, options, emitter, handleRequestOptions) {
|
|
28801
28801
|
emitter.emit("request:start", { request, requestId });
|
|
28802
|
-
if (request.headers.get("
|
|
28802
|
+
if (request.headers.get("accept")?.includes("msw/passthrough")) {
|
|
28803
28803
|
emitter.emit("request:end", { request, requestId });
|
|
28804
28804
|
handleRequestOptions?.onPassthroughResponse?.(request);
|
|
28805
28805
|
return;
|
|
@@ -28841,13 +28841,9 @@ Read more: https://mswjs.io/docs/getting-started/mocks`;
|
|
|
28841
28841
|
storeResponseCookies(request, response);
|
|
28842
28842
|
emitter.emit("request:match", { request, requestId });
|
|
28843
28843
|
const requiredLookupResult = lookupResult.data;
|
|
28844
|
-
|
|
28845
|
-
handleRequestOptions?.onMockedResponse?.(
|
|
28846
|
-
transformedResponse,
|
|
28847
|
-
requiredLookupResult
|
|
28848
|
-
);
|
|
28844
|
+
handleRequestOptions?.onMockedResponse?.(response, requiredLookupResult);
|
|
28849
28845
|
emitter.emit("request:end", { request, requestId });
|
|
28850
|
-
return
|
|
28846
|
+
return response;
|
|
28851
28847
|
}
|
|
28852
28848
|
|
|
28853
28849
|
// src/core/getResponse.ts
|
|
@@ -29023,7 +29019,7 @@ Read more: https://mswjs.io/docs/getting-started/mocks`;
|
|
|
29023
29019
|
request.url
|
|
29024
29020
|
);
|
|
29025
29021
|
const requestClone = request.clone();
|
|
29026
|
-
requestClone.headers.
|
|
29022
|
+
requestClone.headers.append("accept", "msw/passthrough");
|
|
29027
29023
|
return requestClone;
|
|
29028
29024
|
}
|
|
29029
29025
|
|
|
@@ -29295,7 +29291,7 @@ This exception has been gracefully handled as a 500 response, however, it's stro
|
|
|
29295
29291
|
async function checkWorkerIntegrity(context) {
|
|
29296
29292
|
context.workerChannel.send("INTEGRITY_CHECK_REQUEST");
|
|
29297
29293
|
const { payload } = await context.events.once("INTEGRITY_CHECK_RESPONSE");
|
|
29298
|
-
if (payload.checksum !== "
|
|
29294
|
+
if (payload.checksum !== "ca7800994cc8bfb5eb961e037c877074") {
|
|
29299
29295
|
devUtils.warn(
|
|
29300
29296
|
`The currently registered Service Worker has been generated by a different version of MSW (${payload.packageVersion}) and may not be fully compatible with the installed version.
|
|
29301
29297
|
|