{"version":3,"sources":["../../../../src/next-devtools/userspace/pages/pages-dev-overlay-setup.tsx"],"sourcesContent":["import React from 'react'\nimport { renderPagesDevOverlay } from 'next/dist/compiled/next-devtools'\nimport { dispatcher } from 'next/dist/compiled/next-devtools'\nimport {\n  attachHydrationErrorState,\n  storeHydrationErrorStateFromConsoleArgs,\n} from './hydration-error-state'\nimport { Router } from '../../../client/router'\nimport { getOwnerStack } from '../app/errors/stitched-error'\nimport { isRecoverableError } from '../../../client/react-client-callbacks/on-recoverable-error'\nimport { getSquashedHydrationErrorDetails } from './hydration-error-state'\nimport { PagesDevOverlayErrorBoundary } from './pages-dev-overlay-error-boundary'\nimport {\n  initializeDebugLogForwarding,\n  forwardUnhandledError,\n  logUnhandledRejection,\n  forwardErrorLog,\n  isTerminalLoggingEnabled,\n} from '../app/forward-logs'\n\nconst usePagesDevOverlayBridge = () => {\n  React.useInsertionEffect(() => {\n    // NDT uses a different React instance so it's not technically a state update\n    // scheduled from useInsertionEffect.\n    renderPagesDevOverlay(\n      getOwnerStack,\n      getSquashedHydrationErrorDetails,\n      isRecoverableError\n    )\n  }, [])\n\n  React.useEffect(() => {\n    const { handleStaticIndicator } =\n      require('../../../client/dev/hot-reloader/pages/hot-reloader-pages') as typeof import('../../../client/dev/hot-reloader/pages/hot-reloader-pages')\n\n    Router.events.on('routeChangeComplete', handleStaticIndicator)\n\n    return function () {\n      Router.events.off('routeChangeComplete', handleStaticIndicator)\n    }\n  }, [])\n}\n\nexport type PagesDevOverlayBridgeType = typeof PagesDevOverlayBridge\n\ninterface PagesDevOverlayBridgeProps {\n  children?: React.ReactNode\n}\n\nexport function PagesDevOverlayBridge({\n  children,\n}: PagesDevOverlayBridgeProps) {\n  usePagesDevOverlayBridge()\n\n  return <PagesDevOverlayErrorBoundary>{children}</PagesDevOverlayErrorBoundary>\n}\n\nlet isRegistered = false\n\nfunction handleError(error: unknown) {\n  if (!error || !(error instanceof Error) || typeof error.stack !== 'string') {\n    // A non-error was thrown, we don't have anything to show. :-(\n    return\n  }\n\n  attachHydrationErrorState(error)\n\n  // Skip ModuleBuildError and ModuleNotFoundError, as it will be sent through onBuildError callback.\n  // This is to avoid same error as different type showing up on client to cause flashing.\n  if (\n    error.name !== 'ModuleBuildError' &&\n    error.name !== 'ModuleNotFoundError'\n  ) {\n    dispatcher.onUnhandledError(error)\n  }\n}\n\nlet origConsoleError = console.error\nfunction nextJsHandleConsoleError(...args: any[]) {\n  // See https://github.com/facebook/react/blob/d50323eb845c5fde0d720cae888bf35dedd05506/packages/react-reconciler/src/ReactFiberErrorLogger.js#L78\n  const maybeError = process.env.NODE_ENV !== 'production' ? args[1] : args[0]\n  storeHydrationErrorStateFromConsoleArgs(...args)\n  // TODO: Surfaces non-errors logged via `console.error`.\n  handleError(maybeError)\n  if (isTerminalLoggingEnabled) {\n    forwardErrorLog(args)\n  }\n  origConsoleError.apply(window.console, args)\n}\n\nfunction onUnhandledError(event: ErrorEvent) {\n  const error = event?.error\n  handleError(error)\n\n  if (error && isTerminalLoggingEnabled) {\n    forwardUnhandledError(error as Error)\n  }\n}\n\nfunction onUnhandledRejection(ev: PromiseRejectionEvent) {\n  const reason = ev?.reason\n  if (\n    !reason ||\n    !(reason instanceof Error) ||\n    typeof reason.stack !== 'string'\n  ) {\n    // A non-error was thrown, we don't have anything to show. :-(\n    return\n  }\n\n  dispatcher.onUnhandledRejection(reason)\n  if (isTerminalLoggingEnabled) {\n    logUnhandledRejection(reason)\n  }\n}\n\nexport function register() {\n  if (isRegistered) {\n    return\n  }\n  isRegistered = true\n\n  try {\n    Error.stackTraceLimit = 50\n  } catch {}\n\n  if (isTerminalLoggingEnabled) {\n    initializeDebugLogForwarding('pages')\n  }\n  window.addEventListener('error', onUnhandledError)\n  window.addEventListener('unhandledrejection', onUnhandledRejection)\n  window.console.error = nextJsHandleConsoleError\n}\n"],"names":["PagesDevOverlayBridge","register","usePagesDevOverlayBridge","React","useInsertionEffect","renderPagesDevOverlay","getOwnerStack","getSquashedHydrationErrorDetails","isRecoverableError","useEffect","handleStaticIndicator","require","Router","events","on","off","children","PagesDevOverlayErrorBoundary","isRegistered","handleError","error","Error","stack","attachHydrationErrorState","name","dispatcher","onUnhandledError","origConsoleError","console","nextJsHandleConsoleError","args","maybeError","process","env","NODE_ENV","storeHydrationErrorStateFromConsoleArgs","isTerminalLoggingEnabled","forwardErrorLog","apply","window","event","forwardUnhandledError","onUnhandledRejection","ev","reason","logUnhandledRejection","stackTraceLimit","initializeDebugLogForwarding","addEventListener"],"mappings":";;;;;;;;;;;;;;;IAiDgBA,qBAAqB;eAArBA;;IAmEAC,QAAQ;eAARA;;;;;gEApHE;8BACoB;qCAK/B;wBACgB;+BACO;oCACK;8CAEU;6BAOtC;AAEP,MAAMC,2BAA2B;IAC/BC,cAAK,CAACC,kBAAkB,CAAC;QACvB,6EAA6E;QAC7E,qCAAqC;QACrCC,IAAAA,mCAAqB,EACnBC,4BAAa,EACbC,qDAAgC,EAChCC,sCAAkB;IAEtB,GAAG,EAAE;IAELL,cAAK,CAACM,SAAS,CAAC;QACd,MAAM,EAAEC,qBAAqB,EAAE,GAC7BC,QAAQ;QAEVC,cAAM,CAACC,MAAM,CAACC,EAAE,CAAC,uBAAuBJ;QAExC,OAAO;YACLE,cAAM,CAACC,MAAM,CAACE,GAAG,CAAC,uBAAuBL;QAC3C;IACF,GAAG,EAAE;AACP;AAQO,SAASV,sBAAsB,KAET;IAFS,IAAA,EACpCgB,QAAQ,EACmB,GAFS;IAGpCd;IAEA,qBAAO,qBAACe,0DAA4B;kBAAED;;AACxC;AAEA,IAAIE,eAAe;AAEnB,SAASC,YAAYC,KAAc;IACjC,IAAI,CAACA,SAAS,CAAEA,CAAAA,iBAAiBC,KAAI,KAAM,OAAOD,MAAME,KAAK,KAAK,UAAU;QAC1E,8DAA8D;QAC9D;IACF;IAEAC,IAAAA,8CAAyB,EAACH;IAE1B,mGAAmG;IACnG,wFAAwF;IACxF,IACEA,MAAMI,IAAI,KAAK,sBACfJ,MAAMI,IAAI,KAAK,uBACf;QACAC,wBAAU,CAACC,gBAAgB,CAACN;IAC9B;AACF;AAEA,IAAIO,mBAAmBC,QAAQR,KAAK;AACpC,SAASS;IAAyB,IAAA,IAAA,OAAA,UAAA,QAAA,AAAGC,OAAH,UAAA,OAAA,OAAA,GAAA,OAAA,MAAA;QAAGA,KAAH,QAAA,SAAA,CAAA,KAAc;;IAC9C,iJAAiJ;IACjJ,MAAMC,aAAaC,QAAQC,GAAG,CAACC,QAAQ,KAAK,eAAeJ,IAAI,CAAC,EAAE,GAAGA,IAAI,CAAC,EAAE;IAC5EK,IAAAA,4DAAuC,KAAIL;IAC3C,wDAAwD;IACxDX,YAAYY;IACZ,IAAIK,qCAAwB,EAAE;QAC5BC,IAAAA,4BAAe,EAACP;IAClB;IACAH,iBAAiBW,KAAK,CAACC,OAAOX,OAAO,EAAEE;AACzC;AAEA,SAASJ,iBAAiBc,KAAiB;IACzC,MAAMpB,QAAQoB,yBAAAA,MAAOpB,KAAK;IAC1BD,YAAYC;IAEZ,IAAIA,SAASgB,qCAAwB,EAAE;QACrCK,IAAAA,kCAAqB,EAACrB;IACxB;AACF;AAEA,SAASsB,qBAAqBC,EAAyB;IACrD,MAAMC,SAASD,sBAAAA,GAAIC,MAAM;IACzB,IACE,CAACA,UACD,CAAEA,CAAAA,kBAAkBvB,KAAI,KACxB,OAAOuB,OAAOtB,KAAK,KAAK,UACxB;QACA,8DAA8D;QAC9D;IACF;IAEAG,wBAAU,CAACiB,oBAAoB,CAACE;IAChC,IAAIR,qCAAwB,EAAE;QAC5BS,IAAAA,kCAAqB,EAACD;IACxB;AACF;AAEO,SAAS3C;IACd,IAAIiB,cAAc;QAChB;IACF;IACAA,eAAe;IAEf,IAAI;QACFG,MAAMyB,eAAe,GAAG;IAC1B,EAAE,UAAM,CAAC;IAET,IAAIV,qCAAwB,EAAE;QAC5BW,IAAAA,yCAA4B,EAAC;IAC/B;IACAR,OAAOS,gBAAgB,CAAC,SAAStB;IACjCa,OAAOS,gBAAgB,CAAC,sBAAsBN;IAC9CH,OAAOX,OAAO,CAACR,KAAK,GAAGS;AACzB","ignoreList":[0]}