@depup/msw 2.12.13-depup.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 (590) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +40 -0
  3. package/browser/package.json +31 -0
  4. package/changes.json +46 -0
  5. package/cli/index.js +35 -0
  6. package/cli/init.js +226 -0
  7. package/cli/invariant.js +9 -0
  8. package/cli/package.json +3 -0
  9. package/config/constants.js +13 -0
  10. package/config/package.json +3 -0
  11. package/config/scripts/postinstall.js +36 -0
  12. package/lib/browser/index.d.mts +102 -0
  13. package/lib/browser/index.d.ts +102 -0
  14. package/lib/browser/index.js +2911 -0
  15. package/lib/browser/index.js.map +1 -0
  16. package/lib/browser/index.mjs +2888 -0
  17. package/lib/browser/index.mjs.map +1 -0
  18. package/lib/core/HttpResponse-Be4eT3x6.d.mts +338 -0
  19. package/lib/core/HttpResponse-Dj6ibgFJ.d.ts +338 -0
  20. package/lib/core/HttpResponse.d.mts +6 -0
  21. package/lib/core/HttpResponse.d.ts +6 -0
  22. package/lib/core/HttpResponse.js +176 -0
  23. package/lib/core/HttpResponse.js.map +1 -0
  24. package/lib/core/HttpResponse.mjs +159 -0
  25. package/lib/core/HttpResponse.mjs.map +1 -0
  26. package/lib/core/SetupApi.d.mts +44 -0
  27. package/lib/core/SetupApi.d.ts +44 -0
  28. package/lib/core/SetupApi.js +112 -0
  29. package/lib/core/SetupApi.js.map +1 -0
  30. package/lib/core/SetupApi.mjs +92 -0
  31. package/lib/core/SetupApi.mjs.map +1 -0
  32. package/lib/core/bypass.d.mts +16 -0
  33. package/lib/core/bypass.d.ts +16 -0
  34. package/lib/core/bypass.js +42 -0
  35. package/lib/core/bypass.js.map +1 -0
  36. package/lib/core/bypass.mjs +22 -0
  37. package/lib/core/bypass.mjs.map +1 -0
  38. package/lib/core/delay.d.mts +18 -0
  39. package/lib/core/delay.d.ts +18 -0
  40. package/lib/core/delay.js +77 -0
  41. package/lib/core/delay.js.map +1 -0
  42. package/lib/core/delay.mjs +57 -0
  43. package/lib/core/delay.mjs.map +1 -0
  44. package/lib/core/getResponse.d.mts +18 -0
  45. package/lib/core/getResponse.d.ts +18 -0
  46. package/lib/core/getResponse.js +35 -0
  47. package/lib/core/getResponse.js.map +1 -0
  48. package/lib/core/getResponse.mjs +17 -0
  49. package/lib/core/getResponse.mjs.map +1 -0
  50. package/lib/core/graphql.d.mts +76 -0
  51. package/lib/core/graphql.d.ts +76 -0
  52. package/lib/core/graphql.js +90 -0
  53. package/lib/core/graphql.js.map +1 -0
  54. package/lib/core/graphql.mjs +72 -0
  55. package/lib/core/graphql.mjs.map +1 -0
  56. package/lib/core/handlers/GraphQLHandler.d.mts +6 -0
  57. package/lib/core/handlers/GraphQLHandler.d.ts +6 -0
  58. package/lib/core/handlers/GraphQLHandler.js +231 -0
  59. package/lib/core/handlers/GraphQLHandler.js.map +1 -0
  60. package/lib/core/handlers/GraphQLHandler.mjs +218 -0
  61. package/lib/core/handlers/GraphQLHandler.mjs.map +1 -0
  62. package/lib/core/handlers/HttpHandler.d.mts +75 -0
  63. package/lib/core/handlers/HttpHandler.d.ts +75 -0
  64. package/lib/core/handlers/HttpHandler.js +128 -0
  65. package/lib/core/handlers/HttpHandler.js.map +1 -0
  66. package/lib/core/handlers/HttpHandler.mjs +112 -0
  67. package/lib/core/handlers/HttpHandler.mjs.map +1 -0
  68. package/lib/core/handlers/RequestHandler.d.mts +6 -0
  69. package/lib/core/handlers/RequestHandler.d.ts +6 -0
  70. package/lib/core/handlers/RequestHandler.js +173 -0
  71. package/lib/core/handlers/RequestHandler.js.map +1 -0
  72. package/lib/core/handlers/RequestHandler.mjs +155 -0
  73. package/lib/core/handlers/RequestHandler.mjs.map +1 -0
  74. package/lib/core/handlers/WebSocketHandler.d.mts +42 -0
  75. package/lib/core/handlers/WebSocketHandler.d.ts +42 -0
  76. package/lib/core/handlers/WebSocketHandler.js +147 -0
  77. package/lib/core/handlers/WebSocketHandler.js.map +1 -0
  78. package/lib/core/handlers/WebSocketHandler.mjs +129 -0
  79. package/lib/core/handlers/WebSocketHandler.mjs.map +1 -0
  80. package/lib/core/handlers/common.d.mts +3 -0
  81. package/lib/core/handlers/common.d.ts +3 -0
  82. package/lib/core/handlers/common.js +17 -0
  83. package/lib/core/handlers/common.js.map +1 -0
  84. package/lib/core/handlers/common.mjs +1 -0
  85. package/lib/core/handlers/common.mjs.map +1 -0
  86. package/lib/core/http.d.mts +31 -0
  87. package/lib/core/http.d.ts +31 -0
  88. package/lib/core/http.js +40 -0
  89. package/lib/core/http.js.map +1 -0
  90. package/lib/core/http.mjs +23 -0
  91. package/lib/core/http.mjs.map +1 -0
  92. package/lib/core/index.d.mts +32 -0
  93. package/lib/core/index.d.ts +32 -0
  94. package/lib/core/index.js +64 -0
  95. package/lib/core/index.js.map +1 -0
  96. package/lib/core/index.mjs +52 -0
  97. package/lib/core/index.mjs.map +1 -0
  98. package/lib/core/isCommonAssetRequest.d.mts +20 -0
  99. package/lib/core/isCommonAssetRequest.d.ts +20 -0
  100. package/lib/core/isCommonAssetRequest.js +42 -0
  101. package/lib/core/isCommonAssetRequest.js.map +1 -0
  102. package/lib/core/isCommonAssetRequest.mjs +22 -0
  103. package/lib/core/isCommonAssetRequest.mjs.map +1 -0
  104. package/lib/core/passthrough.d.mts +24 -0
  105. package/lib/core/passthrough.d.ts +24 -0
  106. package/lib/core/passthrough.js +33 -0
  107. package/lib/core/passthrough.js.map +1 -0
  108. package/lib/core/passthrough.mjs +13 -0
  109. package/lib/core/passthrough.mjs.map +1 -0
  110. package/lib/core/sharedOptions.d.mts +64 -0
  111. package/lib/core/sharedOptions.d.ts +64 -0
  112. package/lib/core/sharedOptions.js +17 -0
  113. package/lib/core/sharedOptions.js.map +1 -0
  114. package/lib/core/sharedOptions.mjs +1 -0
  115. package/lib/core/sharedOptions.mjs.map +1 -0
  116. package/lib/core/sse.d.mts +116 -0
  117. package/lib/core/sse.d.ts +116 -0
  118. package/lib/core/sse.js +607 -0
  119. package/lib/core/sse.js.map +1 -0
  120. package/lib/core/sse.mjs +589 -0
  121. package/lib/core/sse.mjs.map +1 -0
  122. package/lib/core/typeUtils.d.mts +12 -0
  123. package/lib/core/typeUtils.d.ts +12 -0
  124. package/lib/core/typeUtils.js +17 -0
  125. package/lib/core/typeUtils.js.map +1 -0
  126. package/lib/core/typeUtils.mjs +1 -0
  127. package/lib/core/typeUtils.mjs.map +1 -0
  128. package/lib/core/utils/HttpResponse/decorators.d.mts +17 -0
  129. package/lib/core/utils/HttpResponse/decorators.d.ts +17 -0
  130. package/lib/core/utils/HttpResponse/decorators.js +77 -0
  131. package/lib/core/utils/HttpResponse/decorators.js.map +1 -0
  132. package/lib/core/utils/HttpResponse/decorators.mjs +47 -0
  133. package/lib/core/utils/HttpResponse/decorators.mjs.map +1 -0
  134. package/lib/core/utils/cookieStore.d.mts +13 -0
  135. package/lib/core/utils/cookieStore.d.ts +13 -0
  136. package/lib/core/utils/cookieStore.js +90 -0
  137. package/lib/core/utils/cookieStore.js.map +1 -0
  138. package/lib/core/utils/cookieStore.mjs +74 -0
  139. package/lib/core/utils/cookieStore.mjs.map +1 -0
  140. package/lib/core/utils/executeHandlers.d.mts +6 -0
  141. package/lib/core/utils/executeHandlers.d.ts +6 -0
  142. package/lib/core/utils/executeHandlers.js +50 -0
  143. package/lib/core/utils/executeHandlers.js.map +1 -0
  144. package/lib/core/utils/executeHandlers.mjs +30 -0
  145. package/lib/core/utils/executeHandlers.mjs.map +1 -0
  146. package/lib/core/utils/handleRequest.d.mts +29 -0
  147. package/lib/core/utils/handleRequest.d.ts +29 -0
  148. package/lib/core/utils/handleRequest.js +76 -0
  149. package/lib/core/utils/handleRequest.js.map +1 -0
  150. package/lib/core/utils/handleRequest.mjs +58 -0
  151. package/lib/core/utils/handleRequest.mjs.map +1 -0
  152. package/lib/core/utils/internal/Disposable.d.mts +7 -0
  153. package/lib/core/utils/internal/Disposable.d.ts +7 -0
  154. package/lib/core/utils/internal/Disposable.js +33 -0
  155. package/lib/core/utils/internal/Disposable.js.map +1 -0
  156. package/lib/core/utils/internal/Disposable.mjs +13 -0
  157. package/lib/core/utils/internal/Disposable.mjs.map +1 -0
  158. package/lib/core/utils/internal/checkGlobals.d.mts +3 -0
  159. package/lib/core/utils/internal/checkGlobals.d.ts +3 -0
  160. package/lib/core/utils/internal/checkGlobals.js +34 -0
  161. package/lib/core/utils/internal/checkGlobals.js.map +1 -0
  162. package/lib/core/utils/internal/checkGlobals.mjs +14 -0
  163. package/lib/core/utils/internal/checkGlobals.mjs.map +1 -0
  164. package/lib/core/utils/internal/devUtils.d.mts +28 -0
  165. package/lib/core/utils/internal/devUtils.d.ts +28 -0
  166. package/lib/core/utils/internal/devUtils.js +48 -0
  167. package/lib/core/utils/internal/devUtils.js.map +1 -0
  168. package/lib/core/utils/internal/devUtils.mjs +28 -0
  169. package/lib/core/utils/internal/devUtils.mjs.map +1 -0
  170. package/lib/core/utils/internal/getCallFrame.d.mts +6 -0
  171. package/lib/core/utils/internal/getCallFrame.d.ts +6 -0
  172. package/lib/core/utils/internal/getCallFrame.js +41 -0
  173. package/lib/core/utils/internal/getCallFrame.js.map +1 -0
  174. package/lib/core/utils/internal/getCallFrame.mjs +21 -0
  175. package/lib/core/utils/internal/getCallFrame.mjs.map +1 -0
  176. package/lib/core/utils/internal/hasRefCounted.d.mts +3 -0
  177. package/lib/core/utils/internal/hasRefCounted.d.ts +3 -0
  178. package/lib/core/utils/internal/hasRefCounted.js +27 -0
  179. package/lib/core/utils/internal/hasRefCounted.js.map +1 -0
  180. package/lib/core/utils/internal/hasRefCounted.mjs +7 -0
  181. package/lib/core/utils/internal/hasRefCounted.mjs.map +1 -0
  182. package/lib/core/utils/internal/isHandlerKind.d.mts +19 -0
  183. package/lib/core/utils/internal/isHandlerKind.d.ts +19 -0
  184. package/lib/core/utils/internal/isHandlerKind.js +29 -0
  185. package/lib/core/utils/internal/isHandlerKind.js.map +1 -0
  186. package/lib/core/utils/internal/isHandlerKind.mjs +9 -0
  187. package/lib/core/utils/internal/isHandlerKind.mjs.map +1 -0
  188. package/lib/core/utils/internal/isIterable.d.mts +20 -0
  189. package/lib/core/utils/internal/isIterable.d.ts +20 -0
  190. package/lib/core/utils/internal/isIterable.js +30 -0
  191. package/lib/core/utils/internal/isIterable.js.map +1 -0
  192. package/lib/core/utils/internal/isIterable.mjs +10 -0
  193. package/lib/core/utils/internal/isIterable.mjs.map +1 -0
  194. package/lib/core/utils/internal/isObject.d.mts +6 -0
  195. package/lib/core/utils/internal/isObject.d.ts +6 -0
  196. package/lib/core/utils/internal/isObject.js +27 -0
  197. package/lib/core/utils/internal/isObject.js.map +1 -0
  198. package/lib/core/utils/internal/isObject.mjs +7 -0
  199. package/lib/core/utils/internal/isObject.mjs.map +1 -0
  200. package/lib/core/utils/internal/isStringEqual.d.mts +6 -0
  201. package/lib/core/utils/internal/isStringEqual.d.ts +6 -0
  202. package/lib/core/utils/internal/isStringEqual.js +27 -0
  203. package/lib/core/utils/internal/isStringEqual.js.map +1 -0
  204. package/lib/core/utils/internal/isStringEqual.mjs +7 -0
  205. package/lib/core/utils/internal/isStringEqual.mjs.map +1 -0
  206. package/lib/core/utils/internal/jsonParse.d.mts +7 -0
  207. package/lib/core/utils/internal/jsonParse.d.ts +7 -0
  208. package/lib/core/utils/internal/jsonParse.js +31 -0
  209. package/lib/core/utils/internal/jsonParse.js.map +1 -0
  210. package/lib/core/utils/internal/jsonParse.mjs +11 -0
  211. package/lib/core/utils/internal/jsonParse.mjs.map +1 -0
  212. package/lib/core/utils/internal/mergeRight.d.mts +7 -0
  213. package/lib/core/utils/internal/mergeRight.d.ts +7 -0
  214. package/lib/core/utils/internal/mergeRight.js +43 -0
  215. package/lib/core/utils/internal/mergeRight.js.map +1 -0
  216. package/lib/core/utils/internal/mergeRight.mjs +23 -0
  217. package/lib/core/utils/internal/mergeRight.mjs.map +1 -0
  218. package/lib/core/utils/internal/parseGraphQLRequest.d.mts +6 -0
  219. package/lib/core/utils/internal/parseGraphQLRequest.d.ts +6 -0
  220. package/lib/core/utils/internal/parseGraphQLRequest.js +146 -0
  221. package/lib/core/utils/internal/parseGraphQLRequest.js.map +1 -0
  222. package/lib/core/utils/internal/parseGraphQLRequest.mjs +129 -0
  223. package/lib/core/utils/internal/parseGraphQLRequest.mjs.map +1 -0
  224. package/lib/core/utils/internal/parseMultipartData.d.mts +14 -0
  225. package/lib/core/utils/internal/parseMultipartData.d.ts +14 -0
  226. package/lib/core/utils/internal/parseMultipartData.js +83 -0
  227. package/lib/core/utils/internal/parseMultipartData.js.map +1 -0
  228. package/lib/core/utils/internal/parseMultipartData.mjs +63 -0
  229. package/lib/core/utils/internal/parseMultipartData.mjs.map +1 -0
  230. package/lib/core/utils/internal/pipeEvents.d.mts +8 -0
  231. package/lib/core/utils/internal/pipeEvents.d.ts +8 -0
  232. package/lib/core/utils/internal/pipeEvents.js +36 -0
  233. package/lib/core/utils/internal/pipeEvents.js.map +1 -0
  234. package/lib/core/utils/internal/pipeEvents.mjs +16 -0
  235. package/lib/core/utils/internal/pipeEvents.mjs.map +1 -0
  236. package/lib/core/utils/internal/requestHandlerUtils.d.mts +12 -0
  237. package/lib/core/utils/internal/requestHandlerUtils.d.ts +12 -0
  238. package/lib/core/utils/internal/requestHandlerUtils.js +37 -0
  239. package/lib/core/utils/internal/requestHandlerUtils.js.map +1 -0
  240. package/lib/core/utils/internal/requestHandlerUtils.mjs +17 -0
  241. package/lib/core/utils/internal/requestHandlerUtils.mjs.map +1 -0
  242. package/lib/core/utils/internal/toReadonlyArray.d.mts +6 -0
  243. package/lib/core/utils/internal/toReadonlyArray.d.ts +6 -0
  244. package/lib/core/utils/internal/toReadonlyArray.js +29 -0
  245. package/lib/core/utils/internal/toReadonlyArray.js.map +1 -0
  246. package/lib/core/utils/internal/toReadonlyArray.mjs +9 -0
  247. package/lib/core/utils/internal/toReadonlyArray.mjs.map +1 -0
  248. package/lib/core/utils/internal/tryCatch.d.mts +3 -0
  249. package/lib/core/utils/internal/tryCatch.d.ts +3 -0
  250. package/lib/core/utils/internal/tryCatch.js +32 -0
  251. package/lib/core/utils/internal/tryCatch.js.map +1 -0
  252. package/lib/core/utils/internal/tryCatch.mjs +12 -0
  253. package/lib/core/utils/internal/tryCatch.mjs.map +1 -0
  254. package/lib/core/utils/logging/getStatusCodeColor.d.mts +11 -0
  255. package/lib/core/utils/logging/getStatusCodeColor.d.ts +11 -0
  256. package/lib/core/utils/logging/getStatusCodeColor.js +40 -0
  257. package/lib/core/utils/logging/getStatusCodeColor.js.map +1 -0
  258. package/lib/core/utils/logging/getStatusCodeColor.mjs +20 -0
  259. package/lib/core/utils/logging/getStatusCodeColor.mjs.map +1 -0
  260. package/lib/core/utils/logging/getTimestamp.d.mts +9 -0
  261. package/lib/core/utils/logging/getTimestamp.d.ts +9 -0
  262. package/lib/core/utils/logging/getTimestamp.js +32 -0
  263. package/lib/core/utils/logging/getTimestamp.js.map +1 -0
  264. package/lib/core/utils/logging/getTimestamp.mjs +12 -0
  265. package/lib/core/utils/logging/getTimestamp.mjs.map +1 -0
  266. package/lib/core/utils/logging/serializeRequest.d.mts +12 -0
  267. package/lib/core/utils/logging/serializeRequest.d.ts +12 -0
  268. package/lib/core/utils/logging/serializeRequest.js +34 -0
  269. package/lib/core/utils/logging/serializeRequest.js.map +1 -0
  270. package/lib/core/utils/logging/serializeRequest.mjs +14 -0
  271. package/lib/core/utils/logging/serializeRequest.mjs.map +1 -0
  272. package/lib/core/utils/logging/serializeResponse.d.mts +9 -0
  273. package/lib/core/utils/logging/serializeResponse.d.ts +9 -0
  274. package/lib/core/utils/logging/serializeResponse.js +48 -0
  275. package/lib/core/utils/logging/serializeResponse.js.map +1 -0
  276. package/lib/core/utils/logging/serializeResponse.mjs +18 -0
  277. package/lib/core/utils/logging/serializeResponse.mjs.map +1 -0
  278. package/lib/core/utils/matching/matchRequestUrl.d.mts +20 -0
  279. package/lib/core/utils/matching/matchRequestUrl.d.ts +20 -0
  280. package/lib/core/utils/matching/matchRequestUrl.js +55 -0
  281. package/lib/core/utils/matching/matchRequestUrl.js.map +1 -0
  282. package/lib/core/utils/matching/matchRequestUrl.mjs +35 -0
  283. package/lib/core/utils/matching/matchRequestUrl.mjs.map +1 -0
  284. package/lib/core/utils/matching/normalizePath.d.mts +13 -0
  285. package/lib/core/utils/matching/normalizePath.d.ts +13 -0
  286. package/lib/core/utils/matching/normalizePath.js +33 -0
  287. package/lib/core/utils/matching/normalizePath.js.map +1 -0
  288. package/lib/core/utils/matching/normalizePath.mjs +13 -0
  289. package/lib/core/utils/matching/normalizePath.mjs.map +1 -0
  290. package/lib/core/utils/request/getAllAcceptedMimeTypes.d.mts +14 -0
  291. package/lib/core/utils/request/getAllAcceptedMimeTypes.d.ts +14 -0
  292. package/lib/core/utils/request/getAllAcceptedMimeTypes.js +61 -0
  293. package/lib/core/utils/request/getAllAcceptedMimeTypes.js.map +1 -0
  294. package/lib/core/utils/request/getAllAcceptedMimeTypes.mjs +41 -0
  295. package/lib/core/utils/request/getAllAcceptedMimeTypes.mjs.map +1 -0
  296. package/lib/core/utils/request/getRequestCookies.d.mts +3 -0
  297. package/lib/core/utils/request/getRequestCookies.d.ts +3 -0
  298. package/lib/core/utils/request/getRequestCookies.js +79 -0
  299. package/lib/core/utils/request/getRequestCookies.js.map +1 -0
  300. package/lib/core/utils/request/getRequestCookies.mjs +62 -0
  301. package/lib/core/utils/request/getRequestCookies.mjs.map +1 -0
  302. package/lib/core/utils/request/onUnhandledRequest.d.mts +9 -0
  303. package/lib/core/utils/request/onUnhandledRequest.d.ts +9 -0
  304. package/lib/core/utils/request/onUnhandledRequest.js +76 -0
  305. package/lib/core/utils/request/onUnhandledRequest.js.map +1 -0
  306. package/lib/core/utils/request/onUnhandledRequest.mjs +56 -0
  307. package/lib/core/utils/request/onUnhandledRequest.mjs.map +1 -0
  308. package/lib/core/utils/request/storeResponseCookies.d.mts +3 -0
  309. package/lib/core/utils/request/storeResponseCookies.d.ts +3 -0
  310. package/lib/core/utils/request/storeResponseCookies.js +32 -0
  311. package/lib/core/utils/request/storeResponseCookies.js.map +1 -0
  312. package/lib/core/utils/request/storeResponseCookies.mjs +12 -0
  313. package/lib/core/utils/request/storeResponseCookies.mjs.map +1 -0
  314. package/lib/core/utils/request/toPublicUrl.d.mts +7 -0
  315. package/lib/core/utils/request/toPublicUrl.d.ts +7 -0
  316. package/lib/core/utils/request/toPublicUrl.js +31 -0
  317. package/lib/core/utils/request/toPublicUrl.js.map +1 -0
  318. package/lib/core/utils/request/toPublicUrl.mjs +11 -0
  319. package/lib/core/utils/request/toPublicUrl.mjs.map +1 -0
  320. package/lib/core/utils/toResponseInit.d.mts +3 -0
  321. package/lib/core/utils/toResponseInit.d.ts +3 -0
  322. package/lib/core/utils/toResponseInit.js +31 -0
  323. package/lib/core/utils/toResponseInit.js.map +1 -0
  324. package/lib/core/utils/toResponseInit.mjs +11 -0
  325. package/lib/core/utils/toResponseInit.mjs.map +1 -0
  326. package/lib/core/utils/url/cleanUrl.d.mts +7 -0
  327. package/lib/core/utils/url/cleanUrl.d.ts +7 -0
  328. package/lib/core/utils/url/cleanUrl.js +31 -0
  329. package/lib/core/utils/url/cleanUrl.js.map +1 -0
  330. package/lib/core/utils/url/cleanUrl.mjs +11 -0
  331. package/lib/core/utils/url/cleanUrl.mjs.map +1 -0
  332. package/lib/core/utils/url/getAbsoluteUrl.d.mts +6 -0
  333. package/lib/core/utils/url/getAbsoluteUrl.d.ts +6 -0
  334. package/lib/core/utils/url/getAbsoluteUrl.js +38 -0
  335. package/lib/core/utils/url/getAbsoluteUrl.js.map +1 -0
  336. package/lib/core/utils/url/getAbsoluteUrl.mjs +18 -0
  337. package/lib/core/utils/url/getAbsoluteUrl.mjs.map +1 -0
  338. package/lib/core/utils/url/isAbsoluteUrl.d.mts +6 -0
  339. package/lib/core/utils/url/isAbsoluteUrl.d.ts +6 -0
  340. package/lib/core/utils/url/isAbsoluteUrl.js +27 -0
  341. package/lib/core/utils/url/isAbsoluteUrl.js.map +1 -0
  342. package/lib/core/utils/url/isAbsoluteUrl.mjs +7 -0
  343. package/lib/core/utils/url/isAbsoluteUrl.mjs.map +1 -0
  344. package/lib/core/ws/WebSocketClientManager.d.mts +65 -0
  345. package/lib/core/ws/WebSocketClientManager.d.ts +65 -0
  346. package/lib/core/ws/WebSocketClientManager.js +159 -0
  347. package/lib/core/ws/WebSocketClientManager.js.map +1 -0
  348. package/lib/core/ws/WebSocketClientManager.mjs +139 -0
  349. package/lib/core/ws/WebSocketClientManager.mjs.map +1 -0
  350. package/lib/core/ws/WebSocketClientStore.d.mts +13 -0
  351. package/lib/core/ws/WebSocketClientStore.d.ts +13 -0
  352. package/lib/core/ws/WebSocketClientStore.js +26 -0
  353. package/lib/core/ws/WebSocketClientStore.js.map +1 -0
  354. package/lib/core/ws/WebSocketClientStore.mjs +6 -0
  355. package/lib/core/ws/WebSocketClientStore.mjs.map +1 -0
  356. package/lib/core/ws/WebSocketIndexedDBClientStore.d.mts +14 -0
  357. package/lib/core/ws/WebSocketIndexedDBClientStore.d.ts +14 -0
  358. package/lib/core/ws/WebSocketIndexedDBClientStore.js +130 -0
  359. package/lib/core/ws/WebSocketIndexedDBClientStore.js.map +1 -0
  360. package/lib/core/ws/WebSocketIndexedDBClientStore.mjs +110 -0
  361. package/lib/core/ws/WebSocketIndexedDBClientStore.mjs.map +1 -0
  362. package/lib/core/ws/WebSocketMemoryClientStore.d.mts +12 -0
  363. package/lib/core/ws/WebSocketMemoryClientStore.d.ts +12 -0
  364. package/lib/core/ws/WebSocketMemoryClientStore.js +41 -0
  365. package/lib/core/ws/WebSocketMemoryClientStore.js.map +1 -0
  366. package/lib/core/ws/WebSocketMemoryClientStore.mjs +21 -0
  367. package/lib/core/ws/WebSocketMemoryClientStore.mjs.map +1 -0
  368. package/lib/core/ws/handleWebSocketEvent.d.mts +20 -0
  369. package/lib/core/ws/handleWebSocketEvent.d.ts +20 -0
  370. package/lib/core/ws/handleWebSocketEvent.js +61 -0
  371. package/lib/core/ws/handleWebSocketEvent.js.map +1 -0
  372. package/lib/core/ws/handleWebSocketEvent.mjs +43 -0
  373. package/lib/core/ws/handleWebSocketEvent.mjs.map +1 -0
  374. package/lib/core/ws/utils/attachWebSocketLogger.d.mts +18 -0
  375. package/lib/core/ws/utils/attachWebSocketLogger.d.ts +18 -0
  376. package/lib/core/ws/utils/attachWebSocketLogger.js +199 -0
  377. package/lib/core/ws/utils/attachWebSocketLogger.js.map +1 -0
  378. package/lib/core/ws/utils/attachWebSocketLogger.mjs +179 -0
  379. package/lib/core/ws/utils/attachWebSocketLogger.mjs.map +1 -0
  380. package/lib/core/ws/utils/getMessageLength.d.mts +11 -0
  381. package/lib/core/ws/utils/getMessageLength.d.ts +11 -0
  382. package/lib/core/ws/utils/getMessageLength.js +34 -0
  383. package/lib/core/ws/utils/getMessageLength.js.map +1 -0
  384. package/lib/core/ws/utils/getMessageLength.mjs +14 -0
  385. package/lib/core/ws/utils/getMessageLength.mjs.map +1 -0
  386. package/lib/core/ws/utils/getPublicData.d.mts +5 -0
  387. package/lib/core/ws/utils/getPublicData.d.ts +5 -0
  388. package/lib/core/ws/utils/getPublicData.js +37 -0
  389. package/lib/core/ws/utils/getPublicData.js.map +1 -0
  390. package/lib/core/ws/utils/getPublicData.mjs +17 -0
  391. package/lib/core/ws/utils/getPublicData.mjs.map +1 -0
  392. package/lib/core/ws/utils/truncateMessage.d.mts +3 -0
  393. package/lib/core/ws/utils/truncateMessage.d.ts +3 -0
  394. package/lib/core/ws/utils/truncateMessage.js +31 -0
  395. package/lib/core/ws/utils/truncateMessage.js.map +1 -0
  396. package/lib/core/ws/utils/truncateMessage.mjs +11 -0
  397. package/lib/core/ws/utils/truncateMessage.mjs.map +1 -0
  398. package/lib/core/ws/webSocketInterceptor.d.mts +5 -0
  399. package/lib/core/ws/webSocketInterceptor.d.ts +5 -0
  400. package/lib/core/ws/webSocketInterceptor.js +26 -0
  401. package/lib/core/ws/webSocketInterceptor.js.map +1 -0
  402. package/lib/core/ws/webSocketInterceptor.mjs +6 -0
  403. package/lib/core/ws/webSocketInterceptor.mjs.map +1 -0
  404. package/lib/core/ws.d.mts +75 -0
  405. package/lib/core/ws.d.ts +75 -0
  406. package/lib/core/ws.js +69 -0
  407. package/lib/core/ws.js.map +1 -0
  408. package/lib/core/ws.mjs +52 -0
  409. package/lib/core/ws.mjs.map +1 -0
  410. package/lib/iife/index.js +23752 -0
  411. package/lib/iife/index.js.map +1 -0
  412. package/lib/mockServiceWorker.js +349 -0
  413. package/lib/native/index.d.mts +74 -0
  414. package/lib/native/index.d.ts +74 -0
  415. package/lib/native/index.js +156 -0
  416. package/lib/native/index.js.map +1 -0
  417. package/lib/native/index.mjs +134 -0
  418. package/lib/native/index.mjs.map +1 -0
  419. package/lib/node/index.d.mts +91 -0
  420. package/lib/node/index.d.ts +91 -0
  421. package/lib/node/index.js +209 -0
  422. package/lib/node/index.js.map +1 -0
  423. package/lib/node/index.mjs +184 -0
  424. package/lib/node/index.mjs.map +1 -0
  425. package/lib/shims/cookie.d.mts +7 -0
  426. package/lib/shims/cookie.d.ts +7 -0
  427. package/lib/shims/cookie.js +204 -0
  428. package/lib/shims/cookie.mjs +196 -0
  429. package/lib/shims/statuses.d.mts +6 -0
  430. package/lib/shims/statuses.d.ts +6 -0
  431. package/lib/shims/statuses.js +195 -0
  432. package/lib/shims/statuses.mjs +187 -0
  433. package/native/package.json +30 -0
  434. package/node/package.json +33 -0
  435. package/package.json +381 -0
  436. package/src/browser/global.browser.d.ts +1 -0
  437. package/src/browser/index.ts +3 -0
  438. package/src/browser/setupWorker/glossary.ts +138 -0
  439. package/src/browser/setupWorker/setupWorker.node.test.ts +10 -0
  440. package/src/browser/setupWorker/setupWorker.ts +184 -0
  441. package/src/browser/setupWorker/start/createFallbackRequestListener.ts +71 -0
  442. package/src/browser/setupWorker/start/createRequestListener.ts +138 -0
  443. package/src/browser/setupWorker/start/createResponseListener.ts +57 -0
  444. package/src/browser/setupWorker/start/createStartHandler.ts +137 -0
  445. package/src/browser/setupWorker/start/utils/enableMocking.ts +30 -0
  446. package/src/browser/setupWorker/start/utils/getWorkerByRegistration.ts +25 -0
  447. package/src/browser/setupWorker/start/utils/getWorkerInstance.ts +97 -0
  448. package/src/browser/setupWorker/start/utils/prepareStartHandler.test.ts +59 -0
  449. package/src/browser/setupWorker/start/utils/prepareStartHandler.ts +44 -0
  450. package/src/browser/setupWorker/start/utils/printStartMessage.test.ts +84 -0
  451. package/src/browser/setupWorker/start/utils/printStartMessage.ts +51 -0
  452. package/src/browser/setupWorker/start/utils/validateWorkerScope.ts +18 -0
  453. package/src/browser/setupWorker/stop/utils/printStopMessage.test.ts +26 -0
  454. package/src/browser/setupWorker/stop/utils/printStopMessage.ts +13 -0
  455. package/src/browser/tsconfig.browser.build.json +6 -0
  456. package/src/browser/tsconfig.browser.json +9 -0
  457. package/src/browser/utils/checkWorkerIntegrity.ts +42 -0
  458. package/src/browser/utils/deserializeRequest.ts +15 -0
  459. package/src/browser/utils/getAbsoluteWorkerUrl.test.ts +29 -0
  460. package/src/browser/utils/getAbsoluteWorkerUrl.ts +7 -0
  461. package/src/browser/utils/pruneGetRequestBody.test.ts +53 -0
  462. package/src/browser/utils/pruneGetRequestBody.ts +21 -0
  463. package/src/browser/utils/supports.ts +30 -0
  464. package/src/browser/utils/workerChannel.ts +159 -0
  465. package/src/core/HttpResponse.test.ts +378 -0
  466. package/src/core/HttpResponse.ts +248 -0
  467. package/src/core/SetupApi.ts +127 -0
  468. package/src/core/bypass.test.ts +80 -0
  469. package/src/core/bypass.ts +46 -0
  470. package/src/core/delay.ts +82 -0
  471. package/src/core/getResponse.test.ts +74 -0
  472. package/src/core/getResponse.ts +29 -0
  473. package/src/core/graphql.test.ts +11 -0
  474. package/src/core/graphql.ts +136 -0
  475. package/src/core/handlers/GraphQLHandler.test.ts +873 -0
  476. package/src/core/handlers/GraphQLHandler.ts +437 -0
  477. package/src/core/handlers/HttpHandler.test.ts +253 -0
  478. package/src/core/handlers/HttpHandler.ts +214 -0
  479. package/src/core/handlers/RequestHandler.ts +391 -0
  480. package/src/core/handlers/WebSocketHandler.test.ts +127 -0
  481. package/src/core/handlers/WebSocketHandler.ts +209 -0
  482. package/src/core/handlers/common.ts +1 -0
  483. package/src/core/http.test.ts +15 -0
  484. package/src/core/http.ts +64 -0
  485. package/src/core/index.ts +110 -0
  486. package/src/core/isCommonAssetRequest.ts +45 -0
  487. package/src/core/passthrough.test.ts +11 -0
  488. package/src/core/passthrough.ts +25 -0
  489. package/src/core/sharedOptions.ts +66 -0
  490. package/src/core/sse.ts +916 -0
  491. package/src/core/typeUtils.ts +26 -0
  492. package/src/core/utils/HttpResponse/decorators.ts +76 -0
  493. package/src/core/utils/cookieStore.ts +94 -0
  494. package/src/core/utils/executeHandlers.ts +69 -0
  495. package/src/core/utils/handleRequest.test.ts +573 -0
  496. package/src/core/utils/handleRequest.ts +117 -0
  497. package/src/core/utils/internal/Disposable.ts +12 -0
  498. package/src/core/utils/internal/checkGlobals.ts +17 -0
  499. package/src/core/utils/internal/devUtils.test.ts +21 -0
  500. package/src/core/utils/internal/devUtils.ts +44 -0
  501. package/src/core/utils/internal/getCallFrame.test.ts +154 -0
  502. package/src/core/utils/internal/getCallFrame.ts +35 -0
  503. package/src/core/utils/internal/hasRefCounted.test.ts +16 -0
  504. package/src/core/utils/internal/hasRefCounted.ts +8 -0
  505. package/src/core/utils/internal/isHandlerKind.test.ts +64 -0
  506. package/src/core/utils/internal/isHandlerKind.ts +21 -0
  507. package/src/core/utils/internal/isIterable.test.ts +23 -0
  508. package/src/core/utils/internal/isIterable.ts +32 -0
  509. package/src/core/utils/internal/isObject.test.ts +20 -0
  510. package/src/core/utils/internal/isObject.ts +6 -0
  511. package/src/core/utils/internal/isStringEqual.test.ts +45 -0
  512. package/src/core/utils/internal/isStringEqual.ts +6 -0
  513. package/src/core/utils/internal/jsonParse.test.ts +13 -0
  514. package/src/core/utils/internal/jsonParse.ts +13 -0
  515. package/src/core/utils/internal/mergeRight.test.ts +43 -0
  516. package/src/core/utils/internal/mergeRight.ts +30 -0
  517. package/src/core/utils/internal/parseGraphQLRequest.test.ts +99 -0
  518. package/src/core/utils/internal/parseGraphQLRequest.ts +214 -0
  519. package/src/core/utils/internal/parseMultipartData.test.ts +76 -0
  520. package/src/core/utils/internal/parseMultipartData.ts +106 -0
  521. package/src/core/utils/internal/pipeEvents.test.ts +14 -0
  522. package/src/core/utils/internal/pipeEvents.ts +25 -0
  523. package/src/core/utils/internal/requestHandlerUtils.ts +21 -0
  524. package/src/core/utils/internal/toReadonlyArray.test.ts +30 -0
  525. package/src/core/utils/internal/toReadonlyArray.ts +8 -0
  526. package/src/core/utils/internal/tryCatch.test.ts +29 -0
  527. package/src/core/utils/internal/tryCatch.ts +11 -0
  528. package/src/core/utils/logging/getStatusCodeColor.test.ts +22 -0
  529. package/src/core/utils/logging/getStatusCodeColor.ts +20 -0
  530. package/src/core/utils/logging/getTimestamp.test.ts +32 -0
  531. package/src/core/utils/logging/getTimestamp.ts +17 -0
  532. package/src/core/utils/logging/serializeRequest.test.ts +23 -0
  533. package/src/core/utils/logging/serializeRequest.ts +23 -0
  534. package/src/core/utils/logging/serializeResponse.test.ts +77 -0
  535. package/src/core/utils/logging/serializeResponse.ts +31 -0
  536. package/src/core/utils/matching/matchRequestUrl.test.ts +183 -0
  537. package/src/core/utils/matching/matchRequestUrl.ts +77 -0
  538. package/src/core/utils/matching/normalizePath.node.test.ts +44 -0
  539. package/src/core/utils/matching/normalizePath.test.ts +56 -0
  540. package/src/core/utils/matching/normalizePath.ts +22 -0
  541. package/src/core/utils/request/getAllAcceptedMimeTypes.test.ts +86 -0
  542. package/src/core/utils/request/getAllAcceptedMimeTypes.ts +70 -0
  543. package/src/core/utils/request/getRequestCookies.ts +88 -0
  544. package/src/core/utils/request/onUnhandledRequest.node.test.ts +62 -0
  545. package/src/core/utils/request/onUnhandledRequest.test.ts +228 -0
  546. package/src/core/utils/request/onUnhandledRequest.ts +81 -0
  547. package/src/core/utils/request/storeResponseCookies.ts +17 -0
  548. package/src/core/utils/request/toPublicUrl.node.test.ts +17 -0
  549. package/src/core/utils/request/toPublicUrl.test.ts +16 -0
  550. package/src/core/utils/request/toPublicUrl.ts +16 -0
  551. package/src/core/utils/toResponseInit.ts +7 -0
  552. package/src/core/utils/url/cleanUrl.test.ts +22 -0
  553. package/src/core/utils/url/cleanUrl.ts +16 -0
  554. package/src/core/utils/url/getAbsoluteUrl.node.test.ts +19 -0
  555. package/src/core/utils/url/getAbsoluteUrl.test.ts +47 -0
  556. package/src/core/utils/url/getAbsoluteUrl.ts +25 -0
  557. package/src/core/utils/url/isAbsoluteUrl.test.ts +32 -0
  558. package/src/core/utils/url/isAbsoluteUrl.ts +6 -0
  559. package/src/core/ws/WebSocketClientManager.test.ts +164 -0
  560. package/src/core/ws/WebSocketClientManager.ts +241 -0
  561. package/src/core/ws/WebSocketClientStore.ts +14 -0
  562. package/src/core/ws/WebSocketIndexedDBClientStore.ts +140 -0
  563. package/src/core/ws/WebSocketMemoryClientStore.ts +27 -0
  564. package/src/core/ws/handleWebSocketEvent.ts +64 -0
  565. package/src/core/ws/utils/attachWebSocketLogger.ts +245 -0
  566. package/src/core/ws/utils/getMessageLength.test.ts +16 -0
  567. package/src/core/ws/utils/getMessageLength.ts +20 -0
  568. package/src/core/ws/utils/getPublicData.test.ts +38 -0
  569. package/src/core/ws/utils/getPublicData.ts +18 -0
  570. package/src/core/ws/utils/truncateMessage.test.ts +12 -0
  571. package/src/core/ws/utils/truncateMessage.ts +9 -0
  572. package/src/core/ws/webSocketInterceptor.ts +3 -0
  573. package/src/core/ws.test.ts +23 -0
  574. package/src/core/ws.ts +161 -0
  575. package/src/iife/index.ts +2 -0
  576. package/src/mockServiceWorker.js +349 -0
  577. package/src/native/index.ts +21 -0
  578. package/src/node/SetupServerApi.ts +87 -0
  579. package/src/node/SetupServerCommonApi.ts +169 -0
  580. package/src/node/glossary.ts +74 -0
  581. package/src/node/index.ts +3 -0
  582. package/src/node/setupServer.ts +15 -0
  583. package/src/package.json +3 -0
  584. package/src/shims/cookie.ts +7 -0
  585. package/src/shims/statuses.ts +6 -0
  586. package/src/tsconfig.core.build.json +6 -0
  587. package/src/tsconfig.node.build.json +6 -0
  588. package/src/tsconfig.node.json +8 -0
  589. package/src/tsconfig.src.json +10 -0
  590. package/src/tsconfig.worker.json +13 -0
