vike 0.4.225 → 0.4.226

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 (152) hide show
  1. package/dist/cjs/client/shared/getPageContextProxyForUser.js +3 -66
  2. package/dist/cjs/node/api/build.js +7 -7
  3. package/dist/cjs/node/api/dev.js +2 -2
  4. package/dist/cjs/node/api/prepareViteApiCall.js +55 -30
  5. package/dist/cjs/node/api/prerender.js +2 -3
  6. package/dist/cjs/node/api/preview.js +27 -6
  7. package/dist/cjs/node/api/utils.js +1 -0
  8. package/dist/cjs/node/cli/entry.js +4 -2
  9. package/dist/cjs/node/cli/parseCli.js +10 -4
  10. package/dist/cjs/node/plugin/plugins/build/pluginAutoFullBuild.js +2 -2
  11. package/dist/cjs/node/plugin/plugins/build/pluginModuleBanner.js +51 -0
  12. package/dist/cjs/node/plugin/plugins/build.js +3 -1
  13. package/dist/cjs/node/plugin/plugins/commonConfig.js +8 -6
  14. package/dist/cjs/node/plugin/plugins/devConfig/determineOptimizeDeps.js +5 -5
  15. package/dist/cjs/node/plugin/plugins/importUserCode/index.js +14 -10
  16. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +5 -1
  17. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.js +11 -12
  18. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +99 -85
  19. package/dist/cjs/node/plugin/plugins/setGlobalContext.js +10 -1
  20. package/dist/cjs/node/plugin/shared/getEnvVarObject.js +7 -0
  21. package/dist/cjs/node/prerender/resolvePrerenderConfig.js +3 -3
  22. package/dist/cjs/node/prerender/runPrerender.js +8 -12
  23. package/dist/cjs/node/prerender/utils.js +1 -1
  24. package/dist/cjs/node/runtime/globalContext.js +13 -8
  25. package/dist/cjs/node/runtime/html/injectAssets/getViteDevScript.js +6 -3
  26. package/dist/cjs/node/runtime/html/serializePageContextClientSide.js +67 -14
  27. package/dist/cjs/node/runtime/renderPage/createHttpResponse/assertNoInfiniteHttpRedirect.js +3 -2
  28. package/dist/cjs/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.js +3 -0
  29. package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +18 -12
  30. package/dist/cjs/node/runtime/renderPage.js +13 -28
  31. package/dist/cjs/node/runtime/utils.js +1 -1
  32. package/dist/cjs/node/runtime-dev/createDevMiddleware.js +2 -2
  33. package/dist/cjs/node/shared/assertV1Design.js +1 -1
  34. package/dist/cjs/node/shared/utils.js +1 -1
  35. package/dist/cjs/node/shared/virtual-files.js +14 -10
  36. package/dist/cjs/shared/NOT_SERIALIZABLE.js +5 -0
  37. package/dist/cjs/shared/modifyUrl.js +3 -5
  38. package/dist/cjs/shared/modifyUrlSameOrigin.js +42 -0
  39. package/dist/cjs/shared/page-configs/getConfigDefinedAt.js +3 -2
  40. package/dist/cjs/shared/page-configs/getConfigValueBuildTime.js +5 -5
  41. package/dist/cjs/shared/page-configs/serialize/serializeConfigValues.js +9 -9
  42. package/dist/cjs/shared/utils.js +2 -1
  43. package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
  44. package/dist/cjs/utils/assert.js +10 -3
  45. package/dist/cjs/utils/assertSetup.js +12 -8
  46. package/dist/cjs/utils/getRandomId.js +1 -1
  47. package/dist/cjs/utils/isNullish.js +16 -0
  48. package/dist/cjs/utils/normalizeHeaders.js +1 -1
  49. package/dist/cjs/utils/objectAssign.js +7 -2
  50. package/dist/cjs/utils/objectFilter.js +10 -0
  51. package/dist/cjs/utils/pick.js +12 -0
  52. package/dist/esm/client/client-routing-runtime/createPageContext.d.ts +3 -1
  53. package/dist/esm/client/client-routing-runtime/createPageContext.js +4 -3
  54. package/dist/esm/client/client-routing-runtime/navigate.d.ts +6 -5
  55. package/dist/esm/client/client-routing-runtime/navigate.js +6 -2
  56. package/dist/esm/client/client-routing-runtime/normalizeUrlArgument.js +1 -1
  57. package/dist/esm/client/client-routing-runtime/renderPageClientSide.js +1 -1
  58. package/dist/esm/client/server-routing-runtime/getPageContext.d.ts +6 -3
  59. package/dist/esm/client/server-routing-runtime/getPageContext.js +6 -3
  60. package/dist/esm/client/shared/getPageContextProxyForUser.d.ts +1 -11
  61. package/dist/esm/client/shared/getPageContextProxyForUser.js +4 -67
  62. package/dist/esm/client/shared/preparePageContextForUserConsumptionClientSide.d.ts +2 -2
  63. package/dist/esm/node/api/build.js +7 -7
  64. package/dist/esm/node/api/dev.js +2 -2
  65. package/dist/esm/node/api/prepareViteApiCall.d.ts +2 -1
  66. package/dist/esm/node/api/prepareViteApiCall.js +57 -32
  67. package/dist/esm/node/api/prerender.js +2 -3
  68. package/dist/esm/node/api/preview.d.ts +1 -1
  69. package/dist/esm/node/api/preview.js +24 -6
  70. package/dist/esm/node/api/utils.d.ts +1 -0
  71. package/dist/esm/node/api/utils.js +1 -0
  72. package/dist/esm/node/cli/entry.js +4 -2
  73. package/dist/esm/node/cli/parseCli.js +10 -4
  74. package/dist/esm/node/plugin/plugins/build/pluginAutoFullBuild.js +2 -2
  75. package/dist/esm/node/plugin/plugins/build/pluginModuleBanner.d.ts +3 -0
  76. package/dist/esm/node/plugin/plugins/build/pluginModuleBanner.js +49 -0
  77. package/dist/esm/node/plugin/plugins/build.js +3 -1
  78. package/dist/esm/node/plugin/plugins/commonConfig.d.ts +3 -1
  79. package/dist/esm/node/plugin/plugins/commonConfig.js +8 -6
  80. package/dist/esm/node/plugin/plugins/devConfig/determineOptimizeDeps.js +5 -5
  81. package/dist/esm/node/plugin/plugins/importUserCode/index.js +15 -11
  82. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +5 -1
  83. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.d.ts +5 -2
  84. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.js +11 -12
  85. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.d.ts +11 -2
  86. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +101 -86
  87. package/dist/esm/node/plugin/plugins/setGlobalContext.js +11 -2
  88. package/dist/esm/node/plugin/shared/getEnvVarObject.js +7 -0
  89. package/dist/esm/node/prerender/resolvePrerenderConfig.js +3 -3
  90. package/dist/esm/node/prerender/runPrerender.js +8 -12
  91. package/dist/esm/node/prerender/utils.d.ts +1 -1
  92. package/dist/esm/node/prerender/utils.js +1 -1
  93. package/dist/esm/node/runtime/globalContext.d.ts +2 -3
  94. package/dist/esm/node/runtime/globalContext.js +13 -8
  95. package/dist/esm/node/runtime/html/injectAssets/getViteDevScript.js +6 -3
  96. package/dist/esm/node/runtime/html/serializePageContextClientSide.d.ts +2 -0
  97. package/dist/esm/node/runtime/html/serializePageContextClientSide.js +69 -15
  98. package/dist/esm/node/runtime/renderPage/createHttpResponse/assertNoInfiniteHttpRedirect.d.ts +1 -1
  99. package/dist/esm/node/runtime/renderPage/createHttpResponse/assertNoInfiniteHttpRedirect.js +3 -2
  100. package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.js +3 -0
  101. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +27 -1
  102. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +18 -12
  103. package/dist/esm/node/runtime/renderPage.js +14 -29
  104. package/dist/esm/node/runtime/utils.d.ts +1 -1
  105. package/dist/esm/node/runtime/utils.js +1 -1
  106. package/dist/esm/node/runtime-dev/createDevMiddleware.js +2 -2
  107. package/dist/esm/node/shared/assertV1Design.js +1 -1
  108. package/dist/esm/node/shared/utils.d.ts +1 -1
  109. package/dist/esm/node/shared/utils.js +1 -1
  110. package/dist/esm/node/shared/virtual-files.d.ts +2 -0
  111. package/dist/esm/node/shared/virtual-files.js +14 -10
  112. package/dist/esm/shared/NOT_SERIALIZABLE.d.ts +1 -0
  113. package/dist/esm/shared/NOT_SERIALIZABLE.js +2 -0
  114. package/dist/esm/shared/modifyUrl.d.ts +2 -2
  115. package/dist/esm/shared/modifyUrl.js +3 -5
  116. package/dist/esm/shared/modifyUrlSameOrigin.d.ts +9 -0
  117. package/dist/esm/shared/modifyUrlSameOrigin.js +40 -0
  118. package/dist/esm/shared/page-configs/Config.d.ts +11 -3
  119. package/dist/esm/shared/page-configs/PageConfig.d.ts +2 -2
  120. package/dist/esm/shared/page-configs/getConfigDefinedAt.d.ts +3 -1
  121. package/dist/esm/shared/page-configs/getConfigDefinedAt.js +3 -2
  122. package/dist/esm/shared/page-configs/getConfigValueBuildTime.js +5 -5
  123. package/dist/esm/shared/page-configs/serialize/serializeConfigValues.js +9 -9
  124. package/dist/esm/shared/route/abort.d.ts +2 -2
  125. package/dist/esm/shared/types.d.ts +39 -3
  126. package/dist/esm/shared/utils.d.ts +2 -1
  127. package/dist/esm/shared/utils.js +2 -1
  128. package/dist/esm/types/index.d.ts +0 -1
  129. package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
  130. package/dist/esm/utils/PROJECT_VERSION.js +1 -1
  131. package/dist/esm/utils/assert.d.ts +2 -1
  132. package/dist/esm/utils/assert.js +10 -3
  133. package/dist/esm/utils/assertSetup.d.ts +2 -2
  134. package/dist/esm/utils/assertSetup.js +12 -8
  135. package/dist/esm/utils/getRandomId.d.ts +1 -1
  136. package/dist/esm/utils/getRandomId.js +1 -1
  137. package/dist/esm/utils/isNullish.d.ts +3 -0
  138. package/dist/esm/utils/isNullish.js +11 -0
  139. package/dist/esm/utils/normalizeHeaders.js +1 -1
  140. package/dist/esm/utils/objectAssign.d.ts +1 -1
  141. package/dist/esm/utils/objectAssign.js +7 -2
  142. package/dist/esm/utils/objectFilter.d.ts +1 -0
  143. package/dist/esm/utils/objectFilter.js +7 -0
  144. package/dist/esm/utils/pick.d.ts +1 -0
  145. package/dist/esm/utils/pick.js +9 -0
  146. package/package.json +4 -2
  147. package/dist/cjs/shared/notSerializable.js +0 -5
  148. package/dist/cjs/utils/isNotNullish.js +0 -5
  149. package/dist/esm/shared/notSerializable.d.ts +0 -1
  150. package/dist/esm/shared/notSerializable.js +0 -2
  151. package/dist/esm/utils/isNotNullish.d.ts +0 -1
  152. package/dist/esm/utils/isNotNullish.js +0 -1
