msw 2.13.5 → 2.14.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.
Files changed (111) hide show
  1. package/lib/core/{HttpResponse-BMMzfpjG.d.mts → HttpResponse-CxHR1nNN.d.mts} +5 -1
  2. package/lib/core/{HttpResponse-DPDqE4Pb.d.ts → HttpResponse-aGiIzO91.d.ts} +5 -1
  3. package/lib/core/HttpResponse.d.mts +1 -1
  4. package/lib/core/HttpResponse.d.ts +1 -1
  5. package/lib/core/experimental/compat.d.mts +1 -1
  6. package/lib/core/experimental/compat.d.ts +1 -1
  7. package/lib/core/experimental/define-network.d.mts +1 -1
  8. package/lib/core/experimental/define-network.d.ts +1 -1
  9. package/lib/core/experimental/frames/http-frame.d.mts +1 -1
  10. package/lib/core/experimental/frames/http-frame.d.ts +1 -1
  11. package/lib/core/experimental/frames/http-frame.js +3 -2
  12. package/lib/core/experimental/frames/http-frame.js.map +1 -1
  13. package/lib/core/experimental/frames/http-frame.mjs +3 -2
  14. package/lib/core/experimental/frames/http-frame.mjs.map +1 -1
  15. package/lib/core/experimental/frames/network-frame.d.mts +1 -1
  16. package/lib/core/experimental/frames/network-frame.d.ts +1 -1
  17. package/lib/core/experimental/frames/websocket-frame.d.mts +1 -1
  18. package/lib/core/experimental/frames/websocket-frame.d.ts +1 -1
  19. package/lib/core/experimental/handlers-controller.d.mts +1 -1
  20. package/lib/core/experimental/handlers-controller.d.ts +1 -1
  21. package/lib/core/experimental/handlers-controller.js +16 -5
  22. package/lib/core/experimental/handlers-controller.js.map +1 -1
  23. package/lib/core/experimental/handlers-controller.mjs +16 -5
  24. package/lib/core/experimental/handlers-controller.mjs.map +1 -1
  25. package/lib/core/experimental/index.d.mts +1 -1
  26. package/lib/core/experimental/index.d.ts +1 -1
  27. package/lib/core/experimental/on-unhandled-frame.d.mts +1 -1
  28. package/lib/core/experimental/on-unhandled-frame.d.ts +1 -1
  29. package/lib/core/experimental/setup-api.d.mts +1 -1
  30. package/lib/core/experimental/setup-api.d.ts +1 -1
  31. package/lib/core/experimental/sources/interceptor-source.d.mts +1 -1
  32. package/lib/core/experimental/sources/interceptor-source.d.ts +1 -1
  33. package/lib/core/experimental/sources/network-source.d.mts +1 -1
  34. package/lib/core/experimental/sources/network-source.d.ts +1 -1
  35. package/lib/core/getResponse.d.mts +1 -1
  36. package/lib/core/getResponse.d.ts +1 -1
  37. package/lib/core/graphql.d.mts +1 -1
  38. package/lib/core/graphql.d.ts +1 -1
  39. package/lib/core/handlers/GraphQLHandler.d.mts +1 -1
  40. package/lib/core/handlers/GraphQLHandler.d.ts +1 -1
  41. package/lib/core/handlers/HttpHandler.d.mts +1 -1
  42. package/lib/core/handlers/HttpHandler.d.ts +1 -1
  43. package/lib/core/handlers/RequestHandler.d.mts +1 -1
  44. package/lib/core/handlers/RequestHandler.d.ts +1 -1
  45. package/lib/core/handlers/RequestHandler.js +22 -1
  46. package/lib/core/handlers/RequestHandler.js.map +1 -1
  47. package/lib/core/handlers/RequestHandler.mjs +22 -1
  48. package/lib/core/handlers/RequestHandler.mjs.map +1 -1
  49. package/lib/core/handlers/WebSocketHandler.d.mts +5 -2
  50. package/lib/core/handlers/WebSocketHandler.d.ts +5 -2
  51. package/lib/core/handlers/WebSocketHandler.js +23 -6
  52. package/lib/core/handlers/WebSocketHandler.js.map +1 -1
  53. package/lib/core/handlers/WebSocketHandler.mjs +23 -6
  54. package/lib/core/handlers/WebSocketHandler.mjs.map +1 -1
  55. package/lib/core/http.d.mts +1 -1
  56. package/lib/core/http.d.ts +1 -1
  57. package/lib/core/index.d.mts +1 -1
  58. package/lib/core/index.d.ts +1 -1
  59. package/lib/core/passthrough.d.mts +1 -1
  60. package/lib/core/passthrough.d.ts +1 -1
  61. package/lib/core/sse.d.mts +1 -1
  62. package/lib/core/sse.d.ts +1 -1
  63. package/lib/core/utils/HttpResponse/decorators.d.mts +3 -3
  64. package/lib/core/utils/HttpResponse/decorators.d.ts +3 -3
  65. package/lib/core/utils/HttpResponse/decorators.js +4 -10
  66. package/lib/core/utils/HttpResponse/decorators.js.map +1 -1
  67. package/lib/core/utils/HttpResponse/decorators.mjs +4 -10
  68. package/lib/core/utils/HttpResponse/decorators.mjs.map +1 -1
  69. package/lib/core/utils/executeHandlers.d.mts +1 -1
  70. package/lib/core/utils/executeHandlers.d.ts +1 -1
  71. package/lib/core/utils/handleRequest.d.mts +1 -1
  72. package/lib/core/utils/handleRequest.d.ts +1 -1
  73. package/lib/core/utils/internal/attachSiblingHandlers.d.mts +15 -0
  74. package/lib/core/utils/internal/attachSiblingHandlers.d.ts +15 -0
  75. package/lib/core/utils/internal/attachSiblingHandlers.js +44 -0
  76. package/lib/core/utils/internal/attachSiblingHandlers.js.map +1 -0
  77. package/lib/core/utils/internal/attachSiblingHandlers.mjs +24 -0
  78. package/lib/core/utils/internal/attachSiblingHandlers.mjs.map +1 -0
  79. package/lib/core/utils/internal/isHandlerKind.d.mts +1 -1
  80. package/lib/core/utils/internal/isHandlerKind.d.ts +1 -1
  81. package/lib/core/utils/internal/parseGraphQLRequest.d.mts +1 -1
  82. package/lib/core/utils/internal/parseGraphQLRequest.d.ts +1 -1
  83. package/lib/core/utils/internal/parseMultipartData.d.mts +1 -1
  84. package/lib/core/utils/internal/parseMultipartData.d.ts +1 -1
  85. package/lib/core/utils/request/storeResponseCookies.js +1 -1
  86. package/lib/core/utils/request/storeResponseCookies.js.map +1 -1
  87. package/lib/core/utils/request/storeResponseCookies.mjs +2 -2
  88. package/lib/core/utils/request/storeResponseCookies.mjs.map +1 -1
  89. package/lib/core/ws/handleWebSocketEvent.d.mts +1 -1
  90. package/lib/core/ws/handleWebSocketEvent.d.ts +1 -1
  91. package/lib/core/ws.d.mts +17 -4
  92. package/lib/core/ws.d.ts +17 -4
  93. package/lib/core/ws.js +30 -5
  94. package/lib/core/ws.js.map +1 -1
  95. package/lib/core/ws.mjs +34 -6
  96. package/lib/core/ws.mjs.map +1 -1
  97. package/lib/iife/index.js +1241 -1158
  98. package/lib/iife/index.js.map +1 -1
  99. package/lib/mockServiceWorker.js +1 -1
  100. package/package.json +2 -2
  101. package/src/core/experimental/frames/http-frame.test.ts +6 -1
  102. package/src/core/experimental/frames/http-frame.ts +6 -2
  103. package/src/core/experimental/handlers-controller.test.ts +139 -5
  104. package/src/core/experimental/handlers-controller.ts +24 -9
  105. package/src/core/handlers/RequestHandler.ts +36 -1
  106. package/src/core/handlers/WebSocketHandler.test.ts +58 -0
  107. package/src/core/handlers/WebSocketHandler.ts +37 -8
  108. package/src/core/utils/HttpResponse/decorators.ts +6 -21
  109. package/src/core/utils/internal/attachSiblingHandlers.ts +28 -0
  110. package/src/core/utils/request/storeResponseCookies.ts +2 -4
  111. package/src/core/ws.ts +65 -6
