msw 0.36.0 → 0.36.4

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.
@@ -2,7 +2,7 @@
2
2
  /* tslint:disable */
3
3
 
4
4
  /**
5
- * Mock Service Worker (0.36.0).
5
+ * Mock Service Worker (0.36.4).
6
6
  * @see https://github.com/mswjs/msw
7
7
  * - Please do NOT modify this file.
8
8
  * - Please do NOT serve this file on production.
@@ -7,7 +7,7 @@ import { fetch } from '../context/fetch';
7
7
  import { errors } from '../context/errors';
8
8
  import { GraphQLPayloadContext } from '../typeUtils';
9
9
  import { cookie } from '../context/cookie';
10
- import { MockedRequest, RequestHandler, ResponseResolver } from './RequestHandler';
10
+ import { MockedRequest, RequestHandler, RequestHandlerDefaultInfo, ResponseResolver } from './RequestHandler';
11
11
  import { Path } from '../utils/matching/matchRequestUrl';
12
12
  import { ParsedGraphQLRequest, GraphQLMultipartRequestBody } from '../utils/internal/parseGraphQLRequest';
13
13
  export declare type ExpectedOperationTypeNode = OperationTypeNode | 'all';
@@ -24,7 +24,7 @@ export declare type GraphQLContext<QueryType extends Record<string, unknown>> =
24
24
  };
25
25
  export declare const graphqlContext: GraphQLContext<any>;
26
26
  export declare type GraphQLVariables = Record<string, any>;
27
- export interface GraphQLHandlerInfo {
27
+ export interface GraphQLHandlerInfo extends RequestHandlerDefaultInfo {
28
28
  operationType: ExpectedOperationTypeNode;
29
29
  operationName: GraphQLHandlerNameSelector;
30
30
  }
@@ -29,19 +29,19 @@ export interface MockedRequest<Body = DefaultRequestBody> {
29
29
  body: Body;
30
30
  bodyUsed: Request['bodyUsed'];
31
31
  }
32
- interface RequestHandlerDefaultInfo {
32
+ export interface RequestHandlerDefaultInfo {
33
+ header: string;
34
+ }
35
+ export interface RequestHandlerInternalInfo {
33
36
  callFrame?: string;
34
37
  }
35
- declare type RequestHandlerInfo<ExtraInfo extends Record<string, any>> = {
36
- header: string;
37
- } & ExtraInfo;
38
38
  declare type ContextMap = Record<string, (...args: any[]) => any>;
39
39
  export declare type ResponseResolverReturnType<ReturnType> = ReturnType | undefined | void;
40
40
  export declare type MaybeAsyncResponseResolverReturnType<ReturnType> = ResponseResolverReturnType<ReturnType> | Promise<ResponseResolverReturnType<ReturnType>>;
41
41
  export declare type AsyncResponseResolverReturnType<ReturnType> = MaybeAsyncResponseResolverReturnType<ReturnType> | Generator<MaybeAsyncResponseResolverReturnType<ReturnType>, MaybeAsyncResponseResolverReturnType<ReturnType>, MaybeAsyncResponseResolverReturnType<ReturnType>>;
42
42
  export declare type ResponseResolver<RequestType = MockedRequest, ContextType = typeof defaultContext, BodyType = any> = (req: RequestType, res: ResponseComposition<BodyType>, context: ContextType) => AsyncResponseResolverReturnType<MockedResponse<BodyType>>;
43
43
  export interface RequestHandlerOptions<HandlerInfo> {
44
- info: RequestHandlerInfo<HandlerInfo>;
44
+ info: HandlerInfo;
45
45
  resolver: ResponseResolver<any, any>;
46
46
  ctx?: ContextMap;
47
47
  }
@@ -51,8 +51,8 @@ export interface RequestHandlerExecutionResult<PublicRequestType> {
51
51
  request: PublicRequestType;
52
52
  response?: MockedResponse;
53
53
  }
54
- export declare abstract class RequestHandler<HandlerInfo extends Record<string, any> = Record<string, any>, Request extends MockedRequest = MockedRequest, ParsedResult = any, PublicRequest extends MockedRequest = Request> {
55
- info: RequestHandlerDefaultInfo & RequestHandlerInfo<HandlerInfo>;
54
+ export declare abstract class RequestHandler<HandlerInfo extends RequestHandlerDefaultInfo = RequestHandlerDefaultInfo, Request extends MockedRequest = MockedRequest, ParsedResult = any, PublicRequest extends MockedRequest = Request> {
55
+ info: HandlerInfo & RequestHandlerInternalInfo;
56
56
  shouldSkip: boolean;
57
57
  private ctx;
58
58
  private resolverGenerator?;
@@ -2,9 +2,9 @@ import { body, cookie, delay, fetch, json, set, status, text, xml } from '../con
2
2
  import { SerializedResponse } from '../setupWorker/glossary';
3
3
  import { ResponseResolutionContext } from '../utils/getResponse';
4
4
  import { Match, Path, PathParams } from '../utils/matching/matchRequestUrl';
5
- import { DefaultRequestBody, MockedRequest, RequestHandler, ResponseResolver } from './RequestHandler';
5
+ import { DefaultRequestBody, MockedRequest, RequestHandler, RequestHandlerDefaultInfo, ResponseResolver } from './RequestHandler';
6
6
  declare type RestHandlerMethod = string | RegExp;
7
- interface RestHandlerInfo {
7
+ export interface RestHandlerInfo extends RequestHandlerDefaultInfo {
8
8
  method: RestHandlerMethod;
9
9
  path: Path;
10
10
  }
@@ -1 +1 @@
1
- export declare const setupServer: (...requestHandlers: import("..").RequestHandler<Record<string, any>, import("..").MockedRequest<import("..").DefaultRequestBody>, any, import("..").MockedRequest<import("..").DefaultRequestBody>>[]) => import("../node").SetupServerApi;
1
+ export declare const setupServer: (...requestHandlers: import("..").RequestHandler<import("../handlers/RequestHandler").RequestHandlerDefaultInfo, import("..").MockedRequest<import("..").DefaultRequestBody>, any, import("..").MockedRequest<import("..").DefaultRequestBody>>[]) => import("../node").SetupServerApi;
@@ -3,4 +3,4 @@
3
3
  * @param {RequestHandler[]} requestHandlers List of request handlers.
4
4
  * @see {@link https://mswjs.io/docs/api/setup-server `setupServer`}
5
5
  */
