UNPKG

vike

Version:

The Framework *You* Control - Next.js & Nuxt alternative for unprecedented flexibility and dependability.

77 lines (76 loc) 4.29 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getPageAssets = getPageAssets; exports.setResolveClientEntriesDev = setResolveClientEntriesDev; exports.resolveIncludeAssetsImportedByServer = resolveIncludeAssetsImportedByServer; const utils_js_1 = require("../utils.js"); const retrieveAssetsDev_js_1 = require("./getPageAssets/retrieveAssetsDev.js"); const retrieveAssetsProd_js_1 = require("./getPageAssets/retrieveAssetsProd.js"); const inferMediaType_js_1 = require("./inferMediaType.js"); const getManifestEntry_js_1 = require("./getPageAssets/getManifestEntry.js"); const sortPageAssetsForEarlyHintsHeader_js_1 = require("./getPageAssets/sortPageAssetsForEarlyHintsHeader.js"); const globalObject = (0, utils_js_1.getGlobalObject)('renderPage/getPageAssets.ts', { resolveClientEntriesDev: null, }); async function getPageAssets(pageContext, clientDependencies, clientEntries) { const globalContext = pageContext._globalContext; const { _isProduction: isProduction } = globalContext; const isDev = !isProduction; let assetUrls; let clientEntriesSrc; if (isDev) { const { _viteDevServer: viteDevServer } = globalContext; clientEntriesSrc = clientEntries.map((clientEntry) => globalObject.resolveClientEntriesDev(clientEntry, viteDevServer)); assetUrls = await (0, retrieveAssetsDev_js_1.retrieveAssetsDev)(clientDependencies, viteDevServer); } else { const { assetsManifest } = globalContext; clientEntriesSrc = clientEntries.map((clientEntry) => resolveClientEntriesProd(clientEntry, assetsManifest)); assetUrls = (0, retrieveAssetsProd_js_1.retrieveAssetsProd)(clientDependencies, assetsManifest, resolveIncludeAssetsImportedByServer(pageContext._globalContext.config)); } let pageAssets = []; (0, utils_js_1.unique)([...clientEntriesSrc, ...assetUrls]).forEach((src) => { const { mediaType = null, assetType = null } = (0, inferMediaType_js_1.inferMediaType)(src) || {}; if (isDev && assetType === 'style') { // https://github.com/vikejs/vike/issues/449 if (src.endsWith('?inline')) { return; } // https://github.com/vikejs/vike/issues/401 // WARNING: if changing following line, then also update https://github.com/vikejs/vike/blob/fae90a15d88e5e87ca9fcbb54cf2dc8773d2f229/vike/client/shared/removeFoucBuster.ts#L28 src = src + '?direct'; } const isEntry = clientEntriesSrc.includes(src) || // Vite automatically injects CSS, not only in development, but also in production (albeit with a FOUC). Therefore, strictly speaking, CSS aren't entries. We still, however, set `isEntry: true` for CSS, in order to denote page assets that should absolutely be injected in the HTML, regardless of preload strategy (not injecting CSS leads to FOUC). assetType === 'style'; pageAssets.push({ src, assetType, mediaType, isEntry, }); }); pageAssets.forEach(({ src }) => { (0, utils_js_1.assert)(1 === pageAssets.filter((p) => p.src === src).length); }); pageAssets = pageAssets.map((pageAsset) => { const baseServerAssets = pageContext._baseAssets || pageContext._baseServer; pageAsset.src = (0, utils_js_1.prependBase)((0, utils_js_1.toPosixPath)(pageAsset.src), baseServerAssets); return pageAsset; }); await (0, sortPageAssetsForEarlyHintsHeader_js_1.sortPageAssetsForEarlyHintsHeader)(pageAssets, isProduction); return pageAssets; } function resolveClientEntriesProd(clientEntry, assetsManifest) { const { manifestEntry } = (0, getManifestEntry_js_1.getManifestEntry)(clientEntry, assetsManifest); (0, utils_js_1.assert)(manifestEntry.isEntry || manifestEntry.isDynamicEntry || clientEntry.endsWith('.css'), { clientEntry }); let { file } = manifestEntry; (0, utils_js_1.assert)(!file.startsWith('/')); return '/' + file; } function setResolveClientEntriesDev(resolveClientEntriesDev) { globalObject.resolveClientEntriesDev = resolveClientEntriesDev; } function resolveIncludeAssetsImportedByServer(config) { return config.includeAssetsImportedByServer ?? true; }