@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,437 @@
1
+ import { invariant } from 'outvariant'
2
+ import {
3
+ parse,
4
+ type DocumentNode,
5
+ type GraphQLError,
6
+ type OperationTypeNode,
7
+ } from 'graphql'
8
+ import {
9
+ DefaultBodyType,
10
+ RequestHandler,
11
+ RequestHandlerDefaultInfo,
12
+ RequestHandlerExecutionResult,
13
+ RequestHandlerOptions,
14
+ ResponseResolver,
15
+ } from './RequestHandler'
16
+ import { getTimestamp } from '../utils/logging/getTimestamp'
17
+ import { getStatusCodeColor } from '../utils/logging/getStatusCodeColor'
18
+ import { serializeRequest } from '../utils/logging/serializeRequest'
19
+ import { serializeResponse } from '../utils/logging/serializeResponse'
20
+ import { Match, matchRequestUrl, Path } from '../utils/matching/matchRequestUrl'
21
+ import {
22
+ ParsedGraphQLRequest,
23
+ GraphQLMultipartRequestBody,
24
+ parseGraphQLRequest,
25
+ parseDocumentNode,
26
+ ParsedGraphQLQuery,
27
+ } from '../utils/internal/parseGraphQLRequest'
28
+ import { toPublicUrl } from '../utils/request/toPublicUrl'
29
+ import { devUtils } from '../utils/internal/devUtils'
30
+ import { getAllRequestCookies } from '../utils/request/getRequestCookies'
31
+ import { ResponseResolutionContext } from 'src/iife'
32
+ import { kDefaultContentType, StrictRequest } from '../HttpResponse'
33
+ import { getAllAcceptedMimeTypes } from '../utils/request/getAllAcceptedMimeTypes'
34
+
35
+ export interface DocumentTypeDecoration<
36
+ Result = { [key: string]: any },
37
+ Variables = { [key: string]: any },
38
+ > {
39
+ __apiType?: (variables: Variables) => Result
40
+ __resultType?: Result
41
+ __variablesType?: Variables
42
+ }
43
+
44
+ export type GraphQLOperationType = OperationTypeNode | 'all'
45
+ export type GraphQLHandlerNameSelector = DocumentNode | RegExp | string
46
+
47
+ export type GraphQLQuery = Record<string, any> | null
48
+ export type GraphQLVariables = Record<string, any>
49
+
50
+ export interface GraphQLHandlerInfo extends RequestHandlerDefaultInfo {
51
+ operationType: GraphQLOperationType
52
+ operationName: GraphQLHandlerNameSelector | GraphQLCustomPredicate
53
+ }
54
+
55
+ export type GraphQLRequestParsedResult = {
56
+ match: Match
57
+ cookies: Record<string, string>
58
+ } & (
59
+ | ParsedGraphQLRequest<GraphQLVariables>
60
+ /**
61
+ * An empty version of the ParsedGraphQLRequest
62
+ * which simplifies the return type of the resolver
63
+ * when the request is to a non-matching endpoint
64
+ */
65
+ | {
66
+ operationType?: undefined
67
+ operationName?: undefined
68
+ query?: undefined
69
+ variables?: undefined
70
+ }
71
+ )
72
+
73
+ export type GraphQLResolverExtras<Variables extends GraphQLVariables> = {
74
+ query: string
75
+ operationName: string
76
+ variables: Variables
77
+ cookies: Record<string, string>
78
+ }
79
+
80
+ export type GraphQLRequestBody<VariablesType extends GraphQLVariables> =
81
+ | GraphQLJsonRequestBody<VariablesType>
82
+ | GraphQLMultipartRequestBody
83
+ | Record<string, any>
84
+ | undefined
85
+
86
+ export interface GraphQLJsonRequestBody<Variables extends GraphQLVariables> {
87
+ query: string
88
+ variables?: Variables
89
+ }
90
+
91
+ export type GraphQLResponseBody<BodyType extends DefaultBodyType> =
92
+ | {
93
+ data?: BodyType | null
94
+ errors?: readonly Partial<GraphQLError>[] | null
95
+ extensions?: Record<string, any>
96
+ }
97
+ | null
98
+ | undefined
99
+
100
+ export type GraphQLCustomPredicate = (args: {
101
+ request: Request
102
+ query: string
103
+ operationType: GraphQLOperationType
104
+ operationName: string
105
+ variables: GraphQLVariables
106
+ cookies: Record<string, string>
107
+ }) => GraphQLCustomPredicateResult | Promise<GraphQLCustomPredicateResult>
108
+
109
+ export type GraphQLCustomPredicateResult = boolean | { matches: boolean }
110
+
111
+ export type GraphQLPredicate<Query = any, Variables = any> =
112
+ | GraphQLHandlerNameSelector
113
+ | DocumentTypeDecoration<Query, Variables>
114
+ | GraphQLCustomPredicate
115
+
116
+ export function isDocumentNode(
117
+ value: DocumentNode | any,
118
+ ): value is DocumentNode {
119
+ if (value == null) {
120
+ return false
121
+ }
122
+
123
+ return typeof value === 'object' && 'kind' in value && 'definitions' in value
124
+ }
125
+
126
+ function isDocumentTypeDecoration(
127
+ value: unknown,
128
+ ): value is DocumentTypeDecoration<any, any> {
129
+ return value instanceof String
130
+ }
131
+
132
+ export class GraphQLHandler extends RequestHandler<
133
+ GraphQLHandlerInfo,
134
+ GraphQLRequestParsedResult,
135
+ GraphQLResolverExtras<any>
136
+ > {
137
+ private endpoint: Path
138
+
139
+ static parsedRequestCache = new WeakMap<
140
+ Request,
141
+ ParsedGraphQLRequest<GraphQLVariables>
142
+ >()
143
+
144
+ static #parseOperationName(
145
+ predicate: GraphQLPredicate,
146
+ operationType: GraphQLOperationType,
147
+ ): GraphQLHandlerInfo['operationName'] {
148
+ const getOperationName = (node: ParsedGraphQLQuery): string => {
149
+ invariant(
150
+ node.operationType === operationType,
151
+ 'Failed to create a GraphQL handler: provided a DocumentNode with a mismatched operation type (expected "%s" but got "%s").',
152
+ operationType,
153
+ node.operationType,
154
+ )
155
+
156
+ invariant(
157
+ node.operationName,
158
+ 'Failed to create a GraphQL handler: provided a DocumentNode without operation name',
159
+ )
160
+
161
+ return node.operationName
162
+ }
163
+
164
+ if (isDocumentNode(predicate)) {
165
+ return getOperationName(parseDocumentNode(predicate))
166
+ }
167
+
168
+ if (isDocumentTypeDecoration(predicate)) {
169
+ const documentNode = parse(predicate.toString())
170
+
171
+ invariant(
172
+ isDocumentNode(documentNode),
173
+ 'Failed to create a GraphQL handler: given TypedDocumentString (%s) does not produce a valid DocumentNode',
174
+ predicate,
175
+ )
176
+
177
+ return getOperationName(parseDocumentNode(documentNode))
178
+ }
179
+
180
+ return predicate
181
+ }
182
+
183
+ constructor(
184
+ operationType: GraphQLOperationType,
185
+ predicate: GraphQLPredicate,
186
+ endpoint: Path,
187
+ resolver: ResponseResolver<GraphQLResolverExtras<any>, any, any>,
188
+ options?: RequestHandlerOptions,
189
+ ) {
190
+ const operationName = GraphQLHandler.#parseOperationName(
191
+ predicate,
192
+ operationType,
193
+ )
194
+
195
+ const displayOperationName =
196
+ typeof operationName === 'function' ? '[custom predicate]' : operationName
197
+
198
+ const header =
199
+ operationType === 'all'
200
+ ? `${operationType} (origin: ${endpoint.toString()})`
201
+ : `${operationType}${displayOperationName ? ` ${displayOperationName}` : ''} (origin: ${endpoint.toString()})`
202
+
203
+ super({
204
+ info: {
205
+ header,
206
+ operationType,
207
+ operationName: GraphQLHandler.#parseOperationName(
208
+ predicate,
209
+ operationType,
210
+ ),
211
+ },
212
+ resolver,
213
+ options,
214
+ })
215
+
216
+ this.endpoint = endpoint
217
+ }
218
+
219
+ /**
220
+ * Parses the request body, once per request, cached across all
221
+ * GraphQL handlers. This is done to avoid multiple parsing of the
222
+ * request body, which each requires a clone of the request.
223
+ */
224
+ async parseGraphQLRequestOrGetFromCache(
225
+ request: Request,
226
+ ): Promise<ParsedGraphQLRequest<GraphQLVariables>> {
227
+ if (!GraphQLHandler.parsedRequestCache.has(request)) {
228
+ GraphQLHandler.parsedRequestCache.set(
229
+ request,
230
+ await parseGraphQLRequest(request).catch((error) => {
231
+ console.error(error)
232
+ return undefined
233
+ }),
234
+ )
235
+ }
236
+
237
+ return GraphQLHandler.parsedRequestCache.get(request)
238
+ }
239
+
240
+ async parse(args: { request: Request }): Promise<GraphQLRequestParsedResult> {
241
+ /**
242
+ * If the request doesn't match a specified endpoint, there's no
243
+ * need to parse it since there's no case where we would handle this
244
+ */
245
+ const match = matchRequestUrl(new URL(args.request.url), this.endpoint)
246
+ const cookies = getAllRequestCookies(args.request)
247
+
248
+ if (!match.matches) {
249
+ return {
250
+ match,
251
+ cookies,
252
+ }
253
+ }
254
+
255
+ const parsedResult = await this.parseGraphQLRequestOrGetFromCache(
256
+ args.request,
257
+ )
258
+
259
+ if (typeof parsedResult === 'undefined') {
260
+ return {
261
+ match,
262
+ cookies,
263
+ }
264
+ }
265
+
266
+ return {
267
+ match,
268
+ cookies,
269
+ query: parsedResult.query,
270
+ operationType: parsedResult.operationType,
271
+ operationName: parsedResult.operationName,
272
+ variables: parsedResult.variables,
273
+ }
274
+ }
275
+
276
+ async predicate(args: {
277
+ request: Request
278
+ parsedResult: GraphQLRequestParsedResult
279
+ }): Promise<boolean> {
280
+ if (args.parsedResult.operationType === undefined) {
281
+ return false
282
+ }
283
+
284
+ if (!args.parsedResult.operationName && this.info.operationType !== 'all') {
285
+ const publicUrl = toPublicUrl(args.request.url)
286
+
287
+ devUtils.warn(`\
288
+ Failed to intercept a GraphQL request at "${args.request.method} ${publicUrl}": anonymous GraphQL operations are not supported.
289
+
290
+ Consider naming this operation or using "graphql.operation()" request handler to intercept GraphQL requests regardless of their operation name/type. Read more: https://mswjs.io/docs/api/graphql/#graphqloperationresolver`)
291
+ return false
292
+ }
293
+
294
+ const hasMatchingOperationType =
295
+ this.info.operationType === 'all' ||
296
+ args.parsedResult.operationType === this.info.operationType
297
+
298
+ /**
299
+ * Check if the operation name matches the outgoing GraphQL request.
300
+ * @note Unlike the HTTP handler, the custom predicate functions are invoked
301
+ * during predicate, not parsing, because GraphQL request parsing happens first,
302
+ * and non-GraphQL requests are filtered out automatically.
303
+ */
304
+ const hasMatchingOperationName = await this.matchOperationName({
305
+ request: args.request,
306
+ parsedResult: args.parsedResult,
307
+ })
308
+
309
+ return (
310
+ args.parsedResult.match.matches &&
311
+ hasMatchingOperationType &&
312
+ hasMatchingOperationName
313
+ )
314
+ }
315
+
316
+ public async run(args: {
317
+ request: StrictRequest<any>
318
+ requestId: string
319
+ resolutionContext?: ResponseResolutionContext
320
+ }): Promise<RequestHandlerExecutionResult<GraphQLRequestParsedResult> | null> {
321
+ const result = await super.run(args)
322
+
323
+ if (result?.response == null) {
324
+ return result
325
+ }
326
+
327
+ if (!(kDefaultContentType in result.response)) {
328
+ return result
329
+ }
330
+
331
+ const acceptedMimeTypes = getAllAcceptedMimeTypes(
332
+ args.request.headers.get('accept'),
333
+ )
334
+
335
+ if (acceptedMimeTypes.length === 0) {
336
+ return result
337
+ }
338
+
339
+ const graphqlResponseIndex = acceptedMimeTypes.indexOf(
340
+ 'application/graphql-response+json',
341
+ )
342
+ const jsonIndex = acceptedMimeTypes.indexOf('application/json')
343
+
344
+ /**
345
+ * Use the "application/graphql-response+json" response content type
346
+ * only when the client accepts it AND prefers it over "application/json"
347
+ * (i.e. it appears earlier in the precedence-sorted list, or "application/json"
348
+ * is not listed at all).
349
+ * @see https://github.com/graphql/graphql-over-http/blob/4d1df1fb829ec2dd3ecbf3c6aa4025bd356c270d/spec/GraphQLOverHTTP.md#accept
350
+ */
351
+ if (
352
+ graphqlResponseIndex !== -1 &&
353
+ (jsonIndex === -1 || graphqlResponseIndex <= jsonIndex)
354
+ ) {
355
+ result.response.headers.set(
356
+ 'content-type',
357
+ 'application/graphql-response+json',
358
+ )
359
+ }
360
+
361
+ return result
362
+ }
363
+
364
+ private async matchOperationName(args: {
365
+ request: Request
366
+ parsedResult: GraphQLRequestParsedResult
367
+ }): Promise<boolean> {
368
+ if (typeof this.info.operationName === 'function') {
369
+ const customPredicateResult = await this.info.operationName({
370
+ request: args.request,
371
+ ...this.extendResolverArgs({
372
+ request: args.request,
373
+ parsedResult: args.parsedResult,
374
+ }),
375
+ })
376
+
377
+ /**
378
+ * @note Keep the { matches } signature in case we decide to support path parameters
379
+ * in GraphQL handlers. If that happens, the custom predicate would have to be moved
380
+ * to the parsing phase, the same as we have for the HttpHandler, and the user will
381
+ * have a possibility to return parsed path parameters from the custom predicate.
382
+ */
383
+ return typeof customPredicateResult === 'boolean'
384
+ ? customPredicateResult
385
+ : customPredicateResult.matches
386
+ }
387
+
388
+ if (this.info.operationName instanceof RegExp) {
389
+ return this.info.operationName.test(args.parsedResult.operationName || '')
390
+ }
391
+
392
+ return args.parsedResult.operationName === this.info.operationName
393
+ }
394
+
395
+ protected extendResolverArgs(args: {
396
+ request: Request
397
+ parsedResult: GraphQLRequestParsedResult
398
+ }) {
399
+ return {
400
+ query: args.parsedResult.query || '',
401
+ operationType: args.parsedResult.operationType!,
402
+ operationName: args.parsedResult.operationName || '',
403
+ variables: args.parsedResult.variables || {},
404
+ cookies: args.parsedResult.cookies,
405
+ }
406
+ }
407
+
408
+ async log(args: {
409
+ request: Request
410
+ response: Response
411
+ parsedResult: GraphQLRequestParsedResult
412
+ }) {
413
+ const loggedRequest = await serializeRequest(args.request)
414
+ const loggedResponse = await serializeResponse(args.response)
415
+ const statusColor = getStatusCodeColor(loggedResponse.status)
416
+ const requestInfo = args.parsedResult.operationName
417
+ ? `${args.parsedResult.operationType} ${args.parsedResult.operationName}`
418
+ : `anonymous ${args.parsedResult.operationType}`
419
+
420
+ console.groupCollapsed(
421
+ devUtils.formatMessage(
422
+ `${getTimestamp()} ${requestInfo} (%c${loggedResponse.status} ${
423
+ loggedResponse.statusText
424
+ }%c)`,
425
+ ),
426
+ `color:${statusColor}`,
427
+ 'color:inherit',
428
+ )
429
+ // eslint-disable-next-line no-console
430
+ console.log('Request:', loggedRequest)
431
+ // eslint-disable-next-line no-console
432
+ console.log('Handler:', this)
433
+ // eslint-disable-next-line no-console
434
+ console.log('Response:', loggedResponse)
435
+ console.groupEnd()
436
+ }
437
+ }
@@ -0,0 +1,253 @@
1
+ // @vitest-environment jsdom
2
+ import { createRequestId } from '@mswjs/interceptors'
3
+ import { HttpHandler, HttpRequestResolverExtras } from './HttpHandler'
4
+ import { HttpResponse } from '..'
5
+ import { ResponseResolver } from './RequestHandler'
6
+
7
+ const resolver: ResponseResolver<
8
+ HttpRequestResolverExtras<{ userId: string }>
9
+ > = ({ params }) => {
10
+ return HttpResponse.json({ userId: params.userId })
11
+ }
12
+
13
+ describe('info', () => {
14
+ it('exposes request handler information', () => {
15
+ const handler = new HttpHandler('GET', '/user/:userId', resolver)
16
+
17
+ expect(handler.info.header).toEqual('GET /user/:userId')
18
+ expect(handler.info.method).toEqual('GET')
19
+ expect(handler.info.path).toEqual('/user/:userId')
20
+ expect(handler.isUsed).toBe(false)
21
+ })
22
+ })
23
+
24
+ describe('parse', () => {
25
+ it('parses a URL given a matching request', async () => {
26
+ const handler = new HttpHandler('GET', '/user/:userId', resolver)
27
+ const request = new Request(new URL('/user/abc-123', location.href))
28
+
29
+ expect(await handler.parse({ request })).toEqual({
30
+ match: {
31
+ matches: true,
32
+ params: {
33
+ userId: 'abc-123',
34
+ },
35
+ },
36
+ cookies: {},
37
+ })
38
+ })
39
+
40
+ it('parses a URL and ignores the request method', async () => {
41
+ const handler = new HttpHandler('GET', '/user/:userId', resolver)
42
+ const request = new Request(new URL('/user/def-456', location.href), {
43
+ method: 'POST',
44
+ })
45
+
46
+ expect(await handler.parse({ request })).toEqual({
47
+ match: {
48
+ matches: true,
49
+ params: {
50
+ userId: 'def-456',
51
+ },
52
+ },
53
+ cookies: {},
54
+ })
55
+ })
56
+
57
+ it('returns negative match result given a non-matching request', async () => {
58
+ const handler = new HttpHandler('GET', '/user/:userId', resolver)
59
+ const request = new Request(new URL('/login', location.href))
60
+
61
+ expect(await handler.parse({ request })).toEqual({
62
+ match: {
63
+ matches: false,
64
+ params: {},
65
+ },
66
+ cookies: {},
67
+ })
68
+ })
69
+ })
70
+
71
+ describe('predicate', () => {
72
+ it('returns true given a matching request', async () => {
73
+ const handler = new HttpHandler('POST', '/login', resolver)
74
+ const request = new Request(new URL('/login', location.href), {
75
+ method: 'POST',
76
+ })
77
+
78
+ await expect(
79
+ handler.predicate({
80
+ request,
81
+ parsedResult: await handler.parse({ request }),
82
+ }),
83
+ ).resolves.toBe(true)
84
+ })
85
+
86
+ it('supports RegExp as the request method', async () => {
87
+ const handler = new HttpHandler(/.+/, '/login', resolver)
88
+ const requests = [
89
+ new Request(new URL('/login', location.href)),
90
+ new Request(new URL('/login', location.href), { method: 'POST' }),
91
+ new Request(new URL('/login', location.href), { method: 'DELETE' }),
92
+ ]
93
+
94
+ for (const request of requests) {
95
+ await expect(
96
+ handler.predicate({
97
+ request,
98
+ parsedResult: await handler.parse({ request }),
99
+ }),
100
+ ).resolves.toBe(true)
101
+ }
102
+ })
103
+
104
+ it('returns false given a non-matching request', async () => {
105
+ const handler = new HttpHandler('POST', '/login', resolver)
106
+ const request = new Request(new URL('/user/abc-123', location.href))
107
+
108
+ await expect(
109
+ handler.predicate({
110
+ request,
111
+ parsedResult: await handler.parse({ request }),
112
+ }),
113
+ ).resolves.toBe(false)
114
+ })
115
+
116
+ it('supports custom predicate function', async () => {
117
+ const handler = new HttpHandler(
118
+ 'GET',
119
+ ({ request }) => {
120
+ return new URL(request.url).searchParams.get('a') === '1'
121
+ },
122
+ resolver,
123
+ )
124
+
125
+ {
126
+ const request = new Request(new URL('/login?a=1', location.href))
127
+ await expect(
128
+ handler.predicate({
129
+ request,
130
+ parsedResult: await handler.parse({ request }),
131
+ }),
132
+ ).resolves.toBe(true)
133
+ }
134
+
135
+ {
136
+ const request = new Request(new URL('/login', location.href))
137
+ await expect(
138
+ handler.predicate({
139
+ request,
140
+ parsedResult: await handler.parse({ request }),
141
+ }),
142
+ ).resolves.toBe(false)
143
+ }
144
+ })
145
+ })
146
+
147
+ describe('test', () => {
148
+ it('returns true given a matching request', async () => {
149
+ const handler = new HttpHandler('GET', '/user/:userId', resolver)
150
+ const firstTest = await handler.test({
151
+ request: new Request(new URL('/user/abc-123', location.href)),
152
+ })
153
+ const secondTest = await handler.test({
154
+ request: new Request(new URL('/user/def-456', location.href)),
155
+ })
156
+
157
+ expect(firstTest).toBe(true)
158
+ expect(secondTest).toBe(true)
159
+ })
160
+
161
+ it('returns false given a non-matching request', async () => {
162
+ const handler = new HttpHandler('GET', '/user/:userId', resolver)
163
+ const firstTest = await handler.test({
164
+ request: new Request(new URL('/login', location.href)),
165
+ })
166
+ const secondTest = await handler.test({
167
+ request: new Request(new URL('/user/', location.href)),
168
+ })
169
+ const thirdTest = await handler.test({
170
+ request: new Request(new URL('/user/abc-123/extra', location.href)),
171
+ })
172
+
173
+ expect(firstTest).toBe(false)
174
+ expect(secondTest).toBe(false)
175
+ expect(thirdTest).toBe(false)
176
+ })
177
+ })
178
+
179
+ describe('run', () => {
180
+ it('returns a mocked response given a matching request', async () => {
181
+ const handler = new HttpHandler('GET', '/user/:userId', resolver)
182
+ const request = new Request(new URL('/user/abc-123', location.href))
183
+ const requestId = createRequestId()
184
+ const result = await handler.run({ request, requestId })
185
+
186
+ expect(result!.handler).toEqual(handler)
187
+ expect(result!.parsedResult).toEqual({
188
+ match: {
189
+ matches: true,
190
+ params: {
191
+ userId: 'abc-123',
192
+ },
193
+ },
194
+ cookies: {},
195
+ })
196
+ expect(result!.request.method).toBe('GET')
197
+ expect(result!.request.url).toBe('http://localhost/user/abc-123')
198
+ expect(result!.response?.status).toBe(200)
199
+ expect(result!.response?.statusText).toBe('OK')
200
+ await expect(result?.response?.json()).resolves.toEqual({
201
+ userId: 'abc-123',
202
+ })
203
+ })
204
+
205
+ it('returns null given a non-matching request', async () => {
206
+ const handler = new HttpHandler('POST', '/login', resolver)
207
+ const result = await handler.run({
208
+ request: new Request(new URL('/users', location.href)),
209
+ requestId: createRequestId(),
210
+ })
211
+
212
+ expect(result).toBeNull()
213
+ })
214
+
215
+ it('returns an empty "params" object given request with no URL parameters', async () => {
216
+ const handler = new HttpHandler('GET', '/users', resolver)
217
+ const result = await handler.run({
218
+ request: new Request(new URL('/users', location.href)),
219
+ requestId: createRequestId(),
220
+ })
221
+
222
+ expect(result?.parsedResult?.match?.params).toEqual({})
223
+ })
224
+
225
+ it('exhausts resolver until its generator completes', async () => {
226
+ const handler = new HttpHandler('GET', '/users', function* () {
227
+ let count = 0
228
+
229
+ while (count < 5) {
230
+ count += 1
231
+ yield HttpResponse.text('pending')
232
+ }
233
+
234
+ return HttpResponse.text('complete')
235
+ })
236
+
237
+ const run = async () => {
238
+ const result = await handler.run({
239
+ request: new Request(new URL('/users', location.href)),
240
+ requestId: createRequestId(),
241
+ })
242
+ return result?.response?.text()
243
+ }
244
+
245
+ await expect(run()).resolves.toBe('pending')
246
+ await expect(run()).resolves.toBe('pending')
247
+ await expect(run()).resolves.toBe('pending')
248
+ await expect(run()).resolves.toBe('pending')
249
+ await expect(run()).resolves.toBe('pending')
250
+ await expect(run()).resolves.toBe('complete')
251
+ await expect(run()).resolves.toBe('complete')
252
+ })
253
+ })