{"version":3,"sources":["../node_modules/.pnpm/outvariant@1.4.2/node_modules/outvariant/src/format.ts","../node_modules/.pnpm/outvariant@1.4.2/node_modules/outvariant/src/invariant.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/src/core/utils/internal/devUtils.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/src/core/utils/internal/getCallFrame.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/src/core/utils/internal/isIterable.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/src/core/handlers/RequestHandler.ts","../node_modules/.pnpm/@open-draft+until@2.1.0/node_modules/@open-draft/until/src/until.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/src/core/utils/executeHandlers.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/src/core/utils/request/toPublicUrl.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/src/core/utils/request/onUnhandledRequest.ts","../node_modules/.pnpm/@mswjs+cookies@1.1.0/node_modules/@mswjs/cookies/node_modules/set-cookie-parser/lib/set-cookie.js","../node_modules/.pnpm/@mswjs+cookies@1.1.0/node_modules/@mswjs/cookies/src/store.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/src/core/utils/request/readResponseCookies.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/src/core/utils/handleRequest.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/src/core/utils/toResponseInit.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/src/core/utils/internal/isObject.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/src/core/utils/internal/mergeRight.ts","../node_modules/.pnpm/strict-event-emitter@0.5.1/node_modules/strict-event-emitter/src/MemoryLeakError.ts","../node_modules/.pnpm/strict-event-emitter@0.5.1/node_modules/strict-event-emitter/src/Emitter.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/src/core/utils/internal/pipeEvents.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/src/core/utils/internal/toReadonlyArray.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/src/core/utils/internal/Disposable.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/src/core/SetupApi.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/node_modules/.pnpm/outvariant@1.4.2/node_modules/outvariant/src/format.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/node_modules/.pnpm/outvariant@1.4.2/node_modules/outvariant/src/invariant.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/node_modules/.pnpm/is-node-process@1.2.0/node_modules/is-node-process/src/index.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/node_modules/.pnpm/@open-draft+until@2.1.0/node_modules/@open-draft/until/src/until.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/src/browser/utils/getAbsoluteWorkerUrl.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/src/browser/setupWorker/start/utils/getWorkerByRegistration.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/src/browser/setupWorker/start/utils/getWorkerInstance.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/src/browser/setupWorker/start/utils/printStartMessage.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/src/browser/setupWorker/start/utils/enableMocking.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/src/browser/setupWorker/start/utils/createMessageChannel.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/src/browser/utils/pruneGetRequestBody.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/src/browser/utils/parseWorkerRequest.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/src/browser/setupWorker/start/createRequestListener.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/src/browser/utils/checkWorkerIntegrity.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/node_modules/.pnpm/@mswjs+interceptors@0.26.14/node_modules/@mswjs/interceptors/src/utils/bufferUtils.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/node_modules/.pnpm/@mswjs+interceptors@0.26.14/node_modules/@mswjs/interceptors/src/utils/responseUtils.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/node_modules/.pnpm/@mswjs+interceptors@0.26.14/node_modules/@mswjs/interceptors/src/glossary.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/node_modules/.pnpm/@open-draft+logger@0.3.0/node_modules/@open-draft/logger/lib/index.mjs","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/node_modules/.pnpm/strict-event-emitter@0.5.1/node_modules/strict-event-emitter/src/MemoryLeakError.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/node_modules/.pnpm/strict-event-emitter@0.5.1/node_modules/strict-event-emitter/src/Emitter.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/node_modules/.pnpm/@mswjs+interceptors@0.26.14/node_modules/@mswjs/interceptors/src/Interceptor.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/node_modules/.pnpm/@mswjs+interceptors@0.26.14/node_modules/@mswjs/interceptors/src/createRequestId.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/node_modules/.pnpm/@mswjs+interceptors@0.26.14/node_modules/@mswjs/interceptors/src/BatchInterceptor.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/src/browser/setupWorker/start/createResponseListener.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/src/browser/setupWorker/start/utils/validateWorkerScope.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/src/browser/setupWorker/start/createStartHandler.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/src/browser/setupWorker/stop/utils/printStopMessage.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/src/browser/setupWorker/stop/createStop.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/src/browser/setupWorker/start/utils/prepareStartHandler.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/node_modules/.pnpm/@open-draft+deferred-promise@2.2.0/node_modules/@open-draft/deferred-promise/src/createDeferredExecutor.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/node_modules/.pnpm/@open-draft+deferred-promise@2.2.0/node_modules/@open-draft/deferred-promise/src/DeferredPromise.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/node_modules/.pnpm/@mswjs+interceptors@0.26.14/node_modules/@mswjs/interceptors/src/utils/RequestController.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/node_modules/.pnpm/@mswjs+interceptors@0.26.14/node_modules/@mswjs/interceptors/src/utils/toInteractiveRequest.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/node_modules/.pnpm/@mswjs+interceptors@0.26.14/node_modules/@mswjs/interceptors/src/utils/emitAsync.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/node_modules/.pnpm/@mswjs+interceptors@0.26.14/node_modules/@mswjs/interceptors/src/utils/isPropertyAccessible.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/node_modules/.pnpm/@mswjs+interceptors@0.26.14/node_modules/@mswjs/interceptors/src/utils/canParseUrl.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/node_modules/.pnpm/@mswjs+interceptors@0.26.14/node_modules/@mswjs/interceptors/src/interceptors/fetch/index.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/node_modules/.pnpm/@mswjs+interceptors@0.26.14/node_modules/@mswjs/interceptors/src/interceptors/XMLHttpRequest/utils/concatArrayBuffer.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/node_modules/.pnpm/@mswjs+interceptors@0.26.14/node_modules/@mswjs/interceptors/src/interceptors/XMLHttpRequest/polyfills/EventPolyfill.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/node_modules/.pnpm/@mswjs+interceptors@0.26.14/node_modules/@mswjs/interceptors/src/interceptors/XMLHttpRequest/polyfills/ProgressEventPolyfill.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/node_modules/.pnpm/@mswjs+interceptors@0.26.14/node_modules/@mswjs/interceptors/src/interceptors/XMLHttpRequest/utils/createEvent.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/node_modules/.pnpm/@mswjs+interceptors@0.26.14/node_modules/@mswjs/interceptors/src/utils/findPropertySource.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/node_modules/.pnpm/@mswjs+interceptors@0.26.14/node_modules/@mswjs/interceptors/src/utils/createProxy.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/node_modules/.pnpm/@mswjs+interceptors@0.26.14/node_modules/@mswjs/interceptors/src/interceptors/XMLHttpRequest/utils/isDomParserSupportedType.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/node_modules/.pnpm/@mswjs+interceptors@0.26.14/node_modules/@mswjs/interceptors/src/utils/parseJson.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/node_modules/.pnpm/@mswjs+interceptors@0.26.14/node_modules/@mswjs/interceptors/src/interceptors/XMLHttpRequest/utils/createResponse.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/node_modules/.pnpm/@mswjs+interceptors@0.26.14/node_modules/@mswjs/interceptors/src/interceptors/XMLHttpRequest/XMLHttpRequestController.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/node_modules/.pnpm/@mswjs+interceptors@0.26.14/node_modules/@mswjs/interceptors/src/interceptors/XMLHttpRequest/XMLHttpRequestProxy.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/node_modules/.pnpm/@mswjs+interceptors@0.26.14/node_modules/@mswjs/interceptors/src/interceptors/XMLHttpRequest/index.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/src/browser/setupWorker/start/createFallbackRequestListener.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/src/browser/setupWorker/start/createFallbackStart.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/src/browser/setupWorker/stop/createFallbackStop.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/src/browser/utils/supportsReadableStreamTransfer.ts","../node_modules/.pnpm/msw@2.2.13_typescript@5.4.3/node_modules/msw/src/browser/setupWorker/setupWorker.ts","../src/mswLoader.ts"],"names":["POSITIONALS_EXP","serializePositional","positional","flag","json","format","message","positionals","positionalIndex","formattedMessage","match","isEscaped","_","value","STACK_FRAMES_TO_IGNORE","cleanErrorStack","error","nextStack","InvariantError","invariant","predicate","ErrorConstructor","formatMessage","LIBRARY_PREFIX","interpolatedMessage","warn","devUtils","SOURCE_FRAME","BUILD_FRAME","getCallFrame","stack","declarationFrame","frame","isIterable","fn","RequestHandler","_RequestHandler","args","callFrame","_args","parsedResult","request","existingClone","clonedRequest","requestClone","executeResolver","resolverExtras","mockedResponse","errorOrResponse","resolver","info","result","done","nextResponse","until","promise","executeHandlers","requestId","handlers","resolutionContext","matchingHandler","handler","toPublicUrl","url","urlInstance","onUnhandledRequest","strategy","publicUrl","unhandledRequestMessage","applyStrategy","require_set_cookie","__commonJS","exports","module","defaultParseOptions","isNonEmptyString","str","parseString","setCookieValue","options","parts","nameValuePairStr","parsed","parseNameValuePair","name","e","cookie","part","sides","key","nameValueArr","parse","input","sch","cookies","splitCookiesString","cookiesString","cookiesStrings","pos","start","ch","lastComma","nextStart","cookiesSeparatorFound","skipWhitespace","notSpecialChar","import_set_cookie_parser","__toESM","PERSISTENCY_KEY","supportsLocalStorage","testKey","isPropertyAccessible","object","method","CookieStore","response","requestUrl","responseCookies","now","parsedResponseCookies","parseCookie","maxAge","prevCookies","originCookies","persistedCookies","origin","token","expires","serializedCookies","store","readResponseCookies","handleRequest","emitter","handleRequestOptions","lookupResult","requiredLookupResult","transformedResponse","toResponseInit","isObject","mergeRight","left","right","rightValue","leftValue","MemoryLeakError","type","count","_Emitter","eventName","internalEventName","listener","listeners","index","onceListener","data","maxListeners","nextListeners","memoryLeakWarning","Emitter","pipeEvents","source","destination","rawEmit","sourceEmit","event","toReadonlyArray","clone","Disposable","subscription","InMemoryHandlersController","initialHandlers","runtimeHandles","nextHandlers","SetupApi","runtimeHandlers","isNodeProcess","getAbsoluteWorkerUrl","workerUrl","getWorkerByRegistration","registration","absoluteWorkerUrl","findWorker","state","worker","getWorkerInstance","mockRegistrations","registrations","existingRegistration","registrationResult","scopeUrl","printStartMessage","enableMocking","context","WorkerChannel","port","rest","transfer","pruneGetRequestBody","parseWorkerRequest","incomingRequest","createRequestListener","messageChannel","requestCloneForLogs","responseClone","responseCloneForLogs","responseInit","responseStreamOrNull","responseBufferOrNull","checkWorkerIntegrity","payload","encoder","encodeBuffer","text","decodeBuffer","buffer","encoding","toArrayBuffer","array","RESPONSE_STATUS_CODES_WITHOUT_BODY","isResponseWithoutBody","status","IS_PATCHED_MODULE","__defProp","__export","target","all","colors_exports","blue","gray","green","red","yellow","IS_NODE","Logger","LOGGER_NAME","getVariable","LOGGER_LEVEL","isDefinedAndNotEquals","noop","domain","performance2","PerformanceEntry","message2","positionals2","callback","level","prefix","customColors","entry","timestampColor","prefixColor","colorize","serializeInput","timestamp","log","deltaTime","variableName","expected","INTERNAL_REQUEST_ID_HEADER_NAME","getGlobalSymbol","symbol","setGlobalSymbol","deleteGlobalSymbol","Interceptor","logger","runningInstance","dispose","_a","instance","createRequestId","BatchInterceptor","interceptor","interceptors","createResponseListener","responseJson","validateWorkerScope","createStartHandler","customOptions","missingWorkerMessage","pendingInstance","resolve","printStopMessage","createStop","DEFAULT_START_OPTIONS","scriptURL","mockServiceWorkerUrl","createDeferredExecutor","executor","reject","onFulfilled","reason","DeferredPromise","#executor","deferredExecutor","originalResolve","originalReject","onRejected","#decorate","onfinally","RequestController","toInteractiveRequest","requestController","emitAsync","listners","obj","canParseUrl","_FetchInterceptor","pureFetch","init","resolvedInput","interactiveRequest","pendingRequestId","signal","requestAborted","resolverResult","listenersFinished","createNetworkError","FetchInterceptor","cause","concatArrayBuffer","EventPolyfill","bubbles","cancelable","ProgressEventPolyfill","SUPPORTS_PROGRESS_EVENT","createEvent","progressEvents","ProgressEventClass","findPropertySource","propertyName","prototype","createProxy","optionsToProxyHandler","constructorCall","methodCall","getProperty","setProperty","newTarget","next","nextValue","propertySource","ownDescriptors","receiver","isDomParserSupportedType","supportedType","parseJson","createResponse","body","responseBodyOrNull","createHeadersFromXMLHttpReqestHeaders","headersString","headers","lines","line","IS_MOCKED_RESPONSE","XMLHttpRequestController","initialRequest","invoke","methodName","toAbsoluteUrl","fetchResponse","fetchRequest","nextEvents","define","__","headerValue","allHeaders","headerName","totalResponseBodyLength","finalizeResponse","reader","readNextResponseBodyChunk","arrayBuffer","mimeType","responseBlob","responseText","contentType","nextReadyState","registeredEventName","proxyHeaders","property","createXMLHttpRequestProxy","originalRequest","prototypeDescriptors","xhrRequestController","isMockedResponse","_XMLHttpRequestInterceptor","PureXMLHttpRequest","XMLHttpRequestInterceptor","createFallbackRequestListener","createFallbackStart","createFallbackStop","supportsReadableStreamTransfer","stream","controller","SetupWorkerApi","eventType","bindings","handleIncomingMessage","unbind","setupWorker","opt","initialize","setupHandlers","msw","handlersList","mswLoader","viewMode"],"mappings":"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","sourcesContent":["const POSITIONALS_EXP = /(%?)(%([sdijo]))/g\n\nfunction serializePositional(positional: any, flag: string): any {\n  switch (flag) {\n    // Strings.\n    case 's':\n      return positional\n\n    // Digits.\n    case 'd':\n    case 'i':\n      return Number(positional)\n\n    // JSON.\n    case 'j':\n      return JSON.stringify(positional)\n\n    // Objects.\n    case 'o': {\n      // Preserve stings to prevent extra quotes around them.\n      if (typeof positional === 'string') {\n        return positional\n      }\n\n      const json = JSON.stringify(positional)\n\n      // If the positional isn't serializable, return it as-is.\n      if (json === '{}' || json === '[]' || /^\\[object .+?\\]$/.test(json)) {\n        return positional\n      }\n\n      return json\n    }\n  }\n}\n\nexport function format(message: string, ...positionals: any[]): string {\n  if (positionals.length === 0) {\n    return message\n  }\n\n  let positionalIndex = 0\n  let formattedMessage = message.replace(\n    POSITIONALS_EXP,\n    (match, isEscaped, _, flag) => {\n      const positional = positionals[positionalIndex]\n      const value = serializePositional(positional, flag)\n\n      if (!isEscaped) {\n        positionalIndex++\n        return value\n      }\n\n      return match\n    }\n  )\n\n  // Append unresolved positionals to string as-is.\n  if (positionalIndex < positionals.length) {\n    formattedMessage += ` ${positionals.slice(positionalIndex).join(' ')}`\n  }\n\n  formattedMessage = formattedMessage.replace(/%{2,2}/g, '%')\n\n  return formattedMessage\n}\n","import { format } from './format'\n\nconst STACK_FRAMES_TO_IGNORE = 2\n\n/**\n * Remove the \"outvariant\" package trace from the given error.\n * This scopes down the error stack to the relevant parts\n * when used in other applications.\n */\nfunction cleanErrorStack(error: Error): void {\n  if (!error.stack) {\n    return\n  }\n\n  const nextStack = error.stack.split('\\n')\n  nextStack.splice(1, STACK_FRAMES_TO_IGNORE)\n  error.stack = nextStack.join('\\n')\n}\n\nexport class InvariantError extends Error {\n  name = 'Invariant Violation'\n\n  constructor(public readonly message: string, ...positionals: any[]) {\n    super(message)\n    this.message = format(message, ...positionals)\n    cleanErrorStack(this)\n  }\n}\n\nexport interface CustomErrorConstructor {\n  new (message: string): Error\n}\n\nexport interface CustomErrorFactory {\n  (message: string): Error\n}\n\nexport type CustomError = CustomErrorConstructor | CustomErrorFactory\n\ntype Invariant = {\n  (\n    predicate: unknown,\n    message: string,\n    ...positionals: any[]\n  ): asserts predicate\n\n  as(\n    ErrorConstructor: CustomError,\n    predicate: unknown,\n    message: string,\n    ...positionals: unknown[]\n  ): asserts predicate\n}\n\nexport const invariant: Invariant = (\n  predicate,\n  message,\n  ...positionals\n): asserts predicate => {\n  if (!predicate) {\n    throw new InvariantError(message, ...positionals)\n  }\n}\n\ninvariant.as = (ErrorConstructor, predicate, message, ...positionals) => {\n  if (!predicate) {\n    const formatMessage = positionals.length === 0 ? message : format(message, positionals);\n    let error: Error;\n\n    try {\n      error = Reflect.construct(ErrorConstructor as CustomErrorConstructor, [formatMessage]);\n    } catch(err) {\n      error = (ErrorConstructor as CustomErrorFactory)(formatMessage);\n    }\n\n    throw error\n  }\n}\n","import { format } from 'outvariant'\n\nconst LIBRARY_PREFIX = '[MSW]'\n\n/**\n * Formats a given message by appending the library's prefix string.\n */\nfunction formatMessage(message: string, ...positionals: any[]): string {\n  const interpolatedMessage = format(message, ...positionals)\n  return `${LIBRARY_PREFIX} ${interpolatedMessage}`\n}\n\n/**\n * Prints a library-specific warning.\n */\nfunction warn(message: string, ...positionals: any[]): void {\n  console.warn(formatMessage(message, ...positionals))\n}\n\n/**\n * Prints a library-specific error.\n */\nfunction error(message: string, ...positionals: any[]): void {\n  console.error(formatMessage(message, ...positionals))\n}\n\nexport const devUtils = {\n  formatMessage,\n  warn,\n  error,\n}\n","// Ignore the source files traces for local testing.\nconst SOURCE_FRAME = /[\\/\\\\]msw[\\/\\\\]src[\\/\\\\](.+)/\n\nconst BUILD_FRAME =\n  /(node_modules)?[\\/\\\\]lib[\\/\\\\](core|browser|node|native|iife)[\\/\\\\]|^[^\\/\\\\]*$/\n\n/**\n * Return the stack trace frame of a function's invocation.\n */\nexport function getCallFrame(error: Error) {\n  // In <IE11, new Error may return an undefined stack\n  const stack = error.stack\n\n  if (!stack) {\n    return\n  }\n\n  const frames: string[] = stack.split('\\n').slice(1)\n\n  // Get the first frame that doesn't reference the library's internal trace.\n  // Assume that frame is the invocation frame.\n  const declarationFrame = frames.find((frame) => {\n    return !(SOURCE_FRAME.test(frame) || BUILD_FRAME.test(frame))\n  })\n\n  if (!declarationFrame) {\n    return\n  }\n\n  // Extract file reference from the stack frame.\n  const declarationPath = declarationFrame\n    .replace(/\\s*at [^()]*\\(([^)]+)\\)/, '$1')\n    .replace(/^@/, '')\n  return declarationPath\n}\n","/**\n * Determines if the given function is an iterator.\n */\nexport function isIterable<IteratorType>(\n  fn: any,\n): fn is Generator<IteratorType, IteratorType, IteratorType> {\n  if (!fn) {\n    return false\n  }\n\n  return typeof (fn as Generator<unknown>)[Symbol.iterator] == 'function'\n}\n","import { invariant } from 'outvariant'\nimport { getCallFrame } from '../utils/internal/getCallFrame'\nimport { isIterable } from '../utils/internal/isIterable'\nimport type { ResponseResolutionContext } from '../utils/executeHandlers'\nimport type { MaybePromise } from '../typeUtils'\nimport { StrictRequest, StrictResponse } from '..//HttpResponse'\n\nexport type DefaultRequestMultipartBody = Record<\n  string,\n  string | File | Array<string | File>\n>\n\nexport type DefaultBodyType =\n  | Record<string, any>\n  | DefaultRequestMultipartBody\n  | string\n  | number\n  | boolean\n  | null\n  | undefined\n\nexport type JsonBodyType =\n  | Record<string, any>\n  | string\n  | number\n  | boolean\n  | null\n  | undefined\n\nexport interface RequestHandlerDefaultInfo {\n  header: string\n}\n\nexport interface RequestHandlerInternalInfo {\n  callFrame?: string\n}\n\nexport type ResponseResolverReturnType<\n  ResponseBodyType extends DefaultBodyType = undefined,\n> =\n  | ([ResponseBodyType] extends [undefined]\n      ? Response\n      : StrictResponse<ResponseBodyType>)\n  | undefined\n  | void\n\nexport type MaybeAsyncResponseResolverReturnType<\n  ResponseBodyType extends DefaultBodyType,\n> = MaybePromise<ResponseResolverReturnType<ResponseBodyType>>\n\nexport type AsyncResponseResolverReturnType<\n  ResponseBodyType extends DefaultBodyType,\n> = MaybePromise<\n  | ResponseResolverReturnType<ResponseBodyType>\n  | Generator<\n      MaybeAsyncResponseResolverReturnType<ResponseBodyType>,\n      MaybeAsyncResponseResolverReturnType<ResponseBodyType>,\n      MaybeAsyncResponseResolverReturnType<ResponseBodyType>\n    >\n>\n\nexport type ResponseResolverInfo<\n  ResolverExtraInfo extends Record<string, unknown>,\n  RequestBodyType extends DefaultBodyType = DefaultBodyType,\n> = {\n  request: StrictRequest<RequestBodyType>\n  requestId: string\n} & ResolverExtraInfo\n\nexport type ResponseResolver<\n  ResolverExtraInfo extends Record<string, unknown> = Record<string, unknown>,\n  RequestBodyType extends DefaultBodyType = DefaultBodyType,\n  ResponseBodyType extends DefaultBodyType = undefined,\n> = (\n  info: ResponseResolverInfo<ResolverExtraInfo, RequestBodyType>,\n) => AsyncResponseResolverReturnType<ResponseBodyType>\n\nexport interface RequestHandlerArgs<\n  HandlerInfo,\n  HandlerOptions extends RequestHandlerOptions,\n> {\n  info: HandlerInfo\n  resolver: ResponseResolver<any>\n  options?: HandlerOptions\n}\n\nexport interface RequestHandlerOptions {\n  once?: boolean\n}\n\nexport interface RequestHandlerExecutionResult<\n  ParsedResult extends Record<string, unknown> | undefined,\n> {\n  handler: RequestHandler\n  parsedResult?: ParsedResult\n  request: Request\n  requestId: string\n  response?: Response\n}\n\nexport abstract class RequestHandler<\n  HandlerInfo extends RequestHandlerDefaultInfo = RequestHandlerDefaultInfo,\n  ParsedResult extends Record<string, any> | undefined = any,\n  ResolverExtras extends Record<string, unknown> = any,\n  HandlerOptions extends RequestHandlerOptions = RequestHandlerOptions,\n> {\n  static cache = new WeakMap<\n    StrictRequest<DefaultBodyType>,\n    StrictRequest<DefaultBodyType>\n  >()\n\n  public info: HandlerInfo & RequestHandlerInternalInfo\n  /**\n   * Indicates whether this request handler has been used\n   * (its resolver has successfully executed).\n   */\n  public isUsed: boolean\n\n  protected resolver: ResponseResolver<ResolverExtras, any, any>\n  private resolverGenerator?: Generator<\n    MaybeAsyncResponseResolverReturnType<any>,\n    MaybeAsyncResponseResolverReturnType<any>,\n    MaybeAsyncResponseResolverReturnType<any>\n  >\n  private resolverGeneratorResult?: Response | StrictResponse<any>\n  private options?: HandlerOptions\n\n  constructor(args: RequestHandlerArgs<HandlerInfo, HandlerOptions>) {\n    this.resolver = args.resolver\n    this.options = args.options\n\n    const callFrame = getCallFrame(new Error())\n\n    this.info = {\n      ...args.info,\n      callFrame,\n    }\n\n    this.isUsed = false\n  }\n\n  /**\n   * Determine if the intercepted request should be mocked.\n   */\n  abstract predicate(args: {\n    request: Request\n    parsedResult: ParsedResult\n    resolutionContext?: ResponseResolutionContext\n  }): boolean\n\n  /**\n   * Print out the successfully handled request.\n   */\n  abstract log(args: {\n    request: Request\n    response: Response\n    parsedResult: ParsedResult\n  }): void\n\n  /**\n   * Parse the intercepted request to extract additional information from it.\n   * Parsed result is then exposed to other methods of this request handler.\n   */\n  async parse(_args: {\n    request: Request\n    resolutionContext?: ResponseResolutionContext\n  }): Promise<ParsedResult> {\n    return {} as ParsedResult\n  }\n\n  /**\n   * Test if this handler matches the given request.\n   *\n   * This method is not used internally but is exposed\n   * as a convenience method for consumers writing custom\n   * handlers.\n   */\n  public async test(args: {\n    request: Request\n    resolutionContext?: ResponseResolutionContext\n  }): Promise<boolean> {\n    const parsedResult = await this.parse({\n      request: args.request,\n      resolutionContext: args.resolutionContext,\n    })\n\n    return this.predicate({\n      request: args.request,\n      parsedResult,\n      resolutionContext: args.resolutionContext,\n    })\n  }\n\n  protected extendResolverArgs(_args: {\n    request: Request\n    parsedResult: ParsedResult\n  }): ResolverExtras {\n    return {} as ResolverExtras\n  }\n\n  // Clone the request instance before it's passed to the handler phases\n  // and the response resolver so we can always read it for logging.\n  // We only clone it once per request to avoid unnecessary overhead.\n  private cloneRequestOrGetFromCache(\n    request: StrictRequest<DefaultBodyType>,\n  ): StrictRequest<DefaultBodyType> {\n    const existingClone = RequestHandler.cache.get(request)\n\n    if (typeof existingClone !== 'undefined') {\n      return existingClone\n    }\n\n    const clonedRequest = request.clone()\n    RequestHandler.cache.set(request, clonedRequest)\n\n    return clonedRequest\n  }\n\n  /**\n   * Execute this request handler and produce a mocked response\n   * using the given resolver function.\n   */\n  public async run(args: {\n    request: StrictRequest<any>\n    requestId: string\n    resolutionContext?: ResponseResolutionContext\n  }): Promise<RequestHandlerExecutionResult<ParsedResult> | null> {\n    if (this.isUsed && this.options?.once) {\n      return null\n    }\n\n    // Clone the request.\n    // If this is the first time MSW handles this request, a fresh clone\n    // will be created and cached. Upon further handling of the same request,\n    // the request clone from the cache will be reused to prevent abundant\n    // \"abort\" listeners and save up resources on cloning.\n    const requestClone = this.cloneRequestOrGetFromCache(args.request)\n\n    const parsedResult = await this.parse({\n      request: args.request,\n      resolutionContext: args.resolutionContext,\n    })\n    const shouldInterceptRequest = this.predicate({\n      request: args.request,\n      parsedResult,\n      resolutionContext: args.resolutionContext,\n    })\n\n    if (!shouldInterceptRequest) {\n      return null\n    }\n\n    // Re-check isUsed, in case another request hit this handler while we were\n    // asynchronously parsing the request.\n    if (this.isUsed && this.options?.once) {\n      return null\n    }\n\n    this.isUsed = true\n\n    // Create a response extraction wrapper around the resolver\n    // since it can be both an async function and a generator.\n    const executeResolver = this.wrapResolver(this.resolver)\n\n    const resolverExtras = this.extendResolverArgs({\n      request: args.request,\n      parsedResult,\n    })\n\n    const mockedResponsePromise = (\n      executeResolver({\n        ...resolverExtras,\n        requestId: args.requestId,\n        request: args.request,\n      }) as Promise<Response>\n    ).catch((errorOrResponse) => {\n      // Allow throwing a Response instance in a response resolver.\n      if (errorOrResponse instanceof Response) {\n        return errorOrResponse\n      }\n\n      // Otherwise, throw the error as-is.\n      throw errorOrResponse\n    })\n\n    const mockedResponse = await mockedResponsePromise\n\n    const executionResult = this.createExecutionResult({\n      // Pass the cloned request to the result so that logging\n      // and other consumers could read its body once more.\n      request: requestClone,\n      requestId: args.requestId,\n      response: mockedResponse,\n      parsedResult,\n    })\n\n    return executionResult\n  }\n\n  private wrapResolver(\n    resolver: ResponseResolver<ResolverExtras>,\n  ): ResponseResolver<ResolverExtras> {\n    return async (info): Promise<ResponseResolverReturnType<any>> => {\n      const result = this.resolverGenerator || (await resolver(info))\n\n      if (isIterable<AsyncResponseResolverReturnType<any>>(result)) {\n        // Immediately mark this handler as unused.\n        // Only when the generator is done, the handler will be\n        // considered used.\n        this.isUsed = false\n\n        const { value, done } = result[Symbol.iterator]().next()\n        const nextResponse = await value\n\n        if (done) {\n          this.isUsed = true\n        }\n\n        // If the generator is done and there is no next value,\n        // return the previous generator's value.\n        if (!nextResponse && done) {\n          invariant(\n            this.resolverGeneratorResult,\n            'Failed to returned a previously stored generator response: the value is not a valid Response.',\n          )\n\n          // Clone the previously stored response from the generator\n          // so that it could be read again.\n          return this.resolverGeneratorResult.clone() as StrictResponse<any>\n        }\n\n        if (!this.resolverGenerator) {\n          this.resolverGenerator = result\n        }\n\n        if (nextResponse) {\n          // Also clone the response before storing it\n          // so it could be read again.\n          this.resolverGeneratorResult = nextResponse?.clone()\n        }\n\n        return nextResponse\n      }\n\n      return result\n    }\n  }\n\n  private createExecutionResult(args: {\n    request: Request\n    requestId: string\n    parsedResult: ParsedResult\n    response?: Response\n  }): RequestHandlerExecutionResult<ParsedResult> {\n    return {\n      handler: this,\n      request: args.request,\n      requestId: args.requestId,\n      response: args.response,\n      parsedResult: args.parsedResult,\n    }\n  }\n}\n","export type AsyncTuple<\n  ErrorType extends any = Error,\n  DataType extends any = unknown,\n> =\n  | {\n      error: ErrorType\n      data: null\n    }\n  | { error: null; data: DataType }\n\n/**\n * Gracefully handles a given Promise factory.\n * @example\n * const { error, data } = await until(() => asyncAction())\n */\nexport const until = async <\n  ErrorType extends any = Error,\n  DataType extends any = unknown,\n>(\n  promise: () => Promise<DataType>,\n): Promise<AsyncTuple<ErrorType, DataType>> => {\n  try {\n    const data = await promise().catch((error) => {\n      throw error\n    })\n    return { error: null, data }\n  } catch (error) {\n    return { error, data: null }\n  }\n}\n","import {\n  RequestHandler,\n  RequestHandlerExecutionResult,\n} from '../handlers/RequestHandler'\n\nexport interface HandlersExecutionResult {\n  handler: RequestHandler\n  parsedResult?: any\n  response?: Response\n}\n\nexport interface ResponseResolutionContext {\n  baseUrl?: string\n}\n\n/**\n * Executes the list of request handlers against the given request.\n * Returns the execution result object containing any matching request\n * handler and any mocked response it returned.\n */\nexport const executeHandlers = async <Handlers extends Array<RequestHandler>>({\n  request,\n  requestId,\n  handlers,\n  resolutionContext,\n}: {\n  request: Request\n  requestId: string\n  handlers: Handlers\n  resolutionContext?: ResponseResolutionContext\n}): Promise<HandlersExecutionResult | null> => {\n  let matchingHandler: RequestHandler | null = null\n  let result: RequestHandlerExecutionResult<any> | null = null\n\n  for (const handler of handlers) {\n    result = await handler.run({ request, requestId, resolutionContext })\n\n    // If the handler produces some result for this request,\n    // it automatically becomes matching.\n    if (result !== null) {\n      matchingHandler = handler\n    }\n\n    // Stop the lookup if this handler returns a mocked response.\n    // If it doesn't, it will still be considered the last matching\n    // handler until any of them returns a response. This way we can\n    // distinguish between fallthrough handlers without responses\n    // and the lack of a matching handler.\n    if (result?.response) {\n      break\n    }\n  }\n\n  if (matchingHandler) {\n    return {\n      handler: matchingHandler,\n      parsedResult: result?.parsedResult,\n      response: result?.response,\n    }\n  }\n\n  return null\n}\n","/**\n * Returns a relative URL if the given request URL is relative\n * to the current origin. Otherwise returns an absolute URL.\n */\nexport function toPublicUrl(url: string | URL): string {\n  if (typeof location === 'undefined') {\n    return url.toString()\n  }\n\n  const urlInstance = url instanceof URL ? url : new URL(url)\n\n  return urlInstance.origin === location.origin\n    ? urlInstance.pathname\n    : urlInstance.origin + urlInstance.pathname\n}\n","import { toPublicUrl } from './toPublicUrl'\nimport { devUtils } from '../internal/devUtils'\n\nexport interface UnhandledRequestPrint {\n  warning(): void\n  error(): void\n}\n\nexport type UnhandledRequestCallback = (\n  request: Request,\n  print: UnhandledRequestPrint,\n) => void\n\nexport type UnhandledRequestStrategy =\n  | 'bypass'\n  | 'warn'\n  | 'error'\n  | UnhandledRequestCallback\n\nexport async function onUnhandledRequest(\n  request: Request,\n  strategy: UnhandledRequestStrategy = 'warn',\n): Promise<void> {\n  const url = new URL(request.url)\n  const publicUrl = toPublicUrl(url)\n\n  const unhandledRequestMessage = `intercepted a request without a matching request handler:\\n\\n  \\u2022 ${request.method} ${publicUrl}\\n\\nIf you still wish to intercept this unhandled request, please create a request handler for it.\\nRead more: https://mswjs.io/docs/getting-started/mocks`\n\n  function applyStrategy(strategy: UnhandledRequestStrategy) {\n    switch (strategy) {\n      case 'error': {\n        // Print a developer-friendly error.\n        devUtils.error('Error: %s', unhandledRequestMessage)\n\n        // Throw an exception to halt request processing and not perform the original request.\n        throw new Error(\n          devUtils.formatMessage(\n            'Cannot bypass a request when using the \"error\" strategy for the \"onUnhandledRequest\" option.',\n          ),\n        )\n      }\n\n      case 'warn': {\n        devUtils.warn('Warning: %s', unhandledRequestMessage)\n        break\n      }\n\n      case 'bypass':\n        break\n\n      default:\n        throw new Error(\n          devUtils.formatMessage(\n            'Failed to react to an unhandled request: unknown strategy \"%s\". Please provide one of the supported strategies (\"bypass\", \"warn\", \"error\") or a custom callback function as the value of the \"onUnhandledRequest\" option.',\n            strategy,\n          ),\n        )\n    }\n  }\n\n  if (typeof strategy === 'function') {\n    strategy(request, {\n      warning: applyStrategy.bind(null, 'warn'),\n      error: applyStrategy.bind(null, 'error'),\n    })\n    return\n  }\n\n  /**\n   * @note Ignore \"file://\" requests.\n   * Those often are an implementation detail of modern tooling\n   * that fetches modules via HTTP. Developers don't issue those\n   * requests and so they mustn't be warned about them.\n   */\n  if (url.protocol === 'file:') {\n    return\n  }\n\n  applyStrategy(strategy)\n}\n","\"use strict\";\n\nvar defaultParseOptions = {\n  decodeValues: true,\n  map: false,\n  silent: false,\n};\n\nfunction isNonEmptyString(str) {\n  return typeof str === \"string\" && !!str.trim();\n}\n\nfunction parseString(setCookieValue, options) {\n  var parts = setCookieValue.split(\";\").filter(isNonEmptyString);\n\n  var nameValuePairStr = parts.shift();\n  var parsed = parseNameValuePair(nameValuePairStr);\n  var name = parsed.name;\n  var value = parsed.value;\n\n  options = options\n    ? Object.assign({}, defaultParseOptions, options)\n    : defaultParseOptions;\n\n  try {\n    value = options.decodeValues ? decodeURIComponent(value) : value; // decode cookie value\n  } catch (e) {\n    console.error(\n      \"set-cookie-parser encountered an error while decoding a cookie with value '\" +\n        value +\n        \"'. Set options.decodeValues to false to disable this feature.\",\n      e\n    );\n  }\n\n  var cookie = {\n    name: name,\n    value: value,\n  };\n\n  parts.forEach(function (part) {\n    var sides = part.split(\"=\");\n    var key = sides.shift().trimLeft().toLowerCase();\n    var value = sides.join(\"=\");\n    if (key === \"expires\") {\n      cookie.expires = new Date(value);\n    } else if (key === \"max-age\") {\n      cookie.maxAge = parseInt(value, 10);\n    } else if (key === \"secure\") {\n      cookie.secure = true;\n    } else if (key === \"httponly\") {\n      cookie.httpOnly = true;\n    } else if (key === \"samesite\") {\n      cookie.sameSite = value;\n    } else {\n      cookie[key] = value;\n    }\n  });\n\n  return cookie;\n}\n\nfunction parseNameValuePair(nameValuePairStr) {\n  // Parses name-value-pair according to rfc6265bis draft\n\n  var name = \"\";\n  var value = \"\";\n  var nameValueArr = nameValuePairStr.split(\"=\");\n  if (nameValueArr.length > 1) {\n    name = nameValueArr.shift();\n    value = nameValueArr.join(\"=\"); // everything after the first =, joined by a \"=\" if there was more than one part\n  } else {\n    value = nameValuePairStr;\n  }\n\n  return { name: name, value: value };\n}\n\nfunction parse(input, options) {\n  options = options\n    ? Object.assign({}, defaultParseOptions, options)\n    : defaultParseOptions;\n\n  if (!input) {\n    if (!options.map) {\n      return [];\n    } else {\n      return {};\n    }\n  }\n\n  if (input.headers) {\n    if (typeof input.headers.getSetCookie === \"function\") {\n      // for fetch responses - they combine headers of the same type in the headers array,\n      // but getSetCookie returns an uncombined array\n      input = input.headers.getSetCookie();\n    } else if (input.headers[\"set-cookie\"]) {\n      // fast-path for node.js (which automatically normalizes header names to lower-case\n      input = input.headers[\"set-cookie\"];\n    } else {\n      // slow-path for other environments - see #25\n      var sch =\n        input.headers[\n          Object.keys(input.headers).find(function (key) {\n            return key.toLowerCase() === \"set-cookie\";\n          })\n        ];\n      // warn if called on a request-like object with a cookie header rather than a set-cookie header - see #34, 36\n      if (!sch && input.headers.cookie && !options.silent) {\n        console.warn(\n          \"Warning: set-cookie-parser appears to have been called on a request object. It is designed to parse Set-Cookie headers from responses, not Cookie headers from requests. Set the option {silent: true} to suppress this warning.\"\n        );\n      }\n      input = sch;\n    }\n  }\n  if (!Array.isArray(input)) {\n    input = [input];\n  }\n\n  options = options\n    ? Object.assign({}, defaultParseOptions, options)\n    : defaultParseOptions;\n\n  if (!options.map) {\n    return input.filter(isNonEmptyString).map(function (str) {\n      return parseString(str, options);\n    });\n  } else {\n    var cookies = {};\n    return input.filter(isNonEmptyString).reduce(function (cookies, str) {\n      var cookie = parseString(str, options);\n      cookies[cookie.name] = cookie;\n      return cookies;\n    }, cookies);\n  }\n}\n\n/*\n  Set-Cookie header field-values are sometimes comma joined in one string. This splits them without choking on commas\n  that are within a single set-cookie field-value, such as in the Expires portion.\n\n  This is uncommon, but explicitly allowed - see https://tools.ietf.org/html/rfc2616#section-4.2\n  Node.js does this for every header *except* set-cookie - see https://github.com/nodejs/node/blob/d5e363b77ebaf1caf67cd7528224b651c86815c1/lib/_http_incoming.js#L128\n  React Native's fetch does this for *every* header, including set-cookie.\n\n  Based on: https://github.com/google/j2objc/commit/16820fdbc8f76ca0c33472810ce0cb03d20efe25\n  Credits to: https://github.com/tomball for original and https://github.com/chrusart for JavaScript implementation\n*/\nfunction splitCookiesString(cookiesString) {\n  if (Array.isArray(cookiesString)) {\n    return cookiesString;\n  }\n  if (typeof cookiesString !== \"string\") {\n    return [];\n  }\n\n  var cookiesStrings = [];\n  var pos = 0;\n  var start;\n  var ch;\n  var lastComma;\n  var nextStart;\n  var cookiesSeparatorFound;\n\n  function skipWhitespace() {\n    while (pos < cookiesString.length && /\\s/.test(cookiesString.charAt(pos))) {\n      pos += 1;\n    }\n    return pos < cookiesString.length;\n  }\n\n  function notSpecialChar() {\n    ch = cookiesString.charAt(pos);\n\n    return ch !== \"=\" && ch !== \";\" && ch !== \",\";\n  }\n\n  while (pos < cookiesString.length) {\n    start = pos;\n    cookiesSeparatorFound = false;\n\n    while (skipWhitespace()) {\n      ch = cookiesString.charAt(pos);\n      if (ch === \",\") {\n        // ',' is a cookie separator if we have later first '=', not ';' or ','\n        lastComma = pos;\n        pos += 1;\n\n        skipWhitespace();\n        nextStart = pos;\n\n        while (pos < cookiesString.length && notSpecialChar()) {\n          pos += 1;\n        }\n\n        // currently special character\n        if (pos < cookiesString.length && cookiesString.charAt(pos) === \"=\") {\n          // we found cookies separator\n          cookiesSeparatorFound = true;\n          // pos is inside the next cookie, so back up and return it.\n          pos = nextStart;\n          cookiesStrings.push(cookiesString.substring(start, lastComma));\n          start = pos;\n        } else {\n          // in param ',' or param separator ';',\n          // we continue from that comma\n          pos = lastComma + 1;\n        }\n      } else {\n        pos += 1;\n      }\n    }\n\n    if (!cookiesSeparatorFound || pos >= cookiesString.length) {\n      cookiesStrings.push(cookiesString.substring(start, cookiesString.length));\n    }\n  }\n\n  return cookiesStrings;\n}\n\nmodule.exports = parse;\nmodule.exports.parse = parse;\nmodule.exports.parseString = parseString;\nmodule.exports.splitCookiesString = splitCookiesString;\n","import { Cookie, parse as parseCookie } from 'set-cookie-parser'\n\ninterface RequestLike {\n  credentials: Request['credentials']\n  url: string\n}\n\ninterface HeadersLike {\n  get(name: string): string | null\n}\n\ninterface ResponseLike {\n  headers: HeadersLike\n}\n\nexport type Store = Map<string, StoreEntry>\nexport type StoreEntry = Map<string, Cookie>\nexport type CookieString = Omit<Cookie, 'expires'> & { expires?: string }\n\nexport const PERSISTENCY_KEY = 'MSW_COOKIE_STORE'\n\nfunction supportsLocalStorage() {\n  try {\n    if (localStorage == null) {\n      return false\n    }\n\n    const testKey = PERSISTENCY_KEY + '_test'\n\n    localStorage.setItem(testKey, 'test')\n    localStorage.getItem(testKey)\n    localStorage.removeItem(testKey)\n\n    return true\n  } catch (error) {\n    return false\n  }\n}\n\n/**\n * Checks that accessing a given property on an object\n * by name does not throw an error.\n *\n * This is generally used to avoid issues in environments\n * like `miniflare` where some properties are defined as getters\n * where accessing that property throws directly.\n */\nfunction isPropertyAccessible<Obj extends Record<string, any>>(\n  object: Obj,\n  method: keyof Obj,\n) {\n  try {\n    object[method]\n    return true\n  } catch {\n    return false\n  }\n}\n\nclass CookieStore {\n  private store: Store\n\n  constructor() {\n    this.store = new Map()\n  }\n\n  /**\n   * Sets the given request cookies into the store.\n   * Respects the `request.credentials` policy.\n   */\n  add(request: RequestLike, response: ResponseLike): void {\n    if (\n      isPropertyAccessible(request, 'credentials') &&\n      request.credentials === 'omit'\n    ) {\n      return\n    }\n\n    const requestUrl = new URL(request.url)\n    const responseCookies = response.headers.get('set-cookie')\n\n    if (!responseCookies) {\n      return\n    }\n\n    const now = Date.now()\n    const parsedResponseCookies = parseCookie(responseCookies).map(\n      ({ maxAge, ...cookie }) => ({\n        ...cookie,\n        expires:\n          maxAge === undefined ? cookie.expires : new Date(now + maxAge * 1000),\n        maxAge,\n      }),\n    )\n\n    const prevCookies =\n      this.store.get(requestUrl.origin) || new Map<string, Cookie>()\n\n    parsedResponseCookies.forEach((cookie) => {\n      this.store.set(requestUrl.origin, prevCookies.set(cookie.name, cookie))\n    })\n  }\n\n  /**\n   * Returns cookies relevant to the given request\n   * and its `request.credentials` policy.\n   */\n  get(request: RequestLike): StoreEntry {\n    this.deleteExpiredCookies()\n\n    const requestUrl = new URL(request.url)\n    const originCookies =\n      this.store.get(requestUrl.origin) || new Map<string, Cookie>()\n\n    if (!isPropertyAccessible(request, 'credentials')) {\n      return originCookies\n    }\n\n    switch (request.credentials) {\n      case 'include': {\n        // Support running this method in Node.js.\n        if (typeof document === 'undefined') {\n          return originCookies\n        }\n\n        const documentCookies = parseCookie(document.cookie)\n\n        documentCookies.forEach((cookie) => {\n          originCookies.set(cookie.name, cookie)\n        })\n\n        return originCookies\n      }\n\n      case 'same-origin': {\n        return originCookies\n      }\n\n      default:\n        return new Map()\n    }\n  }\n\n  /**\n   * Returns a collection of all stored cookies.\n   */\n  getAll(): Store {\n    this.deleteExpiredCookies()\n    return this.store\n  }\n\n  /**\n   * Deletes all cookies associated with the given request.\n   */\n  deleteAll(request: RequestLike): void {\n    const requestUrl = new URL(request.url)\n    this.store.delete(requestUrl.origin)\n  }\n\n  /**\n   * Clears the entire cookie store.\n   */\n  clear(): void {\n    this.store.clear()\n  }\n\n  /**\n   * Hydrates the virtual cookie store from the `localStorage` if defined.\n   */\n  hydrate(): void {\n    if (!supportsLocalStorage()) {\n      return\n    }\n\n    const persistedCookies = localStorage.getItem(PERSISTENCY_KEY)\n\n    if (!persistedCookies) {\n      return\n    }\n\n    try {\n      const parsedCookies: [string, [string, CookieString][]][] =\n        JSON.parse(persistedCookies)\n\n      parsedCookies.forEach(([origin, cookies]) => {\n        this.store.set(\n          origin,\n          new Map(\n            cookies.map(([token, { expires, ...cookie }]) => [\n              token,\n              expires === undefined\n                ? cookie\n                : { ...cookie, expires: new Date(expires) },\n            ]),\n          ),\n        )\n      })\n    } catch (error) {\n      console.warn(`\n[virtual-cookie] Failed to parse a stored cookie from the localStorage (key \"${PERSISTENCY_KEY}\").\n\nStored value:\n${localStorage.getItem(PERSISTENCY_KEY)}\n\nThrown exception:\n${error}\n\nInvalid value has been removed from localStorage to prevent subsequent failed parsing attempts.`)\n      localStorage.removeItem(PERSISTENCY_KEY)\n    }\n  }\n\n  /**\n   * Persists the current virtual cookies into the `localStorage` if defined,\n   * so they are available on the next page load.\n   */\n  persist(): void {\n    if (!supportsLocalStorage()) {\n      return\n    }\n\n    const serializedCookies = Array.from(this.store.entries()).map(\n      ([origin, cookies]) => {\n        return [origin, Array.from(cookies.entries())]\n      },\n    )\n\n    localStorage.setItem(PERSISTENCY_KEY, JSON.stringify(serializedCookies))\n  }\n\n  private deleteExpiredCookies() {\n    const now = Date.now()\n\n    this.store.forEach((originCookies, origin) => {\n      originCookies.forEach(({ expires, name }) => {\n        if (expires !== undefined && expires.getTime() <= now) {\n          originCookies.delete(name)\n        }\n      })\n\n      if (originCookies.size === 0) {\n        this.store.delete(origin)\n      }\n    })\n  }\n}\n\nexport const store = new CookieStore()\n","import { store } from '@mswjs/cookies'\n\nexport function readResponseCookies(\n  request: Request,\n  response: Response,\n): void {\n  store.add({ ...request, url: request.url.toString() }, response)\n  store.persist()\n}\n","import { until } from '@open-draft/until'\nimport { Emitter } from 'strict-event-emitter'\nimport { RequestHandler } from '../handlers/RequestHandler'\nimport { LifeCycleEventsMap, SharedOptions } from '../sharedOptions'\nimport { RequiredDeep } from '../typeUtils'\nimport { HandlersExecutionResult, executeHandlers } from './executeHandlers'\nimport { onUnhandledRequest } from './request/onUnhandledRequest'\nimport { readResponseCookies } from './request/readResponseCookies'\n\nexport interface HandleRequestOptions {\n  /**\n   * `resolutionContext` is not part of the general public api\n   * but is exposed to aid in creating extensions like\n   * `@mswjs/http-middleware`.\n   */\n  resolutionContext?: {\n    /**\n     * A base url to use when resolving relative urls.\n     * @note This is primarily used by the `@mswjs/http-middleware`\n     * to resolve relative urls in the context of the running server\n     */\n    baseUrl?: string\n  }\n\n  /**\n   * Transforms a `MockedResponse` instance returned from a handler\n   * to a response instance supported by the lower tooling (i.e. interceptors).\n   */\n  transformResponse?(response: Response): Response\n\n  /**\n   * Invoked whenever a request is performed as-is.\n   */\n  onPassthroughResponse?(request: Request): void\n\n  /**\n   * Invoked when the mocked response is ready to be sent.\n   */\n  onMockedResponse?(\n    response: Response,\n    handler: RequiredDeep<HandlersExecutionResult>,\n  ): void\n}\n\nexport async function handleRequest(\n  request: Request,\n  requestId: string,\n  handlers: Array<RequestHandler>,\n  options: RequiredDeep<SharedOptions>,\n  emitter: Emitter<LifeCycleEventsMap>,\n  handleRequestOptions?: HandleRequestOptions,\n): Promise<Response | undefined> {\n  emitter.emit('request:start', { request, requestId })\n\n  // Perform bypassed requests (i.e. wrapped in \"bypass()\") as-is.\n  if (request.headers.get('x-msw-intention') === 'bypass') {\n    emitter.emit('request:end', { request, requestId })\n    handleRequestOptions?.onPassthroughResponse?.(request)\n    return\n  }\n\n  // Resolve a mocked response from the list of request handlers.\n  const lookupResult = await until(() => {\n    return executeHandlers({\n      request,\n      requestId,\n      handlers,\n      resolutionContext: handleRequestOptions?.resolutionContext,\n    })\n  })\n\n  if (lookupResult.error) {\n    // Allow developers to react to unhandled exceptions in request handlers.\n    emitter.emit('unhandledException', {\n      error: lookupResult.error,\n      request,\n      requestId,\n    })\n    throw lookupResult.error\n  }\n\n  // If the handler lookup returned nothing, no request handler was found\n  // matching this request. Report the request as unhandled.\n  if (!lookupResult.data) {\n    await onUnhandledRequest(request, options.onUnhandledRequest)\n    emitter.emit('request:unhandled', { request, requestId })\n    emitter.emit('request:end', { request, requestId })\n    handleRequestOptions?.onPassthroughResponse?.(request)\n    return\n  }\n\n  const { response } = lookupResult.data\n\n  // When the handled request returned no mocked response, warn the developer,\n  // as it may be an oversight on their part. Perform the request as-is.\n  if (!response) {\n    emitter.emit('request:end', { request, requestId })\n    handleRequestOptions?.onPassthroughResponse?.(request)\n    return\n  }\n\n  // Perform the request as-is when the developer explicitly returned \"req.passthrough()\".\n  // This produces no warning as the request was handled.\n  if (\n    response.status === 302 &&\n    response.headers.get('x-msw-intention') === 'passthrough'\n  ) {\n    emitter.emit('request:end', { request, requestId })\n    handleRequestOptions?.onPassthroughResponse?.(request)\n    return\n  }\n\n  // Store all the received response cookies in the virtual cookie store.\n  readResponseCookies(request, response)\n\n  emitter.emit('request:match', { request, requestId })\n\n  const requiredLookupResult =\n    lookupResult.data as RequiredDeep<HandlersExecutionResult>\n\n  const transformedResponse =\n    handleRequestOptions?.transformResponse?.(response) ||\n    (response as any as Response)\n\n  handleRequestOptions?.onMockedResponse?.(\n    transformedResponse,\n    requiredLookupResult,\n  )\n\n  emitter.emit('request:end', { request, requestId })\n\n  return transformedResponse\n}\n","export function toResponseInit(response: Response): ResponseInit {\n  return {\n    status: response.status,\n    statusText: response.statusText,\n    headers: Object.fromEntries(response.headers.entries()),\n  }\n}\n","/**\n * Determines if the given value is an object.\n */\nexport function isObject(value: any): boolean {\n  return value != null && typeof value === 'object' && !Array.isArray(value)\n}\n","import { isObject } from './isObject'\n\n/**\n * Deeply merges two given objects with the right one\n * having a priority during property assignment.\n */\nexport function mergeRight(\n  left: Record<string, any>,\n  right: Record<string, any>,\n) {\n  return Object.entries(right).reduce(\n    (result, [key, rightValue]) => {\n      const leftValue = result[key]\n\n      if (Array.isArray(leftValue) && Array.isArray(rightValue)) {\n        result[key] = leftValue.concat(rightValue)\n        return result\n      }\n\n      if (isObject(leftValue) && isObject(rightValue)) {\n        result[key] = mergeRight(leftValue, rightValue)\n        return result\n      }\n\n      result[key] = rightValue\n      return result\n    },\n    Object.assign({}, left),\n  )\n}\n","import type { Emitter } from './Emitter'\n\nexport class MemoryLeakError extends Error {\n  constructor(\n    public readonly emitter: Emitter<any>,\n    public readonly type: string | number | symbol,\n    public readonly count: number\n  ) {\n    super(\n      `Possible EventEmitter memory leak detected. ${count} ${type.toString()} listeners added. Use emitter.setMaxListeners() to increase limit`\n    )\n    this.name = 'MaxListenersExceededWarning'\n  }\n}\n","import { MemoryLeakError } from './MemoryLeakError'\n\nexport type EventMap = {\n  [eventName: string]: Array<unknown>\n}\n\nexport type InternalEventNames = 'newListener' | 'removeListener'\n\nexport type InternalListener<Events extends EventMap> = Listener<\n  [eventName: keyof Events, listener: Listener<Array<unknown>>]\n>\n\nexport type Listener<Data extends Array<unknown>> = (...data: Data) => void\n\n/**\n * Node.js-compatible implementation of `EventEmitter`.\n *\n * @example\n * const emitter = new Emitter<{ hello: [string] }>()\n * emitter.on('hello', (name) => console.log(name))\n * emitter.emit('hello', 'John')\n */\nexport class Emitter<Events extends EventMap> {\n  private events: Map<keyof Events, Array<Listener<any>>>\n  private maxListeners: number\n  private hasWarnedAboutPotentialMemoryLeak: boolean\n\n  static defaultMaxListeners = 10\n\n  static listenerCount<Events extends EventMap>(\n    emitter: Emitter<EventMap>,\n    eventName: keyof Events\n  ): number {\n    return emitter.listenerCount<any>(eventName)\n  }\n\n  constructor() {\n    this.events = new Map()\n    this.maxListeners = Emitter.defaultMaxListeners\n    this.hasWarnedAboutPotentialMemoryLeak = false\n  }\n\n  private _emitInternalEvent(\n    internalEventName: InternalEventNames,\n    eventName: keyof Events,\n    listener: Listener<Array<unknown>>\n  ): void {\n    this.emit(\n      internalEventName,\n      // Anything to make TypeScript happy.\n      ...([eventName, listener] as Events['newListener'] &\n        Events['removeListener'])\n    )\n  }\n\n  private _getListeners<EventName extends keyof Events>(\n    eventName: EventName\n  ): Array<Listener<Array<unknown>>> {\n    // Always return a copy of the listeners array\n    // so they are fixed at the time of the \"_getListeners\" call.\n    return Array.prototype.concat.apply([], this.events.get(eventName)) || []\n  }\n\n  private _removeListener<EventName extends keyof Events>(\n    listeners: Array<Listener<Events[EventName]>>,\n    listener: Listener<Events[EventName]>\n  ): Array<Listener<Events[EventName]>> {\n    const index = listeners.indexOf(listener)\n\n    if (index > -1) {\n      listeners.splice(index, 1)\n    }\n\n    return []\n  }\n\n  private _wrapOnceListener<EventName extends keyof Events>(\n    eventName: EventName,\n    listener: Listener<Events[EventName]>\n  ): Listener<Events[EventName]> {\n    const onceListener = (...data: Events[keyof Events]) => {\n      this.removeListener(eventName, onceListener)\n\n      /**\n       * @note Return the result of the original listener.\n       * This way this wrapped preserves listeners that are async.\n       */\n      return listener.apply(this, data)\n    }\n\n    // Inherit the name of the original listener.\n    Object.defineProperty(onceListener, 'name', { value: listener.name })\n\n    return onceListener\n  }\n\n  public setMaxListeners(maxListeners: number): this {\n    this.maxListeners = maxListeners\n    return this\n  }\n\n  /**\n   * Returns the current max listener value for the `Emitter` which is\n   * either set by `emitter.setMaxListeners(n)` or defaults to\n   * `Emitter.defaultMaxListeners`.\n   */\n  public getMaxListeners(): number {\n    return this.maxListeners\n  }\n\n  /**\n   * Returns an array listing the events for which the emitter has registered listeners.\n   * The values in the array will be strings or Symbols.\n   */\n  public eventNames(): Array<keyof Events> {\n    return Array.from(this.events.keys())\n  }\n\n  /**\n   * Synchronously calls each of the listeners registered for the event named `eventName`,\n   * in the order they were registered, passing the supplied arguments to each.\n   * Returns `true` if the event has listeners, `false` otherwise.\n   *\n   * @example\n   * const emitter = new Emitter<{ hello: [string] }>()\n   * emitter.emit('hello', 'John')\n   */\n  public emit<EventName extends keyof Events>(\n    eventName: EventName,\n    ...data: Events[EventName]\n  ): boolean {\n    const listeners = this._getListeners(eventName)\n    listeners.forEach((listener) => {\n      listener.apply(this, data)\n    })\n\n    return listeners.length > 0\n  }\n\n  public addListener(\n    eventName: InternalEventNames,\n    listener: InternalListener<Events>\n  ): this\n  public addListener<EventName extends keyof Events>(\n    eventName: EventName,\n    listener: Listener<Events[EventName]>\n  ): this\n  public addListener(\n    eventName: InternalEventNames | keyof Events,\n    listener: InternalListener<Events> | Listener<Events[any]>\n  ): this {\n    // Emit the `newListener` event before adding the listener.\n    this._emitInternalEvent('newListener', eventName, listener)\n\n    const nextListeners = this._getListeners(eventName).concat(listener)\n    this.events.set(eventName, nextListeners)\n\n    if (\n      this.maxListeners > 0 &&\n      this.listenerCount(eventName) > this.maxListeners &&\n      !this.hasWarnedAboutPotentialMemoryLeak\n    ) {\n      this.hasWarnedAboutPotentialMemoryLeak = true\n\n      const memoryLeakWarning = new MemoryLeakError(\n        this,\n        eventName,\n        this.listenerCount(eventName)\n      )\n      console.warn(memoryLeakWarning)\n    }\n\n    return this\n  }\n\n  public on(\n    eventName: InternalEventNames,\n    listener: InternalListener<Events>\n  ): this\n  public on<EventName extends keyof Events>(\n    eventName: EventName,\n    listener: Listener<Events[EventName]>\n  ): this\n  public on<EventName extends keyof Events>(\n    eventName: 'removeListener' | EventName,\n    listener: Listener<any>\n  ): this {\n    return this.addListener(eventName, listener)\n  }\n\n  public once(\n    eventName: InternalEventNames,\n    listener: InternalListener<Events>\n  ): this\n  public once<EventName extends keyof Events>(\n    eventName: EventName,\n    listener: Listener<Events[EventName]>\n  ): this\n  public once<EventName extends keyof Events>(\n    eventName: InternalEventNames | EventName,\n    listener: Listener<any>\n  ): this {\n    return this.addListener(\n      eventName,\n      this._wrapOnceListener(eventName, listener)\n    )\n  }\n\n  public prependListener(\n    eventName: InternalEventNames,\n    listener: InternalListener<Events>\n  ): this\n  public prependListener<EventName extends keyof Events>(\n    eventName: EventName,\n    listener: Listener<Events[EventName]>\n  ): this\n  public prependListener(\n    eventName: InternalEventNames | keyof Events,\n    listener: Listener<any>\n  ): this {\n    const listeners = this._getListeners(eventName)\n\n    if (listeners.length > 0) {\n      const nextListeners = [listener].concat(listeners)\n      this.events.set(eventName, nextListeners)\n    } else {\n      this.events.set(eventName, listeners.concat(listener))\n    }\n\n    return this\n  }\n\n  public prependOnceListener(\n    eventName: InternalEventNames,\n    listener: InternalListener<Events>\n  ): this\n  public prependOnceListener<EventName extends keyof Events>(\n    eventName: EventName,\n    listener: Listener<Events[EventName]>\n  ): this\n  public prependOnceListener(\n    eventName: InternalEventNames | keyof Events,\n    listener: Listener<any>\n  ): this {\n    return this.prependListener(\n      eventName,\n      this._wrapOnceListener(eventName, listener)\n    )\n  }\n\n  public removeListener(\n    eventName: InternalEventNames,\n    listener: InternalListener<Events>\n  ): this\n  public removeListener<EventName extends keyof Events>(\n    eventName: EventName,\n    listener: Listener<Events[EventName]>\n  ): this\n  public removeListener(\n    eventName: InternalEventNames | keyof Events,\n    listener: Listener<any>\n  ): this {\n    const listeners = this._getListeners(eventName)\n\n    if (listeners.length > 0) {\n      this._removeListener(listeners, listener)\n      this.events.set(eventName, listeners)\n\n      // Emit the `removeListener` event after removing the listener.\n      this._emitInternalEvent('removeListener', eventName, listener)\n    }\n\n    return this\n  }\n\n  public off(\n    eventName: InternalEventNames,\n    listener: InternalListener<Events>\n  ): this\n  public off<EventName extends keyof Events>(\n    eventName: EventName,\n    listener: Listener<Events[EventName]>\n  ): this\n  /**\n   * Alias for `emitter.removeListener()`.\n   *\n   * @example\n   * emitter.off('hello', listener)\n   */\n  public off(\n    eventName: InternalEventNames | keyof Events,\n    listener: Listener<any>\n  ): this {\n    return this.removeListener(eventName, listener)\n  }\n\n  public removeAllListeners(eventName?: InternalEventNames): this\n  public removeAllListeners<EventName extends keyof Events>(\n    eventName?: EventName\n  ): this\n  public removeAllListeners(\n    eventName?: InternalEventNames | keyof Events\n  ): this {\n    if (eventName) {\n      this.events.delete(eventName)\n    } else {\n      this.events.clear()\n    }\n\n    return this\n  }\n\n  public listeners(eventName: InternalEventNames): Array<Listener<any>>\n  public listeners<EventName extends keyof Events>(\n    eventName: EventName\n  ): Array<Listener<Events[EventName]>>\n  /**\n   * Returns a copy of the array of listeners for the event named `eventName`.\n   */\n  public listeners(eventName: InternalEventNames | keyof Events) {\n    return Array.from(this._getListeners(eventName))\n  }\n\n  public listenerCount(eventName: InternalEventNames): number\n  public listenerCount<EventName extends keyof Events>(\n    eventName: EventName\n  ): number\n  /**\n   * Returns the number of listeners listening to the event named `eventName`.\n   */\n  public listenerCount(eventName: InternalEventNames | keyof Events): number {\n    return this._getListeners(eventName).length\n  }\n\n  public rawListeners<EventName extends keyof Events>(\n    eventName: EventName\n  ): Array<Listener<Events[EventName]>> {\n    return this.listeners(eventName)\n  }\n}\n","import { Emitter, EventMap } from 'strict-event-emitter'\n\n/**\n * Pipes all emitted events from one emitter to another.\n */\nexport function pipeEvents<Events extends EventMap>(\n  source: Emitter<Events>,\n  destination: Emitter<Events>,\n): void {\n  const rawEmit: typeof source.emit & { _isPiped?: boolean } = source.emit\n\n  if (rawEmit._isPiped) {\n    return\n  }\n\n  const sourceEmit: typeof source.emit & { _isPiped?: boolean } =\n    function sourceEmit(this: typeof source, event, ...data) {\n      destination.emit(event, ...data)\n      return rawEmit.call(this, event, ...data)\n    }\n\n  sourceEmit._isPiped = true\n\n  source.emit = sourceEmit\n}\n","/**\n * Creates an immutable copy of the given array.\n */\nexport function toReadonlyArray<T>(source: Array<T>): ReadonlyArray<T> {\n  const clone = [...source] as Array<T>\n  Object.freeze(clone)\n  return clone\n}\n","export type DisposableSubscription = () => Promise<void> | void\n\nexport class Disposable {\n  protected subscriptions: Array<DisposableSubscription> = []\n\n  public async dispose() {\n    await Promise.all(this.subscriptions.map((subscription) => subscription()))\n  }\n}\n","import { invariant } from 'outvariant'\nimport { EventMap, Emitter } from 'strict-event-emitter'\nimport {\n  RequestHandler,\n  RequestHandlerDefaultInfo,\n} from './handlers/RequestHandler'\nimport { LifeCycleEventEmitter } from './sharedOptions'\nimport { devUtils } from './utils/internal/devUtils'\nimport { pipeEvents } from './utils/internal/pipeEvents'\nimport { toReadonlyArray } from './utils/internal/toReadonlyArray'\nimport { Disposable } from './utils/internal/Disposable'\n\nexport abstract class HandlersController {\n  abstract prepend(runtimeHandlers: Array<RequestHandler>): void\n  abstract reset(nextHandles: Array<RequestHandler>): void\n  abstract currentHandlers(): Array<RequestHandler>\n}\n\nexport class InMemoryHandlersController implements HandlersController {\n  private handlers: Array<RequestHandler>\n\n  constructor(private initialHandlers: Array<RequestHandler>) {\n    this.handlers = [...initialHandlers]\n  }\n\n  public prepend(runtimeHandles: Array<RequestHandler>): void {\n    this.handlers.unshift(...runtimeHandles)\n  }\n\n  public reset(nextHandlers: Array<RequestHandler>): void {\n    this.handlers =\n      nextHandlers.length > 0 ? [...nextHandlers] : [...this.initialHandlers]\n  }\n\n  public currentHandlers(): Array<RequestHandler> {\n    return this.handlers\n  }\n}\n\n/**\n * Generic class for the mock API setup.\n */\nexport abstract class SetupApi<EventsMap extends EventMap> extends Disposable {\n  protected handlersController: HandlersController\n  protected readonly emitter: Emitter<EventsMap>\n  protected readonly publicEmitter: Emitter<EventsMap>\n\n  public readonly events: LifeCycleEventEmitter<EventsMap>\n\n  constructor(...initialHandlers: Array<RequestHandler>) {\n    super()\n\n    invariant(\n      this.validateHandlers(initialHandlers),\n      devUtils.formatMessage(\n        `Failed to apply given request handlers: invalid input. Did you forget to spread the request handlers Array?`,\n      ),\n    )\n\n    this.handlersController = new InMemoryHandlersController(initialHandlers)\n\n    this.emitter = new Emitter<EventsMap>()\n    this.publicEmitter = new Emitter<EventsMap>()\n    pipeEvents(this.emitter, this.publicEmitter)\n\n    this.events = this.createLifeCycleEvents()\n\n    this.subscriptions.push(() => {\n      this.emitter.removeAllListeners()\n      this.publicEmitter.removeAllListeners()\n    })\n  }\n\n  private validateHandlers(handlers: ReadonlyArray<RequestHandler>): boolean {\n    // Guard against incorrect call signature of the setup API.\n    return handlers.every((handler) => !Array.isArray(handler))\n  }\n\n  public use(...runtimeHandlers: Array<RequestHandler>): void {\n    invariant(\n      this.validateHandlers(runtimeHandlers),\n      devUtils.formatMessage(\n        `Failed to call \"use()\" with the given request handlers: invalid input. Did you forget to spread the array of request handlers?`,\n      ),\n    )\n\n    this.handlersController.prepend(runtimeHandlers)\n  }\n\n  public restoreHandlers(): void {\n    this.handlersController.currentHandlers().forEach((handler) => {\n      handler.isUsed = false\n    })\n  }\n\n  public resetHandlers(...nextHandlers: Array<RequestHandler>): void {\n    this.handlersController.reset(nextHandlers)\n  }\n\n  public listHandlers(): ReadonlyArray<\n    RequestHandler<RequestHandlerDefaultInfo, any, any>\n  > {\n    return toReadonlyArray(this.handlersController.currentHandlers())\n  }\n\n  private createLifeCycleEvents(): LifeCycleEventEmitter<EventsMap> {\n    return {\n      on: (...args: any[]) => {\n        return (this.publicEmitter.on as any)(...args)\n      },\n      removeListener: (...args: any[]) => {\n        return (this.publicEmitter.removeListener as any)(...args)\n      },\n      removeAllListeners: (...args: any[]) => {\n        return this.publicEmitter.removeAllListeners(...args)\n      },\n    }\n  }\n}\n","const POSITIONALS_EXP = /(%?)(%([sdijo]))/g\n\nfunction serializePositional(positional: any, flag: string): any {\n  switch (flag) {\n    // Strings.\n    case 's':\n      return positional\n\n    // Digits.\n    case 'd':\n    case 'i':\n      return Number(positional)\n\n    // JSON.\n    case 'j':\n      return JSON.stringify(positional)\n\n    // Objects.\n    case 'o': {\n      // Preserve stings to prevent extra quotes around them.\n      if (typeof positional === 'string') {\n        return positional\n      }\n\n      const json = JSON.stringify(positional)\n\n      // If the positional isn't serializable, return it as-is.\n      if (json === '{}' || json === '[]' || /^\\[object .+?\\]$/.test(json)) {\n        return positional\n      }\n\n      return json\n    }\n  }\n}\n\nexport function format(message: string, ...positionals: any[]): string {\n  if (positionals.length === 0) {\n    return message\n  }\n\n  let positionalIndex = 0\n  let formattedMessage = message.replace(\n    POSITIONALS_EXP,\n    (match, isEscaped, _, flag) => {\n      const positional = positionals[positionalIndex]\n      const value = serializePositional(positional, flag)\n\n      if (!isEscaped) {\n        positionalIndex++\n        return value\n      }\n\n      return match\n    }\n  )\n\n  // Append unresolved positionals to string as-is.\n  if (positionalIndex < positionals.length) {\n    formattedMessage += ` ${positionals.slice(positionalIndex).join(' ')}`\n  }\n\n  formattedMessage = formattedMessage.replace(/%{2,2}/g, '%')\n\n  return formattedMessage\n}\n","import { format } from './format'\n\nconst STACK_FRAMES_TO_IGNORE = 2\n\n/**\n * Remove the \"outvariant\" package trace from the given error.\n * This scopes down the error stack to the relevant parts\n * when used in other applications.\n */\nfunction cleanErrorStack(error: Error): void {\n  if (!error.stack) {\n    return\n  }\n\n  const nextStack = error.stack.split('\\n')\n  nextStack.splice(1, STACK_FRAMES_TO_IGNORE)\n  error.stack = nextStack.join('\\n')\n}\n\nexport class InvariantError extends Error {\n  name = 'Invariant Violation'\n\n  constructor(public readonly message: string, ...positionals: any[]) {\n    super(message)\n    this.message = format(message, ...positionals)\n    cleanErrorStack(this)\n  }\n}\n\nexport interface CustomErrorConstructor {\n  new (message: string): Error\n}\n\nexport interface CustomErrorFactory {\n  (message: string): Error\n}\n\nexport type CustomError = CustomErrorConstructor | CustomErrorFactory\n\ntype Invariant = {\n  (\n    predicate: unknown,\n    message: string,\n    ...positionals: any[]\n  ): asserts predicate\n\n  as(\n    ErrorConstructor: CustomError,\n    predicate: unknown,\n    message: string,\n    ...positionals: unknown[]\n  ): asserts predicate\n}\n\nexport const invariant: Invariant = (\n  predicate,\n  message,\n  ...positionals\n): asserts predicate => {\n  if (!predicate) {\n    throw new InvariantError(message, ...positionals)\n  }\n}\n\ninvariant.as = (ErrorConstructor, predicate, message, ...positionals) => {\n  if (!predicate) {\n    const formatMessage = positionals.length === 0 ? message : format(message, positionals);\n    let error: Error;\n\n    try {\n      error = Reflect.construct(ErrorConstructor as CustomErrorConstructor, [formatMessage]);\n    } catch(err) {\n      error = (ErrorConstructor as CustomErrorFactory)(formatMessage);\n    }\n\n    throw error\n  }\n}\n","/**\n * Determines if the current process is a Node.js process.\n */\nexport function isNodeProcess(): boolean {\n  if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {\n    return true\n  }\n\n  if (typeof process !== 'undefined') {\n    // Electron (https://www.electronjs.org/docs/latest/api/process#processtype-readonly)\n    const type = (process as any).type\n    if (type === 'renderer' || type === 'worker') {\n      return false\n    }\n\n\n    return !!(\n      process.versions &&\n      process.versions.node\n    )\n  }\n\n  return false\n}\n","export type AsyncTuple<\n  ErrorType extends any = Error,\n  DataType extends any = unknown,\n> =\n  | {\n      error: ErrorType\n      data: null\n    }\n  | { error: null; data: DataType }\n\n/**\n * Gracefully handles a given Promise factory.\n * @example\n * const { error, data } = await until(() => asyncAction())\n */\nexport const until = async <\n  ErrorType extends any = Error,\n  DataType extends any = unknown,\n>(\n  promise: () => Promise<DataType>,\n): Promise<AsyncTuple<ErrorType, DataType>> => {\n  try {\n    const data = await promise().catch((error) => {\n      throw error\n    })\n    return { error: null, data }\n  } catch (error) {\n    return { error, data: null }\n  }\n}\n","/**\n * Returns an absolute Service Worker URL based on the given\n * relative URL (known during the registration).\n */\nexport function getAbsoluteWorkerUrl(workerUrl: string): string {\n  return new URL(workerUrl, location.href).href\n}\n","import { FindWorker } from '../../glossary'\n\n/**\n * Attempts to resolve a Service Worker instance from a given registration,\n * regardless of its state (active, installing, waiting).\n */\nexport function getWorkerByRegistration(\n  registration: ServiceWorkerRegistration,\n  absoluteWorkerUrl: string,\n  findWorker: FindWorker,\n): ServiceWorker | null {\n  const allStates = [\n    registration.active,\n    registration.installing,\n    registration.waiting,\n  ]\n  const relevantStates = allStates.filter((state): state is ServiceWorker => {\n    return state != null\n  })\n  const worker = relevantStates.find((worker) => {\n    return findWorker(worker.scriptURL, absoluteWorkerUrl)\n  })\n\n  return worker || null\n}\n","import { until } from '@open-draft/until'\nimport { devUtils } from '~/core/utils/internal/devUtils'\nimport { getAbsoluteWorkerUrl } from '../../../utils/getAbsoluteWorkerUrl'\nimport { getWorkerByRegistration } from './getWorkerByRegistration'\nimport { ServiceWorkerInstanceTuple, FindWorker } from '../../glossary'\n\n/**\n * Returns an active Service Worker instance.\n * When not found, registers a new Service Worker.\n */\nexport const getWorkerInstance = async (\n  url: string,\n  options: RegistrationOptions = {},\n  findWorker: FindWorker,\n): Promise<ServiceWorkerInstanceTuple> => {\n  // Resolve the absolute Service Worker URL.\n  const absoluteWorkerUrl = getAbsoluteWorkerUrl(url)\n\n  const mockRegistrations = await navigator.serviceWorker\n    .getRegistrations()\n    .then((registrations) =>\n      registrations.filter((registration) =>\n        getWorkerByRegistration(registration, absoluteWorkerUrl, findWorker),\n      ),\n    )\n  if (!navigator.serviceWorker.controller && mockRegistrations.length > 0) {\n    // Reload the page when it has associated workers, but no active controller.\n    // The absence of a controller can mean either:\n    // - page has no Service Worker associated with it\n    // - page has been hard-reloaded and its workers won't be used until the next reload.\n    // Since we've checked that there are registrations associated with this page,\n    // at this point we are sure it's hard reload that falls into this clause.\n    location.reload()\n  }\n\n  const [existingRegistration] = mockRegistrations\n\n  if (existingRegistration) {\n    // When the Service Worker is registered, update it and return the reference.\n    return existingRegistration.update().then(() => {\n      return [\n        getWorkerByRegistration(\n          existingRegistration,\n          absoluteWorkerUrl,\n          findWorker,\n        ),\n        existingRegistration,\n      ]\n    })\n  }\n\n  // When the Service Worker wasn't found, register it anew and return the reference.\n  const registrationResult = await until<Error, ServiceWorkerInstanceTuple>(\n    async () => {\n      const registration = await navigator.serviceWorker.register(url, options)\n      return [\n        // Compare existing worker registration by its worker URL,\n        // to prevent irrelevant workers to resolve here (such as Codesandbox worker).\n        getWorkerByRegistration(registration, absoluteWorkerUrl, findWorker),\n        registration,\n      ]\n    },\n  )\n\n  // Handle Service Worker registration errors.\n  if (registrationResult.error) {\n    const isWorkerMissing = registrationResult.error.message.includes('(404)')\n\n    // Produce a custom error message when given a non-existing Service Worker url.\n    // Suggest developers to check their setup.\n    if (isWorkerMissing) {\n      const scopeUrl = new URL(options?.scope || '/', location.href)\n\n      throw new Error(\n        devUtils.formatMessage(`\\\nFailed to register a Service Worker for scope ('${scopeUrl.href}') with script ('${absoluteWorkerUrl}'): Service Worker script does not exist at the given path.\n\nDid you forget to run \"npx msw init <PUBLIC_DIR>\"?\n\nLearn more about creating the Service Worker script: https://mswjs.io/docs/cli/init`),\n      )\n    }\n\n    // Fallback error message for any other registration errors.\n    throw new Error(\n      devUtils.formatMessage(\n        'Failed to register the Service Worker:\\n\\n%s',\n        registrationResult.error.message,\n      ),\n    )\n  }\n\n  return registrationResult.data\n}\n","import { devUtils } from '~/core/utils/internal/devUtils'\n\nexport interface PrintStartMessageArgs {\n  quiet?: boolean\n  message?: string\n  workerUrl?: string\n  workerScope?: string\n}\n\n/**\n * Prints a worker activation message in the browser's console.\n */\nexport function printStartMessage(args: PrintStartMessageArgs = {}) {\n  if (args.quiet) {\n    return\n  }\n\n  const message = args.message || 'Mocking enabled.'\n\n  console.groupCollapsed(\n    `%c${devUtils.formatMessage(message)}`,\n    'color:orangered;font-weight:bold;',\n  )\n  console.log(\n    '%cDocumentation: %chttps://mswjs.io/docs',\n    'font-weight:bold',\n    'font-weight:normal',\n  )\n  console.log('Found an issue? https://github.com/mswjs/msw/issues')\n\n  if (args.workerUrl) {\n    console.log('Worker script URL:', args.workerUrl)\n  }\n\n  if (args.workerScope) {\n    console.log('Worker scope:', args.workerScope)\n  }\n\n  console.groupEnd()\n}\n","import { devUtils } from '~/core/utils/internal/devUtils'\nimport { StartOptions, SetupWorkerInternalContext } from '../../glossary'\nimport { printStartMessage } from './printStartMessage'\n\n/**\n * Signals the worker to enable the interception of requests.\n */\nexport async function enableMocking(\n  context: SetupWorkerInternalContext,\n  options: StartOptions,\n) {\n  context.workerChannel.send('MOCK_ACTIVATE')\n  await context.events.once('MOCKING_ENABLED')\n\n  // Warn the developer on multiple \"worker.start()\" calls.\n  // While this will not affect the worker in any way,\n  // it likely indicates an issue with the developer's code.\n  if (context.isMockingEnabled) {\n    devUtils.warn(\n      `Found a redundant \"worker.start()\" call. Note that starting the worker while mocking is already enabled will have no effect. Consider removing this \"worker.start()\" call.`,\n    )\n    return\n  }\n\n  context.isMockingEnabled = true\n\n  printStartMessage({\n    quiet: options.quiet,\n    workerScope: context.registration?.scope,\n    workerUrl: context.worker?.scriptURL,\n  })\n}\n","import {\n  StringifiedResponse,\n  ServiceWorkerIncomingEventsMap,\n} from '../../glossary'\n\nexport interface ServiceWorkerMessage<\n  EventType extends keyof ServiceWorkerIncomingEventsMap,\n  EventPayload,\n> {\n  type: EventType\n  payload: EventPayload\n}\n\ninterface WorkerChannelEventsMap {\n  MOCK_RESPONSE: [\n    data: StringifiedResponse,\n    transfer?: [ReadableStream<Uint8Array>],\n  ]\n  PASSTHROUGH: []\n}\n\nexport class WorkerChannel {\n  constructor(private readonly port: MessagePort) {}\n\n  public postMessage<Event extends keyof WorkerChannelEventsMap>(\n    event: Event,\n    ...rest: WorkerChannelEventsMap[Event]\n  ): void {\n    const [data, transfer] = rest\n    this.port.postMessage({ type: event, data }, { transfer })\n  }\n}\n","import type { ServiceWorkerIncomingRequest } from '../setupWorker/glossary'\n\ntype Input = Pick<ServiceWorkerIncomingRequest, 'method' | 'body'>\n\n/**\n * Ensures that an empty GET request body is always represented as `undefined`.\n */\nexport function pruneGetRequestBody(\n  request: Input,\n): ServiceWorkerIncomingRequest['body'] {\n  // Force HEAD/GET request body to always be empty.\n  // The worker reads any request's body as ArrayBuffer,\n  // and you cannot re-construct a GET/HEAD Request\n  // with an ArrayBuffer, even if empty. Also note that\n  // \"request.body\" is always undefined in the worker.\n  if (['HEAD', 'GET'].includes(request.method)) {\n    return undefined\n  }\n\n  return request.body\n}\n","import { pruneGetRequestBody } from './pruneGetRequestBody'\nimport type { ServiceWorkerIncomingRequest } from '../setupWorker/glossary'\n\n/**\n * Converts a given request received from the Service Worker\n * into a Fetch `Request` instance.\n */\nexport function parseWorkerRequest(\n  incomingRequest: ServiceWorkerIncomingRequest,\n): Request {\n  return new Request(incomingRequest.url, {\n    ...incomingRequest,\n    body: pruneGetRequestBody(incomingRequest),\n  })\n}\n","import {\n  StartOptions,\n  SetupWorkerInternalContext,\n  ServiceWorkerIncomingEventsMap,\n} from '../glossary'\nimport {\n  ServiceWorkerMessage,\n  WorkerChannel,\n} from './utils/createMessageChannel'\nimport { parseWorkerRequest } from '../../utils/parseWorkerRequest'\nimport { RequestHandler } from '~/core/handlers/RequestHandler'\nimport { handleRequest } from '~/core/utils/handleRequest'\nimport { RequiredDeep } from '~/core/typeUtils'\nimport { devUtils } from '~/core/utils/internal/devUtils'\nimport { toResponseInit } from '~/core/utils/toResponseInit'\n\nexport const createRequestListener = (\n  context: SetupWorkerInternalContext,\n  options: RequiredDeep<StartOptions>,\n) => {\n  return async (\n    event: MessageEvent,\n    message: ServiceWorkerMessage<\n      'REQUEST',\n      ServiceWorkerIncomingEventsMap['REQUEST']\n    >,\n  ) => {\n    const messageChannel = new WorkerChannel(event.ports[0])\n\n    const requestId = message.payload.id\n    const request = parseWorkerRequest(message.payload)\n    const requestCloneForLogs = request.clone()\n\n    // Make this the first requets clone before the\n    // request resolution pipeline even starts.\n    // Store the clone in cache so the first matching\n    // request handler would skip the cloning phase.\n    const requestClone = request.clone()\n    RequestHandler.cache.set(request, requestClone)\n    context.requests.set(requestId, requestClone)\n\n    try {\n      await handleRequest(\n        request,\n        requestId,\n        context.getRequestHandlers(),\n        options,\n        context.emitter,\n        {\n          onPassthroughResponse() {\n            messageChannel.postMessage('PASSTHROUGH')\n          },\n          async onMockedResponse(response, { handler, parsedResult }) {\n            // Clone the mocked response so its body could be read\n            // to buffer to be sent to the worker and also in the\n            // \".log()\" method of the request handler.\n            const responseClone = response.clone()\n            const responseCloneForLogs = response.clone()\n            const responseInit = toResponseInit(response)\n\n            /**\n             * @note Safari doesn't support transferring a \"ReadableStream\".\n             * Check that the browser supports that before sending it to the worker.\n             */\n            if (context.supports.readableStreamTransfer) {\n              const responseStreamOrNull = response.body\n\n              messageChannel.postMessage(\n                'MOCK_RESPONSE',\n                {\n                  ...responseInit,\n                  body: responseStreamOrNull,\n                },\n                responseStreamOrNull ? [responseStreamOrNull] : undefined,\n              )\n            } else {\n              /**\n               * @note If we are here, this means the current environment doesn't\n               * support \"ReadableStream\" as transferable. In that case,\n               * attempt to read the non-empty response body as ArrayBuffer, if it's not empty.\n               * @see https://github.com/mswjs/msw/issues/1827\n               */\n              const responseBufferOrNull =\n                response.body === null\n                  ? null\n                  : await responseClone.arrayBuffer()\n\n              messageChannel.postMessage('MOCK_RESPONSE', {\n                ...responseInit,\n                body: responseBufferOrNull,\n              })\n            }\n\n            if (!options.quiet) {\n              context.emitter.once('response:mocked', () => {\n                handler.log({\n                  request: requestCloneForLogs,\n                  response: responseCloneForLogs,\n                  parsedResult,\n                })\n              })\n            }\n          },\n        },\n      )\n    } catch (error) {\n      if (error instanceof Error) {\n        devUtils.error(\n          `Uncaught exception in the request handler for \"%s %s\":\n\n%s\n\nThis exception has been gracefully handled as a 500 response, however, it's strongly recommended to resolve this error, as it indicates a mistake in your code. If you wish to mock an error response, please see this guide: https://mswjs.io/docs/recipes/mocking-error-responses`,\n          request.method,\n          request.url,\n          error.stack ?? error,\n        )\n\n        // Treat all other exceptions in a request handler as unintended,\n        // alerting that there is a problem that needs fixing.\n        messageChannel.postMessage('MOCK_RESPONSE', {\n          status: 500,\n          statusText: 'Request Handler Error',\n          headers: {\n            'Content-Type': 'application/json',\n          },\n          body: JSON.stringify({\n            name: error.name,\n            message: error.message,\n            stack: error.stack,\n          }),\n        })\n      }\n    }\n  }\n}\n","import { devUtils } from '~/core/utils/internal/devUtils'\nimport type { SetupWorkerInternalContext } from '../setupWorker/glossary'\n\n/**\n * Check whether the registered Service Worker has been\n * generated by the installed version of the library.\n * Prints a warning message if the worker scripts mismatch.\n */\nexport async function checkWorkerIntegrity(\n  context: SetupWorkerInternalContext,\n): Promise<void> {\n  // Request the integrity checksum from the registered worker.\n  context.workerChannel.send('INTEGRITY_CHECK_REQUEST')\n\n  const { payload } = await context.events.once('INTEGRITY_CHECK_RESPONSE')\n\n  // Compare the response from the Service Worker and the\n  // global variable set during the build.\n\n  // The integrity is validated based on the worker script's checksum\n  // that's derived from its minified content during the build.\n  // The \"SERVICE_WORKER_CHECKSUM\" global variable is injected by the build.\n  if (payload.checksum !== SERVICE_WORKER_CHECKSUM) {\n    devUtils.warn(\n      `The currently registered Service Worker has been generated by a different version of MSW (${payload.packageVersion}) and may not be fully compatible with the installed version.\n\nIt's recommended you update your worker script by running this command:\n\n  \\u2022 npx msw init <PUBLIC_DIR>\n\nYou can also automate this process and make the worker script update automatically upon the library installations. Read more: https://mswjs.io/docs/cli/init.`,\n    )\n  }\n}\n","const encoder = new TextEncoder()\n\nexport function encodeBuffer(text: string): Uint8Array {\n  return encoder.encode(text)\n}\n\nexport function decodeBuffer(buffer: ArrayBuffer, 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 {\n  return array.buffer.slice(\n    array.byteOffset,\n    array.byteOffset + array.byteLength\n  )\n}\n","/**\n * Response status codes for responses that cannot have body.\n * @see https://fetch.spec.whatwg.org/#statuses\n */\nexport const RESPONSE_STATUS_CODES_WITHOUT_BODY = new Set([\n  101, 103, 204, 205, 304,\n])\n\n/**\n * Returns a boolean indicating whether the given response status\n * code represents a response that cannot have a body.\n */\nexport function isResponseWithoutBody(status: number): boolean {\n  return RESPONSE_STATUS_CODES_WITHOUT_BODY.has(status)\n}\n","import type { InteractiveRequest } from './utils/toInteractiveRequest'\n\nexport const IS_PATCHED_MODULE: unique symbol = Symbol('isPatchedModule')\n\nexport type RequestCredentials = 'omit' | 'include' | 'same-origin'\n\nexport type HttpRequestEventMap = {\n  request: [\n    args: {\n      request: InteractiveRequest\n      requestId: string\n    }\n  ]\n  response: [\n    args: {\n      response: Response\n      isMockedResponse: boolean\n      request: Request\n      requestId: string\n    }\n  ]\n}\n","var __defProp = Object.defineProperty;\nvar __export = (target, all) => {\n  for (var name in all)\n    __defProp(target, name, { get: all[name], enumerable: true });\n};\n\n// src/index.ts\nimport { isNodeProcess } from \"is-node-process\";\nimport { format } from \"outvariant\";\n\n// src/colors.ts\nvar colors_exports = {};\n__export(colors_exports, {\n  blue: () => blue,\n  gray: () => gray,\n  green: () => green,\n  red: () => red,\n  yellow: () => yellow\n});\nfunction yellow(text) {\n  return `\\x1B[33m${text}\\x1B[0m`;\n}\nfunction blue(text) {\n  return `\\x1B[34m${text}\\x1B[0m`;\n}\nfunction gray(text) {\n  return `\\x1B[90m${text}\\x1B[0m`;\n}\nfunction red(text) {\n  return `\\x1B[31m${text}\\x1B[0m`;\n}\nfunction green(text) {\n  return `\\x1B[32m${text}\\x1B[0m`;\n}\n\n// src/index.ts\nvar IS_NODE = isNodeProcess();\nvar Logger = class {\n  constructor(name) {\n    this.name = name;\n    this.prefix = `[${this.name}]`;\n    const LOGGER_NAME = getVariable(\"DEBUG\");\n    const LOGGER_LEVEL = getVariable(\"LOG_LEVEL\");\n    const isLoggingEnabled = LOGGER_NAME === \"1\" || LOGGER_NAME === \"true\" || typeof LOGGER_NAME !== \"undefined\" && this.name.startsWith(LOGGER_NAME);\n    if (isLoggingEnabled) {\n      this.debug = isDefinedAndNotEquals(LOGGER_LEVEL, \"debug\") ? noop : this.debug;\n      this.info = isDefinedAndNotEquals(LOGGER_LEVEL, \"info\") ? noop : this.info;\n      this.success = isDefinedAndNotEquals(LOGGER_LEVEL, \"success\") ? noop : this.success;\n      this.warning = isDefinedAndNotEquals(LOGGER_LEVEL, \"warning\") ? noop : this.warning;\n      this.error = isDefinedAndNotEquals(LOGGER_LEVEL, \"error\") ? noop : this.error;\n    } else {\n      this.info = noop;\n      this.success = noop;\n      this.warning = noop;\n      this.error = noop;\n      this.only = noop;\n    }\n  }\n  prefix;\n  extend(domain) {\n    return new Logger(`${this.name}:${domain}`);\n  }\n  /**\n   * Print a debug message.\n   * @example\n   * logger.debug('no duplicates found, creating a document...')\n   */\n  debug(message, ...positionals) {\n    this.logEntry({\n      level: \"debug\",\n      message: gray(message),\n      positionals,\n      prefix: this.prefix,\n      colors: {\n        prefix: \"gray\"\n      }\n    });\n  }\n  /**\n   * Print an info message.\n   * @example\n   * logger.info('start parsing...')\n   */\n  info(message, ...positionals) {\n    this.logEntry({\n      level: \"info\",\n      message,\n      positionals,\n      prefix: this.prefix,\n      colors: {\n        prefix: \"blue\"\n      }\n    });\n    const performance2 = new PerformanceEntry();\n    return (message2, ...positionals2) => {\n      performance2.measure();\n      this.logEntry({\n        level: \"info\",\n        message: `${message2} ${gray(`${performance2.deltaTime}ms`)}`,\n        positionals: positionals2,\n        prefix: this.prefix,\n        colors: {\n          prefix: \"blue\"\n        }\n      });\n    };\n  }\n  /**\n   * Print a success message.\n   * @example\n   * logger.success('successfully created document')\n   */\n  success(message, ...positionals) {\n    this.logEntry({\n      level: \"info\",\n      message,\n      positionals,\n      prefix: `\\u2714 ${this.prefix}`,\n      colors: {\n        timestamp: \"green\",\n        prefix: \"green\"\n      }\n    });\n  }\n  /**\n   * Print a warning.\n   * @example\n   * logger.warning('found legacy document format')\n   */\n  warning(message, ...positionals) {\n    this.logEntry({\n      level: \"warning\",\n      message,\n      positionals,\n      prefix: `\\u26A0 ${this.prefix}`,\n      colors: {\n        timestamp: \"yellow\",\n        prefix: \"yellow\"\n      }\n    });\n  }\n  /**\n   * Print an error message.\n   * @example\n   * logger.error('something went wrong')\n   */\n  error(message, ...positionals) {\n    this.logEntry({\n      level: \"error\",\n      message,\n      positionals,\n      prefix: `\\u2716 ${this.prefix}`,\n      colors: {\n        timestamp: \"red\",\n        prefix: \"red\"\n      }\n    });\n  }\n  /**\n   * Execute the given callback only when the logging is enabled.\n   * This is skipped in its entirety and has no runtime cost otherwise.\n   * This executes regardless of the log level.\n   * @example\n   * logger.only(() => {\n   *   logger.info('additional info')\n   * })\n   */\n  only(callback) {\n    callback();\n  }\n  createEntry(level, message) {\n    return {\n      timestamp: /* @__PURE__ */ new Date(),\n      level,\n      message\n    };\n  }\n  logEntry(args) {\n    const {\n      level,\n      message,\n      prefix,\n      colors: customColors,\n      positionals = []\n    } = args;\n    const entry = this.createEntry(level, message);\n    const timestampColor = customColors?.timestamp || \"gray\";\n    const prefixColor = customColors?.prefix || \"gray\";\n    const colorize = {\n      timestamp: colors_exports[timestampColor],\n      prefix: colors_exports[prefixColor]\n    };\n    const write = this.getWriter(level);\n    write(\n      [colorize.timestamp(this.formatTimestamp(entry.timestamp))].concat(prefix != null ? colorize.prefix(prefix) : []).concat(serializeInput(message)).join(\" \"),\n      ...positionals.map(serializeInput)\n    );\n  }\n  formatTimestamp(timestamp) {\n    return `${timestamp.toLocaleTimeString(\n      \"en-GB\"\n    )}:${timestamp.getMilliseconds()}`;\n  }\n  getWriter(level) {\n    switch (level) {\n      case \"debug\":\n      case \"success\":\n      case \"info\": {\n        return log;\n      }\n      case \"warning\": {\n        return warn;\n      }\n      case \"error\": {\n        return error;\n      }\n    }\n  }\n};\nvar PerformanceEntry = class {\n  startTime;\n  endTime;\n  deltaTime;\n  constructor() {\n    this.startTime = performance.now();\n  }\n  measure() {\n    this.endTime = performance.now();\n    const deltaTime = this.endTime - this.startTime;\n    this.deltaTime = deltaTime.toFixed(2);\n  }\n};\nvar noop = () => void 0;\nfunction log(message, ...positionals) {\n  if (IS_NODE) {\n    process.stdout.write(format(message, ...positionals) + \"\\n\");\n    return;\n  }\n  console.log(message, ...positionals);\n}\nfunction warn(message, ...positionals) {\n  if (IS_NODE) {\n    process.stderr.write(format(message, ...positionals) + \"\\n\");\n    return;\n  }\n  console.warn(message, ...positionals);\n}\nfunction error(message, ...positionals) {\n  if (IS_NODE) {\n    process.stderr.write(format(message, ...positionals) + \"\\n\");\n    return;\n  }\n  console.error(message, ...positionals);\n}\nfunction getVariable(variableName) {\n  if (IS_NODE) {\n    return process.env[variableName];\n  }\n  return globalThis[variableName]?.toString();\n}\nfunction isDefinedAndNotEquals(value, expected) {\n  return value !== void 0 && value !== expected;\n}\nfunction serializeInput(message) {\n  if (typeof message === \"undefined\") {\n    return \"undefined\";\n  }\n  if (message === null) {\n    return \"null\";\n  }\n  if (typeof message === \"string\") {\n    return message;\n  }\n  if (typeof message === \"object\") {\n    return JSON.stringify(message);\n  }\n  return message.toString();\n}\nexport {\n  Logger\n};\n","import type { Emitter } from './Emitter'\n\nexport class MemoryLeakError extends Error {\n  constructor(\n    public readonly emitter: Emitter<any>,\n    public readonly type: string | number | symbol,\n    public readonly count: number\n  ) {\n    super(\n      `Possible EventEmitter memory leak detected. ${count} ${type.toString()} listeners added. Use emitter.setMaxListeners() to increase limit`\n    )\n    this.name = 'MaxListenersExceededWarning'\n  }\n}\n","import { MemoryLeakError } from './MemoryLeakError'\n\nexport type EventMap = {\n  [eventName: string]: Array<unknown>\n}\n\nexport type InternalEventNames = 'newListener' | 'removeListener'\n\nexport type InternalListener<Events extends EventMap> = Listener<\n  [eventName: keyof Events, listener: Listener<Array<unknown>>]\n>\n\nexport type Listener<Data extends Array<unknown>> = (...data: Data) => void\n\n/**\n * Node.js-compatible implementation of `EventEmitter`.\n *\n * @example\n * const emitter = new Emitter<{ hello: [string] }>()\n * emitter.on('hello', (name) => console.log(name))\n * emitter.emit('hello', 'John')\n */\nexport class Emitter<Events extends EventMap> {\n  private events: Map<keyof Events, Array<Listener<any>>>\n  private maxListeners: number\n  private hasWarnedAboutPotentialMemoryLeak: boolean\n\n  static defaultMaxListeners = 10\n\n  static listenerCount<Events extends EventMap>(\n    emitter: Emitter<EventMap>,\n    eventName: keyof Events\n  ): number {\n    return emitter.listenerCount<any>(eventName)\n  }\n\n  constructor() {\n    this.events = new Map()\n    this.maxListeners = Emitter.defaultMaxListeners\n    this.hasWarnedAboutPotentialMemoryLeak = false\n  }\n\n  private _emitInternalEvent(\n    internalEventName: InternalEventNames,\n    eventName: keyof Events,\n    listener: Listener<Array<unknown>>\n  ): void {\n    this.emit(\n      internalEventName,\n      // Anything to make TypeScript happy.\n      ...([eventName, listener] as Events['newListener'] &\n        Events['removeListener'])\n    )\n  }\n\n  private _getListeners<EventName extends keyof Events>(\n    eventName: EventName\n  ): Array<Listener<Array<unknown>>> {\n    // Always return a copy of the listeners array\n    // so they are fixed at the time of the \"_getListeners\" call.\n    return Array.prototype.concat.apply([], this.events.get(eventName)) || []\n  }\n\n  private _removeListener<EventName extends keyof Events>(\n    listeners: Array<Listener<Events[EventName]>>,\n    listener: Listener<Events[EventName]>\n  ): Array<Listener<Events[EventName]>> {\n    const index = listeners.indexOf(listener)\n\n    if (index > -1) {\n      listeners.splice(index, 1)\n    }\n\n    return []\n  }\n\n  private _wrapOnceListener<EventName extends keyof Events>(\n    eventName: EventName,\n    listener: Listener<Events[EventName]>\n  ): Listener<Events[EventName]> {\n    const onceListener = (...data: Events[keyof Events]) => {\n      this.removeListener(eventName, onceListener)\n\n      /**\n       * @note Return the result of the original listener.\n       * This way this wrapped preserves listeners that are async.\n       */\n      return listener.apply(this, data)\n    }\n\n    // Inherit the name of the original listener.\n    Object.defineProperty(onceListener, 'name', { value: listener.name })\n\n    return onceListener\n  }\n\n  public setMaxListeners(maxListeners: number): this {\n    this.maxListeners = maxListeners\n    return this\n  }\n\n  /**\n   * Returns the current max listener value for the `Emitter` which is\n   * either set by `emitter.setMaxListeners(n)` or defaults to\n   * `Emitter.defaultMaxListeners`.\n   */\n  public getMaxListeners(): number {\n    return this.maxListeners\n  }\n\n  /**\n   * Returns an array listing the events for which the emitter has registered listeners.\n   * The values in the array will be strings or Symbols.\n   */\n  public eventNames(): Array<keyof Events> {\n    return Array.from(this.events.keys())\n  }\n\n  /**\n   * Synchronously calls each of the listeners registered for the event named `eventName`,\n   * in the order they were registered, passing the supplied arguments to each.\n   * Returns `true` if the event has listeners, `false` otherwise.\n   *\n   * @example\n   * const emitter = new Emitter<{ hello: [string] }>()\n   * emitter.emit('hello', 'John')\n   */\n  public emit<EventName extends keyof Events>(\n    eventName: EventName,\n    ...data: Events[EventName]\n  ): boolean {\n    const listeners = this._getListeners(eventName)\n    listeners.forEach((listener) => {\n      listener.apply(this, data)\n    })\n\n    return listeners.length > 0\n  }\n\n  public addListener(\n    eventName: InternalEventNames,\n    listener: InternalListener<Events>\n  ): this\n  public addListener<EventName extends keyof Events>(\n    eventName: EventName,\n    listener: Listener<Events[EventName]>\n  ): this\n  public addListener(\n    eventName: InternalEventNames | keyof Events,\n    listener: InternalListener<Events> | Listener<Events[any]>\n  ): this {\n    // Emit the `newListener` event before adding the listener.\n    this._emitInternalEvent('newListener', eventName, listener)\n\n    const nextListeners = this._getListeners(eventName).concat(listener)\n    this.events.set(eventName, nextListeners)\n\n    if (\n      this.maxListeners > 0 &&\n      this.listenerCount(eventName) > this.maxListeners &&\n      !this.hasWarnedAboutPotentialMemoryLeak\n    ) {\n      this.hasWarnedAboutPotentialMemoryLeak = true\n\n      const memoryLeakWarning = new MemoryLeakError(\n        this,\n        eventName,\n        this.listenerCount(eventName)\n      )\n      console.warn(memoryLeakWarning)\n    }\n\n    return this\n  }\n\n  public on(\n    eventName: InternalEventNames,\n    listener: InternalListener<Events>\n  ): this\n  public on<EventName extends keyof Events>(\n    eventName: EventName,\n    listener: Listener<Events[EventName]>\n  ): this\n  public on<EventName extends keyof Events>(\n    eventName: 'removeListener' | EventName,\n    listener: Listener<any>\n  ): this {\n    return this.addListener(eventName, listener)\n  }\n\n  public once(\n    eventName: InternalEventNames,\n    listener: InternalListener<Events>\n  ): this\n  public once<EventName extends keyof Events>(\n    eventName: EventName,\n    listener: Listener<Events[EventName]>\n  ): this\n  public once<EventName extends keyof Events>(\n    eventName: InternalEventNames | EventName,\n    listener: Listener<any>\n  ): this {\n    return this.addListener(\n      eventName,\n      this._wrapOnceListener(eventName, listener)\n    )\n  }\n\n  public prependListener(\n    eventName: InternalEventNames,\n    listener: InternalListener<Events>\n  ): this\n  public prependListener<EventName extends keyof Events>(\n    eventName: EventName,\n    listener: Listener<Events[EventName]>\n  ): this\n  public prependListener(\n    eventName: InternalEventNames | keyof Events,\n    listener: Listener<any>\n  ): this {\n    const listeners = this._getListeners(eventName)\n\n    if (listeners.length > 0) {\n      const nextListeners = [listener].concat(listeners)\n      this.events.set(eventName, nextListeners)\n    } else {\n      this.events.set(eventName, listeners.concat(listener))\n    }\n\n    return this\n  }\n\n  public prependOnceListener(\n    eventName: InternalEventNames,\n    listener: InternalListener<Events>\n  ): this\n  public prependOnceListener<EventName extends keyof Events>(\n    eventName: EventName,\n    listener: Listener<Events[EventName]>\n  ): this\n  public prependOnceListener(\n    eventName: InternalEventNames | keyof Events,\n    listener: Listener<any>\n  ): this {\n    return this.prependListener(\n      eventName,\n      this._wrapOnceListener(eventName, listener)\n    )\n  }\n\n  public removeListener(\n    eventName: InternalEventNames,\n    listener: InternalListener<Events>\n  ): this\n  public removeListener<EventName extends keyof Events>(\n    eventName: EventName,\n    listener: Listener<Events[EventName]>\n  ): this\n  public removeListener(\n    eventName: InternalEventNames | keyof Events,\n    listener: Listener<any>\n  ): this {\n    const listeners = this._getListeners(eventName)\n\n    if (listeners.length > 0) {\n      this._removeListener(listeners, listener)\n      this.events.set(eventName, listeners)\n\n      // Emit the `removeListener` event after removing the listener.\n      this._emitInternalEvent('removeListener', eventName, listener)\n    }\n\n    return this\n  }\n\n  public off(\n    eventName: InternalEventNames,\n    listener: InternalListener<Events>\n  ): this\n  public off<EventName extends keyof Events>(\n    eventName: EventName,\n    listener: Listener<Events[EventName]>\n  ): this\n  /**\n   * Alias for `emitter.removeListener()`.\n   *\n   * @example\n   * emitter.off('hello', listener)\n   */\n  public off(\n    eventName: InternalEventNames | keyof Events,\n    listener: Listener<any>\n  ): this {\n    return this.removeListener(eventName, listener)\n  }\n\n  public removeAllListeners(eventName?: InternalEventNames): this\n  public removeAllListeners<EventName extends keyof Events>(\n    eventName?: EventName\n  ): this\n  public removeAllListeners(\n    eventName?: InternalEventNames | keyof Events\n  ): this {\n    if (eventName) {\n      this.events.delete(eventName)\n    } else {\n      this.events.clear()\n    }\n\n    return this\n  }\n\n  public listeners(eventName: InternalEventNames): Array<Listener<any>>\n  public listeners<EventName extends keyof Events>(\n    eventName: EventName\n  ): Array<Listener<Events[EventName]>>\n  /**\n   * Returns a copy of the array of listeners for the event named `eventName`.\n   */\n  public listeners(eventName: InternalEventNames | keyof Events) {\n    return Array.from(this._getListeners(eventName))\n  }\n\n  public listenerCount(eventName: InternalEventNames): number\n  public listenerCount<EventName extends keyof Events>(\n    eventName: EventName\n  ): number\n  /**\n   * Returns the number of listeners listening to the event named `eventName`.\n   */\n  public listenerCount(eventName: InternalEventNames | keyof Events): number {\n    return this._getListeners(eventName).length\n  }\n\n  public rawListeners<EventName extends keyof Events>(\n    eventName: EventName\n  ): Array<Listener<Events[EventName]>> {\n    return this.listeners(eventName)\n  }\n}\n","import { Logger } from '@open-draft/logger'\nimport { Emitter, Listener } from 'strict-event-emitter'\n\nexport type InterceptorEventMap = Record<string, any>\nexport type InterceptorSubscription = () => void\n\n/**\n * Request header name to detect when a single request\n * is being handled by nested interceptors (XHR -> ClientRequest).\n * Obscure by design to prevent collisions with user-defined headers.\n * Ideally, come up with the Interceptor-level mechanism for this.\n * @see https://github.com/mswjs/interceptors/issues/378\n */\nexport const INTERNAL_REQUEST_ID_HEADER_NAME =\n  'x-interceptors-internal-request-id'\n\nexport function getGlobalSymbol<V>(symbol: Symbol): V | undefined {\n  return (\n    // @ts-ignore https://github.com/Microsoft/TypeScript/issues/24587\n    globalThis[symbol] || undefined\n  )\n}\n\nfunction setGlobalSymbol(symbol: Symbol, value: any): void {\n  // @ts-ignore\n  globalThis[symbol] = value\n}\n\nexport function deleteGlobalSymbol(symbol: Symbol): void {\n  // @ts-ignore\n  delete globalThis[symbol]\n}\n\nexport enum InterceptorReadyState {\n  INACTIVE = 'INACTIVE',\n  APPLYING = 'APPLYING',\n  APPLIED = 'APPLIED',\n  DISPOSING = 'DISPOSING',\n  DISPOSED = 'DISPOSED',\n}\n\nexport type ExtractEventNames<Events extends Record<string, any>> =\n  Events extends Record<infer EventName, any> ? EventName : never\n\nexport class Interceptor<Events extends InterceptorEventMap> {\n  protected emitter: Emitter<Events>\n  protected subscriptions: Array<InterceptorSubscription>\n  protected logger: Logger\n\n  public readyState: InterceptorReadyState\n\n  constructor(private readonly symbol: symbol) {\n    this.readyState = InterceptorReadyState.INACTIVE\n\n    this.emitter = new Emitter()\n    this.subscriptions = []\n    this.logger = new Logger(symbol.description!)\n\n    // Do not limit the maximum number of listeners\n    // so not to limit the maximum amount of parallel events emitted.\n    this.emitter.setMaxListeners(0)\n\n    this.logger.info('constructing the interceptor...')\n  }\n\n  /**\n   * Determine if this interceptor can be applied\n   * in the current environment.\n   */\n  protected checkEnvironment(): boolean {\n    return true\n  }\n\n  /**\n   * Apply this interceptor to the current process.\n   * Returns an already running interceptor instance if it's present.\n   */\n  public apply(): void {\n    const logger = this.logger.extend('apply')\n    logger.info('applying the interceptor...')\n\n    if (this.readyState === InterceptorReadyState.APPLIED) {\n      logger.info('intercepted already applied!')\n      return\n    }\n\n    const shouldApply = this.checkEnvironment()\n\n    if (!shouldApply) {\n      logger.info('the interceptor cannot be applied in this environment!')\n      return\n    }\n\n    this.readyState = InterceptorReadyState.APPLYING\n\n    // Whenever applying a new interceptor, check if it hasn't been applied already.\n    // This enables to apply the same interceptor multiple times, for example from a different\n    // interceptor, only proxying events but keeping the stubs in a single place.\n    const runningInstance = this.getInstance()\n\n    if (runningInstance) {\n      logger.info('found a running instance, reusing...')\n\n      // Proxy any listeners you set on this instance to the running instance.\n      this.on = (event, listener) => {\n        logger.info('proxying the \"%s\" listener', event)\n\n        // Add listeners to the running instance so they appear\n        // at the top of the event listeners list and are executed first.\n        runningInstance.emitter.addListener(event, listener)\n\n        // Ensure that once this interceptor instance is disposed,\n        // it removes all listeners it has appended to the running interceptor instance.\n        this.subscriptions.push(() => {\n          runningInstance.emitter.removeListener(event, listener)\n          logger.info('removed proxied \"%s\" listener!', event)\n        })\n\n        return this\n      }\n\n      this.readyState = InterceptorReadyState.APPLIED\n\n      return\n    }\n\n    logger.info('no running instance found, setting up a new instance...')\n\n    // Setup the interceptor.\n    this.setup()\n\n    // Store the newly applied interceptor instance globally.\n    this.setInstance()\n\n    this.readyState = InterceptorReadyState.APPLIED\n  }\n\n  /**\n   * Setup the module augments and stubs necessary for this interceptor.\n   * This method is not run if there's a running interceptor instance\n   * to prevent instantiating an interceptor multiple times.\n   */\n  protected setup(): void {}\n\n  /**\n   * Listen to the interceptor's public events.\n   */\n  public on<EventName extends ExtractEventNames<Events>>(\n    event: EventName,\n    listener: Listener<Events[EventName]>\n  ): this {\n    const logger = this.logger.extend('on')\n\n    if (\n      this.readyState === InterceptorReadyState.DISPOSING ||\n      this.readyState === InterceptorReadyState.DISPOSED\n    ) {\n      logger.info('cannot listen to events, already disposed!')\n      return this\n    }\n\n    logger.info('adding \"%s\" event listener:', event, listener)\n\n    this.emitter.on(event, listener)\n    return this\n  }\n\n  public once<EventName extends ExtractEventNames<Events>>(\n    event: EventName,\n    listener: Listener<Events[EventName]>\n  ): this {\n    this.emitter.once(event, listener)\n    return this\n  }\n\n  public off<EventName extends ExtractEventNames<Events>>(\n    event: EventName,\n    listener: Listener<Events[EventName]>\n  ): this {\n    this.emitter.off(event, listener)\n    return this\n  }\n\n  public removeAllListeners<EventName extends ExtractEventNames<Events>>(\n    event?: EventName\n  ): this {\n    this.emitter.removeAllListeners(event)\n    return this\n  }\n\n  /**\n   * Disposes of any side-effects this interceptor has introduced.\n   */\n  public dispose(): void {\n    const logger = this.logger.extend('dispose')\n\n    if (this.readyState === InterceptorReadyState.DISPOSED) {\n      logger.info('cannot dispose, already disposed!')\n      return\n    }\n\n    logger.info('disposing the interceptor...')\n    this.readyState = InterceptorReadyState.DISPOSING\n\n    if (!this.getInstance()) {\n      logger.info('no interceptors running, skipping dispose...')\n      return\n    }\n\n    // Delete the global symbol as soon as possible,\n    // indicating that the interceptor is no longer running.\n    this.clearInstance()\n\n    logger.info('global symbol deleted:', getGlobalSymbol(this.symbol))\n\n    if (this.subscriptions.length > 0) {\n      logger.info('disposing of %d subscriptions...', this.subscriptions.length)\n\n      for (const dispose of this.subscriptions) {\n        dispose()\n      }\n\n      this.subscriptions = []\n\n      logger.info('disposed of all subscriptions!', this.subscriptions.length)\n    }\n\n    this.emitter.removeAllListeners()\n    logger.info('destroyed the listener!')\n\n    this.readyState = InterceptorReadyState.DISPOSED\n  }\n\n  private getInstance(): this | undefined {\n    const instance = getGlobalSymbol<this>(this.symbol)\n    this.logger.info('retrieved global instance:', instance?.constructor?.name)\n    return instance\n  }\n\n  private setInstance(): void {\n    setGlobalSymbol(this.symbol, this)\n    this.logger.info('set global instance!', this.symbol.description)\n  }\n\n  private clearInstance(): void {\n    deleteGlobalSymbol(this.symbol)\n    this.logger.info('cleared global instance!', this.symbol.description)\n  }\n}\n","/**\n * Generate a random ID string to represent a request.\n * @example\n * createRequestId()\n * // \"f774b6c9c600f\"\n */\nexport function createRequestId(): string {\n  return Math.random().toString(16).slice(2)\n}\n","import { EventMap, Listener } from 'strict-event-emitter'\nimport { Interceptor, ExtractEventNames } from './Interceptor'\n\nexport interface BatchInterceptorOptions<\n  InterceptorList extends ReadonlyArray<Interceptor<any>>\n> {\n  name: string\n  interceptors: InterceptorList\n}\n\nexport type ExtractEventMapType<\n  InterceptorList extends ReadonlyArray<Interceptor<any>>\n> = InterceptorList extends ReadonlyArray<infer InterceptorType>\n  ? InterceptorType extends Interceptor<infer EventMap>\n    ? EventMap\n    : never\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<any>>,\n  Events extends EventMap = ExtractEventMapType<InterceptorList>\n> extends Interceptor<Events> {\n  static symbol: symbol\n\n  private interceptors: InterceptorList\n\n  constructor(options: BatchInterceptorOptions<InterceptorList>) {\n    BatchInterceptor.symbol = Symbol(options.name)\n    super(BatchInterceptor.symbol)\n    this.interceptors = options.interceptors\n  }\n\n  protected setup() {\n    const logger = this.logger.extend('setup')\n\n    logger.info('applying all %d interceptors...', this.interceptors.length)\n\n    for (const interceptor of this.interceptors) {\n      logger.info('applying \"%s\" interceptor...', interceptor.constructor.name)\n      interceptor.apply()\n\n      logger.info('adding interceptor dispose subscription')\n      this.subscriptions.push(() => interceptor.dispose())\n    }\n  }\n\n  public on<EventName extends ExtractEventNames<Events>>(\n    event: EventName,\n    listener: Listener<Events[EventName]>\n  ): this {\n    // Instead of adding a listener to the batch interceptor,\n    // propagate the listener to each of the individual interceptors.\n    for (const interceptor of this.interceptors) {\n      interceptor.on(event, listener)\n    }\n\n    return this\n  }\n\n  public once<EventName extends ExtractEventNames<Events>>(\n    event: EventName,\n    listener: Listener<Events[EventName]>\n  ): this {\n    for (const interceptor of this.interceptors) {\n      interceptor.once(event, listener)\n    }\n\n    return this\n  }\n\n  public off<EventName extends ExtractEventNames<Events>>(\n    event: EventName,\n    listener: Listener<Events[EventName]>\n  ): this {\n    for (const interceptor of this.interceptors) {\n      interceptor.off(event, listener)\n    }\n\n    return this\n  }\n\n  public removeAllListeners<EventName extends ExtractEventNames<Events>>(\n    event?: EventName | undefined\n  ): this {\n    for (const interceptors of this.interceptors) {\n      interceptors.removeAllListeners(event)\n    }\n\n    return this\n  }\n}\n","import type {\n  ServiceWorkerIncomingEventsMap,\n  SetupWorkerInternalContext,\n} from '../glossary'\nimport type { ServiceWorkerMessage } from './utils/createMessageChannel'\nimport { isResponseWithoutBody } from '@mswjs/interceptors'\n\nexport function createResponseListener(context: SetupWorkerInternalContext) {\n  return (\n    _: MessageEvent,\n    message: ServiceWorkerMessage<\n      'RESPONSE',\n      ServiceWorkerIncomingEventsMap['RESPONSE']\n    >,\n  ) => {\n    const { payload: responseJson } = message\n\n    // Get the Request instance reference stored in the\n    // request listener.\n    const { requestId } = responseJson\n    const request = context.requests.get(requestId)!\n    context.requests.delete(requestId)\n\n    /**\n     * CORS requests with `mode: \"no-cors\"` result in \"opaque\" responses.\n     * That kind of responses cannot be manipulated in JavaScript due\n     * to the security considerations.\n     * @see https://fetch.spec.whatwg.org/#concept-filtered-response-opaque\n     * @see https://github.com/mswjs/msw/issues/529\n     */\n    if (responseJson.type?.includes('opaque')) {\n      return\n    }\n\n    const response =\n      responseJson.status === 0\n        ? Response.error()\n        : new Response(\n            /**\n             * Responses may be streams here, but when we create a response object\n             * with null-body status codes, like 204, 205, 304 Response will\n             * throw when passed a non-null body, so ensure it's null here\n             * for those codes\n             */\n            isResponseWithoutBody(responseJson.status)\n              ? null\n              : responseJson.body,\n            responseJson,\n          )\n\n    /**\n     * Set response URL if it's not set already.\n     * @see https://github.com/mswjs/msw/issues/2030\n     * @see https://developer.mozilla.org/en-US/docs/Web/API/Response/url\n     */\n    if (!response.url) {\n      Object.defineProperty(response, 'url', {\n        value: request.url,\n        enumerable: true,\n        writable: false,\n      })\n    }\n\n    context.emitter.emit(\n      responseJson.isMockedResponse ? 'response:mocked' : 'response:bypass',\n      {\n        response,\n        request,\n        requestId: responseJson.requestId,\n      },\n    )\n  }\n}\n","import { devUtils } from '~/core/utils/internal/devUtils'\nimport { StartOptions } from '../../glossary'\n\nexport function validateWorkerScope(\n  registration: ServiceWorkerRegistration,\n  options?: StartOptions,\n): void {\n  if (!options?.quiet && !location.href.startsWith(registration.scope)) {\n    devUtils.warn(\n      `\\\nCannot intercept requests on this page because it's outside of the worker's scope (\"${registration.scope}\"). If you wish to mock API requests on this page, you must resolve this scope issue.\n\n- (Recommended) Register the worker at the root level (\"/\") of your application.\n- Set the \"Service-Worker-Allowed\" response header to allow out-of-scope workers.\\\n`,\n    )\n  }\n}\n","import { devUtils } from '~/core/utils/internal/devUtils'\nimport { getWorkerInstance } from './utils/getWorkerInstance'\nimport { enableMocking } from './utils/enableMocking'\nimport { SetupWorkerInternalContext, StartHandler } from '../glossary'\nimport { createRequestListener } from './createRequestListener'\nimport { checkWorkerIntegrity } from '../../utils/checkWorkerIntegrity'\nimport { createResponseListener } from './createResponseListener'\nimport { validateWorkerScope } from './utils/validateWorkerScope'\n\nexport const createStartHandler = (\n  context: SetupWorkerInternalContext,\n): StartHandler => {\n  return function start(options, customOptions) {\n    const startWorkerInstance = async () => {\n      // Remove all previously existing event listeners.\n      // This way none of the listeners persists between Fast refresh\n      // of the application's code.\n      context.events.removeAllListeners()\n\n      // Handle requests signaled by the worker.\n      context.workerChannel.on(\n        'REQUEST',\n        createRequestListener(context, options),\n      )\n\n      // Handle responses signaled by the worker.\n      context.workerChannel.on('RESPONSE', createResponseListener(context))\n\n      const instance = await getWorkerInstance(\n        options.serviceWorker.url,\n        options.serviceWorker.options,\n        options.findWorker,\n      )\n\n      const [worker, registration] = instance\n\n      if (!worker) {\n        const missingWorkerMessage = customOptions?.findWorker\n          ? devUtils.formatMessage(\n              `Failed to locate the Service Worker registration using a custom \"findWorker\" predicate.\n\nPlease ensure that the custom predicate properly locates the Service Worker registration at \"%s\".\nMore details: https://mswjs.io/docs/api/setup-worker/start#findworker\n`,\n              options.serviceWorker.url,\n            )\n          : devUtils.formatMessage(\n              `Failed to locate the Service Worker registration.\n\nThis most likely means that the worker script URL \"%s\" cannot resolve against the actual public hostname (%s). This may happen if your application runs behind a proxy, or has a dynamic hostname.\n\nPlease consider using a custom \"serviceWorker.url\" option to point to the actual worker script location, or a custom \"findWorker\" option to resolve the Service Worker registration manually. More details: https://mswjs.io/docs/api/setup-worker/start`,\n              options.serviceWorker.url,\n              location.host,\n            )\n\n        throw new Error(missingWorkerMessage)\n      }\n\n      context.worker = worker\n      context.registration = registration\n\n      context.events.addListener(window, 'beforeunload', () => {\n        if (worker.state !== 'redundant') {\n          // Notify the Service Worker that this client has closed.\n          // Internally, it's similar to disabling the mocking, only\n          // client close event has a handler that self-terminates\n          // the Service Worker when there are no open clients.\n          context.workerChannel.send('CLIENT_CLOSED')\n        }\n        // Make sure we're always clearing the interval - there are reports that not doing this can\n        // cause memory leaks in headless browser environments.\n        window.clearInterval(context.keepAliveInterval)\n      })\n\n      // Check if the active Service Worker has been generated\n      // by the currently installed version of MSW.\n      await checkWorkerIntegrity(context).catch((error) => {\n        devUtils.error(\n          'Error while checking the worker script integrity. Please report this on GitHub (https://github.com/mswjs/msw/issues), including the original error below.',\n        )\n        console.error(error)\n      })\n\n      context.keepAliveInterval = window.setInterval(\n        () => context.workerChannel.send('KEEPALIVE_REQUEST'),\n        5000,\n      )\n\n      // Warn the user when loading the page that lies outside\n      // of the worker's scope.\n      validateWorkerScope(registration, context.startOptions)\n\n      return registration\n    }\n\n    const workerRegistration = startWorkerInstance().then(\n      async (registration) => {\n        const pendingInstance = registration.installing || registration.waiting\n\n        // Wait until the worker is activated.\n        // Assume the worker is already activated if there's no pending registration\n        // (i.e. when reloading the page after a successful activation).\n        if (pendingInstance) {\n          await new Promise<void>((resolve) => {\n            pendingInstance.addEventListener('statechange', () => {\n              if (pendingInstance.state === 'activated') {\n                return resolve()\n              }\n            })\n          })\n        }\n\n        // Print the activation message only after the worker has been activated.\n        await enableMocking(context, options).catch((error) => {\n          throw new Error(`Failed to enable mocking: ${error?.message}`)\n        })\n\n        return registration\n      },\n    )\n\n    return workerRegistration\n  }\n}\n","import { devUtils } from '~/core/utils/internal/devUtils'\n\nexport function printStopMessage(args: { quiet?: boolean } = {}): void {\n  if (args.quiet) {\n    return\n  }\n\n  console.log(\n    `%c${devUtils.formatMessage('Mocking disabled.')}`,\n    'color:orangered;font-weight:bold;',\n  )\n}\n","import { devUtils } from '~/core/utils/internal/devUtils'\nimport { SetupWorkerInternalContext, StopHandler } from '../glossary'\nimport { printStopMessage } from './utils/printStopMessage'\n\nexport const createStop = (\n  context: SetupWorkerInternalContext,\n): StopHandler => {\n  return function stop() {\n    // Warn developers calling \"worker.stop()\" more times than necessary.\n    // This likely indicates a mistake in their code.\n    if (!context.isMockingEnabled) {\n      devUtils.warn(\n        'Found a redundant \"worker.stop()\" call. Note that stopping the worker while mocking already stopped has no effect. Consider removing this \"worker.stop()\" call.',\n      )\n      return\n    }\n\n    /**\n     * Signal the Service Worker to disable mocking for this client.\n     * Use this an an explicit way to stop the mocking, while preserving\n     * the worker-client relation. Does not affect the worker's lifecycle.\n     */\n    context.workerChannel.send('MOCK_DEACTIVATE')\n    context.isMockingEnabled = false\n    window.clearInterval(context.keepAliveInterval)\n\n    printStopMessage({ quiet: context.startOptions?.quiet })\n  }\n}\n","import { RequiredDeep } from '~/core/typeUtils'\nimport { mergeRight } from '~/core/utils/internal/mergeRight'\nimport {\n  SetupWorker,\n  SetupWorkerInternalContext,\n  StartHandler,\n  StartOptions,\n} from '../../glossary'\n\nexport const DEFAULT_START_OPTIONS: RequiredDeep<StartOptions> = {\n  serviceWorker: {\n    url: '/mockServiceWorker.js',\n    options: null as any,\n  },\n  quiet: false,\n  waitUntilReady: true,\n  onUnhandledRequest: 'warn',\n  findWorker(scriptURL, mockServiceWorkerUrl) {\n    return scriptURL === mockServiceWorkerUrl\n  },\n}\n\n/**\n * Returns resolved worker start options, merging the default options\n * with the given custom options.\n */\nexport function resolveStartOptions(\n  initialOptions?: StartOptions,\n): RequiredDeep<StartOptions> {\n  return mergeRight(\n    DEFAULT_START_OPTIONS,\n    initialOptions || {},\n  ) as RequiredDeep<StartOptions>\n}\n\nexport function prepareStartHandler(\n  handler: StartHandler,\n  context: SetupWorkerInternalContext,\n): SetupWorker['start'] {\n  return (initialOptions) => {\n    context.startOptions = resolveStartOptions(initialOptions)\n    return handler(context.startOptions, initialOptions || {})\n  }\n}\n","export type PromiseState = 'pending' | 'fulfilled' | 'rejected'\n\nexport type Executor<Value> = ConstructorParameters<typeof Promise<Value>>[0]\nexport type ResolveFunction<Value> = Parameters<Executor<Value>>[0]\nexport type RejectFunction<Reason> = Parameters<Executor<Reason>>[1]\n\nexport type DeferredPromiseExecutor<Input = never, Output = Input> = {\n  (resolve?: ResolveFunction<Input>, reject?: RejectFunction<any>): void\n\n  resolve: ResolveFunction<Input>\n  reject: RejectFunction<any>\n  result?: Output\n  state: PromiseState\n  rejectionReason?: unknown\n}\nexport function createDeferredExecutor<\n  Input = never,\n  Output = Input\n>(): DeferredPromiseExecutor<Input, Output> {\n  const executor = <DeferredPromiseExecutor<Input, Output>>((\n    resolve,\n    reject\n  ) => {\n    executor.state = 'pending'\n\n    executor.resolve = (data) => {\n      if (executor.state !== 'pending') {\n        return\n      }\n\n      executor.result = data as Output\n\n      const onFulfilled = <Value>(value: Value) => {\n        executor.state = 'fulfilled'\n        return value\n      }\n\n      return resolve(\n        data instanceof Promise ? data : Promise.resolve(data).then(onFulfilled)\n      )\n    }\n\n    executor.reject = (reason) => {\n      if (executor.state !== 'pending') {\n        return\n      }\n\n      queueMicrotask(() => {\n        executor.state = 'rejected'\n      })\n\n      return reject((executor.rejectionReason = reason))\n    }\n  })\n\n  return executor\n}\n","import {\n  type Executor,\n  type RejectFunction,\n  type ResolveFunction,\n  type DeferredPromiseExecutor,\n  createDeferredExecutor,\n} from './createDeferredExecutor'\n\nexport class DeferredPromise<Input, Output = Input> extends Promise<Input> {\n  #executor: DeferredPromiseExecutor\n\n  public resolve: ResolveFunction<Output>\n  public reject: RejectFunction<Output>\n\n  constructor(executor: Executor<Input> | null = null) {\n    const deferredExecutor = createDeferredExecutor()\n    super((originalResolve, originalReject) => {\n      deferredExecutor(originalResolve, originalReject)\n      executor?.(deferredExecutor.resolve, deferredExecutor.reject)\n    })\n\n    this.#executor = deferredExecutor\n    this.resolve = this.#executor.resolve\n    this.reject = this.#executor.reject\n  }\n\n  public get state() {\n    return this.#executor.state\n  }\n\n  public get rejectionReason() {\n    return this.#executor.rejectionReason\n  }\n\n  public then<ThenResult = Input, CatchResult = never>(\n    onFulfilled?: (value: Input) => ThenResult | PromiseLike<ThenResult>,\n    onRejected?: (reason: any) => CatchResult | PromiseLike<CatchResult>\n  ) {\n    return this.#decorate(super.then(onFulfilled, onRejected))\n  }\n\n  public catch<CatchResult = never>(\n    onRejected?: (reason: any) => CatchResult | PromiseLike<CatchResult>\n  ) {\n    return this.#decorate(super.catch(onRejected))\n  }\n\n  public finally(onfinally?: () => void | Promise<any>) {\n    return this.#decorate(super.finally(onfinally))\n  }\n\n  #decorate<ChildInput>(\n    promise: Promise<ChildInput>\n  ): DeferredPromise<ChildInput, Output> {\n    return Object.defineProperties(promise, {\n      resolve: { configurable: true, value: this.resolve },\n      reject: { configurable: true, value: this.reject },\n    }) as DeferredPromise<ChildInput, Output>\n  }\n}\n","import { invariant } from 'outvariant'\nimport { DeferredPromise } from '@open-draft/deferred-promise'\n\nexport class RequestController {\n  public responsePromise: DeferredPromise<Response | undefined>\n\n  constructor(protected request: Request) {\n    this.responsePromise = new DeferredPromise()\n  }\n\n  public respondWith(response?: Response): void {\n    invariant(\n      this.responsePromise.state === 'pending',\n      'Failed to respond to \"%s %s\" request: the \"request\" event has already been responded to.',\n      this.request.method,\n      this.request.url\n    )\n\n    this.responsePromise.resolve(response)\n  }\n}\n","import { RequestController } from './RequestController'\n\nexport type InteractiveRequest = globalThis.Request & {\n  respondWith: RequestController['respondWith']\n}\n\nexport function toInteractiveRequest(request: Request): {\n  interactiveRequest: InteractiveRequest\n  requestController: RequestController\n} {\n  const requestController = new RequestController(request)\n\n  Reflect.set(\n    request,\n    'respondWith',\n    requestController.respondWith.bind(requestController)\n  )\n\n  return {\n    interactiveRequest: request as InteractiveRequest,\n    requestController,\n  }\n}\n","import { Emitter, EventMap } from 'strict-event-emitter'\n\n/**\n * Emits an event on the given emitter but executes\n * the listeners sequentially. This accounts for asynchronous\n * listeners (e.g. those having \"sleep\" and handling the request).\n */\nexport async function emitAsync<\n  Events extends EventMap,\n  EventName extends keyof Events\n>(\n  emitter: Emitter<Events>,\n  eventName: EventName,\n  ...data: Events[EventName]\n): Promise<void> {\n  const listners = emitter.listeners(eventName)\n\n  if (listners.length === 0) {\n    return\n  }\n\n  for (const listener of listners) {\n    await listener.apply(emitter, data)\n  }\n}\n","/**\n * A function that validates if property access is possible on an object\n * without throwing. It returns `true` if the property access is possible\n * and `false` otherwise.\n *\n * Environments like miniflare will throw on property access on certain objects\n * like Request and Response, for unimplemented properties.\n */\nexport function isPropertyAccessible<Obj extends Record<string, any>>(\n  obj: Obj,\n  key: keyof Obj\n) {\n  try {\n    obj[key]\n    return true\n  } catch {\n    return false\n  }\n}\n","/**\n * Returns a boolean indicating whether the given URL string\n * can be parsed into a `URL` instance.\n * A substitute for `URL.canParse()` for Node.js 18.\n */\nexport function canParseUrl(url: string): boolean {\n  try {\n    new URL(url)\n    return true\n  } catch (_error) {\n    return false\n  }\n}\n","import { invariant } from 'outvariant'\nimport { DeferredPromise } from '@open-draft/deferred-promise'\nimport { until } from '@open-draft/until'\nimport { HttpRequestEventMap, IS_PATCHED_MODULE } from '../../glossary'\nimport { Interceptor } from '../../Interceptor'\nimport { toInteractiveRequest } from '../../utils/toInteractiveRequest'\nimport { emitAsync } from '../../utils/emitAsync'\nimport { isPropertyAccessible } from '../../utils/isPropertyAccessible'\nimport { canParseUrl } from '../../utils/canParseUrl'\nimport { createRequestId } from '../../createRequestId'\n\nexport class FetchInterceptor extends Interceptor<HttpRequestEventMap> {\n  static symbol = Symbol('fetch')\n\n  constructor() {\n    super(FetchInterceptor.symbol)\n  }\n\n  protected checkEnvironment() {\n    return (\n      typeof globalThis !== 'undefined' &&\n      typeof globalThis.fetch !== 'undefined'\n    )\n  }\n\n  protected async setup() {\n    const pureFetch = globalThis.fetch\n\n    invariant(\n      !(pureFetch as any)[IS_PATCHED_MODULE],\n      'Failed to patch the \"fetch\" module: already patched.'\n    )\n\n    globalThis.fetch = async (input, init) => {\n      const requestId = createRequestId()\n\n      /**\n       * @note Resolve potentially relative request URL\n       * against the present `location`. This is mainly\n       * for native `fetch` in JSDOM.\n       * @see https://github.com/mswjs/msw/issues/1625\n       */\n      const resolvedInput =\n        typeof input === 'string' &&\n        typeof location !== 'undefined' &&\n        !canParseUrl(input)\n          ? new URL(input, location.origin)\n          : input\n\n      const request = new Request(resolvedInput, init)\n\n      this.logger.info('[%s] %s', request.method, request.url)\n\n      const { interactiveRequest, requestController } =\n        toInteractiveRequest(request)\n\n      this.logger.info(\n        'emitting the \"request\" event for %d listener(s)...',\n        this.emitter.listenerCount('request')\n      )\n\n      this.emitter.once('request', ({ requestId: pendingRequestId }) => {\n        if (pendingRequestId !== requestId) {\n          return\n        }\n\n        if (requestController.responsePromise.state === 'pending') {\n          requestController.responsePromise.resolve(undefined)\n        }\n      })\n\n      this.logger.info('awaiting for the mocked response...')\n\n      const signal = interactiveRequest.signal\n      const requestAborted = new DeferredPromise()\n\n      // Signal isn't always defined in react-native.\n      if (signal) {\n        signal.addEventListener(\n          'abort',\n          () => {\n            requestAborted.reject(signal.reason)\n          },\n          { once: true }\n        )\n      }\n\n      const resolverResult = await until(async () => {\n        const listenersFinished = emitAsync(this.emitter, 'request', {\n          request: interactiveRequest,\n          requestId,\n        })\n\n        await Promise.race([\n          requestAborted,\n          // Put the listeners invocation Promise in the same race condition\n          // with the request abort Promise because otherwise awaiting the listeners\n          // would always yield some response (or undefined).\n          listenersFinished,\n          requestController.responsePromise,\n        ])\n\n        this.logger.info('all request listeners have been resolved!')\n\n        const mockedResponse = await requestController.responsePromise\n        this.logger.info('event.respondWith called with:', mockedResponse)\n\n        return mockedResponse\n      })\n\n      if (requestAborted.state === 'rejected') {\n        return Promise.reject(requestAborted.rejectionReason)\n      }\n\n      if (resolverResult.error) {\n        return Promise.reject(createNetworkError(resolverResult.error))\n      }\n\n      const mockedResponse = resolverResult.data\n\n      if (mockedResponse && !request.signal?.aborted) {\n        this.logger.info('received mocked response:', mockedResponse)\n\n        // Reject the request Promise on mocked \"Response.error\" responses.\n        if (\n          isPropertyAccessible(mockedResponse, 'type') &&\n          mockedResponse.type === 'error'\n        ) {\n          this.logger.info(\n            'received a network error response, rejecting the request promise...'\n          )\n\n          /**\n           * Set the cause of the request promise rejection to the\n           * network error Response instance. This different from Undici.\n           * Undici will forward the \"response.error\" custom property\n           * as the rejection reason but for \"Response.error()\" static method\n           * \"response.error\" will equal to undefined, making \"cause\" an empty Error.\n           * @see https://github.com/nodejs/undici/blob/83cb522ae0157a19d149d72c7d03d46e34510d0a/lib/fetch/response.js#L344\n           */\n          return Promise.reject(createNetworkError(mockedResponse))\n        }\n\n        // Clone the mocked response for the \"response\" event listener.\n        // This way, the listener can read the response and not lock its body\n        // for the actual fetch consumer.\n        const responseClone = mockedResponse.clone()\n\n        this.emitter.emit('response', {\n          response: responseClone,\n          isMockedResponse: true,\n          request: interactiveRequest,\n          requestId,\n        })\n\n        // Set the \"response.url\" property to equal the intercepted request URL.\n        Object.defineProperty(mockedResponse, 'url', {\n          writable: false,\n          enumerable: true,\n          configurable: false,\n          value: request.url,\n        })\n\n        return mockedResponse\n      }\n\n      this.logger.info('no mocked response received!')\n\n      return pureFetch(request).then((response) => {\n        const responseClone = response.clone()\n        this.logger.info('original fetch performed', responseClone)\n\n        this.emitter.emit('response', {\n          response: responseClone,\n          isMockedResponse: false,\n          request: interactiveRequest,\n          requestId,\n        })\n\n        return response\n      })\n    }\n\n    Object.defineProperty(globalThis.fetch, IS_PATCHED_MODULE, {\n      enumerable: true,\n      configurable: true,\n      value: true,\n    })\n\n    this.subscriptions.push(() => {\n      Object.defineProperty(globalThis.fetch, IS_PATCHED_MODULE, {\n        value: undefined,\n      })\n\n      globalThis.fetch = pureFetch\n\n      this.logger.info(\n        'restored native \"globalThis.fetch\"!',\n        globalThis.fetch.name\n      )\n    })\n  }\n}\n\nfunction createNetworkError(cause: unknown) {\n  return Object.assign(new TypeError('Failed to fetch'), {\n    cause,\n  })\n}\n","/**\n * Concatenate two `Uint8Array` buffers.\n */\nexport function concatArrayBuffer(\n  left: Uint8Array,\n  right: Uint8Array\n): Uint8Array {\n  const result = new Uint8Array(left.byteLength + right.byteLength)\n  result.set(left, 0)\n  result.set(right, left.byteLength)\n  return result\n}\n","export class EventPolyfill implements Event {\n  readonly AT_TARGET: number = 0\n  readonly BUBBLING_PHASE: number = 0\n  readonly CAPTURING_PHASE: number = 0\n  readonly NONE: number = 0\n\n  public type: string = ''\n  public srcElement: EventTarget | null = null\n  public target: EventTarget | null\n  public currentTarget: EventTarget | null = null\n  public eventPhase: number = 0\n  public timeStamp: number\n  public isTrusted: boolean = true\n  public composed: boolean = false\n  public cancelable: boolean = true\n  public defaultPrevented: boolean = false\n  public bubbles: boolean = true\n  public lengthComputable: boolean = true\n  public loaded: number = 0\n  public total: number = 0\n\n  cancelBubble: boolean = false\n  returnValue: boolean = true\n\n  constructor(\n    type: string,\n    options?: { target: EventTarget; currentTarget: EventTarget }\n  ) {\n    this.type = type\n    this.target = options?.target || null\n    this.currentTarget = options?.currentTarget || null\n    this.timeStamp = Date.now()\n  }\n\n  public composedPath(): EventTarget[] {\n    return []\n  }\n\n  public initEvent(type: string, bubbles?: boolean, cancelable?: boolean) {\n    this.type = type\n    this.bubbles = !!bubbles\n    this.cancelable = !!cancelable\n  }\n\n  public preventDefault() {\n    this.defaultPrevented = true\n  }\n\n  public stopPropagation() {}\n  public stopImmediatePropagation() {}\n}\n","import { EventPolyfill } from './EventPolyfill'\n\nexport class ProgressEventPolyfill extends EventPolyfill {\n  readonly lengthComputable: boolean\n  readonly composed: boolean\n  readonly loaded: number\n  readonly total: number\n\n  constructor(type: string, init?: ProgressEventInit) {\n    super(type)\n\n    this.lengthComputable = init?.lengthComputable || false\n    this.composed = init?.composed || false\n    this.loaded = init?.loaded || 0\n    this.total = init?.total || 0\n  }\n}\n","import { EventPolyfill } from '../polyfills/EventPolyfill'\nimport { ProgressEventPolyfill } from '../polyfills/ProgressEventPolyfill'\n\nconst SUPPORTS_PROGRESS_EVENT = typeof ProgressEvent !== 'undefined'\n\nexport function createEvent(\n  target: XMLHttpRequest,\n  type: string,\n  init?: ProgressEventInit\n): EventPolyfill {\n  const progressEvents = [\n    'error',\n    'progress',\n    'loadstart',\n    'loadend',\n    'load',\n    'timeout',\n    'abort',\n  ]\n\n  /**\n   * `ProgressEvent` is not supported in React Native.\n   * @see https://github.com/mswjs/interceptors/issues/40\n   */\n  const ProgressEventClass = SUPPORTS_PROGRESS_EVENT\n    ? ProgressEvent\n    : ProgressEventPolyfill\n\n  const event = progressEvents.includes(type)\n    ? new ProgressEventClass(type, {\n        lengthComputable: true,\n        loaded: init?.loaded || 0,\n        total: init?.total || 0,\n      })\n    : new EventPolyfill(type, {\n        target,\n        currentTarget: target,\n      })\n\n  return event\n}\n","/**\n * Returns the source object of the given property on the target object\n * (the target itself, any parent in its prototype, or null).\n */\nexport function findPropertySource(\n  target: object,\n  propertyName: string | symbol\n): object | null {\n  if (!(propertyName in target)) {\n    return null\n  }\n\n  const hasProperty = Object.prototype.hasOwnProperty.call(target, propertyName)\n  if (hasProperty) {\n    return target\n  }\n\n  const prototype = Reflect.getPrototypeOf(target)\n  return prototype ? findPropertySource(prototype, propertyName) : null\n}\n","import { findPropertySource } from './findPropertySource'\n\nexport interface ProxyOptions<Target extends Record<string, any>> {\n  constructorCall?(args: Array<unknown>, next: NextFunction<Target>): Target\n\n  methodCall?<F extends keyof Target>(\n    this: Target,\n    data: [methodName: F, args: Array<unknown>],\n    next: NextFunction<void>\n  ): void\n\n  setProperty?(\n    data: [propertyName: string | symbol, nextValue: unknown],\n    next: NextFunction<boolean>\n  ): boolean\n\n  getProperty?(\n    data: [propertyName: string | symbol, receiver: Target],\n    next: NextFunction<void>\n  ): void\n}\n\nexport type NextFunction<ReturnType> = () => ReturnType\n\nexport function createProxy<Target extends object>(\n  target: Target,\n  options: ProxyOptions<Target>\n): Target {\n  const proxy = new Proxy(target, optionsToProxyHandler(options))\n\n  return proxy\n}\n\nfunction optionsToProxyHandler<T extends Record<string, any>>(\n  options: ProxyOptions<T>\n): ProxyHandler<T> {\n  const { constructorCall, methodCall, getProperty, setProperty } = options\n  const handler: ProxyHandler<T> = {}\n\n  if (typeof constructorCall !== 'undefined') {\n    handler.construct = function (target, args, newTarget) {\n      const next = Reflect.construct.bind(null, target as any, args, newTarget)\n      return constructorCall.call(newTarget, args, next)\n    }\n  }\n\n  handler.set = function (target, propertyName, nextValue) {\n    const next = () => {\n      const propertySource = findPropertySource(target, propertyName) || target\n      const ownDescriptors = Reflect.getOwnPropertyDescriptor(\n        propertySource,\n        propertyName\n      )\n\n      // Respect any custom setters present for this property.\n      if (typeof ownDescriptors?.set !== 'undefined') {\n        ownDescriptors.set.apply(target, [nextValue])\n        return true\n      }\n\n      // Otherwise, set the property on the source.\n      return Reflect.defineProperty(propertySource, propertyName, {\n        writable: true,\n        enumerable: true,\n        configurable: true,\n        value: nextValue,\n      })\n    }\n\n    if (typeof setProperty !== 'undefined') {\n      return setProperty.call(target, [propertyName, nextValue], next)\n    }\n\n    return next()\n  }\n\n  handler.get = function (target, propertyName, receiver) {\n    /**\n     * @note Using `Reflect.get()` here causes \"TypeError: Illegal invocation\".\n     */\n    const next = () => target[propertyName as any]\n\n    const value =\n      typeof getProperty !== 'undefined'\n        ? getProperty.call(target, [propertyName, receiver], next)\n        : next()\n\n    if (typeof value === 'function') {\n      return (...args: Array<any>) => {\n        const next = value.bind(target, ...args)\n\n        if (typeof methodCall !== 'undefined') {\n          return methodCall.call(target, [propertyName as any, args], next)\n        }\n\n        return next()\n      }\n    }\n\n    return value\n  }\n\n  return handler\n}\n","export function isDomParserSupportedType(\n  type: string\n): type is DOMParserSupportedType {\n  const supportedTypes: Array<DOMParserSupportedType> = [\n    'application/xhtml+xml',\n    'application/xml',\n    'image/svg+xml',\n    'text/html',\n    'text/xml',\n  ]\n  return supportedTypes.some((supportedType) => {\n    return type.startsWith(supportedType)\n  })\n}\n","/**\n * Parses a given string into JSON.\n * Gracefully handles invalid JSON by returning `null`.\n */\nexport function parseJson(data: string): Record<string, unknown> | null {\n  try {\n    const json = JSON.parse(data)\n    return json\n  } catch (_) {\n    return null\n  }\n}\n","import { isResponseWithoutBody } from '../../../utils/responseUtils'\n\n/**\n * Creates a Fetch API `Response` instance from the given\n * `XMLHttpRequest` instance and a response body.\n */\nexport function createResponse(\n  request: XMLHttpRequest,\n  body: BodyInit | null\n): Response {\n  /**\n   * Handle XMLHttpRequest responses that must have null as the\n   * response body when represented using Fetch API Response.\n   * XMLHttpRequest response will always have an empty string\n   * as the \"request.response\" in those cases, resulting in an error\n   * when constructing a Response instance.\n   * @see https://github.com/mswjs/interceptors/issues/379\n   */\n  const responseBodyOrNull = isResponseWithoutBody(request.status) ? null : body\n\n  return new Response(responseBodyOrNull, {\n    status: request.status,\n    statusText: request.statusText,\n    headers: createHeadersFromXMLHttpReqestHeaders(\n      request.getAllResponseHeaders()\n    ),\n  })\n}\n\nfunction createHeadersFromXMLHttpReqestHeaders(headersString: string): Headers {\n  const headers = new Headers()\n\n  const lines = headersString.split(/[\\r\\n]+/)\n  for (const line of lines) {\n    if (line.trim() === '') {\n      continue\n    }\n\n    const [name, ...parts] = line.split(': ')\n    const value = parts.join(': ')\n\n    headers.append(name, value)\n  }\n\n  return headers\n}\n","import { invariant } from 'outvariant'\nimport { isNodeProcess } from 'is-node-process'\nimport type { Logger } from '@open-draft/logger'\nimport { concatArrayBuffer } from './utils/concatArrayBuffer'\nimport { createEvent } from './utils/createEvent'\nimport {\n  decodeBuffer,\n  encodeBuffer,\n  toArrayBuffer,\n} from '../../utils/bufferUtils'\nimport { createProxy } from '../../utils/createProxy'\nimport { isDomParserSupportedType } from './utils/isDomParserSupportedType'\nimport { parseJson } from '../../utils/parseJson'\nimport { createResponse } from './utils/createResponse'\nimport { INTERNAL_REQUEST_ID_HEADER_NAME } from '../../Interceptor'\nimport { createRequestId } from '../../createRequestId'\n\nconst IS_MOCKED_RESPONSE = Symbol('isMockedResponse')\nconst IS_NODE = isNodeProcess()\n\n/**\n * An `XMLHttpRequest` instance controller that allows us\n * to handle any given request instance (e.g. responding to it).\n */\nexport class XMLHttpRequestController {\n  public request: XMLHttpRequest\n  public requestId: string\n  public onRequest?: (\n    this: XMLHttpRequestController,\n    args: {\n      request: Request\n      requestId: string\n    }\n  ) => Promise<void>\n  public onResponse?: (\n    this: XMLHttpRequestController,\n    args: {\n      response: Response\n      isMockedResponse: boolean\n      request: Request\n      requestId: string\n    }\n  ) => void\n\n  private method: string = 'GET'\n  private url: URL = null as any\n  private requestHeaders: Headers\n  private requestBody?: XMLHttpRequestBodyInit | Document | null\n  private responseBuffer: Uint8Array\n  private events: Map<keyof XMLHttpRequestEventTargetEventMap, Array<Function>>\n\n  constructor(\n    readonly initialRequest: XMLHttpRequest,\n    public logger: Logger\n  ) {\n    this.events = new Map()\n    this.requestId = createRequestId()\n    this.requestHeaders = new Headers()\n    this.responseBuffer = new Uint8Array()\n\n    this.request = createProxy(initialRequest, {\n      setProperty: ([propertyName, nextValue], invoke) => {\n        switch (propertyName) {\n          case 'ontimeout': {\n            const eventName = propertyName.slice(\n              2\n            ) as keyof XMLHttpRequestEventTargetEventMap\n\n            /**\n             * @note Proxy callbacks to event listeners because JSDOM has trouble\n             * translating these properties to callbacks. It seemed to be operating\n             * on events exclusively.\n             */\n            this.request.addEventListener(eventName, nextValue as any)\n\n            return invoke()\n          }\n\n          default: {\n            return invoke()\n          }\n        }\n      },\n      methodCall: ([methodName, args], invoke) => {\n        switch (methodName) {\n          case 'open': {\n            const [method, url] = args as [string, string | undefined]\n\n            if (typeof url === 'undefined') {\n              this.method = 'GET'\n              this.url = toAbsoluteUrl(method)\n            } else {\n              this.method = method\n              this.url = toAbsoluteUrl(url)\n            }\n\n            this.logger = this.logger.extend(`${this.method} ${this.url.href}`)\n            this.logger.info('open', this.method, this.url.href)\n\n            return invoke()\n          }\n\n          case 'addEventListener': {\n            const [eventName, listener] = args as [\n              keyof XMLHttpRequestEventTargetEventMap,\n              Function,\n            ]\n\n            this.registerEvent(eventName, listener)\n            this.logger.info('addEventListener', eventName, listener)\n\n            return invoke()\n          }\n\n          case 'setRequestHeader': {\n            const [name, value] = args as [string, string]\n            this.requestHeaders.set(name, value)\n\n            this.logger.info('setRequestHeader', name, value)\n\n            return invoke()\n          }\n\n          case 'send': {\n            const [body] = args as [\n              body?: XMLHttpRequestBodyInit | Document | null,\n            ]\n\n            if (body != null) {\n              this.requestBody =\n                typeof body === 'string' ? encodeBuffer(body) : body\n            }\n\n            this.request.addEventListener('load', () => {\n              if (typeof this.onResponse !== 'undefined') {\n                // Create a Fetch API Response representation of whichever\n                // response this XMLHttpRequest received. Note those may\n                // be either a mocked and the original response.\n                const fetchResponse = createResponse(\n                  this.request,\n                  /**\n                   * The `response` property is the right way to read\n                   * the ambiguous response body, as the request's \"responseType\" may differ.\n                   * @see https://xhr.spec.whatwg.org/#the-response-attribute\n                   */\n                  this.request.response\n                )\n\n                // Notify the consumer about the response.\n                this.onResponse.call(this, {\n                  response: fetchResponse,\n                  isMockedResponse: IS_MOCKED_RESPONSE in this.request,\n                  request: fetchRequest,\n                  requestId: this.requestId!,\n                })\n              }\n            })\n\n            // Delegate request handling to the consumer.\n            const fetchRequest = this.toFetchApiRequest()\n            const onceRequestSettled =\n              this.onRequest?.call(this, {\n                request: fetchRequest,\n                requestId: this.requestId!,\n              }) || Promise.resolve()\n\n            onceRequestSettled.finally(() => {\n              // If the consumer didn't handle the request perform it as-is.\n              // Note that the request may not yet be DONE and may, in fact,\n              // be LOADING while the \"respondWith\" method does its magic.\n              if (this.request.readyState < this.request.LOADING) {\n                this.logger.info(\n                  'request callback settled but request has not been handled (readystate %d), performing as-is...',\n                  this.request.readyState\n                )\n\n                /**\n                 * @note Set the intercepted request ID on the original request in Node.js\n                 * so that if it triggers any other interceptors, they don't attempt\n                 * to process it once again.\n                 *\n                 * For instance, XMLHttpRequest is often implemented via \"http.ClientRequest\"\n                 * and we don't want for both XHR and ClientRequest interceptors to\n                 * handle the same request at the same time (e.g. emit the \"response\" event twice).\n                 */\n                if (IS_NODE) {\n                  this.request.setRequestHeader(\n                    INTERNAL_REQUEST_ID_HEADER_NAME,\n                    this.requestId!\n                  )\n                }\n\n                return invoke()\n              }\n            })\n\n            break\n          }\n\n          default: {\n            return invoke()\n          }\n        }\n      },\n    })\n  }\n\n  private registerEvent(\n    eventName: keyof XMLHttpRequestEventTargetEventMap,\n    listener: Function\n  ): void {\n    const prevEvents = this.events.get(eventName) || []\n    const nextEvents = prevEvents.concat(listener)\n    this.events.set(eventName, nextEvents)\n\n    this.logger.info('registered event \"%s\"', eventName, listener)\n  }\n\n  /**\n   * Responds to the current request with the given\n   * Fetch API `Response` instance.\n   */\n  public respondWith(response: Response): void {\n    this.logger.info(\n      'responding with a mocked response: %d %s',\n      response.status,\n      response.statusText\n    )\n\n    /**\n     * @note Since `XMLHttpRequestController` delegates the handling of the responses\n     * to the \"load\" event listener that doesn't distinguish between the mocked and original\n     * responses, mark the request that had a mocked response with a corresponding symbol.\n     */\n    define(this.request, IS_MOCKED_RESPONSE, true)\n\n    define(this.request, 'status', response.status)\n    define(this.request, 'statusText', response.statusText)\n    define(this.request, 'responseURL', this.url.href)\n\n    this.request.getResponseHeader = new Proxy(this.request.getResponseHeader, {\n      apply: (_, __, args: [name: string]) => {\n        this.logger.info('getResponseHeader', args[0])\n\n        if (this.request.readyState < this.request.HEADERS_RECEIVED) {\n          this.logger.info('headers not received yet, returning null')\n\n          // Headers not received yet, nothing to return.\n          return null\n        }\n\n        const headerValue = response.headers.get(args[0])\n        this.logger.info(\n          'resolved response header \"%s\" to',\n          args[0],\n          headerValue\n        )\n\n        return headerValue\n      },\n    })\n\n    this.request.getAllResponseHeaders = new Proxy(\n      this.request.getAllResponseHeaders,\n      {\n        apply: () => {\n          this.logger.info('getAllResponseHeaders')\n\n          if (this.request.readyState < this.request.HEADERS_RECEIVED) {\n            this.logger.info('headers not received yet, returning empty string')\n\n            // Headers not received yet, nothing to return.\n            return ''\n          }\n\n          const headersList = Array.from(response.headers.entries())\n          const allHeaders = headersList\n            .map(([headerName, headerValue]) => {\n              return `${headerName}: ${headerValue}`\n            })\n            .join('\\r\\n')\n\n          this.logger.info('resolved all response headers to', allHeaders)\n\n          return allHeaders\n        },\n      }\n    )\n\n    // Update the response getters to resolve against the mocked response.\n    Object.defineProperties(this.request, {\n      response: {\n        enumerable: true,\n        configurable: false,\n        get: () => this.response,\n      },\n      responseText: {\n        enumerable: true,\n        configurable: false,\n        get: () => this.responseText,\n      },\n      responseXML: {\n        enumerable: true,\n        configurable: false,\n        get: () => this.responseXML,\n      },\n    })\n\n    const totalResponseBodyLength = response.headers.has('Content-Length')\n      ? Number(response.headers.get('Content-Length'))\n      : /**\n         * @todo Infer the response body length from the response body.\n         */\n        undefined\n\n    this.logger.info('calculated response body length', totalResponseBodyLength)\n\n    this.trigger('loadstart', {\n      loaded: 0,\n      total: totalResponseBodyLength,\n    })\n\n    this.setReadyState(this.request.HEADERS_RECEIVED)\n    this.setReadyState(this.request.LOADING)\n\n    const finalizeResponse = () => {\n      this.logger.info('finalizing the mocked response...')\n\n      this.setReadyState(this.request.DONE)\n\n      this.trigger('load', {\n        loaded: this.responseBuffer.byteLength,\n        total: totalResponseBodyLength,\n      })\n\n      this.trigger('loadend', {\n        loaded: this.responseBuffer.byteLength,\n        total: totalResponseBodyLength,\n      })\n    }\n\n    if (response.body) {\n      this.logger.info('mocked response has body, streaming...')\n\n      const reader = response.body.getReader()\n\n      const readNextResponseBodyChunk = async () => {\n        const { value, done } = await reader.read()\n\n        if (done) {\n          this.logger.info('response body stream done!')\n          finalizeResponse()\n          return\n        }\n\n        if (value) {\n          this.logger.info('read response body chunk:', value)\n          this.responseBuffer = concatArrayBuffer(this.responseBuffer, value)\n\n          this.trigger('progress', {\n            loaded: this.responseBuffer.byteLength,\n            total: totalResponseBodyLength,\n          })\n        }\n\n        readNextResponseBodyChunk()\n      }\n\n      readNextResponseBodyChunk()\n    } else {\n      finalizeResponse()\n    }\n  }\n\n  private responseBufferToText(): string {\n    return decodeBuffer(this.responseBuffer)\n  }\n\n  get response(): unknown {\n    this.logger.info(\n      'getResponse (responseType: %s)',\n      this.request.responseType\n    )\n\n    if (this.request.readyState !== this.request.DONE) {\n      return null\n    }\n\n    switch (this.request.responseType) {\n      case 'json': {\n        const responseJson = parseJson(this.responseBufferToText())\n        this.logger.info('resolved response JSON', responseJson)\n\n        return responseJson\n      }\n\n      case 'arraybuffer': {\n        const arrayBuffer = toArrayBuffer(this.responseBuffer)\n        this.logger.info('resolved response ArrayBuffer', arrayBuffer)\n\n        return arrayBuffer\n      }\n\n      case 'blob': {\n        const mimeType =\n          this.request.getResponseHeader('Content-Type') || 'text/plain'\n        const responseBlob = new Blob([this.responseBufferToText()], {\n          type: mimeType,\n        })\n\n        this.logger.info(\n          'resolved response Blob (mime type: %s)',\n          responseBlob,\n          mimeType\n        )\n\n        return responseBlob\n      }\n\n      default: {\n        const responseText = this.responseBufferToText()\n        this.logger.info(\n          'resolving \"%s\" response type as text',\n          this.request.responseType,\n          responseText\n        )\n\n        return responseText\n      }\n    }\n  }\n\n  get responseText(): string {\n    /**\n     * Throw when trying to read the response body as text when the\n     * \"responseType\" doesn't expect text. This just respects the spec better.\n     * @see https://xhr.spec.whatwg.org/#the-responsetext-attribute\n     */\n    invariant(\n      this.request.responseType === '' || this.request.responseType === 'text',\n      'InvalidStateError: The object is in invalid state.'\n    )\n\n    if (\n      this.request.readyState !== this.request.LOADING &&\n      this.request.readyState !== this.request.DONE\n    ) {\n      return ''\n    }\n\n    const responseText = this.responseBufferToText()\n    this.logger.info('getResponseText: \"%s\"', responseText)\n\n    return responseText\n  }\n\n  get responseXML(): Document | null {\n    invariant(\n      this.request.responseType === '' ||\n        this.request.responseType === 'document',\n      'InvalidStateError: The object is in invalid state.'\n    )\n\n    if (this.request.readyState !== this.request.DONE) {\n      return null\n    }\n\n    const contentType = this.request.getResponseHeader('Content-Type') || ''\n\n    if (typeof DOMParser === 'undefined') {\n      console.warn(\n        'Cannot retrieve XMLHttpRequest response body as XML: DOMParser is not defined. You are likely using an environment that is not browser or does not polyfill browser globals correctly.'\n      )\n      return null\n    }\n\n    if (isDomParserSupportedType(contentType)) {\n      return new DOMParser().parseFromString(\n        this.responseBufferToText(),\n        contentType\n      )\n    }\n\n    return null\n  }\n\n  public errorWith(error: Error): void {\n    this.logger.info('responding with an error')\n\n    this.setReadyState(this.request.DONE)\n    this.trigger('error')\n    this.trigger('loadend')\n  }\n\n  /**\n   * Transitions this request's `readyState` to the given one.\n   */\n  private setReadyState(nextReadyState: number): void {\n    this.logger.info(\n      'setReadyState: %d -> %d',\n      this.request.readyState,\n      nextReadyState\n    )\n\n    if (this.request.readyState === nextReadyState) {\n      this.logger.info('ready state identical, skipping transition...')\n      return\n    }\n\n    define(this.request, 'readyState', nextReadyState)\n\n    this.logger.info('set readyState to: %d', nextReadyState)\n\n    if (nextReadyState !== this.request.UNSENT) {\n      this.logger.info('triggerring \"readystatechange\" event...')\n\n      this.trigger('readystatechange')\n    }\n  }\n\n  /**\n   * Triggers given event on the `XMLHttpRequest` instance.\n   */\n  private trigger<\n    EventName extends keyof (XMLHttpRequestEventTargetEventMap & {\n      readystatechange: ProgressEvent<XMLHttpRequestEventTarget>\n    }),\n  >(eventName: EventName, options?: ProgressEventInit): void {\n    const callback = this.request[`on${eventName}`]\n    const event = createEvent(this.request, eventName, options)\n\n    this.logger.info('trigger \"%s\"', eventName, options || '')\n\n    // Invoke direct callbacks.\n    if (typeof callback === 'function') {\n      this.logger.info('found a direct \"%s\" callback, calling...', eventName)\n      callback.call(this.request, event)\n    }\n\n    // Invoke event listeners.\n    for (const [registeredEventName, listeners] of this.events) {\n      if (registeredEventName === eventName) {\n        this.logger.info(\n          'found %d listener(s) for \"%s\" event, calling...',\n          listeners.length,\n          eventName\n        )\n\n        listeners.forEach((listener) => listener.call(this.request, event))\n      }\n    }\n  }\n\n  /**\n   * Converts this `XMLHttpRequest` instance into a Fetch API `Request` instance.\n   */\n  public toFetchApiRequest(): Request {\n    this.logger.info('converting request to a Fetch API Request...')\n\n    const fetchRequest = new Request(this.url.href, {\n      method: this.method,\n      headers: this.requestHeaders,\n      /**\n       * @see https://xhr.spec.whatwg.org/#cross-origin-credentials\n       */\n      credentials: this.request.withCredentials ? 'include' : 'same-origin',\n      body: ['GET', 'HEAD'].includes(this.method)\n        ? null\n        : (this.requestBody as BodyInit),\n    })\n\n    const proxyHeaders = createProxy(fetchRequest.headers, {\n      methodCall: ([methodName, args], invoke) => {\n        // Forward the latest state of the internal request headers\n        // because the interceptor might have modified them\n        // without responding to the request.\n        switch (methodName) {\n          case 'append':\n          case 'set': {\n            const [headerName, headerValue] = args as [string, string]\n            this.request.setRequestHeader(headerName, headerValue)\n            break\n          }\n\n          case 'delete': {\n            const [headerName] = args as [string]\n            console.warn(\n              `XMLHttpRequest: Cannot remove a \"${headerName}\" header from the Fetch API representation of the \"${fetchRequest.method} ${fetchRequest.url}\" request. XMLHttpRequest headers cannot be removed.`\n            )\n            break\n          }\n        }\n\n        return invoke()\n      },\n    })\n    define(fetchRequest, 'headers', proxyHeaders)\n\n    this.logger.info('converted request to a Fetch API Request!', fetchRequest)\n\n    return fetchRequest\n  }\n}\n\nfunction toAbsoluteUrl(url: string | URL): URL {\n  /**\n   * @note XMLHttpRequest interceptor may run in environments\n   * that implement XMLHttpRequest but don't implement \"location\"\n   * (for example, React Native). If that's the case, return the\n   * input URL as-is (nothing to be relative to).\n   * @see https://github.com/mswjs/msw/issues/1777\n   */\n  if (typeof location === 'undefined') {\n    return new URL(url)\n  }\n\n  return new URL(url.toString(), location.href)\n}\n\nfunction define(\n  target: object,\n  property: string | symbol,\n  value: unknown\n): void {\n  Reflect.defineProperty(target, property, {\n    // Ensure writable properties to allow redefining readonly properties.\n    writable: true,\n    enumerable: true,\n    value,\n  })\n}\n","import { until } from '@open-draft/until'\nimport type { Logger } from '@open-draft/logger'\nimport { XMLHttpRequestEmitter } from '.'\nimport { toInteractiveRequest } from '../../utils/toInteractiveRequest'\nimport { emitAsync } from '../../utils/emitAsync'\nimport { XMLHttpRequestController } from './XMLHttpRequestController'\n\nexport interface XMLHttpRequestProxyOptions {\n  emitter: XMLHttpRequestEmitter\n  logger: Logger\n}\n\n/**\n * Create a proxied `XMLHttpRequest` class.\n * The proxied class establishes spies on certain methods,\n * allowing us to intercept requests and respond to them.\n */\nexport function createXMLHttpRequestProxy({\n  emitter,\n  logger,\n}: XMLHttpRequestProxyOptions) {\n  const XMLHttpRequestProxy = new Proxy(globalThis.XMLHttpRequest, {\n    construct(target, args, newTarget) {\n      logger.info('constructed new XMLHttpRequest')\n\n      const originalRequest = Reflect.construct(\n        target,\n        args,\n        newTarget\n      ) as XMLHttpRequest\n\n      /**\n       * @note Forward prototype descriptors onto the proxied object.\n       * XMLHttpRequest is implemented in JSDOM in a way that assigns\n       * a bunch of descriptors, like \"set responseType()\" on the prototype.\n       * With this propagation, we make sure that those descriptors trigger\n       * when the user operates with the proxied request instance.\n       */\n      const prototypeDescriptors = Object.getOwnPropertyDescriptors(\n        target.prototype\n      )\n      for (const propertyName in prototypeDescriptors) {\n        Reflect.defineProperty(\n          originalRequest,\n          propertyName,\n          prototypeDescriptors[propertyName]\n        )\n      }\n\n      const xhrRequestController = new XMLHttpRequestController(\n        originalRequest,\n        logger\n      )\n\n      xhrRequestController.onRequest = async function ({ request, requestId }) {\n        const { interactiveRequest, requestController } =\n          toInteractiveRequest(request)\n\n        this.logger.info('awaiting mocked response...')\n\n        emitter.once('request', ({ requestId: pendingRequestId }) => {\n          if (pendingRequestId !== requestId) {\n            return\n          }\n\n          if (requestController.responsePromise.state === 'pending') {\n            requestController.respondWith(undefined)\n          }\n        })\n\n        const resolverResult = await until(async () => {\n          this.logger.info(\n            'emitting the \"request\" event for %s listener(s)...',\n            emitter.listenerCount('request')\n          )\n\n          await emitAsync(emitter, 'request', {\n            request: interactiveRequest,\n            requestId,\n          })\n\n          this.logger.info('all \"request\" listeners settled!')\n\n          const mockedResponse = await requestController.responsePromise\n\n          this.logger.info('event.respondWith called with:', mockedResponse)\n\n          return mockedResponse\n        })\n\n        if (resolverResult.error) {\n          this.logger.info(\n            'request listener threw an exception, aborting request...',\n            resolverResult.error\n          )\n\n          /**\n           * @todo Consider forwarding this error to the stderr as well\n           * since not all consumers are expecting to handle errors.\n           * If they don't, this error will be swallowed.\n           */\n          xhrRequestController.errorWith(resolverResult.error)\n          return\n        }\n\n        const mockedResponse = resolverResult.data\n\n        if (typeof mockedResponse !== 'undefined') {\n          this.logger.info(\n            'received mocked response: %d %s',\n            mockedResponse.status,\n            mockedResponse.statusText\n          )\n\n          if (mockedResponse.type === 'error') {\n            this.logger.info(\n              'received a network error response, rejecting the request promise...'\n            )\n\n            xhrRequestController.errorWith(new TypeError('Network error'))\n            return\n          }\n\n          return xhrRequestController.respondWith(mockedResponse)\n        }\n\n        this.logger.info(\n          'no mocked response received, performing request as-is...'\n        )\n      }\n\n      xhrRequestController.onResponse = async function ({\n        response,\n        isMockedResponse,\n        request,\n        requestId,\n      }) {\n        this.logger.info(\n          'emitting the \"response\" event for %s listener(s)...',\n          emitter.listenerCount('response')\n        )\n\n        emitter.emit('response', {\n          response,\n          isMockedResponse,\n          request,\n          requestId,\n        })\n      }\n\n      // Return the proxied request from the controller\n      // so that the controller can react to the consumer's interactions\n      // with this request (opening/sending/etc).\n      return xhrRequestController.request\n    },\n  })\n\n  return XMLHttpRequestProxy\n}\n","import { invariant } from 'outvariant'\nimport { Emitter } from 'strict-event-emitter'\nimport { HttpRequestEventMap, IS_PATCHED_MODULE } from '../../glossary'\nimport { InteractiveRequest } from '../../utils/toInteractiveRequest'\nimport { Interceptor } from '../../Interceptor'\nimport { createXMLHttpRequestProxy } from './XMLHttpRequestProxy'\n\nexport type XMLHttpRequestEventListener = (args: {\n  request: InteractiveRequest\n  requestId: string\n}) => Promise<void> | void\n\nexport type XMLHttpRequestEmitter = Emitter<HttpRequestEventMap>\n\nexport class XMLHttpRequestInterceptor extends Interceptor<HttpRequestEventMap> {\n  static interceptorSymbol = Symbol('xhr')\n\n  constructor() {\n    super(XMLHttpRequestInterceptor.interceptorSymbol)\n  }\n\n  protected checkEnvironment() {\n    return typeof globalThis.XMLHttpRequest !== 'undefined'\n  }\n\n  protected setup() {\n    const logger = this.logger.extend('setup')\n\n    logger.info('patching \"XMLHttpRequest\" module...')\n\n    const PureXMLHttpRequest = globalThis.XMLHttpRequest\n\n    invariant(\n      !(PureXMLHttpRequest as any)[IS_PATCHED_MODULE],\n      'Failed to patch the \"XMLHttpRequest\" module: already patched.'\n    )\n\n    globalThis.XMLHttpRequest = createXMLHttpRequestProxy({\n      emitter: this.emitter,\n      logger: this.logger,\n    })\n\n    logger.info(\n      'native \"XMLHttpRequest\" module patched!',\n      globalThis.XMLHttpRequest.name\n    )\n\n    Object.defineProperty(globalThis.XMLHttpRequest, IS_PATCHED_MODULE, {\n      enumerable: true,\n      configurable: true,\n      value: true,\n    })\n\n    this.subscriptions.push(() => {\n      Object.defineProperty(globalThis.XMLHttpRequest, IS_PATCHED_MODULE, {\n        value: undefined,\n      })\n\n      globalThis.XMLHttpRequest = PureXMLHttpRequest\n      logger.info(\n        'native \"XMLHttpRequest\" module restored!',\n        globalThis.XMLHttpRequest.name\n      )\n    })\n  }\n}\n","import {\n  Interceptor,\n  BatchInterceptor,\n  HttpRequestEventMap,\n} from '@mswjs/interceptors'\nimport { FetchInterceptor } from '@mswjs/interceptors/fetch'\nimport { XMLHttpRequestInterceptor } from '@mswjs/interceptors/XMLHttpRequest'\nimport { SetupWorkerInternalContext, StartOptions } from '../glossary'\nimport type { RequiredDeep } from '~/core/typeUtils'\nimport { handleRequest } from '~/core/utils/handleRequest'\n\nexport function createFallbackRequestListener(\n  context: SetupWorkerInternalContext,\n  options: RequiredDeep<StartOptions>,\n): Interceptor<HttpRequestEventMap> {\n  const interceptor = new BatchInterceptor({\n    name: 'fallback',\n    interceptors: [new FetchInterceptor(), new XMLHttpRequestInterceptor()],\n  })\n\n  interceptor.on('request', async ({ request, requestId }) => {\n    const requestCloneForLogs = request.clone()\n\n    const response = await handleRequest(\n      request,\n      requestId,\n      context.getRequestHandlers(),\n      options,\n      context.emitter,\n      {\n        onMockedResponse(_, { handler, parsedResult }) {\n          if (!options.quiet) {\n            context.emitter.once('response:mocked', ({ response }) => {\n              handler.log({\n                request: requestCloneForLogs,\n                response,\n                parsedResult,\n              })\n            })\n          }\n        },\n      },\n    )\n\n    if (response) {\n      request.respondWith(response)\n    }\n  })\n\n  interceptor.on(\n    'response',\n    ({ response, isMockedResponse, request, requestId }) => {\n      context.emitter.emit(\n        isMockedResponse ? 'response:mocked' : 'response:bypass',\n        {\n          response,\n          request,\n          requestId,\n        },\n      )\n    },\n  )\n\n  interceptor.apply()\n\n  return interceptor\n}\n","import { createFallbackRequestListener } from './createFallbackRequestListener'\nimport { SetupWorkerInternalContext, StartHandler } from '../glossary'\nimport { printStartMessage } from './utils/printStartMessage'\n\nexport function createFallbackStart(\n  context: SetupWorkerInternalContext,\n): StartHandler {\n  return async function start(options) {\n    context.fallbackInterceptor = createFallbackRequestListener(\n      context,\n      options,\n    )\n\n    printStartMessage({\n      message: 'Mocking enabled (fallback mode).',\n      quiet: options.quiet,\n    })\n\n    return undefined\n  }\n}\n","import { SetupWorkerInternalContext, StopHandler } from '../glossary'\nimport { printStopMessage } from './utils/printStopMessage'\n\nexport function createFallbackStop(\n  context: SetupWorkerInternalContext,\n): StopHandler {\n  return function stop() {\n    context.fallbackInterceptor?.dispose()\n    printStopMessage({ quiet: context.startOptions?.quiet })\n  }\n}\n","/**\n * Returns a boolean indicating whether the current browser\n * supports `ReadableStream` as a `Transferable` when posting\n * messages.\n */\nexport function supportsReadableStreamTransfer() {\n  try {\n    const stream = new ReadableStream({\n      start: (controller) => controller.close(),\n    })\n    const message = new MessageChannel()\n    message.port1.postMessage(stream, [stream])\n    return true\n  } catch (error) {\n    return false\n  }\n}\n","import { invariant } from 'outvariant'\nimport { isNodeProcess } from 'is-node-process'\nimport {\n  SetupWorkerInternalContext,\n  ServiceWorkerIncomingEventsMap,\n  StartReturnType,\n  StopHandler,\n  StartHandler,\n  StartOptions,\n} from './glossary'\nimport { createStartHandler } from './start/createStartHandler'\nimport { createStop } from './stop/createStop'\nimport { ServiceWorkerMessage } from './start/utils/createMessageChannel'\nimport { RequestHandler } from '~/core/handlers/RequestHandler'\nimport { DEFAULT_START_OPTIONS } from './start/utils/prepareStartHandler'\nimport { createFallbackStart } from './start/createFallbackStart'\nimport { createFallbackStop } from './stop/createFallbackStop'\nimport { devUtils } from '~/core/utils/internal/devUtils'\nimport { SetupApi } from '~/core/SetupApi'\nimport { mergeRight } from '~/core/utils/internal/mergeRight'\nimport { LifeCycleEventsMap } from '~/core/sharedOptions'\nimport { SetupWorker } from './glossary'\nimport { supportsReadableStreamTransfer } from '../utils/supportsReadableStreamTransfer'\n\ninterface Listener {\n  target: EventTarget\n  eventType: string\n  callback: EventListenerOrEventListenerObject\n}\n\nexport class SetupWorkerApi\n  extends SetupApi<LifeCycleEventsMap>\n  implements SetupWorker\n{\n  private context: SetupWorkerInternalContext\n  private startHandler: StartHandler = null as any\n  private stopHandler: StopHandler = null as any\n  private listeners: Array<Listener>\n\n  constructor(...handlers: Array<RequestHandler>) {\n    super(...handlers)\n\n    invariant(\n      !isNodeProcess(),\n      devUtils.formatMessage(\n        'Failed to execute `setupWorker` in a non-browser environment. Consider using `setupServer` for Node.js environment instead.',\n      ),\n    )\n\n    this.listeners = []\n    this.context = this.createWorkerContext()\n  }\n\n  private createWorkerContext(): SetupWorkerInternalContext {\n    const context: SetupWorkerInternalContext = {\n      // Mocking is not considered enabled until the worker\n      // signals back the successful activation event.\n      isMockingEnabled: false,\n      startOptions: null as any,\n      worker: null,\n      getRequestHandlers: () => {\n        return this.handlersController.currentHandlers()\n      },\n      registration: null,\n      requests: new Map(),\n      emitter: this.emitter,\n      workerChannel: {\n        on: (eventType, callback) => {\n          this.context.events.addListener<\n            MessageEvent<ServiceWorkerMessage<typeof eventType, any>>\n          >(navigator.serviceWorker, 'message', (event) => {\n            // Avoid messages broadcasted from unrelated workers.\n            if (event.source !== this.context.worker) {\n              return\n            }\n\n            const message = event.data\n\n            if (!message) {\n              return\n            }\n\n            if (message.type === eventType) {\n              callback(event, message)\n            }\n          })\n        },\n        send: (type) => {\n          this.context.worker?.postMessage(type)\n        },\n      },\n      events: {\n        addListener: (target, eventType, callback) => {\n          target.addEventListener(eventType, callback as EventListener)\n          this.listeners.push({\n            eventType,\n            target,\n            callback: callback as EventListener,\n          })\n\n          return () => {\n            target.removeEventListener(eventType, callback as EventListener)\n          }\n        },\n        removeAllListeners: () => {\n          for (const { target, eventType, callback } of this.listeners) {\n            target.removeEventListener(eventType, callback)\n          }\n          this.listeners = []\n        },\n        once: (eventType) => {\n          const bindings: Array<() => void> = []\n\n          return new Promise<\n            ServiceWorkerMessage<\n              typeof eventType,\n              ServiceWorkerIncomingEventsMap[typeof eventType]\n            >\n          >((resolve, reject) => {\n            const handleIncomingMessage = (event: MessageEvent) => {\n              try {\n                const message = event.data\n\n                if (message.type === eventType) {\n                  resolve(message)\n                }\n              } catch (error) {\n                reject(error)\n              }\n            }\n\n            bindings.push(\n              this.context.events.addListener(\n                navigator.serviceWorker,\n                'message',\n                handleIncomingMessage,\n              ),\n              this.context.events.addListener(\n                navigator.serviceWorker,\n                'messageerror',\n                reject,\n              ),\n            )\n          }).finally(() => {\n            bindings.forEach((unbind) => unbind())\n          })\n        },\n      },\n      supports: {\n        serviceWorkerApi:\n          !('serviceWorker' in navigator) || location.protocol === 'file:',\n        readableStreamTransfer: supportsReadableStreamTransfer(),\n      },\n    }\n\n    this.startHandler = context.supports.serviceWorkerApi\n      ? createFallbackStart(context)\n      : createStartHandler(context)\n\n    this.stopHandler = context.supports.serviceWorkerApi\n      ? createFallbackStop(context)\n      : createStop(context)\n\n    return context\n  }\n\n  public async start(options: StartOptions = {}): StartReturnType {\n    if (options.waitUntilReady === true) {\n      devUtils.warn(\n        'The \"waitUntilReady\" option has been deprecated. Please remove it from this \"worker.start()\" call. Follow the recommended Browser integration (https://mswjs.io/docs/integrations/browser) to eliminate any race conditions between the Service Worker registration and any requests made by your application on initial render.',\n      )\n    }\n\n    this.context.startOptions = mergeRight(\n      DEFAULT_START_OPTIONS,\n      options,\n    ) as SetupWorkerInternalContext['startOptions']\n\n    return await this.startHandler(this.context.startOptions, options)\n  }\n\n  public stop(): void {\n    super.dispose()\n    this.context.events.removeAllListeners()\n    this.context.emitter.removeAllListeners()\n    this.stopHandler()\n  }\n}\n\n/**\n * Sets up a requests interception in the browser with the given request handlers.\n * @param {RequestHandler[]} handlers List of request handlers.\n *\n * @see {@link https://mswjs.io/docs/api/setup-worker `setupWorker()` API reference}\n */\nexport function setupWorker(...handlers: Array<RequestHandler>): SetupWorker {\n  return new SetupWorkerApi(...handlers)\n}\n","import type { RequestHandler } from \"msw\";\nimport type { SetupWorker, StartOptions } from \"msw/browser\";\nimport { setupWorker } from \"msw/browser\";\nimport { isNodeProcess } from \"is-node-process\";\n\nexport type MswParameters = {\n  msw?: {\n    handlers: RequestHandler[];\n    originalResponses: Record<string, any>;\n  };\n};\n\ntype Context = {\n  parameters: MswParameters;\n  viewMode: string;\n};\n\nlet worker: SetupWorker;\nlet opt: StartOptions;\nlet initialHandlers: RequestHandler[] = [];\n\nexport const initialize = async (options?: StartOptions, handlers: RequestHandler[] = []) => {\n  opt = options;\n  initialHandlers = handlers;\n};\n\nconst setupHandlers = (msw: MswParameters[\"msw\"]) => {\n  if (worker) {\n    worker.resetHandlers(...initialHandlers);\n    if (msw) {\n      if (Array.isArray(msw) && msw.length > 0) {\n        worker.use(...msw);\n      } else if (\"handlers\" in msw && msw.handlers) {\n        const handlers = Object.values(msw.handlers)\n          .filter(Boolean)\n          .reduce(\n            (handlers, handlersList) => handlers.concat(handlersList),\n            [] as RequestHandler[],\n          );\n\n        if (handlers.length > 0) {\n          worker.use(...handlers);\n        }\n      }\n    }\n  }\n};\n\nexport const mswLoader = async (context: Context) => {\n  const {\n    parameters: { msw },\n    viewMode,\n  } = context;\n\n  if (!msw || isNodeProcess()) {\n    return;\n  }\n\n  if (window.__MSW_STORYBOOK__ && window.__MSW_STORYBOOK__.worker) {\n    setupHandlers(msw);\n    return;\n  }\n\n  if (viewMode === \"docs\" && window.__MSW_STORYBOOK__ && window.__MSW_STORYBOOK__.worker) {\n    worker = window.__MSW_STORYBOOK__.worker;\n  } else {\n    worker = setupWorker();\n  }\n\n  await worker.start(opt);\n  setupHandlers(msw);\n\n  if (worker) {\n    window.__MSW_STORYBOOK__ = window.__MSW_STORYBOOK__ || {};\n    window.__MSW_STORYBOOK__.worker = worker;\n  }\n  return {};\n};\n"]}