vike 0.4.171-commit-75e1588 → 0.4.171-commit-6e37128

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.
Files changed (116) hide show
  1. package/dist/cjs/node/plugin/plugins/buildConfig.js +3 -4
  2. package/dist/cjs/node/plugin/plugins/devConfig/determineOptimizeDeps.js +18 -15
  3. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +3 -3
  4. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +30 -74
  5. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigValuesAll.js +4 -42
  6. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.js +9 -49
  7. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/isRuntimeEnvMatch.js +6 -0
  8. package/dist/cjs/node/prerender/runPrerender.js +33 -13
  9. package/dist/cjs/node/prerender/utils.js +1 -0
  10. package/dist/cjs/node/runtime/renderPage/analyzePage.js +9 -7
  11. package/dist/cjs/node/runtime/renderPage/createHttpResponseObject/getCacheControl.js +1 -1
  12. package/dist/cjs/node/runtime/renderPage/executeOnRenderHtmlHook.js +7 -7
  13. package/dist/cjs/node/runtime/renderPage/loadUserFilesServerSide.js +4 -5
  14. package/dist/cjs/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.js +2 -2
  15. package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +6 -5
  16. package/dist/cjs/node/shared/assertV1Design.js +3 -4
  17. package/dist/cjs/shared/{addUrlComputedProps.js → getPageContextUrlComputed.js} +52 -42
  18. package/dist/cjs/shared/getPageFiles/analyzeClientSide.js +2 -2
  19. package/dist/cjs/shared/hooks/getHook.js +2 -2
  20. package/dist/cjs/shared/page-configs/getConfigValue.js +14 -17
  21. package/dist/cjs/shared/page-configs/getConfigValueBuildTime.js +70 -0
  22. package/dist/cjs/shared/page-configs/loadConfigValues.js +3 -12
  23. package/dist/cjs/shared/page-configs/serialize/assertPageConfigsSerialized.js +1 -2
  24. package/dist/cjs/shared/page-configs/serialize/parsePageConfigs.js +110 -16
  25. package/dist/cjs/shared/page-configs/serialize/serializeConfigValues.js +198 -0
  26. package/dist/cjs/shared/route/index.js +2 -2
  27. package/dist/cjs/shared/route/loadPageRoutes.js +2 -2
  28. package/dist/cjs/shared/route/resolveRouteFunction.js +2 -2
  29. package/dist/cjs/shared/utils.js +2 -0
  30. package/dist/cjs/utils/changeEnumerable.js +9 -0
  31. package/dist/cjs/utils/hasProp.js +5 -7
  32. package/dist/cjs/utils/objectAssign.js +1 -1
  33. package/dist/cjs/utils/objectDefineProperty.js +8 -0
  34. package/dist/cjs/utils/projectInfo.js +1 -1
  35. package/dist/esm/client/client-routing-runtime/createPageContext.d.ts +6 -4
  36. package/dist/esm/client/client-routing-runtime/createPageContext.js +4 -3
  37. package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.js +14 -10
  38. package/dist/esm/client/server-routing-runtime/getPageContext.d.ts +4 -4
  39. package/dist/esm/client/shared/loadUserFilesClientSide.js +4 -4
  40. package/dist/esm/node/plugin/plugins/buildConfig.js +3 -4
  41. package/dist/esm/node/plugin/plugins/devConfig/determineOptimizeDeps.js +18 -15
  42. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.d.ts +2 -1
  43. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +3 -3
  44. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +30 -74
  45. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigValuesAll.js +4 -42
  46. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.js +9 -49
  47. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/isRuntimeEnvMatch.d.ts +1 -0
  48. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/isRuntimeEnvMatch.js +6 -0
  49. package/dist/esm/node/prerender/runPrerender.js +35 -15
  50. package/dist/esm/node/prerender/utils.d.ts +1 -0
  51. package/dist/esm/node/prerender/utils.js +1 -0
  52. package/dist/esm/node/runtime/renderPage/analyzePage.js +9 -7
  53. package/dist/esm/node/runtime/renderPage/createHttpResponseObject/getCacheControl.js +2 -2
  54. package/dist/esm/node/runtime/renderPage/executeOnRenderHtmlHook.js +7 -7
  55. package/dist/esm/node/runtime/renderPage/loadUserFilesServerSide.d.ts +1 -9
  56. package/dist/esm/node/runtime/renderPage/loadUserFilesServerSide.js +4 -5
  57. package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.d.ts +2 -2
  58. package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.js +2 -2
  59. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +27 -50
  60. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +6 -5
  61. package/dist/esm/node/shared/assertV1Design.d.ts +2 -2
  62. package/dist/esm/node/shared/assertV1Design.js +3 -4
  63. package/dist/esm/shared/{addUrlComputedProps.d.ts → getPageContextUrlComputed.d.ts} +23 -21
  64. package/dist/esm/shared/{addUrlComputedProps.js → getPageContextUrlComputed.js} +52 -42
  65. package/dist/esm/shared/getPageFiles/analyzeClientSide.js +3 -3
  66. package/dist/esm/shared/hooks/getHook.d.ts +2 -2
  67. package/dist/esm/shared/hooks/getHook.js +3 -3
  68. package/dist/esm/shared/page-configs/PageConfig.d.ts +10 -4
  69. package/dist/esm/shared/page-configs/getConfigValue.d.ts +12 -12
  70. package/dist/esm/shared/page-configs/getConfigValue.js +13 -16
  71. package/dist/esm/shared/page-configs/getConfigValueBuildTime.d.ts +9 -0
  72. package/dist/esm/shared/page-configs/getConfigValueBuildTime.js +67 -0
  73. package/dist/esm/shared/page-configs/loadConfigValues.js +3 -12
  74. package/dist/esm/shared/page-configs/serialize/PageConfigSerialized.d.ts +15 -19
  75. package/dist/esm/shared/page-configs/serialize/assertPageConfigsSerialized.js +1 -2
  76. package/dist/esm/shared/page-configs/serialize/parsePageConfigs.d.ts +4 -1
  77. package/dist/esm/shared/page-configs/serialize/parsePageConfigs.js +109 -15
  78. package/dist/esm/shared/page-configs/serialize/serializeConfigValues.d.ts +5 -0
  79. package/dist/esm/shared/page-configs/serialize/serializeConfigValues.js +192 -0
  80. package/dist/esm/shared/route/index.d.ts +3 -3
  81. package/dist/esm/shared/route/index.js +2 -2
  82. package/dist/esm/shared/route/loadPageRoutes.js +3 -3
  83. package/dist/esm/shared/route/resolveRouteFunction.d.ts +2 -2
  84. package/dist/esm/shared/route/resolveRouteFunction.js +2 -2
  85. package/dist/esm/shared/types.d.ts +4 -4
  86. package/dist/esm/shared/utils.d.ts +2 -0
  87. package/dist/esm/shared/utils.js +2 -0
  88. package/dist/esm/types/index.d.ts +1 -1
  89. package/dist/esm/utils/changeEnumerable.d.ts +2 -0
  90. package/dist/esm/utils/changeEnumerable.js +5 -0
  91. package/dist/esm/utils/hasProp.d.ts +4 -13
  92. package/dist/esm/utils/hasProp.js +5 -7
  93. package/dist/esm/utils/objectAssign.js +1 -1
  94. package/dist/esm/utils/objectDefineProperty.d.ts +4 -0
  95. package/dist/esm/utils/objectDefineProperty.js +4 -0
  96. package/dist/esm/utils/projectInfo.d.ts +2 -2
  97. package/dist/esm/utils/projectInfo.js +1 -1
  98. package/package.json +2 -2
  99. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getConfigValuesSerialized.js +0 -101
  100. package/dist/cjs/node/plugin/shared/getConfigValueSourcesNotOverriden.js +0 -14
  101. package/dist/cjs/node/shared/getClientEntry.js +0 -12
  102. package/dist/cjs/shared/page-configs/serialize/parseConfigValuesImported.js +0 -85
  103. package/dist/cjs/shared/page-configs/serialize/parseConfigValuesSerialized.js +0 -24
  104. package/dist/cjs/shared/page-configs/serialize/serializeConfigValue.js +0 -49
  105. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getConfigValuesSerialized.d.ts +0 -5
  106. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getConfigValuesSerialized.js +0 -95
  107. package/dist/esm/node/plugin/shared/getConfigValueSourcesNotOverriden.d.ts +0 -5
  108. package/dist/esm/node/plugin/shared/getConfigValueSourcesNotOverriden.js +0 -11
  109. package/dist/esm/node/shared/getClientEntry.d.ts +0 -3
  110. package/dist/esm/node/shared/getClientEntry.js +0 -9
  111. package/dist/esm/shared/page-configs/serialize/parseConfigValuesImported.d.ts +0 -4
  112. package/dist/esm/shared/page-configs/serialize/parseConfigValuesImported.js +0 -82
  113. package/dist/esm/shared/page-configs/serialize/parseConfigValuesSerialized.d.ts +0 -4
  114. package/dist/esm/shared/page-configs/serialize/parseConfigValuesSerialized.js +0 -21
  115. package/dist/esm/shared/page-configs/serialize/serializeConfigValue.d.ts +0 -6
  116. package/dist/esm/shared/page-configs/serialize/serializeConfigValue.js +0 -46
