page-loader.js 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = void 0;
  6. var _interop_require_default = require("@swc/helpers/lib/_interop_require_default.js").default;
  7. var _addBasePath = require("./add-base-path");
  8. var _router = require("../shared/lib/router/router");
  9. var _getAssetPathFromRoute = _interop_require_default(require("../shared/lib/router/utils/get-asset-path-from-route"));
  10. var _addLocale = require("./add-locale");
  11. var _isDynamic = require("../shared/lib/router/utils/is-dynamic");
  12. var _parseRelativeUrl = require("../shared/lib/router/utils/parse-relative-url");
  13. var _removeTrailingSlash = require("../shared/lib/router/utils/remove-trailing-slash");
  14. var _routeLoader = require("./route-loader");
  15. class PageLoader {
  16. getPageList() {
  17. if (process.env.NODE_ENV === 'production') {
  18. return (0, _routeLoader).getClientBuildManifest().then((manifest)=>manifest.sortedPages);
  19. } else {
  20. if (window.__DEV_PAGES_MANIFEST) {
  21. return window.__DEV_PAGES_MANIFEST.pages;
  22. } else {
  23. this.promisedDevPagesManifest || (this.promisedDevPagesManifest = fetch(`${this.assetPrefix}/_next/static/development/_devPagesManifest.json`).then((res)=>res.json()).then((manifest)=>{
  24. window.__DEV_PAGES_MANIFEST = manifest;
  25. return manifest.pages;
  26. }).catch((err)=>{
  27. console.log(`Failed to fetch devPagesManifest:`, err);
  28. throw new Error(`Failed to fetch _devPagesManifest.json. Is something blocking that network request?\n` + 'Read more: https://nextjs.org/docs/messages/failed-to-fetch-devpagesmanifest');
  29. }));
  30. return this.promisedDevPagesManifest;
  31. }
  32. }
  33. }
  34. getMiddleware() {
  35. if (process.env.NODE_ENV === 'production') {
  36. const middlewareMatchers = process.env.__NEXT_MIDDLEWARE_MATCHERS;
  37. window.__MIDDLEWARE_MATCHERS = middlewareMatchers ? middlewareMatchers : undefined;
  38. return window.__MIDDLEWARE_MATCHERS;
  39. } else {
  40. if (window.__DEV_MIDDLEWARE_MATCHERS) {
  41. return window.__DEV_MIDDLEWARE_MATCHERS;
  42. } else {
  43. if (!this.promisedMiddlewareMatchers) {
  44. // TODO: Decide what should happen when fetching fails instead of asserting
  45. // @ts-ignore
  46. this.promisedMiddlewareMatchers = fetch(`${this.assetPrefix}/_next/static/${this.buildId}/_devMiddlewareManifest.json`).then((res)=>res.json()).then((matchers)=>{
  47. window.__DEV_MIDDLEWARE_MATCHERS = matchers;
  48. return matchers;
  49. }).catch((err)=>{
  50. console.log(`Failed to fetch _devMiddlewareManifest`, err);
  51. });
  52. }
  53. // TODO Remove this assertion as this could be undefined
  54. return this.promisedMiddlewareMatchers;
  55. }
  56. }
  57. }
  58. getDataHref(params) {
  59. const { asPath , href , locale } = params;
  60. const { pathname: hrefPathname , query , search } = (0, _parseRelativeUrl).parseRelativeUrl(href);
  61. const { pathname: asPathname } = (0, _parseRelativeUrl).parseRelativeUrl(asPath);
  62. const route = (0, _removeTrailingSlash).removeTrailingSlash(hrefPathname);
  63. if (route[0] !== '/') {
  64. throw new Error(`Route name should start with a "/", got "${route}"`);
  65. }
  66. const getHrefForSlug = (path)=>{
  67. const dataRoute = (0, _getAssetPathFromRoute).default((0, _removeTrailingSlash).removeTrailingSlash((0, _addLocale).addLocale(path, locale)), '.json');
  68. return (0, _addBasePath).addBasePath(`/_next/data/${this.buildId}${dataRoute}${search}`, true);
  69. };
  70. return getHrefForSlug(params.skipInterpolation ? asPathname : (0, _isDynamic).isDynamicRoute(route) ? (0, _router).interpolateAs(hrefPathname, asPathname, query).result : route);
  71. }
  72. /**
  73. * @param {string} route - the route (file-system path)
  74. */ _isSsg(route) {
  75. return this.promisedSsgManifest.then((manifest)=>manifest.has(route));
  76. }
  77. loadPage(route) {
  78. return this.routeLoader.loadRoute(route).then((res)=>{
  79. if ('component' in res) {
  80. return {
  81. page: res.component,
  82. mod: res.exports,
  83. styleSheets: res.styles.map((o)=>({
  84. href: o.href,
  85. text: o.content
  86. }))
  87. };
  88. }
  89. throw res.error;
  90. });
  91. }
  92. prefetch(route) {
  93. return this.routeLoader.prefetch(route);
  94. }
  95. constructor(buildId, assetPrefix){
  96. this.routeLoader = (0, _routeLoader).createRouteLoader(assetPrefix);
  97. this.buildId = buildId;
  98. this.assetPrefix = assetPrefix;
  99. this.promisedSsgManifest = new Promise((resolve)=>{
  100. if (window.__SSG_MANIFEST) {
  101. resolve(window.__SSG_MANIFEST);
  102. } else {
  103. window.__SSG_MANIFEST_CB = ()=>{
  104. resolve(window.__SSG_MANIFEST);
  105. };
  106. }
  107. });
  108. }
  109. }
  110. exports.default = PageLoader;
  111. if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {
  112. Object.defineProperty(exports.default, '__esModule', { value: true });
  113. Object.assign(exports.default, exports);
  114. module.exports = exports.default;
  115. }
  116. //# sourceMappingURL=page-loader.js.map