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
@@ -6,11 +6,13 @@ import { pluginServerEntryInject } from './pluginUniversalDeploy/pluginServerEnt
6
6
  import { getDeployConfig } from './pluginUniversalDeploy/getDeployConfig.js';
7
7
  import { pluginCommon } from './pluginUniversalDeploy/common.js';
8
8
  import { hasVikeServerOrVikePhoton } from './pluginUniversalDeploy/detectDeprecated.js';
9
- import { getServerConfig } from './pluginUniversalDeploy/getServerConfig.js';
9
+ import { getServerConfig, getServerEntryFilePath_ifDev } from './pluginUniversalDeploy/getServerConfig.js';
10
10
  import { pluginServerEntryAlias } from './pluginUniversalDeploy/pluginServerEntryAlias.js';
11
- import { pluginUnwrapProdOptions } from './pluginUniversalDeploy/pluginUnwrapProdOptions.js';
11
+ import { pluginWrapServerFile } from './pluginUniversalDeploy/pluginWrapServerFile.js';
12
+ import { getViteCliCommand } from '../shared/isViteCli.js';
12
13
  import { unique } from '../../../utils/unique.js';
13
14
  import { assertUsage } from '../../../utils/assert.js';
15
+ import pc from '@brillout/picocolors';
14
16
  import '../assertEnvVite.js';
15
17
  function pluginUniversalDeploy(vikeConfig) {
16
18
  if (hasVikeServerOrVikePhoton(vikeConfig))
@@ -25,9 +27,31 @@ function pluginUniversalDeploy(vikeConfig) {
25
27
  }),
26
28
  precompress(vikeConfig.config.precompress),
27
29
  ];
