UNPKG

next

Version:

The React Framework

70 lines (69 loc) 2.76 kB
'use client'; "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "PreloadChunks", { enumerable: true, get: function() { return PreloadChunks; } }); const _jsxruntime = require("react/jsx-runtime"); const _reactdom = require("react-dom"); const _workasyncstorageexternal = require("../../../server/app-render/work-async-storage.external"); const _encodeuripath = require("../encode-uri-path"); const _deploymentid = require("../deployment-id"); function PreloadChunks({ moduleIds }) { // Early return in client compilation and only load requestStore on server side if (typeof window !== 'undefined') { return null; } const workStore = _workasyncstorageexternal.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 = (0, _deploymentid.getDeploymentIdQueryOrEmptyString)(); return /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, { children: allFiles.map((chunk)=>{ const href = `${workStore.assetPrefix}/_next/${(0, _encodeuripath.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__*/ (0, _jsxruntime.jsx)("link", { // @ts-ignore precedence: "dynamic", href: href, rel: "stylesheet", as: "style", nonce: workStore.nonce }, chunk); } else { // If it's script we use ReactDOM.preload to preload the resources (0, _reactdom.preload)(href, { as: 'script', fetchPriority: 'low', nonce: workStore.nonce }); return null; } }) }); } //# sourceMappingURL=preload-chunks.js.map