vike 0.4.267 → 0.4.268-commit-ca58695

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 (204) hide show
  1. package/RenderErrorPage.js +2 -2
  2. package/abort.js +2 -2
  3. package/dist/client/__internal/index.d.ts +3 -0
  4. package/dist/client/__internal/index.js +4 -0
  5. package/dist/client/runtime-client-routing/createPageContextClient.d.ts +5 -0
  6. package/dist/client/runtime-client-routing/getGlobalContextClientInternal.d.ts +5 -0
  7. package/dist/client/runtime-client-routing/getPageContextFromHooks.d.ts +28 -2
  8. package/dist/client/runtime-client-routing/getPageContextFromHooks.js +5 -5
  9. package/dist/client/runtime-client-routing/renderPageClient.d.ts +490 -10
  10. package/dist/client/runtime-client-routing/renderPageClient.js +149 -43
  11. package/dist/client/runtime-client-routing/streamedValues.d.ts +5 -0
  12. package/dist/client/runtime-client-routing/streamedValues.js +23 -0
  13. package/dist/client/runtime-server-routing/createPageContextClient.d.ts +5 -0
  14. package/dist/client/runtime-server-routing/entry.js +1 -1
  15. package/dist/client/runtime-server-routing/getGlobalContextClientInternal.d.ts +5 -0
  16. package/dist/client/shared/getGlobalContextClientInternalShared.d.ts +5 -0
  17. package/dist/client/shared/getGlobalContextClientInternalShared.js +2 -0
  18. package/dist/client/shared/getJsonSerializedInHtml.d.ts +2 -2
  19. package/dist/client/shared/getJsonSerializedInHtml.js +9 -6
  20. package/dist/client/shared/loadPageConfigsLazyClientSide.js +0 -4
  21. package/dist/client/shared/removeFoucBuster.js +14 -3
  22. package/dist/client/shared/streamedValues/asyncIterable.d.ts +4 -0
  23. package/dist/client/shared/streamedValues/asyncIterable.js +26 -0
  24. package/dist/client/shared/streamedValues/lines.d.ts +11 -0
  25. package/dist/client/shared/streamedValues/lines.js +19 -0
  26. package/dist/client/shared/streamedValues/promise.d.ts +4 -0
  27. package/dist/client/shared/streamedValues/promise.js +19 -0
  28. package/dist/client/shared/streamedValues/readableStream.d.ts +4 -0
  29. package/dist/client/shared/streamedValues/readableStream.js +44 -0
  30. package/dist/client/shared/streamedValues/registry.d.ts +21 -0
  31. package/dist/client/shared/streamedValues/registry.js +40 -0
  32. package/dist/client/shared/streamedValues.d.ts +7 -0
  33. package/dist/client/shared/streamedValues.js +82 -0
  34. package/dist/node/api/dev.js +15 -1
  35. package/dist/node/api/resolveViteConfigUser.js +2 -2
  36. package/dist/node/api/serverEntryDev.d.ts +10 -0
  37. package/dist/node/api/serverEntryDev.js +125 -0
  38. package/dist/node/createDevMiddleware.js +12 -0
  39. package/dist/node/prerender/resolvePrerenderConfig.d.ts +1 -1
  40. package/dist/node/prerender/resolvePrerenderConfig.js +4 -1
  41. package/dist/node/prerender/runPrerender.d.ts +18 -18
  42. package/dist/node/prerender/runPrerender.js +61 -16
  43. package/dist/node/vite/assertEnvVite.js +1 -1
  44. package/dist/node/vite/index.js +2 -0
  45. package/dist/node/vite/plugins/build/handleAssetsManifest.js +6 -2
  46. package/dist/node/vite/plugins/build/pluginBuildApp.js +25 -26
  47. package/dist/node/vite/plugins/build/pluginBuildConfig.d.ts +2 -2
  48. package/dist/node/vite/plugins/build/pluginBuildConfig.js +25 -17
  49. package/dist/node/vite/plugins/build/pluginDistFileNames.js +70 -50
  50. package/dist/node/vite/plugins/build/pluginEnvironmentEntries.d.ts +6 -0
  51. package/dist/node/vite/plugins/build/pluginEnvironmentEntries.js +71 -0
  52. package/dist/node/vite/plugins/build/pluginSuppressRollupWarning.js +19 -17
  53. package/dist/node/vite/plugins/pluginCommon.js +10 -7
  54. package/dist/node/vite/plugins/pluginDev/optimizeDeps.d.ts +2 -2
  55. package/dist/node/vite/plugins/pluginDev/optimizeDeps.js +6 -2
  56. package/dist/node/vite/plugins/pluginReplaceConstantsGlobalThis.js +6 -4
  57. package/dist/node/vite/plugins/pluginUniversalDeploy/getServerConfig.d.ts +3 -0
  58. package/dist/node/vite/plugins/pluginUniversalDeploy/getServerConfig.js +28 -2
  59. package/dist/node/vite/plugins/pluginUniversalDeploy/pluginServerEntryAlias.d.ts +1 -1
  60. package/dist/node/vite/plugins/pluginUniversalDeploy/pluginServerEntryAlias.js +22 -11
  61. package/dist/node/vite/plugins/pluginUniversalDeploy/pluginWrapServerFile.d.ts +4 -0
  62. package/dist/node/vite/plugins/pluginUniversalDeploy/pluginWrapServerFile.js +29 -0
  63. package/dist/node/vite/plugins/pluginUniversalDeploy.js +29 -5
  64. package/dist/node/vite/plugins/pluginVirtualFiles/generateVirtualFileGlobalEntry.d.ts +2 -1
  65. package/dist/node/vite/plugins/pluginVirtualFiles/generateVirtualFileGlobalEntry.js +29 -12
  66. package/dist/node/vite/plugins/pluginVirtualFiles/generateVirtualFileGlobalEntryWithOldDesign.js +3 -2
  67. package/dist/node/vite/plugins/pluginVirtualFiles/generateVirtualFilePageEntry.js +7 -7
  68. package/dist/node/vite/plugins/pluginVirtualFiles/getConfigValueSourcesRelevant.d.ts +10 -6
  69. package/dist/node/vite/plugins/pluginVirtualFiles/getConfigValueSourcesRelevant.js +5 -11
  70. package/dist/node/vite/plugins/pluginVirtualFiles.js +20 -0
  71. package/dist/node/vite/shared/addSsrMiddleware.js +11 -27
  72. package/dist/node/vite/shared/findPageFiles.d.ts +1 -1
  73. package/dist/node/vite/shared/findPageFiles.js +1 -11
  74. package/dist/node/vite/shared/getAssetsDir.d.ts +3 -2
  75. package/dist/node/vite/shared/getAssetsDir.js +3 -3
  76. package/dist/node/vite/shared/isViteCli.d.ts +3 -3
  77. package/dist/node/vite/shared/isViteCli.js +80 -84
  78. package/dist/node/vite/shared/isViteServerSide.js +2 -7
  79. package/dist/node/vite/shared/resolveVikeConfigInternal/metaBuiltIn.d.ts +6 -4
  80. package/dist/node/vite/shared/resolveVikeConfigInternal/metaBuiltIn.js +17 -6
  81. package/dist/node/vite/shared/resolveVikeConfigInternal/transpileAndExecuteFile.js +9 -2
  82. package/dist/node/vite/shared/resolveVikeConfigInternal.d.ts +5 -1
  83. package/dist/node/vite/shared/resolveVikeConfigInternal.js +86 -13
  84. package/dist/server/__internal/fetch-deprecated.d.ts +2 -0
  85. package/dist/server/__internal/fetch-deprecated.js +6 -0
  86. package/dist/server/__internal/fetch.d.ts +9 -0
  87. package/dist/server/__internal/fetch.js +5 -0
  88. package/dist/server/__internal/index.d.ts +4 -0
  89. package/dist/server/__internal/index.js +8 -0
  90. package/dist/server/createPageRenderer.d.ts +2 -2
  91. package/dist/server/createPageRenderer.js +2 -2
  92. package/dist/server/runtime/createDevMiddleware.js +3 -1
  93. package/dist/server/runtime/globalContext.d.ts +69 -10
  94. package/dist/server/runtime/globalContext.js +35 -2
  95. package/dist/server/runtime/index.d.ts +1 -1
  96. package/dist/server/runtime/index.js +1 -1
  97. package/dist/server/runtime/renderPageServer/analyzePage.js +3 -3
  98. package/dist/server/runtime/renderPageServer/createHttpResponse.d.ts +20 -9
  99. package/dist/server/runtime/renderPageServer/createHttpResponse.js +34 -21
  100. package/dist/server/runtime/renderPageServer/createPageContextServer.d.ts +13 -23
  101. package/dist/server/runtime/renderPageServer/csp.d.ts +2 -1
  102. package/dist/server/runtime/renderPageServer/csp.js +2 -1
  103. package/dist/server/runtime/renderPageServer/execHookOnError.js +1 -1
  104. package/dist/server/runtime/renderPageServer/execHookOnRenderHtml.d.ts +9 -0
  105. package/dist/server/runtime/renderPageServer/execHookOnRenderHtml.js +21 -9
  106. package/dist/server/runtime/renderPageServer/getHttpResponseBody.d.ts +2 -2
  107. package/dist/server/runtime/renderPageServer/getHttpResponseBody.js +19 -12
  108. package/dist/server/runtime/renderPageServer/getPageContextJson.d.ts +8 -0
  109. package/dist/server/runtime/renderPageServer/getPageContextJson.js +47 -0
  110. package/dist/server/runtime/renderPageServer/handleErrorWithoutErrorPage.d.ts +2 -0
  111. package/dist/server/runtime/renderPageServer/handleErrorWithoutErrorPage.js +1 -1
  112. package/dist/server/runtime/renderPageServer/handlePageContextRequestUrl.js +2 -2
  113. package/dist/server/runtime/renderPageServer/headersResponse.d.ts +11 -2
  114. package/dist/server/runtime/renderPageServer/headersResponse.js +22 -2
  115. package/dist/server/runtime/renderPageServer/html/injectAssets/getHtmlTags.js +5 -4
  116. package/dist/server/runtime/renderPageServer/html/injectAssets.d.ts +3 -2
  117. package/dist/server/runtime/renderPageServer/html/injectAssets.js +7 -1
  118. package/dist/server/runtime/renderPageServer/html/renderHtml.js +4 -2
  119. package/dist/server/runtime/renderPageServer/html/serializeContext.d.ts +5 -1
  120. package/dist/server/runtime/renderPageServer/html/serializeContext.js +12 -9
  121. package/dist/server/runtime/renderPageServer/html/stream.d.ts +13 -6
  122. package/dist/server/runtime/renderPageServer/html/stream.js +135 -32
  123. package/dist/server/runtime/renderPageServer/html/streamedValuesHtml.d.ts +30 -0
  124. package/dist/server/runtime/renderPageServer/html/streamedValuesHtml.js +92 -0
  125. package/dist/server/runtime/renderPageServer/loadPageConfigsLazyServerSide.d.ts +10 -14
  126. package/dist/server/runtime/renderPageServer/loadPageConfigsLazyServerSide.js +5 -1
  127. package/dist/server/runtime/renderPageServer/loadPageContextEnvironments.d.ts +15 -0
  128. package/dist/server/runtime/renderPageServer/loadPageContextEnvironments.js +61 -0
  129. package/dist/server/runtime/renderPageServer/renderPageServerAfterRoute.d.ts +320 -55
  130. package/dist/server/runtime/renderPageServer/renderPageServerAfterRoute.js +21 -12
  131. package/dist/server/runtime/renderPageServer/streamedValues/asyncIterable.d.ts +4 -0
  132. package/dist/server/runtime/renderPageServer/streamedValues/asyncIterable.js +12 -0
  133. package/dist/server/runtime/renderPageServer/streamedValues/lines.d.ts +10 -0
  134. package/dist/server/runtime/renderPageServer/streamedValues/lines.js +49 -0
  135. package/dist/server/runtime/renderPageServer/streamedValues/promise.d.ts +4 -0
  136. package/dist/server/runtime/renderPageServer/streamedValues/promise.js +14 -0
  137. package/dist/server/runtime/renderPageServer/streamedValues/pump.d.ts +10 -0
  138. package/dist/server/runtime/renderPageServer/streamedValues/pump.js +67 -0
  139. package/dist/server/runtime/renderPageServer/streamedValues/readableStream.d.ts +4 -0
  140. package/dist/server/runtime/renderPageServer/streamedValues/readableStream.js +12 -0
  141. package/dist/server/runtime/renderPageServer/streamedValues/registry.d.ts +28 -0
  142. package/dist/server/runtime/renderPageServer/streamedValues/registry.js +33 -0
  143. package/dist/server/runtime/renderPageServer.d.ts +65 -18
  144. package/dist/server/runtime/renderPageServer.js +33 -62
  145. package/dist/server/runtime/universal-middleware/core.d.ts +25 -0
  146. package/dist/server/runtime/universal-middleware/core.js +167 -0
  147. package/dist/server/runtime/universal-middleware/deprecated-export.d.ts +3 -0
  148. package/dist/server/runtime/universal-middleware/deprecated-export.js +10 -0
  149. package/dist/server/runtime/universal-middleware/getMiddlewaresPipe.d.ts +15 -0
  150. package/dist/server/runtime/universal-middleware/getMiddlewaresPipe.js +51 -0
  151. package/dist/server/runtime/universal-middleware/vikeUniversalMiddleware.d.ts +9 -0
  152. package/dist/server/runtime/universal-middleware/vikeUniversalMiddleware.js +22 -0
  153. package/dist/shared-server-client/createGlobalContextShared.d.ts +8 -0
  154. package/dist/shared-server-client/createGlobalContextShared.js +2 -1
  155. package/dist/shared-server-client/getPageContextPublicShared.js +1 -3
  156. package/dist/shared-server-client/getPageFiles/parseVirtualFileExportsGlobalEntry.d.ts +8 -0
  157. package/dist/shared-server-client/getPageFiles/parseVirtualFileExportsGlobalEntry.js +17 -7
  158. package/dist/shared-server-client/hooks/execHook.d.ts +1 -1
  159. package/dist/shared-server-client/hooks/execHook.js +2 -2
  160. package/dist/shared-server-client/page-configs/serialize/serializeConfigValues.js +2 -0
  161. package/dist/shared-server-client/route/abort.d.ts +1 -1
  162. package/dist/shared-server-client/route/abort.js +4 -2
  163. package/dist/shared-server-client/streamedValues.d.ts +22 -0
  164. package/dist/shared-server-client/streamedValues.js +24 -0
  165. package/dist/shared-server-node/vike-environments.d.ts +4 -0
  166. package/dist/shared-server-node/vike-environments.js +10 -0
  167. package/dist/shared-server-node/virtualFileId.d.ts +7 -5
  168. package/dist/shared-server-node/virtualFileId.js +42 -42
  169. package/dist/types/Config.d.ts +11 -3
  170. package/dist/types/GlobalContext.d.ts +3 -3
  171. package/dist/types/PageConfig.d.ts +13 -5
  172. package/dist/types/PageContext.d.ts +18 -10
  173. package/dist/types/PageContext.js +1 -0
  174. package/dist/types/Server.d.ts +1 -1
  175. package/dist/types/VikeNamespace.d.ts +1 -1
  176. package/dist/types/index.d.ts +1 -0
  177. package/dist/utils/PROJECT_VERSION.d.ts +1 -1
  178. package/dist/utils/PROJECT_VERSION.js +1 -1
  179. package/dist/utils/assertViteVersion.d.ts +1 -3
  180. package/dist/utils/assertViteVersion.js +6 -9
  181. package/dist/utils/catchInfiniteLoop.js +33 -11
  182. package/dist/utils/deepEqual.d.ts +2 -1
  183. package/dist/utils/deepEqual.js +21 -6
  184. package/dist/utils/getContentTypeFromUrl.d.ts +2 -0
  185. package/dist/utils/getContentTypeFromUrl.js +39 -0
  186. package/dist/utils/injectRollupInputs.d.ts +2 -2
  187. package/dist/utils/injectRollupInputs.js +2 -2
  188. package/dist/utils/installUncaughtErrorHandlers.js +9 -0
  189. package/dist/utils/isDev.js +2 -7
  190. package/dist/utils/parseUrl-extras.js +4 -0
  191. package/fetch.js +2 -2
  192. package/modifyUrl.js +2 -2
  193. package/package.json +42 -26
  194. package/routing.js +2 -2
  195. package/universal-middleware.js +2 -2
  196. package/vike-server.d.ts +14 -0
  197. package/dist/node/vite/plugins/pluginUniversalDeploy/pluginUnwrapProdOptions.d.ts +0 -4
  198. package/dist/node/vite/plugins/pluginUniversalDeploy/pluginUnwrapProdOptions.js +0 -22
  199. package/dist/server/runtime/fetch.d.ts +0 -10
  200. package/dist/server/runtime/fetch.js +0 -5
  201. package/dist/server/runtime/universal-middleware.d.ts +0 -10
  202. package/dist/server/runtime/universal-middleware.js +0 -27
  203. package/dist/shared-server-client/addIs404ToPageProps.d.ts +0 -2
  204. package/dist/shared-server-client/addIs404ToPageProps.js +0 -17
