tethysfaceid
Version:
1 lines • 29.8 kB
JSON
{"ast":null,"code":"\"use strict\";\n\nvar _regeneratorRuntime = require(\"/Users/dhrumil1/Documents/Tethy/online-verification/node_modules/@babel/runtime/regenerator\");\n\nvar _slicedToArray = require(\"/Users/dhrumil1/Documents/Tethy/online-verification/node_modules/@babel/runtime/helpers/slicedToArray\");\n\nvar _asyncToGenerator = require(\"/Users/dhrumil1/Documents/Tethy/online-verification/node_modules/@babel/runtime/helpers/asyncToGenerator\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.markAssetError = markAssetError;\nexports.isAssetError = isAssetError;\nexports.getClientBuildManifest = getClientBuildManifest;\nexports[\"default\"] = void 0;\n\nvar _getAssetPathFromRoute = _interopRequireDefault(require(\"../next-server/lib/router/utils/get-asset-path-from-route\"));\n\nvar _requestIdleCallback = _interopRequireDefault(require(\"./request-idle-callback\")); // 3.8s was arbitrarily chosen as it's what https://web.dev/interactive\n// considers as \"Good\" time-to-interactive. We must assume something went\n// wrong beyond this point, and then fall-back to a full page transition to\n// show the user something of value.\n\n\nvar MS_MAX_IDLE_DELAY = 3800;\n\nfunction withFuture(key, map, generator) {\n var entry = map.get(key);\n\n if (entry) {\n if ('future' in entry) {\n return entry.future;\n }\n\n return Promise.resolve(entry);\n }\n\n var resolver;\n var prom = new Promise(function (resolve) {\n resolver = resolve;\n });\n map.set(key, entry = {\n resolve: resolver,\n future: prom\n });\n return generator ? // eslint-disable-next-line no-sequences\n generator().then(function (value) {\n return resolver(value), value;\n }) : prom;\n}\n\nfunction hasPrefetch(link) {\n try {\n link = document.createElement('link');\n return (// detect IE11 since it supports prefetch but isn't detected\n // with relList.support\n !!window.MSInputMethodContext && !!document.documentMode || link.relList.supports('prefetch')\n );\n } catch (_unused) {\n return false;\n }\n}\n\nvar canPrefetch = hasPrefetch();\n\nfunction prefetchViaDom(href, as, link) {\n return new Promise(function (res, rej) {\n if (document.querySelector(\"link[rel=\\\"prefetch\\\"][href^=\\\"\".concat(href, \"\\\"]\"))) {\n return res();\n }\n\n link = document.createElement('link'); // The order of property assignment here is intentional:\n\n if (as) link.as = as;\n link.rel = \"prefetch\";\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\nvar ASSET_LOAD_ERROR = Symbol('ASSET_LOAD_ERROR'); // TODO: unexport\n\nfunction markAssetError(err) {\n return Object.defineProperty(err, ASSET_LOAD_ERROR, {});\n}\n\nfunction isAssetError(err) {\n return err && ASSET_LOAD_ERROR in err;\n}\n\nfunction appendScript(src, script) {\n return new Promise(function (resolve, reject) {\n script = document.createElement('script'); // The order of property assignment here is intentional.\n // 1. Setup success/failure hooks in case the browser synchronously\n // executes when `src` is set.\n\n script.onload = resolve;\n\n script.onerror = function () {\n return reject(markAssetError(new Error(\"Failed to load script: \".concat(src))));\n }; // 2. Configure the cross-origin attribute before setting `src` in case the\n // browser begins to fetch.\n\n\n script.crossOrigin = process.env.__NEXT_CROSS_ORIGIN; // 3. Finally, set the source and inject into the DOM in case the child\n // must be appended for fetching to start.\n\n script.src = src;\n document.body.appendChild(script);\n });\n}\n\nfunction idleTimeout(ms, err) {\n return new Promise(function (_resolve, reject) {\n return (0, _requestIdleCallback[\"default\"])(function () {\n return setTimeout(function () {\n return reject(err);\n }, ms);\n });\n });\n} // TODO: stop exporting or cache the failure\n// It'd be best to stop exporting this. It's an implementation detail. We're\n// only exporting it for backwards compatibilty with the `page-loader`.\n// Only cache this response as a last resort if we cannot eliminate all other\n// code branches that use the Build Manifest Callback and push them through\n// the Route Loader interface.\n\n\nfunction getClientBuildManifest() {\n if (self.__BUILD_MANIFEST) {\n return Promise.resolve(self.__BUILD_MANIFEST);\n }\n\n var onBuildManifest = new Promise(function (resolve) {\n // Mandatory because this is not concurrent safe:\n var cb = self.__BUILD_MANIFEST_CB;\n\n self.__BUILD_MANIFEST_CB = function () {\n resolve(self.__BUILD_MANIFEST);\n cb && cb();\n };\n });\n return Promise.race([onBuildManifest, idleTimeout(MS_MAX_IDLE_DELAY, markAssetError(new Error('Failed to load client build manifest')))]);\n}\n\nfunction getFilesForRoute(assetPrefix, route) {\n if (true) {\n return Promise.resolve({\n scripts: [assetPrefix + '/_next/static/chunks/pages' + encodeURI((0, _getAssetPathFromRoute[\"default\"])(route, '.js'))],\n // Styles are handled by `style-loader` in development:\n css: []\n });\n }\n\n return getClientBuildManifest().then(function (manifest) {\n if (!(route in manifest)) {\n throw markAssetError(new Error(\"Failed to lookup route: \".concat(route)));\n }\n\n var allFiles = manifest[route].map(function (entry) {\n return assetPrefix + '/_next/' + encodeURI(entry);\n });\n return {\n scripts: allFiles.filter(function (v) {\n return v.endsWith('.js');\n }),\n css: allFiles.filter(function (v) {\n return v.endsWith('.css');\n })\n };\n });\n}\n\nfunction createRouteLoader(assetPrefix) {\n var entrypoints = new Map();\n var loadedScripts = new Map();\n var styleSheets = new Map();\n var routes = new Map();\n\n function maybeExecuteScript(src) {\n var prom = loadedScripts.get(src);\n\n if (prom) {\n return prom;\n } // Skip executing script if it's already in the DOM:\n\n\n if (document.querySelector(\"script[src^=\\\"\".concat(src, \"\\\"]\"))) {\n return Promise.resolve();\n }\n\n loadedScripts.set(src, prom = appendScript(src));\n return prom;\n }\n\n function fetchStyleSheet(href) {\n var prom = styleSheets.get(href);\n\n if (prom) {\n return prom;\n }\n\n styleSheets.set(href, prom = fetch(href).then(function (res) {\n if (!res.ok) {\n throw new Error(\"Failed to load stylesheet: \".concat(href));\n }\n\n return res.text().then(function (text) {\n return {\n href: href,\n content: text\n };\n });\n })[\"catch\"](function (err) {\n throw markAssetError(err);\n }));\n return prom;\n }\n\n return {\n whenEntrypoint: function whenEntrypoint(route) {\n return withFuture(route, entrypoints);\n },\n onEntrypoint: function onEntrypoint(route, execute) {\n Promise.resolve(execute).then(function (fn) {\n return fn();\n }).then(function (exports) {\n return {\n component: exports && exports[\"default\"] || exports,\n exports: exports\n };\n }, function (err) {\n return {\n error: err\n };\n }).then(function (input) {\n var old = entrypoints.get(route);\n entrypoints.set(route, input);\n if (old && 'resolve' in old) old.resolve(input);\n });\n },\n loadRoute: function loadRoute(route) {\n var _this = this;\n\n return withFuture(route, routes, /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {\n var _yield$getFilesForRou, scripts, css, _yield$Promise$all, _yield$Promise$all2, styles, entrypoint, res;\n\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 getFilesForRoute(assetPrefix, route);\n\n case 3:\n _yield$getFilesForRou = _context.sent;\n scripts = _yield$getFilesForRou.scripts;\n css = _yield$getFilesForRou.css;\n _context.next = 8;\n return Promise.all([entrypoints.has(route) ? [] : Promise.all(scripts.map(maybeExecuteScript)), Promise.all(css.map(fetchStyleSheet))]);\n\n case 8:\n _yield$Promise$all = _context.sent;\n _yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 2);\n styles = _yield$Promise$all2[1];\n _context.next = 13;\n return Promise.race([_this.whenEntrypoint(route), idleTimeout(MS_MAX_IDLE_DELAY, markAssetError(new Error(\"Route did not complete loading: \".concat(route))))]);\n\n case 13:\n entrypoint = _context.sent;\n res = Object.assign({\n styles: styles\n }, entrypoint);\n return _context.abrupt(\"return\", 'error' in entrypoint ? entrypoint : res);\n\n case 18:\n _context.prev = 18;\n _context.t0 = _context[\"catch\"](0);\n return _context.abrupt(\"return\", {\n error: _context.t0\n });\n\n case 21:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee, null, [[0, 18]]);\n })));\n },\n prefetch: function prefetch(route) {\n var _this2 = 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\n return getFilesForRoute(assetPrefix, route).then(function (output) {\n return Promise.all(canPrefetch ? output.scripts.map(function (script) {\n return prefetchViaDom(script, 'script');\n }) : []);\n }).then(function () {\n (0, _requestIdleCallback[\"default\"])(function () {\n return _this2.loadRoute(route);\n });\n })[\"catch\"]( // swallow prefetch errors\n function () {});\n }\n };\n}\n\nvar _default = createRouteLoader;\nexports[\"default\"] = _default;","map":{"version":3,"sources":["../../client/route-loader.ts"],"names":["MS_MAX_IDLE_DELAY","entry","map","Promise","prom","resolve","resolver","future","generator","value","link","document","window","canPrefetch","hasPrefetch","res","process","ASSET_LOAD_ERROR","Symbol","Object","err","script","reject","markAssetError","setTimeout","self","onBuildManifest","cb","idleTimeout","scripts","assetPrefix","encodeURI","css","getClientBuildManifest","manifest","route","allFiles","v","entrypoints","loadedScripts","styleSheets","routes","appendScript","fetch","text","href","content","whenEntrypoint","withFuture","onEntrypoint","fn","exports","component","error","input","old","loadRoute","getFilesForRoute","entrypoint","styles","prefetch","cn","navigator","output","prefetchViaDom","createRouteLoader"],"mappings":";;;;;;;;;;;;;;;;AAEA,IAAA,sBAAA,GAAA,sBAAA,CAAA,OAAA,CAAA,2DAAA,CAAA,CAAA;;AACA,IAAA,oBAAA,GAAA,sBAAA,CAAA,OAAA,CAAA,yBAAA,CAAA,CAAA,C,CAEA;AACA;AACA;AACA;;;AACA,IAAMA,iBAAiB,GAAvB,IAAA;;AAmCA,SAAA,UAAA,CAAA,GAAA,EAAA,GAAA,EAAA,SAAA,EAIc;AACZ,MAAIC,KAAgC,GAAGC,GAAG,CAAHA,GAAAA,CAAvC,GAAuCA,CAAvC;;AACA,MAAA,KAAA,EAAW;AACT,QAAI,YAAJ,KAAA,EAAuB;AACrB,aAAOD,KAAK,CAAZ,MAAA;AAEF;;AAAA,WAAOE,OAAO,CAAPA,OAAAA,CAAP,KAAOA,CAAP;AAEF;;AAAA,MAAA,QAAA;AACA,MAAMC,IAAI,GAAG,IAAA,OAAA,CAAgBC,UAAAA,OAAD,EAAa;AACvCC,IAAAA,QAAQ,GAARA,OAAAA;AADF,GAAa,CAAb;AAGAJ,EAAAA,GAAG,CAAHA,GAAAA,CAAAA,GAAAA,EAAcD,KAAK,GAAG;AAAEI,IAAAA,OAAO,EAAT,QAAA;AAAsBE,IAAAA,MAAM,EAAlDL;AAAsB,GAAtBA;AACA,SAAOM,SAAS,GACZ;AACAA,EAAAA,SAAS,GAATA,IAAAA,CAAkBC,UAAAA,KAAD;AAAA,WAAYH,QAAQ,CAARA,KAAQ,CAARA,EAFjB,KAEK;AAAA,GAAjBE,CAFY,GAAhB,IAAA;AAaF;;AAAA,SAAA,WAAA,CAAA,IAAA,EAAsD;AACpD,MAAI;AACFE,IAAAA,IAAI,GAAGC,QAAQ,CAARA,aAAAA,CAAPD,MAAOC,CAAPD;AACA,WACE;AACA;AACC,OAAC,CAACE,MAAM,CAAR,oBAAA,IAAiC,CAAC,CAAED,QAAD,CAApC,YAAC,IACDD,IAAI,CAAJA,OAAAA,CAAAA,QAAAA,CAJF,UAIEA;AAJF;AAMA,GARF,CAQE,OAAA,OAAA,EAAM;AACN,WAAA,KAAA;AAEH;AAED;;AAAA,IAAMG,WAAoB,GAAGC,WAA7B,EAAA;;AAEA,SAAA,cAAA,CAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAIgB;AACd,SAAO,IAAA,OAAA,CAAY,UAAA,GAAA,EAAA,GAAA,EAAc;AAC/B,QAAIH,QAAQ,CAARA,aAAAA,0CAAJ,IAAIA,SAAJ,EAAqE;AACnE,aAAOI,GAAP,EAAA;AAGFL;;AAAAA,IAAAA,IAAI,GAAGC,QAAQ,CAARA,aAAAA,CAAPD,MAAOC,CAAPD,CAL+B,CAO/B;;AACA,QAAA,EAAA,EAAQA,IAAI,CAAJA,EAAAA,GAAAA,EAAAA;AACRA,IAAAA,IAAI,CAAJA,GAAAA;AACAA,IAAAA,IAAI,CAAJA,WAAAA,GAAoBM,OAAO,CAAPA,GAAAA,CAApBN,mBAAAA;AACAA,IAAAA,IAAI,CAAJA,MAAAA,GAAAA,GAAAA;AACAA,IAAAA,IAAI,CAAJA,OAAAA,GAAAA,GAAAA,CAZ+B,CAc/B;;AACAA,IAAAA,IAAI,CAAJA,IAAAA,GAAAA,IAAAA;AAEAC,IAAAA,QAAQ,CAARA,IAAAA,CAAAA,WAAAA,CAAAA,IAAAA;AAjBF,GAAO,CAAP;AAqBF;;AAAA,IAAMM,gBAAgB,GAAGC,MAAM,CAA/B,kBAA+B,CAA/B,C,CACA;;AACO,SAAA,cAAA,CAAA,GAAA,EAA2C;AAChD,SAAOC,MAAM,CAANA,cAAAA,CAAAA,GAAAA,EAAAA,gBAAAA,EAAP,EAAOA,CAAP;AAGK;;AAAA,SAAA,YAAA,CAAA,GAAA,EAAmC;AACxC,SAAOC,GAAG,IAAIH,gBAAgB,IAA9B,GAAA;AAGF;;AAAA,SAAA,YAAA,CAAA,GAAA,EAAA,MAAA,EAGoB;AAClB,SAAO,IAAA,OAAA,CAAY,UAAA,OAAA,EAAA,MAAA,EAAqB;AACtCI,IAAAA,MAAM,GAAGV,QAAQ,CAARA,aAAAA,CAATU,QAASV,CAATU,CADsC,CAGtC;AACA;AACA;;AACAA,IAAAA,MAAM,CAANA,MAAAA,GAAAA,OAAAA;;AACAA,IAAAA,MAAM,CAANA,OAAAA,GAAiB;AAAA,aACfC,MAAM,CAACC,cAAc,CAAC,IAAA,KAAA,kCADxBF,GACwB,EAAD,CAAf,CADS;AAAA,KAAjBA,CAPsC,CAUtC;AACA;;;AACAA,IAAAA,MAAM,CAANA,WAAAA,GAAqBL,OAAO,CAAPA,GAAAA,CAArBK,mBAAAA,CAZsC,CActC;AACA;;AACAA,IAAAA,MAAM,CAANA,GAAAA,GAAAA,GAAAA;AACAV,IAAAA,QAAQ,CAARA,IAAAA,CAAAA,WAAAA,CAAAA,MAAAA;AAjBF,GAAO,CAAP;AAqBF;;AAAA,SAAA,WAAA,CAAA,EAAA,EAAA,GAAA,EAA4D;AAC1D,SAAO,IAAA,OAAA,CAAY,UAAA,QAAA,EAAA,MAAA;AAAA,WACjB,CAAA,GAAA,oBAAA,WAAA,EAAoB;AAAA,aAAMa,UAAU,CAAC;AAAA,eAAMF,MAAM,CAAb,GAAa,CAAZ;AAAA,OAAD,EADtC,EACsC,CAAhB;AAAA,KAApB,CADiB;AAAA,GAAZ,CAAP;AAKF,C,CAAA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAAA,sBAAA,GAAgE;AACrE,MAAIG,IAAI,CAAR,gBAAA,EAA2B;AACzB,WAAOtB,OAAO,CAAPA,OAAAA,CAAgBsB,IAAI,CAA3B,gBAAOtB,CAAP;AAGF;;AAAA,MAAMuB,eAAe,GAAG,IAAA,OAAA,CAAkCrB,UAAAA,OAAD,EAAa;AACpE;AACA,QAAMsB,EAAE,GAAGF,IAAI,CAAf,mBAAA;;AACAA,IAAAA,IAAI,CAAJA,mBAAAA,GAA2B,YAAM;AAC/BpB,MAAAA,OAAO,CAACoB,IAAI,CAAZpB,gBAAO,CAAPA;AACAsB,MAAAA,EAAE,IAAIA,EAANA,EAAAA;AAFFF,KAAAA;AAHF,GAAwB,CAAxB;AAQA,SAAOtB,OAAO,CAAPA,IAAAA,CAAa,CAAA,eAAA,EAElByB,WAAW,CAAA,iBAAA,EAETL,cAAc,CAAC,IAAA,KAAA,CAJnB,sCAImB,CAAD,CAFL,CAFO,CAAbpB,CAAP;AAaF;;AAAA,SAAA,gBAAA,CAAA,WAAA,EAAA,KAAA,EAGuB;AACrB,YAA4C;AAC1C,WAAO,OAAO,CAAP,OAAA,CAAgB;AACrB0B,MAAAA,OAAO,EAAE,CACPC,WAAW,GAAXA,4BAAAA,GAEEC,SAAS,CAAC,CAAA,GAAA,sBAAA,WAAA,EAAA,KAAA,EAJO,KAIP,CAAD,CAHJ,CADY;AAMrB;AACAC,MAAAA,GAAG,EAPL;AAAuB,KAAhB,CAAP;AAUF;;AAAA,SAAOC,sBAAsB,GAAtBA,IAAAA,CAA+BC,UAAAA,QAAD,EAAc;AACjD,QAAI,EAAEC,KAAK,IAAX,QAAI,CAAJ,EAA0B;AACxB,YAAMZ,cAAc,CAAC,IAAA,KAAA,mCAArB,KAAqB,EAAD,CAApB;AAEF;;AAAA,QAAMa,QAAQ,GAAGF,QAAQ,CAARA,KAAQ,CAARA,CAAAA,GAAAA,CACdjC,UAAAA,KAAD;AAAA,aAAW6B,WAAW,GAAXA,SAAAA,GAA0BC,SAAS,CADhD,KACgD,CAA9C;AAAA,KADeG,CAAjB;AAGA,WAAO;AACLL,MAAAA,OAAO,EAAEO,QAAQ,CAARA,MAAAA,CAAiBC,UAAAA,CAAD;AAAA,eAAOA,CAAC,CAADA,QAAAA,CAD3B,KAC2BA,CAAP;AAAA,OAAhBD,CADJ;AAELJ,MAAAA,GAAG,EAAEI,QAAQ,CAARA,MAAAA,CAAiBC,UAAAA,CAAD;AAAA,eAAOA,CAAC,CAADA,QAAAA,CAF9B,MAE8BA,CAAP;AAAA,OAAhBD;AAFA,KAAP;AAPF,GAAOH,CAAP;AAcF;;AAAA,SAAA,iBAAA,CAAA,WAAA,EAA6D;AAC3D,MAAMK,WAGL,GAAG,IAHJ,GAGI,EAHJ;AAIA,MAAMC,aAA4C,GAAG,IAArD,GAAqD,EAArD;AACA,MAAMC,WAAkD,GAAG,IAA3D,GAA2D,EAA3D;AACA,MAAMC,MAGL,GAAG,IAHJ,GAGI,EAHJ;;AAKA,WAAA,kBAAA,CAAA,GAAA,EAA2D;AACzD,QAAIrC,IAAI,GAAGmC,aAAa,CAAbA,GAAAA,CAAX,GAAWA,CAAX;;AACA,QAAA,IAAA,EAAU;AACR,aAAA,IAAA;AAGF,KANyD,CAMzD;;;AACA,QAAI5B,QAAQ,CAARA,aAAAA,yBAAJ,GAAIA,SAAJ,EAAqD;AACnD,aAAOR,OAAO,CAAd,OAAOA,EAAP;AAGFoC;;AAAAA,IAAAA,aAAa,CAAbA,GAAAA,CAAAA,GAAAA,EAAwBnC,IAAI,GAAGsC,YAAY,CAA3CH,GAA2C,CAA3CA;AACA,WAAA,IAAA;AAGF;;AAAA,WAAA,eAAA,CAAA,IAAA,EAAiE;AAC/D,QAAInC,IAAI,GAAGoC,WAAW,CAAXA,GAAAA,CAAX,IAAWA,CAAX;;AACA,QAAA,IAAA,EAAU;AACR,aAAA,IAAA;AAGFA;;AAAAA,IAAAA,WAAW,CAAXA,GAAAA,CAAAA,IAAAA,EAEGpC,IAAI,GAAGuC,KAAK,CAALA,IAAK,CAALA,CAAAA,IAAAA,CACC5B,UAAAA,GAAD,EAAS;AACb,UAAI,CAACA,GAAG,CAAR,EAAA,EAAa;AACX,cAAM,IAAA,KAAA,sCAAN,IAAM,EAAN;AAEF;;AAAA,aAAOA,GAAG,CAAHA,IAAAA,GAAAA,IAAAA,CAAiB6B,UAAAA,IAAD;AAAA,eAAW;AAAEC,UAAAA,IAAI,EAAN,IAAA;AAAcC,UAAAA,OAAO,EAAvD;AAAkC,SAAX;AAAA,OAAhB/B,CAAP;AALI4B,KAAAA,WAOEvB,UAAAA,GAAD,EAAS;AACd,YAAMG,cAAc,CAApB,GAAoB,CAApB;AAVNiB,KAEUG,CAFVH;AAaA,WAAA,IAAA;AAGF;;AAAA,SAAO;AACLO,IAAAA,cADK,0BACS,KADT,EACyB;AAC5B,aAAOC,UAAU,CAAA,KAAA,EAAjB,WAAiB,CAAjB;AAFG,KAAA;AAILC,IAAAA,YAJK,wBAIO,KAJP,EAIO,OAJP,EAIwB;AAC3B9C,MAAAA,OAAO,CAAPA,OAAAA,CAAAA,OAAAA,EAAAA,IAAAA,CACS+C,UAAAA,EAAD;AAAA,eAAQA,EADhB/C,EACQ;AAAA,OADRA,EAAAA,IAAAA,CAGKgD,UAAAA,OAAD;AAAA,eAAmB;AACjBC,UAAAA,SAAS,EAAGD,OAAO,IAAIA,OAAZ,WAACA,IADK,OAAA;AAEjBA,UAAAA,OAAO,EALbhD;AAGuB,SAAnB;AAAA,OAHJA,EAOKiB,UAAAA,GAAD;AAAA,eAAU;AAAEiC,UAAAA,KAAK,EAPrBlD;AAOc,SAAV;AAAA,OAPJA,EAAAA,IAAAA,CASSmD,UAAAA,KAAD,EAA4B;AAChC,YAAMC,GAAG,GAAGjB,WAAW,CAAXA,GAAAA,CAAZ,KAAYA,CAAZ;AACAA,QAAAA,WAAW,CAAXA,GAAAA,CAAAA,KAAAA,EAAAA,KAAAA;AACA,YAAIiB,GAAG,IAAI,aAAX,GAAA,EAA6BA,GAAG,CAAHA,OAAAA,CAAAA,KAAAA;AAZjCpD,OAAAA;AALG,KAAA;AAoBLqD,IAAAA,SApBK,qBAoBI,KApBJ,EAoBY;AAAA;;AACf,aAAOR,UAAU,CAAA,KAAA,EAAA,MAAA,wEAAkC;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAEhBS,gBAAgB,CAAA,WAAA,EAA/C,KAA+C,CAFA;;AAAA;AAAA;AAEzC,gBAAA,OAFyC,yBAEzC,OAFyC;AAEzC,gBAAA,GAFyC,yBAEzC,GAFyC;AAAA;AAAA,uBAGtBtD,OAAO,CAAPA,GAAAA,CAAY,CACnCmC,WAAW,CAAXA,GAAAA,CAAAA,KAAAA,IAAAA,EAAAA,GAEInC,OAAO,CAAPA,GAAAA,CAAY0B,OAAO,CAAPA,GAAAA,CAHmB,kBAGnBA,CAAZ1B,CAH+B,EAInCA,OAAO,CAAPA,GAAAA,CAAY6B,GAAG,CAAHA,GAAAA,CAJd,eAIcA,CAAZ7B,CAJmC,CAAZA,CAHsB;;AAAA;AAAA;AAAA;AAGzC,gBAAA,MAHyC;AAAA;AAAA,uBAUtBA,OAAO,CAAPA,IAAAA,CAAa,CACpC,KAAA,CAAA,cAAA,CADoC,KACpC,CADoC,EAEpCyB,WAAW,CAAA,iBAAA,EAETL,cAAc,CACZ,IAAA,KAAA,2CALN,KAKM,EADY,CAFL,CAFyB,CAAbpB,CAVsB;;AAAA;AAUzCuD,gBAAAA,UAVyC;AAmBzC3C,gBAAAA,GAnByC,GAmBjBI,MAAM,CAANA,MAAAA,CAG5B;AAAEwC,kBAAAA,MAH0BxC,EAG1BwC;AAAF,iBAH4BxC,EAA9B,UAA8BA,CAnBiB;AAAA,iDAuBxC,WAAA,UAAA,GAAA,UAAA,GAAP,GAvB+C;;AAAA;AAAA;AAAA;AAAA,iDAyBxC;AAAEkC,kBAAAA,KAzBb;AAyBW,iBAzBwC;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAAlC,GAAjB;AArBG,KAAA;AAkDLO,IAAAA,QAlDK,oBAkDG,KAlDH,EAkDW;AAAA;;AACd;AACA;AACA,UAAA,EAAA;;AACA,UAAKC,EAAE,GAAIC,SAAD,CAAV,UAAA,EAA0C;AACxC;AACA,YAAID,EAAE,CAAFA,QAAAA,IAAe,KAAA,IAAA,CAAUA,EAAE,CAA/B,aAAmB,CAAnB,EAAgD,OAAO1D,OAAO,CAAd,OAAOA,EAAP;AAElD;;AAAA,aAAO,gBAAgB,CAAA,WAAA,EAAhB,KAAgB,CAAhB,CAAA,IAAA,CACE4D,UAAAA,MAAD;AAAA,eACJ5D,OAAO,CAAPA,GAAAA,CACEU,WAAW,GACPkD,MAAM,CAANA,OAAAA,CAAAA,GAAAA,CAAoB1C,UAAAA,MAAD;AAAA,iBAAY2C,cAAc,CAAA,MAAA,EADtC,QACsC,CAA1B;AAAA,SAAnBD,CADO,GAHV,EAEH5D,CADI;AAAA,OADD,EAAA,IAAA,CAQC,YAAM;AACV,SAAA,GAAA,oBAAA,WAAA,EAAoB;AAAA,iBAAM,MAAA,CAAA,SAAA,CAA1B,KAA0B,CAAN;AAAA,SAApB;AATG,OAAA,YAYH;AACA,kBAAM,CAbV,CAAO,CAAP;AA1DJ;AAAO,GAAP;;;eA6Ea8D,iB","sourcesContent":["import { ComponentType } from 'react'\nimport type { ClientBuildManifest } from '../build/webpack/plugins/build-manifest-plugin'\nimport getAssetPathFromRoute from '../next-server/lib/router/utils/get-asset-path-from-route'\nimport requestIdleCallback from './request-idle-callback'\n\n// 3.8s was arbitrarily chosen as it's what https://web.dev/interactive\n// considers as \"Good\" time-to-interactive. We must assume something went\n// wrong beyond this point, and then fall-back to a full page transition to\n// show the user something of value.\nconst MS_MAX_IDLE_DELAY = 3800\n\ndeclare global {\n interface Window {\n __BUILD_MANIFEST?: ClientBuildManifest\n __BUILD_MANIFEST_CB?: Function\n }\n}\n\nexport interface LoadedEntrypointSuccess {\n component: ComponentType\n exports: any\n}\nexport interface LoadedEntrypointFailure {\n error: unknown\n}\nexport type RouteEntrypoint = LoadedEntrypointSuccess | LoadedEntrypointFailure\n\nexport interface RouteStyleSheet {\n href: string\n content: string\n}\n\nexport interface LoadedRouteSuccess extends LoadedEntrypointSuccess {\n styles: RouteStyleSheet[]\n}\nexport interface LoadedRouteFailure {\n error: unknown\n}\nexport type RouteLoaderEntry = LoadedRouteSuccess | LoadedRouteFailure\n\nexport type Future<V> = {\n resolve: (entrypoint: V) => void\n future: Promise<V>\n}\nfunction withFuture<T>(\n key: string,\n map: Map<string, Future<T> | T>,\n generator?: () => Promise<T>\n): Promise<T> {\n let entry: Future<T> | T | undefined = map.get(key)\n if (entry) {\n if ('future' in entry) {\n return entry.future\n }\n return Promise.resolve(entry)\n }\n let resolver: (entrypoint: T) => void\n const prom = new Promise<T>((resolve) => {\n resolver = resolve\n })\n map.set(key, (entry = { resolve: resolver!, future: prom }))\n return generator\n ? // eslint-disable-next-line no-sequences\n generator().then((value) => (resolver(value), value))\n : prom\n}\n\nexport interface RouteLoader {\n whenEntrypoint(route: string): Promise<RouteEntrypoint>\n onEntrypoint(route: string, execute: () => unknown): void\n loadRoute(route: string): Promise<RouteLoaderEntry>\n prefetch(route: string): Promise<void>\n}\n\nfunction hasPrefetch(link?: HTMLLinkElement): boolean {\n try {\n link = document.createElement('link')\n return (\n // detect IE11 since it supports prefetch but isn't detected\n // with relList.support\n (!!window.MSInputMethodContext && !!(document as any).documentMode) ||\n link.relList.supports('prefetch')\n )\n } catch {\n return false\n }\n}\n\nconst canPrefetch: boolean = hasPrefetch()\n\nfunction prefetchViaDom(\n href: string,\n as: string,\n link?: HTMLLinkElement\n): Promise<any> {\n return new Promise((res, rej) => {\n if (document.querySelector(`link[rel=\"prefetch\"][href^=\"${href}\"]`)) {\n return res()\n }\n\n link = document.createElement('link')\n\n // The order of property assignment here is intentional:\n if (as) link!.as = as\n link!.rel = `prefetch`\n link!.crossOrigin = process.env.__NEXT_CROSS_ORIGIN!\n link!.onload = res\n link!.onerror = rej\n\n // `href` should always be last:\n link!.href = href\n\n document.head.appendChild(link)\n })\n}\n\nconst ASSET_LOAD_ERROR = Symbol('ASSET_LOAD_ERROR')\n// TODO: unexport\nexport function markAssetError(err: Error): Error {\n return Object.defineProperty(err, ASSET_LOAD_ERROR, {})\n}\n\nexport function isAssetError(err?: Error) {\n return err && ASSET_LOAD_ERROR in err\n}\n\nfunction appendScript(\n src: string,\n script?: HTMLScriptElement\n): Promise<unknown> {\n return new Promise((resolve, reject) => {\n script = document.createElement('script')\n\n // The order of property assignment here is intentional.\n // 1. Setup success/failure hooks in case the browser synchronously\n // executes when `src` is set.\n script.onload = resolve\n script.onerror = () =>\n reject(markAssetError(new Error(`Failed to load script: ${src}`)))\n\n // 2. Configure the cross-origin attribute before setting `src` in case the\n // browser begins to fetch.\n script.crossOrigin = process.env.__NEXT_CROSS_ORIGIN!\n\n // 3. Finally, set the source and inject into the DOM in case the child\n // must be appended for fetching to start.\n script.src = src\n document.body.appendChild(script)\n })\n}\n\nfunction idleTimeout<T>(ms: number, err: Error): Promise<T> {\n return new Promise((_resolve, reject) =>\n requestIdleCallback(() => setTimeout(() => reject(err), ms))\n )\n}\n\n// TODO: stop exporting or cache the failure\n// It'd be best to stop exporting this. It's an implementation detail. We're\n// only exporting it for backwards compatibilty with the `page-loader`.\n// Only cache this response as a last resort if we cannot eliminate all other\n// code branches that use the Build Manifest Callback and push them through\n// the Route Loader interface.\nexport function getClientBuildManifest(): Promise<ClientBuildManifest> {\n if (self.__BUILD_MANIFEST) {\n return Promise.resolve(self.__BUILD_MANIFEST)\n }\n\n const onBuildManifest = new Promise<ClientBuildManifest>((resolve) => {\n // Mandatory because this is not concurrent safe:\n const cb = self.__BUILD_MANIFEST_CB\n self.__BUILD_MANIFEST_CB = () => {\n resolve(self.__BUILD_MANIFEST)\n cb && cb()\n }\n })\n return Promise.race([\n onBuildManifest,\n idleTimeout<ClientBuildManifest>(\n MS_MAX_IDLE_DELAY,\n markAssetError(new Error('Failed to load client build manifest'))\n ),\n ])\n}\n\ninterface RouteFiles {\n scripts: string[]\n css: string[]\n}\nfunction getFilesForRoute(\n assetPrefix: string,\n route: string\n): Promise<RouteFiles> {\n if (process.env.NODE_ENV === 'development') {\n return Promise.resolve({\n scripts: [\n assetPrefix +\n '/_next/static/chunks/pages' +\n encodeURI(getAssetPathFromRoute(route, '.js')),\n ],\n // Styles are handled by `style-loader` in development:\n css: [],\n })\n }\n return getClientBuildManifest().then((manifest) => {\n if (!(route in manifest)) {\n throw markAssetError(new Error(`Failed to lookup route: ${route}`))\n }\n const allFiles = manifest[route].map(\n (entry) => assetPrefix + '/_next/' + encodeURI(entry)\n )\n return {\n scripts: allFiles.filter((v) => v.endsWith('.js')),\n css: allFiles.filter((v) => v.endsWith('.css')),\n }\n })\n}\n\nfunction createRouteLoader(assetPrefix: string): RouteLoader {\n const entrypoints: Map<\n string,\n Future<RouteEntrypoint> | RouteEntrypoint\n > = new Map()\n const loadedScripts: Map<string, Promise<unknown>> = new Map()\n const styleSheets: Map<string, Promise<RouteStyleSheet>> = new Map()\n const routes: Map<\n string,\n Future<RouteLoaderEntry> | RouteLoaderEntry\n > = new Map()\n\n function maybeExecuteScript(src: string): Promise<unknown> {\n let prom = loadedScripts.get(src)\n if (prom) {\n return prom\n }\n\n // Skip executing script if it's already in the DOM:\n if (document.querySelector(`script[src^=\"${src}\"]`)) {\n return Promise.resolve()\n }\n\n loadedScripts.set(src, (prom = appendScript(src)))\n return prom\n }\n\n function fetchStyleSheet(href: string): Promise<RouteStyleSheet> {\n let prom = styleSheets.get(href)\n if (prom) {\n return prom\n }\n\n styleSheets.set(\n href,\n (prom = fetch(href)\n .then((res) => {\n if (!res.ok) {\n throw new Error(`Failed to load stylesheet: ${href}`)\n }\n return res.text().then((text) => ({ href: href, content: text }))\n })\n .catch((err) => {\n throw markAssetError(err)\n }))\n )\n return prom\n }\n\n return {\n whenEntrypoint(route: string) {\n return withFuture(route, entrypoints)\n },\n onEntrypoint(route, execute) {\n Promise.resolve(execute)\n .then((fn) => fn())\n .then(\n (exports: any) => ({\n component: (exports && exports.default) || exports,\n exports: exports,\n }),\n (err) => ({ error: err })\n )\n .then((input: RouteEntrypoint) => {\n const old = entrypoints.get(route)\n entrypoints.set(route, input)\n if (old && 'resolve' in old) old.resolve(input)\n })\n },\n loadRoute(route) {\n return withFuture<RouteLoaderEntry>(route, routes, async () => {\n try {\n const { scripts, css } = await getFilesForRoute(assetPrefix, route)\n const [, styles] = await Promise.all([\n entrypoints.has(route)\n ? []\n : Promise.all(scripts.map(maybeExecuteScript)),\n Promise.all(css.map(fetchStyleSheet)),\n ] as const)\n\n const entrypoint = await Promise.race([\n this.whenEntrypoint(route),\n idleTimeout<RouteLoaderEntry>(\n MS_MAX_IDLE_DELAY,\n markAssetError(\n new Error(`Route did not complete loading: ${route}`)\n )\n ),\n ])\n const res: RouteLoaderEntry = Object.assign<\n { styles: RouteStyleSheet[] },\n RouteEntrypoint\n >({ styles }, entrypoint)\n return 'error' in entrypoint ? entrypoint : res\n } catch (err) {\n return { error: err }\n }\n })\n },\n prefetch(route) {\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 as any).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 return getFilesForRoute(assetPrefix, route)\n .then((output) =>\n Promise.all(\n canPrefetch\n ? output.scripts.map((script) => prefetchViaDom(script, 'script'))\n : []\n )\n )\n .then(() => {\n requestIdleCallback(() => this.loadRoute(route))\n })\n .catch(\n // swallow prefetch errors\n () => {}\n )\n },\n }\n}\n\nexport default createRouteLoader\n"]},"metadata":{},"sourceType":"script"}