vike 0.4.224 → 0.4.225-commit-2b7971f

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 (163) hide show
  1. package/dist/cjs/client/shared/getPageContextProxyForUser.js +3 -66
  2. package/dist/cjs/node/api/build.js +1 -1
  3. package/dist/cjs/node/api/context.js +4 -4
  4. package/dist/cjs/node/api/dev.js +1 -1
  5. package/dist/cjs/node/api/prepareViteApiCall.js +25 -14
  6. package/dist/cjs/node/api/prerender.js +1 -1
  7. package/dist/cjs/node/api/preview.js +1 -1
  8. package/dist/cjs/node/cli/context.js +5 -4
  9. package/dist/cjs/node/cli/entry.js +3 -3
  10. package/dist/cjs/node/cli/parseCli.js +43 -15
  11. package/dist/cjs/node/cli/utils.js +1 -1
  12. package/dist/cjs/node/plugin/plugins/build/pluginBuildEntry.js +1 -1
  13. package/dist/cjs/node/plugin/plugins/commonConfig.js +16 -11
  14. package/dist/cjs/node/plugin/plugins/devConfig/determineOptimizeDeps.js +6 -4
  15. package/dist/cjs/node/plugin/plugins/devConfig/index.js +1 -1
  16. package/dist/cjs/node/plugin/plugins/importUserCode/index.js +14 -10
  17. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +10 -2
  18. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.js +11 -12
  19. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +139 -84
  20. package/dist/cjs/node/plugin/plugins/previewConfig.js +12 -7
  21. package/dist/cjs/node/plugin/plugins/setGlobalContext.js +10 -1
  22. package/dist/cjs/node/plugin/shared/addSsrMiddleware.js +5 -1
  23. package/dist/cjs/node/plugin/shared/getEnvVarObject.js +9 -8
  24. package/dist/cjs/node/plugin/shared/loggerNotProd/log.js +1 -1
  25. package/dist/cjs/node/prerender/context.js +1 -1
  26. package/dist/cjs/node/prerender/resolvePrerenderConfig.js +33 -18
  27. package/dist/cjs/node/prerender/runPrerender.js +12 -18
  28. package/dist/cjs/node/prerender/utils.js +1 -1
  29. package/dist/cjs/node/runtime/globalContext.js +9 -5
  30. package/dist/cjs/node/runtime/html/injectAssets/getViteDevScript.js +6 -3
  31. package/dist/cjs/node/runtime/html/serializePageContextClientSide.js +67 -14
  32. package/dist/cjs/node/runtime/html/stream.js +7 -0
  33. package/dist/cjs/node/runtime/renderPage/createHttpResponse/assertNoInfiniteHttpRedirect.js +14 -5
  34. package/dist/cjs/node/runtime/renderPage/createHttpResponse.js +2 -4
  35. package/dist/cjs/node/runtime/renderPage/logErrorHint.js +6 -1
  36. package/dist/cjs/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.js +3 -0
  37. package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +18 -12
  38. package/dist/cjs/node/runtime/renderPage.js +19 -38
  39. package/dist/cjs/node/runtime/utils.js +0 -1
  40. package/dist/cjs/node/runtime-dev/createDevMiddleware.js +10 -8
  41. package/dist/cjs/node/shared/assertV1Design.js +2 -1
  42. package/dist/cjs/node/shared/utils.js +0 -1
  43. package/dist/cjs/shared/NOT_SERIALIZABLE.js +5 -0
  44. package/dist/cjs/shared/page-configs/getConfigDefinedAt.js +19 -2
  45. package/dist/cjs/shared/page-configs/getConfigValueBuildTime.js +8 -5
  46. package/dist/cjs/shared/page-configs/helpers.js +1 -1
  47. package/dist/cjs/shared/page-configs/serialize/parsePageConfigs.js +2 -5
  48. package/dist/cjs/shared/page-configs/serialize/serializeConfigValues.js +9 -5
  49. package/dist/cjs/shared/route/loadPageRoutes.js +2 -2
  50. package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
  51. package/dist/cjs/utils/assert.js +12 -5
  52. package/dist/cjs/utils/assertSingleInstance.js +11 -17
  53. package/dist/cjs/utils/debug.js +2 -1
  54. package/dist/cjs/utils/getRandomId.js +1 -1
  55. package/dist/cjs/utils/normalizeHeaders.js +1 -1
  56. package/dist/cjs/utils/objectAssign.js +7 -2
  57. package/dist/cjs/utils/parseUrl-extras.js +1 -0
  58. package/dist/esm/client/client-routing-runtime/createPageContext.d.ts +3 -1
  59. package/dist/esm/client/client-routing-runtime/createPageContext.js +4 -3
  60. package/dist/esm/client/client-routing-runtime/renderPageClientSide.js +1 -1
  61. package/dist/esm/client/server-routing-runtime/getPageContext.d.ts +6 -3
  62. package/dist/esm/client/server-routing-runtime/getPageContext.js +6 -3
  63. package/dist/esm/client/shared/getPageContextProxyForUser.d.ts +1 -11
  64. package/dist/esm/client/shared/getPageContextProxyForUser.js +4 -67
  65. package/dist/esm/client/shared/preparePageContextForUserConsumptionClientSide.d.ts +2 -2
  66. package/dist/esm/node/api/build.js +1 -1
  67. package/dist/esm/node/api/context.d.ts +8 -2
  68. package/dist/esm/node/api/context.js +4 -4
  69. package/dist/esm/node/api/dev.js +1 -1
  70. package/dist/esm/node/api/prepareViteApiCall.d.ts +2 -2
  71. package/dist/esm/node/api/prepareViteApiCall.js +25 -14
  72. package/dist/esm/node/api/prerender.js +1 -1
  73. package/dist/esm/node/api/preview.js +1 -1
  74. package/dist/esm/node/api/types.d.ts +7 -0
  75. package/dist/esm/node/cli/context.d.ts +4 -2
  76. package/dist/esm/node/cli/context.js +5 -4
  77. package/dist/esm/node/cli/entry.js +4 -4
  78. package/dist/esm/node/cli/parseCli.d.ts +3 -0
  79. package/dist/esm/node/cli/parseCli.js +44 -16
  80. package/dist/esm/node/cli/utils.d.ts +1 -1
  81. package/dist/esm/node/cli/utils.js +1 -1
  82. package/dist/esm/node/plugin/plugins/build/pluginBuildEntry.js +2 -2
  83. package/dist/esm/node/plugin/plugins/commonConfig.d.ts +1 -0
  84. package/dist/esm/node/plugin/plugins/commonConfig.js +16 -11
  85. package/dist/esm/node/plugin/plugins/devConfig/determineOptimizeDeps.js +6 -4
  86. package/dist/esm/node/plugin/plugins/devConfig/index.js +1 -1
  87. package/dist/esm/node/plugin/plugins/importUserCode/index.js +15 -11
  88. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.d.ts +3 -1
  89. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +10 -2
  90. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.d.ts +5 -2
  91. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.js +11 -12
  92. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.d.ts +3 -2
  93. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +141 -85
  94. package/dist/esm/node/plugin/plugins/previewConfig.js +12 -7
  95. package/dist/esm/node/plugin/plugins/setGlobalContext.js +11 -2
  96. package/dist/esm/node/plugin/shared/addSsrMiddleware.d.ts +1 -1
  97. package/dist/esm/node/plugin/shared/addSsrMiddleware.js +5 -1
  98. package/dist/esm/node/plugin/shared/getEnvVarObject.d.ts +3 -1
  99. package/dist/esm/node/plugin/shared/getEnvVarObject.js +9 -8
  100. package/dist/esm/node/plugin/shared/loggerNotProd/log.js +2 -2
  101. package/dist/esm/node/prerender/context.js +1 -1
  102. package/dist/esm/node/prerender/resolvePrerenderConfig.d.ts +2 -1
  103. package/dist/esm/node/prerender/resolvePrerenderConfig.js +34 -19
  104. package/dist/esm/node/prerender/runPrerender.js +13 -19
  105. package/dist/esm/node/prerender/utils.d.ts +1 -1
  106. package/dist/esm/node/prerender/utils.js +1 -1
  107. package/dist/esm/node/runtime/globalContext.d.ts +1 -1
  108. package/dist/esm/node/runtime/globalContext.js +10 -6
  109. package/dist/esm/node/runtime/html/injectAssets/getViteDevScript.js +6 -3
  110. package/dist/esm/node/runtime/html/serializePageContextClientSide.d.ts +2 -0
  111. package/dist/esm/node/runtime/html/serializePageContextClientSide.js +69 -15
  112. package/dist/esm/node/runtime/html/stream.js +7 -0
  113. package/dist/esm/node/runtime/index-deprecated.d.ts +1 -3
  114. package/dist/esm/node/runtime/renderPage/createHttpResponse/assertNoInfiniteHttpRedirect.d.ts +3 -1
  115. package/dist/esm/node/runtime/renderPage/createHttpResponse/assertNoInfiniteHttpRedirect.js +15 -6
  116. package/dist/esm/node/runtime/renderPage/createHttpResponse.d.ts +3 -1
  117. package/dist/esm/node/runtime/renderPage/createHttpResponse.js +2 -4
  118. package/dist/esm/node/runtime/renderPage/logErrorHint.js +6 -1
  119. package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.js +3 -0
  120. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +32 -6
  121. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +18 -12
  122. package/dist/esm/node/runtime/renderPage.js +21 -40
  123. package/dist/esm/node/runtime/utils.d.ts +0 -1
  124. package/dist/esm/node/runtime/utils.js +0 -1
  125. package/dist/esm/node/runtime-dev/createDevMiddleware.js +10 -8
  126. package/dist/esm/node/shared/assertV1Design.js +2 -1
  127. package/dist/esm/node/shared/utils.d.ts +0 -1
  128. package/dist/esm/node/shared/utils.js +0 -1
  129. package/dist/esm/shared/NOT_SERIALIZABLE.d.ts +1 -0
  130. package/dist/esm/shared/NOT_SERIALIZABLE.js +2 -0
  131. package/dist/esm/shared/page-configs/Config.d.ts +23 -3
  132. package/dist/esm/shared/page-configs/PageConfig.d.ts +17 -6
  133. package/dist/esm/shared/page-configs/getConfigDefinedAt.d.ts +5 -3
  134. package/dist/esm/shared/page-configs/getConfigDefinedAt.js +20 -3
  135. package/dist/esm/shared/page-configs/getConfigValueBuildTime.js +8 -5
  136. package/dist/esm/shared/page-configs/helpers.js +1 -1
  137. package/dist/esm/shared/page-configs/serialize/parsePageConfigs.d.ts +1 -1
  138. package/dist/esm/shared/page-configs/serialize/parsePageConfigs.js +2 -5
  139. package/dist/esm/shared/page-configs/serialize/serializeConfigValues.d.ts +3 -3
  140. package/dist/esm/shared/page-configs/serialize/serializeConfigValues.js +9 -5
  141. package/dist/esm/shared/route/abort.d.ts +2 -2
  142. package/dist/esm/shared/route/loadPageRoutes.js +2 -2
  143. package/dist/esm/shared/types.d.ts +39 -3
  144. package/dist/esm/types/index.d.ts +2 -0
  145. package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
  146. package/dist/esm/utils/PROJECT_VERSION.js +1 -1
  147. package/dist/esm/utils/assert.d.ts +2 -1
  148. package/dist/esm/utils/assert.js +12 -5
  149. package/dist/esm/utils/assertSingleInstance.js +11 -17
  150. package/dist/esm/utils/debug.js +2 -1
  151. package/dist/esm/utils/getRandomId.d.ts +1 -1
  152. package/dist/esm/utils/getRandomId.js +1 -1
  153. package/dist/esm/utils/normalizeHeaders.js +1 -1
  154. package/dist/esm/utils/objectAssign.d.ts +1 -1
  155. package/dist/esm/utils/objectAssign.js +7 -2
  156. package/dist/esm/utils/parseUrl-extras.js +1 -0
  157. package/package.json +6 -3
  158. package/dist/cjs/shared/notSerializable.js +0 -5
  159. package/dist/cjs/utils/projectInfo.js +0 -8
  160. package/dist/esm/shared/notSerializable.d.ts +0 -1
  161. package/dist/esm/shared/notSerializable.js +0 -2
  162. package/dist/esm/utils/projectInfo.d.ts +0 -4
  163. package/dist/esm/utils/projectInfo.js +0 -5
