{"ast":null,"code":"\"use strict\";\n\nvar _regeneratorRuntime = require(\"@babel/runtime/regenerator\");\n\nvar _asyncToGenerator = require(\"@babel/runtime/helpers/asyncToGenerator\");\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\"] = exports.INITIAL_CSS_LOAD_ERROR = exports.looseToArray = void 0;\n\nvar _mitt = _interopRequireDefault(require(\"../next-server/lib/mitt\"));\n\nvar _router = require(\"../next-server/lib/router/router\");\n\nvar _getAssetPathFromRoute = _interopRequireDefault(require(\"../next-server/lib/router/utils/get-asset-path-from-route\"));\n\nvar _isDynamic = require(\"../next-server/lib/router/utils/is-dynamic\");\n\nvar _parseRelativeUrl = require(\"../next-server/lib/router/utils/parse-relative-url\");\n\nvar looseToArray = function looseToArray(input) {\n  return [].slice.call(input);\n};\n\nexports.looseToArray = looseToArray;\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  return (0, _router.markLoadingError)(new Error(\"Error loading \".concat(route)));\n}\n\nvar INITIAL_CSS_LOAD_ERROR = Symbol('INITIAL_CSS_LOAD_ERROR');\nexports.INITIAL_CSS_LOAD_ERROR = INITIAL_CSS_LOAD_ERROR;\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 relPreload = hasRel('preload') ? 'preload' : relPrefetch;\nvar relPreloadStyle = 'fetch';\nvar hasNoModule = ('noModule' in document.createElement('script'));\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, link) {\n  return new Promise(function (res, rej) {\n    link = document.createElement('link'); // The order of property assignment here is intentional:\n\n    if (as) link.as = as;\n    link.rel = rel;\n    link.crossOrigin = process.env.__NEXT_CROSS_ORIGIN;\n    link.onload = res;\n    link.onerror = rej; // `href` should always be last:\n\n    link.href = href;\n    document.head.appendChild(link);\n  });\n}\n\nfunction loadScript(url) {\n  return new Promise(function (res, rej) {\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    script.onload = res;\n\n    script.onerror = function () {\n      return rej(pageLoadError(url));\n    };\n\n    document.body.appendChild(script);\n  });\n}\n\nvar PageLoader = /*#__PURE__*/function () {\n  function PageLoader(buildId, assetPrefix, initialPage) {\n    _classCallCheck(this, PageLoader);\n\n    this.initialPage = void 0;\n    this.buildId = void 0;\n    this.assetPrefix = void 0;\n    this.pageCache = void 0;\n    this.pageRegisterEvents = void 0;\n    this.loadingRoutes = void 0;\n    this.promisedBuildManifest = void 0;\n    this.promisedSsgManifest = void 0;\n    this.promisedDevPagesManifest = void 0;\n    this.initialPage = initialPage;\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    this.promisedBuildManifest = new Promise(function (resolve) {\n      if (window.__BUILD_MANIFEST) {\n        resolve(window.__BUILD_MANIFEST);\n      } else {\n        ;\n\n        window.__BUILD_MANIFEST_CB = function () {\n          resolve(window.__BUILD_MANIFEST);\n        };\n      }\n    });\n    /** @type {Promise<Set<string>>} */\n\n    this.promisedSsgManifest = new Promise(function (resolve) {\n      if (window.__SSG_MANIFEST) {\n        resolve(window.__SSG_MANIFEST);\n      } else {\n        ;\n\n        window.__SSG_MANIFEST_CB = function () {\n          resolve(window.__SSG_MANIFEST);\n        };\n      }\n    });\n  }\n\n  _createClass(PageLoader, [{\n    key: \"getPageList\",\n    value: function getPageList() {\n      if (true) {\n        return this.promisedBuildManifest.then(function (buildManifest) {\n          return buildManifest.sortedPages;\n        });\n      } else {\n        if (window.__DEV_PAGES_MANIFEST) {\n          return window.__DEV_PAGES_MANIFEST.pages;\n        } else {\n          if (!this.promisedDevPagesManifest) {\n            this.promisedDevPagesManifest = fetch(\"\".concat(this.assetPrefix, \"/_next/static/development/_devPagesManifest.json\")).then(function (res) {\n              return res.json();\n            }).then(function (manifest) {\n              ;\n              window.__DEV_PAGES_MANIFEST = manifest;\n              return manifest.pages;\n            })[\"catch\"](function (err) {\n              console.log(\"Failed to fetch devPagesManifest\", err);\n            });\n          }\n\n          return this.promisedDevPagesManifest;\n        }\n      }\n    } // Returns a promise for the dependencies for a particular route\n\n  }, {\n    key: \"getDependencies\",\n    value: function getDependencies(route) {\n      var _this2 = this;\n\n      return this.promisedBuildManifest.then(function (m) {\n        return m[route] ? m[route].map(function (url) {\n          return \"\".concat(_this2.assetPrefix, \"/_next/\").concat(encodeURI(url));\n        }) : Promise.reject(pageLoadError(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\n  }, {\n    key: \"getDataHref\",\n    value: function getDataHref(href, asPath, ssg, locale) {\n      var _this3 = this;\n\n      var _ref = (0, _parseRelativeUrl.parseRelativeUrl)(href),\n          hrefPathname = _ref.pathname,\n          query = _ref.query,\n          search = _ref.search;\n\n      var _ref2 = (0, _parseRelativeUrl.parseRelativeUrl)(asPath),\n          asPathname = _ref2.pathname;\n\n      var route = normalizeRoute(hrefPathname);\n\n      var getHrefForSlug = function getHrefForSlug(path) {\n        var dataRoute = (0, _router.addLocale)((0, _getAssetPathFromRoute[\"default\"])(path, '.json'), locale);\n        return (0, _router.addBasePath)(\"/_next/data/\".concat(_this3.buildId).concat(dataRoute).concat(ssg ? '' : search));\n      };\n\n      var isDynamic = (0, _isDynamic.isDynamicRoute)(route);\n      var interpolatedRoute = isDynamic ? (0, _router.interpolateAs)(hrefPathname, asPathname, query).result : '';\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, locale) {\n      var _this4 = 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 = _this4.getDataHref(href, asPath, true, locale)) && // 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')[\"catch\"](function () {\n            /* ignore prefetch error */\n          })\n        );\n      });\n    }\n  }, {\n    key: \"loadPage\",\n    value: function loadPage(route) {\n      var _this5 = 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 = _this5.pageCache[route];\n\n        if (cachedPage) {\n          if ('error' in cachedPage) {\n            reject(cachedPage.error);\n          } else {\n            resolve(cachedPage);\n          }\n\n          return;\n        }\n\n        var fire = function fire(pageToCache) {\n          _this5.pageRegisterEvents.off(route, fire);\n\n          delete _this5.loadingRoutes[route];\n\n          if ('error' in pageToCache) {\n            reject(pageToCache.error);\n          } else {\n            resolve(pageToCache);\n          }\n        }; // Register a listener to get the page\n\n\n        _this5.pageRegisterEvents.on(route, fire);\n\n        if (!_this5.loadingRoutes[route]) {\n          _this5.loadingRoutes[route] = true;\n\n          if (true) {\n            _this5.getDependencies(route).then(function (deps) {\n              var pending = [];\n              deps.forEach(function (d) {\n                if (d.endsWith('.js') && !document.querySelector(\"script[src^=\\\"\".concat(d, \"\\\"]\"))) {\n                  pending.push(loadScript(d));\n                } // Prefetch CSS as it'll be needed when the page JavaScript\n                // evaluates. This will only trigger if explicit prefetching is\n                // disabled for a <Link>... prefetching in this case is desirable\n                // because we *know* it's going to be used very soon (page was\n                // loaded).\n\n\n                if (d.endsWith('.css') && !document.querySelector(\"link[rel=\\\"\".concat(relPreload, \"\\\"][href^=\\\"\").concat(d, \"\\\"]\"))) {\n                  // This is not pushed into `pending` because we don't need to\n                  // wait for these to resolve. To prevent an unhandled\n                  // rejection, we swallow the error which is handled later in\n                  // the rendering cycle (this is just a preload optimization).\n                  appendLink(d, relPreload, relPreloadStyle)[\"catch\"](function () {\n                    /* ignore preload error */\n                  });\n                }\n              });\n              return Promise.all(pending);\n            })[\"catch\"](function (err) {\n              // Mark the page as failed to load if any of its required scripts\n              // fail to load:\n              _this5.pageCache[route] = {\n                error: err\n              };\n              fire({\n                error: err\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(_this5.assetPrefix, \"/_next/static/chunks/pages\").concat(encodeURI(scriptRoute));\n            loadScript(url)[\"catch\"](function (err) {\n              // Mark the page as failed to load if its script fails to load:\n              _this5.pageCache[route] = {\n                error: err\n              };\n              fire({\n                error: err\n              });\n            });\n          }\n        }\n      });\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 _this = this;\n\n      var register = /*#__PURE__*/function () {\n        var _register = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(styleSheets) {\n          var mod, pageData;\n          return _regeneratorRuntime.wrap(function _callee$(_context) {\n            while (1) {\n              switch (_context.prev = _context.next) {\n                case 0:\n                  _context.prev = 0;\n                  _context.next = 3;\n                  return regFn();\n\n                case 3:\n                  mod = _context.sent;\n                  pageData = {\n                    page: mod[\"default\"] || mod,\n                    mod: mod,\n                    styleSheets: styleSheets\n                  };\n                  _this.pageCache[route] = pageData;\n\n                  _this.pageRegisterEvents.emit(route, pageData);\n\n                  _context.next = 13;\n                  break;\n\n                case 9:\n                  _context.prev = 9;\n                  _context.t0 = _context[\"catch\"](0);\n                  _this.pageCache[route] = {\n                    error: _context.t0\n                  };\n\n                  _this.pageRegisterEvents.emit(route, {\n                    error: _context.t0\n                  });\n\n                case 13:\n                case \"end\":\n                  return _context.stop();\n              }\n            }\n          }, _callee, null, [[0, 9]]);\n        }));\n\n        function register(_x) {\n          return _register.apply(this, arguments);\n        }\n\n        return register;\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              ;\n              module.hot.removeStatusHandler(check);\n              register(\n              /* css is handled via style-loader in development */\n              []);\n            }\n          };\n\n          module.hot.status(check);\n          return;\n        }\n      }\n\n      function fetchStyleSheet(href) {\n        return fetch(href).then(function (res) {\n          if (!res.ok) throw pageLoadError(href);\n          return res.text().then(function (text) {\n            return {\n              href: href,\n              text: text\n            };\n          });\n        });\n      }\n\n      var isInitialLoad = route === this.initialPage;\n      var promisedDeps = // Shared styles will already be on the page:\n      route === '/_app' || // We use `style-loader` in development:\n      false ? Promise.resolve([]) : // Tests that this does not block hydration:\n      // test/integration/css-fixtures/hydrate-without-deps/\n      (isInitialLoad ? Promise.resolve(looseToArray(document.querySelectorAll('link[data-n-p]')).map(function (e) {\n        return e.getAttribute('href');\n      })) : this.getDependencies(route).then(function (deps) {\n        return deps.filter(function (d) {\n          return d.endsWith('.css');\n        });\n      })).then(function (cssFiles) {\n        return (// These files should've already been fetched by now, so this\n          // should resolve instantly.\n          Promise.all(cssFiles.map(function (d) {\n            return fetchStyleSheet(d);\n          }))[\"catch\"](function (err) {\n            if (isInitialLoad) {\n              Object.defineProperty(err, INITIAL_CSS_LOAD_ERROR, {});\n            }\n\n            throw err;\n          })\n        );\n      });\n      promisedDeps.then(function (deps) {\n        return register(deps);\n      }, function (error) {\n        _this6.pageCache[route] = {\n          error: error\n        };\n\n        _this6.pageRegisterEvents.emit(route, {\n          error: error\n        });\n      });\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') ? relPreloadStyle : '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"}