@@ -1,23 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parsePageConfigs = void 0;
4
- const parseConfigValuesImported_js_1 = require("./parseConfigValuesImported.js");
3
+ exports.parseConfigValuesSerialized = exports.parsePageConfigs = void 0;
5
4
  const utils_js_1 = require("../../utils.js");
6
5
  const getConfigDefinedAt_js_1 = require("../getConfigDefinedAt.js");
7
- const parseConfigValuesSerialized_js_1 = require("./parseConfigValuesSerialized.js");
6
+ const parse_1 = require("@brillout/json-serializer/parse");
7
+ const assertPlusFileExport_js_1 = require("../assertPlusFileExport.js");
8
+ function parseConfigValuesSerialized(configValuesSerialized) {
9
+ const configValues = parseConfigValuesSerialized_tmp(configValuesSerialized);
10
+ return configValues;
11
+ }
12
+ exports.parseConfigValuesSerialized = parseConfigValuesSerialized;
8
13
  function parsePageConfigs(pageConfigsSerialized, pageConfigGlobalSerialized) {
14
+ // pageConfigs
9
15
  const pageConfigs = pageConfigsSerialized.map((pageConfigSerialized) => {
10
- const configValues = {};
11
- {
12
- const { configValuesSerialized } = pageConfigSerialized;
13
- const configValuesAddendum = (0, parseConfigValuesSerialized_js_1.parseConfigValuesSerialized)(configValuesSerialized);
14
- Object.assign(configValues, configValuesAddendum);
15
- }
16
- {
17
- const { configValuesImported } = pageConfigSerialized;
18
- const configValuesAddendum = (0, parseConfigValuesImported_js_1.parseConfigValuesImported)(configValuesImported);
19
- Object.assign(configValues, configValuesAddendum);
20
- }
16
+ const configValues = parseConfigValuesSerialized(pageConfigSerialized.configValuesSerialized);
21
17
  const { pageId, isErrorPage, routeFilesystem, loadConfigValuesAll } = pageConfigSerialized;
22
18
  assertRouteConfigValue(configValues);
23
19
  return {
@@ -28,10 +24,11 @@ function parsePageConfigs(pageConfigsSerialized, pageConfigGlobalSerialized) {
28
24
  loadConfigValuesAll
29
25
  };
30
26
  });
27
+ // pageConfigsGlobal
31
28
  const pageConfigGlobal = { configValues: {} };
32
29
  {
33
- const configValuesAddendum = (0, parseConfigValuesImported_js_1.parseConfigValuesImported)(pageConfigGlobalSerialized.configValuesImported);
34
- Object.assign(pageConfigGlobal.configValues, configValuesAddendum);
30
+ const configValues = parseConfigValuesSerialized(pageConfigGlobalSerialized.configValuesSerialized);
31
+ Object.assign(pageConfigGlobal.configValues, configValues);
35
32
  }
36
33
  return { pageConfigs, pageConfigGlobal };
37
34
  }
@@ -55,3 +52,100 @@ function assertRouteConfigValue(configValues) {
55
52
  }
56
53
  */
57
54
  }
