vike 0.4.171 → 0.4.172-commit-c1b0884

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 (216) hide show
  1. package/dist/cjs/node/plugin/index.js +3 -0
  2. package/dist/cjs/node/plugin/plugins/buildConfig.js +3 -4
  3. package/dist/cjs/node/plugin/plugins/config/index.js +9 -5
  4. package/dist/cjs/node/plugin/plugins/devConfig/determineOptimizeDeps.js +18 -15
  5. package/dist/cjs/node/plugin/plugins/devConfig/index.js +2 -1
  6. package/dist/cjs/node/plugin/plugins/envVars.js +2 -1
  7. package/dist/cjs/node/plugin/plugins/extractAssetsPlugin.js +1 -1
  8. package/dist/cjs/node/plugin/plugins/importUserCode/{generateEagerImport.js → addImportStatement.js} +8 -10
  9. package/dist/cjs/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.js +0 -1
  10. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +3 -3
  11. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.js +19 -7
  12. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/loadFileAtConfigTime.js +2 -2
  13. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +43 -85
  14. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigValuesAll.js +5 -44
  15. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.js +10 -51
  16. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/isRuntimeEnvMatch.js +6 -0
  17. package/dist/cjs/node/plugin/resolveClientEntriesDev.js +59 -0
  18. package/dist/cjs/node/plugin/shared/addSsrMiddleware.js +17 -2
  19. package/dist/cjs/node/prerender/runPrerender.js +35 -15
  20. package/dist/cjs/node/prerender/utils.js +1 -0
  21. package/dist/cjs/node/runtime/html/injectAssets/getHtmlTags.js +3 -3
  22. package/dist/cjs/node/runtime/html/injectAssets/getViteDevScripts.js +2 -1
  23. package/dist/cjs/node/runtime/html/injectAssets/mergeScriptTags.js +2 -8
  24. package/dist/cjs/node/runtime/html/renderHtml.js +19 -20
  25. package/dist/cjs/node/runtime/html/serializePageContextClientSide.js +1 -1
  26. package/dist/cjs/node/runtime/html/stream.js +9 -9
  27. package/dist/cjs/node/runtime/renderPage/analyzePage.js +9 -7
  28. package/dist/cjs/node/runtime/renderPage/createHttpResponseObject/getCacheControl.js +1 -1
  29. package/dist/cjs/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.js +2 -2
  30. package/dist/cjs/node/runtime/renderPage/executeOnRenderHtmlHook.js +8 -8
  31. package/dist/cjs/node/runtime/renderPage/getHttpResponseBody.js +2 -2
  32. package/dist/cjs/node/runtime/renderPage/getPageAssets.js +9 -59
  33. package/dist/cjs/node/runtime/renderPage/loadUserFilesServerSide.js +4 -5
  34. package/dist/cjs/node/runtime/renderPage/logErrorHint.js +91 -282
  35. package/dist/cjs/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.js +2 -2
  36. package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +30 -10
  37. package/dist/cjs/node/runtime/renderPage.js +24 -17
  38. package/dist/cjs/node/runtime/utils.js +2 -0
  39. package/dist/cjs/node/shared/assertV1Design.js +3 -4
  40. package/dist/cjs/shared/getPageContext.js +5 -0
  41. package/dist/cjs/shared/{addUrlComputedProps.js → getPageContextUrlComputed.js} +52 -42
  42. package/dist/cjs/shared/getPageFiles/analyzeClientSide.js +2 -2
  43. package/dist/cjs/shared/getPageFiles/getExports.js +49 -1
  44. package/dist/cjs/shared/getPageFiles/parseGlobResults.js +15 -8
  45. package/dist/cjs/shared/hooks/executeHook.js +22 -3
  46. package/dist/cjs/shared/hooks/getHook.js +2 -2
  47. package/dist/cjs/shared/page-configs/getConfigValue.js +14 -17
  48. package/dist/cjs/shared/page-configs/getConfigValueBuildTime.js +70 -0
  49. package/dist/cjs/shared/page-configs/loadConfigValues.js +3 -12
  50. package/dist/cjs/shared/page-configs/serialize/assertPageConfigsSerialized.js +0 -18
  51. package/dist/cjs/shared/page-configs/serialize/parsePageConfigs.js +110 -16
  52. package/dist/cjs/shared/page-configs/serialize/serializeConfigValues.js +198 -0
  53. package/dist/cjs/shared/route/executeGuardHook.js +1 -1
  54. package/dist/cjs/shared/route/executeOnBeforeRouteHook.js +1 -1
  55. package/dist/cjs/shared/route/index.js +2 -2
  56. package/dist/cjs/shared/route/loadPageRoutes.js +2 -2
  57. package/dist/cjs/shared/route/resolveRouteFunction.js +2 -2
  58. package/dist/cjs/shared/sortPageContext.js +4 -8
  59. package/dist/cjs/shared/utils.js +2 -0
  60. package/dist/cjs/utils/assert.js +3 -3
  61. package/dist/cjs/utils/assertNodeVersion.js +1 -1
  62. package/dist/cjs/utils/changeEnumerable.js +9 -0
  63. package/dist/cjs/utils/escapeHtml.js +14 -0
  64. package/dist/cjs/utils/getPropAccessNotation.js +1 -4
  65. package/dist/cjs/utils/hasProp.js +5 -7
  66. package/dist/cjs/utils/normalizeHeaders.js +13 -0
  67. package/dist/cjs/utils/objectAssign.js +1 -1
  68. package/dist/cjs/utils/objectDefineProperty.js +8 -0
  69. package/dist/cjs/utils/objectKeys.js +8 -4
  70. package/dist/cjs/utils/projectInfo.js +1 -1
  71. package/dist/esm/client/client-routing-runtime/createPageContext.d.ts +6 -4
  72. package/dist/esm/client/client-routing-runtime/createPageContext.js +4 -3
  73. package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.js +16 -12
  74. package/dist/esm/client/client-routing-runtime/installClientRouter.js +18 -10
  75. package/dist/esm/client/client-routing-runtime/renderPageClientSide.js +3 -3
  76. package/dist/esm/client/server-routing-runtime/getPageContext.d.ts +4 -4
  77. package/dist/esm/client/server-routing-runtime/utils.d.ts +1 -0
  78. package/dist/esm/client/server-routing-runtime/utils.js +1 -0
  79. package/dist/esm/client/shared/executeOnRenderClientHook.js +1 -1
  80. package/dist/esm/client/shared/getPageContextProxyForUser.d.ts +3 -2
  81. package/dist/esm/client/shared/getPageContextProxyForUser.js +35 -48
  82. package/dist/esm/client/shared/loadUserFilesClientSide.js +4 -4
  83. package/dist/esm/node/plugin/index.js +3 -0
  84. package/dist/esm/node/plugin/plugins/buildConfig.js +3 -4
  85. package/dist/esm/node/plugin/plugins/config/index.js +9 -5
  86. package/dist/esm/node/plugin/plugins/devConfig/determineOptimizeDeps.js +18 -15
  87. package/dist/esm/node/plugin/plugins/devConfig/index.js +2 -1
  88. package/dist/esm/node/plugin/plugins/envVars.js +2 -1
  89. package/dist/esm/node/plugin/plugins/extractAssetsPlugin.js +1 -1
  90. package/dist/esm/node/plugin/plugins/importUserCode/addImportStatement.d.ts +14 -0
  91. package/dist/esm/node/plugin/plugins/importUserCode/{generateEagerImport.js → addImportStatement.js} +7 -9
  92. package/dist/esm/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.js +0 -1
  93. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.d.ts +2 -1
  94. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +3 -3
  95. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.d.ts +1 -1
  96. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.js +20 -8
  97. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/loadFileAtConfigTime.js +2 -2
  98. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.d.ts +4 -1
  99. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +43 -85
  100. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigValuesAll.js +5 -44
  101. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.js +10 -51
  102. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/isRuntimeEnvMatch.d.ts +1 -0
  103. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/isRuntimeEnvMatch.js +6 -0
  104. package/dist/esm/node/plugin/resolveClientEntriesDev.d.ts +4 -0
  105. package/dist/esm/node/plugin/resolveClientEntriesDev.js +56 -0
  106. package/dist/esm/node/plugin/shared/addSsrMiddleware.js +14 -2
  107. package/dist/esm/node/prerender/runPrerender.js +37 -17
  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/html/injectAssets/getHtmlTags.js +3 -3
  111. package/dist/esm/node/runtime/html/injectAssets/getViteDevScripts.js +3 -2
  112. package/dist/esm/node/runtime/html/injectAssets/mergeScriptTags.d.ts +1 -1
  113. package/dist/esm/node/runtime/html/injectAssets/mergeScriptTags.js +2 -8
  114. package/dist/esm/node/runtime/html/renderHtml.js +19 -20
  115. package/dist/esm/node/runtime/html/serializePageContextClientSide.js +1 -1
  116. package/dist/esm/node/runtime/html/stream.d.ts +1 -1
  117. package/dist/esm/node/runtime/html/stream.js +9 -9
  118. package/dist/esm/node/runtime/renderPage/analyzePage.js +9 -7
  119. package/dist/esm/node/runtime/renderPage/createHttpResponseObject/getCacheControl.js +2 -2
  120. package/dist/esm/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.js +2 -2
  121. package/dist/esm/node/runtime/renderPage/executeOnRenderHtmlHook.js +8 -8
  122. package/dist/esm/node/runtime/renderPage/getHttpResponseBody.js +2 -2
  123. package/dist/esm/node/runtime/renderPage/getPageAssets.d.ts +3 -0
  124. package/dist/esm/node/runtime/renderPage/getPageAssets.js +9 -59
  125. package/dist/esm/node/runtime/renderPage/loadUserFilesServerSide.d.ts +1 -6
  126. package/dist/esm/node/runtime/renderPage/loadUserFilesServerSide.js +4 -5
  127. package/dist/esm/node/runtime/renderPage/logErrorHint.d.ts +2 -6
  128. package/dist/esm/node/runtime/renderPage/logErrorHint.js +92 -283
  129. package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.d.ts +2 -2
  130. package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.js +2 -2
  131. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +65 -39
  132. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +31 -11
  133. package/dist/esm/node/runtime/renderPage.js +24 -17
  134. package/dist/esm/node/runtime/utils.d.ts +2 -0
  135. package/dist/esm/node/runtime/utils.js +2 -0
  136. package/dist/esm/node/shared/assertV1Design.d.ts +2 -2
  137. package/dist/esm/node/shared/assertV1Design.js +3 -4
  138. package/dist/esm/shared/ConfigVike.d.ts +7 -0
  139. package/dist/esm/shared/VikeNamespace.d.ts +9 -0
  140. package/dist/esm/shared/getPageContext.d.ts +1 -0
  141. package/dist/esm/shared/getPageContext.js +1 -0
  142. package/dist/esm/shared/{addUrlComputedProps.d.ts → getPageContextUrlComputed.d.ts} +23 -21
  143. package/dist/esm/shared/{addUrlComputedProps.js → getPageContextUrlComputed.js} +52 -42
  144. package/dist/esm/shared/getPageFiles/analyzeClientSide.js +3 -3
  145. package/dist/esm/shared/getPageFiles/getExports.d.ts +36 -0
  146. package/dist/esm/shared/getPageFiles/getExports.js +50 -2
  147. package/dist/esm/shared/getPageFiles/parseGlobResults.js +14 -7
  148. package/dist/esm/shared/hooks/executeHook.d.ts +10 -1
  149. package/dist/esm/shared/hooks/executeHook.js +21 -2
  150. package/dist/esm/shared/hooks/getHook.d.ts +2 -2
  151. package/dist/esm/shared/hooks/getHook.js +3 -3
  152. package/dist/esm/shared/page-configs/Config/PageContextConfig.d.ts +2 -2
  153. package/dist/esm/shared/page-configs/PageConfig.d.ts +14 -8
  154. package/dist/esm/shared/page-configs/getConfigValue.d.ts +12 -12
  155. package/dist/esm/shared/page-configs/getConfigValue.js +13 -16
  156. package/dist/esm/shared/page-configs/getConfigValueBuildTime.d.ts +9 -0
  157. package/dist/esm/shared/page-configs/getConfigValueBuildTime.js +67 -0
  158. package/dist/esm/shared/page-configs/loadConfigValues.js +3 -12
  159. package/dist/esm/shared/page-configs/serialize/PageConfigSerialized.d.ts +17 -21
  160. package/dist/esm/shared/page-configs/serialize/assertPageConfigsSerialized.d.ts +1 -5
  161. package/dist/esm/shared/page-configs/serialize/assertPageConfigsSerialized.js +1 -16
  162. package/dist/esm/shared/page-configs/serialize/parsePageConfigs.d.ts +4 -1
  163. package/dist/esm/shared/page-configs/serialize/parsePageConfigs.js +109 -15
  164. package/dist/esm/shared/page-configs/serialize/serializeConfigValues.d.ts +5 -0
  165. package/dist/esm/shared/page-configs/serialize/serializeConfigValues.js +192 -0
  166. package/dist/esm/shared/route/executeGuardHook.js +1 -1
  167. package/dist/esm/shared/route/executeOnBeforeRouteHook.js +1 -1
  168. package/dist/esm/shared/route/index.d.ts +3 -3
  169. package/dist/esm/shared/route/index.js +2 -2
  170. package/dist/esm/shared/route/loadPageRoutes.js +3 -3
  171. package/dist/esm/shared/route/resolveRouteFunction.d.ts +2 -2
  172. package/dist/esm/shared/route/resolveRouteFunction.js +2 -2
  173. package/dist/esm/shared/sortPageContext.js +4 -8
  174. package/dist/esm/shared/types.d.ts +32 -6
  175. package/dist/esm/shared/utils.d.ts +2 -0
  176. package/dist/esm/shared/utils.js +2 -0
  177. package/dist/esm/types/index.d.ts +1 -1
  178. package/dist/esm/utils/assert.js +3 -3
  179. package/dist/esm/utils/assertNodeVersion.js +1 -1
  180. package/dist/esm/utils/changeEnumerable.d.ts +2 -0
  181. package/dist/esm/utils/changeEnumerable.js +5 -0
  182. package/dist/esm/utils/escapeHtml.d.ts +1 -0
  183. package/dist/esm/utils/escapeHtml.js +10 -0
  184. package/dist/esm/utils/getPropAccessNotation.d.ts +1 -2
  185. package/dist/esm/utils/getPropAccessNotation.js +2 -6
  186. package/dist/esm/utils/hasProp.d.ts +4 -13
  187. package/dist/esm/utils/hasProp.js +5 -7
  188. package/dist/esm/utils/normalizeHeaders.d.ts +1 -0
  189. package/dist/esm/utils/normalizeHeaders.js +9 -0
  190. package/dist/esm/utils/objectAssign.js +1 -1
  191. package/dist/esm/utils/objectDefineProperty.d.ts +4 -0
  192. package/dist/esm/utils/objectDefineProperty.js +4 -0
  193. package/dist/esm/utils/objectKeys.d.ts +1 -3
  194. package/dist/esm/utils/objectKeys.js +8 -4
  195. package/dist/esm/utils/projectInfo.d.ts +2 -2
  196. package/dist/esm/utils/projectInfo.js +1 -1
  197. package/package.json +23 -14
  198. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getConfigValuesSerialized.js +0 -76
  199. package/dist/cjs/node/plugin/shared/getConfigValueSourcesNotOverriden.js +0 -14
  200. package/dist/cjs/node/shared/getClientEntry.js +0 -12
  201. package/dist/cjs/shared/page-configs/serialize/parseConfigValuesImported.js +0 -85
  202. package/dist/cjs/shared/page-configs/serialize/parseConfigValuesSerialized.js +0 -24
  203. package/dist/cjs/shared/page-configs/serialize/serializeConfigValue.js +0 -50
  204. package/dist/esm/node/plugin/plugins/importUserCode/generateEagerImport.d.ts +0 -16
  205. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getConfigValuesSerialized.d.ts +0 -5
  206. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getConfigValuesSerialized.js +0 -70
  207. package/dist/esm/node/plugin/shared/getConfigValueSourcesNotOverriden.d.ts +0 -5
  208. package/dist/esm/node/plugin/shared/getConfigValueSourcesNotOverriden.js +0 -11
  209. package/dist/esm/node/shared/getClientEntry.d.ts +0 -3
  210. package/dist/esm/node/shared/getClientEntry.js +0 -9
  211. package/dist/esm/shared/page-configs/serialize/parseConfigValuesImported.d.ts +0 -4
  212. package/dist/esm/shared/page-configs/serialize/parseConfigValuesImported.js +0 -82
  213. package/dist/esm/shared/page-configs/serialize/parseConfigValuesSerialized.d.ts +0 -4
  214. package/dist/esm/shared/page-configs/serialize/parseConfigValuesSerialized.js +0 -21
  215. package/dist/esm/shared/page-configs/serialize/serializeConfigValue.d.ts +0 -8
  216. package/dist/esm/shared/page-configs/serialize/serializeConfigValue.js +0 -47
