UNPKG

vike

Version:

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

101 lines (100 loc) 5.98 kB
"use strict"; 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')); }