@@ -4,61 +4,85 @@ export { assertViteRoot };
4
4
  export { normalizeViteRoot };
5
5
  import { loadConfigFromFile, mergeConfig, resolveConfig } from 'vite';
6
6
  import { clearContextApiOperation, setContextApiOperation } from './context.js';
7
- import { getVikeConfig2 } from '../plugin/plugins/importUserCode/v1-design/getVikeConfig.js';
7
+ import { getVikeConfig2, getVikeConfigFromCliOrEnv } from '../plugin/plugins/importUserCode/v1-design/getVikeConfig.js';
8
8
  import path from 'path';
9
- import { assert, assertUsage, getGlobalObject, isObject, toPosixPath } from './utils.js';
9
+ import { assert, assertUsage, getGlobalObject, isObject, pick, toPosixPath } from './utils.js';
10
10
  import pc from '@brillout/picocolors';
11
11
  import { clearGlobalContext } from '../runtime/globalContext.js';
12
+ import { getEnvVarObject } from '../plugin/shared/getEnvVarObject.js';
12
13
  const globalObject = getGlobalObject('api/prepareViteApiCall.ts', {});
13
14
  async function prepareViteApiCall(options, operation) {
14
15
  clear();
15
16
  setContextApiOperation(operation, options);
16
- const viteConfigFromOptions = options.viteConfig;
17
- return enhanceViteConfig(viteConfigFromOptions, operation);
17
+ const viteConfigFromUserApiOptions = options.viteConfig;
18
+ return resolveConfigs(viteConfigFromUserApiOptions, operation);
18
19
  }
