{"version":3,"sources":["../../../src/core/experimental/on-unhandled-frame.ts"],"sourcesContent":["import { invariant } from 'outvariant'\nimport { isCommonAssetRequest } from '../isCommonAssetRequest'\nimport { devUtils, InternalError } from '../utils/internal/devUtils'\nimport { HttpNetworkFrame } from './frames/http-frame'\nimport { type AnyNetworkFrame } from './frames/network-frame'\n\nexport type UnhandledFrameHandle =\n  | UnhandledFrameStrategy\n  | UnhandledFrameCallback\n\nexport type UnhandledFrameStrategy = 'bypass' | 'warn' | 'error'\n\nexport type UnhandledFrameCallback = (args: {\n  frame: AnyNetworkFrame\n  defaults: UnhandledFrameDefaults\n}) => Promise<void> | void\n\nexport type UnhandledFrameDefaults = {\n  warn: () => void\n  error: () => void\n}\n\nexport async function executeUnhandledFrameHandle(\n  frame: AnyNetworkFrame,\n  handle: UnhandledFrameHandle,\n): Promise<void> {\n  const printStrategyMessage = async (\n    strategy: UnhandledFrameStrategy,\n  ): Promise<void> => {\n    if (strategy === 'bypass') {\n      return\n    }\n\n    const message = await frame.getUnhandledMessage()\n\n    switch (strategy) {\n      case 'warn': {\n        return devUtils.warn('Warning: %s', message)\n      }\n\n      case 'error': {\n        return devUtils.error('Error: %s', message)\n      }\n    }\n  }\n\n  const applyStrategy = async (\n    strategy: UnhandledFrameStrategy,\n  ): Promise<void> => {\n    invariant.as(\n      InternalError,\n      strategy === 'bypass' || strategy === 'warn' || strategy === 'error',\n      /**\n       * @fixme Rename \"onUnhandledRequest\" to \"onUnhandledFrame\" in the error message\n       * with the next major release.\n       */\n      devUtils.formatMessage(\n        'Failed to react to an unhandled network frame: unknown strategy \"%s\". Please provide one of the supported strategies (\"bypass\", \"warn\", \"error\") or a custom callback function as the value of the \"onUnhandledRequest\" option.',\n        strategy,\n      ),\n    )\n\n    if (strategy === 'bypass') {\n      return\n    }\n\n    await printStrategyMessage(strategy)\n\n    if (strategy === 'error') {\n      return Promise.reject(\n        new InternalError(\n          devUtils.formatMessage(\n            'Cannot bypass a request when using the \"error\" strategy for the \"onUnhandledRequest\" option.',\n          ),\n        ),\n      )\n    }\n  }\n\n  if (typeof handle === 'function') {\n    return handle({\n      frame,\n      defaults: {\n        warn: printStrategyMessage.bind(null, 'warn'),\n        /**\n         * @note The defaults only print the corresponding messages now.\n         * They do not affect the frame resolution (e.g. do not error the frame).\n         * That is only for backward compatibility reasons. In the future, these should\n         * be an alias to `applyStrategy.bind(null, 'error')` instead.\n         */\n        error: printStrategyMessage.bind(null, 'error'),\n      },\n    })\n  }\n\n  /**\n   * Ignore unhandled common HTTP assets.\n   * @note Calling this here applies the common assets check\n   * only to the scenarios when `onUnhandledFrame` was set to a predefined strategy.\n   * When using a custom function, you need to check for common assets manually.\n   */\n  if (\n    frame instanceof HttpNetworkFrame &&\n    isCommonAssetRequest(frame.data.request)\n  ) {\n    return\n  }\n\n  return applyStrategy(handle)\n}\n"],"mappings":"AAAA,SAAS,iBAAiB;AAC1B,SAAS,4BAA4B;AACrC,SAAS,UAAU,qBAAqB;AACxC,SAAS,wBAAwB;AACjC,eAAqC;AAkBrC,eAAsB,4BACpB,OACA,QACe;AACf,QAAM,uBAAuB,OAC3B,aACkB;AAClB,QAAI,aAAa,UAAU;AACzB;AAAA,IACF;AAEA,UAAM,UAAU,MAAM,MAAM,oBAAoB;AAEhD,YAAQ,UAAU;AAAA,MAChB,KAAK,QAAQ;AACX,eAAO,SAAS,KAAK,eAAe,OAAO;AAAA,MAC7C;AAAA,MAEA,KAAK,SAAS;AACZ,eAAO,SAAS,MAAM,aAAa,OAAO;AAAA,MAC5C;AAAA,IACF;AAAA,EACF;AAEA,QAAM,gBAAgB,OACpB,aACkB;AAClB,cAAU;AAAA,MACR;AAAA,MACA,aAAa,YAAY,aAAa,UAAU,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA,MAK7D,SAAS;AAAA,QACP;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,QAAI,aAAa,UAAU;AACzB;AAAA,IACF;AAEA,UAAM,qBAAqB,QAAQ;AAEnC,QAAI,aAAa,SAAS;AACxB,aAAO,QAAQ;AAAA,QACb,IAAI;AAAA,UACF,SAAS;AAAA,YACP;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,MAAI,OAAO,WAAW,YAAY;AAChC,WAAO,OAAO;AAAA,MACZ;AAAA,MACA,UAAU;AAAA,QACR,MAAM,qBAAqB,KAAK,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAO5C,OAAO,qBAAqB,KAAK,MAAM,OAAO;AAAA,MAChD;AAAA,IACF,CAAC;AAAA,EACH;AAQA,MACE,iBAAiB,oBACjB,qBAAqB,MAAM,KAAK,OAAO,GACvC;AACA;AAAA,EACF;AAEA,SAAO,cAAc,MAAM;AAC7B;","names":[]}