{"version":3,"sources":["../../../../../src/shared/lib/router/router.ts"],"sourcesContent":["import type { ComponentType } from 'react'\nimport type { DomainLocale } from '../../../server/config'\nimport type { MittEmitter } from '../mitt'\nimport type { ParsedUrlQuery } from 'querystring'\nimport type { RouterEvent } from '../../../client/router'\nimport type { StyleSheetTuple } from '../../../client/page-loader'\nimport type { UrlObject } from 'url'\nimport type PageLoader from '../../../client/page-loader'\nimport type { AppContextType, NextPageContext, NEXT_DATA } from '../utils'\nimport { removeTrailingSlash } from './utils/remove-trailing-slash'\nimport {\n  getClientBuildManifest,\n  isAssetError,\n  markAssetError,\n} from '../../../client/route-loader'\nimport { handleClientScriptLoad } from '../../../client/script'\nimport isError, { getProperError } from '../../../lib/is-error'\nimport { denormalizePagePath } from '../page-path/denormalize-page-path'\nimport { normalizeLocalePath } from '../i18n/normalize-locale-path'\nimport mitt from '../mitt'\nimport { getLocationOrigin, getURL, loadGetInitialProps, ST } from '../utils'\nimport { isDynamicRoute } from './utils/is-dynamic'\nimport { parseRelativeUrl } from './utils/parse-relative-url'\nimport { getRouteMatcher } from './utils/route-matcher'\nimport { getRouteRegex } from './utils/route-regex'\nimport { formatWithValidation } from './utils/format-url'\nimport { detectDomainLocale } from '../../../client/detect-domain-locale'\nimport { parsePath } from './utils/parse-path'\nimport { addLocale } from '../../../client/add-locale'\nimport { removeLocale } from '../../../client/remove-locale'\nimport { removeBasePath } from '../../../client/remove-base-path'\nimport { addBasePath } from '../../../client/add-base-path'\nimport { hasBasePath } from '../../../client/has-base-path'\nimport { resolveHref } from '../../../client/resolve-href'\nimport { isAPIRoute } from '../../../lib/is-api-route'\nimport { getNextPathnameInfo } from './utils/get-next-pathname-info'\nimport { formatNextPathnameInfo } from './utils/format-next-pathname-info'\nimport { compareRouterStates } from './utils/compare-states'\nimport { isLocalURL } from './utils/is-local-url'\nimport { isBot } from './utils/is-bot'\nimport { omit } from './utils/omit'\nimport { interpolateAs } from './utils/interpolate-as'\nimport { disableSmoothScrollDuringRouteTransition } from './utils/disable-smooth-scroll'\nimport type { Params } from '../../../server/request/params'\nimport {\n  MATCHED_PATH_HEADER,\n  NEXT_NAV_DEPLOYMENT_ID_HEADER,\n} from '../../../lib/constants'\nimport { getDeploymentId } from '../deployment-id'\nimport { isJavaScriptURLString } from '../../../client/lib/javascript-url'\n\nlet resolveRewrites: typeof import('./utils/resolve-rewrites').default\nif (process.env.__NEXT_HAS_REWRITES) {\n  resolveRewrites = (\n    require('./utils/resolve-rewrites') as typeof import('./utils/resolve-rewrites')\n  ).default\n}\n\ndeclare global {\n  interface Window {\n    /* prod */\n    __NEXT_DATA__: NEXT_DATA\n  }\n}\n\ninterface RouteProperties {\n  shallow: boolean\n}\n\ninterface TransitionOptions {\n  shallow?: boolean\n  locale?: string | false\n  scroll?: boolean\n  unstable_skipClientCache?: boolean\n}\n\ninterface NextHistoryState {\n  url: string\n  as: string\n  options: TransitionOptions\n}\n\nexport type HistoryState =\n  | null\n  | { __NA: true; __N?: false }\n  | { __N: false; __NA?: false }\n  | ({ __NA?: false; __N: true; key: string } & NextHistoryState)\n\nfunction buildCancellationError() {\n  return Object.assign(new Error('Route Cancelled'), {\n    cancelled: true,\n  })\n}\n\ninterface MiddlewareEffectParams<T extends FetchDataOutput> {\n  fetchData?: () => Promise<T>\n  locale?: string\n  asPath: string\n  router: Router\n}\n\nexport async function matchesMiddleware<T extends FetchDataOutput>(\n  options: MiddlewareEffectParams<T>\n): Promise<boolean> {\n  const matchers = await Promise.resolve(\n    options.router.pageLoader.getMiddleware()\n  )\n  if (!matchers) return false\n\n  const { pathname: asPathname } = parsePath(options.asPath)\n  // remove basePath first since path prefix has to be in the order of `/${basePath}/${locale}`\n  const cleanedAs = hasBasePath(asPathname)\n    ? removeBasePath(asPathname)\n    : asPathname\n  const asWithBasePathAndLocale = addBasePath(\n    addLocale(cleanedAs, options.locale)\n  )\n\n  // Check only path match on client. Matching \"has\" should be done on server\n  // where we can access more info such as headers, HttpOnly cookie, etc.\n  return matchers.some((m) =>\n    new RegExp(m.regexp).test(asWithBasePathAndLocale)\n  )\n}\n\nfunction stripOrigin(url: string) {\n  const origin = getLocationOrigin()\n\n  return url.startsWith(origin) ? url.substring(origin.length) : url\n}\n\nfunction prepareUrlAs(router: NextRouter, url: Url, as?: Url) {\n  // If url and as provided as an object representation,\n  // we'll format them into the string version here.\n  let [resolvedHref, resolvedAs] = resolveHref(router, url, true)\n  const origin = getLocationOrigin()\n  const hrefWasAbsolute = resolvedHref.startsWith(origin)\n  const asWasAbsolute = resolvedAs && resolvedAs.startsWith(origin)\n\n  resolvedHref = stripOrigin(resolvedHref)\n  resolvedAs = resolvedAs ? stripOrigin(resolvedAs) : resolvedAs\n\n  const preparedUrl = hrefWasAbsolute ? resolvedHref : addBasePath(resolvedHref)\n  const preparedAs = as\n    ? stripOrigin(resolveHref(router, as))\n    : resolvedAs || resolvedHref\n\n  return {\n    url: preparedUrl,\n    as: asWasAbsolute ? preparedAs : addBasePath(preparedAs),\n  }\n}\n\nfunction resolveDynamicRoute(pathname: string, pages: string[]) {\n  const cleanPathname = removeTrailingSlash(denormalizePagePath(pathname))\n  if (cleanPathname === '/404' || cleanPathname === '/_error') {\n    return pathname\n  }\n\n  // handle resolving href for dynamic routes\n  if (!pages.includes(cleanPathname)) {\n    // eslint-disable-next-line array-callback-return\n    pages.some((page) => {\n      if (isDynamicRoute(page) && getRouteRegex(page).re.test(cleanPathname)) {\n        pathname = page\n        return true\n      }\n    })\n  }\n  return removeTrailingSlash(pathname)\n}\n\nfunction getMiddlewareData<T extends FetchDataOutput>(\n  source: string,\n  response: Response,\n  options: MiddlewareEffectParams<T>\n) {\n  const nextConfig = {\n    basePath: options.router.basePath,\n    i18n: { locales: options.router.locales },\n    trailingSlash: Boolean(process.env.__NEXT_TRAILING_SLASH),\n  }\n  const rewriteHeader = response.headers.get('x-nextjs-rewrite')\n\n  let rewriteTarget =\n    rewriteHeader || response.headers.get('x-nextjs-matched-path')\n\n  const matchedPath = response.headers.get(MATCHED_PATH_HEADER)\n\n  if (\n    matchedPath &&\n    !rewriteTarget &&\n    !matchedPath.includes('__next_data_catchall') &&\n    !matchedPath.includes('/_error') &&\n    !matchedPath.includes('/404')\n  ) {\n    // leverage x-matched-path to detect next.config.js rewrites\n    rewriteTarget = matchedPath\n  }\n\n  if (rewriteTarget) {\n    if (\n      rewriteTarget.startsWith('/') ||\n      process.env.__NEXT_EXTERNAL_MIDDLEWARE_REWRITE_RESOLVE\n    ) {\n      const parsedRewriteTarget = parseRelativeUrl(rewriteTarget)\n      const pathnameInfo = getNextPathnameInfo(parsedRewriteTarget.pathname, {\n        nextConfig,\n        parseData: true,\n      })\n\n      let fsPathname = removeTrailingSlash(pathnameInfo.pathname)\n      return Promise.all([\n        options.router.pageLoader.getPageList(),\n        getClientBuildManifest(),\n      ]).then(([pages, { __rewrites: rewrites }]: any) => {\n        let as = addLocale(pathnameInfo.pathname, pathnameInfo.locale)\n\n        if (\n          isDynamicRoute(as) ||\n          (!rewriteHeader &&\n            pages.includes(\n              normalizeLocalePath(removeBasePath(as), options.router.locales)\n                .pathname\n            ))\n        ) {\n          const parsedSource = getNextPathnameInfo(\n            parseRelativeUrl(source).pathname,\n            {\n              nextConfig: process.env.__NEXT_HAS_REWRITES\n                ? undefined\n                : nextConfig,\n              parseData: true,\n            }\n          )\n\n          as = addBasePath(parsedSource.pathname)\n          parsedRewriteTarget.pathname = as\n        }\n\n        if (process.env.__NEXT_HAS_REWRITES) {\n          const result = resolveRewrites(\n            as,\n            pages,\n            rewrites,\n            parsedRewriteTarget.query,\n            (path: string) => resolveDynamicRoute(path, pages),\n            options.router.locales\n          )\n\n          if (result.matchedPage) {\n            parsedRewriteTarget.pathname = result.parsedAs.pathname\n            as = parsedRewriteTarget.pathname\n            Object.assign(parsedRewriteTarget.query, result.parsedAs.query)\n          }\n        } else if (!pages.includes(fsPathname)) {\n          const resolvedPathname = resolveDynamicRoute(fsPathname, pages)\n\n          if (resolvedPathname !== fsPathname) {\n            fsPathname = resolvedPathname\n          }\n        }\n\n        const resolvedHref = !pages.includes(fsPathname)\n          ? resolveDynamicRoute(\n              normalizeLocalePath(\n                removeBasePath(parsedRewriteTarget.pathname),\n                options.router.locales\n              ).pathname,\n              pages\n            )\n          : fsPathname\n\n        if (isDynamicRoute(resolvedHref)) {\n          const matches = getRouteMatcher(getRouteRegex(resolvedHref))(as)\n          Object.assign(parsedRewriteTarget.query, matches || {})\n        }\n\n        return {\n          type: 'rewrite' as const,\n          parsedAs: parsedRewriteTarget,\n          resolvedHref,\n        }\n      })\n    }\n    const src = parsePath(source)\n    const pathname = formatNextPathnameInfo({\n      ...getNextPathnameInfo(src.pathname, { nextConfig, parseData: true }),\n      defaultLocale: options.router.defaultLocale,\n      buildId: '',\n    })\n\n    return Promise.resolve({\n      type: 'redirect-external' as const,\n      destination: `${pathname}${src.query}${src.hash}`,\n    })\n  }\n\n  const redirectTarget = response.headers.get('x-nextjs-redirect')\n\n  if (redirectTarget) {\n    if (redirectTarget.startsWith('/')) {\n      const src = parsePath(redirectTarget)\n      const pathname = formatNextPathnameInfo({\n        ...getNextPathnameInfo(src.pathname, { nextConfig, parseData: true }),\n        defaultLocale: options.router.defaultLocale,\n        buildId: '',\n      })\n\n      return Promise.resolve({\n        type: 'redirect-internal' as const,\n        newAs: `${pathname}${src.query}${src.hash}`,\n        newUrl: `${pathname}${src.query}${src.hash}`,\n      })\n    }\n\n    return Promise.resolve({\n      type: 'redirect-external' as const,\n      destination: redirectTarget,\n    })\n  }\n\n  return Promise.resolve({ type: 'next' as const })\n}\n\ninterface WithMiddlewareEffectsOutput extends FetchDataOutput {\n  effect: Awaited<ReturnType<typeof getMiddlewareData>>\n}\n\nasync function withMiddlewareEffects<T extends FetchDataOutput>(\n  options: MiddlewareEffectParams<T>\n): Promise<WithMiddlewareEffectsOutput | null> {\n  const matches = await matchesMiddleware(options)\n  if (!matches || !options.fetchData) {\n    return null\n  }\n\n  const data = await options.fetchData()\n\n  const effect = await getMiddlewareData(data.dataHref, data.response, options)\n\n  return {\n    dataHref: data.dataHref,\n    json: data.json,\n    response: data.response,\n    text: data.text,\n    cacheKey: data.cacheKey,\n    effect,\n  }\n}\n\nexport type Url = UrlObject | string\n\nexport type BaseRouter = {\n  route: string\n  pathname: string\n  query: ParsedUrlQuery\n  asPath: string\n  basePath: string\n  locale?: string | undefined\n  locales?: readonly string[] | undefined\n  defaultLocale?: string | undefined\n  domainLocales?: readonly DomainLocale[] | undefined\n  isLocaleDomain: boolean\n}\n\nexport type NextRouter = BaseRouter &\n  Pick<\n    Router,\n    | 'push'\n    | 'replace'\n    | 'reload'\n    | 'back'\n    | 'forward'\n    | 'prefetch'\n    | 'beforePopState'\n    | 'events'\n    | 'isFallback'\n    | 'isReady'\n    | 'isPreview'\n  >\n\nexport type PrefetchOptions = {\n  priority?: boolean\n  locale?: string | false\n  unstable_skipClientCache?: boolean\n}\n\nexport type PrivateRouteInfo =\n  | (Omit<CompletePrivateRouteInfo, 'styleSheets'> & { initial: true })\n  | CompletePrivateRouteInfo\n\nexport type CompletePrivateRouteInfo = {\n  Component: ComponentType\n  styleSheets: StyleSheetTuple[]\n  __N_SSG?: boolean\n  __N_SSP?: boolean\n  props?: Record<string, any>\n  err?: Error\n  error?: any\n  route?: string\n  resolvedAs?: string\n  query?: ParsedUrlQuery\n}\n\nexport type AppProps = Pick<CompletePrivateRouteInfo, 'Component' | 'err'> & {\n  router: Router\n} & Record<string, any>\nexport type AppComponent = ComponentType<AppProps>\n\ntype Subscription = (\n  data: PrivateRouteInfo,\n  App: AppComponent,\n  resetScroll: { x: number; y: number } | null\n) => Promise<void>\n\ntype BeforePopStateCallback = (state: NextHistoryState) => boolean\n\ntype ComponentLoadCancel = (() => void) | null\n\ntype HistoryMethod = 'replaceState' | 'pushState'\n\nconst manualScrollRestoration =\n  process.env.__NEXT_SCROLL_RESTORATION &&\n  typeof window !== 'undefined' &&\n  'scrollRestoration' in window.history &&\n  !!(function () {\n    try {\n      let v = '__next'\n      return (sessionStorage.setItem(v, v), sessionStorage.removeItem(v), true)\n    } catch (n) {}\n  })()\n\nconst SSG_DATA_NOT_FOUND = Symbol('SSG_DATA_NOT_FOUND')\n\nfunction fetchRetry(\n  url: string,\n  attempts: number,\n  options: Pick<RequestInit, 'method' | 'headers'>\n): Promise<Response> {\n  return fetch(url, {\n    // Cookies are required to be present for Next.js' SSG \"Preview Mode\".\n    // Cookies may also be required for `getServerSideProps`.\n    //\n    // > `fetch` won’t send cookies, unless you set the credentials init\n    // > option.\n    // https://developer.mozilla.org/docs/Web/API/Fetch_API/Using_Fetch\n    //\n    // > For maximum browser compatibility when it comes to sending &\n    // > receiving cookies, always supply the `credentials: 'same-origin'`\n    // > option instead of relying on the default.\n    // https://github.com/github/fetch#caveats\n    credentials: 'same-origin',\n    method: options.method || 'GET',\n    headers: Object.assign({}, options.headers, {\n      'x-nextjs-data': '1',\n    }),\n  }).then((response) => {\n    return !response.ok && attempts > 1 && response.status >= 500\n      ? fetchRetry(url, attempts - 1, options)\n      : response\n  })\n}\n\ninterface FetchDataOutput {\n  dataHref: string\n  json: Record<string, any> | null\n  response: Response\n  text: string\n  cacheKey: string\n}\n\ninterface FetchNextDataParams {\n  dataHref: string\n  isServerRender: boolean\n  parseJSON: boolean | undefined\n  hasMiddleware?: boolean\n  inflightCache: NextDataCache\n  persistCache: boolean\n  isPrefetch: boolean\n  isBackground?: boolean\n  unstable_skipClientCache?: boolean\n}\n\nfunction tryToParseAsJSON(text: string) {\n  try {\n    return JSON.parse(text)\n  } catch (error) {\n    return null\n  }\n}\n\nfunction fetchNextData({\n  dataHref,\n  inflightCache,\n  isPrefetch,\n  hasMiddleware,\n  isServerRender,\n  parseJSON,\n  persistCache,\n  isBackground,\n  unstable_skipClientCache,\n}: FetchNextDataParams): Promise<FetchDataOutput> {\n  const { href: cacheKey } = new URL(dataHref, window.location.href)\n  const deploymentId = getDeploymentId()\n  const getData = (params?: { method?: 'HEAD' | 'GET' }) =>\n    fetchRetry(dataHref, isServerRender ? 3 : 1, {\n      headers: Object.assign(\n        {} as HeadersInit,\n        isPrefetch ? { purpose: 'prefetch' } : {},\n        isPrefetch && hasMiddleware ? { 'x-middleware-prefetch': '1' } : {},\n        deploymentId ? { 'x-deployment-id': deploymentId } : {}\n      ),\n      method: params?.method ?? 'GET',\n    })\n      .then((response) => {\n        if (response.ok && params?.method === 'HEAD') {\n          return { dataHref, response, text: '', json: {}, cacheKey }\n        }\n\n        return response.text().then((text) => {\n          if (!response.ok) {\n            /**\n             * When the data response is a redirect because of a middleware\n             * we do not consider it an error. The headers must bring the\n             * mapped location.\n             * TODO: Change the status code in the handler.\n             */\n            if (\n              hasMiddleware &&\n              [301, 302, 307, 308].includes(response.status)\n            ) {\n              return { dataHref, response, text, json: {}, cacheKey }\n            }\n\n            if (response.status === 404) {\n              if (tryToParseAsJSON(text)?.notFound) {\n                return {\n                  dataHref,\n                  json: { notFound: SSG_DATA_NOT_FOUND },\n                  response,\n                  text,\n                  cacheKey,\n                }\n              }\n            }\n\n            const error = new Error(`Failed to load static props`)\n\n            /**\n             * We should only trigger a server-side transition if this was\n             * caused on a client-side transition. Otherwise, we'd get into\n             * an infinite loop.\n             */\n            if (!isServerRender) {\n              markAssetError(error)\n            }\n\n            throw error\n          }\n\n          let dplResponseHeader = response.headers.get(\n            NEXT_NAV_DEPLOYMENT_ID_HEADER\n          )\n          if (dplResponseHeader != null && dplResponseHeader !== deploymentId) {\n            // When not found, or we want to force a MPA navigation because of Skew Protection\n            const error = new Error(\n              `Loaded static props were from an outdated deployment, forcing a hard reload`\n            )\n            /**\n             * We should only trigger a server-side transition if this was\n             * caused on a client-side transition. Otherwise, we'd get into\n             * an infinite loop.\n             */\n            if (!isServerRender) {\n              markAssetError(error)\n            }\n            throw error\n          }\n\n          return {\n            dataHref,\n            json: parseJSON ? tryToParseAsJSON(text) : null,\n            response,\n            text,\n            cacheKey,\n          }\n        })\n      })\n      .then((data) => {\n        if (\n          !persistCache ||\n          process.env.NODE_ENV !== 'production' ||\n          data.response.headers.get('x-middleware-cache') === 'no-cache'\n        ) {\n          delete inflightCache[cacheKey]\n        }\n        return data\n      })\n      .catch((err) => {\n        if (!unstable_skipClientCache) {\n          delete inflightCache[cacheKey]\n        }\n        if (\n          // chrome\n          err.message === 'Failed to fetch' ||\n          // firefox\n          err.message === 'NetworkError when attempting to fetch resource.' ||\n          // safari\n          err.message === 'Load failed'\n        ) {\n          markAssetError(err)\n        }\n        throw err\n      })\n\n  // when skipping client cache we wait to update\n  // inflight cache until successful data response\n  // this allows racing click event with fetching newer data\n  // without blocking navigation when stale data is available\n  if (unstable_skipClientCache && persistCache) {\n    return getData({}).then((data) => {\n      if (data.response.headers.get('x-middleware-cache') !== 'no-cache') {\n        // only update cache if not marked as no-cache\n        inflightCache[cacheKey] = Promise.resolve(data)\n      }\n\n      return data\n    })\n  }\n\n  if (inflightCache[cacheKey] !== undefined) {\n    return inflightCache[cacheKey]\n  }\n  return (inflightCache[cacheKey] = getData(\n    isBackground ? { method: 'HEAD' } : {}\n  ))\n}\n\ninterface NextDataCache {\n  [asPath: string]: Promise<FetchDataOutput>\n}\n\nexport function createKey() {\n  return Math.random().toString(36).slice(2, 10)\n}\n\nfunction handleHardNavigation({\n  url,\n  router,\n}: {\n  url: string\n  router: Router\n}) {\n  // ensure we don't trigger a hard navigation to the same\n  // URL as this can end up with an infinite refresh\n  if (url === addBasePath(addLocale(router.asPath, router.locale))) {\n    throw new Error(\n      `Invariant: attempted to hard navigate to the same URL ${url} ${location.href}`\n    )\n  }\n  window.location.href = url\n}\n\nconst getCancelledHandler = ({\n  route,\n  router,\n}: {\n  route: string\n  router: Router\n}) => {\n  let cancelled = false\n  const cancel = (router.clc = () => {\n    cancelled = true\n  })\n\n  const handleCancelled = () => {\n    if (cancelled) {\n      const error: any = new Error(\n        `Abort fetching component for route: \"${route}\"`\n      )\n      error.cancelled = true\n      throw error\n    }\n\n    if (cancel === router.clc) {\n      router.clc = null\n    }\n  }\n  return handleCancelled\n}\n\nexport default class Router implements BaseRouter {\n  basePath: string\n\n  /**\n   * Map of all components loaded in `Router`\n   */\n  components: { [pathname: string]: PrivateRouteInfo }\n  // Server Data Cache (full data requests)\n  sdc: NextDataCache = {}\n  // Server Background Cache (HEAD requests)\n  sbc: NextDataCache = {}\n\n  sub: Subscription\n  clc: ComponentLoadCancel\n  pageLoader: PageLoader\n  _bps: BeforePopStateCallback | undefined\n  events: MittEmitter<RouterEvent>\n  _wrapApp: (App: AppComponent) => any\n  isSsr: boolean\n  _inFlightRoute?: string | undefined\n  _shallow?: boolean | undefined\n  locales?: readonly string[] | undefined\n  defaultLocale?: string | undefined\n  domainLocales?: readonly DomainLocale[] | undefined\n  isReady: boolean\n  isLocaleDomain: boolean\n  isFirstPopStateEvent = true\n  _initialMatchesMiddlewarePromise: Promise<boolean>\n  // static entries filter\n  _bfl_s?: import('../../lib/bloom-filter').BloomFilter\n  // dynamic entires filter\n  _bfl_d?: import('../../lib/bloom-filter').BloomFilter\n\n  private state: Readonly<{\n    route: string\n    pathname: string\n    query: ParsedUrlQuery\n    asPath: string\n    locale: string | undefined\n    isFallback: boolean\n    isPreview: boolean\n  }>\n\n  private _key: string = createKey()\n\n  static events: MittEmitter<RouterEvent> = mitt()\n\n  constructor(\n    pathname: string,\n    query: ParsedUrlQuery,\n    as: string,\n    {\n      initialProps,\n      pageLoader,\n      App,\n      wrapApp,\n      Component,\n      err,\n      subscription,\n      isFallback,\n      locale,\n      locales,\n      defaultLocale,\n      domainLocales,\n      isPreview,\n    }: {\n      subscription: Subscription\n      initialProps: any\n      pageLoader: any\n      Component: ComponentType\n      App: AppComponent\n      wrapApp: (WrapAppComponent: AppComponent) => any\n      err?: Error\n      isFallback: boolean\n      locale?: string\n      locales?: readonly string[]\n      defaultLocale?: string\n      domainLocales?: readonly DomainLocale[]\n      isPreview?: boolean\n    }\n  ) {\n    // represents the current component key\n    const route = removeTrailingSlash(pathname)\n\n    // set up the component cache (by route keys)\n    this.components = {}\n    // We should not keep the cache, if there's an error\n    // Otherwise, this cause issues when when going back and\n    // come again to the errored page.\n    if (pathname !== '/_error') {\n      this.components[route] = {\n        Component,\n        initial: true,\n        props: initialProps,\n        err,\n        __N_SSG: initialProps && initialProps.__N_SSG,\n        __N_SSP: initialProps && initialProps.__N_SSP,\n      }\n    }\n\n    this.components['/_app'] = {\n      Component: App as ComponentType,\n      styleSheets: [\n        /* /_app does not need its stylesheets managed */\n      ],\n    }\n\n    // Backwards compat for Router.router.events\n    // TODO: Should be remove the following major version as it was never documented\n    this.events = Router.events\n\n    this.pageLoader = pageLoader\n    // if auto prerendered and dynamic route wait to update asPath\n    // until after mount to prevent hydration mismatch\n    const autoExportDynamic =\n      isDynamicRoute(pathname) && self.__NEXT_DATA__.autoExport\n\n    this.basePath = process.env.__NEXT_ROUTER_BASEPATH || ''\n    this.sub = subscription\n    this.clc = null\n    this._wrapApp = wrapApp\n    // make sure to ignore extra popState in safari on navigating\n    // back from external site\n    this.isSsr = true\n    this.isLocaleDomain = false\n    this.isReady = !!(\n      self.__NEXT_DATA__.gssp ||\n      self.__NEXT_DATA__.gip ||\n      self.__NEXT_DATA__.isExperimentalCompile ||\n      (self.__NEXT_DATA__.appGip && !self.__NEXT_DATA__.gsp) ||\n      (!autoExportDynamic &&\n        !self.location.search &&\n        !process.env.__NEXT_HAS_REWRITES)\n    )\n\n    if (process.env.__NEXT_I18N_SUPPORT) {\n      this.locales = locales\n      this.defaultLocale = defaultLocale\n      this.domainLocales = domainLocales\n      this.isLocaleDomain = !!detectDomainLocale(\n        domainLocales,\n        self.location.hostname\n      )\n    }\n\n    this.state = {\n      route,\n      pathname,\n      query,\n      asPath: autoExportDynamic ? pathname : as,\n      isPreview: !!isPreview,\n      locale: process.env.__NEXT_I18N_SUPPORT ? locale : undefined,\n      isFallback,\n    }\n\n    this._initialMatchesMiddlewarePromise = Promise.resolve(false)\n\n    if (typeof window !== 'undefined') {\n      // make sure \"as\" doesn't start with double slashes or else it can\n      // throw an error as it's considered invalid\n      if (!as.startsWith('//')) {\n        // in order for `e.state` to work on the `onpopstate` event\n        // we have to register the initial route upon initialization\n        const options: TransitionOptions = { locale }\n        const asPath = getURL()\n\n        this._initialMatchesMiddlewarePromise = matchesMiddleware({\n          router: this,\n          locale,\n          asPath,\n        }).then((matches) => {\n          // if middleware matches we leave resolving to the change function\n          // as the server needs to resolve for correct priority\n          ;(options as any)._shouldResolveHref = as !== pathname\n\n          this.changeState(\n            'replaceState',\n            matches\n              ? asPath\n              : formatWithValidation({\n                  pathname: addBasePath(pathname),\n                  query,\n                }),\n            asPath,\n            options\n          )\n          return matches\n        })\n      }\n\n      window.addEventListener('popstate', this.onPopState)\n\n      // enable custom scroll restoration handling when available\n      // otherwise fallback to browser's default handling\n      if (process.env.__NEXT_SCROLL_RESTORATION) {\n        if (manualScrollRestoration) {\n          window.history.scrollRestoration = 'manual'\n        }\n      }\n    }\n  }\n\n  onPopState = (e: PopStateEvent): void => {\n    const { isFirstPopStateEvent } = this\n    this.isFirstPopStateEvent = false\n\n    const state = e.state as HistoryState\n\n    if (!state) {\n      // We get state as undefined for two reasons.\n      //  1. With older safari (< 8) and older chrome (< 34)\n      //  2. When the URL changed with #\n      //\n      // In the both cases, we don't need to proceed and change the route.\n      // (as it's already changed)\n      // But we can simply replace the state with the new changes.\n      // Actually, for (1) we don't need to nothing. But it's hard to detect that event.\n      // So, doing the following for (1) does no harm.\n      const { pathname, query } = this\n      this.changeState(\n        'replaceState',\n        formatWithValidation({ pathname: addBasePath(pathname), query }),\n        getURL()\n      )\n      return\n    }\n\n    // __NA is used to identify if the history entry can be handled by the app-router.\n    if (state.__NA) {\n      window.location.reload()\n      return\n    }\n\n    if (!state.__N) {\n      return\n    }\n\n    // Safari fires popstateevent when reopening the browser.\n    if (\n      isFirstPopStateEvent &&\n      this.locale === state.options.locale &&\n      state.as === this.asPath\n    ) {\n      return\n    }\n\n    let forcedScroll: { x: number; y: number } | undefined\n    const { url, as, options, key } = state\n    if (process.env.__NEXT_SCROLL_RESTORATION) {\n      if (manualScrollRestoration) {\n        if (this._key !== key) {\n          // Snapshot current scroll position:\n          try {\n            sessionStorage.setItem(\n              '__next_scroll_' + this._key,\n              JSON.stringify({ x: self.pageXOffset, y: self.pageYOffset })\n            )\n          } catch {}\n\n          // Restore old scroll position:\n          try {\n            const v = sessionStorage.getItem('__next_scroll_' + key)\n            forcedScroll = JSON.parse(v!)\n          } catch {\n            forcedScroll = { x: 0, y: 0 }\n          }\n        }\n      }\n    }\n    this._key = key\n\n    const { pathname } = parseRelativeUrl(url)\n\n    // Make sure we don't re-render on initial load,\n    // can be caused by navigating back from an external site\n    if (\n      this.isSsr &&\n      as === addBasePath(this.asPath) &&\n      pathname === addBasePath(this.pathname)\n    ) {\n      return\n    }\n\n    // If the downstream application returns falsy, return.\n    // They will then be responsible for handling the event.\n    if (this._bps && !this._bps(state)) {\n      return\n    }\n\n    this.change(\n      'replaceState',\n      url,\n      as,\n      Object.assign<{}, TransitionOptions, TransitionOptions>({}, options, {\n        shallow: options.shallow && this._shallow,\n        locale: options.locale || this.defaultLocale,\n        // @ts-ignore internal value not exposed on types\n        _h: 0,\n      }),\n      forcedScroll\n    )\n  }\n\n  reload(): void {\n    window.location.reload()\n  }\n\n  /**\n   * Go back in history\n   */\n  back() {\n    window.history.back()\n  }\n\n  /**\n   * Go forward in history\n   */\n  forward() {\n    window.history.forward()\n  }\n\n  /**\n   * Performs a `pushState` with arguments\n   * @param url of the route\n   * @param as masks `url` for the browser\n   * @param options object you can define `shallow` and other options\n   */\n  push(url: Url, as?: Url, options: TransitionOptions = {}) {\n    if (\n      isJavaScriptURLString(url.toString()) ||\n      (as && isJavaScriptURLString(as.toString()))\n    ) {\n      throw new Error(\n        'Next.js has blocked a javascript: URL as a security precaution.'\n      )\n    }\n    if (process.env.__NEXT_SCROLL_RESTORATION) {\n      // TODO: remove in the future when we update history before route change\n      // is complete, as the popstate event should handle this capture.\n      if (manualScrollRestoration) {\n        try {\n          // Snapshot scroll position right before navigating to a new page:\n          sessionStorage.setItem(\n            '__next_scroll_' + this._key,\n            JSON.stringify({ x: self.pageXOffset, y: self.pageYOffset })\n          )\n        } catch {}\n      }\n    }\n    ;({ url, as } = prepareUrlAs(this, url, as))\n    return this.change('pushState', url, as, options)\n  }\n\n  /**\n   * Performs a `replaceState` with arguments\n   * @param url of the route\n   * @param as masks `url` for the browser\n   * @param options object you can define `shallow` and other options\n   */\n  replace(url: Url, as?: Url, options: TransitionOptions = {}) {\n    if (\n      isJavaScriptURLString(url.toString()) ||\n      (as && isJavaScriptURLString(as.toString()))\n    ) {\n      throw new Error(\n        'Next.js has blocked a javascript: URL as a security precaution.'\n      )\n    }\n    ;({ url, as } = prepareUrlAs(this, url, as))\n    return this.change('replaceState', url, as, options)\n  }\n\n  async _bfl(\n    as: string,\n    resolvedAs?: string,\n    locale?: string | false,\n    skipNavigate?: boolean\n  ) {\n    if (process.env.__NEXT_CLIENT_ROUTER_FILTER_ENABLED) {\n      if (!this._bfl_s && !this._bfl_d) {\n        const { BloomFilter } =\n          require('../../lib/bloom-filter') as typeof import('../../lib/bloom-filter')\n\n        type Filter = ReturnType<\n          import('../../lib/bloom-filter').BloomFilter['export']\n        >\n        let staticFilterData: Filter | undefined\n        let dynamicFilterData: Filter | undefined\n\n        try {\n          ;({\n            __routerFilterStatic: staticFilterData,\n            __routerFilterDynamic: dynamicFilterData,\n          } = (await getClientBuildManifest()) as any as {\n            __routerFilterStatic?: Filter\n            __routerFilterDynamic?: Filter\n          })\n        } catch (err) {\n          // failed to load build manifest hard navigate\n          // to be safe\n          console.error(err)\n          if (skipNavigate) {\n            return true\n          }\n          handleHardNavigation({\n            url: addBasePath(\n              addLocale(as, locale || this.locale, this.defaultLocale)\n            ),\n            router: this,\n          })\n          return new Promise(() => {})\n        }\n\n        const routerFilterSValue: Filter | false = process.env\n          .__NEXT_CLIENT_ROUTER_S_FILTER as any\n\n        if (!staticFilterData && routerFilterSValue) {\n          staticFilterData = routerFilterSValue ? routerFilterSValue : undefined\n        }\n\n        const routerFilterDValue: Filter | false = process.env\n          .__NEXT_CLIENT_ROUTER_D_FILTER as any\n\n        if (!dynamicFilterData && routerFilterDValue) {\n          dynamicFilterData = routerFilterDValue\n            ? routerFilterDValue\n            : undefined\n        }\n\n        if (staticFilterData?.numHashes) {\n          this._bfl_s = new BloomFilter(\n            staticFilterData.numItems,\n            staticFilterData.errorRate\n          )\n          this._bfl_s.import(staticFilterData)\n        }\n\n        if (dynamicFilterData?.numHashes) {\n          this._bfl_d = new BloomFilter(\n            dynamicFilterData.numItems,\n            dynamicFilterData.errorRate\n          )\n          this._bfl_d.import(dynamicFilterData)\n        }\n      }\n\n      let matchesBflStatic = false\n      let matchesBflDynamic = false\n      const pathsToCheck: Array<{ as?: string; allowMatchCurrent?: boolean }> =\n        [{ as }, { as: resolvedAs }]\n\n      for (const { as: curAs, allowMatchCurrent } of pathsToCheck) {\n        if (curAs) {\n          const asNoSlash = removeTrailingSlash(\n            new URL(curAs, 'http://n').pathname\n          )\n          const asNoSlashLocale = addBasePath(\n            addLocale(asNoSlash, locale || this.locale)\n          )\n\n          if (\n            allowMatchCurrent ||\n            asNoSlash !==\n              removeTrailingSlash(new URL(this.asPath, 'http://n').pathname)\n          ) {\n            matchesBflStatic =\n              matchesBflStatic ||\n              !!this._bfl_s?.contains(asNoSlash) ||\n              !!this._bfl_s?.contains(asNoSlashLocale)\n\n            for (const normalizedAS of [asNoSlash, asNoSlashLocale]) {\n              // if any sub-path of as matches a dynamic filter path\n              // it should be hard navigated\n              const curAsParts = normalizedAS.split('/')\n              for (\n                let i = 0;\n                !matchesBflDynamic && i < curAsParts.length + 1;\n                i++\n              ) {\n                const currentPart = curAsParts.slice(0, i).join('/')\n                if (currentPart && this._bfl_d?.contains(currentPart)) {\n                  matchesBflDynamic = true\n                  break\n                }\n              }\n            }\n\n            // if the client router filter is matched then we trigger\n            // a hard navigation\n            if (matchesBflStatic || matchesBflDynamic) {\n              if (skipNavigate) {\n                return true\n              }\n              handleHardNavigation({\n                url: addBasePath(\n                  addLocale(as, locale || this.locale, this.defaultLocale)\n                ),\n                router: this,\n              })\n              return new Promise(() => {})\n            }\n          }\n        }\n      }\n    }\n    return false\n  }\n\n  private async change(\n    method: HistoryMethod,\n    url: string,\n    as: string,\n    options: TransitionOptions,\n    forcedScroll?: { x: number; y: number }\n  ): Promise<boolean> {\n    if (!isLocalURL(url)) {\n      handleHardNavigation({ url, router: this })\n      return false\n    }\n    // WARNING: `_h` is an internal option for handing Next.js client-side\n    // hydration. Your app should _never_ use this property. It may change at\n    // any time without notice.\n    const isQueryUpdating = (options as any)._h === 1\n\n    if (!isQueryUpdating && !options.shallow) {\n      await this._bfl(as, undefined, options.locale)\n    }\n\n    let shouldResolveHref =\n      isQueryUpdating ||\n      (options as any)._shouldResolveHref ||\n      parsePath(url).pathname === parsePath(as).pathname\n\n    const nextState = {\n      ...this.state,\n    }\n\n    // for static pages with query params in the URL we delay\n    // marking the router ready until after the query is updated\n    // or a navigation has occurred\n    const readyStateChange = this.isReady !== true\n    this.isReady = true\n    const isSsr = this.isSsr\n\n    if (!isQueryUpdating) {\n      this.isSsr = false\n    }\n\n    // if a route transition is already in progress before\n    // the query updating is triggered ignore query updating\n    if (isQueryUpdating && this.clc) {\n      return false\n    }\n\n    const prevLocale = nextState.locale\n\n    if (process.env.__NEXT_I18N_SUPPORT) {\n      nextState.locale =\n        options.locale === false\n          ? this.defaultLocale\n          : options.locale || nextState.locale\n\n      if (typeof options.locale === 'undefined') {\n        options.locale = nextState.locale\n      }\n\n      const parsedAs = parseRelativeUrl(\n        hasBasePath(as) ? removeBasePath(as) : as\n      )\n      const localePathResult = normalizeLocalePath(\n        parsedAs.pathname,\n        this.locales\n      )\n\n      if (localePathResult.detectedLocale) {\n        nextState.locale = localePathResult.detectedLocale\n        parsedAs.pathname = addBasePath(parsedAs.pathname)\n        as = formatWithValidation(parsedAs)\n        url = addBasePath(\n          normalizeLocalePath(\n            hasBasePath(url) ? removeBasePath(url) : url,\n            this.locales\n          ).pathname\n        )\n      }\n      let didNavigate = false\n\n      // we need to wrap this in the env check again since regenerator runtime\n      // moves this on its own due to the return\n      if (process.env.__NEXT_I18N_SUPPORT) {\n        // if the locale isn't configured hard navigate to show 404 page\n        if (!this.locales?.includes(nextState.locale!)) {\n          parsedAs.pathname = addLocale(parsedAs.pathname, nextState.locale)\n          handleHardNavigation({\n            url: formatWithValidation(parsedAs),\n            router: this,\n          })\n          // this was previously a return but was removed in favor\n          // of better dead code elimination with regenerator runtime\n          didNavigate = true\n        }\n      }\n\n      const detectedDomain = detectDomainLocale(\n        this.domainLocales,\n        undefined,\n        nextState.locale\n      )\n\n      // we need to wrap this in the env check again since regenerator runtime\n      // moves this on its own due to the return\n      if (process.env.__NEXT_I18N_SUPPORT) {\n        // if we are navigating to a domain locale ensure we redirect to the\n        // correct domain\n        if (\n          !didNavigate &&\n          detectedDomain &&\n          this.isLocaleDomain &&\n          self.location.hostname !== detectedDomain.domain\n        ) {\n          const asNoBasePath = removeBasePath(as)\n          handleHardNavigation({\n            url: `http${detectedDomain.http ? '' : 's'}://${\n              detectedDomain.domain\n            }${addBasePath(\n              `${\n                nextState.locale === detectedDomain.defaultLocale\n                  ? ''\n                  : `/${nextState.locale}`\n              }${asNoBasePath === '/' ? '' : asNoBasePath}` || '/'\n            )}`,\n            router: this,\n          })\n          // this was previously a return but was removed in favor\n          // of better dead code elimination with regenerator runtime\n          didNavigate = true\n        }\n      }\n\n      if (didNavigate) {\n        return new Promise(() => {})\n      }\n    }\n\n    // marking route changes as a navigation start entry\n    if (ST) {\n      performance.mark('routeChange')\n    }\n\n    const { shallow = false, scroll = true } = options\n    const routeProps = { shallow }\n\n    if (this._inFlightRoute && this.clc) {\n      if (!isSsr) {\n        Router.events.emit(\n          'routeChangeError',\n          buildCancellationError(),\n          this._inFlightRoute,\n          routeProps\n        )\n      }\n      this.clc()\n      this.clc = null\n    }\n\n    as = addBasePath(\n      addLocale(\n        hasBasePath(as) ? removeBasePath(as) : as,\n        options.locale,\n        this.defaultLocale\n      )\n    )\n    const cleanedAs = removeLocale(\n      hasBasePath(as) ? removeBasePath(as) : as,\n      nextState.locale\n    )\n    this._inFlightRoute = as\n\n    const localeChange = prevLocale !== nextState.locale\n\n    // If the url change is only related to a hash change\n    // We should not proceed. We should only change the state.\n\n    if (!isQueryUpdating && this.onlyAHashChange(cleanedAs) && !localeChange) {\n      nextState.asPath = cleanedAs\n      Router.events.emit('hashChangeStart', as, routeProps)\n      // TODO: do we need the resolved href when only a hash change?\n      this.changeState(method, url, as, {\n        ...options,\n        scroll: false,\n      })\n      if (scroll) {\n        this.scrollToHash(cleanedAs)\n      }\n      try {\n        await this.set(nextState, this.components[nextState.route], null)\n      } catch (err) {\n        if (isError(err) && err.cancelled) {\n          Router.events.emit('routeChangeError', err, cleanedAs, routeProps)\n        }\n        throw err\n      }\n\n      Router.events.emit('hashChangeComplete', as, routeProps)\n      return true\n    }\n\n    let parsed = parseRelativeUrl(url)\n    let { pathname, query } = parsed\n\n    // The build manifest needs to be loaded before auto-static dynamic pages\n    // get their query parameters to allow ensuring they can be parsed properly\n    // when rewritten to\n    let pages: string[], rewrites: any\n    try {\n      ;[pages, { __rewrites: rewrites }] = await Promise.all([\n        this.pageLoader.getPageList(),\n        getClientBuildManifest(),\n        this.pageLoader.getMiddleware(),\n      ])\n    } catch (err) {\n      // If we fail to resolve the page list or client-build manifest, we must\n      // do a server-side transition:\n      handleHardNavigation({ url: as, router: this })\n      return false\n    }\n\n    // If asked to change the current URL we should reload the current page\n    // (not location.reload() but reload getInitialProps and other Next.js stuffs)\n    // We also need to set the method = replaceState always\n    // as this should not go into the history (That's how browsers work)\n    // We should compare the new asPath to the current asPath, not the url\n    if (!this.urlIsNew(cleanedAs) && !localeChange) {\n      method = 'replaceState'\n    }\n\n    // we need to resolve the as value using rewrites for dynamic SSG\n    // pages to allow building the data URL correctly\n    let resolvedAs = as\n\n    // url and as should always be prefixed with basePath by this\n    // point by either next/link or router.push/replace so strip the\n    // basePath from the pathname to match the pages dir 1-to-1\n    pathname = pathname\n      ? removeTrailingSlash(removeBasePath(pathname))\n      : pathname\n\n    let route = removeTrailingSlash(pathname)\n    const parsedAsPathname = as.startsWith('/') && parseRelativeUrl(as).pathname\n\n    // if we detected the path as app route during prefetching\n    // trigger hard navigation\n    if ((this.components[pathname] as any)?.__appRouter) {\n      handleHardNavigation({ url: as, router: this })\n      return new Promise(() => {})\n    }\n\n    const isMiddlewareRewrite = !!(\n      parsedAsPathname &&\n      route !== parsedAsPathname &&\n      (!isDynamicRoute(route) ||\n        !getRouteMatcher(getRouteRegex(route))(parsedAsPathname))\n    )\n\n    // we don't attempt resolve asPath when we need to execute\n    // middleware as the resolving will occur server-side\n    const isMiddlewareMatch =\n      !options.shallow &&\n      (await matchesMiddleware({\n        asPath: as,\n        locale: nextState.locale,\n        router: this,\n      }))\n\n    if (isQueryUpdating && isMiddlewareMatch) {\n      shouldResolveHref = false\n    }\n\n    if (shouldResolveHref && pathname !== '/_error') {\n      ;(options as any)._shouldResolveHref = true\n\n      if (process.env.__NEXT_HAS_REWRITES && as.startsWith('/')) {\n        const rewritesResult = resolveRewrites(\n          addBasePath(addLocale(cleanedAs, nextState.locale), true),\n          pages,\n          rewrites,\n          query,\n          (p: string) => resolveDynamicRoute(p, pages),\n          this.locales\n        )\n\n        if (rewritesResult.externalDest) {\n          handleHardNavigation({ url: as, router: this })\n          return true\n        }\n        if (!isMiddlewareMatch) {\n          resolvedAs = rewritesResult.asPath\n        }\n\n        if (rewritesResult.matchedPage && rewritesResult.resolvedHref) {\n          // if this directly matches a page we need to update the href to\n          // allow the correct page chunk to be loaded\n          pathname = rewritesResult.resolvedHref\n          parsed.pathname = addBasePath(pathname)\n\n          if (!isMiddlewareMatch) {\n            url = formatWithValidation(parsed)\n          }\n        }\n      } else {\n        parsed.pathname = resolveDynamicRoute(pathname, pages)\n\n        if (parsed.pathname !== pathname) {\n          pathname = parsed.pathname\n          parsed.pathname = addBasePath(pathname)\n\n          if (!isMiddlewareMatch) {\n            url = formatWithValidation(parsed)\n          }\n        }\n      }\n    }\n\n    if (!isLocalURL(as)) {\n      if (process.env.NODE_ENV !== 'production') {\n        throw new Error(\n          `Invalid href: \"${url}\" and as: \"${as}\", received relative href and external as` +\n            `\\nSee more info: https://nextjs.org/docs/messages/invalid-relative-url-external-as`\n        )\n      }\n      handleHardNavigation({ url: as, router: this })\n      return false\n    }\n\n    resolvedAs = removeLocale(removeBasePath(resolvedAs), nextState.locale)\n\n    route = removeTrailingSlash(pathname)\n    let routeMatch: Params | false = false\n\n    if (isDynamicRoute(route)) {\n      const parsedAs = parseRelativeUrl(resolvedAs)\n      const asPathname = parsedAs.pathname\n\n      const routeRegex = getRouteRegex(route)\n      routeMatch = getRouteMatcher(routeRegex)(asPathname)\n      const shouldInterpolate = route === asPathname\n      const interpolatedAs = shouldInterpolate\n        ? interpolateAs(route, asPathname, query)\n        : ({} as { result: undefined; params: undefined })\n\n      if (!routeMatch || (shouldInterpolate && !interpolatedAs.result)) {\n        const missingParams = Object.keys(routeRegex.groups).filter(\n          (param) => !query[param] && !routeRegex.groups[param].optional\n        )\n\n        if (missingParams.length > 0 && !isMiddlewareMatch) {\n          if (process.env.NODE_ENV !== 'production') {\n            console.warn(\n              `${\n                shouldInterpolate\n                  ? `Interpolating href`\n                  : `Mismatching \\`as\\` and \\`href\\``\n              } failed to manually provide ` +\n                `the params: ${missingParams.join(\n                  ', '\n                )} in the \\`href\\`'s \\`query\\``\n            )\n          }\n\n          throw new Error(\n            (shouldInterpolate\n              ? `The provided \\`href\\` (${url}) value is missing query values (${missingParams.join(\n                  ', '\n                )}) to be interpolated properly. `\n              : `The provided \\`as\\` value (${asPathname}) is incompatible with the \\`href\\` value (${route}). `) +\n              `Read more: https://nextjs.org/docs/messages/${\n                shouldInterpolate\n                  ? 'href-interpolation-failed'\n                  : 'incompatible-href-as'\n              }`\n          )\n        }\n      } else if (shouldInterpolate) {\n        as = formatWithValidation(\n          Object.assign({}, parsedAs, {\n            pathname: interpolatedAs.result,\n            query: omit(query, interpolatedAs.params!),\n          })\n        )\n      } else {\n        // Merge params into `query`, overwriting any specified in search\n        Object.assign(query, routeMatch)\n      }\n    }\n\n    if (!isQueryUpdating) {\n      Router.events.emit('routeChangeStart', as, routeProps)\n    }\n\n    const isErrorRoute = this.pathname === '/404' || this.pathname === '/_error'\n\n    try {\n      let routeInfo = await this.getRouteInfo({\n        route,\n        pathname,\n        query,\n        as,\n        resolvedAs,\n        routeProps,\n        locale: nextState.locale,\n        isPreview: nextState.isPreview,\n        hasMiddleware: isMiddlewareMatch,\n        unstable_skipClientCache: options.unstable_skipClientCache,\n        isQueryUpdating: isQueryUpdating && !this.isFallback,\n        isMiddlewareRewrite,\n      })\n\n      if (!isQueryUpdating && !options.shallow) {\n        await this._bfl(\n          as,\n          'resolvedAs' in routeInfo ? routeInfo.resolvedAs : undefined,\n          nextState.locale\n        )\n      }\n\n      if ('route' in routeInfo && isMiddlewareMatch) {\n        pathname = routeInfo.route || route\n        route = pathname\n\n        if (!routeProps.shallow) {\n          query = Object.assign({}, routeInfo.query || {}, query)\n        }\n\n        const cleanedParsedPathname = hasBasePath(parsed.pathname)\n          ? removeBasePath(parsed.pathname)\n          : parsed.pathname\n\n        if (routeMatch && pathname !== cleanedParsedPathname) {\n          Object.keys(routeMatch).forEach((key) => {\n            if (routeMatch && query[key] === routeMatch[key]) {\n              delete query[key]\n            }\n          })\n        }\n\n        if (isDynamicRoute(pathname)) {\n          const prefixedAs =\n            !routeProps.shallow && routeInfo.resolvedAs\n              ? routeInfo.resolvedAs\n              : addBasePath(\n                  addLocale(\n                    new URL(as, location.href).pathname,\n                    nextState.locale\n                  ),\n                  true\n                )\n\n          let rewriteAs = prefixedAs\n\n          if (hasBasePath(rewriteAs)) {\n            rewriteAs = removeBasePath(rewriteAs)\n          }\n\n          if (process.env.__NEXT_I18N_SUPPORT) {\n            const localeResult = normalizeLocalePath(rewriteAs, this.locales)\n            nextState.locale = localeResult.detectedLocale || nextState.locale\n            rewriteAs = localeResult.pathname\n          }\n          const routeRegex = getRouteRegex(pathname)\n          const curRouteMatch = getRouteMatcher(routeRegex)(\n            new URL(rewriteAs, location.href).pathname\n          )\n\n          if (curRouteMatch) {\n            Object.assign(query, curRouteMatch)\n          }\n        }\n      }\n\n      // If the routeInfo brings a redirect we simply apply it.\n      if ('type' in routeInfo) {\n        if (routeInfo.type === 'redirect-internal') {\n          return this.change(method, routeInfo.newUrl, routeInfo.newAs, options)\n        } else {\n          handleHardNavigation({ url: routeInfo.destination, router: this })\n          return new Promise(() => {})\n        }\n      }\n\n      const component: any = routeInfo.Component\n      if (component && component.unstable_scriptLoader) {\n        const scripts = [].concat(component.unstable_scriptLoader())\n\n        scripts.forEach((script: any) => {\n          handleClientScriptLoad(script.props)\n        })\n      }\n\n      // handle redirect on client-transition\n      if ((routeInfo.__N_SSG || routeInfo.__N_SSP) && routeInfo.props) {\n        if (\n          routeInfo.props.pageProps &&\n          routeInfo.props.pageProps.__N_REDIRECT\n        ) {\n          // Use the destination from redirect without adding locale\n          options.locale = false\n\n          const destination = routeInfo.props.pageProps.__N_REDIRECT\n\n          // check if destination is internal (resolves to a page) and attempt\n          // client-navigation if it is falling back to hard navigation if\n          // it's not\n          if (\n            destination.startsWith('/') &&\n            routeInfo.props.pageProps.__N_REDIRECT_BASE_PATH !== false\n          ) {\n            const parsedHref = parseRelativeUrl(destination)\n            parsedHref.pathname = resolveDynamicRoute(\n              parsedHref.pathname,\n              pages\n            )\n\n            const { url: newUrl, as: newAs } = prepareUrlAs(\n              this,\n              destination,\n              destination\n            )\n            return this.change(method, newUrl, newAs, options)\n          }\n          handleHardNavigation({ url: destination, router: this })\n          return new Promise(() => {})\n        }\n\n        nextState.isPreview = !!routeInfo.props.__N_PREVIEW\n\n        // handle SSG data 404\n        if (routeInfo.props.notFound === SSG_DATA_NOT_FOUND) {\n          let notFoundRoute\n\n          try {\n            await this.fetchComponent('/404')\n            notFoundRoute = '/404'\n          } catch (_) {\n            notFoundRoute = '/_error'\n          }\n\n          routeInfo = await this.getRouteInfo({\n            route: notFoundRoute,\n            pathname: notFoundRoute,\n            query,\n            as,\n            resolvedAs,\n            routeProps: { shallow: false },\n            locale: nextState.locale,\n            isPreview: nextState.isPreview,\n            isNotFound: true,\n          })\n\n          if ('type' in routeInfo) {\n            throw new Error(`Unexpected middleware effect on /404`)\n          }\n        }\n      }\n\n      if (\n        isQueryUpdating &&\n        this.pathname === '/_error' &&\n        self.__NEXT_DATA__.props?.pageProps?.statusCode === 500 &&\n        routeInfo.props?.pageProps\n      ) {\n        // ensure statusCode is still correct for static 500 page\n        // when updating query information\n        routeInfo.props.pageProps.statusCode = 500\n      }\n\n      // shallow routing is only allowed for same page URL changes.\n      const isValidShallowRoute =\n        options.shallow && nextState.route === (routeInfo.route ?? route)\n\n      const shouldScroll =\n        options.scroll ?? (!isQueryUpdating && !isValidShallowRoute)\n      const resetScroll = shouldScroll ? { x: 0, y: 0 } : null\n      const upcomingScrollState = forcedScroll ?? resetScroll\n\n      // the new state that the router gonna set\n      const upcomingRouterState = {\n        ...nextState,\n        route,\n        pathname,\n        query,\n        asPath: cleanedAs,\n        isFallback: false,\n      }\n\n      // When the page being rendered is the 404 page, we should only update the\n      // query parameters. Route changes here might add the basePath when it\n      // wasn't originally present. This is also why this block is before the\n      // below `changeState` call which updates the browser's history (changing\n      // the URL).\n      if (isQueryUpdating && isErrorRoute) {\n        routeInfo = await this.getRouteInfo({\n          route: this.pathname,\n          pathname: this.pathname,\n          query,\n          as,\n          resolvedAs,\n          routeProps: { shallow: false },\n          locale: nextState.locale,\n          isPreview: nextState.isPreview,\n          isQueryUpdating: isQueryUpdating && !this.isFallback,\n        })\n\n        if ('type' in routeInfo) {\n          throw new Error(`Unexpected middleware effect on ${this.pathname}`)\n        }\n\n        if (\n          this.pathname === '/_error' &&\n          self.__NEXT_DATA__.props?.pageProps?.statusCode === 500 &&\n          routeInfo.props?.pageProps\n        ) {\n          // ensure statusCode is still correct for static 500 page\n          // when updating query information\n          routeInfo.props.pageProps.statusCode = 500\n        }\n\n        try {\n          await this.set(upcomingRouterState, routeInfo, upcomingScrollState)\n        } catch (err) {\n          if (isError(err) && err.cancelled) {\n            Router.events.emit('routeChangeError', err, cleanedAs, routeProps)\n          }\n          throw err\n        }\n\n        return true\n      }\n\n      Router.events.emit('beforeHistoryChange', as, routeProps)\n      this.changeState(method, url, as, options)\n\n      // for query updates we can skip it if the state is unchanged and we don't\n      // need to scroll\n      // https://github.com/vercel/next.js/issues/37139\n      const canSkipUpdating =\n        isQueryUpdating &&\n        !upcomingScrollState &&\n        !readyStateChange &&\n        !localeChange &&\n        compareRouterStates(upcomingRouterState, this.state)\n\n      if (!canSkipUpdating) {\n        try {\n          await this.set(upcomingRouterState, routeInfo, upcomingScrollState)\n        } catch (e: any) {\n          if (e.cancelled) routeInfo.error = routeInfo.error || e\n          else throw e\n        }\n\n        if (routeInfo.error) {\n          if (!isQueryUpdating) {\n            Router.events.emit(\n              'routeChangeError',\n              routeInfo.error,\n              cleanedAs,\n              routeProps\n            )\n          }\n\n          throw routeInfo.error\n        }\n\n        if (process.env.__NEXT_I18N_SUPPORT) {\n          if (nextState.locale) {\n            document.documentElement.lang = nextState.locale\n          }\n        }\n\n        if (!isQueryUpdating) {\n          Router.events.emit('routeChangeComplete', as, routeProps)\n        }\n\n        // A hash mark # is the optional last part of a URL\n        const hashRegex = /#.+$/\n        if (shouldScroll && hashRegex.test(as)) {\n          this.scrollToHash(as)\n        }\n      }\n\n      return true\n    } catch (err) {\n      if (isError(err) && err.cancelled) {\n        return false\n      }\n      throw err\n    }\n  }\n\n  changeState(\n    method: HistoryMethod,\n    url: string,\n    as: string,\n    options: TransitionOptions = {}\n  ): void {\n    if (process.env.NODE_ENV !== 'production') {\n      if (typeof window.history === 'undefined') {\n        console.error(`Warning: window.history is not available.`)\n        return\n      }\n\n      if (typeof window.history[method] === 'undefined') {\n        console.error(`Warning: window.history.${method} is not available`)\n        return\n      }\n    }\n\n    if (method !== 'pushState' || getURL() !== as) {\n      this._shallow = options.shallow\n      window.history[method](\n        {\n          url,\n          as,\n          options,\n          __N: true,\n          key: (this._key = method !== 'pushState' ? this._key : createKey()),\n        } as HistoryState,\n        // Most browsers currently ignores this parameter, although they may use it in the future.\n        // Passing the empty string here should be safe against future changes to the method.\n        // https://developer.mozilla.org/docs/Web/API/History/replaceState\n        '',\n        as\n      )\n    }\n  }\n\n  async handleRouteInfoError(\n    err: Error & { code?: any; cancelled?: boolean },\n    pathname: string,\n    query: ParsedUrlQuery,\n    as: string,\n    routeProps: RouteProperties,\n    loadErrorFail?: boolean\n  ): Promise<CompletePrivateRouteInfo> {\n    if (err.cancelled) {\n      // bubble up cancellation errors\n      throw err\n    }\n\n    if (isAssetError(err) || loadErrorFail) {\n      Router.events.emit('routeChangeError', err, as, routeProps)\n\n      // If we can't load the page it could be one of following reasons\n      //  1. Page doesn't exists\n      //  2. Page does exist in a different zone\n      //  3. Internal error while loading the page\n\n      // So, doing a hard reload is the proper way to deal with this.\n      handleHardNavigation({\n        url: as,\n        router: this,\n      })\n\n      // Changing the URL doesn't block executing the current code path.\n      // So let's throw a cancellation error stop the routing logic.\n      throw buildCancellationError()\n    }\n\n    console.error(err)\n\n    try {\n      let props: Record<string, any> | undefined\n      const { page: Component, styleSheets } =\n        await this.fetchComponent('/_error')\n\n      const routeInfo: CompletePrivateRouteInfo = {\n        props,\n        Component,\n        styleSheets,\n        err,\n        error: err,\n      }\n\n      if (!routeInfo.props) {\n        try {\n          routeInfo.props = await this.getInitialProps(Component, {\n            err,\n            pathname,\n            query,\n          } as any)\n        } catch (gipErr) {\n          console.error('Error in error page `getInitialProps`: ', gipErr)\n          routeInfo.props = {}\n        }\n      }\n\n      return routeInfo\n    } catch (routeInfoErr) {\n      return this.handleRouteInfoError(\n        isError(routeInfoErr) ? routeInfoErr : new Error(routeInfoErr + ''),\n        pathname,\n        query,\n        as,\n        routeProps,\n        true\n      )\n    }\n  }\n\n  async getRouteInfo({\n    route: requestedRoute,\n    pathname,\n    query,\n    as,\n    resolvedAs,\n    routeProps,\n    locale,\n    hasMiddleware,\n    isPreview,\n    unstable_skipClientCache,\n    isQueryUpdating,\n    isMiddlewareRewrite,\n    isNotFound,\n  }: {\n    route: string\n    pathname: string\n    query: ParsedUrlQuery\n    as: string\n    resolvedAs: string\n    hasMiddleware?: boolean\n    routeProps: RouteProperties\n    locale: string | undefined\n    isPreview: boolean\n    unstable_skipClientCache?: boolean\n    isQueryUpdating?: boolean\n    isMiddlewareRewrite?: boolean\n    isNotFound?: boolean\n  }) {\n    /**\n     * This `route` binding can change if there's a rewrite\n     * so we keep a reference to the original requested route\n     * so we can store the cache for it and avoid re-requesting every time\n     * for shallow routing purposes.\n     */\n    let route = requestedRoute\n\n    try {\n      let existingInfo: PrivateRouteInfo | undefined = this.components[route]\n      if (routeProps.shallow && existingInfo && this.route === route) {\n        return existingInfo\n      }\n\n      const handleCancelled = getCancelledHandler({ route, router: this })\n\n      if (hasMiddleware) {\n        existingInfo = undefined\n      }\n\n      let cachedRouteInfo =\n        existingInfo &&\n        !('initial' in existingInfo) &&\n        process.env.NODE_ENV !== 'development'\n          ? existingInfo\n          : undefined\n\n      const isBackground = isQueryUpdating\n      const fetchNextDataParams: FetchNextDataParams = {\n        dataHref: this.pageLoader.getDataHref({\n          href: formatWithValidation({ pathname, query }),\n          skipInterpolation: true,\n          asPath: isNotFound ? '/404' : resolvedAs,\n          locale,\n        }),\n        hasMiddleware: true,\n        isServerRender: this.isSsr,\n        parseJSON: true,\n        inflightCache: isBackground ? this.sbc : this.sdc,\n        persistCache: !isPreview,\n        isPrefetch: false,\n        unstable_skipClientCache,\n        isBackground,\n      }\n\n      let data:\n        | WithMiddlewareEffectsOutput\n        | (Pick<WithMiddlewareEffectsOutput, 'json'> &\n            Omit<Partial<WithMiddlewareEffectsOutput>, 'json'>)\n        | null =\n        isQueryUpdating && !isMiddlewareRewrite\n          ? null\n          : await withMiddlewareEffects({\n              fetchData: () => fetchNextData(fetchNextDataParams),\n              asPath: isNotFound ? '/404' : resolvedAs,\n              locale: locale,\n              router: this,\n            }).catch((err) => {\n              // we don't hard error during query updating\n              // as it's un-necessary and doesn't need to be fatal\n              // unless it is a fallback route and the props can't\n              // be loaded\n              if (isQueryUpdating) {\n                return null\n              }\n              throw err\n            })\n\n      // when rendering error routes we don't apply middleware\n      // effects\n      if (data && (pathname === '/_error' || pathname === '/404')) {\n        data.effect = undefined\n      }\n\n      if (isQueryUpdating) {\n        if (!data) {\n          data = { json: self.__NEXT_DATA__.props }\n        } else {\n          data.json = self.__NEXT_DATA__.props\n        }\n      }\n\n      handleCancelled()\n\n      if (\n        data?.effect?.type === 'redirect-internal' ||\n        data?.effect?.type === 'redirect-external'\n      ) {\n        return data.effect\n      }\n\n      if (data?.effect?.type === 'rewrite') {\n        const resolvedRoute = removeTrailingSlash(data.effect.resolvedHref)\n        const pages = await this.pageLoader.getPageList()\n\n        // during query updating the page must match although during\n        // client-transition a redirect that doesn't match a page\n        // can be returned and this should trigger a hard navigation\n        // which is valid for incremental migration\n        if (!isQueryUpdating || pages.includes(resolvedRoute)) {\n          route = resolvedRoute\n          pathname = data.effect.resolvedHref\n          query = { ...query, ...data.effect.parsedAs.query }\n          resolvedAs = removeBasePath(\n            normalizeLocalePath(data.effect.parsedAs.pathname, this.locales)\n              .pathname\n          )\n\n          // Check again the cache with the new destination.\n          existingInfo = this.components[route]\n          if (\n            routeProps.shallow &&\n            existingInfo &&\n            this.route === route &&\n            !hasMiddleware\n          ) {\n            // If we have a match with the current route due to rewrite,\n            // we can copy the existing information to the rewritten one.\n            // Then, we return the information along with the matched route.\n            return { ...existingInfo, route }\n          }\n        }\n      }\n\n      if (isAPIRoute(route)) {\n        handleHardNavigation({ url: as, router: this })\n        return new Promise<never>(() => {})\n      }\n\n      const routeInfo =\n        cachedRouteInfo ||\n        (await this.fetchComponent(route).then<CompletePrivateRouteInfo>(\n          (res) => ({\n            Component: res.page,\n            styleSheets: res.styleSheets,\n            __N_SSG: res.mod.__N_SSG,\n            __N_SSP: res.mod.__N_SSP,\n          })\n        ))\n\n      if (process.env.NODE_ENV !== 'production') {\n        const { isValidElementType } =\n          require('next/dist/compiled/react-is') as typeof import('next/dist/compiled/react-is')\n        if (!isValidElementType(routeInfo.Component)) {\n          throw new Error(\n            `The default export is not a React Component in page: \"${pathname}\"`\n          )\n        }\n      }\n      const wasBailedPrefetch = data?.response?.headers.get('x-middleware-skip')\n\n      const shouldFetchData = routeInfo.__N_SSG || routeInfo.__N_SSP\n\n      // For non-SSG prefetches that bailed before sending data\n      // we clear the cache to fetch full response\n      if (wasBailedPrefetch && data?.dataHref) {\n        delete this.sdc[data.dataHref]\n      }\n\n      const { props, cacheKey } = await this._getData(async () => {\n        if (shouldFetchData) {\n          if (data?.json && !wasBailedPrefetch) {\n            return { cacheKey: data.cacheKey, props: data.json }\n          }\n\n          const dataHref = data?.dataHref\n            ? data.dataHref\n            : this.pageLoader.getDataHref({\n                href: formatWithValidation({ pathname, query }),\n                asPath: resolvedAs,\n                locale,\n              })\n\n          const fetched = await fetchNextData({\n            dataHref,\n            isServerRender: this.isSsr,\n            parseJSON: true,\n            inflightCache: wasBailedPrefetch ? {} : this.sdc,\n            persistCache: !isPreview,\n            isPrefetch: false,\n            unstable_skipClientCache,\n          })\n\n          return {\n            cacheKey: fetched.cacheKey,\n            props: fetched.json || {},\n          }\n        }\n\n        return {\n          headers: {},\n          props: await this.getInitialProps(\n            routeInfo.Component,\n            // we provide AppTree later so this needs to be `any`\n            {\n              pathname,\n              query,\n              asPath: as,\n              locale,\n              locales: this.locales,\n              defaultLocale: this.defaultLocale,\n            } as any\n          ),\n        }\n      })\n\n      // Only bust the data cache for SSP routes although\n      // middleware can skip cache per request with\n      // x-middleware-cache: no-cache as well\n      if (routeInfo.__N_SSP && fetchNextDataParams.dataHref && cacheKey) {\n        delete this.sdc[cacheKey]\n      }\n\n      // we kick off a HEAD request in the background\n      // when a non-prefetch request is made to signal revalidation\n      if (\n        !this.isPreview &&\n        routeInfo.__N_SSG &&\n        process.env.NODE_ENV !== 'development' &&\n        !isQueryUpdating\n      ) {\n        fetchNextData(\n          Object.assign({}, fetchNextDataParams, {\n            isBackground: true,\n            persistCache: false,\n            inflightCache: this.sbc,\n          })\n        ).catch(() => {})\n      }\n\n      props.pageProps = Object.assign({}, props.pageProps)\n      routeInfo.props = props\n      routeInfo.route = route\n      routeInfo.query = query\n      routeInfo.resolvedAs = resolvedAs\n      this.components[route] = routeInfo\n\n      return routeInfo\n    } catch (err) {\n      return this.handleRouteInfoError(\n        getProperError(err),\n        pathname,\n        query,\n        as,\n        routeProps\n      )\n    }\n  }\n\n  private set(\n    state: typeof this.state,\n    data: PrivateRouteInfo,\n    resetScroll: { x: number; y: number } | null\n  ): Promise<void> {\n    this.state = state\n\n    return this.sub(\n      data,\n      this.components['/_app'].Component as AppComponent,\n      resetScroll\n    )\n  }\n\n  /**\n   * Callback to execute before replacing router state\n   * @param cb callback to be executed\n   */\n  beforePopState(cb: BeforePopStateCallback) {\n    this._bps = cb\n  }\n\n  onlyAHashChange(as: string): boolean {\n    if (!this.asPath) return false\n    const [oldUrlNoHash, oldHash] = this.asPath.split('#', 2)\n    const [newUrlNoHash, newHash] = as.split('#', 2)\n\n    // Makes sure we scroll to the provided hash if the url/hash are the same\n    if (newHash && oldUrlNoHash === newUrlNoHash && oldHash === newHash) {\n      return true\n    }\n\n    // If the urls are change, there's more than a hash change\n    if (oldUrlNoHash !== newUrlNoHash) {\n      return false\n    }\n\n    // If the hash has changed, then it's a hash only change.\n    // This check is necessary to handle both the enter and\n    // leave hash === '' cases. The identity case falls through\n    // and is treated as a next reload.\n    return oldHash !== newHash\n  }\n\n  scrollToHash(as: string): void {\n    const [, hash = ''] = as.split('#', 2)\n\n    disableSmoothScrollDuringRouteTransition(\n      () => {\n        // Scroll to top if the hash is just `#` with no value or `#top`\n        // To mirror browsers\n        if (hash === '' || hash === 'top') {\n          window.scrollTo(0, 0)\n          return\n        }\n\n        // Decode hash to make non-latin anchor works.\n        const rawHash = decodeURIComponent(hash)\n        // First we check if the element by id is found\n        const idEl = document.getElementById(rawHash)\n        if (idEl) {\n          idEl.scrollIntoView()\n          return\n        }\n        // If there's no element with the id, we check the `name` property\n        // To mirror browsers\n        const nameEl = document.getElementsByName(rawHash)[0]\n        if (nameEl) {\n          nameEl.scrollIntoView()\n        }\n      },\n      {\n        onlyHashChange: this.onlyAHashChange(as),\n      }\n    )\n  }\n\n  urlIsNew(asPath: string): boolean {\n    return this.asPath !== asPath\n  }\n\n  /**\n   * Prefetch page code, you may wait for the data during page rendering.\n   * This feature only works in production!\n   * @param url the href of prefetched page\n   * @param asPath the as path of the prefetched page\n   */\n  async prefetch(\n    url: string,\n    asPath: string = url,\n    options: PrefetchOptions = {}\n  ): Promise<void> {\n    // Prefetch is not supported in development mode because it would trigger on-demand-entries\n    if (process.env.NODE_ENV !== 'production') {\n      return\n    }\n\n    if (typeof window !== 'undefined' && isBot(window.navigator.userAgent)) {\n      // No prefetches for bots that render the link since they are typically navigating\n      // links via the equivalent of a hard navigation and hence never utilize these\n      // prefetches.\n      return\n    }\n    let parsed = parseRelativeUrl(url)\n    const urlPathname = parsed.pathname\n\n    let { pathname, query } = parsed\n    const originalPathname = pathname\n\n    if (process.env.__NEXT_I18N_SUPPORT) {\n      if (options.locale === false) {\n        pathname = normalizeLocalePath!(pathname, this.locales).pathname\n        parsed.pathname = pathname\n        url = formatWithValidation(parsed)\n\n        let parsedAs = parseRelativeUrl(asPath)\n        const localePathResult = normalizeLocalePath!(\n          parsedAs.pathname,\n          this.locales\n        )\n        parsedAs.pathname = localePathResult.pathname\n        options.locale = localePathResult.detectedLocale || this.defaultLocale\n        asPath = formatWithValidation(parsedAs)\n      }\n    }\n\n    const pages = await this.pageLoader.getPageList()\n    let resolvedAs = asPath\n\n    const locale =\n      typeof options.locale !== 'undefined'\n        ? options.locale || undefined\n        : this.locale\n\n    const isMiddlewareMatch = await matchesMiddleware({\n      asPath: asPath,\n      locale: locale,\n      router: this,\n    })\n\n    if (process.env.__NEXT_HAS_REWRITES && asPath.startsWith('/')) {\n      let rewrites: any\n      ;({ __rewrites: rewrites } = await getClientBuildManifest())\n\n      const rewritesResult = resolveRewrites(\n        addBasePath(addLocale(asPath, this.locale), true),\n        pages,\n        rewrites,\n        parsed.query,\n        (p: string) => resolveDynamicRoute(p, pages),\n        this.locales\n      )\n\n      if (rewritesResult.externalDest) {\n        return\n      }\n\n      if (!isMiddlewareMatch) {\n        resolvedAs = removeLocale(\n          removeBasePath(rewritesResult.asPath),\n          this.locale\n        )\n      }\n\n      if (rewritesResult.matchedPage && rewritesResult.resolvedHref) {\n        // if this directly matches a page we need to update the href to\n        // allow the correct page chunk to be loaded\n        pathname = rewritesResult.resolvedHref\n        parsed.pathname = pathname\n\n        if (!isMiddlewareMatch) {\n          url = formatWithValidation(parsed)\n        }\n      }\n    }\n    parsed.pathname = resolveDynamicRoute(parsed.pathname, pages)\n\n    if (isDynamicRoute(parsed.pathname)) {\n      pathname = parsed.pathname\n      parsed.pathname = pathname\n      Object.assign(\n        query,\n        getRouteMatcher(getRouteRegex(parsed.pathname))(\n          parsePath(asPath).pathname\n        ) || {}\n      )\n\n      if (!isMiddlewareMatch) {\n        url = formatWithValidation(parsed)\n      }\n    }\n\n    const data =\n      process.env.__NEXT_MIDDLEWARE_PREFETCH === 'strict'\n        ? null\n        : await withMiddlewareEffects({\n            fetchData: () =>\n              fetchNextData({\n                dataHref: this.pageLoader.getDataHref({\n                  href: formatWithValidation({\n                    pathname: originalPathname,\n                    query,\n                  }),\n                  skipInterpolation: true,\n                  asPath: resolvedAs,\n                  locale,\n                }),\n                hasMiddleware: true,\n                isServerRender: false,\n                parseJSON: true,\n                inflightCache: this.sdc,\n                persistCache: !this.isPreview,\n                isPrefetch: true,\n              }),\n            asPath: asPath,\n            locale: locale,\n            router: this,\n          })\n\n    /**\n     * If there was a rewrite we apply the effects of the rewrite on the\n     * current parameters for the prefetch.\n     */\n    if (data?.effect.type === 'rewrite') {\n      parsed.pathname = data.effect.resolvedHref\n      pathname = data.effect.resolvedHref\n      query = { ...query, ...data.effect.parsedAs.query }\n      resolvedAs = data.effect.parsedAs.pathname\n      url = formatWithValidation(parsed)\n    }\n\n    /**\n     * If there is a redirect to an external destination then we don't have\n     * to prefetch content as it will be unused.\n     */\n    if (data?.effect.type === 'redirect-external') {\n      return\n    }\n\n    const route = removeTrailingSlash(pathname)\n\n    if (await this._bfl(asPath, resolvedAs, options.locale, true)) {\n      this.components[urlPathname] = { __appRouter: true } as any\n    }\n\n    await Promise.all([\n      this.pageLoader._isSsg(route).then((isSsg) => {\n        return isSsg\n          ? fetchNextData({\n              dataHref: data?.json\n                ? data?.dataHref\n                : this.pageLoader.getDataHref({\n                    href: url,\n                    asPath: resolvedAs,\n                    locale: locale,\n                  }),\n              isServerRender: false,\n              parseJSON: true,\n              inflightCache: this.sdc,\n              persistCache: !this.isPreview,\n              isPrefetch: true,\n              unstable_skipClientCache:\n                options.unstable_skipClientCache ||\n                (options.priority &&\n                  !!process.env.__NEXT_OPTIMISTIC_CLIENT_CACHE),\n            })\n              .then(() => false)\n              .catch(() => false)\n          : false\n      }),\n      this.pageLoader[options.priority ? 'loadPage' : 'prefetch'](route),\n    ])\n  }\n\n  async fetchComponent(route: string) {\n    const handleCancelled = getCancelledHandler({ route, router: this })\n\n    try {\n      const componentResult = await this.pageLoader.loadPage(route)\n      handleCancelled()\n\n      return componentResult\n    } catch (err) {\n      handleCancelled()\n      throw err\n    }\n  }\n\n  _getData<T>(fn: () => Promise<T>): Promise<T> {\n    let cancelled = false\n    const cancel = () => {\n      cancelled = true\n    }\n    this.clc = cancel\n    return fn().then((data) => {\n      if (cancel === this.clc) {\n        this.clc = null\n      }\n\n      if (cancelled) {\n        const err: any = new Error('Loading initial props cancelled')\n        err.cancelled = true\n        throw err\n      }\n\n      return data\n    })\n  }\n\n  getInitialProps(\n    Component: ComponentType,\n    ctx: NextPageContext\n  ): Promise<Record<string, any>> {\n    const { Component: App } = this.components['/_app']\n    const AppTree = this._wrapApp(App as AppComponent)\n    ctx.AppTree = AppTree\n    return loadGetInitialProps<AppContextType<Router>>(App, {\n      AppTree,\n      Component,\n      router: this,\n      ctx,\n    })\n  }\n\n  get route(): string {\n    return this.state.route\n  }\n\n  get pathname(): string {\n    return this.state.pathname\n  }\n\n  get query(): ParsedUrlQuery {\n    return this.state.query\n  }\n\n  get asPath(): string {\n    return this.state.asPath\n  }\n\n  get locale(): string | undefined {\n    return this.state.locale\n  }\n\n  get isFallback(): boolean {\n    return this.state.isFallback\n  }\n\n  get isPreview(): boolean {\n    return this.state.isPreview\n  }\n}\n"],"names":["removeTrailingSlash","getClientBuildManifest","isAssetError","markAssetError","handleClientScriptLoad","isError","getProperError","denormalizePagePath","normalizeLocalePath","mitt","getLocationOrigin","getURL","loadGetInitialProps","ST","isDynamicRoute","parseRelativeUrl","getRouteMatcher","getRouteRegex","formatWithValidation","detectDomainLocale","parsePath","addLocale","removeLocale","removeBasePath","addBasePath","hasBasePath","resolveHref","isAPIRoute","getNextPathnameInfo","formatNextPathnameInfo","compareRouterStates","isLocalURL","isBot","omit","interpolateAs","disableSmoothScrollDuringRouteTransition","MATCHED_PATH_HEADER","NEXT_NAV_DEPLOYMENT_ID_HEADER","getDeploymentId","isJavaScriptURLString","resolveRewrites","process","env","__NEXT_HAS_REWRITES","require","default","buildCancellationError","Object","assign","Error","cancelled","matchesMiddleware","options","matchers","Promise","resolve","router","pageLoader","getMiddleware","pathname","asPathname","asPath","cleanedAs","asWithBasePathAndLocale","locale","some","m","RegExp","regexp","test","stripOrigin","url","origin","startsWith","substring","length","prepareUrlAs","as","resolvedHref","resolvedAs","hrefWasAbsolute","asWasAbsolute","preparedUrl","preparedAs","resolveDynamicRoute","pages","cleanPathname","includes","page","re","getMiddlewareData","source","response","nextConfig","basePath","i18n","locales","trailingSlash","Boolean","__NEXT_TRAILING_SLASH","rewriteHeader","headers","get","rewriteTarget","matchedPath","__NEXT_EXTERNAL_MIDDLEWARE_REWRITE_RESOLVE","parsedRewriteTarget","pathnameInfo","parseData","fsPathname","all","getPageList","then","__rewrites","rewrites","parsedSource","undefined","result","query","path","matchedPage","parsedAs","resolvedPathname","matches","type","src","defaultLocale","buildId","destination","hash","redirectTarget","newAs","newUrl","withMiddlewareEffects","fetchData","data","effect","dataHref","json","text","cacheKey","manualScrollRestoration","__NEXT_SCROLL_RESTORATION","window","history","v","sessionStorage","setItem","removeItem","n","SSG_DATA_NOT_FOUND","Symbol","fetchRetry","attempts","fetch","credentials","method","ok","status","tryToParseAsJSON","JSON","parse","error","fetchNextData","inflightCache","isPrefetch","hasMiddleware","isServerRender","parseJSON","persistCache","isBackground","unstable_skipClientCache","href","URL","location","deploymentId","getData","params","purpose","notFound","dplResponseHeader","NODE_ENV","catch","err","message","createKey","Math","random","toString","slice","handleHardNavigation","getCancelledHandler","route","cancel","clc","handleCancelled","Router","events","constructor","initialProps","App","wrapApp","Component","subscription","isFallback","domainLocales","isPreview","sdc","sbc","isFirstPopStateEvent","_key","onPopState","e","state","changeState","__NA","reload","__N","forcedScroll","key","stringify","x","self","pageXOffset","y","pageYOffset","getItem","isSsr","_bps","change","shallow","_shallow","_h","components","initial","props","__N_SSG","__N_SSP","styleSheets","autoExportDynamic","__NEXT_DATA__","autoExport","__NEXT_ROUTER_BASEPATH","sub","_wrapApp","isLocaleDomain","isReady","gssp","gip","isExperimentalCompile","appGip","gsp","search","__NEXT_I18N_SUPPORT","hostname","_initialMatchesMiddlewarePromise","_shouldResolveHref","addEventListener","scrollRestoration","back","forward","push","replace","_bfl","skipNavigate","__NEXT_CLIENT_ROUTER_FILTER_ENABLED","_bfl_s","_bfl_d","BloomFilter","staticFilterData","dynamicFilterData","__routerFilterStatic","__routerFilterDynamic","console","routerFilterSValue","__NEXT_CLIENT_ROUTER_S_FILTER","routerFilterDValue","__NEXT_CLIENT_ROUTER_D_FILTER","numHashes","numItems","errorRate","import","matchesBflStatic","matchesBflDynamic","pathsToCheck","curAs","allowMatchCurrent","asNoSlash","asNoSlashLocale","contains","normalizedAS","curAsParts","split","i","currentPart","join","isQueryUpdating","shouldResolveHref","nextState","readyStateChange","prevLocale","localePathResult","detectedLocale","didNavigate","detectedDomain","domain","asNoBasePath","http","performance","mark","scroll","routeProps","_inFlightRoute","emit","localeChange","onlyAHashChange","scrollToHash","set","parsed","urlIsNew","parsedAsPathname","__appRouter","isMiddlewareRewrite","isMiddlewareMatch","rewritesResult","p","externalDest","routeMatch","routeRegex","shouldInterpolate","interpolatedAs","missingParams","keys","groups","filter","param","optional","warn","isErrorRoute","routeInfo","getRouteInfo","cleanedParsedPathname","forEach","prefixedAs","rewriteAs","localeResult","curRouteMatch","component","unstable_scriptLoader","scripts","concat","script","pageProps","__N_REDIRECT","__N_REDIRECT_BASE_PATH","parsedHref","__N_PREVIEW","notFoundRoute","fetchComponent","_","isNotFound","statusCode","isValidShallowRoute","shouldScroll","resetScroll","upcomingScrollState","upcomingRouterState","canSkipUpdating","document","documentElement","lang","hashRegex","handleRouteInfoError","loadErrorFail","getInitialProps","gipErr","routeInfoErr","requestedRoute","existingInfo","cachedRouteInfo","fetchNextDataParams","getDataHref","skipInterpolation","resolvedRoute","res","mod","isValidElementType","wasBailedPrefetch","shouldFetchData","_getData","fetched","beforePopState","cb","oldUrlNoHash","oldHash","newUrlNoHash","newHash","scrollTo","rawHash","decodeURIComponent","idEl","getElementById","scrollIntoView","nameEl","getElementsByName","onlyHashChange","prefetch","navigator","userAgent","urlPathname","originalPathname","__NEXT_MIDDLEWARE_PREFETCH","_isSsg","isSsg","priority","__NEXT_OPTIMISTIC_CLIENT_CACHE","componentResult","loadPage","fn","ctx","AppTree"],"mappings":"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","ignoreList":[0]}