@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,64 @@
1
+ import type { WebSocketConnectionData } from '@mswjs/interceptors/WebSocket'
2
+ import { RequestHandler } from '../handlers/RequestHandler'
3
+ import { WebSocketHandler } from '../handlers/WebSocketHandler'
4
+ import { webSocketInterceptor } from './webSocketInterceptor'
5
+ import {
6
+ onUnhandledRequest,
7
+ UnhandledRequestStrategy,
8
+ } from '../utils/request/onUnhandledRequest'
9
+ import { isHandlerKind } from '../utils/internal/isHandlerKind'
10
+
11
+ interface HandleWebSocketEventOptions {
12
+ getUnhandledRequestStrategy: () => UnhandledRequestStrategy
13
+ getHandlers: () => Array<RequestHandler | WebSocketHandler>
14
+ onMockedConnection: (connection: WebSocketConnectionData) => void
15
+ onPassthroughConnection: (onnection: WebSocketConnectionData) => void
16
+ }
17
+
18
+ export function handleWebSocketEvent(options: HandleWebSocketEventOptions) {
19
+ webSocketInterceptor.on('connection', async (connection) => {
20
+ const handlers = options.getHandlers().filter(isHandlerKind('EventHandler'))
21
+
22
+ // Ignore this connection if the user hasn't defined any handlers.
23
+ if (handlers.length > 0) {
24
+ options?.onMockedConnection(connection)
25
+
26
+ await Promise.all(
27
+ handlers.map((handler) => {
28
+ // Iterate over the handlers and forward the connection
29
+ // event to WebSocket event handlers. This is equivalent
30
+ // to dispatching that event onto multiple listeners.
31
+ return handler.run(connection)
32
+ }),
33
+ )
34
+
35
+ return
36
+ }
37
+
38
+ // Construct a request representing this WebSocket connection.
39
+ const request = new Request(connection.client.url, {
40
+ headers: {
41
+ upgrade: 'websocket',
42
+ connection: 'upgrade',
43
+ },
44
+ })
45
+ await onUnhandledRequest(
46
+ request,
47
+ options.getUnhandledRequestStrategy(),
48
+ ).catch((error) => {
49
+ const errorEvent = new Event('error')
50
+ Object.defineProperty(errorEvent, 'cause', {
51
+ enumerable: true,
52
+ configurable: false,
53
+ value: error,
54
+ })
55
+ connection.client.socket.dispatchEvent(errorEvent)
56
+ })
57
+
58
+ options?.onPassthroughConnection(connection)
59
+
60
+ // If none of the "ws" handlers matched,
61
+ // establish the WebSocket connection as-is.
62
+ connection.server.connect()
63
+ })
64
+ }
@@ -0,0 +1,245 @@
1
+ import type {
2
+ WebSocketClientConnection,
3
+ WebSocketConnectionData,
4
+ WebSocketData,
5
+ } from '@mswjs/interceptors/WebSocket'
6
+ import { devUtils } from '../../utils/internal/devUtils'
7
+ import { getTimestamp } from '../../utils/logging/getTimestamp'
8
+ import { toPublicUrl } from '../../utils/request/toPublicUrl'
9
+ import { getMessageLength } from './getMessageLength'
10
+ import { getPublicData } from './getPublicData'
11
+
12
+ export const colors = {
13
+ system: '#3b82f6',
14
+ outgoing: '#22c55e',
15
+ incoming: '#ef4444',
16
+ mocked: '#ff6a33',
17
+ }
18
+
19
+ export function attachWebSocketLogger(
20
+ connection: WebSocketConnectionData,
21
+ ): void {
22
+ const { client, server } = connection
23
+
24
+ logConnectionOpen(client)
25
+
26
+ // Log the events sent from the WebSocket client.
27
+ // WebSocket client connection object is written from the
28
+ // server's perspective so these message events are outgoing.
29
+ /**
30
+ * @todo Provide the reference to the exact event handler
31
+ * that called this `client.send()`.
32
+ */
33
+ client.addEventListener('message', (event) => {
34
+ logOutgoingClientMessage(event)
35
+ })
36
+
37
+ client.addEventListener('close', (event) => {
38
+ logConnectionClose(event)
39
+ })
40
+
41
+ // Log client errors (connection closures due to errors).
42
+ client.socket.addEventListener('error', (event) => {
43
+ logClientError(event)
44
+ })
45
+
46
+ client.send = new Proxy(client.send, {
47
+ apply(target, thisArg, args) {
48
+ const [data] = args
49
+ const messageEvent = new MessageEvent('message', { data })
50
+ Object.defineProperties(messageEvent, {
51
+ currentTarget: {
52
+ enumerable: true,
53
+ writable: false,
54
+ value: client.socket,
55
+ },
56
+ target: {
57
+ enumerable: true,
58
+ writable: false,
59
+ value: client.socket,
60
+ },
61
+ })
62
+
63
+ queueMicrotask(() => {
64
+ logIncomingMockedClientMessage(messageEvent)
65
+ })
66
+
67
+ return Reflect.apply(target, thisArg, args)
68
+ },
69
+ })
70
+
71
+ server.addEventListener(
72
+ 'open',
73
+ () => {
74
+ server.addEventListener('message', (event) => {
75
+ logIncomingServerMessage(event)
76
+ })
77
+ },
78
+ { once: true },
79
+ )
80
+
81
+ // Log outgoing client events initiated by the event handler.
82
+ // The actual client never sent these but the handler did.
83
+ server.send = new Proxy(server.send, {
84
+ apply(target, thisArg, args) {
85
+ const [data] = args
86
+ const messageEvent = new MessageEvent('message', { data })
87
+ Object.defineProperties(messageEvent, {
88
+ currentTarget: {
89
+ enumerable: true,
90
+ writable: false,
91
+ value: server.socket,
92
+ },
93
+ target: {
94
+ enumerable: true,
95
+ writable: false,
96
+ value: server.socket,
97
+ },
98
+ })
99
+
100
+ logOutgoingMockedClientMessage(messageEvent)
101
+
102
+ return Reflect.apply(target, thisArg, args)
103
+ },
104
+ })
105
+ }
106
+
107
+ /**
108
+ * Prints the WebSocket connection.
109
+ * This is meant to be logged by every WebSocket handler
110
+ * that intercepted this connection. This helps you see
111
+ * what handlers observe this connection.
112
+ */
113
+ export function logConnectionOpen(client: WebSocketClientConnection) {
114
+ const publicUrl = toPublicUrl(client.url)
115
+
116
+ console.groupCollapsed(
117
+ devUtils.formatMessage(`${getTimestamp()} %c▶%c ${publicUrl}`),
118
+ `color:${colors.system}`,
119
+ 'color:inherit',
120
+ )
121
+ // eslint-disable-next-line no-console
122
+ console.log('Client:', client.socket)
123
+ console.groupEnd()
124
+ }
125
+
126
+ function logConnectionClose(event: CloseEvent) {
127
+ const target = event.target as WebSocket
128
+ const publicUrl = toPublicUrl(target.url)
129
+
130
+ console.groupCollapsed(
131
+ devUtils.formatMessage(
132
+ `${getTimestamp({ milliseconds: true })} %c■%c ${publicUrl}`,
133
+ ),
134
+ `color:${colors.system}`,
135
+ 'color:inherit',
136
+ )
137
+ // eslint-disable-next-line no-console
138
+ console.log(event)
139
+ console.groupEnd()
140
+ }
141
+
142
+ function logClientError(event: Event) {
143
+ const socket = event.target as WebSocket
144
+ const publicUrl = toPublicUrl(socket.url)
145
+
146
+ console.groupCollapsed(
147
+ devUtils.formatMessage(
148
+ `${getTimestamp({ milliseconds: true })} %c\u00D7%c ${publicUrl}`,
149
+ ),
150
+ `color:${colors.system}`,
151
+ 'color:inherit',
152
+ )
153
+ // eslint-disable-next-line no-console
154
+ console.log(event)
155
+ console.groupEnd()
156
+ }
157
+
158
+ /**
159
+ * Prints the outgoing client message.
160
+ */
161
+ async function logOutgoingClientMessage(event: MessageEvent<WebSocketData>) {
162
+ const byteLength = getMessageLength(event.data)
163
+ const publicData = await getPublicData(event.data)
164
+ const arrow = event.defaultPrevented ? '⇡' : '⬆'
165
+
166
+ console.groupCollapsed(
167
+ devUtils.formatMessage(
168
+ `${getTimestamp({ milliseconds: true })} %c${arrow}%c ${publicData} %c${byteLength}%c`,
169
+ ),
170
+ `color:${colors.outgoing}`,
171
+ 'color:inherit',
172
+ 'color:gray;font-weight:normal',
173
+ 'color:inherit;font-weight:inherit',
174
+ )
175
+ // eslint-disable-next-line no-console
176
+ console.log(event)
177
+ console.groupEnd()
178
+ }
179
+
180
+ /**
181
+ * Prints the outgoing client message initiated
182
+ * by `server.send()` in the event handler.
183
+ */
184
+ async function logOutgoingMockedClientMessage(
185
+ event: MessageEvent<WebSocketData>,
186
+ ) {
187
+ const byteLength = getMessageLength(event.data)
188
+ const publicData = await getPublicData(event.data)
189
+
190
+ console.groupCollapsed(
191
+ devUtils.formatMessage(
192
+ `${getTimestamp({ milliseconds: true })} %c⬆%c ${publicData} %c${byteLength}%c`,
193
+ ),
194
+ `color:${colors.mocked}`,
195
+ 'color:inherit',
196
+ 'color:gray;font-weight:normal',
197
+ 'color:inherit;font-weight:inherit',
198
+ )
199
+ // eslint-disable-next-line no-console
200
+ console.log(event)
201
+ console.groupEnd()
202
+ }
203
+
204
+ /**
205
+ * Prints the outgoing client message initiated
206
+ * by `client.send()` in the event handler.
207
+ */
208
+ async function logIncomingMockedClientMessage(
209
+ event: MessageEvent<WebSocketData>,
210
+ ) {
211
+ const byteLength = getMessageLength(event.data)
212
+ const publicData = await getPublicData(event.data)
213
+
214
+ console.groupCollapsed(
215
+ devUtils.formatMessage(
216
+ `${getTimestamp({ milliseconds: true })} %c⬇%c ${publicData} %c${byteLength}%c`,
217
+ ),
218
+ `color:${colors.mocked}`,
219
+ 'color:inherit',
220
+ 'color:gray;font-weight:normal',
221
+ 'color:inherit;font-weight:inherit',
222
+ )
223
+ // eslint-disable-next-line no-console
224
+ console.log(event)
225
+ console.groupEnd()
226
+ }
227
+
228
+ async function logIncomingServerMessage(event: MessageEvent<WebSocketData>) {
229
+ const byteLength = getMessageLength(event.data)
230
+ const publicData = await getPublicData(event.data)
231
+ const arrow = event.defaultPrevented ? '⇣' : '⬇'
232
+
233
+ console.groupCollapsed(
234
+ devUtils.formatMessage(
235
+ `${getTimestamp({ milliseconds: true })} %c${arrow}%c ${publicData} %c${byteLength}%c`,
236
+ ),
237
+ `color:${colors.incoming}`,
238
+ 'color:inherit',
239
+ 'color:gray;font-weight:normal',
240
+ 'color:inherit;font-weight:inherit',
241
+ )
242
+ // eslint-disable-next-line no-console
243
+ console.log(event)
244
+ console.groupEnd()
245
+ }
@@ -0,0 +1,16 @@
1
+ import { getMessageLength } from './getMessageLength'
2
+
3
+ it('returns the length of the string', () => {
4
+ expect(getMessageLength('')).toBe(0)
5
+ expect(getMessageLength('hello')).toBe(5)
6
+ })
7
+
8
+ it('returns the size of the Blob', () => {
9
+ expect(getMessageLength(new Blob())).toBe(0)
10
+ expect(getMessageLength(new Blob(['hello']))).toBe(5)
11
+ })
12
+
13
+ it('returns the byte length of ArrayBuffer', () => {
14
+ expect(getMessageLength(new ArrayBuffer(0))).toBe(0)
15
+ expect(getMessageLength(new ArrayBuffer(5))).toBe(5)
16
+ })
@@ -0,0 +1,20 @@
1
+ import type { WebSocketData } from '@mswjs/interceptors/WebSocket'
2
+ import { isObject } from '../../utils/internal/isObject'
3
+
4
+ /**
5
+ * Returns the byte length of the given WebSocket message.
6
+ * @example
7
+ * getMessageLength('hello') // 5
8
+ * getMessageLength(new Blob(['hello'])) // 5
9
+ */
10
+ export function getMessageLength(data: WebSocketData): number {
11
+ if (data instanceof Blob) {
12
+ return data.size
13
+ }
14
+
15
+ if (isObject(data) && 'byteLength' in data) {
16
+ return data.byteLength
17
+ }
18
+
19
+ return new Blob([data as any]).size
20
+ }
@@ -0,0 +1,38 @@
1
+ import { getPublicData } from './getPublicData'
2
+
3
+ it('returns a short string as-is', async () => {
4
+ expect(await getPublicData('')).toBe('')
5
+ expect(await getPublicData('hello')).toBe('hello')
6
+ })
7
+
8
+ it('returns a truncated long string', async () => {
9
+ expect(await getPublicData('this is a very long string')).toBe(
10
+ 'this is a very long stri…',
11
+ )
12
+ })
13
+
14
+ it('returns a short Blob text as-is', async () => {
15
+ expect(await getPublicData(new Blob(['']))).toBe('Blob()')
16
+ expect(await getPublicData(new Blob(['hello']))).toBe('Blob(hello)')
17
+ })
18
+
19
+ it('returns a truncated long Blob text', async () => {
20
+ expect(await getPublicData(new Blob(['this is a very long string']))).toBe(
21
+ 'Blob(this is a very long stri…)',
22
+ )
23
+ })
24
+
25
+ it('returns a short ArrayBuffer text as-is', async () => {
26
+ expect(await getPublicData(new TextEncoder().encode(''))).toBe(
27
+ 'ArrayBuffer()',
28
+ )
29
+ expect(await getPublicData(new TextEncoder().encode('hello'))).toBe(
30
+ 'ArrayBuffer(hello)',
31
+ )
32
+ })
33
+
34
+ it('returns a truncated ArrayBuffer text', async () => {
35
+ expect(
36
+ await getPublicData(new TextEncoder().encode('this is a very long string')),
37
+ ).toBe('ArrayBuffer(this is a very long stri…)')
38
+ })
@@ -0,0 +1,18 @@
1
+ import type { WebSocketData } from '@mswjs/interceptors/WebSocket'
2
+ import { isObject } from '../../utils/internal/isObject'
3
+ import { truncateMessage } from './truncateMessage'
4
+
5
+ export async function getPublicData(data: WebSocketData): Promise<string> {
6
+ if (data instanceof Blob) {
7
+ const text = await data.text()
8
+ return `Blob(${truncateMessage(text)})`
9
+ }
10
+
11
+ // Handle all ArrayBuffer-like objects.
12
+ if (isObject(data)) {
13
+ const text = new TextDecoder().decode(data as ArrayBuffer)
14
+ return `ArrayBuffer(${truncateMessage(text)})`
15
+ }
16
+
17
+ return truncateMessage(data)
18
+ }
@@ -0,0 +1,12 @@
1
+ import { truncateMessage } from './truncateMessage'
2
+
3
+ it('returns a short string as-is', () => {
4
+ expect(truncateMessage('')).toBe('')
5
+ expect(truncateMessage('hello')).toBe('hello')
6
+ })
7
+
8
+ it('truncates a long string', () => {
9
+ expect(truncateMessage('this is a very long string')).toBe(
10
+ 'this is a very long stri…',
11
+ )
12
+ })
@@ -0,0 +1,9 @@
1
+ const MAX_LENGTH = 24
2
+
3
+ export function truncateMessage(message: string): string {
4
+ if (message.length <= MAX_LENGTH) {
5
+ return message
6
+ }
7
+
8
+ return `${message.slice(0, MAX_LENGTH)}…`
9
+ }
@@ -0,0 +1,3 @@
1
+ import { WebSocketInterceptor } from '@mswjs/interceptors/WebSocket'
2
+
3
+ export const webSocketInterceptor = new WebSocketInterceptor()
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @vitest-environment node-websocket
3
+ */
4
+ import { ws } from './ws'
5
+
6
+ it('exports the "link()" method', () => {
7
+ expect(ws).toHaveProperty('link')
8
+ expect(ws.link).toBeInstanceOf(Function)
9
+ })
10
+
11
+ it('throws an error when calling "ws.link()" without a URL argument', () => {
12
+ expect(() =>
13
+ // @ts-expect-error Intentionally invalid call.
14
+ ws.link(),
15
+ ).toThrow('Expected a WebSocket server URL but got undefined')
16
+ })
17
+
18
+ it('throws an error when given a non-path argument to "ws.link()"', () => {
19
+ expect(() =>
20
+ // @ts-expect-error Intentionally invalid argument.
21
+ ws.link(2),
22
+ ).toThrow('Expected a WebSocket server URL to be a valid path but got number')
23
+ })
package/src/core/ws.ts ADDED
@@ -0,0 +1,161 @@
1
+ import { invariant } from 'outvariant'
2
+ import type {
3
+ WebSocketData,
4
+ WebSocketClientConnectionProtocol,
5
+ } from '@mswjs/interceptors/WebSocket'
6
+ import {
7
+ WebSocketHandler,
8
+ kEmitter,
9
+ type WebSocketHandlerEventMap,
10
+ } from './handlers/WebSocketHandler'
11
+ import { hasRefCounted } from './utils/internal/hasRefCounted'
12
+ import { Path, isPath } from './utils/matching/matchRequestUrl'
13
+ import { WebSocketClientManager } from './ws/WebSocketClientManager'
14
+
15
+ const webSocketChannel = new BroadcastChannel('msw:websocket-client-manager')
16
+
17
+ if (hasRefCounted(webSocketChannel)) {
18
+ // Allows the Node.js thread to exit if it is the only active handle in the event system.
19
+ // https://nodejs.org/api/worker_threads.html#broadcastchannelunref
20
+ webSocketChannel.unref()
21
+ }
22
+
23
+ export type WebSocketEventListener<
24
+ EventType extends keyof WebSocketHandlerEventMap,
25
+ > = (...args: WebSocketHandlerEventMap[EventType]) => void
26
+
27
+ export type WebSocketLink = {
28
+ /**
29
+ * A set of all WebSocket clients connected
30
+ * to this link.
31
+ *
32
+ * @see {@link https://mswjs.io/docs/api/ws#clients `clients` API reference}
33
+ */
34
+ clients: Set<WebSocketClientConnectionProtocol>
35
+
36
+ /**
37
+ * Adds an event listener to this WebSocket link.
38
+ *
39
+ * @example
40
+ * const chat = ws.link('wss://chat.example.com')
41
+ * chat.addEventListener('connection', listener)
42
+ *
43
+ * @see {@link https://mswjs.io/docs/api/ws#onevent-listener `on()` API reference}
44
+ */
45
+ addEventListener<EventType extends keyof WebSocketHandlerEventMap>(
46
+ event: EventType,
47
+ listener: WebSocketEventListener<EventType>,
48
+ ): WebSocketHandler
49
+
50
+ /**
51
+ * Broadcasts the given data to all WebSocket clients.
52
+ *
53
+ * @example
54
+ * const service = ws.link('wss://example.com')
55
+ * service.addEventListener('connection', () => {
56
+ * service.broadcast('hello, everyone!')
57
+ * })
58
+ *
59
+ * @see {@link https://mswjs.io/docs/api/ws#broadcastdata `broadcast()` API reference}
60
+ */
61
+ broadcast(data: WebSocketData): void
62
+
63
+ /**
64
+ * Broadcasts the given data to all WebSocket clients
65
+ * except the ones provided in the `clients` argument.
66
+ *
67
+ * @example
68
+ * const service = ws.link('wss://example.com')
69
+ * service.addEventListener('connection', ({ client }) => {
70
+ * service.broadcastExcept(client, 'hi, the rest of you!')
71
+ * })
72
+ *
73
+ * @see {@link https://mswjs.io/docs/api/ws#broadcastexceptclients-data `broadcast()` API reference}
74
+ */
75
+ broadcastExcept(
76
+ clients:
77
+ | WebSocketClientConnectionProtocol
78
+ | Array<WebSocketClientConnectionProtocol>,
79
+ data: WebSocketData,
80
+ ): void
81
+ }
82
+
83
+ /**
84
+ * Intercepts outgoing WebSocket connections to the given URL.
85
+ *
86
+ * @example
87
+ * const chat = ws.link('wss://chat.example.com')
88
+ * chat.addEventListener('connection', ({ client }) => {
89
+ * client.send('hello from server!')
90
+ * })
91
+ */
92
+ function createWebSocketLinkHandler(url: Path): WebSocketLink {
93
+ invariant(url, 'Expected a WebSocket server URL but got undefined')
94
+
95
+ invariant(
96
+ isPath(url),
97
+ 'Expected a WebSocket server URL to be a valid path but got %s',
98
+ typeof url,
99
+ )
100
+
101
+ const clientManager = new WebSocketClientManager(webSocketChannel)
102
+
103
+ return {
104
+ get clients() {
105
+ return clientManager.clients
106
+ },
107
+ addEventListener(event, listener) {
108
+ const handler = new WebSocketHandler(url)
109
+
110
+ // Add the connection event listener for when the
111
+ // handler matches and emits a connection event.
112
+ // When that happens, store that connection in the
113
+ // set of all connections for reference.
114
+ handler[kEmitter].on('connection', async ({ client }) => {
115
+ await clientManager.addConnection(client)
116
+ })
117
+
118
+ // The "handleWebSocketEvent" function will invoke
119
+ // the "run()" method on the WebSocketHandler.
120
+ // If the handler matches, it will emit the "connection"
121
+ // event. Attach the user-defined listener to that event.
122
+ handler[kEmitter].on(event, listener)
123
+
124
+ return handler
125
+ },
126
+
127
+ broadcast(data) {
128
+ // This will invoke "send()" on the immediate clients
129
+ // in this runtime and post a message to the broadcast channel
130
+ // to trigger send for the clients in other runtimes.
131
+ this.broadcastExcept([], data)
132
+ },
133
+
134
+ broadcastExcept(clients, data) {
135
+ const ignoreClients = Array.prototype
136
+ .concat(clients)
137
+ .map((client) => client.id)
138
+
139
+ clientManager.clients.forEach((otherClient) => {
140
+ if (!ignoreClients.includes(otherClient.id)) {
141
+ otherClient.send(data)
142
+ }
143
+ })
144
+ },
145
+ }
146
+ }
147
+
148
+ /**
149
+ * A namespace to intercept and mock WebSocket connections.
150
+ *
151
+ * @example
152
+ * const chat = ws.link('wss://chat.example.com')
153
+ *
154
+ * @see {@link https://mswjs.io/docs/api/ws `ws` API reference}
155
+ * @see {@link https://mswjs.io/docs/basics/handling-websocket-events Handling WebSocket events}
156
+ */
157
+ export const ws = {
158
+ link: createWebSocketLinkHandler,
159
+ }
160
+
161
+ export { WebSocketData }
@@ -0,0 +1,2 @@
1
+ export * from '~/core'
2
+ export * from '../browser'