msw 2.0.12 → 2.0.14

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-JB4bsrLF.d.ts} +4 -2
  8. package/lib/core/GraphQLHandler-mT-MmgeB.d.mts +99 -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-YiqamK0M.d.mts +179 -0
  16. package/lib/core/{RequestHandler-25f9cfd1.d.ts → RequestHandler-rmY-HeFN.d.ts} +4 -4
  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 +111 -0
  36. package/lib/core/graphql.d.ts +11 -9
  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 +8 -6
  44. package/lib/core/handlers/GraphQLHandler.js.map +1 -0
  45. package/lib/core/handlers/GraphQLHandler.mjs +8 -6
  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 +28 -0
  60. package/lib/core/http.d.ts +13 -11
  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 +4 -4
  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 +25 -23
  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 +146 -0
  321. package/src/core/handlers/GraphQLHandler.test.ts +835 -0
  322. package/src/core/handlers/GraphQLHandler.ts +266 -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 +343 -0
  326. package/src/core/http.test.ts +15 -0
  327. package/src/core/http.ts +64 -0
  328. package/src/core/index.ts +59 -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,835 @@
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
+ cookies: {},
164
+ match: {
165
+ matches: true,
166
+ params: {
167
+ '0': 'https://example.com/',
168
+ },
169
+ },
170
+ operationType: 'query',
171
+ operationName: 'GetUser',
172
+ query: GET_USER,
173
+ variables: undefined,
174
+ })
175
+ })
176
+
177
+ test('parses a query with variables (GET)', async () => {
178
+ const handler = new GraphQLHandler(
179
+ OperationTypeNode.QUERY,
180
+ 'GetUser',
181
+ '*',
182
+ resolver,
183
+ )
184
+ const request = createGetGraphQLRequest({
185
+ query: GET_USER,
186
+ variables: {
187
+ userId: 'abc-123',
188
+ },
189
+ })
190
+
191
+ expect(await handler.parse({ request })).toEqual({
192
+ cookies: {},
193
+ match: {
194
+ matches: true,
195
+ params: {
196
+ '0': 'https://example.com/',
197
+ },
198
+ },
199
+ operationType: 'query',
200
+ operationName: 'GetUser',
201
+ query: GET_USER,
202
+ variables: {
203
+ userId: 'abc-123',
204
+ },
205
+ })
206
+ })
207
+
208
+ test('parses a query without variables (POST)', async () => {
209
+ const handler = new GraphQLHandler(
210
+ OperationTypeNode.QUERY,
211
+ 'GetUser',
212
+ '*',
213
+ resolver,
214
+ )
215
+ const request = createPostGraphQLRequest({
216
+ query: GET_USER,
217
+ })
218
+
219
+ expect(await handler.parse({ request })).toEqual({
220
+ cookies: {},
221
+ match: {
222
+ matches: true,
223
+ params: {
224
+ '0': 'https://example.com/',
225
+ },
226
+ },
227
+ operationType: 'query',
228
+ operationName: 'GetUser',
229
+ query: GET_USER,
230
+ variables: undefined,
231
+ })
232
+ })
233
+
234
+ test('parses a query with variables (POST)', async () => {
235
+ const handler = new GraphQLHandler(
236
+ OperationTypeNode.QUERY,
237
+ 'GetUser',
238
+ '*',
239
+ resolver,
240
+ )
241
+ const request = createPostGraphQLRequest({
242
+ query: GET_USER,
243
+ variables: {
244
+ userId: 'abc-123',
245
+ },
246
+ })
247
+
248
+ expect(await handler.parse({ request })).toEqual({
249
+ cookies: {},
250
+ match: {
251
+ matches: true,
252
+ params: {
253
+ '0': 'https://example.com/',
254
+ },
255
+ },
256
+ operationType: 'query',
257
+ operationName: 'GetUser',
258
+ query: GET_USER,
259
+ variables: {
260
+ userId: 'abc-123',
261
+ },
262
+ })
263
+ })
264
+ })
265
+
266
+ describe('mutation', () => {
267
+ test('parses a mutation without variables (GET)', async () => {
268
+ const handler = new GraphQLHandler(
269
+ OperationTypeNode.MUTATION,
270
+ 'GetUser',
271
+ '*',
272
+ resolver,
273
+ )
274
+ const request = createGetGraphQLRequest({
275
+ query: LOGIN,
276
+ })
277
+
278
+ expect(await handler.parse({ request })).toEqual({
279
+ cookies: {},
280
+ match: {
281
+ matches: true,
282
+ params: {
283
+ '0': 'https://example.com/',
284
+ },
285
+ },
286
+ operationType: 'mutation',
287
+ operationName: 'Login',
288
+ query: LOGIN,
289
+ variables: undefined,
290
+ })
291
+ })
292
+
293
+ test('parses a mutation with variables (GET)', async () => {
294
+ const handler = new GraphQLHandler(
295
+ OperationTypeNode.MUTATION,
296
+ 'GetUser',
297
+ '*',
298
+ resolver,
299
+ )
300
+ const request = createGetGraphQLRequest({
301
+ query: LOGIN,
302
+ variables: {
303
+ userId: 'abc-123',
304
+ },
305
+ })
306
+
307
+ expect(await handler.parse({ request })).toEqual({
308
+ cookies: {},
309
+ match: {
310
+ matches: true,
311
+ params: {
312
+ '0': 'https://example.com/',
313
+ },
314
+ },
315
+ operationType: 'mutation',
316
+ operationName: 'Login',
317
+ query: LOGIN,
318
+ variables: {
319
+ userId: 'abc-123',
320
+ },
321
+ })
322
+ })
323
+
324
+ test('parses a mutation without variables (POST)', async () => {
325
+ const handler = new GraphQLHandler(
326
+ OperationTypeNode.MUTATION,
327
+ 'GetUser',
328
+ '*',
329
+ resolver,
330
+ )
331
+ const request = createPostGraphQLRequest({
332
+ query: LOGIN,
333
+ })
334
+
335
+ expect(await handler.parse({ request })).toEqual({
336
+ cookies: {},
337
+ match: {
338
+ matches: true,
339
+ params: {
340
+ '0': 'https://example.com/',
341
+ },
342
+ },
343
+ operationType: 'mutation',
344
+ operationName: 'Login',
345
+ query: LOGIN,
346
+ variables: undefined,
347
+ })
348
+ })
349
+
350
+ test('parses a mutation with variables (POST)', async () => {
351
+ const handler = new GraphQLHandler(
352
+ OperationTypeNode.MUTATION,
353
+ 'GetUser',
354
+ '*',
355
+ resolver,
356
+ )
357
+ const request = createPostGraphQLRequest({
358
+ query: LOGIN,
359
+ variables: {
360
+ userId: 'abc-123',
361
+ },
362
+ })
363
+
364
+ expect(await handler.parse({ request })).toEqual({
365
+ cookies: {},
366
+ match: {
367
+ matches: true,
368
+ params: {
369
+ '0': 'https://example.com/',
370
+ },
371
+ },
372
+ operationType: 'mutation',
373
+ operationName: 'Login',
374
+ query: LOGIN,
375
+ variables: {
376
+ userId: 'abc-123',
377
+ },
378
+ })
379
+ })
380
+ })
381
+
382
+ describe('with endpoint configuration', () => {
383
+ test('parses the request and parses grapqhl properties from it when the graphql.link endpoint matches', async () => {
384
+ const handler = new GraphQLHandler(
385
+ OperationTypeNode.QUERY,
386
+ 'GetUser',
387
+ 'https://mswjs.com/graphql',
388
+ resolver,
389
+ )
390
+
391
+ await expect(
392
+ handler.parse({
393
+ request: createGetGraphQLRequest(
394
+ {
395
+ query: GET_USER,
396
+ variables: {
397
+ userId: 'abc-123',
398
+ },
399
+ },
400
+ 'https://mswjs.com/graphql',
401
+ ),
402
+ }),
403
+ ).resolves.toEqual({
404
+ cookies: {},
405
+ match: {
406
+ matches: true,
407
+ params: {},
408
+ },
409
+ operationType: 'query',
410
+ operationName: 'GetUser',
411
+ query: GET_USER,
412
+ variables: {
413
+ userId: 'abc-123',
414
+ },
415
+ })
416
+
417
+ await expect(
418
+ handler.parse({
419
+ request: createPostGraphQLRequest(
420
+ {
421
+ query: GET_USER,
422
+ variables: {
423
+ userId: 'abc-123',
424
+ },
425
+ },
426
+ 'https://mswjs.com/graphql',
427
+ ),
428
+ }),
429
+ ).resolves.toEqual({
430
+ cookies: {},
431
+ match: {
432
+ matches: true,
433
+ params: {},
434
+ },
435
+ operationType: 'query',
436
+ operationName: 'GetUser',
437
+ query: GET_USER,
438
+ variables: {
439
+ userId: 'abc-123',
440
+ },
441
+ })
442
+ })
443
+
444
+ test('parses a request but does not parse graphql properties from it graphql.link hostname does not match', async () => {
445
+ const handler = new GraphQLHandler(
446
+ OperationTypeNode.QUERY,
447
+ 'GetUser',
448
+ 'https://mswjs.com/graphql',
449
+ resolver,
450
+ )
451
+
452
+ await expect(
453
+ handler.parse({
454
+ request: createGetGraphQLRequest(
455
+ {
456
+ query: GET_USER,
457
+ variables: {
458
+ userId: 'abc-123',
459
+ },
460
+ },
461
+ 'https://example.com/graphql',
462
+ ),
463
+ }),
464
+ ).resolves.toEqual({
465
+ cookies: {},
466
+ match: {
467
+ matches: false,
468
+ params: {},
469
+ },
470
+ })
471
+
472
+ await expect(
473
+ handler.parse({
474
+ request: createPostGraphQLRequest(
475
+ {
476
+ query: GET_USER,
477
+ variables: {
478
+ userId: 'abc-123',
479
+ },
480
+ },
481
+ 'https://example.com/graphql',
482
+ ),
483
+ }),
484
+ ).resolves.toEqual({
485
+ cookies: {},
486
+ match: {
487
+ matches: false,
488
+ params: {},
489
+ },
490
+ })
491
+ })
492
+
493
+ test('parses a request but does not parse graphql properties from it graphql.link pathname does not match', async () => {
494
+ const handler = new GraphQLHandler(
495
+ OperationTypeNode.QUERY,
496
+ 'GetUser',
497
+ 'https://mswjs.com/graphql',
498
+ resolver,
499
+ )
500
+
501
+ await expect(
502
+ handler.parse({
503
+ request: createGetGraphQLRequest(
504
+ {
505
+ query: GET_USER,
506
+ variables: {
507
+ userId: 'abc-123',
508
+ },
509
+ },
510
+ 'https://mswjs.com/some/other/endpoint',
511
+ ),
512
+ }),
513
+ ).resolves.toEqual({
514
+ cookies: {},
515
+ match: {
516
+ matches: false,
517
+ params: {},
518
+ },
519
+ })
520
+
521
+ await expect(
522
+ handler.parse({
523
+ request: createPostGraphQLRequest(
524
+ {
525
+ query: GET_USER,
526
+ variables: {
527
+ userId: 'abc-123',
528
+ },
529
+ },
530
+ 'https://mswjs.com/some/other/endpoint',
531
+ ),
532
+ }),
533
+ ).resolves.toEqual({
534
+ cookies: {},
535
+ match: {
536
+ matches: false,
537
+ params: {},
538
+ },
539
+ })
540
+ })
541
+ })
542
+ })
543
+
544
+ describe('predicate', () => {
545
+ test('respects operation type', async () => {
546
+ const handler = new GraphQLHandler(
547
+ OperationTypeNode.QUERY,
548
+ 'GetUser',
549
+ '*',
550
+ resolver,
551
+ )
552
+ const request = createPostGraphQLRequest({
553
+ query: GET_USER,
554
+ })
555
+ const alienRequest = createPostGraphQLRequest({
556
+ query: LOGIN,
557
+ })
558
+
559
+ expect(
560
+ handler.predicate({
561
+ request,
562
+ parsedResult: await handler.parse({ request }),
563
+ }),
564
+ ).toBe(true)
565
+ expect(
566
+ handler.predicate({
567
+ request: alienRequest,
568
+ parsedResult: await handler.parse({ request: alienRequest }),
569
+ }),
570
+ ).toBe(false)
571
+ })
572
+
573
+ test('respects operation name', async () => {
574
+ const handler = new GraphQLHandler(
575
+ OperationTypeNode.QUERY,
576
+ 'GetUser',
577
+ '*',
578
+ resolver,
579
+ )
580
+ const request = createPostGraphQLRequest({
581
+ query: GET_USER,
582
+ })
583
+ const alienRequest = createPostGraphQLRequest({
584
+ query: `
585
+ query GetAllUsers {
586
+ user {
587
+ id
588
+ }
589
+ }
590
+ `,
591
+ })
592
+
593
+ expect(
594
+ handler.predicate({
595
+ request,
596
+ parsedResult: await handler.parse({ request }),
597
+ }),
598
+ ).toBe(true)
599
+ expect(
600
+ handler.predicate({
601
+ request: alienRequest,
602
+ parsedResult: await handler.parse({ request: alienRequest }),
603
+ }),
604
+ ).toBe(false)
605
+ })
606
+
607
+ test('allows anonymous GraphQL opertaions when using "all" expected operation type', async () => {
608
+ const handler = new GraphQLHandler('all', new RegExp('.*'), '*', resolver)
609
+ const request = createPostGraphQLRequest({
610
+ query: `
611
+ query {
612
+ anonymousQuery {
613
+ query
614
+ variables
615
+ }
616
+ }
617
+ `,
618
+ })
619
+
620
+ expect(
621
+ handler.predicate({
622
+ request,
623
+ parsedResult: await handler.parse({ request }),
624
+ }),
625
+ ).toBe(true)
626
+ })
627
+
628
+ test('respects custom endpoint', async () => {
629
+ const handler = new GraphQLHandler(
630
+ OperationTypeNode.QUERY,
631
+ 'GetUser',
632
+ 'https://api.github.com/graphql',
633
+ resolver,
634
+ )
635
+ const request = createPostGraphQLRequest(
636
+ {
637
+ query: GET_USER,
638
+ },
639
+ 'https://api.github.com/graphql',
640
+ )
641
+ const alienRequest = createPostGraphQLRequest({
642
+ query: GET_USER,
643
+ })
644
+
645
+ expect(
646
+ handler.predicate({
647
+ request,
648
+ parsedResult: await handler.parse({ request }),
649
+ }),
650
+ ).toBe(true)
651
+ expect(
652
+ handler.predicate({
653
+ request: alienRequest,
654
+ parsedResult: await handler.parse({ request: alienRequest }),
655
+ }),
656
+ ).toBe(false)
657
+ })
658
+ })
659
+
660
+ describe('test', () => {
661
+ test('respects operation type', async () => {
662
+ const handler = new GraphQLHandler(
663
+ OperationTypeNode.QUERY,
664
+ 'GetUser',
665
+ '*',
666
+ resolver,
667
+ )
668
+ const request = createPostGraphQLRequest({
669
+ query: GET_USER,
670
+ })
671
+ const alienRequest = createPostGraphQLRequest({
672
+ query: LOGIN,
673
+ })
674
+
675
+ expect(await handler.test({ request })).toBe(true)
676
+ expect(await handler.test({ request: alienRequest })).toBe(false)
677
+ })
678
+
679
+ test('respects operation name', async () => {
680
+ const handler = new GraphQLHandler(
681
+ OperationTypeNode.QUERY,
682
+ 'GetUser',
683
+ '*',
684
+ resolver,
685
+ )
686
+ const request = createPostGraphQLRequest({
687
+ query: GET_USER,
688
+ })
689
+ const alienRequest = createPostGraphQLRequest({
690
+ query: `
691
+ query GetAllUsers {
692
+ user {
693
+ id
694
+ }
695
+ }
696
+ `,
697
+ })
698
+
699
+ expect(await handler.test({ request })).toBe(true)
700
+ expect(await handler.test({ request: alienRequest })).toBe(false)
701
+ })
702
+
703
+ test('respects custom endpoint', async () => {
704
+ const handler = new GraphQLHandler(
705
+ OperationTypeNode.QUERY,
706
+ 'GetUser',
707
+ 'https://api.github.com/graphql',
708
+ resolver,
709
+ )
710
+ const request = createPostGraphQLRequest(
711
+ {
712
+ query: GET_USER,
713
+ },
714
+ 'https://api.github.com/graphql',
715
+ )
716
+ const alienRequest = createPostGraphQLRequest({
717
+ query: GET_USER,
718
+ })
719
+
720
+ expect(await handler.test({ request })).toBe(true)
721
+ expect(await handler.test({ request: alienRequest })).toBe(false)
722
+ })
723
+ })
724
+
725
+ describe('run', () => {
726
+ test('returns a mocked response given a matching query', async () => {
727
+ const handler = new GraphQLHandler(
728
+ OperationTypeNode.QUERY,
729
+ 'GetUser',
730
+ '*',
731
+ resolver,
732
+ )
733
+ const request = createPostGraphQLRequest({
734
+ query: GET_USER,
735
+ variables: {
736
+ userId: 'abc-123',
737
+ },
738
+ })
739
+ const result = await handler.run({ request })
740
+
741
+ expect(result!.handler).toEqual(handler)
742
+ expect(result!.parsedResult).toEqual({
743
+ cookies: {},
744
+ match: {
745
+ matches: true,
746
+ params: {
747
+ '0': 'https://example.com/',
748
+ },
749
+ },
750
+ operationType: 'query',
751
+ operationName: 'GetUser',
752
+ query: GET_USER,
753
+ variables: {
754
+ userId: 'abc-123',
755
+ },
756
+ })
757
+ expect(result!.request.method).toBe('POST')
758
+ expect(result!.request.url).toBe('https://example.com/')
759
+ expect(await result!.request.json()).toEqual({
760
+ query: GET_USER,
761
+ variables: { userId: 'abc-123' },
762
+ })
763
+ expect(result!.response?.status).toBe(200)
764
+ expect(result!.response?.statusText).toBe('OK')
765
+ expect(await result!.response?.json()).toEqual({
766
+ data: { user: { id: 'abc-123' } },
767
+ })
768
+ })
769
+
770
+ test('returns null given a non-matching query', async () => {
771
+ const handler = new GraphQLHandler(
772
+ OperationTypeNode.QUERY,
773
+ 'GetUser',
774
+ '*',
775
+ resolver,
776
+ )
777
+ const request = createPostGraphQLRequest({
778
+ query: LOGIN,
779
+ })
780
+ const result = await handler.run({ request })
781
+
782
+ expect(result).toBeNull()
783
+ })
784
+ })
785
+
786
+ describe('isDocumentNode', () => {
787
+ it('returns true given a valid DocumentNode', () => {
788
+ const node = parse(`
789
+ query GetUser {
790
+ user {
791
+ login
792
+ }
793
+ }
794
+ `)
795
+
796
+ expect(isDocumentNode(node)).toEqual(true)
797
+ })
798
+
799
+ it('returns false given an arbitrary input', () => {
800
+ expect(isDocumentNode(null)).toEqual(false)
801
+ expect(isDocumentNode(undefined)).toEqual(false)
802
+ expect(isDocumentNode('')).toEqual(false)
803
+ expect(isDocumentNode('value')).toEqual(false)
804
+ expect(isDocumentNode(/value/)).toEqual(false)
805
+ })
806
+ })
807
+
808
+ describe('request', () => {
809
+ it('has parsed operationName', async () => {
810
+ const matchAllResolver = vi.fn()
811
+ const handler = new GraphQLHandler(
812
+ OperationTypeNode.QUERY,
813
+ /.*/,
814
+ '*',
815
+ matchAllResolver,
816
+ )
817
+ const request = createPostGraphQLRequest({
818
+ query: `
819
+ query GetAllUsers {
820
+ user {
821
+ id
822
+ }
823
+ }
824
+ `,
825
+ })
826
+
827
+ await handler.run({ request })
828
+
829
+ expect(matchAllResolver).toHaveBeenCalledTimes(1)
830
+ expect(matchAllResolver.mock.calls[0][0]).toHaveProperty(
831
+ 'operationName',
832
+ 'GetAllUsers',
833
+ )
834
+ })
835
+ })