{"version":3,"sources":["../../src/client/page-loader.ts"],"sourcesContent":["import type { ComponentType } from 'react'\nimport type { RouteLoader } from './route-loader'\nimport type { ProxyMatcher } from '../build/analysis/get-page-static-info'\nimport { addBasePath } from './add-base-path'\nimport { interpolateAs } from '../shared/lib/router/utils/interpolate-as'\nimport getAssetPathFromRoute from '../shared/lib/router/utils/get-asset-path-from-route'\nimport { addLocale } from './add-locale'\nimport { isDynamicRoute } from '../shared/lib/router/utils/is-dynamic'\nimport { parseRelativeUrl } from '../shared/lib/router/utils/parse-relative-url'\nimport { removeTrailingSlash } from '../shared/lib/router/utils/remove-trailing-slash'\nimport { createRouteLoader, getClientBuildManifest } from './route-loader'\nimport {\n DEV_CLIENT_PAGES_MANIFEST,\n DEV_CLIENT_MIDDLEWARE_MANIFEST,\n TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST,\n} from '../shared/lib/constants'\n\ndeclare global {\n interface Window {\n __DEV_MIDDLEWARE_MATCHERS?: ProxyMatcher[]\n __DEV_PAGES_MANIFEST?: { pages: string[] }\n __SSG_MANIFEST_CB?: () => void\n __SSG_MANIFEST?: Set\n }\n}\n\nexport type StyleSheetTuple = { href: string; text: string }\nexport type GoodPageCache = {\n page: ComponentType\n mod: any\n styleSheets: StyleSheetTuple[]\n}\n\nexport default class PageLoader {\n private buildId: string\n private assetPrefix: string\n private promisedSsgManifest: Promise>\n private promisedDevPagesManifest?: Promise\n private promisedMiddlewareMatchers?: Promise\n\n public routeLoader: RouteLoader\n\n constructor(buildId: string, assetPrefix: string) {\n this.routeLoader = createRouteLoader(assetPrefix)\n\n this.buildId = buildId\n this.assetPrefix = assetPrefix\n\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 getPageList() {\n if (process.env.NODE_ENV === 'production') {\n return getClientBuildManifest().then((manifest) => manifest.sortedPages)\n } else {\n if (window.__DEV_PAGES_MANIFEST) {\n return window.__DEV_PAGES_MANIFEST.pages\n } else {\n this.promisedDevPagesManifest ||= fetch(\n `${this.assetPrefix}/_next/static/development/${DEV_CLIENT_PAGES_MANIFEST}`,\n { credentials: 'same-origin' }\n )\n .then((res) => res.json())\n .then((manifest: { pages: string[] }) => {\n window.__DEV_PAGES_MANIFEST = manifest\n return manifest.pages\n })\n .catch((err) => {\n console.log(`Failed to fetch devPagesManifest:`, err)\n throw new Error(\n `Failed to fetch _devPagesManifest.json. Is something blocking that network request?\\n` +\n 'Read more: https://nextjs.org/docs/messages/failed-to-fetch-devpagesmanifest'\n )\n })\n return this.promisedDevPagesManifest\n }\n }\n }\n\n getMiddleware() {\n // Webpack production\n if (\n process.env.NODE_ENV === 'production' &&\n process.env.__NEXT_MIDDLEWARE_MATCHERS\n ) {\n const middlewareMatchers = process.env.__NEXT_MIDDLEWARE_MATCHERS\n window.__MIDDLEWARE_MATCHERS = middlewareMatchers\n ? (middlewareMatchers as any as ProxyMatcher[])\n : undefined\n return window.__MIDDLEWARE_MATCHERS\n // Turbopack production\n } else if (process.env.NODE_ENV === 'production') {\n if (window.__MIDDLEWARE_MATCHERS) {\n return window.__MIDDLEWARE_MATCHERS\n } else {\n if (!this.promisedMiddlewareMatchers) {\n // TODO: Decide what should happen when fetching fails instead of asserting\n // @ts-ignore\n this.promisedMiddlewareMatchers = fetch(\n `${this.assetPrefix}/_next/static/${this.buildId}/${TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST}`,\n { credentials: 'same-origin' }\n )\n .then((res) => res.json())\n .then((matchers: ProxyMatcher[]) => {\n window.__MIDDLEWARE_MATCHERS = matchers\n return matchers\n })\n .catch((err) => {\n console.log(`Failed to fetch _devMiddlewareManifest`, err)\n })\n }\n // TODO Remove this assertion as this could be undefined\n return this.promisedMiddlewareMatchers!\n }\n // Development both Turbopack and Webpack\n } else {\n if (window.__DEV_MIDDLEWARE_MATCHERS) {\n return window.__DEV_MIDDLEWARE_MATCHERS\n } else {\n if (!this.promisedMiddlewareMatchers) {\n // TODO: Decide what should happen when fetching fails instead of asserting\n // @ts-ignore\n this.promisedMiddlewareMatchers = fetch(\n `${this.assetPrefix}/_next/static/${this.buildId}/${DEV_CLIENT_MIDDLEWARE_MANIFEST}`,\n { credentials: 'same-origin' }\n )\n .then((res) => res.json())\n .then((matchers: ProxyMatcher[]) => {\n window.__DEV_MIDDLEWARE_MATCHERS = matchers\n return matchers\n })\n .catch((err) => {\n console.log(`Failed to fetch _devMiddlewareManifest`, err)\n })\n }\n // TODO Remove this assertion as this could be undefined\n return this.promisedMiddlewareMatchers!\n }\n }\n }\n\n getDataHref(params: {\n asPath: string\n href: string\n locale?: string | false\n skipInterpolation?: boolean\n }): string {\n const { asPath, href, locale } = params\n const { pathname: hrefPathname, query, search } = parseRelativeUrl(href)\n const { pathname: asPathname } = parseRelativeUrl(asPath)\n const route = removeTrailingSlash(hrefPathname)\n if (route[0] !== '/') {\n throw new Error(`Route name should start with a \"/\", got \"${route}\"`)\n }\n\n const getHrefForSlug = (path: string) => {\n const dataRoute = getAssetPathFromRoute(\n removeTrailingSlash(addLocale(path, locale)),\n '.json'\n )\n return addBasePath(\n `/_next/data/${this.buildId}${dataRoute}${search}`,\n true\n )\n }\n\n return getHrefForSlug(\n params.skipInterpolation\n ? asPathname\n : isDynamicRoute(route)\n ? interpolateAs(hrefPathname, asPathname, query).result\n : route\n )\n }\n\n _isSsg(\n /** the route (file-system path) */\n route: string\n ): Promise {\n return this.promisedSsgManifest.then((manifest) => manifest.has(route))\n }\n\n loadPage(route: string): Promise {\n return this.routeLoader.loadRoute(route).then((res) => {\n if ('component' in res) {\n return {\n page: res.component,\n mod: res.exports,\n styleSheets: res.styles.map((o) => ({\n href: o.href,\n text: o.content,\n })),\n }\n }\n throw res.error\n })\n }\n\n prefetch(route: string): Promise {\n return this.routeLoader.prefetch(route)\n }\n}\n"],"names":["addBasePath","interpolateAs","getAssetPathFromRoute","addLocale","isDynamicRoute","parseRelativeUrl","removeTrailingSlash","createRouteLoader","getClientBuildManifest","DEV_CLIENT_PAGES_MANIFEST","DEV_CLIENT_MIDDLEWARE_MANIFEST","TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST","PageLoader","constructor","buildId","assetPrefix","routeLoader","promisedSsgManifest","Promise","resolve","window","__SSG_MANIFEST","__SSG_MANIFEST_CB","getPageList","process","env","NODE_ENV","then","manifest","sortedPages","__DEV_PAGES_MANIFEST","pages","promisedDevPagesManifest","fetch","credentials","res","json","catch","err","console","log","Error","getMiddleware","__NEXT_MIDDLEWARE_MATCHERS","middlewareMatchers","__MIDDLEWARE_MATCHERS","undefined","promisedMiddlewareMatchers","matchers","__DEV_MIDDLEWARE_MATCHERS","getDataHref","params","asPath","href","locale","pathname","hrefPathname","query","search","asPathname","route","getHrefForSlug","path","dataRoute","skipInterpolation","result","_isSsg","has","loadPage","loadRoute","page","component","mod","exports","styleSheets","styles","map","o","text","content","error","prefetch"],"mappings":"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","ignoreList":[0]}