{"version":3,"sources":["../../node_modules/.pnpm/outvariant@1.4.3/node_modules/outvariant/src/format.ts","../../node_modules/.pnpm/outvariant@1.4.3/node_modules/outvariant/src/invariant.ts","../../node_modules/.pnpm/is-node-process@1.2.0/node_modules/is-node-process/src/index.ts","../../node_modules/.pnpm/@open-draft+deferred-promise@2.2.0/node_modules/@open-draft/deferred-promise/src/createDeferredExecutor.ts","../../node_modules/.pnpm/@open-draft+deferred-promise@2.2.0/node_modules/@open-draft/deferred-promise/src/DeferredPromise.ts","../../src/browser/setupWorker/start/utils/prepareStartHandler.ts","../../src/browser/setupWorker/start/createStartHandler.ts","../../node_modules/.pnpm/until-async@3.0.2/node_modules/until-async/src/index.ts","../../src/browser/setupWorker/start/utils/getWorkerInstance.ts","../../src/browser/utils/getAbsoluteWorkerUrl.ts","../../src/browser/setupWorker/start/utils/getWorkerByRegistration.ts","../../src/browser/setupWorker/start/utils/printStartMessage.ts","../../src/browser/setupWorker/start/utils/enableMocking.ts","../../src/browser/utils/pruneGetRequestBody.ts","../../src/browser/utils/deserializeRequest.ts","../../src/browser/utils/supports.ts","../../src/browser/setupWorker/start/createRequestListener.ts","../../src/browser/utils/checkWorkerIntegrity.ts","../../node_modules/.pnpm/@mswjs+interceptors@0.41.2/node_modules/@mswjs/interceptors/src/glossary.ts","../../node_modules/.pnpm/@mswjs+interceptors@0.41.2/node_modules/@mswjs/interceptors/src/InterceptorError.ts","../../node_modules/.pnpm/@mswjs+interceptors@0.41.2/node_modules/@mswjs/interceptors/src/RequestController.ts","../../node_modules/.pnpm/@mswjs+interceptors@0.41.2/node_modules/@mswjs/interceptors/src/utils/canParseUrl.ts","../../node_modules/.pnpm/@mswjs+interceptors@0.41.2/node_modules/@mswjs/interceptors/src/utils/getValueBySymbol.ts","../../node_modules/.pnpm/@mswjs+interceptors@0.41.2/node_modules/@mswjs/interceptors/src/utils/fetchUtils.ts","../../node_modules/.pnpm/@mswjs+interceptors@0.41.2/node_modules/@mswjs/interceptors/src/getRawRequest.ts","../../node_modules/.pnpm/@open-draft+logger@0.3.0/node_modules/@open-draft/logger/lib/index.mjs","../../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/@mswjs+interceptors@0.41.2/node_modules/@mswjs/interceptors/src/Interceptor.ts","../../node_modules/.pnpm/@mswjs+interceptors@0.41.2/node_modules/@mswjs/interceptors/src/createRequestId.ts","../../node_modules/.pnpm/@mswjs+interceptors@0.41.2/node_modules/@mswjs/interceptors/src/utils/bufferUtils.ts","../../node_modules/.pnpm/@mswjs+interceptors@0.41.2/node_modules/@mswjs/interceptors/src/BatchInterceptor.ts","../../node_modules/.pnpm/@mswjs+interceptors@0.41.2/node_modules/@mswjs/interceptors/src/utils/getCleanUrl.ts","../../src/browser/setupWorker/start/createResponseListener.ts","../../src/browser/setupWorker/start/utils/validateWorkerScope.ts","../../src/browser/setupWorker/setupWorker.ts","../../node_modules/.pnpm/rettime@0.10.1/node_modules/rettime/src/lens-list.ts","../../node_modules/.pnpm/rettime@0.10.1/node_modules/rettime/src/index.ts","../../src/browser/utils/workerChannel.ts","../../node_modules/.pnpm/@mswjs+interceptors@0.41.2/node_modules/@mswjs/interceptors/src/utils/emitAsync.ts","../../node_modules/.pnpm/@mswjs+interceptors@0.41.2/node_modules/@mswjs/interceptors/src/utils/hasConfigurableGlobal.ts","../../node_modules/.pnpm/@open-draft+until@2.1.0/node_modules/@open-draft/until/src/until.ts","../../node_modules/.pnpm/@mswjs+interceptors@0.41.2/node_modules/@mswjs/interceptors/src/utils/isObject.ts","../../node_modules/.pnpm/@mswjs+interceptors@0.41.2/node_modules/@mswjs/interceptors/src/utils/isPropertyAccessible.ts","../../node_modules/.pnpm/@mswjs+interceptors@0.41.2/node_modules/@mswjs/interceptors/src/utils/responseUtils.ts","../../node_modules/.pnpm/@mswjs+interceptors@0.41.2/node_modules/@mswjs/interceptors/src/utils/isNodeLikeError.ts","../../node_modules/.pnpm/@mswjs+interceptors@0.41.2/node_modules/@mswjs/interceptors/src/utils/handleRequest.ts","../../node_modules/.pnpm/@mswjs+interceptors@0.41.2/node_modules/@mswjs/interceptors/src/interceptors/fetch/utils/createNetworkError.ts","../../node_modules/.pnpm/@mswjs+interceptors@0.41.2/node_modules/@mswjs/interceptors/src/interceptors/fetch/utils/followRedirect.ts","../../node_modules/.pnpm/@mswjs+interceptors@0.41.2/node_modules/@mswjs/interceptors/src/interceptors/fetch/utils/brotli-decompress.browser.ts","../../node_modules/.pnpm/@mswjs+interceptors@0.41.2/node_modules/@mswjs/interceptors/src/interceptors/fetch/utils/decompression.ts","../../node_modules/.pnpm/@mswjs+interceptors@0.41.2/node_modules/@mswjs/interceptors/src/interceptors/fetch/index.ts","../../node_modules/.pnpm/@mswjs+interceptors@0.41.2/node_modules/@mswjs/interceptors/src/interceptors/XMLHttpRequest/utils/concatArrayBuffer.ts","../../node_modules/.pnpm/@mswjs+interceptors@0.41.2/node_modules/@mswjs/interceptors/src/interceptors/XMLHttpRequest/polyfills/EventPolyfill.ts","../../node_modules/.pnpm/@mswjs+interceptors@0.41.2/node_modules/@mswjs/interceptors/src/interceptors/XMLHttpRequest/polyfills/ProgressEventPolyfill.ts","../../node_modules/.pnpm/@mswjs+interceptors@0.41.2/node_modules/@mswjs/interceptors/src/interceptors/XMLHttpRequest/utils/createEvent.ts","../../node_modules/.pnpm/@mswjs+interceptors@0.41.2/node_modules/@mswjs/interceptors/src/utils/findPropertySource.ts","../../node_modules/.pnpm/@mswjs+interceptors@0.41.2/node_modules/@mswjs/interceptors/src/utils/createProxy.ts","../../node_modules/.pnpm/@mswjs+interceptors@0.41.2/node_modules/@mswjs/interceptors/src/interceptors/XMLHttpRequest/utils/isDomParserSupportedType.ts","../../node_modules/.pnpm/@mswjs+interceptors@0.41.2/node_modules/@mswjs/interceptors/src/utils/parseJson.ts","../../node_modules/.pnpm/@mswjs+interceptors@0.41.2/node_modules/@mswjs/interceptors/src/interceptors/XMLHttpRequest/utils/createResponse.ts","../../node_modules/.pnpm/@mswjs+interceptors@0.41.2/node_modules/@mswjs/interceptors/src/interceptors/XMLHttpRequest/utils/getBodyByteLength.ts","../../node_modules/.pnpm/@mswjs+interceptors@0.41.2/node_modules/@mswjs/interceptors/src/interceptors/XMLHttpRequest/XMLHttpRequestController.ts","../../node_modules/.pnpm/@mswjs+interceptors@0.41.2/node_modules/@mswjs/interceptors/src/interceptors/XMLHttpRequest/XMLHttpRequestProxy.ts","../../node_modules/.pnpm/@mswjs+interceptors@0.41.2/node_modules/@mswjs/interceptors/src/interceptors/XMLHttpRequest/index.ts","../../src/browser/setupWorker/start/createFallbackRequestListener.ts","../../src/browser/setupWorker/stop/utils/printStopMessage.ts"],"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 =\n      positionals.length === 0 ? message : format(message, ...positionals)\n    let error: Error\n\n    try {\n      error = Reflect.construct(ErrorConstructor as CustomErrorConstructor, [\n        formatMessage,\n      ])\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 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 { 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","import { devUtils } from '~/core/utils/internal/devUtils'\nimport { getWorkerInstance } from './utils/getWorkerInstance'\nimport { enableMocking } from './utils/enableMocking'\nimport type { SetupWorkerInternalContext, StartHandler } from '../glossary'\nimport { createRequestListener } from './createRequestListener'\nimport { checkWorkerIntegrity } from '../../utils/checkWorkerIntegrity'\nimport { createResponseListener } from './createResponseListener'\nimport { validateWorkerScope } from './utils/validateWorkerScope'\nimport { DeferredPromise } from '@open-draft/deferred-promise'\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.workerChannel.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.workerPromise.resolve(worker)\n      context.registration = registration\n\n      window.addEventListener('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.postMessage('CLIENT_CLOSED')\n        }\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        // Notify others about this client disconnecting.\n        // E.g. this will purge the in-memory WebSocket clients since\n        // starting the worker again will assign them new IDs.\n        window.postMessage({ type: 'msw/worker:stop' })\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) and include the original error below.',\n        )\n        console.error(error)\n      })\n\n      context.keepAliveInterval = window.setInterval(\n        () => context.workerChannel.postMessage('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        if (pendingInstance) {\n          const activationPromise = new DeferredPromise<void>()\n\n          pendingInstance.addEventListener('statechange', () => {\n            if (pendingInstance.state === 'activated') {\n              activationPromise.resolve()\n            }\n          })\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          await activationPromise\n        }\n\n        // Print the activation message only after the worker has been activated.\n        await enableMocking(context, options).catch((error) => {\n          devUtils.error(\n            'Failed to enable mocking. Please report this on GitHub (https://github.com/mswjs/msw/issues) and include the original error below.',\n          )\n          throw error\n        })\n\n        return registration\n      },\n    )\n\n    return workerRegistration\n  }\n}\n","export type UntilResult<RejectionReason, ResolveData> =\n  | [reason: RejectionReason, data: null]\n  | [reason: null, data: ResolveData]\n\n/**\n * Gracefully handles a callback that returns a promise.\n *\n * @example\n * await until(() => Promise.resolve(123))\n * // [null, 123]\n *\n * await until(() => Promise.reject(new Error('Oops!')))\n * // [new Error('Oops!'), null]\n */\nexport async function until<RejectionReason = Error, ResolveData = unknown>(\n  callback: () => Promise<ResolveData>,\n): Promise<UntilResult<RejectionReason, ResolveData>> {\n  try {\n    const data = await callback().catch((error) => {\n      throw error\n    })\n    return [null, data]\n  } catch (error: any) {\n    return [error, null]\n  }\n}\n","import { until } from 'until-async'\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    // Schedule the worker update in the background.\n    // Update ensures the existing worker is up-to-date.\n    existingRegistration.update()\n\n    // Return the worker reference immediately.\n    return [\n      getWorkerByRegistration(\n        existingRegistration,\n        absoluteWorkerUrl,\n        findWorker,\n      ),\n      existingRegistration,\n    ]\n  }\n\n  // When the Service Worker wasn't found, register it anew and return the reference.\n  const [registrationError, registrationResult] = await until<\n    Error,\n    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  // Handle Service Worker registration errors.\n  if (registrationError) {\n    const isWorkerMissing = registrationError.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        registrationError.message,\n      ),\n    )\n  }\n\n  return registrationResult\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 type { ServiceWorkerIncomingEventsMap } from '../../glossary'\nimport { devUtils } from '~/core/utils/internal/devUtils'\n\ninterface PrintStartMessageArgs {\n  quiet?: boolean\n  message?: string\n  workerUrl?: string\n  workerScope?: string\n  client?: ServiceWorkerIncomingEventsMap['MOCKING_ENABLED']['client']\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  // eslint-disable-next-line no-console\n  console.log(\n    '%cDocumentation: %chttps://mswjs.io/docs',\n    'font-weight:bold',\n    'font-weight:normal',\n  )\n  // eslint-disable-next-line no-console\n  console.log('Found an issue? https://github.com/mswjs/msw/issues')\n\n  if (args.workerUrl) {\n    // eslint-disable-next-line no-console\n    console.log('Worker script URL:', args.workerUrl)\n  }\n\n  if (args.workerScope) {\n    // eslint-disable-next-line no-console\n    console.log('Worker scope:', args.workerScope)\n  }\n\n  if (args.client) {\n    // eslint-disable-next-line no-console\n    console.log('Client ID: %s (%s)', args.client.id, args.client.frameType)\n  }\n\n  console.groupEnd()\n}\n","import { DeferredPromise } from '@open-draft/deferred-promise'\nimport type { StartOptions, SetupWorkerInternalContext } from '../../glossary'\nimport { printStartMessage } from './printStartMessage'\n\n/**\n * Signals the worker to enable the interception of requests.\n */\nexport function enableMocking(\n  context: SetupWorkerInternalContext,\n  options: StartOptions,\n): Promise<boolean> {\n  const mockingEnabledPromise = new DeferredPromise<boolean>()\n\n  context.workerChannel.postMessage('MOCK_ACTIVATE')\n  context.workerChannel.once('MOCKING_ENABLED', async (event) => {\n    context.isMockingEnabled = true\n    const worker = await context.workerPromise\n\n    printStartMessage({\n      quiet: options.quiet,\n      workerScope: context.registration?.scope,\n      workerUrl: worker.scriptURL,\n      client: event.data.client,\n    })\n\n    mockingEnabledPromise.resolve(true)\n  })\n\n  return mockingEnabledPromise\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 deserializeRequest(\n  serializedRequest: ServiceWorkerIncomingRequest,\n): Request {\n  return new Request(serializedRequest.url, {\n    ...serializedRequest,\n    body: pruneGetRequestBody(serializedRequest),\n  })\n}\n","/**\n * Checks if the Service Worker API is supproted and available\n * in the current browsing context.\n */\nexport function supportsServiceWorker(): boolean {\n  return (\n    typeof navigator !== 'undefined' &&\n    'serviceWorker' in navigator &&\n    typeof location !== 'undefined' &&\n    location.protocol !== 'file:'\n  )\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 {\n    return false\n  }\n}\n","import { Emitter } from 'rettime'\nimport { StartOptions, SetupWorkerInternalContext } from '../glossary'\nimport { deserializeRequest } from '../../utils/deserializeRequest'\nimport { supportsReadableStreamTransfer } from '../../utils/supports'\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'\nimport { isHandlerKind } from '~/core/utils/internal/isHandlerKind'\n\nconst SUPPORTS_READABLE_STREAM_TRANSFER = supportsReadableStreamTransfer()\n\nexport const createRequestListener = (\n  context: SetupWorkerInternalContext,\n  options: RequiredDeep<StartOptions>,\n): Emitter.ListenerType<typeof context.workerChannel, 'REQUEST'> => {\n  return async (event) => {\n    // Treat any incoming requests from the worker as passthrough\n    // if `worker.stop()` has been called for this client.\n    if (\n      !context.isMockingEnabled &&\n      context.workerStoppedAt &&\n      event.data.interceptedAt > context.workerStoppedAt\n    ) {\n      event.postMessage('PASSTHROUGH')\n      return\n    }\n\n    const requestId = event.data.id\n    const request = deserializeRequest(event.data)\n    const requestCloneForLogs = request.clone()\n\n    // Make this the first request 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\n    try {\n      await handleRequest(\n        request,\n        requestId,\n        context.getRequestHandlers().filter(isHandlerKind('RequestHandler')),\n        options,\n        context.emitter,\n        {\n          resolutionContext: {\n            quiet: options.quiet,\n          },\n          onPassthroughResponse() {\n            event.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 (SUPPORTS_READABLE_STREAM_TRANSFER) {\n              const responseStreamOrNull = response.body\n\n              event.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              event.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/http/mocking-responses/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        event.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'\nimport { DeferredPromise } from '@open-draft/deferred-promise'\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 function checkWorkerIntegrity(\n  context: SetupWorkerInternalContext,\n): Promise<void> {\n  const integrityCheckPromise = new DeferredPromise<void>()\n\n  // Request the integrity checksum from the registered worker.\n  context.workerChannel.postMessage('INTEGRITY_CHECK_REQUEST')\n  context.workerChannel.once('INTEGRITY_CHECK_RESPONSE', (event) => {\n    const { checksum, packageVersion } = event.data\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 (checksum !== SERVICE_WORKER_CHECKSUM) {\n      devUtils.warn(\n        `The currently registered Service Worker has been generated by a different version of MSW (${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    integrityCheckPromise.resolve()\n  })\n\n  return integrityCheckPromise\n}\n","import type { RequestController } from './RequestController'\n\nexport const IS_PATCHED_MODULE: unique symbol = Symbol('isPatchedModule')\n\n/**\n * @note Export `RequestController` as a type only.\n * It's never meant to be created in the userland.\n */\nexport type { RequestController }\n\nexport type RequestCredentials = 'omit' | 'include' | 'same-origin'\n\nexport type HttpRequestEventMap = {\n  request: [\n    args: {\n      request: Request\n      requestId: string\n      controller: RequestController\n    }\n  ]\n  response: [\n    args: {\n      response: Response\n      isMockedResponse: boolean\n      request: Request\n      requestId: string\n    }\n  ]\n  unhandledException: [\n    args: {\n      error: unknown\n      request: Request\n      requestId: string\n      controller: RequestController\n    }\n  ]\n}\n","export class InterceptorError extends Error {\n  constructor(message?: string) {\n    super(message)\n    this.name = 'InterceptorError'\n    Object.setPrototypeOf(this, InterceptorError.prototype)\n  }\n}\n","import { DeferredPromise } from '@open-draft/deferred-promise'\nimport { invariant } from 'outvariant'\nimport { InterceptorError } from './InterceptorError'\n\nexport interface RequestControllerSource {\n  passthrough(): void\n  respondWith(response: Response): void\n  errorWith(reason?: unknown): void\n}\n\nexport class RequestController {\n  static PENDING = 0 as const\n  static PASSTHROUGH = 1 as const\n  static RESPONSE = 2 as const\n  static ERROR = 3 as const\n\n  public readyState: number\n\n  /**\n   * A Promise that resolves when this controller handles a request.\n   * See `controller.readyState` for more information on the handling result.\n   */\n  public handled: Promise<void>\n\n  constructor(\n    protected readonly request: Request,\n    protected readonly source: RequestControllerSource\n  ) {\n    this.readyState = RequestController.PENDING\n    this.handled = new DeferredPromise<void>()\n  }\n\n  get #handled() {\n    return this.handled as DeferredPromise<void>\n  }\n\n  /**\n   * Perform this request as-is.\n   */\n  public async passthrough(): Promise<void> {\n    invariant.as(\n      InterceptorError,\n      this.readyState === RequestController.PENDING,\n      'Failed to passthrough the \"%s %s\" request: the request has already been handled',\n      this.request.method,\n      this.request.url\n    )\n\n    this.readyState = RequestController.PASSTHROUGH\n    await this.source.passthrough()\n    this.#handled.resolve()\n  }\n\n  /**\n   * Respond to this request with the given `Response` instance.\n   *\n   * @example\n   * controller.respondWith(new Response())\n   * controller.respondWith(Response.json({ id }))\n   * controller.respondWith(Response.error())\n   */\n  public respondWith(response: Response): void {\n    invariant.as(\n      InterceptorError,\n      this.readyState === RequestController.PENDING,\n      'Failed to respond to the \"%s %s\" request with \"%d %s\": the request has already been handled (%d)',\n      this.request.method,\n      this.request.url,\n      response.status,\n      response.statusText || 'OK',\n      this.readyState\n    )\n\n    this.readyState = RequestController.RESPONSE\n    this.#handled.resolve()\n\n    /**\n     * @note Although `source.respondWith()` is potentially asynchronous,\n     * do NOT await it for backward-compatibility. Awaiting it will short-circuit\n     * the request listener invocation as soon as a listener responds to a request.\n     * Ideally, that's what we want, but that's not what we promise the user.\n     */\n    this.source.respondWith(response)\n  }\n\n  /**\n   * Error this request with the given reason.\n   *\n   * @example\n   * controller.errorWith()\n   * controller.errorWith(new Error('Oops!'))\n   * controller.errorWith({ message: 'Oops!'})\n   */\n  public errorWith(reason?: unknown): void {\n    invariant.as(\n      InterceptorError,\n      this.readyState === RequestController.PENDING,\n      'Failed to error the \"%s %s\" request with \"%s\": the request has already been handled (%d)',\n      this.request.method,\n      this.request.url,\n      reason?.toString(),\n      this.readyState\n    )\n\n    this.readyState = RequestController.ERROR\n    this.source.errorWith(reason)\n    this.#handled.resolve()\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","/**\n * Returns the value behind the symbol with the given name.\n */\nexport function getValueBySymbol<T>(\n  symbolName: string,\n  source: object\n): T | undefined {\n  const ownSymbols = Object.getOwnPropertySymbols(source)\n\n  const symbol = ownSymbols.find((symbol) => {\n    return symbol.description === symbolName\n  })\n\n  if (symbol) {\n    return Reflect.get(source, symbol)\n  }\n\n  return\n}\n","import { canParseUrl } from './canParseUrl'\nimport { getValueBySymbol } from './getValueBySymbol'\n\nexport interface FetchResponseInit extends ResponseInit {\n  url?: string\n}\n\ninterface UndiciFetchInternalState {\n  aborted: boolean\n  rangeRequested: boolean\n  timingAllowPassed: boolean\n  requestIncludesCredentials: boolean\n  type: ResponseType\n  status: number\n  statusText: string\n  timingInfo: unknown\n  cacheState: unknown\n  headersList: Record<symbol, Map<string, unknown>>\n  urlList: Array<URL>\n  body?: {\n    stream: ReadableStream\n    source: unknown\n    length: number\n  }\n}\n\nexport class FetchResponse extends Response {\n  /**\n   * Response status codes for responses that cannot have body.\n   * @see https://fetch.spec.whatwg.org/#statuses\n   */\n  static readonly STATUS_CODES_WITHOUT_BODY = [101, 103, 204, 205, 304]\n\n  static readonly STATUS_CODES_WITH_REDIRECT = [301, 302, 303, 307, 308]\n\n  static isConfigurableStatusCode(status: number): boolean {\n    return status >= 200 && status <= 599\n  }\n\n  static isRedirectResponse(status: number): boolean {\n    return FetchResponse.STATUS_CODES_WITH_REDIRECT.includes(status)\n  }\n\n  /**\n   * Returns a boolean indicating whether the given response status\n   * code represents a response that can have a body.\n   */\n  static isResponseWithBody(status: number): boolean {\n    return !FetchResponse.STATUS_CODES_WITHOUT_BODY.includes(status)\n  }\n\n  static setUrl(url: string | undefined, response: Response): void {\n    if (!url || url === 'about:' || !canParseUrl(url)) {\n      return\n    }\n\n    const state = getValueBySymbol<UndiciFetchInternalState>('state', response)\n\n    if (state) {\n      // In Undici, push the URL to the internal list of URLs.\n      // This will respect the `response.url` getter logic correctly.\n      state.urlList.push(new URL(url))\n    } else {\n      // In other libraries, redefine the `url` property directly.\n      Object.defineProperty(response, 'url', {\n        value: url,\n        enumerable: true,\n        configurable: true,\n        writable: false,\n      })\n    }\n  }\n\n  /**\n   * Parses the given raw HTTP headers into a Fetch API `Headers` instance.\n   */\n  static parseRawHeaders(rawHeaders: Array<string>): Headers {\n    const headers = new Headers()\n    for (let line = 0; line < rawHeaders.length; line += 2) {\n      headers.append(rawHeaders[line], rawHeaders[line + 1])\n    }\n    return headers\n  }\n\n  constructor(body?: BodyInit | null, init: FetchResponseInit = {}) {\n    const status = init.status ?? 200\n    const safeStatus = FetchResponse.isConfigurableStatusCode(status)\n      ? status\n      : 200\n    const finalBody = FetchResponse.isResponseWithBody(status) ? body : null\n\n    super(finalBody, {\n      status: safeStatus,\n      statusText: init.statusText,\n      headers: init.headers,\n    })\n\n    if (status !== safeStatus) {\n      /**\n       * @note Undici keeps an internal \"Symbol(state)\" that holds\n       * the actual value of response status. Update that in Node.js.\n       */\n      const state = getValueBySymbol<UndiciFetchInternalState>('state', this)\n\n      if (state) {\n        state.status = status\n      } else {\n        Object.defineProperty(this, 'status', {\n          value: status,\n          enumerable: true,\n          configurable: true,\n          writable: false,\n        })\n      }\n    }\n\n    FetchResponse.setUrl(init.url, this)\n  }\n}\n","const kRawRequest = Symbol('kRawRequest')\n\n/**\n * Returns a raw request instance associated with this request.\n *\n * @example\n * interceptor.on('request', ({ request }) => {\n *   const rawRequest = getRawRequest(request)\n *\n *   if (rawRequest instanceof http.ClientRequest) {\n *     console.log(rawRequest.rawHeaders)\n *   }\n * })\n */\nexport function getRawRequest(request: Request): unknown | undefined {\n  return Reflect.get(request, kRawRequest)\n}\n\nexport function setRawRequest(request: Request, rawRequest: unknown): void {\n  Reflect.set(request, kRawRequest, rawRequest)\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","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","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","/**\n * Removes query parameters and hashes from a given URL.\n */\nexport function getCleanUrl(url: URL, isAbsolute: boolean = true): string {\n  return [isAbsolute && url.origin, url.pathname].filter(Boolean).join('')\n}\n","import { FetchResponse } from '@mswjs/interceptors'\nimport type { Emitter } from 'rettime'\nimport type { SetupWorkerInternalContext } from '../glossary'\nimport { deserializeRequest } from '../../utils/deserializeRequest'\n\nexport function createResponseListener(\n  context: SetupWorkerInternalContext,\n): Emitter.ListenerType<typeof context.workerChannel, 'RESPONSE'> {\n  return (event) => {\n    const responseMessage = event.data\n    const request = deserializeRequest(responseMessage.request)\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 (responseMessage.response.type?.includes('opaque')) {\n      return\n    }\n\n    const response =\n      responseMessage.response.status === 0\n        ? Response.error()\n        : new FetchResponse(\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            FetchResponse.isResponseWithBody(responseMessage.response.status)\n              ? responseMessage.response.body\n              : null,\n            {\n              ...responseMessage.response,\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              url: request.url,\n            },\n          )\n\n    context.emitter.emit(\n      responseMessage.isMockedResponse ? 'response:mocked' : 'response:bypass',\n      {\n        requestId: responseMessage.request.id,\n        request,\n        response,\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 { invariant } from 'outvariant'\nimport { isNodeProcess } from 'is-node-process'\nimport { DeferredPromise } from '@open-draft/deferred-promise'\nimport type {\n  SetupWorkerInternalContext,\n  StartReturnType,\n  StartOptions,\n  SetupWorker,\n} from './glossary'\nimport { RequestHandler } from '~/core/handlers/RequestHandler'\nimport { DEFAULT_START_OPTIONS } from './start/utils/prepareStartHandler'\nimport { createStartHandler } from './start/createStartHandler'\nimport { devUtils } from '~/core/utils/internal/devUtils'\nimport { SetupApi } from '~/core/SetupApi'\nimport { mergeRight } from '~/core/utils/internal/mergeRight'\nimport type { LifeCycleEventsMap } from '~/core/sharedOptions'\nimport type { WebSocketHandler } from '~/core/handlers/WebSocketHandler'\nimport { webSocketInterceptor } from '~/core/ws/webSocketInterceptor'\nimport { handleWebSocketEvent } from '~/core/ws/handleWebSocketEvent'\nimport { attachWebSocketLogger } from '~/core/ws/utils/attachWebSocketLogger'\nimport { WorkerChannel } from '../utils/workerChannel'\nimport { createFallbackRequestListener } from './start/createFallbackRequestListener'\nimport { printStartMessage } from './start/utils/printStartMessage'\nimport { printStopMessage } from './stop/utils/printStopMessage'\nimport { supportsServiceWorker } from '../utils/supports'\n\nexport class SetupWorkerApi\n  extends SetupApi<LifeCycleEventsMap>\n  implements SetupWorker\n{\n  private context: SetupWorkerInternalContext\n\n  constructor(...handlers: Array<RequestHandler | WebSocketHandler>) {\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.context = this.createWorkerContext()\n  }\n\n  private createWorkerContext(): SetupWorkerInternalContext {\n    const workerPromise = new DeferredPromise<ServiceWorker>()\n\n    return {\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      workerPromise,\n      registration: undefined,\n      getRequestHandlers: () => {\n        return this.handlersController.currentHandlers()\n      },\n      emitter: this.emitter,\n      workerChannel: new WorkerChannel({\n        worker: workerPromise,\n      }),\n    }\n  }\n\n  public async start(options: StartOptions = {}): StartReturnType {\n    if ('waitUntilReady' in options) {\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    // 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 (this.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 this.context.registration\n    }\n\n    this.context.workerStoppedAt = undefined\n\n    this.context.startOptions = mergeRight(\n      DEFAULT_START_OPTIONS,\n      options,\n    ) as SetupWorkerInternalContext['startOptions']\n\n    // Enable the WebSocket interception.\n    handleWebSocketEvent({\n      getUnhandledRequestStrategy: () => {\n        return this.context.startOptions.onUnhandledRequest\n      },\n      getHandlers: () => {\n        return this.handlersController.currentHandlers()\n      },\n      onMockedConnection: (connection) => {\n        if (!this.context.startOptions.quiet) {\n          // Attach the logger for mocked connections since\n          // those won't be visible in the browser's devtools.\n          attachWebSocketLogger(connection)\n        }\n      },\n      onPassthroughConnection() {},\n    })\n    webSocketInterceptor.apply()\n\n    this.subscriptions.push(() => {\n      webSocketInterceptor.dispose()\n    })\n\n    // Use a fallback interception algorithm in the environments\n    // where the Service Worker API isn't supported.\n    if (!supportsServiceWorker()) {\n      const fallbackInterceptor = createFallbackRequestListener(\n        this.context,\n        this.context.startOptions,\n      )\n\n      this.subscriptions.push(() => {\n        fallbackInterceptor.dispose()\n      })\n\n      this.context.isMockingEnabled = true\n\n      printStartMessage({\n        message: 'Mocking enabled (fallback mode).',\n        quiet: this.context.startOptions.quiet,\n      })\n\n      return undefined\n    }\n\n    const startHandler = createStartHandler(this.context)\n    const registration = await startHandler(this.context.startOptions, options)\n\n    this.context.isMockingEnabled = true\n\n    return registration\n  }\n\n  public stop(): void {\n    super.dispose()\n\n    if (!this.context.isMockingEnabled) {\n      devUtils.warn(\n        'Found a redundant \"worker.stop()\" call. Notice that stopping the worker after it has already been stopped has no effect. Consider removing this \"worker.stop()\" call.',\n      )\n      return\n    }\n\n    this.context.isMockingEnabled = false\n    this.context.workerStoppedAt = Date.now()\n    this.context.emitter.removeAllListeners()\n\n    if (supportsServiceWorker()) {\n      this.context.workerChannel.removeAllListeners('RESPONSE')\n      window.clearInterval(this.context.keepAliveInterval)\n    }\n\n    // Post the internal stop message on the window\n    // to let any logic know when the worker has stopped.\n    // E.g. the WebSocket client manager needs this to know\n    // when to clear its in-memory clients list.\n    window.postMessage({ type: 'msw/worker:stop' })\n\n    printStopMessage({\n      quiet: this.context.startOptions?.quiet,\n    })\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(\n  ...handlers: Array<RequestHandler | WebSocketHandler>\n): SetupWorker {\n  return new SetupWorkerApi(...handlers)\n}\n","export class LensList<T> {\n  #list: Array<[string, T]>\n  #lens: Map<string, Array<T>>\n\n  constructor() {\n    this.#list = []\n    this.#lens = new Map()\n  }\n\n  get [Symbol.iterator]() {\n    // Return the list's iterator so iteration is order-sensitive.\n    return this.#list[Symbol.iterator].bind(this.#list)\n  }\n\n  public entries() {\n    return this.#lens.entries()\n  }\n\n  /**\n   * Return an order-sensitive list of values by the given key.\n   */\n  public get(key: string): Array<T> {\n    return this.#lens.get(key) || []\n  }\n\n  /**\n   * Return an order-sensitive list of all values.\n   */\n  public getAll(): Array<T> {\n    return this.#list.map(([, value]) => value)\n  }\n\n  /**\n   * Append a new value to the given key.\n   */\n  public append(key: string, value: T): void {\n    this.#list.push([key, value])\n    this.#openLens(key, (list) => list.push(value))\n  }\n\n  /**\n   * Prepend a new value to the given key.\n   */\n  public prepend(key: string, value: T): void {\n    this.#list.unshift([key, value])\n    this.#openLens(key, (list) => list.unshift(value))\n  }\n\n  /**\n   * Delete the value belonging to the given key.\n   */\n  public delete(key: string, value: T): void {\n    if (this.size === 0) {\n      return\n    }\n\n    this.#list = this.#list.filter((item) => item[1] !== value)\n\n    for (const [existingKey, values] of this.#lens) {\n      if (existingKey === key && values.includes(value)) {\n        values.splice(values.indexOf(value), 1)\n      }\n    }\n  }\n\n  /**\n   * Delete all values belogning to the given key.\n   */\n  public deleteAll(key: string): void {\n    if (this.size === 0) {\n      return\n    }\n\n    this.#list = this.#list.filter((item) => item[0] !== key)\n    this.#lens.delete(key)\n  }\n\n  get size(): number {\n    return this.#list.length\n  }\n\n  public clear(): void {\n    if (this.size === 0) {\n      return\n    }\n\n    this.#list.length = 0\n    this.#lens.clear()\n  }\n\n  #openLens(key: string, setter: (target: Array<T>) => void): void {\n    setter(this.#lens.get(key) || this.#lens.set(key, []).get(key))\n  }\n}\n","import { LensList } from './lens-list'\n\nexport type DefaultEventMap = {\n  [eventType: string]: TypedEvent<any, any>\n}\n\n/**\n * Reserved event map containing special event types like '*' for catch-all listeners.\n */\nexport type ReservedEventMap = {\n  '*': TypedEvent<any, any, '*'>\n}\n\ntype IsReservedEvent<Type extends string> = Type extends keyof ReservedEventMap\n  ? true\n  : false\n\nexport interface TypedEvent<\n  DataType = void,\n  ReturnType = void,\n  EventType extends string = string,\n> extends Omit<MessageEvent<DataType>, 'type'> {\n  type: EventType\n}\n\nconst kDefaultPrevented = Symbol('kDefaultPrevented')\nconst kPropagationStopped = Symbol('kPropagationStopped')\nconst kImmediatePropagationStopped = Symbol('kImmediatePropagationStopped')\n\nexport class TypedEvent<\n  DataType = void,\n  ReturnType = void,\n  EventType extends string = string,\n>\n  extends MessageEvent<DataType>\n  implements TypedEvent<DataType, ReturnType, EventType>\n{\n  /**\n   * @note Keep a placeholder property with the return type\n   * because the type must be set somewhere in order to be\n   * correctly associated and inferred from the event.\n   */\n  #returnType: ReturnType;\n\n  [kDefaultPrevented]: boolean;\n  [kPropagationStopped]?: Emitter<any>;\n  [kImmediatePropagationStopped]?: boolean\n\n  constructor(\n    ...args: [DataType] extends [void]\n      ? [type: EventType]\n      : [type: EventType, init: { data: DataType }]\n  ) {\n    super(args[0], args[1])\n    this[kDefaultPrevented] = false\n  }\n\n  get defaultPrevented(): boolean {\n    return this[kDefaultPrevented]\n  }\n\n  public preventDefault(): void {\n    super.preventDefault()\n    this[kDefaultPrevented] = true\n  }\n\n  public stopImmediatePropagation(): void {\n    /**\n     * @note Despite `.stopPropagation()` and `.stopImmediatePropagation()` being defined\n     * in Node.js, they do nothing. It is safe to re-define them.\n     */\n    super.stopImmediatePropagation()\n    this[kImmediatePropagationStopped] = true\n  }\n}\n\n/**\n * Brands a TypedEvent or its subclass while preserving its (narrower) type.\n */\ntype Brand<\n  Event extends TypedEvent,\n  EventType extends string,\n  Loose extends boolean = false,\n> = Loose extends true\n  ? Event extends TypedEvent<infer Data, any, any>\n    ? /**\n       * @note Omit the `ReturnType` so emit methods can accept type events\n       * where infering the return type is impossible.\n       */\n      TypedEvent<Data, any, EventType> & {\n        type: EventType\n      }\n    : never\n  : Event & { type: EventType }\n\ntype InferEventMap<Target extends Emitter<any>> =\n  Target extends Emitter<infer EventMap> ? MergedEventMap<EventMap> : never\n\n/**\n * Extracts only user-defined events, excluding reserved event types.\n */\ntype UserEventMap<EventMap extends DefaultEventMap> = Omit<\n  EventMap,\n  keyof ReservedEventMap\n>\n\n/**\n * Merges the user EventMap with the ReservedEventMap.\n * The '*' event type accepts a union of all user-defined events.\n */\ntype MergedEventMap<EventMap extends DefaultEventMap> = EventMap &\n  ReservedEventMap\n\n/**\n * Creates a union of all events in the EventMap with their literal type strings.\n */\ntype AllEvents<EventMap extends DefaultEventMap> = {\n  [K in keyof EventMap & string]: Brand<EventMap[K], K>\n}[keyof EventMap & string]\n\nexport type TypedListenerOptions = {\n  once?: boolean\n  signal?: AbortSignal\n}\n\nconst kListenerOptions = Symbol('kListenerOptions')\n\nexport namespace Emitter {\n  /**\n   * Returns an appropriate `Event` type for the given event type.\n   *\n   * @example\n   * const emitter = new Emitter<{ greeting: TypedEvent<string> }>()\n   * type GreetingEvent = Emitter.InferEventType<typeof emitter, 'greeting'>\n   * // TypedEvent<string>\n   */\n  export type EventType<\n    Target extends Emitter<any>,\n    EventType extends keyof EventMap & string,\n    EventMap extends DefaultEventMap = InferEventMap<Target>,\n  > =\n    IsReservedEvent<EventType> extends true\n      ? AllEvents<UserEventMap<EventMap>>\n      : Brand<EventMap[EventType], EventType>\n\n  export type EventDataType<\n    Target extends Emitter<any>,\n    EventType extends keyof EventMap & string,\n    EventMap extends DefaultEventMap = InferEventMap<Target>,\n  > = EventMap[EventType] extends TypedEvent<infer DataType> ? DataType : never\n\n  /**\n   * Returns the listener type for the given event type.\n   *\n   * @example\n   * const emitter = new Emitter<{ getTotalPrice: TypedEvent<Cart, number> }>()\n   * type Listener = Emitter.ListenerType<typeof emitter, 'getTotalPrice'>\n   * // (event: TypedEvent<Cart>) => number\n   */\n  export type ListenerType<\n    Target extends Emitter<any>,\n    EventType extends keyof EventMap & string,\n    EventMap extends DefaultEventMap = InferEventMap<Target>,\n  > =\n    IsReservedEvent<EventType> extends true\n      ? (event: AllEvents<UserEventMap<EventMap>>) => void\n      : (\n          event: Emitter.EventType<Target, EventType, EventMap>,\n        ) => Emitter.ListenerReturnType<Target, EventType, EventMap> extends [\n          void,\n        ]\n          ? void\n          : Emitter.ListenerReturnType<Target, EventType, EventMap>\n\n  /**\n   * Returns the return type of the listener for the given event type.\n   *\n   * @example\n   * const emitter = new Emitter<{ getTotalPrice: TypedEvent<Cart, number> }>()\n   * type ListenerReturnType = Emitter.InferListenerReturnType<typeof emitter, 'getTotalPrice'>\n   * // number\n   */\n  export type ListenerReturnType<\n    Target extends Emitter<any>,\n    EventType extends keyof EventMap & string,\n    EventMap extends DefaultEventMap = InferEventMap<Target>,\n  > =\n    IsReservedEvent<EventType> extends true\n      ? void\n      : EventMap[EventType] extends TypedEvent<unknown, infer ReturnType>\n        ? ReturnType\n        : never\n}\n\nexport class Emitter<EventMap extends DefaultEventMap> {\n  #listeners: LensList<\n    Emitter.ListenerType<\n      typeof this,\n      keyof MergedEventMap<EventMap> & string,\n      MergedEventMap<EventMap>\n    >\n  >\n\n  constructor() {\n    this.#listeners = new LensList()\n  }\n\n  /**\n   * Adds a listener for the given event type.\n   */\n  public on<EventType extends keyof MergedEventMap<EventMap> & string>(\n    type: EventType,\n    listener: Emitter.ListenerType<\n      typeof this,\n      EventType,\n      MergedEventMap<EventMap>\n    >,\n    options?: TypedListenerOptions,\n  ): typeof this {\n    this.#addListener(type, listener, options)\n    return this\n  }\n\n  /**\n   * Adds a one-time listener for the given event type.\n   */\n  public once<EventType extends keyof MergedEventMap<EventMap> & string>(\n    type: EventType,\n    listener: Emitter.ListenerType<\n      typeof this,\n      EventType,\n      MergedEventMap<EventMap>\n    >,\n    options?: Omit<TypedListenerOptions, 'once'>,\n  ): typeof this {\n    return this.on(type, listener, {\n      ...(options || {}),\n      once: true,\n    })\n  }\n\n  /**\n   * Prepends a listener for the given event type.\n   */\n  public earlyOn<EventType extends keyof MergedEventMap<EventMap> & string>(\n    type: EventType,\n    listener: Emitter.ListenerType<\n      typeof this,\n      EventType,\n      MergedEventMap<EventMap>\n    >,\n    options?: TypedListenerOptions,\n  ): typeof this {\n    this.#addListener(type, listener, options, 'prepend')\n    return this\n  }\n\n  /**\n   * Prepends a one-time listener for the given event type.\n   */\n  public earlyOnce<EventType extends keyof MergedEventMap<EventMap> & string>(\n    type: EventType,\n    listener: Emitter.ListenerType<\n      typeof this,\n      EventType,\n      MergedEventMap<EventMap>\n    >,\n    options?: Omit<TypedListenerOptions, 'once'>,\n  ): typeof this {\n    return this.earlyOn(type, listener, {\n      ...(options || {}),\n      once: true,\n    })\n  }\n\n  /**\n   * Emits the given typed event.\n   *\n   * @returns {boolean} Returns `true` if the event had any listeners, `false` otherwise.\n   */\n  public emit<EventType extends keyof EventMap & string>(\n    event: Brand<EventMap[EventType], EventType, true>,\n  ): boolean {\n    if (this.#listeners.size === 0) {\n      return false\n    }\n\n    /**\n     * @note Calculate matching listeners before calling them\n     * since one-time listeners will self-destruct.\n     */\n    const hasListeners = this.listenerCount(event.type) > 0\n\n    const proxiedEvent = this.#proxyEvent(event)\n\n    for (const listener of this.#matchListeners(event.type)) {\n      if (\n        proxiedEvent.event[kPropagationStopped] != null &&\n        proxiedEvent.event[kPropagationStopped] !== this\n      ) {\n        proxiedEvent.revoke()\n        return false\n      }\n\n      if (proxiedEvent.event[kImmediatePropagationStopped]) {\n        break\n      }\n\n      this.#callListener(proxiedEvent.event, listener)\n    }\n\n    proxiedEvent.revoke()\n\n    return hasListeners\n  }\n\n  /**\n   * Emits the given typed event and returns a promise that resolves\n   * when all the listeners for that event have settled.\n   *\n   * @returns {Promise<Array<Emitter.ListenerReturnType>>} A promise that resolves\n   * with the return values of all listeners.\n   */\n  public async emitAsPromise<EventType extends keyof EventMap & string>(\n    event: Brand<EventMap[EventType], EventType, true>,\n  ): Promise<\n    Array<Emitter.ListenerReturnType<typeof this, EventType, EventMap>>\n  > {\n    if (this.#listeners.size === 0) {\n      return []\n    }\n\n    const pendingListeners: Array<\n      Promise<Emitter.ListenerReturnType<typeof this, EventType, EventMap>>\n    > = []\n\n    const proxiedEvent = this.#proxyEvent(event)\n\n    for (const listener of this.#matchListeners(event.type)) {\n      if (\n        proxiedEvent.event[kPropagationStopped] != null &&\n        proxiedEvent.event[kPropagationStopped] !== this\n      ) {\n        proxiedEvent.revoke()\n        return []\n      }\n\n      if (proxiedEvent.event[kImmediatePropagationStopped]) {\n        break\n      }\n\n      const listenerPromise = Promise.resolve(\n        this.#callListener(proxiedEvent.event, listener),\n      )\n\n      const returnValue = await listenerPromise\n\n      if (!this.#isTypelessListener(listener)) {\n        pendingListeners.push(returnValue)\n      }\n    }\n\n    proxiedEvent.revoke()\n\n    return Promise.allSettled(pendingListeners).then((results) => {\n      return results.map((result) =>\n        result.status === 'fulfilled' ? result.value : result.reason,\n      )\n    })\n  }\n\n  /**\n   * Emits the given event and returns a generator that yields\n   * the result of each listener in the order of their registration.\n   * This way, you stop exhausting the listeners once you get the expected value.\n   */\n  public *emitAsGenerator<EventType extends keyof EventMap & string>(\n    event: Brand<EventMap[EventType], EventType, true>,\n  ): Generator<Emitter.ListenerReturnType<typeof this, EventType, EventMap>> {\n    if (this.#listeners.size === 0) {\n      return\n    }\n\n    const proxiedEvent = this.#proxyEvent(event)\n\n    for (const listener of this.#matchListeners(event.type)) {\n      if (\n        proxiedEvent.event[kPropagationStopped] != null &&\n        proxiedEvent.event[kPropagationStopped] !== this\n      ) {\n        proxiedEvent.revoke()\n        return\n      }\n\n      if (proxiedEvent.event[kImmediatePropagationStopped]) {\n        break\n      }\n\n      const returnValue = this.#callListener(proxiedEvent.event, listener)\n\n      if (!this.#isTypelessListener(listener)) {\n        yield returnValue\n      }\n    }\n\n    proxiedEvent.revoke()\n  }\n\n  /**\n   * Removes a listener for the given event type.\n   */\n  public removeListener<\n    EventType extends keyof MergedEventMap<EventMap> & string,\n  >(\n    type: EventType,\n    listener: Emitter.ListenerType<\n      typeof this,\n      EventType,\n      MergedEventMap<EventMap>\n    >,\n  ): void {\n    this.#listeners.delete(type, listener)\n  }\n\n  /**\n   * Removes all listeners for the given event type.\n   * If no event type is provided, removes all existing listeners.\n   */\n  public removeAllListeners<\n    EventType extends keyof MergedEventMap<EventMap> & string,\n  >(type?: EventType): void {\n    if (type == null) {\n      this.#listeners.clear()\n      return\n    }\n\n    this.#listeners.deleteAll(type)\n  }\n\n  /**\n   * Returns the list of listeners for the given event type.\n   * If no even type is provided, returns all listeners.\n   */\n  public listeners<EventType extends keyof MergedEventMap<EventMap> & string>(\n    type?: EventType,\n  ): Array<\n    Emitter.ListenerType<typeof this, EventType, MergedEventMap<EventMap>>\n  > {\n    if (type == null) {\n      return this.#listeners.getAll()\n    }\n\n    return this.#listeners.get(type)\n  }\n\n  /**\n   * Returns the number of listeners for the given event type.\n   * If no even type is provided, returns the total number of listeners.\n   */\n  public listenerCount<\n    EventType extends keyof MergedEventMap<EventMap> & string,\n  >(type?: EventType): number {\n    if (type == null) {\n      return this.#listeners.size\n    }\n\n    return this.listeners(type).length\n  }\n\n  #addListener<EventType extends keyof MergedEventMap<EventMap> & string>(\n    type: EventType,\n    listener: Emitter.ListenerType<\n      typeof this,\n      EventType,\n      MergedEventMap<EventMap>\n    >,\n    options: TypedListenerOptions | undefined,\n    insertMode: 'append' | 'prepend' = 'append',\n  ): void {\n    if (insertMode === 'prepend') {\n      this.#listeners.prepend(type, listener)\n    } else {\n      this.#listeners.append(type, listener)\n    }\n\n    if (options) {\n      Object.defineProperty(listener, kListenerOptions, {\n        value: options,\n        enumerable: false,\n        writable: false,\n      })\n\n      if (options.signal) {\n        options.signal.addEventListener(\n          'abort',\n          () => {\n            this.removeListener(type, listener)\n          },\n          { once: true },\n        )\n      }\n    }\n  }\n\n  #proxyEvent<Event extends TypedEvent>(\n    event: Event,\n  ): { event: Event; revoke: () => void } {\n    const { stopPropagation } = event\n\n    event.stopPropagation = new Proxy(event.stopPropagation, {\n      apply: (target, thisArg, argArray) => {\n        event[kPropagationStopped] = this\n        return Reflect.apply(target, thisArg, argArray)\n      },\n    })\n\n    return {\n      event,\n      revoke() {\n        event.stopPropagation = stopPropagation\n      },\n    }\n  }\n\n  #callListener(\n    event: Event,\n    listener: ((event: any) => any) & {\n      [kListenerOptions]?: TypedListenerOptions\n    },\n  ) {\n    const returnValue = listener.call(this, event)\n\n    if (listener[kListenerOptions]?.once) {\n      const key = this.#isTypelessListener(listener) ? '*' : event.type\n      this.#listeners.delete(key, listener)\n    }\n\n    return returnValue\n  }\n\n  /**\n   * Return a list of all event listeners relevant for the given event type.\n   * This includes the explicit event listeners and also typeless event listeners.\n   */\n  *#matchListeners<EventType extends keyof EventMap & string>(type: EventType) {\n    for (const [key, listener] of this.#listeners) {\n      if (key === '*' || key === type) {\n        yield listener\n      }\n    }\n  }\n\n  #isTypelessListener(listener: any): boolean {\n    return this.#listeners.get('*').includes(listener)\n  }\n}\n","import { invariant } from 'outvariant'\nimport { Emitter, TypedEvent } from 'rettime'\nimport { isObject } from '~/core/utils/internal/isObject'\nimport type { StringifiedResponse } from '../setupWorker/glossary'\nimport { supportsServiceWorker } from '../utils/supports'\n\nexport interface WorkerChannelOptions {\n  worker: Promise<ServiceWorker>\n}\n\nexport type WorkerChannelEventMap = {\n  REQUEST: WorkerEvent<IncomingWorkerRequest>\n  RESPONSE: WorkerEvent<IncomingWorkerResponse>\n  MOCKING_ENABLED: WorkerEvent<{\n    client: {\n      id: string\n      frameType: string\n    }\n  }>\n  INTEGRITY_CHECK_RESPONSE: WorkerEvent<{\n    packageVersion: string\n    checksum: string\n  }>\n  KEEPALIVE_RESPONSE: TypedEvent<never>\n}\n\n/**\n * Request representation received from the worker message event.\n */\nexport interface IncomingWorkerRequest\n  extends Omit<\n    Request,\n    | 'text'\n    | 'body'\n    | 'json'\n    | 'blob'\n    | 'arrayBuffer'\n    | 'formData'\n    | 'clone'\n    | 'signal'\n    | 'isHistoryNavigation'\n    | 'isReloadNavigation'\n  > {\n  /**\n   * Unique ID of the request generated once the request is\n   * intercepted by the \"fetch\" event in the Service Worker.\n   */\n  id: string\n  interceptedAt: number\n  body?: ArrayBuffer | null\n}\n\ntype IncomingWorkerResponse = {\n  isMockedResponse: boolean\n  request: IncomingWorkerRequest\n  response: Pick<\n    Response,\n    'type' | 'ok' | 'status' | 'statusText' | 'body' | 'headers' | 'redirected'\n  >\n}\n\nexport type WorkerEventResponse = {\n  MOCK_RESPONSE: [\n    data: StringifiedResponse,\n    transfer?: [ReadableStream<Uint8Array>],\n  ]\n  PASSTHROUGH: []\n}\n\nconst SUPPORTS_SERVICE_WORKER = supportsServiceWorker()\n\nexport class WorkerEvent<\n  DataType,\n  ReturnType = any,\n  EventType extends string = string,\n> extends TypedEvent<DataType, ReturnType, EventType> {\n  #workerEvent: MessageEvent\n\n  constructor(workerEvent: MessageEvent) {\n    const type = workerEvent.data.type as EventType\n    const data = workerEvent.data.payload as DataType\n\n    /**\n     * @note This is the only place we're mapping { type, payload }\n     * message structure of the worker. The client references the\n     * payload via `event.data`.\n     */\n    super(\n      // @ts-expect-error Troublesome `TypedEvent` extension.\n      type,\n      { data },\n    )\n    this.#workerEvent = workerEvent\n  }\n\n  get ports() {\n    return this.#workerEvent.ports\n  }\n\n  /**\n   * Reply directly to this event using its `MessagePort`.\n   */\n  public postMessage<Type extends keyof WorkerEventResponse>(\n    type: Type,\n    ...rest: WorkerEventResponse[Type]\n  ): void {\n    this.#workerEvent.ports[0].postMessage(\n      { type, data: rest[0] },\n      { transfer: rest[1] },\n    )\n  }\n}\n\n/**\n * Map of the events that can be sent to the Service Worker\n * from any execution context.\n */\ntype OutgoingWorkerEvents =\n  | 'MOCK_ACTIVATE'\n  | 'INTEGRITY_CHECK_REQUEST'\n  | 'KEEPALIVE_REQUEST'\n  | 'CLIENT_CLOSED'\n\nexport class WorkerChannel extends Emitter<WorkerChannelEventMap> {\n  constructor(protected readonly options: WorkerChannelOptions) {\n    super()\n\n    if (!SUPPORTS_SERVICE_WORKER) {\n      return\n    }\n\n    navigator.serviceWorker.addEventListener('message', async (event) => {\n      const worker = await this.options.worker\n\n      if (event.source != null && event.source !== worker) {\n        return\n      }\n\n      if (event.data && isObject(event.data) && 'type' in event.data) {\n        this.emit(new WorkerEvent<any, any, any>(event))\n      }\n    })\n  }\n\n  /**\n   * Send data to the Service Worker controlling this client.\n   * This triggers the `message` event listener on ServiceWorkerGlobalScope.\n   */\n  public postMessage(type: OutgoingWorkerEvents): void {\n    invariant(\n      SUPPORTS_SERVICE_WORKER,\n      'Failed to post message on a WorkerChannel: the Service Worker API is unavailable in this context. This is likely an issue with MSW. Please report it on GitHub: https://github.com/mswjs/msw/issues',\n    )\n\n    this.options.worker.then((worker) => {\n      worker.postMessage(type)\n    })\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 listeners = emitter.listeners(eventName)\n\n  if (listeners.length === 0) {\n    return\n  }\n\n  for (const listener of listeners) {\n    await listener.apply(emitter, data)\n  }\n}\n","/**\n * Returns a boolean indicating whether the given global property\n * is defined and is configurable.\n */\nexport function hasConfigurableGlobal(propertyName: string): boolean {\n  const descriptor = Object.getOwnPropertyDescriptor(globalThis, propertyName)\n\n  // The property is not set at all.\n  if (typeof descriptor === 'undefined') {\n    return false\n  }\n\n  // The property is set to a getter that returns undefined.\n  if (\n    typeof descriptor.get === 'function' &&\n    typeof descriptor.get() === 'undefined'\n  ) {\n    return false\n  }\n\n  // The property is set to a value equal to undefined.\n  if (typeof descriptor.get === 'undefined' && descriptor.value == null) {\n    return false\n  }\n\n  if (typeof descriptor.set === 'undefined' && !descriptor.configurable) {\n    console.error(\n      `[MSW] Failed to apply interceptor: the global \\`${propertyName}\\` property is non-configurable. This is likely an issue with your environment. If you are using a framework, please open an issue about this in their repository.`\n    )\n    return false\n  }\n\n  return true\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 * Determines if a given value is an instance of object.\n */\nexport function isObject<T>(value: any, loose = false): value is T {\n  return loose\n    ? Object.prototype.toString.call(value).startsWith('[object ')\n    : Object.prototype.toString.call(value) === '[object Object]'\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","import { isObject } from './isObject'\nimport { isPropertyAccessible } from './isPropertyAccessible'\n\n/**\n * Creates a generic 500 Unhandled Exception response.\n */\nexport function createServerErrorResponse(body: unknown): Response {\n  return new Response(\n    JSON.stringify(\n      body instanceof Error\n        ? {\n            name: body.name,\n            message: body.message,\n            stack: body.stack,\n          }\n        : body\n    ),\n    {\n      status: 500,\n      statusText: 'Unhandled Exception',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n    }\n  )\n}\n\nexport type ResponseError = Response & { type: 'error' }\n\n/**\n * Check if the given response is a `Response.error()`.\n *\n * @note Some environments, like Miniflare (Cloudflare) do not\n * implement the \"Response.type\" property and throw on its access.\n * Safely check if we can access \"type\" on \"Response\" before continuing.\n * @see https://github.com/mswjs/msw/issues/1834\n */\nexport function isResponseError(response: unknown): response is ResponseError {\n  return (\n    response != null &&\n    response instanceof Response &&\n    isPropertyAccessible(response, 'type') &&\n    response.type === 'error'\n  )\n}\n\n/**\n * Check if the given value is a `Response` or a Response-like object.\n * This is different from `value instanceof Response` because it supports\n * custom `Response` constructors, like the one when using Undici directly.\n */\nexport function isResponseLike(value: unknown): value is Response {\n  return (\n    isObject<Record<string, any>>(value, true) &&\n    isPropertyAccessible(value, 'status') &&\n    isPropertyAccessible(value, 'statusText') &&\n    isPropertyAccessible(value, 'bodyUsed')\n  )\n}\n","export function isNodeLikeError(\n  error: unknown\n): error is NodeJS.ErrnoException {\n  if (error == null) {\n    return false\n  }\n\n  if (!(error instanceof Error)) {\n    return false\n  }\n\n  return 'code' in error && 'errno' in error\n}\n","import type { Emitter } from 'strict-event-emitter'\nimport { DeferredPromise } from '@open-draft/deferred-promise'\nimport { until } from '@open-draft/until'\nimport type { HttpRequestEventMap } from '../glossary'\nimport { emitAsync } from './emitAsync'\nimport { RequestController } from '../RequestController'\nimport {\n  createServerErrorResponse,\n  isResponseError,\n  isResponseLike,\n} from './responseUtils'\nimport { InterceptorError } from '../InterceptorError'\nimport { isNodeLikeError } from './isNodeLikeError'\nimport { isObject } from './isObject'\n\ninterface HandleRequestOptions {\n  requestId: string\n  request: Request\n  emitter: Emitter<HttpRequestEventMap>\n  controller: RequestController\n}\n\nexport async function handleRequest(\n  options: HandleRequestOptions\n): Promise<void> {\n  const handleResponse = async (\n    response: Response | Error | Record<string, any>\n  ) => {\n    if (response instanceof Error) {\n      await options.controller.errorWith(response)\n      return true\n    }\n\n    // Handle \"Response.error()\" instances.\n    if (isResponseError(response)) {\n      await options.controller.respondWith(response)\n      return true\n    }\n\n    /**\n     * Handle normal responses or response-like objects.\n     * @note This must come before the arbitrary object check\n     * since Response instances are, in fact, objects.\n     */\n    if (isResponseLike(response)) {\n      await options.controller.respondWith(response)\n      return true\n    }\n\n    // Handle arbitrary objects provided to `.errorWith(reason)`.\n    if (isObject(response)) {\n      await options.controller.errorWith(response)\n      return true\n    }\n\n    return false\n  }\n\n  const handleResponseError = async (error: unknown): Promise<boolean> => {\n    // Forward the special interceptor error instances\n    // to the developer. These must not be handled in any way.\n    if (error instanceof InterceptorError) {\n      throw result.error\n    }\n\n    // Support mocking Node.js-like errors.\n    if (isNodeLikeError(error)) {\n      await options.controller.errorWith(error)\n      return true\n    }\n\n    // Handle thrown responses.\n    if (error instanceof Response) {\n      return await handleResponse(error)\n    }\n\n    return false\n  }\n\n  // Add the last \"request\" listener to check if the request\n  // has been handled in any way. If it hasn't, resolve the\n  // response promise with undefined.\n  // options.emitter.once('request', async ({ requestId: pendingRequestId }) => {\n  //   if (\n  //     pendingRequestId === options.requestId &&\n  //     options.controller.readyState === RequestController.PENDING\n  //   ) {\n  //     await options.controller.passthrough()\n  //   }\n  // })\n\n  const requestAbortPromise = new DeferredPromise<void, unknown>()\n\n  /**\n   * @note `signal` is not always defined in React Native.\n   */\n  if (options.request.signal) {\n    if (options.request.signal.aborted) {\n      await options.controller.errorWith(options.request.signal.reason)\n      return\n    }\n\n    options.request.signal.addEventListener(\n      'abort',\n      () => {\n        requestAbortPromise.reject(options.request.signal.reason)\n      },\n      { once: true }\n    )\n  }\n\n  const result = await until(async () => {\n    // Emit the \"request\" event and wait until all the listeners\n    // for that event are finished (e.g. async listeners awaited).\n    // By the end of this promise, the developer cannot affect the\n    // request anymore.\n    const requestListenersPromise = emitAsync(options.emitter, 'request', {\n      requestId: options.requestId,\n      request: options.request,\n      controller: options.controller,\n    })\n\n    await Promise.race([\n      // Short-circuit the request handling promise if the request gets aborted.\n      requestAbortPromise,\n      requestListenersPromise,\n      options.controller.handled,\n    ])\n  })\n\n  // Handle the request being aborted while waiting for the request listeners.\n  if (requestAbortPromise.state === 'rejected') {\n    await options.controller.errorWith(requestAbortPromise.rejectionReason)\n    return\n  }\n\n  if (result.error) {\n    // Handle the error during the request listener execution.\n    // These can be thrown responses or request errors.\n    if (await handleResponseError(result.error)) {\n      return\n    }\n\n    // If the developer has added \"unhandledException\" listeners,\n    // allow them to handle the error. They can translate it to a\n    // mocked response, network error, or forward it as-is.\n    if (options.emitter.listenerCount('unhandledException') > 0) {\n      // Create a new request controller just for the unhandled exception case.\n      // This is needed because the original controller might have been already\n      // interacted with (e.g. \"respondWith\" or \"errorWith\" called on it).\n      const unhandledExceptionController = new RequestController(\n        options.request,\n        {\n          /**\n           * @note Intentionally empty passthrough handle.\n           * This controller is created within another controller and we only need\n           * to know if `unhandledException` listeners handled the request.\n           */\n          passthrough() {},\n          async respondWith(response) {\n            await handleResponse(response)\n          },\n          async errorWith(reason) {\n            /**\n             * @note Handle the result of the unhandled controller\n             * in the same way as the original request controller.\n             * The exception here is that thrown errors within the\n             * \"unhandledException\" event do NOT result in another\n             * emit of the same event. They are forwarded as-is.\n             */\n            await options.controller.errorWith(reason)\n          },\n        }\n      )\n\n      await emitAsync(options.emitter, 'unhandledException', {\n        error: result.error,\n        request: options.request,\n        requestId: options.requestId,\n        controller: unhandledExceptionController,\n      })\n\n      // If all the \"unhandledException\" listeners have finished\n      // but have not handled the request in any way, passthrough.\n      if (\n        unhandledExceptionController.readyState !== RequestController.PENDING\n      ) {\n        return\n      }\n    }\n\n    // Otherwise, coerce unhandled exceptions to a 500 Internal Server Error response.\n    await options.controller.respondWith(\n      createServerErrorResponse(result.error)\n    )\n    return\n  }\n\n  // If the request hasn't been handled by this point, passthrough.\n  if (options.controller.readyState === RequestController.PENDING) {\n    return await options.controller.passthrough()\n  }\n\n  return options.controller.handled\n}\n","export function createNetworkError(cause?: unknown) {\n  return Object.assign(new TypeError('Failed to fetch'), {\n    cause,\n  })\n}\n","import { createNetworkError } from './createNetworkError'\n\nconst REQUEST_BODY_HEADERS = [\n  'content-encoding',\n  'content-language',\n  'content-location',\n  'content-type',\n  'content-length',\n]\n\nconst kRedirectCount = Symbol('kRedirectCount')\n\n/**\n * @see https://github.com/nodejs/undici/blob/a6dac3149c505b58d2e6d068b97f4dc993da55f0/lib/web/fetch/index.js#L1210\n */\nexport async function followFetchRedirect(\n  request: Request,\n  response: Response\n): Promise<Response> {\n  if (response.status !== 303 && request.body != null) {\n    return Promise.reject(createNetworkError())\n  }\n\n  const requestUrl = new URL(request.url)\n\n  let locationUrl: URL\n  try {\n    // If the location is a relative URL, use the request URL as the base URL.\n    locationUrl = new URL(response.headers.get('location')!, request.url) \n  } catch (error) {\n    return Promise.reject(createNetworkError(error))\n  }\n\n  if (\n    !(locationUrl.protocol === 'http:' || locationUrl.protocol === 'https:')\n  ) {\n    return Promise.reject(\n      createNetworkError('URL scheme must be a HTTP(S) scheme')\n    )\n  }\n\n  if (Reflect.get(request, kRedirectCount) > 20) {\n    return Promise.reject(createNetworkError('redirect count exceeded'))\n  }\n\n  Object.defineProperty(request, kRedirectCount, {\n    value: (Reflect.get(request, kRedirectCount) || 0) + 1,\n  })\n\n  if (\n    request.mode === 'cors' &&\n    (locationUrl.username || locationUrl.password) &&\n    !sameOrigin(requestUrl, locationUrl)\n  ) {\n    return Promise.reject(\n      createNetworkError('cross origin not allowed for request mode \"cors\"')\n    )\n  }\n\n  const requestInit: RequestInit = {}\n\n  if (\n    ([301, 302].includes(response.status) && request.method === 'POST') ||\n    (response.status === 303 && !['HEAD', 'GET'].includes(request.method))\n  ) {\n    requestInit.method = 'GET'\n    requestInit.body = null\n\n    REQUEST_BODY_HEADERS.forEach((headerName) => {\n      request.headers.delete(headerName)\n    })\n  }\n\n  if (!sameOrigin(requestUrl, locationUrl)) {\n    request.headers.delete('authorization')\n    request.headers.delete('proxy-authorization')\n    request.headers.delete('cookie')\n    request.headers.delete('host')\n  }\n\n  /**\n   * @note Undici \"safely\" extracts the request body.\n   * I suspect we cannot dispatch this request again\n   * since its body has been read and the stream is locked.\n   */\n\n  requestInit.headers = request.headers\n  const finalResponse = await fetch(new Request(locationUrl, requestInit))\n  Object.defineProperty(finalResponse, 'redirected', {\n    value: true,\n    configurable: true,\n  })\n\n  return finalResponse\n}\n\n/**\n * @see https://github.com/nodejs/undici/blob/a6dac3149c505b58d2e6d068b97f4dc993da55f0/lib/web/fetch/util.js#L761\n */\nfunction sameOrigin(left: URL, right: URL): boolean {\n  if (left.origin === right.origin && left.origin === 'null') {\n    return true\n  }\n\n  if (\n    left.protocol === right.protocol &&\n    left.hostname === right.hostname &&\n    left.port === right.port\n  ) {\n    return true\n  }\n\n  return false\n}\n","export class BrotliDecompressionStream extends TransformStream {\n  constructor() {\n    console.warn(\n      '[Interceptors]: Brotli decompression of response streams is not supported in the browser'\n    )\n\n    super({\n      transform(chunk, controller) {\n        // Keep the stream as passthrough, it does nothing.\n        controller.enqueue(chunk)\n      },\n    })\n  }\n}\n","// Import from an internal alias that resolves to different modules\n// depending on the environment. This way, we can keep the fetch interceptor\n// intact while using different strategies for Brotli decompression.\nimport { BrotliDecompressionStream } from 'internal:brotli-decompress'\n\nclass PipelineStream extends TransformStream {\n  constructor(\n    transformStreams: Array<TransformStream>,\n    ...strategies: Array<QueuingStrategy>\n  ) {\n    super({}, ...strategies)\n\n    const readable = [super.readable as any, ...transformStreams].reduce(\n      (readable, transform) => readable.pipeThrough(transform)\n    )\n\n    Object.defineProperty(this, 'readable', {\n      get() {\n        return readable\n      },\n    })\n  }\n}\n\nexport function parseContentEncoding(contentEncoding: string): Array<string> {\n  return contentEncoding\n    .toLowerCase()\n    .split(',')\n    .map((coding) => coding.trim())\n}\n\nfunction createDecompressionStream(\n  contentEncoding: string\n): TransformStream | null {\n  if (contentEncoding === '') {\n    return null\n  }\n\n  const codings = parseContentEncoding(contentEncoding)\n\n  if (codings.length === 0) {\n    return null\n  }\n\n  const transformers = codings.reduceRight<Array<TransformStream>>(\n    (transformers, coding) => {\n      if (coding === 'gzip' || coding === 'x-gzip') {\n        return transformers.concat(new DecompressionStream('gzip'))\n      } else if (coding === 'deflate') {\n        return transformers.concat(new DecompressionStream('deflate'))\n      } else if (coding === 'br') {\n        return transformers.concat(new BrotliDecompressionStream())\n      } else {\n        transformers.length = 0\n      }\n\n      return transformers\n    },\n    []\n  )\n\n  return new PipelineStream(transformers)\n}\n\nexport function decompressResponse(\n  response: Response\n): ReadableStream<any> | null {\n  if (response.body === null) {\n    return null\n  }\n\n  const decompressionStream = createDecompressionStream(\n    response.headers.get('content-encoding') || ''\n  )\n\n  if (!decompressionStream) {\n    return null\n  }\n\n  // Use `pipeTo` and return the decompression stream's readable\n  // instead of `pipeThrough` because that will lock the original\n  // response stream, making it unusable as the input to Response.\n  response.body.pipeTo(decompressionStream.writable)\n  return decompressionStream.readable\n}\n","import { invariant } from 'outvariant'\nimport { until } from '@open-draft/until'\nimport { DeferredPromise } from '@open-draft/deferred-promise'\nimport { HttpRequestEventMap, IS_PATCHED_MODULE } from '../../glossary'\nimport { Interceptor } from '../../Interceptor'\nimport { RequestController } from '../../RequestController'\nimport { emitAsync } from '../../utils/emitAsync'\nimport { handleRequest } from '../../utils/handleRequest'\nimport { canParseUrl } from '../../utils/canParseUrl'\nimport { createRequestId } from '../../createRequestId'\nimport { createNetworkError } from './utils/createNetworkError'\nimport { followFetchRedirect } from './utils/followRedirect'\nimport { decompressResponse } from './utils/decompression'\nimport { hasConfigurableGlobal } from '../../utils/hasConfigurableGlobal'\nimport { FetchResponse } from '../../utils/fetchUtils'\nimport { setRawRequest } from '../../getRawRequest'\nimport { isResponseError } from '../../utils/responseUtils'\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 hasConfigurableGlobal('fetch')\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.href)\n          : input\n\n      const request = new Request(resolvedInput, init)\n\n      /**\n       * @note Set the raw request only if a Request instance was provided to fetch.\n       */\n      if (input instanceof Request) {\n        setRawRequest(request, input)\n      }\n\n      const responsePromise = new DeferredPromise<Response>()\n\n      const controller = new RequestController(request, {\n        passthrough: async () => {\n          this.logger.info('request has not been handled, passthrough...')\n\n          /**\n           * @note Clone the request instance right before performing it.\n           * This preserves any modifications made to the intercepted request\n           * in the \"request\" listener. This also allows the user to read the\n           * request body in the \"response\" listener (otherwise \"unusable\").\n           */\n          const requestCloneForResponseEvent = request.clone()\n\n          // Perform the intercepted request as-is.\n          const { error: responseError, data: originalResponse } = await until(\n            () => pureFetch(request)\n          )\n\n          if (responseError) {\n            return responsePromise.reject(responseError)\n          }\n\n          this.logger.info('original fetch performed', originalResponse)\n\n          if (this.emitter.listenerCount('response') > 0) {\n            this.logger.info('emitting the \"response\" event...')\n\n            const responseClone = originalResponse.clone()\n            await emitAsync(this.emitter, 'response', {\n              response: responseClone,\n              isMockedResponse: false,\n              request: requestCloneForResponseEvent,\n              requestId,\n            })\n          }\n\n          // Resolve the response promise with the original response\n          // since the `fetch()` return this internal promise.\n          responsePromise.resolve(originalResponse)\n        },\n        respondWith: async (rawResponse) => {\n          // Handle mocked `Response.error()` (i.e. request errors).\n          if (isResponseError(rawResponse)) {\n            this.logger.info('request has errored!', { response: rawResponse })\n            responsePromise.reject(createNetworkError(rawResponse))\n            return\n          }\n\n          this.logger.info('received mocked response!', {\n            rawResponse,\n          })\n\n          // Decompress the mocked response body, if applicable.\n          const decompressedStream = decompressResponse(rawResponse)\n          const response =\n            decompressedStream === null\n              ? rawResponse\n              : new FetchResponse(decompressedStream, rawResponse)\n\n          FetchResponse.setUrl(request.url, response)\n\n          /**\n           * Undici's handling of following redirect responses.\n           * Treat the \"manual\" redirect mode as a regular mocked response.\n           * This way, the client can manually follow the redirect it receives.\n           * @see https://github.com/nodejs/undici/blob/a6dac3149c505b58d2e6d068b97f4dc993da55f0/lib/web/fetch/index.js#L1173\n           */\n          if (FetchResponse.isRedirectResponse(response.status)) {\n            // Reject the request promise if its `redirect` is set to `error`\n            // and it receives a mocked redirect response.\n            if (request.redirect === 'error') {\n              responsePromise.reject(createNetworkError('unexpected redirect'))\n              return\n            }\n\n            if (request.redirect === 'follow') {\n              followFetchRedirect(request, response).then(\n                (response) => {\n                  responsePromise.resolve(response)\n                },\n                (reason) => {\n                  responsePromise.reject(reason)\n                }\n              )\n              return\n            }\n          }\n\n          if (this.emitter.listenerCount('response') > 0) {\n            this.logger.info('emitting the \"response\" event...')\n\n            // Await the response listeners to finish before resolving\n            // the response promise. This ensures all your logic finishes\n            // before the interceptor resolves the pending response.\n            await emitAsync(this.emitter, 'response', {\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              response: response.clone(),\n              isMockedResponse: true,\n              request,\n              requestId,\n            })\n          }\n\n          responsePromise.resolve(response)\n        },\n        errorWith: (reason) => {\n          this.logger.info('request has been aborted!', { reason })\n          responsePromise.reject(reason)\n        },\n      })\n\n      this.logger.info('[%s] %s', request.method, request.url)\n      this.logger.info('awaiting for the mocked response...')\n\n      this.logger.info(\n        'emitting the \"request\" event for %s listener(s)...',\n        this.emitter.listenerCount('request')\n      )\n\n      await handleRequest({\n        request,\n        requestId,\n        emitter: this.emitter,\n        controller,\n      })\n\n      return responsePromise\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","/**\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 NONE = 0\n  readonly CAPTURING_PHASE = 1\n  readonly AT_TARGET = 2\n  readonly BUBBLING_PHASE = 3\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 | XMLHttpRequestUpload,\n  type: string,\n  init?: ProgressEventInit\n): EventPolyfill | ProgressEvent {\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 { FetchResponse } from '../../../utils/fetchUtils'\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 = FetchResponse.isResponseWithBody(request.status)\n    ? body\n    : null\n\n  return new FetchResponse(responseBodyOrNull, {\n    url: request.responseURL,\n    status: request.status,\n    statusText: request.statusText,\n    headers: createHeadersFromXMLHttpRequestHeaders(\n      request.getAllResponseHeaders()\n    ),\n  })\n}\n\nfunction createHeadersFromXMLHttpRequestHeaders(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","/**\n * Return a total byte length of the given request/response body.\n * If the `Content-Length` header is present, it will be used as the byte length.\n */\nexport async function getBodyByteLength(\n  input: Request | Response\n): Promise<number> {\n  const explicitContentLength = input.headers.get('content-length')\n\n  if (explicitContentLength != null && explicitContentLength !== '') {\n    return Number(explicitContentLength)\n  }\n\n  const buffer = await input.arrayBuffer()\n  return buffer.byteLength\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'\nimport { getBodyByteLength } from './utils/getBodyByteLength'\nimport { setRawRequest } from '../../getRawRequest'\n\nconst kIsRequestHandled = Symbol('kIsRequestHandled')\nconst IS_NODE = isNodeProcess()\nconst kFetchRequest = Symbol('kFetchRequest')\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  [kIsRequestHandled]: boolean;\n  [kFetchRequest]?: Request\n  private method: string = 'GET'\n  private url: URL = null as any\n  private requestHeaders: Headers\n  private responseBuffer: Uint8Array\n  private events: Map<keyof XMLHttpRequestEventTargetEventMap, Array<Function>>\n  private uploadEvents: Map<\n    keyof XMLHttpRequestEventTargetEventMap,\n    Array<Function>\n  >\n\n  constructor(\n    readonly initialRequest: XMLHttpRequest,\n    public logger: Logger\n  ) {\n    this[kIsRequestHandled] = false\n\n    this.events = new Map()\n    this.uploadEvents = 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            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: this[kIsRequestHandled],\n                  request: fetchRequest,\n                  requestId: this.requestId!,\n                })\n              }\n            })\n\n            const requestBody =\n              typeof body === 'string' ? encodeBuffer(body) : body\n\n            // Delegate request handling to the consumer.\n            const fetchRequest = this.toFetchApiRequest(requestBody)\n            this[kFetchRequest] = fetchRequest.clone()\n\n            /**\n             * @note Start request handling on the next tick so that the user\n             * could add event listeners for \"loadend\" before the interceptor fires it.\n             */\n            queueMicrotask(() => {\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 (called `.respondWith()`) perform it as-is.\n                if (!this[kIsRequestHandled]) {\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\n            break\n          }\n\n          default: {\n            return invoke()\n          }\n        }\n      },\n    })\n\n    /**\n     * Proxy the `.upload` property to gather the event listeners/callbacks.\n     */\n    define(\n      this.request,\n      'upload',\n      createProxy(this.request.upload, {\n        setProperty: ([propertyName, nextValue], invoke) => {\n          switch (propertyName) {\n            case 'onloadstart':\n            case 'onprogress':\n            case 'onaboart':\n            case 'onerror':\n            case 'onload':\n            case 'ontimeout':\n            case 'onloadend': {\n              const eventName = propertyName.slice(\n                2\n              ) as keyof XMLHttpRequestEventTargetEventMap\n\n              this.registerUploadEvent(eventName, nextValue as Function)\n            }\n          }\n\n          return invoke()\n        },\n        methodCall: ([methodName, args], invoke) => {\n          switch (methodName) {\n            case 'addEventListener': {\n              const [eventName, listener] = args as [\n                keyof XMLHttpRequestEventTargetEventMap,\n                Function,\n              ]\n              this.registerUploadEvent(eventName, listener)\n              this.logger.info('upload.addEventListener', eventName, listener)\n\n              return invoke()\n            }\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  private registerUploadEvent(\n    eventName: keyof XMLHttpRequestEventTargetEventMap,\n    listener: Function\n  ): void {\n    const prevEvents = this.uploadEvents.get(eventName) || []\n    const nextEvents = prevEvents.concat(listener)\n    this.uploadEvents.set(eventName, nextEvents)\n\n    this.logger.info('registered upload event \"%s\"', eventName, listener)\n  }\n\n  /**\n   * Responds to the current request with the given\n   * Fetch API `Response` instance.\n   */\n  public async respondWith(response: Response): Promise<void> {\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     * Mark this request as having a mocked response immediately since\n     * calculating request/response total body length is asynchronous.\n     */\n    this[kIsRequestHandled] = true\n\n    /**\n     * Dispatch request upload events for requests with a body.\n     * @see https://github.com/mswjs/interceptors/issues/573\n     */\n    if (this[kFetchRequest]) {\n      const totalRequestBodyLength = await getBodyByteLength(\n        this[kFetchRequest]\n      )\n\n      this.trigger('loadstart', this.request.upload, {\n        loaded: 0,\n        total: totalRequestBodyLength,\n      })\n      this.trigger('progress', this.request.upload, {\n        loaded: totalRequestBodyLength,\n        total: totalRequestBodyLength,\n      })\n      this.trigger('load', this.request.upload, {\n        loaded: totalRequestBodyLength,\n        total: totalRequestBodyLength,\n      })\n\n      this.trigger('loadend', this.request.upload, {\n        loaded: totalRequestBodyLength,\n        total: totalRequestBodyLength,\n      })\n    }\n\n    this.logger.info(\n      'responding with a mocked response: %d %s',\n      response.status,\n      response.statusText\n    )\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 = await getBodyByteLength(response.clone())\n\n    this.logger.info('calculated response body length', totalResponseBodyLength)\n\n    this.trigger('loadstart', this.request, {\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', this.request, {\n        loaded: this.responseBuffer.byteLength,\n        total: totalResponseBodyLength,\n      })\n\n      this.trigger('loadend', this.request, {\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', this.request, {\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    /**\n     * @note Mark this request as handled even if it received a mock error.\n     * This prevents the controller from trying to perform this request as-is.\n     */\n    this[kIsRequestHandled] = true\n    this.logger.info('responding with an error')\n\n    this.setReadyState(this.request.DONE)\n    this.trigger('error', this.request)\n    this.trigger('loadend', this.request)\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('triggering \"readystatechange\" event...')\n\n      this.trigger('readystatechange', this.request)\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  >(\n    eventName: EventName,\n    target: XMLHttpRequest | XMLHttpRequestUpload,\n    options?: ProgressEventInit\n  ): void {\n    const callback = (target as XMLHttpRequest)[`on${eventName}`]\n    const event = createEvent(target, 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(target as XMLHttpRequest, event)\n    }\n\n    // Invoke event listeners.\n    const events =\n      target instanceof XMLHttpRequestUpload ? this.uploadEvents : this.events\n\n    for (const [registeredEventName, listeners] of 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(target, event))\n      }\n    }\n  }\n\n  /**\n   * Converts this `XMLHttpRequest` instance into a Fetch API `Request` instance.\n   */\n  private toFetchApiRequest(\n    body: XMLHttpRequestBodyInit | Document | null | undefined\n  ): Request {\n    this.logger.info('converting request to a Fetch API Request...')\n\n    // If the `Document` is used as the body of this XMLHttpRequest,\n    // set its inner text as the Fetch API Request body.\n    const resolvedBody =\n      body instanceof Document ? body.documentElement.innerText : body\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.toUpperCase())\n        ? null\n        : resolvedBody,\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    setRawRequest(fetchRequest, this.request)\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 type { Logger } from '@open-draft/logger'\nimport { XMLHttpRequestEmitter } from '.'\nimport { RequestController } from '../../RequestController'\nimport { XMLHttpRequestController } from './XMLHttpRequestController'\nimport { handleRequest } from '../../utils/handleRequest'\nimport { isResponseError } from '../../utils/responseUtils'\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 controller = new RequestController(request, {\n          passthrough: () => {\n            this.logger.info(\n              'no mocked response received, performing request as-is...'\n            )\n          },\n          respondWith: async (response) => {\n            if (isResponseError(response)) {\n              this.errorWith(new TypeError('Network error'))\n              return\n            }\n\n            await this.respondWith(response)\n          },\n          errorWith: (reason) => {\n            this.logger.info('request errored!', { error: reason })\n\n            if (reason instanceof Error) {\n              this.errorWith(reason)\n            }\n          },\n        })\n\n        this.logger.info('awaiting mocked response...')\n\n        this.logger.info(\n          'emitting the \"request\" event for %s listener(s)...',\n          emitter.listenerCount('request')\n        )\n\n        await handleRequest({\n          request,\n          requestId,\n          controller,\n          emitter,\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 { Interceptor } from '../../Interceptor'\nimport { createXMLHttpRequestProxy } from './XMLHttpRequestProxy'\nimport { hasConfigurableGlobal } from '../../utils/hasConfigurableGlobal'\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 hasConfigurableGlobal('XMLHttpRequest')\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'\nimport { isHandlerKind } from '~/core/utils/internal/isHandlerKind'\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, controller }) => {\n    const requestCloneForLogs = request.clone()\n\n    const response = await handleRequest(\n      request,\n      requestId,\n      context.getRequestHandlers().filter(isHandlerKind('RequestHandler')),\n      options,\n      context.emitter,\n      {\n        resolutionContext: {\n          quiet: options.quiet,\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      controller.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 { devUtils } from '~/core/utils/internal/devUtils'\n\nexport function printStopMessage(args: { quiet?: boolean } = {}): void {\n  if (args.quiet) {\n    return\n  }\n\n  // eslint-disable-next-line no-console\n  console.log(\n    `%c${devUtils.formatMessage('Mocking disabled.')}`,\n    'color:orangered;font-weight:bold;',\n  )\n}\n"],"mappings":"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","names":["error","devUtils","error","error: any","worker","devUtils","devUtils","error","devUtils","devUtils","IS_PATCHED_MODULE: unique symbol","InterceptorError","RequestController","request: Request","source: RequestControllerSource","symbol","FetchResponse","symbol: symbol","BatchInterceptor","devUtils","devUtils","error","devUtils","mergeRight","#list","Emitter","Emitter","until","error","isObject","error","handleRequest","until","locationUrl: URL","error","requestInit: RequestInit","readable","FetchInterceptor","until","response","handleRequest","handler: ProxyHandler<T>","next","IS_NODE","initialRequest: XMLHttpRequest","logger: Logger","error","handleRequest","XMLHttpRequestInterceptor","handleRequest","isHandlerKind","response","devUtils","devUtils","mergeRight"]}