@@ -1,5 +1,5 @@
1
1
  export { SetupApi } from './experimental/setup-api.js';
2
- export { A as AsyncResponseResolverReturnType, D as DefaultBodyType, d as DefaultRequestMultipartBody, l as GraphQLCustomPredicate, G as GraphQLHandler, j as GraphQLJsonRequestBody, k as GraphQLOperationType, f as GraphQLQuery, h as GraphQLRequestBody, i as GraphQLResponseBody, g as GraphQLVariables, H as HttpResponse, n as HttpResponseInit, J as JsonBodyType, P as ParsedGraphQLRequest, R as RequestHandler, c as RequestHandlerOptions, m as ResponseResolutionContext, a as ResponseResolver, e as ResponseResolverInfo, b as ResponseResolverReturnType, S as StrictRequest, o as StrictResponse } from './HttpResponse-DPDqE4Pb.js';
2
+ export { A as AsyncResponseResolverReturnType, D as DefaultBodyType, d as DefaultRequestMultipartBody, l as GraphQLCustomPredicate, G as GraphQLHandler, j as GraphQLJsonRequestBody, k as GraphQLOperationType, f as GraphQLQuery, h as GraphQLRequestBody, i as GraphQLResponseBody, g as GraphQLVariables, H as HttpResponse, n as HttpResponseInit, J as JsonBodyType, P as ParsedGraphQLRequest, R as RequestHandler, c as RequestHandlerOptions, m as ResponseResolutionContext, a as ResponseResolver, e as ResponseResolverInfo, b as ResponseResolverReturnType, S as StrictRequest, o as StrictResponse } from './HttpResponse-aGiIzO91.js';
3
3
  export { HttpRequestHandler, HttpResponseResolver, http } from './http.js';
4
4
  export { HttpCustomPredicate, HttpHandler, HttpHandlerInfo, HttpHandlerMethod, HttpMethods, HttpRequestParsedResult, HttpRequestResolverExtras, RequestQuery } from './handlers/HttpHandler.js';
5
5
  export { GraphQLLinkHandlers, GraphQLOperationHandler, GraphQLRequestHandler, GraphQLResponseResolver, graphql } from './graphql.js';
@@ -1,4 +1,4 @@
1
- import { H as HttpResponse } from './HttpResponse-BMMzfpjG.mjs';
1
+ import { H as HttpResponse } from './HttpResponse-CxHR1nNN.mjs';
2
2
  import '@mswjs/interceptors';
3
3
  import './utils/internal/isIterable.mjs';
4
4
  import './typeUtils.mjs';
@@ -1,4 +1,4 @@
1
- import { H as HttpResponse } from './HttpResponse-DPDqE4Pb.js';
1
+ import { H as HttpResponse } from './HttpResponse-aGiIzO91.js';
2
2
  import '@mswjs/interceptors';
3
3
  import './utils/internal/isIterable.js';
4
4
  import './typeUtils.js';
@@ -1,4 +1,4 @@
1
- import { a as ResponseResolver } from './HttpResponse-BMMzfpjG.mjs';
1
+ import { a as ResponseResolver } from './HttpResponse-CxHR1nNN.mjs';
2
2
  import { HttpRequestResolverExtras, HttpHandler } from './handlers/HttpHandler.mjs';
3
3
  import { PathParams, Path } from './utils/matching/matchRequestUrl.mjs';
4
4
  import '@mswjs/interceptors';
package/lib/core/sse.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { a as ResponseResolver } from './HttpResponse-DPDqE4Pb.js';
1
+ import { a as ResponseResolver } from './HttpResponse-aGiIzO91.js';
2
2
  import { HttpRequestResolverExtras, HttpHandler } from './handlers/HttpHandler.js';
3
3
  import { PathParams, Path } from './utils/matching/matchRequestUrl.js';
4
4
  import '@mswjs/interceptors';
@@ -1,11 +1,10 @@
1
- import { n as HttpResponseInit } from '../../HttpResponse-BMMzfpjG.mjs';
1
+ import { n as HttpResponseInit } from '../../HttpResponse-CxHR1nNN.mjs';
2
2
  import '@mswjs/interceptors';
3
3
  import '../internal/isIterable.mjs';
4
4
  import '../../typeUtils.mjs';
5
5
  import 'graphql';
6
6
  import '../matching/matchRequestUrl.mjs';
7
7
 
8
- declare const kSetCookie: unique symbol;
9
8
  interface HttpResponseDecoratedInit extends HttpResponseInit {
10
9
  status: number;
11
10
  statusText: string;
@@ -13,5 +12,6 @@ interface HttpResponseDecoratedInit extends HttpResponseInit {
13
12
  }
14
13
  declare function normalizeResponseInit(init?: HttpResponseInit): HttpResponseDecoratedInit;
15
14
  declare function decorateResponse(response: Response, init: HttpResponseDecoratedInit): Response;
15
+ declare function getRawSetCookie(response: Response): string | undefined;
16
16
 
17
- export { type HttpResponseDecoratedInit, decorateResponse, kSetCookie, normalizeResponseInit };
17
+ export { type HttpResponseDecoratedInit, decorateResponse, getRawSetCookie, normalizeResponseInit };
@@ -1,11 +1,10 @@
1
- import { n as HttpResponseInit } from '../../HttpResponse-DPDqE4Pb.js';
1
+ import { n as HttpResponseInit } from '../../HttpResponse-aGiIzO91.js';
2
2
  import '@mswjs/interceptors';
3
3
  import '../internal/isIterable.js';
4
4
  import '../../typeUtils.js';
5
5
  import 'graphql';
6
6
  import '../matching/matchRequestUrl.js';
7
7
 
8
- declare const kSetCookie: unique symbol;
9
8
  interface HttpResponseDecoratedInit extends HttpResponseInit {
10
9
  status: number;
11
10
  statusText: string;
@@ -13,5 +12,6 @@ interface HttpResponseDecoratedInit extends HttpResponseInit {
13
12
  }
14
13
  declare function normalizeResponseInit(init?: HttpResponseInit): HttpResponseDecoratedInit;
15
14
  declare function decorateResponse(response: Response, init: HttpResponseDecoratedInit): Response;
15
+ declare function getRawSetCookie(response: Response): string | undefined;
16
16
 
17
- export { type HttpResponseDecoratedInit, decorateResponse, kSetCookie, normalizeResponseInit };
17
+ export { type HttpResponseDecoratedInit, decorateResponse, getRawSetCookie, normalizeResponseInit };
@@ -29,12 +29,11 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
29
29
  var decorators_exports = {};
30
30
  __export(decorators_exports, {
31
31
  decorateResponse: () => decorateResponse,
32
- kSetCookie: () => kSetCookie,
32
+ getRawSetCookie: () => getRawSetCookie,
33
33
  normalizeResponseInit: () => normalizeResponseInit
34
34
  });
35
35
  module.exports = __toCommonJS(decorators_exports);
36
36
  var import_statuses = __toESM(require("../../../shims/statuses"), 1);
37
- var import_headers_polyfill = require("headers-polyfill");
38
37
  const { message } = import_statuses.default;
39
38
  const kSetCookie = Symbol("kSetCookie");
40
39
  function normalizeResponseInit(init = {}) {
@@ -63,15 +62,10 @@ function decorateResponse(response, init) {
63
62
  enumerable: false,
64
63
  writable: false
65
64
  });
66
- if (typeof document !== "undefined") {
67
- const responseCookiePairs = import_headers_polyfill.Headers.prototype.getSetCookie.call(
68
- init.headers
69
- );
70
- for (const cookieString of responseCookiePairs) {
71
- document.cookie = cookieString;
72
- }
73
- }
74
65
  }
75
66
  return response;
76
67
  }