@@ -6,13 +6,11 @@ const virtualFilePageConfigValuesAll_js_1 = require("../../../../shared/virtual-
6
6
  const getVikeConfig_js_1 = require("./getVikeConfig.js");
7
7
  const extractAssetsQuery_js_1 = require("../../../../shared/extractAssetsQuery.js");
8
8
  const debug_js_1 = require("./debug.js");
9
- const getConfigValue_js_1 = require("../../../../../shared/page-configs/getConfigValue.js");
10
- const getConfigValueSourcesNotOverriden_js_1 = require("../../../shared/getConfigValueSourcesNotOverriden.js");
11
9
  const isRuntimeEnvMatch_js_1 = require("./isRuntimeEnvMatch.js");
12
- const serializeConfigValue_js_1 = require("../../../../../shared/page-configs/serialize/serializeConfigValue.js");
10
+ const serializeConfigValues_js_1 = require("../../../../../shared/page-configs/serialize/serializeConfigValues.js");
13
11
  const getConfigVike_js_1 = require("../../../../shared/getConfigVike.js");
14
- const getConfigValuesSerialized_js_1 = require("./getConfigValuesSerialized.js");
15
12
  const fixServerAssets_js_1 = require("../../buildConfig/fixServerAssets.js");
13
+ const getConfigValueBuildTime_js_1 = require("../../../../../shared/page-configs/getConfigValueBuildTime.js");
16
14
  async function getVirtualFilePageConfigValuesAll(id, isDev, config) {
17
15
  const result = (0, virtualFilePageConfigValuesAll_js_1.isVirtualFileIdPageConfigValuesAll)(id);
18
16
  (0, utils_js_1.assert)(result);
@@ -23,7 +21,7 @@ async function getVirtualFilePageConfigValuesAll(id, isDev, config) {
23
21
  }
24
22
  */
25
23
  const { pageId, isForClientSide } = result;
26
- const { pageConfigs } = await (0, getVikeConfig_js_1.getVikeConfig)(config, isDev, true);
24
+ const { pageConfigs } = await (0, getVikeConfig_js_1.getVikeConfig)(config, isDev, { tolerateInvalidConfig: true });
27
25
  const pageConfig = pageConfigs.find((pageConfig) => pageConfig.pageId === pageId);
28
26
  (0, utils_js_1.assert)(pageConfig);
29
27
  const configVike = await (0, getConfigVike_js_1.getConfigVike)(config);
@@ -35,16 +33,9 @@ exports.getVirtualFilePageConfigValuesAll = getVirtualFilePageConfigValuesAll;
35
33
  function getLoadConfigValuesAll(pageConfig, isForClientSide, pageId, includeAssetsImportedByServer, isDev) {
36
34
  const lines = [];
37
35
  const importStatements = [];
38
- const isClientRouting = (0, getConfigValue_js_1.getConfigValue)(pageConfig, 'clientRouting', 'boolean')?.value ?? false;
39
- lines.push('export const configValuesImported = [');
40
- lines.push(getConfigValuesImported(pageConfig, isForClientSide, isClientRouting, importStatements));
41
- lines.push('];');
36
+ const isClientRouting = (0, getConfigValueBuildTime_js_1.getConfigValueBuildTime)(pageConfig, 'clientRouting', 'boolean')?.value ?? false;
42
37
  lines.push('export const configValuesSerialized = {');
43
- lines.push((0, getConfigValuesSerialized_js_1.getConfigValuesSerialized)(pageConfig, (configEnv, configValueSource) => isEnvMatch(configEnv, !configValueSource ? false : checkWhetherIsImport(configValueSource), {
44
- isImport: false,
45
- isForClientSide,
46
- isClientRouting
47
- })));
38
+ lines.push(...(0, serializeConfigValues_js_1.serializeConfigValues)(pageConfig, importStatements, (configEnv) => (0, isRuntimeEnvMatch_js_1.isRuntimeEnvMatch)(configEnv, { isForClientSide, isClientRouting, isEager: false, isDev }), ''));
48
39
  lines.push('};');
49
40
  if (!(0, fixServerAssets_js_1.fixServerAssets_isEnabled)() && includeAssetsImportedByServer && isForClientSide && !isDev) {
50
41
  importStatements.push(`import '${(0, extractAssetsQuery_js_1.extractAssetsAddQuery)((0, virtualFilePageConfigValuesAll_js_1.getVirtualFileIdPageConfigValuesAll)(pageId, false))}'`);
@@ -52,33 +43,3 @@ function getLoadConfigValuesAll(pageConfig, isForClientSide, pageId, includeAsse
52
43
  const code = [...importStatements, ...lines].join('\n');
53
44
  return code;
54
45
  }
55
- function getConfigValuesImported(pageConfig, isForClientSide, isClientRouting, importStatements) {
56
- const lines = [];
57
- const varCounterContainer = { varCounter: 0 };
58
- (0, getConfigValueSourcesNotOverriden_js_1.getConfigValueSourcesNotOverriden)(pageConfig).forEach((configValueSource) => {
59
- if (!isEnvMatch(configValueSource.configEnv, checkWhetherIsImport(configValueSource), {
60
- isImport: true,
61
- isForClientSide,
62
- isClientRouting
63
- }))
64
- return;
65
- const whitespace = ' ';
66
- lines.push(...(0, serializeConfigValue_js_1.serializeConfigValueImported)(configValueSource, configValueSource.configName, whitespace, varCounterContainer, importStatements));
67
- });
68
- const code = lines.join('\n');
69
- return code;
70
- }
71
- function checkWhetherIsImport(configValueSource) {
72
- const { valueIsImportedAtRuntime, valueIsFilePath } = configValueSource;
73
- return valueIsImportedAtRuntime && !valueIsFilePath;
74
- }
75
- function isEnvMatch(configEnv, isImport, runtime) {
76
- // Whether config value is imported or serialized
77
- if (isImport !== runtime.isImport)
78
- return false;
79
- // Runtime match
80
- const { isForClientSide, isClientRouting } = runtime;
81
- if (!(0, isRuntimeEnvMatch_js_1.isRuntimeEnvMatch)(configEnv, { isForClientSide, isClientRouting, isEager: false }))
82
- return false;
83
- return true;
84
- }
@@ -1,33 +1,30 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getVirtualFilePageConfigs = void 0;
4
- const utils_js_1 = require("../../../utils.js");
5
4
  const virtualFilePageConfigValuesAll_js_1 = require("../../../../shared/virtual-files/virtualFilePageConfigValuesAll.js");
6
5
  const debug_js_1 = require("./debug.js");
7
6
  const getVikeConfig_js_1 = require("./getVikeConfig.js");
8
7
  const isRuntimeEnvMatch_js_1 = require("./isRuntimeEnvMatch.js");
9
- const serializeConfigValue_js_1 = require("../../../../../shared/page-configs/serialize/serializeConfigValue.js");
10
- const getConfigValuesSerialized_js_1 = require("./getConfigValuesSerialized.js");
8
+ const serializeConfigValues_js_1 = require("../../../../../shared/page-configs/serialize/serializeConfigValues.js");
11
9
  async function getVirtualFilePageConfigs(isForClientSide, isDev, id, isClientRouting, config) {
12
- const { pageConfigs, pageConfigGlobal } = await (0, getVikeConfig_js_1.getVikeConfig)(config, isDev, true);
10
+ const { pageConfigs, pageConfigGlobal } = await (0, getVikeConfig_js_1.getVikeConfig)(config, isDev, { tolerateInvalidConfig: true });
13
11
  return getCode(pageConfigs, pageConfigGlobal, isForClientSide, isDev, id, isClientRouting);
14
12
  }
15
13
  exports.getVirtualFilePageConfigs = getVirtualFilePageConfigs;
16
14
  function getCode(pageConfigs, pageConfigGlobal, isForClientSide, isDev, id, isClientRouting) {
17
15
  const lines = [];
18
16
  const importStatements = [];
19
- const varCounterContainer = { varCounter: 0 };
20
17
  lines.push('export const pageConfigsSerialized = [');
21
- lines.push(getCodePageConfigsSerialized(pageConfigs, isForClientSide, isClientRouting, importStatements, varCounterContainer));
18
+ lines.push(getCodePageConfigsSerialized(pageConfigs, isForClientSide, isClientRouting, isDev, importStatements));
22
19
  lines.push('];');
23
20
  lines.push('export const pageConfigGlobalSerialized = {');
24
- lines.push(getCodePageConfigGlobalSerialized(pageConfigGlobal, isForClientSide, isDev, importStatements, varCounterContainer));
21
+ lines.push(getCodePageConfigGlobalSerialized(pageConfigGlobal, isForClientSide, isClientRouting, isDev, importStatements));
25
22
  lines.push('};');
26
23
  const code = [...importStatements, ...lines].join('\n');
27
24
  (0, debug_js_1.debug)(id, isForClientSide ? 'CLIENT-SIDE' : 'SERVER-SIDE', code);
28
25
  return code;
29
26
  }
30
- function getCodePageConfigsSerialized(pageConfigs, isForClientSide, isClientRouting, importStatements, varCounterContainer) {
27
+ function getCodePageConfigsSerialized(pageConfigs, isForClientSide, isClientRouting, isDev, importStatements) {
31
28
  const lines = [];
32
29
  pageConfigs.forEach((pageConfig) => {
33
30
  const { pageId, routeFilesystem, isErrorPage } = pageConfig;
@@ -37,57 +34,19 @@ function getCodePageConfigsSerialized(pageConfigs, isForClientSide, isClientRout
37
34
  lines.push(` isErrorPage: ${JSON.stringify(isErrorPage)},`);
38
35
  lines.push(` routeFilesystem: ${JSON.stringify(routeFilesystem)},`);
39
36
  lines.push(` loadConfigValuesAll: () => import(${JSON.stringify(virtualFileIdPageConfigValuesAll)}),`);
40
- // Serialized config values
41
37
  lines.push(` configValuesSerialized: {`);
42
- lines.push((0, getConfigValuesSerialized_js_1.getConfigValuesSerialized)(pageConfig, (configEnv) => (0, isRuntimeEnvMatch_js_1.isRuntimeEnvMatch)(configEnv, { isForClientSide, isClientRouting, isEager: true })));
38
+ lines.push(...(0, serializeConfigValues_js_1.serializeConfigValues)(pageConfig, importStatements, (configEnv) => (0, isRuntimeEnvMatch_js_1.isRuntimeEnvMatch)(configEnv, { isForClientSide, isClientRouting, isEager: true, isDev }), ' '));
43
39
  lines.push(` },`);
44
- // Imported config values
45
- const whitespace = ' ';
46
- lines.push(`${whitespace}configValuesImported: [`);
47
- Object.entries(pageConfig.configValueSources).forEach(([configName, sources]) => {
48
- const configValue = pageConfig.configValues[configName];
49
- if (configValue)
50
- return;
51
- const configValueSource = sources[0];
52
- (0, utils_js_1.assert)(configValueSource);
53
- if (!configValueSource.configEnv.eager)
54
- return;
55
- if (!(0, isRuntimeEnvMatch_js_1.isRuntimeEnvMatch)(configValueSource.configEnv, { isForClientSide, isClientRouting, isEager: true }))
56
- return;
57
- lines.push(...(0, serializeConfigValue_js_1.serializeConfigValueImported)(configValueSource, configName, whitespace, varCounterContainer, importStatements));
58
- });
59
- lines.push(`${whitespace}],`);
60
40
  lines.push(` },`);
61
41
  });
62
42
  const code = lines.join('\n');
63
43
  return code;
64
44
  }
65
- function getCodePageConfigGlobalSerialized(pageConfigGlobal, isForClientSide, isDev, importStatements, varCounterContainer) {
45
+ function getCodePageConfigGlobalSerialized(pageConfigGlobal, isForClientSide, isClientRouting, isDev, importStatements) {
66
46
  const lines = [];
67
- /* Nothing (yet)
68
- lines.push(` configValuesSerialized: {`)
69
- lines.push(` },`)
70
- */
71
- lines.push(` configValuesImported: [`);
72
- (0, utils_js_1.objectEntries)(pageConfigGlobal.configValueSources).forEach(([configName, sources]) => {
73
- if (configName === 'onBeforeRoute') {
74
- // if( isForClientSide && !isClientRouting ) return
75
- }
76
- else if (configName === 'onPrerenderStart') {
77
- if (isDev || isForClientSide) {
78
- // Only load onPrerenderStart() in server production runtime
79
- return;
80
- }
81
- }
82
- else {
83
- (0, utils_js_1.assert)(false);
84
- }
85
- const configValueSource = sources[0];
86
- (0, utils_js_1.assert)(configValueSource);
87
- const whitespace = ' ';
88
- lines.push(...(0, serializeConfigValue_js_1.serializeConfigValueImported)(configValueSource, configName, whitespace, varCounterContainer, importStatements));
89
- });
90
- lines.push(` ],`);
47
+ lines.push(` configValuesSerialized: {`);
48
+ lines.push(...(0, serializeConfigValues_js_1.serializeConfigValues)(pageConfigGlobal, importStatements, (configEnv) => (0, isRuntimeEnvMatch_js_1.isRuntimeEnvMatch)(configEnv, { isForClientSide, isClientRouting, isEager: true, isDev }), ' '));
49
+ lines.push(` },`);
91
50
  const code = lines.join('\n');
92
51
  return code;
93
52
  }
@@ -16,6 +16,12 @@ function isRuntimeEnvMatch(configEnv, runtime) {
16
16
  // Eager
17
17
  if (runtime.isEager !== !!configEnv.eager)
18
18
  return false;
19
+ // Production/development
20
+ if (
21
+ //
22
+ (configEnv.production === true && runtime.isDev) ||
23
+ (configEnv.production === false && !runtime.isDev))
24
+ return false;
19
25
  return true;
20
26
  }
21
27
  exports.isRuntimeEnvMatch = isRuntimeEnvMatch;
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveClientEntriesDev = void 0;
4
+ const utils_js_1 = require("./utils.js");
5
+ const module_1 = require("module");
6
+ const path_1 = require("path");
7
+ const url_1 = require("url");
8
+ // @ts-ignore Shimmed by dist-cjs-fixup.js for CJS build.
9
+ const importMetaUrl = `file://${__filename}`;
10
+ const require_ = (0, module_1.createRequire)(importMetaUrl);
11
+ const __dirname_ = (0, path_1.dirname)((0, url_1.fileURLToPath)(importMetaUrl));
12
+ (0, utils_js_1.assertIsNotProductionRuntime)();
13
+ async function resolveClientEntriesDev(clientEntry, viteDevServer) {
14
+ let root = viteDevServer.config.root;
15
+ (0, utils_js_1.assert)(root);
16
+ root = (0, utils_js_1.toPosixPath)(root);
17
+ // The `?import` suffix is needed for MDX to be transpiled:
18
+ // - Not transpiled: `/pages/markdown.page.mdx`
19
+ // - Transpiled: `/pages/markdown.page.mdx?import`
20
+ // But `?import` doesn't work with `/@fs/`:
21
+ // - Not transpiled: /@fs/home/runner/work/vike/vike/examples/react-full/pages/markdown.page.mdx
22
+ // - Not transpiled: /@fs/home/runner/work/vike/vike/examples/react-full/pages/markdown.page.mdx?import
23
+ if (clientEntry.endsWith('?import')) {
24
+ (0, utils_js_1.assert)(clientEntry.startsWith('/'));
25
+ return clientEntry;
26
+ }
27
+ (0, utils_js_1.assertPosixPath)(clientEntry);
28
+ let filePath;
29
+ if (clientEntry.startsWith('/')) {
30
+ filePath = (0, utils_js_1.pathJoin)(root, clientEntry);
31
+ }
32
+ else {
33
+ if (clientEntry.startsWith('@@vike/')) {
34
+ (0, utils_js_1.assert)(clientEntry.endsWith('.js'));
35
+ try {
36
+ // For Vitest (which doesn't resolve vike to its dist but to its source files)
37
+ // [RELATIVE_PATH_FROM_DIST] Current file: node_modules/vike/node/plugin/resolveClientEntriesDev.js
38
+ filePath = (0, utils_js_1.toPosixPath)(require_.resolve(clientEntry.replace('@@vike/dist/esm/client/', '../../client/').replace('.js', '.ts')));
39
+ }
40
+ catch {
41
+ // For users
42
+ // [RELATIVE_PATH_FROM_DIST] Current file: node_modules/vike/dist/esm/node/plugin/resolveClientEntriesDev.js
43
+ filePath = (0, utils_js_1.toPosixPath)(require_.resolve(clientEntry.replace('@@vike/dist/esm/client/', '../../../../dist/esm/client/')));
44
+ }
45
+ }
46
+ else {
47
+ (0, utils_js_1.assertIsNpmPackageImport)(clientEntry);
48
+ filePath = require_.resolve(clientEntry);
49
+ }
50
+ }
51
+ if (!filePath.startsWith('/')) {
52
+ (0, utils_js_1.assert)(process.platform === 'win32');
53
+ filePath = '/' + filePath;
54
+ }
55
+ filePath = '/@fs' + filePath;
56
+ (0, utils_js_1.assertPosixPath)(filePath);
57
+ return filePath;
58
+ }
59
+ exports.resolveClientEntriesDev = resolveClientEntriesDev;
@@ -1,7 +1,12 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.addSsrMiddleware = void 0;
4
7
  const renderPage_js_1 = require("../../runtime/renderPage.js");
8
+ const utils_js_1 = require("../utils.js");
9
+ const picocolors_1 = __importDefault(require("@brillout/picocolors"));
5
10
  function addSsrMiddleware(middlewares) {
6
11
  middlewares.use(async (req, res, next) => {
7
12
  if (res.headersSent)
@@ -10,11 +15,21 @@ function addSsrMiddleware(middlewares) {
10
15
  if (!url)
11
16
  return next();
12
17
  const { headers } = req;
13
- const userAgent = headers['user-agent'];
14
18
  const pageContextInit = {
15
19
  urlOriginal: url,
16
- userAgent
20
+ headersOriginal: headers
17
21
  };
22
+ Object.defineProperty(pageContextInit, 'userAgent', {
23
+ get() {
24
+ // TODO/next-major-release: assertUsage() instead of assertWarning()
25
+ (0, utils_js_1.assertWarning)(false, `${picocolors_1.default.cyan('pageContext.userAgent')} is deprecated: use ${picocolors_1.default.cyan("pageContext.headers['user-agent']")} instead.`, {
26
+ showStackTrace: true,
27
+ onlyOnce: true
28
+ });
29
+ return headers['user-agent'];
30
+ },
31
+ enumerable: false
32
+ });
18
33
  let pageContext;
19
34
  try {
20
35
  pageContext = await (0, renderPage_js_1.renderPage)(pageContextInit);
@@ -44,7 +44,7 @@ const helpers_js_1 = require("../../shared/page-configs/helpers.js");
44
44
  const getConfigValue_js_1 = require("../../shared/page-configs/getConfigValue.js");
45
45
  const loadConfigValues_js_1 = require("../../shared/page-configs/loadConfigValues.js");
46
46
  const error_page_js_1 = require("../../shared/error-page.js");
47
- const addUrlComputedProps_js_1 = require("../../shared/addUrlComputedProps.js");
47
+ const getPageContextUrlComputed_js_1 = require("../../shared/getPageContextUrlComputed.js");
48
48
  const abort_js_1 = require("../../shared/route/abort.js");
49
49
  const loadUserFilesServerSide_js_1 = require("../runtime/renderPage/loadUserFilesServerSide.js");
50
50
  const getHook_js_1 = require("../../shared/hooks/getHook.js");
@@ -52,6 +52,7 @@ const noRouteMatch_js_1 = require("../../shared/route/noRouteMatch.js");
52
52
  const getVikeConfig_js_1 = require("../plugin/plugins/importUserCode/v1-design/getVikeConfig.js");
53
53
  const logErrorHint_js_1 = require("../runtime/renderPage/logErrorHint.js");
54
54
  const executeHook_js_1 = require("../../shared/hooks/executeHook.js");
55
+ const getConfigValueBuildTime_js_1 = require("../../shared/page-configs/getConfigValueBuildTime.js");
55
56
  async function runPrerenderFromAPI(options = {}) {
56
57
  await runPrerender(options, 'prerender()');
57
58
  // - We purposely propagate the error to the user land, so that the error interrupts the user land. It's also, I guess, a nice-to-have that the user has control over the error.
@@ -142,7 +143,7 @@ async function collectDoNoPrerenderList(renderContext, pageConfigs, doNotPrerend
142
143
  // V1 design
143
144
  pageConfigs.forEach((pageConfig) => {
144
145
  const configName = 'prerender';
145
- const configValue = (0, getConfigValue_js_1.getConfigValue)(pageConfig, configName, 'boolean');
146
+ const configValue = (0, getConfigValueBuildTime_js_1.getConfigValueBuildTime)(pageConfig, configName, 'boolean');
146
147
  if (configValue?.value === false) {
147
148
  const configValueFilePathToShowToUser = (0, helpers_js_1.getConfigValueFilePathToShowToUser)(configValue.definedAtData);
148
149
  (0, utils_js_1.assert)(configValueFilePathToShowToUser);
@@ -245,7 +246,7 @@ async function callOnBeforePrerenderStartHooks(prerenderContext, renderContext,
245
246
  if (doNotPrerenderList.find((p) => p.pageId === pageId)) {
246
247
  return;
247
248
  }
248
- const prerenderResult = await (0, executeHook_js_1.executeHook)(() => hookFn(), { hookName, hookFilePath, hookTimeout });
249
+ const prerenderResult = await (0, executeHook_js_1.executeHook)(() => hookFn(), { hookName, hookFilePath, hookTimeout }, null);
249
250
  const result = normalizeOnPrerenderHookResult(prerenderResult, hookFilePath, hookName);
250
251
  result.forEach(({ url, pageContext }) => {
251
252
  {
@@ -268,9 +269,9 @@ async function callOnBeforePrerenderStartHooks(prerenderContext, renderContext,
268
269
  prerenderContext.pageContexts.push(pageContextNew);
269
270
  if (pageContext) {
270
271
  (0, utils_js_1.objectAssign)(pageContextNew, {
271
- _pageContextAlreadyProvidedByOnPrerenderHook: true,
272
- ...pageContext
272
+ _pageContextAlreadyProvidedByOnPrerenderHook: true
273
273
  });
274
+ (0, utils_js_1.objectAssign)(pageContextNew, pageContext);
274
275
  }
275
276
  });
276
277
  })));
@@ -328,14 +329,11 @@ function createPageContext(urlOriginal, renderContext, prerenderContext) {
328
329
  _prerenderContext: prerenderContext
329
330
  };
330
331
  const pageContextInit = {
331
- urlOriginal,
332
- ...prerenderContext.pageContextInit
332
+ urlOriginal
333
333
  };
334
+ (0, utils_js_1.objectAssign)(pageContextInit, prerenderContext.pageContextInit);
334
335
  {
335
- const pageContextInitEnhanced = (0, renderPageAlreadyRouted_js_1.getPageContextInitEnhanced)(pageContextInit, renderContext, {
336
- // We set `enumerable` to `false` to avoid computed URL properties from being iterated & copied in a onPrerenderStart() hook, e.g. /examples/i18n/
337
- urlComputedPropsNonEnumerable: true
338
- });
336
+ const pageContextInitEnhanced = (0, renderPageAlreadyRouted_js_1.getPageContextInitEnhanced)(pageContextInit, renderContext);
339
337
  (0, utils_js_1.objectAssign)(pageContext, pageContextInitEnhanced);
340
338
  }
341
339
  return pageContext;
@@ -410,6 +408,8 @@ async function callOnPrerenderStartHook(prerenderContext, renderContext) {
410
408
  pageContext._urlOriginalBeforeHook = pageContext.urlOriginal;
411
409
  });
412
410
  const docLink = 'https://vike.dev/i18n#pre-rendering';
411
+ // Set `enumerable` to `false` to avoid computed URL properties from being iterated & copied in onPrerenderStart() hook, e.g. /examples/i18n/
412
+ const { restoreEnumerable, addPageContextComputedUrl } = makePageContextComputedUrlNonEnumerable(prerenderContext.pageContexts);
413
413
  let result = await (0, executeHook_js_1.executeHook)(() => hookFn({
414
414
  pageContexts: prerenderContext.pageContexts,
415
415
  // TODO/v1-release: remove warning
@@ -420,7 +420,8 @@ async function callOnPrerenderStartHook(prerenderContext, renderContext) {
420
420
  });
421
421
  return prerenderContext.pageContexts;
422
422
  }
423
- }), onPrerenderStartHook);
423
+ }), onPrerenderStartHook, null);
424
+ restoreEnumerable();
424
425
  if (result === null || result === undefined) {
425
426
  return;
426
427
  }
@@ -458,9 +459,8 @@ async function callOnPrerenderStartHook(prerenderContext, renderContext) {
458
459
  hookName
459
460
  };
460
461
  }
461
- // Restore as URL computed props are lost when user makes a pageContext copy
462
- (0, addUrlComputedProps_js_1.addUrlComputedProps)(pageContext);
463
462
  });
463
+ addPageContextComputedUrl(prerenderContext.pageContexts);
464
464
  }
465
465
  async function routeAndPrerender(prerenderContext, concurrencyLimit, onComplete) {
466
466
  const globalContext = (0, globalContext_js_1.getGlobalContext)();
@@ -502,7 +502,7 @@ async function routeAndPrerender(prerenderContext, concurrencyLimit, onComplete)
502
502
  if (pageContext._pageConfigs.length > 0) {
503
503
  const pageConfig = pageContext._pageConfigs.find((p) => p.pageId === pageId);
504
504
  (0, utils_js_1.assert)(pageConfig);
505
- usesClientRouter = (0, getConfigValue_js_1.getConfigValue)(pageConfig, 'clientRouting', 'boolean')?.value ?? false;
505
+ usesClientRouter = (0, getConfigValue_js_1.getConfigValueRuntime)(pageConfig, 'clientRouting', 'boolean')?.value ?? false;
506
506
  }
507
507
  else {
508
508
  usesClientRouter = globalContext.pluginManifest.usesClientRouter;
@@ -743,3 +743,23 @@ function assertIsNotAbort(err, urlOr404) {
743
743
  (0, utils_js_1.assert)(abortCall);
744
744
  (0, utils_js_1.assertUsage)(false, `${picocolors_1.default.cyan(abortCall)} thrown${thrownBy} while pre-rendering ${urlOr404} but ${picocolors_1.default.cyan(abortCaller)} isn't supported for pre-rendered pages`);
745
745
  }
746
+ function makePageContextComputedUrlNonEnumerable(pageContexts) {
747
+ change(false);
748
+ return { restoreEnumerable, addPageContextComputedUrl };
749
+ function restoreEnumerable() {
750
+ change(true);
751
+ }
752
+ function addPageContextComputedUrl(pageContexts) {
753
+ // Add URL computed props to the user-generated pageContext copies
754
+ pageContexts.forEach((pageContext) => {
755
+ const pageContextUrlComputed = (0, getPageContextUrlComputed_js_1.getPageContextUrlComputed)(pageContext);
756
+ (0, utils_js_1.objectAssign)(pageContext, pageContextUrlComputed);
757
+ });
758
+ }
759
+ function change(enumerable) {
760
+ pageContexts.forEach((pageContext) => {
761
+ (0, utils_js_1.changeEnumerable)(pageContext, 'urlPathname', enumerable);
762
+ (0, utils_js_1.changeEnumerable)(pageContext, 'urlParsed', enumerable);
763
+ });
764
+ }
765
+ }
@@ -31,3 +31,4 @@ __exportStar(require("../../utils/assertNodeEnv.js"), exports);
31
31
  __exportStar(require("../../utils/pLimit.js"), exports);
32
32
  __exportStar(require("../../utils/assertPathFilesystemAbsolute.js"), exports);
33
33
  __exportStar(require("../../utils/isArray.js"), exports);
34
+ __exportStar(require("../../utils/changeEnumerable.js"), exports);
@@ -112,7 +112,7 @@ async function getHtmlTags(pageContext, injectToStream, injectFilter) {
112
112
  });
113
113
  }
114
114
  // The JavaScript entry <script> tag
115
- const scriptEntry = await mergeScriptEntries(pageAssets, isProduction);
115
+ const scriptEntry = await mergeScriptEntries(pageAssets);
116
116
  if (scriptEntry) {
117
117
  htmlTags.push({
118
118
  htmlTag: scriptEntry,
@@ -134,11 +134,11 @@ async function getHtmlTags(pageContext, injectToStream, injectFilter) {
134
134
  return htmlTags;
135
135
  }
136
136
  exports.getHtmlTags = getHtmlTags;
137
- async function mergeScriptEntries(pageAssets, isProduction) {
137
+ async function mergeScriptEntries(pageAssets) {
138
138
  const scriptEntries = pageAssets.filter((pageAsset) => pageAsset.isEntry && pageAsset.assetType === 'script');
139
139
  const viteScripts = await (0, getViteDevScripts_js_1.getViteDevScripts)();
140
140
  const scriptTagsHtml = `${viteScripts}${scriptEntries.map((asset) => (0, inferHtmlTags_js_1.inferAssetTag)(asset)).join('')}`;
141
- const scriptTag = (0, mergeScriptTags_js_1.mergeScriptTags)(scriptTagsHtml, isProduction);
141
+ const scriptTag = (0, mergeScriptTags_js_1.mergeScriptTags)(scriptTagsHtml);
142
142
  return scriptTag;
143
143
  }
144
144
  function getPageContextJsonScriptTag(pageContext) {
@@ -21,7 +21,8 @@ async function getViteDevScripts() {
21
21
  (0, utils_js_1.assertUsage)(!fakeHtml.startsWith(fakeHtmlBegin.replace(' ', '')), 'Vite plugins that minify the HTML are not supported by vike, see https://github.com/vikejs/vike/issues/224');
22
22
  (0, utils_js_1.assertUsage)(fakeHtml.startsWith(fakeHtmlBegin) && fakeHtml.endsWith(fakeHtmlEnd), 'You are using a Vite Plugin that transforms the HTML in a way that conflicts with vike. Create a new GitHub ticket to discuss a solution.');
23
23
  const viteInjection = fakeHtml.slice(fakeHtmlBegin.length, -1 * fakeHtmlEnd.length);
24
- (0, utils_js_1.assert)(viteInjection.includes('script'), { viteInjection });
24
+ (0, utils_js_1.assert)(viteInjection.includes('script'));
25
+ (0, utils_js_1.assertWarning)(!viteInjection.includes('import('), 'Unexpected Vite HMR code. Reach out to a Vike maintainer on GitHub.', { onlyOnce: true });
25
26
  const scriptTags = viteInjection;
26
27
  return scriptTags;
27
28
  }
@@ -6,7 +6,7 @@ const inferHtmlTags_js_1 = require("./inferHtmlTags.js");
6
6
  const scriptRE = /(<script\b(?:\s[^>]*>|>))(.*?)<\/script>/gims;
7
7
  const srcRE = /\bsrc\s*=\s*(?:"([^"]+)"|'([^']+)'|([^\s'">]+))/im;
8
8
  const typeRE = /\btype\s*=\s*(?:"([^"]+)"|'([^']+)'|([^\s'">]+))/im;
9
- function mergeScriptTags(scriptTagsHtml, isProduction) {
9
+ function mergeScriptTags(scriptTagsHtml) {
10
10
  let scriptTag = '';
11
11
  const scripts = parseScripts(scriptTagsHtml);
12
12
  // We need to merge module scripts to ensure execution order
@@ -21,13 +21,7 @@ function mergeScriptTags(scriptTagsHtml, isProduction) {
21
21
  const hasInnerHtml = !!innerHtml.trim();
22
22
  if (src) {
23
23
  (0, utils_js_1.assert)(!hasInnerHtml);
24
- if (isProduction) {
25
- contents.push(`import ${JSON.stringify(src)};`);
26
- }
27
- else {
28
- // Ensure HMR preamble code is executed before client entries
29
- contents.push(`import(${JSON.stringify(src)});`);
30
- }
24
+ contents.push(`import ${JSON.stringify(src)};`);
31
25
  }
32
26
  else if (hasInnerHtml) {
33
27
  innerHtml = innerHtml.split('\n').filter(Boolean).join('\n');
@@ -170,35 +170,44 @@ async function renderTemplate(templateContent, pageContext) {
170
170
  setStream(templateVar);
171
171
  continue;
172
172
  }
173
- const getErrMsg = (typeText, end) => {
173
+ const getErrMsg = (msg) => {
174
174
  const { hookName, hookFilePath } = pageContext._renderHook;
175
175
  const nth = (i === 0 && '1st') || (i === 1 && '2nd') || (i === 2 && '3rd') || `${i}-th`;
176
- return [`The ${nth} HTML variable is ${typeText}, see ${hookName}() hook defined by ${hookFilePath}.`, end]
176
+ return [
177
+ `The ${nth} HTML variable is ${msg}`,
178
+ `The HTML was provided by the ${hookName}() hook at ${hookFilePath}.`
179
+ ]
177
180
  .filter(Boolean)
178
181
  .join(' ');
179
182
  };
180
- (0, utils_js_1.assertUsage)(!(0, utils_js_1.isPromise)(templateVar), getErrMsg('a promise', `Did you forget to ${picocolors_1.default.cyan('await')} the promise?`));
183
+ (0, utils_js_1.assertUsage)(!(0, utils_js_1.isPromise)(templateVar), getErrMsg(`a promise, did you forget to ${picocolors_1.default.cyan('await')} the promise?`));
181
184
  if (templateVar === undefined || templateVar === null) {
182
- (0, utils_js_1.assertWarning)(false, getErrMsg(`${picocolors_1.default.cyan(String(templateVar))} which will be converted to an empty string`, `Pass the empty string ${picocolors_1.default.cyan("''")} instead of ${picocolors_1.default.cyan(String(templateVar))} to remove this warning.`), { onlyOnce: false });
185
+ const msgVal = picocolors_1.default.cyan(String(templateVar));
186
+ const msgEmptyString = picocolors_1.default.cyan("''");
187
+ const msg = `${msgVal} which will be converted to an empty string. Pass the empty string ${msgEmptyString} instead of ${msgVal} to remove this warning.`;
188
+ (0, utils_js_1.assertWarning)(false, getErrMsg(msg), { onlyOnce: false });
183
189
  templateVar = '';
184
190
  }
185
191
  {
186
192
  const varType = typeof templateVar;
187
- const streamNote = ['boolean', 'number', 'bigint', 'symbol'].includes(varType)
188
- ? null
189
- : '(See https://vike.dev/streaming for HTML streaming.)';
190
- (0, utils_js_1.assertUsage)(varType === 'string', getErrMsg(picocolors_1.default.cyan(`typeof htmlVar === "${varType}"`), streamNote));
193
+ if (varType !== 'string') {
194
+ const msgType = picocolors_1.default.cyan(`typeof htmlVariable === "${varType}"`);
195
+ const msg = `${msgType} but a string or stream (https://vike.dev/streaming) is expected instead.`;
196
+ (0, utils_js_1.assertUsage)(false, getErrMsg(msg));
197
+ }
191
198
  }
192
199
  {
193
200
  const { isProduction } = (0, globalContext_js_1.getGlobalContext)();
194
201
  if ((0, utils_js_1.isHtml)(templateVar) &&
195
202
  // We don't show this warning in production because it's expected that some users may (un)willingly do some XSS injection: we avoid flooding the production logs.
196
203
  !isProduction) {
197
- (0, utils_js_1.assertWarning)(false, getErrMsg(`${picocolors_1.default.cyan(templateVar)} which seems to be HTML code`, 'Did you forget to wrap the value with dangerouslySkipEscape()?'), { onlyOnce: false });
204
+ const msgVal = picocolors_1.default.cyan(String(templateVar));
205
+ const msg = `${msgVal} which seems to be HTML code. Did you forget to wrap the value with dangerouslySkipEscape()?`;
206
+ (0, utils_js_1.assertWarning)(false, getErrMsg(msg), { onlyOnce: false });
198
207
  }
199
208
  }
200
209
  // Escape untrusted template variable
201
- addHtmlPart(escapeHtml(templateVar));
210
+ addHtmlPart((0, utils_js_1.escapeHtml)(templateVar));
202
211
  }
203
212
  (0, utils_js_1.assert)(templateStrings.length === templateVariables.length + 1);
204
213
  addHtmlPart(templateStrings[templateStrings.length - 1]);
@@ -214,16 +223,6 @@ async function renderTemplate(templateContent, pageContext) {
214
223
  htmlPartsEnd
215
224
  };
216
225
  }
217
- function escapeHtml(unsafeString) {
218
- // Source: https://stackoverflow.com/questions/6234773/can-i-escape-html-special-chars-in-javascript/6234804#6234804
219
- const safe = unsafeString
220
- .replace(/&/g, '&amp;')
221
- .replace(/</g, '&lt;')
222
- .replace(/>/g, '&gt;')
223
- .replace(/"/g, '&quot;')
224
- .replace(/'/g, '&#039;');
225
- return safe;
226
- }
227
226
  async function getHtmlString(htmlRender) {
228
227
  if (typeof htmlRender === 'string') {
229
228
  return htmlRender;
@@ -35,7 +35,7 @@ function serializePageContextClientSide(pageContext) {
35
35
  pageContextClient[prop] = pageContext[prop];
36
36
  });
37
37
  if (Object.keys(pageContext._pageContextInit).some((p) => passToClient.includes(p))) {
38
- pageContextClient._pageContextInitIsPassedToClient = true;
38
+ pageContextClient[pageContextInitIsPassedToClient_js_1.pageContextInitIsPassedToClient] = true;
39
39
  }
40
40
  let pageContextSerialized;
41
41
  try {
@@ -762,17 +762,17 @@ async function loadStreamNodeModule() {
762
762
  const { Readable, Writable } = streamModule;
763
763
  return { Readable, Writable };
764
764
  }
765
- function getStreamName(type, standard) {
766
- let standardName = (0, utils_js_1.capitalizeFirstLetter)(standard);
767
- if (standardName === 'Node') {
768
- standardName = 'Node.js';
765
+ function getStreamName(kind, type) {
766
+ let typeName = (0, utils_js_1.capitalizeFirstLetter)(type);
767
+ if (typeName === 'Node') {
768
+ typeName = 'Node.js';
769
769
  }
770
- const typeName = (0, utils_js_1.capitalizeFirstLetter)(type);
771
- if (type !== 'pipe') {
772
- return `a ${typeName} ${standardName} Stream`;
770
+ const kindName = (0, utils_js_1.capitalizeFirstLetter)(kind);
771
+ if (kind !== 'pipe') {
772
+ return `a ${kindName} ${typeName} Stream`;
773
773
  }
774
- if (type === 'pipe') {
775
- return `a ${standardName} Stream Pipe`;
774
+ if (kind === 'pipe') {
775
+ return `a ${typeName} Stream Pipe`;
776
776
  }
777
777
  (0, utils_js_1.assert)(false);
778
778
  }
@@ -6,12 +6,16 @@ const analyzePageClientSide_js_1 = require("../../../shared/getPageFiles/analyze
6
6
  const virtualFilePageConfigValuesAll_js_1 = require("../../shared/virtual-files/virtualFilePageConfigValuesAll.js");
7
7
  const analyzeClientSide_js_1 = require("../../../shared/getPageFiles/analyzeClientSide.js");
8
8
  const globalContext_js_1 = require("../globalContext.js");
9
- const getClientEntry_js_1 = require("../../shared/getClientEntry.js");
9
+ const getConfigValue_js_1 = require("../../../shared/page-configs/getConfigValue.js");
10
10
  function analyzePage(pageFilesAll, pageConfig, pageId) {
11
11
  if (pageConfig) {
12
12
  const { isClientSideRenderable, isClientRouting } = (0, analyzeClientSide_js_1.analyzeClientSide)(pageConfig, pageFilesAll, pageId);
13
- const clientFilePath = (0, getClientEntry_js_1.getClientEntry)(pageConfig);
14
- const clientEntry = !isClientSideRenderable ? clientFilePath : (0, determineClientEntry_js_1.getVikeClientEntry)(isClientRouting);
13
+ const clientEntries = [];
14
+ const clientFilePath = (0, getConfigValue_js_1.getConfigValueRuntime)(pageConfig, 'client', 'string')?.value ?? null;
15
+ if (clientFilePath)
16
+ clientEntries.push(clientFilePath);
17
+ if (isClientSideRenderable)
18
+ clientEntries.push((0, determineClientEntry_js_1.getVikeClientEntry)(isClientRouting));
15
19
  const clientDependencies = [];
16
20
  clientDependencies.push({
17
21
  id: (0, virtualFilePageConfigValuesAll_js_1.getVirtualFileIdPageConfigValuesAll)(pageConfig.pageId, true),
@@ -43,15 +47,13 @@ function analyzePage(pageFilesAll, pageConfig, pageId) {
43
47
  }
44
48
  })
45
49
  */
46
- const clientEntries = [];
47
- if (clientEntry) {
50
+ clientEntries.forEach((clientEntry) => {
48
51
  clientDependencies.push({
49
52
  id: clientEntry,
50
53
  onlyAssets: false,
51
54
  eagerlyImported: false
52
55
  });
53
- clientEntries.push(clientEntry);
54
- }
56
+ });
55
57
  return {
56
58
  isHtmlOnly: !isClientSideRenderable,
57
59
  isClientRouting,