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
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.serializeConfigValues = void 0;
|
|
7
|
+
const assertIsNotProductionRuntime_js_1 = require("../../../utils/assertIsNotProductionRuntime.js");
|
|
8
|
+
const utils_js_1 = require("../../../node/plugin/utils.js");
|
|
9
|
+
const addImportStatement_js_1 = require("../../../node/plugin/plugins/importUserCode/addImportStatement.js");
|
|
10
|
+
const transformFileImports_js_1 = require("../../../node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transformFileImports.js");
|
|
11
|
+
const helpers_js_1 = require("../helpers.js");
|
|
12
|
+
const stringify_1 = require("@brillout/json-serializer/stringify");
|
|
13
|
+
const picocolors_1 = __importDefault(require("@brillout/picocolors"));
|
|
14
|
+
const REPLACE_ME_BEFORE = '__VIKE__REPLACE_ME_BEFORE__';
|
|
15
|
+
const REPLACE_ME_AFTER = '__VIKE__REPLACE_ME_AFTER__';
|
|
16
|
+
// This file is never loaded on the client-side but we save it under the vike/shared/ directory in order to collocate it with parsePageConfigs()
|
|
17
|
+
// - vike/shared/page-configs/serialize/parsePageConfigs.ts
|
|
18
|
+
// - parsePageConfigs() is loaded on both the client- and server-side.
|
|
19
|
+
(0, assertIsNotProductionRuntime_js_1.assertIsNotProductionRuntime)();
|
|
20
|
+
function serializeConfigValues(pageConfig, importStatements, isEnvMatch, tabspace) {
|
|
21
|
+
const lines = [];
|
|
22
|
+
tabspace += ' ';
|
|
23
|
+
Object.entries(pageConfig.configValuesComputed ?? {}).forEach(([configName, configValuesComputed]) => {
|
|
24
|
+
if (!isEnvMatch(configValuesComputed.configEnv))
|
|
25
|
+
return;
|
|
26
|
+
// Is there a use case for overriding computed values? If yes, then configValeSources has higher precedence
|
|
27
|
+
if (pageConfig.configValueSources[configName])
|
|
28
|
+
return;
|
|
29
|
+
const valueData = serializeWithJson(configValuesComputed.value, configName, null, importStatements);
|
|
30
|
+
const configValueBase = {
|
|
31
|
+
type: 'computed',
|
|
32
|
+
definedAtData: null
|
|
33
|
+
};
|
|
34
|
+
serializeConfigValue(configValueBase, valueData, configName, lines, tabspace);
|
|
35
|
+
});
|
|
36
|
+
Object.entries(pageConfig.configValueSources).forEach(([configName, sources]) => {
|
|
37
|
+
const configDef = pageConfig.configDefinitions[configName];
|
|
38
|
+
(0, utils_js_1.assert)(configDef);
|
|
39
|
+
if (!configDef.cumulative) {
|
|
40
|
+
const configValueSource = sources[0];
|
|
41
|
+
(0, utils_js_1.assert)(configValueSource);
|
|
42
|
+
(0, utils_js_1.assert)(sources.slice(1).every((s) => s.isOverriden === true));
|
|
43
|
+
if (!isEnvMatch(configValueSource.configEnv))
|
|
44
|
+
return;
|
|
45
|
+
const { valueData, definedAtFile } = serializeConfigValueSource(configValueSource, configName, importStatements);
|
|
46
|
+
const configValueBase = {
|
|
47
|
+
type: 'standard',
|
|
48
|
+
definedAtData: definedAtFile
|
|
49
|
+
};
|
|
50
|
+
serializeConfigValue(configValueBase, valueData, configName, lines, tabspace);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
const valueDataList = [];
|
|
54
|
+
const definedAtData = [];
|
|
55
|
+
sources
|
|
56
|
+
.filter((s) => !s.isOverriden)
|
|
57
|
+
.forEach((configValueSource) => {
|
|
58
|
+
if (!isEnvMatch(configValueSource.configEnv))
|
|
59
|
+
return;
|
|
60
|
+
const { valueData, definedAtFile } = serializeConfigValueSource(configValueSource, configName, importStatements);
|
|
61
|
+
valueDataList.push(valueData);
|
|
62
|
+
definedAtData.push(definedAtFile);
|
|
63
|
+
});
|
|
64
|
+
if (valueDataList.length === 0)
|
|
65
|
+
return;
|
|
66
|
+
const configValueBase = {
|
|
67
|
+
type: 'cumulative',
|
|
68
|
+
definedAtData
|
|
69
|
+
};
|
|
70
|
+
serializeConfigValue(configValueBase, valueDataList, configName, lines, tabspace);
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
return lines;
|
|
74
|
+
}
|
|
75
|
+
exports.serializeConfigValues = serializeConfigValues;
|
|
76
|
+
function serializeConfigValueSource(configValueSource, configName, importStatements) {
|
|
77
|
+
(0, utils_js_1.assert)(configValueSource.isOverriden === false);
|
|
78
|
+
let valueData;
|
|
79
|
+
if ('value' in configValueSource) {
|
|
80
|
+
valueData = serializeWithJson(configValueSource.value, configName, configValueSource.definedAtFilePath, importStatements);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
valueData = serializeWithImport(configValueSource, importStatements);
|
|
84
|
+
}
|
|
85
|
+
const definedAtFile = {
|
|
86
|
+
filePathToShowToUser: configValueSource.definedAtFilePath.filePathToShowToUser,
|
|
87
|
+
fileExportPathToShowToUser: configValueSource.definedAtFilePath.fileExportPathToShowToUser
|
|
88
|
+
};
|
|
89
|
+
return { valueData, definedAtFile };
|
|
90
|
+
}
|
|
91
|
+
function serializeConfigValue(configValueBase, valueData, configName, lines, tabspace) {
|
|
92
|
+
lineAdd(`[${JSON.stringify(configName)}]: {`);
|
|
93
|
+
{
|
|
94
|
+
tab();
|
|
95
|
+
lineAdd(`type: "${configValueBase.type}",`);
|
|
96
|
+
lineAdd(`definedAtData: ${JSON.stringify(configValueBase.definedAtData)},`);
|
|
97
|
+
lineAdd(`valueSerialized:`);
|
|
98
|
+
if (!Array.isArray(valueData)) {
|
|
99
|
+
serializeValueData(valueData);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
lineAppend(' [');
|
|
103
|
+
valueData.forEach(serializeValueData);
|
|
104
|
+
lineAppend(` ],`);
|
|
105
|
+
}
|
|
106
|
+
untab();
|
|
107
|
+
}
|
|
108
|
+
lineAdd('},');
|
|
109
|
+
return;
|
|
110
|
+
function serializeValueData(valueData) {
|
|
111
|
+
lineAppend(` {`);
|
|
112
|
+
tab();
|
|
113
|
+
lineAdd(`type: "${valueData.type}",`);
|
|
114
|
+
const valueProp = valueData.type !== 'plus-file' ? 'value' : 'exportValues';
|
|
115
|
+
lineAdd(`${valueProp}: ${valueData.valueAsJsCode},`);
|
|
116
|
+
untab();
|
|
117
|
+
lineAdd(`},`);
|
|
118
|
+
}
|
|
119
|
+
function lineAppend(str) {
|
|
120
|
+
const i = lines.length - 1;
|
|
121
|
+
lines[i] = lines[i] += str;
|
|
122
|
+
}
|
|
123
|
+
function lineAdd(str) {
|
|
124
|
+
lines.push(`${tabspace}${str}`);
|
|
125
|
+
}
|
|
126
|
+
function tab() {
|
|
127
|
+
tabspace += ' ';
|
|
128
|
+
}
|
|
129
|
+
function untab() {
|
|
130
|
+
tabspace = tabspace.slice(2);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
function serializeWithImport(configValueSource, importStatements) {
|
|
134
|
+
(0, utils_js_1.assert)(!configValueSource.valueIsFilePath);
|
|
135
|
+
const { valueIsImportedAtRuntime, valueIsDefinedByPlusFile, definedAtFilePath } = configValueSource;
|
|
136
|
+
(0, utils_js_1.assert)(valueIsImportedAtRuntime);
|
|
137
|
+
const { filePathAbsoluteVite, fileExportName } = definedAtFilePath;
|
|
138
|
+
if (valueIsDefinedByPlusFile)
|
|
139
|
+
(0, utils_js_1.assert)(fileExportName === undefined);
|
|
140
|
+
const { importName } = (0, addImportStatement_js_1.addImportStatement)(importStatements, filePathAbsoluteVite, fileExportName || '*');
|
|
141
|
+
return {
|
|
142
|
+
type: valueIsDefinedByPlusFile ? 'plus-file' : 'pointer-import',
|
|
143
|
+
valueAsJsCode: importName
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
function serializeWithJson(value, configName, definedAtData, importStatements) {
|
|
147
|
+
const valueAsJsCode = valueToJson(value, configName, definedAtData, importStatements);
|
|
148
|
+
return {
|
|
149
|
+
type: 'js-serialized',
|
|
150
|
+
valueAsJsCode
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
function valueToJson(value, configName, definedAtData, importStatements) {
|
|
154
|
+
const valueName = `config${(0, utils_js_1.getPropAccessNotation)(configName)}`;
|
|
155
|
+
let configValueSerialized;
|
|
156
|
+
try {
|
|
157
|
+
configValueSerialized = (0, stringify_1.stringify)(value, {
|
|
158
|
+
valueName,
|
|
159
|
+
forbidReactElements: true,
|
|
160
|
+
replacer(_, value) {
|
|
161
|
+
if (typeof value === 'string') {
|
|
162
|
+
const importData = (0, transformFileImports_js_1.parsePointerImportData)(value);
|
|
163
|
+
if (importData) {
|
|
164
|
+
const { importName } = (0, addImportStatement_js_1.addImportStatement)(importStatements, importData.importPath, importData.exportName);
|
|
165
|
+
const replacement = [REPLACE_ME_BEFORE, importName, REPLACE_ME_AFTER].join('');
|
|
166
|
+
return { replacement };
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
catch (err) {
|
|
173
|
+
logJsonSerializeError(err, configName, definedAtData);
|
|
174
|
+
(0, utils_js_1.assert)(false);
|
|
175
|
+
}
|
|
176
|
+
configValueSerialized = configValueSerialized.replaceAll(`"${REPLACE_ME_BEFORE}`, '');
|
|
177
|
+
configValueSerialized = configValueSerialized.replaceAll(`${REPLACE_ME_AFTER}"`, '');
|
|
178
|
+
(0, utils_js_1.assert)(!configValueSerialized.includes(REPLACE_ME_BEFORE));
|
|
179
|
+
(0, utils_js_1.assert)(!configValueSerialized.includes(REPLACE_ME_AFTER));
|
|
180
|
+
return configValueSerialized;
|
|
181
|
+
}
|
|
182
|
+
function logJsonSerializeError(err, configName, definedAtData) {
|
|
183
|
+
/*
|
|
184
|
+
// import { isJsonSerializerError } from '@brillout/json-serializer/stringify'
|
|
185
|
+
let serializationErrMsg = ''
|
|
186
|
+
if (isJsonSerializerError(err)) {
|
|
187
|
+
serializationErrMsg = err.messageCore
|
|
188
|
+
} else {
|
|
189
|
+
// When a property getter throws an error
|
|
190
|
+
console.error('Serialization error:')
|
|
191
|
+
console.error(err)
|
|
192
|
+
serializationErrMsg = 'see serialization error printed above'
|
|
193
|
+
}
|
|
194
|
+
//*/
|
|
195
|
+
const configValueFilePathToShowToUser = (0, helpers_js_1.getConfigValueFilePathToShowToUser)(definedAtData);
|
|
196
|
+
(0, utils_js_1.assert)(configValueFilePathToShowToUser);
|
|
197
|
+
(0, utils_js_1.assertUsage)(false, `${picocolors_1.default.cyan(configName)} defined by ${configValueFilePathToShowToUser} must be defined over a so-called "pointer import", see https://vike.dev/config#pointer-imports`);
|
|
198
|
+
}
|
|
@@ -23,7 +23,7 @@ async function executeGuardHook(pageContext, prepareForUserConsumption) {
|
|
|
23
23
|
const res = prepareForUserConsumption(pageContext);
|
|
24
24
|
if (res)
|
|
25
25
|
pageContextForUserConsumption = res;
|
|
26
|
-
const hookResult = await (0, executeHook_js_1.executeHook)(() => guard(pageContextForUserConsumption), hook);
|
|
26
|
+
const hookResult = await (0, executeHook_js_1.executeHook)(() => guard(pageContextForUserConsumption), hook, pageContext);
|
|
27
27
|
(0, utils_js_1.assertUsage)(hookResult === undefined, `${errIntro} ${hook.hookFilePath} returns a value, but guard() shouldn't return any value`);
|
|
28
28
|
}
|
|
29
29
|
exports.executeGuardHook = executeGuardHook;
|
|
@@ -42,7 +42,7 @@ async function getPageContextFromHook(onBeforeRouteHook, pageContext) {
|
|
|
42
42
|
let hookReturn = onBeforeRouteHook.hookFn(pageContext);
|
|
43
43
|
(0, resolveRouteFunction_js_1.assertSyncRouting)(hookReturn, `The onBeforeRoute() hook ${onBeforeRouteHook.hookFilePath}`);
|
|
44
44
|
// TODO/v1-release: make executeOnBeforeRouteHook() and route() sync
|
|
45
|
-
hookReturn = await (0, executeHook_js_1.executeHook)(() => hookReturn, onBeforeRouteHook);
|
|
45
|
+
hookReturn = await (0, executeHook_js_1.executeHook)(() => hookReturn, onBeforeRouteHook, pageContext);
|
|
46
46
|
const errPrefix = `The onBeforeRoute() hook defined by ${onBeforeRouteHook.hookFilePath}`;
|
|
47
47
|
(0, utils_js_1.assertUsage)(hookReturn === null ||
|
|
48
48
|
hookReturn === undefined ||
|
|
@@ -11,7 +11,7 @@ if ((0, isBrowser_js_1.isBrowser)()) {
|
|
|
11
11
|
(0, assertRoutingType_js_1.assertClientRouting)();
|
|
12
12
|
}
|
|
13
13
|
const utils_js_1 = require("./utils.js");
|
|
14
|
-
const
|
|
14
|
+
const getPageContextUrlComputed_js_1 = require("../getPageContextUrlComputed.js");
|
|
15
15
|
const resolvePrecedence_js_1 = require("./resolvePrecedence.js");
|
|
16
16
|
const resolveRouteString_js_1 = require("./resolveRouteString.js");
|
|
17
17
|
const resolveRouteFunction_js_1 = require("./resolveRouteFunction.js");
|
|
@@ -20,7 +20,7 @@ const debug_js_1 = require("./debug.js");
|
|
|
20
20
|
const picocolors_1 = __importDefault(require("@brillout/picocolors"));
|
|
21
21
|
async function route(pageContextForRoute) {
|
|
22
22
|
(0, debug_js_1.debug)('Pages routes:', pageContextForRoute._pageRoutes);
|
|
23
|
-
(0,
|
|
23
|
+
(0, getPageContextUrlComputed_js_1.assertPageContextUrl)(pageContextForRoute);
|
|
24
24
|
const pageContextFromRoute = {};
|
|
25
25
|
// onBeforeRoute()
|
|
26
26
|
const pageContextFromOnBeforeRouteHook = await (0, executeOnBeforeRouteHook_js_1.executeOnBeforeRouteHook)(pageContextForRoute);
|
|
@@ -31,7 +31,7 @@ function getPageRoutes(filesystemRoots, pageFilesAll, pageConfigs, allPageIds) {
|
|
|
31
31
|
let pageRoute = null;
|
|
32
32
|
{
|
|
33
33
|
const configName = 'route';
|
|
34
|
-
const configValue = (0, getConfigValue_js_1.
|
|
34
|
+
const configValue = (0, getConfigValue_js_1.getConfigValueRuntime)(pageConfig, configName);
|
|
35
35
|
if (configValue) {
|
|
36
36
|
const route = configValue.value;
|
|
37
37
|
(0, utils_js_1.assert)(configValue.definedAtData);
|
|
@@ -47,7 +47,7 @@ function getPageRoutes(filesystemRoots, pageFilesAll, pageConfigs, allPageIds) {
|
|
|
47
47
|
}
|
|
48
48
|
else {
|
|
49
49
|
(0, utils_js_1.assert)((0, utils_js_2.isCallable)(route));
|
|
50
|
-
if ((0, getConfigValue_js_1.
|
|
50
|
+
if ((0, getConfigValue_js_1.getConfigValueRuntime)(pageConfig, 'iKnowThePerformanceRisksOfAsyncRouteFunctions', 'boolean'))
|
|
51
51
|
(0, resolveRouteFunction_js_1.warnDeprecatedAllowKey)();
|
|
52
52
|
pageRoute = {
|
|
53
53
|
pageId,
|
|
@@ -4,11 +4,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.warnDeprecatedAllowKey = exports.assertSyncRouting = exports.assertRouteParams = exports.resolveRouteFunction = void 0;
|
|
7
|
-
const
|
|
7
|
+
const getPageContextUrlComputed_js_1 = require("../getPageContextUrlComputed.js");
|
|
8
8
|
const utils_js_1 = require("./utils.js");
|
|
9
9
|
const picocolors_1 = __importDefault(require("@brillout/picocolors"));
|
|
10
10
|
async function resolveRouteFunction(routeFunction, pageContext, routeDefinedAtString) {
|
|
11
|
-
(0,
|
|
11
|
+
(0, getPageContextUrlComputed_js_1.assertPageContextUrl)(pageContext);
|
|
12
12
|
let result = routeFunction(pageContext);
|
|
13
13
|
assertSyncRouting(result, `The Route Function ${routeDefinedAtString}`);
|
|
14
14
|
// TODO/v1-release: make resolveRouteFunction() and route() sync
|
|
@@ -4,14 +4,10 @@ exports.sortPageContext = void 0;
|
|
|
4
4
|
const utils_js_1 = require("./utils.js");
|
|
5
5
|
// Sort `pageContext` keys alphabetically, in order to make reading `console.log(pageContext)` easier
|
|
6
6
|
function sortPageContext(pageContext) {
|
|
7
|
-
|
|
8
|
-
for (const key
|
|
7
|
+
let descriptors = Object.getOwnPropertyDescriptors(pageContext);
|
|
8
|
+
for (const key of Object.keys(pageContext))
|
|
9
9
|
delete pageContext[key];
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
.sort(([key1], [key2]) => (0, utils_js_1.compareString)(key1, key2))
|
|
13
|
-
.forEach(([key, val]) => {
|
|
14
|
-
pageContext[key] = val;
|
|
15
|
-
});
|
|
10
|
+
descriptors = Object.fromEntries(Object.entries(descriptors).sort(([key1], [key2]) => (0, utils_js_1.compareString)(key1, key2)));
|
|
11
|
+
Object.defineProperties(pageContext, descriptors);
|
|
16
12
|
}
|
|
17
13
|
exports.sortPageContext = sortPageContext;
|
package/dist/cjs/shared/utils.js
CHANGED
|
@@ -41,3 +41,5 @@ __exportStar(require("../utils/checkType.js"), exports);
|
|
|
41
41
|
__exportStar(require("../utils/getValuePrintable.js"), exports);
|
|
42
42
|
__exportStar(require("../utils/escapeRegex.js"), exports);
|
|
43
43
|
__exportStar(require("../utils/isArray.js"), exports);
|
|
44
|
+
__exportStar(require("../utils/changeEnumerable.js"), exports);
|
|
45
|
+
__exportStar(require("../utils/objectDefineProperty.js"), exports);
|
package/dist/cjs/utils/assert.js
CHANGED
|
@@ -92,7 +92,7 @@ function assertWarning(condition, msg, { onlyOnce, showStackTrace }) {
|
|
|
92
92
|
}
|
|
93
93
|
globalObject.onBeforeLog?.();
|
|
94
94
|
if (showStackTrace) {
|
|
95
|
-
const err =
|
|
95
|
+
const err = (0, createErrorWithCleanStackTrace_js_1.createErrorWithCleanStackTrace)(msg, numberOfStackTraceLinesToRemove);
|
|
96
96
|
globalObject.showStackTraceList.add(err);
|
|
97
97
|
globalObject.logger(err, 'warn');
|
|
98
98
|
}
|
|
@@ -8,6 +8,6 @@ function assertNodeVersion() {
|
|
|
8
8
|
if (!(0, isNodeJS_js_1.isNodeJS)())
|
|
9
9
|
return;
|
|
10
10
|
const version = process.versions.node;
|
|
11
|
-
(0, assertVersion_js_1.assertVersion)('Node.js', version, '
|
|
11
|
+
(0, assertVersion_js_1.assertVersion)('Node.js', version, '18.0.0');
|
|
12
12
|
}
|
|
13
13
|
exports.assertNodeVersion = assertNodeVersion;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.changeEnumerable = void 0;
|
|
4
|
+
/** Change enumerability of an object property. */
|
|
5
|
+
function changeEnumerable(obj, prop, enumerable) {
|
|
6
|
+
const descriptor = Object.getOwnPropertyDescriptor(obj, prop);
|
|
7
|
+
Object.defineProperty(obj, prop, { ...descriptor, enumerable });
|
|
8
|
+
}
|
|
9
|
+
exports.changeEnumerable = changeEnumerable;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.escapeHtml = void 0;
|
|
4
|
+
// Copied from https://stackoverflow.com/questions/6234773/can-i-escape-html-special-chars-in-javascript/6234804#6234804
|
|
5
|
+
function escapeHtml(unsafeString) {
|
|
6
|
+
const safe = unsafeString
|
|
7
|
+
.replace(/&/g, '&')
|
|
8
|
+
.replace(/</g, '<')
|
|
9
|
+
.replace(/>/g, '>')
|
|
10
|
+
.replace(/"/g, '"')
|
|
11
|
+
.replace(/'/g, ''');
|
|
12
|
+
return safe;
|
|
13
|
+
}
|
|
14
|
+
exports.escapeHtml = escapeHtml;
|
|
@@ -2,9 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getPropAccessNotation = void 0;
|
|
4
4
|
function getPropAccessNotation(key) {
|
|
5
|
-
return
|
|
5
|
+
return typeof key === 'string' && /^[a-z0-9\$_]+$/i.test(key) ? `.${key}` : `[${JSON.stringify(key)}]`;
|
|
6
6
|
}
|
|
7
7
|
exports.getPropAccessNotation = getPropAccessNotation;
|
|
8
|
-
function isKeyDotNotationCompatible(key) {
|
|
9
|
-
return /^[a-z0-9\$_]+$/i.test(key);
|
|
10
|
-
}
|
|
@@ -1,23 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.hasProp = void 0;
|
|
4
|
-
// - https://2ality.com/2020/06/type-guards-assertion-functions-typescript.html
|
|
5
|
-
// - https://www.typescriptlang.org/play?#code/GYVwdgxgLglg9mABDAzgFQJ4AcCmdgAUAbgIYA2IOAXIiWBgDSJTbWIDkARnHGTnewCUNUhRzIUibr35gA3AFgAUKEiwEEzLnzFylGnUbNWNdmBABbTjgBOQkXvGpE5q7cUrw0eElRa8hKL6tPRMLLimKFA2MGAA5vaIQU6SUTHxHqreGn6sOskGocYRHOAA1mBwAO5gickSiOWVNZle6r7oeYGOhUbhbGmxcYgAvKVgFdW1wlI8fHSIAN7KiMiExeIjW+OTNeyIgksrq4g2OFAgNkjRlMcAvsdnF1cb+EmOo9v9Hg9KyhAIKK0GhNKajRAAFgATMplCQUChbFACLltIQSEwzJZrHZBIJ-oCZAA6MhwOIEEj4v6eNQ+WgIpEEAFgAAmMHaIImzTAM3hiJsUEkzLZ7SOShOa0QTIQIp8hyelzAx1WUAAFjZqi4cFVEABRGwamwEdgAQQZArpADESDAyEJlHcgA
|
|
6
4
|
const isCallable_js_1 = require("./isCallable.js");
|
|
7
5
|
const isObject_js_1 = require("./isObject.js");
|
|
8
6
|
const isArrayOfStrings_js_1 = require("./isArrayOfStrings.js");
|
|
9
7
|
const isObjectOfStrings_js_1 = require("./isObjectOfStrings.js");
|
|
10
8
|
const isArray_js_1 = require("./isArray.js");
|
|
11
|
-
function hasProp(obj, prop, type
|
|
9
|
+
function hasProp(obj, prop, type) {
|
|
12
10
|
if (!(0, isObject_js_1.isObject)(obj))
|
|
13
11
|
return false;
|
|
14
12
|
if (!(prop in obj)) {
|
|
15
13
|
return type === 'undefined';
|
|
16
14
|
}
|
|
17
|
-
if (type ===
|
|
15
|
+
if (type === undefined) {
|
|
18
16
|
return true;
|
|
19
17
|
}
|
|
20
18
|
const propValue = obj[prop];
|
|
19
|
+
if (type === 'undefined') {
|
|
20
|
+
return propValue === undefined;
|
|
21
|
+
}
|
|
21
22
|
if (type === 'array') {
|
|
22
23
|
return (0, isArray_js_1.isArray)(propValue);
|
|
23
24
|
}
|
|
@@ -39,9 +40,6 @@ function hasProp(obj, prop, type = 'unknown') {
|
|
|
39
40
|
if (type === 'null') {
|
|
40
41
|
return propValue === null;
|
|
41
42
|
}
|
|
42
|
-
if (type === 'undefined') {
|
|
43
|
-
return propValue === undefined;
|
|
44
|
-
}
|
|
45
43
|
if (type === 'true') {
|
|
46
44
|
return propValue === true;
|
|
47
45
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.normalizeHeaders = void 0;
|
|
4
|
+
function normalizeHeaders(
|
|
5
|
+
/* This type is precise, too precise which can be annoying: e.g. cannot pass a string[][] argument because it doesn't match the more precise [string,string][] type.
|
|
6
|
+
headersOriginal ConstructorParameters<typeof Headers>[0]
|
|
7
|
+
*/
|
|
8
|
+
headersOriginal) {
|
|
9
|
+
const headersStandard = new Headers(headersOriginal);
|
|
10
|
+
const headers = Object.fromEntries(headersStandard.entries());
|
|
11
|
+
return headers;
|
|
12
|
+
}
|
|
13
|
+
exports.normalizeHeaders = normalizeHeaders;
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.objectAssign = void 0;
|
|
4
4
|
// Same as Object.assign() but:
|
|
5
5
|
// - With type inference
|
|
6
|
-
// - Preserves property descriptors, which we need for preserving the getters added by
|
|
6
|
+
// - Preserves property descriptors, which we need for preserving the getters added by getPageContextUrlComputed()
|
|
7
7
|
function objectAssign(obj, objAddendum) {
|
|
8
8
|
if (objAddendum) {
|
|
9
9
|
Object.defineProperties(obj, Object.getOwnPropertyDescriptors(objAddendum));
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.objectDefineProperty = void 0;
|
|
4
|
+
/** Like Object.defineProperty() but with type inference */
|
|
5
|
+
function objectDefineProperty(obj, prop, { get, ...args }) {
|
|
6
|
+
Object.defineProperty(obj, prop, { ...args, get });
|
|
7
|
+
}
|
|
8
|
+
exports.objectDefineProperty = objectDefineProperty;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.objectKeys = exports.objectFromEntries = exports.objectEntries = void 0;
|
|
4
|
+
// export { forEach }
|
|
4
5
|
// https://stackoverflow.com/questions/60141960/typescript-key-value-relation-preserving-object-entries-type/75337277#75337277
|
|
5
6
|
/** Same as Object.entries() but with type inference */
|
|
6
7
|
function objectEntries(obj) {
|
|
@@ -19,8 +20,11 @@ function objectKeys(obj) {
|
|
|
19
20
|
return Object.keys(obj);
|
|
20
21
|
}
|
|
21
22
|
exports.objectKeys = objectKeys;
|
|
22
|
-
/*
|
|
23
|
-
function
|
|
24
|
-
|
|
23
|
+
/* Not used yet, but can be quite useful.
|
|
24
|
+
function forEach<Obj extends object>(
|
|
25
|
+
obj: Obj,
|
|
26
|
+
iterator: <Key extends keyof Obj>(key: Key, val: Obj[Key]) => void
|
|
27
|
+
): void {
|
|
28
|
+
Object.entries(obj).forEach(([key, val]) => iterator(key as keyof Obj, val))
|
|
25
29
|
}
|
|
26
|
-
|
|
30
|
+
//*/
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.PROJECT_VERSION = exports.projectInfo = void 0;
|
|
4
|
-
const PROJECT_VERSION = '0.4.
|
|
4
|
+
const PROJECT_VERSION = '0.4.172';
|
|
5
5
|
exports.PROJECT_VERSION = PROJECT_VERSION;
|
|
6
6
|
const projectInfo = {
|
|
7
7
|
projectName: 'Vike',
|
|
@@ -5,12 +5,14 @@ declare function createPageContext(urlOriginal: string): Promise<{
|
|
|
5
5
|
_urlHandler: null;
|
|
6
6
|
_urlRewrite: null;
|
|
7
7
|
_baseServer: string;
|
|
8
|
-
_pageFilesAll: import("../../shared/getPageFiles
|
|
9
|
-
_pageConfigs: import("../../
|
|
8
|
+
_pageFilesAll: import("../../shared/getPageFiles.js").PageFile[];
|
|
9
|
+
_pageConfigs: import("../../__internal/index.js").PageConfig[];
|
|
10
10
|
_pageConfigGlobal: import("../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
|
|
11
11
|
_allPageIds: string[];
|
|
12
12
|
_pageRoutes: import("../../shared/route/loadPageRoutes.js").PageRoutes;
|
|
13
13
|
_onBeforeRouteHook: import("../../shared/hooks/getHook.js").Hook | null;
|
|
14
|
-
} &
|
|
15
|
-
|
|
14
|
+
} & {
|
|
15
|
+
urlParsed: import("../../shared/getPageContextUrlComputed.js").Url;
|
|
16
|
+
urlPathname: string;
|
|
17
|
+
url: string;
|
|
16
18
|
}>;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
export { createPageContext };
|
|
2
|
-
import {
|
|
2
|
+
import { getPageContextUrlComputed } from '../../shared/getPageContextUrlComputed.js';
|
|
3
3
|
import { getPageFilesAll } from '../../shared/getPageFiles.js';
|
|
4
4
|
import { loadPageRoutes } from '../../shared/route/loadPageRoutes.js';
|
|
5
5
|
import { getBaseServer } from './getBaseServer.js';
|
|
6
|
-
import { assert, isBaseServer, getGlobalObject } from './utils.js';
|
|
6
|
+
import { assert, isBaseServer, getGlobalObject, objectAssign } from './utils.js';
|
|
7
7
|
const globalObject = getGlobalObject('createPageContext.ts', {});
|
|
8
8
|
async function createPageContext(urlOriginal) {
|
|
9
9
|
if (!globalObject.pageFilesData) {
|
|
@@ -26,6 +26,7 @@ async function createPageContext(urlOriginal) {
|
|
|
26
26
|
_pageRoutes: pageRoutes,
|
|
27
27
|
_onBeforeRouteHook: onBeforeRouteHook
|
|
28
28
|
};
|
|
29
|
-
|
|
29
|
+
const pageContextUrlComputed = getPageContextUrlComputed(pageContext);
|
|
30
|
+
objectAssign(pageContext, pageContextUrlComputed);
|
|
30
31
|
return pageContext;
|
|
31
32
|
}
|
|
@@ -10,7 +10,7 @@ import { preparePageContextForUserConsumptionClientSide } from '../shared/prepar
|
|
|
10
10
|
import { removeBuiltInOverrides } from './getPageContext/removeBuiltInOverrides.js';
|
|
11
11
|
import { getPageContextRequestUrl } from '../../shared/getPageContextRequestUrl.js';
|
|
12
12
|
import { getPageConfig } from '../../shared/page-configs/helpers.js';
|
|
13
|
-
import {
|
|
13
|
+
import { getConfigValueRuntime } from '../../shared/page-configs/getConfigValue.js';
|
|
14
14
|
import { assertOnBeforeRenderHookReturn } from '../../shared/assertOnBeforeRenderHookReturn.js';
|
|
15
15
|
import { executeGuardHook } from '../../shared/route/executeGuardHook.js';
|
|
16
16
|
import { AbortRender, isAbortPageContext } from '../../shared/route/abort.js';
|
|
@@ -32,7 +32,9 @@ async function getPageContextFromHooks_isHydration(pageContext) {
|
|
|
32
32
|
_hasPageContextFromServer: true
|
|
33
33
|
};
|
|
34
34
|
for (const hookName of ['data', 'onBeforeRender']) {
|
|
35
|
-
const pageContextForHook = {
|
|
35
|
+
const pageContextForHook = {};
|
|
36
|
+
objectAssign(pageContextForHook, pageContext);
|
|
37
|
+
objectAssign(pageContextForHook, pageContextFromHooks);
|
|
36
38
|
if (hookClientOnlyExists(hookName, pageContextForHook)) {
|
|
37
39
|
const pageContextFromHook = await executeHookClientSide(hookName, pageContextForHook);
|
|
38
40
|
Object.assign(pageContextFromHooks, pageContextFromHook);
|
|
@@ -45,6 +47,9 @@ async function getPageContextFromHooks_isNotHydration(pageContext, isErrorPage)
|
|
|
45
47
|
isHydration: false,
|
|
46
48
|
_hasPageContextFromClient: false
|
|
47
49
|
};
|
|
50
|
+
const pageContextForCondition = {};
|
|
51
|
+
objectAssign(pageContextForCondition, pageContext);
|
|
52
|
+
objectAssign(pageContextForCondition, pageContextFromHooks);
|
|
48
53
|
let hasPageContextFromServer = false;
|
|
49
54
|
// If pageContextInit has some client data or if one of the hooks guard(), data() or onBeforeRender() is server-side
|
|
50
55
|
// only, then we need to fetch pageContext from the server.
|
|
@@ -53,7 +58,7 @@ async function getPageContextFromHooks_isNotHydration(pageContext, isErrorPage)
|
|
|
53
58
|
// For the error page, we cannot fetch pageContext from the server because the pageContext JSON request is based on the URL
|
|
54
59
|
!isErrorPage &&
|
|
55
60
|
// true if pageContextInit has some client data or at least one of the data() and onBeforeRender() hooks is server-side only:
|
|
56
|
-
(await hasPageContextServer(
|
|
61
|
+
(await hasPageContextServer(pageContextForCondition))) {
|
|
57
62
|
const res = await fetchPageContextFromServer(pageContext);
|
|
58
63
|
if ('is404ServerSideRouted' in res)
|
|
59
64
|
return { is404ServerSideRouted: true };
|
|
@@ -70,11 +75,10 @@ async function getPageContextFromHooks_isNotHydration(pageContext, isErrorPage)
|
|
|
70
75
|
// Note: for the error page, we also execute the client-side data() and onBeforeRender() hooks, but maybe we
|
|
71
76
|
// shouldn't? The server-side does it as well (but maybe it shouldn't).
|
|
72
77
|
for (const hookName of ['guard', 'data', 'onBeforeRender']) {
|
|
73
|
-
const pageContextForHook = {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
};
|
|
78
|
+
const pageContextForHook = {};
|
|
79
|
+
objectAssign(pageContextForHook, { _hasPageContextFromServer: hasPageContextFromServer });
|
|
80
|
+
objectAssign(pageContextForHook, pageContext);
|
|
81
|
+
objectAssign(pageContextForHook, pageContextFromHooks);
|
|
78
82
|
if (hookName === 'guard') {
|
|
79
83
|
if (!isErrorPage &&
|
|
80
84
|
// We don't need to call guard() on the client-side if we fetch pageContext from the server side. (Because the `${url}.pageContext.json` HTTP request will already trigger the routing and guard() hook on the server-side.)
|
|
@@ -108,7 +112,7 @@ async function executeHookClientSide(hookName, pageContext) {
|
|
|
108
112
|
return null;
|
|
109
113
|
}
|
|
110
114
|
const pageContextForUserConsumption = preparePageContextForUserConsumptionClientSide(pageContext, true);
|
|
111
|
-
const hookResult = await executeHook(() => hook.hookFn(pageContextForUserConsumption), hook);
|
|
115
|
+
const hookResult = await executeHook(() => hook.hookFn(pageContextForUserConsumption), hook, pageContext);
|
|
112
116
|
const pageContextFromHook = {};
|
|
113
117
|
if (hookName === 'onBeforeRender') {
|
|
114
118
|
assertOnBeforeRenderHookReturn(hookResult, hook.hookFilePath);
|
|
@@ -165,7 +169,7 @@ async function hookServerOnlyExists(hookName, pageContext) {
|
|
|
165
169
|
if (pageContext._pageConfigs.length > 0) {
|
|
166
170
|
// V1
|
|
167
171
|
const pageConfig = getPageConfig(pageContext._pageId, pageContext._pageConfigs);
|
|
168
|
-
const hookEnv =
|
|
172
|
+
const hookEnv = getConfigValueRuntime(pageConfig, `${hookName}Env`)?.value ?? {};
|
|
169
173
|
assert(isObject(hookEnv));
|
|
170
174
|
return !!hookEnv.server && !hookEnv.client;
|
|
171
175
|
}
|
|
@@ -189,7 +193,7 @@ function hookClientOnlyExists(hookName, pageContext) {
|
|
|
189
193
|
if (pageContext._pageConfigs.length > 0) {
|
|
190
194
|
// V1
|
|
191
195
|
const pageConfig = getPageConfig(pageContext._pageId, pageContext._pageConfigs);
|
|
192
|
-
const hookEnv =
|
|
196
|
+
const hookEnv = getConfigValueRuntime(pageConfig, `${hookName}Env`)?.value ?? {};
|
|
193
197
|
assert(isObject(hookEnv));
|
|
194
198
|
return !!hookEnv.client && !hookEnv.server;
|
|
195
199
|
}
|
|
@@ -221,7 +225,7 @@ async function fetchPageContextFromServer(pageContext) {
|
|
|
221
225
|
}
|
|
222
226
|
// Is there a reason for having two different properties? Can't we use only one property? I guess/think the isServerSideError property was an attempt (a bad idea really) for rendering the error page even though an error occured on the server-side (which is a bad idea because the added complexity is non-negligible while the added value is minuscule since the error page usually doesn't have any (meaningful / server-side) hooks).
|
|
223
227
|
if ('serverSideError' in pageContextFromServer || isServerSideError in pageContextFromServer) {
|
|
224
|
-
throw getProjectError(`
|
|
228
|
+
throw getProjectError(`pageContext couldn't be fetched from server: an error occurred on the server-side (see your server logs)`);
|
|
225
229
|
}
|
|
226
230
|
assert(hasProp(pageContextFromServer, '_pageId', 'string'));
|
|
227
231
|
processPageContextFromServer(pageContextFromServer);
|
|
@@ -7,22 +7,30 @@ import { onLinkClick } from './onLinkClick.js';
|
|
|
7
7
|
import { setupNativeScrollRestoration } from './scrollRestoration.js';
|
|
8
8
|
import { autoSaveScrollPosition } from './setScrollPosition.js';
|
|
9
9
|
async function installClientRouter() {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
//
|
|
10
|
+
// Init navigation history and scroll restoration
|
|
11
|
+
initHistoryAndScroll();
|
|
12
|
+
// Render initial page
|
|
13
|
+
const renderPromise = render();
|
|
14
|
+
// Intercept <a> clicks
|
|
15
|
+
onLinkClick();
|
|
16
|
+
// Preserve stack track
|
|
17
|
+
await renderPromise;
|
|
18
|
+
}
|
|
19
|
+
function render() {
|
|
15
20
|
assert(getRenderCount() === 0);
|
|
16
|
-
const
|
|
21
|
+
const renderPromise = renderPageClientSide({
|
|
17
22
|
scrollTarget: 'preserve-scroll',
|
|
18
23
|
isBackwardNavigation: null,
|
|
19
24
|
isClientSideNavigation: false
|
|
20
25
|
});
|
|
21
26
|
assert(getRenderCount() === 1);
|
|
22
|
-
|
|
23
|
-
|
|
27
|
+
return renderPromise;
|
|
28
|
+
}
|
|
29
|
+
function initHistoryAndScroll() {
|
|
30
|
+
setupNativeScrollRestoration();
|
|
31
|
+
initHistoryState();
|
|
32
|
+
autoSaveScrollPosition();
|
|
33
|
+
monkeyPatchHistoryPushState();
|
|
24
34
|
// Handle back-/forward navigation
|
|
25
35
|
onBrowserHistoryNavigation();
|
|
26
|
-
// Only for full stack straces
|
|
27
|
-
await promise;
|
|
28
36
|
}
|