6
- export declare const setupServer: (...requestHandlers: import("..").RequestHandler<Record<string, any>, import("..").MockedRequest<import("..").DefaultRequestBody>, any, import("..").MockedRequest<import("..").DefaultRequestBody>>[]) => import("./glossary").SetupServerApi;
6
+ export declare const setupServer: (...requestHandlers: import("..").RequestHandler<import("../handlers/RequestHandler").RequestHandlerDefaultInfo, import("..").MockedRequest<import("..").DefaultRequestBody>, any, import("..").MockedRequest<import("..").DefaultRequestBody>>[]) => import("./glossary").SetupServerApi;
@@ -12,4 +12,4 @@ export interface ResponseResolutionContext {
12
12
  /**
13
13
  * Returns a mocked response for a given request using following request handlers.
14
14
  */
15
- export declare const getResponse: <Request_1 extends MockedRequest<import("../handlers/RequestHandler").DefaultRequestBody>, Handler extends RequestHandler<Record<string, any>, MockedRequest<import("../handlers/RequestHandler").DefaultRequestBody>, any, MockedRequest<import("../handlers/RequestHandler").DefaultRequestBody>>[]>(request: Request_1, handlers: Handler, resolutionContext?: ResponseResolutionContext | undefined) => Promise<ResponseLookupResult>;
15
+ export declare const getResponse: <Request_1 extends MockedRequest<import("../handlers/RequestHandler").DefaultRequestBody>, Handler extends RequestHandler<import("../handlers/RequestHandler").RequestHandlerDefaultInfo, MockedRequest<import("../handlers/RequestHandler").DefaultRequestBody>, any, MockedRequest<import("../handlers/RequestHandler").DefaultRequestBody>>[]>(request: Request_1, handlers: Handler, resolutionContext?: ResponseResolutionContext | undefined) => Promise<ResponseLookupResult>;
@@ -14,7 +14,7 @@ export interface HandleRequestOptions<ResponseType> {
14
14
  };
15
15
  /**
16
16
  * Transforms a `MockedResponse` instance returned from a handler
17
- * to a response instance
17
+ * to a response instance supported by the lower tooling (i.e. interceptors).
18
18
  */
19
19
  transformResponse?(response: MockedResponse<string>): ResponseType;
20
20
  /**
@@ -1,4 +1,4 @@
1
1
  import { RequestHandler } from '../../handlers/RequestHandler';
2
2
  export declare function use(currentHandlers: RequestHandler[], ...handlers: RequestHandler[]): void;
3
3
  export declare function restoreHandlers(handlers: RequestHandler[]): void;
4
- export declare function resetHandlers(initialHandlers: RequestHandler[], ...nextHandlers: RequestHandler[]): RequestHandler<Record<string, any>, import("../../handlers/RequestHandler").MockedRequest<import("../../handlers/RequestHandler").DefaultRequestBody>, any, import("../../handlers/RequestHandler").MockedRequest<import("../../handlers/RequestHandler").DefaultRequestBody>>[];
4
+ export declare function resetHandlers(initialHandlers: RequestHandler[], ...nextHandlers: RequestHandler[]): RequestHandler<import("../../handlers/RequestHandler").RequestHandlerDefaultInfo, import("../../handlers/RequestHandler").MockedRequest<import("../../handlers/RequestHandler").DefaultRequestBody>, any, import("../../handlers/RequestHandler").MockedRequest<import("../../handlers/RequestHandler").DefaultRequestBody>>[];
@@ -1,5 +1,5 @@
1
1
  export declare type Path = string | RegExp;
2
- export declare type PathParams = Record<string, string | string[]>;
2
+ export declare type PathParams = Record<string, string | ReadonlyArray<string>>;
3
3
  export interface Match {
4
4
  matches: boolean;
5
5
  params?: PathParams;
@@ -1,5 +1,4 @@
1
1
  import { MockedRequest, RequestHandler } from '../../handlers/RequestHandler';
2
- declare type UnhandledRequestCallback = (request: MockedRequest) => void;
2
+ export declare type UnhandledRequestCallback = (request: MockedRequest) => void;
3
3
  export declare type UnhandledRequestStrategy = 'bypass' | 'warn' | 'error' | UnhandledRequestCallback;
4
4
  export declare function onUnhandledRequest(request: MockedRequest, handlers: RequestHandler[], strategy?: UnhandledRequestStrategy): void;
5
- export {};
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Determines if the given URL string is an absolute URL.
3
+ */
4
+ export declare function isAbsoluteUrl(url: string): boolean;
package/lib/umd/index.js CHANGED
@@ -22885,12 +22885,23 @@ Invalid value has been removed from localStorage to prevent subsequent failed pa
22885
22885
  return path.replace(REDUNDANT_CHARACTERS_EXP, '');
22886
22886
  }
