msw 2.0.12 → 2.0.13

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 (404) hide show
  1. package/lib/browser/index.d.mts +104 -0
  2. package/lib/browser/index.d.ts +1 -1
  3. package/lib/browser/index.js +1 -0
  4. package/lib/browser/index.js.map +1 -0
  5. package/lib/browser/index.mjs +1 -0
  6. package/lib/browser/index.mjs.map +1 -0
  7. package/lib/core/{GraphQLHandler-da09c680.d.ts → GraphQLHandler-SHlRCcy4.d.ts} +2 -2
  8. package/lib/core/GraphQLHandler-zlmUDnN6.d.mts +97 -0
  9. package/lib/core/HttpResponse.d.mts +2 -0
  10. package/lib/core/HttpResponse.d.ts +1 -1
  11. package/lib/core/HttpResponse.js +1 -0
  12. package/lib/core/HttpResponse.js.map +1 -0
  13. package/lib/core/HttpResponse.mjs +1 -0
  14. package/lib/core/HttpResponse.mjs.map +1 -0
  15. package/lib/core/{RequestHandler-25f9cfd1.d.ts → RequestHandler-rBDJQrEf.d.ts} +1 -1
  16. package/lib/core/RequestHandler-vxZdj6Tw.d.mts +179 -0
  17. package/lib/core/SetupApi.d.mts +26 -0
  18. package/lib/core/SetupApi.d.ts +1 -1
  19. package/lib/core/SetupApi.js +1 -0
  20. package/lib/core/SetupApi.js.map +1 -0
  21. package/lib/core/SetupApi.mjs +1 -0
  22. package/lib/core/SetupApi.mjs.map +1 -0
  23. package/lib/core/bypass.d.mts +16 -0
  24. package/lib/core/bypass.d.ts +1 -1
  25. package/lib/core/bypass.js +1 -0
  26. package/lib/core/bypass.js.map +1 -0
  27. package/lib/core/bypass.mjs +1 -0
  28. package/lib/core/bypass.mjs.map +1 -0
  29. package/lib/core/delay.d.mts +18 -0
  30. package/lib/core/delay.d.ts +1 -1
  31. package/lib/core/delay.js +1 -0
  32. package/lib/core/delay.js.map +1 -0
  33. package/lib/core/delay.mjs +1 -0
  34. package/lib/core/delay.mjs.map +1 -0
  35. package/lib/core/graphql.d.mts +109 -0
  36. package/lib/core/graphql.d.ts +3 -3
  37. package/lib/core/graphql.js +1 -0
  38. package/lib/core/graphql.js.map +1 -0
  39. package/lib/core/graphql.mjs +1 -0
  40. package/lib/core/graphql.mjs.map +1 -0
  41. package/lib/core/handlers/GraphQLHandler.d.mts +5 -0
  42. package/lib/core/handlers/GraphQLHandler.d.ts +2 -2
  43. package/lib/core/handlers/GraphQLHandler.js +3 -2
  44. package/lib/core/handlers/GraphQLHandler.js.map +1 -0
  45. package/lib/core/handlers/GraphQLHandler.mjs +3 -2
  46. package/lib/core/handlers/GraphQLHandler.mjs.map +1 -0
  47. package/lib/core/handlers/HttpHandler.d.mts +62 -0
  48. package/lib/core/handlers/HttpHandler.d.ts +2 -2
  49. package/lib/core/handlers/HttpHandler.js +1 -0
  50. package/lib/core/handlers/HttpHandler.js.map +1 -0
  51. package/lib/core/handlers/HttpHandler.mjs +1 -0
  52. package/lib/core/handlers/HttpHandler.mjs.map +1 -0
  53. package/lib/core/handlers/RequestHandler.d.mts +2 -0
  54. package/lib/core/handlers/RequestHandler.d.ts +1 -1
  55. package/lib/core/handlers/RequestHandler.js +3 -2
  56. package/lib/core/handlers/RequestHandler.js.map +1 -0
  57. package/lib/core/handlers/RequestHandler.mjs +3 -2
  58. package/lib/core/handlers/RequestHandler.mjs.map +1 -0
  59. package/lib/core/http.d.mts +26 -0
  60. package/lib/core/http.d.ts +1 -1
  61. package/lib/core/http.js +1 -0
  62. package/lib/core/http.js.map +1 -0
  63. package/lib/core/http.mjs +1 -0
  64. package/lib/core/http.mjs.map +1 -0
  65. package/lib/core/index.d.mts +18 -0
  66. package/lib/core/index.d.ts +2 -2
  67. package/lib/core/index.js +1 -0
  68. package/lib/core/index.js.map +1 -0
  69. package/lib/core/index.mjs +1 -0
  70. package/lib/core/index.mjs.map +1 -0
  71. package/lib/core/passthrough.d.mts +17 -0
  72. package/lib/core/passthrough.js +1 -0
  73. package/lib/core/passthrough.js.map +1 -0
  74. package/lib/core/passthrough.mjs +1 -0
  75. package/lib/core/passthrough.mjs.map +1 -0
  76. package/lib/core/sharedOptions.d.mts +66 -0
  77. package/lib/core/sharedOptions.d.ts +2 -2
  78. package/lib/core/sharedOptions.js +1 -0
  79. package/lib/core/sharedOptions.js.map +1 -0
  80. package/lib/core/sharedOptions.mjs +1 -0
  81. package/lib/core/sharedOptions.mjs.map +1 -0
  82. package/lib/core/typeUtils.d.mts +7 -0
  83. package/lib/core/typeUtils.d.ts +1 -1
  84. package/lib/core/typeUtils.js +1 -0
  85. package/lib/core/typeUtils.js.map +1 -0
  86. package/lib/core/typeUtils.mjs +1 -0
  87. package/lib/core/typeUtils.mjs.map +1 -0
  88. package/lib/core/utils/HttpResponse/decorators.d.mts +12 -0
  89. package/lib/core/utils/HttpResponse/decorators.d.ts +2 -2
  90. package/lib/core/utils/HttpResponse/decorators.js +1 -0
  91. package/lib/core/utils/HttpResponse/decorators.js.map +1 -0
  92. package/lib/core/utils/HttpResponse/decorators.mjs +1 -0
  93. package/lib/core/utils/HttpResponse/decorators.mjs.map +1 -0
  94. package/lib/core/utils/getResponse.d.mts +2 -0
  95. package/lib/core/utils/getResponse.d.ts +1 -1
  96. package/lib/core/utils/getResponse.js +1 -0
  97. package/lib/core/utils/getResponse.js.map +1 -0
  98. package/lib/core/utils/getResponse.mjs +1 -0
  99. package/lib/core/utils/getResponse.mjs.map +1 -0
  100. package/lib/core/utils/handleRequest.d.mts +37 -0
  101. package/lib/core/utils/handleRequest.d.ts +2 -2
  102. package/lib/core/utils/handleRequest.js +1 -0
  103. package/lib/core/utils/handleRequest.js.map +1 -0
  104. package/lib/core/utils/handleRequest.mjs +1 -0
  105. package/lib/core/utils/handleRequest.mjs.map +1 -0
  106. package/lib/core/utils/internal/Disposable.d.mts +7 -0
  107. package/lib/core/utils/internal/Disposable.d.ts +1 -1
  108. package/lib/core/utils/internal/Disposable.js +1 -0
  109. package/lib/core/utils/internal/Disposable.js.map +1 -0
  110. package/lib/core/utils/internal/Disposable.mjs +1 -0
  111. package/lib/core/utils/internal/Disposable.mjs.map +1 -0
  112. package/lib/core/utils/internal/checkGlobals.d.mts +3 -0
  113. package/lib/core/utils/internal/checkGlobals.js +1 -0
  114. package/lib/core/utils/internal/checkGlobals.js.map +1 -0
  115. package/lib/core/utils/internal/checkGlobals.mjs +1 -0
  116. package/lib/core/utils/internal/checkGlobals.mjs.map +1 -0
  117. package/lib/core/utils/internal/devUtils.d.mts +19 -0
  118. package/lib/core/utils/internal/devUtils.js +1 -0
  119. package/lib/core/utils/internal/devUtils.js.map +1 -0
  120. package/lib/core/utils/internal/devUtils.mjs +1 -0
  121. package/lib/core/utils/internal/devUtils.mjs.map +1 -0
  122. package/lib/core/utils/internal/getCallFrame.d.mts +6 -0
  123. package/lib/core/utils/internal/getCallFrame.js +1 -0
  124. package/lib/core/utils/internal/getCallFrame.js.map +1 -0
  125. package/lib/core/utils/internal/getCallFrame.mjs +1 -0
  126. package/lib/core/utils/internal/getCallFrame.mjs.map +1 -0
  127. package/lib/core/utils/internal/isIterable.d.mts +6 -0
  128. package/lib/core/utils/internal/isIterable.js +1 -0
  129. package/lib/core/utils/internal/isIterable.js.map +1 -0
  130. package/lib/core/utils/internal/isIterable.mjs +1 -0
  131. package/lib/core/utils/internal/isIterable.mjs.map +1 -0
  132. package/lib/core/utils/internal/isObject.d.mts +6 -0
  133. package/lib/core/utils/internal/isObject.js +1 -0
  134. package/lib/core/utils/internal/isObject.js.map +1 -0
  135. package/lib/core/utils/internal/isObject.mjs +1 -0
  136. package/lib/core/utils/internal/isObject.mjs.map +1 -0
  137. package/lib/core/utils/internal/isStringEqual.d.mts +6 -0
  138. package/lib/core/utils/internal/isStringEqual.js +1 -0
  139. package/lib/core/utils/internal/isStringEqual.js.map +1 -0
  140. package/lib/core/utils/internal/isStringEqual.mjs +1 -0
  141. package/lib/core/utils/internal/isStringEqual.mjs.map +1 -0
  142. package/lib/core/utils/internal/jsonParse.d.mts +7 -0
  143. package/lib/core/utils/internal/jsonParse.js +1 -0
  144. package/lib/core/utils/internal/jsonParse.js.map +1 -0
  145. package/lib/core/utils/internal/jsonParse.mjs +1 -0
  146. package/lib/core/utils/internal/jsonParse.mjs.map +1 -0
  147. package/lib/core/utils/internal/mergeRight.d.mts +7 -0
  148. package/lib/core/utils/internal/mergeRight.js +1 -0
  149. package/lib/core/utils/internal/mergeRight.js.map +1 -0
  150. package/lib/core/utils/internal/mergeRight.mjs +1 -0
  151. package/lib/core/utils/internal/mergeRight.mjs.map +1 -0
  152. package/lib/core/utils/internal/parseGraphQLRequest.d.mts +5 -0
  153. package/lib/core/utils/internal/parseGraphQLRequest.d.ts +2 -2
  154. package/lib/core/utils/internal/parseGraphQLRequest.js +1 -0
  155. package/lib/core/utils/internal/parseGraphQLRequest.js.map +1 -0
  156. package/lib/core/utils/internal/parseGraphQLRequest.mjs +1 -0
  157. package/lib/core/utils/internal/parseGraphQLRequest.mjs.map +1 -0
  158. package/lib/core/utils/internal/parseMultipartData.d.mts +10 -0
  159. package/lib/core/utils/internal/parseMultipartData.d.ts +1 -1
  160. package/lib/core/utils/internal/parseMultipartData.js +1 -0
  161. package/lib/core/utils/internal/parseMultipartData.js.map +1 -0
  162. package/lib/core/utils/internal/parseMultipartData.mjs +1 -0
  163. package/lib/core/utils/internal/parseMultipartData.mjs.map +1 -0
  164. package/lib/core/utils/internal/pipeEvents.d.mts +8 -0
  165. package/lib/core/utils/internal/pipeEvents.js +1 -0
  166. package/lib/core/utils/internal/pipeEvents.js.map +1 -0
  167. package/lib/core/utils/internal/pipeEvents.mjs +1 -0
  168. package/lib/core/utils/internal/pipeEvents.mjs.map +1 -0
  169. package/lib/core/utils/internal/requestHandlerUtils.d.mts +8 -0
  170. package/lib/core/utils/internal/requestHandlerUtils.d.ts +1 -1
  171. package/lib/core/utils/internal/requestHandlerUtils.js +1 -0
  172. package/lib/core/utils/internal/requestHandlerUtils.js.map +1 -0
  173. package/lib/core/utils/internal/requestHandlerUtils.mjs +1 -0
  174. package/lib/core/utils/internal/requestHandlerUtils.mjs.map +1 -0
  175. package/lib/core/utils/internal/toReadonlyArray.d.mts +6 -0
  176. package/lib/core/utils/internal/toReadonlyArray.js +1 -0
  177. package/lib/core/utils/internal/toReadonlyArray.js.map +1 -0
  178. package/lib/core/utils/internal/toReadonlyArray.mjs +1 -0
  179. package/lib/core/utils/internal/toReadonlyArray.mjs.map +1 -0
  180. package/lib/core/utils/internal/tryCatch.d.mts +3 -0
  181. package/lib/core/utils/internal/tryCatch.js +1 -0
  182. package/lib/core/utils/internal/tryCatch.js.map +1 -0
  183. package/lib/core/utils/internal/tryCatch.mjs +1 -0
  184. package/lib/core/utils/internal/tryCatch.mjs.map +1 -0
  185. package/lib/core/utils/internal/uuidv4.d.mts +3 -0
  186. package/lib/core/utils/internal/uuidv4.js +1 -0
  187. package/lib/core/utils/internal/uuidv4.js.map +1 -0
  188. package/lib/core/utils/internal/uuidv4.mjs +1 -0
  189. package/lib/core/utils/internal/uuidv4.mjs.map +1 -0
  190. package/lib/core/utils/logging/getStatusCodeColor.d.mts +11 -0
  191. package/lib/core/utils/logging/getStatusCodeColor.js +1 -0
  192. package/lib/core/utils/logging/getStatusCodeColor.js.map +1 -0
  193. package/lib/core/utils/logging/getStatusCodeColor.mjs +1 -0
  194. package/lib/core/utils/logging/getStatusCodeColor.mjs.map +1 -0
  195. package/lib/core/utils/logging/getTimestamp.d.mts +6 -0
  196. package/lib/core/utils/logging/getTimestamp.js +1 -0
  197. package/lib/core/utils/logging/getTimestamp.js.map +1 -0
  198. package/lib/core/utils/logging/getTimestamp.mjs +1 -0
  199. package/lib/core/utils/logging/getTimestamp.mjs.map +1 -0
  200. package/lib/core/utils/logging/serializeRequest.d.mts +12 -0
  201. package/lib/core/utils/logging/serializeRequest.d.ts +1 -1
  202. package/lib/core/utils/logging/serializeRequest.js +1 -0
  203. package/lib/core/utils/logging/serializeRequest.js.map +1 -0
  204. package/lib/core/utils/logging/serializeRequest.mjs +1 -0
  205. package/lib/core/utils/logging/serializeRequest.mjs.map +1 -0
  206. package/lib/core/utils/logging/serializeResponse.d.mts +9 -0
  207. package/lib/core/utils/logging/serializeResponse.d.ts +1 -1
  208. package/lib/core/utils/logging/serializeResponse.js +1 -0
  209. package/lib/core/utils/logging/serializeResponse.js.map +1 -0
  210. package/lib/core/utils/logging/serializeResponse.mjs +1 -0
  211. package/lib/core/utils/logging/serializeResponse.mjs.map +1 -0
  212. package/lib/core/utils/matching/matchRequestUrl.d.mts +19 -0
  213. package/lib/core/utils/matching/matchRequestUrl.d.ts +1 -1
  214. package/lib/core/utils/matching/matchRequestUrl.js +1 -0
  215. package/lib/core/utils/matching/matchRequestUrl.js.map +1 -0
  216. package/lib/core/utils/matching/matchRequestUrl.mjs +1 -0
  217. package/lib/core/utils/matching/matchRequestUrl.mjs.map +1 -0
  218. package/lib/core/utils/matching/normalizePath.d.mts +12 -0
  219. package/lib/core/utils/matching/normalizePath.js +1 -0
  220. package/lib/core/utils/matching/normalizePath.js.map +1 -0
  221. package/lib/core/utils/matching/normalizePath.mjs +1 -0
  222. package/lib/core/utils/matching/normalizePath.mjs.map +1 -0
  223. package/lib/core/utils/request/getPublicUrlFromRequest.d.mts +7 -0
  224. package/lib/core/utils/request/getPublicUrlFromRequest.js +1 -0
  225. package/lib/core/utils/request/getPublicUrlFromRequest.js.map +1 -0
  226. package/lib/core/utils/request/getPublicUrlFromRequest.mjs +1 -0
  227. package/lib/core/utils/request/getPublicUrlFromRequest.mjs.map +1 -0
  228. package/lib/core/utils/request/getRequestCookies.d.mts +8 -0
  229. package/lib/core/utils/request/getRequestCookies.js +1 -0
  230. package/lib/core/utils/request/getRequestCookies.js.map +1 -0
  231. package/lib/core/utils/request/getRequestCookies.mjs +1 -0
  232. package/lib/core/utils/request/getRequestCookies.mjs.map +1 -0
  233. package/lib/core/utils/request/onUnhandledRequest.d.mts +12 -0
  234. package/lib/core/utils/request/onUnhandledRequest.d.ts +2 -2
  235. package/lib/core/utils/request/onUnhandledRequest.js +1 -0
  236. package/lib/core/utils/request/onUnhandledRequest.js.map +1 -0
  237. package/lib/core/utils/request/onUnhandledRequest.mjs +1 -0
  238. package/lib/core/utils/request/onUnhandledRequest.mjs.map +1 -0
  239. package/lib/core/utils/request/readResponseCookies.d.mts +3 -0
  240. package/lib/core/utils/request/readResponseCookies.js +1 -0
  241. package/lib/core/utils/request/readResponseCookies.js.map +1 -0
  242. package/lib/core/utils/request/readResponseCookies.mjs +1 -0
  243. package/lib/core/utils/request/readResponseCookies.mjs.map +1 -0
  244. package/lib/core/utils/toResponseInit.d.mts +3 -0
  245. package/lib/core/utils/toResponseInit.js +1 -0
  246. package/lib/core/utils/toResponseInit.js.map +1 -0
  247. package/lib/core/utils/toResponseInit.mjs +1 -0
  248. package/lib/core/utils/toResponseInit.mjs.map +1 -0
  249. package/lib/core/utils/url/cleanUrl.d.mts +7 -0
  250. package/lib/core/utils/url/cleanUrl.js +1 -0
  251. package/lib/core/utils/url/cleanUrl.js.map +1 -0
  252. package/lib/core/utils/url/cleanUrl.mjs +1 -0
  253. package/lib/core/utils/url/cleanUrl.mjs.map +1 -0
  254. package/lib/core/utils/url/getAbsoluteUrl.d.mts +6 -0
  255. package/lib/core/utils/url/getAbsoluteUrl.js +1 -0
  256. package/lib/core/utils/url/getAbsoluteUrl.js.map +1 -0
  257. package/lib/core/utils/url/getAbsoluteUrl.mjs +1 -0
  258. package/lib/core/utils/url/getAbsoluteUrl.mjs.map +1 -0
  259. package/lib/core/utils/url/isAbsoluteUrl.d.mts +6 -0
  260. package/lib/core/utils/url/isAbsoluteUrl.js +1 -0
  261. package/lib/core/utils/url/isAbsoluteUrl.js.map +1 -0
  262. package/lib/core/utils/url/isAbsoluteUrl.mjs +1 -0
  263. package/lib/core/utils/url/isAbsoluteUrl.mjs.map +1 -0
  264. package/lib/iife/index.js +20 -19
  265. package/lib/iife/index.js.map +1 -0
  266. package/lib/mockServiceWorker.js +1 -1
  267. package/lib/native/index.d.mts +75 -0
  268. package/lib/native/index.js +1 -0
  269. package/lib/native/index.js.map +1 -0
  270. package/lib/native/index.mjs +1 -0
  271. package/lib/native/index.mjs.map +1 -0
  272. package/lib/node/index.d.mts +75 -0
  273. package/lib/node/index.d.ts +1 -1
  274. package/lib/node/index.js +1 -0
  275. package/lib/node/index.js.map +1 -0
  276. package/lib/node/index.mjs +1 -0
  277. package/lib/node/index.mjs.map +1 -0
  278. package/package.json +5 -4
  279. package/src/browser/global.browser.d.ts +1 -0
  280. package/src/browser/index.ts +3 -0
  281. package/src/browser/setupWorker/glossary.ts +259 -0
  282. package/src/browser/setupWorker/setupWorker.node.test.ts +10 -0
  283. package/src/browser/setupWorker/setupWorker.ts +199 -0
  284. package/src/browser/setupWorker/start/createFallbackRequestListener.ts +67 -0
  285. package/src/browser/setupWorker/start/createFallbackStart.ts +21 -0
  286. package/src/browser/setupWorker/start/createRequestListener.ts +127 -0
  287. package/src/browser/setupWorker/start/createResponseListener.ts +58 -0
  288. package/src/browser/setupWorker/start/createStartHandler.ts +143 -0
  289. package/src/browser/setupWorker/start/utils/createMessageChannel.ts +32 -0
  290. package/src/browser/setupWorker/start/utils/enableMocking.ts +32 -0
  291. package/src/browser/setupWorker/start/utils/getWorkerByRegistration.ts +25 -0
  292. package/src/browser/setupWorker/start/utils/getWorkerInstance.ts +94 -0
  293. package/src/browser/setupWorker/start/utils/prepareStartHandler.test.ts +59 -0
  294. package/src/browser/setupWorker/start/utils/prepareStartHandler.ts +44 -0
  295. package/src/browser/setupWorker/start/utils/printStartMessage.test.ts +84 -0
  296. package/src/browser/setupWorker/start/utils/printStartMessage.ts +40 -0
  297. package/src/browser/setupWorker/start/utils/validateWorkerScope.ts +18 -0
  298. package/src/browser/setupWorker/stop/createFallbackStop.ts +11 -0
  299. package/src/browser/setupWorker/stop/createStop.ts +29 -0
  300. package/src/browser/setupWorker/stop/utils/printStopMessage.test.ts +26 -0
  301. package/src/browser/setupWorker/stop/utils/printStopMessage.ts +12 -0
  302. package/src/browser/tsconfig.browser.build.json +6 -0
  303. package/src/browser/tsconfig.browser.json +9 -0
  304. package/src/browser/utils/deferNetworkRequestsUntil.test.ts +48 -0
  305. package/src/browser/utils/deferNetworkRequestsUntil.ts +29 -0
  306. package/src/browser/utils/getAbsoluteWorkerUrl.test.ts +31 -0
  307. package/src/browser/utils/getAbsoluteWorkerUrl.ts +7 -0
  308. package/src/browser/utils/parseWorkerRequest.ts +15 -0
  309. package/src/browser/utils/pruneGetRequestBody.test.ts +53 -0
  310. package/src/browser/utils/pruneGetRequestBody.ts +21 -0
  311. package/src/browser/utils/requestIntegrityCheck.ts +23 -0
  312. package/src/browser/utils/supportsReadableStreamTransfer.ts +17 -0
  313. package/src/core/HttpResponse.test.ts +200 -0
  314. package/src/core/HttpResponse.ts +134 -0
  315. package/src/core/SetupApi.ts +95 -0
  316. package/src/core/bypass.test.ts +47 -0
  317. package/src/core/bypass.ts +36 -0
  318. package/src/core/delay.ts +70 -0
  319. package/src/core/graphql.test.ts +11 -0
  320. package/src/core/graphql.ts +138 -0
  321. package/src/core/handlers/GraphQLHandler.test.ts +820 -0
  322. package/src/core/handlers/GraphQLHandler.ts +263 -0
  323. package/src/core/handlers/HttpHandler.test.ts +218 -0
  324. package/src/core/handlers/HttpHandler.ts +169 -0
  325. package/src/core/handlers/RequestHandler.ts +338 -0
  326. package/src/core/http.test.ts +15 -0
  327. package/src/core/http.ts +51 -0
  328. package/src/core/index.ts +56 -0
  329. package/src/core/passthrough.test.ts +13 -0
  330. package/src/core/passthrough.ts +23 -0
  331. package/src/core/sharedOptions.ts +66 -0
  332. package/src/core/typeUtils.ts +20 -0
  333. package/src/core/utils/HttpResponse/decorators.ts +56 -0
  334. package/src/core/utils/getResponse.ts +55 -0
  335. package/src/core/utils/handleRequest.test.ts +554 -0
  336. package/src/core/utils/handleRequest.ts +132 -0
  337. package/src/core/utils/internal/Disposable.ts +9 -0
  338. package/src/core/utils/internal/checkGlobals.ts +17 -0
  339. package/src/core/utils/internal/devUtils.ts +31 -0
  340. package/src/core/utils/internal/getCallFrame.test.ts +154 -0
  341. package/src/core/utils/internal/getCallFrame.ts +35 -0
  342. package/src/core/utils/internal/isIterable.test.ts +23 -0
  343. package/src/core/utils/internal/isIterable.ts +12 -0
  344. package/src/core/utils/internal/isObject.test.ts +20 -0
  345. package/src/core/utils/internal/isObject.ts +6 -0
  346. package/src/core/utils/internal/isStringEqual.test.ts +45 -0
  347. package/src/core/utils/internal/isStringEqual.ts +6 -0
  348. package/src/core/utils/internal/jsonParse.test.ts +13 -0
  349. package/src/core/utils/internal/jsonParse.ts +13 -0
  350. package/src/core/utils/internal/mergeRight.test.ts +43 -0
  351. package/src/core/utils/internal/mergeRight.ts +27 -0
  352. package/src/core/utils/internal/parseGraphQLRequest.test.ts +99 -0
  353. package/src/core/utils/internal/parseGraphQLRequest.ts +205 -0
  354. package/src/core/utils/internal/parseMultipartData.test.ts +76 -0
  355. package/src/core/utils/internal/parseMultipartData.ts +104 -0
  356. package/src/core/utils/internal/pipeEvents.test.ts +14 -0
  357. package/src/core/utils/internal/pipeEvents.ts +25 -0
  358. package/src/core/utils/internal/requestHandlerUtils.ts +21 -0
  359. package/src/core/utils/internal/toReadonlyArray.test.ts +30 -0
  360. package/src/core/utils/internal/toReadonlyArray.ts +8 -0
  361. package/src/core/utils/internal/tryCatch.test.ts +29 -0
  362. package/src/core/utils/internal/tryCatch.ts +11 -0
  363. package/src/core/utils/internal/uuidv4.ts +3 -0
  364. package/src/core/utils/logging/getStatusCodeColor.test.ts +22 -0
  365. package/src/core/utils/logging/getStatusCodeColor.ts +20 -0
  366. package/src/core/utils/logging/getTimestamp.test.ts +18 -0
  367. package/src/core/utils/logging/getTimestamp.ts +12 -0
  368. package/src/core/utils/logging/serializeRequest.test.ts +23 -0
  369. package/src/core/utils/logging/serializeRequest.ts +23 -0
  370. package/src/core/utils/logging/serializeResponse.test.ts +77 -0
  371. package/src/core/utils/logging/serializeResponse.ts +31 -0
  372. package/src/core/utils/matching/matchRequestUrl.test.ts +114 -0
  373. package/src/core/utils/matching/matchRequestUrl.ts +73 -0
  374. package/src/core/utils/matching/normalizePath.node.test.ts +44 -0
  375. package/src/core/utils/matching/normalizePath.test.ts +50 -0
  376. package/src/core/utils/matching/normalizePath.ts +21 -0
  377. package/src/core/utils/request/getPublicUrlFromRequest.test.ts +26 -0
  378. package/src/core/utils/request/getPublicUrlFromRequest.ts +15 -0
  379. package/src/core/utils/request/getRequestCookies.node.test.ts +29 -0
  380. package/src/core/utils/request/getRequestCookies.test.ts +64 -0
  381. package/src/core/utils/request/getRequestCookies.ts +75 -0
  382. package/src/core/utils/request/onUnhandledRequest.test.ts +215 -0
  383. package/src/core/utils/request/onUnhandledRequest.ts +247 -0
  384. package/src/core/utils/request/readResponseCookies.ts +9 -0
  385. package/src/core/utils/toResponseInit.ts +7 -0
  386. package/src/core/utils/url/cleanUrl.test.ts +17 -0
  387. package/src/core/utils/url/cleanUrl.ts +12 -0
  388. package/src/core/utils/url/getAbsoluteUrl.node.test.ts +19 -0
  389. package/src/core/utils/url/getAbsoluteUrl.test.ts +29 -0
  390. package/src/core/utils/url/getAbsoluteUrl.ts +26 -0
  391. package/src/core/utils/url/isAbsoluteUrl.test.ts +32 -0
  392. package/src/core/utils/url/isAbsoluteUrl.ts +6 -0
  393. package/src/iife/index.ts +2 -0
  394. package/src/mockServiceWorker.js +287 -0
  395. package/src/native/index.ts +17 -0
  396. package/src/node/SetupServerApi.ts +113 -0
  397. package/src/node/glossary.ts +62 -0
  398. package/src/node/index.ts +3 -0
  399. package/src/node/setupServer.ts +21 -0
  400. package/src/node/utils/isNodeExceptionLike.ts +14 -0
  401. package/src/tsconfig.core.build.json +6 -0
  402. package/src/tsconfig.node.build.json +6 -0
  403. package/src/tsconfig.node.json +8 -0
  404. package/src/tsconfig.src.json +15 -0
