{"ast":null,"code":"\"use strict\";\n\nvar _classCallCheck = require(\"@babel/runtime/helpers/classCallCheck\");\n\nvar _createClass = require(\"@babel/runtime/helpers/createClass\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _mitt = _interopRequireDefault(require(\"../next-server/lib/mitt\"));\n\nvar _isDynamic = require(\"./../next-server/lib/router/utils/is-dynamic\");\n\nvar _routeMatcher = require(\"./../next-server/lib/router/utils/route-matcher\");\n\nvar _routeRegex = require(\"./../next-server/lib/router/utils/route-regex\");\n\nvar _searchParamsToUrlQuery = require(\"./../next-server/lib/router/utils/search-params-to-url-query\");\n\nvar _parseRelativeUrl = require(\"./../next-server/lib/router/utils/parse-relative-url\");\n\nvar _escapePathDelimiters = _interopRequireDefault(require(\"../next-server/lib/router/utils/escape-path-delimiters\"));\n\nvar _getAssetPathFromRoute = _interopRequireDefault(require(\"./../next-server/lib/router/utils/get-asset-path-from-route\"));\n\nfunction hasRel(rel, link) {\n  try {\n    link = document.createElement('link');\n    return link.relList.supports(rel);\n  } catch (_unused) {}\n}\n\nfunction pageLoadError(route) {\n  var error = new Error(\"Error loading \".concat(route));\n  error.code = 'PAGE_LOAD_ERROR';\n  return error;\n}\n\nvar relPrefetch = hasRel('preload') && !hasRel('prefetch') ? // https://caniuse.com/#feat=link-rel-preload\n// macOS and iOS (Safari does not support prefetch)\n'preload' : // https://caniuse.com/#feat=link-rel-prefetch\n// IE 11, Edge 12+, nearly all evergreen\n'prefetch';\nvar hasNoModule = ('noModule' in document.createElement('script'));\n/** @param {string} route */\n\nfunction normalizeRoute(route) {\n  if (route[0] !== '/') {\n    throw new Error(\"Route name should start with a \\\"/\\\", got \\\"\".concat(route, \"\\\"\"));\n  }\n\n  if (route === '/') return route;\n  return route.replace(/\\/$/, '');\n}\n\nfunction appendLink(href, rel, as) {\n  return new Promise(function (res, rej, link) {\n    link = document.createElement('link');\n    link.crossOrigin = process.env.__NEXT_CROSS_ORIGIN;\n    link.href = href;\n    link.rel = rel;\n    if (as) link.as = as;\n    link.onload = res;\n    link.onerror = rej;\n    document.head.appendChild(link);\n  });\n}\n\nvar PageLoader = /*#__PURE__*/function () {\n  function PageLoader(buildId, assetPrefix, initialPage) {\n    _classCallCheck(this, PageLoader);\n\n    this.buildId = buildId;\n    this.assetPrefix = assetPrefix;\n    this.pageCache = {};\n    this.pageRegisterEvents = (0, _mitt[\"default\"])();\n    this.loadingRoutes = {\n      // By default these 2 pages are being loaded in the initial html\n      '/_app': true\n    }; // TODO: get rid of this limitation for rendering the error page\n\n    if (initialPage !== '/_error') {\n      this.loadingRoutes[initialPage] = true;\n    }\n\n    if (false) {\n      this.promisedBuildManifest = new Promise(function (resolve) {\n        if (window.__BUILD_MANIFEST) {\n          resolve(window.__BUILD_MANIFEST);\n        } else {\n          window.__BUILD_MANIFEST_CB = function () {\n            resolve(window.__BUILD_MANIFEST);\n          };\n        }\n      });\n    }\n    /** @type {Promise<Set<string>>} */\n\n\n    this.promisedSsgManifest = new Promise(function (resolve) {\n      if (window.__SSG_MANIFEST) {\n        resolve(window.__SSG_MANIFEST);\n      } else {\n        window.__SSG_MANIFEST_CB = function () {\n          resolve(window.__SSG_MANIFEST);\n        };\n      }\n    });\n  } // Returns a promise for the dependencies for a particular route\n\n\n  _createClass(PageLoader, [{\n    key: \"getDependencies\",\n    value: function getDependencies(route) {\n      var _this = this;\n\n      return this.promisedBuildManifest.then(function (m) {\n        var _this$pageRegisterEve;\n\n        return m[route] ? m[route].map(function (url) {\n          return \"\".concat(_this.assetPrefix, \"/_next/\").concat(encodeURI(url));\n        }) : (_this$pageRegisterEve = _this.pageRegisterEvents.emit(route, {\n          error: pageLoadError(route)\n        })) != null ? _this$pageRegisterEve : [];\n      });\n    }\n    /**\n    * @param {string} href the route href (file-system path)\n    * @param {string} asPath the URL as shown in browser (virtual path); used for dynamic routes\n    */\n\n  }, {\n    key: \"getDataHref\",\n    value: function getDataHref(href, asPath, ssg) {\n      var _this2 = this;\n\n      var _ref = (0, _parseRelativeUrl.parseRelativeUrl)(href),\n          hrefPathname = _ref.pathname,\n          searchParams = _ref.searchParams,\n          search = _ref.search;\n\n      var query = (0, _searchParamsToUrlQuery.searchParamsToUrlQuery)(searchParams);\n\n      var _ref2 = (0, _parseRelativeUrl.parseRelativeUrl)(asPath),\n          asPathname = _ref2.pathname;\n\n      var route = normalizeRoute(hrefPathname);\n\n      var getHrefForSlug =\n      /** @type string */\n      function getHrefForSlug(path) {\n        var dataRoute = (0, _getAssetPathFromRoute[\"default\"])(path, '.json');\n        return \"\".concat(_this2.assetPrefix, \"/_next/data/\").concat(_this2.buildId).concat(dataRoute).concat(ssg ? '' : search || '');\n      };\n\n      var isDynamic = (0, _isDynamic.isDynamicRoute)(route),\n          interpolatedRoute;\n\n      if (isDynamic) {\n        var dynamicRegex = (0, _routeRegex.getRouteRegex)(route);\n        var dynamicGroups = dynamicRegex.groups;\n        var dynamicMatches = // Try to match the dynamic route against the asPath\n        (0, _routeMatcher.getRouteMatcher)(dynamicRegex)(asPathname) || // Fall back to reading the values from the href\n        // TODO: should this take priority; also need to change in the router.\n        query;\n        interpolatedRoute = route;\n\n        if (!Object.keys(dynamicGroups).every(function (param) {\n          var value = dynamicMatches[param] || '';\n          var _dynamicGroups$param = dynamicGroups[param],\n              repeat = _dynamicGroups$param.repeat,\n              optional = _dynamicGroups$param.optional; // support single-level catch-all\n          // TODO: more robust handling for user-error (passing `/`)\n\n          var replaced = \"[\".concat(repeat ? '...' : '').concat(param, \"]\");\n\n          if (optional) {\n            replaced = \"\".concat(!value ? '/' : '', \"[\").concat(replaced, \"]\");\n          }\n\n          if (repeat && !Array.isArray(value)) value = [value];\n          return (optional || param in dynamicMatches) && ( // Interpolate group into data URL if present\n          interpolatedRoute = interpolatedRoute.replace(replaced, repeat ? value.map(_escapePathDelimiters[\"default\"]).join('/') : (0, _escapePathDelimiters[\"default\"])(value)) || '/');\n        })) {\n          interpolatedRoute = ''; // did not satisfy all requirements\n          // n.b. We ignore this error because we handle warning for this case in\n          // development in the `<Link>` component directly.\n        }\n      }\n\n      return isDynamic ? interpolatedRoute && getHrefForSlug(interpolatedRoute) : getHrefForSlug(route);\n    }\n    /**\n    * @param {string} href the route href (file-system path)\n    * @param {string} asPath the URL as shown in browser (virtual path); used for dynamic routes\n    */\n\n  }, {\n    key: \"prefetchData\",\n    value: function prefetchData(href, asPath) {\n      var _this3 = this;\n\n      var _ref3 = (0, _parseRelativeUrl.parseRelativeUrl)(href),\n          hrefPathname = _ref3.pathname;\n\n      var route = normalizeRoute(hrefPathname);\n      return this.promisedSsgManifest.then(function (s, _dataHref) {\n        return (// Check if the route requires a data file\n          s.has(route) && ( // Try to generate data href, noop when falsy\n          _dataHref = _this3.getDataHref(href, asPath, true)) && // noop when data has already been prefetched (dedupe)\n          !document.querySelector(\"link[rel=\\\"\".concat(relPrefetch, \"\\\"][href^=\\\"\").concat(_dataHref, \"\\\"]\")) && // Inject the `<link rel=prefetch>` tag for above computed `href`.\n          appendLink(_dataHref, relPrefetch, 'fetch')\n        );\n      });\n    }\n  }, {\n    key: \"loadPage\",\n    value: function loadPage(route) {\n      var _this4 = this;\n\n      route = normalizeRoute(route);\n      return new Promise(function (resolve, reject) {\n        // If there's a cached version of the page, let's use it.\n        var cachedPage = _this4.pageCache[route];\n\n        if (cachedPage) {\n          var error = cachedPage.error,\n              page = cachedPage.page,\n              mod = cachedPage.mod;\n          error ? reject(error) : resolve({\n            page: page,\n            mod: mod\n          });\n          return;\n        }\n\n        var fire = function fire(_ref4) {\n          var error = _ref4.error,\n              page = _ref4.page,\n              mod = _ref4.mod;\n\n          _this4.pageRegisterEvents.off(route, fire);\n\n          delete _this4.loadingRoutes[route];\n\n          if (error) {\n            reject(error);\n          } else {\n            resolve({\n              page: page,\n              mod: mod\n            });\n          }\n        }; // Register a listener to get the page\n\n\n        _this4.pageRegisterEvents.on(route, fire);\n\n        if (!_this4.loadingRoutes[route]) {\n          _this4.loadingRoutes[route] = true;\n\n          if (false) {\n            _this4.getDependencies(route).then(function (deps) {\n              deps.forEach(function (d) {\n                if (d.endsWith('.js') && !document.querySelector(\"script[src^=\\\"\".concat(d, \"\\\"]\"))) {\n                  _this4.loadScript(d, route);\n                }\n\n                if (d.endsWith('.css') && !document.querySelector(\"link[rel=stylesheet][href^=\\\"\".concat(d, \"\\\"]\"))) {\n                  appendLink(d, 'stylesheet')[\"catch\"](function () {// FIXME: handle failure\n                    // Right now, this is needed to prevent an unhandled rejection.\n                  });\n                }\n              });\n            });\n          } else {\n            // Development only. In production the page file is part of the build manifest\n            route = normalizeRoute(route);\n            var scriptRoute = (0, _getAssetPathFromRoute[\"default\"])(route, '.js');\n            var url = \"\".concat(_this4.assetPrefix, \"/_next/static/chunks/pages\").concat(encodeURI(scriptRoute));\n\n            _this4.loadScript(url, route);\n          }\n        }\n      });\n    }\n  }, {\n    key: \"loadScript\",\n    value: function loadScript(url, route) {\n      var _this5 = this;\n\n      var script = document.createElement('script');\n\n      if (process.env.__NEXT_MODERN_BUILD && hasNoModule) {\n        script.type = 'module';\n      }\n\n      script.crossOrigin = process.env.__NEXT_CROSS_ORIGIN;\n      script.src = url;\n\n      script.onerror = function () {\n        _this5.pageRegisterEvents.emit(route, {\n          error: pageLoadError(url)\n        });\n      };\n\n      document.body.appendChild(script);\n    } // This method if called by the route code.\n\n  }, {\n    key: \"registerPage\",\n    value: function registerPage(route, regFn) {\n      var _this6 = this;\n\n      var register = function register() {\n        try {\n          var mod = regFn();\n          var pageData = {\n            page: mod[\"default\"] || mod,\n            mod: mod\n          };\n          _this6.pageCache[route] = pageData;\n\n          _this6.pageRegisterEvents.emit(route, pageData);\n        } catch (error) {\n          _this6.pageCache[route] = {\n            error: error\n          };\n\n          _this6.pageRegisterEvents.emit(route, {\n            error: error\n          });\n        }\n      };\n\n      if (true) {\n        // Wait for webpack to become idle if it's not.\n        // More info: https://github.com/vercel/next.js/pull/1511\n        if (module.hot && module.hot.status() !== 'idle') {\n          console.log(\"Waiting for webpack to become \\\"idle\\\" to initialize the page: \\\"\".concat(route, \"\\\"\"));\n\n          var check = function check(status) {\n            if (status === 'idle') {\n              module.hot.removeStatusHandler(check);\n              register();\n            }\n          };\n\n          module.hot.status(check);\n          return;\n        }\n      }\n\n      register();\n    }\n    /**\n    * @param {string} route\n    * @param {boolean} [isDependency]\n    */\n\n  }, {\n    key: \"prefetch\",\n    value: function prefetch(route, isDependency) {\n      var _this7 = this;\n\n      // https://github.com/GoogleChromeLabs/quicklink/blob/453a661fa1fa940e2d2e044452398e38c67a98fb/src/index.mjs#L115-L118\n      // License: Apache 2.0\n      var cn;\n\n      if (cn = navigator.connection) {\n        // Don't prefetch if using 2G or if Save-Data is enabled.\n        if (cn.saveData || /2g/.test(cn.effectiveType)) return Promise.resolve();\n      }\n      /** @type {string} */\n\n\n      var url;\n\n      if (isDependency) {\n        url = route;\n      } else {\n        if (true) {\n          route = normalizeRoute(route);\n          var ext = process.env.__NEXT_MODERN_BUILD && hasNoModule ? '.module.js' : '.js';\n          var scriptRoute = (0, _getAssetPathFromRoute[\"default\"])(route, ext);\n          url = \"\".concat(this.assetPrefix, \"/_next/static/\").concat(encodeURIComponent(this.buildId), \"/pages\").concat(encodeURI(scriptRoute));\n        }\n      }\n\n      return Promise.all(document.querySelector(\"link[rel=\\\"\".concat(relPrefetch, \"\\\"][href^=\\\"\").concat(url, \"\\\"]\")) ? [] : [url && appendLink(url, relPrefetch, url.endsWith('.css') ? 'style' : 'script'), false && !isDependency && this.getDependencies(route).then(function (urls) {\n        return Promise.all(urls.map(function (dependencyUrl) {\n          return _this7.prefetch(dependencyUrl, true);\n        }));\n      })]).then( // do not return any data\n      function () {}, // swallow prefetch errors\n      function () {});\n    }\n  }]);\n\n  return PageLoader;\n}();\n\nexports[\"default\"] = PageLoader;","map":{"version":3,"sources":["../../client/page-loader.js"],"names":["link","document","error","relPrefetch","hasRel","hasNoModule","route","process","PageLoader","constructor","initialPage","resolve","window","m","url","assetPrefix","encodeURI","pageLoadError","pathname","query","normalizeRoute","getHrefForSlug","path","dataRoute","buildId","ssg","search","isDynamic","dynamicRegex","dynamicGroups","dynamicMatches","interpolatedRoute","Object","param","value","replaced","repeat","Array","optional","escapePathDelimiters","s","_dataHref","appendLink","loadPage","cachedPage","reject","page","mod","fire","deps","d","scriptRoute","loadScript","script","register","regFn","pageData","module","console","check","status","cn","navigator","Promise","ext","encodeURIComponent","urls","dependencyUrl"],"mappings":"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","sourcesContent":["import mitt from '../next-server/lib/mitt'\nimport { isDynamicRoute } from './../next-server/lib/router/utils/is-dynamic'\nimport { getRouteMatcher } from './../next-server/lib/router/utils/route-matcher'\nimport { getRouteRegex } from './../next-server/lib/router/utils/route-regex'\nimport { searchParamsToUrlQuery } from './../next-server/lib/router/utils/search-params-to-url-query'\nimport { parseRelativeUrl } from './../next-server/lib/router/utils/parse-relative-url'\nimport escapePathDelimiters from '../next-server/lib/router/utils/escape-path-delimiters'\nimport getAssetPathFromRoute from './../next-server/lib/router/utils/get-asset-path-from-route'\n\nfunction hasRel(rel, link) {\n  try {\n    link = document.createElement('link')\n    return link.relList.supports(rel)\n  } catch {}\n}\n\nfunction pageLoadError(route) {\n  const error = new Error(`Error loading ${route}`)\n  error.code = 'PAGE_LOAD_ERROR'\n  return error\n}\n\nconst relPrefetch =\n  hasRel('preload') && !hasRel('prefetch')\n    ? // https://caniuse.com/#feat=link-rel-preload\n      // macOS and iOS (Safari does not support prefetch)\n      'preload'\n    : // https://caniuse.com/#feat=link-rel-prefetch\n      // IE 11, Edge 12+, nearly all evergreen\n      'prefetch'\n\nconst hasNoModule = 'noModule' in document.createElement('script')\n\n/** @param {string} route */\nfunction normalizeRoute(route) {\n  if (route[0] !== '/') {\n    throw new Error(`Route name should start with a \"/\", got \"${route}\"`)\n  }\n\n  if (route === '/') return route\n  return route.replace(/\\/$/, '')\n}\n\nfunction appendLink(href, rel, as) {\n  return new Promise((res, rej, link) => {\n    link = document.createElement('link')\n    link.crossOrigin = process.env.__NEXT_CROSS_ORIGIN\n    link.href = href\n    link.rel = rel\n    if (as) link.as = as\n\n    link.onload = res\n    link.onerror = rej\n\n    document.head.appendChild(link)\n  })\n}\n\nexport default class PageLoader {\n  constructor(buildId, assetPrefix, initialPage) {\n    this.buildId = buildId\n    this.assetPrefix = assetPrefix\n\n    this.pageCache = {}\n    this.pageRegisterEvents = mitt()\n    this.loadingRoutes = {\n      // By default these 2 pages are being loaded in the initial html\n      '/_app': true,\n    }\n\n    // TODO: get rid of this limitation for rendering the error page\n    if (initialPage !== '/_error') {\n      this.loadingRoutes[initialPage] = true\n    }\n\n    if (process.env.NODE_ENV === 'production') {\n      this.promisedBuildManifest = new Promise((resolve) => {\n        if (window.__BUILD_MANIFEST) {\n          resolve(window.__BUILD_MANIFEST)\n        } else {\n          window.__BUILD_MANIFEST_CB = () => {\n            resolve(window.__BUILD_MANIFEST)\n          }\n        }\n      })\n    }\n    /** @type {Promise<Set<string>>} */\n    this.promisedSsgManifest = new Promise((resolve) => {\n      if (window.__SSG_MANIFEST) {\n        resolve(window.__SSG_MANIFEST)\n      } else {\n        window.__SSG_MANIFEST_CB = () => {\n          resolve(window.__SSG_MANIFEST)\n        }\n      }\n    })\n  }\n\n  // Returns a promise for the dependencies for a particular route\n  getDependencies(route) {\n    return this.promisedBuildManifest.then((m) => {\n      return m[route]\n        ? m[route].map((url) => `${this.assetPrefix}/_next/${encodeURI(url)}`)\n        : this.pageRegisterEvents.emit(route, {\n            error: pageLoadError(route),\n          }) ?? []\n    })\n  }\n\n  /**\n   * @param {string} href the route href (file-system path)\n   * @param {string} asPath the URL as shown in browser (virtual path); used for dynamic routes\n   */\n  getDataHref(href, asPath, ssg) {\n    const { pathname: hrefPathname, searchParams, search } = parseRelativeUrl(\n      href\n    )\n    const query = searchParamsToUrlQuery(searchParams)\n    const { pathname: asPathname } = parseRelativeUrl(asPath)\n    const route = normalizeRoute(hrefPathname)\n\n    const getHrefForSlug = (/** @type string */ path) => {\n      const dataRoute = getAssetPathFromRoute(path, '.json')\n      return `${this.assetPrefix}/_next/data/${this.buildId}${dataRoute}${\n        ssg ? '' : search || ''\n      }`\n    }\n\n    let isDynamic = isDynamicRoute(route),\n      interpolatedRoute\n    if (isDynamic) {\n      const dynamicRegex = getRouteRegex(route)\n      const dynamicGroups = dynamicRegex.groups\n      const dynamicMatches =\n        // Try to match the dynamic route against the asPath\n        getRouteMatcher(dynamicRegex)(asPathname) ||\n        // Fall back to reading the values from the href\n        // TODO: should this take priority; also need to change in the router.\n        query\n\n      interpolatedRoute = route\n      if (\n        !Object.keys(dynamicGroups).every((param) => {\n          let value = dynamicMatches[param] || ''\n          const { repeat, optional } = dynamicGroups[param]\n\n          // support single-level catch-all\n          // TODO: more robust handling for user-error (passing `/`)\n          let replaced = `[${repeat ? '...' : ''}${param}]`\n          if (optional) {\n            replaced = `${!value ? '/' : ''}[${replaced}]`\n          }\n          if (repeat && !Array.isArray(value)) value = [value]\n\n          return (\n            (optional || param in dynamicMatches) &&\n            // Interpolate group into data URL if present\n            (interpolatedRoute =\n              interpolatedRoute.replace(\n                replaced,\n                repeat\n                  ? value.map(escapePathDelimiters).join('/')\n                  : escapePathDelimiters(value)\n              ) || '/')\n          )\n        })\n      ) {\n        interpolatedRoute = '' // did not satisfy all requirements\n\n        // n.b. We ignore this error because we handle warning for this case in\n        // development in the `<Link>` component directly.\n      }\n    }\n\n    return isDynamic\n      ? interpolatedRoute && getHrefForSlug(interpolatedRoute)\n      : getHrefForSlug(route)\n  }\n\n  /**\n   * @param {string} href the route href (file-system path)\n   * @param {string} asPath the URL as shown in browser (virtual path); used for dynamic routes\n   */\n  prefetchData(href, asPath) {\n    const { pathname: hrefPathname } = parseRelativeUrl(href)\n    const route = normalizeRoute(hrefPathname)\n    return this.promisedSsgManifest.then(\n      (s, _dataHref) =>\n        // Check if the route requires a data file\n        s.has(route) &&\n        // Try to generate data href, noop when falsy\n        (_dataHref = this.getDataHref(href, asPath, true)) &&\n        // noop when data has already been prefetched (dedupe)\n        !document.querySelector(\n          `link[rel=\"${relPrefetch}\"][href^=\"${_dataHref}\"]`\n        ) &&\n        // Inject the `<link rel=prefetch>` tag for above computed `href`.\n        appendLink(_dataHref, relPrefetch, 'fetch')\n    )\n  }\n\n  loadPage(route) {\n    route = normalizeRoute(route)\n\n    return new Promise((resolve, reject) => {\n      // If there's a cached version of the page, let's use it.\n      const cachedPage = this.pageCache[route]\n      if (cachedPage) {\n        const { error, page, mod } = cachedPage\n        error ? reject(error) : resolve({ page, mod })\n        return\n      }\n\n      const fire = ({ error, page, mod }) => {\n        this.pageRegisterEvents.off(route, fire)\n        delete this.loadingRoutes[route]\n\n        if (error) {\n          reject(error)\n        } else {\n          resolve({ page, mod })\n        }\n      }\n\n      // Register a listener to get the page\n      this.pageRegisterEvents.on(route, fire)\n\n      if (!this.loadingRoutes[route]) {\n        this.loadingRoutes[route] = true\n        if (process.env.NODE_ENV === 'production') {\n          this.getDependencies(route).then((deps) => {\n            deps.forEach((d) => {\n              if (\n                d.endsWith('.js') &&\n                !document.querySelector(`script[src^=\"${d}\"]`)\n              ) {\n                this.loadScript(d, route)\n              }\n              if (\n                d.endsWith('.css') &&\n                !document.querySelector(`link[rel=stylesheet][href^=\"${d}\"]`)\n              ) {\n                appendLink(d, 'stylesheet').catch(() => {\n                  // FIXME: handle failure\n                  // Right now, this is needed to prevent an unhandled rejection.\n                })\n              }\n            })\n          })\n        } else {\n          // Development only. In production the page file is part of the build manifest\n          route = normalizeRoute(route)\n          let scriptRoute = getAssetPathFromRoute(route, '.js')\n\n          const url = `${this.assetPrefix}/_next/static/chunks/pages${encodeURI(\n            scriptRoute\n          )}`\n          this.loadScript(url, route)\n        }\n      }\n    })\n  }\n\n  loadScript(url, route) {\n    const script = document.createElement('script')\n    if (process.env.__NEXT_MODERN_BUILD && hasNoModule) {\n      script.type = 'module'\n    }\n    script.crossOrigin = process.env.__NEXT_CROSS_ORIGIN\n    script.src = url\n    script.onerror = () => {\n      this.pageRegisterEvents.emit(route, { error: pageLoadError(url) })\n    }\n    document.body.appendChild(script)\n  }\n\n  // This method if called by the route code.\n  registerPage(route, regFn) {\n    const register = () => {\n      try {\n        const mod = regFn()\n        const pageData = { page: mod.default || mod, mod }\n        this.pageCache[route] = pageData\n        this.pageRegisterEvents.emit(route, pageData)\n      } catch (error) {\n        this.pageCache[route] = { error }\n        this.pageRegisterEvents.emit(route, { error })\n      }\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      // Wait for webpack to become idle if it's not.\n      // More info: https://github.com/vercel/next.js/pull/1511\n      if (module.hot && module.hot.status() !== 'idle') {\n        console.log(\n          `Waiting for webpack to become \"idle\" to initialize the page: \"${route}\"`\n        )\n\n        const check = (status) => {\n          if (status === 'idle') {\n            module.hot.removeStatusHandler(check)\n            register()\n          }\n        }\n        module.hot.status(check)\n        return\n      }\n    }\n\n    register()\n  }\n\n  /**\n   * @param {string} route\n   * @param {boolean} [isDependency]\n   */\n  prefetch(route, isDependency) {\n    // https://github.com/GoogleChromeLabs/quicklink/blob/453a661fa1fa940e2d2e044452398e38c67a98fb/src/index.mjs#L115-L118\n    // License: Apache 2.0\n    let cn\n    if ((cn = navigator.connection)) {\n      // Don't prefetch if using 2G or if Save-Data is enabled.\n      if (cn.saveData || /2g/.test(cn.effectiveType)) return Promise.resolve()\n    }\n\n    /** @type {string} */\n    let url\n    if (isDependency) {\n      url = route\n    } else {\n      if (process.env.NODE_ENV !== 'production') {\n        route = normalizeRoute(route)\n\n        const ext =\n          process.env.__NEXT_MODERN_BUILD && hasNoModule ? '.module.js' : '.js'\n        const scriptRoute = getAssetPathFromRoute(route, ext)\n\n        url = `${this.assetPrefix}/_next/static/${encodeURIComponent(\n          this.buildId\n        )}/pages${encodeURI(scriptRoute)}`\n      }\n    }\n\n    return Promise.all(\n      document.querySelector(`link[rel=\"${relPrefetch}\"][href^=\"${url}\"]`)\n        ? []\n        : [\n            url &&\n              appendLink(\n                url,\n                relPrefetch,\n                url.endsWith('.css') ? 'style' : 'script'\n              ),\n            process.env.NODE_ENV === 'production' &&\n              !isDependency &&\n              this.getDependencies(route).then((urls) =>\n                Promise.all(\n                  urls.map((dependencyUrl) =>\n                    this.prefetch(dependencyUrl, true)\n                  )\n                )\n              ),\n          ]\n    ).then(\n      // do not return any data\n      () => {},\n      // swallow prefetch errors\n      () => {}\n    )\n  }\n}\n"]},"metadata":{},"sourceType":"script"}