vike 0.4.171 → 0.4.172
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/node/plugin/plugins/buildConfig.js +3 -4
- package/dist/cjs/node/plugin/plugins/devConfig/determineOptimizeDeps.js +18 -15
- package/dist/cjs/node/plugin/plugins/devConfig/index.js +2 -1
- package/dist/cjs/node/plugin/plugins/envVars.js +2 -1
- package/dist/cjs/node/plugin/plugins/extractAssetsPlugin.js +1 -1
- package/dist/cjs/node/plugin/plugins/importUserCode/{generateEagerImport.js → addImportStatement.js} +8 -10
- package/dist/cjs/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.js +0 -1
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +3 -3
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/loadFileAtConfigTime.js +2 -2
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +31 -75
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigValuesAll.js +4 -43
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.js +9 -50
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/isRuntimeEnvMatch.js +6 -0
- package/dist/cjs/node/plugin/shared/addSsrMiddleware.js +17 -2
- package/dist/cjs/node/prerender/runPrerender.js +35 -15
- package/dist/cjs/node/prerender/utils.js +1 -0
- package/dist/cjs/node/runtime/html/injectAssets/getHtmlTags.js +3 -3
- package/dist/cjs/node/runtime/html/injectAssets/getViteDevScripts.js +2 -1
- package/dist/cjs/node/runtime/html/injectAssets/mergeScriptTags.js +2 -8
- package/dist/cjs/node/runtime/html/renderHtml.js +19 -20
- package/dist/cjs/node/runtime/html/stream.js +9 -9
- package/dist/cjs/node/runtime/renderPage/analyzePage.js +9 -7
- package/dist/cjs/node/runtime/renderPage/createHttpResponseObject/getCacheControl.js +1 -1
- package/dist/cjs/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.js +2 -2
- package/dist/cjs/node/runtime/renderPage/executeOnRenderHtmlHook.js +8 -8
- package/dist/cjs/node/runtime/renderPage/getHttpResponseBody.js +2 -2
- package/dist/cjs/node/runtime/renderPage/loadUserFilesServerSide.js +4 -5
- package/dist/cjs/node/runtime/renderPage/logErrorHint.js +91 -282
- package/dist/cjs/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.js +2 -2
- package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +30 -10
- package/dist/cjs/node/runtime/renderPage.js +17 -13
- package/dist/cjs/node/runtime/utils.js +2 -0
- package/dist/cjs/node/shared/assertV1Design.js +3 -4
- package/dist/cjs/shared/getPageContext.js +5 -0
- package/dist/cjs/shared/{addUrlComputedProps.js → getPageContextUrlComputed.js} +52 -42
- package/dist/cjs/shared/getPageFiles/analyzeClientSide.js +2 -2
- package/dist/cjs/shared/getPageFiles/getExports.js +49 -1
- package/dist/cjs/shared/getPageFiles/parseGlobResults.js +15 -8
- package/dist/cjs/shared/hooks/executeHook.js +22 -3
- package/dist/cjs/shared/hooks/getHook.js +2 -2
- package/dist/cjs/shared/page-configs/getConfigValue.js +14 -17
- package/dist/cjs/shared/page-configs/getConfigValueBuildTime.js +70 -0
- package/dist/cjs/shared/page-configs/loadConfigValues.js +3 -12
- package/dist/cjs/shared/page-configs/serialize/assertPageConfigsSerialized.js +0 -18
- package/dist/cjs/shared/page-configs/serialize/parsePageConfigs.js +110 -16
- package/dist/cjs/shared/page-configs/serialize/serializeConfigValues.js +198 -0
- package/dist/cjs/shared/route/executeGuardHook.js +1 -1
- package/dist/cjs/shared/route/executeOnBeforeRouteHook.js +1 -1
- package/dist/cjs/shared/route/index.js +2 -2
- package/dist/cjs/shared/route/loadPageRoutes.js +2 -2
- package/dist/cjs/shared/route/resolveRouteFunction.js +2 -2
- package/dist/cjs/shared/sortPageContext.js +4 -8
- package/dist/cjs/shared/utils.js +2 -0
- package/dist/cjs/utils/assert.js +1 -1
- package/dist/cjs/utils/assertNodeVersion.js +1 -1
- package/dist/cjs/utils/changeEnumerable.js +9 -0
- package/dist/cjs/utils/escapeHtml.js +14 -0
- package/dist/cjs/utils/getPropAccessNotation.js +1 -4
- package/dist/cjs/utils/hasProp.js +5 -7
- package/dist/cjs/utils/normalizeHeaders.js +13 -0
- package/dist/cjs/utils/objectAssign.js +1 -1
- package/dist/cjs/utils/objectDefineProperty.js +8 -0
- package/dist/cjs/utils/objectKeys.js +8 -4
- package/dist/cjs/utils/projectInfo.js +1 -1
- package/dist/esm/client/client-routing-runtime/createPageContext.d.ts +6 -4
- package/dist/esm/client/client-routing-runtime/createPageContext.js +4 -3
- package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.js +16 -12
- package/dist/esm/client/client-routing-runtime/installClientRouter.js +18 -10
- package/dist/esm/client/client-routing-runtime/renderPageClientSide.js +3 -3
- package/dist/esm/client/server-routing-runtime/getPageContext.d.ts +4 -4
- package/dist/esm/client/server-routing-runtime/utils.d.ts +1 -0
- package/dist/esm/client/server-routing-runtime/utils.js +1 -0
- package/dist/esm/client/shared/executeOnRenderClientHook.js +1 -1
- package/dist/esm/client/shared/getPageContextProxyForUser.d.ts +3 -2
- package/dist/esm/client/shared/getPageContextProxyForUser.js +35 -48
- package/dist/esm/client/shared/loadUserFilesClientSide.js +4 -4
- package/dist/esm/node/plugin/plugins/buildConfig.js +3 -4
- package/dist/esm/node/plugin/plugins/devConfig/determineOptimizeDeps.js +18 -15
- package/dist/esm/node/plugin/plugins/devConfig/index.js +2 -1
- package/dist/esm/node/plugin/plugins/envVars.js +2 -1
- package/dist/esm/node/plugin/plugins/extractAssetsPlugin.js +1 -1
- package/dist/esm/node/plugin/plugins/importUserCode/addImportStatement.d.ts +14 -0
- package/dist/esm/node/plugin/plugins/importUserCode/{generateEagerImport.js → addImportStatement.js} +7 -9
- package/dist/esm/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.js +0 -1
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.d.ts +2 -1
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +3 -3
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/loadFileAtConfigTime.js +2 -2
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +31 -75
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigValuesAll.js +4 -43
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.js +9 -50
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/isRuntimeEnvMatch.d.ts +1 -0
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/isRuntimeEnvMatch.js +6 -0
- package/dist/esm/node/plugin/shared/addSsrMiddleware.js +14 -2
- package/dist/esm/node/prerender/runPrerender.js +37 -17
- package/dist/esm/node/prerender/utils.d.ts +1 -0
- package/dist/esm/node/prerender/utils.js +1 -0
- package/dist/esm/node/runtime/html/injectAssets/getHtmlTags.js +3 -3
- package/dist/esm/node/runtime/html/injectAssets/getViteDevScripts.js +3 -2
- package/dist/esm/node/runtime/html/injectAssets/mergeScriptTags.d.ts +1 -1
- package/dist/esm/node/runtime/html/injectAssets/mergeScriptTags.js +2 -8
- package/dist/esm/node/runtime/html/renderHtml.js +19 -20
- package/dist/esm/node/runtime/html/stream.d.ts +1 -1
- package/dist/esm/node/runtime/html/stream.js +9 -9
- package/dist/esm/node/runtime/renderPage/analyzePage.js +9 -7
- package/dist/esm/node/runtime/renderPage/createHttpResponseObject/getCacheControl.js +2 -2
- package/dist/esm/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.js +2 -2
- package/dist/esm/node/runtime/renderPage/executeOnRenderHtmlHook.js +8 -8
- package/dist/esm/node/runtime/renderPage/getHttpResponseBody.js +2 -2
- package/dist/esm/node/runtime/renderPage/loadUserFilesServerSide.d.ts +1 -6
- package/dist/esm/node/runtime/renderPage/loadUserFilesServerSide.js +4 -5
- package/dist/esm/node/runtime/renderPage/logErrorHint.d.ts +2 -6
- package/dist/esm/node/runtime/renderPage/logErrorHint.js +92 -283
- package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.d.ts +2 -2
- package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.js +2 -2
- package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +65 -39
- package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +31 -11
- package/dist/esm/node/runtime/renderPage.js +17 -13
- package/dist/esm/node/runtime/utils.d.ts +2 -0
- package/dist/esm/node/runtime/utils.js +2 -0
- package/dist/esm/node/shared/assertV1Design.d.ts +2 -2
- package/dist/esm/node/shared/assertV1Design.js +3 -4
- package/dist/esm/shared/VikeNamespace.d.ts +9 -0
- package/dist/esm/shared/getPageContext.d.ts +1 -0
- package/dist/esm/shared/getPageContext.js +1 -0
- package/dist/esm/shared/{addUrlComputedProps.d.ts → getPageContextUrlComputed.d.ts} +23 -21
- package/dist/esm/shared/{addUrlComputedProps.js → getPageContextUrlComputed.js} +52 -42
- package/dist/esm/shared/getPageFiles/analyzeClientSide.js +3 -3
- package/dist/esm/shared/getPageFiles/getExports.d.ts +36 -0
- package/dist/esm/shared/getPageFiles/getExports.js +50 -2
- package/dist/esm/shared/getPageFiles/parseGlobResults.js +14 -7
- package/dist/esm/shared/hooks/executeHook.d.ts +10 -1
- package/dist/esm/shared/hooks/executeHook.js +21 -2
- package/dist/esm/shared/hooks/getHook.d.ts +2 -2
- package/dist/esm/shared/hooks/getHook.js +3 -3
- package/dist/esm/shared/page-configs/Config/PageContextConfig.d.ts +2 -2
- package/dist/esm/shared/page-configs/PageConfig.d.ts +14 -8
- package/dist/esm/shared/page-configs/getConfigValue.d.ts +12 -12
- package/dist/esm/shared/page-configs/getConfigValue.js +13 -16
- package/dist/esm/shared/page-configs/getConfigValueBuildTime.d.ts +9 -0
- package/dist/esm/shared/page-configs/getConfigValueBuildTime.js +67 -0
- package/dist/esm/shared/page-configs/loadConfigValues.js +3 -12
- package/dist/esm/shared/page-configs/serialize/PageConfigSerialized.d.ts +17 -21
- package/dist/esm/shared/page-configs/serialize/assertPageConfigsSerialized.d.ts +1 -5
- package/dist/esm/shared/page-configs/serialize/assertPageConfigsSerialized.js +1 -16
- package/dist/esm/shared/page-configs/serialize/parsePageConfigs.d.ts +4 -1
- package/dist/esm/shared/page-configs/serialize/parsePageConfigs.js +109 -15
- package/dist/esm/shared/page-configs/serialize/serializeConfigValues.d.ts +5 -0
- package/dist/esm/shared/page-configs/serialize/serializeConfigValues.js +192 -0
- package/dist/esm/shared/route/executeGuardHook.js +1 -1
- package/dist/esm/shared/route/executeOnBeforeRouteHook.js +1 -1
- package/dist/esm/shared/route/index.d.ts +3 -3
- package/dist/esm/shared/route/index.js +2 -2
- package/dist/esm/shared/route/loadPageRoutes.js +3 -3
- package/dist/esm/shared/route/resolveRouteFunction.d.ts +2 -2
- package/dist/esm/shared/route/resolveRouteFunction.js +2 -2
- package/dist/esm/shared/sortPageContext.js +4 -8
- package/dist/esm/shared/types.d.ts +32 -6
- package/dist/esm/shared/utils.d.ts +2 -0
- package/dist/esm/shared/utils.js +2 -0
- package/dist/esm/types/index.d.ts +1 -1
- package/dist/esm/utils/assert.js +1 -1
- package/dist/esm/utils/assertNodeVersion.js +1 -1
- package/dist/esm/utils/changeEnumerable.d.ts +2 -0
- package/dist/esm/utils/changeEnumerable.js +5 -0
- package/dist/esm/utils/escapeHtml.d.ts +1 -0
- package/dist/esm/utils/escapeHtml.js +10 -0
- package/dist/esm/utils/getPropAccessNotation.d.ts +1 -2
- package/dist/esm/utils/getPropAccessNotation.js +2 -6
- package/dist/esm/utils/hasProp.d.ts +4 -13
- package/dist/esm/utils/hasProp.js +5 -7
- package/dist/esm/utils/normalizeHeaders.d.ts +1 -0
- package/dist/esm/utils/normalizeHeaders.js +9 -0
- package/dist/esm/utils/objectAssign.js +1 -1
- package/dist/esm/utils/objectDefineProperty.d.ts +4 -0
- package/dist/esm/utils/objectDefineProperty.js +4 -0
- package/dist/esm/utils/objectKeys.d.ts +1 -3
- package/dist/esm/utils/objectKeys.js +8 -4
- package/dist/esm/utils/projectInfo.d.ts +2 -2
- package/dist/esm/utils/projectInfo.js +1 -1
- package/package.json +21 -12
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getConfigValuesSerialized.js +0 -76
- package/dist/cjs/node/plugin/shared/getConfigValueSourcesNotOverriden.js +0 -14
- package/dist/cjs/node/shared/getClientEntry.js +0 -12
- package/dist/cjs/shared/page-configs/serialize/parseConfigValuesImported.js +0 -85
- package/dist/cjs/shared/page-configs/serialize/parseConfigValuesSerialized.js +0 -24
- package/dist/cjs/shared/page-configs/serialize/serializeConfigValue.js +0 -50
- package/dist/esm/node/plugin/plugins/importUserCode/generateEagerImport.d.ts +0 -16
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getConfigValuesSerialized.d.ts +0 -5
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getConfigValuesSerialized.js +0 -70
- package/dist/esm/node/plugin/shared/getConfigValueSourcesNotOverriden.d.ts +0 -5
- package/dist/esm/node/plugin/shared/getConfigValueSourcesNotOverriden.js +0 -11
- package/dist/esm/node/shared/getClientEntry.d.ts +0 -3
- package/dist/esm/node/shared/getClientEntry.js +0 -9
- package/dist/esm/shared/page-configs/serialize/parseConfigValuesImported.d.ts +0 -4
- package/dist/esm/shared/page-configs/serialize/parseConfigValuesImported.js +0 -82
- package/dist/esm/shared/page-configs/serialize/parseConfigValuesSerialized.d.ts +0 -4
- package/dist/esm/shared/page-configs/serialize/parseConfigValuesSerialized.js +0 -21
- package/dist/esm/shared/page-configs/serialize/serializeConfigValue.d.ts +0 -8
- package/dist/esm/shared/page-configs/serialize/serializeConfigValue.js +0 -47
|
@@ -14,12 +14,12 @@ import { logConfigError, logConfigErrorRecover } from '../../../shared/loggerNot
|
|
|
14
14
|
import { removeSuperfluousViteLog_enable, removeSuperfluousViteLog_disable } from '../../../shared/loggerVite/removeSuperfluousViteLog.js';
|
|
15
15
|
import pc from '@brillout/picocolors';
|
|
16
16
|
import { getConfigDefinedAt } from '../../../../../shared/page-configs/getConfigDefinedAt.js';
|
|
17
|
-
import { assertConfigValueIsSerializable } from './getConfigValuesSerialized.js';
|
|
18
17
|
import { crawlPlusFiles } from './getVikeConfig/crawlPlusFiles.js';
|
|
19
18
|
import { getConfigFileExport } from './getConfigFileExport.js';
|
|
20
19
|
import { loadConfigFile, loadImportedFile, loadValueFile } from './getVikeConfig/loadFileAtConfigTime.js';
|
|
21
20
|
import { clearFilesEnvMap, resolvePointerImportOfConfig } from './getVikeConfig/resolvePointerImport.js';
|
|
22
21
|
import { getFilePathResolved } from '../../../shared/getFilePath.js';
|
|
22
|
+
import { getConfigValueBuildTime } from '../../../../../shared/page-configs/getConfigValueBuildTime.js';
|
|
23
23
|
assertIsNotProductionRuntime();
|
|
24
24
|
let devServerIsCorrupt = false;
|
|
25
25
|
let wasConfigInvalid = null;
|
|
@@ -166,7 +166,7 @@ async function loadInterfaceFiles(userRootDir, outDirRoot, isDev) {
|
|
|
166
166
|
// - If `configDef` is `undefined` => we load the file +{configName}.js later.
|
|
167
167
|
// - We already need to load +meta.js here (to get the custom config definitions defined by the user)
|
|
168
168
|
const configDef = getConfigDefinitionOptional(configDefinitionsBuiltIn, configName);
|
|
169
|
-
if (configDef &&
|
|
169
|
+
if (configDef && isLoadableAtBuildTime(configDef)) {
|
|
170
170
|
await loadValueFile(interfaceFile, configName, userRootDir);
|
|
171
171
|
}
|
|
172
172
|
}
|
|
@@ -241,6 +241,7 @@ async function loadVikeConfig_withErrorHandling(userRootDir, outDirRoot, isDev,
|
|
|
241
241
|
const dummyData = {
|
|
242
242
|
pageConfigs: [],
|
|
243
243
|
pageConfigGlobal: {
|
|
244
|
+
configDefinitions: {},
|
|
244
245
|
configValueSources: {}
|
|
245
246
|
},
|
|
246
247
|
globalVikeConfig: {}
|
|
@@ -266,7 +267,7 @@ async function loadVikeConfig(userRootDir, outDirRoot, isDev) {
|
|
|
266
267
|
if (isGlobalConfig(configName))
|
|
267
268
|
return;
|
|
268
269
|
const configDef = getConfigDefinition(configDefinitions, configName, interfaceFile.filePath.filePathToShowToUser);
|
|
269
|
-
if (!
|
|
270
|
+
if (!isLoadableAtBuildTime(configDef))
|
|
270
271
|
return;
|
|
271
272
|
const isAlreadyLoaded = interfacefileIsAlreaydLoaded(interfaceFile);
|
|
272
273
|
if (isAlreadyLoaded)
|
|
@@ -288,14 +289,13 @@ async function loadVikeConfig(userRootDir, outDirRoot, isDev) {
|
|
|
288
289
|
const { routeFilesystem, isErrorPage } = determineRouteFilesystem(locationId, configValueSources);
|
|
289
290
|
applyEffectsAll(configValueSources, configDefinitions);
|
|
290
291
|
const configValuesComputed = getComputed(configValueSources, configDefinitions);
|
|
291
|
-
const configValues = getConfigValues(configValueSources, configValuesComputed, configDefinitions);
|
|
292
292
|
const pageConfig = {
|
|
293
293
|
pageId: locationId,
|
|
294
294
|
isErrorPage,
|
|
295
295
|
routeFilesystem,
|
|
296
|
+
configDefinitions,
|
|
296
297
|
configValueSources,
|
|
297
|
-
configValuesComputed
|
|
298
|
-
configValues
|
|
298
|
+
configValuesComputed
|
|
299
299
|
};
|
|
300
300
|
return pageConfig;
|
|
301
301
|
}));
|
|
@@ -328,7 +328,7 @@ function assertOnBeforeRenderEnv(pageConfig) {
|
|
|
328
328
|
if (!onBeforeRenderConfig)
|
|
329
329
|
return;
|
|
330
330
|
const onBeforeRenderEnv = onBeforeRenderConfig.configEnv;
|
|
331
|
-
const isClientRouting =
|
|
331
|
+
const isClientRouting = getConfigValueBuildTime(pageConfig, 'clientRouting', 'boolean');
|
|
332
332
|
// When using Server Routing, loading a onBeforeRender() hook on the client-side hasn't any effect (the Server Routing's client runtime never calls it); it unnecessarily bloats client bundle sizes
|
|
333
333
|
assertUsage(!(onBeforeRenderEnv.client && !isClientRouting), `Page ${pageConfig.pageId} has an onBeforeRender() hook with env ${pc.cyan(JSON.stringify(onBeforeRenderEnv))} which doesn't make sense because the page is using Server Routing: onBeforeRender() can be run in the client only when using Client Routing.`);
|
|
334
334
|
}
|
|
@@ -389,6 +389,7 @@ async function getGlobalConfigs(interfaceFilesByLocationId, userRootDir, importe
|
|
|
389
389
|
}
|
|
390
390
|
const globalVikeConfig = {};
|
|
391
391
|
const pageConfigGlobal = {
|
|
392
|
+
configDefinitions: configDefinitionsBuiltInGlobal,
|
|
392
393
|
configValueSources: {}
|
|
393
394
|
};
|
|
394
395
|
await Promise.all(objectEntries(configDefinitionsBuiltInGlobal).map(async ([configName, configDef]) => {
|
|
@@ -422,7 +423,15 @@ async function resolveConfigValueSources(configName, configDef, interfaceFilesRe
|
|
|
422
423
|
const add = (interfaceFile) => {
|
|
423
424
|
assert(!visited.has(interfaceFile));
|
|
424
425
|
visited.add(interfaceFile);
|
|
425
|
-
sourcesInfo.
|
|
426
|
+
const isHighestInheritancePrecedence = sourcesInfo.length === 0;
|
|
427
|
+
sourcesInfo.push([
|
|
428
|
+
configName,
|
|
429
|
+
interfaceFile,
|
|
430
|
+
configDef,
|
|
431
|
+
userRootDir,
|
|
432
|
+
importedFilesLoaded,
|
|
433
|
+
isHighestInheritancePrecedence
|
|
434
|
+
]);
|
|
426
435
|
};
|
|
427
436
|
// Main resolution logic
|
|
428
437
|
{
|
|
@@ -493,7 +502,7 @@ function warnOverridenConfigValues(interfaceFileWinner, interfaceFilesOverriden,
|
|
|
493
502
|
function isInterfaceFileUserLand(interfaceFile) {
|
|
494
503
|
return (interfaceFile.isConfigFile && !interfaceFile.isConfigExtend) || interfaceFile.isValueFile;
|
|
495
504
|
}
|
|
496
|
-
async function getConfigValueSource(configName, interfaceFile, configDef, userRootDir, importedFilesLoaded) {
|
|
505
|
+
async function getConfigValueSource(configName, interfaceFile, configDef, userRootDir, importedFilesLoaded, isHighestInheritancePrecedence) {
|
|
497
506
|
const conf = interfaceFile.fileExportsByConfigName[configName];
|
|
498
507
|
assert(conf);
|
|
499
508
|
const configEnv = deriveConfigEnvFromFileName(configDef.env, interfaceFile.filePath.fileName);
|
|
@@ -502,6 +511,7 @@ async function getConfigValueSource(configName, interfaceFile, configDef, userRo
|
|
|
502
511
|
...interfaceFile.filePath,
|
|
503
512
|
fileExportPathToShowToUser: ['default', configName]
|
|
504
513
|
};
|
|
514
|
+
const isOverriden = configDef.cumulative ? false : !isHighestInheritancePrecedence;
|
|
505
515
|
// +client.js
|
|
506
516
|
if (configDef._valueIsFilePath) {
|
|
507
517
|
let definedAtFilePath;
|
|
@@ -528,7 +538,8 @@ async function getConfigValueSource(configName, interfaceFile, configDef, userRo
|
|
|
528
538
|
valueIsFilePath: true,
|
|
529
539
|
configEnv,
|
|
530
540
|
valueIsImportedAtRuntime: true,
|
|
531
|
-
|
|
541
|
+
valueIsDefinedByPlusFile: false,
|
|
542
|
+
isOverriden,
|
|
532
543
|
definedAtFilePath
|
|
533
544
|
};
|
|
534
545
|
return configValueSource;
|
|
@@ -544,11 +555,12 @@ async function getConfigValueSource(configName, interfaceFile, configDef, userRo
|
|
|
544
555
|
locationId,
|
|
545
556
|
configEnv,
|
|
546
557
|
valueIsImportedAtRuntime: true,
|
|
547
|
-
|
|
558
|
+
valueIsDefinedByPlusFile: false,
|
|
559
|
+
isOverriden,
|
|
548
560
|
definedAtFilePath: pointerImport
|
|
549
561
|
};
|
|
550
|
-
// Load
|
|
551
|
-
if (
|
|
562
|
+
// Load pointer import
|
|
563
|
+
if (isLoadableAtBuildTime(configDef) &&
|
|
552
564
|
// The value of `extends` was already loaded and already used: we don't need the value of `extends` anymore
|
|
553
565
|
configName !== 'extends') {
|
|
554
566
|
if (pointerImport.filePathAbsoluteFilesystem) {
|
|
@@ -568,7 +580,8 @@ async function getConfigValueSource(configName, interfaceFile, configDef, userRo
|
|
|
568
580
|
value: configValue,
|
|
569
581
|
configEnv,
|
|
570
582
|
valueIsImportedAtRuntime: false,
|
|
571
|
-
|
|
583
|
+
valueIsDefinedByPlusFile: false,
|
|
584
|
+
isOverriden,
|
|
572
585
|
definedAtFilePath: definedAtFilePath_
|
|
573
586
|
};
|
|
574
587
|
return configValueSource;
|
|
@@ -581,7 +594,8 @@ async function getConfigValueSource(configName, interfaceFile, configDef, userRo
|
|
|
581
594
|
locationId,
|
|
582
595
|
configEnv,
|
|
583
596
|
valueIsImportedAtRuntime: !valueAlreadyLoaded,
|
|
584
|
-
|
|
597
|
+
valueIsDefinedByPlusFile: true,
|
|
598
|
+
isOverriden,
|
|
585
599
|
definedAtFilePath: {
|
|
586
600
|
...interfaceFile.filePath,
|
|
587
601
|
fileExportPathToShowToUser: configName === interfaceFile.configName
|
|
@@ -876,59 +890,6 @@ function determineIsErrorPage(routeFilesystem) {
|
|
|
876
890
|
function isVikeConfigFile(filePath) {
|
|
877
891
|
return !!getConfigName(filePath);
|
|
878
892
|
}
|
|
879
|
-
function getConfigValues(configValueSources, configValuesComputed, configDefinitions) {
|
|
880
|
-
const configValues = {};
|
|
881
|
-
Object.entries(configValuesComputed).forEach(([configName, configValueComputed]) => {
|
|
882
|
-
configValues[configName] = {
|
|
883
|
-
type: 'computed',
|
|
884
|
-
value: configValueComputed.value,
|
|
885
|
-
definedAtData: null
|
|
886
|
-
};
|
|
887
|
-
});
|
|
888
|
-
Object.entries(configValueSources).forEach(([configName, sources]) => {
|
|
889
|
-
const configDef = configDefinitions[configName];
|
|
890
|
-
assert(configDef);
|
|
891
|
-
if (!configDef.cumulative) {
|
|
892
|
-
const configValueSource = sources[0];
|
|
893
|
-
if ('value' in configValueSource) {
|
|
894
|
-
configValues[configName] = {
|
|
895
|
-
type: 'classic',
|
|
896
|
-
value: configValueSource.value,
|
|
897
|
-
definedAtData: getDefinedAtFile(configValueSource)
|
|
898
|
-
};
|
|
899
|
-
}
|
|
900
|
-
}
|
|
901
|
-
else {
|
|
902
|
-
const value = mergeCumulative(configName, sources);
|
|
903
|
-
const definedAtData = sources.map((source) => getDefinedAtFile(source));
|
|
904
|
-
assert(value.length === definedAtData.length);
|
|
905
|
-
configValues[configName] = {
|
|
906
|
-
type: 'cumulative',
|
|
907
|
-
value,
|
|
908
|
-
definedAtData
|
|
909
|
-
};
|
|
910
|
-
}
|
|
911
|
-
});
|
|
912
|
-
return configValues;
|
|
913
|
-
}
|
|
914
|
-
function getDefinedAtFile(configValueSource) {
|
|
915
|
-
return {
|
|
916
|
-
filePathToShowToUser: configValueSource.definedAtFilePath.filePathToShowToUser,
|
|
917
|
-
fileExportPathToShowToUser: configValueSource.definedAtFilePath.fileExportPathToShowToUser
|
|
918
|
-
};
|
|
919
|
-
}
|
|
920
|
-
function mergeCumulative(configName, configValueSources) {
|
|
921
|
-
const configValues = [];
|
|
922
|
-
configValueSources.forEach((configValueSource) => {
|
|
923
|
-
// We could, in principle, also support cumulative for values that aren't loaded at config-time but it isn't completely trivial to implement.
|
|
924
|
-
assert('value' in configValueSource);
|
|
925
|
-
// Make sure configValueSource.value is serializable
|
|
926
|
-
assertConfigValueIsSerializable(configValueSource.value, configName, getDefinedAtFile(configValueSource));
|
|
927
|
-
const { value } = configValueSource;
|
|
928
|
-
configValues.push(value);
|
|
929
|
-
});
|
|
930
|
-
return configValues;
|
|
931
|
-
}
|
|
932
893
|
function getConfigEnvValue(val, errMsgIntro) {
|
|
933
894
|
const errInvalidValue = `${errMsgIntro} an invalid value ${pc.cyan(JSON.stringify(val))}`;
|
|
934
895
|
// Legacy outdated values
|
|
@@ -971,13 +932,8 @@ function getConfigDefinition(configDefinitions, configName, filePathToShowToUser
|
|
|
971
932
|
function getConfigDefinitionOptional(configDefinitions, configName) {
|
|
972
933
|
return configDefinitions[configName] ?? null;
|
|
973
934
|
}
|
|
974
|
-
function
|
|
975
|
-
|
|
976
|
-
if (configDef.cumulative) {
|
|
977
|
-
// In principle we could lift that requirement (but it requires non-trivial modifications)
|
|
978
|
-
assertUsage(configEnv.config, `Config ${pc.cyan(configName)} needs its ${pc.cyan('env')} to have ${pc.cyan('{ config: true }')} (because ${pc.cyan(configName)} is a ${pc.cyan('cumulative')} config)`);
|
|
979
|
-
}
|
|
980
|
-
return !!configEnv.config;
|
|
935
|
+
function isLoadableAtBuildTime(configDef) {
|
|
936
|
+
return !!configDef.env.config && !configDef._valueIsFilePath;
|
|
981
937
|
}
|
|
982
938
|
function isGlobalConfig(configName) {
|
|
983
939
|
if (configName === 'prerender')
|
package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigValuesAll.js
CHANGED
|
@@ -4,13 +4,11 @@ import { getVirtualFileIdPageConfigValuesAll, isVirtualFileIdPageConfigValuesAll
|
|
|
4
4
|
import { getVikeConfig } from './getVikeConfig.js';
|
|
5
5
|
import { extractAssetsAddQuery } from '../../../../shared/extractAssetsQuery.js';
|
|
6
6
|
import { debug } from './debug.js';
|
|
7
|
-
import { getConfigValue } from '../../../../../shared/page-configs/getConfigValue.js';
|
|
8
|
-
import { getConfigValueSourcesNotOverriden } from '../../../shared/getConfigValueSourcesNotOverriden.js';
|
|
9
7
|
import { isRuntimeEnvMatch } from './isRuntimeEnvMatch.js';
|
|
10
|
-
import {
|
|
8
|
+
import { serializeConfigValues } from '../../../../../shared/page-configs/serialize/serializeConfigValues.js';
|
|
11
9
|
import { getConfigVike } from '../../../../shared/getConfigVike.js';
|
|
12
|
-
import { getConfigValuesSerialized } from './getConfigValuesSerialized.js';
|
|
13
10
|
import { fixServerAssets_isEnabled } from '../../buildConfig/fixServerAssets.js';
|
|
11
|
+
import { getConfigValueBuildTime } from '../../../../../shared/page-configs/getConfigValueBuildTime.js';
|
|
14
12
|
async function getVirtualFilePageConfigValuesAll(id, isDev, config) {
|
|
15
13
|
const result = isVirtualFileIdPageConfigValuesAll(id);
|
|
16
14
|
assert(result);
|
|
@@ -32,16 +30,9 @@ async function getVirtualFilePageConfigValuesAll(id, isDev, config) {
|
|
|
32
30
|
function getLoadConfigValuesAll(pageConfig, isForClientSide, pageId, includeAssetsImportedByServer, isDev) {
|
|
33
31
|
const lines = [];
|
|
34
32
|
const importStatements = [];
|
|
35
|
-
const isClientRouting =
|
|
36
|
-
lines.push('export const configValuesImported = [');
|
|
37
|
-
lines.push(getConfigValuesImported(pageConfig, isForClientSide, isClientRouting, importStatements));
|
|
38
|
-
lines.push('];');
|
|
33
|
+
const isClientRouting = getConfigValueBuildTime(pageConfig, 'clientRouting', 'boolean')?.value ?? false;
|
|
39
34
|
lines.push('export const configValuesSerialized = {');
|
|
40
|
-
lines.push(
|
|
41
|
-
isImport: false,
|
|
42
|
-
isForClientSide,
|
|
43
|
-
isClientRouting
|
|
44
|
-
})));
|
|
35
|
+
lines.push(...serializeConfigValues(pageConfig, importStatements, (configEnv) => isRuntimeEnvMatch(configEnv, { isForClientSide, isClientRouting, isEager: false, isDev }), ''));
|
|
45
36
|
lines.push('};');
|
|
46
37
|
if (!fixServerAssets_isEnabled() && includeAssetsImportedByServer && isForClientSide && !isDev) {
|
|
47
38
|
importStatements.push(`import '${extractAssetsAddQuery(getVirtualFileIdPageConfigValuesAll(pageId, false))}'`);
|
|
@@ -49,33 +40,3 @@ function getLoadConfigValuesAll(pageConfig, isForClientSide, pageId, includeAsse
|
|
|
49
40
|
const code = [...importStatements, ...lines].join('\n');
|
|
50
41
|
return code;
|
|
51
42
|
}
|
|
52
|
-
function getConfigValuesImported(pageConfig, isForClientSide, isClientRouting, importStatements) {
|
|
53
|
-
const lines = [];
|
|
54
|
-
const varCounterContainer = { varCounter: 0 };
|
|
55
|
-
getConfigValueSourcesNotOverriden(pageConfig).forEach((configValueSource) => {
|
|
56
|
-
if (!isEnvMatch(configValueSource.configEnv, checkWhetherIsImport(configValueSource), {
|
|
57
|
-
isImport: true,
|
|
58
|
-
isForClientSide,
|
|
59
|
-
isClientRouting
|
|
60
|
-
}))
|
|
61
|
-
return;
|
|
62
|
-
const whitespace = ' ';
|
|
63
|
-
lines.push(...serializeConfigValueImported(configValueSource, configValueSource.configName, whitespace, varCounterContainer, importStatements));
|
|
64
|
-
});
|
|
65
|
-
const code = lines.join('\n');
|
|
66
|
-
return code;
|
|
67
|
-
}
|
|
68
|
-
function checkWhetherIsImport(configValueSource) {
|
|
69
|
-
const { valueIsImportedAtRuntime, valueIsFilePath } = configValueSource;
|
|
70
|
-
return valueIsImportedAtRuntime && !valueIsFilePath;
|
|
71
|
-
}
|
|
72
|
-
function isEnvMatch(configEnv, isImport, runtime) {
|
|
73
|
-
// Whether config value is imported or serialized
|
|
74
|
-
if (isImport !== runtime.isImport)
|
|
75
|
-
return false;
|
|
76
|
-
// Runtime match
|
|
77
|
-
const { isForClientSide, isClientRouting } = runtime;
|
|
78
|
-
if (!isRuntimeEnvMatch(configEnv, { isForClientSide, isClientRouting, isEager: false }))
|
|
79
|
-
return false;
|
|
80
|
-
return true;
|
|
81
|
-
}
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
export { getVirtualFilePageConfigs };
|
|
2
|
-
import { assert, objectEntries } from '../../../utils.js';
|
|
3
2
|
import { getVirtualFileIdPageConfigValuesAll } from '../../../../shared/virtual-files/virtualFilePageConfigValuesAll.js';
|
|
4
3
|
import { debug } from './debug.js';
|
|
5
4
|
import { getVikeConfig } from './getVikeConfig.js';
|
|
6
5
|
import { isRuntimeEnvMatch } from './isRuntimeEnvMatch.js';
|
|
7
|
-
import {
|
|
8
|
-
import { getConfigValuesSerialized } from './getConfigValuesSerialized.js';
|
|
6
|
+
import { serializeConfigValues } from '../../../../../shared/page-configs/serialize/serializeConfigValues.js';
|
|
9
7
|
async function getVirtualFilePageConfigs(isForClientSide, isDev, id, isClientRouting, config) {
|
|
10
8
|
const { pageConfigs, pageConfigGlobal } = await getVikeConfig(config, isDev, true);
|
|
11
9
|
return getCode(pageConfigs, pageConfigGlobal, isForClientSide, isDev, id, isClientRouting);
|
|
@@ -13,18 +11,17 @@ async function getVirtualFilePageConfigs(isForClientSide, isDev, id, isClientRou
|
|
|
13
11
|
function getCode(pageConfigs, pageConfigGlobal, isForClientSide, isDev, id, isClientRouting) {
|
|
14
12
|
const lines = [];
|
|
15
13
|
const importStatements = [];
|
|
16
|
-
const varCounterContainer = { varCounter: 0 };
|
|
17
14
|
lines.push('export const pageConfigsSerialized = [');
|
|
18
|
-
lines.push(getCodePageConfigsSerialized(pageConfigs, isForClientSide, isClientRouting,
|
|
15
|
+
lines.push(getCodePageConfigsSerialized(pageConfigs, isForClientSide, isClientRouting, isDev, importStatements));
|
|
19
16
|
lines.push('];');
|
|
20
17
|
lines.push('export const pageConfigGlobalSerialized = {');
|
|
21
|
-
lines.push(getCodePageConfigGlobalSerialized(pageConfigGlobal, isForClientSide, isDev, importStatements
|
|
18
|
+
lines.push(getCodePageConfigGlobalSerialized(pageConfigGlobal, isForClientSide, isClientRouting, isDev, importStatements));
|
|
22
19
|
lines.push('};');
|
|
23
20
|
const code = [...importStatements, ...lines].join('\n');
|
|
24
21
|
debug(id, isForClientSide ? 'CLIENT-SIDE' : 'SERVER-SIDE', code);
|
|
25
22
|
return code;
|
|
26
23
|
}
|
|
27
|
-
function getCodePageConfigsSerialized(pageConfigs, isForClientSide, isClientRouting,
|
|
24
|
+
function getCodePageConfigsSerialized(pageConfigs, isForClientSide, isClientRouting, isDev, importStatements) {
|
|
28
25
|
const lines = [];
|
|
29
26
|
pageConfigs.forEach((pageConfig) => {
|
|
30
27
|
const { pageId, routeFilesystem, isErrorPage } = pageConfig;
|
|
@@ -34,57 +31,19 @@ function getCodePageConfigsSerialized(pageConfigs, isForClientSide, isClientRout
|
|
|
34
31
|
lines.push(` isErrorPage: ${JSON.stringify(isErrorPage)},`);
|
|
35
32
|
lines.push(` routeFilesystem: ${JSON.stringify(routeFilesystem)},`);
|
|
36
33
|
lines.push(` loadConfigValuesAll: () => import(${JSON.stringify(virtualFileIdPageConfigValuesAll)}),`);
|
|
37
|
-
// Serialized config values
|
|
38
34
|
lines.push(` configValuesSerialized: {`);
|
|
39
|
-
lines.push(
|
|
35
|
+
lines.push(...serializeConfigValues(pageConfig, importStatements, (configEnv) => isRuntimeEnvMatch(configEnv, { isForClientSide, isClientRouting, isEager: true, isDev }), ' '));
|
|
40
36
|
lines.push(` },`);
|
|
41
|
-
// Imported config values
|
|
42
|
-
const whitespace = ' ';
|
|
43
|
-
lines.push(`${whitespace}configValuesImported: [`);
|
|
44
|
-
Object.entries(pageConfig.configValueSources).forEach(([configName, sources]) => {
|
|
45
|
-
const configValue = pageConfig.configValues[configName];
|
|
46
|
-
if (configValue)
|
|
47
|
-
return;
|
|
48
|
-
const configValueSource = sources[0];
|
|
49
|
-
assert(configValueSource);
|
|
50
|
-
if (!configValueSource.configEnv.eager)
|
|
51
|
-
return;
|
|
52
|
-
if (!isRuntimeEnvMatch(configValueSource.configEnv, { isForClientSide, isClientRouting, isEager: true }))
|
|
53
|
-
return;
|
|
54
|
-
lines.push(...serializeConfigValueImported(configValueSource, configName, whitespace, varCounterContainer, importStatements));
|
|
55
|
-
});
|
|
56
|
-
lines.push(`${whitespace}],`);
|
|
57
37
|
lines.push(` },`);
|
|
58
38
|
});
|
|
59
39
|
const code = lines.join('\n');
|
|
60
40
|
return code;
|
|
61
41
|
}
|
|
62
|
-
function getCodePageConfigGlobalSerialized(pageConfigGlobal, isForClientSide, isDev, importStatements
|
|
42
|
+
function getCodePageConfigGlobalSerialized(pageConfigGlobal, isForClientSide, isClientRouting, isDev, importStatements) {
|
|
63
43
|
const lines = [];
|
|
64
|
-
|
|
65
|
-
lines.push(
|
|
66
|
-
lines.push(` },`)
|
|
67
|
-
*/
|
|
68
|
-
lines.push(` configValuesImported: [`);
|
|
69
|
-
objectEntries(pageConfigGlobal.configValueSources).forEach(([configName, sources]) => {
|
|
70
|
-
if (configName === 'onBeforeRoute') {
|
|
71
|
-
// if( isForClientSide && !isClientRouting ) return
|
|
72
|
-
}
|
|
73
|
-
else if (configName === 'onPrerenderStart') {
|
|
74
|
-
if (isDev || isForClientSide) {
|
|
75
|
-
// Only load onPrerenderStart() in server production runtime
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
assert(false);
|
|
81
|
-
}
|
|
82
|
-
const configValueSource = sources[0];
|
|
83
|
-
assert(configValueSource);
|
|
84
|
-
const whitespace = ' ';
|
|
85
|
-
lines.push(...serializeConfigValueImported(configValueSource, configName, whitespace, varCounterContainer, importStatements));
|
|
86
|
-
});
|
|
87
|
-
lines.push(` ],`);
|
|
44
|
+
lines.push(` configValuesSerialized: {`);
|
|
45
|
+
lines.push(...serializeConfigValues(pageConfigGlobal, importStatements, (configEnv) => isRuntimeEnvMatch(configEnv, { isForClientSide, isClientRouting, isEager: true, isDev }), ' '));
|
|
46
|
+
lines.push(` },`);
|
|
88
47
|
const code = lines.join('\n');
|
|
89
48
|
return code;
|
|
90
49
|
}
|
|
@@ -14,5 +14,11 @@ function isRuntimeEnvMatch(configEnv, runtime) {
|
|
|
14
14
|
// Eager
|
|
15
15
|
if (runtime.isEager !== !!configEnv.eager)
|
|
16
16
|
return false;
|
|
17
|
+
// Production/development
|
|
18
|
+
if (
|
|
19
|
+
//
|
|
20
|
+
(configEnv.production === true && runtime.isDev) ||
|
|
21
|
+
(configEnv.production === false && !runtime.isDev))
|
|
22
|
+
return false;
|
|
17
23
|
return true;
|
|
18
24
|
}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export { addSsrMiddleware };
|
|
2
2
|
import { renderPage } from '../../runtime/renderPage.js';
|
|
3
|
+
import { assertWarning } from '../utils.js';
|
|
4
|
+
import pc from '@brillout/picocolors';
|
|
3
5
|
function addSsrMiddleware(middlewares) {
|
|
4
6
|
middlewares.use(async (req, res, next) => {
|
|
5
7
|
if (res.headersSent)
|
|
@@ -8,11 +10,21 @@ function addSsrMiddleware(middlewares) {
|
|
|
8
10
|
if (!url)
|
|
9
11
|
return next();
|
|
10
12
|
const { headers } = req;
|
|
11
|
-
const userAgent = headers['user-agent'];
|
|
12
13
|
const pageContextInit = {
|
|
13
14
|
urlOriginal: url,
|
|
14
|
-
|
|
15
|
+
headersOriginal: headers
|
|
15
16
|
};
|
|
17
|
+
Object.defineProperty(pageContextInit, 'userAgent', {
|
|
18
|
+
get() {
|
|
19
|
+
// TODO/next-major-release: assertUsage() instead of assertWarning()
|
|
20
|
+
assertWarning(false, `${pc.cyan('pageContext.userAgent')} is deprecated: use ${pc.cyan("pageContext.headers['user-agent']")} instead.`, {
|
|
21
|
+
showStackTrace: true,
|
|
22
|
+
onlyOnce: true
|
|
23
|
+
});
|
|
24
|
+
return headers['user-agent'];
|
|
25
|
+
},
|
|
26
|
+
enumerable: false
|
|
27
|
+
});
|
|
16
28
|
let pageContext;
|
|
17
29
|
try {
|
|
18
30
|
pageContext = await renderPage(pageContextInit);
|
|
@@ -5,7 +5,7 @@ export { runPrerender_forceExit };
|
|
|
5
5
|
import '../runtime/page-files/setup.js';
|
|
6
6
|
import path from 'path';
|
|
7
7
|
import { route } from '../../shared/route/index.js';
|
|
8
|
-
import { assert, assertUsage, assertWarning, hasProp, projectInfo, objectAssign, isObjectWithKeys, isCallable, getOutDirs, isPropertyGetter, assertPosixPath, urlToFile, isPlainObject, handleNodeEnv_prerender, pLimit, assertPathFilesystemAbsolute, isArray } from './utils.js';
|
|
8
|
+
import { assert, assertUsage, assertWarning, hasProp, projectInfo, objectAssign, isObjectWithKeys, isCallable, getOutDirs, isPropertyGetter, assertPosixPath, urlToFile, isPlainObject, handleNodeEnv_prerender, pLimit, assertPathFilesystemAbsolute, isArray, changeEnumerable } from './utils.js';
|
|
9
9
|
import { prerenderPage, prerender404Page, getRenderContext, getPageContextInitEnhanced } from '../runtime/renderPage/renderPageAlreadyRouted.js';
|
|
10
10
|
import pc from '@brillout/picocolors';
|
|
11
11
|
import { cpus } from 'os';
|
|
@@ -16,10 +16,10 @@ import { getPageFilesServerSide } from '../../shared/getPageFiles.js';
|
|
|
16
16
|
import { getPageContextRequestUrl } from '../../shared/getPageContextRequestUrl.js';
|
|
17
17
|
import { getUrlFromRouteString } from '../../shared/route/resolveRouteString.js';
|
|
18
18
|
import { getConfigValueFilePathToShowToUser } from '../../shared/page-configs/helpers.js';
|
|
19
|
-
import {
|
|
19
|
+
import { getConfigValueRuntime } from '../../shared/page-configs/getConfigValue.js';
|
|
20
20
|
import { loadConfigValues } from '../../shared/page-configs/loadConfigValues.js';
|
|
21
21
|
import { isErrorPage } from '../../shared/error-page.js';
|
|
22
|
-
import {
|
|
22
|
+
import { getPageContextUrlComputed } from '../../shared/getPageContextUrlComputed.js';
|
|
23
23
|
import { isAbortError } from '../../shared/route/abort.js';
|
|
24
24
|
import { loadUserFilesServerSide } from '../runtime/renderPage/loadUserFilesServerSide.js';
|
|
25
25
|
import { getHookFromPageConfig, getHookFromPageConfigGlobal, getHookTimeoutDefault, setIsPrerenderering } from '../../shared/hooks/getHook.js';
|
|
@@ -27,6 +27,7 @@ import { noRouteMatch } from '../../shared/route/noRouteMatch.js';
|
|
|
27
27
|
import { getVikeConfig } from '../plugin/plugins/importUserCode/v1-design/getVikeConfig.js';
|
|
28
28
|
import { logErrorHint } from '../runtime/renderPage/logErrorHint.js';
|
|
29
29
|
import { executeHook, isUserHookError } from '../../shared/hooks/executeHook.js';
|
|
30
|
+
import { getConfigValueBuildTime } from '../../shared/page-configs/getConfigValueBuildTime.js';
|
|
30
31
|
async function runPrerenderFromAPI(options = {}) {
|
|
31
32
|
await runPrerender(options, 'prerender()');
|
|
32
33
|
// - We purposely propagate the error to the user land, so that the error interrupts the user land. It's also, I guess, a nice-to-have that the user has control over the error.
|
|
@@ -114,7 +115,7 @@ async function collectDoNoPrerenderList(renderContext, pageConfigs, doNotPrerend
|
|
|
114
115
|
// V1 design
|
|
115
116
|
pageConfigs.forEach((pageConfig) => {
|
|
116
117
|
const configName = 'prerender';
|
|
117
|
-
const configValue =
|
|
118
|
+
const configValue = getConfigValueBuildTime(pageConfig, configName, 'boolean');
|
|
118
119
|
if (configValue?.value === false) {
|
|
119
120
|
const configValueFilePathToShowToUser = getConfigValueFilePathToShowToUser(configValue.definedAtData);
|
|
120
121
|
assert(configValueFilePathToShowToUser);
|
|
@@ -217,7 +218,7 @@ async function callOnBeforePrerenderStartHooks(prerenderContext, renderContext,
|
|
|
217
218
|
if (doNotPrerenderList.find((p) => p.pageId === pageId)) {
|
|
218
219
|
return;
|
|
219
220
|
}
|
|
220
|
-
const prerenderResult = await executeHook(() => hookFn(), { hookName, hookFilePath, hookTimeout });
|
|
221
|
+
const prerenderResult = await executeHook(() => hookFn(), { hookName, hookFilePath, hookTimeout }, null);
|
|
221
222
|
const result = normalizeOnPrerenderHookResult(prerenderResult, hookFilePath, hookName);
|
|
222
223
|
result.forEach(({ url, pageContext }) => {
|
|
223
224
|
{
|
|
@@ -240,9 +241,9 @@ async function callOnBeforePrerenderStartHooks(prerenderContext, renderContext,
|
|
|
240
241
|
prerenderContext.pageContexts.push(pageContextNew);
|
|
241
242
|
if (pageContext) {
|
|
242
243
|
objectAssign(pageContextNew, {
|
|
243
|
-
_pageContextAlreadyProvidedByOnPrerenderHook: true
|
|
244
|
-
...pageContext
|
|
244
|
+
_pageContextAlreadyProvidedByOnPrerenderHook: true
|
|
245
245
|
});
|
|
246
|
+
objectAssign(pageContextNew, pageContext);
|
|
246
247
|
}
|
|
247
248
|
});
|
|
248
249
|
})));
|
|
@@ -300,14 +301,11 @@ function createPageContext(urlOriginal, renderContext, prerenderContext) {
|
|
|
300
301
|
_prerenderContext: prerenderContext
|
|
301
302
|
};
|
|
302
303
|
const pageContextInit = {
|
|
303
|
-
urlOriginal
|
|
304
|
-
...prerenderContext.pageContextInit
|
|
304
|
+
urlOriginal
|
|
305
305
|
};
|
|
306
|
+
objectAssign(pageContextInit, prerenderContext.pageContextInit);
|
|
306
307
|
{
|
|
307
|
-
const pageContextInitEnhanced = getPageContextInitEnhanced(pageContextInit, renderContext
|
|
308
|
-
// We set `enumerable` to `false` to avoid computed URL properties from being iterated & copied in a onPrerenderStart() hook, e.g. /examples/i18n/
|
|
309
|
-
urlComputedPropsNonEnumerable: true
|
|
310
|
-
});
|
|
308
|
+
const pageContextInitEnhanced = getPageContextInitEnhanced(pageContextInit, renderContext);
|
|
311
309
|
objectAssign(pageContext, pageContextInitEnhanced);
|
|
312
310
|
}
|
|
313
311
|
return pageContext;
|
|
@@ -382,6 +380,8 @@ async function callOnPrerenderStartHook(prerenderContext, renderContext) {
|
|
|
382
380
|
pageContext._urlOriginalBeforeHook = pageContext.urlOriginal;
|
|
383
381
|
});
|
|
384
382
|
const docLink = 'https://vike.dev/i18n#pre-rendering';
|
|
383
|
+
// Set `enumerable` to `false` to avoid computed URL properties from being iterated & copied in onPrerenderStart() hook, e.g. /examples/i18n/
|
|
384
|
+
const { restoreEnumerable, addPageContextComputedUrl } = makePageContextComputedUrlNonEnumerable(prerenderContext.pageContexts);
|
|
385
385
|
let result = await executeHook(() => hookFn({
|
|
386
386
|
pageContexts: prerenderContext.pageContexts,
|
|
387
387
|
// TODO/v1-release: remove warning
|
|
@@ -392,7 +392,8 @@ async function callOnPrerenderStartHook(prerenderContext, renderContext) {
|
|
|
392
392
|
});
|
|
393
393
|
return prerenderContext.pageContexts;
|
|
394
394
|
}
|
|
395
|
-
}), onPrerenderStartHook);
|
|
395
|
+
}), onPrerenderStartHook, null);
|
|
396
|
+
restoreEnumerable();
|
|
396
397
|
if (result === null || result === undefined) {
|
|
397
398
|
return;
|
|
398
399
|
}
|
|
@@ -430,9 +431,8 @@ async function callOnPrerenderStartHook(prerenderContext, renderContext) {
|
|
|
430
431
|
hookName
|
|
431
432
|
};
|
|
432
433
|
}
|
|
433
|
-
// Restore as URL computed props are lost when user makes a pageContext copy
|
|
434
|
-
addUrlComputedProps(pageContext);
|
|
435
434
|
});
|
|
435
|
+
addPageContextComputedUrl(prerenderContext.pageContexts);
|
|
436
436
|
}
|
|
437
437
|
async function routeAndPrerender(prerenderContext, concurrencyLimit, onComplete) {
|
|
438
438
|
const globalContext = getGlobalContext();
|
|
@@ -474,7 +474,7 @@ async function routeAndPrerender(prerenderContext, concurrencyLimit, onComplete)
|
|
|
474
474
|
if (pageContext._pageConfigs.length > 0) {
|
|
475
475
|
const pageConfig = pageContext._pageConfigs.find((p) => p.pageId === pageId);
|
|
476
476
|
assert(pageConfig);
|
|
477
|
-
usesClientRouter =
|
|
477
|
+
usesClientRouter = getConfigValueRuntime(pageConfig, 'clientRouting', 'boolean')?.value ?? false;
|
|
478
478
|
}
|
|
479
479
|
else {
|
|
480
480
|
usesClientRouter = globalContext.pluginManifest.usesClientRouter;
|
|
@@ -714,3 +714,23 @@ function assertIsNotAbort(err, urlOr404) {
|
|
|
714
714
|
assert(abortCall);
|
|
715
715
|
assertUsage(false, `${pc.cyan(abortCall)} thrown${thrownBy} while pre-rendering ${urlOr404} but ${pc.cyan(abortCaller)} isn't supported for pre-rendered pages`);
|
|
716
716
|
}
|
|
717
|
+
function makePageContextComputedUrlNonEnumerable(pageContexts) {
|
|
718
|
+
change(false);
|
|
719
|
+
return { restoreEnumerable, addPageContextComputedUrl };
|
|
720
|
+
function restoreEnumerable() {
|
|
721
|
+
change(true);
|
|
722
|
+
}
|
|
723
|
+
function addPageContextComputedUrl(pageContexts) {
|
|
724
|
+
// Add URL computed props to the user-generated pageContext copies
|
|
725
|
+
pageContexts.forEach((pageContext) => {
|
|
726
|
+
const pageContextUrlComputed = getPageContextUrlComputed(pageContext);
|
|
727
|
+
objectAssign(pageContext, pageContextUrlComputed);
|
|
728
|
+
});
|
|
729
|
+
}
|
|
730
|
+
function change(enumerable) {
|
|
731
|
+
pageContexts.forEach((pageContext) => {
|
|
732
|
+
changeEnumerable(pageContext, 'urlPathname', enumerable);
|
|
733
|
+
changeEnumerable(pageContext, 'urlParsed', enumerable);
|
|
734
|
+
});
|
|
735
|
+
}
|
|
736
|
+
}
|
|
@@ -107,7 +107,7 @@ async function getHtmlTags(pageContext, injectToStream, injectFilter) {
|
|
|
107
107
|
});
|
|
108
108
|
}
|
|
109
109
|
// The JavaScript entry <script> tag
|
|
110
|
-
const scriptEntry = await mergeScriptEntries(pageAssets
|
|
110
|
+
const scriptEntry = await mergeScriptEntries(pageAssets);
|
|
111
111
|
if (scriptEntry) {
|
|
112
112
|
htmlTags.push({
|
|
113
113
|
htmlTag: scriptEntry,
|
|
@@ -128,11 +128,11 @@ async function getHtmlTags(pageContext, injectToStream, injectFilter) {
|
|
|
128
128
|
});
|
|
129
129
|
return htmlTags;
|
|
130
130
|
}
|
|
131
|
-
async function mergeScriptEntries(pageAssets
|
|
131
|
+
async function mergeScriptEntries(pageAssets) {
|
|
132
132
|
const scriptEntries = pageAssets.filter((pageAsset) => pageAsset.isEntry && pageAsset.assetType === 'script');
|
|
133
133
|
const viteScripts = await getViteDevScripts();
|
|
134
134
|
const scriptTagsHtml = `${viteScripts}${scriptEntries.map((asset) => inferAssetTag(asset)).join('')}`;
|
|
135
|
-
const scriptTag = mergeScriptTags(scriptTagsHtml
|
|
135
|
+
const scriptTag = mergeScriptTags(scriptTagsHtml);
|
|
136
136
|
return scriptTag;
|
|
137
137
|
}
|
|
138
138
|
function getPageContextJsonScriptTag(pageContext) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { getViteDevScripts };
|
|
2
2
|
import { getGlobalContext } from '../../globalContext.js';
|
|
3
|
-
import { assert, assertUsage } from '../../utils.js';
|
|
3
|
+
import { assert, assertUsage, assertWarning } from '../../utils.js';
|
|
4
4
|
import pc from '@brillout/picocolors';
|
|
5
5
|
async function getViteDevScripts() {
|
|
6
6
|
const globalContext = getGlobalContext();
|
|
@@ -16,7 +16,8 @@ async function getViteDevScripts() {
|
|
|
16
16
|
assertUsage(!fakeHtml.startsWith(fakeHtmlBegin.replace(' ', '')), 'Vite plugins that minify the HTML are not supported by vike, see https://github.com/vikejs/vike/issues/224');
|
|
17
17
|
assertUsage(fakeHtml.startsWith(fakeHtmlBegin) && fakeHtml.endsWith(fakeHtmlEnd), 'You are using a Vite Plugin that transforms the HTML in a way that conflicts with vike. Create a new GitHub ticket to discuss a solution.');
|
|
18
18
|
const viteInjection = fakeHtml.slice(fakeHtmlBegin.length, -1 * fakeHtmlEnd.length);
|
|
19
|
-
assert(viteInjection.includes('script')
|
|
19
|
+
assert(viteInjection.includes('script'));
|
|
20
|
+
assertWarning(!viteInjection.includes('import('), 'Unexpected Vite HMR code. Reach out to a Vike maintainer on GitHub.', { onlyOnce: true });
|
|
20
21
|
const scriptTags = viteInjection;
|
|
21
22
|
return scriptTags;
|
|
22
23
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { mergeScriptTags };
|
|
2
|
-
declare function mergeScriptTags(scriptTagsHtml: string
|
|
2
|
+
declare function mergeScriptTags(scriptTagsHtml: string): string;
|