msw 2.3.0-ws.rc-1 → 2.3.0-ws.rc-2

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 (178) hide show
  1. package/README.md +8 -3
  2. package/cli/init.js +1 -1
  3. package/lib/browser/index.d.mts +4 -4
  4. package/lib/browser/index.js +64 -59
  5. package/lib/browser/index.js.map +1 -1
  6. package/lib/browser/index.mjs +64 -59
  7. package/lib/browser/index.mjs.map +1 -1
  8. package/lib/core/{GraphQLHandler-Cbu12sb0.d.ts → GraphQLHandler-3gvpA65n.d.ts} +3 -3
  9. package/lib/core/{GraphQLHandler-QGQY_9Rc.d.mts → GraphQLHandler-4DPdxG0R.d.mts} +3 -3
  10. package/lib/core/{HttpResponse-BWB1yDNM.d.mts → HttpResponse-aJY-D0oG.d.ts} +3 -3
  11. package/lib/core/{HttpResponse-DeJBWGN5.d.ts → HttpResponse-xuSipbNt.d.mts} +3 -3
  12. package/lib/core/HttpResponse.d.mts +1 -1
  13. package/lib/core/HttpResponse.d.ts +1 -1
  14. package/lib/core/HttpResponse.js.map +1 -1
  15. package/lib/core/HttpResponse.mjs.map +1 -1
  16. package/lib/core/SetupApi.d.mts +1 -1
  17. package/lib/core/SetupApi.d.ts +1 -1
  18. package/lib/core/bypass.js +6 -1
  19. package/lib/core/bypass.js.map +1 -1
  20. package/lib/core/bypass.mjs +6 -1
  21. package/lib/core/bypass.mjs.map +1 -1
  22. package/lib/core/getResponse.d.mts +1 -1
  23. package/lib/core/getResponse.d.ts +1 -1
  24. package/lib/core/getResponse.js +2 -2
  25. package/lib/core/getResponse.js.map +1 -1
  26. package/lib/core/getResponse.mjs +2 -2
  27. package/lib/core/getResponse.mjs.map +1 -1
  28. package/lib/core/graphql.d.mts +8 -6
  29. package/lib/core/graphql.d.ts +8 -6
  30. package/lib/core/graphql.js.map +1 -1
  31. package/lib/core/graphql.mjs.map +1 -1
  32. package/lib/core/handlers/GraphQLHandler.d.mts +2 -2
  33. package/lib/core/handlers/GraphQLHandler.d.ts +2 -2
  34. package/lib/core/handlers/GraphQLHandler.js.map +1 -1
  35. package/lib/core/handlers/GraphQLHandler.mjs.map +1 -1
  36. package/lib/core/handlers/HttpHandler.d.mts +1 -1
  37. package/lib/core/handlers/HttpHandler.d.ts +1 -1
  38. package/lib/core/handlers/HttpHandler.js +1 -1
  39. package/lib/core/handlers/HttpHandler.js.map +1 -1
  40. package/lib/core/handlers/HttpHandler.mjs +1 -1
  41. package/lib/core/handlers/HttpHandler.mjs.map +1 -1
  42. package/lib/core/handlers/RequestHandler.d.mts +1 -1
  43. package/lib/core/handlers/RequestHandler.d.ts +1 -1
  44. package/lib/core/handlers/WebSocketHandler.d.mts +11 -17
  45. package/lib/core/handlers/WebSocketHandler.d.ts +11 -17
  46. package/lib/core/handlers/WebSocketHandler.js +9 -12
  47. package/lib/core/handlers/WebSocketHandler.js.map +1 -1
  48. package/lib/core/handlers/WebSocketHandler.mjs +9 -12
  49. package/lib/core/handlers/WebSocketHandler.mjs.map +1 -1
  50. package/lib/core/http.d.mts +1 -1
  51. package/lib/core/http.d.ts +1 -1
  52. package/lib/core/index.d.mts +4 -4
  53. package/lib/core/index.d.ts +4 -4
  54. package/lib/core/index.js +2 -0
  55. package/lib/core/index.js.map +1 -1
  56. package/lib/core/index.mjs +4 -0
  57. package/lib/core/index.mjs.map +1 -1
  58. package/lib/core/passthrough.d.mts +1 -1
  59. package/lib/core/passthrough.d.ts +1 -1
  60. package/lib/core/typeUtils.d.mts +6 -1
  61. package/lib/core/typeUtils.d.ts +6 -1
  62. package/lib/core/typeUtils.js.map +1 -1
  63. package/lib/core/utils/HttpResponse/decorators.d.mts +1 -1
  64. package/lib/core/utils/HttpResponse/decorators.d.ts +1 -1
  65. package/lib/core/utils/HttpResponse/decorators.js +4 -1
  66. package/lib/core/utils/HttpResponse/decorators.js.map +1 -1
  67. package/lib/core/utils/HttpResponse/decorators.mjs +4 -1
  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/handleRequest.js.map +1 -1
  74. package/lib/core/utils/handleRequest.mjs.map +1 -1
  75. package/lib/core/utils/handleWebSocketEvent.d.mts +8 -2
  76. package/lib/core/utils/handleWebSocketEvent.d.ts +8 -2
  77. package/lib/core/utils/handleWebSocketEvent.js +20 -17
  78. package/lib/core/utils/handleWebSocketEvent.js.map +1 -1
  79. package/lib/core/utils/handleWebSocketEvent.mjs +21 -22
  80. package/lib/core/utils/handleWebSocketEvent.mjs.map +1 -1
  81. package/lib/core/utils/internal/mergeRight.js +15 -12
  82. package/lib/core/utils/internal/mergeRight.js.map +1 -1
  83. package/lib/core/utils/internal/mergeRight.mjs +15 -12
  84. package/lib/core/utils/internal/mergeRight.mjs.map +1 -1
  85. package/lib/core/utils/internal/parseGraphQLRequest.d.mts +2 -2
  86. package/lib/core/utils/internal/parseGraphQLRequest.d.ts +2 -2
  87. package/lib/core/utils/internal/parseMultipartData.d.mts +1 -1
  88. package/lib/core/utils/internal/parseMultipartData.d.ts +1 -1
  89. package/lib/core/utils/internal/requestHandlerUtils.d.mts +1 -1
  90. package/lib/core/utils/internal/requestHandlerUtils.d.ts +1 -1
  91. package/lib/core/utils/logging/getTimestamp.d.mts +4 -1
  92. package/lib/core/utils/logging/getTimestamp.d.ts +4 -1
  93. package/lib/core/utils/logging/getTimestamp.js +6 -2
  94. package/lib/core/utils/logging/getTimestamp.js.map +1 -1
  95. package/lib/core/utils/logging/getTimestamp.mjs +6 -2
  96. package/lib/core/utils/logging/getTimestamp.mjs.map +1 -1
  97. package/lib/core/ws/utils/attachWebSocketLogger.d.mts +34 -0
  98. package/lib/core/ws/utils/attachWebSocketLogger.d.ts +34 -0
  99. package/lib/core/ws/utils/attachWebSocketLogger.js +211 -0
  100. package/lib/core/ws/utils/attachWebSocketLogger.js.map +1 -0
  101. package/lib/core/ws/utils/attachWebSocketLogger.mjs +191 -0
  102. package/lib/core/ws/utils/attachWebSocketLogger.mjs.map +1 -0
  103. package/lib/core/ws/utils/getMessageLength.d.mts +11 -0
  104. package/lib/core/ws/utils/getMessageLength.d.ts +11 -0
  105. package/lib/core/ws/utils/getMessageLength.js +33 -0
  106. package/lib/core/ws/utils/getMessageLength.js.map +1 -0
  107. package/lib/core/ws/utils/getMessageLength.mjs +13 -0
  108. package/lib/core/ws/utils/getMessageLength.mjs.map +1 -0
  109. package/lib/core/ws/utils/getPublicData.d.mts +5 -0
  110. package/lib/core/ws/utils/getPublicData.d.ts +5 -0
  111. package/lib/core/ws/utils/getPublicData.js +36 -0
  112. package/lib/core/ws/utils/getPublicData.js.map +1 -0
  113. package/lib/core/ws/utils/getPublicData.mjs +16 -0
  114. package/lib/core/ws/utils/getPublicData.mjs.map +1 -0
  115. package/lib/core/ws/utils/truncateMessage.d.mts +3 -0
  116. package/lib/core/ws/utils/truncateMessage.d.ts +3 -0
  117. package/lib/core/{utils/internal/randomId.js → ws/utils/truncateMessage.js} +11 -7
  118. package/lib/core/ws/utils/truncateMessage.js.map +1 -0
  119. package/lib/core/ws/utils/truncateMessage.mjs +11 -0
  120. package/lib/core/ws/utils/truncateMessage.mjs.map +1 -0
  121. package/lib/iife/index.js +508 -231
  122. package/lib/iife/index.js.map +1 -1
  123. package/lib/mockServiceWorker.js +8 -11
  124. package/lib/native/index.d.mts +4 -4
  125. package/lib/native/index.js +8 -2
  126. package/lib/native/index.js.map +1 -1
  127. package/lib/native/index.mjs +8 -2
  128. package/lib/native/index.mjs.map +1 -1
  129. package/lib/node/index.d.mts +6 -6
  130. package/lib/node/index.d.ts +2 -2
  131. package/lib/node/index.js +8 -2
  132. package/lib/node/index.js.map +1 -1
  133. package/lib/node/index.mjs +8 -2
  134. package/lib/node/index.mjs.map +1 -1
  135. package/package.json +8 -11
  136. package/src/browser/setupWorker/glossary.ts +4 -1
  137. package/src/browser/setupWorker/setupWorker.ts +19 -2
  138. package/src/browser/setupWorker/start/createRequestListener.ts +1 -1
  139. package/src/browser/setupWorker/start/createStartHandler.ts +9 -19
  140. package/src/browser/setupWorker/start/utils/createMessageChannel.ts +1 -1
  141. package/src/browser/utils/checkWorkerIntegrity.ts +34 -0
  142. package/src/core/HttpResponse.ts +3 -2
  143. package/src/core/bypass.test.ts +22 -0
  144. package/src/core/bypass.ts +9 -1
  145. package/src/core/getResponse.ts +2 -2
  146. package/src/core/graphql.ts +6 -3
  147. package/src/core/handlers/GraphQLHandler.test.ts +4 -5
  148. package/src/core/handlers/GraphQLHandler.ts +7 -4
  149. package/src/core/handlers/HttpHandler.test.ts +5 -5
  150. package/src/core/handlers/HttpHandler.ts +1 -1
  151. package/src/core/handlers/WebSocketHandler.ts +21 -39
  152. package/src/core/index.ts +6 -2
  153. package/src/core/typeUtils.ts +16 -10
  154. package/src/core/utils/HttpResponse/decorators.ts +8 -4
  155. package/src/core/utils/handleRequest.test.ts +14 -14
  156. package/src/core/utils/handleRequest.ts +1 -1
  157. package/src/core/utils/handleWebSocketEvent.ts +39 -29
  158. package/src/core/utils/internal/mergeRight.ts +16 -13
  159. package/src/core/utils/logging/getTimestamp.test.ts +20 -6
  160. package/src/core/utils/logging/getTimestamp.ts +11 -6
  161. package/src/core/ws/utils/attachWebSocketLogger.ts +262 -0
  162. package/src/core/ws/utils/getMessageLength.test.ts +16 -0
  163. package/src/core/ws/utils/getMessageLength.ts +19 -0
  164. package/src/core/ws/utils/getPublicData.test.ts +38 -0
  165. package/src/core/ws/utils/getPublicData.ts +17 -0
  166. package/src/core/ws/utils/truncateMessage.test.ts +12 -0
  167. package/src/core/ws/utils/truncateMessage.ts +9 -0
  168. package/src/mockServiceWorker.js +7 -10
  169. package/src/node/SetupServerApi.ts +4 -4
  170. package/src/node/SetupServerCommonApi.ts +6 -2
  171. package/src/node/glossary.ts +3 -3
  172. package/lib/core/utils/internal/randomId.d.mts +0 -3
  173. package/lib/core/utils/internal/randomId.d.ts +0 -3
  174. package/lib/core/utils/internal/randomId.js.map +0 -1
  175. package/lib/core/utils/internal/randomId.mjs +0 -7
  176. package/lib/core/utils/internal/randomId.mjs.map +0 -1
  177. package/src/browser/utils/requestIntegrityCheck.ts +0 -23
  178. package/src/core/utils/internal/randomId.ts +0 -3
@@ -1,4 +1,4 @@
1
- import { h as RequestHandlerDefaultInfo, R as RequestHandler, a as ResponseResolver, c as RequestHandlerOptions, i as ResponseResolutionContext } from '../HttpResponse-DeJBWGN5.js';
1
+ import { h as RequestHandlerDefaultInfo, R as RequestHandler, a as ResponseResolver, c as RequestHandlerOptions, i as ResponseResolutionContext } from '../HttpResponse-aJY-D0oG.js';
2
2
  import { Path, Match, PathParams } from '../utils/matching/matchRequestUrl.js';
3
3
  import '../typeUtils.js';
4
4
 