55
+ function parseConfigValuesSerialized_tmp(configValuesSerialized) {
56
+ const configValues = {};
57
+ Object.entries(configValuesSerialized).forEach(([configName, configValueSeriliazed]) => {
58
+ let configValue;
59
+ if (configValueSeriliazed.type === 'cumulative') {
60
+ const { valueSerialized, ...common } = configValueSeriliazed;
61
+ const value = valueSerialized.map((valueSerializedElement, i) => {
62
+ const { value, sideExports } = parseValueSerialized(valueSerializedElement, configName, () => {
63
+ const definedAtFile = configValueSeriliazed.definedAtData[i];
64
+ (0, utils_js_1.assert)(definedAtFile);
65
+ return definedAtFile;
66
+ });
67
+ addSideExports(sideExports);
68
+ return value;
69
+ });
70
+ configValue = { value, ...common };
71
+ }
72
+ else {
73
+ const { valueSerialized, ...common } = configValueSeriliazed;
74
+ const { value, sideExports } = parseValueSerialized(valueSerialized, configName, () => {
75
+ (0, utils_js_1.assert)(configValueSeriliazed.type !== 'computed');
76
+ return configValueSeriliazed.definedAtData;
77
+ });
78
+ addSideExports(sideExports);
79
+ configValue = { value, ...common };
80
+ }
81
+ configValues[configName] = configValue;
82
+ });
83
+ return configValues;
84
+ function addSideExports(sideExports) {
85
+ sideExports.forEach((sideExport) => {
86
+ const { configName, configValue } = sideExport;
87
+ if (!configValues[configName]) {
88
+ configValues[configName] = configValue;
89
+ }
90
+ else {
91
+ // Side-exports have lower precedence.
92
+ // We can't avoid side-export conflicts upstream. (We cannot know about side-exports at build-time.)
93
+ }
94
+ });
95
+ }
96
+ }
97
+ function parseValueSerialized(valueSerialized, configName, getDefinedAtFile) {
98
+ if (valueSerialized.type === 'js-serialized') {
99
+ let { value } = valueSerialized;
100
+ value = (0, parse_1.parseTransform)(value);
101
+ return { value, sideExports: [] };
102
+ }
103
+ if (valueSerialized.type === 'pointer-import') {
104
+ const { value } = valueSerialized;
105
+ return { value, sideExports: [] };
106
+ }
107
+ if (valueSerialized.type === 'plus-file') {
108
+ const definedAtFile = getDefinedAtFile();
109
+ const { exportValues } = valueSerialized;
110
+ (0, assertPlusFileExport_js_1.assertPlusFileExport)(exportValues, definedAtFile.filePathToShowToUser, configName);
111
+ let value;
112
+ let valueWasFound = false;
113
+ const sideExports = [];
114
+ Object.entries(exportValues).forEach(([exportName, exportValue]) => {
115
+ const isSideExport = exportName !== 'default' && exportName !== configName;
116
+ if (!isSideExport) {
117
+ value = exportValue;
118
+ (0, utils_js_1.assert)(!valueWasFound);
119
+ valueWasFound = true;
120
+ }
121
+ else {
122
+ sideExports.push({
123
+ configName: exportName,
124
+ configValue: {
125
+ type: 'standard', // We don't support side exports for cumulative values. We could support it but it isn't trivial.
126
+ value: exportValue,
127
+ definedAtData: {
128
+ filePathToShowToUser: definedAtFile.filePathToShowToUser,
129
+ fileExportPathToShowToUser: [exportName]
130
+ }
131
+ }
132
+ });
133
+ }
134
+ });
135
+ (0, utils_js_1.assert)(valueWasFound);
136
+ return { value, sideExports };
137
+ }
138
+ (0, utils_js_1.assert)(false);
139
+ }
140
+ /* [NULL_HANDLING] Do we really need this?
141
+ function assertIsNotNull(configValue: unknown, configName: string, filePathToShowToUser: string) {
142
+ assert(!filePathToShowToUser.includes('+config.'))
143
+ // Re-use this for:
144
+ // - upcoming config.requestPageContextOnNavigation
145
+ // - for cumulative values in the future: we don't need this for now because, currently, cumulative values are never imported.
146
+ assertUsage(
147
+ configValue !== null,
148
+ `Set ${pc.cyan(configName)} to ${pc.cyan('null')} in a +config.js file instead of ${filePathToShowToUser}`
149
+ )
150
+ }
151
+ */
@@ -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
+ }
@@ -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 addUrlComputedProps_js_1 = require("../addUrlComputedProps.js");
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, addUrlComputedProps_js_1.addUrlComputedProps)(pageContextForRoute);
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.getConfigValue)(pageConfig, configName);
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.getConfigValue)(pageConfig, 'iKnowThePerformanceRisksOfAsyncRouteFunctions', 'boolean'))
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 addUrlComputedProps_js_1 = require("../addUrlComputedProps.js");
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, addUrlComputedProps_js_1.assertPageContextUrlComputedProps)(pageContext);
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
@@ -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);
@@ -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;
@@ -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 = 'unknown') {
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 === 'unknown') {
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
  }