68
+ function getRawSetCookie(response) {
69
+ return Reflect.get(response, kSetCookie);
70
+ }
77
71
  //# sourceMappingURL=decorators.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/core/utils/HttpResponse/decorators.ts"],"sourcesContent":["import statuses from '../../../shims/statuses'\nimport { Headers as HeadersPolyfill } from 'headers-polyfill'\nimport type { HttpResponseInit } from '../../HttpResponse'\n\nconst { message } = statuses\n\nexport const kSetCookie = Symbol('kSetCookie')\n\nexport interface HttpResponseDecoratedInit extends HttpResponseInit {\n status: number\n statusText: string\n headers: Headers\n}\n\nexport function normalizeResponseInit(\n init: HttpResponseInit = {},\n): HttpResponseDecoratedInit {\n const status = init?.status || 200\n const statusText = init?.statusText || message[status] || ''\n const headers = new Headers(init?.headers)\n\n return {\n ...init,\n headers,\n status,\n statusText,\n }\n}\n\nexport function decorateResponse(\n response: Response,\n init: HttpResponseDecoratedInit,\n): Response {\n // Allow to mock the response type.\n if (init.type) {\n Object.defineProperty(response, 'type', {\n value: init.type,\n enumerable: true,\n writable: false,\n })\n }\n\n const responseCookies = init.headers.get('set-cookie')\n\n if (responseCookies) {\n // Record the raw \"Set-Cookie\" response header provided\n // in the HeadersInit. This is later used to store these cookies\n // in cookie jar and return the right cookies in the \"cookies\"\n // response resolver argument.\n Object.defineProperty(response, kSetCookie, {\n value: responseCookies,\n enumerable: false,\n writable: false,\n })\n\n // Cookie forwarding is only relevant in the browser.\n if (typeof document !== 'undefined') {\n // Write the mocked response cookies to the document.\n // Use `headers-polyfill` to get the Set-Cookie header value correctly.\n // This is an alternative until TypeScript 5.2\n // and Node.js v20 become the minimum supported version\n // and getSetCookie in Headers can be used directly.\n const responseCookiePairs = HeadersPolyfill.prototype.getSetCookie.call(\n init.headers,\n )\n\n for (const cookieString of responseCookiePairs) {\n // No need to parse the cookie headers because it's defined\n // as the valid cookie string to begin with.\n document.cookie = cookieString\n }\n }\n }\n\n return response\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAqB;AACrB,8BAA2C;AAG3C,MAAM,EAAE,QAAQ,IAAI,gBAAAA;AAEb,MAAM,aAAa,OAAO,YAAY;AAQtC,SAAS,sBACd,OAAyB,CAAC,GACC;AAC3B,QAAM,SAAS,MAAM,UAAU;AAC/B,QAAM,aAAa,MAAM,cAAc,QAAQ,MAAM,KAAK;AAC1D,QAAM,UAAU,IAAI,QAAQ,MAAM,OAAO;AAEzC,SAAO;AAAA,IACL,GAAG;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAAS,iBACd,UACA,MACU;AAEV,MAAI,KAAK,MAAM;AACb,WAAO,eAAe,UAAU,QAAQ;AAAA,MACtC,OAAO,KAAK;AAAA,MACZ,YAAY;AAAA,MACZ,UAAU;AAAA,IACZ,CAAC;AAAA,EACH;AAEA,QAAM,kBAAkB,KAAK,QAAQ,IAAI,YAAY;AAErD,MAAI,iBAAiB;AAKnB,WAAO,eAAe,UAAU,YAAY;AAAA,MAC1C,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,UAAU;AAAA,IACZ,CAAC;AAGD,QAAI,OAAO,aAAa,aAAa;AAMnC,YAAM,sBAAsB,wBAAAC,QAAgB,UAAU,aAAa;AAAA,QACjE,KAAK;AAAA,MACP;AAEA,iBAAW,gBAAgB,qBAAqB;AAG9C,iBAAS,SAAS;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;","names":["statuses","HeadersPolyfill"]}
