@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,12 +1,11 @@
|
|
|
1
|
-
import { n as
|
|
2
|
-
import {
|
|
3
|
-
import { n as encodeBuffer, r as toArrayBuffer, t as decodeBuffer } from "./
|
|
4
|
-
import { n as
|
|
5
|
-
import { n as
|
|
1
|
+
import { n as Interceptor, r as createLogger, t as createRequestId } from "./create-request-id-DlEd4GOA.js";
|
|
2
|
+
import { c as RequestController, i as isResponseError, n as FetchResponse, t as FetchRequest } from "./fetch-utils-zxA_SD66.js";
|
|
3
|
+
import { n as encodeBuffer, r as toArrayBuffer, t as decodeBuffer } from "./buffer-utils-DJj7YzLG.js";
|
|
4
|
+
import { n as HttpResponseEvent, t as handleRequest } from "./handle-request-CIOa9O-N.js";
|
|
5
|
+
import { n as patchesRegistry, t as hasConfigurableGlobal } from "./has-configurable-global-Cew-dYqk.js";
|
|
6
6
|
import { invariant } from "outvariant";
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
//#region src/interceptors/XMLHttpRequest/utils/concatArrayBuffer.ts
|
|
7
|
+
import { until } from "@open-draft/until";
|
|
8
|
+
//#region src/interceptors/XMLHttpRequest/utils/concat-array-buffer.ts
|
|
10
9
|
/**
|
|
11
10
|
* Concatenate two `Uint8Array` buffers.
|
|
12
11
|
*/
|
|
@@ -16,9 +15,8 @@ function concatArrayBuffer(left, right) {
|
|
|
16
15
|
result.set(right, left.byteLength);
|
|
17
16
|
return result;
|
|
18
17
|
}
|
|
19
|
-
|
|
20
18
|
//#endregion
|
|
21
|
-
//#region src/interceptors/XMLHttpRequest/polyfills/
|
|
19
|
+
//#region src/interceptors/XMLHttpRequest/polyfills/event-polyfill.ts
|
|
22
20
|
var EventPolyfill = class {
|
|
23
21
|
constructor(type, options) {
|
|
24
22
|
this.NONE = 0;
|
|
@@ -58,9 +56,8 @@ var EventPolyfill = class {
|
|
|
58
56
|
stopPropagation() {}
|
|
59
57
|
stopImmediatePropagation() {}
|
|
60
58
|
};
|
|
61
|
-
|
|
62
59
|
//#endregion
|
|
63
|
-
//#region src/interceptors/XMLHttpRequest/polyfills/
|
|
60
|
+
//#region src/interceptors/XMLHttpRequest/polyfills/progress-event-polyfill.ts
|
|
64
61
|
var ProgressEventPolyfill = class extends EventPolyfill {
|
|
65
62
|
constructor(type, init) {
|
|
66
63
|
super(type);
|
|
@@ -70,9 +67,8 @@ var ProgressEventPolyfill = class extends EventPolyfill {
|
|
|
70
67
|
this.total = init?.total || 0;
|
|
71
68
|
}
|
|
72
69
|
};
|
|
73
|
-
|
|
74
70
|
//#endregion
|
|
75
|
-
//#region src/interceptors/XMLHttpRequest/utils/
|
|
71
|
+
//#region src/interceptors/XMLHttpRequest/utils/create-event.ts
|
|
76
72
|
const SUPPORTS_PROGRESS_EVENT = typeof ProgressEvent !== "undefined";
|
|
77
73
|
function createEvent(target, type, init) {
|
|
78
74
|
const progressEvents = [
|
|
@@ -98,9 +94,8 @@ function createEvent(target, type, init) {
|
|
|
98
94
|
currentTarget: target
|
|
99
95
|
});
|
|
100
96
|
}
|
|
101
|
-
|
|
102
97
|
//#endregion
|
|
103
|
-
//#region src/utils/
|
|
98
|
+
//#region src/utils/find-property-source.ts
|
|
104
99
|
/**
|
|
105
100
|
* Returns the source object of the given property on the target object
|
|
106
101
|
* (the target itself, any parent in its prototype, or null).
|
|
@@ -111,9 +106,8 @@ function findPropertySource(target, propertyName) {
|
|
|
111
106
|
const prototype = Reflect.getPrototypeOf(target);
|
|
112
107
|
return prototype ? findPropertySource(prototype, propertyName) : null;
|
|
113
108
|
}
|
|
114
|
-
|
|
115
109
|
//#endregion
|
|
116
|
-
//#region src/utils/
|
|
110
|
+
//#region src/utils/create-proxy.ts
|
|
117
111
|
function createProxy(target, options) {
|
|
118
112
|
return new Proxy(target, optionsToProxyHandler(options));
|
|
119
113
|
}
|
|
@@ -149,17 +143,16 @@ function optionsToProxyHandler(options) {
|
|
|
149
143
|
const next = () => target[propertyName];
|
|
150
144
|
const value = typeof getProperty !== "undefined" ? getProperty.call(target, [propertyName, receiver], next) : next();
|
|
151
145
|
if (typeof value === "function") return (...args) => {
|
|
152
|
-
const next
|
|
153
|
-
if (typeof methodCall !== "undefined") return methodCall.call(target, [propertyName, args], next
|
|
154
|
-
return next
|
|
146
|
+
const next = value.bind(target, ...args);
|
|
147
|
+
if (typeof methodCall !== "undefined") return methodCall.call(target, [propertyName, args], next);
|
|
148
|
+
return next();
|
|
155
149
|
};
|
|
156
150
|
return value;
|
|
157
151
|
};
|
|
158
152
|
return handler;
|
|
159
153
|
}
|
|
160
|
-
|
|
161
154
|
//#endregion
|
|
162
|
-
//#region src/interceptors/XMLHttpRequest/utils/
|
|
155
|
+
//#region src/interceptors/XMLHttpRequest/utils/is-dom-parser-supported-type.ts
|
|
163
156
|
function isDomParserSupportedType(type) {
|
|
164
157
|
return [
|
|
165
158
|
"application/xhtml+xml",
|
|
@@ -171,9 +164,8 @@ function isDomParserSupportedType(type) {
|
|
|
171
164
|
return type.startsWith(supportedType);
|
|
172
165
|
});
|
|
173
166
|
}
|
|
174
|
-
|
|
175
167
|
//#endregion
|
|
176
|
-
//#region src/utils/
|
|
168
|
+
//#region src/utils/parse-json.ts
|
|
177
169
|
/**
|
|
178
170
|
* Parses a given string into JSON.
|
|
179
171
|
* Gracefully handles invalid JSON by returning `null`.
|
|
@@ -185,9 +177,8 @@ function parseJson(data) {
|
|
|
185
177
|
return null;
|
|
186
178
|
}
|
|
187
179
|
}
|
|
188
|
-
|
|
189
180
|
//#endregion
|
|
190
|
-
//#region src/interceptors/XMLHttpRequest/utils/
|
|
181
|
+
//#region src/interceptors/XMLHttpRequest/utils/create-response.ts
|
|
191
182
|
/**
|
|
192
183
|
* Creates a Fetch API `Response` instance from the given
|
|
193
184
|
* `XMLHttpRequest` instance and a response body.
|
|
@@ -211,9 +202,8 @@ function createHeadersFromXMLHttpRequestHeaders(headersString) {
|
|
|
211
202
|
}
|
|
212
203
|
return headers;
|
|
213
204
|
}
|
|
214
|
-
|
|
215
205
|
//#endregion
|
|
216
|
-
//#region src/interceptors/XMLHttpRequest/utils/
|
|
206
|
+
//#region src/interceptors/XMLHttpRequest/utils/get-body-byte-length.ts
|
|
217
207
|
/**
|
|
218
208
|
* Return a total byte length of the given request/response body.
|
|
219
209
|
* If the `Content-Length` header is present, it will be used as the byte length.
|
|
@@ -223,12 +213,11 @@ async function getBodyByteLength(input) {
|
|
|
223
213
|
if (explicitContentLength != null && explicitContentLength !== "") return Number(explicitContentLength);
|
|
224
214
|
return (await input.arrayBuffer()).byteLength;
|
|
225
215
|
}
|
|
226
|
-
|
|
227
216
|
//#endregion
|
|
228
|
-
//#region src/interceptors/XMLHttpRequest/
|
|
217
|
+
//#region src/interceptors/XMLHttpRequest/xml-http-request-controller.ts
|
|
229
218
|
const kIsRequestHandled = Symbol("kIsRequestHandled");
|
|
230
|
-
const IS_NODE = isNodeProcess();
|
|
231
219
|
const kFetchRequest = Symbol("kFetchRequest");
|
|
220
|
+
const MAX_REDIRECTS = 20;
|
|
232
221
|
/**
|
|
233
222
|
* An `XMLHttpRequest` instance controller that allows us
|
|
234
223
|
* to handle any given request instance (e.g. responding to it).
|
|
@@ -237,112 +226,91 @@ var XMLHttpRequestController = class {
|
|
|
237
226
|
constructor(initialRequest, logger) {
|
|
238
227
|
this.initialRequest = initialRequest;
|
|
239
228
|
this.logger = logger;
|
|
229
|
+
this.sync = false;
|
|
240
230
|
this.method = "GET";
|
|
241
231
|
this.url = null;
|
|
242
232
|
this[kIsRequestHandled] = false;
|
|
233
|
+
this.redirectCount = 0;
|
|
243
234
|
this.events = /* @__PURE__ */ new Map();
|
|
244
235
|
this.uploadEvents = /* @__PURE__ */ new Map();
|
|
245
236
|
this.requestId = createRequestId();
|
|
246
237
|
this.requestHeaders = new Headers();
|
|
247
|
-
this.responseBuffer = new Uint8Array();
|
|
248
|
-
this.request = createProxy(initialRequest, {
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
this.
|
|
259
|
-
return invoke();
|
|
238
|
+
this.responseBuffer = /* @__PURE__ */ new Uint8Array();
|
|
239
|
+
this.request = createProxy(initialRequest, { methodCall: ([methodName, args], invoke) => {
|
|
240
|
+
switch (methodName) {
|
|
241
|
+
case "open": {
|
|
242
|
+
const [method, url, async] = args;
|
|
243
|
+
this.sync = !(async ?? true);
|
|
244
|
+
if (typeof url === "undefined") {
|
|
245
|
+
this.method = "GET";
|
|
246
|
+
this.url = toAbsoluteUrl(method);
|
|
247
|
+
} else {
|
|
248
|
+
this.method = method;
|
|
249
|
+
this.url = toAbsoluteUrl(url);
|
|
260
250
|
}
|
|
261
|
-
|
|
251
|
+
this.logger.verbose("open %s %s", this.method, this.url.href);
|
|
252
|
+
return invoke();
|
|
262
253
|
}
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
case "addEventListener": {
|
|
280
|
-
const [eventName, listener] = args;
|
|
281
|
-
this.registerEvent(eventName, listener);
|
|
282
|
-
this.logger.info("addEventListener", eventName, listener);
|
|
283
|
-
return invoke();
|
|
284
|
-
}
|
|
285
|
-
case "setRequestHeader": {
|
|
286
|
-
const [name, value] = args;
|
|
287
|
-
this.requestHeaders.set(name, value);
|
|
288
|
-
this.logger.info("setRequestHeader", name, value);
|
|
254
|
+
case "addEventListener": {
|
|
255
|
+
const [eventName, listener] = args;
|
|
256
|
+
this.registerEvent(eventName, listener);
|
|
257
|
+
this.logger.verbose("addEventListener", eventName, listener);
|
|
258
|
+
return invoke();
|
|
259
|
+
}
|
|
260
|
+
case "setRequestHeader": {
|
|
261
|
+
const [name, value] = args;
|
|
262
|
+
this.requestHeaders.set(name, value);
|
|
263
|
+
this.logger.verbose("setRequestHeader", name, value);
|
|
264
|
+
return invoke();
|
|
265
|
+
}
|
|
266
|
+
case "send": {
|
|
267
|
+
const [body] = args;
|
|
268
|
+
if (this.sync) {
|
|
269
|
+
console.warn(`Failed to intercept an XMLHttpRequest (${this.method} ${this.url}): synchronous requests are not supported. This request will be performed as-is.`);
|
|
289
270
|
return invoke();
|
|
290
271
|
}
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
this
|
|
305
|
-
response: fetchResponse,
|
|
306
|
-
isMockedResponse: this[kIsRequestHandled],
|
|
307
|
-
request: fetchRequest,
|
|
308
|
-
requestId: this.requestId
|
|
309
|
-
});
|
|
310
|
-
}
|
|
311
|
-
});
|
|
312
|
-
const requestBody = typeof body === "string" ? encodeBuffer(body) : body;
|
|
313
|
-
const fetchRequest = this.toFetchApiRequest(requestBody);
|
|
314
|
-
this[kFetchRequest] = fetchRequest.clone();
|
|
315
|
-
/**
|
|
316
|
-
* @note Start request handling on the next tick so that the user
|
|
317
|
-
* could add event listeners for "loadend" before the interceptor fires it.
|
|
318
|
-
*/
|
|
319
|
-
queueMicrotask(() => {
|
|
320
|
-
(this.onRequest?.call(this, {
|
|
272
|
+
this.request.addEventListener("load", () => {
|
|
273
|
+
if (typeof this.onResponse !== "undefined") {
|
|
274
|
+
const fetchResponse = createResponse(
|
|
275
|
+
this.request,
|
|
276
|
+
/**
|
|
277
|
+
* The `response` property is the right way to read
|
|
278
|
+
* the ambiguous response body, as the request's "responseType" may differ.
|
|
279
|
+
* @see https://xhr.spec.whatwg.org/#the-response-attribute
|
|
280
|
+
*/
|
|
281
|
+
this.request.response
|
|
282
|
+
);
|
|
283
|
+
this.onResponse.call(this, {
|
|
284
|
+
response: fetchResponse,
|
|
285
|
+
responseType: this[kIsRequestHandled] ? "mock" : "original",
|
|
321
286
|
request: fetchRequest,
|
|
322
287
|
requestId: this.requestId
|
|
323
|
-
}) || Promise.resolve()).finally(() => {
|
|
324
|
-
if (!this[kIsRequestHandled]) {
|
|
325
|
-
this.logger.info("request callback settled but request has not been handled (readystate %d), performing as-is...", this.request.readyState);
|
|
326
|
-
/**
|
|
327
|
-
* @note Set the intercepted request ID on the original request in Node.js
|
|
328
|
-
* so that if it triggers any other interceptors, they don't attempt
|
|
329
|
-
* to process it once again.
|
|
330
|
-
*
|
|
331
|
-
* For instance, XMLHttpRequest is often implemented via "http.ClientRequest"
|
|
332
|
-
* and we don't want for both XHR and ClientRequest interceptors to
|
|
333
|
-
* handle the same request at the same time (e.g. emit the "response" event twice).
|
|
334
|
-
*/
|
|
335
|
-
if (IS_NODE) this.request.setRequestHeader(INTERNAL_REQUEST_ID_HEADER_NAME, this.requestId);
|
|
336
|
-
return invoke();
|
|
337
|
-
}
|
|
338
288
|
});
|
|
289
|
+
}
|
|
290
|
+
});
|
|
291
|
+
const requestBody = typeof body === "string" ? encodeBuffer(body) : body;
|
|
292
|
+
const fetchRequest = this.toFetchApiRequest(requestBody);
|
|
293
|
+
this[kFetchRequest] = fetchRequest.clone();
|
|
294
|
+
/**
|
|
295
|
+
* @note Start request handling on the next tick so that the user
|
|
296
|
+
* could add event listeners for "loadend" before the interceptor fires it.
|
|
297
|
+
*/
|
|
298
|
+
queueMicrotask(() => {
|
|
299
|
+
(this.onRequest?.call(this, {
|
|
300
|
+
request: fetchRequest,
|
|
301
|
+
requestId: this.requestId
|
|
302
|
+
}) || Promise.resolve()).finally(() => {
|
|
303
|
+
if (!this[kIsRequestHandled]) {
|
|
304
|
+
this.logger.verbose("request callback settled but request has not been handled (readystate %d), performing as-is...", this.request.readyState);
|
|
305
|
+
return invoke();
|
|
306
|
+
}
|
|
339
307
|
});
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
default: return invoke();
|
|
308
|
+
});
|
|
309
|
+
break;
|
|
343
310
|
}
|
|
311
|
+
default: return invoke();
|
|
344
312
|
}
|
|
345
|
-
});
|
|
313
|
+
} });
|
|
346
314
|
/**
|
|
347
315
|
* Proxy the `.upload` property to gather the event listeners/callbacks.
|
|
348
316
|
*/
|
|
@@ -367,7 +335,7 @@ var XMLHttpRequestController = class {
|
|
|
367
335
|
case "addEventListener": {
|
|
368
336
|
const [eventName, listener] = args;
|
|
369
337
|
this.registerUploadEvent(eventName, listener);
|
|
370
|
-
this.logger.
|
|
338
|
+
this.logger.verbose("upload.addEventListener", eventName, listener);
|
|
371
339
|
return invoke();
|
|
372
340
|
}
|
|
373
341
|
}
|
|
@@ -377,12 +345,12 @@ var XMLHttpRequestController = class {
|
|
|
377
345
|
registerEvent(eventName, listener) {
|
|
378
346
|
const nextEvents = (this.events.get(eventName) || []).concat(listener);
|
|
379
347
|
this.events.set(eventName, nextEvents);
|
|
380
|
-
this.logger.
|
|
348
|
+
this.logger.verbose("registered event \"%s\"", eventName, listener);
|
|
381
349
|
}
|
|
382
350
|
registerUploadEvent(eventName, listener) {
|
|
383
351
|
const nextEvents = (this.uploadEvents.get(eventName) || []).concat(listener);
|
|
384
352
|
this.uploadEvents.set(eventName, nextEvents);
|
|
385
|
-
this.logger.
|
|
353
|
+
this.logger.verbose("registered upload event \"%s\"", eventName, listener);
|
|
386
354
|
}
|
|
387
355
|
/**
|
|
388
356
|
* Responds to the current request with the given
|
|
@@ -398,55 +366,8 @@ var XMLHttpRequestController = class {
|
|
|
398
366
|
* calculating request/response total body length is asynchronous.
|
|
399
367
|
*/
|
|
400
368
|
this[kIsRequestHandled] = true;
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
* @see https://github.com/mswjs/interceptors/issues/573
|
|
404
|
-
*/
|
|
405
|
-
if (this[kFetchRequest]) {
|
|
406
|
-
const totalRequestBodyLength = await getBodyByteLength(this[kFetchRequest]);
|
|
407
|
-
this.trigger("loadstart", this.request.upload, {
|
|
408
|
-
loaded: 0,
|
|
409
|
-
total: totalRequestBodyLength
|
|
410
|
-
});
|
|
411
|
-
this.trigger("progress", this.request.upload, {
|
|
412
|
-
loaded: totalRequestBodyLength,
|
|
413
|
-
total: totalRequestBodyLength
|
|
414
|
-
});
|
|
415
|
-
this.trigger("load", this.request.upload, {
|
|
416
|
-
loaded: totalRequestBodyLength,
|
|
417
|
-
total: totalRequestBodyLength
|
|
418
|
-
});
|
|
419
|
-
this.trigger("loadend", this.request.upload, {
|
|
420
|
-
loaded: totalRequestBodyLength,
|
|
421
|
-
total: totalRequestBodyLength
|
|
422
|
-
});
|
|
423
|
-
}
|
|
424
|
-
this.logger.info("responding with a mocked response: %d %s", response.status, response.statusText);
|
|
425
|
-
define(this.request, "status", response.status);
|
|
426
|
-
define(this.request, "statusText", response.statusText);
|
|
427
|
-
define(this.request, "responseURL", this.url.href);
|
|
428
|
-
this.request.getResponseHeader = new Proxy(this.request.getResponseHeader, { apply: (_, __, args) => {
|
|
429
|
-
this.logger.info("getResponseHeader", args[0]);
|
|
430
|
-
if (this.request.readyState < this.request.HEADERS_RECEIVED) {
|
|
431
|
-
this.logger.info("headers not received yet, returning null");
|
|
432
|
-
return null;
|
|
433
|
-
}
|
|
434
|
-
const headerValue = response.headers.get(args[0]);
|
|
435
|
-
this.logger.info("resolved response header \"%s\" to", args[0], headerValue);
|
|
436
|
-
return headerValue;
|
|
437
|
-
} });
|
|
438
|
-
this.request.getAllResponseHeaders = new Proxy(this.request.getAllResponseHeaders, { apply: () => {
|
|
439
|
-
this.logger.info("getAllResponseHeaders");
|
|
440
|
-
if (this.request.readyState < this.request.HEADERS_RECEIVED) {
|
|
441
|
-
this.logger.info("headers not received yet, returning empty string");
|
|
442
|
-
return "";
|
|
443
|
-
}
|
|
444
|
-
const allHeaders = Array.from(response.headers.entries()).map(([headerName, headerValue]) => {
|
|
445
|
-
return `${headerName}: ${headerValue}`;
|
|
446
|
-
}).join("\r\n");
|
|
447
|
-
this.logger.info("resolved all response headers to", allHeaders);
|
|
448
|
-
return allHeaders;
|
|
449
|
-
} });
|
|
369
|
+
this.logger.verbose("responding with a mocked response: %d %s", response.status, response.statusText);
|
|
370
|
+
FetchResponse.setUrl(this.url.href, response);
|
|
450
371
|
Object.defineProperties(this.request, {
|
|
451
372
|
response: {
|
|
452
373
|
enumerable: true,
|
|
@@ -464,75 +385,203 @@ var XMLHttpRequestController = class {
|
|
|
464
385
|
get: () => this.responseXML
|
|
465
386
|
}
|
|
466
387
|
});
|
|
467
|
-
const totalResponseBodyLength = await getBodyByteLength(response.clone());
|
|
468
|
-
this.logger.info("calculated response body length", totalResponseBodyLength);
|
|
469
388
|
this.trigger("loadstart", this.request, {
|
|
470
389
|
loaded: 0,
|
|
471
|
-
total:
|
|
390
|
+
total: 0
|
|
472
391
|
});
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
this.
|
|
392
|
+
let requestBodyTransmitted = 0;
|
|
393
|
+
let uploadComplete = false;
|
|
394
|
+
if (this[kFetchRequest]) {
|
|
395
|
+
const requestBodyLength = await getBodyByteLength(this[kFetchRequest].clone());
|
|
396
|
+
if (!uploadComplete) this.trigger("loadstart", this.request.upload, {
|
|
397
|
+
loaded: 0,
|
|
398
|
+
total: requestBodyLength
|
|
399
|
+
});
|
|
400
|
+
const processRequestBodyChunkLength = (bytesLength) => {
|
|
401
|
+
requestBodyTransmitted += bytesLength;
|
|
402
|
+
if (requestBodyTransmitted < requestBodyLength) this.trigger("progress", this.request.upload, {
|
|
403
|
+
loaded: requestBodyTransmitted,
|
|
404
|
+
total: requestBodyLength
|
|
405
|
+
});
|
|
406
|
+
};
|
|
407
|
+
const processRequestEndOfBody = () => {
|
|
408
|
+
uploadComplete = true;
|
|
409
|
+
this.trigger("progress", this.request.upload, {
|
|
410
|
+
loaded: requestBodyTransmitted,
|
|
411
|
+
total: requestBodyLength
|
|
412
|
+
});
|
|
413
|
+
this.trigger("load", this.request.upload, {
|
|
414
|
+
loaded: requestBodyTransmitted,
|
|
415
|
+
total: requestBodyLength
|
|
416
|
+
});
|
|
417
|
+
this.trigger("loadend", this.request.upload, {
|
|
418
|
+
loaded: requestBodyTransmitted,
|
|
419
|
+
total: requestBodyLength
|
|
420
|
+
});
|
|
421
|
+
};
|
|
422
|
+
if (this[kFetchRequest]?.body != null) {
|
|
423
|
+
const reader = this[kFetchRequest].body.getReader();
|
|
424
|
+
while (true) {
|
|
425
|
+
const { value, done } = await reader.read();
|
|
426
|
+
if (done) {
|
|
427
|
+
processRequestEndOfBody();
|
|
428
|
+
break;
|
|
429
|
+
}
|
|
430
|
+
processRequestBodyChunkLength(value.byteLength);
|
|
431
|
+
}
|
|
432
|
+
} else processRequestEndOfBody();
|
|
433
|
+
}
|
|
434
|
+
let timedOut = false;
|
|
435
|
+
const responseReadController = new AbortController();
|
|
436
|
+
const requestErrorSteps = (event) => {
|
|
477
437
|
this.setReadyState(this.request.DONE);
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
438
|
+
if (!uploadComplete) {
|
|
439
|
+
this.trigger(event, this.request.upload, {
|
|
440
|
+
loaded: 0,
|
|
441
|
+
total: 0
|
|
442
|
+
});
|
|
443
|
+
this.trigger("loadend", this.request.upload, {
|
|
444
|
+
loaded: 0,
|
|
445
|
+
total: 0
|
|
446
|
+
});
|
|
447
|
+
}
|
|
448
|
+
this.trigger(event, this.request, {
|
|
449
|
+
loaded: 0,
|
|
450
|
+
total: 0
|
|
481
451
|
});
|
|
482
452
|
this.trigger("loadend", this.request, {
|
|
483
|
-
loaded:
|
|
484
|
-
total:
|
|
453
|
+
loaded: 0,
|
|
454
|
+
total: 0
|
|
485
455
|
});
|
|
486
456
|
};
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
457
|
+
const processResponse = async (response) => {
|
|
458
|
+
const handleErrors = () => {
|
|
459
|
+
if (timedOut) requestErrorSteps("timeout");
|
|
460
|
+
else if (responseReadController.signal.aborted) requestErrorSteps("abort");
|
|
461
|
+
else if (isResponseError(response)) requestErrorSteps("error");
|
|
462
|
+
};
|
|
463
|
+
handleErrors();
|
|
464
|
+
define(this.request, "status", response.status);
|
|
465
|
+
define(this.request, "statusText", response.statusText);
|
|
466
|
+
if (!this.request.responseURL) define(this.request, "responseURL", response.url);
|
|
467
|
+
if (isResponseError(response)) return;
|
|
468
|
+
/**
|
|
469
|
+
* @note The response body length is derived ONLY from the "content-length" header.
|
|
470
|
+
* If that response header is not set, the "total" in all progress events must be 0.
|
|
471
|
+
*/
|
|
472
|
+
const responseBodyLength = Number(response.headers.get("content-length") ?? "0");
|
|
473
|
+
this.setReadyState(this.request.HEADERS_RECEIVED);
|
|
474
|
+
let receivedBytes = 0;
|
|
475
|
+
let lastReceivedResponseBytesAt = performance.now();
|
|
476
|
+
const processResponseBodyChunk = (bytesLength) => {
|
|
477
|
+
receivedBytes += bytesLength;
|
|
478
|
+
const now = performance.now();
|
|
479
|
+
const shouldBuffer = now - lastReceivedResponseBytesAt <= 60 && receivedBytes < responseBodyLength;
|
|
480
|
+
lastReceivedResponseBytesAt = now;
|
|
481
|
+
if (shouldBuffer) return;
|
|
482
|
+
if (this.request.readyState === this.request.HEADERS_RECEIVED) this.setReadyState(this.request.LOADING, false);
|
|
483
|
+
this.trigger("readystatechange", this.request);
|
|
484
|
+
this.trigger("progress", this.request, {
|
|
485
|
+
loaded: receivedBytes,
|
|
486
|
+
total: responseBodyLength
|
|
487
|
+
});
|
|
506
488
|
};
|
|
507
|
-
|
|
508
|
-
|
|
489
|
+
const processResponseBodyError = () => {
|
|
490
|
+
requestErrorSteps("error");
|
|
491
|
+
};
|
|
492
|
+
const processResponseEndOfBody = async () => {
|
|
493
|
+
handleErrors();
|
|
494
|
+
if (isResponseError(response)) return;
|
|
495
|
+
let transmitted = receivedBytes;
|
|
496
|
+
this.setReadyState(this.request.DONE);
|
|
497
|
+
this.trigger("load", this.request, {
|
|
498
|
+
loaded: transmitted,
|
|
499
|
+
total: responseBodyLength
|
|
500
|
+
});
|
|
501
|
+
this.trigger("loadend", this.request, {
|
|
502
|
+
loaded: transmitted,
|
|
503
|
+
total: responseBodyLength
|
|
504
|
+
});
|
|
505
|
+
};
|
|
506
|
+
if (response.body == null) processResponseEndOfBody();
|
|
507
|
+
else {
|
|
508
|
+
const reader = response.body.getReader();
|
|
509
|
+
while (true) {
|
|
510
|
+
if (responseReadController.signal.aborted) break;
|
|
511
|
+
try {
|
|
512
|
+
const { value, done } = await reader.read();
|
|
513
|
+
if (done) {
|
|
514
|
+
processResponseEndOfBody();
|
|
515
|
+
return;
|
|
516
|
+
}
|
|
517
|
+
processResponseBodyChunk(value.byteLength);
|
|
518
|
+
this.responseBuffer = concatArrayBuffer(this.responseBuffer, value);
|
|
519
|
+
} catch {
|
|
520
|
+
processResponseBodyError();
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
};
|
|
525
|
+
const [redirectError, finalResponse] = await until(() => {
|
|
526
|
+
return this.followRedirects(response);
|
|
527
|
+
});
|
|
528
|
+
if (redirectError) return;
|
|
529
|
+
processResponse(finalResponse);
|
|
530
|
+
if (this.request.timeout) setTimeout(() => {
|
|
531
|
+
if (this.request.readyState !== this.request.DONE) {
|
|
532
|
+
timedOut = true;
|
|
533
|
+
responseReadController.abort();
|
|
534
|
+
}
|
|
535
|
+
}, this.request.timeout);
|
|
536
|
+
this.request.getResponseHeader = new Proxy(this.request.getResponseHeader, { apply: (_, __, args) => {
|
|
537
|
+
this.logger.verbose("getResponseHeader", args[0]);
|
|
538
|
+
if (this.request.readyState < this.request.HEADERS_RECEIVED) {
|
|
539
|
+
this.logger.verbose("headers not received yet, returning null");
|
|
540
|
+
return null;
|
|
541
|
+
}
|
|
542
|
+
const headerValue = finalResponse.headers.get(args[0]);
|
|
543
|
+
this.logger.verbose("resolved response header \"%s\" to", args[0], headerValue);
|
|
544
|
+
return headerValue;
|
|
545
|
+
} });
|
|
546
|
+
this.request.getAllResponseHeaders = new Proxy(this.request.getAllResponseHeaders, { apply: () => {
|
|
547
|
+
this.logger.verbose("getAllResponseHeaders");
|
|
548
|
+
if (this.request.readyState < this.request.HEADERS_RECEIVED) {
|
|
549
|
+
this.logger.verbose("headers not received yet, returning empty string");
|
|
550
|
+
return "";
|
|
551
|
+
}
|
|
552
|
+
const allHeaders = Array.from(finalResponse.headers).map(([headerName, headerValue]) => {
|
|
553
|
+
return `${headerName}: ${headerValue}`;
|
|
554
|
+
}).join("\r\n");
|
|
555
|
+
this.logger.verbose("resolved all response headers to", allHeaders);
|
|
556
|
+
return allHeaders;
|
|
557
|
+
} });
|
|
509
558
|
}
|
|
510
559
|
responseBufferToText() {
|
|
511
560
|
return decodeBuffer(this.responseBuffer);
|
|
512
561
|
}
|
|
513
562
|
get response() {
|
|
514
|
-
this.logger.
|
|
563
|
+
this.logger.verbose("getResponse (responseType: %s)", this.request.responseType);
|
|
515
564
|
if (this.request.readyState !== this.request.DONE) return null;
|
|
516
565
|
switch (this.request.responseType) {
|
|
517
566
|
case "json": {
|
|
518
567
|
const responseJson = parseJson(this.responseBufferToText());
|
|
519
|
-
this.logger.
|
|
568
|
+
this.logger.verbose("resolved response JSON", responseJson);
|
|
520
569
|
return responseJson;
|
|
521
570
|
}
|
|
522
571
|
case "arraybuffer": {
|
|
523
572
|
const arrayBuffer = toArrayBuffer(this.responseBuffer);
|
|
524
|
-
this.logger.
|
|
573
|
+
this.logger.verbose("resolved response ArrayBuffer", arrayBuffer);
|
|
525
574
|
return arrayBuffer;
|
|
526
575
|
}
|
|
527
576
|
case "blob": {
|
|
528
577
|
const mimeType = this.request.getResponseHeader("Content-Type") || "text/plain";
|
|
529
578
|
const responseBlob = new Blob([this.responseBufferToText()], { type: mimeType });
|
|
530
|
-
this.logger.
|
|
579
|
+
this.logger.verbose("resolved response Blob (mime type: %s)", responseBlob, mimeType);
|
|
531
580
|
return responseBlob;
|
|
532
581
|
}
|
|
533
582
|
default: {
|
|
534
583
|
const responseText = this.responseBufferToText();
|
|
535
|
-
this.logger.
|
|
584
|
+
this.logger.verbose("resolving \"%s\" response type as text", this.request.responseType, responseText);
|
|
536
585
|
return responseText;
|
|
537
586
|
}
|
|
538
587
|
}
|
|
@@ -546,7 +595,7 @@ var XMLHttpRequestController = class {
|
|
|
546
595
|
invariant(this.request.responseType === "" || this.request.responseType === "text", "InvalidStateError: The object is in invalid state.");
|
|
547
596
|
if (this.request.readyState !== this.request.LOADING && this.request.readyState !== this.request.DONE) return "";
|
|
548
597
|
const responseText = this.responseBufferToText();
|
|
549
|
-
this.logger.
|
|
598
|
+
this.logger.verbose("getResponseText: \"%s\"", responseText);
|
|
550
599
|
return responseText;
|
|
551
600
|
}
|
|
552
601
|
get responseXML() {
|
|
@@ -560,13 +609,36 @@ var XMLHttpRequestController = class {
|
|
|
560
609
|
if (isDomParserSupportedType(contentType)) return new DOMParser().parseFromString(this.responseBufferToText(), contentType);
|
|
561
610
|
return null;
|
|
562
611
|
}
|
|
612
|
+
async followRedirects(response) {
|
|
613
|
+
const redirectLocation = response.headers.get("location");
|
|
614
|
+
if (!redirectLocation || !FetchResponse.isRedirectResponse(response.status)) return response;
|
|
615
|
+
this.redirectCount++;
|
|
616
|
+
if (this.redirectCount > MAX_REDIRECTS) throw new Error("Too many redirects");
|
|
617
|
+
const redirectUrl = new URL(redirectLocation, location.href);
|
|
618
|
+
const redirectMethod = FetchResponse.isResponseWithBody(response.status) ? this.method : "GET";
|
|
619
|
+
const redirectResponse = await new Promise((resolve, reject) => {
|
|
620
|
+
const request = new XMLHttpRequest();
|
|
621
|
+
request.responseType = this.request.responseType;
|
|
622
|
+
request.addEventListener("load", () => {
|
|
623
|
+
this.url = new URL(request.responseURL);
|
|
624
|
+
resolve(createResponse(request, request.response));
|
|
625
|
+
});
|
|
626
|
+
request.addEventListener("error", () => {
|
|
627
|
+
this.errorWith();
|
|
628
|
+
reject(/* @__PURE__ */ new Error("Redirect request failed"));
|
|
629
|
+
});
|
|
630
|
+
request.open(redirectMethod, redirectUrl.href);
|
|
631
|
+
request.send();
|
|
632
|
+
});
|
|
633
|
+
return this.followRedirects(redirectResponse);
|
|
634
|
+
}
|
|
563
635
|
errorWith(error) {
|
|
564
636
|
/**
|
|
565
637
|
* @note Mark this request as handled even if it received a mock error.
|
|
566
638
|
* This prevents the controller from trying to perform this request as-is.
|
|
567
639
|
*/
|
|
568
640
|
this[kIsRequestHandled] = true;
|
|
569
|
-
this.logger.
|
|
641
|
+
this.logger.verbose("responding with an error");
|
|
570
642
|
this.setReadyState(this.request.DONE);
|
|
571
643
|
this.trigger("error", this.request);
|
|
572
644
|
this.trigger("loadend", this.request);
|
|
@@ -574,16 +646,17 @@ var XMLHttpRequestController = class {
|
|
|
574
646
|
/**
|
|
575
647
|
* Transitions this request's `readyState` to the given one.
|
|
576
648
|
*/
|
|
577
|
-
setReadyState(nextReadyState) {
|
|
578
|
-
this.logger.
|
|
649
|
+
setReadyState(nextReadyState, triggerReadyStateChangeEvent = true) {
|
|
650
|
+
this.logger.verbose("setReadyState: %d -> %d", this.request.readyState, nextReadyState);
|
|
579
651
|
if (this.request.readyState === nextReadyState) {
|
|
580
|
-
this.logger.
|
|
652
|
+
this.logger.verbose("ready state identical, skipping transition...");
|
|
581
653
|
return;
|
|
582
654
|
}
|
|
583
655
|
define(this.request, "readyState", nextReadyState);
|
|
584
|
-
this.logger.
|
|
656
|
+
this.logger.verbose("set readyState to: %d", nextReadyState);
|
|
657
|
+
if (!triggerReadyStateChangeEvent) return;
|
|
585
658
|
if (nextReadyState !== this.request.UNSENT) {
|
|
586
|
-
this.logger.
|
|
659
|
+
this.logger.verbose("triggering \"readystatechange\" event...");
|
|
587
660
|
this.trigger("readystatechange", this.request);
|
|
588
661
|
}
|
|
589
662
|
}
|
|
@@ -593,14 +666,14 @@ var XMLHttpRequestController = class {
|
|
|
593
666
|
trigger(eventName, target, options) {
|
|
594
667
|
const callback = target[`on${eventName}`];
|
|
595
668
|
const event = createEvent(target, eventName, options);
|
|
596
|
-
this.logger.
|
|
669
|
+
this.logger.verbose("trigger \"%s\"", eventName, options || "");
|
|
597
670
|
if (typeof callback === "function") {
|
|
598
|
-
this.logger.
|
|
671
|
+
this.logger.verbose("found a direct \"%s\" callback, calling...", eventName);
|
|
599
672
|
callback.call(target, event);
|
|
600
673
|
}
|
|
601
674
|
const events = target instanceof XMLHttpRequestUpload ? this.uploadEvents : this.events;
|
|
602
675
|
for (const [registeredEventName, listeners] of events) if (registeredEventName === eventName) {
|
|
603
|
-
this.logger.
|
|
676
|
+
this.logger.verbose("found %d listener(s) for \"%s\" event, calling...", listeners.length, eventName);
|
|
604
677
|
listeners.forEach((listener) => listener.call(target, event));
|
|
605
678
|
}
|
|
606
679
|
}
|
|
@@ -608,13 +681,16 @@ var XMLHttpRequestController = class {
|
|
|
608
681
|
* Converts this `XMLHttpRequest` instance into a Fetch API `Request` instance.
|
|
609
682
|
*/
|
|
610
683
|
toFetchApiRequest(body) {
|
|
611
|
-
this.logger.
|
|
684
|
+
this.logger.verbose("converting request to a Fetch API Request...");
|
|
612
685
|
const resolvedBody = body instanceof Document ? body.documentElement.innerText : body;
|
|
613
686
|
const fetchRequest = new FetchRequest(this.url.href, {
|
|
614
687
|
method: this.method,
|
|
615
688
|
headers: this.requestHeaders,
|
|
689
|
+
/**
|
|
690
|
+
* @see https://xhr.spec.whatwg.org/#cross-origin-credentials
|
|
691
|
+
*/
|
|
616
692
|
credentials: this.request.withCredentials ? "include" : "same-origin",
|
|
617
|
-
body:
|
|
693
|
+
body: resolvedBody
|
|
618
694
|
});
|
|
619
695
|
define(fetchRequest, "headers", createProxy(fetchRequest.headers, { methodCall: ([methodName, args], invoke) => {
|
|
620
696
|
switch (methodName) {
|
|
@@ -632,8 +708,7 @@ var XMLHttpRequestController = class {
|
|
|
632
708
|
}
|
|
633
709
|
return invoke();
|
|
634
710
|
} }));
|
|
635
|
-
|
|
636
|
-
this.logger.info("converted request to a Fetch API Request!", fetchRequest);
|
|
711
|
+
this.logger.verbose("converted request to a Fetch API Request!", fetchRequest);
|
|
637
712
|
return fetchRequest;
|
|
638
713
|
}
|
|
639
714
|
};
|
|
@@ -655,9 +730,8 @@ function define(target, property, value) {
|
|
|
655
730
|
value
|
|
656
731
|
});
|
|
657
732
|
}
|
|
658
|
-
|
|
659
733
|
//#endregion
|
|
660
|
-
//#region src/interceptors/XMLHttpRequest/
|
|
734
|
+
//#region src/interceptors/XMLHttpRequest/xml-http-request-proxy.ts
|
|
661
735
|
/**
|
|
662
736
|
* Create a proxied `XMLHttpRequest` class.
|
|
663
737
|
* The proxied class establishes spies on certain methods,
|
|
@@ -665,7 +739,7 @@ function define(target, property, value) {
|
|
|
665
739
|
*/
|
|
666
740
|
function createXMLHttpRequestProxy({ emitter, logger }) {
|
|
667
741
|
return new Proxy(globalThis.XMLHttpRequest, { construct(target, args, newTarget) {
|
|
668
|
-
logger.
|
|
742
|
+
logger.verbose("constructed new XMLHttpRequest");
|
|
669
743
|
const originalRequest = Reflect.construct(target, args, newTarget);
|
|
670
744
|
/**
|
|
671
745
|
* @note Forward prototype descriptors onto the proxied object.
|
|
@@ -680,67 +754,65 @@ function createXMLHttpRequestProxy({ emitter, logger }) {
|
|
|
680
754
|
xhrRequestController.onRequest = async function({ request, requestId }) {
|
|
681
755
|
const controller = new RequestController(request, {
|
|
682
756
|
passthrough: () => {
|
|
683
|
-
this.logger.
|
|
757
|
+
this.logger.verbose("no mocked response received, performing request as-is...");
|
|
684
758
|
},
|
|
685
759
|
respondWith: async (response) => {
|
|
686
|
-
if (isResponseError(response)) {
|
|
687
|
-
this.errorWith(/* @__PURE__ */ new TypeError("Network error"));
|
|
688
|
-
return;
|
|
689
|
-
}
|
|
690
760
|
await this.respondWith(response);
|
|
691
761
|
},
|
|
692
762
|
errorWith: (reason) => {
|
|
693
|
-
this.logger.
|
|
763
|
+
this.logger.verbose("request errored %o", { error: reason });
|
|
694
764
|
if (reason instanceof Error) this.errorWith(reason);
|
|
695
765
|
}
|
|
766
|
+
}, {
|
|
767
|
+
logger,
|
|
768
|
+
requestId
|
|
696
769
|
});
|
|
697
|
-
this.logger.
|
|
698
|
-
this.logger.
|
|
770
|
+
this.logger.verbose("awaiting mocked response");
|
|
771
|
+
this.logger.verbose("emitting the \"request\" event for %s listener(s)...", emitter.listenerCount("request"));
|
|
699
772
|
await handleRequest({
|
|
773
|
+
initiator: this.request,
|
|
700
774
|
request,
|
|
701
775
|
requestId,
|
|
702
776
|
controller,
|
|
703
|
-
emitter
|
|
777
|
+
emitter,
|
|
778
|
+
logger
|
|
704
779
|
});
|
|
705
780
|
};
|
|
706
|
-
xhrRequestController.onResponse = async function({ response,
|
|
707
|
-
this.logger.
|
|
708
|
-
emitter.
|
|
781
|
+
xhrRequestController.onResponse = async function({ response, responseType, request, requestId }) {
|
|
782
|
+
this.logger.verbose("emitting the \"response\" event for %s listener(s)...", emitter.listenerCount("response"));
|
|
783
|
+
await emitter.emitAsPromise(new HttpResponseEvent({
|
|
784
|
+
initiator: this.request,
|
|
709
785
|
response,
|
|
710
|
-
|
|
786
|
+
responseType,
|
|
711
787
|
request,
|
|
712
788
|
requestId
|
|
713
|
-
});
|
|
789
|
+
}));
|
|
714
790
|
};
|
|
715
791
|
return xhrRequestController.request;
|
|
716
792
|
} });
|
|
717
793
|
}
|
|
718
|
-
|
|
719
794
|
//#endregion
|
|
720
|
-
//#region src/interceptors/XMLHttpRequest/
|
|
721
|
-
|
|
795
|
+
//#region src/interceptors/XMLHttpRequest/web.ts
|
|
796
|
+
const logger = createLogger("xhr");
|
|
797
|
+
var XMLHttpRequestInterceptor = class extends Interceptor {
|
|
722
798
|
static {
|
|
723
799
|
this.symbol = Symbol.for("xhr-interceptor");
|
|
724
800
|
}
|
|
725
|
-
|
|
726
|
-
super(XMLHttpRequestInterceptor.symbol);
|
|
727
|
-
}
|
|
728
|
-
checkEnvironment() {
|
|
801
|
+
predicate() {
|
|
729
802
|
return hasConfigurableGlobal("XMLHttpRequest");
|
|
730
803
|
}
|
|
731
804
|
setup() {
|
|
732
|
-
|
|
733
|
-
logger.info("patching global XMLHttpRequest...");
|
|
805
|
+
logger.verbose("patching \"XMLHttpRequest\"...");
|
|
734
806
|
this.subscriptions.push(patchesRegistry.applyPatch(globalThis, "XMLHttpRequest", () => {
|
|
735
807
|
return createXMLHttpRequestProxy({
|
|
736
808
|
emitter: this.emitter,
|
|
737
|
-
logger
|
|
809
|
+
logger
|
|
738
810
|
});
|
|
739
811
|
}));
|
|
740
|
-
logger.
|
|
812
|
+
logger.verbose("global \"XMLHttpRequest\" patched!", globalThis.XMLHttpRequest.name);
|
|
741
813
|
}
|
|
742
814
|
};
|
|
743
|
-
|
|
744
815
|
//#endregion
|
|
745
816
|
export { XMLHttpRequestInterceptor as t };
|
|
746
|
-
|
|
817
|
+
|
|
818
|
+
//# sourceMappingURL=web-C2oKsT3Q.js.map
|