@mswjs/interceptors 0.41.9 → 0.42.1
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-Bk5YX1AM.js +720 -0
- package/lib/browser/create-request-id-Bk5YX1AM.js.map +1 -0
- package/lib/browser/{getRawRequest-B1BqgWG6.mjs → fetch-utils-CUOrwEQf.js} +123 -52
- package/lib/browser/fetch-utils-CUOrwEQf.js.map +1 -0
- package/lib/browser/handle-request-CqVvBhcw.js +167 -0
- package/lib/browser/handle-request-CqVvBhcw.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/{XMLHttpRequest-DrZAf3w6.mjs → web-BcKSQghf.js} +327 -255
- package/lib/browser/web-BcKSQghf.js.map +1 -0
- package/lib/browser/web-CdcYFjgm.js +248 -0
- package/lib/browser/web-CdcYFjgm.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
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { i as Interceptor } from "./buffer-utils-BvPY1Tc-.js";
|
|
2
|
+
//#region src/batch-interceptor.ts
|
|
3
|
+
function addEventBridge(interceptor, type, listener) {
|
|
4
|
+
interceptor.on(type, listener);
|
|
5
|
+
}
|
|
6
|
+
function removeEventBridge(interceptor, type, listener) {
|
|
7
|
+
interceptor.removeListener(type, listener);
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* A batch interceptor that exposes a single interface
|
|
11
|
+
* to apply and operate with multiple interceptors at once.
|
|
12
|
+
*/
|
|
13
|
+
var BatchInterceptor = class extends Interceptor {
|
|
14
|
+
#interceptors;
|
|
15
|
+
#eventBridges;
|
|
16
|
+
#forwardedEvents;
|
|
17
|
+
constructor(options) {
|
|
18
|
+
super();
|
|
19
|
+
this.#interceptors = options.interceptors;
|
|
20
|
+
this.#eventBridges = /* @__PURE__ */ new Map();
|
|
21
|
+
this.#forwardedEvents = /* @__PURE__ */ new Map();
|
|
22
|
+
this.emitter.hooks.on("newListener", (type) => {
|
|
23
|
+
this.#ensureEventBridge(type);
|
|
24
|
+
}, { persist: true });
|
|
25
|
+
this.emitter.hooks.on("removeListener", (type) => {
|
|
26
|
+
if (this.emitter.listenerCount(type) === 0) this.#removeEventBridge(type);
|
|
27
|
+
}, { persist: true });
|
|
28
|
+
}
|
|
29
|
+
predicate() {
|
|
30
|
+
for (const interceptor of this.#interceptors) if (interceptor["predicate"]())
|
|
31
|
+
/**
|
|
32
|
+
* @note If at least one of the provided interceptors suits the environment,
|
|
33
|
+
* treat this batch interceptor as matching. Since all the interceptors abide
|
|
34
|
+
* by the same event map, it will handle the events from any that match.
|
|
35
|
+
*/
|
|
36
|
+
return true;
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
setup() {
|
|
40
|
+
const interceptors = new Set(this.#interceptors);
|
|
41
|
+
this.#forwardedEvents = /* @__PURE__ */ new Map();
|
|
42
|
+
this.logger.verbose("applying batch %s with %d interceptors", this.constructor.name, interceptors.size);
|
|
43
|
+
this.subscriptions.push(() => {
|
|
44
|
+
this.#removeAllEventBridges();
|
|
45
|
+
});
|
|
46
|
+
for (const interceptor of interceptors) {
|
|
47
|
+
this.logger.verbose("applying \"%s\" interceptor...", interceptor.constructor.name);
|
|
48
|
+
interceptor.apply(this);
|
|
49
|
+
this.logger.verbose("adding interceptor dispose subscription");
|
|
50
|
+
this.subscriptions.push(() => {
|
|
51
|
+
interceptor.dispose(this);
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
#ensureEventBridge(type) {
|
|
56
|
+
if (this.#eventBridges.has(type)) return;
|
|
57
|
+
if (type === "*") {
|
|
58
|
+
this.#ensureWildcardEventBridge();
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
this.#ensureTypedEventBridge(type);
|
|
62
|
+
}
|
|
63
|
+
#ensureTypedEventBridge(type) {
|
|
64
|
+
const interceptors = new Set(this.#interceptors);
|
|
65
|
+
const batchEmitter = this.emitter;
|
|
66
|
+
const forwardEvent = async (event) => {
|
|
67
|
+
if (this.#recordForwardedEvent(event)) {
|
|
68
|
+
this.logger.verbose("skipping duplicate \"%s\" event", event.type);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
this.logger.verbose("forwarding \"%s\" event", event.type);
|
|
72
|
+
await batchEmitter.emitAsPromise(event);
|
|
73
|
+
};
|
|
74
|
+
for (const interceptor of interceptors) addEventBridge(interceptor, type, forwardEvent);
|
|
75
|
+
this.#eventBridges.set(type, () => {
|
|
76
|
+
for (const interceptor of interceptors) removeEventBridge(interceptor, type, forwardEvent);
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
#ensureWildcardEventBridge() {
|
|
80
|
+
const interceptors = new Set(this.#interceptors);
|
|
81
|
+
const batchEmitter = this.emitter;
|
|
82
|
+
const forwardEvent = (event) => {
|
|
83
|
+
if (this.#recordForwardedEvent(event)) {
|
|
84
|
+
this.logger.verbose("skipping duplicate \"%s\" event", event.type);
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
this.logger.verbose("forwarding wildcard \"%s\" event", event.type);
|
|
88
|
+
batchEmitter.emitAsPromise(event);
|
|
89
|
+
};
|
|
90
|
+
for (const interceptor of interceptors) addEventBridge(interceptor, "*", forwardEvent);
|
|
91
|
+
this.#eventBridges.set("*", () => {
|
|
92
|
+
for (const interceptor of interceptors) removeEventBridge(interceptor, "*", forwardEvent);
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
#recordForwardedEvent(event) {
|
|
96
|
+
const forwardedEvents = this.#forwardedEvents.get(event.type);
|
|
97
|
+
if (forwardedEvents?.has(event)) return true;
|
|
98
|
+
if (forwardedEvents) {
|
|
99
|
+
forwardedEvents.add(event);
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
this.#forwardedEvents.set(event.type, new WeakSet([event]));
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
#removeEventBridge(type) {
|
|
106
|
+
const disposeEventBridge = this.#eventBridges.get(type);
|
|
107
|
+
if (!disposeEventBridge) return;
|
|
108
|
+
disposeEventBridge();
|
|
109
|
+
this.#eventBridges.delete(type);
|
|
110
|
+
}
|
|
111
|
+
#removeAllEventBridges() {
|
|
112
|
+
for (const disposeEventBridge of this.#eventBridges.values()) disposeEventBridge();
|
|
113
|
+
this.#eventBridges.clear();
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
//#endregion
|
|
117
|
+
export { BatchInterceptor as t };
|
|
118
|
+
|
|
119
|
+
//# sourceMappingURL=batch-interceptor-ByEZVih3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch-interceptor-ByEZVih3.js","names":["#interceptors","#eventBridges","#forwardedEvents","#ensureEventBridge","#removeEventBridge","#removeAllEventBridges","#ensureWildcardEventBridge","#ensureTypedEventBridge","#recordForwardedEvent"],"sources":["../../src/batch-interceptor.ts"],"sourcesContent":["import {\n type DefaultEventMap,\n Emitter,\n type TypedEvent,\n type WithReservedEvents,\n} from 'rettime'\nimport { Interceptor } from './interceptor'\nimport { type DisposableSubscription } from './disposable'\n\ntype GenericEventListener = Emitter.Listener<\n Emitter<DefaultEventMap>,\n string\n>\n\nfunction addEventBridge(\n interceptor: Interceptor<DefaultEventMap>,\n type: string,\n listener: GenericEventListener\n): void {\n interceptor.on(type, listener)\n}\n\nfunction removeEventBridge(\n interceptor: Interceptor<DefaultEventMap>,\n type: string,\n listener: GenericEventListener\n): void {\n interceptor.removeListener(type, listener)\n}\n\nexport interface BatchInterceptorOptions<\n InterceptorList extends ReadonlyArray<Interceptor<DefaultEventMap>>,\n> {\n name: string\n interceptors: InterceptorList\n}\n\ntype UnionToIntersection<Union> = (\n Union extends unknown ? (argument: Union) => void : never\n) extends (argument: infer Intersection) => void\n ? Intersection\n : never\n\n/**\n * @note Merge the event maps of all the given interceptors into\n * an intersection. A naive conditional type distributes over the\n * interceptor union, producing a union of event maps whose `keyof`\n * is `never` (no common keys), which would make `.on()` unusable.\n */\nexport type ExtractEventMapType<\n InterceptorList extends ReadonlyArray<Interceptor<DefaultEventMap>>,\n> =\n InterceptorList extends ReadonlyArray<infer InterceptorType>\n ? UnionToIntersection<\n InterceptorType extends Interceptor<infer EventMap> ? EventMap : never\n >\n : never\n\n/**\n * A batch interceptor that exposes a single interface\n * to apply and operate with multiple interceptors at once.\n */\nexport class BatchInterceptor<\n InterceptorList extends ReadonlyArray<Interceptor<DefaultEventMap>>,\n Events extends DefaultEventMap = ExtractEventMapType<InterceptorList>,\n> extends Interceptor<Events> {\n #interceptors: InterceptorList\n #eventBridges: Map<string, DisposableSubscription>\n #forwardedEvents: Map<string, WeakSet<object>>\n\n constructor(options: BatchInterceptorOptions<InterceptorList>) {\n super()\n\n this.#interceptors = options.interceptors\n this.#eventBridges = new Map()\n this.#forwardedEvents = new Map()\n\n this.emitter.hooks.on(\n 'newListener',\n (type) => {\n this.#ensureEventBridge(type)\n },\n {\n persist: true,\n }\n )\n\n this.emitter.hooks.on(\n 'removeListener',\n (type) => {\n if (this.emitter.listenerCount(type) === 0) {\n this.#removeEventBridge(type)\n }\n },\n {\n persist: true,\n }\n )\n }\n\n protected predicate(): boolean {\n for (const interceptor of this.#interceptors) {\n if (interceptor['predicate']()) {\n /**\n * @note If at least one of the provided interceptors suits the environment,\n * treat this batch interceptor as matching. Since all the interceptors abide\n * by the same event map, it will handle the events from any that match.\n */\n return true\n }\n }\n\n return false\n }\n\n protected setup(): void {\n const interceptors = new Set(this.#interceptors)\n\n this.#forwardedEvents = new Map()\n\n this.logger.verbose(\n 'applying batch %s with %d interceptors',\n this.constructor.name,\n interceptors.size\n )\n\n this.subscriptions.push(() => {\n this.#removeAllEventBridges()\n })\n\n for (const interceptor of interceptors) {\n this.logger.verbose(\n 'applying \"%s\" interceptor...',\n interceptor.constructor.name\n )\n interceptor.apply(this)\n\n this.logger.verbose('adding interceptor dispose subscription')\n this.subscriptions.push(() => {\n interceptor.dispose(this)\n })\n }\n }\n\n #ensureEventBridge(\n type: keyof WithReservedEvents<Events> & string\n ): void {\n if (this.#eventBridges.has(type)) {\n return\n }\n\n if (type === '*') {\n this.#ensureWildcardEventBridge()\n return\n }\n\n this.#ensureTypedEventBridge(type)\n }\n\n #ensureTypedEventBridge(type: keyof Events & string): void {\n const interceptors = new Set(this.#interceptors)\n const batchEmitter = this.emitter as Emitter<DefaultEventMap>\n const forwardEvent: GenericEventListener = async (event) => {\n if (this.#recordForwardedEvent(event)) {\n this.logger.verbose('skipping duplicate \"%s\" event', event.type)\n return\n }\n\n this.logger.verbose('forwarding \"%s\" event', event.type)\n await batchEmitter.emitAsPromise(event)\n }\n\n for (const interceptor of interceptors) {\n addEventBridge(interceptor, type, forwardEvent)\n }\n\n this.#eventBridges.set(type, () => {\n for (const interceptor of interceptors) {\n removeEventBridge(interceptor, type, forwardEvent)\n }\n })\n }\n\n #ensureWildcardEventBridge(): void {\n const interceptors = new Set(this.#interceptors)\n const batchEmitter = this.emitter as Emitter<DefaultEventMap>\n const forwardEvent: GenericEventListener = (event: TypedEvent): void => {\n if (this.#recordForwardedEvent(event)) {\n this.logger.verbose('skipping duplicate \"%s\" event', event.type)\n return\n }\n\n this.logger.verbose('forwarding wildcard \"%s\" event', event.type)\n void batchEmitter.emitAsPromise(event)\n }\n\n for (const interceptor of interceptors) {\n addEventBridge(interceptor, '*', forwardEvent)\n }\n\n this.#eventBridges.set('*', () => {\n for (const interceptor of interceptors) {\n removeEventBridge(interceptor, '*', forwardEvent)\n }\n })\n }\n\n #recordForwardedEvent(event: TypedEvent): boolean {\n const forwardedEvents = this.#forwardedEvents.get(event.type)\n\n if (forwardedEvents?.has(event)) {\n return true\n }\n\n if (forwardedEvents) {\n forwardedEvents.add(event)\n return false\n }\n\n this.#forwardedEvents.set(event.type, new WeakSet([event]))\n return false\n }\n\n #removeEventBridge(\n type: keyof WithReservedEvents<Events> & string\n ): void {\n const disposeEventBridge = this.#eventBridges.get(type)\n\n if (!disposeEventBridge) {\n return\n }\n\n disposeEventBridge()\n this.#eventBridges.delete(type)\n }\n\n #removeAllEventBridges(): void {\n for (const disposeEventBridge of this.#eventBridges.values()) {\n disposeEventBridge()\n }\n\n this.#eventBridges.clear()\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { t as Interceptor } from "./interceptor-dtJZ_9QT.js";
|
|
2
|
+
import { DefaultEventMap } from "rettime";
|
|
3
|
+
//#region src/batch-interceptor.d.ts
|
|
4
|
+
interface BatchInterceptorOptions<InterceptorList extends ReadonlyArray<Interceptor<DefaultEventMap>>> {
|
|
5
|
+
name: string;
|
|
6
|
+
interceptors: InterceptorList;
|
|
7
|
+
}
|
|
8
|
+
type UnionToIntersection<Union> = (Union extends unknown ? (argument: Union) => void : never) extends ((argument: infer Intersection) => void) ? Intersection : never;
|
|
9
|
+
/**
|
|
10
|
+
* @note Merge the event maps of all the given interceptors into
|
|
11
|
+
* an intersection. A naive conditional type distributes over the
|
|
12
|
+
* interceptor union, producing a union of event maps whose `keyof`
|
|
13
|
+
* is `never` (no common keys), which would make `.on()` unusable.
|
|
14
|
+
*/
|
|
15
|
+
type ExtractEventMapType<InterceptorList extends ReadonlyArray<Interceptor<DefaultEventMap>>> = InterceptorList extends ReadonlyArray<infer InterceptorType> ? UnionToIntersection<InterceptorType extends Interceptor<infer EventMap> ? EventMap : never> : never;
|
|
16
|
+
/**
|
|
17
|
+
* A batch interceptor that exposes a single interface
|
|
18
|
+
* to apply and operate with multiple interceptors at once.
|
|
19
|
+
*/
|
|
20
|
+
declare class BatchInterceptor<InterceptorList extends ReadonlyArray<Interceptor<DefaultEventMap>>, Events extends DefaultEventMap = ExtractEventMapType<InterceptorList>> extends Interceptor<Events> {
|
|
21
|
+
#private;
|
|
22
|
+
constructor(options: BatchInterceptorOptions<InterceptorList>);
|
|
23
|
+
protected predicate(): boolean;
|
|
24
|
+
protected setup(): void;
|
|
25
|
+
}
|
|
26
|
+
//#endregion
|
|
27
|
+
export { BatchInterceptor as t };
|
|
28
|
+
//# sourceMappingURL=batch-interceptor-CPjFK2td.d.ts.map
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { Emitter } from "rettime";
|
|
2
|
+
import debug from "debug";
|
|
3
|
+
//#region src/disposable.ts
|
|
4
|
+
var Disposable = class {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.subscriptions = [];
|
|
7
|
+
}
|
|
8
|
+
dispose() {
|
|
9
|
+
let subscription;
|
|
10
|
+
while (subscription = this.subscriptions.pop()) subscription();
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
//#endregion
|
|
14
|
+
//#region src/utils/logger.ts
|
|
15
|
+
const LOG_TIMESTAMP_REGEXP = /\d{2}:\d{2}:\d{2}\.\d{3}/;
|
|
16
|
+
function normalizeNamespace(namespace) {
|
|
17
|
+
return namespace.split(":").map((segment) => {
|
|
18
|
+
return segment.replace(/([a-z0-9])([A-Z])/g, "$1-$2").replace(/[^a-zA-Z0-9]+/g, "-").replace(/^-|-$/g, "").toLowerCase();
|
|
19
|
+
}).filter(Boolean).join(":");
|
|
20
|
+
}
|
|
21
|
+
function getTimestamp() {
|
|
22
|
+
return (/* @__PURE__ */ new Date()).toISOString().slice(11, 23);
|
|
23
|
+
}
|
|
24
|
+
async function readBody(message) {
|
|
25
|
+
if (message.body == null) return null;
|
|
26
|
+
try {
|
|
27
|
+
return await message.clone().text();
|
|
28
|
+
} catch {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function formatHeaders(headers) {
|
|
33
|
+
return Array.from(headers.entries()).map(([name, value]) => {
|
|
34
|
+
return `${name}: ${value}`;
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
async function formatHttpMessage(startLine, message) {
|
|
38
|
+
const lines = [startLine, ...formatHeaders(message.headers)];
|
|
39
|
+
const body = await readBody(message);
|
|
40
|
+
lines.push("", body ?? "");
|
|
41
|
+
return lines.join("\n");
|
|
42
|
+
}
|
|
43
|
+
async function formatRequest(request) {
|
|
44
|
+
return formatHttpMessage(`${request.method} ${request.url}`, request);
|
|
45
|
+
}
|
|
46
|
+
async function formatResponse(response) {
|
|
47
|
+
const statusText = response.statusText ? ` ${response.statusText}` : "";
|
|
48
|
+
return formatHttpMessage(`HTTP ${response.status}${statusText}`, response);
|
|
49
|
+
}
|
|
50
|
+
function formatLogArguments(arguments_) {
|
|
51
|
+
const message = arguments_[0];
|
|
52
|
+
if (typeof message === "string") {
|
|
53
|
+
const messageWithoutDebugTimestamp = message.replace(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z /, "");
|
|
54
|
+
const timestampMatch = messageWithoutDebugTimestamp.match(LOG_TIMESTAMP_REGEXP);
|
|
55
|
+
if (!timestampMatch || timestampMatch.index === void 0) {
|
|
56
|
+
arguments_[0] = messageWithoutDebugTimestamp;
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const messagePrefix = messageWithoutDebugTimestamp.slice(0, timestampMatch.index).trim();
|
|
60
|
+
const messageBody = messageWithoutDebugTimestamp.slice(timestampMatch.index + timestampMatch[0].length).trimStart();
|
|
61
|
+
arguments_[0] = `${timestampMatch[0]} ${messagePrefix} ${messageBody}`;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
function useConciseTimestamp(logger) {
|
|
65
|
+
logger.log = (...arguments_) => {
|
|
66
|
+
formatLogArguments(arguments_);
|
|
67
|
+
debug.log(...arguments_);
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
function isVerboseLoggingEnabled() {
|
|
71
|
+
if (typeof process !== "undefined" && process.env.DEBUG_LEVEL === "verbose") return true;
|
|
72
|
+
/**
|
|
73
|
+
* @note Consult the localStorage only in browser-like environments.
|
|
74
|
+
* In Node.js 26+, reading "globalThis.localStorage" without the
|
|
75
|
+
* "--localstorage-file" flag set emits an experimental warning
|
|
76
|
+
* (a try/catch cannot suppress it). Node.js consumers control the
|
|
77
|
+
* log level via the "DEBUG_LEVEL" environment variable above.
|
|
78
|
+
*/
|
|
79
|
+
if (typeof document === "undefined") return false;
|
|
80
|
+
try {
|
|
81
|
+
return globalThis.localStorage?.getItem("debugLevel") === "verbose";
|
|
82
|
+
} catch {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
function createLogger(namespace) {
|
|
87
|
+
const logger = debug(`interceptors:${normalizeNamespace(namespace)}`);
|
|
88
|
+
Reflect.set(logger, "useColors", true);
|
|
89
|
+
useConciseTimestamp(logger);
|
|
90
|
+
return {
|
|
91
|
+
info(message, ...positionals) {
|
|
92
|
+
logger(`${getTimestamp()} ${message}`, ...positionals);
|
|
93
|
+
},
|
|
94
|
+
verbose(message, ...positionals) {
|
|
95
|
+
if (!isVerboseLoggingEnabled()) return;
|
|
96
|
+
logger(`${getTimestamp()} ${message}`, ...positionals);
|
|
97
|
+
},
|
|
98
|
+
isEnabled(level) {
|
|
99
|
+
return logger.enabled && (level === "default" || isVerboseLoggingEnabled());
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
//#endregion
|
|
104
|
+
//#region src/interceptor.ts
|
|
105
|
+
const interceptorsRegistry = globalThis.__MSW_INTERCEPTORS_REGISTRY ??= /* @__PURE__ */ new Map();
|
|
106
|
+
var Interceptor = class extends Disposable {
|
|
107
|
+
#owners;
|
|
108
|
+
static singleton(InterceptorClass) {
|
|
109
|
+
const symbol = InterceptorClass.symbol;
|
|
110
|
+
const existing = interceptorsRegistry.get(symbol);
|
|
111
|
+
if (existing instanceof InterceptorClass) return existing;
|
|
112
|
+
const newInstance = new InterceptorClass();
|
|
113
|
+
interceptorsRegistry.set(symbol, newInstance);
|
|
114
|
+
return newInstance;
|
|
115
|
+
}
|
|
116
|
+
constructor() {
|
|
117
|
+
super();
|
|
118
|
+
this.on = (type, listener, options) => {
|
|
119
|
+
return this.emitter.on(type, listener, options);
|
|
120
|
+
};
|
|
121
|
+
this.once = (type, listener, options) => {
|
|
122
|
+
return this.emitter.once(type, listener, options);
|
|
123
|
+
};
|
|
124
|
+
this.listeners = (type) => {
|
|
125
|
+
return this.emitter.listeners(type);
|
|
126
|
+
};
|
|
127
|
+
this.listenerCount = (type) => {
|
|
128
|
+
return this.emitter.listenerCount(type);
|
|
129
|
+
};
|
|
130
|
+
this.removeListener = (type, listener) => {
|
|
131
|
+
return this.emitter.removeListener(type, listener);
|
|
132
|
+
};
|
|
133
|
+
this.removeAllListeners = (type) => {
|
|
134
|
+
this.logger.info("removeAllListeners %o", { eventType: type ?? "*" });
|
|
135
|
+
return this.emitter.removeAllListeners(type);
|
|
136
|
+
};
|
|
137
|
+
this.#owners = /* @__PURE__ */ new Set();
|
|
138
|
+
this.readyState = "INACTIVE";
|
|
139
|
+
this.emitter = new Emitter();
|
|
140
|
+
this.logger = createLogger(this.#getLoggerNamespace());
|
|
141
|
+
}
|
|
142
|
+
apply(owner = this) {
|
|
143
|
+
if (this.#owners.has(owner)) return;
|
|
144
|
+
if (this.readyState !== "ACTIVE" && !this.predicate()) return;
|
|
145
|
+
this.#owners.add(owner);
|
|
146
|
+
if (this.readyState === "ACTIVE") return;
|
|
147
|
+
try {
|
|
148
|
+
this.setup();
|
|
149
|
+
this.readyState = "ACTIVE";
|
|
150
|
+
this.logger.info("apply");
|
|
151
|
+
} catch (error) {
|
|
152
|
+
this.dispose(owner);
|
|
153
|
+
throw error;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
dispose(owner = this) {
|
|
157
|
+
if (!this.#owners.delete(owner)) return;
|
|
158
|
+
if (this.#owners.size > 0) return;
|
|
159
|
+
super.dispose();
|
|
160
|
+
this.emitter.removeAllListeners();
|
|
161
|
+
this.readyState = "DISPOSED";
|
|
162
|
+
this.logger.info("disable");
|
|
163
|
+
}
|
|
164
|
+
#getLoggerNamespace() {
|
|
165
|
+
const symbolDescription = this.constructor.symbol?.description;
|
|
166
|
+
if (symbolDescription) return symbolDescription.replace(/-interceptor$/, "");
|
|
167
|
+
return this.constructor.name.replace(/Interceptor$/, "");
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
//#endregion
|
|
171
|
+
//#region src/utils/buffer-utils.ts
|
|
172
|
+
const encoder = new TextEncoder();
|
|
173
|
+
function encodeBuffer(text) {
|
|
174
|
+
return encoder.encode(text);
|
|
175
|
+
}
|
|
176
|
+
function decodeBuffer(buffer, encoding) {
|
|
177
|
+
return new TextDecoder(encoding).decode(buffer);
|
|
178
|
+
}
|
|
179
|
+
function toBuffer(data, encoding) {
|
|
180
|
+
if (Buffer.isBuffer(data)) return data;
|
|
181
|
+
if (data instanceof Uint8Array) return Buffer.from(data.buffer);
|
|
182
|
+
return Buffer.from(data, encoding);
|
|
183
|
+
}
|
|
184
|
+
//#endregion
|
|
185
|
+
export { createLogger as a, Interceptor as i, encodeBuffer as n, formatRequest as o, toBuffer as r, formatResponse as s, decodeBuffer as t };
|
|
186
|
+
|
|
187
|
+
//# sourceMappingURL=buffer-utils-BvPY1Tc-.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buffer-utils-BvPY1Tc-.js","names":["#owners","#getLoggerNamespace"],"sources":["../../src/disposable.ts","../../src/utils/logger.ts","../../src/interceptor.ts","../../src/utils/buffer-utils.ts"],"sourcesContent":["export type DisposableSubscription = () => void\n\nexport class Disposable {\n protected subscriptions: Array<DisposableSubscription> = []\n\n public dispose() {\n let subscription: DisposableSubscription | undefined\n\n while ((subscription = this.subscriptions.pop())) {\n subscription()\n }\n }\n}\n","import debug from 'debug'\n\nexport type LogLevel = 'default' | 'verbose'\n\nexport interface Logger {\n info(message: string, ...positionals: Array<unknown>): void\n verbose(message: string, ...positionals: Array<unknown>): void\n isEnabled(level: LogLevel): boolean\n}\n\nconst LOG_TIMESTAMP_REGEXP = /\\d{2}:\\d{2}:\\d{2}\\.\\d{3}/\n\nfunction normalizeNamespace(namespace: string): string {\n return namespace\n .split(':')\n .map((segment) => {\n return segment\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/[^a-zA-Z0-9]+/g, '-')\n .replace(/^-|-$/g, '')\n .toLowerCase()\n })\n .filter(Boolean)\n .join(':')\n}\n\nfunction getTimestamp(): string {\n return new Date().toISOString().slice(11, 23)\n}\n\nasync function readBody(message: Request | Response): Promise<string | null> {\n if (message.body == null) {\n return null\n }\n\n try {\n return await message.clone().text()\n } catch {\n return null\n }\n}\n\nfunction formatHeaders(headers: Headers): Array<string> {\n return Array.from(headers.entries()).map(([name, value]) => {\n return `${name}: ${value}`\n })\n}\n\nasync function formatHttpMessage(\n startLine: string,\n message: Request | Response\n): Promise<string> {\n const lines = [startLine, ...formatHeaders(message.headers)]\n const body = await readBody(message)\n\n lines.push('', body ?? '')\n\n return lines.join('\\n')\n}\n\nexport async function formatRequest(request: Request): Promise<string> {\n return formatHttpMessage(`${request.method} ${request.url}`, request)\n}\n\nexport async function formatResponse(response: Response): Promise<string> {\n const statusText = response.statusText ? ` ${response.statusText}` : ''\n return formatHttpMessage(\n `HTTP ${response.status}${statusText}`,\n response\n )\n}\n\nfunction formatLogArguments(arguments_: Array<unknown>): void {\n const message = arguments_[0]\n\n if (typeof message === 'string') {\n const messageWithoutDebugTimestamp = message.replace(\n /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z /,\n ''\n )\n const timestampMatch = messageWithoutDebugTimestamp.match(\n LOG_TIMESTAMP_REGEXP\n )\n\n if (!timestampMatch || timestampMatch.index === undefined) {\n arguments_[0] = messageWithoutDebugTimestamp\n return\n }\n\n const messagePrefix = messageWithoutDebugTimestamp\n .slice(0, timestampMatch.index)\n .trim()\n const messageBody = messageWithoutDebugTimestamp\n .slice(timestampMatch.index + timestampMatch[0].length)\n .trimStart()\n\n arguments_[0] = `${timestampMatch[0]} ${messagePrefix} ${messageBody}`\n }\n}\n\nfunction useConciseTimestamp(logger: debug.Debugger): void {\n logger.log = (...arguments_) => {\n formatLogArguments(arguments_)\n debug.log(...arguments_)\n }\n}\n\nfunction isVerboseLoggingEnabled(): boolean {\n if (typeof process !== 'undefined' && process.env.DEBUG_LEVEL === 'verbose') {\n return true\n }\n\n /**\n * @note Consult the localStorage only in browser-like environments.\n * In Node.js 26+, reading \"globalThis.localStorage\" without the\n * \"--localstorage-file\" flag set emits an experimental warning\n * (a try/catch cannot suppress it). Node.js consumers control the\n * log level via the \"DEBUG_LEVEL\" environment variable above.\n */\n if (typeof document === 'undefined') {\n return false\n }\n\n try {\n return globalThis.localStorage?.getItem('debugLevel') === 'verbose'\n } catch {\n return false\n }\n}\n\nexport function createLogger(namespace: string): Logger {\n const normalizedNamespace = normalizeNamespace(namespace)\n const logger = debug(`interceptors:${normalizedNamespace}`)\n Reflect.set(logger, 'useColors', true)\n useConciseTimestamp(logger)\n\n return {\n info(message, ...positionals) {\n logger(`${getTimestamp()} ${message}`, ...positionals)\n },\n verbose(message, ...positionals) {\n if (!isVerboseLoggingEnabled()) {\n return\n }\n\n logger(`${getTimestamp()} ${message}`, ...positionals)\n },\n isEnabled(level) {\n return (\n logger.enabled && (level === 'default' || isVerboseLoggingEnabled())\n )\n },\n }\n}\n","import { Emitter, type DefaultEventMap } from 'rettime'\nimport { Disposable } from './disposable'\nimport { createLogger, type Logger } from './utils/logger'\n\nexport enum InterceptorReadyState {\n INACTIVE = 'INACTIVE',\n ACTIVE = 'ACTIVE',\n DISPOSED = 'DISPOSED',\n}\n\ndeclare global {\n var __MSW_INTERCEPTORS_REGISTRY: Map<symbol, Interceptor<any>> | undefined\n}\n\nconst interceptorsRegistry = (globalThis.__MSW_INTERCEPTORS_REGISTRY ??=\n new Map<symbol, Interceptor<any>>())\n\nexport abstract class Interceptor<\n Events extends DefaultEventMap,\n> extends Disposable {\n declare ['constructor']: typeof Interceptor\n\n protected emitter: Emitter<Events>\n protected readonly logger: Logger\n\n public readyState: InterceptorReadyState\n\n static readonly symbol: symbol\n\n #owners: Set<object>\n\n static singleton<T extends Interceptor<any>>(\n InterceptorClass: (new () => T) & { symbol: symbol }\n ): T {\n const symbol = InterceptorClass.symbol\n const existing = interceptorsRegistry.get(symbol)\n\n if (existing instanceof InterceptorClass) {\n return existing\n }\n\n const newInstance = new InterceptorClass()\n interceptorsRegistry.set(symbol, newInstance)\n return newInstance\n }\n\n constructor() {\n super()\n\n this.#owners = new Set()\n this.readyState = InterceptorReadyState.INACTIVE\n this.emitter = new Emitter()\n this.logger = createLogger(this.#getLoggerNamespace())\n }\n\n protected abstract predicate(): boolean\n protected abstract setup(): void\n\n public apply(owner: object = this): void {\n if (this.#owners.has(owner)) {\n return\n }\n\n if (\n this.readyState !== InterceptorReadyState.ACTIVE &&\n !this.predicate()\n ) {\n return\n }\n\n this.#owners.add(owner)\n\n if (this.readyState === InterceptorReadyState.ACTIVE) {\n return\n }\n\n try {\n this.setup()\n this.readyState = InterceptorReadyState.ACTIVE\n this.logger.info('apply')\n } catch (error) {\n this.dispose(owner)\n throw error\n }\n }\n\n public dispose(owner: object = this): void {\n if (!this.#owners.delete(owner)) {\n return\n }\n\n if (this.#owners.size > 0) {\n return\n }\n\n super.dispose()\n this.emitter.removeAllListeners()\n this.readyState = InterceptorReadyState.DISPOSED\n this.logger.info('disable')\n }\n\n public on: Emitter<Events>['on'] = (type, listener, options) => {\n return this.emitter.on(type, listener, options)\n }\n\n public once: Emitter<Events>['once'] = (type, listener, options) => {\n return this.emitter.once(type, listener, options)\n }\n\n public listeners: Emitter<Events>['listeners'] = (type) => {\n return this.emitter.listeners(type)\n }\n\n public listenerCount: Emitter<Events>['listenerCount'] = (type) => {\n return this.emitter.listenerCount(type)\n }\n\n public removeListener: Emitter<Events>['removeListener'] = (\n type,\n listener\n ) => {\n return this.emitter.removeListener(type, listener)\n }\n\n public removeAllListeners: Emitter<Events>['removeAllListeners'] = (type) => {\n this.logger.info('removeAllListeners %o', { eventType: type ?? '*' })\n return this.emitter.removeAllListeners(type)\n }\n\n #getLoggerNamespace(): string {\n const symbolDescription = this.constructor.symbol?.description\n\n if (symbolDescription) {\n return symbolDescription.replace(/-interceptor$/, '')\n }\n\n return this.constructor.name.replace(/Interceptor$/, '')\n }\n}\n","const encoder = new TextEncoder()\n\nexport function encodeBuffer(text: string) {\n return encoder.encode(text)\n}\n\nexport function decodeBuffer(buffer: AllowSharedBufferSource, encoding?: string): string {\n const decoder = new TextDecoder(encoding)\n return decoder.decode(buffer)\n}\n\n/**\n * Create an `ArrayBuffer` from the given `Uint8Array`.\n * Takes the byte offset into account to produce the right buffer\n * in the case when the buffer is bigger than the data view.\n */\nexport function toArrayBuffer(array: Uint8Array<ArrayBuffer>): ArrayBuffer {\n return array.buffer.slice(\n array.byteOffset,\n array.byteOffset + array.byteLength\n )\n}\n\nexport function toBuffer(\n data: string | Buffer | Uint8Array<ArrayBufferLike>,\n encoding?: BufferEncoding\n): Buffer {\n if (Buffer.isBuffer(data)) {\n return data\n }\n\n if (data instanceof Uint8Array) {\n return Buffer.from(data.buffer)\n }\n\n return Buffer.from(data, encoding)\n}\n"],"mappings":"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"}
|