1
+ {"version":3,"sources":["../../../../src/core/utils/HttpResponse/decorators.ts"],"sourcesContent":["import statuses from '../../../shims/statuses'\nimport type { HttpResponseInit } from '../../HttpResponse'\n\nconst { message } = statuses\n\nconst kSetCookie = Symbol('kSetCookie')\n\nexport interface HttpResponseDecoratedInit extends HttpResponseInit {\n status: number\n statusText: string\n headers: Headers\n}\n\nexport function normalizeResponseInit(\n init: HttpResponseInit = {},\n): HttpResponseDecoratedInit {\n const status = init?.status || 200\n const statusText = init?.statusText || message[status] || ''\n const headers = new Headers(init?.headers)\n\n return {\n ...init,\n headers,\n status,\n statusText,\n }\n}\n\nexport function decorateResponse(\n response: Response,\n init: HttpResponseDecoratedInit,\n): Response {\n // Allow mocking the response type.\n if (init.type) {\n Object.defineProperty(response, 'type', {\n value: init.type,\n enumerable: true,\n writable: false,\n })\n }\n\n const responseCookies = init.headers.get('set-cookie')\n\n if (responseCookies) {\n // Record the raw \"Set-Cookie\" response header provided\n // in the HeadersInit. This is later used to store these cookies\n // in cookie jar and return the right cookies in the \"cookies\"\n // response resolver argument.\n Object.defineProperty(response, kSetCookie, {\n value: responseCookies,\n enumerable: false,\n writable: false,\n })\n }\n\n return response\n}\n\nexport function getRawSetCookie(response: Response): string | undefined {\n return Reflect.get(response, kSetCookie)\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAqB;AAGrB,MAAM,EAAE,QAAQ,IAAI,gBAAAA;AAEpB,MAAM,aAAa,OAAO,YAAY;AAQ/B,SAAS,sBACd,OAAyB,CAAC,GACC;AAC3B,QAAM,SAAS,MAAM,UAAU;AAC/B,QAAM,aAAa,MAAM,cAAc,QAAQ,MAAM,KAAK;AAC1D,QAAM,UAAU,IAAI,QAAQ,MAAM,OAAO;AAEzC,SAAO;AAAA,IACL,GAAG;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAAS,iBACd,UACA,MACU;AAEV,MAAI,KAAK,MAAM;AACb,WAAO,eAAe,UAAU,QAAQ;AAAA,MACtC,OAAO,KAAK;AAAA,MACZ,YAAY;AAAA,MACZ,UAAU;AAAA,IACZ,CAAC;AAAA,EACH;AAEA,QAAM,kBAAkB,KAAK,QAAQ,IAAI,YAAY;AAErD,MAAI,iBAAiB;AAKnB,WAAO,eAAe,UAAU,YAAY;AAAA,MAC1C,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,UAAU;AAAA,IACZ,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAEO,SAAS,gBAAgB,UAAwC;AACtE,SAAO,QAAQ,IAAI,UAAU,UAAU;AACzC;","names":["statuses"]}
@@ -1,5 +1,4 @@
1
1
  import statuses from '../../../shims/statuses.mjs';
2
- import { Headers as HeadersPolyfill } from "headers-polyfill";
3
2
  const { message } = statuses;
4
3
  const kSetCookie = Symbol("kSetCookie");
5
4
  function normalizeResponseInit(init = {}) {
@@ -28,20 +27,15 @@ function decorateResponse(response, init) {
28
27
  enumerable: false,
29
28
  writable: false
30
29
  });
31
- if (typeof document !== "undefined") {
32
- const responseCookiePairs = HeadersPolyfill.prototype.getSetCookie.call(
33
- init.headers
34
- );
35
- for (const cookieString of responseCookiePairs) {
36
- document.cookie = cookieString;
37
- }
38
- }
39
30
  }
40
31
  return response;
41
32
  }
33
+ function getRawSetCookie(response) {
34
+ return Reflect.get(response, kSetCookie);
35
+ }
42
36
  export {
43
37
  decorateResponse,
44
- kSetCookie,
38
+ getRawSetCookie,
45
39
  normalizeResponseInit
46
40
  };
47
41
  //# sourceMappingURL=decorators.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/core/utils/HttpResponse/decorators.ts"],"sourcesContent":["import statuses from '../../../shims/statuses'\nimport { Headers as HeadersPolyfill } from 'headers-polyfill'\nimport type { HttpResponseInit } from '../../HttpResponse'\n\nconst { message } = statuses\n\nexport const kSetCookie = Symbol('kSetCookie')\n\nexport interface HttpResponseDecoratedInit extends HttpResponseInit {\n status: number\n statusText: string\n headers: Headers\n}\n\nexport function normalizeResponseInit(\n init: HttpResponseInit = {},\n): HttpResponseDecoratedInit {\n const status = init?.status || 200\n const statusText = init?.statusText || message[status] || ''\n const headers = new Headers(init?.headers)\n\n return {\n ...init,\n headers,\n status,\n statusText,\n }\n}\n\nexport function decorateResponse(\n response: Response,\n init: HttpResponseDecoratedInit,\n): Response {\n // Allow to mock the response type.\n if (init.type) {\n Object.defineProperty(response, 'type', {\n value: init.type,\n enumerable: true,\n writable: false,\n })\n }\n\n const responseCookies = init.headers.get('set-cookie')\n\n if (responseCookies) {\n // Record the raw \"Set-Cookie\" response header provided\n // in the HeadersInit. This is later used to store these cookies\n // in cookie jar and return the right cookies in the \"cookies\"\n // response resolver argument.\n Object.defineProperty(response, kSetCookie, {\n value: responseCookies,\n enumerable: false,\n writable: false,\n })\n\n // Cookie forwarding is only relevant in the browser.\n if (typeof document !== 'undefined') {\n // Write the mocked response cookies to the document.\n // Use `headers-polyfill` to get the Set-Cookie header value correctly.\n // This is an alternative until TypeScript 5.2\n // and Node.js v20 become the minimum supported version\n // and getSetCookie in Headers can be used directly.\n const responseCookiePairs = HeadersPolyfill.prototype.getSetCookie.call(\n init.headers,\n )\n\n for (const cookieString of responseCookiePairs) {\n // No need to parse the cookie headers because it's defined\n // as the valid cookie string to begin with.\n document.cookie = cookieString\n }\n }\n }\n\n return response\n}\n"],"mappings":"AAAA,OAAO,cAAc;AACrB,SAAS,WAAW,uBAAuB;AAG3C,MAAM,EAAE,QAAQ,IAAI;AAEb,MAAM,aAAa,OAAO,YAAY;AAQtC,SAAS,sBACd,OAAyB,CAAC,GACC;AAC3B,QAAM,SAAS,MAAM,UAAU;AAC/B,QAAM,aAAa,MAAM,cAAc,QAAQ,MAAM,KAAK;AAC1D,QAAM,UAAU,IAAI,QAAQ,MAAM,OAAO;AAEzC,SAAO;AAAA,IACL,GAAG;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAAS,iBACd,UACA,MACU;AAEV,MAAI,KAAK,MAAM;AACb,WAAO,eAAe,UAAU,QAAQ;AAAA,MACtC,OAAO,KAAK;AAAA,MACZ,YAAY;AAAA,MACZ,UAAU;AAAA,IACZ,CAAC;AAAA,EACH;AAEA,QAAM,kBAAkB,KAAK,QAAQ,IAAI,YAAY;AAErD,MAAI,iBAAiB;AAKnB,WAAO,eAAe,UAAU,YAAY;AAAA,MAC1C,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,UAAU;AAAA,IACZ,CAAC;AAGD,QAAI,OAAO,aAAa,aAAa;AAMnC,YAAM,sBAAsB,gBAAgB,UAAU,aAAa;AAAA,QACjE,KAAK;AAAA,MACP;AAEA,iBAAW,gBAAgB,qBAAqB;AAG9C,iBAAS,SAAS;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../../../../src/core/utils/HttpResponse/decorators.ts"],"sourcesContent":["import statuses from '../../../shims/statuses'\nimport type { HttpResponseInit } from '../../HttpResponse'\n\nconst { message } = statuses\n\nconst kSetCookie = Symbol('kSetCookie')\n\nexport interface HttpResponseDecoratedInit extends HttpResponseInit {\n status: number\n statusText: string\n headers: Headers\n}\n\nexport function normalizeResponseInit(\n init: HttpResponseInit = {},\n): HttpResponseDecoratedInit {\n const status = init?.status || 200\n const statusText = init?.statusText || message[status] || ''\n const headers = new Headers(init?.headers)\n\n return {\n ...init,\n headers,\n status,\n statusText,\n }\n}\n\nexport function decorateResponse(\n response: Response,\n init: HttpResponseDecoratedInit,\n): Response {\n // Allow mocking the response type.\n if (init.type) {\n Object.defineProperty(response, 'type', {\n value: init.type,\n enumerable: true,\n writable: false,\n })\n }\n\n const responseCookies = init.headers.get('set-cookie')\n\n if (responseCookies) {\n // Record the raw \"Set-Cookie\" response header provided\n // in the HeadersInit. This is later used to store these cookies\n // in cookie jar and return the right cookies in the \"cookies\"\n // response resolver argument.\n Object.defineProperty(response, kSetCookie, {\n value: responseCookies,\n enumerable: false,\n writable: false,\n })\n }\n\n return response\n}\n\nexport function getRawSetCookie(response: Response): string | undefined {\n return Reflect.get(response, kSetCookie)\n}\n"],"mappings":"AAAA,OAAO,cAAc;AAGrB,MAAM,EAAE,QAAQ,IAAI;AAEpB,MAAM,aAAa,OAAO,YAAY;AAQ/B,SAAS,sBACd,OAAyB,CAAC,GACC;AAC3B,QAAM,SAAS,MAAM,UAAU;AAC/B,QAAM,aAAa,MAAM,cAAc,QAAQ,MAAM,KAAK;AAC1D,QAAM,UAAU,IAAI,QAAQ,MAAM,OAAO;AAEzC,SAAO;AAAA,IACL,GAAG;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAAS,iBACd,UACA,MACU;AAEV,MAAI,KAAK,MAAM;AACb,WAAO,eAAe,UAAU,QAAQ;AAAA,MACtC,OAAO,KAAK;AAAA,MACZ,YAAY;AAAA,MACZ,UAAU;AAAA,IACZ,CAAC;AAAA,EACH;AAEA,QAAM,kBAAkB,KAAK,QAAQ,IAAI,YAAY;AAErD,MAAI,iBAAiB;AAKnB,WAAO,eAAe,UAAU,YAAY;AAAA,MAC1C,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,UAAU;AAAA,IACZ,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAEO,SAAS,gBAAgB,UAAwC;AACtE,SAAO,QAAQ,IAAI,UAAU,UAAU;AACzC;","names":[]}
