vike 0.4.218 → 0.4.220

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 (184) hide show
  1. package/dist/cjs/__internal/index.js +11 -11
  2. package/dist/cjs/node/api/build.js +20 -11
  3. package/dist/cjs/node/api/context.js +5 -1
  4. package/dist/cjs/node/api/index.js +17 -7
  5. package/dist/cjs/node/api/prepareViteApiCall.js +39 -11
  6. package/dist/cjs/node/cli/entry.js +19 -7
  7. package/dist/cjs/node/plugin/index.js +5 -5
  8. package/dist/cjs/node/plugin/plugins/autoFullBuild.js +3 -4
  9. package/dist/cjs/node/plugin/plugins/baseUrls.js +3 -10
  10. package/dist/cjs/node/plugin/plugins/buildConfig.js +2 -2
  11. package/dist/cjs/node/plugin/plugins/{importBuild → buildEntry}/index.js +16 -17
  12. package/dist/cjs/node/plugin/plugins/commonConfig.js +39 -4
  13. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +26 -23
  14. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +171 -68
  15. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigValuesAll.js +1 -1
  16. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.js +4 -3
  17. package/dist/cjs/node/plugin/plugins/setGlobalContext.js +1 -1
  18. package/dist/cjs/node/plugin/plugins/{vite6HmrRegressionWorkaround.js → workaroundVite6HmrRegression.js} +3 -3
  19. package/dist/cjs/node/plugin/shared/getHttpRequestAsyncStore.js +17 -7
  20. package/dist/cjs/node/prerender/isPrerenderAutoRunEnabled.js +16 -0
  21. package/dist/cjs/node/prerender/runPrerender.js +94 -66
  22. package/dist/cjs/node/prerender/utils.js +1 -0
  23. package/dist/cjs/node/runtime/globalContext.js +108 -34
  24. package/dist/cjs/node/runtime/html/injectAssets/getHtmlTags.js +2 -2
  25. package/dist/cjs/node/runtime/index-common.js +0 -15
  26. package/dist/cjs/node/runtime/onLoad.js +17 -3
  27. package/dist/cjs/node/runtime/page-files/setup.js +2 -4
  28. package/dist/cjs/node/runtime/renderPage/analyzePage.js +2 -2
  29. package/dist/cjs/node/runtime/renderPage/createHttpResponse/getCacheControl.js +2 -2
  30. package/dist/cjs/node/runtime/renderPage/loadUserFilesServerSide.js +1 -1
  31. package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +11 -33
  32. package/dist/cjs/node/runtime/renderPage/resolveRedirects.js +9 -1
  33. package/dist/cjs/node/runtime/renderPage.js +21 -22
  34. package/dist/cjs/node/runtime/utils.js +1 -0
  35. package/dist/cjs/node/runtime-dev/index.js +17 -7
  36. package/dist/cjs/node/shared/assertRuntimeManifest.js +0 -2
  37. package/dist/cjs/shared/getPageFiles/analyzeClientSide.js +3 -3
  38. package/dist/cjs/shared/getPageFiles/{setPageFiles.js → getPageFiles.js} +8 -6
  39. package/dist/cjs/shared/getPageFiles.js +3 -9
  40. package/dist/cjs/shared/hooks/getHook.js +3 -3
  41. package/dist/cjs/shared/{getPageFiles/getExports.js → page-configs/getPageConfigUserFriendly.js} +113 -81
  42. package/dist/cjs/shared/page-configs/serialize/serializeConfigValues.js +80 -55
  43. package/dist/cjs/shared/route/loadPageRoutes.js +3 -3
  44. package/dist/cjs/shared/utils.js +1 -0
  45. package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
  46. package/dist/cjs/utils/assert.js +4 -3
  47. package/dist/cjs/utils/assertSetup.js +47 -16
  48. package/dist/cjs/utils/debug.js +11 -6
  49. package/dist/cjs/utils/getGlobalObject.js +1 -2
  50. package/dist/cjs/utils/objectReplace.js +9 -0
  51. package/dist/esm/__internal/index.d.ts +3 -5
  52. package/dist/esm/__internal/index.js +6 -8
  53. package/dist/esm/client/client-routing-runtime/createPageContext.js +4 -1
  54. package/dist/esm/client/client-routing-runtime/entry.d.ts +1 -1
  55. package/dist/esm/client/client-routing-runtime/entry.js +0 -1
  56. package/dist/esm/client/client-routing-runtime/getPageContextCurrent.d.ts +2 -2
  57. package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.d.ts +4 -4
  58. package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.js +1 -1
  59. package/dist/esm/client/client-routing-runtime/initOnLinkClick.d.ts +4 -0
  60. package/dist/esm/client/client-routing-runtime/initOnLinkClick.js +13 -3
  61. package/dist/esm/client/client-routing-runtime/initOnPopState.js +8 -0
  62. package/dist/esm/client/client-routing-runtime/prefetch/getPrefetchSettings.d.ts +2 -2
  63. package/dist/esm/client/client-routing-runtime/prefetch.d.ts +2 -2
  64. package/dist/esm/client/client-routing-runtime/prefetch.js +2 -2
  65. package/dist/esm/client/client-routing-runtime/skipLink.d.ts +2 -0
  66. package/dist/esm/client/client-routing-runtime/skipLink.js +1 -0
  67. package/dist/esm/client/server-routing-runtime/entry.d.ts +1 -1
  68. package/dist/esm/client/server-routing-runtime/entry.js +0 -1
  69. package/dist/esm/client/server-routing-runtime/getPageContext.d.ts +1 -1
  70. package/dist/esm/client/server-routing-runtime/getPageContext.js +5 -2
  71. package/dist/esm/client/shared/executeOnRenderClientHook.d.ts +2 -2
  72. package/dist/esm/client/shared/loadUserFilesClientSide.d.ts +2 -2
  73. package/dist/esm/client/shared/loadUserFilesClientSide.js +2 -2
  74. package/dist/esm/client/shared/normalizeClientSideUrl.js +2 -3
  75. package/dist/esm/client/shared/preparePageContextForUserConsumptionClientSide.d.ts +2 -2
  76. package/dist/esm/node/api/build.js +3 -4
  77. package/dist/esm/node/api/context.d.ts +3 -1
  78. package/dist/esm/node/api/context.js +6 -2
  79. package/dist/esm/node/api/prepareViteApiCall.d.ts +1 -1
  80. package/dist/esm/node/api/prepareViteApiCall.js +25 -7
  81. package/dist/esm/node/cli/entry.js +2 -0
  82. package/dist/esm/node/cli/parseCli.d.ts +1 -1
  83. package/dist/esm/node/plugin/index.d.ts +1 -1
  84. package/dist/esm/node/plugin/index.js +5 -5
  85. package/dist/esm/node/plugin/plugins/autoFullBuild.js +3 -4
  86. package/dist/esm/node/plugin/plugins/baseUrls.d.ts +1 -1
  87. package/dist/esm/node/plugin/plugins/baseUrls.js +4 -11
  88. package/dist/esm/node/plugin/plugins/buildConfig.js +2 -2
  89. package/dist/esm/node/plugin/plugins/{importBuild → buildEntry}/getVikeManifest.d.ts +1 -1
  90. package/dist/esm/node/plugin/plugins/{importBuild → buildEntry}/index.d.ts +2 -2
  91. package/dist/esm/node/plugin/plugins/{importBuild → buildEntry}/index.js +16 -17
  92. package/dist/esm/node/plugin/plugins/commonConfig.d.ts +3 -0
  93. package/dist/esm/node/plugin/plugins/commonConfig.js +40 -5
  94. package/dist/esm/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.d.ts +1 -1
  95. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.d.ts +6 -9
  96. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +25 -22
  97. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.d.ts +96 -1
  98. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +167 -64
  99. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigValuesAll.js +1 -1
  100. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.js +4 -3
  101. package/dist/esm/node/plugin/plugins/setGlobalContext.js +1 -1
  102. package/dist/esm/node/plugin/plugins/workaroundVite6HmrRegression.d.ts +3 -0
  103. package/dist/esm/node/plugin/plugins/{vite6HmrRegressionWorkaround.js → workaroundVite6HmrRegression.js} +3 -3
  104. package/dist/esm/node/prerender/isPrerenderAutoRunEnabled.d.ts +5 -0
  105. package/dist/esm/node/prerender/isPrerenderAutoRunEnabled.js +14 -0
  106. package/dist/esm/node/prerender/runPrerender.d.ts +1 -2
  107. package/dist/esm/node/prerender/runPrerender.js +78 -60
  108. package/dist/esm/node/prerender/utils.d.ts +1 -0
  109. package/dist/esm/node/prerender/utils.js +1 -0
  110. package/dist/esm/node/runtime/globalContext.d.ts +23 -7
  111. package/dist/esm/node/runtime/globalContext.js +108 -34
  112. package/dist/esm/node/runtime/html/injectAssets/getHtmlTags.js +1 -1
  113. package/dist/esm/node/runtime/index-common.d.ts +0 -1
  114. package/dist/esm/node/runtime/index-common.js +0 -15
  115. package/dist/esm/node/runtime/index-deprecated.d.ts +1 -0
  116. package/dist/esm/node/runtime/onLoad.js +16 -2
  117. package/dist/esm/node/runtime/page-files/setup.js +3 -3
  118. package/dist/esm/node/runtime/renderPage/analyzePage.js +1 -1
  119. package/dist/esm/node/runtime/renderPage/createHttpResponse/getCacheControl.js +1 -1
  120. package/dist/esm/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.d.ts +2 -2
  121. package/dist/esm/node/runtime/renderPage/loadUserFilesServerSide.d.ts +1 -1
  122. package/dist/esm/node/runtime/renderPage/loadUserFilesServerSide.js +2 -2
  123. package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.d.ts +2 -2
  124. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +31 -46
  125. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +11 -33
  126. package/dist/esm/node/runtime/renderPage/resolveRedirects.d.ts +1 -1
  127. package/dist/esm/node/runtime/renderPage/resolveRedirects.js +9 -1
  128. package/dist/esm/node/runtime/renderPage.js +22 -23
  129. package/dist/esm/node/runtime/utils.d.ts +1 -0
  130. package/dist/esm/node/runtime/utils.js +1 -0
  131. package/dist/esm/node/shared/assertPluginManifest.d.ts +0 -1
  132. package/dist/esm/node/shared/assertRuntimeManifest.d.ts +0 -1
  133. package/dist/esm/node/shared/assertRuntimeManifest.js +1 -3
  134. package/dist/esm/shared/getPageFiles/analyzeClientSide.js +1 -1
  135. package/dist/esm/shared/getPageFiles/{setPageFiles.d.ts → getPageFiles.d.ts} +3 -1
  136. package/dist/esm/shared/getPageFiles/{setPageFiles.js → getPageFiles.js} +8 -6
  137. package/dist/esm/shared/getPageFiles.d.ts +2 -5
  138. package/dist/esm/shared/getPageFiles.js +1 -4
  139. package/dist/esm/shared/hooks/getHook.d.ts +3 -3
  140. package/dist/esm/shared/hooks/getHook.js +1 -1
  141. package/dist/esm/shared/page-configs/Config/PageContextConfig.d.ts +9 -5
  142. package/dist/esm/shared/page-configs/Config.d.ts +20 -2
  143. package/dist/esm/shared/page-configs/PageConfig.d.ts +7 -3
  144. package/dist/esm/shared/{getPageFiles/getExports.d.ts → page-configs/getPageConfigUserFriendly.d.ts} +26 -12
  145. package/dist/esm/shared/{getPageFiles/getExports.js → page-configs/getPageConfigUserFriendly.js} +112 -80
  146. package/dist/esm/shared/page-configs/serialize/serializeConfigValues.d.ts +26 -6
  147. package/dist/esm/shared/page-configs/serialize/serializeConfigValues.js +80 -55
  148. package/dist/esm/shared/route/executeGuardHook.d.ts +2 -2
  149. package/dist/esm/shared/route/loadPageRoutes.js +1 -1
  150. package/dist/esm/shared/types.d.ts +1 -1
  151. package/dist/esm/shared/utils.d.ts +1 -0
  152. package/dist/esm/shared/utils.js +1 -0
  153. package/dist/esm/types/index.d.ts +1 -1
  154. package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
  155. package/dist/esm/utils/PROJECT_VERSION.js +1 -1
  156. package/dist/esm/utils/assert.js +4 -3
  157. package/dist/esm/utils/assertSetup.js +47 -16
  158. package/dist/esm/utils/debug.d.ts +1 -1
  159. package/dist/esm/utils/debug.js +11 -6
  160. package/dist/esm/utils/getGlobalObject.js +1 -2
  161. package/dist/esm/utils/objectReplace.d.ts +1 -0
  162. package/dist/esm/utils/objectReplace.js +6 -0
  163. package/dist/esm/utils/projectInfo.d.ts +1 -1
  164. package/package.json +4 -13
  165. package/__internal/loadImportBuild.js +0 -3
  166. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/resolveVikeConfigGlobal.js +0 -128
  167. package/dist/cjs/node/runtime/globalContext/loadImportBuild.js +0 -25
  168. package/dist/cjs/node/runtime/page-files/getPageFilesExports.js +0 -22
  169. package/dist/esm/client/client-routing-runtime/pageFiles.d.ts +0 -1
  170. package/dist/esm/client/client-routing-runtime/pageFiles.js +0 -4
  171. package/dist/esm/client/server-routing-runtime/pageFiles.d.ts +0 -1
  172. package/dist/esm/client/server-routing-runtime/pageFiles.js +0 -4
  173. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/resolveVikeConfigGlobal.d.ts +0 -104
  174. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/resolveVikeConfigGlobal.js +0 -123
  175. package/dist/esm/node/plugin/plugins/vite6HmrRegressionWorkaround.d.ts +0 -3
  176. package/dist/esm/node/runtime/globalContext/loadImportBuild.d.ts +0 -18
  177. package/dist/esm/node/runtime/globalContext/loadImportBuild.js +0 -23
  178. package/dist/esm/node/runtime/page-files/getPageFilesExports.d.ts +0 -2
  179. package/dist/esm/node/runtime/page-files/getPageFilesExports.js +0 -20
  180. /package/dist/cjs/node/plugin/plugins/{importBuild → buildEntry}/getVikeManifest.js +0 -0
  181. /package/dist/cjs/shared/page-configs/{getConfigValue.js → getConfigValueRuntime.js} +0 -0
  182. /package/dist/esm/node/plugin/plugins/{importBuild → buildEntry}/getVikeManifest.js +0 -0
  183. /package/dist/esm/shared/page-configs/{getConfigValue.d.ts → getConfigValueRuntime.d.ts} +0 -0
  184. /package/dist/esm/shared/page-configs/{getConfigValue.js → getConfigValueRuntime.js} +0 -0
