msw 0.42.0 → 0.42.3
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 +7 -1
- package/lib/iife/index.js +30 -18
- package/lib/iife/index.js.map +1 -1
- package/lib/index.d.ts +9 -0
- package/lib/index.js +28 -16
- package/lib/index.js.map +1 -1
- package/lib/mockServiceWorker.js +1 -1
- package/lib/native/index.js +37 -19
- package/lib/native/index.mjs +37 -19
- package/lib/node/index.js +37 -19
- package/lib/node/index.js.map +1 -1
- package/lib/node/index.mjs +37 -19
- package/lib/node/index.mjs.map +1 -1
- package/package.json +1 -1
package/lib/mockServiceWorker.js
CHANGED
package/lib/native/index.js
CHANGED
|
@@ -391,8 +391,8 @@ function parseMultipartData(data2, headers) {
|
|
|
391
391
|
}
|
|
392
392
|
const parsedBody = {};
|
|
393
393
|
try {
|
|
394
|
-
for (const
|
|
395
|
-
const [contentHeaders, ...rest] =
|
|
394
|
+
for (const field2 of fields) {
|
|
395
|
+
const [contentHeaders, ...rest] = field2.split("\r\n\r\n");
|
|
396
396
|
const contentBody = rest.join("\r\n\r\n");
|
|
397
397
|
const { contentType: contentType2, filename, name } = parseContentHeaders(contentHeaders);
|
|
398
398
|
const value = filename === void 0 ? contentBody : new File([contentBody], filename, { type: contentType2 });
|
|
@@ -936,6 +936,23 @@ var RestHandler = class extends RequestHandler {
|
|
|
936
936
|
}
|
|
937
937
|
};
|
|
938
938
|
|
|
939
|
+
// src/context/field.ts
|
|
940
|
+
var import_outvariant2 = require("outvariant");
|
|
941
|
+
var field = (fieldName, fieldValue) => {
|
|
942
|
+
return (res) => {
|
|
943
|
+
validateFieldName(fieldName);
|
|
944
|
+
const prevBody = jsonParse(res.body) || {};
|
|
945
|
+
const nextBody = mergeRight(prevBody, { [fieldName]: fieldValue });
|
|
946
|
+
return json(nextBody)(res);
|
|
947
|
+
};
|
|
948
|
+
};
|
|
949
|
+
function validateFieldName(fieldName) {
|
|
950
|
+
(0, import_outvariant2.invariant)(fieldName.trim() !== "", devUtils.formatMessage("Failed to set a custom field on a GraphQL response: field name cannot be empty."));
|
|
951
|
+
(0, import_outvariant2.invariant)(fieldName !== "data", devUtils.formatMessage('Failed to set a custom "%s" field on a mocked GraphQL response: forbidden field name. Did you mean to call "ctx.data()" instead?', fieldName));
|
|
952
|
+
(0, import_outvariant2.invariant)(fieldName !== "errors", devUtils.formatMessage('Failed to set a custom "%s" field on a mocked GraphQL response: forbidden field name. Did you mean to call "ctx.errors()" instead?', fieldName));
|
|
953
|
+
(0, import_outvariant2.invariant)(fieldName !== "extensions", devUtils.formatMessage('Failed to set a custom "%s" field on a mocked GraphQL response: forbidden field name. Did you mean to call "ctx.extensions()" instead?', fieldName));
|
|
954
|
+
}
|
|
955
|
+
|
|
939
956
|
// src/utils/internal/tryCatch.ts
|
|
940
957
|
function tryCatch(fn, onException) {
|
|
941
958
|
try {
|
|
@@ -951,7 +968,8 @@ var graphqlContext = __spreadProps(__spreadValues({}, defaultContext), {
|
|
|
951
968
|
data,
|
|
952
969
|
extensions,
|
|
953
970
|
errors,
|
|
954
|
-
cookie
|
|
971
|
+
cookie,
|
|
972
|
+
field
|
|
955
973
|
});
|
|
956
974
|
function isDocumentNode(value) {
|
|
957
975
|
if (value == null) {
|
|
@@ -1139,7 +1157,7 @@ function readResponseCookies(request, response2) {
|
|
|
1139
1157
|
|
|
1140
1158
|
// src/utils/handleRequest.ts
|
|
1141
1159
|
async function handleRequest(request, handlers, options, emitter, handleRequestOptions) {
|
|
1142
|
-
var _a, _b, _c, _d;
|
|
1160
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
1143
1161
|
emitter.emit("request:start", request);
|
|
1144
1162
|
if (request.headers.get("x-msw-bypass") === "true") {
|
|
1145
1163
|
emitter.emit("request:end", request);
|
|
@@ -1177,18 +1195,12 @@ async function handleRequest(request, handlers, options, emitter, handleRequestO
|
|
|
1177
1195
|
}
|
|
1178
1196
|
readResponseCookies(request, response2);
|
|
1179
1197
|
emitter.emit("request:match", request);
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
var _a3;
|
|
1187
|
-
(_a3 = handleRequestOptions == null ? void 0 : handleRequestOptions.onMockedResponseSent) == null ? void 0 : _a3.call(handleRequestOptions, transformedResponse, requiredLookupResult);
|
|
1188
|
-
emitter.emit("request:end", request);
|
|
1189
|
-
resolve(transformedResponse);
|
|
1190
|
-
}, (_c2 = response2.delay) != null ? _c2 : 0);
|
|
1191
|
-
});
|
|
1198
|
+
const requiredLookupResult = lookupResult;
|
|
1199
|
+
const transformedResponse = ((_e = handleRequestOptions == null ? void 0 : handleRequestOptions.transformResponse) == null ? void 0 : _e.call(handleRequestOptions, response2)) || response2;
|
|
1200
|
+
(_f = handleRequestOptions == null ? void 0 : handleRequestOptions.onMockedResponse) == null ? void 0 : _f.call(handleRequestOptions, transformedResponse, requiredLookupResult);
|
|
1201
|
+
(_g = handleRequestOptions == null ? void 0 : handleRequestOptions.onMockedResponseSent) == null ? void 0 : _g.call(handleRequestOptions, transformedResponse, requiredLookupResult);
|
|
1202
|
+
emitter.emit("request:end", request);
|
|
1203
|
+
return transformedResponse;
|
|
1192
1204
|
}
|
|
1193
1205
|
|
|
1194
1206
|
// src/utils/internal/pipeEvents.ts
|
|
@@ -1224,7 +1236,7 @@ function createSetupServer(...interceptors) {
|
|
|
1224
1236
|
let resolvedOptions = {};
|
|
1225
1237
|
const interceptor = new import_interceptors.BatchInterceptor({
|
|
1226
1238
|
name: "setup-server",
|
|
1227
|
-
interceptors
|
|
1239
|
+
interceptors: interceptors.map((Interceptor2) => new Interceptor2())
|
|
1228
1240
|
});
|
|
1229
1241
|
interceptor.on("request", async function setupServerListener(request) {
|
|
1230
1242
|
const mockedRequest = parseIsomorphicRequest(request);
|
|
@@ -1234,11 +1246,17 @@ function createSetupServer(...interceptors) {
|
|
|
1234
1246
|
status: response3.status,
|
|
1235
1247
|
statusText: response3.statusText,
|
|
1236
1248
|
headers: response3.headers.all(),
|
|
1237
|
-
body: response3.body
|
|
1249
|
+
body: response3.body,
|
|
1250
|
+
delay: response3.delay
|
|
1238
1251
|
};
|
|
1239
1252
|
}
|
|
1240
1253
|
});
|
|
1241
1254
|
if (response2) {
|
|
1255
|
+
if (response2.delay) {
|
|
1256
|
+
await new Promise((resolve) => {
|
|
1257
|
+
setTimeout(resolve, response2.delay);
|
|
1258
|
+
});
|
|
1259
|
+
}
|
|
1242
1260
|
request.respondWith(response2);
|
|
1243
1261
|
}
|
|
1244
1262
|
return;
|
|
@@ -1297,7 +1315,7 @@ function createSetupServer(...interceptors) {
|
|
|
1297
1315
|
}
|
|
1298
1316
|
|
|
1299
1317
|
// src/native/index.ts
|
|
1300
|
-
var setupServer = createSetupServer(
|
|
1318
|
+
var setupServer = createSetupServer(import_XMLHttpRequest.XMLHttpRequestInterceptor);
|
|
1301
1319
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1302
1320
|
0 && (module.exports = {
|
|
1303
1321
|
setupServer
|
package/lib/native/index.mjs
CHANGED
|
@@ -377,8 +377,8 @@ function parseMultipartData(data2, headers) {
|
|
|
377
377
|
}
|
|
378
378
|
const parsedBody = {};
|
|
379
379
|
try {
|
|
380
|
-
for (const
|
|
381
|
-
const [contentHeaders, ...rest] =
|
|
380
|
+
for (const field2 of fields) {
|
|
381
|
+
const [contentHeaders, ...rest] = field2.split("\r\n\r\n");
|
|
382
382
|
const contentBody = rest.join("\r\n\r\n");
|
|
383
383
|
const { contentType: contentType2, filename, name } = parseContentHeaders(contentHeaders);
|
|
384
384
|
const value = filename === void 0 ? contentBody : new File([contentBody], filename, { type: contentType2 });
|
|
@@ -924,6 +924,23 @@ var RestHandler = class extends RequestHandler {
|
|
|
924
924
|
}
|
|
925
925
|
};
|
|
926
926
|
|
|
927
|
+
// src/context/field.ts
|
|
928
|
+
import { invariant } from "outvariant";
|
|
929
|
+
var field = (fieldName, fieldValue) => {
|
|
930
|
+
return (res) => {
|
|
931
|
+
validateFieldName(fieldName);
|
|
932
|
+
const prevBody = jsonParse(res.body) || {};
|
|
933
|
+
const nextBody = mergeRight(prevBody, { [fieldName]: fieldValue });
|
|
934
|
+
return json(nextBody)(res);
|
|
935
|
+
};
|
|
936
|
+
};
|
|
937
|
+
function validateFieldName(fieldName) {
|
|
938
|
+
invariant(fieldName.trim() !== "", devUtils.formatMessage("Failed to set a custom field on a GraphQL response: field name cannot be empty."));
|
|
939
|
+
invariant(fieldName !== "data", devUtils.formatMessage('Failed to set a custom "%s" field on a mocked GraphQL response: forbidden field name. Did you mean to call "ctx.data()" instead?', fieldName));
|
|
940
|
+
invariant(fieldName !== "errors", devUtils.formatMessage('Failed to set a custom "%s" field on a mocked GraphQL response: forbidden field name. Did you mean to call "ctx.errors()" instead?', fieldName));
|
|
941
|
+
invariant(fieldName !== "extensions", devUtils.formatMessage('Failed to set a custom "%s" field on a mocked GraphQL response: forbidden field name. Did you mean to call "ctx.extensions()" instead?', fieldName));
|
|
942
|
+
}
|
|
943
|
+
|
|
927
944
|
// src/utils/internal/tryCatch.ts
|
|
928
945
|
function tryCatch(fn, onException) {
|
|
929
946
|
try {
|
|
@@ -939,7 +956,8 @@ var graphqlContext = __spreadProps(__spreadValues({}, defaultContext), {
|
|
|
939
956
|
data,
|
|
940
957
|
extensions,
|
|
941
958
|
errors,
|
|
942
|
-
cookie
|
|
959
|
+
cookie,
|
|
960
|
+
field
|
|
943
961
|
});
|
|
944
962
|
function isDocumentNode(value) {
|
|
945
963
|
if (value == null) {
|
|
@@ -1127,7 +1145,7 @@ function readResponseCookies(request, response2) {
|
|
|
1127
1145
|
|
|
1128
1146
|
// src/utils/handleRequest.ts
|
|
1129
1147
|
async function handleRequest(request, handlers, options, emitter, handleRequestOptions) {
|
|
1130
|
-
var _a, _b, _c, _d;
|
|
1148
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
1131
1149
|
emitter.emit("request:start", request);
|
|
1132
1150
|
if (request.headers.get("x-msw-bypass") === "true") {
|
|
1133
1151
|
emitter.emit("request:end", request);
|
|
@@ -1165,18 +1183,12 @@ async function handleRequest(request, handlers, options, emitter, handleRequestO
|
|
|
1165
1183
|
}
|
|
1166
1184
|
readResponseCookies(request, response2);
|
|
1167
1185
|
emitter.emit("request:match", request);
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
var _a3;
|
|
1175
|
-
(_a3 = handleRequestOptions == null ? void 0 : handleRequestOptions.onMockedResponseSent) == null ? void 0 : _a3.call(handleRequestOptions, transformedResponse, requiredLookupResult);
|
|
1176
|
-
emitter.emit("request:end", request);
|
|
1177
|
-
resolve(transformedResponse);
|
|
1178
|
-
}, (_c2 = response2.delay) != null ? _c2 : 0);
|
|
1179
|
-
});
|
|
1186
|
+
const requiredLookupResult = lookupResult;
|
|
1187
|
+
const transformedResponse = ((_e = handleRequestOptions == null ? void 0 : handleRequestOptions.transformResponse) == null ? void 0 : _e.call(handleRequestOptions, response2)) || response2;
|
|
1188
|
+
(_f = handleRequestOptions == null ? void 0 : handleRequestOptions.onMockedResponse) == null ? void 0 : _f.call(handleRequestOptions, transformedResponse, requiredLookupResult);
|
|
1189
|
+
(_g = handleRequestOptions == null ? void 0 : handleRequestOptions.onMockedResponseSent) == null ? void 0 : _g.call(handleRequestOptions, transformedResponse, requiredLookupResult);
|
|
1190
|
+
emitter.emit("request:end", request);
|
|
1191
|
+
return transformedResponse;
|
|
1180
1192
|
}
|
|
1181
1193
|
|
|
1182
1194
|
// src/utils/internal/pipeEvents.ts
|
|
@@ -1212,7 +1224,7 @@ function createSetupServer(...interceptors) {
|
|
|
1212
1224
|
let resolvedOptions = {};
|
|
1213
1225
|
const interceptor = new BatchInterceptor({
|
|
1214
1226
|
name: "setup-server",
|
|
1215
|
-
interceptors
|
|
1227
|
+
interceptors: interceptors.map((Interceptor2) => new Interceptor2())
|
|
1216
1228
|
});
|
|
1217
1229
|
interceptor.on("request", async function setupServerListener(request) {
|
|
1218
1230
|
const mockedRequest = parseIsomorphicRequest(request);
|
|
@@ -1222,11 +1234,17 @@ function createSetupServer(...interceptors) {
|
|
|
1222
1234
|
status: response3.status,
|
|
1223
1235
|
statusText: response3.statusText,
|
|
1224
1236
|
headers: response3.headers.all(),
|
|
1225
|
-
body: response3.body
|
|
1237
|
+
body: response3.body,
|
|
1238
|
+
delay: response3.delay
|
|
1226
1239
|
};
|
|
1227
1240
|
}
|
|
1228
1241
|
});
|
|
1229
1242
|
if (response2) {
|
|
1243
|
+
if (response2.delay) {
|
|
1244
|
+
await new Promise((resolve) => {
|
|
1245
|
+
setTimeout(resolve, response2.delay);
|
|
1246
|
+
});
|
|
1247
|
+
}
|
|
1230
1248
|
request.respondWith(response2);
|
|
1231
1249
|
}
|
|
1232
1250
|
return;
|
|
@@ -1285,7 +1303,7 @@ function createSetupServer(...interceptors) {
|
|
|
1285
1303
|
}
|
|
1286
1304
|
|
|
1287
1305
|
// src/native/index.ts
|
|
1288
|
-
var setupServer = createSetupServer(
|
|
1306
|
+
var setupServer = createSetupServer(XMLHttpRequestInterceptor);
|
|
1289
1307
|
export {
|
|
1290
1308
|
setupServer
|
|
1291
1309
|
};
|
package/lib/node/index.js
CHANGED
|
@@ -398,8 +398,8 @@ function parseMultipartData(data2, headers) {
|
|
|
398
398
|
}
|
|
399
399
|
const parsedBody = {};
|
|
400
400
|
try {
|
|
401
|
-
for (const
|
|
402
|
-
const [contentHeaders, ...rest] =
|
|
401
|
+
for (const field2 of fields) {
|
|
402
|
+
const [contentHeaders, ...rest] = field2.split("\r\n\r\n");
|
|
403
403
|
const contentBody = rest.join("\r\n\r\n");
|
|
404
404
|
const { contentType: contentType2, filename, name } = parseContentHeaders(contentHeaders);
|
|
405
405
|
const value = filename === void 0 ? contentBody : new File([contentBody], filename, { type: contentType2 });
|
|
@@ -943,6 +943,23 @@ var RestHandler = class extends RequestHandler {
|
|
|
943
943
|
}
|
|
944
944
|
};
|
|
945
945
|
|
|
946
|
+
// src/context/field.ts
|
|
947
|
+
var import_outvariant2 = require("outvariant");
|
|
948
|
+
var field = (fieldName, fieldValue) => {
|
|
949
|
+
return (res) => {
|
|
950
|
+
validateFieldName(fieldName);
|
|
951
|
+
const prevBody = jsonParse(res.body) || {};
|
|
952
|
+
const nextBody = mergeRight(prevBody, { [fieldName]: fieldValue });
|
|
953
|
+
return json(nextBody)(res);
|
|
954
|
+
};
|
|
955
|
+
};
|
|
956
|
+
function validateFieldName(fieldName) {
|
|
957
|
+
(0, import_outvariant2.invariant)(fieldName.trim() !== "", devUtils.formatMessage("Failed to set a custom field on a GraphQL response: field name cannot be empty."));
|
|
958
|
+
(0, import_outvariant2.invariant)(fieldName !== "data", devUtils.formatMessage('Failed to set a custom "%s" field on a mocked GraphQL response: forbidden field name. Did you mean to call "ctx.data()" instead?', fieldName));
|
|
959
|
+
(0, import_outvariant2.invariant)(fieldName !== "errors", devUtils.formatMessage('Failed to set a custom "%s" field on a mocked GraphQL response: forbidden field name. Did you mean to call "ctx.errors()" instead?', fieldName));
|
|
960
|
+
(0, import_outvariant2.invariant)(fieldName !== "extensions", devUtils.formatMessage('Failed to set a custom "%s" field on a mocked GraphQL response: forbidden field name. Did you mean to call "ctx.extensions()" instead?', fieldName));
|
|
961
|
+
}
|
|
962
|
+
|
|
946
963
|
// src/utils/internal/tryCatch.ts
|
|
947
964
|
function tryCatch(fn, onException) {
|
|
948
965
|
try {
|
|
@@ -958,7 +975,8 @@ var graphqlContext = __spreadProps(__spreadValues({}, defaultContext), {
|
|
|
958
975
|
data,
|
|
959
976
|
extensions,
|
|
960
977
|
errors,
|
|
961
|
-
cookie
|
|
978
|
+
cookie,
|
|
979
|
+
field
|
|
962
980
|
});
|
|
963
981
|
function isDocumentNode(value) {
|
|
964
982
|
if (value == null) {
|
|
@@ -1146,7 +1164,7 @@ function readResponseCookies(request, response2) {
|
|
|
1146
1164
|
|
|
1147
1165
|
// src/utils/handleRequest.ts
|
|
1148
1166
|
async function handleRequest(request, handlers, options, emitter, handleRequestOptions) {
|
|
1149
|
-
var _a, _b, _c, _d;
|
|
1167
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
1150
1168
|
emitter.emit("request:start", request);
|
|
1151
1169
|
if (request.headers.get("x-msw-bypass") === "true") {
|
|
1152
1170
|
emitter.emit("request:end", request);
|
|
@@ -1184,18 +1202,12 @@ async function handleRequest(request, handlers, options, emitter, handleRequestO
|
|
|
1184
1202
|
}
|
|
1185
1203
|
readResponseCookies(request, response2);
|
|
1186
1204
|
emitter.emit("request:match", request);
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
var _a3;
|
|
1194
|
-
(_a3 = handleRequestOptions == null ? void 0 : handleRequestOptions.onMockedResponseSent) == null ? void 0 : _a3.call(handleRequestOptions, transformedResponse, requiredLookupResult);
|
|
1195
|
-
emitter.emit("request:end", request);
|
|
1196
|
-
resolve(transformedResponse);
|
|
1197
|
-
}, (_c2 = response2.delay) != null ? _c2 : 0);
|
|
1198
|
-
});
|
|
1205
|
+
const requiredLookupResult = lookupResult;
|
|
1206
|
+
const transformedResponse = ((_e = handleRequestOptions == null ? void 0 : handleRequestOptions.transformResponse) == null ? void 0 : _e.call(handleRequestOptions, response2)) || response2;
|
|
1207
|
+
(_f = handleRequestOptions == null ? void 0 : handleRequestOptions.onMockedResponse) == null ? void 0 : _f.call(handleRequestOptions, transformedResponse, requiredLookupResult);
|
|
1208
|
+
(_g = handleRequestOptions == null ? void 0 : handleRequestOptions.onMockedResponseSent) == null ? void 0 : _g.call(handleRequestOptions, transformedResponse, requiredLookupResult);
|
|
1209
|
+
emitter.emit("request:end", request);
|
|
1210
|
+
return transformedResponse;
|
|
1199
1211
|
}
|
|
1200
1212
|
|
|
1201
1213
|
// src/utils/internal/pipeEvents.ts
|
|
@@ -1231,7 +1243,7 @@ function createSetupServer(...interceptors) {
|
|
|
1231
1243
|
let resolvedOptions = {};
|
|
1232
1244
|
const interceptor = new import_interceptors.BatchInterceptor({
|
|
1233
1245
|
name: "setup-server",
|
|
1234
|
-
interceptors
|
|
1246
|
+
interceptors: interceptors.map((Interceptor2) => new Interceptor2())
|
|
1235
1247
|
});
|
|
1236
1248
|
interceptor.on("request", async function setupServerListener(request) {
|
|
1237
1249
|
const mockedRequest = parseIsomorphicRequest(request);
|
|
@@ -1241,11 +1253,17 @@ function createSetupServer(...interceptors) {
|
|
|
1241
1253
|
status: response3.status,
|
|
1242
1254
|
statusText: response3.statusText,
|
|
1243
1255
|
headers: response3.headers.all(),
|
|
1244
|
-
body: response3.body
|
|
1256
|
+
body: response3.body,
|
|
1257
|
+
delay: response3.delay
|
|
1245
1258
|
};
|
|
1246
1259
|
}
|
|
1247
1260
|
});
|
|
1248
1261
|
if (response2) {
|
|
1262
|
+
if (response2.delay) {
|
|
1263
|
+
await new Promise((resolve) => {
|
|
1264
|
+
setTimeout(resolve, response2.delay);
|
|
1265
|
+
});
|
|
1266
|
+
}
|
|
1249
1267
|
request.respondWith(response2);
|
|
1250
1268
|
}
|
|
1251
1269
|
return;
|
|
@@ -1304,7 +1322,7 @@ function createSetupServer(...interceptors) {
|
|
|
1304
1322
|
}
|
|
1305
1323
|
|
|
1306
1324
|
// src/node/setupServer.ts
|
|
1307
|
-
var setupServer = createSetupServer(
|
|
1325
|
+
var setupServer = createSetupServer(import_ClientRequest.ClientRequestInterceptor, import_XMLHttpRequest.XMLHttpRequestInterceptor);
|
|
1308
1326
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1309
1327
|
0 && (module.exports = {
|
|
1310
1328
|
setupServer
|