@@ -1,4 +1,4 @@
1
- export { s as HandlersExecutionResult, m as ResponseResolutionContext, t as executeHandlers } from '../HttpResponse-BMMzfpjG.mjs';
1
+ export { s as HandlersExecutionResult, m as ResponseResolutionContext, t as executeHandlers } from '../HttpResponse-CxHR1nNN.mjs';
2
2
  import '@mswjs/interceptors';
3
3
  import './internal/isIterable.mjs';
4
4
  import '../typeUtils.mjs';
@@ -1,4 +1,4 @@
1
- export { s as HandlersExecutionResult, m as ResponseResolutionContext, t as executeHandlers } from '../HttpResponse-DPDqE4Pb.js';
1
+ export { s as HandlersExecutionResult, m as ResponseResolutionContext, t as executeHandlers } from '../HttpResponse-aGiIzO91.js';
2
2
  import '@mswjs/interceptors';
3
3
  import './internal/isIterable.js';
4
4
  import '../typeUtils.js';
@@ -1,7 +1,7 @@
1
1
  import { Emitter } from 'strict-event-emitter';
2
2
  import { SharedOptions, LifeCycleEventsMap } from '../sharedOptions.mjs';
3
3
  import { RequiredDeep } from '../typeUtils.mjs';
4
- import { R as RequestHandler, m as ResponseResolutionContext, s as HandlersExecutionResult } from '../HttpResponse-BMMzfpjG.mjs';
4
+ import { R as RequestHandler, m as ResponseResolutionContext, s as HandlersExecutionResult } from '../HttpResponse-CxHR1nNN.mjs';
5
5
  import 'rettime';
6
6
  import './request/onUnhandledRequest.mjs';
7
7
  import '@mswjs/interceptors';
@@ -1,7 +1,7 @@
1
1
  import { Emitter } from 'strict-event-emitter';
2
2
  import { SharedOptions, LifeCycleEventsMap } from '../sharedOptions.js';
3
3
  import { RequiredDeep } from '../typeUtils.js';
4
- import { R as RequestHandler, m as ResponseResolutionContext, s as HandlersExecutionResult } from '../HttpResponse-DPDqE4Pb.js';
4
+ import { R as RequestHandler, m as ResponseResolutionContext, s as HandlersExecutionResult } from '../HttpResponse-aGiIzO91.js';
5
5
  import 'rettime';
6
6
  import './request/onUnhandledRequest.js';
7
7
  import '@mswjs/interceptors';