@@ -71,7 +71,7 @@ class HttpHandler extends import_RequestHandler.RequestHandler {
71
71
  queryParams.push(paramName);
72
72
  });
73
73
  import_devUtils.devUtils.warn(
74
- `Found a redundant usage of query parameters in the request handler URL for "${method} ${path}". Please match against a path instead and access query parameters in the response resolver function using "req.url.searchParams".`
74
+ `Found a redundant usage of query parameters in the request handler URL for "${method} ${path}". Please match against a path instead and access query parameters using "new URL(request.url).searchParams" instead. Learn more: https://mswjs.io/docs/recipes/query-parameters`
75
75
  );
76
76
  }
77
77
  async parse(args) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/handlers/HttpHandler.ts"],"sourcesContent":["import { ResponseResolutionContext } from '../utils/executeHandlers'\nimport { devUtils } from '../utils/internal/devUtils'\nimport { isStringEqual } from '../utils/internal/isStringEqual'\nimport { getStatusCodeColor } from '../utils/logging/getStatusCodeColor'\nimport { getTimestamp } from '../utils/logging/getTimestamp'\nimport { serializeRequest } from '../utils/logging/serializeRequest'\nimport { serializeResponse } from '../utils/logging/serializeResponse'\nimport {\n matchRequestUrl,\n Match,\n Path,\n PathParams,\n} from '../utils/matching/matchRequestUrl'\nimport { toPublicUrl } from '../utils/request/toPublicUrl'\nimport { getAllRequestCookies } from '../utils/request/getRequestCookies'\nimport { cleanUrl, getSearchParams } from '../utils/url/cleanUrl'\nimport {\n RequestHandler,\n RequestHandlerDefaultInfo,\n RequestHandlerOptions,\n ResponseResolver,\n} from './RequestHandler'\n\ntype HttpHandlerMethod = string | RegExp\n\nexport interface HttpHandlerInfo extends RequestHandlerDefaultInfo {\n method: HttpHandlerMethod\n path: Path\n}\n\nexport enum HttpMethods {\n HEAD = 'HEAD',\n GET = 'GET',\n POST = 'POST',\n PUT = 'PUT',\n PATCH = 'PATCH',\n OPTIONS = 'OPTIONS',\n DELETE = 'DELETE',\n}\n\nexport type RequestQuery = {\n [queryName: string]: string\n}\n\nexport type HttpRequestParsedResult = {\n match: Match\n cookies: Record<string, string>\n}\n\nexport type HttpRequestResolverExtras<Params extends PathParams> = {\n params: Params\n cookies: Record<string, string>\n}\n\n/**\n * Request handler for HTTP requests.\n * Provides request matching based on method and URL.\n */\nexport class HttpHandler extends RequestHandler<\n HttpHandlerInfo,\n HttpRequestParsedResult,\n HttpRequestResolverExtras<any>\n> {\n constructor(\n method: HttpHandlerMethod,\n path: Path,\n resolver: ResponseResolver<HttpRequestResolverExtras<any>, any, any>,\n options?: RequestHandlerOptions,\n ) {\n super({\n info: {\n header: `${method} ${path}`,\n path,\n method,\n },\n resolver,\n options,\n })\n\n this.checkRedundantQueryParameters()\n }\n\n private checkRedundantQueryParameters() {\n const { method, path } = this.info\n\n if (path instanceof RegExp) {\n return\n }\n\n const url = cleanUrl(path)\n\n // Bypass request handler URLs that have no redundant characters.\n if (url === path) {\n return\n }\n\n const searchParams = getSearchParams(path)\n const queryParams: string[] = []\n\n searchParams.forEach((_, paramName) => {\n queryParams.push(paramName)\n })\n\n devUtils.warn(\n `Found a redundant usage of query parameters in the request handler URL for \"${method} ${path}\". Please match against a path instead and access query parameters in the response resolver function using \"req.url.searchParams\".`,\n )\n }\n\n async parse(args: {\n request: Request\n resolutionContext?: ResponseResolutionContext\n }) {\n const url = new URL(args.request.url)\n const match = matchRequestUrl(\n url,\n this.info.path,\n args.resolutionContext?.baseUrl,\n )\n const cookies = getAllRequestCookies(args.request)\n\n return {\n match,\n cookies,\n }\n }\n\n predicate(args: { request: Request; parsedResult: HttpRequestParsedResult }) {\n const hasMatchingMethod = this.matchMethod(args.request.method)\n const hasMatchingUrl = args.parsedResult.match.matches\n return hasMatchingMethod && hasMatchingUrl\n }\n\n private matchMethod(actualMethod: string): boolean {\n return this.info.method instanceof RegExp\n ? this.info.method.test(actualMethod)\n : isStringEqual(this.info.method, actualMethod)\n }\n\n protected extendResolverArgs(args: {\n request: Request\n parsedResult: HttpRequestParsedResult\n }) {\n return {\n params: args.parsedResult.match?.params || {},\n cookies: args.parsedResult.cookies,\n }\n }\n\n async log(args: { request: Request; response: Response }) {\n const publicUrl = toPublicUrl(args.request.url)\n const loggedRequest = await serializeRequest(args.request)\n const loggedResponse = await serializeResponse(args.response)\n const statusColor = getStatusCodeColor(loggedResponse.status)\n\n console.groupCollapsed(\n devUtils.formatMessage(\n `${getTimestamp()} ${args.request.method} ${publicUrl} (%c${\n loggedResponse.status\n } ${loggedResponse.statusText}%c)`,\n ),\n `color:${statusColor}`,\n 'color:inherit',\n )\n console.log('Request', loggedRequest)\n console.log('Handler:', this)\n console.log('Response', loggedResponse)\n console.groupEnd()\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,sBAAyB;AACzB,2BAA8B;AAC9B,gCAAmC;AACnC,0BAA6B;AAC7B,8BAAiC;AACjC,+BAAkC;AAClC,6BAKO;AACP,yBAA4B;AAC5B,+BAAqC;AACrC,sBAA0C;AAC1C,4BAKO;AASA,IAAK,cAAL,kBAAKA,iBAAL;AACL,EAAAA,aAAA,UAAO;AACP,EAAAA,aAAA,SAAM;AACN,EAAAA,aAAA,UAAO;AACP,EAAAA,aAAA,SAAM;AACN,EAAAA,aAAA,WAAQ;AACR,EAAAA,aAAA,aAAU;AACV,EAAAA,aAAA,YAAS;AAPC,SAAAA;AAAA,GAAA;AA4BL,MAAM,oBAAoB,qCAI/B;AAAA,EACA,YACE,QACA,MACA,UACA,SACA;AACA,UAAM;AAAA,MACJ,MAAM;AAAA,QACJ,QAAQ,GAAG,MAAM,IAAI,IAAI;AAAA,QACzB;AAAA,QACA;AAAA,MACF;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAED,SAAK,8BAA8B;AAAA,EACrC;AAAA,EAEQ,gCAAgC;AACtC,UAAM,EAAE,QAAQ,KAAK,IAAI,KAAK;AAE9B,QAAI,gBAAgB,QAAQ;AAC1B;AAAA,IACF;AAEA,UAAM,UAAM,0BAAS,IAAI;AAGzB,QAAI,QAAQ,MAAM;AAChB;AAAA,IACF;AAEA,UAAM,mBAAe,iCAAgB,IAAI;AACzC,UAAM,cAAwB,CAAC;AAE/B,iBAAa,QAAQ,CAAC,GAAG,cAAc;AACrC,kBAAY,KAAK,SAAS;AAAA,IAC5B,CAAC;AAED,6BAAS;AAAA,MACP,+EAA+E,MAAM,IAAI,IAAI;AAAA,IAC/F;AAAA,EACF;AAAA,EAEA,MAAM,MAAM,MAGT;AACD,UAAM,MAAM,IAAI,IAAI,KAAK,QAAQ,GAAG;AACpC,UAAM,YAAQ;AAAA,MACZ;AAAA,MACA,KAAK,KAAK;AAAA,MACV,KAAK,mBAAmB;AAAA,IAC1B;AACA,UAAM,cAAU,+CAAqB,KAAK,OAAO;AAEjD,WAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,UAAU,MAAmE;AAC3E,UAAM,oBAAoB,KAAK,YAAY,KAAK,QAAQ,MAAM;AAC9D,UAAM,iBAAiB,KAAK,aAAa,MAAM;AAC/C,WAAO,qBAAqB;AAAA,EAC9B;AAAA,EAEQ,YAAY,cAA+B;AACjD,WAAO,KAAK,KAAK,kBAAkB,SAC/B,KAAK,KAAK,OAAO,KAAK,YAAY,QAClC,oCAAc,KAAK,KAAK,QAAQ,YAAY;AAAA,EAClD;AAAA,EAEU,mBAAmB,MAG1B;AACD,WAAO;AAAA,MACL,QAAQ,KAAK,aAAa,OAAO,UAAU,CAAC;AAAA,MAC5C,SAAS,KAAK,aAAa;AAAA,IAC7B;AAAA,EACF;AAAA,EAEA,MAAM,IAAI,MAAgD;AACxD,UAAM,gBAAY,gCAAY,KAAK,QAAQ,GAAG;AAC9C,UAAM,gBAAgB,UAAM,0CAAiB,KAAK,OAAO;AACzD,UAAM,iBAAiB,UAAM,4CAAkB,KAAK,QAAQ;AAC5D,UAAM,kBAAc,8CAAmB,eAAe,MAAM;AAE5D,YAAQ;AAAA,MACN,yBAAS;AAAA,QACP,OAAG,kCAAa,CAAC,IAAI,KAAK,QAAQ,MAAM,IAAI,SAAS,OACnD,eAAe,MACjB,IAAI,eAAe,UAAU;AAAA,MAC/B;AAAA,MACA,SAAS,WAAW;AAAA,MACpB;AAAA,IACF;AACA,YAAQ,IAAI,WAAW,aAAa;AACpC,YAAQ,IAAI,YAAY,IAAI;AAC5B,YAAQ,IAAI,YAAY,cAAc;AACtC,YAAQ,SAAS;AAAA,EACnB;AACF;","names":["HttpMethods"]}
1
+ {"version":3,"sources":["../../../src/core/handlers/HttpHandler.ts"],"sourcesContent":["import { ResponseResolutionContext } from '../utils/executeHandlers'\nimport { devUtils } from '../utils/internal/devUtils'\nimport { isStringEqual } from '../utils/internal/isStringEqual'\nimport { getStatusCodeColor } from '../utils/logging/getStatusCodeColor'\nimport { getTimestamp } from '../utils/logging/getTimestamp'\nimport { serializeRequest } from '../utils/logging/serializeRequest'\nimport { serializeResponse } from '../utils/logging/serializeResponse'\nimport {\n matchRequestUrl,\n Match,\n Path,\n PathParams,\n} from '../utils/matching/matchRequestUrl'\nimport { toPublicUrl } from '../utils/request/toPublicUrl'\nimport { getAllRequestCookies } from '../utils/request/getRequestCookies'\nimport { cleanUrl, getSearchParams } from '../utils/url/cleanUrl'\nimport {\n RequestHandler,\n RequestHandlerDefaultInfo,\n RequestHandlerOptions,\n ResponseResolver,\n} from './RequestHandler'\n\ntype HttpHandlerMethod = string | RegExp\n\nexport interface HttpHandlerInfo extends RequestHandlerDefaultInfo {\n method: HttpHandlerMethod\n path: Path\n}\n\nexport enum HttpMethods {\n HEAD = 'HEAD',\n GET = 'GET',\n POST = 'POST',\n PUT = 'PUT',\n PATCH = 'PATCH',\n OPTIONS = 'OPTIONS',\n DELETE = 'DELETE',\n}\n\nexport type RequestQuery = {\n [queryName: string]: string\n}\n\nexport type HttpRequestParsedResult = {\n match: Match\n cookies: Record<string, string>\n}\n\nexport type HttpRequestResolverExtras<Params extends PathParams> = {\n params: Params\n cookies: Record<string, string>\n}\n\n/**\n * Request handler for HTTP requests.\n * Provides request matching based on method and URL.\n */\nexport class HttpHandler extends RequestHandler<\n HttpHandlerInfo,\n HttpRequestParsedResult,\n HttpRequestResolverExtras<any>\n> {\n constructor(\n method: HttpHandlerMethod,\n path: Path,\n resolver: ResponseResolver<HttpRequestResolverExtras<any>, any, any>,\n options?: RequestHandlerOptions,\n ) {\n super({\n info: {\n header: `${method} ${path}`,\n path,\n method,\n },\n resolver,\n options,\n })\n\n this.checkRedundantQueryParameters()\n }\n\n private checkRedundantQueryParameters() {\n const { method, path } = this.info\n\n if (path instanceof RegExp) {\n return\n }\n\n const url = cleanUrl(path)\n\n // Bypass request handler URLs that have no redundant characters.\n if (url === path) {\n return\n }\n\n const searchParams = getSearchParams(path)\n const queryParams: string[] = []\n\n searchParams.forEach((_, paramName) => {\n queryParams.push(paramName)\n })\n\n devUtils.warn(\n `Found a redundant usage of query parameters in the request handler URL for \"${method} ${path}\". Please match against a path instead and access query parameters using \"new URL(request.url).searchParams\" instead. Learn more: https://mswjs.io/docs/recipes/query-parameters`,\n )\n }\n\n async parse(args: {\n request: Request\n resolutionContext?: ResponseResolutionContext\n }) {\n const url = new URL(args.request.url)\n const match = matchRequestUrl(\n url,\n this.info.path,\n args.resolutionContext?.baseUrl,\n )\n const cookies = getAllRequestCookies(args.request)\n\n return {\n match,\n cookies,\n }\n }\n\n predicate(args: { request: Request; parsedResult: HttpRequestParsedResult }) {\n const hasMatchingMethod = this.matchMethod(args.request.method)\n const hasMatchingUrl = args.parsedResult.match.matches\n return hasMatchingMethod && hasMatchingUrl\n }\n\n private matchMethod(actualMethod: string): boolean {\n return this.info.method instanceof RegExp\n ? this.info.method.test(actualMethod)\n : isStringEqual(this.info.method, actualMethod)\n }\n\n protected extendResolverArgs(args: {\n request: Request\n parsedResult: HttpRequestParsedResult\n }) {\n return {\n params: args.parsedResult.match?.params || {},\n cookies: args.parsedResult.cookies,\n }\n }\n\n async log(args: { request: Request; response: Response }) {\n const publicUrl = toPublicUrl(args.request.url)\n const loggedRequest = await serializeRequest(args.request)\n const loggedResponse = await serializeResponse(args.response)\n const statusColor = getStatusCodeColor(loggedResponse.status)\n\n console.groupCollapsed(\n devUtils.formatMessage(\n `${getTimestamp()} ${args.request.method} ${publicUrl} (%c${\n loggedResponse.status\n } ${loggedResponse.statusText}%c)`,\n ),\n `color:${statusColor}`,\n 'color:inherit',\n )\n console.log('Request', loggedRequest)\n console.log('Handler:', this)\n console.log('Response', loggedResponse)\n console.groupEnd()\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,sBAAyB;AACzB,2BAA8B;AAC9B,gCAAmC;AACnC,0BAA6B;AAC7B,8BAAiC;AACjC,+BAAkC;AAClC,6BAKO;AACP,yBAA4B;AAC5B,+BAAqC;AACrC,sBAA0C;AAC1C,4BAKO;AASA,IAAK,cAAL,kBAAKA,iBAAL;AACL,EAAAA,aAAA,UAAO;AACP,EAAAA,aAAA,SAAM;AACN,EAAAA,aAAA,UAAO;AACP,EAAAA,aAAA,SAAM;AACN,EAAAA,aAAA,WAAQ;AACR,EAAAA,aAAA,aAAU;AACV,EAAAA,aAAA,YAAS;AAPC,SAAAA;AAAA,GAAA;AA4BL,MAAM,oBAAoB,qCAI/B;AAAA,EACA,YACE,QACA,MACA,UACA,SACA;AACA,UAAM;AAAA,MACJ,MAAM;AAAA,QACJ,QAAQ,GAAG,MAAM,IAAI,IAAI;AAAA,QACzB;AAAA,QACA;AAAA,MACF;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAED,SAAK,8BAA8B;AAAA,EACrC;AAAA,EAEQ,gCAAgC;AACtC,UAAM,EAAE,QAAQ,KAAK,IAAI,KAAK;AAE9B,QAAI,gBAAgB,QAAQ;AAC1B;AAAA,IACF;AAEA,UAAM,UAAM,0BAAS,IAAI;AAGzB,QAAI,QAAQ,MAAM;AAChB;AAAA,IACF;AAEA,UAAM,mBAAe,iCAAgB,IAAI;AACzC,UAAM,cAAwB,CAAC;AAE/B,iBAAa,QAAQ,CAAC,GAAG,cAAc;AACrC,kBAAY,KAAK,SAAS;AAAA,IAC5B,CAAC;AAED,6BAAS;AAAA,MACP,+EAA+E,MAAM,IAAI,IAAI;AAAA,IAC/F;AAAA,EACF;AAAA,EAEA,MAAM,MAAM,MAGT;AACD,UAAM,MAAM,IAAI,IAAI,KAAK,QAAQ,GAAG;AACpC,UAAM,YAAQ;AAAA,MACZ;AAAA,MACA,KAAK,KAAK;AAAA,MACV,KAAK,mBAAmB;AAAA,IAC1B;AACA,UAAM,cAAU,+CAAqB,KAAK,OAAO;AAEjD,WAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,UAAU,MAAmE;AAC3E,UAAM,oBAAoB,KAAK,YAAY,KAAK,QAAQ,MAAM;AAC9D,UAAM,iBAAiB,KAAK,aAAa,MAAM;AAC/C,WAAO,qBAAqB;AAAA,EAC9B;AAAA,EAEQ,YAAY,cAA+B;AACjD,WAAO,KAAK,KAAK,kBAAkB,SAC/B,KAAK,KAAK,OAAO,KAAK,YAAY,QAClC,oCAAc,KAAK,KAAK,QAAQ,YAAY;AAAA,EAClD;AAAA,EAEU,mBAAmB,MAG1B;AACD,WAAO;AAAA,MACL,QAAQ,KAAK,aAAa,OAAO,UAAU,CAAC;AAAA,MAC5C,SAAS,KAAK,aAAa;AAAA,IAC7B;AAAA,EACF;AAAA,EAEA,MAAM,IAAI,MAAgD;AACxD,UAAM,gBAAY,gCAAY,KAAK,QAAQ,GAAG;AAC9C,UAAM,gBAAgB,UAAM,0CAAiB,KAAK,OAAO;AACzD,UAAM,iBAAiB,UAAM,4CAAkB,KAAK,QAAQ;AAC5D,UAAM,kBAAc,8CAAmB,eAAe,MAAM;AAE5D,YAAQ;AAAA,MACN,yBAAS;AAAA,QACP,OAAG,kCAAa,CAAC,IAAI,KAAK,QAAQ,MAAM,IAAI,SAAS,OACnD,eAAe,MACjB,IAAI,eAAe,UAAU;AAAA,MAC/B;AAAA,MACA,SAAS,WAAW;AAAA,MACpB;AAAA,IACF;AACA,YAAQ,IAAI,WAAW,aAAa;AACpC,YAAQ,IAAI,YAAY,IAAI;AAC5B,YAAQ,IAAI,YAAY,cAAc;AACtC,YAAQ,SAAS;AAAA,EACnB;AACF;","names":["HttpMethods"]}
@@ -51,7 +51,7 @@ class HttpHandler extends RequestHandler {
51
51
  queryParams.push(paramName);
52
52
  });
53
53
  devUtils.warn(
54
- `Found a redundant usage of query parameters in the request handler URL for "${method} ${path}". Please match against a path instead and access query parameters in the response resolver function using "req.url.searchParams".`
54
+ `Found a redundant usage of query parameters in the request handler URL for "${method} ${path}". Please match against a path instead and access query parameters using "new URL(request.url).searchParams" instead. Learn more: https://mswjs.io/docs/recipes/query-parameters`
55
55
  );
56
56
  }
57
57
  async parse(args) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/handlers/HttpHandler.ts"],"sourcesContent":["import { ResponseResolutionContext } from '../utils/executeHandlers'\nimport { devUtils } from '../utils/internal/devUtils'\nimport { isStringEqual } from '../utils/internal/isStringEqual'\nimport { getStatusCodeColor } from '../utils/logging/getStatusCodeColor'\nimport { getTimestamp } from '../utils/logging/getTimestamp'\nimport { serializeRequest } from '../utils/logging/serializeRequest'\nimport { serializeResponse } from '../utils/logging/serializeResponse'\nimport {\n matchRequestUrl,\n Match,\n Path,\n PathParams,\n} from '../utils/matching/matchRequestUrl'\nimport { toPublicUrl } from '../utils/request/toPublicUrl'\nimport { getAllRequestCookies } from '../utils/request/getRequestCookies'\nimport { cleanUrl, getSearchParams } from '../utils/url/cleanUrl'\nimport {\n RequestHandler,\n RequestHandlerDefaultInfo,\n RequestHandlerOptions,\n ResponseResolver,\n} from './RequestHandler'\n\ntype HttpHandlerMethod = string | RegExp\n\nexport interface HttpHandlerInfo extends RequestHandlerDefaultInfo {\n method: HttpHandlerMethod\n path: Path\n}\n\nexport enum HttpMethods {\n HEAD = 'HEAD',\n GET = 'GET',\n POST = 'POST',\n PUT = 'PUT',\n PATCH = 'PATCH',\n OPTIONS = 'OPTIONS',\n DELETE = 'DELETE',\n}\n\nexport type RequestQuery = {\n [queryName: string]: string\n}\n\nexport type HttpRequestParsedResult = {\n match: Match\n cookies: Record<string, string>\n}\n\nexport type HttpRequestResolverExtras<Params extends PathParams> = {\n params: Params\n cookies: Record<string, string>\n}\n\n/**\n * Request handler for HTTP requests.\n * Provides request matching based on method and URL.\n */\nexport class HttpHandler extends RequestHandler<\n HttpHandlerInfo,\n HttpRequestParsedResult,\n HttpRequestResolverExtras<any>\n> {\n constructor(\n method: HttpHandlerMethod,\n path: Path,\n resolver: ResponseResolver<HttpRequestResolverExtras<any>, any, any>,\n options?: RequestHandlerOptions,\n ) {\n super({\n info: {\n header: `${method} ${path}`,\n path,\n method,\n },\n resolver,\n options,\n })\n\n this.checkRedundantQueryParameters()\n }\n\n private checkRedundantQueryParameters() {\n const { method, path } = this.info\n\n if (path instanceof RegExp) {\n return\n }\n\n const url = cleanUrl(path)\n\n // Bypass request handler URLs that have no redundant characters.\n if (url === path) {\n return\n }\n\n const searchParams = getSearchParams(path)\n const queryParams: string[] = []\n\n searchParams.forEach((_, paramName) => {\n queryParams.push(paramName)\n })\n\n devUtils.warn(\n `Found a redundant usage of query parameters in the request handler URL for \"${method} ${path}\". Please match against a path instead and access query parameters in the response resolver function using \"req.url.searchParams\".`,\n )\n }\n\n async parse(args: {\n request: Request\n resolutionContext?: ResponseResolutionContext\n }) {\n const url = new URL(args.request.url)\n const match = matchRequestUrl(\n url,\n this.info.path,\n args.resolutionContext?.baseUrl,\n )\n const cookies = getAllRequestCookies(args.request)\n\n return {\n match,\n cookies,\n }\n }\n\n predicate(args: { request: Request; parsedResult: HttpRequestParsedResult }) {\n const hasMatchingMethod = this.matchMethod(args.request.method)\n const hasMatchingUrl = args.parsedResult.match.matches\n return hasMatchingMethod && hasMatchingUrl\n }\n\n private matchMethod(actualMethod: string): boolean {\n return this.info.method instanceof RegExp\n ? this.info.method.test(actualMethod)\n : isStringEqual(this.info.method, actualMethod)\n }\n\n protected extendResolverArgs(args: {\n request: Request\n parsedResult: HttpRequestParsedResult\n }) {\n return {\n params: args.parsedResult.match?.params || {},\n cookies: args.parsedResult.cookies,\n }\n }\n\n async log(args: { request: Request; response: Response }) {\n const publicUrl = toPublicUrl(args.request.url)\n const loggedRequest = await serializeRequest(args.request)\n const loggedResponse = await serializeResponse(args.response)\n const statusColor = getStatusCodeColor(loggedResponse.status)\n\n console.groupCollapsed(\n devUtils.formatMessage(\n `${getTimestamp()} ${args.request.method} ${publicUrl} (%c${\n loggedResponse.status\n } ${loggedResponse.statusText}%c)`,\n ),\n `color:${statusColor}`,\n 'color:inherit',\n )\n console.log('Request', loggedRequest)\n console.log('Handler:', this)\n console.log('Response', loggedResponse)\n console.groupEnd()\n }\n}\n"],"mappings":"AACA,SAAS,gBAAgB;AACzB,SAAS,qBAAqB;AAC9B,SAAS,0BAA0B;AACnC,SAAS,oBAAoB;AAC7B,SAAS,wBAAwB;AACjC,SAAS,yBAAyB;AAClC;AAAA,EACE;AAAA,OAIK;AACP,SAAS,mBAAmB;AAC5B,SAAS,4BAA4B;AACrC,SAAS,UAAU,uBAAuB;AAC1C;AAAA,EACE;AAAA,OAIK;AASA,IAAK,cAAL,kBAAKA,iBAAL;AACL,EAAAA,aAAA,UAAO;AACP,EAAAA,aAAA,SAAM;AACN,EAAAA,aAAA,UAAO;AACP,EAAAA,aAAA,SAAM;AACN,EAAAA,aAAA,WAAQ;AACR,EAAAA,aAAA,aAAU;AACV,EAAAA,aAAA,YAAS;AAPC,SAAAA;AAAA,GAAA;AA4BL,MAAM,oBAAoB,eAI/B;AAAA,EACA,YACE,QACA,MACA,UACA,SACA;AACA,UAAM;AAAA,MACJ,MAAM;AAAA,QACJ,QAAQ,GAAG,MAAM,IAAI,IAAI;AAAA,QACzB;AAAA,QACA;AAAA,MACF;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAED,SAAK,8BAA8B;AAAA,EACrC;AAAA,EAEQ,gCAAgC;AACtC,UAAM,EAAE,QAAQ,KAAK,IAAI,KAAK;AAE9B,QAAI,gBAAgB,QAAQ;AAC1B;AAAA,IACF;AAEA,UAAM,MAAM,SAAS,IAAI;AAGzB,QAAI,QAAQ,MAAM;AAChB;AAAA,IACF;AAEA,UAAM,eAAe,gBAAgB,IAAI;AACzC,UAAM,cAAwB,CAAC;AAE/B,iBAAa,QAAQ,CAAC,GAAG,cAAc;AACrC,kBAAY,KAAK,SAAS;AAAA,IAC5B,CAAC;AAED,aAAS;AAAA,MACP,+EAA+E,MAAM,IAAI,IAAI;AAAA,IAC/F;AAAA,EACF;AAAA,EAEA,MAAM,MAAM,MAGT;AACD,UAAM,MAAM,IAAI,IAAI,KAAK,QAAQ,GAAG;AACpC,UAAM,QAAQ;AAAA,MACZ;AAAA,MACA,KAAK,KAAK;AAAA,MACV,KAAK,mBAAmB;AAAA,IAC1B;AACA,UAAM,UAAU,qBAAqB,KAAK,OAAO;AAEjD,WAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,UAAU,MAAmE;AAC3E,UAAM,oBAAoB,KAAK,YAAY,KAAK,QAAQ,MAAM;AAC9D,UAAM,iBAAiB,KAAK,aAAa,MAAM;AAC/C,WAAO,qBAAqB;AAAA,EAC9B;AAAA,EAEQ,YAAY,cAA+B;AACjD,WAAO,KAAK,KAAK,kBAAkB,SAC/B,KAAK,KAAK,OAAO,KAAK,YAAY,IAClC,cAAc,KAAK,KAAK,QAAQ,YAAY;AAAA,EAClD;AAAA,EAEU,mBAAmB,MAG1B;AACD,WAAO;AAAA,MACL,QAAQ,KAAK,aAAa,OAAO,UAAU,CAAC;AAAA,MAC5C,SAAS,KAAK,aAAa;AAAA,IAC7B;AAAA,EACF;AAAA,EAEA,MAAM,IAAI,MAAgD;AACxD,UAAM,YAAY,YAAY,KAAK,QAAQ,GAAG;AAC9C,UAAM,gBAAgB,MAAM,iBAAiB,KAAK,OAAO;AACzD,UAAM,iBAAiB,MAAM,kBAAkB,KAAK,QAAQ;AAC5D,UAAM,cAAc,mBAAmB,eAAe,MAAM;AAE5D,YAAQ;AAAA,MACN,SAAS;AAAA,QACP,GAAG,aAAa,CAAC,IAAI,KAAK,QAAQ,MAAM,IAAI,SAAS,OACnD,eAAe,MACjB,IAAI,eAAe,UAAU;AAAA,MAC/B;AAAA,MACA,SAAS,WAAW;AAAA,MACpB;AAAA,IACF;AACA,YAAQ,IAAI,WAAW,aAAa;AACpC,YAAQ,IAAI,YAAY,IAAI;AAC5B,YAAQ,IAAI,YAAY,cAAc;AACtC,YAAQ,SAAS;AAAA,EACnB;AACF;","names":["HttpMethods"]}
1
+ {"version":3,"sources":["../../../src/core/handlers/HttpHandler.ts"],"sourcesContent":["import { ResponseResolutionContext } from '../utils/executeHandlers'\nimport { devUtils } from '../utils/internal/devUtils'\nimport { isStringEqual } from '../utils/internal/isStringEqual'\nimport { getStatusCodeColor } from '../utils/logging/getStatusCodeColor'\nimport { getTimestamp } from '../utils/logging/getTimestamp'\nimport { serializeRequest } from '../utils/logging/serializeRequest'\nimport { serializeResponse } from '../utils/logging/serializeResponse'\nimport {\n matchRequestUrl,\n Match,\n Path,\n PathParams,\n} from '../utils/matching/matchRequestUrl'\nimport { toPublicUrl } from '../utils/request/toPublicUrl'\nimport { getAllRequestCookies } from '../utils/request/getRequestCookies'\nimport { cleanUrl, getSearchParams } from '../utils/url/cleanUrl'\nimport {\n RequestHandler,\n RequestHandlerDefaultInfo,\n RequestHandlerOptions,\n ResponseResolver,\n} from './RequestHandler'\n\ntype HttpHandlerMethod = string | RegExp\n\nexport interface HttpHandlerInfo extends RequestHandlerDefaultInfo {\n method: HttpHandlerMethod\n path: Path\n}\n\nexport enum HttpMethods {\n HEAD = 'HEAD',\n GET = 'GET',\n POST = 'POST',\n PUT = 'PUT',\n PATCH = 'PATCH',\n OPTIONS = 'OPTIONS',\n DELETE = 'DELETE',\n}\n\nexport type RequestQuery = {\n [queryName: string]: string\n}\n\nexport type HttpRequestParsedResult = {\n match: Match\n cookies: Record<string, string>\n}\n\nexport type HttpRequestResolverExtras<Params extends PathParams> = {\n params: Params\n cookies: Record<string, string>\n}\n\n/**\n * Request handler for HTTP requests.\n * Provides request matching based on method and URL.\n */\nexport class HttpHandler extends RequestHandler<\n HttpHandlerInfo,\n HttpRequestParsedResult,\n HttpRequestResolverExtras<any>\n> {\n constructor(\n method: HttpHandlerMethod,\n path: Path,\n resolver: ResponseResolver<HttpRequestResolverExtras<any>, any, any>,\n options?: RequestHandlerOptions,\n ) {\n super({\n info: {\n header: `${method} ${path}`,\n path,\n method,\n },\n resolver,\n options,\n })\n\n this.checkRedundantQueryParameters()\n }\n\n private checkRedundantQueryParameters() {\n const { method, path } = this.info\n\n if (path instanceof RegExp) {\n return\n }\n\n const url = cleanUrl(path)\n\n // Bypass request handler URLs that have no redundant characters.\n if (url === path) {\n return\n }\n\n const searchParams = getSearchParams(path)\n const queryParams: string[] = []\n\n searchParams.forEach((_, paramName) => {\n queryParams.push(paramName)\n })\n\n devUtils.warn(\n `Found a redundant usage of query parameters in the request handler URL for \"${method} ${path}\". Please match against a path instead and access query parameters using \"new URL(request.url).searchParams\" instead. Learn more: https://mswjs.io/docs/recipes/query-parameters`,\n )\n }\n\n async parse(args: {\n request: Request\n resolutionContext?: ResponseResolutionContext\n }) {\n const url = new URL(args.request.url)\n const match = matchRequestUrl(\n url,\n this.info.path,\n args.resolutionContext?.baseUrl,\n )\n const cookies = getAllRequestCookies(args.request)\n\n return {\n match,\n cookies,\n }\n }\n\n predicate(args: { request: Request; parsedResult: HttpRequestParsedResult }) {\n const hasMatchingMethod = this.matchMethod(args.request.method)\n const hasMatchingUrl = args.parsedResult.match.matches\n return hasMatchingMethod && hasMatchingUrl\n }\n\n private matchMethod(actualMethod: string): boolean {\n return this.info.method instanceof RegExp\n ? this.info.method.test(actualMethod)\n : isStringEqual(this.info.method, actualMethod)\n }\n\n protected extendResolverArgs(args: {\n request: Request\n parsedResult: HttpRequestParsedResult\n }) {\n return {\n params: args.parsedResult.match?.params || {},\n cookies: args.parsedResult.cookies,\n }\n }\n\n async log(args: { request: Request; response: Response }) {\n const publicUrl = toPublicUrl(args.request.url)\n const loggedRequest = await serializeRequest(args.request)\n const loggedResponse = await serializeResponse(args.response)\n const statusColor = getStatusCodeColor(loggedResponse.status)\n\n console.groupCollapsed(\n devUtils.formatMessage(\n `${getTimestamp()} ${args.request.method} ${publicUrl} (%c${\n loggedResponse.status\n } ${loggedResponse.statusText}%c)`,\n ),\n `color:${statusColor}`,\n 'color:inherit',\n )\n console.log('Request', loggedRequest)\n console.log('Handler:', this)\n console.log('Response', loggedResponse)\n console.groupEnd()\n }\n}\n"],"mappings":"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","names":["HttpMethods"]}
@@ -1,2 +1,2 @@
1
- export { A as AsyncResponseResolverReturnType, D as DefaultBodyType, d as DefaultRequestMultipartBody, J as JsonBodyType, M as MaybeAsyncResponseResolverReturnType, R as RequestHandler, m as RequestHandlerArgs, h as RequestHandlerDefaultInfo, n as RequestHandlerExecutionResult, k as RequestHandlerInternalInfo, c as RequestHandlerOptions, a as ResponseResolver, l as ResponseResolverInfo, b as ResponseResolverReturnType } from '../HttpResponse-BWB1yDNM.mjs';
1
+ export { A as AsyncResponseResolverReturnType, D as DefaultBodyType, d as DefaultRequestMultipartBody, J as JsonBodyType, M as MaybeAsyncResponseResolverReturnType, R as RequestHandler, m as RequestHandlerArgs, h as RequestHandlerDefaultInfo, n as RequestHandlerExecutionResult, k as RequestHandlerInternalInfo, c as RequestHandlerOptions, a as ResponseResolver, l as ResponseResolverInfo, b as ResponseResolverReturnType } from '../HttpResponse-xuSipbNt.mjs';
2
2
  import '../typeUtils.mjs';
@@ -1,2 +1,2 @@
1
- export { A as AsyncResponseResolverReturnType, D as DefaultBodyType, d as DefaultRequestMultipartBody, J as JsonBodyType, M as MaybeAsyncResponseResolverReturnType, R as RequestHandler, m as RequestHandlerArgs, h as RequestHandlerDefaultInfo, n as RequestHandlerExecutionResult, k as RequestHandlerInternalInfo, c as RequestHandlerOptions, a as ResponseResolver, l as ResponseResolverInfo, b as ResponseResolverReturnType } from '../HttpResponse-DeJBWGN5.js';
1
+ export { A as AsyncResponseResolverReturnType, D as DefaultBodyType, d as DefaultRequestMultipartBody, J as JsonBodyType, M as MaybeAsyncResponseResolverReturnType, R as RequestHandler, m as RequestHandlerArgs, h as RequestHandlerDefaultInfo, n as RequestHandlerExecutionResult, k as RequestHandlerInternalInfo, c as RequestHandlerOptions, a as ResponseResolver, l as ResponseResolverInfo, b as ResponseResolverReturnType } from '../HttpResponse-aJY-D0oG.js';
2
2
  import '../typeUtils.js';
@@ -1,38 +1,32 @@
1
1
  import { Emitter } from 'strict-event-emitter';
2
- import { WebSocketClientConnection, WebSocketServerConnection } from '@mswjs/interceptors/WebSocket';
2
+ import { WebSocketConnectionData } from '@mswjs/interceptors/WebSocket';
3
3
  import { PathParams, Path, Match } from '../utils/matching/matchRequestUrl.mjs';
4
4
 
5
5
  type WebSocketHandlerParsedResult = {
6
6
  match: Match;
7
7
  };
8
8
  type WebSocketHandlerEventMap = {
9
- connection: [
10
- args: {
11
- client: WebSocketClientConnection;
12
- server: WebSocketServerConnection;
13
- params: PathParams;
14
- }
15
- ];
9
+ connection: [args: WebSocketHandlerConnection];
16
10
  };
17
- type WebSocketHandlerIncomingEvent = MessageEvent<{
18
- client: WebSocketClientConnection;
19
- server: WebSocketServerConnection;
20
- }>;
11
+ interface WebSocketHandlerConnection extends WebSocketConnectionData {
12
+ params: PathParams;
13
+ }
21
14
  declare const kEmitter: unique symbol;
22
15
  declare const kDispatchEvent: unique symbol;
23
- declare const kDefaultPrevented: unique symbol;
16
+ declare const kSender: unique symbol;
24
17
  declare class WebSocketHandler {
25
18
  private readonly url;
19
+ callFrame?: string;
26
20
  protected [kEmitter]: Emitter<WebSocketHandlerEventMap>;
27
21
  constructor(url: Path);
28
22
  parse(args: {
29
- event: WebSocketHandlerIncomingEvent;
23
+ event: MessageEvent<WebSocketConnectionData>;
30
24
  }): WebSocketHandlerParsedResult;
31
25
  predicate(args: {
32
- event: WebSocketHandlerIncomingEvent;
26
+ event: MessageEvent<WebSocketConnectionData>;
33
27
  parsedResult: WebSocketHandlerParsedResult;
34
28
  }): boolean;
35
- [kDispatchEvent](event: MessageEvent<any>): Promise<void>;
29
+ [kDispatchEvent](event: MessageEvent<WebSocketConnectionData>): Promise<void>;
36
30
  }
37
31
 
38
- export { WebSocketHandler, type WebSocketHandlerEventMap, kDefaultPrevented, kDispatchEvent, kEmitter };
32
+ export { WebSocketHandler, type WebSocketHandlerEventMap, kDispatchEvent, kEmitter, kSender };
@@ -1,38 +1,32 @@
1
1
  import { Emitter } from 'strict-event-emitter';
2
- import { WebSocketClientConnection, WebSocketServerConnection } from '@mswjs/interceptors/WebSocket';
2
+ import { WebSocketConnectionData } from '@mswjs/interceptors/WebSocket';
3
3
  import { PathParams, Path, Match } from '../utils/matching/matchRequestUrl.js';
4
4
 
5
5
  type WebSocketHandlerParsedResult = {
6
6
  match: Match;
7
7
  };
8
8
  type WebSocketHandlerEventMap = {
9
- connection: [
10
- args: {
11
- client: WebSocketClientConnection;
12
- server: WebSocketServerConnection;
13
- params: PathParams;
14
- }
15
- ];
9
+ connection: [args: WebSocketHandlerConnection];
16
10
  };
17
- type WebSocketHandlerIncomingEvent = MessageEvent<{
18
- client: WebSocketClientConnection;
19
- server: WebSocketServerConnection;
20
- }>;
11
+ interface WebSocketHandlerConnection extends WebSocketConnectionData {
12
+ params: PathParams;
13
+ }
21
14
  declare const kEmitter: unique symbol;
22
15
  declare const kDispatchEvent: unique symbol;
23
- declare const kDefaultPrevented: unique symbol;
16
+ declare const kSender: unique symbol;
24
17
  declare class WebSocketHandler {
25
18
  private readonly url;
19
+ callFrame?: string;
26
20
  protected [kEmitter]: Emitter<WebSocketHandlerEventMap>;
27
21
  constructor(url: Path);
28
22
  parse(args: {
29
- event: WebSocketHandlerIncomingEvent;
23
+ event: MessageEvent<WebSocketConnectionData>;
30
24
  }): WebSocketHandlerParsedResult;
31
25
  predicate(args: {
32
- event: WebSocketHandlerIncomingEvent;
26
+ event: MessageEvent<WebSocketConnectionData>;
33
27
  parsedResult: WebSocketHandlerParsedResult;
34
28
  }): boolean;
35
- [kDispatchEvent](event: MessageEvent<any>): Promise<void>;
29
+ [kDispatchEvent](event: MessageEvent<WebSocketConnectionData>): Promise<void>;
36
30
  }
37
31
 
38
- export { WebSocketHandler, type WebSocketHandlerEventMap, kDefaultPrevented, kDispatchEvent, kEmitter };
32
+ export { WebSocketHandler, type WebSocketHandlerEventMap, kDispatchEvent, kEmitter, kSender };
@@ -19,21 +19,24 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
19
19
  var WebSocketHandler_exports = {};
20
20
  __export(WebSocketHandler_exports, {
21
21
  WebSocketHandler: () => WebSocketHandler,
22
- kDefaultPrevented: () => kDefaultPrevented,
23
22
  kDispatchEvent: () => kDispatchEvent,
24
- kEmitter: () => kEmitter
23
+ kEmitter: () => kEmitter,
24
+ kSender: () => kSender
25
25
  });
26
26
  module.exports = __toCommonJS(WebSocketHandler_exports);
27
27
  var import_strict_event_emitter = require("strict-event-emitter");
28
28
  var import_matchRequestUrl = require("../utils/matching/matchRequestUrl.js");
29
+ var import_getCallFrame = require("../utils/internal/getCallFrame.js");
29
30
  const kEmitter = Symbol("kEmitter");
30
31
  const kDispatchEvent = Symbol("kDispatchEvent");
31
- const kDefaultPrevented = Symbol("kDefaultPrevented");
32
+ const kSender = Symbol("kSender");
32
33
  class WebSocketHandler {
33
34
  constructor(url) {
34
35
  this.url = url;
35
36
  this[kEmitter] = new import_strict_event_emitter.Emitter();
37
+ this.callFrame = (0, import_getCallFrame.getCallFrame)(new Error());
36
38
  }
39
+ callFrame;
37
40
  [kEmitter];
38
41
  parse(args) {
39
42
  const connection = args.event.data;
@@ -47,19 +50,13 @@ class WebSocketHandler {
47
50
  }
48
51
  async [kDispatchEvent](event) {
49
52
  const parsedResult = this.parse({ event });
50
- const shouldIntercept = this.predicate({ event, parsedResult });
51
- if (!shouldIntercept) {
52
- return;
53
- }
54
- if (!Reflect.get(event, kDefaultPrevented)) {
55
- Reflect.set(event, kDefaultPrevented, true);
56
- }
57
53
  const connection = event.data;
58
- this[kEmitter].emit("connection", {
54
+ const resolvedConnection = {
59
55
  client: connection.client,
60
56
  server: connection.server,
61
57
  params: parsedResult.match.params || {}
62
- });
58
+ };
59
+ this[kEmitter].emit("connection", resolvedConnection);
63
60
  }
64
61
  }
65
62
  //# sourceMappingURL=WebSocketHandler.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/handlers/WebSocketHandler.ts"],"sourcesContent":["import { Emitter } from 'strict-event-emitter'\nimport type {\n WebSocketClientConnection,\n WebSocketServerConnection,\n} from '@mswjs/interceptors/WebSocket'\nimport {\n type Match,\n type Path,\n type PathParams,\n matchRequestUrl,\n} from '../utils/matching/matchRequestUrl'\n\ntype WebSocketHandlerParsedResult = {\n match: Match\n}\n\nexport type WebSocketHandlerEventMap = {\n connection: [\n args: {\n client: WebSocketClientConnection\n server: WebSocketServerConnection\n params: PathParams\n },\n ]\n}\n\ntype WebSocketHandlerIncomingEvent = MessageEvent<{\n client: WebSocketClientConnection\n server: WebSocketServerConnection\n}>\n\nexport const kEmitter = Symbol('kEmitter')\nexport const kDispatchEvent = Symbol('kDispatchEvent')\nexport const kDefaultPrevented = Symbol('kDefaultPrevented')\n\nexport class WebSocketHandler {\n protected [kEmitter]: Emitter<WebSocketHandlerEventMap>\n\n constructor(private readonly url: Path) {\n this[kEmitter] = new Emitter()\n }\n\n public parse(args: {\n event: WebSocketHandlerIncomingEvent\n }): WebSocketHandlerParsedResult {\n const connection = args.event.data\n const match = matchRequestUrl(connection.client.url, this.url)\n\n return {\n match,\n }\n }\n\n public predicate(args: {\n event: WebSocketHandlerIncomingEvent\n parsedResult: WebSocketHandlerParsedResult\n }): boolean {\n return args.parsedResult.match.matches\n }\n\n async [kDispatchEvent](event: MessageEvent<any>): Promise<void> {\n const parsedResult = this.parse({ event })\n const shouldIntercept = this.predicate({ event, parsedResult })\n\n if (!shouldIntercept) {\n return\n }\n\n // Account for other matching event handlers that've already prevented this event.\n if (!Reflect.get(event, kDefaultPrevented)) {\n // At this point, the WebSocket connection URL has matched the handler.\n // Prevent the default behavior of establishing the connection as-is.\n // Use internal symbol because we aren't actually dispatching this\n // event. Events can only marked as cancelable and can be prevented\n // when dispatched on an EventTarget.\n Reflect.set(event, kDefaultPrevented, true)\n }\n\n const connection = event.data\n\n // Emit the connection event on the handler.\n // This is what the developer adds listeners for.\n this[kEmitter].emit('connection', {\n client: connection.client,\n server: connection.server,\n params: parsedResult.match.params || {},\n })\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCAAwB;AAKxB,6BAKO;AAqBA,MAAM,WAAW,OAAO,UAAU;AAClC,MAAM,iBAAiB,OAAO,gBAAgB;AAC9C,MAAM,oBAAoB,OAAO,mBAAmB;AAEpD,MAAM,iBAAiB;AAAA,EAG5B,YAA6B,KAAW;AAAX;AAC3B,SAAK,QAAQ,IAAI,IAAI,oCAAQ;AAAA,EAC/B;AAAA,EAJA,CAAW,QAAQ;AAAA,EAMZ,MAAM,MAEoB;AAC/B,UAAM,aAAa,KAAK,MAAM;AAC9B,UAAM,YAAQ,wCAAgB,WAAW,OAAO,KAAK,KAAK,GAAG;AAE7D,WAAO;AAAA,MACL;AAAA,IACF;AAAA,EACF;AAAA,EAEO,UAAU,MAGL;AACV,WAAO,KAAK,aAAa,MAAM;AAAA,EACjC;AAAA,EAEA,OAAO,cAAc,EAAE,OAAyC;AAC9D,UAAM,eAAe,KAAK,MAAM,EAAE,MAAM,CAAC;AACzC,UAAM,kBAAkB,KAAK,UAAU,EAAE,OAAO,aAAa,CAAC;AAE9D,QAAI,CAAC,iBAAiB;AACpB;AAAA,IACF;AAGA,QAAI,CAAC,QAAQ,IAAI,OAAO,iBAAiB,GAAG;AAM1C,cAAQ,IAAI,OAAO,mBAAmB,IAAI;AAAA,IAC5C;AAEA,UAAM,aAAa,MAAM;AAIzB,SAAK,QAAQ,EAAE,KAAK,cAAc;AAAA,MAChC,QAAQ,WAAW;AAAA,MACnB,QAAQ,WAAW;AAAA,MACnB,QAAQ,aAAa,MAAM,UAAU,CAAC;AAAA,IACxC,CAAC;AAAA,EACH;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../src/core/handlers/WebSocketHandler.ts"],"sourcesContent":["import { Emitter } from 'strict-event-emitter'\nimport type { WebSocketConnectionData } from '@mswjs/interceptors/WebSocket'\nimport {\n type Match,\n type Path,\n type PathParams,\n matchRequestUrl,\n} from '../utils/matching/matchRequestUrl'\nimport { getCallFrame } from '../utils/internal/getCallFrame'\n\ntype WebSocketHandlerParsedResult = {\n match: Match\n}\n\nexport type WebSocketHandlerEventMap = {\n connection: [args: WebSocketHandlerConnection]\n}\n\ninterface WebSocketHandlerConnection extends WebSocketConnectionData {\n params: PathParams\n}\n\nexport const kEmitter = Symbol('kEmitter')\nexport const kDispatchEvent = Symbol('kDispatchEvent')\nexport const kSender = Symbol('kSender')\n\nexport class WebSocketHandler {\n public callFrame?: string\n\n protected [kEmitter]: Emitter<WebSocketHandlerEventMap>\n\n constructor(private readonly url: Path) {\n this[kEmitter] = new Emitter()\n this.callFrame = getCallFrame(new Error())\n }\n\n public parse(args: {\n event: MessageEvent<WebSocketConnectionData>\n }): WebSocketHandlerParsedResult {\n const connection = args.event.data\n const match = matchRequestUrl(connection.client.url, this.url)\n\n return {\n match,\n }\n }\n\n public predicate(args: {\n event: MessageEvent<WebSocketConnectionData>\n parsedResult: WebSocketHandlerParsedResult\n }): boolean {\n return args.parsedResult.match.matches\n }\n\n async [kDispatchEvent](\n event: MessageEvent<WebSocketConnectionData>,\n ): Promise<void> {\n const parsedResult = this.parse({ event })\n const connection = event.data\n\n const resolvedConnection: WebSocketHandlerConnection = {\n client: connection.client,\n server: connection.server,\n params: parsedResult.match.params || {},\n }\n\n // Emit the connection event on the handler.\n // This is what the developer adds listeners for.\n this[kEmitter].emit('connection', resolvedConnection)\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCAAwB;AAExB,6BAKO;AACP,0BAA6B;AActB,MAAM,WAAW,OAAO,UAAU;AAClC,MAAM,iBAAiB,OAAO,gBAAgB;AAC9C,MAAM,UAAU,OAAO,SAAS;AAEhC,MAAM,iBAAiB;AAAA,EAK5B,YAA6B,KAAW;AAAX;AAC3B,SAAK,QAAQ,IAAI,IAAI,oCAAQ;AAC7B,SAAK,gBAAY,kCAAa,IAAI,MAAM,CAAC;AAAA,EAC3C;AAAA,EAPO;AAAA,EAEP,CAAW,QAAQ;AAAA,EAOZ,MAAM,MAEoB;AAC/B,UAAM,aAAa,KAAK,MAAM;AAC9B,UAAM,YAAQ,wCAAgB,WAAW,OAAO,KAAK,KAAK,GAAG;AAE7D,WAAO;AAAA,MACL;AAAA,IACF;AAAA,EACF;AAAA,EAEO,UAAU,MAGL;AACV,WAAO,KAAK,aAAa,MAAM;AAAA,EACjC;AAAA,EAEA,OAAO,cAAc,EACnB,OACe;AACf,UAAM,eAAe,KAAK,MAAM,EAAE,MAAM,CAAC;AACzC,UAAM,aAAa,MAAM;AAEzB,UAAM,qBAAiD;AAAA,MACrD,QAAQ,WAAW;AAAA,MACnB,QAAQ,WAAW;AAAA,MACnB,QAAQ,aAAa,MAAM,UAAU,CAAC;AAAA,IACxC;AAIA,SAAK,QAAQ,EAAE,KAAK,cAAc,kBAAkB;AAAA,EACtD;AACF;","names":[]}
@@ -2,14 +2,17 @@ import { Emitter } from "strict-event-emitter";
2
2
  import {
3
3
  matchRequestUrl
4
4
  } from '../utils/matching/matchRequestUrl.mjs';
5
+ import { getCallFrame } from '../utils/internal/getCallFrame.mjs';
5
6
  const kEmitter = Symbol("kEmitter");
6
7
  const kDispatchEvent = Symbol("kDispatchEvent");
7
- const kDefaultPrevented = Symbol("kDefaultPrevented");
8
+ const kSender = Symbol("kSender");
8
9
  class WebSocketHandler {
9
10
  constructor(url) {
10
11
  this.url = url;
11
12
  this[kEmitter] = new Emitter();
13
+ this.callFrame = getCallFrame(new Error());
12
14
  }
15
+ callFrame;
13
16
  [kEmitter];
14
17
  parse(args) {
15
18
  const connection = args.event.data;
@@ -23,25 +26,19 @@ class WebSocketHandler {
23
26
  }
24
27
  async [kDispatchEvent](event) {
25
28
  const parsedResult = this.parse({ event });
26
- const shouldIntercept = this.predicate({ event, parsedResult });
27
- if (!shouldIntercept) {
28
- return;
29
- }
30
- if (!Reflect.get(event, kDefaultPrevented)) {
31
- Reflect.set(event, kDefaultPrevented, true);
32
- }
33
29
  const connection = event.data;
34
- this[kEmitter].emit("connection", {
30
+ const resolvedConnection = {
35
31
  client: connection.client,
36
32
  server: connection.server,
37
33
  params: parsedResult.match.params || {}
38
- });
34
+ };
35
+ this[kEmitter].emit("connection", resolvedConnection);
39
36
  }
40
37
  }
41
38
  export {
42
39
  WebSocketHandler,
43
- kDefaultPrevented,
44
40
  kDispatchEvent,
45
- kEmitter
41
+ kEmitter,
42
+ kSender
46
43
  };
47
44
  //# sourceMappingURL=WebSocketHandler.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/handlers/WebSocketHandler.ts"],"sourcesContent":["import { Emitter } from 'strict-event-emitter'\nimport type {\n WebSocketClientConnection,\n WebSocketServerConnection,\n} from '@mswjs/interceptors/WebSocket'\nimport {\n type Match,\n type Path,\n type PathParams,\n matchRequestUrl,\n} from '../utils/matching/matchRequestUrl'\n\ntype WebSocketHandlerParsedResult = {\n match: Match\n}\n\nexport type WebSocketHandlerEventMap = {\n connection: [\n args: {\n client: WebSocketClientConnection\n server: WebSocketServerConnection\n params: PathParams\n },\n ]\n}\n\ntype WebSocketHandlerIncomingEvent = MessageEvent<{\n client: WebSocketClientConnection\n server: WebSocketServerConnection\n}>\n\nexport const kEmitter = Symbol('kEmitter')\nexport const kDispatchEvent = Symbol('kDispatchEvent')\nexport const kDefaultPrevented = Symbol('kDefaultPrevented')\n\nexport class WebSocketHandler {\n protected [kEmitter]: Emitter<WebSocketHandlerEventMap>\n\n constructor(private readonly url: Path) {\n this[kEmitter] = new Emitter()\n }\n\n public parse(args: {\n event: WebSocketHandlerIncomingEvent\n }): WebSocketHandlerParsedResult {\n const connection = args.event.data\n const match = matchRequestUrl(connection.client.url, this.url)\n\n return {\n match,\n }\n }\n\n public predicate(args: {\n event: WebSocketHandlerIncomingEvent\n parsedResult: WebSocketHandlerParsedResult\n }): boolean {\n return args.parsedResult.match.matches\n }\n\n async [kDispatchEvent](event: MessageEvent<any>): Promise<void> {\n const parsedResult = this.parse({ event })\n const shouldIntercept = this.predicate({ event, parsedResult })\n\n if (!shouldIntercept) {\n return\n }\n\n // Account for other matching event handlers that've already prevented this event.\n if (!Reflect.get(event, kDefaultPrevented)) {\n // At this point, the WebSocket connection URL has matched the handler.\n // Prevent the default behavior of establishing the connection as-is.\n // Use internal symbol because we aren't actually dispatching this\n // event. Events can only marked as cancelable and can be prevented\n // when dispatched on an EventTarget.\n Reflect.set(event, kDefaultPrevented, true)\n }\n\n const connection = event.data\n\n // Emit the connection event on the handler.\n // This is what the developer adds listeners for.\n this[kEmitter].emit('connection', {\n client: connection.client,\n server: connection.server,\n params: parsedResult.match.params || {},\n })\n }\n}\n"],"mappings":"AAAA,SAAS,eAAe;AAKxB;AAAA,EAIE;AAAA,OACK;AAqBA,MAAM,WAAW,OAAO,UAAU;AAClC,MAAM,iBAAiB,OAAO,gBAAgB;AAC9C,MAAM,oBAAoB,OAAO,mBAAmB;AAEpD,MAAM,iBAAiB;AAAA,EAG5B,YAA6B,KAAW;AAAX;AAC3B,SAAK,QAAQ,IAAI,IAAI,QAAQ;AAAA,EAC/B;AAAA,EAJA,CAAW,QAAQ;AAAA,EAMZ,MAAM,MAEoB;AAC/B,UAAM,aAAa,KAAK,MAAM;AAC9B,UAAM,QAAQ,gBAAgB,WAAW,OAAO,KAAK,KAAK,GAAG;AAE7D,WAAO;AAAA,MACL;AAAA,IACF;AAAA,EACF;AAAA,EAEO,UAAU,MAGL;AACV,WAAO,KAAK,aAAa,MAAM;AAAA,EACjC;AAAA,EAEA,OAAO,cAAc,EAAE,OAAyC;AAC9D,UAAM,eAAe,KAAK,MAAM,EAAE,MAAM,CAAC;AACzC,UAAM,kBAAkB,KAAK,UAAU,EAAE,OAAO,aAAa,CAAC;AAE9D,QAAI,CAAC,iBAAiB;AACpB;AAAA,IACF;AAGA,QAAI,CAAC,QAAQ,IAAI,OAAO,iBAAiB,GAAG;AAM1C,cAAQ,IAAI,OAAO,mBAAmB,IAAI;AAAA,IAC5C;AAEA,UAAM,aAAa,MAAM;AAIzB,SAAK,QAAQ,EAAE,KAAK,cAAc;AAAA,MAChC,QAAQ,WAAW;AAAA,MACnB,QAAQ,WAAW;AAAA,MACnB,QAAQ,aAAa,MAAM,UAAU,CAAC;AAAA,IACxC,CAAC;AAAA,EACH;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../src/core/handlers/WebSocketHandler.ts"],"sourcesContent":["import { Emitter } from 'strict-event-emitter'\nimport type { WebSocketConnectionData } from '@mswjs/interceptors/WebSocket'\nimport {\n type Match,\n type Path,\n type PathParams,\n matchRequestUrl,\n} from '../utils/matching/matchRequestUrl'\nimport { getCallFrame } from '../utils/internal/getCallFrame'\n\ntype WebSocketHandlerParsedResult = {\n match: Match\n}\n\nexport type WebSocketHandlerEventMap = {\n connection: [args: WebSocketHandlerConnection]\n}\n\ninterface WebSocketHandlerConnection extends WebSocketConnectionData {\n params: PathParams\n}\n\nexport const kEmitter = Symbol('kEmitter')\nexport const kDispatchEvent = Symbol('kDispatchEvent')\nexport const kSender = Symbol('kSender')\n\nexport class WebSocketHandler {\n public callFrame?: string\n\n protected [kEmitter]: Emitter<WebSocketHandlerEventMap>\n\n constructor(private readonly url: Path) {\n this[kEmitter] = new Emitter()\n this.callFrame = getCallFrame(new Error())\n }\n\n public parse(args: {\n event: MessageEvent<WebSocketConnectionData>\n }): WebSocketHandlerParsedResult {\n const connection = args.event.data\n const match = matchRequestUrl(connection.client.url, this.url)\n\n return {\n match,\n }\n }\n\n public predicate(args: {\n event: MessageEvent<WebSocketConnectionData>\n parsedResult: WebSocketHandlerParsedResult\n }): boolean {\n return args.parsedResult.match.matches\n }\n\n async [kDispatchEvent](\n event: MessageEvent<WebSocketConnectionData>,\n ): Promise<void> {\n const parsedResult = this.parse({ event })\n const connection = event.data\n\n const resolvedConnection: WebSocketHandlerConnection = {\n client: connection.client,\n server: connection.server,\n params: parsedResult.match.params || {},\n }\n\n // Emit the connection event on the handler.\n // This is what the developer adds listeners for.\n this[kEmitter].emit('connection', resolvedConnection)\n }\n}\n"],"mappings":"AAAA,SAAS,eAAe;AAExB;AAAA,EAIE;AAAA,OACK;AACP,SAAS,oBAAoB;AActB,MAAM,WAAW,OAAO,UAAU;AAClC,MAAM,iBAAiB,OAAO,gBAAgB;AAC9C,MAAM,UAAU,OAAO,SAAS;AAEhC,MAAM,iBAAiB;AAAA,EAK5B,YAA6B,KAAW;AAAX;AAC3B,SAAK,QAAQ,IAAI,IAAI,QAAQ;AAC7B,SAAK,YAAY,aAAa,IAAI,MAAM,CAAC;AAAA,EAC3C;AAAA,EAPO;AAAA,EAEP,CAAW,QAAQ;AAAA,EAOZ,MAAM,MAEoB;AAC/B,UAAM,aAAa,KAAK,MAAM;AAC9B,UAAM,QAAQ,gBAAgB,WAAW,OAAO,KAAK,KAAK,GAAG;AAE7D,WAAO;AAAA,MACL;AAAA,IACF;AAAA,EACF;AAAA,EAEO,UAAU,MAGL;AACV,WAAO,KAAK,aAAa,MAAM;AAAA,EACjC;AAAA,EAEA,OAAO,cAAc,EACnB,OACe;AACf,UAAM,eAAe,KAAK,MAAM,EAAE,MAAM,CAAC;AACzC,UAAM,aAAa,MAAM;AAEzB,UAAM,qBAAiD;AAAA,MACrD,QAAQ,WAAW;AAAA,MACnB,QAAQ,WAAW;AAAA,MACnB,QAAQ,aAAa,MAAM,UAAU,CAAC;AAAA,IACxC;AAIA,SAAK,QAAQ,EAAE,KAAK,cAAc,kBAAkB;AAAA,EACtD;AACF;","names":[]}
@@ -1,4 +1,4 @@
1
- import { D as DefaultBodyType, c as RequestHandlerOptions, a as ResponseResolver } from './HttpResponse-BWB1yDNM.mjs';
1
+ import { D as DefaultBodyType, c as RequestHandlerOptions, a as ResponseResolver } from './HttpResponse-xuSipbNt.mjs';
2
2
  import { HttpHandler, HttpRequestResolverExtras } from './handlers/HttpHandler.mjs';
3
3
  import { PathParams, Path } from './utils/matching/matchRequestUrl.mjs';
4
4
  import './typeUtils.mjs';
@@ -1,4 +1,4 @@
1
- import { D as DefaultBodyType, c as RequestHandlerOptions, a as ResponseResolver } from './HttpResponse-DeJBWGN5.js';
1
+ import { D as DefaultBodyType, c as RequestHandlerOptions, a as ResponseResolver } from './HttpResponse-aJY-D0oG.js';
2
2
  import { HttpHandler, HttpRequestResolverExtras } from './handlers/HttpHandler.js';
3
3
  import { PathParams, Path } from './utils/matching/matchRequestUrl.js';
4
4
  import './typeUtils.js';
@@ -1,10 +1,11 @@
1
1
  export { SetupApi } from './SetupApi.mjs';
2
- export { A as AsyncResponseResolverReturnType, D as DefaultBodyType, d as DefaultRequestMultipartBody, f as HttpResponse, H as HttpResponseInit, J as JsonBodyType, R as RequestHandler, c as RequestHandlerOptions, a as ResponseResolver, b as ResponseResolverReturnType, S as StrictRequest, e as StrictResponse } from './HttpResponse-BWB1yDNM.mjs';
2
+ export { A as AsyncResponseResolverReturnType, D as DefaultBodyType, d as DefaultRequestMultipartBody, f as HttpResponse, H as HttpResponseInit, J as JsonBodyType, R as RequestHandler, c as RequestHandlerOptions, a as ResponseResolver, b as ResponseResolverReturnType, S as StrictRequest, e as StrictResponse } from './HttpResponse-xuSipbNt.mjs';
3
3
  export { HttpRequestHandler, HttpResponseResolver, http } from './http.mjs';
4
4
  export { HttpHandler, HttpMethods, HttpRequestParsedResult, RequestQuery } from './handlers/HttpHandler.mjs';
5
5
  export { GraphQLRequestHandler, GraphQLResponseResolver, graphql } from './graphql.mjs';
6
- export { G as GraphQLHandler, d as GraphQLJsonRequestBody, a as GraphQLQuery, c as GraphQLRequestBody, b as GraphQLVariables, P as ParsedGraphQLRequest } from './GraphQLHandler-QGQY_9Rc.mjs';
6
+ export { G as GraphQLHandler, d as GraphQLJsonRequestBody, a as GraphQLQuery, c as GraphQLRequestBody, b as GraphQLVariables, P as ParsedGraphQLRequest } from './GraphQLHandler-4DPdxG0R.mjs';
7
7
  export { ws } from './ws/ws.mjs';
8
+ export { WebSocketHandler, WebSocketHandlerEventMap } from './handlers/WebSocketHandler.mjs';
8
9
  export { Match, Path, PathParams, matchRequestUrl } from './utils/matching/matchRequestUrl.mjs';
9
10
  export { HandleRequestOptions, handleRequest } from './utils/handleRequest.mjs';
10
11
  export { getResponse } from './getResponse.mjs';
@@ -15,8 +16,7 @@ export { bypass } from './bypass.mjs';
15
16
  export { passthrough } from './passthrough.mjs';
16
17
  import 'strict-event-emitter';
17
18
  import './utils/internal/Disposable.mjs';
18
- import './handlers/WebSocketHandler.mjs';
19
- import '@mswjs/interceptors/WebSocket';
20
19
  import './typeUtils.mjs';
21
20
  import 'graphql';
21
+ import '@mswjs/interceptors/WebSocket';
22
22
  import './utils/request/onUnhandledRequest.mjs';
@@ -1,10 +1,11 @@
1
1
  export { SetupApi } from './SetupApi.js';
2
- export { A as AsyncResponseResolverReturnType, D as DefaultBodyType, d as DefaultRequestMultipartBody, f as HttpResponse, H as HttpResponseInit, J as JsonBodyType, R as RequestHandler, c as RequestHandlerOptions, a as ResponseResolver, b as ResponseResolverReturnType, S as StrictRequest, e as StrictResponse } from './HttpResponse-DeJBWGN5.js';
2
+ export { A as AsyncResponseResolverReturnType, D as DefaultBodyType, d as DefaultRequestMultipartBody, f as HttpResponse, H as HttpResponseInit, J as JsonBodyType, R as RequestHandler, c as RequestHandlerOptions, a as ResponseResolver, b as ResponseResolverReturnType, S as StrictRequest, e as StrictResponse } from './HttpResponse-aJY-D0oG.js';
3
3
  export { HttpRequestHandler, HttpResponseResolver, http } from './http.js';
4
4
  export { HttpHandler, HttpMethods, HttpRequestParsedResult, RequestQuery } from './handlers/HttpHandler.js';
5
5
  export { GraphQLRequestHandler, GraphQLResponseResolver, graphql } from './graphql.js';
6
- export { G as GraphQLHandler, d as GraphQLJsonRequestBody, a as GraphQLQuery, c as GraphQLRequestBody, b as GraphQLVariables, P as ParsedGraphQLRequest } from './GraphQLHandler-Cbu12sb0.js';
6
+ export { G as GraphQLHandler, d as GraphQLJsonRequestBody, a as GraphQLQuery, c as GraphQLRequestBody, b as GraphQLVariables, P as ParsedGraphQLRequest } from './GraphQLHandler-3gvpA65n.js';
7
7
  export { ws } from './ws/ws.js';
8
+ export { WebSocketHandler, WebSocketHandlerEventMap } from './handlers/WebSocketHandler.js';
8
9
  export { Match, Path, PathParams, matchRequestUrl } from './utils/matching/matchRequestUrl.js';
9
10
  export { HandleRequestOptions, handleRequest } from './utils/handleRequest.js';
10
11
  export { getResponse } from './getResponse.js';
@@ -15,8 +16,7 @@ export { bypass } from './bypass.js';
15
16
  export { passthrough } from './passthrough.js';
16
17
  import 'strict-event-emitter';
17
18
  import './utils/internal/Disposable.js';
18
- import './handlers/WebSocketHandler.js';
19
- import '@mswjs/interceptors/WebSocket';
20
19
  import './typeUtils.js';
21
20
  import 'graphql';
21
+ import '@mswjs/interceptors/WebSocket';
22
22
  import './utils/request/onUnhandledRequest.js';
package/lib/core/index.js CHANGED
@@ -24,6 +24,7 @@ __export(core_exports, {
24
24
  HttpMethods: () => import_HttpHandler.HttpMethods,
25
25
  RequestHandler: () => import_RequestHandler.RequestHandler,
26
26
  SetupApi: () => import_SetupApi.SetupApi,
27
+ WebSocketHandler: () => import_WebSocketHandler.WebSocketHandler,
27
28
  bypass: () => import_bypass.bypass,
28
29
  cleanUrl: () => import_cleanUrl.cleanUrl,
29
30
  getResponse: () => import_getResponse.getResponse,
@@ -42,6 +43,7 @@ var import_HttpHandler = require("./handlers/HttpHandler.js");
42
43
  var import_graphql = require("./graphql.js");
43
44
  var import_GraphQLHandler = require("./handlers/GraphQLHandler.js");
44
45
  var import_ws = require("./ws/ws.js");
46
+ var import_WebSocketHandler = require("./handlers/WebSocketHandler.js");
45
47
  var import_matchRequestUrl = require("./utils/matching/matchRequestUrl.js");
46
48
  __reExport(core_exports, require("./utils/handleRequest.js"), module.exports);
47
49
  var import_getResponse = require("./getResponse.js");
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/index.ts"],"sourcesContent":["import { checkGlobals } from './utils/internal/checkGlobals'\n\nexport { SetupApi } from './SetupApi'\n\n/* Request handlers */\nexport { RequestHandler } from './handlers/RequestHandler'\nexport { http } from './http'\nexport { HttpHandler, HttpMethods } from './handlers/HttpHandler'\nexport { graphql } from './graphql'\nexport { GraphQLHandler } from './handlers/GraphQLHandler'\n\n/* WebSocket */\nexport { ws } from './ws/ws'\n\n/* Utils */\nexport { matchRequestUrl } from './utils/matching/matchRequestUrl'\nexport * from './utils/handleRequest'\nexport { getResponse } from './getResponse'\nexport { cleanUrl } from './utils/url/cleanUrl'\n\n/**\n * Type definitions.\n */\n\nexport type { SharedOptions, LifeCycleEventsMap } from './sharedOptions'\n\nexport type {\n ResponseResolver,\n ResponseResolverReturnType,\n AsyncResponseResolverReturnType,\n RequestHandlerOptions,\n DefaultBodyType,\n DefaultRequestMultipartBody,\n JsonBodyType,\n} from './handlers/RequestHandler'\n\nexport type {\n RequestQuery,\n HttpRequestParsedResult,\n} from './handlers/HttpHandler'\nexport type { HttpRequestHandler, HttpResponseResolver } from './http'\n\nexport type {\n GraphQLQuery,\n GraphQLVariables,\n GraphQLRequestBody,\n GraphQLJsonRequestBody,\n} from './handlers/GraphQLHandler'\nexport type { GraphQLRequestHandler, GraphQLResponseResolver } from './graphql'\n\nexport type { Path, PathParams, Match } from './utils/matching/matchRequestUrl'\nexport type { ParsedGraphQLRequest } from './utils/internal/parseGraphQLRequest'\n\nexport * from './HttpResponse'\nexport * from './delay'\nexport { bypass } from './bypass'\nexport { passthrough } from './passthrough'\n\n// Validate environmental globals before executing any code.\n// This ensures that the library gives user-friendly errors\n// when ran in the environments that require additional polyfills\n// from the end user.\ncheckGlobals()\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAA6B;AAE7B,sBAAyB;AAGzB,4BAA+B;AAC/B,kBAAqB;AACrB,yBAAyC;AACzC,qBAAwB;AACxB,4BAA+B;AAG/B,gBAAmB;AAGnB,6BAAgC;AAChC,yBAAc,kCAhBd;AAiBA,yBAA4B;AAC5B,sBAAyB;AAmCzB,yBAAc,2BArDd;AAsDA,yBAAc,oBAtDd;AAuDA,oBAAuB;AACvB,yBAA4B;AAAA,IAM5B,kCAAa;","names":[]}
1
+ {"version":3,"sources":["../../src/core/index.ts"],"sourcesContent":["import { checkGlobals } from './utils/internal/checkGlobals'\n\nexport { SetupApi } from './SetupApi'\n\n/* HTTP handlers */\nexport { RequestHandler } from './handlers/RequestHandler'\nexport { http } from './http'\nexport { HttpHandler, HttpMethods } from './handlers/HttpHandler'\nexport { graphql } from './graphql'\nexport { GraphQLHandler } from './handlers/GraphQLHandler'\n\n/* WebSocket handler */\nexport { ws } from './ws/ws'\nexport {\n WebSocketHandler,\n type WebSocketHandlerEventMap,\n} from './handlers/WebSocketHandler'\n\n/* Utils */\nexport { matchRequestUrl } from './utils/matching/matchRequestUrl'\nexport * from './utils/handleRequest'\nexport { getResponse } from './getResponse'\nexport { cleanUrl } from './utils/url/cleanUrl'\n\n/**\n * Type definitions.\n */\n\nexport type { SharedOptions, LifeCycleEventsMap } from './sharedOptions'\n\nexport type {\n ResponseResolver,\n ResponseResolverReturnType,\n AsyncResponseResolverReturnType,\n RequestHandlerOptions,\n DefaultBodyType,\n DefaultRequestMultipartBody,\n JsonBodyType,\n} from './handlers/RequestHandler'\n\nexport type {\n RequestQuery,\n HttpRequestParsedResult,\n} from './handlers/HttpHandler'\nexport type { HttpRequestHandler, HttpResponseResolver } from './http'\n\nexport type {\n GraphQLQuery,\n GraphQLVariables,\n GraphQLRequestBody,\n GraphQLJsonRequestBody,\n} from './handlers/GraphQLHandler'\nexport type { GraphQLRequestHandler, GraphQLResponseResolver } from './graphql'\n\nexport type { Path, PathParams, Match } from './utils/matching/matchRequestUrl'\nexport type { ParsedGraphQLRequest } from './utils/internal/parseGraphQLRequest'\n\nexport * from './HttpResponse'\nexport * from './delay'\nexport { bypass } from './bypass'\nexport { passthrough } from './passthrough'\n\n// Validate environmental globals before executing any code.\n// This ensures that the library gives user-friendly errors\n// when ran in the environments that require additional polyfills\n// from the end user.\ncheckGlobals()\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAA6B;AAE7B,sBAAyB;AAGzB,4BAA+B;AAC/B,kBAAqB;AACrB,yBAAyC;AACzC,qBAAwB;AACxB,4BAA+B;AAG/B,gBAAmB;AACnB,8BAGO;AAGP,6BAAgC;AAChC,yBAAc,kCApBd;AAqBA,yBAA4B;AAC5B,sBAAyB;AAmCzB,yBAAc,2BAzDd;AA0DA,yBAAc,oBA1Dd;AA2DA,oBAAuB;AACvB,yBAA4B;AAAA,IAM5B,kCAAa;","names":[]}
@@ -6,6 +6,9 @@ import { HttpHandler, HttpMethods } from './handlers/HttpHandler.mjs';
6
6
  import { graphql } from './graphql.mjs';
7
7
  import { GraphQLHandler } from './handlers/GraphQLHandler.mjs';
8
8
  import { ws } from './ws/ws.mjs';
9
+ import {
10
+ WebSocketHandler
11
+ } from './handlers/WebSocketHandler.mjs';
9
12
  import { matchRequestUrl } from './utils/matching/matchRequestUrl.mjs';
10
13
  export * from './utils/handleRequest.mjs';
11
14
  import { getResponse } from './getResponse.mjs';
@@ -21,6 +24,7 @@ export {
21
24
  HttpMethods,
22
25
  RequestHandler,
23
26
  SetupApi,
27
+ WebSocketHandler,
24
28
  bypass,
25
29
  cleanUrl,
26
30
  getResponse,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/index.ts"],"sourcesContent":["import { checkGlobals } from './utils/internal/checkGlobals'\n\nexport { SetupApi } from './SetupApi'\n\n/* Request handlers */\nexport { RequestHandler } from './handlers/RequestHandler'\nexport { http } from './http'\nexport { HttpHandler, HttpMethods } from './handlers/HttpHandler'\nexport { graphql } from './graphql'\nexport { GraphQLHandler } from './handlers/GraphQLHandler'\n\n/* WebSocket */\nexport { ws } from './ws/ws'\n\n/* Utils */\nexport { matchRequestUrl } from './utils/matching/matchRequestUrl'\nexport * from './utils/handleRequest'\nexport { getResponse } from './getResponse'\nexport { cleanUrl } from './utils/url/cleanUrl'\n\n/**\n * Type definitions.\n */\n\nexport type { SharedOptions, LifeCycleEventsMap } from './sharedOptions'\n\nexport type {\n ResponseResolver,\n ResponseResolverReturnType,\n AsyncResponseResolverReturnType,\n RequestHandlerOptions,\n DefaultBodyType,\n DefaultRequestMultipartBody,\n JsonBodyType,\n} from './handlers/RequestHandler'\n\nexport type {\n RequestQuery,\n HttpRequestParsedResult,\n} from './handlers/HttpHandler'\nexport type { HttpRequestHandler, HttpResponseResolver } from './http'\n\nexport type {\n GraphQLQuery,\n GraphQLVariables,\n GraphQLRequestBody,\n GraphQLJsonRequestBody,\n} from './handlers/GraphQLHandler'\nexport type { GraphQLRequestHandler, GraphQLResponseResolver } from './graphql'\n\nexport type { Path, PathParams, Match } from './utils/matching/matchRequestUrl'\nexport type { ParsedGraphQLRequest } from './utils/internal/parseGraphQLRequest'\n\nexport * from './HttpResponse'\nexport * from './delay'\nexport { bypass } from './bypass'\nexport { passthrough } from './passthrough'\n\n// Validate environmental globals before executing any code.\n// This ensures that the library gives user-friendly errors\n// when ran in the environments that require additional polyfills\n// from the end user.\ncheckGlobals()\n"],"mappings":"AAAA,SAAS,oBAAoB;AAE7B,SAAS,gBAAgB;AAGzB,SAAS,sBAAsB;AAC/B,SAAS,YAAY;AACrB,SAAS,aAAa,mBAAmB;AACzC,SAAS,eAAe;AACxB,SAAS,sBAAsB;AAG/B,SAAS,UAAU;AAGnB,SAAS,uBAAuB;AAChC,cAAc;AACd,SAAS,mBAAmB;AAC5B,SAAS,gBAAgB;AAmCzB,cAAc;AACd,cAAc;AACd,SAAS,cAAc;AACvB,SAAS,mBAAmB;AAM5B,aAAa;","names":[]}
1
+ {"version":3,"sources":["../../src/core/index.ts"],"sourcesContent":["import { checkGlobals } from './utils/internal/checkGlobals'\n\nexport { SetupApi } from './SetupApi'\n\n/* HTTP handlers */\nexport { RequestHandler } from './handlers/RequestHandler'\nexport { http } from './http'\nexport { HttpHandler, HttpMethods } from './handlers/HttpHandler'\nexport { graphql } from './graphql'\nexport { GraphQLHandler } from './handlers/GraphQLHandler'\n\n/* WebSocket handler */\nexport { ws } from './ws/ws'\nexport {\n WebSocketHandler,\n type WebSocketHandlerEventMap,\n} from './handlers/WebSocketHandler'\n\n/* Utils */\nexport { matchRequestUrl } from './utils/matching/matchRequestUrl'\nexport * from './utils/handleRequest'\nexport { getResponse } from './getResponse'\nexport { cleanUrl } from './utils/url/cleanUrl'\n\n/**\n * Type definitions.\n */\n\nexport type { SharedOptions, LifeCycleEventsMap } from './sharedOptions'\n\nexport type {\n ResponseResolver,\n ResponseResolverReturnType,\n AsyncResponseResolverReturnType,\n RequestHandlerOptions,\n DefaultBodyType,\n DefaultRequestMultipartBody,\n JsonBodyType,\n} from './handlers/RequestHandler'\n\nexport type {\n RequestQuery,\n HttpRequestParsedResult,\n} from './handlers/HttpHandler'\nexport type { HttpRequestHandler, HttpResponseResolver } from './http'\n\nexport type {\n GraphQLQuery,\n GraphQLVariables,\n GraphQLRequestBody,\n GraphQLJsonRequestBody,\n} from './handlers/GraphQLHandler'\nexport type { GraphQLRequestHandler, GraphQLResponseResolver } from './graphql'\n\nexport type { Path, PathParams, Match } from './utils/matching/matchRequestUrl'\nexport type { ParsedGraphQLRequest } from './utils/internal/parseGraphQLRequest'\n\nexport * from './HttpResponse'\nexport * from './delay'\nexport { bypass } from './bypass'\nexport { passthrough } from './passthrough'\n\n// Validate environmental globals before executing any code.\n// This ensures that the library gives user-friendly errors\n// when ran in the environments that require additional polyfills\n// from the end user.\ncheckGlobals()\n"],"mappings":"AAAA,SAAS,oBAAoB;AAE7B,SAAS,gBAAgB;AAGzB,SAAS,sBAAsB;AAC/B,SAAS,YAAY;AACrB,SAAS,aAAa,mBAAmB;AACzC,SAAS,eAAe;AACxB,SAAS,sBAAsB;AAG/B,SAAS,UAAU;AACnB;AAAA,EACE;AAAA,OAEK;AAGP,SAAS,uBAAuB;AAChC,cAAc;AACd,SAAS,mBAAmB;AAC5B,SAAS,gBAAgB;AAmCzB,cAAc;AACd,cAAc;AACd,SAAS,cAAc;AACvB,SAAS,mBAAmB;AAM5B,aAAa;","names":[]}
@@ -1,4 +1,4 @@
1
- import { e as StrictResponse } from './HttpResponse-BWB1yDNM.mjs';
1
+ import { e as StrictResponse } from './HttpResponse-xuSipbNt.mjs';
2
2
  import './typeUtils.mjs';
3
3
 
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { e as StrictResponse } from './HttpResponse-DeJBWGN5.js';
1
+ import { e as StrictResponse } from './HttpResponse-aJY-D0oG.js';
2
2
  import './typeUtils.js';
3
3
 
4
4
  /**
@@ -3,5 +3,10 @@ type MaybePromise<T> = T | Promise<T>;
3
3
  type RequiredDeep<Type, U extends Record<string, unknown> | Fn | undefined = undefined> = Type extends Fn ? Type : Type extends Record<string, any> ? {
4
4
  [Key in keyof Type]-?: NonNullable<Type[Key]> extends NonNullable<U> ? NonNullable<Type[Key]> : RequiredDeep<NonNullable<Type[Key]>, U>;
5
5
  } : Type;
6
+ /**
7
+ * @fixme Remove this once TS 5.4 is the lowest supported version.
8
+ * Because "NoInfer" is a built-in type utility there.
9
+ */
10
+ type NoInfer<T> = [T][T extends any ? 0 : never];
6
11
 
7
- export type { MaybePromise, RequiredDeep };
12
+ export type { MaybePromise, NoInfer, RequiredDeep };
@@ -3,5 +3,10 @@ type MaybePromise<T> = T | Promise<T>;
3
3
  type RequiredDeep<Type, U extends Record<string, unknown> | Fn | undefined = undefined> = Type extends Fn ? Type : Type extends Record<string, any> ? {
4
4
  [Key in keyof Type]-?: NonNullable<Type[Key]> extends NonNullable<U> ? NonNullable<Type[Key]> : RequiredDeep<NonNullable<Type[Key]>, U>;
5
5
  } : Type;
6
+ /**
7
+ * @fixme Remove this once TS 5.4 is the lowest supported version.
8
+ * Because "NoInfer" is a built-in type utility there.
9
+ */
10
+ type NoInfer<T> = [T][T extends any ? 0 : never];
6
11
 
7
- export type { MaybePromise, RequiredDeep };
12
+ export type { MaybePromise, NoInfer, RequiredDeep };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/typeUtils.ts"],"sourcesContent":["type Fn = (...arg: any[]) => any\n\nexport type MaybePromise<T> = T | Promise<T>\n\nexport type RequiredDeep<\n Type,\n U extends Record<string, unknown> | Fn | undefined = undefined,\n> = Type extends Fn\n ? Type\n : /**\n * @note The \"Fn\" type satisfies the predicate below.\n * It must always come first, before the Record check.\n */\n Type extends Record<string, any>\n ? {\n [Key in keyof Type]-?: NonNullable<Type[Key]> extends NonNullable<U>\n ? NonNullable<Type[Key]>\n : RequiredDeep<NonNullable<Type[Key]>, U>\n }\n : Type\n"],"mappings":";;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
1
+ {"version":3,"sources":["../../src/core/typeUtils.ts"],"sourcesContent":["type Fn = (...arg: any[]) => any\n\nexport type MaybePromise<T> = T | Promise<T>\n\nexport type RequiredDeep<\n Type,\n U extends Record<string, unknown> | Fn | undefined = undefined,\n> = Type extends Fn\n ? Type\n : /**\n * @note The \"Fn\" type satisfies the predicate below.\n * It must always come first, before the Record check.\n */\n Type extends Record<string, any>\n ? {\n [Key in keyof Type]-?: NonNullable<Type[Key]> extends NonNullable<U>\n ? NonNullable<Type[Key]>\n : RequiredDeep<NonNullable<Type[Key]>, U>\n }\n : Type\n\n/**\n * @fixme Remove this once TS 5.4 is the lowest supported version.\n * Because \"NoInfer\" is a built-in type utility there.\n */\nexport type NoInfer<T> = [T][T extends any ? 0 : never]\n"],"mappings":";;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -1,4 +1,4 @@
1
- import { H as HttpResponseInit } from '../../HttpResponse-BWB1yDNM.mjs';
1
+ import { H as HttpResponseInit } from '../../HttpResponse-xuSipbNt.mjs';
2
2
  import '../../typeUtils.mjs';
3
3
 
4
4
  interface HttpResponseDecoratedInit extends HttpResponseInit {
@@ -1,4 +1,4 @@
1
- import { H as HttpResponseInit } from '../../HttpResponse-DeJBWGN5.js';
1
+ import { H as HttpResponseInit } from '../../HttpResponse-aJY-D0oG.js';
2
2
  import '../../typeUtils.js';
3
3
 
4
4
  interface HttpResponseDecoratedInit extends HttpResponseInit {
@@ -33,6 +33,7 @@ __export(decorators_exports, {
33
33
  });
34
34
  module.exports = __toCommonJS(decorators_exports);
35
35
  var import_statuses = __toESM(require("@bundled-es-modules/statuses"));
36
+ var import_headers_polyfill = require("headers-polyfill");
36
37
  const { message } = import_statuses.default;
37
38
  function normalizeResponseInit(init = {}) {
38
39
  const status = init?.status || 200;
@@ -54,7 +55,9 @@ function decorateResponse(response, init) {
54
55
  });
55
56
  }
56
57
  if (typeof document !== "undefined") {
57
- const responseCookies = init.headers.get("Set-Cookie")?.split(",") || [];
58
+ const responseCookies = import_headers_polyfill.Headers.prototype.getSetCookie.call(
59
+ init.headers
60
+ );
58
61
  for (const cookieString of responseCookies) {
59
62
  document.cookie = cookieString;
60
63
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/core/utils/HttpResponse/decorators.ts"],"sourcesContent":["import statuses from '@bundled-es-modules/statuses'\nimport type { HttpResponseInit } from '../../HttpResponse'\n\nconst { message } = statuses\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 // Cookie forwarding is only relevant in the browser.\n if (typeof document !== 'undefined') {\n // Write the mocked response cookies to the document.\n // Note that Fetch API Headers will concatenate multiple \"Set-Cookie\"\n // headers into a single comma-separated string, just as it does\n // with any other multi-value headers.\n const responseCookies = init.headers.get('Set-Cookie')?.split(',') || []\n\n for (const cookieString of responseCookies) {\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 return response\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAqB;AAGrB,MAAM,EAAE,QAAQ,IAAI,gBAAAA;AAQb,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;AAGA,MAAI,OAAO,aAAa,aAAa;AAKnC,UAAM,kBAAkB,KAAK,QAAQ,IAAI,YAAY,GAAG,MAAM,GAAG,KAAK,CAAC;AAEvE,eAAW,gBAAgB,iBAAiB;AAG1C,eAAS,SAAS;AAAA,IACpB;AAAA,EACF;AAEA,SAAO;AACT;","names":["statuses"]}
1
+ {"version":3,"sources":["../../../../src/core/utils/HttpResponse/decorators.ts"],"sourcesContent":["import statuses from '@bundled-es-modules/statuses'\nimport type { HttpResponseInit } from '../../HttpResponse'\nimport { Headers as HeadersPolyfill } from 'headers-polyfill'\n\nconst { message } = statuses\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 // 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 responseCookies = HeadersPolyfill.prototype.getSetCookie.call(\n init.headers,\n )\n\n for (const cookieString of responseCookies) {\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 return response\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAqB;AAErB,8BAA2C;AAE3C,MAAM,EAAE,QAAQ,IAAI,gBAAAA;AAQb,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;AAGA,MAAI,OAAO,aAAa,aAAa;AAMnC,UAAM,kBAAkB,wBAAAC,QAAgB,UAAU,aAAa;AAAA,MAC7D,KAAK;AAAA,IACP;AAEA,eAAW,gBAAgB,iBAAiB;AAG1C,eAAS,SAAS;AAAA,IACpB;AAAA,EACF;AAEA,SAAO;AACT;","names":["statuses","HeadersPolyfill"]}