vike
Version:
The Framework *You* Control - Next.js & Nuxt alternative for unprecedented flexibility and dependability.
60 lines (59 loc) • 3.23 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.analyzePageClientSide = analyzePageClientSide;
exports.analyzePageClientSideInit = analyzePageClientSideInit;
const analyzeExports_js_1 = require("./analyzePageClientSide/analyzeExports.js");
const determineClientEntry_js_1 = require("./analyzePageClientSide/determineClientEntry.js");
const getAllPageIdFiles_js_1 = require("./getAllPageIdFiles.js");
const getAllPageIdFiles_js_2 = require("./getAllPageIdFiles.js");
const utils_js_1 = require("../utils.js");
const getExportNames_js_1 = require("./analyzePageClientSide/getExportNames.js");
// TODO/v1-release: remove analyzePageClientSide(), use analyzeClientSide() instead
function analyzePageClientSide(pageFilesAll, pageId) {
let pageFilesClientSide = (0, getAllPageIdFiles_js_1.getPageFilesClientSide)(pageFilesAll, pageId);
const pageFilesServerSide = (0, getAllPageIdFiles_js_2.getPageFilesServerSide)(pageFilesAll, pageId);
const { isHtmlOnly, isClientRouting } = (0, analyzeExports_js_1.analyzeExports)({ pageFilesClientSide, pageFilesServerSide, pageId });
if (isHtmlOnly) {
// HTML-only pages don't need any client-side `render()` hook. For apps that have both HTML-only and SSR/SPA pages, we skip the `.page.client.js` file that defines `render()` for HTML-only pages.
pageFilesClientSide = pageFilesClientSide.filter((p) => p.isEnv('CLIENT_ONLY') && !(0, getExportNames_js_1.getExportNames)(p).includes('render'));
pageFilesClientSide = removeOverriddenPageFiles(pageFilesClientSide);
}
const { clientEntries, clientDependencies } = (0, determineClientEntry_js_1.determineClientEntry)({
pageFilesClientSide,
pageFilesServerSide,
isHtmlOnly,
isClientRouting,
});
return { isHtmlOnly, isClientRouting, clientEntries, clientDependencies, pageFilesClientSide, pageFilesServerSide };
}
// TODO:v1-release: remove
async function analyzePageClientSideInit(pageFilesAll, pageId, { sharedPageFilesAlreadyLoaded }) {
const pageFilesClientSide = (0, getAllPageIdFiles_js_1.getPageFilesClientSide)(pageFilesAll, pageId);
await Promise.all(pageFilesClientSide.map(async (p) => {
(0, utils_js_1.assert)(p.isEnv('CLIENT_ONLY') || p.isEnv('CLIENT_AND_SERVER'));
if (sharedPageFilesAlreadyLoaded && p.isEnv('CLIENT_AND_SERVER')) {
return;
}
await p.loadExportNames?.();
/*
if (pageFile.exportNames) {
return pageFile.exportNames.includes(clientRouting)
}
if (pageFile.fileExports) {
return Object.keys(pageFile.fileExports).includes(clientRouting)
}
*/
}));
}
// [WIP] Just an experiment needed by https://vike.dev/banner
// - Not sure I want to make something like a public API: the CSS of `_default.page.server.js` are still loaded -> weird DX.
function removeOverriddenPageFiles(pageFilesClientSide) {
const pageFilesClientSide_ = [];
for (const p of pageFilesClientSide) {
pageFilesClientSide_.push(p);
if ((0, getExportNames_js_1.getExportNames)(p).includes('overrideDefaultPages')) {
break;
}
}
return pageFilesClientSide_;
}