vike 0.4.218 → 0.4.220

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 (184) hide show
  1. package/dist/cjs/__internal/index.js +11 -11
  2. package/dist/cjs/node/api/build.js +20 -11
  3. package/dist/cjs/node/api/context.js +5 -1
  4. package/dist/cjs/node/api/index.js +17 -7
  5. package/dist/cjs/node/api/prepareViteApiCall.js +39 -11
  6. package/dist/cjs/node/cli/entry.js +19 -7
  7. package/dist/cjs/node/plugin/index.js +5 -5
  8. package/dist/cjs/node/plugin/plugins/autoFullBuild.js +3 -4
  9. package/dist/cjs/node/plugin/plugins/baseUrls.js +3 -10
  10. package/dist/cjs/node/plugin/plugins/buildConfig.js +2 -2
  11. package/dist/cjs/node/plugin/plugins/{importBuild → buildEntry}/index.js +16 -17
  12. package/dist/cjs/node/plugin/plugins/commonConfig.js +39 -4
  13. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +26 -23
  14. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +171 -68
  15. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigValuesAll.js +1 -1
  16. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.js +4 -3
  17. package/dist/cjs/node/plugin/plugins/setGlobalContext.js +1 -1
  18. package/dist/cjs/node/plugin/plugins/{vite6HmrRegressionWorkaround.js → workaroundVite6HmrRegression.js} +3 -3
  19. package/dist/cjs/node/plugin/shared/getHttpRequestAsyncStore.js +17 -7
  20. package/dist/cjs/node/prerender/isPrerenderAutoRunEnabled.js +16 -0
  21. package/dist/cjs/node/prerender/runPrerender.js +94 -66
  22. package/dist/cjs/node/prerender/utils.js +1 -0
  23. package/dist/cjs/node/runtime/globalContext.js +108 -34
  24. package/dist/cjs/node/runtime/html/injectAssets/getHtmlTags.js +2 -2
  25. package/dist/cjs/node/runtime/index-common.js +0 -15
  26. package/dist/cjs/node/runtime/onLoad.js +17 -3
  27. package/dist/cjs/node/runtime/page-files/setup.js +2 -4
  28. package/dist/cjs/node/runtime/renderPage/analyzePage.js +2 -2
  29. package/dist/cjs/node/runtime/renderPage/createHttpResponse/getCacheControl.js +2 -2
  30. package/dist/cjs/node/runtime/renderPage/loadUserFilesServerSide.js +1 -1
  31. package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +11 -33
  32. package/dist/cjs/node/runtime/renderPage/resolveRedirects.js +9 -1
  33. package/dist/cjs/node/runtime/renderPage.js +21 -22
  34. package/dist/cjs/node/runtime/utils.js +1 -0
  35. package/dist/cjs/node/runtime-dev/index.js +17 -7
  36. package/dist/cjs/node/shared/assertRuntimeManifest.js +0 -2
  37. package/dist/cjs/shared/getPageFiles/analyzeClientSide.js +3 -3
  38. package/dist/cjs/shared/getPageFiles/{setPageFiles.js → getPageFiles.js} +8 -6
  39. package/dist/cjs/shared/getPageFiles.js +3 -9
  40. package/dist/cjs/shared/hooks/getHook.js +3 -3
  41. package/dist/cjs/shared/{getPageFiles/getExports.js → page-configs/getPageConfigUserFriendly.js} +113 -81
  42. package/dist/cjs/shared/page-configs/serialize/serializeConfigValues.js +80 -55
  43. package/dist/cjs/shared/route/loadPageRoutes.js +3 -3
  44. package/dist/cjs/shared/utils.js +1 -0
  45. package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
  46. package/dist/cjs/utils/assert.js +4 -3
  47. package/dist/cjs/utils/assertSetup.js +47 -16
  48. package/dist/cjs/utils/debug.js +11 -6
  49. package/dist/cjs/utils/getGlobalObject.js +1 -2
  50. package/dist/cjs/utils/objectReplace.js +9 -0
  51. package/dist/esm/__internal/index.d.ts +3 -5
  52. package/dist/esm/__internal/index.js +6 -8
  53. package/dist/esm/client/client-routing-runtime/createPageContext.js +4 -1
  54. package/dist/esm/client/client-routing-runtime/entry.d.ts +1 -1
  55. package/dist/esm/client/client-routing-runtime/entry.js +0 -1
  56. package/dist/esm/client/client-routing-runtime/getPageContextCurrent.d.ts +2 -2
  57. package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.d.ts +4 -4
  58. package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.js +1 -1
  59. package/dist/esm/client/client-routing-runtime/initOnLinkClick.d.ts +4 -0
  60. package/dist/esm/client/client-routing-runtime/initOnLinkClick.js +13 -3
  61. package/dist/esm/client/client-routing-runtime/initOnPopState.js +8 -0
  62. package/dist/esm/client/client-routing-runtime/prefetch/getPrefetchSettings.d.ts +2 -2
  63. package/dist/esm/client/client-routing-runtime/prefetch.d.ts +2 -2
  64. package/dist/esm/client/client-routing-runtime/prefetch.js +2 -2
  65. package/dist/esm/client/client-routing-runtime/skipLink.d.ts +2 -0
  66. package/dist/esm/client/client-routing-runtime/skipLink.js +1 -0
  67. package/dist/esm/client/server-routing-runtime/entry.d.ts +1 -1
  68. package/dist/esm/client/server-routing-runtime/entry.js +0 -1
  69. package/dist/esm/client/server-routing-runtime/getPageContext.d.ts +1 -1
  70. package/dist/esm/client/server-routing-runtime/getPageContext.js +5 -2
  71. package/dist/esm/client/shared/executeOnRenderClientHook.d.ts +2 -2
  72. package/dist/esm/client/shared/loadUserFilesClientSide.d.ts +2 -2
  73. package/dist/esm/client/shared/loadUserFilesClientSide.js +2 -2
  74. package/dist/esm/client/shared/normalizeClientSideUrl.js +2 -3
  75. package/dist/esm/client/shared/preparePageContextForUserConsumptionClientSide.d.ts +2 -2
  76. package/dist/esm/node/api/build.js +3 -4
  77. package/dist/esm/node/api/context.d.ts +3 -1
  78. package/dist/esm/node/api/context.js +6 -2
  79. package/dist/esm/node/api/prepareViteApiCall.d.ts +1 -1
  80. package/dist/esm/node/api/prepareViteApiCall.js +25 -7
  81. package/dist/esm/node/cli/entry.js +2 -0
  82. package/dist/esm/node/cli/parseCli.d.ts +1 -1
  83. package/dist/esm/node/plugin/index.d.ts +1 -1
  84. package/dist/esm/node/plugin/index.js +5 -5
  85. package/dist/esm/node/plugin/plugins/autoFullBuild.js +3 -4
  86. package/dist/esm/node/plugin/plugins/baseUrls.d.ts +1 -1
  87. package/dist/esm/node/plugin/plugins/baseUrls.js +4 -11
  88. package/dist/esm/node/plugin/plugins/buildConfig.js +2 -2
  89. package/dist/esm/node/plugin/plugins/{importBuild → buildEntry}/getVikeManifest.d.ts +1 -1
  90. package/dist/esm/node/plugin/plugins/{importBuild → buildEntry}/index.d.ts +2 -2
  91. package/dist/esm/node/plugin/plugins/{importBuild → buildEntry}/index.js +16 -17
  92. package/dist/esm/node/plugin/plugins/commonConfig.d.ts +3 -0
  93. package/dist/esm/node/plugin/plugins/commonConfig.js +40 -5
  94. package/dist/esm/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.d.ts +1 -1
  95. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.d.ts +6 -9
  96. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +25 -22
  97. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.d.ts +96 -1
  98. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +167 -64
  99. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigValuesAll.js +1 -1
  100. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.js +4 -3
  101. package/dist/esm/node/plugin/plugins/setGlobalContext.js +1 -1
  102. package/dist/esm/node/plugin/plugins/workaroundVite6HmrRegression.d.ts +3 -0
  103. package/dist/esm/node/plugin/plugins/{vite6HmrRegressionWorkaround.js → workaroundVite6HmrRegression.js} +3 -3
  104. package/dist/esm/node/prerender/isPrerenderAutoRunEnabled.d.ts +5 -0
  105. package/dist/esm/node/prerender/isPrerenderAutoRunEnabled.js +14 -0
  106. package/dist/esm/node/prerender/runPrerender.d.ts +1 -2
  107. package/dist/esm/node/prerender/runPrerender.js +78 -60
  108. package/dist/esm/node/prerender/utils.d.ts +1 -0
  109. package/dist/esm/node/prerender/utils.js +1 -0
  110. package/dist/esm/node/runtime/globalContext.d.ts +23 -7
  111. package/dist/esm/node/runtime/globalContext.js +108 -34
  112. package/dist/esm/node/runtime/html/injectAssets/getHtmlTags.js +1 -1
  113. package/dist/esm/node/runtime/index-common.d.ts +0 -1
  114. package/dist/esm/node/runtime/index-common.js +0 -15
  115. package/dist/esm/node/runtime/index-deprecated.d.ts +1 -0
  116. package/dist/esm/node/runtime/onLoad.js +16 -2
  117. package/dist/esm/node/runtime/page-files/setup.js +3 -3
  118. package/dist/esm/node/runtime/renderPage/analyzePage.js +1 -1
  119. package/dist/esm/node/runtime/renderPage/createHttpResponse/getCacheControl.js +1 -1
  120. package/dist/esm/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.d.ts +2 -2
  121. package/dist/esm/node/runtime/renderPage/loadUserFilesServerSide.d.ts +1 -1
  122. package/dist/esm/node/runtime/renderPage/loadUserFilesServerSide.js +2 -2
  123. package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.d.ts +2 -2
  124. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +31 -46
  125. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +11 -33
  126. package/dist/esm/node/runtime/renderPage/resolveRedirects.d.ts +1 -1
  127. package/dist/esm/node/runtime/renderPage/resolveRedirects.js +9 -1
  128. package/dist/esm/node/runtime/renderPage.js +22 -23
  129. package/dist/esm/node/runtime/utils.d.ts +1 -0
  130. package/dist/esm/node/runtime/utils.js +1 -0
  131. package/dist/esm/node/shared/assertPluginManifest.d.ts +0 -1
  132. package/dist/esm/node/shared/assertRuntimeManifest.d.ts +0 -1
  133. package/dist/esm/node/shared/assertRuntimeManifest.js +1 -3
  134. package/dist/esm/shared/getPageFiles/analyzeClientSide.js +1 -1
  135. package/dist/esm/shared/getPageFiles/{setPageFiles.d.ts → getPageFiles.d.ts} +3 -1
  136. package/dist/esm/shared/getPageFiles/{setPageFiles.js → getPageFiles.js} +8 -6
  137. package/dist/esm/shared/getPageFiles.d.ts +2 -5
  138. package/dist/esm/shared/getPageFiles.js +1 -4
  139. package/dist/esm/shared/hooks/getHook.d.ts +3 -3
  140. package/dist/esm/shared/hooks/getHook.js +1 -1
  141. package/dist/esm/shared/page-configs/Config/PageContextConfig.d.ts +9 -5
  142. package/dist/esm/shared/page-configs/Config.d.ts +20 -2
  143. package/dist/esm/shared/page-configs/PageConfig.d.ts +7 -3
  144. package/dist/esm/shared/{getPageFiles/getExports.d.ts → page-configs/getPageConfigUserFriendly.d.ts} +26 -12
  145. package/dist/esm/shared/{getPageFiles/getExports.js → page-configs/getPageConfigUserFriendly.js} +112 -80
  146. package/dist/esm/shared/page-configs/serialize/serializeConfigValues.d.ts +26 -6
  147. package/dist/esm/shared/page-configs/serialize/serializeConfigValues.js +80 -55
  148. package/dist/esm/shared/route/executeGuardHook.d.ts +2 -2
  149. package/dist/esm/shared/route/loadPageRoutes.js +1 -1
  150. package/dist/esm/shared/types.d.ts +1 -1
  151. package/dist/esm/shared/utils.d.ts +1 -0
  152. package/dist/esm/shared/utils.js +1 -0
  153. package/dist/esm/types/index.d.ts +1 -1
  154. package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
  155. package/dist/esm/utils/PROJECT_VERSION.js +1 -1
  156. package/dist/esm/utils/assert.js +4 -3
  157. package/dist/esm/utils/assertSetup.js +47 -16
  158. package/dist/esm/utils/debug.d.ts +1 -1
  159. package/dist/esm/utils/debug.js +11 -6
  160. package/dist/esm/utils/getGlobalObject.js +1 -2
  161. package/dist/esm/utils/objectReplace.d.ts +1 -0
  162. package/dist/esm/utils/objectReplace.js +6 -0
  163. package/dist/esm/utils/projectInfo.d.ts +1 -1
  164. package/package.json +4 -13
  165. package/__internal/loadImportBuild.js +0 -3
  166. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/resolveVikeConfigGlobal.js +0 -128
  167. package/dist/cjs/node/runtime/globalContext/loadImportBuild.js +0 -25
  168. package/dist/cjs/node/runtime/page-files/getPageFilesExports.js +0 -22
  169. package/dist/esm/client/client-routing-runtime/pageFiles.d.ts +0 -1
  170. package/dist/esm/client/client-routing-runtime/pageFiles.js +0 -4
  171. package/dist/esm/client/server-routing-runtime/pageFiles.d.ts +0 -1
  172. package/dist/esm/client/server-routing-runtime/pageFiles.js +0 -4
  173. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/resolveVikeConfigGlobal.d.ts +0 -104
  174. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/resolveVikeConfigGlobal.js +0 -123
  175. package/dist/esm/node/plugin/plugins/vite6HmrRegressionWorkaround.d.ts +0 -3
  176. package/dist/esm/node/runtime/globalContext/loadImportBuild.d.ts +0 -18
  177. package/dist/esm/node/runtime/globalContext/loadImportBuild.js +0 -23
  178. package/dist/esm/node/runtime/page-files/getPageFilesExports.d.ts +0 -2
  179. package/dist/esm/node/runtime/page-files/getPageFilesExports.js +0 -20
  180. /package/dist/cjs/node/plugin/plugins/{importBuild → buildEntry}/getVikeManifest.js +0 -0
  181. /package/dist/cjs/shared/page-configs/{getConfigValue.js → getConfigValueRuntime.js} +0 -0
  182. /package/dist/esm/node/plugin/plugins/{importBuild → buildEntry}/getVikeManifest.js +0 -0
  183. /package/dist/esm/shared/page-configs/{getConfigValue.d.ts → getConfigValueRuntime.d.ts} +0 -0
  184. /package/dist/esm/shared/page-configs/{getConfigValue.js → getConfigValueRuntime.js} +0 -0