@@ -0,0 +1,15 @@
1
+ import { AnyHandler } from '../../experimental/handlers-controller.mjs';
2
+ import '../../HttpResponse-CxHR1nNN.mjs';
3
+ import '@mswjs/interceptors';
4
+ import './isIterable.mjs';
5
+ import '../../typeUtils.mjs';
6
+ import 'graphql';
7
+ import '../matching/matchRequestUrl.mjs';
8
+ import '../../handlers/WebSocketHandler.mjs';
9
+ import 'strict-event-emitter';
10
+ import '@mswjs/interceptors/WebSocket';
11
+
12
+ declare function attachSiblingHandlers<T extends AnyHandler>(owner: T, siblings: Array<AnyHandler>): T;
13
+ declare function getSiblingHandlers(owner: AnyHandler): Array<AnyHandler>;
14
+
15
+ export { attachSiblingHandlers, getSiblingHandlers };
@@ -0,0 +1,15 @@
1
+ import { AnyHandler } from '../../experimental/handlers-controller.js';
2
+ import '../../HttpResponse-aGiIzO91.js';
3
+ import '@mswjs/interceptors';
4
+ import './isIterable.js';
5
+ import '../../typeUtils.js';
6
+ import 'graphql';
7
+ import '../matching/matchRequestUrl.js';
8
+ import '../../handlers/WebSocketHandler.js';
9
+ import 'strict-event-emitter';
10
+ import '@mswjs/interceptors/WebSocket';
11
+
12
+ declare function attachSiblingHandlers<T extends AnyHandler>(owner: T, siblings: Array<AnyHandler>): T;
13
+ declare function getSiblingHandlers(owner: AnyHandler): Array<AnyHandler>;
14
+
15
+ export { attachSiblingHandlers, getSiblingHandlers };
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var attachSiblingHandlers_exports = {};
20
+ __export(attachSiblingHandlers_exports, {
21
+ attachSiblingHandlers: () => attachSiblingHandlers,
22
+ getSiblingHandlers: () => getSiblingHandlers
23
+ });
24
+ module.exports = __toCommonJS(attachSiblingHandlers_exports);
25
+ var import_outvariant = require("outvariant");
26
+ const kSiblingHandlers = Symbol("kSiblingHandlers");
27
+ function attachSiblingHandlers(owner, siblings) {
28
+ (0, import_outvariant.invariant)(
29
+ getSiblingHandlers(owner).length === 0,
30
+ 'Failed to merge handlers: the owner "%s" handler is already merged',
31
+ owner.kind
32
+ );
33
+ Object.defineProperty(owner, kSiblingHandlers, {
34
+ value: siblings,
35
+ enumerable: false,
36
+ writable: false,
37
+ configurable: false
38
+ });
39
+ return owner;
40
+ }
41
+ function getSiblingHandlers(owner) {
42
+ return Reflect.get(owner, kSiblingHandlers) || [];
43
+ }
44
+ //# sourceMappingURL=attachSiblingHandlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/core/utils/internal/attachSiblingHandlers.ts"],"sourcesContent":["import { invariant } from 'outvariant'\nimport type { AnyHandler } from '../../experimental/handlers-controller'\n\nconst kSiblingHandlers = Symbol('kSiblingHandlers')\n\nexport function attachSiblingHandlers<T extends AnyHandler>(\n owner: T,\n siblings: Array<AnyHandler>,\n): T {\n invariant(\n getSiblingHandlers(owner).length === 0,\n 'Failed to merge handlers: the owner \"%s\" handler is already merged',\n owner.kind,\n )\n\n Object.defineProperty(owner, kSiblingHandlers, {\n value: siblings,\n enumerable: false,\n writable: false,\n configurable: false,\n })\n\n return owner\n}\n\nexport function getSiblingHandlers(owner: AnyHandler): Array<AnyHandler> {\n return Reflect.get(owner, kSiblingHandlers) || []\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAA0B;AAG1B,MAAM,mBAAmB,OAAO,kBAAkB;AAE3C,SAAS,sBACd,OACA,UACG;AACH;AAAA,IACE,mBAAmB,KAAK,EAAE,WAAW;AAAA,IACrC;AAAA,IACA,MAAM;AAAA,EACR;AAEA,SAAO,eAAe,OAAO,kBAAkB;AAAA,IAC7C,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,cAAc;AAAA,EAChB,CAAC;AAED,SAAO;AACT;AAEO,SAAS,mBAAmB,OAAsC;AACvE,SAAO,QAAQ,IAAI,OAAO,gBAAgB,KAAK,CAAC;AAClD;","names":[]}
@@ -0,0 +1,24 @@
1
+ import { invariant } from "outvariant";
2
+ const kSiblingHandlers = Symbol("kSiblingHandlers");
3
+ function attachSiblingHandlers(owner, siblings) {
4
+ invariant(
5
+ getSiblingHandlers(owner).length === 0,
6
+ 'Failed to merge handlers: the owner "%s" handler is already merged',
7
+ owner.kind
8
+ );
9
+ Object.defineProperty(owner, kSiblingHandlers, {
10
+ value: siblings,
11
+ enumerable: false,
12
+ writable: false,
13
+ configurable: false
14
+ });
15
+ return owner;
16
+ }
17
+ function getSiblingHandlers(owner) {
18
+ return Reflect.get(owner, kSiblingHandlers) || [];
19
+ }
20
+ export {
21
+ attachSiblingHandlers,
22
+ getSiblingHandlers
23
+ };
24
+ //# sourceMappingURL=attachSiblingHandlers.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/core/utils/internal/attachSiblingHandlers.ts"],"sourcesContent":["import { invariant } from 'outvariant'\nimport type { AnyHandler } from '../../experimental/handlers-controller'\n\nconst kSiblingHandlers = Symbol('kSiblingHandlers')\n\nexport function attachSiblingHandlers<T extends AnyHandler>(\n owner: T,\n siblings: Array<AnyHandler>,\n): T {\n invariant(\n getSiblingHandlers(owner).length === 0,\n 'Failed to merge handlers: the owner \"%s\" handler is already merged',\n owner.kind,\n )\n\n Object.defineProperty(owner, kSiblingHandlers, {\n value: siblings,\n enumerable: false,\n writable: false,\n configurable: false,\n })\n\n return owner\n}\n\nexport function getSiblingHandlers(owner: AnyHandler): Array<AnyHandler> {\n return Reflect.get(owner, kSiblingHandlers) || []\n}\n"],"mappings":"AAAA,SAAS,iBAAiB;AAG1B,MAAM,mBAAmB,OAAO,kBAAkB;AAE3C,SAAS,sBACd,OACA,UACG;AACH;AAAA,IACE,mBAAmB,KAAK,EAAE,WAAW;AAAA,IACrC;AAAA,IACA,MAAM;AAAA,EACR;AAEA,SAAO,eAAe,OAAO,kBAAkB;AAAA,IAC7C,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,cAAc;AAAA,EAChB,CAAC;AAED,SAAO;AACT;AAEO,SAAS,mBAAmB,OAAsC;AACvE,SAAO,QAAQ,IAAI,OAAO,gBAAgB,KAAK,CAAC;AAClD;","names":[]}
@@ -1,5 +1,5 @@
1
1
  import { AnyHandler } from '../../experimental/handlers-controller.mjs';
2
- import { R as RequestHandler } from '../../HttpResponse-BMMzfpjG.mjs';
2
+ import { R as RequestHandler } from '../../HttpResponse-CxHR1nNN.mjs';
3
3
  import { WebSocketHandler } from '../../handlers/WebSocketHandler.mjs';
4
4
  import '@mswjs/interceptors';
5
5
  import './isIterable.mjs';
@@ -1,5 +1,5 @@
1
1
  import { AnyHandler } from '../../experimental/handlers-controller.js';
2
- import { R as RequestHandler } from '../../HttpResponse-DPDqE4Pb.js';
2
+ import { R as RequestHandler } from '../../HttpResponse-aGiIzO91.js';
3
3
  import { WebSocketHandler } from '../../handlers/WebSocketHandler.js';
4
4
  import '@mswjs/interceptors';
5
5
  import './isIterable.js';
@@ -1,5 +1,5 @@
1
1
  import 'graphql';
2
- export { x as GraphQLMultipartRequestBody, w as GraphQLParsedOperationsMap, u as ParsedGraphQLQuery, P as ParsedGraphQLRequest, v as parseDocumentNode, y as parseGraphQLRequest } from '../../HttpResponse-BMMzfpjG.mjs';
2
+ export { x as GraphQLMultipartRequestBody, w as GraphQLParsedOperationsMap, u as ParsedGraphQLQuery, P as ParsedGraphQLRequest, v as parseDocumentNode, y as parseGraphQLRequest } from '../../HttpResponse-CxHR1nNN.mjs';
3
3
  import '@mswjs/interceptors';
4
4
  import './isIterable.mjs';
5
5
  import '../../typeUtils.mjs';
@@ -1,5 +1,5 @@
1
1
  import 'graphql';
2
- export { x as GraphQLMultipartRequestBody, w as GraphQLParsedOperationsMap, u as ParsedGraphQLQuery, P as ParsedGraphQLRequest, v as parseDocumentNode, y as parseGraphQLRequest } from '../../HttpResponse-DPDqE4Pb.js';
2
+ export { x as GraphQLMultipartRequestBody, w as GraphQLParsedOperationsMap, u as ParsedGraphQLQuery, P as ParsedGraphQLRequest, v as parseDocumentNode, y as parseGraphQLRequest } from '../../HttpResponse-aGiIzO91.js';
3
3
  import '@mswjs/interceptors';
4
4
  import './isIterable.js';
5
5
  import '../../typeUtils.js';
@@ -1,4 +1,4 @@
1
- import { d as DefaultRequestMultipartBody } from '../../HttpResponse-BMMzfpjG.mjs';
1
+ import { d as DefaultRequestMultipartBody } from '../../HttpResponse-CxHR1nNN.mjs';
2
2
  import '@mswjs/interceptors';
3
3
  import './isIterable.mjs';
4
4
  import '../../typeUtils.mjs';
@@ -1,4 +1,4 @@
1
- import { d as DefaultRequestMultipartBody } from '../../HttpResponse-DPDqE4Pb.js';
1
+ import { d as DefaultRequestMultipartBody } from '../../HttpResponse-aGiIzO91.js';
2
2
  import '@mswjs/interceptors';