@@ -4,10 +4,6 @@ import { assert, assertUsage, isCallable } from '../../utils.js';
4
4
  import { getConfigDefinedAt } from '../getConfigDefinedAt.js';
5
5
  import { parseTransform } from '@brillout/json-serializer/parse';
6
6
  import { assertPlusFileExport } from '../assertPlusFileExport.js';
7
- function parseConfigValuesSerialized(configValuesSerialized) {
8
- const configValues = parseConfigValuesSerialized_tmp(configValuesSerialized);
9
- return configValues;
10
- }
11
7
  function parsePageConfigs(pageConfigsSerialized, pageConfigGlobalSerialized) {
12
8
  // pageConfigs
13
9
  const pageConfigs = pageConfigsSerialized.map((pageConfigSerialized) => {
@@ -43,7 +39,7 @@ function assertRouteConfigValue(configValues) {
43
39
  }
44
40
  */
45
41
  }
46
- function parseConfigValuesSerialized_tmp(configValuesSerialized) {
42
+ function parseConfigValuesSerialized(configValuesSerialized) {
47
43
  const configValues = {};
48
44
  Object.entries(configValuesSerialized).forEach(([configName, configValueSeriliazed]) => {
49
45
  let configValue;
@@ -100,6 +96,7 @@ function parseValueSerialized(valueSerialized, configName, getDefinedAtFile) {
100
96
  if (valueSerialized.type === 'plus-file') {
101
97
  const definedAtFile = getDefinedAtFile();
102
98
  const { exportValues } = valueSerialized;
99
+ assert(!definedAtFile.definedBy);
103
100
  assertPlusFileExport(exportValues, definedAtFile.filePathToShowToUser, configName);
104
101
  let value;
105
102
  let valueWasFound = false;
@@ -2,7 +2,7 @@ export { serializeConfigValues };
2
2
  export { getConfigValuesBase };
3
3
  export { isJsonValue };
4
4
  export type { FilesEnv };
5
- import type { ConfigEnvInternal, ConfigValueSource, DefinedAtFile, PageConfigBuildTime, PageConfigGlobalBuildTime } from '../PageConfig.js';
5
+ import type { ConfigEnvInternal, ConfigValueSource, DefinedAt, PageConfigBuildTime, PageConfigGlobalBuildTime } from '../PageConfig.js';
6
6
  declare function serializeConfigValues(pageConfig: PageConfigBuildTime | PageConfigGlobalBuildTime, importStatements: string[], filesEnv: FilesEnv, isEnvMatch: (configEnv: ConfigEnvInternal) => boolean, tabspace: string, isEager: boolean | null): string[];
7
7
  declare function isJsonValue(value: unknown): boolean;
8
8
  declare function getConfigValuesBase(pageConfig: PageConfigBuildTime | PageConfigGlobalBuildTime, isEnvMatch: (configEnv: ConfigEnvInternal) => boolean, isEager: boolean | null): ConfigValuesBase;
@@ -17,14 +17,14 @@ type ConfigValuesBase = ({
17
17
  } | {
18
18
  configValueBase: {
19
19
  type: 'standard';
20
- definedAtData: DefinedAtFile;
20
+ definedAtData: DefinedAt;
21
21
  };
22
22
  sourceRelevant: ConfigValueSource;
23
23
  configName: string;
24
24
  } | {
25
25
  configValueBase: {
26
26
  type: 'cumulative';
27
- definedAtData: DefinedAtFile[];
27
+ definedAtData: DefinedAt[];
28
28
  };
29
29
  sourcesRelevant: ConfigValueSource[];
30
30
  configName: string;
@@ -47,7 +47,7 @@ function serializeConfigValues(pageConfig, importStatements, filesEnv, isEnvMatc
47
47
  function getValueSerializedFromSource(configValueSource, configName, importStatements, filesEnv) {
48
48
  let valueData;
49
49
  if (configValueSource.valueIsLoaded && !configValueSource.valueIsLoadedWithImport) {
50
- valueData = getValueSerializedWithJson(configValueSource.value, configName, configValueSource.definedAtFilePath, importStatements, filesEnv, configValueSource.configEnv);
50
+ valueData = getValueSerializedWithJson(configValueSource.value, configName, configValueSource.definedAt, importStatements, filesEnv, configValueSource.configEnv);
51
51
  }
52
52
  else {
53
53
  valueData = getValueSerializedWithImport(configValueSource, importStatements, filesEnv, configName);
@@ -98,8 +98,9 @@ function serializeConfigValue(configValueBase, valueData, configName, lines, tab
98
98
  }
99
99
  function getValueSerializedWithImport(configValueSource, importStatements, filesEnv, configName) {
100
100
  assert(!configValueSource.valueIsFilePath);
101
- const { valueIsDefinedByPlusValueFile, definedAtFilePath, configEnv } = configValueSource;
102
- const { filePathAbsoluteVite, fileExportName } = definedAtFilePath;
101
+ const { valueIsDefinedByPlusValueFile, definedAt, configEnv } = configValueSource;
102
+ assert(!definedAt.definedBy);
103
+ const { filePathAbsoluteVite, fileExportName } = definedAt;
103
104
  if (valueIsDefinedByPlusValueFile)
104
105
  assert(fileExportName === undefined);
105
106
  const { importName } = addImportStatement(importStatements, filePathAbsoluteVite, fileExportName || '*', filesEnv, configEnv, configName);
@@ -226,9 +227,12 @@ function getConfigValuesBase(pageConfig, isEnvMatch, isEager) {
226
227
  return [...fromComputed, ...fromSources].filter((r) => r !== 'SKIP');
227
228
  }
228
229
  function getDefinedAtFileSource(source) {
230
+ const { definedAt } = source;
231
+ if (definedAt.definedBy)
232
+ return definedAt;
229
233
  const definedAtFile = {
230
- filePathToShowToUser: source.definedAtFilePath.filePathToShowToUser,
231
- fileExportPathToShowToUser: source.definedAtFilePath.fileExportPathToShowToUser
234
+ filePathToShowToUser: definedAt.filePathToShowToUser,
235
+ fileExportPathToShowToUser: definedAt.fileExportPathToShowToUser
232
236
  };
233
237
  return definedAtFile;
234
238
  }
@@ -100,9 +100,9 @@ declare function logAbortErrorHandled(err: ErrorAbort, isProduction: boolean, pa
100
100
  }): void;
101
101
  type PageContextFromRewrite = {
102
102
  _urlRewrite: string;
103
- } & Record<string, unknown>;
103
+ };
104
104
  type PageContextFromAllRewrites = {
105
105
  _urlRewrite: null | string;
106
- } & Record<string, unknown>;
106
+ };
107
107
  declare function getPageContextFromAllRewrites(pageContextsFromRewrite: PageContextFromRewrite[]): PageContextFromAllRewrites;
108
108
  declare function assertNoInfiniteAbortLoop(rewriteCount: number, redirectCount: number): void;
@@ -60,11 +60,11 @@ function getPageRoutes(filesystemRoots, pageFilesAll, pageConfigs, allPageIds) {
60
60
  if (!pageRoute) {
61
61
  const { routeFilesystem } = pageConfig;
62
62
  assert(routeFilesystem);
63
- const { routeString, definedBy } = routeFilesystem;
63
+ const { routeString, definedAtLocation } = routeFilesystem;
64
64
  assert(routeFilesystem.routeString.startsWith('/'));
65
65
  pageRoute = {
66
66
  pageId,
67
- routeFilesystemDefinedBy: definedBy,
67
+ routeFilesystemDefinedBy: definedAtLocation,
68
68
  comesFromV1PageConfig,
69
69
  routeString,
70
70
  routeDefinedAtString: null,
@@ -138,8 +138,27 @@ type PageContextBuiltInCommon<Data> = {
138
138
  */
139
139
  isBaseMissing?: true;
140
140
  };
141
- type PageContextBuiltInServer<Data> = PageContextBuiltInCommon<Data> & PageContextUrlServer;
142
- type PageContextBuiltInClientWithClientRouting<Data> = Partial<PageContextBuiltInCommon<Data>> & Pick<PageContextBuiltInCommon<Data>, 'Page' | 'routeParams' | 'pageExports' | 'config' | 'configEntries' | 'exports' | 'exportsAll' | 'abortReason' | 'data' | 'pageId' | 'source' | 'sources' | 'from'> & {
141
+ type PageContextBuiltInServer<Data> = PageContextBuiltInCommon<Data> & PageContextUrlServer & {
142
+ /**
143
+ * Whether the page is being rendered on the client-side, or rendered on the server-side / pre-rendered.
144
+ *
145
+ * In order to save client-side KBs, we recommend using `import.meta.env.SSR` whenever possible instead, see https://vike.dev/pageContext
146
+ */
147
+ isClientSide: false;
148
+ /**
149
+ * Whether the page is being pre-rendered.
150
+ *
151
+ * The value is always `false` in development.
152
+ *
153
+ * https://vike.dev/pre-rendering
154
+ * https://vike.dev/pageContext
155
+ */
156
+ isPrerendering: boolean;
157
+ isHydration?: undefined;
158
+ isBackwardNavigation?: undefined;
159
+ previousPageContext?: undefined;
160
+ };
161
+ type PageContextBuiltInClientWithClientRouting<Data> = Partial<PageContextBuiltInCommon<Data>> & Pick<PageContextBuiltInCommon<Data>, 'Page' | 'routeParams' | 'pageExports' | 'config' | 'configEntries' | 'exports' | 'exportsAll' | 'abortReason' | 'data' | 'pageId' | 'source' | 'sources' | 'from'> & PageContextClientCommon & {
143
162
  /** Whether the current page is already rendered to HTML */
144
163
  isHydration: boolean;
145
164
  /**
@@ -155,7 +174,7 @@ type PageContextBuiltInClientWithClientRouting<Data> = Partial<PageContextBuiltI
155
174
  */
156
175
  previousPageContext: PageContextClient<Data> | null;
157
176
  } & PageContextUrlClient;
158
- type PageContextBuiltInClientWithServerRouting<Data> = Partial<PageContextBuiltInCommon<Data>> & Pick<PageContextBuiltInCommon<Data>, 'Page' | 'pageExports' | 'exports' | 'abortReason' | 'pageId' | 'data'> & {
177
+ type PageContextBuiltInClientWithServerRouting<Data> = Partial<PageContextBuiltInCommon<Data>> & Pick<PageContextBuiltInCommon<Data>, 'Page' | 'pageExports' | 'exports' | 'abortReason' | 'pageId' | 'data'> & PageContextClientCommon & {
159
178
  /**
160
179
  * Whether the current page is already rendered to HTML.
161
180
  *
@@ -169,6 +188,23 @@ type PageContextBuiltInClientWithServerRouting<Data> = Partial<PageContextBuiltI
169
188
  */
170
189
  isBackwardNavigation: null;
171
190
  };
191
+ type PageContextClientCommon = {
192
+ /**
193
+ * Whether the page is being rendered on the client-side, or rendered on the server-side / pre-rendered.
194
+ *
195
+ * In order to save client-side KBs, we recommend using `import.meta.env.SSR` whenever possible instead, see https://vike.dev/pageContext
196
+ */
197
+ isClientSide: true;
198
+ /**
199
+ * Whether the page is being pre-rendered.
200
+ *
201
+ * The value is always `false` in development.
202
+ *
203
+ * https://vike.dev/pre-rendering
204
+ * https://vike.dev/pageContext
205
+ */
206
+ isPrerendering: false;
207
+ };
172
208
  /** For Vike internal use */
173
209
  type PageContextBuiltInServerInternal = Omit<PageContextBuiltInCommon<unknown> & PageContextUrlInternal, 'data'>;
174
210
  /** @deprecated
@@ -8,9 +8,11 @@ export type { PageContextBuiltInServer } from '../shared/types.js';
8
8
  export type { PageContextBuiltInClientWithClientRouting } from '../shared/types.js';
9
9
  export type { PageContextBuiltInClientWithServerRouting } from '../shared/types.js';
10
10
  export type { Config, ConfigMeta as Meta, ImportString, DataAsync, DataSync, GuardAsync, GuardSync, OnBeforePrerenderStartAsync, OnBeforePrerenderStartSync, OnBeforeRenderAsync, OnBeforeRenderSync, OnBeforeRouteAsync, OnBeforeRouteSync, OnHydrationEndAsync, OnHydrationEndSync, OnPageTransitionEndAsync, OnPageTransitionEndSync, OnPageTransitionStartAsync, OnPageTransitionStartSync, OnPrerenderStartAsync, OnPrerenderStartSync, OnRenderClientAsync, OnRenderClientSync, OnRenderHtmlAsync, OnRenderHtmlSync, RouteAsync, RouteSync, KeepScrollPosition } from '../shared/page-configs/Config.js';
11
+ export type { ConfigResolved } from '../shared/page-configs/Config/PageContextConfig.js';
11
12
  export type { ConfigEnv } from '../shared/page-configs/PageConfig.js';
12
13
  export type { ConfigDefinition, ConfigEffect } from '../node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js';
13
14
  export type { ConfigEntries } from '../shared/page-configs/getPageConfigUserFriendly.js';
15
+ export type { VikeConfigPublic as VikeConfig } from '../node/plugin/plugins/commonConfig.js';
14
16
  export type { UrlPublic as Url } from '../utils/parseUrl.js';
15
17
  export type { InjectFilterEntry } from '../node/runtime/html/injectAssets/getHtmlTags.js';
16
18
  export { defineConfig } from './defineConfig.js';
@@ -1 +1 @@
1
- export declare const PROJECT_VERSION: "0.4.224";
1
+ export declare const PROJECT_VERSION: "0.4.225-commit-2b7971f";
@@ -1,2 +1,2 @@
1
1
  // Automatically updated by @brillout/release-me
2
- export const PROJECT_VERSION = '0.4.224';
2
+ export const PROJECT_VERSION = '0.4.225-commit-2b7971f';
@@ -10,8 +10,9 @@ export { isBug };
10
10
  export { setAlwaysShowStackTrace };
11
11
  type Logger = (msg: string | Error, logType: 'warn' | 'info') => void;
12
12
  declare function assert(condition: unknown, debugInfo?: unknown): asserts condition;
13
- declare function assertUsage(condition: unknown, errMsg: string, { showStackTrace }?: {
13
+ declare function assertUsage(condition: unknown, errMsg: string, { showStackTrace, exitOnError }?: {
14
14
  showStackTrace?: true;
15
+ exitOnError?: boolean;
15
16
  }): asserts condition;
16
17
  declare function getProjectError(errMsg: string): Error;
17
18
  declare function assertWarning(condition: unknown, msg: string, { onlyOnce, showStackTrace }: {
@@ -12,7 +12,7 @@ import { assertSingleInstance_onAssertModuleLoad } from './assertSingleInstance.
12
12
  import { createErrorWithCleanStackTrace } from './createErrorWithCleanStackTrace.js';
13
13
  import { getGlobalObject } from './getGlobalObject.js';
14
14
  import { isObject } from './isObject.js';
15
- import { projectInfo } from './projectInfo.js';
15
+ import { PROJECT_VERSION } from './PROJECT_VERSION.js';
16
16
  import pc from '@brillout/picocolors';
17
17
  const globalObject = getGlobalObject('utils/assert.ts', {
18
18
  alreadyLogged: new Set(),
@@ -29,7 +29,7 @@ const globalObject = getGlobalObject('utils/assert.ts', {
29
29
  });
30
30
  assertSingleInstance_onAssertModuleLoad();
31
31
  const projectTag = `[vike]`;
32
- const projectTagWithVersion = `[vike@${projectInfo.projectVersion}]`;
32
+ const projectTagWithVersion = `[vike@${PROJECT_VERSION}]`;
33
33
  const bugTag = 'Bug';
34
34
  const numberOfStackTraceLinesToRemove = 2;
35
35
  function assert(condition, debugInfo) {
@@ -42,7 +42,7 @@ function assert(condition, debugInfo) {
42
42
  const debugInfoSerialized = typeof debugInfo === 'string' ? debugInfo : JSON.stringify(debugInfo);
43
43
  return pc.dim(`Debug info (for Vike maintainers; you can ignore this): ${debugInfoSerialized}`);
44
44
  })();
45
- const link = pc.blue('https://github.com/vikejs/vike/issues/new?template=bug.yml');
45
+ const link = pc.underline('https://github.com/vikejs/vike/issues/new?template=bug.yml');
46
46
  let errMsg = [
47
47
  `You stumbled upon a Vike bug. Go to ${link} and copy-paste this error. A maintainer will fix the bug (usually within 24 hours).`,
48
48
  debugStr
@@ -56,7 +56,7 @@ function assert(condition, debugInfo) {
56
56
  globalObject.onBeforeLog?.();
57
57
  throw internalError;
58
58
  }
59
- function assertUsage(condition, errMsg, { showStackTrace } = {}) {
59
+ function assertUsage(condition, errMsg, { showStackTrace, exitOnError } = {}) {
60
60
  if (condition)
61
61
  return;
62
62
  showStackTrace = showStackTrace || globalObject.alwaysShowStackTrace;
@@ -68,7 +68,13 @@ function assertUsage(condition, errMsg, { showStackTrace } = {}) {
68
68
  globalObject.showStackTraceList.add(usageError);
69
69
  }
70
70
  globalObject.onBeforeLog?.();
71
- throw usageError;
71
+ if (!exitOnError) {
72
+ throw usageError;
73
+ }
74
+ else {
75
+ console.error(showStackTrace ? usageError : errMsg);
76
+ process.exit(1);
77
+ }
72
78
  }
73
79
  function getProjectError(errMsg) {
74
80
  errMsg = addWhitespace(errMsg);
@@ -182,6 +188,7 @@ function overwriteAssertProductionLogger(logger) {
182
188
  function isBug(err) {
183
189
  return String(err).includes(`[${bugTag}]`);
184
190
  }
191
+ // Called upon `DEBUG=vike:error`
185
192
  function setAlwaysShowStackTrace() {
186
193
  globalObject.alwaysShowStackTrace = true;
187
194
  }
@@ -1,15 +1,15 @@
1
1
  export { assertSingleInstance_onClientEntryServerRouting };
2
2
  export { assertSingleInstance_onClientEntryClientRouting };
3
3
  export { assertSingleInstance_onAssertModuleLoad };
4
- // - Throw error if there are two different versions of vike loaded
4
+ // - Show warning if there are two different Vike versions loaded
5
5
  // - Show warning if entry of Client Routing and entry of Server Routing are both loaded
6
- // - Show warning if vike is loaded twice
6
+ // - Show warning if Vike is loaded twice
7
7
  import { unique } from './unique.js';
8
8
  import { getGlobalObject } from './getGlobalObject.js';
9
- import { projectInfo } from './projectInfo.js';
10
9
  import pc from '@brillout/picocolors';
11
- /* Use original assertUsage() & assertWarning() after all CJS is removed from node_modules/vike/dist/
12
- import { assertUsage, assertWarning } from './assert.js'
10
+ import { PROJECT_VERSION } from './PROJECT_VERSION.js';
11
+ /* Use original assertWarning() after all CJS is removed from node_modules/vike/dist/
12
+ import { assertWarning } from './assert.js'
13
13
  */
14
14
  const globalObject = getGlobalObject('utils/assertSingleInstance.ts', {
15
15
  instances: [],
@@ -20,9 +20,10 @@ const clientNotSingleInstance = 'Client runtime loaded twice https://vike.dev/cl
20
20
  function assertSingleInstance() {
21
21
  {
22
22
  const versions = unique(globalObject.instances);
23
- assertUsage(versions.length <= 1,
24
- // DO *NOT* patch vike to remove this error: because of multiple conflicting versions, you *will* eventually encounter insidious issues that hard to debug and potentially a security hazard, see for example https://github.com/vikejs/vike/issues/1108
25
- `vike@${pc.bold(versions[0])} and vike@${pc.bold(versions[1])} loaded but it's forbidden to load different versions`);
23
+ assertWarning(versions.length <= 1,
24
+ // Do *NOT* patch Vike to remove this warning: you *will* eventually encounter the issues listed at https://vike.dev/warning/version-mismatch
25
+ // - This happened before: https://github.com/vikejs/vike/issues/1108#issuecomment-1719061509
26
+ `vike@${pc.bold(versions[0])} and vike@${pc.bold(versions[1])} loaded which is highly discouraged, see ${pc.underline('https://vike.dev/warning/version-mismatch')}`, { onlyOnce: true, showStackTrace: false });
26
27
  }
27
28
  if (globalObject.checkSingleInstance && globalObject.instances.length > 1) {
28
29
  /*/ Not sure whether circular dependency can cause problems? In principle not since client-side code is ESM.
@@ -62,21 +63,14 @@ function assertSingleInstance_onClientEntryClientRouting(isProduction) {
62
63
  }
63
64
  // Called by utils/assert.ts which is (most certainly) loaded by all entries. That way we don't have to call a callback for every entry. (There are a lot of entries: `client/router/`, `client/`, `node/runtime/`, `node/plugin/`, `node/cli`.)
64
65
  function assertSingleInstance_onAssertModuleLoad() {
65
- globalObject.instances.push(projectInfo.projectVersion);
66
+ globalObject.instances.push(PROJECT_VERSION);
66
67
  assertSingleInstance();
67
68
  }
68
- function assertUsage(condition, errorMessage) {
69
- if (condition) {
70
- return;
71
- }
72
- const errMsg = `[vike][Wrong Usage] ${errorMessage}`;
73
- throw new Error(errMsg);
74
- }
75
69
  function assertWarning(condition, errorMessage, { onlyOnce, showStackTrace }) {
76
70
  if (condition) {
77
71
  return;
78
72
  }
79
- const msg = `[vike][Warning] ${errorMessage}`;
73
+ const msg = `[Vike][Warning] ${errorMessage}`;
80
74
  if (onlyOnce) {
81
75
  const { alreadyLogged } = globalObject;
82
76
  const key = onlyOnce === true ? msg : onlyOnce;
@@ -11,6 +11,8 @@ import { isArray } from './isArray.js';
11
11
  // Avoid this to be loaded in the browser. For isomorphic code: instead of `import { createDebugger } from './utils.js'`, use `globalThis.createDebugger()`.
12
12
  assert(!isBrowser());
13
13
  globalThis.__brillout_debug_createDebugger = createDebugger;
14
+ // We purposely read process.env.DEBUG early, in order to avoid users from the temptation to set process.env.DEBUG with JavaScript, since reading & writing process.env.DEBUG dynamically leads to inconsistencies: for example https://github.com/vikejs/vike/issues/2239
15
+ const DEBUG = getDEBUG() ?? '';
14
16
  const flags = [
15
17
  'vike:crawl',
16
18
  'vike:error',
@@ -145,7 +147,6 @@ function assertFlagsActivated() {
145
147
  });
146
148
  }
147
149
  function getFlagsActivated() {
148
- const DEBUG = getDEBUG() ?? '';
149
150
  const flagsActivated = DEBUG.match(flagRegex) ?? [];
150
151
  const all = DEBUG.includes('vike:*');
151
152
  return { flagsActivated, all };
@@ -1,2 +1,2 @@
1
1
  export { getRandomId };
2
- declare function getRandomId(length: number): string;
2
+ declare function getRandomId(length?: number): string;
@@ -1,7 +1,7 @@
1
1
  export { getRandomId };
2
2
  import { assert } from './assert.js';
3
3
  // https://stackoverflow.com/questions/1349404/generate-random-string-characters-in-javascript
4
- function getRandomId(length) {
4
+ function getRandomId(length = 12) {
5
5
  let randomId = '';
6
6
  while (randomId.length < length) {
7
7
  randomId += Math.random().toString(36).slice(2);
@@ -1,7 +1,7 @@
1
1
  export { normalizeHeaders };
2
2
  import { isObject } from './isObject.js';
3
3
  function normalizeHeaders(
4
- /* This type is precise, too precise which can be annoying: e.g. cannot pass a string[][] argument because it doesn't match the more precise [string,string][] type.
4
+ /* This type is too strict which is annoying: cannot pass `string[][]` because it doesn't match the more precise type `[string,string][]`.
5
5
  headersOriginal ConstructorParameters<typeof Headers>[0]
6
6
  */
7
7
  headersOriginal) {
@@ -1,2 +1,2 @@
1
1
  export { objectAssign };
2
- declare function objectAssign<Obj extends object, ObjAddendum extends object | null>(obj: Obj, objAddendum: ObjAddendum): asserts obj is Obj & ObjAddendum;
2
+ declare function objectAssign<Obj extends object, ObjAddendum extends object | null>(obj: Obj, objAddendum: ObjAddendum, objAddendumCanBePageContextObject?: true): asserts obj is Obj & ObjAddendum;
@@ -3,9 +3,14 @@ import { assert } from './assert.js';
3
3
  // Same as Object.assign() but:
4
4
  // - With type inference
5
5
  // - Preserves property descriptors, which we need for preserving the getters added by getPageContextUrlComputed()
6
- function objectAssign(obj, objAddendum) {
6
+ function objectAssign(obj, objAddendum, objAddendumCanBePageContextObject) {
7
7
  if (objAddendum) {
8
- assert(!('_isPageContextObject' in objAddendum));
8
+ if (!objAddendumCanBePageContextObject) {
9
+ // We only need this assert() in the rare case when the user is expected to mutate `pageContext` after the Vike hook was executed (and its promise resolved).
10
+ // - The only use case I can think of is the user mutating `pageContext` after the onRenderClient() promise resolved (which can happen when client-side rendering finishes after onRenderClient() resolves). In that case, having Vike await async Vike hooks isn't enough.
11
+ // - IIRC this assert() was mostly needed for preserving the getters added by getPageContextUrlComputed() but we don't need this anymore.
12
+ assert(!('_isPageContextObject' in objAddendum));
13
+ }
9
14
  Object.defineProperties(obj, Object.getOwnPropertyDescriptors(objAddendum));
10
15
  }
11
16
  }
@@ -92,6 +92,7 @@ function modifyUrlPathname(url, modifier) {
92
92
  function removeUrlOrigin(url) {
93
93
  const { origin, pathnameOriginal, searchOriginal, hashOriginal } = parseUrl(url, '/');
94
94
  const urlModified = createUrlFromComponents(null, pathnameOriginal, searchOriginal, hashOriginal);
95
+ assert(urlModified.startsWith('/'));
95
96
  return { urlModified, origin };
96
97
  }
97
98
  function setUrlOrigin(url, origin) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vike",
3
- "version": "0.4.224",
3
+ "version": "0.4.225-commit-2b7971f",
4
4
  "repository": "https://github.com/vikejs/vike",
5
5
  "exports": {
6
6
  "./server": {
@@ -131,6 +131,7 @@
131
131
  "json5": "^2.0.0",
132
132
  "picomatch": "^4.0.2",
133
133
  "semver": "^7.0.0",
134
+ "sirv": "^3.0.1",
134
135
  "source-map-support": "^0.5.0",
135
136
  "tinyglobby": "^0.2.10",
136
137
  "vite": ">=5.1.0"
@@ -253,8 +254,8 @@
253
254
  "@types/source-map-support": "^0.5.10",
254
255
  "react-streaming": "^0.3.47",
255
256
  "rimraf": "^5.0.5",
256
- "typescript": "^5.7.3",
257
- "vite": "^6.2.0"
257
+ "typescript": "^5.8.2",
258
+ "vite": "^6.2.1"
258
259
  },
259
260
  "scripts": {
260
261
  "dev": "tsc --watch",
@@ -263,8 +264,10 @@
263
264
  "build:cjs": "pnpm run build:cjs:ts && pnpm run build:cjs:fixup",
264
265
  "build:cjs:ts": "tsc --project ./tsconfig.cjs.json",
265
266
  "build:cjs:fixup": "node ./dist-cjs-fixup.mjs",
267
+ "========= Release": "",
266
268
  "release": "release-me patch",
267
269
  "release:minor": "release-me minor",
270
+ "release:major": "release-me major",
268
271
  "release:commit": "release-me commit"
269
272
  }
270
273
  }
@@ -1,5 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.notSerializable = void 0;
4
- // TODO: move to ../node/runtime/html/notSerializable.ts once code is distributed as ESM
5
- exports.notSerializable = 'not-serializable';
@@ -1,8 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.projectInfo = void 0;
4
- const PROJECT_VERSION_js_1 = require("./PROJECT_VERSION.js");
5
- exports.projectInfo = {
6
- projectName: 'Vike',
7
- projectVersion: PROJECT_VERSION_js_1.PROJECT_VERSION
8
- };
@@ -1 +0,0 @@
1
- export declare const notSerializable = "not-serializable";
@@ -1,2 +0,0 @@
1
- // TODO: move to ../node/runtime/html/notSerializable.ts once code is distributed as ESM
2
- export const notSerializable = 'not-serializable';
@@ -1,4 +0,0 @@
1
- export declare const projectInfo: {
2
- projectName: "Vike";
3
- projectVersion: "0.4.224";
4
- };
@@ -1,5 +0,0 @@
1
- import { PROJECT_VERSION } from './PROJECT_VERSION.js';
2
- export const projectInfo = {
3
- projectName: 'Vike',
4
- projectVersion: PROJECT_VERSION
5
- };