vike
Version:
The Framework *You* Control - Next.js & Nuxt alternative for unprecedented flexibility and dependability.
101 lines (100 loc) • 5.98 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseVirtualFileExports = parseVirtualFileExports;
// TODO/v1-release: remove old design code, and remove all assertions.
const utils_js_1 = require("../utils.js");
const assert_exports_old_design_js_1 = require("./assert_exports_old_design.js");
const getPageFileObject_js_1 = require("./getPageFileObject.js");
const fileTypes_js_1 = require("./fileTypes.js");
const parsePageConfigs_js_1 = require("../page-configs/serialize/parsePageConfigs.js");
function parseVirtualFileExports(virtualFileExports) {
(0, utils_js_1.assert)((0, utils_js_1.hasProp)(virtualFileExports, 'pageFilesLazy', 'object'));
(0, utils_js_1.assert)((0, utils_js_1.hasProp)(virtualFileExports, 'pageFilesEager', 'object'));
(0, utils_js_1.assert)((0, utils_js_1.hasProp)(virtualFileExports, 'pageFilesExportNamesLazy', 'object'));
(0, utils_js_1.assert)((0, utils_js_1.hasProp)(virtualFileExports, 'pageFilesExportNamesEager', 'object'));
(0, utils_js_1.assert)((0, utils_js_1.hasProp)(virtualFileExports.pageFilesLazy, '.page'));
(0, utils_js_1.assert)((0, utils_js_1.hasProp)(virtualFileExports.pageFilesLazy, '.page.client') ||
(0, utils_js_1.hasProp)(virtualFileExports.pageFilesLazy, '.page.server'));
(0, utils_js_1.assert)((0, utils_js_1.hasProp)(virtualFileExports, 'pageFilesList', 'string[]'));
(0, utils_js_1.assert)((0, utils_js_1.hasProp)(virtualFileExports, 'pageConfigsSerialized'));
(0, utils_js_1.assert)((0, utils_js_1.hasProp)(virtualFileExports, 'pageConfigGlobalSerialized'));
const { pageConfigsSerialized, pageConfigGlobalSerialized } = virtualFileExports;
assertPageConfigsSerialized(pageConfigsSerialized);
assertPageConfigGlobalSerialized(pageConfigGlobalSerialized);
const { pageConfigs, pageConfigGlobal } = (0, parsePageConfigs_js_1.parsePageConfigs)(pageConfigsSerialized, pageConfigGlobalSerialized);
const pageFilesMap = {};
parseGlobResult(virtualFileExports.pageFilesLazy).forEach(({ filePath, pageFile, globValue }) => {
pageFile = pageFilesMap[filePath] = pageFilesMap[filePath] ?? pageFile;
const loadModule = globValue;
assertLoadModule(loadModule);
pageFile.loadFile = async () => {
if (!('fileExports' in pageFile)) {
pageFile.fileExports = await loadModule();
(0, assert_exports_old_design_js_1.assertExportValues)(pageFile);
}
};
});
parseGlobResult(virtualFileExports.pageFilesExportNamesLazy).forEach(({ filePath, pageFile, globValue }) => {
pageFile = pageFilesMap[filePath] = pageFilesMap[filePath] ?? pageFile;
const loadModule = globValue;
assertLoadModule(loadModule);
pageFile.loadExportNames = async () => {
if (!('exportNames' in pageFile)) {
const moduleExports = await loadModule();
(0, utils_js_1.assert)((0, utils_js_1.hasProp)(moduleExports, 'exportNames', 'string[]'), pageFile.filePath);
pageFile.exportNames = moduleExports.exportNames;
}
};
});
// `pageFilesEager` contains `.page.route.js` files
parseGlobResult(virtualFileExports.pageFilesEager).forEach(({ filePath, pageFile, globValue }) => {
pageFile = pageFilesMap[filePath] = pageFilesMap[filePath] ?? pageFile;
const moduleExports = globValue;
(0, utils_js_1.assert)((0, utils_js_1.isObject)(moduleExports));
pageFile.fileExports = moduleExports;
});
parseGlobResult(virtualFileExports.pageFilesExportNamesEager).forEach(({ filePath, pageFile, globValue }) => {
pageFile = pageFilesMap[filePath] = pageFilesMap[filePath] ?? pageFile;
const moduleExports = globValue;
(0, utils_js_1.assert)((0, utils_js_1.isObject)(moduleExports));
(0, utils_js_1.assert)((0, utils_js_1.hasProp)(moduleExports, 'exportNames', 'string[]'), pageFile.filePath);
pageFile.exportNames = moduleExports.exportNames;
});
virtualFileExports.pageFilesList.forEach((filePath) => {
pageFilesMap[filePath] = pageFilesMap[filePath] ?? (0, getPageFileObject_js_1.getPageFileObject)(filePath);
});
const pageFilesAll = Object.values(pageFilesMap);
pageFilesAll.forEach(({ filePath }) => {
(0, utils_js_1.assert)(!filePath.includes('\\'));
});
return { pageFilesAll, pageConfigs, pageConfigGlobal };
}
function parseGlobResult(globObject) {
const ret = [];
Object.entries(globObject).forEach(([fileType, globFiles]) => {
(0, utils_js_1.cast)(fileType);
(0, utils_js_1.assert)(fileTypes_js_1.fileTypes.includes(fileType));
(0, utils_js_1.assert)((0, utils_js_1.isObject)(globFiles));
Object.entries(globFiles).forEach(([filePath, globValue]) => {
const pageFile = (0, getPageFileObject_js_1.getPageFileObject)(filePath);
(0, utils_js_1.assert)(pageFile.fileType === fileType);
ret.push({ filePath, pageFile, globValue });
});
});
return ret;
}
function assertLoadModule(globValue) {
(0, utils_js_1.assert)((0, utils_js_1.isCallable)(globValue));
}
function assertPageConfigsSerialized(pageConfigsSerialized) {
(0, utils_js_1.assert)((0, utils_js_1.isArray)(pageConfigsSerialized));
pageConfigsSerialized.forEach((pageConfigSerialized) => {
(0, utils_js_1.assert)((0, utils_js_1.isObject)(pageConfigSerialized));
(0, utils_js_1.assert)((0, utils_js_1.hasProp)(pageConfigSerialized, 'pageId', 'string'));
(0, utils_js_1.assert)((0, utils_js_1.hasProp)(pageConfigSerialized, 'routeFilesystem'));
(0, utils_js_1.assert)((0, utils_js_1.hasProp)(pageConfigSerialized, 'configValuesSerialized'));
});
}
function assertPageConfigGlobalSerialized(pageConfigGlobalSerialized) {
(0, utils_js_1.assert)((0, utils_js_1.hasProp)(pageConfigGlobalSerialized, 'configValuesSerialized'));
}