@@ -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 addUrlComputedProps()
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,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.171-commit-75e1588';
4
+ const PROJECT_VERSION = '0.4.171-commit-6e37128';
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/getPageFileObject.js").PageFile[];
9
- _pageConfigs: import("../../shared/page-configs/PageConfig.js").PageConfigRuntime[];
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
- } & import("../../shared/addUrlComputedProps.js").PageContextUrlComputedPropsClient & {
15
- _urlRewrite: string | null;
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 { addUrlComputedProps } from '../../shared/addUrlComputedProps.js';
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
- addUrlComputedProps(pageContext);
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 { getConfigValue } from '../../shared/page-configs/getConfigValue.js';
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 = { ...pageContext, ...pageContextFromHooks };
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({ ...pageContext, ...pageContextFromHooks }))) {
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
- _hasPageContextFromServer: hasPageContextFromServer,
75
- ...pageContext,
76
- ...pageContextFromHooks
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.)
@@ -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 = getConfigValue(pageConfig, `${hookName}Env`)?.value ?? {};
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 = getConfigValue(pageConfig, `${hookName}Env`)?.value ?? {};
196
+ const hookEnv = getConfigValueRuntime(pageConfig, `${hookName}Env`)?.value ?? {};
193
197
  assert(isObject(hookEnv));