22887
22887
 
22888
+ /**
22889
+ * Determines if the given URL string is an absolute URL.
22890
+ */
22891
+ function isAbsoluteUrl(url) {
22892
+ return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url);
22893
+ }
22894
+
22888
22895
  /**
22889
22896
  * Returns an absolute URL based on the given path.
22890
22897
  */
22891
22898
  function getAbsoluteUrl(path, baseUrl) {
22892
- // Ignore absolute URLs.
22893
- if (!path.startsWith('/')) {
22899
+ // already absolute URL
22900
+ if (isAbsoluteUrl(path)) {
22901
+ return path;
22902
+ }
22903
+ // Ignore path with pattern start with *
22904
+ if (path.startsWith('*')) {
22894
22905
  return path;
22895
22906
  }
22896
22907
  // Resolve a relative request URL against a given custom "baseUrl"
@@ -22924,18 +22935,31 @@ Invalid value has been removed from localStorage to prevent subsequent failed pa
22924
22935
  */
22925
22936
  function coercePath(path) {
22926
22937
  return (path
22927
- /**
22928
- * Escape the protocol so that "path-to-regexp" could match
22929
- * absolute URL.
22930
- * @see https://github.com/pillarjs/path-to-regexp/issues/259
22931
- */
22932
- .replace(/^([^\/]+)(:)(?=\/\/)/g, '$1\\$2')
22933
22938
  /**
22934
22939
  * Replace wildcards ("*") with unnamed capturing groups
22935
22940
  * because "path-to-regexp" doesn't support wildcards.
22936
22941
  * Ignore path parameter' modifiers (i.e. ":name*").
22937
22942
  */
22938
- .replace(/(?<!(^|\/|\*+):[\w]+)(\*{1,2})/g, '(.*)'));
22943
+ .replace(/([:a-zA-Z_-]*)(\*{1,2})+/g, (_, parameterName, wildcard) => {
22944
+ const expression = '(.*)';
22945
+ if (!parameterName) {
22946
+ return expression;
22947
+ }
22948
+ return parameterName.startsWith(':')
22949
+ ? `${parameterName}${wildcard}`
22950
+ : `${parameterName}${expression}`;
22951
+ })
22952
+ /**
22953
+ * Escape the port so that "path-to-regexp" can match
22954
+ * absolute URLs including port numbers.
22955
+ */
22956
+ .replace(/([^\/])(:)(?=\d+)/, '$1\\$2')
22957
+ /**
22958
+ * Escape the protocol so that "path-to-regexp" could match
22959
+ * absolute URL.
22960
+ * @see https://github.com/pillarjs/path-to-regexp/issues/259
22961
+ */
22962
+ .replace(/^([^\/]+)(:)(?=\/\/)/, '$1\\$2'));
22939
22963
  }
22940
22964
  /**
22941
22965
  * Returns the result of matching given request URL against a mask.
@@ -23188,7 +23212,6 @@ Invalid value has been removed from localStorage to prevent subsequent failed pa
23188
23212
  const matchesMethod = this.info.method instanceof RegExp
23189
23213
  ? this.info.method.test(request.method)
23190
23214
  : isStringEqual(this.info.method, request.method);
23191
- // console.log({ request, matchesMethod, parsedResult })
23192
23215
  return matchesMethod && parsedResult.matches;
23193
23216
  }
23194
23217
  log(request, response) {
@@ -23321,10 +23344,10 @@ Consider naming this operation or using "graphql.operation" request handler to i
23321
23344
  graphql: [],
23322
23345
  });
23323
23346
  }
23324
- function getScoreForRestHandler() {
23347
+ function getRestHandlerScore() {
23325
23348
  return (request, handler) => {
23326
23349
  const { path, method } = handler.info;
23327
- if (path instanceof RegExp) {
23350
+ if (path instanceof RegExp || method instanceof RegExp) {
23328
23351
  return Infinity;
23329
23352
  }
23330
23353
  const hasSameMethod = isStringEqual(request.method, method);
@@ -23335,12 +23358,15 @@ Consider naming this operation or using "graphql.operation" request handler to i
23335
23358
  return score - methodScoreDelta;
23336
23359
  };
23337
23360
  }
23338
- function getScoreForGraphQLHandler(parsedQuery) {
23361
+ function getGraphQLHandlerScore(parsedQuery) {
23339
23362
  return (_, handler) => {
23340
23363
  if (typeof parsedQuery.operationName === 'undefined') {
23341
23364
  return Infinity;
23342
23365
  }
23343
23366
  const { operationType, operationName } = handler.info;
23367
+ if (typeof operationName !== 'string') {
23368
+ return Infinity;
23369
+ }
23344
23370
  const hasSameOperationType = parsedQuery.operationType === operationType;
23345
23371
  // Always treat a handler with the same operation type as a more similar one.
23346
23372
  const operationTypeScoreDelta = hasSameOperationType ? TYPE_MATCH_DELTA : 0;
@@ -23350,16 +23376,12 @@ Consider naming this operation or using "graphql.operation" request handler to i
23350
23376
  }
23351
23377
  function getSuggestedHandler(request, handlers, getScore) {
23352
23378
  const suggestedHandlers = handlers
23353
- .reduce((acc, handler) => {
23379
+ .reduce((suggestions, handler) => {
23354
23380
  const score = getScore(request, handler);
23355
- return acc.concat([[score, handler]]);
23381
+ return suggestions.concat([[score, handler]]);
23356
23382
  }, [])
23357
- .sort(([leftScore], [rightScore]) => {
23358
- return leftScore - rightScore;
23359
- })
23360
- .filter(([score]) => {
23361
- return score <= MAX_MATCH_SCORE;
23362
- })
23383
+ .sort(([leftScore], [rightScore]) => leftScore - rightScore)
23384
+ .filter(([score]) => score <= MAX_MATCH_SCORE)
23363
23385
  .slice(0, MAX_SUGGESTION_COUNT)
23364
23386
  .map(([, handler]) => handler);
23365
23387
  return suggestedHandlers;
@@ -23389,8 +23411,8 @@ ${handlers.map((handler) => ` • ${handler.info.header}`).join('\n')}`;
23389
23411
  ? handlerGroups.graphql
23390
23412
  : handlerGroups.rest;
23391
23413
  const suggestedHandlers = getSuggestedHandler(request, relevantHandlers, parsedGraphQLQuery
23392
- ? getScoreForGraphQLHandler(parsedGraphQLQuery)
23393
- : getScoreForRestHandler());
23414
+ ? getGraphQLHandlerScore(parsedGraphQLQuery)
23415
+ : getRestHandlerScore());
23394
23416
  const handlerSuggestion = suggestedHandlers.length > 0
23395
23417
  ? getSuggestedHandlersMessage(suggestedHandlers)
23396
23418
  : '';
@@ -23413,7 +23435,7 @@ Read more: https://mswjs.io/docs/getting-started/mocks\
23413
23435
  // Print a developer-friendly error.
23414
23436
  devUtils.error('Error: %s', message);
23415
23437
  // Throw an exception to halt request processing and not perform the original request.
23416
- throw new Error('Cannot bypass a request when using the "error" strategy for the "onUnhandledRequest" option.');
23438
+ throw new Error(devUtils.formatMessage('Cannot bypass a request when using the "error" strategy for the "onUnhandledRequest" option.'));
23417
23439
  }
23418
23440
  case 'warn': {
23419
23441
  devUtils.warn('Warning: %s', message);
@@ -24003,14 +24025,14 @@ If this message still persists after updating, please report an issue: https://g
24003
24025
 
24004
24026
  Object.defineProperty(uuid, "__esModule", { value: true });
24005
24027
  uuid.uuidv4 = void 0;
24006
- function uuidv4$1() {
24028
+ function uuidv4() {
24007
24029
  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
24008
24030
  var r = (Math.random() * 16) | 0;
24009
24031
  var v = c == 'x' ? r : (r & 0x3) | 0x8;
24010
24032
  return v.toString(16);
24011
24033
  });
24012
24034
  }
24013
- uuid.uuidv4 = uuidv4$1;
24035
+ uuid.uuidv4 = uuidv4;
24014
24036
 
24015
24037
  var browser = {exports: {}};
24016
24038
 
@@ -28288,22 +28310,12 @@ If this message still persists after updating, please report an issue: https://g
28288
28310
  };
28289
28311
  interceptXMLHttpRequest_1 = XMLHttpRequest.interceptXMLHttpRequest = interceptXMLHttpRequest;
28290
28312
 
28291
- function uuidv4() {
28292
- return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
28293
- const r = (Math.random() * 16) | 0;
28294
- const v = c == 'x' ? r : (r & 0x3) | 0x8;
28295
- return v.toString(16);
28296
- });
28297
- }
28298
-
28299
28313
  /**
28300
28314
  * Converts a given isomorphic request to a `MockedRequest` instance.
28301
28315
  */
28302
28316
  function parseIsomorphicRequest(request) {
28303
- const requestId = uuidv4();
28304
- request.headers.set('x-msw-request-id', requestId);
28305
28317
  const mockedRequest = {
28306
- id: requestId,
28318
+ id: request.id,
28307
28319
  url: request.url,
28308
28320
  method: request.method,
28309
28321
  body: parseBody(request.body, request.headers),
@@ -2,7 +2,7 @@
2
2
  /* tslint:disable */
3
3
 
4
4
  /**
5
- * Mock Service Worker (0.36.0).
5
+ * Mock Service Worker (0.36.4).
6
6
  * @see https://github.com/mswjs/msw
7
7
  * - Please do NOT modify this file.
8
8
  * - Please do NOT serve this file on production.
@@ -362,14 +362,6 @@ function tryDecode(str, decode) {
362
362
  }
363
363
  }
364
364
 
365
- function uuidv4() {
366
- return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
367
- const r = (Math.random() * 16) | 0;
368
- const v = c == 'x' ? r : (r & 0x3) | 0x8;
369
- return v.toString(16);
370
- });
371
- }
372
-
373
365
  /**
374
366
  * Parses a given value into a JSON.
375
367
  * Does not throw an exception on an invalid JSON string.
@@ -1048,10 +1040,8 @@ function setRequestCookies(request) {
1048
1040
  * Converts a given isomorphic request to a `MockedRequest` instance.
1049
1041
  */
1050
1042
  function parseIsomorphicRequest(request) {
1051
- const requestId = uuidv4();
1052
- request.headers.set('x-msw-request-id', requestId);
1053
1043
  const mockedRequest = {
1054
- id: requestId,
1044
+ id: request.id,
1055
1045
  url: request.url,
1056
1046
  method: request.method,
1057
1047
  body: parseBody(request.body, request.headers),
@@ -5387,12 +5377,23 @@ function cleanUrl(path) {
5387
5377
  return path.replace(REDUNDANT_CHARACTERS_EXP, '');
5388
5378
  }
5389
5379
 
5380
+ /**
5381
+ * Determines if the given URL string is an absolute URL.
5382
+ */
5383
+ function isAbsoluteUrl(url) {
5384
+ return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url);
5385
+ }
5386
+
5390
5387
  /**
5391
5388
  * Returns an absolute URL based on the given path.
5392
5389
  */
5393
5390
  function getAbsoluteUrl(path, baseUrl) {
5394
- // Ignore absolute URLs.
5395
- if (!path.startsWith('/')) {
5391
+ // already absolute URL
5392
+ if (isAbsoluteUrl(path)) {
5393
+ return path;
5394
+ }
5395
+ // Ignore path with pattern start with *
5396
+ if (path.startsWith('*')) {
5396
5397
  return path;
5397
5398
  }
5398
5399
  // Resolve a relative request URL against a given custom "baseUrl"
@@ -5426,18 +5427,31 @@ function normalizePath(path, baseUrl) {
5426
5427
  */
5427
5428
  function coercePath(path) {
5428
5429
  return (path
5429
- /**
5430
- * Escape the protocol so that "path-to-regexp" could match
5431
- * absolute URL.
5432
- * @see https://github.com/pillarjs/path-to-regexp/issues/259
5433
- */
5434
- .replace(/^([^\/]+)(:)(?=\/\/)/g, '$1\\$2')
5435
5430
  /**
5436
5431
  * Replace wildcards ("*") with unnamed capturing groups
5437
5432
  * because "path-to-regexp" doesn't support wildcards.
5438
5433
  * Ignore path parameter' modifiers (i.e. ":name*").
5439
5434
  */
5440
- .replace(/(?<!(^|\/|\*+):[\w]+)(\*{1,2})/g, '(.*)'));
5435
+ .replace(/([:a-zA-Z_-]*)(\*{1,2})+/g, (_, parameterName, wildcard) => {
5436
+ const expression = '(.*)';
5437
+ if (!parameterName) {
5438
+ return expression;
5439
+ }
5440
+ return parameterName.startsWith(':')
5441
+ ? `${parameterName}${wildcard}`
5442
+ : `${parameterName}${expression}`;
5443
+ })
5444
+ /**
5445
+ * Escape the port so that "path-to-regexp" can match
5446
+ * absolute URLs including port numbers.
5447
+ */
5448
+ .replace(/([^\/])(:)(?=\d+)/, '$1\\$2')
5449
+ /**
5450
+ * Escape the protocol so that "path-to-regexp" could match
5451
+ * absolute URL.
5452
+ * @see https://github.com/pillarjs/path-to-regexp/issues/259
5453
+ */
5454
+ .replace(/^([^\/]+)(:)(?=\/\/)/, '$1\\$2'));
5441
5455
  }
5442
5456
  /**
5443
5457
  * Returns the result of matching given request URL against a mask.
@@ -5697,7 +5711,6 @@ class RestHandler extends RequestHandler {
5697
5711
  const matchesMethod = this.info.method instanceof RegExp
5698
5712
  ? this.info.method.test(request.method)
5699
5713
  : isStringEqual(this.info.method, request.method);
5700
- // console.log({ request, matchesMethod, parsedResult })
5701
5714
  return matchesMethod && parsedResult.matches;
5702
5715
  }
5703
5716
  log(request, response) {
@@ -5830,10 +5843,10 @@ function groupHandlersByType(handlers) {
5830
5843
  graphql: [],
5831
5844
  });
5832
5845
  }
5833
- function getScoreForRestHandler() {
5846
+ function getRestHandlerScore() {
5834
5847
  return (request, handler) => {
5835
5848
  const { path, method } = handler.info;
5836
- if (path instanceof RegExp) {
5849
+ if (path instanceof RegExp || method instanceof RegExp) {
5837
5850
  return Infinity;
5838
5851
  }
5839
5852
  const hasSameMethod = isStringEqual(request.method, method);
@@ -5844,12 +5857,15 @@ function getScoreForRestHandler() {
5844
5857
  return score - methodScoreDelta;
5845
5858
  };
5846
5859
  }
5847
- function getScoreForGraphQLHandler(parsedQuery) {
5860
+ function getGraphQLHandlerScore(parsedQuery) {
5848
5861
  return (_, handler) => {
5849
5862
  if (typeof parsedQuery.operationName === 'undefined') {
5850
5863
  return Infinity;
5851
5864
  }
5852
5865
  const { operationType, operationName } = handler.info;
5866
+ if (typeof operationName !== 'string') {
5867
+ return Infinity;
5868
+ }
5853
5869
  const hasSameOperationType = parsedQuery.operationType === operationType;
5854
5870
  // Always treat a handler with the same operation type as a more similar one.
5855
5871
  const operationTypeScoreDelta = hasSameOperationType ? TYPE_MATCH_DELTA : 0;
@@ -5859,16 +5875,12 @@ function getScoreForGraphQLHandler(parsedQuery) {
5859
5875
  }
5860
5876
  function getSuggestedHandler(request, handlers, getScore) {
5861
5877
  const suggestedHandlers = handlers
5862
- .reduce((acc, handler) => {
5878
+ .reduce((suggestions, handler) => {
5863
5879
  const score = getScore(request, handler);
5864
- return acc.concat([[score, handler]]);
5880
+ return suggestions.concat([[score, handler]]);
5865
5881
  }, [])
5866
- .sort(([leftScore], [rightScore]) => {
5867
- return leftScore - rightScore;
5868
- })
5869
- .filter(([score]) => {
5870
- return score <= MAX_MATCH_SCORE;
5871
- })
5882
+ .sort(([leftScore], [rightScore]) => leftScore - rightScore)
5883
+ .filter(([score]) => score <= MAX_MATCH_SCORE)
5872
5884
  .slice(0, MAX_SUGGESTION_COUNT)
5873
5885
  .map(([, handler]) => handler);
5874
5886
  return suggestedHandlers;
@@ -5898,8 +5910,8 @@ function onUnhandledRequest(request, handlers, strategy = 'warn') {
5898
5910
  ? handlerGroups.graphql
5899
5911
  : handlerGroups.rest;
5900
5912
  const suggestedHandlers = getSuggestedHandler(request, relevantHandlers, parsedGraphQLQuery
5901
- ? getScoreForGraphQLHandler(parsedGraphQLQuery)
5902
- : getScoreForRestHandler());
5913
+ ? getGraphQLHandlerScore(parsedGraphQLQuery)
5914
+ : getRestHandlerScore());
5903
5915
  const handlerSuggestion = suggestedHandlers.length > 0
5904
5916
  ? getSuggestedHandlersMessage(suggestedHandlers)
5905
5917
  : '';
@@ -5922,7 +5934,7 @@ Read more: https://mswjs.io/docs/getting-started/mocks\
5922
5934
  // Print a developer-friendly error.
5923
5935
  devUtils.error('Error: %s', message);
5924
5936
  // Throw an exception to halt request processing and not perform the original request.
5925
- throw new Error('Cannot bypass a request when using the "error" strategy for the "onUnhandledRequest" option.');
5937
+ throw new Error(devUtils.formatMessage('Cannot bypass a request when using the "error" strategy for the "onUnhandledRequest" option.'));
5926
5938
  }
5927
5939
  case 'warn': {
5928
5940
  devUtils.warn('Warning: %s', message);
@@ -6054,15 +6066,14 @@ function createSetupServer(...interceptors$1) {
6054
6066
  },
6055
6067
  });
6056
6068
  interceptor.on('response', (request, response) => {
6057
- const requestId = request.headers.get('x-msw-request-id');
6058
- if (!requestId) {
6069
+ if (!request.id) {
6059
6070
  return;
6060
6071
  }
6061
6072
  if (response.headers.get('x-powered-by') === 'msw') {
6062
- emitter.emit('response:mocked', response, requestId);
6073
+ emitter.emit('response:mocked', response, request.id);
6063
6074
  }
6064
6075
  else {
6065
- emitter.emit('response:bypass', response, requestId);
6076
+ emitter.emit('response:bypass', response, request.id);
6066
6077
  }
6067
6078
  });
6068
6079
  return {