@mswjs/interceptors 0.41.9 → 0.42.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.
- package/README.md +274 -228
- package/lib/browser/{bufferUtils-BiiO6HZv.mjs → buffer-utils-DJj7YzLG.js} +3 -3
- package/lib/browser/buffer-utils-DJj7YzLG.js.map +1 -0
- package/lib/browser/create-request-id-DlEd4GOA.js +184 -0
- package/lib/browser/create-request-id-DlEd4GOA.js.map +1 -0
- package/lib/browser/{getRawRequest-B1BqgWG6.mjs → fetch-utils-zxA_SD66.js} +123 -52
- package/lib/browser/fetch-utils-zxA_SD66.js.map +1 -0
- package/lib/browser/handle-request-CIOa9O-N.js +167 -0
- package/lib/browser/handle-request-CIOa9O-N.js.map +1 -0
- package/lib/{node/hasConfigurableGlobal-BiTmog1u.mjs → browser/has-configurable-global-Cew-dYqk.js} +5 -7
- package/lib/browser/has-configurable-global-Cew-dYqk.js.map +1 -0
- package/lib/browser/http-CB9rQ7i_.d.ts +105 -0
- package/lib/browser/{index.d.cts → index.d.ts} +33 -38
- package/lib/browser/index.js +130 -0
- package/lib/browser/index.js.map +1 -0
- package/lib/browser/interceptor-dtJZ_9QT.d.ts +50 -0
- package/lib/browser/interceptors/WebSocket/index.d.ts +2 -0
- package/lib/browser/interceptors/WebSocket/{index.mjs → index.js} +39 -30
- package/lib/browser/interceptors/WebSocket/index.js.map +1 -0
- package/lib/browser/interceptors/XMLHttpRequest/web.d.ts +11 -0
- package/lib/browser/interceptors/XMLHttpRequest/web.js +2 -0
- package/lib/browser/interceptors/fetch/web.d.ts +14 -0
- package/lib/browser/interceptors/fetch/web.js +2 -0
- package/lib/browser/presets/browser.d.ts +11 -0
- package/lib/browser/presets/browser.js +12 -0
- package/lib/browser/presets/browser.js.map +1 -0
- package/lib/browser/{resolveWebSocketUrl-C83-x9iE.mjs → resolve-web-socket-url-CSvNPLGi.js} +3 -3
- package/lib/browser/resolve-web-socket-url-CSvNPLGi.js.map +1 -0
- package/lib/browser/web-BjVDkiX0.js +248 -0
- package/lib/browser/web-BjVDkiX0.js.map +1 -0
- package/lib/browser/{XMLHttpRequest-DrZAf3w6.mjs → web-C2oKsT3Q.js} +327 -255
- package/lib/browser/web-C2oKsT3Q.js.map +1 -0
- package/lib/browser/{interceptors/WebSocket/index.d.cts → websocket-CC0nB0md.d.ts} +41 -33
- package/lib/node/batch-interceptor-ByEZVih3.js +119 -0
- package/lib/node/batch-interceptor-ByEZVih3.js.map +1 -0
- package/lib/node/batch-interceptor-CPjFK2td.d.ts +28 -0
- package/lib/node/buffer-utils-BvPY1Tc-.js +187 -0
- package/lib/node/buffer-utils-BvPY1Tc-.js.map +1 -0
- package/lib/node/fetch-utils-Dw1PsmtX.js +568 -0
- package/lib/node/fetch-utils-Dw1PsmtX.js.map +1 -0
- package/lib/node/has-configurable-global-CJCh_g1I.js +22 -0
- package/lib/node/has-configurable-global-CJCh_g1I.js.map +1 -0
- package/lib/node/http-CB9rQ7i_.d.ts +105 -0
- package/lib/{browser/interceptors/WebSocket/index.d.mts → node/index.d.ts} +120 -60
- package/lib/node/{index.mjs → index.js} +8 -11
- package/lib/node/index.js.map +1 -0
- package/lib/node/interceptor-dtJZ_9QT.d.ts +50 -0
- package/lib/node/interceptors/ClientRequest/index.d.ts +14 -0
- package/lib/node/interceptors/ClientRequest/index.js +67 -0
- package/lib/node/interceptors/ClientRequest/index.js.map +1 -0
- package/lib/node/interceptors/XMLHttpRequest/node.d.ts +12 -0
- package/lib/node/interceptors/XMLHttpRequest/node.js +74 -0
- package/lib/node/interceptors/XMLHttpRequest/node.js.map +1 -0
- package/lib/node/interceptors/fetch/node.d.ts +18 -0
- package/lib/node/interceptors/fetch/node.js +83 -0
- package/lib/node/interceptors/fetch/node.js.map +1 -0
- package/lib/node/interceptors/http/index.d.ts +14 -0
- package/lib/node/interceptors/http/index.js +32 -0
- package/lib/node/interceptors/http/index.js.map +1 -0
- package/lib/node/interceptors/net/index.d.ts +203 -0
- package/lib/node/interceptors/net/index.js +2 -0
- package/lib/node/llhttp/constants.cjs +485 -0
- package/lib/node/llhttp/constants.d.cts +957 -0
- package/lib/node/llhttp/llhttp.wasm +0 -0
- package/lib/node/net-DtMnyEeg.js +1388 -0
- package/lib/node/net-DtMnyEeg.js.map +1 -0
- package/lib/node/presets/node.d.ts +12 -0
- package/lib/node/presets/node.js +17 -0
- package/lib/node/presets/node.js.map +1 -0
- package/lib/node/{RemoteHttpInterceptor.d.cts → remote-http-interceptor.d.ts} +12 -11
- package/lib/node/{RemoteHttpInterceptor.mjs → remote-http-interceptor.js} +38 -33
- package/lib/node/remote-http-interceptor.js.map +1 -0
- package/lib/node/source-lP0yyEtA.js +1990 -0
- package/lib/node/source-lP0yyEtA.js.map +1 -0
- package/package.json +79 -118
- package/src/batch-interceptor.test.ts +475 -0
- package/src/batch-interceptor.ts +244 -0
- package/src/{createRequestId.test.ts → create-request-id.test.ts} +1 -2
- package/src/disposable.ts +13 -0
- package/src/events/http.ts +92 -0
- package/src/events/websocket.ts +47 -0
- package/src/glossary.ts +1 -27
- package/src/index.ts +18 -10
- package/src/interceptor.test.ts +279 -0
- package/src/interceptor.ts +139 -0
- package/src/interceptors/ClientRequest/index.test.ts +21 -39
- package/src/interceptors/ClientRequest/index.ts +64 -179
- package/src/interceptors/ClientRequest/utils/{recordRawHeaders.test.ts → record-raw-headers.test.ts} +1 -2
- package/src/interceptors/ClientRequest/utils/{recordRawHeaders.ts → record-raw-headers.ts} +29 -2
- package/src/interceptors/WebSocket/index.ts +33 -50
- package/src/interceptors/WebSocket/utils/{bindEvent.test.ts → bind-event.test.ts} +1 -2
- package/src/interceptors/WebSocket/utils/events.test.ts +0 -1
- package/src/interceptors/WebSocket/{WebSocketClassTransport.ts → web-socket-class-transport.ts} +3 -3
- package/src/interceptors/WebSocket/{WebSocketClientConnection.ts → web-socket-client-connection.ts} +4 -4
- package/src/interceptors/WebSocket/{WebSocketOverride.ts → web-socket-override.ts} +6 -7
- package/src/interceptors/WebSocket/{WebSocketServerConnection.ts → web-socket-server-connection.ts} +4 -4
- package/src/interceptors/WebSocket/{WebSocketTransport.ts → web-socket-transport.ts} +1 -1
- package/src/interceptors/XMLHttpRequest/node.ts +104 -0
- package/src/interceptors/XMLHttpRequest/polyfills/{ProgressEventPolyfill.ts → progress-event-polyfill.ts} +1 -1
- package/src/interceptors/XMLHttpRequest/utils/{concateArrayBuffer.test.ts → concat-array-buffer.test.ts} +1 -2
- package/src/interceptors/XMLHttpRequest/utils/{concatArrayBuffer.ts → concat-array-buffer.ts} +1 -1
- package/src/interceptors/XMLHttpRequest/utils/{createEvent.test.ts → create-event.test.ts} +3 -4
- package/src/interceptors/XMLHttpRequest/utils/{createEvent.ts → create-event.ts} +2 -2
- package/src/interceptors/XMLHttpRequest/utils/{createResponse.ts → create-response.ts} +1 -1
- package/src/interceptors/XMLHttpRequest/utils/{getBodyByteLength.test.ts → get-body-byte-length.test.ts} +1 -2
- package/src/interceptors/XMLHttpRequest/web.ts +34 -0
- package/src/interceptors/XMLHttpRequest/{XMLHttpRequestController.ts → xml-http-request-controller.ts} +363 -204
- package/src/interceptors/XMLHttpRequest/{XMLHttpRequestProxy.ts → xml-http-request-proxy.ts} +28 -25
- package/src/interceptors/fetch/node.ts +103 -0
- package/src/interceptors/fetch/utils/{followRedirect.ts → follow-redirect.ts} +1 -1
- package/src/interceptors/fetch/web.ts +217 -0
- package/src/interceptors/http/forward-events.test.ts +86 -0
- package/src/interceptors/http/forward-events.ts +139 -0
- package/src/interceptors/http/http-parser/index.ts +310 -0
- package/src/interceptors/http/http-parser/llhttp/constants.cjs +485 -0
- package/src/interceptors/http/http-parser/llhttp/constants.d.cts +957 -0
- package/src/interceptors/http/http-parser/llhttp/llhttp.wasm +0 -0
- package/src/interceptors/http/http-parser.ts +138 -0
- package/src/interceptors/http/index.ts +34 -0
- package/src/interceptors/http/source.ts +688 -0
- package/src/interceptors/net/index.ts +368 -0
- package/src/interceptors/net/socket-controller.ts +1476 -0
- package/src/interceptors/net/utils/address-info.ts +54 -0
- package/src/interceptors/net/utils/connection-options-to-url.ts +56 -0
- package/src/interceptors/net/utils/flush-writes.ts +57 -0
- package/src/interceptors/net/utils/get-tls-connect-options.ts +23 -0
- package/src/interceptors/net/utils/normalize-net-connect-args.test.ts +233 -0
- package/src/interceptors/net/utils/normalize-net-connect-args.ts +121 -0
- package/src/interceptors/net/utils/normalize-tls-connect-args.ts +50 -0
- package/src/presets/browser.ts +4 -4
- package/src/presets/node.ts +4 -4
- package/src/{RemoteHttpInterceptor.ts → remote-http-interceptor.ts} +55 -42
- package/src/request-context.ts +40 -0
- package/src/{RequestController.test.ts → request-controller.test.ts} +37 -3
- package/src/{RequestController.ts → request-controller.ts} +33 -11
- package/src/utils/{bufferUtils.test.ts → buffer-utils.test.ts} +1 -2
- package/src/utils/buffer-utils.ts +37 -0
- package/src/utils/{cloneObject.test.ts → clone-object.test.ts} +1 -2
- package/src/utils/{cloneObject.ts → clone-object.ts} +8 -8
- package/src/utils/{createProxy.test.ts → create-proxy.test.ts} +6 -4
- package/src/utils/{createProxy.ts → create-proxy.ts} +1 -1
- package/src/utils/{fetchUtils.test.ts → fetch-utils.test.ts} +1 -1
- package/src/utils/{fetchUtils.ts → fetch-utils.ts} +28 -3
- package/src/utils/{findPropertySource.test.ts → find-property-source.test.ts} +1 -2
- package/src/utils/{getCleanUrl.test.ts → get-clean-url.test.ts} +1 -2
- package/src/utils/{getUrlByRequestOptions.test.ts → get-url-by-request-options.test.ts} +4 -8
- package/src/utils/{getUrlByRequestOptions.ts → get-url-by-request-options.ts} +16 -16
- package/src/utils/{getValueBySymbol.test.ts → get-value-by-symbol.test.ts} +1 -2
- package/src/utils/{handleRequest.ts → handle-request.ts} +61 -41
- package/src/utils/{hasConfigurableGlobal.test.ts → has-configurable-global.test.ts} +1 -2
- package/src/utils/{hasConfigurableGlobal.ts → has-configurable-global.ts} +2 -4
- package/src/utils/{isObject.test.ts → is-object.test.ts} +1 -2
- package/src/utils/logger.test.ts +154 -0
- package/src/utils/logger.ts +154 -0
- package/src/utils/{parseJson.test.ts → parse-json.test.ts} +1 -2
- package/src/utils/{patchesRegistry.test.ts → patches-registry.test.ts} +1 -1
- package/src/utils/{patchesRegistry.ts → patches-registry.ts} +1 -1
- package/src/utils/{responseUtils.ts → response-utils.ts} +25 -2
- package/ClientRequest/package.json +0 -11
- package/RemoteHttpInterceptor/package.json +0 -11
- package/WebSocket/package.json +0 -12
- package/XMLHttpRequest/package.json +0 -12
- package/fetch/package.json +0 -12
- package/lib/browser/Interceptor-Deczogc8.d.cts +0 -65
- package/lib/browser/Interceptor-gqKgs-aF.d.mts +0 -65
- package/lib/browser/XMLHttpRequest-DrZAf3w6.mjs.map +0 -1
- package/lib/browser/XMLHttpRequest-gXuzzX1g.cjs +0 -751
- package/lib/browser/XMLHttpRequest-gXuzzX1g.cjs.map +0 -1
- package/lib/browser/bufferUtils-BiiO6HZv.mjs.map +0 -1
- package/lib/browser/bufferUtils-Uc0eRItL.cjs +0 -38
- package/lib/browser/bufferUtils-Uc0eRItL.cjs.map +0 -1
- package/lib/browser/createRequestId-DOf8Ktjs.cjs +0 -205
- package/lib/browser/createRequestId-DOf8Ktjs.cjs.map +0 -1
- package/lib/browser/createRequestId-DYCsFHOi.mjs +0 -170
- package/lib/browser/createRequestId-DYCsFHOi.mjs.map +0 -1
- package/lib/browser/fetch-5IMPqr9e.mjs +0 -236
- package/lib/browser/fetch-5IMPqr9e.mjs.map +0 -1
- package/lib/browser/fetch-Bt9rMY9c.cjs +0 -241
- package/lib/browser/fetch-Bt9rMY9c.cjs.map +0 -1
- package/lib/browser/getRawRequest-B1BqgWG6.mjs.map +0 -1
- package/lib/browser/getRawRequest-DdfaiPVH.cjs +0 -376
- package/lib/browser/getRawRequest-DdfaiPVH.cjs.map +0 -1
- package/lib/browser/glossary-1lhZx6Aw.d.cts +0 -69
- package/lib/browser/glossary-nkHWcwvY.d.mts +0 -69
- package/lib/browser/handleRequest-CJim54xG.cjs +0 -191
- package/lib/browser/handleRequest-CJim54xG.cjs.map +0 -1
- package/lib/browser/handleRequest-CPPgsG7s.mjs +0 -180
- package/lib/browser/handleRequest-CPPgsG7s.mjs.map +0 -1
- package/lib/browser/hasConfigurableGlobal-C8zq1MCg.mjs +0 -109
- package/lib/browser/hasConfigurableGlobal-C8zq1MCg.mjs.map +0 -1
- package/lib/browser/hasConfigurableGlobal-CS7adEvV.cjs +0 -126
- package/lib/browser/hasConfigurableGlobal-CS7adEvV.cjs.map +0 -1
- package/lib/browser/index.cjs +0 -70
- package/lib/browser/index.cjs.map +0 -1
- package/lib/browser/index.d.mts +0 -125
- package/lib/browser/index.mjs +0 -56
- package/lib/browser/index.mjs.map +0 -1
- package/lib/browser/interceptors/WebSocket/index.cjs +0 -618
- package/lib/browser/interceptors/WebSocket/index.cjs.map +0 -1
- package/lib/browser/interceptors/WebSocket/index.mjs.map +0 -1
- package/lib/browser/interceptors/XMLHttpRequest/index.cjs +0 -8
- package/lib/browser/interceptors/XMLHttpRequest/index.d.cts +0 -15
- package/lib/browser/interceptors/XMLHttpRequest/index.d.mts +0 -15
- package/lib/browser/interceptors/XMLHttpRequest/index.mjs +0 -8
- package/lib/browser/interceptors/fetch/index.cjs +0 -7
- package/lib/browser/interceptors/fetch/index.d.cts +0 -13
- package/lib/browser/interceptors/fetch/index.d.mts +0 -13
- package/lib/browser/interceptors/fetch/index.mjs +0 -7
- package/lib/browser/presets/browser.cjs +0 -18
- package/lib/browser/presets/browser.cjs.map +0 -1
- package/lib/browser/presets/browser.d.cts +0 -12
- package/lib/browser/presets/browser.d.mts +0 -14
- package/lib/browser/presets/browser.mjs +0 -18
- package/lib/browser/presets/browser.mjs.map +0 -1
- package/lib/browser/resolveWebSocketUrl-6K6EgqsA.cjs +0 -31
- package/lib/browser/resolveWebSocketUrl-6K6EgqsA.cjs.map +0 -1
- package/lib/browser/resolveWebSocketUrl-C83-x9iE.mjs.map +0 -1
- package/lib/node/BatchInterceptor-BGhH8z1z.cjs +0 -49
- package/lib/node/BatchInterceptor-BGhH8z1z.cjs.map +0 -1
- package/lib/node/BatchInterceptor-C4-RX5rg.mjs +0 -44
- package/lib/node/BatchInterceptor-C4-RX5rg.mjs.map +0 -1
- package/lib/node/BatchInterceptor-KKF8Q47I.d.cts +0 -26
- package/lib/node/BatchInterceptor-rSr-NH_H.d.mts +0 -26
- package/lib/node/ClientRequest-2loAH7xM.cjs +0 -1058
- package/lib/node/ClientRequest-2loAH7xM.cjs.map +0 -1
- package/lib/node/ClientRequest-DGhBX21V.mjs +0 -1049
- package/lib/node/ClientRequest-DGhBX21V.mjs.map +0 -1
- package/lib/node/Interceptor-BsZ21ue0.d.cts +0 -132
- package/lib/node/Interceptor-soD-WpQO.d.mts +0 -132
- package/lib/node/RemoteHttpInterceptor.cjs +0 -155
- package/lib/node/RemoteHttpInterceptor.cjs.map +0 -1
- package/lib/node/RemoteHttpInterceptor.d.mts +0 -39
- package/lib/node/RemoteHttpInterceptor.mjs.map +0 -1
- package/lib/node/XMLHttpRequest-BtDNZipW.cjs +0 -752
- package/lib/node/XMLHttpRequest-BtDNZipW.cjs.map +0 -1
- package/lib/node/XMLHttpRequest-Dw6Wm-UU.mjs +0 -746
- package/lib/node/XMLHttpRequest-Dw6Wm-UU.mjs.map +0 -1
- package/lib/node/bufferUtils-DxPxwff_.mjs +0 -20
- package/lib/node/bufferUtils-DxPxwff_.mjs.map +0 -1
- package/lib/node/bufferUtils-S5_-2eN4.cjs +0 -38
- package/lib/node/bufferUtils-S5_-2eN4.cjs.map +0 -1
- package/lib/node/chunk-CbDLau6x.cjs +0 -34
- package/lib/node/fetch-CaC3rGEu.mjs +0 -252
- package/lib/node/fetch-CaC3rGEu.mjs.map +0 -1
- package/lib/node/fetch-D2ClLNN-.cjs +0 -259
- package/lib/node/fetch-D2ClLNN-.cjs.map +0 -1
- package/lib/node/fetchUtils-BKJ1XmiO.mjs +0 -480
- package/lib/node/fetchUtils-BKJ1XmiO.mjs.map +0 -1
- package/lib/node/fetchUtils-umV5xXBy.cjs +0 -546
- package/lib/node/fetchUtils-umV5xXBy.cjs.map +0 -1
- package/lib/node/getRawRequest-B6znU6il.cjs +0 -36
- package/lib/node/getRawRequest-B6znU6il.cjs.map +0 -1
- package/lib/node/getRawRequest-C2-1urzA.mjs +0 -24
- package/lib/node/getRawRequest-C2-1urzA.mjs.map +0 -1
- package/lib/node/handleRequest-C-cKYjIh.cjs +0 -222
- package/lib/node/handleRequest-C-cKYjIh.cjs.map +0 -1
- package/lib/node/handleRequest-FIQv5pwH.mjs +0 -192
- package/lib/node/handleRequest-FIQv5pwH.mjs.map +0 -1
- package/lib/node/hasConfigurableGlobal-BiTmog1u.mjs.map +0 -1
- package/lib/node/hasConfigurableGlobal-MjY06_Ok.cjs +0 -108
- package/lib/node/hasConfigurableGlobal-MjY06_Ok.cjs.map +0 -1
- package/lib/node/index-BJ5E5aW-.d.cts +0 -113
- package/lib/node/index-DfoF45ih.d.mts +0 -113
- package/lib/node/index.cjs +0 -53
- package/lib/node/index.cjs.map +0 -1
- package/lib/node/index.d.cts +0 -104
- package/lib/node/index.d.mts +0 -104
- package/lib/node/index.mjs.map +0 -1
- package/lib/node/interceptors/ClientRequest/index.cjs +0 -6
- package/lib/node/interceptors/ClientRequest/index.d.cts +0 -2
- package/lib/node/interceptors/ClientRequest/index.d.mts +0 -3
- package/lib/node/interceptors/ClientRequest/index.mjs +0 -6
- package/lib/node/interceptors/XMLHttpRequest/index.cjs +0 -7
- package/lib/node/interceptors/XMLHttpRequest/index.d.cts +0 -14
- package/lib/node/interceptors/XMLHttpRequest/index.d.mts +0 -14
- package/lib/node/interceptors/XMLHttpRequest/index.mjs +0 -7
- package/lib/node/interceptors/fetch/index.cjs +0 -6
- package/lib/node/interceptors/fetch/index.d.cts +0 -12
- package/lib/node/interceptors/fetch/index.d.mts +0 -12
- package/lib/node/interceptors/fetch/index.mjs +0 -6
- package/lib/node/node-DIKcnzhK.cjs +0 -39
- package/lib/node/node-DIKcnzhK.cjs.map +0 -1
- package/lib/node/node-lsdNwZEW.mjs +0 -27
- package/lib/node/node-lsdNwZEW.mjs.map +0 -1
- package/lib/node/presets/node.cjs +0 -23
- package/lib/node/presets/node.cjs.map +0 -1
- package/lib/node/presets/node.d.cts +0 -13
- package/lib/node/presets/node.d.mts +0 -15
- package/lib/node/presets/node.mjs +0 -23
- package/lib/node/presets/node.mjs.map +0 -1
- package/lib/node/utils/node/index.cjs +0 -4
- package/lib/node/utils/node/index.d.cts +0 -16
- package/lib/node/utils/node/index.d.mts +0 -16
- package/lib/node/utils/node/index.mjs +0 -3
- package/presets/browser/package.json +0 -5
- package/presets/node/package.json +0 -11
- package/src/BatchInterceptor.test.ts +0 -255
- package/src/BatchInterceptor.ts +0 -96
- package/src/Interceptor.test.ts +0 -205
- package/src/Interceptor.ts +0 -249
- package/src/getRawRequest.ts +0 -21
- package/src/interceptors/ClientRequest/MockHttpSocket.ts +0 -724
- package/src/interceptors/ClientRequest/agents.ts +0 -110
- package/src/interceptors/ClientRequest/utils/getIncomingMessageBody.test.ts +0 -54
- package/src/interceptors/ClientRequest/utils/getIncomingMessageBody.ts +0 -45
- package/src/interceptors/ClientRequest/utils/normalizeClientRequestArgs.test.ts +0 -427
- package/src/interceptors/ClientRequest/utils/normalizeClientRequestArgs.ts +0 -268
- package/src/interceptors/ClientRequest/utils/parserUtils.ts +0 -48
- package/src/interceptors/Socket/MockSocket.test.ts +0 -264
- package/src/interceptors/Socket/MockSocket.ts +0 -58
- package/src/interceptors/Socket/utils/baseUrlFromConnectionOptions.ts +0 -26
- package/src/interceptors/Socket/utils/normalizeSocketWriteArgs.test.ts +0 -52
- package/src/interceptors/Socket/utils/normalizeSocketWriteArgs.ts +0 -33
- package/src/interceptors/XMLHttpRequest/index.ts +0 -40
- package/src/interceptors/fetch/index.ts +0 -203
- package/src/utils/bufferUtils.ts +0 -22
- package/src/utils/canParseUrl.ts +0 -13
- package/src/utils/emitAsync.ts +0 -25
- package/src/utils/nextTick.ts +0 -11
- package/src/utils/node/index.ts +0 -39
- /package/src/{createRequestId.ts → create-request-id.ts} +0 -0
- /package/src/{InterceptorError.ts → interceptor-error.ts} +0 -0
- /package/src/interceptors/WebSocket/utils/{bindEvent.ts → bind-event.ts} +0 -0
- /package/src/interceptors/XMLHttpRequest/polyfills/{EventPolyfill.ts → event-polyfill.ts} +0 -0
- /package/src/interceptors/XMLHttpRequest/utils/{getBodyByteLength.ts → get-body-byte-length.ts} +0 -0
- /package/src/interceptors/XMLHttpRequest/utils/{isDomParserSupportedType.ts → is-dom-parser-supported-type.ts} +0 -0
- /package/src/interceptors/fetch/utils/{createNetworkError.ts → create-network-error.ts} +0 -0
- /package/src/utils/{findPropertySource.ts → find-property-source.ts} +0 -0
- /package/src/utils/{getCleanUrl.ts → get-clean-url.ts} +0 -0
- /package/src/utils/{getValueBySymbol.ts → get-value-by-symbol.ts} +0 -0
- /package/src/utils/{isNodeLikeError.ts → is-node-like-error.ts} +0 -0
- /package/src/utils/{isObject.ts → is-object.ts} +0 -0
- /package/src/utils/{isPropertyAccessible.ts → is-property-accessible.ts} +0 -0
- /package/src/utils/{parseJson.ts → parse-json.ts} +0 -0
- /package/src/utils/{resolveWebSocketUrl.ts → resolve-web-socket-url.ts} +0 -0
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @vitest-environment node
|
|
3
|
-
*/
|
|
4
|
-
import { it, expect } from 'vitest'
|
|
5
|
-
import { normalizeSocketWriteArgs } from './normalizeSocketWriteArgs'
|
|
6
|
-
|
|
7
|
-
it('normalizes .write()', () => {
|
|
8
|
-
expect(normalizeSocketWriteArgs([undefined])).toEqual([
|
|
9
|
-
undefined,
|
|
10
|
-
undefined,
|
|
11
|
-
undefined,
|
|
12
|
-
])
|
|
13
|
-
expect(normalizeSocketWriteArgs([null])).toEqual([null, undefined, undefined])
|
|
14
|
-
})
|
|
15
|
-
|
|
16
|
-
it('normalizes .write(chunk)', () => {
|
|
17
|
-
expect(normalizeSocketWriteArgs([Buffer.from('hello')])).toEqual([
|
|
18
|
-
Buffer.from('hello'),
|
|
19
|
-
undefined,
|
|
20
|
-
undefined,
|
|
21
|
-
])
|
|
22
|
-
expect(normalizeSocketWriteArgs(['hello'])).toEqual([
|
|
23
|
-
'hello',
|
|
24
|
-
undefined,
|
|
25
|
-
undefined,
|
|
26
|
-
])
|
|
27
|
-
expect(normalizeSocketWriteArgs([null])).toEqual([null, undefined, undefined])
|
|
28
|
-
})
|
|
29
|
-
|
|
30
|
-
it('normalizes .write(chunk, encoding)', () => {
|
|
31
|
-
expect(normalizeSocketWriteArgs([Buffer.from('hello'), 'utf8'])).toEqual([
|
|
32
|
-
Buffer.from('hello'),
|
|
33
|
-
'utf8',
|
|
34
|
-
undefined,
|
|
35
|
-
])
|
|
36
|
-
})
|
|
37
|
-
|
|
38
|
-
it('normalizes .write(chunk, callback)', () => {
|
|
39
|
-
const callback = () => {}
|
|
40
|
-
expect(normalizeSocketWriteArgs([Buffer.from('hello'), callback])).toEqual([
|
|
41
|
-
Buffer.from('hello'),
|
|
42
|
-
undefined,
|
|
43
|
-
callback,
|
|
44
|
-
])
|
|
45
|
-
})
|
|
46
|
-
|
|
47
|
-
it('normalizes .write(chunk, encoding, callback)', () => {
|
|
48
|
-
const callback = () => {}
|
|
49
|
-
expect(
|
|
50
|
-
normalizeSocketWriteArgs([Buffer.from('hello'), 'utf8', callback])
|
|
51
|
-
).toEqual([Buffer.from('hello'), 'utf8', callback])
|
|
52
|
-
})
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
export type WriteCallback = (error?: Error | null) => void
|
|
2
|
-
|
|
3
|
-
export type WriteArgs =
|
|
4
|
-
| [chunk: unknown, callback?: WriteCallback]
|
|
5
|
-
| [chunk: unknown, encoding: BufferEncoding, callback?: WriteCallback]
|
|
6
|
-
|
|
7
|
-
export type NormalizedSocketWriteArgs = [
|
|
8
|
-
chunk: any,
|
|
9
|
-
encoding?: BufferEncoding,
|
|
10
|
-
callback?: WriteCallback,
|
|
11
|
-
]
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Normalizes the arguments provided to the `Writable.prototype.write()`
|
|
15
|
-
* and `Writable.prototype.end()`.
|
|
16
|
-
*/
|
|
17
|
-
export function normalizeSocketWriteArgs(
|
|
18
|
-
args: WriteArgs
|
|
19
|
-
): NormalizedSocketWriteArgs {
|
|
20
|
-
const normalized: NormalizedSocketWriteArgs = [args[0], undefined, undefined]
|
|
21
|
-
|
|
22
|
-
if (typeof args[1] === 'string') {
|
|
23
|
-
normalized[1] = args[1]
|
|
24
|
-
} else if (typeof args[1] === 'function') {
|
|
25
|
-
normalized[2] = args[1]
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
if (typeof args[2] === 'function') {
|
|
29
|
-
normalized[2] = args[2]
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
return normalized
|
|
33
|
-
}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { Emitter } from 'strict-event-emitter'
|
|
2
|
-
import { HttpRequestEventMap } from '../../glossary'
|
|
3
|
-
import { Interceptor } from '../../Interceptor'
|
|
4
|
-
import { createXMLHttpRequestProxy } from './XMLHttpRequestProxy'
|
|
5
|
-
import { hasConfigurableGlobal } from '../../utils/hasConfigurableGlobal'
|
|
6
|
-
import { patchesRegistry } from '../../utils/patchesRegistry'
|
|
7
|
-
|
|
8
|
-
export type XMLHttpRequestEmitter = Emitter<HttpRequestEventMap>
|
|
9
|
-
|
|
10
|
-
export class XMLHttpRequestInterceptor extends Interceptor<HttpRequestEventMap> {
|
|
11
|
-
static symbol = Symbol.for('xhr-interceptor')
|
|
12
|
-
|
|
13
|
-
constructor() {
|
|
14
|
-
super(XMLHttpRequestInterceptor.symbol)
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
protected checkEnvironment() {
|
|
18
|
-
return hasConfigurableGlobal('XMLHttpRequest')
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
protected setup() {
|
|
22
|
-
const logger = this.logger.extend('setup')
|
|
23
|
-
|
|
24
|
-
logger.info('patching global XMLHttpRequest...')
|
|
25
|
-
|
|
26
|
-
this.subscriptions.push(
|
|
27
|
-
patchesRegistry.applyPatch(globalThis, 'XMLHttpRequest', () => {
|
|
28
|
-
return createXMLHttpRequestProxy({
|
|
29
|
-
emitter: this.emitter,
|
|
30
|
-
logger: this.logger,
|
|
31
|
-
})
|
|
32
|
-
})
|
|
33
|
-
)
|
|
34
|
-
|
|
35
|
-
logger.info(
|
|
36
|
-
'global XMLHttpRequest patched!',
|
|
37
|
-
globalThis.XMLHttpRequest.name
|
|
38
|
-
)
|
|
39
|
-
}
|
|
40
|
-
}
|
|
@@ -1,203 +0,0 @@
|
|
|
1
|
-
import { until } from '@open-draft/until'
|
|
2
|
-
import { DeferredPromise } from '@open-draft/deferred-promise'
|
|
3
|
-
import { HttpRequestEventMap } from '../../glossary'
|
|
4
|
-
import { Interceptor } from '../../Interceptor'
|
|
5
|
-
import { RequestController } from '../../RequestController'
|
|
6
|
-
import { emitAsync } from '../../utils/emitAsync'
|
|
7
|
-
import { handleRequest } from '../../utils/handleRequest'
|
|
8
|
-
import { canParseUrl } from '../../utils/canParseUrl'
|
|
9
|
-
import { createRequestId } from '../../createRequestId'
|
|
10
|
-
import { createNetworkError } from './utils/createNetworkError'
|
|
11
|
-
import { followFetchRedirect } from './utils/followRedirect'
|
|
12
|
-
import { decompressResponse } from './utils/decompression'
|
|
13
|
-
import { hasConfigurableGlobal } from '../../utils/hasConfigurableGlobal'
|
|
14
|
-
import { FetchRequest, FetchResponse } from '../../utils/fetchUtils'
|
|
15
|
-
import { setRawRequest } from '../../getRawRequest'
|
|
16
|
-
import { isResponseError } from '../../utils/responseUtils'
|
|
17
|
-
import { patchesRegistry } from '../../utils/patchesRegistry'
|
|
18
|
-
|
|
19
|
-
export class FetchInterceptor extends Interceptor<HttpRequestEventMap> {
|
|
20
|
-
static symbol = Symbol.for('fetch-interceptor')
|
|
21
|
-
|
|
22
|
-
constructor() {
|
|
23
|
-
super(FetchInterceptor.symbol)
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
protected checkEnvironment() {
|
|
27
|
-
return hasConfigurableGlobal('fetch')
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
protected async setup() {
|
|
31
|
-
const logger = this.logger.extend('setup')
|
|
32
|
-
|
|
33
|
-
const pureFetch = globalThis.fetch
|
|
34
|
-
|
|
35
|
-
const fetchProxy: typeof fetch = async (input, init) => {
|
|
36
|
-
const requestId = createRequestId()
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* @note Resolve potentially relative request URL
|
|
40
|
-
* against the present `location`. This is mainly
|
|
41
|
-
* for native `fetch` in JSDOM.
|
|
42
|
-
* @see https://github.com/mswjs/msw/issues/1625
|
|
43
|
-
*/
|
|
44
|
-
const resolvedInput =
|
|
45
|
-
typeof input === 'string' &&
|
|
46
|
-
typeof location !== 'undefined' &&
|
|
47
|
-
!canParseUrl(input)
|
|
48
|
-
? new URL(input, location.href)
|
|
49
|
-
: input
|
|
50
|
-
|
|
51
|
-
const request = new FetchRequest(resolvedInput, init)
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* @note Set the raw request only if a Request instance was provided to fetch.
|
|
55
|
-
*/
|
|
56
|
-
if (input instanceof Request) {
|
|
57
|
-
setRawRequest(request, input)
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
const responsePromise = new DeferredPromise<Response>()
|
|
61
|
-
|
|
62
|
-
const controller = new RequestController(request, {
|
|
63
|
-
passthrough: async () => {
|
|
64
|
-
this.logger.info('request has not been handled, passthrough...')
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* @note Clone the request instance right before performing it.
|
|
68
|
-
* This preserves any modifications made to the intercepted request
|
|
69
|
-
* in the "request" listener. This also allows the user to read the
|
|
70
|
-
* request body in the "response" listener (otherwise "unusable").
|
|
71
|
-
*/
|
|
72
|
-
const requestCloneForResponseEvent = request.clone()
|
|
73
|
-
|
|
74
|
-
// Perform the intercepted request as-is.
|
|
75
|
-
const { error: responseError, data: originalResponse } = await until(
|
|
76
|
-
() => pureFetch(request)
|
|
77
|
-
)
|
|
78
|
-
|
|
79
|
-
if (responseError) {
|
|
80
|
-
return responsePromise.reject(responseError)
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
this.logger.info('original fetch performed', originalResponse)
|
|
84
|
-
|
|
85
|
-
if (this.emitter.listenerCount('response') > 0) {
|
|
86
|
-
this.logger.info('emitting the "response" event...')
|
|
87
|
-
|
|
88
|
-
const responseClone = FetchResponse.clone(originalResponse)
|
|
89
|
-
await emitAsync(this.emitter, 'response', {
|
|
90
|
-
response: responseClone,
|
|
91
|
-
isMockedResponse: false,
|
|
92
|
-
request: requestCloneForResponseEvent,
|
|
93
|
-
requestId,
|
|
94
|
-
})
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
// Resolve the response promise with the original response
|
|
98
|
-
// since the `fetch()` return this internal promise.
|
|
99
|
-
responsePromise.resolve(originalResponse)
|
|
100
|
-
},
|
|
101
|
-
respondWith: async (rawResponse) => {
|
|
102
|
-
// Handle mocked `Response.error()` (i.e. request errors).
|
|
103
|
-
if (isResponseError(rawResponse)) {
|
|
104
|
-
this.logger.info('request has errored!', { response: rawResponse })
|
|
105
|
-
responsePromise.reject(createNetworkError(rawResponse))
|
|
106
|
-
return
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
this.logger.info('received mocked response!', {
|
|
110
|
-
rawResponse,
|
|
111
|
-
})
|
|
112
|
-
|
|
113
|
-
// Decompress the mocked response body, if applicable.
|
|
114
|
-
const decompressedStream = decompressResponse(rawResponse)
|
|
115
|
-
const response = new FetchResponse(
|
|
116
|
-
decompressedStream || rawResponse.body,
|
|
117
|
-
{
|
|
118
|
-
url: request.url,
|
|
119
|
-
status: rawResponse.status,
|
|
120
|
-
statusText: rawResponse.statusText,
|
|
121
|
-
headers: rawResponse.headers,
|
|
122
|
-
}
|
|
123
|
-
)
|
|
124
|
-
|
|
125
|
-
/**
|
|
126
|
-
* Undici's handling of following redirect responses.
|
|
127
|
-
* Treat the "manual" redirect mode as a regular mocked response.
|
|
128
|
-
* This way, the client can manually follow the redirect it receives.
|
|
129
|
-
* @see https://github.com/nodejs/undici/blob/a6dac3149c505b58d2e6d068b97f4dc993da55f0/lib/web/fetch/index.js#L1173
|
|
130
|
-
*/
|
|
131
|
-
if (FetchResponse.isRedirectResponse(response.status)) {
|
|
132
|
-
// Reject the request promise if its `redirect` is set to `error`
|
|
133
|
-
// and it receives a mocked redirect response.
|
|
134
|
-
if (request.redirect === 'error') {
|
|
135
|
-
responsePromise.reject(createNetworkError('unexpected redirect'))
|
|
136
|
-
return
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
if (request.redirect === 'follow') {
|
|
140
|
-
followFetchRedirect(request, response).then(
|
|
141
|
-
(response) => {
|
|
142
|
-
responsePromise.resolve(response)
|
|
143
|
-
},
|
|
144
|
-
(reason) => {
|
|
145
|
-
responsePromise.reject(reason)
|
|
146
|
-
}
|
|
147
|
-
)
|
|
148
|
-
return
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
if (this.emitter.listenerCount('response') > 0) {
|
|
153
|
-
this.logger.info('emitting the "response" event...')
|
|
154
|
-
|
|
155
|
-
// Await the response listeners to finish before resolving
|
|
156
|
-
// the response promise. This ensures all your logic finishes
|
|
157
|
-
// before the interceptor resolves the pending response.
|
|
158
|
-
await emitAsync(this.emitter, 'response', {
|
|
159
|
-
// Clone the mocked response for the "response" event listener.
|
|
160
|
-
// This way, the listener can read the response and not lock its body
|
|
161
|
-
// for the actual fetch consumer.
|
|
162
|
-
response: FetchResponse.clone(response),
|
|
163
|
-
isMockedResponse: true,
|
|
164
|
-
request,
|
|
165
|
-
requestId,
|
|
166
|
-
})
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
responsePromise.resolve(response)
|
|
170
|
-
},
|
|
171
|
-
errorWith: (reason) => {
|
|
172
|
-
this.logger.info('request has been aborted!', { reason })
|
|
173
|
-
responsePromise.reject(reason)
|
|
174
|
-
},
|
|
175
|
-
})
|
|
176
|
-
|
|
177
|
-
this.logger.info('[%s] %s', request.method, request.url)
|
|
178
|
-
this.logger.info('awaiting for the mocked response...')
|
|
179
|
-
|
|
180
|
-
this.logger.info(
|
|
181
|
-
'emitting the "request" event for %s listener(s)...',
|
|
182
|
-
this.emitter.listenerCount('request')
|
|
183
|
-
)
|
|
184
|
-
|
|
185
|
-
await handleRequest({
|
|
186
|
-
request,
|
|
187
|
-
requestId,
|
|
188
|
-
emitter: this.emitter,
|
|
189
|
-
controller,
|
|
190
|
-
})
|
|
191
|
-
|
|
192
|
-
return responsePromise
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
logger.info('patching global fetch...')
|
|
196
|
-
|
|
197
|
-
this.subscriptions.push(
|
|
198
|
-
patchesRegistry.applyPatch(globalThis, 'fetch', () => fetchProxy)
|
|
199
|
-
)
|
|
200
|
-
|
|
201
|
-
logger.info('global fetch patched!', globalThis.fetch.name)
|
|
202
|
-
}
|
|
203
|
-
}
|
package/src/utils/bufferUtils.ts
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
const encoder = new TextEncoder()
|
|
2
|
-
|
|
3
|
-
export function encodeBuffer(text: string): Uint8Array {
|
|
4
|
-
return encoder.encode(text)
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
export function decodeBuffer(buffer: ArrayBuffer, encoding?: string): string {
|
|
8
|
-
const decoder = new TextDecoder(encoding)
|
|
9
|
-
return decoder.decode(buffer)
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Create an `ArrayBuffer` from the given `Uint8Array`.
|
|
14
|
-
* Takes the byte offset into account to produce the right buffer
|
|
15
|
-
* in the case when the buffer is bigger than the data view.
|
|
16
|
-
*/
|
|
17
|
-
export function toArrayBuffer(array: Uint8Array): ArrayBuffer {
|
|
18
|
-
return array.buffer.slice(
|
|
19
|
-
array.byteOffset,
|
|
20
|
-
array.byteOffset + array.byteLength
|
|
21
|
-
)
|
|
22
|
-
}
|
package/src/utils/canParseUrl.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Returns a boolean indicating whether the given URL string
|
|
3
|
-
* can be parsed into a `URL` instance.
|
|
4
|
-
* A substitute for `URL.canParse()` for Node.js 18.
|
|
5
|
-
*/
|
|
6
|
-
export function canParseUrl(url: string): boolean {
|
|
7
|
-
try {
|
|
8
|
-
new URL(url)
|
|
9
|
-
return true
|
|
10
|
-
} catch (_error) {
|
|
11
|
-
return false
|
|
12
|
-
}
|
|
13
|
-
}
|
package/src/utils/emitAsync.ts
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { Emitter, EventMap } from 'strict-event-emitter'
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Emits an event on the given emitter but executes
|
|
5
|
-
* the listeners sequentially. This accounts for asynchronous
|
|
6
|
-
* listeners (e.g. those having "sleep" and handling the request).
|
|
7
|
-
*/
|
|
8
|
-
export async function emitAsync<
|
|
9
|
-
Events extends EventMap,
|
|
10
|
-
EventName extends keyof Events
|
|
11
|
-
>(
|
|
12
|
-
emitter: Emitter<Events>,
|
|
13
|
-
eventName: EventName,
|
|
14
|
-
...data: Events[EventName]
|
|
15
|
-
): Promise<void> {
|
|
16
|
-
const listeners = emitter.listeners(eventName)
|
|
17
|
-
|
|
18
|
-
if (listeners.length === 0) {
|
|
19
|
-
return
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
for (const listener of listeners) {
|
|
23
|
-
await listener.apply(emitter, data)
|
|
24
|
-
}
|
|
25
|
-
}
|
package/src/utils/nextTick.ts
DELETED
package/src/utils/node/index.ts
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { ClientRequest } from 'node:http'
|
|
2
|
-
import { Readable } from 'node:stream'
|
|
3
|
-
import { invariant } from 'outvariant'
|
|
4
|
-
import { getRawRequest } from '../../getRawRequest'
|
|
5
|
-
|
|
6
|
-
const kRawRequestBodyStream = Symbol('kRawRequestBodyStream')
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Returns the request body stream of the given request.
|
|
10
|
-
* @note This is only relevant in the context of `http.ClientRequest`.
|
|
11
|
-
* This function will throw if the given `request` wasn't created based on
|
|
12
|
-
* the `http.ClientRequest` instance.
|
|
13
|
-
* You must rely on the web stream consumers for other request clients.
|
|
14
|
-
*/
|
|
15
|
-
export function getClientRequestBodyStream(request: Request): Readable {
|
|
16
|
-
const rawRequest = getRawRequest(request)
|
|
17
|
-
|
|
18
|
-
invariant(
|
|
19
|
-
rawRequest instanceof ClientRequest,
|
|
20
|
-
`Failed to retrieve raw request body stream: request is not an instance of "http.ClientRequest". Note that you can only use the "getClientRequestBodyStream" function with the requests issued by "http.clientRequest".`
|
|
21
|
-
)
|
|
22
|
-
|
|
23
|
-
const requestBodyStream = Reflect.get(request, kRawRequestBodyStream)
|
|
24
|
-
|
|
25
|
-
invariant(
|
|
26
|
-
requestBodyStream instanceof Readable,
|
|
27
|
-
'Failed to retrieve raw request body stream: corrupted stream (%s)',
|
|
28
|
-
typeof requestBodyStream
|
|
29
|
-
)
|
|
30
|
-
|
|
31
|
-
return requestBodyStream
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export function setRawRequestBodyStream(
|
|
35
|
-
request: Request,
|
|
36
|
-
stream: Readable
|
|
37
|
-
): void {
|
|
38
|
-
Reflect.set(request, kRawRequestBodyStream, stream)
|
|
39
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/src/interceptors/XMLHttpRequest/utils/{getBodyByteLength.ts → get-body-byte-length.ts}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|