@@ -1,4 +1,5 @@
1
1
  export { serializeConfigValues };
2
+ export { getConfigValuesBase };
2
3
  import { assertIsNotProductionRuntime } from '../../../utils/assertSetup.js';
3
4
  import { assert, assertUsage, getPropAccessNotation } from '../../../node/plugin/utils.js';
4
5
  import { addImportStatement } from '../../../node/plugin/plugins/importUserCode/addImportStatement.js';
@@ -12,77 +13,45 @@ const REPLACE_ME_AFTER = '__VIKE__REPLACE_ME_AFTER__';
12
13
  // - vike/shared/page-configs/serialize/parsePageConfigs.ts
13
14
  // - parsePageConfigs() is loaded on both the client- and server-side.
14
15
  assertIsNotProductionRuntime();
15
- function serializeConfigValues(pageConfig, importStatements, isEnvMatch, { isEager }, tabspace) {
16
+ function serializeConfigValues(pageConfig, importStatements, isEnvMatch, tabspace, isEager) {
16
17
  const lines = [];
17
18
  tabspace += ' ';
18
- Object.entries(pageConfig.configValuesComputed ?? {}).forEach(([configName, configValuesComputed]) => {
19
- if (!isEnvMatch(configValuesComputed.configEnv))
20
- return;
21
- // Is there a use case for overriding computed values? If yes, then configValeSources has higher precedence
22
- if (pageConfig.configValueSources[configName])
23
- return;
24
- const valueData = serializeWithJson(configValuesComputed.value, configName, null, importStatements);
25
- const configValueBase = {
26
- type: 'computed',
27
- definedAtData: null
28
- };
29
- serializeConfigValue(configValueBase, valueData, configName, lines, tabspace);
30
- });
31
- Object.entries(pageConfig.configValueSources).forEach(([configName, sources]) => {
32
- const configDef = pageConfig.configDefinitions[configName];
33
- assert(configDef);
34
- if (isEager !== !!configDef.eager)
35
- return;
36
- if (!configDef.cumulative) {
37
- const configValueSource = sources[0];
38
- assert(configValueSource);
39
- assert(sources.slice(1).every((s) => s.isOverriden === true));
40
- if (!isEnvMatch(configValueSource.configEnv))
41
- return;
42
- const { valueData, definedAtFile } = serializeConfigValueSource(configValueSource, configName, importStatements);
43
- const configValueBase = {
44
- type: 'standard',
45
- definedAtData: definedAtFile
46
- };
19
+ getConfigValuesBase(pageConfig, isEnvMatch, isEager).forEach((entry) => {
20
+ if (entry.configValueBase.type === 'computed') {
21
+ assert('value' in entry); // Help TS
22
+ const { configValueBase, value, configName } = entry;
23
+ const valueData = getValueSerializedWithJson(value, configName, configValueBase.definedAtData, importStatements);
47
24
  serializeConfigValue(configValueBase, valueData, configName, lines, tabspace);
48
25
  }
49
- else {
26
+ if (entry.configValueBase.type === 'standard') {
27
+ assert('sourceRelevant' in entry); // Help TS
28
+ const { configValueBase, sourceRelevant, configName } = entry;
29
+ const valueData = getValueSerializedFromSource(sourceRelevant, configName, importStatements);
30
+ serializeConfigValue(configValueBase, valueData, configName, lines, tabspace);
31
+ }
32
+ if (entry.configValueBase.type === 'cumulative') {
33
+ assert('sourcesRelevant' in entry); // Help TS
34
+ const { configValueBase, sourcesRelevant, configName } = entry;
50
35
  const valueDataList = [];
51
- const definedAtData = [];
52
- sources
53
- .filter((s) => !s.isOverriden)
54
- .forEach((configValueSource) => {
55
- if (!isEnvMatch(configValueSource.configEnv))
56
- return;
57
- const { valueData, definedAtFile } = serializeConfigValueSource(configValueSource, configName, importStatements);
36
+ sourcesRelevant.forEach((source) => {
37
+ const valueData = getValueSerializedFromSource(source, configName, importStatements);
58
38
  valueDataList.push(valueData);
59
- definedAtData.push(definedAtFile);
60
39
  });
61
- if (valueDataList.length === 0)
62
- return;
63
- const configValueBase = {
64
- type: 'cumulative',
65
- definedAtData
66
- };
67
40
  serializeConfigValue(configValueBase, valueDataList, configName, lines, tabspace);
68
41
  }
69
42
  });
70
43
  return lines;
71
44
  }
72
- function serializeConfigValueSource(configValueSource, configName, importStatements) {
45
+ function getValueSerializedFromSource(configValueSource, configName, importStatements) {
73
46
  assert(configValueSource.isOverriden === false);
74
47
  let valueData;
75
48
  if ('value' in configValueSource) {
76
- valueData = serializeWithJson(configValueSource.value, configName, configValueSource.definedAtFilePath, importStatements);
49
+ valueData = getValueSerializedWithJson(configValueSource.value, configName, configValueSource.definedAtFilePath, importStatements);
77
50
  }
78
51
  else {
79
- valueData = serializeWithImport(configValueSource, importStatements);
52
+ valueData = getValueSerializedWithImport(configValueSource, importStatements);
80
53
  }
81
- const definedAtFile = {
82
- filePathToShowToUser: configValueSource.definedAtFilePath.filePathToShowToUser,
83
- fileExportPathToShowToUser: configValueSource.definedAtFilePath.fileExportPathToShowToUser
84
- };
85
- return { valueData, definedAtFile };
54
+ return valueData;
86
55
  }
87
56
  function serializeConfigValue(configValueBase, valueData, configName, lines, tabspace) {
88
57
  lineAdd(`[${JSON.stringify(configName)}]: {`);
@@ -126,7 +95,7 @@ function serializeConfigValue(configValueBase, valueData, configName, lines, tab
126
95
  tabspace = tabspace.slice(2);
127
96
  }
128
97
  }
129
- function serializeWithImport(configValueSource, importStatements) {
98
+ function getValueSerializedWithImport(configValueSource, importStatements) {
130
99
  assert(!configValueSource.valueIsFilePath);
131
100
  const { valueIsImportedAtRuntime, valueIsDefinedByPlusFile, definedAtFilePath } = configValueSource;
132
101
  assert(valueIsImportedAtRuntime);
@@ -139,7 +108,7 @@ function serializeWithImport(configValueSource, importStatements) {
139
108
  valueAsJsCode: importName
140
109
  };
141
110
  }
142
- function serializeWithJson(value, configName, definedAtData, importStatements) {
111
+ function getValueSerializedWithJson(value, configName, definedAtData, importStatements) {
143
112
  const valueAsJsCode = valueToJson(value, configName, definedAtData, importStatements);
144
113
  return {
145
114
  type: 'js-serialized',
@@ -196,3 +165,59 @@ function logJsonSerializeError(err, configName, definedAtData) {
196
165
  assert(configValueFilePathToShowToUser);
197
166
  assertUsage(false, `${pc.cyan(configName)} defined by ${configValueFilePathToShowToUser} must be defined over a so-called "pointer import", see https://vike.dev/config#pointer-imports`);
198
167
  }
168
+ function getConfigValuesBase(pageConfig, isEnvMatch, isEager) {
169
+ const fromComputed = Object.entries(pageConfig.configValuesComputed ?? {}).map(([configName, valueInfo]) => {
170
+ if (!isEnvMatch(valueInfo.configEnv))
171
+ return 'SKIP';
172
+ // Is there a use case for overriding computed values? If yes, then configValeSources has higher precedence
173
+ if (pageConfig.configValueSources[configName])
174
+ return 'SKIP';
175
+ const configValueBase = {
176
+ type: 'computed',
177
+ definedAtData: null
178
+ };
179
+ return { configValueBase, value: valueInfo.value, configName };
180
+ });
181
+ const fromSources = Object.entries(pageConfig.configValueSources).map(([configName, sources]) => {
182
+ const configDef = pageConfig.configDefinitions[configName];
183
+ assert(configDef);
184
+ if (isEager !== null && isEager !== !!configDef.eager)
185
+ return 'SKIP';
186
+ if (!configDef.cumulative) {
187
+ const source = sources[0];
188
+ assert(source);
189
+ assert(sources.slice(1).every((s) => s.isOverriden === true));
190
+ if (!isEnvMatch(source.configEnv))
191
+ return 'SKIP';
192
+ const definedAtFile = getDefinedAtFileSource(source);
193
+ const configValueBase = {
194
+ type: 'standard',
195
+ definedAtData: definedAtFile
196
+ };
197
+ return { configValueBase, sourceRelevant: source, configName };
198
+ }
199
+ else {
200
+ const sourcesRelevant = sources.filter((source) => !source.isOverriden && isEnvMatch(source.configEnv));
201
+ if (sourcesRelevant.length === 0)
202
+ return 'SKIP';
203
+ const definedAtData = [];
204
+ sourcesRelevant.forEach((source) => {
205
+ const definedAtFile = getDefinedAtFileSource(source);
206
+ definedAtData.push(definedAtFile);
207
+ });
208
+ const configValueBase = {
209
+ type: 'cumulative',
210
+ definedAtData
211
+ };
212
+ return { configValueBase, sourcesRelevant, configName };
213
+ }
214
+ });
215
+ return [...fromComputed, ...fromSources].filter((r) => r !== 'SKIP');
216
+ }
217
+ function getDefinedAtFileSource(source) {
218
+ const definedAtFile = {
219
+ filePathToShowToUser: source.definedAtFilePath.filePathToShowToUser,
220
+ fileExportPathToShowToUser: source.definedAtFilePath.fileExportPathToShowToUser
221
+ };
222
+ return definedAtFile;
223
+ }
@@ -1,7 +1,7 @@
1
1
  export { executeGuardHook };
2
- import type { PageContextExports, PageFile } from '../getPageFiles.js';
2
+ import type { PageConfigUserFriendly, PageFile } from '../getPageFiles.js';
3
3
  import type { PageConfigRuntime } from '../page-configs/PageConfig.js';
4
- declare function executeGuardHook<T extends PageContextExports & {
4
+ declare function executeGuardHook<T extends PageConfigUserFriendly & {
5
5
  pageId: string;
6
6
  _pageFilesAll: PageFile[];
7
7
  _pageConfigs: PageConfigRuntime[];
@@ -3,7 +3,7 @@ import { isErrorPageId } from '../error-page.js';
3
3
  import { assert, assertUsage, hasProp, slice } from './utils.js';
4
4
  import { deduceRouteStringFromFilesystemPath } from './deduceRouteStringFromFilesystemPath.js';
5
5
  import { isCallable } from '../utils.js';
6
- import { getConfigValueRuntime } from '../page-configs/getConfigValue.js';
6
+ import { getConfigValueRuntime } from '../page-configs/getConfigValueRuntime.js';
7
7
  import { getDefinedAtString } from '../page-configs/getConfigDefinedAt.js';
8
8
  import { warnDeprecatedAllowKey } from './resolveRouteFunction.js';
9
9
  import { getHookFromPageConfigGlobal, getHookTimeoutDefault } from '../hooks/getHook.js';
@@ -8,7 +8,7 @@ export { PageContextBuiltInServer_deprecated as PageContextBuiltInServer };
8
8
  export { PageContextBuiltInClientWithClientRouting_deprecated as PageContextBuiltInClientWithClientRouting };
9
9
  export { PageContextBuiltInClientWithServerRouting_deprecated as PageContextBuiltInClientWithServerRouting };
10
10
  import type { PageContextUrlInternal, PageContextUrlClient, PageContextUrlServer } from './getPageContextUrlComputed.js';
11
- import type { ConfigEntries, ExportsAll, From, Source, Sources } from './getPageFiles/getExports.js';
11
+ import type { ConfigEntries, ExportsAll, From, Source, Sources } from './page-configs/getPageConfigUserFriendly.js';
12
12
  import type { Config } from './page-configs/Config.js';
13
13
  import type { PageContextConfig } from './page-configs/Config/PageContextConfig.js';
14
14
  import type { AbortStatusCode } from './route/abort.js';
@@ -22,3 +22,4 @@ export * from '../utils/escapeRegex.js';
22
22
  export * from '../utils/isArray.js';
23
23
  export * from '../utils/changeEnumerable.js';
24
24
  export * from '../utils/objectDefineProperty.js';
25
+ export * from '../utils/isScriptFile.js';
@@ -26,3 +26,4 @@ export * from '../utils/escapeRegex.js';
26
26
  export * from '../utils/isArray.js';
27
27
  export * from '../utils/changeEnumerable.js';
28
28
  export * from '../utils/objectDefineProperty.js';
29
+ export * from '../utils/isScriptFile.js';
@@ -10,7 +10,7 @@ export type { PageContextBuiltInClientWithServerRouting } from '../shared/types.
10
10
  export type { Config, ConfigMeta as Meta, ImportString, DataAsync, DataSync, GuardAsync, GuardSync, OnBeforePrerenderStartAsync, OnBeforePrerenderStartSync, OnBeforeRenderAsync, OnBeforeRenderSync, OnBeforeRouteAsync, OnBeforeRouteSync, OnHydrationEndAsync, OnHydrationEndSync, OnPageTransitionEndAsync, OnPageTransitionEndSync, OnPageTransitionStartAsync, OnPageTransitionStartSync, OnPrerenderStartAsync, OnPrerenderStartSync, OnRenderClientAsync, OnRenderClientSync, OnRenderHtmlAsync, OnRenderHtmlSync, RouteAsync, RouteSync, KeepScrollPosition } from '../shared/page-configs/Config.js';
11
11
  export type { ConfigEnv } from '../shared/page-configs/PageConfig.js';
12
12
  export type { ConfigDefinition, ConfigEffect } from '../node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js';
13
- export type { ConfigEntries } from '../shared/getPageFiles/getExports.js';
13
+ export type { ConfigEntries } from '../shared/page-configs/getPageConfigUserFriendly.js';
14
14
  export type { UrlPublic as Url } from '../utils/parseUrl.js';
15
15
  export type { InjectFilterEntry } from '../node/runtime/html/injectAssets/getHtmlTags.js';
16
16
  export { defineConfig } from './defineConfig.js';
@@ -1 +1 @@
1
- export declare const PROJECT_VERSION: "0.4.218";
1
+ export declare const PROJECT_VERSION: "0.4.220";
@@ -1,2 +1,2 @@
1
1
  // Automatically updated by @brillout/release-me
2
- export const PROJECT_VERSION = '0.4.218';
2
+ export const PROJECT_VERSION = '0.4.220';
@@ -30,6 +30,7 @@ const globalObject = getGlobalObject('utils/assert.ts', {
30
30
  assertSingleInstance_onAssertModuleLoad();
31
31
  const projectTag = `[vike]`;
32
32
  const projectTagWithVersion = `[vike@${projectInfo.projectVersion}]`;
33
+ const bugTag = 'Bug';
33
34
  const numberOfStackTraceLinesToRemove = 2;
34
35
  function assert(condition, debugInfo) {
35
36
  if (condition)
@@ -49,7 +50,7 @@ function assert(condition, debugInfo) {
49
50
  .filter(Boolean)
50
51
  .join(' ');
51
52
  errMsg = addWhitespace(errMsg);
52
- errMsg = addPrefixAssertType(errMsg, 'Bug');
53
+ errMsg = addPrefixAssertType(errMsg, bugTag);
53
54
  errMsg = addPrefixProjctName(errMsg, true);
54
55
  const internalError = createErrorWithCleanStackTrace(errMsg, numberOfStackTraceLinesToRemove);
55
56
  globalObject.onBeforeLog?.();
@@ -160,7 +161,7 @@ function getAssertErrMsg(thing) {
160
161
  const showVikeVersion = tag === projectTagWithVersion;
161
162
  const errStackPrefix = `Error: ${tag}`;
162
163
  if (errStack?.startsWith(errStackPrefix)) {
163
- if (globalObject.showStackTraceList.has(thing)) {
164
+ if (globalObject.showStackTraceList.has(thing) || isBug(thing)) {
164
165
  const assertMsg = errStack.slice(errStackPrefix.length);
165
166
  return { assertMsg, showVikeVersion };
166
167
  }
@@ -179,7 +180,7 @@ function overwriteAssertProductionLogger(logger) {
179
180
  globalObject.logger = logger;
180
181
  }
181
182
  function isBug(err) {
182
- return !String(err).includes('[Bug]');
183
+ return String(err).includes(`[${bugTag}]`);
183
184
  }
184
185
  function setAlwaysShowStackTrace() {
185
186
  globalObject.alwaysShowStackTrace = true;
@@ -28,16 +28,19 @@ function onSetupRuntime() {
28
28
  debug('assertSetup()', new Error().stack);
29
29
  if (isTest())
30
30
  return;
31
+ assertNodeEnvIsNotUndefinedString();
31
32
  if (!isViteLoaded()) {
32
33
  // TODO: make it assertUsage() again once https://github.com/vikejs/vike/issues/1528 is implemented.
33
- assertWarning(!isNodeEnvDev(), `The ${getEnvDescription()}, which seems contradictory because the environment seems to be a production environment (Vite isn't loaded), see https://vike.dev/NODE_ENV`, { onlyOnce: true });
34
+ assertWarning(!isNodeEnvDev(), `The ${getEnvDescription()}, which is contradictory because the environment seems to be a production environment (Vite isn't loaded), see https://vike.dev/NODE_ENV`, { onlyOnce: true });
34
35
  assertUsage(!setup.vikeVitePlugin, "Loading Vike's Vite plugin (the vike/plugin module) is prohibited in production.");
35
36
  // This assert() one of the main goal of this file: it ensures assertIsNotProductionRuntime()
36
37
  assert(!setup.shouldNotBeProduction);
37
38
  }
38
39
  else {
39
- // TODO: make it assertUsage() again once https://github.com/vikejs/vike/issues/1528 is implemented.
40
- assertWarning(isNodeEnvDev() || setup.vitePreviewServer || setup.isPrerendering, `The ${getEnvDescription()}, but Vite is loaded which is prohibited in production, see https://vike.dev/NODE_ENV`, { onlyOnce: true });
40
+ if (!setup.vitePreviewServer && !setup.isPrerendering) {
41
+ // TODO: make it assertUsage() again once https://github.com/vikejs/vike/issues/1528 is implemented.
42
+ assertWarning(isNodeEnvDev(), `The ${getEnvDescription()}, but Vite is loaded which is prohibited in production, see https://vike.dev/NODE_ENV`, { onlyOnce: true });
43
+ }
41
44
  // These two assert() calls aren't that interesting
42
45
  assert(setup.vikeVitePlugin);
43
46
  assert(setup.shouldNotBeProduction);
@@ -57,7 +60,7 @@ function onSetupBuild() {
57
60
  }
58
61
  function onSetupPrerender() {
59
62
  markSetup_isPrerendering();
60
- if (getNodeEnvValue())
63
+ if (getNodeEnv())
61
64
  assertUsageNodeEnvIsNotDev('pre-rendering');
62
65
  setNodeEnvProduction();
63
66
  }
@@ -66,7 +69,7 @@ function isViteLoaded() {
66
69
  return setup.viteDevServer || setup.vitePreviewServer || setup.isViteDev !== undefined;
67
70
  }
68
71
  function isTest() {
69
- return isVitest() || getNodeEnvValue() === 'test';
72
+ return isVitest() || isNodeEnv('test');
70
73
  }
71
74
  // Called by Vite hook configureServer()
72
75
  function markSetup_viteDevServer() {
@@ -105,26 +108,54 @@ function assertUsageNodeEnvIsNotDev(operation) {
105
108
  assertWarning(false, `The ${getEnvDescription()} which is forbidden upon ${operation}, see https://vike.dev/NODE_ENV`, { onlyOnce: true });
106
109
  }
107
110
  function getEnvDescription() {
108
- const nodeEnv = getNodeEnvValue();
109
- const isDev = isNodeEnvDev();
110
- const envType = `${(isDev ? 'development' : 'production')} environment`;
111
- const nodeEnvDesc = `environment is set to be a ${pc.bold(envType)} by ${pc.cyan(`process.env.NODE_ENV===${JSON.stringify(nodeEnv)}`)}`;
111
+ const envType = `${(isNodeEnvDev() ? 'development' : 'production')} environment`;
112
+ const nodeEnvDesc = `environment is set to be a ${pc.bold(envType)} by ${pc.cyan(`process.env.NODE_ENV===${JSON.stringify(getNodeEnv())}`)}`;
112
113
  return nodeEnvDesc;
113
114
  }
115
+ // For example, Wrangler bug replaces `process.env.NODE_ENV` with `"undefined"`
116
+ // https://github.com/cloudflare/workers-sdk/issues/7886
117
+ function assertNodeEnvIsNotUndefinedString() {
118
+ const nodeEnv = getNodeEnv();
119
+ assertWarning(nodeEnv !== 'undefined', `${pc.cyan('process.env.NODE_ENV==="undefined"')} which is unexpected: ${pc.cyan('process.env.NODE_ENV')} is allowed to be the *value* ${pc.cyan('undefined')} (i.e. ${pc.cyan('process.env.NODE_ENV===undefined')}) but it shouldn't be the *string* ${pc.cyan('"undefined"')} ${pc.underline('https://vike.dev/NODE_ENV')}`, { onlyOnce: true });
120
+ }
114
121
  function isNodeEnvDev() {
115
- const nodeEnv = getNodeEnvValue();
122
+ const nodeEnv = getNodeEnv();
116
123
  // That's quite strict, let's see if some user complains
117
- return !nodeEnv || ['development', 'dev'].includes(nodeEnv);
124
+ return nodeEnv === undefined || isNodeEnv(['development', 'dev', '']);
125
+ }
126
+ function isNodeEnv(value) {
127
+ const values = Array.isArray(value) ? value : [value];
128
+ const nodeEnv = getNodeEnv();
129
+ return nodeEnv !== undefined && values.includes(nodeEnv.toLowerCase());
118
130
  }
119
- function getNodeEnvValue() {
120
- if (typeof process === 'undefined')
121
- return null;
122
- return process.env.NODE_ENV?.toLowerCase();
131
+ function getNodeEnv() {
132
+ let val;
133
+ try {
134
+ val = process.env.NODE_ENV;
135
+ }
136
+ catch {
137
+ return undefined;
138
+ }
139
+ /*
140
+ // Should we show the following warning? So far I don't think so because of the following. Maybe we can show it once we enable users to disable warnings.
141
+ // - The warning isn't always actionable, e.g. if it's a tool that dynamically sets `process.env.NODE_ENV`.
142
+ // - We assume that tools use `process.env.NODE_ENV` and not someting like `const { env } = process; env.NODE_ENV`. Thus, in practice, `val` overrides `val2` so having `val!==val2` isn't an issue.
143
+ {
144
+ const val2 = process.env['NODE' + '_ENV']
145
+ if (val2)
146
+ assertWarning(
147
+ val === val2,
148
+ `Dynamically setting process.env.NODE_ENV to ${val2} hasn't any effect because process.env.NODE_ENV is being statically replaced to ${val}.`,
149
+ { onlyOnce: true }
150
+ )
151
+ }
152
+ //*/
153
+ return val;
123
154
  }
124
155
  function setNodeEnvProduction() {
125
156
  // The statement `process.env['NODE_ENV'] = 'production'` chokes webpack v4
126
157
  const proc = process;
127
158
  const { env } = proc;
128
159
  env.NODE_ENV = 'production';
129
- assert(getNodeEnvValue() === 'production');
160
+ assert(isNodeEnv('production'));
130
161
  }
@@ -1,7 +1,7 @@
1
1
  export { createDebugger };
2
2
  export { isDebugActivated };
3
3
  export type { Debug };
4
- declare const flags: readonly ["vike:error", "vike:extractAssets", "vike:extractExportNames", "vike:glob", "vike:log", "vike:optimizeDeps", "vike:outDir", "vike:pageFiles", "vike:pointer-imports", "vike:routing", "vike:setup", "vike:stream", "vike:virtual-files", "vike:esbuild-resolve"];
4
+ declare const flags: readonly ["vike:error", "vike:extractAssets", "vike:extractExportNames", "vike:glob", "vike:globalContext", "vike:log", "vike:optimizeDeps", "vike:outDir", "vike:pageFiles", "vike:pointer-imports", "vike:routing", "vike:setup", "vike:stream", "vike:virtual-files", "vike:esbuild-resolve"];
5
5
  type Flag = (typeof flags)[number];
6
6
  type Debug = ReturnType<typeof createDebugger>;
7
7
  type Options = {
@@ -16,6 +16,7 @@ const flags = [
16
16
  'vike:extractAssets',
17
17
  'vike:extractExportNames',
18
18
  'vike:glob',
19
+ 'vike:globalContext',
19
20
  'vike:log',
20
21
  'vike:optimizeDeps',
21
22
  'vike:outDir',
@@ -28,7 +29,7 @@ const flags = [
28
29
  'vike:esbuild-resolve'
29
30
  ];
30
31
  const flagRegex = /\bvike:[a-zA-Z-]+/g;
31
- assertDEBUG();
32
+ assertFlagsActivated();
32
33
  function createDebugger(flag, optionsGlobal) {
33
34
  checkType(flag);
34
35
  assert(flags.includes(flag));
@@ -71,8 +72,8 @@ function debug_(flag, options, ...msgs) {
71
72
  function isDebugActivated(flag) {
72
73
  checkType(flag);
73
74
  assert(flags.includes(flag));
74
- const DEBUG = getDEBUG();
75
- const isActivated = DEBUG?.includes(flag) ?? false;
75
+ const flagsActivated = getFlagsActivated();
76
+ const isActivated = flagsActivated.includes(flag);
76
77
  return isActivated;
77
78
  }
78
79
  function formatMsg(info, options, padding, position) {
@@ -135,13 +136,17 @@ function replaceFunctionSerializer(_key, value) {
135
136
  }
136
137
  return value;
137
138
  }
138
- function assertDEBUG() {
139
- const DEBUG = getDEBUG() ?? '';
140
- const flagsActivated = DEBUG.match(flagRegex) ?? [];
139
+ function assertFlagsActivated() {
140
+ const flagsActivated = getFlagsActivated();
141
141
  flagsActivated.forEach((flag) => {
142
142
  assertUsage(flags.includes(flag), `Unknown DEBUG flag ${pc.cyan(flag)}. Valid flags:\n${flags.map((f) => ` ${pc.cyan(f)}`).join('\n')}`);
143
143
  });
144
144
  }
145
+ function getFlagsActivated() {
146
+ const DEBUG = getDEBUG() ?? '';
147
+ const flagsActivated = DEBUG.match(flagRegex) ?? [];
148
+ return flagsActivated;
149
+ }
145
150
  function getDEBUG() {
146
151
  let DEBUG;
147
152
  // - `process` can be undefined in edge workers
@@ -1,8 +1,6 @@
1
1
  export { getGlobalObject };
2
2
  export { assertIsSingleModuleInstance };
3
3
  import { assert } from './assert.js';
4
- import { projectInfo } from './projectInfo.js';
5
- const projectKey = `_${projectInfo.projectName.toLowerCase()}`;
6
4
  /** Share information across module instances. */
7
5
  function getGlobalObject(
8
6
  // We use the filename (or file path) as key. There should be only one getGlobalObject() usage per file. Thus the key should be unique, assuming the filename (or file path) is unique.
@@ -19,6 +17,7 @@ key) {
19
17
  assert(!(key in globalObjects));
20
18
  }
21
19
  function getGlobalObjects() {
20
+ const projectKey = '_vike';
22
21
  // @ts-ignore
23
22
  const globalObjects = (globalThis[projectKey] = globalThis[projectKey] || {});
24
23
  return globalObjects;
@@ -0,0 +1 @@
1
+ export declare function objectReplace(obj: object, objNew: object, except?: string[]): void;
@@ -0,0 +1,6 @@
1
+ export function objectReplace(obj, objNew, except) {
2
+ Object.keys(obj)
3
+ .filter((key) => !except?.includes(key))
4
+ .forEach((key) => delete obj[key]);
5
+ Object.assign(obj, objNew);
6
+ }
@@ -1,4 +1,4 @@
1
1
  export declare const projectInfo: {
2
2
  projectName: "Vike";
3
- projectVersion: "0.4.218";
3
+ projectVersion: "0.4.220";
4
4
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vike",
3
- "version": "0.4.218",
3
+ "version": "0.4.220",
4
4
  "repository": "https://github.com/vikejs/vike",
5
5
  "exports": {
6
6
  "./server": {
@@ -108,14 +108,6 @@
108
108
  "types": "./dist/esm/node/runtime/page-files/setup.d.ts",
109
109
  "default": "./dist/esm/node/runtime/page-files/setup.js"
110
110
  },
111
- "./__internal/loadImportBuild": {
112
- "worker": "./dist/esm/node/runtime/globalContext/loadImportBuild.js",
113
- "edge-light": "./dist/esm/node/runtime/globalContext/loadImportBuild.js",
114
- "require": "./dist/cjs/node/runtime/globalContext/loadImportBuild.js",
115
- "node": "./dist/esm/node/runtime/globalContext/loadImportBuild.js",
116
- "types": "./dist/esm/node/runtime/globalContext/loadImportBuild.d.ts",
117
- "default": "./dist/esm/node/runtime/globalContext/loadImportBuild.js"
118
- },
119
111
  ".": {
120
112
  "worker": "./dist/esm/node/runtime/index-deprecated.js",
121
113
  "edge-light": "./dist/esm/node/runtime/index-deprecated.js",
@@ -131,7 +123,7 @@
131
123
  "@brillout/json-serializer": "^0.5.15",
132
124
  "@brillout/picocolors": "^1.0.15",
133
125
  "@brillout/require-shim": "^0.1.2",
134
- "@brillout/vite-plugin-server-entry": "^0.5.6",
126
+ "@brillout/vite-plugin-server-entry": "^0.5.8",
135
127
  "acorn": "^8.0.0",
136
128
  "cac": "^6.0.0",
137
129
  "es-module-lexer": "^1.0.0",
@@ -236,7 +228,6 @@
236
228
  "./dist-cjs-fixup.mjs",
237
229
  "./getPageContext.js",
238
230
  "./__internal.js",
239
- "./__internal/loadImportBuild.js",
240
231
  "./__internal/setup.js",
241
232
  "./modifyUrl.js",
242
233
  "./plugin.js",
@@ -255,9 +246,9 @@
255
246
  "@types/resolve": "^1.20.6",
256
247
  "@types/semver": "^7.5.8",
257
248
  "@types/source-map-support": "^0.5.10",
258
- "react-streaming": "^0.3.44",
249
+ "react-streaming": "^0.3.47",
259
250
  "rimraf": "^5.0.5",
260
- "typescript": "^5.6.2",
251
+ "typescript": "^5.7.3",
261
252
  "vite": "^6.0.5"
262
253
  },
263
254
  "scripts": {
@@ -1,3 +0,0 @@
1
- // Some tools still need this as of January 2025
2
- export * from '../dist/esm/node/runtime/globalContext/loadImportBuild.js'
3
- export { default } from '../dist/esm/node/runtime/globalContext/loadImportBuild.js'