UNPKG

next

Version:

The React Framework

58 lines (57 loc) 2.36 kB
'use client'; import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime"; import { preload } from 'react-dom'; import { workAsyncStorage } from '../../../server/app-render/work-async-storage.external'; import { encodeURIPath } from '../encode-uri-path'; export function PreloadChunks(param) { let { moduleIds } = param; // Early return in client compilation and only load requestStore on server side if (typeof window !== 'undefined') { return null; } const workStore = workAsyncStorage.getStore(); if (workStore === undefined) { return null; } const allFiles = []; // Search the current dynamic call unique key id in react loadable manifest, // and find the corresponding CSS files to preload if (workStore.reactLoadableManifest && moduleIds) { const manifest = workStore.reactLoadableManifest; for (const key of moduleIds){ if (!manifest[key]) continue; const chunks = manifest[key].files; allFiles.push(...chunks); } } if (allFiles.length === 0) { return null; } const dplId = process.env.NEXT_DEPLOYMENT_ID ? "?dpl=" + process.env.NEXT_DEPLOYMENT_ID : ''; return /*#__PURE__*/ _jsx(_Fragment, { children: allFiles.map((chunk)=>{ const href = workStore.assetPrefix + "/_next/" + encodeURIPath(chunk) + dplId; const isCss = chunk.endsWith('.css'); // If it's stylesheet we use `precedence` o help hoist with React Float. // For stylesheets we actually need to render the CSS because nothing else is going to do it so it needs to be part of the component tree. // The `preload` for stylesheet is not optional. if (isCss) { return /*#__PURE__*/ _jsx("link", { // @ts-ignore precedence: "dynamic", href: href, rel: "stylesheet", as: "style" }, chunk); } else { // If it's script we use ReactDOM.preload to preload the resources preload(href, { as: 'script', fetchPriority: 'low' }); return null; } }) }); } //# sourceMappingURL=preload-chunks.js.map