3
3
  import './isIterable.js';
4
4
  import '../../typeUtils.js';
@@ -24,7 +24,7 @@ module.exports = __toCommonJS(storeResponseCookies_exports);
24
24
  var import_cookieStore = require("../cookieStore");
25
25
  var import_decorators = require("../HttpResponse/decorators");
26
26
  async function storeResponseCookies(request, response) {
27
- const responseCookies = Reflect.get(response, import_decorators.kSetCookie);
27
+ const responseCookies = (0, import_decorators.getRawSetCookie)(response);
28
28
  if (responseCookies) {
29
29
  await import_cookieStore.cookieStore.setCookie(responseCookies, request.url);
30
30
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/core/utils/request/storeResponseCookies.ts"],"sourcesContent":["import { cookieStore } from '../cookieStore'\nimport { kSetCookie } from '../HttpResponse/decorators'\n\nexport async function storeResponseCookies(\n request: Request,\n response: Response,\n): Promise<void> {\n // Grab the raw \"Set-Cookie\" response header provided\n // in the HeadersInit for this mocked response.\n const responseCookies = Reflect.get(response, kSetCookie) as\n | string\n | undefined\n\n if (responseCookies) {\n await cookieStore.setCookie(responseCookies, request.url)\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAA4B;AAC5B,wBAA2B;AAE3B,eAAsB,qBACpB,SACA,UACe;AAGf,QAAM,kBAAkB,QAAQ,IAAI,UAAU,4BAAU;AAIxD,MAAI,iBAAiB;AACnB,UAAM,+BAAY,UAAU,iBAAiB,QAAQ,GAAG;AAAA,EAC1D;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../../src/core/utils/request/storeResponseCookies.ts"],"sourcesContent":["import { cookieStore } from '../cookieStore'\nimport { getRawSetCookie } from '../HttpResponse/decorators'\n\nexport async function storeResponseCookies(\n request: Request,\n response: Response,\n): Promise<void> {\n // Grab the raw \"Set-Cookie\" response header provided\n // in the HeadersInit for this mocked response.\n const responseCookies = getRawSetCookie(response)\n\n if (responseCookies) {\n await cookieStore.setCookie(responseCookies, request.url)\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAA4B;AAC5B,wBAAgC;AAEhC,eAAsB,qBACpB,SACA,UACe;AAGf,QAAM,sBAAkB,mCAAgB,QAAQ;AAEhD,MAAI,iBAAiB;AACnB,UAAM,+BAAY,UAAU,iBAAiB,QAAQ,GAAG;AAAA,EAC1D;AACF;","names":[]}
@@ -1,7 +1,7 @@
1
1
  import { cookieStore } from '../cookieStore.mjs';
2
- import { kSetCookie } from '../HttpResponse/decorators.mjs';
2
+ import { getRawSetCookie } from '../HttpResponse/decorators.mjs';
3
3
  async function storeResponseCookies(request, response) {
4
- const responseCookies = Reflect.get(response, kSetCookie);
4
+ const responseCookies = getRawSetCookie(response);
5
5
  if (responseCookies) {
6
6
  await cookieStore.setCookie(responseCookies, request.url);
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/core/utils/request/storeResponseCookies.ts"],"sourcesContent":["import { cookieStore } from '../cookieStore'\nimport { kSetCookie } from '../HttpResponse/decorators'\n\nexport async function storeResponseCookies(\n request: Request,\n response: Response,\n): Promise<void> {\n // Grab the raw \"Set-Cookie\" response header provided\n // in the HeadersInit for this mocked response.\n const responseCookies = Reflect.get(response, kSetCookie) as\n | string\n | undefined\n\n if (responseCookies) {\n await cookieStore.setCookie(responseCookies, request.url)\n }\n}\n"],"mappings":"AAAA,SAAS,mBAAmB;AAC5B,SAAS,kBAAkB;AAE3B,eAAsB,qBACpB,SACA,UACe;AAGf,QAAM,kBAAkB,QAAQ,IAAI,UAAU,UAAU;AAIxD,MAAI,iBAAiB;AACnB,UAAM,YAAY,UAAU,iBAAiB,QAAQ,GAAG;AAAA,EAC1D;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../../src/core/utils/request/storeResponseCookies.ts"],"sourcesContent":["import { cookieStore } from '../cookieStore'\nimport { getRawSetCookie } from '../HttpResponse/decorators'\n\nexport async function storeResponseCookies(\n request: Request,\n response: Response,\n): Promise<void> {\n // Grab the raw \"Set-Cookie\" response header provided\n // in the HeadersInit for this mocked response.\n const responseCookies = getRawSetCookie(response)\n\n if (responseCookies) {\n await cookieStore.setCookie(responseCookies, request.url)\n }\n}\n"],"mappings":"AAAA,SAAS,mBAAmB;AAC5B,SAAS,uBAAuB;AAEhC,eAAsB,qBACpB,SACA,UACe;AAGf,QAAM,kBAAkB,gBAAgB,QAAQ;AAEhD,MAAI,iBAAiB;AACnB,UAAM,YAAY,UAAU,iBAAiB,QAAQ,GAAG;AAAA,EAC1D;AACF;","names":[]}
@@ -1,5 +1,5 @@
1
1
  import { WebSocketConnectionData } from '@mswjs/interceptors/WebSocket';
2
- import { R as RequestHandler } from '../HttpResponse-BMMzfpjG.mjs';
2
+ import { R as RequestHandler } from '../HttpResponse-CxHR1nNN.mjs';
3
3
  import { WebSocketHandler } from '../handlers/WebSocketHandler.mjs';
4
4
  import { UnhandledRequestStrategy } from '../utils/request/onUnhandledRequest.mjs';
5
5
  import '@mswjs/interceptors';
@@ -1,5 +1,5 @@
1
1
  import { WebSocketConnectionData } from '@mswjs/interceptors/WebSocket';
2
- import { R as RequestHandler } from '../HttpResponse-DPDqE4Pb.js';
2
+ import { R as RequestHandler } from '../HttpResponse-aGiIzO91.js';
3
3
  import { WebSocketHandler } from '../handlers/WebSocketHandler.js';
4
4
  import { UnhandledRequestStrategy } from '../utils/request/onUnhandledRequest.js';
5
5
  import '@mswjs/interceptors';
package/lib/core/ws.d.mts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { WebSocketClientConnectionProtocol, WebSocketData } from '@mswjs/interceptors/WebSocket';
2
2
  export { WebSocketData } from '@mswjs/interceptors/WebSocket';
3
3
  import { WebSocketHandlerEventMap, WebSocketHandler } from './handlers/WebSocketHandler.mjs';
4
- import { Path } from './utils/matching/matchRequestUrl.mjs';
4
+ import { Path, PathParams } from './utils/matching/matchRequestUrl.mjs';
5
5
  import 'strict-event-emitter';
6
6
 
7
7
  type WebSocketEventListener<EventType extends keyof WebSocketHandlerEventMap> = (...args: WebSocketHandlerEventMap[EventType]) => void;
@@ -59,6 +59,21 @@ type WebSocketLink = {
59
59
  * })
60
60
  */
61
61
  declare function createWebSocketLinkHandler(url: Path): WebSocketLink;
62
+ interface WebSocketNamespace {
63
+ link: typeof createWebSocketLinkHandler;
64
+ /**
65
+ * Request handler for the `upgrade` requests to the WebSocket protocol.
66
+ * This requires a WebSocket handler to be present to fire.
67
+ * @note This only affects Node.js as the `upgrade` request header is
68
+ * forbidden and cannot be read in the browser. Consider using the
69
+ * `WebSocket` API for establishing WebSocket connections in the browser.
70
+ */
71
+ onUpgrade: (info: {
72
+ requestId: string;
73
+ request: Request;
74
+ params: PathParams;
75
+ }) => Promise<Response | undefined> | Response | undefined;
76
+ }
62
77
  /**
63
78
  * A namespace to intercept and mock WebSocket connections.
64
79
  *
@@ -68,8 +83,6 @@ declare function createWebSocketLinkHandler(url: Path): WebSocketLink;
68
83
  * @see {@link https://mswjs.io/docs/api/ws `ws` API reference}
69
84
  * @see {@link https://mswjs.io/docs/basics/handling-websocket-events Handling WebSocket events}
70
85
  */
71
- declare const ws: {
72
- link: typeof createWebSocketLinkHandler;
73
- };
86
+ declare const ws: WebSocketNamespace;
74
87
 
75
88
  export { type WebSocketEventListener, type WebSocketLink, ws };
package/lib/core/ws.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { WebSocketClientConnectionProtocol, WebSocketData } from '@mswjs/interceptors/WebSocket';
2
2
  export { WebSocketData } from '@mswjs/interceptors/WebSocket';
3
3
  import { WebSocketHandlerEventMap, WebSocketHandler } from './handlers/WebSocketHandler.js';
4
- import { Path } from './utils/matching/matchRequestUrl.js';
4
+ import { Path, PathParams } from './utils/matching/matchRequestUrl.js';
5
5
  import 'strict-event-emitter';
6
6
 
7
7
  type WebSocketEventListener<EventType extends keyof WebSocketHandlerEventMap> = (...args: WebSocketHandlerEventMap[EventType]) => void;
@@ -59,6 +59,21 @@ type WebSocketLink = {
59
59
  * })
60
60
  */
61
61
  declare function createWebSocketLinkHandler(url: Path): WebSocketLink;
62
+ interface WebSocketNamespace {
63
+ link: typeof createWebSocketLinkHandler;
64
+ /**
65
+ * Request handler for the `upgrade` requests to the WebSocket protocol.
66
+ * This requires a WebSocket handler to be present to fire.
67
+ * @note This only affects Node.js as the `upgrade` request header is
68
+ * forbidden and cannot be read in the browser. Consider using the
69
+ * `WebSocket` API for establishing WebSocket connections in the browser.
70
+ */
71
+ onUpgrade: (info: {
72
+ requestId: string;
73
+ request: Request;
74
+ params: PathParams;
75
+ }) => Promise<Response | undefined> | Response | undefined;
76
+ }
62
77
  /**
63
78
  * A namespace to intercept and mock WebSocket connections.
64
79
  *
@@ -68,8 +83,6 @@ declare function createWebSocketLinkHandler(url: Path): WebSocketLink;
68
83
  * @see {@link https://mswjs.io/docs/api/ws `ws` API reference}
69
84
  * @see {@link https://mswjs.io/docs/basics/handling-websocket-events Handling WebSocket events}
70
85
  */
71
- declare const ws: {
72
- link: typeof createWebSocketLinkHandler;
73
- };
86
+ declare const ws: WebSocketNamespace;
74
87
 
75
88
  export { type WebSocketEventListener, type WebSocketLink, ws };
package/lib/core/ws.js CHANGED
@@ -22,10 +22,13 @@ __export(ws_exports, {
22
22
  });
23
23
  module.exports = __toCommonJS(ws_exports);
24
24
  var import_outvariant = require("outvariant");
25
+ var import_interceptors = require("@mswjs/interceptors");
25
26
  var import_WebSocketHandler = require("./handlers/WebSocketHandler");
26
27
  var import_hasRefCounted = require("./utils/internal/hasRefCounted");
27
28
  var import_matchRequestUrl = require("./utils/matching/matchRequestUrl");
28
29
  var import_WebSocketClientManager = require("./ws/WebSocketClientManager");
30
+ var import_http = require("./http");
31
+ var import_attachSiblingHandlers = require("./utils/internal/attachSiblingHandlers");
29
32
  const webSocketChannel = new BroadcastChannel("msw:websocket-client-manager");
30
33
  if ((0, import_hasRefCounted.hasRefCounted)(webSocketChannel)) {
31
34
  webSocketChannel.unref();
@@ -38,17 +41,20 @@ function createWebSocketLinkHandler(url) {
38
41
  typeof url
39
42
  );
40
43
  const clientManager = new import_WebSocketClientManager.WebSocketClientManager(webSocketChannel);
44
+ const upgradeHandler = import_http.http.get(({ request }) => {
45
+ return request.headers.get("upgrade")?.toLowerCase() === "websocket" && (0, import_matchRequestUrl.matchRequestUrl)(new URL((0, import_interceptors.resolveWebSocketUrl)(request.url)), url).matches;
46
+ }, ws.onUpgrade);
41
47
  return {
42
48
  get clients() {
43
49
  return clientManager.clients;
44
50
  },
45
51
  addEventListener(event, listener) {
46
- const handler = new import_WebSocketHandler.WebSocketHandler(url);
47
- handler[import_WebSocketHandler.kEmitter].on("connection", async ({ client }) => {
52
+ const webSocketHandler = new import_WebSocketHandler.WebSocketHandler(url);
53
+ webSocketHandler[import_WebSocketHandler.kEmitter].on("connection", async ({ client }) => {
48
54
  await clientManager.addConnection(client);
49
55
  });
50
- handler[import_WebSocketHandler.kEmitter].on(event, listener);
51
- return handler;
56
+ webSocketHandler[import_WebSocketHandler.kEmitter].on(event, listener);
57
+ return (0, import_attachSiblingHandlers.attachSiblingHandlers)(webSocketHandler, [upgradeHandler]);
52
58
  },
53
59
  broadcast(data) {
54
60
  this.broadcastExcept([], data);
@@ -63,7 +69,26 @@ function createWebSocketLinkHandler(url) {
63
69
  }
64
70
  };
65
71
  }
72
+ const WEBSOCKET_GUID = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
66
73
  const ws = {
67
- link: createWebSocketLinkHandler
74
+ link: createWebSocketLinkHandler,
75
+ async onUpgrade({ request }) {
76
+ const key = request.headers.get("sec-websocket-key");
77
+ if (!key) {
78
+ return;
79
+ }
80
+ const keyBytes = new TextEncoder().encode(key + WEBSOCKET_GUID);
81
+ const digest = await crypto.subtle.digest("SHA-1", keyBytes);
82
+ const acceptValue = btoa(String.fromCharCode(...new Uint8Array(digest)));
83
+ new WebSocket((0, import_interceptors.resolveWebSocketUrl)(request.url));
84
+ return new import_interceptors.FetchResponse(null, {
85
+ status: 101,
86
+ headers: {
87
+ upgrade: "websocket",
88
+ connection: "upgrade",
89
+ "sec-websocket-accept": acceptValue
90
+ }
91
+ });
92
+ }
68
93
  };
69
94
  //# sourceMappingURL=ws.js.map