19
20
  // For subsequent API calls, e.g. calling prerender() after build()
20
21
  function clear() {
21
22
  clearContextApiOperation();
22
23
  clearGlobalContext();
23
24
  }
24
- async function enhanceViteConfig(viteConfigFromOptions, operation) {
25
- const viteInfo = await getInfoFromVite(viteConfigFromOptions, operation);
26
- await assertViteRoot2(viteInfo.root, viteInfo.viteConfigEnhanced, operation);
25
+ async function resolveConfigs(viteConfigFromUserApiOptions, operation) {
26
+ const viteInfo = await getViteInfo(viteConfigFromUserApiOptions, operation);
27
27
  const vikeConfig = await getVikeConfig2(viteInfo.root, operation === 'dev', viteInfo.vikeVitePluginOptions);
28
- const viteConfigEnhanced = addViteSettingsSetByVikeConfig(viteInfo.viteConfigEnhanced, vikeConfig);
28
+ const viteConfigFromUserEnhanced = applyVikeViteConfig(viteInfo.viteConfigFromUserEnhanced, vikeConfig);
29
+ const { viteConfigResolved } = await assertViteRoot2(viteInfo.root, viteConfigFromUserEnhanced, operation);
29
30
  return {
30
31
  vikeConfig,
31
- viteConfigEnhanced
32
+ viteConfigResolved, // ONLY USE if strictly necessary. (We plan to remove assertViteRoot2() as explained in the comments of that function.)
33
+ viteConfigFromUserEnhanced
32
34
  };
33
35
  }
34
- function addViteSettingsSetByVikeConfig(viteConfigEnhanced, vikeConfig) {
36
+ // Apply +vite
37
+ // - For example, Vike extensions adding Vite plugins
38
+ function applyVikeViteConfig(viteConfigFromUserEnhanced, vikeConfig) {
35
39
  const viteConfigs = vikeConfig.global._from.configsCumulative.vite;
36
40
  if (!viteConfigs)
37
- return viteConfigEnhanced;
41
+ return viteConfigFromUserEnhanced;
38
42
  viteConfigs.values.forEach((v) => {
39
43
  assertUsage(isObject(v.value), `${v.definedAt} should be an object`);
40
- viteConfigEnhanced = mergeConfig(viteConfigEnhanced ?? {}, v.value);
44
+ viteConfigFromUserEnhanced = mergeConfig(viteConfigFromUserEnhanced ?? {}, v.value);
41
45
  assertUsage(!findVikeVitePlugin(v.value), "Using the +vite setting to add Vike's Vite plugin is forbidden");
42
46
  });
43
- return viteConfigEnhanced;
47
+ return viteConfigFromUserEnhanced;
44
48
  }
45
49
  async function getViteRoot(operation) {
46
50
  if (!globalObject.root)
47
- await getInfoFromVite(undefined, operation);
51
+ await getViteInfo(undefined, operation);
48
52
  assert(globalObject.root);
49
53
  return globalObject.root;
50
54
  }
51
- async function getInfoFromVite(viteConfigFromOptions, operation) {
52
- const viteConfigFromUserViteFile = await loadViteConfigFile(viteConfigFromOptions, operation);
53
- const root = normalizeViteRoot(
54
- // `viteConfigFromOptions.root` before `viteConfigFromUserViteFile.root` replicates Vite's precedence:
55
+ async function getViteInfo(viteConfigFromUserApiOptions, operation) {
56
+ let viteConfigFromUserEnhanced = viteConfigFromUserApiOptions;
57
+ // Precedence:
58
+ // 1) viteConfigFromUserEnvVar (highest precendence)
59
+ // 2) viteConfigFromUserVikeConfig
60
+ // 2) viteConfigFromUserApiOptions
61
+ // 3) viteConfigFromUserViteFile (lowest precendence)
62
+ // Resolve Vike's +mode setting
63
+ {
64
+ const viteConfigFromUserVikeConfig = pick(getVikeConfigFromCliOrEnv().vikeConfigFromCliOrEnv, ['mode']);
65
+ if (Object.keys(viteConfigFromUserVikeConfig).length > 0) {
66
+ viteConfigFromUserEnhanced = mergeConfig(viteConfigFromUserEnhanced ?? {}, viteConfigFromUserVikeConfig);
67
+ }
68
+ }
69
+ // Resolve VITE_CONFIG
70
+ const viteConfigFromUserEnvVar = getEnvVarObject('VITE_CONFIG');
71
+ if (viteConfigFromUserEnvVar) {
72
+ viteConfigFromUserEnhanced = mergeConfig(viteConfigFromUserEnhanced ?? {}, viteConfigFromUserEnvVar);
73
+ }
74
+ // Resolve vite.config.js
75
+ const viteConfigFromUserViteFile = await loadViteConfigFile(viteConfigFromUserEnhanced, operation);
76
+ // Correct precedence, replicates Vite:
55
77
  // https://github.com/vitejs/vite/blob/4f5845a3182fc950eb9cd76d7161698383113b18/packages/vite/src/node/config.ts#L1001
56
- viteConfigFromOptions?.root ?? viteConfigFromUserViteFile?.root ?? process.cwd());
78
+ const viteConfigResolved = mergeConfig(viteConfigFromUserViteFile ?? {}, viteConfigFromUserEnhanced ?? {});
79
+ const root = normalizeViteRoot(viteConfigResolved.root ?? process.cwd());
57
80
  globalObject.root = root;
81
+ // - Find options `vike(options)` set in vite.config.js
82
+ // - TODO/next-major: remove
83
+ // - Add Vike's Vite plugin if missing
58
84
  let vikeVitePluginOptions;
59
- let viteConfigEnhanced = viteConfigFromOptions;
60
- // If Vike's Vite plugin is found in both viteConfigFromOptions and viteConfigFromUserViteFile then Vike will later throw an error
61
- const found = findVikeVitePlugin(viteConfigFromOptions) || findVikeVitePlugin(viteConfigFromUserViteFile);
85
+ const found = findVikeVitePlugin(viteConfigResolved);
62
86
  if (found) {
63
87
  vikeVitePluginOptions = found.vikeVitePluginOptions;
64
88
  }
@@ -66,16 +90,16 @@ async function getInfoFromVite(viteConfigFromOptions, operation) {
66
90
  // Add Vike to plugins if not present.
67
91
  // Using a dynamic import because the script calling the Vike API may not live in the same place as vite.config.js, thus vike/plugin may resolved to two different node_modules/vike directories.
68
92
  const { plugin: vikePlugin } = await import('../plugin/index.js');
69
- viteConfigEnhanced = {
70
- ...viteConfigFromOptions,
71
- plugins: [...(viteConfigFromOptions?.plugins ?? []), vikePlugin()]
93
+ viteConfigFromUserEnhanced = {
94
+ ...viteConfigFromUserEnhanced,
95
+ plugins: [...(viteConfigFromUserEnhanced?.plugins ?? []), vikePlugin()]
72
96
  };
73
- const res = findVikeVitePlugin(viteConfigEnhanced);
97
+ const res = findVikeVitePlugin(viteConfigFromUserEnhanced);
74
98
  assert(res);
75
99
  vikeVitePluginOptions = res.vikeVitePluginOptions;
76
100
  }
77
101
  assert(vikeVitePluginOptions);
78
- return { root, vikeVitePluginOptions, viteConfigEnhanced };
102
+ return { root, vikeVitePluginOptions, viteConfigFromUserEnhanced };
79
103
  }
80
104
  function findVikeVitePlugin(viteConfig) {
81
105
  let vikeVitePluginOptions;
@@ -93,8 +117,8 @@ function findVikeVitePlugin(viteConfig) {
93
117
  return { vikeVitePluginOptions };
94
118
  }
95
119
  // Copied from https://github.com/vitejs/vite/blob/4f5845a3182fc950eb9cd76d7161698383113b18/packages/vite/src/node/config.ts#L961-L1005
96
- async function loadViteConfigFile(viteConfigFromOptions, operation) {
97
- const [inlineConfig, command, defaultMode, _defaultNodeEnv, isPreview] = getResolveConfigArgs(viteConfigFromOptions, operation);
120
+ async function loadViteConfigFile(viteConfigFromUserApiOptions, operation) {
121
+ const [inlineConfig, command, defaultMode, _defaultNodeEnv, isPreview] = getResolveConfigArgs(viteConfigFromUserApiOptions, operation);
98
122
  let config = inlineConfig;
99
123
  let mode = inlineConfig.mode || defaultMode;
100
124
  const configEnv = {
@@ -126,11 +150,12 @@ function normalizeViteRoot(root) {
126
150
  path.resolve(root));
127
151
  }
128
152
  const errMsg = `A Vite plugin is modifying Vite's setting ${pc.cyan('root')} which is forbidden`;
129
- async function assertViteRoot2(root, viteConfigEnhanced, operation) {
130
- const args = getResolveConfigArgs(viteConfigEnhanced, operation);
131
- // We can eventually this resolveConfig() call (along with removing the whole assertViteRoot2() function which is redundant with the assertViteRoot() function) so that Vike doesn't make any resolveConfig() (except for pre-rendering which is required). But let's keep it for now, just to see whether calling resolveConfig() can be problematic.
153
+ async function assertViteRoot2(root, viteConfigFromUserEnhanced, operation) {
154
+ const args = getResolveConfigArgs(viteConfigFromUserEnhanced, operation);
155
+ // We can eventually remove this resolveConfig() call (along with removing the whole assertViteRoot2() function which is redundant with the assertViteRoot() function) so that Vike doesn't make any resolveConfig() (except for pre-rendering and preview which is required). But let's keep it for now, just to see whether calling resolveConfig() can be problematic.
132
156
  const viteConfigResolved = await resolveConfig(...args);
133
157
  assertUsage(normalizeViteRoot(viteConfigResolved.root) === normalizeViteRoot(root), errMsg);
158
+ return { viteConfigResolved };
134
159
  }
135
160
  function assertViteRoot(root, config) {
136
161
  if (globalObject.root)
@@ -1,15 +1,14 @@
1
1
  export { prerender };
2
2
  import { runPrerenderFromAPI } from '../prerender/runPrerender.js';
3
3
  import { prepareViteApiCall } from './prepareViteApiCall.js';
4
- // TODO/soon use importServerProductionIndex()
5
4
  /**
6
5
  * Programmatically trigger `$ vike prerender`
7
6
  *
8
7
  * https://vike.dev/api#prerender
9
8
  */
10
9
  async function prerender(options = {}) {
11
- const { viteConfigEnhanced } = await prepareViteApiCall(options, 'prerender');
12
- options.viteConfig = viteConfigEnhanced;
10
+ const { viteConfigFromUserEnhanced } = await prepareViteApiCall(options, 'prerender');
11
+ options.viteConfig = viteConfigFromUserEnhanced;
13
12
  const { viteConfig } = await runPrerenderFromAPI(options);
14
13
  return {
15
14
  viteConfig
@@ -7,6 +7,6 @@ import type { APIOptions } from './types.js';
7
7
  * https://vike.dev/api#preview
8
8
  */
9
9
  declare function preview(options?: APIOptions): Promise<{
10
- viteServer: PreviewServer;
10
+ viteServer?: PreviewServer;
11
11
  viteConfig: ResolvedConfig;
12
12
  }>;
@@ -1,16 +1,34 @@
1
1
  export { preview };
2
2
  import { prepareViteApiCall } from './prepareViteApiCall.js';
3
3
  import { preview as previewVite } from 'vite';
4
+ import { importServerProductionIndex } from '@brillout/vite-plugin-server-entry/runtime';
5
+ import { getOutDirs } from '../plugin/shared/getOutDirs.js';
6
+ import { assertWarning } from './utils.js';
7
+ import pc from '@brillout/picocolors';
8
+ import path from 'node:path';
9
+ import { onSetupPreview } from '../runtime/utils.js';
4
10
  /**
5
11
  * Programmatically trigger `$ vike preview`
6
12
  *
7
13
  * https://vike.dev/api#preview
8
14
  */
9
15
  async function preview(options = {}) {
10
- const { viteConfigEnhanced } = await prepareViteApiCall(options, 'preview');
11
- const server = await previewVite(viteConfigEnhanced);
12
- return {
13
- viteServer: server,
14
- viteConfig: server.config
15
- };
16
+ onSetupPreview();
17
+ const { viteConfigFromUserEnhanced, viteConfigResolved } = await prepareViteApiCall(options, 'preview');
18
+ if (viteConfigResolved.vitePluginServerEntry?.inject) {
19
+ const outDir = getOutDirs(viteConfigResolved).outDirRoot;
20
+ const { outServerIndex } = await importServerProductionIndex({ outDir });
21
+ const outServerIndexRelative = path.relative(viteConfigResolved.root, outServerIndex);
22
+ assertWarning(false, `Never run ${pc.cyan('$ vike preview')} in production, run ${pc.cyan(`$ node ${outServerIndexRelative}`)} instead (or Bun/Deno).`, { onlyOnce: true });
23
+ return {
24
+ viteConfig: viteConfigResolved
25
+ };
26
+ }
27
+ else {
28
+ const server = await previewVite(viteConfigFromUserEnhanced);
29
+ return {
30
+ viteServer: server,
31
+ viteConfig: server.config
32
+ };
33
+ }
16
34
  }
@@ -3,3 +3,4 @@ export * from '../../utils/getGlobalObject.js';
3
3
  export * from '../../utils/path.js';
4
4
  export * from '../../utils/isObject.js';
5
5
  export * from '../../utils/assertVersion.js';
6
+ export * from '../../utils/pick.js';
@@ -7,3 +7,4 @@ export * from '../../utils/getGlobalObject.js';
7
7
  export * from '../../utils/path.js';
8
8
  export * from '../../utils/isObject.js';
9
9
  export * from '../../utils/assertVersion.js';
10
+ export * from '../../utils/pick.js';
@@ -57,8 +57,10 @@ async function cmdBuild() {
57
57
  async function cmdPreview() {
58
58
  try {
59
59
  const { viteServer } = await preview();
60
- viteServer.printUrls();
61
- viteServer.bindCLIShortcuts({ print: true });
60
+ if (viteServer) {
61
+ viteServer.printUrls();
62
+ viteServer.bindCLIShortcuts({ print: true });
63
+ }
62
64
  }
63
65
  catch (err) {
64
66
  console.error(pc.red(`Error while starting preview server:`));
@@ -6,7 +6,7 @@ const commands = [
6
6
  { name: 'dev', desc: 'Start development server' },
7
7
  { name: 'build', desc: 'Build for production' },
8
8
  { name: 'preview', desc: 'Start preview server using production build (only works for SSG apps)' },
9
- { name: 'prerender', desc: 'Pre-render pages (only needed when partial.disableAutoRun is true)' }
9
+ { name: 'prerender', desc: 'Pre-render pages (only needed when prerender.disableAutoRun is true)' }
10
10
  ];
11
11
  function parseCli() {
12
12
  const command = getCommand();
@@ -57,10 +57,16 @@ function showHelp() {
57
57
  `vike@${PROJECT_VERSION}`,
58
58
  '',
59
59
  'Usage:',
60
- ...[...commands, { name: '-v', desc: "Print Vike's installed version" }].map((c) => ` ${pc.dim('$')} ${pc.bold(`vike ${c.name}`)}${' '.repeat(nameMaxLength - c.name.length)}${TAB}${pc.dim(`# ${c.desc}`)}`),
60
+ ...[...commands, { name: '-v', desc: "Print Vike's installed version" }].map((c) => ` ${pc.dim('$')} vike ${c.name.startsWith('-') ? pc.cyan(`${c.name}`) : pc.bold(`${c.name}`)}${' '.repeat(nameMaxLength - c.name.length)}${TAB}${pc.dim(`# ${c.desc}`)}`),
61
61
  '',
62
- `Vike settings can be passed over the ${pc.cyan('VIKE_CONFIG')} environment variable or as ${pc.cyan('CLI options')} such as --host.`,
63
- `Vite settings can be passed over the ${pc.cyan('VITE_CONFIG')} environment variable.`,
62
+ 'Common CLI options:',
63
+ [`vike dev ${pc.cyan('--host')}`, `vike dev ${pc.cyan('--port')} 80`, `vike build ${pc.cyan('--mode')} staging`]
64
+ .map((o) => ` ${pc.dim('$')} ${o}`)
65
+ .join('\n'),
66
+ '',
67
+ `More Vike settings can be passed over the ${pc.cyan('VIKE_CONFIG')} environment variable or as ${pc.cyan('CLI options')}.`,
68
+ `More Vite settings can be passed over the ${pc.cyan('VITE_CONFIG')} environment variable.`,
69
+ ``,
64
70
  `See ${pc.underline('https://vike.dev/cli')} for more information.`
65
71
  ].join('\n'));
66
72
  process.exit(1);
@@ -124,8 +124,8 @@ function isPrerenderForceExit() {
124
124
  }
125
125
  function getFullBuildInlineConfig(config) {
126
126
  const configFromCli = !isViteCliCall() ? null : getViteConfigFromCli();
127
- if (config._viteConfigEnhanced) {
128
- return config._viteConfigEnhanced;
127
+ if (config._viteConfigFromUserEnhanced) {
128
+ return config._viteConfigFromUserEnhanced;
129
129
  }
130
130
  else {
131
131
  return {
@@ -0,0 +1,3 @@
1
+ export { pluginModuleBanner };
2
+ import type { Plugin } from 'vite';
3
+ declare function pluginModuleBanner(): Plugin;
@@ -0,0 +1,49 @@
1
+ export { pluginModuleBanner };
2
+ import { assert } from '../../utils.js';
3
+ import { removeVirtualIdTag } from '../../../shared/virtual-files.js';
4
+ import { isViteServerBuild, isViteServerBuild_safe } from '../../shared/isViteServerBuild.js';
5
+ // Rollup's banner feature doesn't work with Vite: https://github.com/vitejs/vite/issues/8412
6
+ // But, anyways, we want to prepend the banner at the beginning of each module, not at the beginning of each file (I believe that's what Rollup's banner feature does).
7
+ const vikeModuleBannerPlaceholder = 'vikeModuleBannerPlaceholder';
8
+ function pluginModuleBanner() {
9
+ let config;
10
+ return {
11
+ name: 'vike:pluginModuleBanner',
12
+ enforce: 'post',
13
+ apply: 'build',
14
+ configResolved(config_) {
15
+ config = config_;
16
+ },
17
+ generateBundle: {
18
+ order: 'post',
19
+ handler(_options, bundle) {
20
+ for (const module of Object.values(bundle)) {
21
+ if (module.type === 'chunk') {
22
+ if (isViteServerBuild(config)) {
23
+ const codeOld = module.code;
24
+ const codeNew = codeOld.replace(/vikeModuleBannerPlaceholder\("([^"]*)"\);/g, '/* $1 [vike:pluginModuleBanner] */');
25
+ assert(!codeNew.includes(vikeModuleBannerPlaceholder));
26
+ module.code = codeNew;
27
+ }
28
+ else {
29
+ assert(!module.code.includes(vikeModuleBannerPlaceholder));
30
+ }
31
+ }
32
+ }
33
+ }
34
+ },
35
+ transform: {
36
+ order: 'post',
37
+ handler(code, id, options) {
38
+ if (!isViteServerBuild_safe(config, options))
39
+ return;
40
+ if (id.startsWith('\0'))
41
+ id = id;
42
+ id = removeVirtualIdTag(id);
43
+ if (id.startsWith(config.root))
44
+ id = id.slice(config.root.length + 1);
45
+ return `${vikeModuleBannerPlaceholder}(${JSON.stringify(id)}); ${code}`;
46
+ }
47
+ }
48
+ };
49
+ }
@@ -6,6 +6,7 @@ import { pluginDistFileNames } from './build/pluginDistFileNames.js';
6
6
  import { pluginAutoFullBuild } from './build/pluginAutoFullBuild.js';
7
7
  import { pluginBuildEntry } from './build/pluginBuildEntry.js';
8
8
  import { pluginBuildConfig } from './build/pluginBuildConfig.js';
9
+ import { pluginModuleBanner } from './build/pluginModuleBanner.js';
9
10
  function build() {
10
11
  return [
11
12
  ...pluginBuildConfig(),
@@ -14,6 +15,7 @@ function build() {
14
15
  ...pluginBuildEntry(),
15
16
  pluginDistPackageJsonFile(),
16
17
  pluginSuppressRollupWarning(),
17
- pluginDistFileNames()
18
+ pluginDistFileNames(),
19
+ pluginModuleBanner()
18
20
  ];
19
21
  }
@@ -4,13 +4,15 @@ export type { VikeConfigPublic };
4
4
  import { type InlineConfig, type Plugin, type ResolvedConfig, type UserConfig } from 'vite';
5
5
  import { type VikeConfigObject } from './importUserCode/v1-design/getVikeConfig.js';
6
6
  import type { PrerenderContextPublic } from '../../prerender/runPrerender.js';
7
+ import type { VitePluginServerEntryOptions } from '@brillout/vite-plugin-server-entry/plugin';
7
8
  declare module 'vite' {
8
9
  interface UserConfig {
9
10
  _isDev?: boolean;
10
11
  _vikeVitePluginOptions?: unknown;
12
+ vitePluginServerEntry?: VitePluginServerEntryOptions;
11
13
  _root?: string;
12
14
  _baseViteOriginal?: string;
13
- _viteConfigEnhanced?: InlineConfig;
15
+ _viteConfigFromUserEnhanced?: InlineConfig;
14
16
  _vike?: VikeConfigPublic;
15
17
  _vikeConfigObject?: VikeConfigObject;
16
18
  }
@@ -1,13 +1,11 @@
1
1
  export { commonConfig };
2
2
  export { getVikeConfigPublic };
3
- import { mergeConfig } from 'vite';
4
3
  import { assert, assertUsage, assertWarning, findPackageJson, hasProp, isDevCheck, isDocker, isObject } from '../utils.js';
5
4
  import { assertRollupInput } from './build/pluginBuildConfig.js';
6
5
  import { installRequireShim_setUserRootDir } from '@brillout/require-shim';
7
6
  import pc from '@brillout/picocolors';
8
7
  import path from 'path';
9
8
  import { assertResolveAlias } from './commonConfig/assertResolveAlias.js';
10
- import { getEnvVarObject } from '../shared/getEnvVarObject.js';
11
9
  import { isViteCliCall } from '../shared/isViteCliCall.js';
12
10
  import { isVikeCliOrApi } from '../../api/context.js';
13
11
  import { getVikeConfig2 } from './importUserCode/v1-design/getVikeConfig.js';
@@ -68,6 +66,7 @@ function commonConfig(vikeVitePluginOptions) {
68
66
  assertEsm(config.root);
69
67
  assertVikeCliOrApi(config);
70
68
  temp_supportOldInterface(config);
69
+ emitServerEntryOnlyIfNeeded(config);
71
70
  }
72
71
  },
73
72
  config: {
@@ -91,10 +90,6 @@ function commonConfig(vikeVitePluginOptions) {
91
90
  // Set `--host` for Docker/Podman
92
91
  setDefault('host', true, configFromUser, configFromVike);
93
92
  }
94
- // VITE_CONFIG
95
- const configFromEnvVar = getEnvVarObject('VITE_CONFIG');
96
- if (configFromEnvVar)
97
- configFromVike = mergeConfig(configFromVike, configFromEnvVar);
98
93
  return configFromVike;
99
94
  }
100
95
  }
@@ -197,3 +192,10 @@ function getVikeConfigPublic(config) {
197
192
  assert(vikeConfig);
198
193
  return vikeConfig;
199
194
  }
195
+ // Only emit dist/server/entry.mjs if necessary
196
+ function emitServerEntryOnlyIfNeeded(config) {
197
+ if (config.vitePluginServerEntry?.inject &&
198
+ !resolvePrerenderConfigGlobal(config._vikeConfigObject).isPrerenderingEnabled) {
199
+ config.vitePluginServerEntry.disableServerEntryEmit = true;
200
+ }
201
+ }
@@ -50,18 +50,18 @@ async function getPageDeps(config, pageConfigs) {
50
50
  .forEach((configValueSource) => {
51
51
  if (!configValueSource.valueIsLoadedWithImport && !configValueSource.valueIsFilePath)
52
52
  return;
53
- const { definedAtFilePath, configEnv } = configValueSource;
53
+ const { definedAt, configEnv } = configValueSource;
54
54
  if (!configEnv.client)
55
55
  return;
56
- if (definedAtFilePath.definedBy)
56
+ if (definedAt.definedBy)
57
57
  return;
58
- if (definedAtFilePath.filePathAbsoluteUserRootDir !== null) {
58
+ if (definedAt.filePathAbsoluteUserRootDir !== null) {
59
59
  // Vite expects entries to be filesystem absolute paths (surprisingly so).
60
- addEntry(definedAtFilePath.filePathAbsoluteFilesystem);
60
+ addEntry(definedAt.filePathAbsoluteFilesystem);
61
61
  }
62
62
  else {
63
63
  // Adding definedAtFilePath.filePathAbsoluteFilesystem doesn't work for npm packages, I guess because of Vite's config.server.fs.allow
64
- addInclude(definedAtFilePath.importPathAbsolute);
64
+ addInclude(definedAt.importPathAbsolute);
65
65
  }
66
66
  });
67
67
  });
@@ -6,7 +6,7 @@ import { assert, assertPosixPath } from '../../utils.js';
6
6
  import { resolveVirtualFileId, isVirtualFileId, getVirtualFileId } from '../../../shared/virtual-files.js';
7
7
  import { isVirtualFileIdPageConfigValuesAll } from '../../../shared/virtual-files/virtualFilePageConfigValuesAll.js';
8
8
  import { isVirtualFileIdImportUserCode } from '../../../shared/virtual-files/virtualFileImportUserCode.js';
9
- import { vikeConfigDependencies, reloadVikeConfig, isV1Design, getVikeConfig } from './v1-design/getVikeConfig.js';
9
+ import { reloadVikeConfig, isV1Design, getVikeConfig, getVikeConfigOptional } from './v1-design/getVikeConfig.js';
10
10
  import pc from '@brillout/picocolors';
11
11
  import { logConfigInfo } from '../../shared/loggerNotProd.js';
12
12
  import { getModuleFilePathAbsolute } from '../../shared/getFilePath.js';
@@ -29,9 +29,9 @@ function importUserCode() {
29
29
  return resolveVirtualFileId(id);
30
30
  }
31
31
  },
32
- handleHotUpdate(ctx) {
32
+ async handleHotUpdate(ctx) {
33
33
  try {
34
- return handleHotUpdate(ctx, config);
34
+ return await handleHotUpdate(ctx, config);
35
35
  }
36
36
  catch (err) {
37
37
  // Vite swallows errors thrown by handleHotUpdate()
@@ -63,9 +63,9 @@ function handleFileAddRemove(server, config) {
63
63
  server.watcher.prependListener('add', (f) => listener(f, false));
64
64
  server.watcher.prependListener('unlink', (f) => listener(f, true));
65
65
  return;
66
- function listener(file, isRemove) {
66
+ async function listener(file, isRemove) {
67
67
  file = normalizePath(file);
68
- if (isPlusFile(file) || isVikeConfigDependency(file, server.moduleGraph)?.modifiesVikeVirtualFiles) {
68
+ if (isPlusFile(file) || (await isVikeConfigDependency(file, server.moduleGraph))?.modifiesVikeVirtualFiles) {
69
69
  invalidateVikeVirtualFiles(server);
70
70
  reloadConfig(file, config, isRemove ? 'removed' : 'created');
71
71
  }
@@ -77,9 +77,9 @@ function invalidateVikeVirtualFiles(server) {
77
77
  server.moduleGraph.invalidateModule(mod);
78
78
  });
79
79
  }
80
- function handleHotUpdate(ctx, config) {
80
+ async function handleHotUpdate(ctx, config) {
81
81
  const { file, server } = ctx;
82
- const isVikeConfig = isVikeConfigDependency(ctx.file, ctx.server.moduleGraph);
82
+ const isVikeConfig = await isVikeConfigDependency(ctx.file, ctx.server.moduleGraph);
83
83
  if (isVikeConfig) {
84
84
  if (isVikeConfig.modifiesVikeVirtualFiles) {
85
85
  /* Tailwind breaks this assertion, see https://github.com/vikejs/vike/discussions/1330#discussioncomment-7787238
@@ -101,12 +101,16 @@ function handleHotUpdate(ctx, config) {
101
101
  }
102
102
  }
103
103
  }
104
- function isVikeConfigDependency(filePathAbsoluteFilesystem, moduleGraph) {
104
+ async function isVikeConfigDependency(filePathAbsoluteFilesystem, moduleGraph) {
105
105
  // Check config-only files, for example all pages/+config.js dependencies. (There aren't part of Vite's module graph.)
106
106
  assertPosixPath(filePathAbsoluteFilesystem);
107
- vikeConfigDependencies.forEach((f) => assertPosixPath(f));
108
- if (vikeConfigDependencies.has(filePathAbsoluteFilesystem))
109
- return { modifiesVikeVirtualFiles: true };
107
+ const vikeConfigObject = await getVikeConfigOptional();
108
+ if (vikeConfigObject) {
109
+ const { vikeConfigDependencies } = vikeConfigObject;
110
+ vikeConfigDependencies.forEach((f) => assertPosixPath(f));
111
+ if (vikeConfigDependencies.has(filePathAbsoluteFilesystem))
112
+ return { modifiesVikeVirtualFiles: true };
113
+ }
110
114
  // Check using Vite's module graph, for example all +htmlAttributes dependencies.
111
115
  // Alternatively, simply call updateUserFiles() on every handleHotUpdate() call.
112
116
  const importers = getImporters(filePathAbsoluteFilesystem, moduleGraph);
@@ -96,7 +96,7 @@ const configDefinitionsBuiltIn = {
96
96
  assert(source.valueIsLoaded);
97
97
  if (source.value !== null) {
98
98
  const { value } = source;
99
- const definedAt = getConfigDefinedAt('Config', 'clientHooks', source.definedAtFilePath);
99
+ const definedAt = getConfigDefinedAt('Config', 'clientHooks', source.definedAt);
100
100
  assertUsage(typeof value === 'boolean', `${definedAt} should be a boolean`);
101
101
  return value;
102
102
  }
@@ -131,6 +131,10 @@ const configDefinitionsBuiltIn = {
131
131
  env: { config: true },
132
132
  global: true
133
133
  },
134
+ mode: {
135
+ env: { config: true },
136
+ global: true
137
+ },
134
138
  injectScriptsAt: {
135
139
  env: { server: true }
136
140
  },
@@ -7,8 +7,11 @@ import type { FilePathResolved } from '../../../../../../shared/page-configs/Fil
7
7
  type FileExports = {
8
8
  fileExports: Record<string, unknown>;
9
9
  };
10
- type EsbuildCache = Record<string, // filePathAbsoluteFilesystem
11
- Promise<FileExports>>;
10
+ type EsbuildCache = {
11
+ transpileCache: Record<string, // filePathAbsoluteFilesystem
12
+ Promise<FileExports>>;
13
+ vikeConfigDependencies: Set<string>;
14
+ };
12
15
  declare function transpileAndExecuteFile(filePath: FilePathResolved, userRootDir: string, isExtensionConfig: boolean, esbuildCache: EsbuildCache): Promise<FileExports>;
13
16
  declare function getConfigBuildErrorFormatted(err: unknown): null | string;
14
17
  declare function getConfigExecutionErrorIntroMsg(err: unknown): string | null;
@@ -9,7 +9,6 @@ import pc from '@brillout/picocolors';
9
9
  import { import_ } from '@brillout/import';
10
10
  import { assertPosixPath, getRandomId, assertIsNotProductionRuntime, assert, assertWarning, isObject, toPosixPath, assertUsage, isPlainJavaScriptFile, createDebugger, assertFilePathAbsoluteFilesystem, assertIsNpmPackageImport, genPromise, isVitest } from '../../../../utils.js';
11
11
  import { transformPointerImports } from './transformPointerImports.js';
12
- import { vikeConfigDependencies } from '../getVikeConfig.js';
13
12
  import sourceMapSupport from 'source-map-support';
14
13
  import { getFilePathAbsoluteUserRootDir } from '../../../../shared/getFilePath.js';
15
14
  import { createRequire } from 'module';
@@ -26,11 +25,11 @@ async function transpileAndExecuteFile(filePath, userRootDir, isExtensionConfig,
26
25
  const { filePathAbsoluteFilesystem, filePathToShowToUserResolved } = filePath;
27
26
  assert(filePathAbsoluteFilesystem);
28
27
  const fileExtension = getFileExtension(filePathAbsoluteFilesystem);
29
- if (esbuildCache[filePathAbsoluteFilesystem]) {
30
- return await esbuildCache[filePathAbsoluteFilesystem];
28
+ if (esbuildCache.transpileCache[filePathAbsoluteFilesystem]) {
29
+ return await esbuildCache.transpileCache[filePathAbsoluteFilesystem];
31
30
  }
32
31
  const { promise, resolve } = genPromise();
33
- esbuildCache[filePathAbsoluteFilesystem] = promise;
32
+ esbuildCache.transpileCache[filePathAbsoluteFilesystem] = promise;
34
33
  assertUsage(isPlainJavaScriptFile(filePathAbsoluteFilesystem), `${filePathToShowToUserResolved} has file extension .${fileExtension} but a config file can only be a JavaScript/TypeScript file`);
35
34
  const isHeader = isHeaderFile(filePathAbsoluteFilesystem);
36
35
  if (isHeader) {
@@ -43,20 +42,20 @@ async function transpileAndExecuteFile(filePath, userRootDir, isExtensionConfig,
43
42
  }
44
43
  else {
45
44
  const transformImports = isHeader ? 'all' : true;
46
- const code = await transpileFile(filePath, transformImports, userRootDir);
45
+ const code = await transpileFile(filePath, transformImports, userRootDir, esbuildCache);
47
46
  fileExports = await executeTranspiledFile(filePath, code);
48
47
  }
49
48
  resolve({ fileExports });
50
49
  return { fileExports };
51
50
  }
52
- async function transpileFile(filePath, transformImports, userRootDir) {
51
+ async function transpileFile(filePath, transformImports, userRootDir, esbuildCache) {
53
52
  const { filePathAbsoluteFilesystem, filePathToShowToUserResolved } = filePath;
54
53
  assert(filePathAbsoluteFilesystem);
55
54
  assertPosixPath(filePathAbsoluteFilesystem);
56
- vikeConfigDependencies.add(filePathAbsoluteFilesystem);
55
+ esbuildCache.vikeConfigDependencies.add(filePathAbsoluteFilesystem);
57
56
  if (debug.isActivated)
58
57
  debug('transpile', filePathToShowToUserResolved);
59
- let { code, pointerImports } = await transpileWithEsbuild(filePath, userRootDir, transformImports);
58
+ let { code, pointerImports } = await transpileWithEsbuild(filePath, userRootDir, transformImports, esbuildCache);
60
59
  if (debug.isActivated)
61
60
  debug(`code, post esbuild (${filePathToShowToUserResolved})`, code);
62
61
  let isImportTransformed = false;
@@ -75,7 +74,7 @@ async function transpileFile(filePath, transformImports, userRootDir) {
75
74
  }
76
75
  return code;
77
76
  }
78
- async function transpileWithEsbuild(filePath, userRootDir, transformImports) {
77
+ async function transpileWithEsbuild(filePath, userRootDir, transformImports, esbuildCache) {
79
78
  const entryFilePath = filePath.filePathAbsoluteFilesystem;
80
79
  const entryFileDir = path.posix.dirname(entryFilePath);
81
80
  const options = {
@@ -229,7 +228,7 @@ async function transpileWithEsbuild(filePath, userRootDir, transformImports) {
229
228
  // We collect the dependency `args.path` in case the bulid fails (upon build error => error is thrown => no metafile)
230
229
  let { path } = args;
231
230
  path = toPosixPath(path);
232
- vikeConfigDependencies.add(path);
231
+ esbuildCache.vikeConfigDependencies.add(path);
233
232
  return undefined;
234
233
  });
235
234
  /* To exhaustively collect all dependencies upon build failure, we would also need to use onResolve().
@@ -258,7 +257,7 @@ async function transpileWithEsbuild(filePath, userRootDir, transformImports) {
258
257
  filePathRelative = toPosixPath(filePathRelative);
259
258
  assertPosixPath(userRootDir);
260
259
  const filePathAbsoluteFilesystem = path.posix.join(userRootDir, filePathRelative);
261
- vikeConfigDependencies.add(filePathAbsoluteFilesystem);
260
+ esbuildCache.vikeConfigDependencies.add(filePathAbsoluteFilesystem);
262
261
  });
263
262
  const code = result.outputFiles[0].text;
264
263
  assert(typeof code === 'string');
@@ -330,7 +329,7 @@ function getTemporaryBuildFilePath(filePathAbsoluteFilesystem) {
330
329
  const dirname = path.posix.dirname(filePathAbsoluteFilesystem);
331
330
  const filename = path.posix.basename(filePathAbsoluteFilesystem);
332
331
  // Syntax with semicolon `build:${/*...*/}` doesn't work on Windows: https://github.com/vikejs/vike/issues/800#issuecomment-1517329455
333
- const filePathTmp = path.posix.join(dirname, `${filename}.build-${getRandomId(12)}.mjs`);
332
+ const filePathTmp = path.posix.join(dirname, `${filename}.build-${getRandomId()}.mjs`);
334
333
  assert(isTemporaryBuildFile(filePathTmp));
335
334
  return filePathTmp;
336
335
  }