{"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 (true) {\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 (true) {\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 (false) {\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 (false) {\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'), true && !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":null,"metadata":{},"sourceType":"script"}