@@ -1,5 +1,5 @@
1
1
  export { assertRuntimeManifest };
2
- import { assert, castType, checkType, hasProp, isBaseAssets, isBaseServer, isObject } from './utils.js';
2
+ import { assert, checkType, hasProp, isBaseAssets, isBaseServer, isObject } from './utils.js';
3
3
  function assertRuntimeManifest(obj) {
4
4
  assert(obj);
5
5
  assert(isObject(obj));
@@ -8,8 +8,6 @@ function assertRuntimeManifest(obj) {
8
8
  assert(isBaseServer(obj.baseServer));
9
9
  assert(isBaseAssets(obj.baseAssets));
10
10
  assert(hasProp(obj, 'includeAssetsImportedByServer', 'boolean'));
11
- assert(hasProp(obj, 'redirects', 'object'));
12
- castType(obj);
13
11
  assert(hasProp(obj, 'trailingSlash', 'boolean'));
14
12
  assert(hasProp(obj, 'disableUrlNormalization', 'boolean'));
15
13
  checkType(obj);
@@ -1,5 +1,5 @@
1
1
  export { analyzeClientSide };
2
- import { getConfigValueRuntime } from '../page-configs/getConfigValue.js';
2
+ import { getConfigValueRuntime } from '../page-configs/getConfigValueRuntime.js';
3
3
  import { analyzePageClientSide } from './analyzePageClientSide.js';
4
4
  function analyzeClientSide(pageConfig, pageFilesAll, pageId) {
5
5
  // V1 design
@@ -1,8 +1,9 @@
1
+ export { getPageFilesAll };
1
2
  export { setPageFiles };
2
3
  export { setPageFilesAsync };
3
- export { getPageFilesAll };
4
4
  import type { PageFile } from './getPageFileObject.js';
5
5
  import type { PageConfigRuntime, PageConfigGlobalRuntime } from '../page-configs/PageConfig.js';
6
+ import { type ConfigUserFriendly } from '../page-configs/getPageConfigUserFriendly.js';
6
7
  declare function setPageFiles(pageFilesExports: unknown): void;
7
8
  declare function setPageFilesAsync(getPageFilesExports: () => Promise<unknown>): void;
8
9
  declare function getPageFilesAll(isClientSide: boolean, isProduction?: boolean): Promise<{
@@ -10,4 +11,5 @@ declare function getPageFilesAll(isClientSide: boolean, isProduction?: boolean):
10
11
  allPageIds: string[];
11
12
  pageConfigs: PageConfigRuntime[];
12
13
  pageConfigGlobal: PageConfigGlobalRuntime;
14
+ globalConfig: ConfigUserFriendly;
13
15
  }>;
@@ -1,16 +1,18 @@
1
+ export { getPageFilesAll };
1
2
  export { setPageFiles };
2
3
  export { setPageFilesAsync };
3
- export { getPageFilesAll };
4
4
  import { assert, unique } from '../utils.js';
5
5
  import { parseGlobResults } from './parseGlobResults.js';
6
6
  import { getGlobalObject } from '../../utils/getGlobalObject.js';
7
+ import { getPageConfigUserFriendlyNew } from '../page-configs/getPageConfigUserFriendly.js';
7
8
  const globalObject = getGlobalObject('setPageFiles.ts', {});
8
- // TODO:v1-design-release: rename setPageFiles() getPageFilesAll() parseGlobResult()
9
9
  function setPageFiles(pageFilesExports) {
10
10
  const { pageFiles, pageConfigs, pageConfigGlobal } = parseGlobResults(pageFilesExports);
11
11
  globalObject.pageFilesAll = pageFiles;
12
12
  globalObject.pageConfigs = pageConfigs;
13
13
  globalObject.pageConfigGlobal = pageConfigGlobal;
14
+ // TODO/now: re-use this call, instead of calling it twice
15
+ globalObject.globalConfig = getPageConfigUserFriendlyNew(pageConfigGlobal);
14
16
  }
15
17
  function setPageFilesAsync(getPageFilesExports) {
16
18
  globalObject.pageFilesGetter = async () => {
@@ -23,18 +25,18 @@ async function getPageFilesAll(isClientSide, isProduction) {
23
25
  assert(isProduction === undefined);
24
26
  }
25
27
  else {
26
- assert(globalObject.pageFilesGetter);
27
28
  assert(typeof isProduction === 'boolean');
28
29
  if (!globalObject.pageFilesAll ||
29
30
  // We reload all glob imports in dev to make auto-reload work
30
31
  !isProduction) {
32
+ assert(globalObject.pageFilesGetter);
31
33
  await globalObject.pageFilesGetter();
32
34
  }
33
35
  }
34
- const { pageFilesAll, pageConfigs, pageConfigGlobal } = globalObject;
35
- assert(pageFilesAll && pageConfigs && pageConfigGlobal);
36
+ const { pageFilesAll, pageConfigs, pageConfigGlobal, globalConfig } = globalObject;
37
+ assert(pageFilesAll && pageConfigs && pageConfigGlobal && globalConfig);
36
38
  const allPageIds = getAllPageIds(pageFilesAll, pageConfigs);
37
- return { pageFilesAll, allPageIds, pageConfigs, pageConfigGlobal };
39
+ return { pageFilesAll, allPageIds, pageConfigs, pageConfigGlobal, globalConfig };
38
40
  }
39
41
  function getAllPageIds(allPageFiles, pageConfigs) {
40
42
  const fileIds = allPageFiles.filter(({ isDefaultPageFile }) => !isDefaultPageFile).map(({ pageId }) => pageId);
@@ -1,8 +1,5 @@
1
1
  export type { PageFile } from './getPageFiles/getPageFileObject.js';
2
- export type { ExportsAll, PageContextExports } from './getPageFiles/getExports.js';
3
- export { getPageFilesAll } from './getPageFiles/setPageFiles.js';
4
- export { setPageFiles } from './getPageFiles/setPageFiles.js';
5
- export { setPageFilesAsync } from './getPageFiles/setPageFiles.js';
2
+ export type { ExportsAll, PageConfigUserFriendly } from './page-configs/getPageConfigUserFriendly.js';
6
3
  export { getPageFilesClientSide } from './getPageFiles/getAllPageIdFiles.js';
7
4
  export { getPageFilesServerSide } from './getPageFiles/getAllPageIdFiles.js';
8
- export { getPageContextExports } from './getPageFiles/getExports.js';
5
+ export { getPageConfigUserFriendly } from './page-configs/getPageConfigUserFriendly.js';
@@ -1,6 +1,3 @@
1
- export { getPageFilesAll } from './getPageFiles/setPageFiles.js';
2
- export { setPageFiles } from './getPageFiles/setPageFiles.js';
3
- export { setPageFilesAsync } from './getPageFiles/setPageFiles.js';
4
1
  export { getPageFilesClientSide } from './getPageFiles/getAllPageIdFiles.js';
5
2
  export { getPageFilesServerSide } from './getPageFiles/getAllPageIdFiles.js';
6
- export { getPageContextExports } from './getPageFiles/getExports.js';
3
+ export { getPageConfigUserFriendly } from './page-configs/getPageConfigUserFriendly.js';
@@ -9,7 +9,7 @@ export type { HookLoc };
9
9
  export type { HookTimeout };
10
10
  export type { HooksTimeoutProvidedByUser };
11
11
  export { getHookTimeoutDefault };
12
- import type { PageContextExports } from '../getPageFiles.js';
12
+ import type { PageConfigUserFriendly } from '../getPageFiles.js';
13
13
  import type { HookName, HookNamePage, HookNameGlobal } from '../page-configs/Config.js';
14
14
  import type { PageConfigGlobalRuntime, PageConfigRuntime } from '../page-configs/PageConfig.js';
15
15
  type Hook = HookLoc & {
@@ -26,10 +26,10 @@ type HookTimeout = {
26
26
  warning: number | false;
27
27
  };
28
28
  type HooksTimeoutProvidedByUser = false | Partial<Record<HookName, false | Partial<HookTimeout>>>;
29
- declare function getHook(pageContext: PageContextExports, hookName: HookName): null | Hook;
29
+ declare function getHook(pageContext: PageConfigUserFriendly, hookName: HookName): null | Hook;
30
30
  declare function getHookFromPageConfig(pageConfig: PageConfigRuntime, hookName: HookNamePage): null | Hook;
31
31
  declare function getHookFromPageConfigGlobal(pageConfigGlobal: PageConfigGlobalRuntime, hookName: HookNameGlobal): null | Hook;
32
- declare function assertHook<TPageContext extends PageContextExports, THookName extends PropertyKey & HookName>(pageContext: TPageContext, hookName: THookName): asserts pageContext is TPageContext & {
32
+ declare function assertHook<TPageContext extends PageConfigUserFriendly, THookName extends PropertyKey & HookName>(pageContext: TPageContext, hookName: THookName): asserts pageContext is TPageContext & {
33
33
  exports: Record<THookName, Function | undefined>;
34
34
  };
35
35
  declare function getHookTimeoutDefault(hookName: HookName): HookTimeout;
@@ -8,7 +8,7 @@ export { getHook_setIsPrerenderering };
8
8
  export { getHookTimeoutDefault };
9
9
  import { getGlobalObject } from '../../utils/getGlobalObject.js';
10
10
  import { getHookFilePathToShowToUser } from '../page-configs/helpers.js';
11
- import { getConfigValueRuntime } from '../page-configs/getConfigValue.js';
11
+ import { getConfigValueRuntime } from '../page-configs/getConfigValueRuntime.js';
12
12
  import { assert, assertUsage, checkType, isCallable, isObject } from '../utils.js';
13
13
  import pc from '@brillout/picocolors';
14
14
  const globalObject = getGlobalObject('getHook.ts', {});
@@ -1,11 +1,15 @@
1
1
  export type { PageContextConfig };
2
+ export type { ConfigResolved };
2
3
  import type { VikePackages } from '../../VikeNamespace.js';
3
- import type { ConfigBuiltIn, ImportString } from '../Config.js';
4
+ import type { ConfigBuiltIn, ConfigBuiltInResolved, ImportString } from '../Config.js';
4
5
  import type { Combine, IsNotEmpty, XOR5 } from './helpers.js';
5
- type WithoutImportString<T> = {
6
- [K in keyof T]: Exclude<T[K], ImportString>;
7
- };
8
- type PageContextConfig = ConfigBuiltIn & Vike.ConfigResolved & WithoutImportString<Omit<Vike.Config, keyof Vike.ConfigResolved>> & (ConfigVikePackagesNotEmptyXor extends true ? ConfigVikePackagesIntersection : ConfigVikePackagesCombined);
6
+ type PageContextConfig = ConfigResolved & (ConfigVikePackagesNotEmptyXor extends true ? ConfigVikePackagesIntersection : ConfigVikePackagesCombined);
7
+ type ConfigUnresolved = WithoutImportString<ConfigBuiltIn & Vike.Config>;
8
+ type ConfigResolvedOnly = ConfigBuiltInResolved & Vike.ConfigResolved;
9
+ type ConfigResolved = ConfigResolvedOnly & Omit<ConfigUnresolved, keyof ConfigResolvedOnly>;
9
10
  type ConfigVikePackagesIntersection = VikePackages.ConfigVikeReact & VikePackages.ConfigVikeVue & VikePackages.ConfigVikeSolid & VikePackages.ConfigVikeSvelte & VikePackages.ConfigVikeAngular;
10
11
  type ConfigVikePackagesCombined = Combine<VikePackages.ConfigVikeReact, Combine<VikePackages.ConfigVikeVue, Combine<VikePackages.ConfigVikeSolid, Combine<VikePackages.ConfigVikeSvelte, VikePackages.ConfigVikeAngular>>>>;
11
12
  type ConfigVikePackagesNotEmptyXor = XOR5<IsNotEmpty<VikePackages.ConfigVikeReact>, IsNotEmpty<VikePackages.ConfigVikeVue>, IsNotEmpty<VikePackages.ConfigVikeSolid>, IsNotEmpty<VikePackages.ConfigVikeSvelte>, IsNotEmpty<VikePackages.ConfigVikeAngular>>;
13
+ type WithoutImportString<T> = {
14
+ [K in keyof T]: Exclude<T[K], ImportString>;
15
+ };
@@ -1,6 +1,8 @@
1
1
  export type { Config };
2
2
  export type { ConfigBuiltIn };
3
+ export type { ConfigBuiltInResolved };
3
4
  export type { ConfigNameBuiltIn };
5
+ export type { ConfigNameGlobal };
4
6
  export type { ConfigMeta };
5
7
  export type { HookName };
6
8
  export type { HookNamePage };
@@ -35,15 +37,17 @@ import type { PrefetchSetting, PrefetchStaticAssets } from '../../client/client-
35
37
  import type { ConfigDefinition } from '../../node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js';
36
38
  import type { DocumentHtml } from '../../node/runtime/html/renderHtml.js';
37
39
  import type { InjectFilterEntry } from '../../types/index.js';
38
- import type { VikeVitePluginOptions } from '../../node/plugin/plugins/importUserCode/v1-design/getVikeConfig/resolveVikeConfigGlobal.js';
40
+ import type { VikeVitePluginOptions } from '../../node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js';
39
41
  import type { Vike, VikePackages } from '../VikeNamespace.js';
40
42
  import type { HooksTimeoutProvidedByUser } from '../hooks/getHook.js';
41
43
  import type { PageContextClient, PageContextServer } from '../types.js';
44
+ import type { InlineConfig } from 'vite';
42
45
  type HookName = HookNamePage | HookNameGlobal | HookNameOldDesign;
43
46
  type HookNamePage = 'onHydrationEnd' | 'onBeforePrerenderStart' | 'onBeforeRender' | 'onPageTransitionStart' | 'onPageTransitionEnd' | 'onRenderHtml' | 'onRenderClient' | 'guard' | 'data';
44
47
  type HookNameGlobal = 'onBeforePrerender' | 'onBeforeRoute' | 'onPrerenderStart';
45
48
  type HookNameOldDesign = 'render' | 'prerender';
46
- type ConfigNameBuiltIn = Exclude<keyof Config, keyof VikeVitePluginOptions | 'onBeforeRoute' | 'onPrerenderStart'> | 'prerender' | 'isClientRuntimeLoaded' | 'onBeforeRenderEnv' | 'dataEnv' | 'hooksTimeout' | 'clientHooks' | 'middleware';
49
+ type ConfigNameBuiltIn = Exclude<keyof Config, keyof VikeVitePluginOptions | 'onBeforeRoute' | 'onPrerenderStart' | 'vite' | 'redirects'> | 'prerender' | 'isClientRuntimeLoaded' | 'onBeforeRenderEnv' | 'dataEnv' | 'hooksTimeout' | 'clientHooks' | 'middleware';
50
+ type ConfigNameGlobal = 'onPrerenderStart' | 'onBeforeRoute' | 'prerender' | 'disableAutoFullBuild' | 'includeAssetsImportedByServer' | 'baseAssets' | 'baseServer' | 'redirects' | 'trailingSlash' | 'disableUrlNormalization' | 'vite';
47
51
  type Config = ConfigBuiltIn & Vike.Config & (VikePackages.ConfigVikeReact | VikePackages.ConfigVikeVue | VikePackages.ConfigVikeSolid | VikePackages.ConfigVikeSvelte | VikePackages.ConfigVikeAngular);
48
52
  /** Hook for fetching data.
49
53
  *
@@ -344,6 +348,16 @@ type ConfigBuiltIn = {
344
348
  * https://vike.dev/meta
345
349
  */
346
350
  meta?: ConfigMeta | ImportString;
351
+ /** Vite configuration.
352
+ *
353
+ * https://vite.dev/config/
354
+ */
355
+ vite?: InlineConfig;
356
+ /** Permanent redirections (HTTP status code 301)
357
+ *
358
+ * https://vike.dev/redirects
359
+ */
360
+ redirects?: Record<string, string>;
347
361
  /**
348
362
  * @experimental DON'T USE: the API *will* have breaking changes upon any minor version release.
349
363
  *
@@ -390,5 +404,9 @@ type ConfigBuiltIn = {
390
404
  */
391
405
  keepScrollPosition?: KeepScrollPosition;
392
406
  };
407
+ type ConfigBuiltInResolved = {
408
+ passToClient?: string[][];
409
+ redirects?: Record<string, string>[];
410
+ };
393
411
  type ConfigMeta = Record<string, ConfigDefinition>;
394
412
  type ImportString = `import:${string}`;
@@ -54,6 +54,7 @@ type PageConfigGlobalRuntime = {
54
54
  type PageConfigGlobalBuildTime = {
55
55
  configValueSources: ConfigValueSources;
56
56
  configDefinitions: ConfigDefinitions;
57
+ configValuesComputed?: undefined;
57
58
  };
58
59
  /** In what environment(s) the config value is loaded.
59
60
  *
@@ -70,6 +71,8 @@ type ConfigEnvInternal = Omit<ConfigEnv, 'client'> & {
70
71
  /** Load value only in production, or only in development. */
71
72
  production?: boolean;
72
73
  };
74
+ type ConfigValueSources = Record<string, // configName
75
+ ConfigValueSource[]>;
73
76
  type ConfigValueSource = {
74
77
  value?: unknown;
75
78
  configEnv: ConfigEnvInternal;
@@ -85,11 +88,13 @@ type ConfigValueSource = {
85
88
  type DefinedAtFilePath = DefinedAtFile & FilePath & {
86
89
  fileExportName?: string;
87
90
  };
88
- type ConfigValueSources = Record<string, ConfigValueSource[]>;
89
- type ConfigValuesComputed = Record<string, {
91
+ type ConfigValuesComputed = Record<string, // configName
92
+ {
90
93
  configEnv: ConfigEnvInternal;
91
94
  value: unknown;
92
95
  }>;
96
+ type ConfigValues = Record<string, // configName
97
+ ConfigValue>;
93
98
  type ConfigValue = ConfigValueStandard | ConfigValueCumulative | ConfigValueComputed;
94
99
  /** Defined by a unique source (thus unique file path). */
95
100
  type ConfigValueStandard = {
@@ -109,7 +114,6 @@ type ConfigValueComputed = {
109
114
  value: unknown;
110
115
  definedAtData: null;
111
116
  };
112
- type ConfigValues = Record<string, ConfigValue>;
113
117
  type DefinedAtData = DefinedAtFile | DefinedAtFile[] | null;
114
118
  type DefinedAtFile = {
115
119
  filePathToShowToUser: string;
@@ -1,14 +1,17 @@
1
- export { getPageContextExports };
1
+ export { getPageConfigUserFriendly };
2
+ export { getPageConfigUserFriendlyNew };
3
+ export type { ConfigUserFriendly };
4
+ export type { PageConfigUserFriendly };
5
+ export type { Source };
6
+ export type { Sources };
7
+ export type { From };
2
8
  export type { ExportsAll };
3
- export type { PageContextExports };
4
9
  export type { ConfigEntries };
5
- export type { From };
6
- export type { Sources };
7
- export type { Source };
8
- import type { FileType } from './fileTypes.js';
9
- import type { PageConfigRuntimeLoaded } from './../page-configs/PageConfig.js';
10
- import type { PageFile } from './getPageFileObject.js';
11
- import { type ConfigDefinedAtOptional } from '../page-configs/getConfigDefinedAt.js';
10
+ import type { FileType } from '../getPageFiles/fileTypes.js';
11
+ import type { PageFile } from '../getPageFiles/getPageFileObject.js';
12
+ import type { ConfigValues, PageConfigRuntimeLoaded } from './PageConfig.js';
13
+ import { type ConfigDefinedAtOptional } from './getConfigDefinedAt.js';
14
+ import type { ConfigResolved } from './Config/PageContextConfig.js';
12
15
  type ExportsAll = Record<string, {
13
16
  exportValue: unknown;
14
17
  exportSource: string;
@@ -29,11 +32,11 @@ type ConfigEntries = Record<string, {
29
32
  configDefinedAt: ConfigDefinedAtOptional;
30
33
  configDefinedByFile: string | null;
31
34
  }[]>;
32
- type PageContextExports = {
35
+ type PageConfigUserFriendly = {
36
+ config: Record<string, unknown>;
33
37
  source: Source;
34
38
  sources: Sources;
35
39
  from: From;
36
- config: Record<string, unknown>;
37
40
  configEntries: ConfigEntries;
38
41
  exports: Record<string, unknown>;
39
42
  exportsAll: ExportsAll;
@@ -70,4 +73,15 @@ type SourceConfigsComputed = {
70
73
  type: 'configsComputed';
71
74
  value: unknown;
72
75
  };
73
- declare function getPageContextExports(pageFiles: PageFile[], pageConfig: PageConfigRuntimeLoaded | null): PageContextExports;
76
+ declare function getPageConfigUserFriendly(pageFiles: PageFile[], pageConfig: PageConfigRuntimeLoaded | null): PageConfigUserFriendly;
77
+ type ConfigUserFriendly = {
78
+ config: ConfigResolved;
79
+ configEntries: ConfigEntries;
80
+ exportsAll: ExportsAll;
81
+ source: Source;
82
+ sources: Sources;
83
+ from: From;
84
+ };
85
+ declare function getPageConfigUserFriendlyNew(pageConfig: {
86
+ configValues: ConfigValues;
87
+ }): ConfigUserFriendly;
@@ -1,14 +1,14 @@
1
- export { getPageContextExports };
2
- import { isScriptFile, isTemplateFile } from '../../utils/isScriptFile.js';
3
- import { assert, isObject, assertWarning, assertUsage, makeLast, isBrowser } from '../utils.js';
4
- import { assertDefaultExports, forbiddenDefaultExports } from './assert_exports_old_design.js';
5
- import { getConfigDefinedAtOptional, getDefinedAtString } from '../page-configs/getConfigDefinedAt.js';
6
- import { getConfigValueFilePathToShowToUser } from '../page-configs/helpers.js';
1
+ export { getPageConfigUserFriendly };
2
+ export { getPageConfigUserFriendlyNew };
3
+ import { assertDefaultExports, forbiddenDefaultExports } from '../getPageFiles/assert_exports_old_design.js';
4
+ import { getConfigDefinedAtOptional, getDefinedAtString } from './getConfigDefinedAt.js';
5
+ import { getConfigValueFilePathToShowToUser } from './helpers.js';
6
+ import { assert, isObject, assertWarning, assertUsage, makeLast, isBrowser, isScriptFile, isTemplateFile } from '../utils.js';
7
7
  import pc from '@brillout/picocolors';
8
- function getPageContextExports(pageFiles, pageConfig) {
9
- const configEntries = {};
8
+ function getPageConfigUserFriendly(pageFiles, pageConfig) {
10
9
  const config = {};
11
- const exportsAll = {};
10
+ const configEntries = {}; // TODO/v1-release: remove
11
+ const exportsAll = {}; // TODO/v1-release: remove
12
12
  // V0.4 design
13
13
  // TODO/v1-release: remove
14
14
  pageFiles.forEach((pageFile) => {
@@ -26,78 +26,26 @@ function getPageContextExports(pageFiles, pageConfig) {
26
26
  });
27
27
  });
28
28
  });
29
- // V1 design
30
- const source = {};
31
- const sources = {};
32
- const addSrc = (src, configName) => {
33
- source[configName] = src;
34
- sources[configName] ?? (sources[configName] = []);
35
- sources[configName].push(src);
36
- };
37
- const from = {
38
- configsStandard: {},
39
- configsCumulative: {},
40
- configsComputed: {}
41
- };
29
+ let source;
30
+ let sources;
31
+ let from;
42
32
  if (pageConfig) {
43
- Object.entries(pageConfig.configValues).forEach(([configName, configValue]) => {
44
- const { value } = configValue;
45
- const configValueFilePathToShowToUser = getConfigValueFilePathToShowToUser(configValue.definedAtData);
46
- const configDefinedAt = getConfigDefinedAtOptional('Config', configName, configValue.definedAtData);
47
- config[configName] = config[configName] ?? value;
48
- configEntries[configName] = configEntries[configName] ?? [];
49
- // Currently each configName has only one entry. Adding an entry for each overriden config value isn't implemented yet. (This is an isomorphic file and it isn't clear whether this can/should be implemented on the client-side. We should load a minimum amount of code on the client-side.)
50
- assert(configEntries[configName].length === 0);
51
- configEntries[configName].push({
52
- configValue: value,
53
- configDefinedAt,
54
- configDefinedByFile: configValueFilePathToShowToUser
55
- });
56
- if (configValue.type === 'standard') {
57
- const src = {
58
- type: 'configsStandard',
59
- value: configValue.value,
60
- definedAt: getDefinedAtString(configValue.definedAtData, configName)
61
- };
62
- addSrc(src, configName);
63
- from.configsStandard[configName] = src;
64
- }
65
- if (configValue.type === 'cumulative') {
66
- const src = {
67
- type: 'configsCumulative',
68
- values: configValue.value.map((value, i) => {
69
- const definedAtFile = configValue.definedAtData[i];
70
- assert(definedAtFile);
71
- const definedAt = getDefinedAtString(definedAtFile, configName);
72
- return {
73
- value,
74
- definedAt
75
- };
76
- })
77
- };
78
- addSrc(src, configName);
79
- from.configsCumulative[configName] = src;
80
- }
81
- if (configValue.type === 'computed') {
82
- const src = {
83
- type: 'configsComputed',
84
- value: configValue.value
85
- };
86
- addSrc(src, configName);
87
- from.configsComputed[configName] = src;
88
- }
89
- // TODO/v1-release: remove
90
- const exportName = configName;
91
- exportsAll[exportName] = exportsAll[exportName] ?? [];
92
- exportsAll[exportName].push({
93
- exportValue: value,
94
- exportSource: configDefinedAt,
95
- filePath: configValueFilePathToShowToUser,
96
- _filePath: configValueFilePathToShowToUser,
97
- _fileType: null,
98
- _isFromDefaultExport: null
99
- });
100
- });
33
+ const res = getPageConfigUserFriendlyNew(pageConfig);
34
+ source = res.source;
35
+ sources = res.sources;
36
+ from = res.from;
37
+ Object.assign(config, res.config);
38
+ Object.assign(configEntries, res.configEntries);
39
+ Object.assign(exportsAll, res.exportsAll);
40
+ }
41
+ else {
42
+ source = {};
43
+ sources = {};
44
+ from = {
45
+ configsStandard: {},
46
+ configsCumulative: {},
47
+ configsComputed: {}
48
+ };
101
49
  }
102
50
  const pageExports = createObjectWithDeprecationWarning();
103
51
  const exports = {};
@@ -127,6 +75,90 @@ function getPageContextExports(pageFiles, pageConfig) {
127
75
  };
128
76
  return pageContextExports;
129
77
  }
78
+ // V1 design
79
+ function getPageConfigUserFriendlyNew(pageConfig) {
80
+ const config = {};
81
+ const configEntries = {};
82
+ const exportsAll = {};
83
+ const source = {};
84
+ const sources = {};
85
+ const from = {
86
+ configsStandard: {},
87
+ configsCumulative: {},
88
+ configsComputed: {}
89
+ };
90
+ const addSrc = (src, configName) => {
91
+ source[configName] = src;
92
+ sources[configName] ?? (sources[configName] = []);
93
+ sources[configName].push(src);
94
+ };
95
+ Object.entries(pageConfig.configValues).forEach(([configName, configValue]) => {
96
+ const { value } = configValue;
97
+ const configValueFilePathToShowToUser = getConfigValueFilePathToShowToUser(configValue.definedAtData);
98
+ const configDefinedAt = getConfigDefinedAtOptional('Config', configName, configValue.definedAtData);
99
+ config[configName] = config[configName] ?? value;
100
+ configEntries[configName] = configEntries[configName] ?? [];
101
+ // Currently each configName has only one entry. Adding an entry for each overriden config value isn't implemented yet. (This is an isomorphic file and it isn't clear whether this can/should be implemented on the client-side. We should load a minimum amount of code on the client-side.)
102
+ assert(configEntries[configName].length === 0);
103
+ configEntries[configName].push({
104
+ configValue: value,
105
+ configDefinedAt,
106
+ configDefinedByFile: configValueFilePathToShowToUser
107
+ });
108
+ if (configValue.type === 'standard') {
109
+ const src = {
110
+ type: 'configsStandard',
111
+ value: configValue.value,
112
+ definedAt: getDefinedAtString(configValue.definedAtData, configName)
113
+ };
114
+ addSrc(src, configName);
115
+ from.configsStandard[configName] = src;
116
+ }
117
+ if (configValue.type === 'cumulative') {
118
+ const src = {
119
+ type: 'configsCumulative',
120
+ values: configValue.value.map((value, i) => {
121
+ const definedAtFile = configValue.definedAtData[i];
122
+ assert(definedAtFile);
123
+ const definedAt = getDefinedAtString(definedAtFile, configName);
124
+ return {
125
+ value,
126
+ definedAt
127
+ };
128
+ })
129
+ };
130
+ addSrc(src, configName);
131
+ from.configsCumulative[configName] = src;
132
+ }
133
+ if (configValue.type === 'computed') {
134
+ const src = {
135
+ type: 'configsComputed',
136
+ value: configValue.value
137
+ };
138
+ addSrc(src, configName);
139
+ from.configsComputed[configName] = src;
140
+ }
141
+ // TODO/v1-release: remove
142
+ const exportName = configName;
143
+ exportsAll[exportName] = exportsAll[exportName] ?? [];
144
+ exportsAll[exportName].push({
145
+ exportValue: value,
146
+ exportSource: configDefinedAt,
147
+ filePath: configValueFilePathToShowToUser,
148
+ _filePath: configValueFilePathToShowToUser,
149
+ _fileType: null,
150
+ _isFromDefaultExport: null
151
+ });
152
+ });
153
+ return {
154
+ config,
155
+ configEntries,
156
+ exportsAll,
157
+ source,
158
+ sources,
159
+ from
160
+ };
161
+ }
130
162
  function getExportValues(pageFile) {
131
163
  const { filePath, fileExports } = pageFile;
132
164
  assert(fileExports); // assume pageFile.loadFile() was called
@@ -1,7 +1,27 @@
1
1
  export { serializeConfigValues };
2
- import type { ConfigEnvInternal, PageConfigBuildTime, PageConfigGlobalBuildTime } from '../PageConfig.js';
3
- declare function serializeConfigValues(pageConfig: PageConfigBuildTime | (PageConfigGlobalBuildTime & {
4
- configValuesComputed?: undefined;
5
- }), importStatements: string[], isEnvMatch: (configEnv: ConfigEnvInternal) => boolean, { isEager }: {
6
- isEager: boolean;
7
- }, tabspace: string): string[];
2
+ export { getConfigValuesBase };
3
+ import type { ConfigEnvInternal, ConfigValueSource, DefinedAtFile, PageConfigBuildTime, PageConfigGlobalBuildTime } from '../PageConfig.js';
4
+ declare function serializeConfigValues(pageConfig: PageConfigBuildTime | PageConfigGlobalBuildTime, importStatements: string[], isEnvMatch: (configEnv: ConfigEnvInternal) => boolean, tabspace: string, isEager: boolean | null): string[];
5
+ declare function getConfigValuesBase(pageConfig: PageConfigBuildTime | PageConfigGlobalBuildTime, isEnvMatch: (configEnv: ConfigEnvInternal) => boolean, isEager: boolean | null): ConfigValuesBase;
6
+ type ConfigValuesBase = ({
7
+ configValueBase: {
8
+ type: 'computed';
9
+ definedAtData: null;
10
+ };
11
+ value: unknown;
12
+ configName: string;
13
+ } | {
14
+ configValueBase: {
15
+ type: 'standard';
16
+ definedAtData: DefinedAtFile;
17
+ };
18
+ sourceRelevant: ConfigValueSource;
19
+ configName: string;
20
+ } | {
21
+ configValueBase: {
22
+ type: 'cumulative';
23
+ definedAtData: DefinedAtFile[];
24
+ };
25
+ sourcesRelevant: ConfigValueSource[];
26
+ configName: string;
27
+ })[];