28
- const { serverEntryVike, serverEntryId, serverFilePath } = serverConfig;
30
+ const { serverEntryVike, serverEntryId, serverFilePath, serverEntryFilePath } = serverConfig;
31
+ const isServerEntryDev = !!getServerEntryFilePath_ifDev(vikeConfig);
32
+ // Vite's CLI always starts Vite's own server => it can't run +serverEntry.js
33
+ assertUsage(!(isServerEntryDev && getViteCliCommand() === 'dev'), `${pc.cyan('+serverEntry.js')} (without ${pc.cyan('+server.js')}) requires ${pc.cyan('$ vike dev')} instead of ${pc.cyan('$ vite dev')} (because Vite's CLI always starts Vite's own server)`);
29
34
  return [
30
- ...universalDeploy({ node: { precompress: vikeConfig.config.precompress } }),
35
+ ...(!serverEntryFilePath
36
+ ? universalDeploy({ node: { precompress: vikeConfig.config.precompress } })
37
+ : [
38
+ // +serverEntry.js is the production server entry dist/server/index.mjs (instead of @universal-deploy/node's server)
39
+ // https://vike.dev/serverEntry
40
+ ...universalDeploy({
41
+ entry: {
42
+ id: serverEntryFilePath,
43
+ // Without +server.js, +serverEntry.js handles requests itself (it calls renderPage() instead of using vike:server) and `$ vike dev` runs it
44
+ catchAll: !isServerEntryDev,
45
+ },
46
+ }),
47
+ precompress(vikeConfig.config.precompress),
48
+ resolveTargets((targets) => {
49
+ const target = targets[0];
50
+ assertUsage(target === undefined, `+serverEntry cannot be used with ${target} (because it uses its own server entry)`);
51
+ }),
52
+ // dist/server/index.mjs loads dist/server/entry.mjs
53
+ pluginServerEntryInject(serverEntryFilePath),
54
+ ]),
31
55
  {
32
56
  name: 'vike:pluginUniversalDeploy:entries',
33
57
  config() {
@@ -55,6 +79,6 @@ function pluginUniversalDeploy(vikeConfig) {
55
79
  },
56
80
  pluginServerEntryInject(serverFilePath ?? serverEntryId),
57
81
  pluginServerEntryAlias(serverFilePath),
58
- !serverFilePath ? null : pluginUnwrapProdOptions(serverFilePath),
82
+ !serverFilePath ? null : pluginWrapServerFile(serverFilePath),
59
83
  ].filter((p) => p !== null);
60
84
  }
@@ -1,3 +1,4 @@
1
1
  export { generateVirtualFileGlobalEntry };
2
+ import type { RuntimeEnvRuntime } from './getConfigValueSourcesRelevant.js';
2
3
  import '../../assertEnvVite.js';
3
- declare function generateVirtualFileGlobalEntry(isForClientSide: boolean, isDev: boolean, id: string, isClientRouting: boolean): Promise<string>;
4
+ declare function generateVirtualFileGlobalEntry(runtimeEnv: RuntimeEnvRuntime, id: string): Promise<string>;
@@ -4,25 +4,31 @@ import { debug } from './debug.js';
4
4
  import { getVikeConfigInternal } from '../../shared/resolveVikeConfigInternal.js';
5
5
  import { serializeConfigValues, } from '../../../../shared-server-client/page-configs/serialize/serializeConfigValues.js';
6
6
  import { VIRTUAL_FILE_ID_constantsGlobalThis } from '../pluginReplaceConstantsGlobalThis.js';
7
+ import { getEnvironmentEntryPlaceholder } from '../build/pluginEnvironmentEntries.js';
7
8
  import '../../assertEnvVite.js';
8
- async function generateVirtualFileGlobalEntry(isForClientSide, isDev, id, isClientRouting) {
9
+ async function generateVirtualFileGlobalEntry(runtimeEnv, id) {
9
10
  const vikeConfig = await getVikeConfigInternal(true);
10
- const { _pageConfigs: pageConfigs, _pageConfigGlobal: pageConfigGlobal } = vikeConfig;
11
- return getCode(pageConfigs, pageConfigGlobal, isForClientSide, isDev, id, isClientRouting);
11
+ const { _pageConfigs: pageConfigs, _pageConfigGlobal: pageConfigGlobal, _additionalEnvironmentNames: additionalEnvironmentNames, } = vikeConfig;
12
+ return getCode(pageConfigs, pageConfigGlobal, runtimeEnv, id, additionalEnvironmentNames);
12
13
  }
13
- function getCode(pageConfigs, pageConfigGlobal, isForClientSide, isDev, id, isClientRouting) {
14
+ function getCode(pageConfigs, pageConfigGlobal, runtimeEnv, id, additionalEnvironmentNames) {
14
15
  const lines = [];
15
16
  const importStatements = [];
16
17
  const filesEnv = new Map();
18
+ const { environmentName, isDev } = runtimeEnv;
19
+ const isForClientSide = environmentName === 'client';
17
20
  if (!isForClientSide) {
18
21
  importStatements.push(`import '${VIRTUAL_FILE_ID_constantsGlobalThis}';`);
19
22
  }
20
23
  lines.push('export const pageConfigsSerialized = [');
21
- lines.push(getCodePageConfigsSerialized(pageConfigs, isForClientSide, isClientRouting, isDev, importStatements, filesEnv));
24
+ lines.push(getCodePageConfigsSerialized(pageConfigs, runtimeEnv, importStatements, filesEnv));
22
25
  lines.push('];');
23
26
  lines.push('export const pageConfigGlobalSerialized = {');
24
- lines.push(getCodePageConfigGlobalSerialized(pageConfigGlobal, isForClientSide, isClientRouting, isDev, importStatements, filesEnv));
27
+ lines.push(getCodePageConfigGlobalSerialized(pageConfigGlobal, runtimeEnv, importStatements, filesEnv));
25
28
  lines.push('};');
29
+ if (environmentName === 'server') {
30
+ lines.push(getCodeEnvironmentEntries(additionalEnvironmentNames, isDev, importStatements));
31
+ }
26
32
  if (!isForClientSide && isDev) {
27
33
  // https://vite.dev/guide/api-environment-frameworks.html
28
34
  lines.push('if (import.meta.hot) import.meta.hot.accept();');
@@ -31,10 +37,21 @@ function getCode(pageConfigs, pageConfigGlobal, isForClientSide, isDev, id, isCl
31
37
  if (!isForClientSide) {
32
38
  code = `import '${VIRTUAL_FILE_ID_constantsGlobalThis}';\n` + code;
33
39
  }
34
- debug(id, isForClientSide ? 'CLIENT-SIDE' : 'SERVER-SIDE', code);
40
+ debug(id, `${environmentName.toUpperCase()}-SIDE`, code);
35
41
  return code;
36
42
  }
37
- function getCodePageConfigsSerialized(pageConfigs, isForClientSide, isClientRouting, isDev, importStatements, filesEnv) {
43
+ // The global entries of the additional environments (e.g. `rsc`), loaded by loadPageContextEnvironments.ts
44
+ // - In development, they're loaded with the environment's module runner instead
45
+ function getCodeEnvironmentEntries(additionalEnvironmentNames, isDev, importStatements) {
46
+ const entries = additionalEnvironmentNames.map((name, i) => {
47
+ if (isDev)
48
+ return `${JSON.stringify(name)}: null`;
49
+ importStatements.push(`import * as environmentEntry${i} from ${JSON.stringify(getEnvironmentEntryPlaceholder(name))};`);
50
+ return `${JSON.stringify(name)}: environmentEntry${i}`;
51
+ });
52
+ return `export const environmentEntries = { ${entries.join(', ')} };`;
53
+ }
54
+ function getCodePageConfigsSerialized(pageConfigs, runtimeEnv, importStatements, filesEnv) {
38
55
  const lines = [];
39
56
  pageConfigs.forEach((pageConfig) => {
40
57
  const { pageId, routeFilesystem, isErrorPage } = pageConfig;
@@ -42,20 +59,20 @@ function getCodePageConfigsSerialized(pageConfigs, isForClientSide, isClientRout
42
59
  lines.push(` pageId: ${JSON.stringify(pageId)},`);
43
60
  lines.push(` isErrorPage: ${JSON.stringify(isErrorPage)},`);
44
61
  lines.push(` routeFilesystem: ${JSON.stringify(routeFilesystem)},`);
45
- const virtualFileId = JSON.stringify(generateVirtualFileId({ type: 'page-entry', pageId, isForClientSide }));
62
+ const virtualFileId = JSON.stringify(generateVirtualFileId({ type: 'page-entry', pageId, environmentName: runtimeEnv.environmentName }));
46
63
  lines.push(` loadVirtualFilePageEntry: () => ({ moduleId: ${virtualFileId}, moduleExportsPromise: import(${virtualFileId}) }),`);
47
64
  lines.push(` configValuesSerialized: {`);
48
- lines.push(...serializeConfigValues(pageConfig, importStatements, filesEnv, { isForClientSide, isClientRouting, isDev }, ' ', true));
65
+ lines.push(...serializeConfigValues(pageConfig, importStatements, filesEnv, runtimeEnv, ' ', true));
49
66
  lines.push(` },`);
50
67
  lines.push(` },`);
51
68
  });
52
69
  const code = lines.join('\n');
53
70
  return code;
54
71
  }
55
- function getCodePageConfigGlobalSerialized(pageConfigGlobal, isForClientSide, isClientRouting, isDev, importStatements, filesEnv) {
72
+ function getCodePageConfigGlobalSerialized(pageConfigGlobal, runtimeEnv, importStatements, filesEnv) {
56
73
  const lines = [];
57
74
  lines.push(` configValuesSerialized: {`);
58
- lines.push(...serializeConfigValues(pageConfigGlobal, importStatements, filesEnv, { isForClientSide, isClientRouting, isDev }, ' ', null));
75
+ lines.push(...serializeConfigValues(pageConfigGlobal, importStatements, filesEnv, runtimeEnv, ' ', null));
59
76
  lines.push(` },`);
60
77
  const code = lines.join('\n');
61
78
  return code;
@@ -18,7 +18,8 @@ import '../../assertEnvVite.js';
18
18
  async function generateVirtualFileGlobalEntryWithOldDesign(id, options, config, env, isDev) {
19
19
  const idParsed = parseVirtualFileId(id);
20
20
  assert(idParsed && idParsed.type === 'global-entry');
21
- const { isForClientSide, isClientRouting } = idParsed;
21
+ const { environmentName, isClientRouting } = idParsed;
22
+ const isForClientSide = environmentName === 'client';
22
23
  assert(isForClientSide === !isViteServerSide_extraSafe(config, env, options));
23
24
  const code = await getCode(config, isForClientSide, isClientRouting, isDev, id);
24
25
  return code;
@@ -75,7 +76,7 @@ export const pageFilesExportNamesEager = {};
75
76
  export const pageFilesList = [];
76
77
  export const neverLoaded = {};
77
78
 
78
- ${await generateVirtualFileGlobalEntry(isForClientSide, isDev, id, isClientRouting)}
79
+ ${await generateVirtualFileGlobalEntry({ environmentName: isForClientSide ? 'client' : 'server', isClientRouting, isDev }, id)}
79
80
 
80
81
  `;
81
82
  const vikeConfig = await getVikeConfigInternal();
@@ -18,7 +18,7 @@ async function generateVirtualFilePageEntry(id, isDev) {
18
18
  assert(result.isForClientSide === isForClientSide)
19
19
  }
20
20
  */
21
- const { pageId, isForClientSide } = result;
21
+ const { pageId, environmentName } = result;
22
22
  const vikeConfig = await getVikeConfigInternal(true);
23
23
  const { _pageConfigs: pageConfigs } = vikeConfig;
24
24
  const pageConfig = pageConfigs.find((pageConfig) => pageConfig.pageId === pageId);
@@ -31,20 +31,20 @@ async function generateVirtualFilePageEntry(id, isDev) {
31
31
  throw getProjectError(`Outdated request. Try again. ${getDebugInfoStr({ id, pageId })}`);
32
32
  }
33
33
  }
34
- const code = getCode(pageConfig, isForClientSide, pageId, resolveIncludeAssetsImportedByServer(vikeConfig.config), isDev);
35
- debug(id, isForClientSide ? 'CLIENT-SIDE' : 'SERVER-SIDE', code);
34
+ const code = getCode(pageConfig, environmentName, pageId, resolveIncludeAssetsImportedByServer(vikeConfig.config), isDev);
35
+ debug(id, `${environmentName.toUpperCase()}-SIDE`, code);
36
36
  return code;
37
37
  }
38
- function getCode(pageConfig, isForClientSide, pageId, includeAssetsImportedByServer, isDev) {
38
+ function getCode(pageConfig, environmentName, pageId, includeAssetsImportedByServer, isDev) {
39
39
  const lines = [];
40
40
  const importStatements = [];
41
41
  const filesEnv = new Map();
42
42
  const isClientRouting = getConfigValueBuildTime(pageConfig, 'clientRouting', 'boolean')?.value ?? false;
43
43
  lines.push('export const configValuesSerialized = {');
44
- lines.push(...serializeConfigValues(pageConfig, importStatements, filesEnv, { isForClientSide, isClientRouting, isDev }, '', false));
44
+ lines.push(...serializeConfigValues(pageConfig, importStatements, filesEnv, { environmentName, isClientRouting, isDev }, '', false));
45
45
  lines.push('};');
46
- if (!handleAssetsManifest_isFixEnabled() && includeAssetsImportedByServer && isForClientSide && !isDev) {
47
- importStatements.push(`import '${extractAssetsAddQuery(generateVirtualFileId({ type: 'page-entry', pageId, isForClientSide: false }))}'`);
46
+ if (!handleAssetsManifest_isFixEnabled() && includeAssetsImportedByServer && environmentName === 'client' && !isDev) {
47
+ importStatements.push(`import '${extractAssetsAddQuery(generateVirtualFileId({ type: 'page-entry', pageId, environmentName: 'server' }))}'`);
48
48
  }
49
49
  const code = [...importStatements, ...lines].join('\n');
50
50
  return code;
@@ -3,14 +3,18 @@ export { getConfigValueSourceRelevantAnyEnv };
3
3
  export { isRuntimeEnvMatch };
4
4
  export { isConfigSourceValueNull };
5
5
  export type { RuntimeEnv };
6
+ export type { RuntimeEnvRuntime };
6
7
  import type { ConfigEnv, ConfigValueSource, PageConfigBuildTime, PageConfigGlobalBuildTime } from '../../../../types/PageConfig.js';
7
8
  import '../../assertEnvVite.js';
8
- type RuntimeEnv = {
9
- isForClientSide: boolean;
10
- isClientRouting: boolean;
11
- isDev?: boolean;
12
- } | {
13
- isForConfig: true;
9
+ type RuntimeEnv = (RuntimeEnvRuntime & {
10
+ isConfigEnvironment?: undefined;
11
+ }) | {
12
+ isConfigEnvironment: true;
13
+ };
14
+ type RuntimeEnvRuntime = {
15
+ environmentName: string;
16
+ isClientRouting?: boolean;
17
+ isDev: boolean;
14
18
  };
15
19
  type PageConfigPartial = Pick<PageConfigBuildTime | PageConfigGlobalBuildTime, 'configValueSources' | 'configDefinitions'>;
16
20
  declare function getConfigValueSourcesRelevant(configName: string, runtimeEnv: RuntimeEnv, pageConfig: PageConfigPartial): ConfigValueSource[];
@@ -44,19 +44,13 @@ function getConfigValueSourceRelevantAnyEnv(configName, pageConfig) {
44
44
  return source;
45
45
  }
46
46
  function isRuntimeEnvMatch(configEnv, runtimeEnv) {
47
- if ('isForConfig' in runtimeEnv)
47
+ if (runtimeEnv.isConfigEnvironment)
48
48
  return !!configEnv.config;
49
49
  // Runtime
50
- if (!runtimeEnv.isForClientSide) {
51
- if (!configEnv.server)
52
- return false;
53
- }
54
- else {
55
- if (!configEnv.client)
56
- return false;
57
- if (configEnv.client === 'if-client-routing' && !runtimeEnv.isClientRouting)
58
- return false;
59
- }
50
+ if (!configEnv[runtimeEnv.environmentName])
51
+ return false;
52
+ if (runtimeEnv.environmentName === 'client' && configEnv.clientRoutingOnly && !runtimeEnv.isClientRouting)
53
+ return false;
60
54
  // Production/development
61
55
  if (configEnv.production !== undefined) {
62
56
  assert(typeof configEnv.production === 'boolean');
@@ -2,6 +2,7 @@ export { pluginVirtualFiles };
2
2
  import { normalizePath } from 'vite';
3
3
  import { generateVirtualFilePageEntry } from './pluginVirtualFiles/generateVirtualFilePageEntry.js';
4
4
  import { generateVirtualFileGlobalEntryWithOldDesign } from './pluginVirtualFiles/generateVirtualFileGlobalEntryWithOldDesign.js';
5
+ import { generateVirtualFileGlobalEntry } from './pluginVirtualFiles/generateVirtualFileGlobalEntry.js';
5
6
  import { escapeRegex } from '../../../utils/escapeRegex.js';
6
7
  import { isScriptFile } from '../../../utils/isScriptFile.js';
7
8
  import { addVirtualFileIdPrefix, isVirtualFileId, removeVirtualFileIdPrefix, virtualFileIdPrefix1, virtualFileIdPrefix2, } from '../../../utils/virtualFileId.js';
@@ -9,6 +10,8 @@ import { assert } from '../../../utils/assert.js';
9
10
  import { assertPosixPath } from '../../../utils/path.js';
10
11
  import { parseVirtualFileId } from '../../../shared-server-node/virtualFileId.js';
11
12
  import { reloadVikeConfig, isV1Design, getVikeConfigInternalOptional } from '../shared/resolveVikeConfigInternal.js';
13
+ import { isEnvironmentBuiltIn } from '../../../shared-server-node/vike-environments.js';
14
+ import { isRunnableDevEnvironment } from '../../../utils/isRunnableDevEnvironment.js';
12
15
  import pc from '@brillout/picocolors';
13
16
  import { logConfigInfo } from '../shared/loggerDev.js';
14
17
  import { getFilePathToShowToUserModule } from '../shared/getFilePath.js';
@@ -73,6 +76,9 @@ function pluginVirtualFiles() {
73
76
  return code;
74
77
  }
75
78
  if (idParsed.type === 'global-entry') {
79
+ if (!isEnvironmentBuiltIn(idParsed.environmentName)) {
80
+ return generateVirtualFileGlobalEntry({ environmentName: idParsed.environmentName, isDev }, id);
81
+ }
76
82
  const code = await generateVirtualFileGlobalEntryWithOldDesign(id, options, config, this.environment, isDev);
77
83
  return code;
78
84
  }
@@ -179,6 +185,20 @@ function invalidateVikeVirtualFiles(server) {
179
185
  vikeVirtualFiles.forEach((mod) => {
180
186
  server.moduleGraph.invalidateModule(mod);
181
187
  });
188
+ // - `server.moduleGraph` only covers the `client` and `ssr` environments, while additional environments (e.g. `rsc`) also load Vike's virtual files
189
+ Object.values(server.environments).forEach((environment) => {
190
+ environment.moduleGraph.idToModuleMap.forEach((mod, id) => {
191
+ if (parseVirtualFileId(id))
192
+ environment.moduleGraph.invalidateModule(mod);
193
+ });
194
+ if (!isRunnableDevEnvironment(environment))
195
+ return;
196
+ const { evaluatedModules } = environment.runner;
197
+ evaluatedModules.idToModuleMap.forEach((mod, id) => {
198
+ if (parseVirtualFileId(id))
199
+ evaluatedModules.invalidateModule(mod);
200
+ });
201
+ });
182
202
  }
183
203
  function getVikeVirtualFiles(server) {
184
204
  const vikeVirtualFiles = Array.from(server.moduleGraph.urlToModuleMap.keys())
@@ -1,8 +1,10 @@
1
1
  export { addSsrMiddleware };
2
- import { renderPageServer } from '../../../server/runtime/renderPageServer.js';
3
- import { assertWarning } from '../../../utils/assert.js';
4
- import pc from '@brillout/picocolors';
2
+ import { vikeUniversalMiddleware } from '../../../server/runtime/universal-middleware/vikeUniversalMiddleware.js';
3
+ import { getAdapterRuntime } from '@universal-middleware/core';
4
+ import { createRequestAdapter } from '@universal-middleware/node/request';
5
+ import { sendResponse } from '@universal-middleware/node/response';
5
6
  import '../assertEnvVite.js';
7
+ const requestAdapter = createRequestAdapter();
6
8
  function addSsrMiddleware(middlewares, config, isPreview, isPrerenderingEnabled) {
7
9
  middlewares.use(async (req, res, next) => {
8
10
  if (res.headersSent)
@@ -10,26 +12,11 @@ function addSsrMiddleware(middlewares, config, isPreview, isPrerenderingEnabled)
10
12
  const url = req.originalUrl || req.url;
11
13
  if (!url)
12
14
  return next();
13
- const { headers } = req;
14
- const pageContextInit = {
15
- urlOriginal: url,
16
- headersOriginal: headers,
17
- _nodeDev: { req, res },
18
- };
19
- Object.defineProperty(pageContextInit, 'userAgent', {
20
- get() {
21
- // TO-DO/next-major-release: assertUsage() instead of assertWarning()
22
- assertWarning(false, `${pc.cyan('pageContext.userAgent')} is deprecated: use ${pc.cyan("pageContext.headers['user-agent']")} instead.`, {
23
- showStackTrace: true,
24
- onlyOnce: true,
25
- });
26
- return headers['user-agent'];
27
- },
28
- enumerable: false,
29
- });
30
- let pageContext;
15
+ let response;
31
16
  try {
32
- pageContext = await renderPageServer(pageContextInit);
17
+ const runtime = Object.assign(getAdapterRuntime('other', { params: undefined }), { req, res });
18
+ const context = { urlOriginal: url };
19
+ response = await vikeUniversalMiddleware(requestAdapter(req, res), context, runtime);
33
20
  }
34
21
  catch (err) {
35
22
  // Throwing an error in a connect middleware shuts down the server
@@ -39,7 +26,7 @@ function addSsrMiddleware(middlewares, config, isPreview, isPrerenderingEnabled)
39
26
  // - We purposely don't use next(err) to align behavior: we use our own/copied implementation of buildErrorMessage() regardless of whether the user uses Vite's dev middleware or Vite's standalone dev server
40
27
  return next();
41
28
  }
42
- if (pageContext.httpResponse.statusCode === 404 && isPreview && isPrerenderingEnabled) {
29
+ if (response.status === 404 && isPreview && isPrerenderingEnabled) {
43
30
  // Serve /dist/client/404.html instead
44
31
  return next();
45
32
  }
@@ -49,9 +36,6 @@ function addSsrMiddleware(middlewares, config, isPreview, isPrerenderingEnabled)
49
36
  if (value)
50
37
  res.setHeader(name, value);
51
38
  }
52
- const { httpResponse } = pageContext;
53
- httpResponse.headers.forEach(([name, value]) => res.setHeader(name, value));
54
- res.statusCode = httpResponse.statusCode;
55
- httpResponse.pipe(res);
39
+ await sendResponse(response, res);
56
40
  });
57
41
  }
@@ -2,4 +2,4 @@ export { findPageFiles };
2
2
  import type { ResolvedConfig } from 'vite';
3
3
  import type { FileType } from '../../../shared-server-client/getPageFiles/fileTypes.js';
4
4
  import '../assertEnvVite.js';
5
- declare function findPageFiles(config: ResolvedConfig, fileTypes: FileType[], isDev: boolean): Promise<string[]>;
5
+ declare function findPageFiles(config: ResolvedConfig, fileTypes: FileType[]): Promise<string[]>;
@@ -2,22 +2,12 @@ export { findPageFiles };
2
2
  import { glob } from 'tinyglobby';
3
3
  import { scriptFileExtensionPattern } from '../../../utils/isScriptFile.js';
4
4
  import { toPosixPath } from '../../../utils/path.js';
5
- import { assertWarning } from '../../../utils/assert.js';
6
- import pc from '@brillout/picocolors';
7
5
  import { getOutDirs } from './getOutDirs.js';
8
6
  import '../assertEnvVite.js';
9
- async function findPageFiles(config, fileTypes, isDev) {
7
+ async function findPageFiles(config, fileTypes) {
10
8
  const cwd = config.root;
11
9
  const { outDirRoot } = getOutDirs(config, undefined);
12
- const timeBase = new Date().getTime();
13
10
  let pageFiles = await glob(fileTypes.map((fileType) => `**/*${fileType}.${scriptFileExtensionPattern}`), { ignore: ['**/node_modules/**', `${outDirRoot}/**`], cwd, dot: false, expandDirectories: false });
14
11
  pageFiles = pageFiles.map((p) => '/' + toPosixPath(p));
15
- const time = new Date().getTime() - timeBase;
16
- if (isDev) {
17
- // We only warn in dev, because while building it's expected to take a long time as tinyglobby is competing for resources with other tasks
18
- assertWarning(time < 1.5 * 1000, `Finding your page files ${pc.cyan('**/*.page.*')} took an unexpected long time (${time}ms). Reach out to the vike maintainer.`, {
19
- onlyOnce: 'slow-page-files-search',
20
- });
21
- }
22
12
  return pageFiles;
23
13
  }
@@ -1,4 +1,5 @@
1
1
  export { getAssetsDir };
2
- import type { ResolvedConfig } from 'vite';
3
2
  import '../assertEnvVite.js';
4
- declare function getAssetsDir(config: ResolvedConfig): string;
3
+ declare function getAssetsDir(build: {
4
+ assetsDir: string;
5
+ }): string;
@@ -1,9 +1,9 @@
1
1
  export { getAssetsDir };
2
2
  import { assertUsage } from '../../../utils/assert.js';
3
3
  import '../assertEnvVite.js';
4
- function getAssetsDir(config) {
5
- let { assetsDir } = config.build;
6
- assertUsage(assetsDir, `${assetsDir} cannot be an empty string`);
4
+ function getAssetsDir(build) {
5
+ let { assetsDir } = build;
6
+ assertUsage(assetsDir, "Vite's build.assetsDir cannot be an empty string");
7
7
  assetsDir = assetsDir.split(/\/|\\/).filter(Boolean).join('/');
8
8
  return assetsDir;
9
9
  }
@@ -1,6 +1,6 @@
1
1
  export { isViteCli };
2
2
  export { getViteCliArgs };
3
- export { getViteBuildCliArgs };
3
+ export { getViteCliArgsMinimal };
4
4
  export { getViteCliCommand };
5
5
  import '../assertEnvVite.js';
6
6
  declare function isViteCli(): boolean;
@@ -12,8 +12,8 @@ type ConfigFromCli = {
12
12
  };
13
13
  type ViteCommand = 'dev' | 'build' | 'optimize' | 'preview';
14
14
  declare function getViteCliCommand(): ViteCommand | null;
15
- declare function getViteBuildCliArgs(): null | ConfigFromCli;
16
- declare function getViteCliArgs(): null | {
15
+ declare function getViteCliArgsMinimal(): null | {
17
16
  root: string | undefined;
18
17
  configFile: string | undefined;
19
18
  };
19
+ declare function getViteCliArgs(): null | ConfigFromCli;