@@ -0,0 +1,820 @@
1
+ /**
2
+ * @vitest-environment jsdom
3
+ */
4
+ import { encodeBuffer } from '@mswjs/interceptors'
5
+ import { OperationTypeNode, parse } from 'graphql'
6
+ import {
7
+ GraphQLHandler,
8
+ GraphQLRequestBody,
9
+ GraphQLResolverExtras,
10
+ isDocumentNode,
11
+ } from './GraphQLHandler'
12
+ import { HttpResponse } from '../HttpResponse'
13
+ import { ResponseResolver } from './RequestHandler'
14
+
15
+ const resolver: ResponseResolver<GraphQLResolverExtras<{ userId: string }>> = ({
16
+ variables,
17
+ }) => {
18
+ return HttpResponse.json({
19
+ data: {
20
+ user: {
21
+ id: variables.userId,
22
+ },
23
+ },
24
+ })
25
+ }
26
+
27
+ function createGetGraphQLRequest(
28
+ body: GraphQLRequestBody<any>,
29
+ graphqlEndpoint = 'https://example.com',
30
+ ) {
31
+ const requestUrl = new URL(graphqlEndpoint)
32
+ requestUrl.searchParams.set('query', body?.query)
33
+ requestUrl.searchParams.set('variables', JSON.stringify(body?.variables))
34
+ return new Request(requestUrl)
35
+ }
36
+
37
+ function createPostGraphQLRequest(
38
+ body: GraphQLRequestBody<any>,
39
+ graphqlEndpoint = 'https://example.com',
40
+ ) {
41
+ return new Request(new URL(graphqlEndpoint), {
42
+ method: 'POST',
43
+ headers: new Headers({ 'Content-Type': 'application/json' }),
44
+ body: encodeBuffer(JSON.stringify(body)),
45
+ })
46
+ }
47
+
48
+ const GET_USER = `
49
+ query GetUser {
50
+ user {
51
+ id
52
+ }
53
+ }
54
+ `
55
+
56
+ const LOGIN = `
57
+ mutation Login {
58
+ user {
59
+ id
60
+ }
61
+ }
62
+ `
63
+
64
+ describe('info', () => {
65
+ test('exposes request handler information for query', () => {
66
+ const handler = new GraphQLHandler(
67
+ OperationTypeNode.QUERY,
68
+ 'GetUser',
69
+ '*',
70
+ resolver,
71
+ )
72
+
73
+ expect(handler.info.header).toEqual('query GetUser (origin: *)')
74
+ expect(handler.info.operationType).toEqual('query')
75
+ expect(handler.info.operationName).toEqual('GetUser')
76
+ })
77
+
78
+ test('exposes request handler information for mutation', () => {
79
+ const handler = new GraphQLHandler(
80
+ OperationTypeNode.MUTATION,
81
+ 'Login',
82
+ '*',
83
+ resolver,
84
+ )
85
+
86
+ expect(handler.info.header).toEqual('mutation Login (origin: *)')
87
+ expect(handler.info.operationType).toEqual('mutation')
88
+ expect(handler.info.operationName).toEqual('Login')
89
+ })
90
+
91
+ test('parses a query operation name from a given DocumentNode', () => {
92
+ const node = parse(`
93
+ query GetUser {
94
+ user {
95
+ firstName
96
+ }
97
+ }
98
+ `)
99
+
100
+ const handler = new GraphQLHandler(
101
+ OperationTypeNode.QUERY,
102
+ node,
103
+ '*',
104
+ resolver,
105
+ )
106
+
107
+ expect(handler.info).toHaveProperty('header', 'query GetUser (origin: *)')
108
+ expect(handler.info).toHaveProperty('operationType', 'query')
109
+ expect(handler.info).toHaveProperty('operationName', 'GetUser')
110
+ })
111
+
112
+ test('parses a mutation operation name from a given DocumentNode', () => {
113
+ const node = parse(`
114
+ mutation Login {
115
+ user {
116
+ id
117
+ }
118
+ }
119
+ `)
120
+ const handler = new GraphQLHandler(
121
+ OperationTypeNode.MUTATION,
122
+ node,
123
+ '*',
124
+ resolver,
125
+ )
126
+
127
+ expect(handler.info).toHaveProperty('header', 'mutation Login (origin: *)')
128
+ expect(handler.info).toHaveProperty('operationType', 'mutation')
129
+ expect(handler.info).toHaveProperty('operationName', 'Login')
130
+ })
131
+
132
+ test('throws an exception given a DocumentNode with a mismatched operation type', () => {
133
+ const node = parse(`
134
+ mutation CreateUser {
135
+ user {
136
+ firstName
137
+ }
138
+ }
139
+ `)
140
+
141
+ expect(
142
+ () => new GraphQLHandler(OperationTypeNode.QUERY, node, '*', resolver),
143
+ ).toThrow(
144
+ 'Failed to create a GraphQL handler: provided a DocumentNode with a mismatched operation type (expected "query", but got "mutation").',
145
+ )
146
+ })
147
+ })
148
+
149
+ describe('parse', () => {
150
+ describe('query', () => {
151
+ test('parses a query without variables (GET)', async () => {
152
+ const handler = new GraphQLHandler(
153
+ OperationTypeNode.QUERY,
154
+ 'GetUser',
155
+ '*',
156
+ resolver,
157
+ )
158
+ const request = createGetGraphQLRequest({
159
+ query: GET_USER,
160
+ })
161
+
162
+ expect(await handler.parse({ request })).toEqual({
163
+ match: {
164
+ matches: true,
165
+ params: {
166
+ '0': 'https://example.com/',
167
+ },
168
+ },
169
+ operationType: 'query',
170
+ operationName: 'GetUser',
171
+ query: GET_USER,
172
+ variables: undefined,
173
+ })
174
+ })
175
+
176
+ test('parses a query with variables (GET)', async () => {
177
+ const handler = new GraphQLHandler(
178
+ OperationTypeNode.QUERY,
179
+ 'GetUser',
180
+ '*',
181
+ resolver,
182
+ )
183
+ const request = createGetGraphQLRequest({
184
+ query: GET_USER,
185
+ variables: {
186
+ userId: 'abc-123',
187
+ },
188
+ })
189
+
190
+ expect(await handler.parse({ request })).toEqual({
191
+ match: {
192
+ matches: true,
193
+ params: {
194
+ '0': 'https://example.com/',
195
+ },
196
+ },
197
+ operationType: 'query',
198
+ operationName: 'GetUser',
199
+ query: GET_USER,
200
+ variables: {
201
+ userId: 'abc-123',
202
+ },
203
+ })
204
+ })
205
+
206
+ test('parses a query without variables (POST)', async () => {
207
+ const handler = new GraphQLHandler(
208
+ OperationTypeNode.QUERY,
209
+ 'GetUser',
210
+ '*',
211
+ resolver,
212
+ )
213
+ const request = createPostGraphQLRequest({
214
+ query: GET_USER,
215
+ })
216
+
217
+ expect(await handler.parse({ request })).toEqual({
218
+ match: {
219
+ matches: true,
220
+ params: {
221
+ '0': 'https://example.com/',
222
+ },
223
+ },
224
+ operationType: 'query',
225
+ operationName: 'GetUser',
226
+ query: GET_USER,
227
+ variables: undefined,
228
+ })
229
+ })
230
+
231
+ test('parses a query with variables (POST)', async () => {
232
+ const handler = new GraphQLHandler(
233
+ OperationTypeNode.QUERY,
234
+ 'GetUser',
235
+ '*',
236
+ resolver,
237
+ )
238
+ const request = createPostGraphQLRequest({
239
+ query: GET_USER,
240
+ variables: {
241
+ userId: 'abc-123',
242
+ },
243
+ })
244
+
245
+ expect(await handler.parse({ request })).toEqual({
246
+ match: {
247
+ matches: true,
248
+ params: {
249
+ '0': 'https://example.com/',
250
+ },
251
+ },
252
+ operationType: 'query',
253
+ operationName: 'GetUser',
254
+ query: GET_USER,
255
+ variables: {
256
+ userId: 'abc-123',
257
+ },
258
+ })
259
+ })
260
+ })
261
+
262
+ describe('mutation', () => {
263
+ test('parses a mutation without variables (GET)', async () => {
264
+ const handler = new GraphQLHandler(
265
+ OperationTypeNode.MUTATION,
266
+ 'GetUser',
267
+ '*',
268
+ resolver,
269
+ )
270
+ const request = createGetGraphQLRequest({
271
+ query: LOGIN,
272
+ })
273
+
274
+ expect(await handler.parse({ request })).toEqual({
275
+ match: {
276
+ matches: true,
277
+ params: {
278
+ '0': 'https://example.com/',
279
+ },
280
+ },
281
+ operationType: 'mutation',
282
+ operationName: 'Login',
283
+ query: LOGIN,
284
+ variables: undefined,
285
+ })
286
+ })
287
+
288
+ test('parses a mutation with variables (GET)', async () => {
289
+ const handler = new GraphQLHandler(
290
+ OperationTypeNode.MUTATION,
291
+ 'GetUser',
292
+ '*',
293
+ resolver,
294
+ )
295
+ const request = createGetGraphQLRequest({
296
+ query: LOGIN,
297
+ variables: {
298
+ userId: 'abc-123',
299
+ },
300
+ })
301
+
302
+ expect(await handler.parse({ request })).toEqual({
303
+ match: {
304
+ matches: true,
305
+ params: {
306
+ '0': 'https://example.com/',
307
+ },
308
+ },
309
+ operationType: 'mutation',
310
+ operationName: 'Login',
311
+ query: LOGIN,
312
+ variables: {
313
+ userId: 'abc-123',
314
+ },
315
+ })
316
+ })
317
+
318
+ test('parses a mutation without variables (POST)', async () => {
319
+ const handler = new GraphQLHandler(
320
+ OperationTypeNode.MUTATION,
321
+ 'GetUser',
322
+ '*',
323
+ resolver,
324
+ )
325
+ const request = createPostGraphQLRequest({
326
+ query: LOGIN,
327
+ })
328
+
329
+ expect(await handler.parse({ request })).toEqual({
330
+ match: {
331
+ matches: true,
332
+ params: {
333
+ '0': 'https://example.com/',
334
+ },
335
+ },
336
+ operationType: 'mutation',
337
+ operationName: 'Login',
338
+ query: LOGIN,
339
+ variables: undefined,
340
+ })
341
+ })
342
+
343
+ test('parses a mutation with variables (POST)', async () => {
344
+ const handler = new GraphQLHandler(
345
+ OperationTypeNode.MUTATION,
346
+ 'GetUser',
347
+ '*',
348
+ resolver,
349
+ )
350
+ const request = createPostGraphQLRequest({
351
+ query: LOGIN,
352
+ variables: {
353
+ userId: 'abc-123',
354
+ },
355
+ })
356
+
357
+ expect(await handler.parse({ request })).toEqual({
358
+ match: {
359
+ matches: true,
360
+ params: {
361
+ '0': 'https://example.com/',
362
+ },
363
+ },
364
+ operationType: 'mutation',
365
+ operationName: 'Login',
366
+ query: LOGIN,
367
+ variables: {
368
+ userId: 'abc-123',
369
+ },
370
+ })
371
+ })
372
+ })
373
+
374
+ describe('with endpoint configuration', () => {
375
+ test('parses the request and parses grapqhl properties from it when the graphql.link endpoint matches', async () => {
376
+ const handler = new GraphQLHandler(
377
+ OperationTypeNode.QUERY,
378
+ 'GetUser',
379
+ 'https://mswjs.com/graphql',
380
+ resolver,
381
+ )
382
+
383
+ await expect(
384
+ handler.parse({
385
+ request: createGetGraphQLRequest(
386
+ {
387
+ query: GET_USER,
388
+ variables: {
389
+ userId: 'abc-123',
390
+ },
391
+ },
392
+ 'https://mswjs.com/graphql',
393
+ ),
394
+ }),
395
+ ).resolves.toEqual({
396
+ match: {
397
+ matches: true,
398
+ params: {},
399
+ },
400
+ operationType: 'query',
401
+ operationName: 'GetUser',
402
+ query: GET_USER,
403
+ variables: {
404
+ userId: 'abc-123',
405
+ },
406
+ })
407
+
408
+ await expect(
409
+ handler.parse({
410
+ request: createPostGraphQLRequest(
411
+ {
412
+ query: GET_USER,
413
+ variables: {
414
+ userId: 'abc-123',
415
+ },
416
+ },
417
+ 'https://mswjs.com/graphql',
418
+ ),
419
+ }),
420
+ ).resolves.toEqual({
421
+ match: {
422
+ matches: true,
423
+ params: {},
424
+ },
425
+ operationType: 'query',
426
+ operationName: 'GetUser',
427
+ query: GET_USER,
428
+ variables: {
429
+ userId: 'abc-123',
430
+ },
431
+ })
432
+ })
433
+
434
+ test('parses a request but does not parse graphql properties from it graphql.link hostname does not match', async () => {
435
+ const handler = new GraphQLHandler(
436
+ OperationTypeNode.QUERY,
437
+ 'GetUser',
438
+ 'https://mswjs.com/graphql',
439
+ resolver,
440
+ )
441
+
442
+ await expect(
443
+ handler.parse({
444
+ request: createGetGraphQLRequest(
445
+ {
446
+ query: GET_USER,
447
+ variables: {
448
+ userId: 'abc-123',
449
+ },
450
+ },
451
+ 'https://example.com/graphql',
452
+ ),
453
+ }),
454
+ ).resolves.toEqual({
455
+ match: {
456
+ matches: false,
457
+ params: {},
458
+ },
459
+ })
460
+
461
+ await expect(
462
+ handler.parse({
463
+ request: createPostGraphQLRequest(
464
+ {
465
+ query: GET_USER,
466
+ variables: {
467
+ userId: 'abc-123',
468
+ },
469
+ },
470
+ 'https://example.com/graphql',
471
+ ),
472
+ }),
473
+ ).resolves.toEqual({
474
+ match: {
475
+ matches: false,
476
+ params: {},
477
+ },
478
+ })
479
+ })
480
+
481
+ test('parses a request but does not parse graphql properties from it graphql.link pathname does not match', async () => {
482
+ const handler = new GraphQLHandler(
483
+ OperationTypeNode.QUERY,
484
+ 'GetUser',
485
+ 'https://mswjs.com/graphql',
486
+ resolver,
487
+ )
488
+
489
+ await expect(
490
+ handler.parse({
491
+ request: createGetGraphQLRequest(
492
+ {
493
+ query: GET_USER,
494
+ variables: {
495
+ userId: 'abc-123',
496
+ },
497
+ },
498
+ 'https://mswjs.com/some/other/endpoint',
499
+ ),
500
+ }),
501
+ ).resolves.toEqual({
502
+ match: {
503
+ matches: false,
504
+ params: {},
505
+ },
506
+ })
507
+
508
+ await expect(
509
+ handler.parse({
510
+ request: createPostGraphQLRequest(
511
+ {
512
+ query: GET_USER,
513
+ variables: {
514
+ userId: 'abc-123',
515
+ },
516
+ },
517
+ 'https://mswjs.com/some/other/endpoint',
518
+ ),
519
+ }),
520
+ ).resolves.toEqual({
521
+ match: {
522
+ matches: false,
523
+ params: {},
524
+ },
525
+ })
526
+ })
527
+ })
528
+ })
529
+
530
+ describe('predicate', () => {
531
+ test('respects operation type', async () => {
532
+ const handler = new GraphQLHandler(
533
+ OperationTypeNode.QUERY,
534
+ 'GetUser',
535
+ '*',
536
+ resolver,
537
+ )
538
+ const request = createPostGraphQLRequest({
539
+ query: GET_USER,
540
+ })
541
+ const alienRequest = createPostGraphQLRequest({
542
+ query: LOGIN,
543
+ })
544
+
545
+ expect(
546
+ handler.predicate({
547
+ request,
548
+ parsedResult: await handler.parse({ request }),
549
+ }),
550
+ ).toBe(true)
551
+ expect(
552
+ handler.predicate({
553
+ request: alienRequest,
554
+ parsedResult: await handler.parse({ request: alienRequest }),
555
+ }),
556
+ ).toBe(false)
557
+ })
558
+
559
+ test('respects operation name', async () => {
560
+ const handler = new GraphQLHandler(
561
+ OperationTypeNode.QUERY,
562
+ 'GetUser',
563
+ '*',
564
+ resolver,
565
+ )
566
+ const request = createPostGraphQLRequest({
567
+ query: GET_USER,
568
+ })
569
+ const alienRequest = createPostGraphQLRequest({
570
+ query: `
571
+ query GetAllUsers {
572
+ user {
573
+ id
574
+ }
575
+ }
576
+ `,
577
+ })
578
+
579
+ expect(
580
+ handler.predicate({
581
+ request,
582
+ parsedResult: await handler.parse({ request }),
583
+ }),
584
+ ).toBe(true)
585
+ expect(
586
+ handler.predicate({
587
+ request: alienRequest,
588
+ parsedResult: await handler.parse({ request: alienRequest }),
589
+ }),
590
+ ).toBe(false)
591
+ })
592
+
593
+ test('allows anonymous GraphQL opertaions when using "all" expected operation type', async () => {
594
+ const handler = new GraphQLHandler('all', new RegExp('.*'), '*', resolver)
595
+ const request = createPostGraphQLRequest({
596
+ query: `
597
+ query {
598
+ anonymousQuery {
599
+ query
600
+ variables
601
+ }
602
+ }
603
+ `,
604
+ })
605
+
606
+ expect(
607
+ handler.predicate({
608
+ request,
609
+ parsedResult: await handler.parse({ request }),
610
+ }),
611
+ ).toBe(true)
612
+ })
613
+
614
+ test('respects custom endpoint', async () => {
615
+ const handler = new GraphQLHandler(
616
+ OperationTypeNode.QUERY,
617
+ 'GetUser',
618
+ 'https://api.github.com/graphql',
619
+ resolver,
620
+ )
621
+ const request = createPostGraphQLRequest(
622
+ {
623
+ query: GET_USER,
624
+ },
625
+ 'https://api.github.com/graphql',
626
+ )
627
+ const alienRequest = createPostGraphQLRequest({
628
+ query: GET_USER,
629
+ })
630
+
631
+ expect(
632
+ handler.predicate({
633
+ request,
634
+ parsedResult: await handler.parse({ request }),
635
+ }),
636
+ ).toBe(true)
637
+ expect(
638
+ handler.predicate({
639
+ request: alienRequest,
640
+ parsedResult: await handler.parse({ request: alienRequest }),
641
+ }),
642
+ ).toBe(false)
643
+ })
644
+ })
645
+
646
+ describe('test', () => {
647
+ test('respects operation type', async () => {
648
+ const handler = new GraphQLHandler(
649
+ OperationTypeNode.QUERY,
650
+ 'GetUser',
651
+ '*',
652
+ resolver,
653
+ )
654
+ const request = createPostGraphQLRequest({
655
+ query: GET_USER,
656
+ })
657
+ const alienRequest = createPostGraphQLRequest({
658
+ query: LOGIN,
659
+ })
660
+
661
+ expect(await handler.test({ request })).toBe(true)
662
+ expect(await handler.test({ request: alienRequest })).toBe(false)
663
+ })
664
+
665
+ test('respects operation name', async () => {
666
+ const handler = new GraphQLHandler(
667
+ OperationTypeNode.QUERY,
668
+ 'GetUser',
669
+ '*',
670
+ resolver,
671
+ )
672
+ const request = createPostGraphQLRequest({
673
+ query: GET_USER,
674
+ })
675
+ const alienRequest = createPostGraphQLRequest({
676
+ query: `
677
+ query GetAllUsers {
678
+ user {
679
+ id
680
+ }
681
+ }
682
+ `,
683
+ })
684
+
685
+ expect(await handler.test({ request })).toBe(true)
686
+ expect(await handler.test({ request: alienRequest })).toBe(false)
687
+ })
688
+
689
+ test('respects custom endpoint', async () => {
690
+ const handler = new GraphQLHandler(
691
+ OperationTypeNode.QUERY,
692
+ 'GetUser',
693
+ 'https://api.github.com/graphql',
694
+ resolver,
695
+ )
696
+ const request = createPostGraphQLRequest(
697
+ {
698
+ query: GET_USER,
699
+ },
700
+ 'https://api.github.com/graphql',
701
+ )
702
+ const alienRequest = createPostGraphQLRequest({
703
+ query: GET_USER,
704
+ })
705
+
706
+ expect(await handler.test({ request })).toBe(true)
707
+ expect(await handler.test({ request: alienRequest })).toBe(false)
708
+ })
709
+ })
710
+
711
+ describe('run', () => {
712
+ test('returns a mocked response given a matching query', async () => {
713
+ const handler = new GraphQLHandler(
714
+ OperationTypeNode.QUERY,
715
+ 'GetUser',
716
+ '*',
717
+ resolver,
718
+ )
719
+ const request = createPostGraphQLRequest({
720
+ query: GET_USER,
721
+ variables: {
722
+ userId: 'abc-123',
723
+ },
724
+ })
725
+ const result = await handler.run({ request })
726
+
727
+ expect(result!.handler).toEqual(handler)
728
+ expect(result!.parsedResult).toEqual({
729
+ match: {
730
+ matches: true,
731
+ params: {
732
+ '0': 'https://example.com/',
733
+ },
734
+ },
735
+ operationType: 'query',
736
+ operationName: 'GetUser',
737
+ query: GET_USER,
738
+ variables: {
739
+ userId: 'abc-123',
740
+ },
741
+ })
742
+ expect(result!.request.method).toBe('POST')
743
+ expect(result!.request.url).toBe('https://example.com/')
744
+ expect(await result!.request.json()).toEqual({
745
+ query: GET_USER,
746
+ variables: { userId: 'abc-123' },
747
+ })
748
+ expect(result!.response?.status).toBe(200)
749
+ expect(result!.response?.statusText).toBe('OK')
750
+ expect(await result!.response?.json()).toEqual({
751
+ data: { user: { id: 'abc-123' } },
752
+ })
753
+ })
754
+
755
+ test('returns null given a non-matching query', async () => {
756
+ const handler = new GraphQLHandler(
757
+ OperationTypeNode.QUERY,
758
+ 'GetUser',
759
+ '*',
760
+ resolver,
761
+ )
762
+ const request = createPostGraphQLRequest({
763
+ query: LOGIN,
764
+ })
765
+ const result = await handler.run({ request })
766
+
767
+ expect(result).toBeNull()
768
+ })
769
+ })
770
+
771
+ describe('isDocumentNode', () => {
772
+ it('returns true given a valid DocumentNode', () => {
773
+ const node = parse(`
774
+ query GetUser {
775
+ user {
776
+ login
777
+ }
778
+ }
779
+ `)
780
+
781
+ expect(isDocumentNode(node)).toEqual(true)
782
+ })
783
+
784
+ it('returns false given an arbitrary input', () => {
785
+ expect(isDocumentNode(null)).toEqual(false)
786
+ expect(isDocumentNode(undefined)).toEqual(false)
787
+ expect(isDocumentNode('')).toEqual(false)
788
+ expect(isDocumentNode('value')).toEqual(false)
789
+ expect(isDocumentNode(/value/)).toEqual(false)
790
+ })
791
+ })
792
+
793
+ describe('request', () => {
794
+ it('has parsed operationName', async () => {
795
+ const matchAllResolver = vi.fn()
796
+ const handler = new GraphQLHandler(
797
+ OperationTypeNode.QUERY,
798
+ /.*/,
799
+ '*',
800
+ matchAllResolver,
801
+ )
802
+ const request = createPostGraphQLRequest({
803
+ query: `
804
+ query GetAllUsers {
805
+ user {
806
+ id
807
+ }
808
+ }
809
+ `,
810
+ })
811
+
812
+ await handler.run({ request })
813
+
814
+ expect(matchAllResolver).toHaveBeenCalledTimes(1)
815
+ expect(matchAllResolver.mock.calls[0][0]).toHaveProperty(
816
+ 'operationName',
817
+ 'GetAllUsers',
818
+ )
819
+ })
820
+ })