including-modules
This commit is contained in:
+70
@@ -0,0 +1,70 @@
|
||||
'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
|
||||
Reference in New Issue
Block a user