@@ -1,7 +1,8 @@
1
1
  export { isViteCli };
2
2
  export { getViteCliArgs };
3
- export { getViteBuildCliArgs };
3
+ export { getViteCliArgsMinimal };
4
4
  export { getViteCliCommand };
5
+ // Copied from Vite's CLI
5
6
  import { assert } from '../../../utils/assert.js';
6
7
  import { isObject } from '../../../utils/isObject.js';
7
8
  import { isToolCli } from '../../../utils/isToolCli.js';
@@ -11,48 +12,23 @@ const desc = 'vike:vite-cli-simulation';
11
12
  function isViteCli() {
12
13
  return isToolCli('vite');
13
14
  }
14
- function getViteCliCommand() {
15
- if (!isViteCli())
16
- return null;
17
- let command;
18
- const setCommand = (cmd) => {
19
- assert(command === undefined);
20
- command = cmd;
15
+ function parseViteCli() {
16
+ let viteCli;
17
+ const onCommand = (command) => (root, options) => {
18
+ assert(viteCli === undefined);
19
+ assert(root === undefined || typeof root === 'string');
20
+ assert(isObject(options));
21
+ // Same as Vite: duplicated options => the last value wins
22
+ for (const [key, value] of Object.entries(options)) {
23
+ if (Array.isArray(value))
24
+ options[key] = value[value.length - 1];
25
+ }
26
+ assert(options.config === undefined || typeof options.config === 'string');
27
+ viteCli = { command, root, options };
21
28
  };
22
- // Copied & adapted from Vite
23
- // https://github.com/vitejs/vite/blob/d3e7eeefa91e1992f47694d16fe4dbe708c4d80e/packages/vite/src/node/cli.ts#L186-L188
24
- const cli = cac(desc);
25
- // dev
26
- cli
27
- .command('[root]', desc)
28
- .alias('serve')
29
- .alias('dev')
30
- .action(() => {
31
- setCommand('dev');
32
- });
33
- // build
34
- cli.command('build [root]', desc).action(() => {
35
- setCommand('build');
36
- });
37
- // optimize
38
- cli.command('optimize [root]', desc).action(() => {
39
- setCommand('optimize');
40
- });
41
- // preview
42
- cli.command('preview [root]', desc).action(() => {
43
- setCommand('preview');
44
- });
45
- cli.parse();
46
- assert(command);
47
- return command;
48
- }
49
- function getViteBuildCliArgs() {
50
- if (!isViteCli())
51
- return null;
52
- // Copied & adapted from Vite
29
+ // We need to declare all Vite's options, otherwise cac consumes the next argument as the value of boolean options (e.g. `vite build --emptyOutDir some-root`).
53
30
  const cli = cac(desc);
54
31
  // Common configs
55
- // https://github.com/vitejs/vite/blob/d3e7eeefa91e1992f47694d16fe4dbe708c4d80e/packages/vite/src/node/cli.ts#L169-L182
56
32
  cli
57
33
  .option('-c, --config <file>', desc)
58
34
  .option('--base <path>', desc)
@@ -62,8 +38,22 @@ function getViteBuildCliArgs() {
62
38
  .option('-d, --debug [feat]', desc)
63
39
  .option('-f, --filter <filter>', desc)
64
40
  .option('-m, --mode <mode>', desc);
65
- // Build configs
66
- // https://github.com/vitejs/vite/blob/d3e7eeefa91e1992f47694d16fe4dbe708c4d80e/packages/vite/src/node/cli.ts#L286-L322
41
+ // dev
42
+ cli
43
+ .command('[root]', desc)
44
+ .alias('serve')
45
+ .alias('dev')
46
+ .option('--host [host]', desc)
47
+ .option('--port <port>', desc)
48
+ .option('--open [path]', desc)
49
+ .option('--cors', desc)
50
+ .option('--strictPort', desc)
51
+ .option('--force', desc)
52
+ .option('--experimentalBundle', desc)
53
+ // Options that this copy doesn't declare (e.g. added by newer Vite versions) are still validated by Vite's own CLI, which throws `Unknown option` for options Vite doesn't know
54
+ .allowUnknownOptions()
55
+ .action(onCommand('dev'));
56
+ // build
67
57
  cli
68
58
  .command('build [root]', desc)
69
59
  .option('--target <target>', desc)
@@ -71,35 +61,61 @@ function getViteBuildCliArgs() {
71
61
  .option('--assetsDir <dir>', desc)
72
62
  .option('--assetsInlineLimit <number>', desc)
73
63
  .option('--ssr [entry]', desc)
74
- .option('--sourcemap', desc)
64
+ .option('--sourcemap [output]', desc)
75
65
  .option('--minify [minifier]', desc)
76
66
  .option('--manifest [name]', desc)
77
67
  .option('--ssrManifest [name]', desc)
78
68
  .option('--emptyOutDir', desc)
79
69
  .option('-w, --watch', desc)
80
70
  .option('--app', desc)
81
- .action((root, options) => {
82
- assert(isObject(options));
83
- assert(root === undefined || typeof root === 'string');
84
- assert(options.config === undefined || typeof options.config === 'string');
85
- // https://github.com/vitejs/vite/blob/d3e7eeefa91e1992f47694d16fe4dbe708c4d80e/packages/vite/src/node/cli.ts#L331-L346
86
- const buildOptions = cleanGlobalCLIOptions(cleanBuilderCLIOptions(options));
87
- configFromCli = {
88
- root,
89
- base: options.base,
90
- mode: options.mode,
91
- configFile: options.config,
92
- configLoader: options.configLoader,
93
- logLevel: options.logLevel,
94
- clearScreen: options.clearScreen,
95
- build: buildOptions,
96
- ...(options.app ? { builder: {} } : {}),
97
- };
98
- });
99
- let configFromCli = null;
71
+ .allowUnknownOptions()
72
+ .action(onCommand('build'));
73
+ // optimize
74
+ cli.command('optimize [root]', desc).option('--force', desc).allowUnknownOptions().action(onCommand('optimize'));
75
+ // preview
76
+ cli
77
+ .command('preview [root]', desc)
78
+ .option('--host [host]', desc)
79
+ .option('--port <port>', desc)
80
+ .option('--strictPort', desc)
81
+ .option('--open [path]', desc)
82
+ .option('--outDir <dir>', desc)
83
+ .allowUnknownOptions()
84
+ .action(onCommand('preview'));
100
85
  cli.parse();
101
- return configFromCli;
102
- // https://github.com/vitejs/vite/blob/d3e7eeefa91e1992f47694d16fe4dbe708c4d80e/packages/vite/src/node/cli.ts#L99
86
+ assert(viteCli);
87
+ return viteCli;
88
+ }
89
+ function getViteCliCommand() {
90
+ if (!isViteCli())
91
+ return null;
92
+ return parseViteCli().command;
93
+ }
94
+ function getViteCliArgsMinimal() {
95
+ if (!isViteCli())
96
+ return null;
97
+ const { root, options } = parseViteCli();
98
+ return { root, configFile: options.config };
99
+ }
100
+ function getViteCliArgs() {
101
+ if (!isViteCli())
102
+ return null;
103
+ const { command, root, options } = parseViteCli();
104
+ if (command !== 'build')
105
+ return null;
106
+ // Like Vite: all options except the global ones go to `build`
107
+ const buildOptions = cleanGlobalCLIOptions(cleanBuilderCLIOptions(options));
108
+ return {
109
+ root,
110
+ base: options.base,
111
+ mode: options.mode,
112
+ configFile: options.config,
113
+ configLoader: options.configLoader,
114
+ logLevel: options.logLevel,
115
+ clearScreen: options.clearScreen,
116
+ build: buildOptions,
117
+ ...(options.app ? { builder: {} } : {}),
118
+ };
103
119
  function cleanGlobalCLIOptions(options) {
104
120
  const ret = { ...options };
105
121
  delete ret['--'];
@@ -129,29 +145,9 @@ function getViteBuildCliArgs() {
129
145
  }
130
146
  return ret;
131
147
  }
132
- // https://github.com/vitejs/vite/blob/d3e7eeefa91e1992f47694d16fe4dbe708c4d80e/packages/vite/src/node/cli.ts#L141
133
148
  function cleanBuilderCLIOptions(options) {
134
149
  const ret = { ...options };
135
150
  delete ret.app;
136
151
  return ret;
137
152
  }
138
153
  }
139
- function getViteCliArgs() {
140
- if (!isViteCli())
141
- return null;
142
- const cli = cac(desc);
143
- cli.option('-c, --config <file>', desc);
144
- let result = null;
145
- const setResult = (root, options) => {
146
- assert(root === undefined || typeof root === 'string');
147
- assert(isObject(options));
148
- assert(options.config === undefined || typeof options.config === 'string');
149
- result = { root, configFile: options.config };
150
- };
151
- cli.command('[root]', desc).alias('serve').alias('dev').action(setResult);
152
- cli.command('build [root]', desc).action(setResult);
153
- cli.command('optimize [root]', desc).action(setResult);
154
- cli.command('preview [root]', desc).action(setResult);
155
- cli.parse();
156
- return result;
157
- }
@@ -4,8 +4,7 @@ export { isViteServerSide_onlySsrEnv };
4
4
  export { isViteServerSide_extraSafe };
5
5
  export { isViteServerSide_applyToEnvironment };
6
6
  export { isViteServerSide_configEnvironment };
7
- import { viteVersionMin } from '../../../utils/assertViteVersion.js';
8
- import { assert, assertUsage } from '../../../utils/assert.js';
7
+ import { assert } from '../../../utils/assert.js';
9
8
  import '../assertEnvVite.js';
10
9
  function isViteServerSide_impl(configGlobal, viteEnv) {
11
10
  assert(!('consumer' in configGlobal)); // make sure configGlobal isn't viteEnv.config
@@ -60,11 +59,7 @@ function isViteServerSide_extraSafe(config, viteEnv, options) {
60
59
  optionsSsr: options?.ssr ?? null,
61
60
  };
62
61
  assert(options, debug);
63
- /* TO-DO/eventually: use internal assert() instead of assertUsage() once we can use this.meta.viteVersion — see utils/assertViteVersion.ts
64
- assert(typeof options.ssr === 'boolean', debug)
65
- /*/
66
- assertUsage(typeof options.ssr === 'boolean', `You're using an old Vite version — update Vite to ${viteVersionMin} or above.`);
67
- //*/
62
+ assert(typeof options.ssr === 'boolean', debug);
68
63
  assert(options.ssr === isServerSide, debug);
69
64
  return isServerSide;
70
65
  }
@@ -56,11 +56,13 @@ type ConfigDefinition = {
56
56
  }) => boolean);
57
57
  /** Whether changes to the configuration should trigger a Vite restart. */
58
58
  vite?: boolean;
59
- /** @experimental */
60
- _computed?: (pageConfig: PageConfigBuildTimeBeforeComputed) => unknown;
61
- /** @experimental */
59
+ /** @internal */
60
+ _computed?: (pageConfig: PageConfigBuildTimeBeforeComputed, isDev: boolean) => unknown;
61
+ /** @internal */
62
62
  _valueIsFilePath?: true;
63
- /** @experimental */
63
+ /** @internal */
64
+ _valueNotLoadedAtRuntime?: true;
65
+ /** @internal */
64
66
  _userEffectDefinedAtFilePath?: DefinedAtFilePath;
65
67
  isDefinedByPeerDependency?: undefined;
66
68
  } | ConfigDefinitionDefinedByPeerDependency;
@@ -53,14 +53,15 @@ const metaBuiltIn = {
53
53
  route: {
54
54
  env: {
55
55
  server: true,
56
- client: 'if-client-routing',
56
+ client: true,
57
+ clientRoutingOnly: true,
57
58
  // For vite-plugin-vercel
58
59
  config: true,
59
60
  },
60
61
  eager: true,
61
62
  },
62
63
  guard: {
63
- env: { server: true, client: 'if-client-routing' },
64
+ env: { server: true, client: true, clientRoutingOnly: true },
64
65
  },
65
66
  data: {
66
67
  env: { server: true },
@@ -70,7 +71,7 @@ const metaBuiltIn = {
70
71
  cumulative: true,
71
72
  },
72
73
  iKnowThePerformanceRisksOfAsyncRouteFunctions: {
73
- env: { server: true, client: 'if-client-routing' },
74
+ env: { server: true, client: true, clientRoutingOnly: true },
74
75
  eager: true,
75
76
  },
76
77
  filesystemRoutingRoot: {
@@ -114,12 +115,13 @@ const metaBuiltIn = {
114
115
  hasServerOnlyHook: {
115
116
  env: { client: true },
116
117
  eager: true,
117
- _computed: (pageConfig) => {
118
+ _computed: (pageConfig, isDev) => {
118
119
  const sources = ['data', 'onBeforeRender', 'onCreatePageContext', 'guard']
119
120
  .map((hookName) => getConfigValueSourcesRelevant(hookName, {
120
- isForClientSide: false,
121
+ environmentName: 'server',
121
122
  // TO-DO/eventually/remove-server-router: let's eventually remove support for Server Routing
122
123
  isClientRouting: true,
124
+ isDev,
123
125
  }, pageConfig))
124
126
  .flat(1)
125
127
  // Server-only
@@ -243,6 +245,15 @@ const metaBuiltIn = {
243
245
  server: {
244
246
  env: { server: true },
245
247
  global: true,
248
+ // virtual:vike:global-entry:server shouldn't import +server.js
249
+ // - Otherwise a +server.js calling `await getGlobalContext()` would wait for itself and hang indefinitely
250
+ _valueNotLoadedAtRuntime: true,
251
+ },
252
+ serverEntry: {
253
+ // The value is merely the file path of the server entry, which becomes dist/server/index.mjs — Vike never loads it as a config value
254
+ env: { config: true },
255
+ global: true,
256
+ _valueIsFilePath: true,
246
257
  },
247
258
  precompress: {
248
259
  env: { config: true },
@@ -253,7 +264,7 @@ const metaBuiltIn = {
253
264
  global: true,
254
265
  },
255
266
  onBeforeRoute: {
256
- env: { server: true, client: 'if-client-routing' },
267
+ env: { server: true, client: true, clientRoutingOnly: true },
257
268
  eager: true,
258
269
  global: true,
259
270
  },
@@ -505,12 +505,19 @@ function getConfigExecutionErrorIntroMsg(err) {
505
505
  const errIntroMsg = execErrIntroMsg.get(err);
506
506
  return errIntroMsg ?? null;
507
507
  }
508
+ const processId = crypto.randomUUID();
508
509
  function getTemporaryBuildFilePath(filePathAbsoluteFilesystem, code) {
509
510
  assertPosixPath(filePathAbsoluteFilesystem);
510
511
  const fileDir = path.posix.dirname(filePathAbsoluteFilesystem);
511
512
  const filename = path.posix.basename(filePathAbsoluteFilesystem);
512
- // Using content hash in file path, so that the cache of dynamic `import()` behaves as we want.
513
- const fileHash = crypto.createHash('md5').update(code).digest('hex').slice(0, 12);
513
+ const fileHash = crypto
514
+ .createHash('md5')
515
+ // Using content hash in file path, so that the cache of dynamic `import()` behaves as we want.
516
+ .update(code)
517
+ // Parallel processes shouldn't overwrite each other's temporary file
518
+ .update(processId)
519
+ .digest('hex')
520
+ .slice(0, 12);
514
521
  // Syntax with semicolon `build:${/*...*/}` doesn't work on Windows: https://github.com/vikejs/vike/issues/800#issuecomment-1517329455
515
522
  const filePathTmp = path.posix.join(fileDir, `${filename}.build-${fileHash}.mjs`);
516
523
  assert(isTemporaryBuildFile(filePathTmp));
@@ -3,6 +3,7 @@ export type { VikeConfig };
3
3
  export { getVikeConfigInternal };
4
4
  export { getVikeConfigInternalOptional };
5
5
  export { setVikeConfigContext };
6
+ export { setViteEnvironmentNames };
6
7
  export { isVikeConfigContextSet };
7
8
  export { reloadVikeConfig };
8
9
  export { isV1Design };
@@ -36,6 +37,7 @@ type VikeConfigInternal = GlobalConfigPublic & {
36
37
  _pageConfigGlobal: PageConfigGlobalBuildTime;
37
38
  _vikeConfigDependencies: Set<string>;
38
39
  _extensions: PlusFile[];
40
+ _additionalEnvironmentNames: string[];
39
41
  prerenderContext: PrerenderContext;
40
42
  };
41
43
  declare function reloadVikeConfig(): void;
@@ -53,6 +55,7 @@ type VikeConfig = Pick<VikeConfigInternal, 'config' | 'pages' | 'prerenderContex
53
55
  dangerouslyUseInternals: DangerouslyUseInternals<VikeConfigInternal>;
54
56
  };
55
57
  declare function setVikeConfigContext(vikeConfigCtx_: VikeConfigContext): void;
58
+ declare function setViteEnvironmentNames(viteEnvironmentNames: string[]): Promise<void>;
56
59
  declare function isVikeConfigContextSet(): boolean;
57
60
  declare function getVikeConfigInternalOptional(): Promise<null | VikeConfigInternal>;
58
61
  declare function isV1Design(): boolean;
@@ -74,8 +77,9 @@ declare function getConfigDefinitionOptional(configDefinitions: ConfigDefinition
74
77
  isGlobalLocation: boolean;
75
78
  }) => boolean);
76
79
  vite?: boolean;
77
- _computed?: (pageConfig: PageConfigBuildTimeBeforeComputed) => unknown;
80
+ _computed?: (pageConfig: PageConfigBuildTimeBeforeComputed, isDev: boolean) => unknown;
78
81
  _valueIsFilePath?: true;
82
+ _valueNotLoadedAtRuntime?: true;
79
83
  _userEffectDefinedAtFilePath?: DefinedAtFilePath;
80
84
  isDefinedByPeerDependency?: undefined;
81
85
  } | null;
@@ -4,6 +4,7 @@ export { getVikeConfig };
4
4
  export { getVikeConfigInternal };
5
5
  export { getVikeConfigInternalOptional };
6
6
  export { setVikeConfigContext };
7
+ export { setViteEnvironmentNames };
7
8
  export { isVikeConfigContextSet };
8
9
  export { reloadVikeConfig };
9
10
  export { isV1Design };
@@ -12,7 +13,6 @@ export { getConfigDefinitionOptional };
12
13
  export { getVikeConfigFromCliOrEnv };
13
14
  export { EARLY_SETTINGS };
14
15
  import { deepEqual } from '../../../utils/deepEqual.js';
15
- import { assertKeys } from '../../../utils/assertKeys.js';
16
16
  import { assertIsNotProductionRuntime } from '../../../utils/assertSetup.js';
17
17
  import { getMostSimilar } from '../../../utils/getMostSimilar.js';
18
18
  import { objectEntries } from '../../../utils/objectEntries.js';
@@ -23,6 +23,7 @@ import { checkType } from '../../../utils/checkType.js';
23
23
  import { genPromise } from '../../../utils/genPromise.js';
24
24
  import { getGlobalObject } from '../../../utils/getGlobalObject.js';
25
25
  import { hasProp } from '../../../utils/hasProp.js';
26
+ import { includes } from '../../../utils/includes.js';
26
27
  import { isCallable } from '../../../utils/isCallable.js';
27
28
  import { isObject } from '../../../utils/isObject.js';
28
29
  import { joinEnglish } from '../../../utils/joinEnglish.js';
@@ -42,6 +43,7 @@ import { loadPointerImport, loadValueFile } from './resolveVikeConfigInternal/lo
42
43
  import { resolvePointerImport } from './resolveVikeConfigInternal/resolvePointerImport.js';
43
44
  import { parsePointerImportData } from './resolveVikeConfigInternal/pointerImports.js';
44
45
  import { getFilePathResolved } from './getFilePath.js';
46
+ import { isEnvironmentBuiltIn, isEnvironmentNameValid } from '../../../shared-server-node/vike-environments.js';
45
47
  import { getConfigValueBuildTime } from '../../../shared-server-client/page-configs/getConfigValueBuildTime.js';
46
48
  import { resolveGlobalConfigPublic, } from '../../../shared-server-client/page-configs/resolveVikeConfigPublic.js';
47
49
  import { getConfigValuesBase, isJsonValue, } from '../../../shared-server-client/page-configs/serialize/serializeConfigValues.js';
@@ -65,12 +67,13 @@ const globalObject = getGlobalObject('vite/shared/resolveVikeConfigInternal.ts',
65
67
  vikeConfigSync: null,
66
68
  vikeConfigCtx: null, // Information provided by Vite's `config` and Vike's CLI. We could, if we want or need to, completely remove the dependency on Vite.
67
69
  prerenderContext: null,
70
+ viteEnvironmentNames: null,
68
71
  });
69
72
  function reloadVikeConfig() {
70
73
  assert(globalObject.vikeConfigCtx);
71
- const { userRootDir, vikeVitePluginOptions } = globalObject.vikeConfigCtx;
74
+ const { userRootDir, isDev, vikeVitePluginOptions } = globalObject.vikeConfigCtx;
72
75
  assert(vikeVitePluginOptions);
73
- resolveVikeConfigInternal_withErrorHandling(userRootDir, true, vikeVitePluginOptions);
76
+ resolveVikeConfigInternal_withErrorHandling(userRootDir, isDev, vikeVitePluginOptions);
74
77
  }
75
78
  async function getVikeConfigInternal(
76
79
  // I don't remember the logic behind it — neither why we restart Vite's dev server, nor why we sometimes don't.
@@ -110,6 +113,32 @@ function setVikeConfigContext(vikeConfigCtx_) {
110
113
  // If the user changes Vite's `config.root` => Vite completely reloads itself => setVikeConfigContext() is called again
111
114
  globalObject.vikeConfigCtx = vikeConfigCtx_;
112
115
  }
116
+ // Vike's config is resolved before Vite's environments are known (Vike's config can modify Vite's config)
117
+ async function setViteEnvironmentNames(viteEnvironmentNames) {
118
+ globalObject.viteEnvironmentNames = viteEnvironmentNames;
119
+ if (!globalObject.vikeConfigPromise)
120
+ return;
121
+ const vikeConfig = await globalObject.vikeConfigPromise;
122
+ // Resolve again: to report a missing environment like any other config error, or to recover from one (e.g. the user added the environment to Vite's config)
123
+ const isMissing = getAdditionalEnvironmentsMissing(vikeConfig._additionalEnvironmentNames).length > 0;
124
+ if (!isMissing && !globalObject.vikeConfigHasBuildError)
125
+ return;
126
+ reloadVikeConfig();
127
+ await globalObject.vikeConfigPromise;
128
+ }
129
+ function getAdditionalEnvironmentsMissing(additionalEnvironmentNames) {
130
+ const { viteEnvironmentNames } = globalObject;
131
+ if (!viteEnvironmentNames)
132
+ return [];
133
+ return additionalEnvironmentNames.filter((name) => !viteEnvironmentNames.includes(name));
134
+ }
135
+ function assertAdditionalEnvironmentsExist(additionalEnvironmentNames) {
136
+ const [name] = getAdditionalEnvironmentsMissing(additionalEnvironmentNames);
137
+ if (name === undefined)
138
+ return;
139
+ assert(globalObject.viteEnvironmentNames);
140
+ assertUsage(false, `The environment ${pc.cyan(JSON.stringify(name))} is used by ${pc.cyan('meta.env')} but it doesn't exist in Vite's ${pc.cyan('config.environments')} (${joinEnglish(globalObject.viteEnvironmentNames.map((n) => pc.cyan(n)), 'and')})`);
141
+ }
113
142
  function isVikeConfigContextSet() {
114
143
  return !!globalObject.vikeConfigCtx;
115
144
  }
@@ -219,6 +248,8 @@ async function resolveVikeConfigInternal(userRootDir, vikeVitePluginOptions, vik
219
248
  const plusFilesByLocationId = await getPlusFiles(userRootDir, vikeTranspileCache);
220
249
  const configDefinitionsResolved = await resolveConfigDefinitions(plusFilesByLocationId, userRootDir, vikeTranspileCache);
221
250
  const { pageConfigGlobal, pageConfigs } = getPageConfigsBuildTime(configDefinitionsResolved, plusFilesByLocationId, userRootDir);
251
+ const additionalEnvironmentNames = getAdditionalEnvironmentNames(getMetaEnvAll(configDefinitionsResolved, [pageConfigGlobal, ...pageConfigs]));
252
+ assertAdditionalEnvironmentsExist(additionalEnvironmentNames);
222
253
  if (!globalObject.isV1Design_)
223
254
  globalObject.isV1Design_ = pageConfigs.length > 0;
224
255
  // Backwards compatibility for vike(options) in vite.config.js
@@ -241,6 +272,7 @@ async function resolveVikeConfigInternal(userRootDir, vikeVitePluginOptions, vik
241
272
  _pageConfigGlobal: pageConfigGlobal,
242
273
  _vikeConfigDependencies: vikeTranspileCache.vikeConfigDependencies,
243
274
  _extensions,
275
+ _additionalEnvironmentNames: additionalEnvironmentNames,
244
276
  };
245
277
  globalObject.vikeConfigSync = vikeConfig;
246
278
  return vikeConfig;
@@ -330,6 +362,23 @@ function getPageConfigsBuildTime(configDefinitionsResolved, plusFilesByLocationI
330
362
  assertPageConfigs(pageConfigs);
331
363
  return { pageConfigs, pageConfigGlobal };
332
364
  }
365
+ // Get all the `meta.env` of all configs
366
+ function getMetaEnvAll(configDefinitionsResolved, pageConfigs) {
367
+ const configDefinitionsAll = [
368
+ configDefinitionsResolved.configDefinitionsGlobal,
369
+ ...Object.values(configDefinitionsResolved.configDefinitionsLocal).map(({ configDefinitions }) => configDefinitions),
370
+ ];
371
+ return [
372
+ ...configDefinitionsAll.flatMap((configDefinitions) => Object.values(configDefinitions).map(({ env }) => env)),
373
+ ...pageConfigs.flatMap(({ configValueSources }) => Object.values(configValueSources).flatMap((sources) => sources.map(({ configEnv }) => configEnv))),
374
+ ];
375
+ }
376
+ function getAdditionalEnvironmentNames(configEnvs) {
377
+ const names = configEnvs.flatMap((configEnv) => Object.entries(configEnv)
378
+ .filter(([, value]) => value)
379
+ .map(([name]) => name));
380
+ return unique(names.filter(isAdditionalEnvironmentName));
381
+ }
333
382
  function resolvePageConfigBuildTime(pageId, locationId, plusFilesRelevant, configDefinitionsLocal, plusFilesByLocationId, userRootDir) {
334
383
  const configValueSources = {};
335
384
  objectEntries(configDefinitionsLocal)
@@ -482,7 +531,7 @@ function assertOnBeforeRenderEnv(pageConfig) {
482
531
  function getConfigValues(pageConfig, isGlobalConfig) {
483
532
  const tolerateMissingValue = !isGlobalConfig;
484
533
  const configValues = {};
485
- getConfigValuesBase(pageConfig, { isForConfig: true }, null).forEach((entry) => {
534
+ getConfigValuesBase(pageConfig, { isConfigEnvironment: true }, null).forEach((entry) => {
486
535
  if (entry.configValueBase.type === 'computed') {
487
536
  assert('value' in entry); // Help TS
488
537
  const { configValueBase, value, configName } = entry;
@@ -1091,11 +1140,13 @@ function applyEffectMetaEnv(configModFromEffect, configValueSources, configDefEf
1091
1140
  });
1092
1141
  }
1093
1142
  function getComputed(pageConfig) {
1143
+ assert(globalObject.vikeConfigCtx);
1144
+ const { isDev } = globalObject.vikeConfigCtx;
1094
1145
  const configValuesComputed = {};
1095
1146
  objectEntries(pageConfig.configDefinitions).forEach(([configName, configDef]) => {
1096
1147
  if (!configDef._computed)
1097
1148
  return;
1098
- const value = configDef._computed(pageConfig);
1149
+ const value = configDef._computed(pageConfig, isDev);
1099
1150
  if (value === undefined)
1100
1151
  return;
1101
1152
  configValuesComputed[configName] = {
@@ -1220,6 +1271,14 @@ function determineIsErrorPage(routeFilesystem) {
1220
1271
  assertPosixPath(routeFilesystem);
1221
1272
  return routeFilesystem.split('/').includes('_error');
1222
1273
  }
1274
+ // Keys of `meta.env` that only Vike sets
1275
+ const configEnvKeysInternal = ['clientRoutingOnly', 'eager'];
1276
+ // Keys of `meta.env` that can't be environment names
1277
+ // - Including file suffixes such as `.ssr.js`, `.shared.js`, `.clear.js`, `.default.js`
1278
+ const configEnvKeysReserved = ['ssr', 'shared', 'clear', 'default', ...configEnvKeysInternal];
1279
+ function isAdditionalEnvironmentName(configEnvKey) {
1280
+ return (!isEnvironmentBuiltIn(configEnvKey) && !['config', 'production', ...configEnvKeysInternal].includes(configEnvKey));
1281
+ }
1223
1282
  function getConfigEnvValue(val, errMsgIntro) {
1224
1283
  const errInvalidValue = `${errMsgIntro} an invalid value ${pc.cyan(JSON.stringify(val))}`;
1225
1284
  // Legacy outdated values
@@ -1235,22 +1294,23 @@ function getConfigEnvValue(val, errMsgIntro) {
1235
1294
  if (val === 'config-only')
1236
1295
  return { config: true };
1237
1296
  if (val === '_routing-lazy')
1238
- return { server: true, client: 'if-client-routing' };
1297
+ return { server: true, client: true, clientRoutingOnly: true };
1239
1298
  if (val === '_routing-eager')
1240
- return { server: true, client: 'if-client-routing', eager: true };
1299
+ return { server: true, client: true, clientRoutingOnly: true, eager: true };
1241
1300
  assertUsage(false, errInvalidValue);
1242
1301
  })();
1243
1302
  assertWarning(false, `${errMsgIntro} ${pc.cyan(val)} which is deprecated and will be removed in the next major release`, { onlyOnce: true });
1244
1303
  return valConverted;
1245
1304
  }
1246
1305
  assertUsage(isObject(val), `${errMsgIntro} an invalid type ${pc.cyan(typeof val)}`);
1247
- assertKeys(val, ['config', 'server', 'client'], `${errInvalidValue}:`);
1248
- assertUsage(hasProp(val, 'config', 'undefined') || hasProp(val, 'config', 'boolean'), errInvalidValue);
1249
- assertUsage(hasProp(val, 'server', 'undefined') || hasProp(val, 'server', 'boolean'), errInvalidValue);
1250
- assertUsage(hasProp(val, 'client', 'undefined') || hasProp(val, 'client', 'boolean'), errInvalidValue);
1306
+ Object.entries(val).forEach(([key, value]) => {
1307
+ assertUsage(!includes(configEnvKeysReserved, key), `${errInvalidValue}: ${pc.cyan(key)} can't be an environment name, because ${includes(configEnvKeysInternal, key) ? 'Vike uses it internally' : `it's a file suffix (${pc.cyan(`+Page.${key}.js`)})`}`);
1308
+ assertUsage(isEnvironmentNameValid(key), `${errInvalidValue}: ${pc.cyan(key)} isn't a valid environment name`);
1309
+ assertUsage(value === undefined || typeof value === 'boolean', errInvalidValue);
1310
+ });
1251
1311
  /* To allow users to set an eager config:
1252
1312
  * - Uncomment line below.
1253
- * - Add 'eager' to assertKeys() call above.
1313
+ * - Move 'eager' from configEnvKeysInternal to the keys that isAdditionalEnvironmentName() excludes.
1254
1314
  * - Add `eager: boolean` to ConfigEnv type.
1255
1315
  assertUsage(hasProp(val, 'eager', 'undefined') || hasProp(val, 'eager', 'boolean'), errInvalidValue)
1256
1316
  */
@@ -1279,11 +1339,21 @@ function resolveConfigEnv(configEnv, filePath) {
1279
1339
  else if (suffixes.includes('client')) {
1280
1340
  configEnvResolved.client = true;
1281
1341
  configEnvResolved.server = false;
1342
+ // Additional environments (e.g. `rsc`) are server-side
1343
+ Object.keys(configEnvResolved).forEach((key) => {
1344
+ if (isAdditionalEnvironmentName(key))
1345
+ delete configEnvResolved[key];
1346
+ });
1282
1347
  }
1283
1348
  else if (suffixes.includes('shared')) {
1284
1349
  configEnvResolved.server = true;
1285
1350
  configEnvResolved.client = true;
1286
1351
  }
1352
+ else {
1353
+ return configEnvResolved;
1354
+ }
1355
+ // The file suffix decides, regardless of Client Routing
1356
+ delete configEnvResolved.clientRoutingOnly;
1287
1357
  }
1288
1358
  return configEnvResolved;
1289
1359
  }
@@ -1312,7 +1382,9 @@ async function resolvePrerenderContext(vikeConfig) {
1312
1382
  }
1313
1383
  function restartViteDevServer() {
1314
1384
  const viteDevServer = getViteDevServer();
1315
- assert(viteDevServer);
1385
+ // setViteEnvironmentNames() can reload Vike's config while Vite resolves its config, before the dev server exists
1386
+ if (!viteDevServer)
1387
+ return;
1316
1388
  swallowViteLogForceOptimization_enable();
1317
1389
  (async () => {
1318
1390
  try {
@@ -1347,6 +1419,7 @@ async function getVikeConfigDummy(vikeTranspileCache) {
1347
1419
  prerenderContext: prerenderContextDummy,
1348
1420
  _vikeConfigDependencies: vikeTranspileCache.vikeConfigDependencies,
1349
1421
  _extensions: [],
1422
+ _additionalEnvironmentNames: [],
1350
1423
  };
1351
1424
  globalObject.vikeConfigSync = vikeConfigDummy;
1352
1425
  globalObject.isV1Design_ = true;
@@ -0,0 +1,2 @@
1
+ export { default } from './fetch.js';
2
+ import '../assertEnvServer.js';
@@ -0,0 +1,6 @@
1
+ export { default } from './fetch.js';
2
+ // TO-DO/next-major-release: remove this export (the entire file)
3
+ import { assertWarning } from '../../utils/assert.js';
4
+ import pc from '@brillout/picocolors';
5
+ import '../assertEnvServer.js';
6
+ assertWarning(false, `${pc.cyan("import vike from 'vike/fetch'")} is deprecated, see ${pc.underline('https://vike.dev/migration/vike-fetch')}`, { onlyOnce: true });
@@ -0,0 +1,9 @@
1
+ import '../assertEnvServer.js';
2
+ declare const _default: {
3
+ fetch: ((request: Request, context?: Universal.Context, runtime?: import("@universal-middleware/core").RuntimeAdapterTarget<unknown>) => Promise<Response>) & import("@universal-middleware/core").WithUniversalSymbols<{
4
+ readonly name: 'vike';
5
+ readonly method: ["GET", "POST", "PUT", "PATCH", "HEAD", "OPTIONS"];
6
+ readonly path: '/**';
7
+ }>;
8
+ };
9
+ export default _default;
@@ -0,0 +1,5 @@
1
+ import '../assertEnvServer.js';
2
+ import { vikeUniversalMiddleware } from '../runtime/universal-middleware/vikeUniversalMiddleware.js';
3
+ export default {
4
+ fetch: vikeUniversalMiddleware,
5
+ };
@@ -1,9 +1,12 @@
1
1
  export { setGlobalContext_prodBuildEntry } from '../runtime/globalContext.js';
2
+ export { getMiddlewaresPipe_nonHandlers, getMiddlewaresPipe_handlers, } from '../runtime/universal-middleware/getMiddlewaresPipe.js';
3
+ export { getPageContextJson };
2
4
  export { route, getPagesAndRoutes };
3
5
  export type { PageRoutes, PageFile, PageConfigRuntime as PageConfig };
4
6
  import { route as routeInternal, type PageRoutes } from '../../shared-server-client/route/index.js';
5
7
  import type { PageFile } from '../../shared-server-client/getPageFiles/getPageFileObject.js';
6
8
  import { PageConfigRuntime } from '../../types/PageConfig.js';
9
+ import type { PageContextServer } from '../../types/PageContext.js';
7
10
  import '../assertEnvServer.js';
8
11
  /**
9
12
  * Used by {@link https://github.com/magne4000/vite-plugin-vercel|vite-plugin-vercel} to compute some rewrite rules and extract { isr } configs.
@@ -19,3 +22,4 @@ declare function getPagesAndRoutes(): Promise<{
19
22
  declare function route(pageContext: Parameters<typeof routeInternal>[0]): Promise<{
20
23
  pageContextAddendum: import("../../shared-server-client/route/index.js").PageContextAfterRoute;
21
24
  }>;
25
+ declare function getPageContextJson(pageContext: PageContextServer): string | ReadableStream<Uint8Array<ArrayBufferLike>>;