@mswjs/interceptors 0.24.1 → 0.25.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/lib/browser/{chunk-BRIUGDYQ.mjs → chunk-ANLPTCZ5.mjs} +7 -0
- package/lib/browser/{chunk-XAQQ5IUC.js → chunk-DBFLI5DJ.js} +12 -4
- package/lib/browser/{chunk-Y4XXQXAW.js → chunk-OSIUQA4X.js} +7 -0
- package/lib/browser/{chunk-KSCN3JS4.mjs → chunk-VMXB5F2J.mjs} +12 -4
- package/lib/browser/interceptors/XMLHttpRequest/index.js +2 -2
- package/lib/browser/interceptors/XMLHttpRequest/index.mjs +1 -1
- package/lib/browser/interceptors/fetch/index.js +2 -2
- package/lib/browser/interceptors/fetch/index.mjs +1 -1
- package/lib/browser/presets/browser.js +4 -4
- package/lib/browser/presets/browser.mjs +2 -2
- package/lib/node/RemoteHttpInterceptor.js +4 -4
- package/lib/node/RemoteHttpInterceptor.mjs +2 -2
- package/lib/node/{chunk-OOSIWXHX.js → chunk-3MYUI4B2.js} +9 -1
- package/lib/node/{chunk-NM5BWVVB.js → chunk-E6YC337Q.js} +7 -0
- package/lib/node/{chunk-SOWOSKLO.mjs → chunk-HSCXCLVT.mjs} +7 -0
- package/lib/node/{chunk-PSIO3L7D.mjs → chunk-OL7OR4RL.mjs} +9 -1
- package/lib/node/interceptors/ClientRequest/index.js +2 -2
- package/lib/node/interceptors/ClientRequest/index.mjs +1 -1
- package/lib/node/interceptors/XMLHttpRequest/index.js +2 -2
- package/lib/node/interceptors/XMLHttpRequest/index.mjs +1 -1
- package/lib/node/interceptors/fetch/index.js +12 -4
- package/lib/node/interceptors/fetch/index.mjs +12 -4
- package/lib/node/presets/node.js +4 -4
- package/lib/node/presets/node.mjs +2 -2
- package/package.json +2 -2
- package/src/interceptors/ClientRequest/NodeClientRequest.ts +18 -1
- package/src/interceptors/XMLHttpRequest/XMLHttpRequestProxy.ts +9 -0
- package/src/interceptors/fetch/index.ts +25 -5
|
@@ -694,6 +694,13 @@ function createXMLHttpRequestProxy({
|
|
|
694
694
|
mockedResponse.status,
|
|
695
695
|
mockedResponse.statusText
|
|
696
696
|
);
|
|
697
|
+
if (mockedResponse.type === "error") {
|
|
698
|
+
this.logger.info(
|
|
699
|
+
"received a network error response, rejecting the request promise..."
|
|
700
|
+
);
|
|
701
|
+
requestController.errorWith(new TypeError("Network error"));
|
|
702
|
+
return;
|
|
703
|
+
}
|
|
697
704
|
return requestController.respondWith(mockedResponse);
|
|
698
705
|
}
|
|
699
706
|
this.logger.info(
|
|
@@ -65,14 +65,17 @@ var _FetchInterceptor = class extends _chunk4CFMDU7Zjs.Interceptor {
|
|
|
65
65
|
return Promise.reject(requestAborted.rejectionReason);
|
|
66
66
|
}
|
|
67
67
|
if (resolverResult.error) {
|
|
68
|
-
|
|
69
|
-
cause: resolverResult.error
|
|
70
|
-
});
|
|
71
|
-
return Promise.reject(error);
|
|
68
|
+
return Promise.reject(createNetworkError(resolverResult.error));
|
|
72
69
|
}
|
|
73
70
|
const mockedResponse = resolverResult.data;
|
|
74
71
|
if (mockedResponse && !((_a = request.signal) == null ? void 0 : _a.aborted)) {
|
|
75
72
|
this.logger.info("received mocked response:", mockedResponse);
|
|
73
|
+
if (mockedResponse.type === "error") {
|
|
74
|
+
this.logger.info(
|
|
75
|
+
"received a network error response, rejecting the request promise..."
|
|
76
|
+
);
|
|
77
|
+
return Promise.reject(createNetworkError(mockedResponse));
|
|
78
|
+
}
|
|
76
79
|
const responseClone = mockedResponse.clone();
|
|
77
80
|
this.emitter.emit("response", {
|
|
78
81
|
response: responseClone,
|
|
@@ -121,6 +124,11 @@ var _FetchInterceptor = class extends _chunk4CFMDU7Zjs.Interceptor {
|
|
|
121
124
|
};
|
|
122
125
|
var FetchInterceptor = _FetchInterceptor;
|
|
123
126
|
FetchInterceptor.symbol = Symbol("fetch");
|
|
127
|
+
function createNetworkError(cause) {
|
|
128
|
+
return Object.assign(new TypeError("Failed to fetch"), {
|
|
129
|
+
cause
|
|
130
|
+
});
|
|
131
|
+
}
|
|
124
132
|
|
|
125
133
|
|
|
126
134
|
|
|
@@ -694,6 +694,13 @@ function createXMLHttpRequestProxy({
|
|
|
694
694
|
mockedResponse.status,
|
|
695
695
|
mockedResponse.statusText
|
|
696
696
|
);
|
|
697
|
+
if (mockedResponse.type === "error") {
|
|
698
|
+
this.logger.info(
|
|
699
|
+
"received a network error response, rejecting the request promise..."
|
|
700
|
+
);
|
|
701
|
+
requestController.errorWith(new TypeError("Network error"));
|
|
702
|
+
return;
|
|
703
|
+
}
|
|
697
704
|
return requestController.respondWith(mockedResponse);
|
|
698
705
|
}
|
|
699
706
|
this.logger.info(
|
|
@@ -65,14 +65,17 @@ var _FetchInterceptor = class extends Interceptor {
|
|
|
65
65
|
return Promise.reject(requestAborted.rejectionReason);
|
|
66
66
|
}
|
|
67
67
|
if (resolverResult.error) {
|
|
68
|
-
|
|
69
|
-
cause: resolverResult.error
|
|
70
|
-
});
|
|
71
|
-
return Promise.reject(error);
|
|
68
|
+
return Promise.reject(createNetworkError(resolverResult.error));
|
|
72
69
|
}
|
|
73
70
|
const mockedResponse = resolverResult.data;
|
|
74
71
|
if (mockedResponse && !((_a = request.signal) == null ? void 0 : _a.aborted)) {
|
|
75
72
|
this.logger.info("received mocked response:", mockedResponse);
|
|
73
|
+
if (mockedResponse.type === "error") {
|
|
74
|
+
this.logger.info(
|
|
75
|
+
"received a network error response, rejecting the request promise..."
|
|
76
|
+
);
|
|
77
|
+
return Promise.reject(createNetworkError(mockedResponse));
|
|
78
|
+
}
|
|
76
79
|
const responseClone = mockedResponse.clone();
|
|
77
80
|
this.emitter.emit("response", {
|
|
78
81
|
response: responseClone,
|
|
@@ -121,6 +124,11 @@ var _FetchInterceptor = class extends Interceptor {
|
|
|
121
124
|
};
|
|
122
125
|
var FetchInterceptor = _FetchInterceptor;
|
|
123
126
|
FetchInterceptor.symbol = Symbol("fetch");
|
|
127
|
+
function createNetworkError(cause) {
|
|
128
|
+
return Object.assign(new TypeError("Failed to fetch"), {
|
|
129
|
+
cause
|
|
130
|
+
});
|
|
131
|
+
}
|
|
124
132
|
|
|
125
133
|
export {
|
|
126
134
|
FetchInterceptor
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkOSIUQA4Xjs = require('../../chunk-OSIUQA4X.js');
|
|
4
4
|
require('../../chunk-3LFH2WCF.js');
|
|
5
5
|
require('../../chunk-PCFJD76X.js');
|
|
6
6
|
require('../../chunk-4CFMDU7Z.js');
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
exports.XMLHttpRequestInterceptor =
|
|
9
|
+
exports.XMLHttpRequestInterceptor = _chunkOSIUQA4Xjs.XMLHttpRequestInterceptor;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkDBFLI5DJjs = require('../../chunk-DBFLI5DJ.js');
|
|
4
4
|
require('../../chunk-PCFJD76X.js');
|
|
5
5
|
require('../../chunk-4CFMDU7Z.js');
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
exports.FetchInterceptor =
|
|
8
|
+
exports.FetchInterceptor = _chunkDBFLI5DJjs.FetchInterceptor;
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkOSIUQA4Xjs = require('../chunk-OSIUQA4X.js');
|
|
4
4
|
require('../chunk-3LFH2WCF.js');
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
var
|
|
7
|
+
var _chunkDBFLI5DJjs = require('../chunk-DBFLI5DJ.js');
|
|
8
8
|
require('../chunk-PCFJD76X.js');
|
|
9
9
|
require('../chunk-4CFMDU7Z.js');
|
|
10
10
|
|
|
11
11
|
// src/presets/browser.ts
|
|
12
12
|
var browser_default = [
|
|
13
|
-
new (0,
|
|
14
|
-
new (0,
|
|
13
|
+
new (0, _chunkDBFLI5DJjs.FetchInterceptor)(),
|
|
14
|
+
new (0, _chunkOSIUQA4Xjs.XMLHttpRequestInterceptor)()
|
|
15
15
|
];
|
|
16
16
|
|
|
17
17
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
XMLHttpRequestInterceptor
|
|
3
|
-
} from "../chunk-
|
|
3
|
+
} from "../chunk-ANLPTCZ5.mjs";
|
|
4
4
|
import "../chunk-7II4SWKS.mjs";
|
|
5
5
|
import {
|
|
6
6
|
FetchInterceptor
|
|
7
|
-
} from "../chunk-
|
|
7
|
+
} from "../chunk-VMXB5F2J.mjs";
|
|
8
8
|
import "../chunk-RT3ATOJH.mjs";
|
|
9
9
|
import "../chunk-GXJLJMOT.mjs";
|
|
10
10
|
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
var _chunkMVPEJK4Vjs = require('./chunk-MVPEJK4V.js');
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var _chunk3MYUI4B2js = require('./chunk-3MYUI4B2.js');
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
var
|
|
9
|
+
var _chunkE6YC337Qjs = require('./chunk-E6YC337Q.js');
|
|
10
10
|
require('./chunk-3LFH2WCF.js');
|
|
11
11
|
require('./chunk-VQ4DZOBB.js');
|
|
12
12
|
|
|
@@ -22,8 +22,8 @@ var RemoteHttpInterceptor = class extends _chunkMVPEJK4Vjs.BatchInterceptor {
|
|
|
22
22
|
super({
|
|
23
23
|
name: "remote-interceptor",
|
|
24
24
|
interceptors: [
|
|
25
|
-
new (0,
|
|
26
|
-
new (0,
|
|
25
|
+
new (0, _chunk3MYUI4B2js.ClientRequestInterceptor)(),
|
|
26
|
+
new (0, _chunkE6YC337Qjs.XMLHttpRequestInterceptor)()
|
|
27
27
|
]
|
|
28
28
|
});
|
|
29
29
|
}
|
|
@@ -3,10 +3,10 @@ import {
|
|
|
3
3
|
} from "./chunk-VS3GJPUE.mjs";
|
|
4
4
|
import {
|
|
5
5
|
ClientRequestInterceptor
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-OL7OR4RL.mjs";
|
|
7
7
|
import {
|
|
8
8
|
XMLHttpRequestInterceptor
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-HSCXCLVT.mjs";
|
|
10
10
|
import "./chunk-7II4SWKS.mjs";
|
|
11
11
|
import "./chunk-GFH37L5D.mjs";
|
|
12
12
|
import {
|
|
@@ -249,8 +249,16 @@ var _NodeClientRequest = class extends _http.ClientRequest {
|
|
|
249
249
|
}
|
|
250
250
|
const mockedResponse = resolverResult.data;
|
|
251
251
|
if (mockedResponse) {
|
|
252
|
-
const responseClone = mockedResponse.clone();
|
|
253
252
|
this.logger.info("received mocked response:", mockedResponse);
|
|
253
|
+
if (mockedResponse.type === "error") {
|
|
254
|
+
this.logger.info(
|
|
255
|
+
"received network error response, aborting request..."
|
|
256
|
+
);
|
|
257
|
+
this.emit("error", new TypeError("Network error"));
|
|
258
|
+
this.terminate();
|
|
259
|
+
return this;
|
|
260
|
+
}
|
|
261
|
+
const responseClone = mockedResponse.clone();
|
|
254
262
|
this.responseSource = "mock";
|
|
255
263
|
this.respondWith(mockedResponse);
|
|
256
264
|
this.logger.info(
|
|
@@ -696,6 +696,13 @@ function createXMLHttpRequestProxy({
|
|
|
696
696
|
mockedResponse.status,
|
|
697
697
|
mockedResponse.statusText
|
|
698
698
|
);
|
|
699
|
+
if (mockedResponse.type === "error") {
|
|
700
|
+
this.logger.info(
|
|
701
|
+
"received a network error response, rejecting the request promise..."
|
|
702
|
+
);
|
|
703
|
+
requestController.errorWith(new TypeError("Network error"));
|
|
704
|
+
return;
|
|
705
|
+
}
|
|
699
706
|
return requestController.respondWith(mockedResponse);
|
|
700
707
|
}
|
|
701
708
|
this.logger.info(
|
|
@@ -696,6 +696,13 @@ function createXMLHttpRequestProxy({
|
|
|
696
696
|
mockedResponse.status,
|
|
697
697
|
mockedResponse.statusText
|
|
698
698
|
);
|
|
699
|
+
if (mockedResponse.type === "error") {
|
|
700
|
+
this.logger.info(
|
|
701
|
+
"received a network error response, rejecting the request promise..."
|
|
702
|
+
);
|
|
703
|
+
requestController.errorWith(new TypeError("Network error"));
|
|
704
|
+
return;
|
|
705
|
+
}
|
|
699
706
|
return requestController.respondWith(mockedResponse);
|
|
700
707
|
}
|
|
701
708
|
this.logger.info(
|
|
@@ -249,8 +249,16 @@ var _NodeClientRequest = class extends ClientRequest {
|
|
|
249
249
|
}
|
|
250
250
|
const mockedResponse = resolverResult.data;
|
|
251
251
|
if (mockedResponse) {
|
|
252
|
-
const responseClone = mockedResponse.clone();
|
|
253
252
|
this.logger.info("received mocked response:", mockedResponse);
|
|
253
|
+
if (mockedResponse.type === "error") {
|
|
254
|
+
this.logger.info(
|
|
255
|
+
"received network error response, aborting request..."
|
|
256
|
+
);
|
|
257
|
+
this.emit("error", new TypeError("Network error"));
|
|
258
|
+
this.terminate();
|
|
259
|
+
return this;
|
|
260
|
+
}
|
|
261
|
+
const responseClone = mockedResponse.clone();
|
|
254
262
|
this.responseSource = "mock";
|
|
255
263
|
this.respondWith(mockedResponse);
|
|
256
264
|
this.logger.info(
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunk3MYUI4B2js = require('../../chunk-3MYUI4B2.js');
|
|
4
4
|
require('../../chunk-ZJOF5MEZ.js');
|
|
5
5
|
require('../../chunk-XYZRP5S2.js');
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
exports.ClientRequestInterceptor =
|
|
8
|
+
exports.ClientRequestInterceptor = _chunk3MYUI4B2js.ClientRequestInterceptor;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkE6YC337Qjs = require('../../chunk-E6YC337Q.js');
|
|
4
4
|
require('../../chunk-3LFH2WCF.js');
|
|
5
5
|
require('../../chunk-VQ4DZOBB.js');
|
|
6
6
|
require('../../chunk-ZJOF5MEZ.js');
|
|
7
7
|
require('../../chunk-XYZRP5S2.js');
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
exports.XMLHttpRequestInterceptor =
|
|
10
|
+
exports.XMLHttpRequestInterceptor = _chunkE6YC337Qjs.XMLHttpRequestInterceptor;
|
|
@@ -67,14 +67,17 @@ var _FetchInterceptor = class extends _chunkXYZRP5S2js.Interceptor {
|
|
|
67
67
|
return Promise.reject(requestAborted.rejectionReason);
|
|
68
68
|
}
|
|
69
69
|
if (resolverResult.error) {
|
|
70
|
-
|
|
71
|
-
cause: resolverResult.error
|
|
72
|
-
});
|
|
73
|
-
return Promise.reject(error);
|
|
70
|
+
return Promise.reject(createNetworkError(resolverResult.error));
|
|
74
71
|
}
|
|
75
72
|
const mockedResponse = resolverResult.data;
|
|
76
73
|
if (mockedResponse && !((_a = request.signal) == null ? void 0 : _a.aborted)) {
|
|
77
74
|
this.logger.info("received mocked response:", mockedResponse);
|
|
75
|
+
if (mockedResponse.type === "error") {
|
|
76
|
+
this.logger.info(
|
|
77
|
+
"received a network error response, rejecting the request promise..."
|
|
78
|
+
);
|
|
79
|
+
return Promise.reject(createNetworkError(mockedResponse));
|
|
80
|
+
}
|
|
78
81
|
const responseClone = mockedResponse.clone();
|
|
79
82
|
this.emitter.emit("response", {
|
|
80
83
|
response: responseClone,
|
|
@@ -123,6 +126,11 @@ var _FetchInterceptor = class extends _chunkXYZRP5S2js.Interceptor {
|
|
|
123
126
|
};
|
|
124
127
|
var FetchInterceptor = _FetchInterceptor;
|
|
125
128
|
FetchInterceptor.symbol = Symbol("fetch");
|
|
129
|
+
function createNetworkError(cause) {
|
|
130
|
+
return Object.assign(new TypeError("Failed to fetch"), {
|
|
131
|
+
cause
|
|
132
|
+
});
|
|
133
|
+
}
|
|
126
134
|
|
|
127
135
|
|
|
128
136
|
exports.FetchInterceptor = FetchInterceptor;
|
|
@@ -67,14 +67,17 @@ var _FetchInterceptor = class extends Interceptor {
|
|
|
67
67
|
return Promise.reject(requestAborted.rejectionReason);
|
|
68
68
|
}
|
|
69
69
|
if (resolverResult.error) {
|
|
70
|
-
|
|
71
|
-
cause: resolverResult.error
|
|
72
|
-
});
|
|
73
|
-
return Promise.reject(error);
|
|
70
|
+
return Promise.reject(createNetworkError(resolverResult.error));
|
|
74
71
|
}
|
|
75
72
|
const mockedResponse = resolverResult.data;
|
|
76
73
|
if (mockedResponse && !((_a = request.signal) == null ? void 0 : _a.aborted)) {
|
|
77
74
|
this.logger.info("received mocked response:", mockedResponse);
|
|
75
|
+
if (mockedResponse.type === "error") {
|
|
76
|
+
this.logger.info(
|
|
77
|
+
"received a network error response, rejecting the request promise..."
|
|
78
|
+
);
|
|
79
|
+
return Promise.reject(createNetworkError(mockedResponse));
|
|
80
|
+
}
|
|
78
81
|
const responseClone = mockedResponse.clone();
|
|
79
82
|
this.emitter.emit("response", {
|
|
80
83
|
response: responseClone,
|
|
@@ -123,6 +126,11 @@ var _FetchInterceptor = class extends Interceptor {
|
|
|
123
126
|
};
|
|
124
127
|
var FetchInterceptor = _FetchInterceptor;
|
|
125
128
|
FetchInterceptor.symbol = Symbol("fetch");
|
|
129
|
+
function createNetworkError(cause) {
|
|
130
|
+
return Object.assign(new TypeError("Failed to fetch"), {
|
|
131
|
+
cause
|
|
132
|
+
});
|
|
133
|
+
}
|
|
126
134
|
export {
|
|
127
135
|
FetchInterceptor
|
|
128
136
|
};
|
package/lib/node/presets/node.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunk3MYUI4B2js = require('../chunk-3MYUI4B2.js');
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var _chunkE6YC337Qjs = require('../chunk-E6YC337Q.js');
|
|
7
7
|
require('../chunk-3LFH2WCF.js');
|
|
8
8
|
require('../chunk-VQ4DZOBB.js');
|
|
9
9
|
require('../chunk-ZJOF5MEZ.js');
|
|
@@ -11,8 +11,8 @@ require('../chunk-XYZRP5S2.js');
|
|
|
11
11
|
|
|
12
12
|
// src/presets/node.ts
|
|
13
13
|
var node_default = [
|
|
14
|
-
new (0,
|
|
15
|
-
new (0,
|
|
14
|
+
new (0, _chunk3MYUI4B2js.ClientRequestInterceptor)(),
|
|
15
|
+
new (0, _chunkE6YC337Qjs.XMLHttpRequestInterceptor)()
|
|
16
16
|
];
|
|
17
17
|
|
|
18
18
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ClientRequestInterceptor
|
|
3
|
-
} from "../chunk-
|
|
3
|
+
} from "../chunk-OL7OR4RL.mjs";
|
|
4
4
|
import {
|
|
5
5
|
XMLHttpRequestInterceptor
|
|
6
|
-
} from "../chunk-
|
|
6
|
+
} from "../chunk-HSCXCLVT.mjs";
|
|
7
7
|
import "../chunk-7II4SWKS.mjs";
|
|
8
8
|
import "../chunk-GFH37L5D.mjs";
|
|
9
9
|
import "../chunk-STA6QBYM.mjs";
|
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.
|
|
4
|
+
"version": "0.25.0",
|
|
5
5
|
"main": "./lib/node/index.js",
|
|
6
6
|
"module": "./lib/node/index.mjs",
|
|
7
7
|
"types": "./lib/node/index.d.ts",
|
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
"@commitlint/cli": "^16.0.2",
|
|
89
89
|
"@commitlint/config-conventional": "^16.0.0",
|
|
90
90
|
"@open-draft/test-server": "^0.5.1",
|
|
91
|
-
"@ossjs/release": "^0.
|
|
91
|
+
"@ossjs/release": "^0.7.2",
|
|
92
92
|
"@playwright/test": "^1.37.1",
|
|
93
93
|
"@types/cors": "^2.8.12",
|
|
94
94
|
"@types/express": "^4.17.13",
|
|
@@ -212,9 +212,26 @@ export class NodeClientRequest extends ClientRequest {
|
|
|
212
212
|
const mockedResponse = resolverResult.data
|
|
213
213
|
|
|
214
214
|
if (mockedResponse) {
|
|
215
|
+
this.logger.info('received mocked response:', mockedResponse)
|
|
216
|
+
|
|
217
|
+
// Handle mocked "Response.error" network error responses.
|
|
218
|
+
if (mockedResponse.type === 'error') {
|
|
219
|
+
this.logger.info(
|
|
220
|
+
'received network error response, aborting request...'
|
|
221
|
+
)
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* There is no standardized error format for network errors
|
|
225
|
+
* in Node.js. Instead, emit a generic TypeError.
|
|
226
|
+
*/
|
|
227
|
+
this.emit('error', new TypeError('Network error'))
|
|
228
|
+
this.terminate()
|
|
229
|
+
|
|
230
|
+
return this
|
|
231
|
+
}
|
|
232
|
+
|
|
215
233
|
const responseClone = mockedResponse.clone()
|
|
216
234
|
|
|
217
|
-
this.logger.info('received mocked response:', mockedResponse)
|
|
218
235
|
this.responseSource = 'mock'
|
|
219
236
|
|
|
220
237
|
this.respondWith(mockedResponse)
|
|
@@ -104,6 +104,15 @@ export function createXMLHttpRequestProxy({
|
|
|
104
104
|
mockedResponse.statusText
|
|
105
105
|
)
|
|
106
106
|
|
|
107
|
+
if (mockedResponse.type === 'error') {
|
|
108
|
+
this.logger.info(
|
|
109
|
+
'received a network error response, rejecting the request promise...'
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
requestController.errorWith(new TypeError('Network error'))
|
|
113
|
+
return
|
|
114
|
+
}
|
|
115
|
+
|
|
107
116
|
return requestController.respondWith(mockedResponse)
|
|
108
117
|
}
|
|
109
118
|
|
|
@@ -81,17 +81,31 @@ export class FetchInterceptor extends Interceptor<HttpRequestEventMap> {
|
|
|
81
81
|
}
|
|
82
82
|
|
|
83
83
|
if (resolverResult.error) {
|
|
84
|
-
|
|
85
|
-
cause: resolverResult.error,
|
|
86
|
-
})
|
|
87
|
-
|
|
88
|
-
return Promise.reject(error)
|
|
84
|
+
return Promise.reject(createNetworkError(resolverResult.error))
|
|
89
85
|
}
|
|
90
86
|
|
|
91
87
|
const mockedResponse = resolverResult.data
|
|
92
88
|
|
|
93
89
|
if (mockedResponse && !request.signal?.aborted) {
|
|
94
90
|
this.logger.info('received mocked response:', mockedResponse)
|
|
91
|
+
|
|
92
|
+
// Reject the request Promise on mocked "Response.error" responses.
|
|
93
|
+
if (mockedResponse.type === 'error') {
|
|
94
|
+
this.logger.info(
|
|
95
|
+
'received a network error response, rejecting the request promise...'
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Set the cause of the request promise rejection to the
|
|
100
|
+
* network error Response instance. This different from Undici.
|
|
101
|
+
* Undici will forward the "response.error" custom property
|
|
102
|
+
* as the rejection reason but for "Response.error()" static method
|
|
103
|
+
* "response.error" will equal to undefined, making "cause" an empty Error.
|
|
104
|
+
* @see https://github.com/nodejs/undici/blob/83cb522ae0157a19d149d72c7d03d46e34510d0a/lib/fetch/response.js#L344
|
|
105
|
+
*/
|
|
106
|
+
return Promise.reject(createNetworkError(mockedResponse))
|
|
107
|
+
}
|
|
108
|
+
|
|
95
109
|
const responseClone = mockedResponse.clone()
|
|
96
110
|
|
|
97
111
|
this.emitter.emit('response', {
|
|
@@ -151,3 +165,9 @@ export class FetchInterceptor extends Interceptor<HttpRequestEventMap> {
|
|
|
151
165
|
})
|
|
152
166
|
}
|
|
153
167
|
}
|
|
168
|
+
|
|
169
|
+
function createNetworkError(cause: unknown) {
|
|
170
|
+
return Object.assign(new TypeError('Failed to fetch'), {
|
|
171
|
+
cause,
|
|
172
|
+
})
|
|
173
|
+
}
|