194
198
  return !!hookEnv.client && !hookEnv.server;
195
199
  }
@@ -8,8 +8,8 @@ declare function getPageContext(): Promise<{
8
8
  _hasPageContextFromServer: true;
9
9
  _hasPageContextFromClient: false;
10
10
  } & {
11
- _pageFilesAll: import("../../shared/getPageFiles/getPageFileObject.js").PageFile[];
12
- _pageConfigs: import("../../shared/page-configs/PageConfig.js").PageConfigRuntime[];
13
- } & import("../../shared/getPageFiles/getExports.js").PageContextExports & {
14
- _pageFilesLoaded: import("../../shared/getPageFiles/getPageFileObject.js").PageFile[];
11
+ _pageFilesAll: import("../../shared/getPageFiles.js").PageFile[];
12
+ _pageConfigs: import("../../__internal/index.js").PageConfig[];
13
+ } & import("../../shared/getPageFiles.js").PageContextExports & {
14
+ _pageFilesLoaded: import("../../shared/getPageFiles.js").PageFile[];
15
15
  }>;
@@ -3,6 +3,7 @@ export { isErrorFetchingStaticAssets };
3
3
  import { getPageFilesClientSide, getPageContextExports } from '../../shared/getPageFiles.js';
4
4
  import { findPageConfig } from '../../shared/page-configs/findPageConfig.js';
5
5
  import { loadConfigValues } from '../../shared/page-configs/loadConfigValues.js';
6
+ import { objectAssign } from '../server-routing-runtime/utils.js';
6
7
  const stamp = '__whileFetchingAssets';
7
8
  async function loadUserFilesClientSide(pageId, pageFilesAll, pageConfigs) {
8
9
  const pageFilesClientSide = getPageFilesClientSide(pageFilesAll, pageId);
@@ -29,10 +30,9 @@ async function loadUserFilesClientSide(pageId, pageFilesAll, pageConfigs) {
29
30
  throw err;
30
31
  }
31
32
  const pageContextExports = getPageContextExports(pageFilesClientSide, pageConfigLoaded);
32
- const pageContextAddendum = {
33
- ...pageContextExports,
34
- _pageFilesLoaded: pageFilesClientSide
35
- };
33
+ const pageContextAddendum = {};
34
+ objectAssign(pageContextAddendum, pageContextExports);
35
+ objectAssign(pageContextAddendum, { _pageFilesLoaded: pageFilesClientSide });
36
36
  return pageContextAddendum;
37
37
  }
38
38
  function isErrorFetchingStaticAssets(err) {