@@ -0,0 +1,214 @@
1
+ import { ResponseResolutionContext } from '../utils/executeHandlers'
2
+ import { devUtils } from '../utils/internal/devUtils'
3
+ import { isStringEqual } from '../utils/internal/isStringEqual'
4
+ import { getStatusCodeColor } from '../utils/logging/getStatusCodeColor'
5
+ import { getTimestamp } from '../utils/logging/getTimestamp'
6
+ import { serializeRequest } from '../utils/logging/serializeRequest'
7
+ import { serializeResponse } from '../utils/logging/serializeResponse'
8
+ import {
9
+ matchRequestUrl,
10
+ Match,
11
+ Path,
12
+ PathParams,
13
+ } from '../utils/matching/matchRequestUrl'
14
+ import { toPublicUrl } from '../utils/request/toPublicUrl'
15
+ import { getAllRequestCookies } from '../utils/request/getRequestCookies'
16
+ import { cleanUrl } from '../utils/url/cleanUrl'
17
+ import {
18
+ RequestHandler,
19
+ RequestHandlerDefaultInfo,
20
+ RequestHandlerOptions,
21
+ ResponseResolver,
22
+ } from './RequestHandler'
23
+
24
+ export type HttpHandlerMethod = string | RegExp
25
+
26
+ export interface HttpHandlerInfo extends RequestHandlerDefaultInfo {
27
+ method: HttpHandlerMethod
28
+ path: HttpRequestPredicate<PathParams>
29
+ }
30
+
31
+ export enum HttpMethods {
32
+ HEAD = 'HEAD',
33
+ GET = 'GET',
34
+ POST = 'POST',
35
+ PUT = 'PUT',
36
+ PATCH = 'PATCH',
37
+ OPTIONS = 'OPTIONS',
38
+ DELETE = 'DELETE',
39
+ }
40
+
41
+ export type RequestQuery = {
42
+ [queryName: string]: string
43
+ }
44
+
45
+ export type HttpRequestParsedResult = {
46
+ match: Match
47
+ cookies: Record<string, string>
48
+ }
49
+
50
+ export type HttpRequestResolverExtras<Params extends PathParams> = {
51
+ params: Params
52
+ cookies: Record<string, string>
53
+ }
54
+
55
+ export type HttpCustomPredicate<Params extends PathParams> = (args: {
56
+ request: Request
57
+ cookies: Record<string, string>
58
+ }) =>
59
+ | HttpCustomPredicateResult<Params>
60
+ | Promise<HttpCustomPredicateResult<Params>>
61
+
62
+ export type HttpCustomPredicateResult<Params extends PathParams> =
63
+ | boolean
64
+ | {
65
+ matches: boolean
66
+ params: Params
67
+ }
68
+
69
+ export type HttpRequestPredicate<Params extends PathParams> =
70
+ | Path
71
+ | HttpCustomPredicate<Params>
72
+
73
+ /**
74
+ * Request handler for HTTP requests.
75
+ * Provides request matching based on method and URL.
76
+ */
77
+ export class HttpHandler extends RequestHandler<
78
+ HttpHandlerInfo,
79
+ HttpRequestParsedResult,
80
+ HttpRequestResolverExtras<any>
81
+ > {
82
+ constructor(
83
+ method: HttpHandlerMethod,
84
+ predicate: HttpRequestPredicate<PathParams>,
85
+ resolver: ResponseResolver<HttpRequestResolverExtras<any>, any, any>,
86
+ options?: RequestHandlerOptions,
87
+ ) {
88
+ const displayPath =
89
+ typeof predicate === 'function' ? '[custom predicate]' : predicate
90
+
91
+ super({
92
+ info: {
93
+ header: `${method}${displayPath ? ` ${displayPath}` : ''}`,
94
+ path: predicate,
95
+ method,
96
+ },
97
+ resolver,
98
+ options,
99
+ })
100
+
101
+ this.checkRedundantQueryParameters()
102
+ }
103
+
104
+ private checkRedundantQueryParameters() {
105
+ const { method, path } = this.info
106
+
107
+ if (!path || path instanceof RegExp || typeof path === 'function') {
108
+ return
109
+ }
110
+
111
+ const url = cleanUrl(path)
112
+
113
+ // Bypass request handler URLs that have no redundant characters.
114
+ if (url === path) {
115
+ return
116
+ }
117
+
118
+ devUtils.warn(
119
+ `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/http/intercepting-requests#querysearch-parameters`,
120
+ )
121
+ }
122
+
123
+ async parse(args: {
124
+ request: Request
125
+ resolutionContext?: ResponseResolutionContext
126
+ }) {
127
+ const url = new URL(args.request.url)
128
+ const cookies = getAllRequestCookies(args.request)
129
+
130
+ /**
131
+ * Handle custom predicate functions.
132
+ * @note Invoke this during parsing so the user can parse the path parameters
133
+ * manually. Otherwise, `params` is always an empty object, which isn't nice.
134
+ */
135
+ if (typeof this.info.path === 'function') {
136
+ const customPredicateResult = await this.info.path({
137
+ request: args.request,
138
+ cookies,
139
+ })
140
+
141
+ const match =
142
+ typeof customPredicateResult === 'boolean'
143
+ ? {
144
+ matches: customPredicateResult,
145
+ params: {},
146
+ }
147
+ : customPredicateResult
148
+
149
+ return {
150
+ match,
151
+ cookies,
152
+ }
153
+ }
154
+
155
+ const match = this.info.path
156
+ ? matchRequestUrl(url, this.info.path, args.resolutionContext?.baseUrl)
157
+ : { matches: false, params: {} }
158
+
159
+ return {
160
+ match,
161
+ cookies,
162
+ }
163
+ }
164
+
165
+ async predicate(args: {
166
+ request: Request
167
+ parsedResult: HttpRequestParsedResult
168
+ resolutionContext?: ResponseResolutionContext
169
+ }) {
170
+ const hasMatchingMethod = this.matchMethod(args.request.method)
171
+ const hasMatchingUrl = args.parsedResult.match.matches
172
+ return hasMatchingMethod && hasMatchingUrl
173
+ }
174
+
175
+ private matchMethod(actualMethod: string): boolean {
176
+ return this.info.method instanceof RegExp
177
+ ? this.info.method.test(actualMethod)
178
+ : isStringEqual(this.info.method, actualMethod)
179
+ }
180
+
181
+ protected extendResolverArgs(args: {
182
+ request: Request
183
+ parsedResult: HttpRequestParsedResult
184
+ }) {
185
+ return {
186
+ params: args.parsedResult.match?.params || {},
187
+ cookies: args.parsedResult.cookies,
188
+ }
189
+ }
190
+
191
+ async log(args: { request: Request; response: Response }) {
192
+ const publicUrl = toPublicUrl(args.request.url)
193
+ const loggedRequest = await serializeRequest(args.request)
194
+ const loggedResponse = await serializeResponse(args.response)
195
+ const statusColor = getStatusCodeColor(loggedResponse.status)
196
+
197
+ console.groupCollapsed(
198
+ devUtils.formatMessage(
199
+ `${getTimestamp()} ${args.request.method} ${publicUrl} (%c${
200
+ loggedResponse.status
201
+ } ${loggedResponse.statusText}%c)`,
202
+ ),
203
+ `color:${statusColor}`,
204
+ 'color:inherit',
205
+ )
206
+ // eslint-disable-next-line no-console
207
+ console.log('Request', loggedRequest)
208
+ // eslint-disable-next-line no-console
209
+ console.log('Handler:', this)
210
+ // eslint-disable-next-line no-console
211
+ console.log('Response', loggedResponse)
212
+ console.groupEnd()
213
+ }
214
+ }
@@ -0,0 +1,391 @@
1
+ import { getCallFrame } from '../utils/internal/getCallFrame'
2
+ import {
3
+ AsyncIterable,
4
+ Iterable,
5
+ isIterable,
6
+ } from '../utils/internal/isIterable'
7
+ import type { ResponseResolutionContext } from '../utils/executeHandlers'
8
+ import type { MaybePromise } from '../typeUtils'
9
+ import {
10
+ StrictRequest,
11
+ HttpResponse,
12
+ DefaultUnsafeFetchResponse,
13
+ } from '../HttpResponse'
14
+ import type { HandlerKind } from './common'
15
+ import type { GraphQLRequestBody } from './GraphQLHandler'
16
+
17
+ export type DefaultRequestMultipartBody = Record<
18
+ string,
19
+ string | File | Array<string | File>
20
+ >
21
+
22
+ export type DefaultBodyType =
23
+ | Record<string, any>
24
+ | DefaultRequestMultipartBody
25
+ | string
26
+ | number
27
+ | boolean
28
+ | null
29
+ | undefined
30
+
31
+ export type JsonBodyType =
32
+ | Record<string, any>
33
+ | string
34
+ | number
35
+ | boolean
36
+ | null
37
+ | undefined
38
+
39
+ export interface RequestHandlerDefaultInfo {
40
+ header: string
41
+ }
42
+
43
+ export interface RequestHandlerInternalInfo {
44
+ callFrame?: string
45
+ }
46
+
47
+ export type ResponseResolverReturnType<
48
+ ResponseBodyType extends DefaultBodyType = undefined,
49
+ > =
50
+ // If ResponseBodyType is a union and one of the types is `undefined`,
51
+ // allow plain Response as the type.
52
+ | ([ResponseBodyType] extends [undefined]
53
+ ? Response
54
+ : /**
55
+ * Treat GraphQL response body type as a special case.
56
+ * For esome reason, making the default HttpResponse<T> | DefaultUnsafeFetchResponse
57
+ * union breaks the body type inference for HTTP requests.
58
+ * @see https://github.com/mswjs/msw/issues/2130
59
+ */
60
+ ResponseBodyType extends GraphQLRequestBody<any>
61
+ ? HttpResponse<ResponseBodyType> | DefaultUnsafeFetchResponse
62
+ : HttpResponse<ResponseBodyType>)
63
+ | undefined
64
+ | void
65
+
66
+ export type MaybeAsyncResponseResolverReturnType<
67
+ ResponseBodyType extends DefaultBodyType,
68
+ > = MaybePromise<ResponseResolverReturnType<ResponseBodyType>>
69
+
70
+ export type AsyncResponseResolverReturnType<
71
+ ResponseBodyType extends DefaultBodyType,
72
+ > = MaybePromise<
73
+ | ResponseResolverReturnType<ResponseBodyType>
74
+ | Iterable<
75
+ MaybeAsyncResponseResolverReturnType<ResponseBodyType>,
76
+ MaybeAsyncResponseResolverReturnType<ResponseBodyType>,
77
+ MaybeAsyncResponseResolverReturnType<ResponseBodyType>
78
+ >
79
+ | AsyncIterable<
80
+ MaybeAsyncResponseResolverReturnType<ResponseBodyType>,
81
+ MaybeAsyncResponseResolverReturnType<ResponseBodyType>,
82
+ MaybeAsyncResponseResolverReturnType<ResponseBodyType>
83
+ >
84
+ >
85
+
86
+ export type ResponseResolverInfo<
87
+ ResolverExtraInfo extends Record<string, unknown>,
88
+ RequestBodyType extends DefaultBodyType = DefaultBodyType,
89
+ > = {
90
+ request: StrictRequest<RequestBodyType>
91
+ requestId: string
92
+ } & ResolverExtraInfo
93
+
94
+ export type ResponseResolver<
95
+ ResolverExtraInfo extends Record<string, unknown> = Record<string, unknown>,
96
+ RequestBodyType extends DefaultBodyType = DefaultBodyType,
97
+ ResponseBodyType extends DefaultBodyType = undefined,
98
+ > = (
99
+ info: ResponseResolverInfo<ResolverExtraInfo, RequestBodyType>,
100
+ ) => AsyncResponseResolverReturnType<ResponseBodyType>
101
+
102
+ export interface RequestHandlerArgs<
103
+ HandlerInfo,
104
+ HandlerOptions extends RequestHandlerOptions,
105
+ > {
106
+ info: HandlerInfo
107
+ resolver: ResponseResolver<any>
108
+ options?: HandlerOptions
109
+ }
110
+
111
+ export interface RequestHandlerOptions {
112
+ once?: boolean
113
+ }
114
+
115
+ export interface RequestHandlerExecutionResult<
116
+ ParsedResult extends object | undefined,
117
+ > {
118
+ handler: RequestHandler
119
+ parsedResult?: ParsedResult
120
+ request: Request
121
+ requestId: string
122
+ response?: Response
123
+ }
124
+
125
+ export abstract class RequestHandler<
126
+ HandlerInfo extends RequestHandlerDefaultInfo = RequestHandlerDefaultInfo,
127
+ ParsedResult extends Record<string, any> | undefined = any,
128
+ ResolverExtras extends Record<string, unknown> = any,
129
+ HandlerOptions extends RequestHandlerOptions = RequestHandlerOptions,
130
+ > {
131
+ static cache = new WeakMap<
132
+ StrictRequest<DefaultBodyType>,
133
+ StrictRequest<DefaultBodyType>
134
+ >()
135
+
136
+ private readonly __kind: HandlerKind
137
+
138
+ public info: HandlerInfo & RequestHandlerInternalInfo
139
+ /**
140
+ * Indicates whether this request handler has been used
141
+ * (its resolver has successfully executed).
142
+ */
143
+ public isUsed: boolean
144
+
145
+ protected resolver: ResponseResolver<ResolverExtras, any, any>
146
+ private resolverIterator?:
147
+ | Iterator<
148
+ MaybeAsyncResponseResolverReturnType<any>,
149
+ MaybeAsyncResponseResolverReturnType<any>,
150
+ MaybeAsyncResponseResolverReturnType<any>
151
+ >
152
+ | AsyncIterator<
153
+ MaybeAsyncResponseResolverReturnType<any>,
154
+ MaybeAsyncResponseResolverReturnType<any>,
155
+ MaybeAsyncResponseResolverReturnType<any>
156
+ >
157
+ private resolverIteratorResult?: Response | HttpResponse<any>
158
+ private options?: HandlerOptions
159
+
160
+ constructor(args: RequestHandlerArgs<HandlerInfo, HandlerOptions>) {
161
+ this.resolver = args.resolver
162
+ this.options = args.options
163
+
164
+ const callFrame = getCallFrame(new Error())
165
+
166
+ this.info = {
167
+ ...args.info,
168
+ callFrame,
169
+ }
170
+
171
+ this.isUsed = false
172
+ this.__kind = 'RequestHandler'
173
+ }
174
+
175
+ /**
176
+ * Determine if the intercepted request should be mocked.
177
+ */
178
+ abstract predicate(args: {
179
+ request: Request
180
+ parsedResult: ParsedResult
181
+ resolutionContext?: ResponseResolutionContext
182
+ }): boolean | Promise<boolean>
183
+
184
+ /**
185
+ * Print out the successfully handled request.
186
+ */
187
+ abstract log(args: {
188
+ request: Request
189
+ response: Response
190
+ parsedResult: ParsedResult
191
+ }): void
192
+
193
+ /**
194
+ * Parse the intercepted request to extract additional information from it.
195
+ * Parsed result is then exposed to other methods of this request handler.
196
+ */
197
+ async parse(_args: {
198
+ request: Request
199
+ resolutionContext?: ResponseResolutionContext
200
+ }): Promise<ParsedResult> {
201
+ return {} as ParsedResult
202
+ }
203
+
204
+ /**
205
+ * Test if this handler matches the given request.
206
+ *
207
+ * This method is not used internally but is exposed
208
+ * as a convenience method for consumers writing custom
209
+ * handlers.
210
+ */
211
+ public async test(args: {
212
+ request: Request
213
+ resolutionContext?: ResponseResolutionContext
214
+ }): Promise<boolean> {
215
+ const parsedResult = await this.parse({
216
+ request: args.request,
217
+ resolutionContext: args.resolutionContext,
218
+ })
219
+
220
+ return this.predicate({
221
+ request: args.request,
222
+ parsedResult,
223
+ resolutionContext: args.resolutionContext,
224
+ })
225
+ }
226
+
227
+ protected extendResolverArgs(_args: {
228
+ request: Request
229
+ parsedResult: ParsedResult
230
+ }): ResolverExtras {
231
+ return {} as ResolverExtras
232
+ }
233
+
234
+ // Clone the request instance before it's passed to the handler phases
235
+ // and the response resolver so we can always read it for logging.
236
+ // We only clone it once per request to avoid unnecessary overhead.
237
+ private cloneRequestOrGetFromCache(
238
+ request: StrictRequest<DefaultBodyType>,
239
+ ): StrictRequest<DefaultBodyType> {
240
+ const existingClone = RequestHandler.cache.get(request)
241
+
242
+ if (typeof existingClone !== 'undefined') {
243
+ return existingClone
244
+ }
245
+
246
+ const clonedRequest = request.clone()
247
+ RequestHandler.cache.set(request, clonedRequest)
248
+
249
+ return clonedRequest
250
+ }
251
+
252
+ /**
253
+ * Execute this request handler and produce a mocked response
254
+ * using the given resolver function.
255
+ */
256
+ public async run(args: {
257
+ request: StrictRequest<any>
258
+ requestId: string
259
+ resolutionContext?: ResponseResolutionContext
260
+ }): Promise<RequestHandlerExecutionResult<ParsedResult> | null> {
261
+ if (this.isUsed && this.options?.once) {
262
+ return null
263
+ }
264
+
265
+ // Clone the request.
266
+ // If this is the first time MSW handles this request, a fresh clone
267
+ // will be created and cached. Upon further handling of the same request,
268
+ // the request clone from the cache will be reused to prevent abundant
269
+ // "abort" listeners and save up resources on cloning.
270
+ const requestClone = this.cloneRequestOrGetFromCache(args.request)
271
+
272
+ const parsedResult = await this.parse({
273
+ request: args.request,
274
+ resolutionContext: args.resolutionContext,
275
+ })
276
+ const shouldInterceptRequest = await this.predicate({
277
+ request: args.request,
278
+ parsedResult,
279
+ resolutionContext: args.resolutionContext,
280
+ })
281
+
282
+ if (!shouldInterceptRequest) {
283
+ return null
284
+ }
285
+
286
+ // Re-check isUsed, in case another request hit this handler while we were
287
+ // asynchronously parsing the request.
288
+ if (this.isUsed && this.options?.once) {
289
+ return null
290
+ }
291
+
292
+ // Preemptively mark the handler as used.
293
+ // Generators will undo this because only when the resolver reaches the
294
+ // "done" state of the generator that it considers the handler used.
295
+ this.isUsed = true
296
+
297
+ // Create a response extraction wrapper around the resolver
298
+ // since it can be both an async function and a generator.
299
+ const executeResolver = this.wrapResolver(this.resolver)
300
+
301
+ const resolverExtras = this.extendResolverArgs({
302
+ request: args.request,
303
+ parsedResult,
304
+ })
305
+
306
+ const mockedResponsePromise = (
307
+ executeResolver({
308
+ ...resolverExtras,
309
+ requestId: args.requestId,
310
+ request: args.request,
311
+ }) as Promise<Response>
312
+ ).catch((errorOrResponse) => {
313
+ // Allow throwing a Response instance in a response resolver.
314
+ if (errorOrResponse instanceof Response) {
315
+ return errorOrResponse
316
+ }
317
+
318
+ // Otherwise, throw the error as-is.
319
+ throw errorOrResponse
320
+ })
321
+
322
+ const mockedResponse = await mockedResponsePromise
323
+
324
+ const executionResult = this.createExecutionResult({
325
+ // Pass the cloned request to the result so that logging
326
+ // and other consumers could read its body once more.
327
+ request: requestClone,
328
+ requestId: args.requestId,
329
+ response: mockedResponse,
330
+ parsedResult,
331
+ })
332
+
333
+ return executionResult
334
+ }
335
+
336
+ private wrapResolver(
337
+ resolver: ResponseResolver<ResolverExtras>,
338
+ ): ResponseResolver<ResolverExtras> {
339
+ return async (info): Promise<ResponseResolverReturnType<any>> => {
340
+ if (!this.resolverIterator) {
341
+ const result = await resolver(info)
342
+
343
+ if (!isIterable(result)) {
344
+ return result
345
+ }
346
+
347
+ this.resolverIterator =
348
+ Symbol.iterator in result
349
+ ? result[Symbol.iterator]()
350
+ : result[Symbol.asyncIterator]()
351
+ }
352
+
353
+ // Opt-out from marking this handler as used.
354
+ this.isUsed = false
355
+
356
+ const { done, value } = await this.resolverIterator.next()
357
+ const nextResponse = await value
358
+
359
+ if (nextResponse) {
360
+ this.resolverIteratorResult = nextResponse.clone()
361
+ }
362
+
363
+ if (done) {
364
+ // A one-time generator resolver stops affecting the network
365
+ // only after it's been completely exhausted.
366
+ this.isUsed = true
367
+
368
+ // Clone the previously stored response so it can be read
369
+ // when receiving it repeatedly from the "done" generator.
370
+ return this.resolverIteratorResult?.clone()
371
+ }
372
+
373
+ return nextResponse
374
+ }
375
+ }
376
+
377
+ private createExecutionResult(args: {
378
+ request: Request
379
+ requestId: string
380
+ parsedResult: ParsedResult
381
+ response?: Response
382
+ }): RequestHandlerExecutionResult<ParsedResult> {
383
+ return {
384
+ handler: this,
385
+ request: args.request,
386
+ requestId: args.requestId,
387
+ response: args.response,
388
+ parsedResult: args.parsedResult,
389
+ }
390
+ }
391
+ }