@mswjs/interceptors 0.16.5 → 0.16.6

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/lib/glossary.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import type { HeadersObject, Headers } from 'headers-polyfill';
2
2
  import type { LazyCallback } from './utils/createLazyCallback';
3
+ export declare const IS_PATCHED_MODULE: unique symbol;
3
4
  export declare type RequestCredentials = 'omit' | 'include' | 'same-origin';
4
5
  export interface IsomorphicRequest {
5
6
  id: string;
package/lib/glossary.js CHANGED
@@ -1,3 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IS_PATCHED_MODULE = void 0;
4
+ exports.IS_PATCHED_MODULE = Symbol('isPatchedModule');
3
5
  //# sourceMappingURL=glossary.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"glossary.js","sourceRoot":"","sources":["../src/glossary.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"glossary.js","sourceRoot":"","sources":["../src/glossary.ts"],"names":[],"mappings":";;;AAGa,QAAA,iBAAiB,GAAkB,MAAM,CAAC,iBAAiB,CAAC,CAAA"}
@@ -1,12 +1,15 @@
1
1
  /// <reference types="node" />
2
2
  import http from 'http';
3
3
  import https from 'https';
4
- import { HttpRequestEventMap } from '../../glossary';
4
+ import { HttpRequestEventMap, IS_PATCHED_MODULE } from '../../glossary';
5
5
  import { Interceptor } from '../../Interceptor';
6
6
  import { AsyncEventEmitter } from '../../utils/AsyncEventEmitter';
7
7
  import { Protocol } from './NodeClientRequest';
8
+ export declare type MaybePatchedModule<Module> = Module & {
9
+ [IS_PATCHED_MODULE]?: boolean;
10
+ };
8
11
  export declare type ClientRequestEmitter = AsyncEventEmitter<HttpRequestEventMap>;
9
- export declare type ClientRequestModules = Map<Protocol, typeof http | typeof https>;
12
+ export declare type ClientRequestModules = Map<Protocol, MaybePatchedModule<typeof http> | MaybePatchedModule<typeof https>>;
10
13
  /**
11
14
  * Intercept requests made via the `ClientRequest` class.
12
15
  * Such requests include `http.get`, `https.request`, etc.
@@ -48,6 +48,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
48
48
  exports.ClientRequestInterceptor = void 0;
49
49
  var http_1 = __importDefault(require("http"));
50
50
  var https_1 = __importDefault(require("https"));
51
+ var outvariant_1 = require("outvariant");
52
+ var glossary_1 = require("../../glossary");
51
53
  var Interceptor_1 = require("../../Interceptor");
52
54
  var http_get_1 = require("./http.get");
53
55
  var http_request_1 = require("./http.request");
@@ -69,7 +71,11 @@ var ClientRequestInterceptor = /** @class */ (function (_super) {
69
71
  var log = this.log.extend('setup');
70
72
  var _loop_1 = function (protocol, requestModule) {
71
73
  var pureRequest = requestModule.request, pureGet = requestModule.get;
74
+ outvariant_1.invariant(!requestModule[glossary_1.IS_PATCHED_MODULE], 'Failed to patch the "%s" module: already patched.', protocol);
72
75
  this_1.subscriptions.push(function () {
76
+ Object.defineProperty(requestModule, glossary_1.IS_PATCHED_MODULE, {
77
+ value: undefined,
78
+ });
73
79
  requestModule.request = pureRequest;
74
80
  requestModule.get = pureGet;
75
81
  log('native "%s" module restored!', protocol);
@@ -86,6 +92,11 @@ var ClientRequestInterceptor = /** @class */ (function (_super) {
86
92
  requestModule.get =
87
93
  // Force a line break.
88
94
  http_get_1.get(protocol, options);
95
+ Object.defineProperty(requestModule, glossary_1.IS_PATCHED_MODULE, {
96
+ configurable: true,
97
+ enumerable: true,
98
+ value: true,
99
+ });
89
100
  log('native "%s" module patched!', protocol);
90
101
  };
91
102
  var this_1 = this;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/interceptors/ClientRequest/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8CAAuB;AACvB,gDAAyB;AAEzB,iDAA+C;AAE/C,uCAAgC;AAChC,+CAAwC;AAOxC;;;GAGG;AACH;IAA8C,4CAAgC;IAI5E;QAAA,YACE,kBAAM,wBAAwB,CAAC,MAAM,CAAC,SAKvC;QAHC,KAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAA;QACxB,KAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,cAAI,CAAC,CAAA;QAC9B,KAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,eAAK,CAAC,CAAA;;IAClC,CAAC;IAES,wCAAK,GAAf;;QACE,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;gCAExB,QAAQ,EAAE,aAAa;YACzB,IAAS,WAAW,GAAmB,aAAa,QAAhC,EAAO,OAAO,GAAK,aAAa,IAAlB,CAAkB;YAE5D,OAAK,aAAa,CAAC,IAAI,CAAC;gBACtB,aAAa,CAAC,OAAO,GAAG,WAAW,CAAA;gBACnC,aAAa,CAAC,GAAG,GAAG,OAAO,CAAA;gBAE3B,GAAG,CAAC,8BAA8B,EAAE,QAAQ,CAAC,CAAA;YAC/C,CAAC,CAAC,CAAA;YAEF,IAAM,OAAO,GAAsB;gBACjC,OAAO,EAAE,OAAK,OAAO;gBACrB,GAAG,EAAE,OAAK,GAAG;aACd,CAAA;YAED,aAAa;YACb,aAAa,CAAC,OAAO;gBACnB,sBAAsB;gBACtB,sBAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;YAE5B,aAAa;YACb,aAAa,CAAC,GAAG;gBACf,sBAAsB;gBACtB,cAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;YAExB,GAAG,CAAC,6BAA6B,EAAE,QAAQ,CAAC,CAAA;;;;YAzB9C,KAAwC,IAAA,KAAA,SAAA,IAAI,CAAC,OAAO,CAAA,gBAAA;gBAAzC,IAAA,KAAA,mBAAyB,EAAxB,QAAQ,QAAA,EAAE,aAAa,QAAA;wBAAvB,QAAQ,EAAE,aAAa;aA0BlC;;;;;;;;;IACH,CAAC;IAzCM,+BAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;IA0ChC,+BAAC;CAAA,AA3CD,CAA8C,yBAAW,GA2CxD;AA3CY,4DAAwB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/interceptors/ClientRequest/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8CAAuB;AACvB,gDAAyB;AACzB,yCAAsC;AACtC,2CAAuE;AACvE,iDAA+C;AAE/C,uCAAgC;AAChC,+CAAwC;AAcxC;;;GAGG;AACH;IAA8C,4CAAgC;IAI5E;QAAA,YACE,kBAAM,wBAAwB,CAAC,MAAM,CAAC,SAKvC;QAHC,KAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAA;QACxB,KAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,cAAI,CAAC,CAAA;QAC9B,KAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,eAAK,CAAC,CAAA;;IAClC,CAAC;IAES,wCAAK,GAAf;;QACE,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;gCAExB,QAAQ,EAAE,aAAa;YACzB,IAAS,WAAW,GAAmB,aAAa,QAAhC,EAAO,OAAO,GAAK,aAAa,IAAlB,CAAkB;YAE5D,sBAAS,CACP,CAAC,aAAa,CAAC,4BAAiB,CAAC,EACjC,mDAAmD,EACnD,QAAQ,CACT,CAAA;YAED,OAAK,aAAa,CAAC,IAAI,CAAC;gBACtB,MAAM,CAAC,cAAc,CAAC,aAAa,EAAE,4BAAiB,EAAE;oBACtD,KAAK,EAAE,SAAS;iBACjB,CAAC,CAAA;gBAEF,aAAa,CAAC,OAAO,GAAG,WAAW,CAAA;gBACnC,aAAa,CAAC,GAAG,GAAG,OAAO,CAAA;gBAE3B,GAAG,CAAC,8BAA8B,EAAE,QAAQ,CAAC,CAAA;YAC/C,CAAC,CAAC,CAAA;YAEF,IAAM,OAAO,GAAsB;gBACjC,OAAO,EAAE,OAAK,OAAO;gBACrB,GAAG,EAAE,OAAK,GAAG;aACd,CAAA;YAED,aAAa;YACb,aAAa,CAAC,OAAO;gBACnB,sBAAsB;gBACtB,sBAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;YAE5B,aAAa;YACb,aAAa,CAAC,GAAG;gBACf,sBAAsB;gBACtB,cAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;YAExB,MAAM,CAAC,cAAc,CAAC,aAAa,EAAE,4BAAiB,EAAE;gBACtD,YAAY,EAAE,IAAI;gBAClB,UAAU,EAAE,IAAI;gBAChB,KAAK,EAAE,IAAI;aACZ,CAAC,CAAA;YAEF,GAAG,CAAC,6BAA6B,EAAE,QAAQ,CAAC,CAAA;;;;YAzC9C,KAAwC,IAAA,KAAA,SAAA,IAAI,CAAC,OAAO,CAAA,gBAAA;gBAAzC,IAAA,KAAA,mBAAyB,EAAxB,QAAQ,QAAA,EAAE,aAAa,QAAA;wBAAvB,QAAQ,EAAE,aAAa;aA0ClC;;;;;;;;;IACH,CAAC;IAzDM,+BAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;IA0DhC,+BAAC;CAAA,AA3DD,CAA8C,yBAAW,GA2DxD;AA3DY,4DAAwB"}
@@ -1,4 +1,4 @@
1
- import type { HttpRequestEventMap, InteractiveIsomorphicRequest } from '../../glossary';
1
+ import { HttpRequestEventMap, InteractiveIsomorphicRequest } from '../../glossary';
2
2
  import { Interceptor } from '../../Interceptor';
3
3
  import { AsyncEventEmitter } from '../../utils/AsyncEventEmitter';
4
4
  export declare type XMLHttpRequestEventListener = (request: InteractiveIsomorphicRequest) => Promise<void> | void;
@@ -16,6 +16,8 @@ var __extends = (this && this.__extends) || (function () {
16
16
  })();
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
18
  exports.XMLHttpRequestInterceptor = void 0;
19
+ var outvariant_1 = require("outvariant");
20
+ var glossary_1 = require("../../glossary");
19
21
  var Interceptor_1 = require("../../Interceptor");
20
22
  var XMLHttpRequestOverride_1 = require("./XMLHttpRequestOverride");
21
23
  var XMLHttpRequestInterceptor = /** @class */ (function (_super) {
@@ -31,13 +33,22 @@ var XMLHttpRequestInterceptor = /** @class */ (function (_super) {
31
33
  var log = this.log.extend('setup');
32
34
  log('patching "XMLHttpRequest" module...');
33
35
  var PureXMLHttpRequest = window.XMLHttpRequest;
36
+ outvariant_1.invariant(!PureXMLHttpRequest[glossary_1.IS_PATCHED_MODULE], 'Failed to patch the "XMLHttpRequest" module: already patched.');
34
37
  window.XMLHttpRequest = XMLHttpRequestOverride_1.createXMLHttpRequestOverride({
35
38
  XMLHttpRequest: PureXMLHttpRequest,
36
39
  emitter: this.emitter,
37
40
  log: this.log,
38
41
  });
39
42
  log('native "XMLHttpRequest" module patched!', window.XMLHttpRequest.name);
43
+ Object.defineProperty(window.XMLHttpRequest, glossary_1.IS_PATCHED_MODULE, {
44
+ enumerable: true,
45
+ configurable: true,
46
+ value: true,
47
+ });
40
48
  this.subscriptions.push(function () {
49
+ Object.defineProperty(window.XMLHttpRequest, glossary_1.IS_PATCHED_MODULE, {
50
+ value: undefined,
51
+ });
41
52
  window.XMLHttpRequest = PureXMLHttpRequest;
42
53
  log('native "XMLHttpRequest" module restored!', window.XMLHttpRequest.name);
43
54
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/interceptors/XMLHttpRequest/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAIA,iDAA+C;AAE/C,mEAAuE;AAQvE;IAA+C,6CAAgC;IAG7E;eACE,kBAAM,yBAAyB,CAAC,MAAM,CAAC;IACzC,CAAC;IAES,oDAAgB,GAA1B;QACE,OAAO,CACL,OAAO,MAAM,KAAK,WAAW;YAC7B,OAAO,MAAM,CAAC,cAAc,KAAK,WAAW,CAC7C,CAAA;IACH,CAAC;IAES,yCAAK,GAAf;QACE,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAEpC,GAAG,CAAC,qCAAqC,CAAC,CAAA;QAE1C,IAAM,kBAAkB,GAAG,MAAM,CAAC,cAAc,CAAA;QAEhD,MAAM,CAAC,cAAc,GAAG,qDAA4B,CAAC;YACnD,cAAc,EAAE,kBAAkB;YAClC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,GAAG,EAAE,IAAI,CAAC,GAAG;SACd,CAAC,CAAA;QAEF,GAAG,CAAC,yCAAyC,EAAE,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;QAE1E,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;YACtB,MAAM,CAAC,cAAc,GAAG,kBAAkB,CAAA;YAC1C,GAAG,CACD,0CAA0C,EAC1C,MAAM,CAAC,cAAc,CAAC,IAAI,CAC3B,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAnCM,gCAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAoC/B,gCAAC;CAAA,AArCD,CAA+C,yBAAW,GAqCzD;AArCY,8DAAyB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/interceptors/XMLHttpRequest/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,yCAAsC;AACtC,2CAIuB;AACvB,iDAA+C;AAE/C,mEAAuE;AAQvE;IAA+C,6CAAgC;IAG7E;eACE,kBAAM,yBAAyB,CAAC,MAAM,CAAC;IACzC,CAAC;IAES,oDAAgB,GAA1B;QACE,OAAO,CACL,OAAO,MAAM,KAAK,WAAW;YAC7B,OAAO,MAAM,CAAC,cAAc,KAAK,WAAW,CAC7C,CAAA;IACH,CAAC;IAES,yCAAK,GAAf;QACE,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAEpC,GAAG,CAAC,qCAAqC,CAAC,CAAA;QAE1C,IAAM,kBAAkB,GAAG,MAAM,CAAC,cAAc,CAAA;QAEhD,sBAAS,CACP,CAAE,kBAA0B,CAAC,4BAAiB,CAAC,EAC/C,+DAA+D,CAChE,CAAA;QAED,MAAM,CAAC,cAAc,GAAG,qDAA4B,CAAC;YACnD,cAAc,EAAE,kBAAkB;YAClC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,GAAG,EAAE,IAAI,CAAC,GAAG;SACd,CAAC,CAAA;QAEF,GAAG,CAAC,yCAAyC,EAAE,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;QAE1E,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,cAAc,EAAE,4BAAiB,EAAE;YAC9D,UAAU,EAAE,IAAI;YAChB,YAAY,EAAE,IAAI;YAClB,KAAK,EAAE,IAAI;SACZ,CAAC,CAAA;QAEF,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;YACtB,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,cAAc,EAAE,4BAAiB,EAAE;gBAC9D,KAAK,EAAE,SAAS;aACjB,CAAC,CAAA;YAEF,MAAM,CAAC,cAAc,GAAG,kBAAkB,CAAA;YAC1C,GAAG,CACD,0CAA0C,EAC1C,MAAM,CAAC,cAAc,CAAC,IAAI,CAC3B,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAlDM,gCAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAmD/B,gCAAC;CAAA,AApDD,CAA+C,yBAAW,GAoDzD;AApDY,8DAAyB"}
@@ -1,4 +1,4 @@
1
- import type { HttpRequestEventMap } from '../../glossary';
1
+ import { HttpRequestEventMap } from '../../glossary';
2
2
  import { Interceptor } from '../../Interceptor';
3
3
  export declare class FetchInterceptor extends Interceptor<HttpRequestEventMap> {
4
4
  static symbol: symbol;
@@ -80,6 +80,8 @@ var __read = (this && this.__read) || function (o, n) {
80
80
  Object.defineProperty(exports, "__esModule", { value: true });
81
81
  exports.FetchInterceptor = void 0;
82
82
  var headers_polyfill_1 = require("headers-polyfill");
83
+ var outvariant_1 = require("outvariant");
84
+ var glossary_1 = require("../../glossary");
83
85
  var Interceptor_1 = require("../../Interceptor");
84
86
  var createLazyCallback_1 = require("../../utils/createLazyCallback");
85
87
  var toIsoResponse_1 = require("../../utils/toIsoResponse");
@@ -96,6 +98,7 @@ var FetchInterceptor = /** @class */ (function (_super) {
96
98
  FetchInterceptor.prototype.setup = function () {
97
99
  var _this = this;
98
100
  var pureFetch = globalThis.fetch;
101
+ outvariant_1.invariant(!pureFetch[glossary_1.IS_PATCHED_MODULE], 'Failed to patch the "fetch" module: already patched.');
99
102
  globalThis.fetch = function (input, init) { return __awaiter(_this, void 0, void 0, function () {
100
103
  var request, url, method, isomorphicRequest, _a, mockedResponse, isomorphicResponse, response;
101
104
  var _b;
@@ -174,7 +177,15 @@ var FetchInterceptor = /** @class */ (function (_super) {
174
177
  }
175
178
  });
176
179
  }); };
180
+ Object.defineProperty(globalThis.fetch, glossary_1.IS_PATCHED_MODULE, {
181
+ enumerable: true,
182
+ configurable: true,
183
+ value: true,
184
+ });
177
185
  this.subscriptions.push(function () {
186
+ Object.defineProperty(globalThis.fetch, glossary_1.IS_PATCHED_MODULE, {
187
+ value: undefined,
188
+ });
178
189
  globalThis.fetch = pureFetch;
179
190
  _this.log('restored native "globalThis.fetch"!', globalThis.fetch.name);
180
191
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/interceptors/fetch/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/interceptors/fetch/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@mswjs/interceptors",
3
3
  "description": "Low-level HTTP/HTTPS/XHR/fetch request interception library.",
4
- "version": "0.16.5",
4
+ "version": "0.16.6",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
7
7
  "author": "Artem Zakharchenko",
package/src/glossary.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  import type { HeadersObject, Headers } from 'headers-polyfill'
2
2
  import type { LazyCallback } from './utils/createLazyCallback'
3
3
 
4
+ export const IS_PATCHED_MODULE: unique symbol = Symbol('isPatchedModule')
5
+
4
6
  export type RequestCredentials = 'omit' | 'include' | 'same-origin'
5
7
 
6
8
  export interface IsomorphicRequest {
@@ -1,15 +1,23 @@
1
1
  import http from 'http'
2
2
  import https from 'https'
3
- import { HttpRequestEventMap } from '../../glossary'
3
+ import { invariant } from 'outvariant'
4
+ import { HttpRequestEventMap, IS_PATCHED_MODULE } from '../../glossary'
4
5
  import { Interceptor } from '../../Interceptor'
5
6
  import { AsyncEventEmitter } from '../../utils/AsyncEventEmitter'
6
7
  import { get } from './http.get'
7
8
  import { request } from './http.request'
8
9
  import { NodeClientOptions, Protocol } from './NodeClientRequest'
9
10
 
11
+ export type MaybePatchedModule<Module> = Module & {
12
+ [IS_PATCHED_MODULE]?: boolean
13
+ }
14
+
10
15
  export type ClientRequestEmitter = AsyncEventEmitter<HttpRequestEventMap>
11
16
 
12
- export type ClientRequestModules = Map<Protocol, typeof http | typeof https>
17
+ export type ClientRequestModules = Map<
18
+ Protocol,
19
+ MaybePatchedModule<typeof http> | MaybePatchedModule<typeof https>
20
+ >
13
21
 
14
22
  /**
15
23
  * Intercept requests made via the `ClientRequest` class.
@@ -33,7 +41,17 @@ export class ClientRequestInterceptor extends Interceptor<HttpRequestEventMap> {
33
41
  for (const [protocol, requestModule] of this.modules) {
34
42
  const { request: pureRequest, get: pureGet } = requestModule
35
43
 
44
+ invariant(
45
+ !requestModule[IS_PATCHED_MODULE],
46
+ 'Failed to patch the "%s" module: already patched.',
47
+ protocol
48
+ )
49
+
36
50
  this.subscriptions.push(() => {
51
+ Object.defineProperty(requestModule, IS_PATCHED_MODULE, {
52
+ value: undefined,
53
+ })
54
+
37
55
  requestModule.request = pureRequest
38
56
  requestModule.get = pureGet
39
57
 
@@ -55,6 +73,12 @@ export class ClientRequestInterceptor extends Interceptor<HttpRequestEventMap> {
55
73
  // Force a line break.
56
74
  get(protocol, options)
57
75
 
76
+ Object.defineProperty(requestModule, IS_PATCHED_MODULE, {
77
+ configurable: true,
78
+ enumerable: true,
79
+ value: true,
80
+ })
81
+
58
82
  log('native "%s" module patched!', protocol)
59
83
  }
60
84
  }
@@ -1,6 +1,8 @@
1
- import type {
1
+ import { invariant } from 'outvariant'
2
+ import {
2
3
  HttpRequestEventMap,
3
4
  InteractiveIsomorphicRequest,
5
+ IS_PATCHED_MODULE,
4
6
  } from '../../glossary'
5
7
  import { Interceptor } from '../../Interceptor'
6
8
  import { AsyncEventEmitter } from '../../utils/AsyncEventEmitter'
@@ -33,6 +35,11 @@ export class XMLHttpRequestInterceptor extends Interceptor<HttpRequestEventMap>
33
35
 
34
36
  const PureXMLHttpRequest = window.XMLHttpRequest
35
37
 
38
+ invariant(
39
+ !(PureXMLHttpRequest as any)[IS_PATCHED_MODULE],
40
+ 'Failed to patch the "XMLHttpRequest" module: already patched.'
41
+ )
42
+
36
43
  window.XMLHttpRequest = createXMLHttpRequestOverride({
37
44
  XMLHttpRequest: PureXMLHttpRequest,
38
45
  emitter: this.emitter,
@@ -41,7 +48,17 @@ export class XMLHttpRequestInterceptor extends Interceptor<HttpRequestEventMap>
41
48
 
42
49
  log('native "XMLHttpRequest" module patched!', window.XMLHttpRequest.name)
43
50
 
51
+ Object.defineProperty(window.XMLHttpRequest, IS_PATCHED_MODULE, {
52
+ enumerable: true,
53
+ configurable: true,
54
+ value: true,
55
+ })
56
+
44
57
  this.subscriptions.push(() => {
58
+ Object.defineProperty(window.XMLHttpRequest, IS_PATCHED_MODULE, {
59
+ value: undefined,
60
+ })
61
+
45
62
  window.XMLHttpRequest = PureXMLHttpRequest
46
63
  log(
47
64
  'native "XMLHttpRequest" module restored!',
@@ -4,10 +4,12 @@ import {
4
4
  objectToHeaders,
5
5
  headersToObject,
6
6
  } from 'headers-polyfill'
7
- import type {
7
+ import { invariant } from 'outvariant'
8
+ import {
8
9
  HttpRequestEventMap,
9
10
  InteractiveIsomorphicRequest,
10
11
  IsomorphicResponse,
12
+ IS_PATCHED_MODULE,
11
13
  } from '../../glossary'
12
14
  import { Interceptor } from '../../Interceptor'
13
15
  import { createLazyCallback } from '../../utils/createLazyCallback'
@@ -31,6 +33,11 @@ export class FetchInterceptor extends Interceptor<HttpRequestEventMap> {
31
33
  protected setup() {
32
34
  const pureFetch = globalThis.fetch
33
35
 
36
+ invariant(
37
+ !(pureFetch as any)[IS_PATCHED_MODULE],
38
+ 'Failed to patch the "fetch" module: already patched.'
39
+ )
40
+
34
41
  globalThis.fetch = async (input, init) => {
35
42
  const request = new Request(input, init)
36
43
 
@@ -109,8 +116,19 @@ export class FetchInterceptor extends Interceptor<HttpRequestEventMap> {
109
116
  })
110
117
  }
111
118
 
119
+ Object.defineProperty(globalThis.fetch, IS_PATCHED_MODULE, {
120
+ enumerable: true,
121
+ configurable: true,
122
+ value: true,
123
+ })
124
+
112
125
  this.subscriptions.push(() => {
126
+ Object.defineProperty(globalThis.fetch, IS_PATCHED_MODULE, {
127
+ value: undefined,
128
+ })
129
+
113
130
  globalThis.fetch = pureFetch
131
+
114
132
  this.log('restored native "globalThis.fetch"!', globalThis.fetch.name)
115
133
  })
116
134
  }