vike 0.4.219 → 0.4.220-commit-9a798ce

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 (157) hide show
  1. package/dist/cjs/node/api/build.js +23 -58
  2. package/dist/cjs/node/api/context.js +6 -8
  3. package/dist/cjs/node/api/prepareViteApiCall.js +6 -7
  4. package/dist/cjs/node/api/utils.js +1 -1
  5. package/dist/cjs/node/cli/context.js +16 -0
  6. package/dist/cjs/node/cli/entry.js +2 -0
  7. package/dist/cjs/node/cli/utils.js +1 -0
  8. package/dist/cjs/{utils → node/plugin}/getOutDirs.js +11 -11
  9. package/dist/cjs/node/plugin/index.js +1 -7
  10. package/dist/cjs/node/plugin/onLoad.js +6 -1
  11. package/dist/cjs/node/plugin/plugins/autoFullBuild.js +43 -31
  12. package/dist/cjs/node/plugin/plugins/baseUrls.js +2 -2
  13. package/dist/cjs/node/plugin/plugins/buildConfig.js +6 -3
  14. package/dist/cjs/node/plugin/plugins/buildEntry/index.js +24 -21
  15. package/dist/cjs/node/plugin/plugins/commonConfig.js +11 -8
  16. package/dist/cjs/node/plugin/plugins/extractAssetsPlugin.js +4 -2
  17. package/dist/cjs/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.js +10 -7
  18. package/dist/cjs/node/plugin/plugins/importUserCode/index.js +3 -4
  19. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/assertExtensions.js +10 -9
  20. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +8 -3
  21. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +158 -176
  22. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigValuesAll.js +3 -1
  23. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.js +3 -2
  24. package/dist/cjs/node/plugin/plugins/previewConfig.js +3 -4
  25. package/dist/cjs/node/plugin/utils.js +1 -1
  26. package/dist/cjs/node/prerender/context.js +26 -0
  27. package/dist/cjs/node/prerender/resolvePrerenderConfig.js +25 -0
  28. package/dist/cjs/node/prerender/runPrerender.js +64 -37
  29. package/dist/cjs/node/prerender/utils.js +3 -2
  30. package/dist/cjs/node/runtime/globalContext.js +44 -58
  31. package/dist/cjs/node/runtime/page-files/setup.js +1 -1
  32. package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +6 -3
  33. package/dist/cjs/node/runtime/renderPage/resolveRedirects.js +6 -5
  34. package/dist/cjs/node/runtime/renderPage.js +10 -5
  35. package/dist/cjs/node/runtime/utils.js +3 -2
  36. package/dist/cjs/node/shared/resolveBase.js +9 -0
  37. package/dist/cjs/shared/page-configs/getPageConfigUserFriendly.js +2 -2
  38. package/dist/cjs/shared/page-configs/loadConfigValues.js +5 -1
  39. package/dist/cjs/shared/utils.js +1 -1
  40. package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
  41. package/dist/cjs/utils/assertSetup.js +15 -1
  42. package/dist/cjs/utils/catchInfiniteLoop.js +34 -0
  43. package/dist/cjs/utils/findFile.js +3 -3
  44. package/dist/cjs/utils/isDev.js +4 -1
  45. package/dist/cjs/utils/isFilePathAbsoluteFilesystem.js +2 -2
  46. package/dist/cjs/utils/makePublicCopy.js +32 -0
  47. package/dist/cjs/utils/requireResolve.js +3 -3
  48. package/dist/esm/client/client-routing-runtime/history.d.ts +3 -1
  49. package/dist/esm/client/client-routing-runtime/history.js +23 -18
  50. package/dist/esm/client/client-routing-runtime/index.d.ts +0 -1
  51. package/dist/esm/client/client-routing-runtime/index.js +0 -1
  52. package/dist/esm/client/client-routing-runtime/initClientRouter.js +2 -2
  53. package/dist/esm/client/client-routing-runtime/initOnLinkClick.js +3 -4
  54. package/dist/esm/client/client-routing-runtime/initOnPopState.d.ts +0 -10
  55. package/dist/esm/client/client-routing-runtime/initOnPopState.js +50 -62
  56. package/dist/esm/client/client-routing-runtime/renderPageClientSide.js +15 -15
  57. package/dist/esm/client/client-routing-runtime/scrollRestoration.d.ts +4 -6
  58. package/dist/esm/client/client-routing-runtime/scrollRestoration.js +17 -12
  59. package/dist/esm/client/client-routing-runtime/setScrollPosition.d.ts +1 -1
  60. package/dist/esm/client/client-routing-runtime/setScrollPosition.js +29 -5
  61. package/dist/esm/client/client-routing-runtime/utils.d.ts +1 -0
  62. package/dist/esm/client/client-routing-runtime/utils.js +1 -0
  63. package/dist/esm/client/shared/normalizeClientSideUrl.js +2 -3
  64. package/dist/esm/node/api/build.d.ts +1 -6
  65. package/dist/esm/node/api/build.js +20 -25
  66. package/dist/esm/node/api/context.d.ts +4 -4
  67. package/dist/esm/node/api/context.js +6 -9
  68. package/dist/esm/node/api/prepareViteApiCall.d.ts +0 -1
  69. package/dist/esm/node/api/prepareViteApiCall.js +7 -8
  70. package/dist/esm/node/api/utils.d.ts +1 -1
  71. package/dist/esm/node/api/utils.js +1 -1
  72. package/dist/esm/node/cli/context.d.ts +5 -0
  73. package/dist/esm/node/cli/context.js +14 -0
  74. package/dist/esm/node/cli/entry.js +2 -0
  75. package/dist/esm/node/cli/parseCli.d.ts +3 -1
  76. package/dist/esm/node/cli/utils.d.ts +1 -0
  77. package/dist/esm/node/cli/utils.js +1 -0
  78. package/dist/esm/{utils → node/plugin}/getOutDirs.js +5 -5
  79. package/dist/esm/node/plugin/index.d.ts +29 -1
  80. package/dist/esm/node/plugin/index.js +2 -8
  81. package/dist/esm/node/plugin/onLoad.js +7 -2
  82. package/dist/esm/node/plugin/plugins/autoFullBuild.js +43 -31
  83. package/dist/esm/node/plugin/plugins/baseUrls.js +2 -2
  84. package/dist/esm/node/plugin/plugins/buildConfig.js +7 -4
  85. package/dist/esm/node/plugin/plugins/buildEntry/index.d.ts +3 -3
  86. package/dist/esm/node/plugin/plugins/buildEntry/index.js +25 -22
  87. package/dist/esm/node/plugin/plugins/commonConfig.d.ts +8 -2
  88. package/dist/esm/node/plugin/plugins/commonConfig.js +9 -6
  89. package/dist/esm/node/plugin/plugins/extractAssetsPlugin.js +4 -2
  90. package/dist/esm/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.d.ts +2 -2
  91. package/dist/esm/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.js +10 -7
  92. package/dist/esm/node/plugin/plugins/importUserCode/index.js +3 -4
  93. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/assertExtensions.d.ts +3 -2
  94. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/assertExtensions.js +10 -9
  95. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +8 -3
  96. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.d.ts +2 -95
  97. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +159 -177
  98. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigValuesAll.js +3 -1
  99. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.js +3 -2
  100. package/dist/esm/node/plugin/plugins/previewConfig.js +3 -4
  101. package/dist/esm/node/plugin/utils.js +1 -1
  102. package/dist/esm/node/prerender/context.d.ts +9 -0
  103. package/dist/esm/node/prerender/context.js +24 -0
  104. package/dist/esm/node/prerender/resolvePrerenderConfig.d.ts +5 -0
  105. package/dist/esm/node/prerender/resolvePrerenderConfig.js +23 -0
  106. package/dist/esm/node/prerender/runPrerender.d.ts +42 -1
  107. package/dist/esm/node/prerender/runPrerender.js +65 -38
  108. package/dist/esm/node/prerender/utils.d.ts +3 -2
  109. package/dist/esm/node/prerender/utils.js +3 -2
  110. package/dist/esm/node/runtime/globalContext.d.ts +15 -9
  111. package/dist/esm/node/runtime/globalContext.js +45 -59
  112. package/dist/esm/node/runtime/page-files/setup.js +1 -1
  113. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +5 -5
  114. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +6 -3
  115. package/dist/esm/node/runtime/renderPage/resolveRedirects.d.ts +2 -0
  116. package/dist/esm/node/runtime/renderPage/resolveRedirects.js +5 -5
  117. package/dist/esm/node/runtime/renderPage.js +10 -5
  118. package/dist/esm/node/runtime/utils.d.ts +3 -2
  119. package/dist/esm/node/runtime/utils.js +3 -2
  120. package/dist/esm/node/shared/resolveBase.d.ts +4 -1
  121. package/dist/esm/node/shared/resolveBase.js +9 -0
  122. package/dist/esm/shared/page-configs/Config.d.ts +76 -3
  123. package/dist/esm/shared/page-configs/PageConfig.d.ts +25 -16
  124. package/dist/esm/shared/page-configs/getPageConfigUserFriendly.d.ts +1 -1
  125. package/dist/esm/shared/page-configs/getPageConfigUserFriendly.js +2 -2
  126. package/dist/esm/shared/page-configs/loadConfigValues.js +6 -2
  127. package/dist/esm/shared/utils.d.ts +1 -1
  128. package/dist/esm/shared/utils.js +1 -1
  129. package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
  130. package/dist/esm/utils/PROJECT_VERSION.js +1 -1
  131. package/dist/esm/utils/assertSetup.js +15 -1
  132. package/dist/esm/utils/catchInfiniteLoop.d.ts +2 -0
  133. package/dist/esm/utils/catchInfiniteLoop.js +32 -0
  134. package/dist/esm/utils/findFile.js +1 -1
  135. package/dist/esm/utils/isDev.js +4 -1
  136. package/dist/esm/utils/isFilePathAbsoluteFilesystem.js +1 -1
  137. package/dist/esm/utils/makePublicCopy.d.ts +3 -0
  138. package/dist/esm/utils/makePublicCopy.js +30 -0
  139. package/dist/esm/utils/projectInfo.d.ts +1 -1
  140. package/dist/esm/utils/requireResolve.js +1 -1
  141. package/package.json +1 -1
  142. package/dist/cjs/node/plugin/plugins/buildEntry/getVikeManifest.js +0 -17
  143. package/dist/cjs/node/prerender/isPrerenderAutoRunEnabled.js +0 -16
  144. package/dist/cjs/node/shared/assertPluginManifest.js +0 -20
  145. package/dist/cjs/node/shared/assertRuntimeManifest.js +0 -16
  146. package/dist/esm/node/plugin/plugins/buildEntry/getVikeManifest.d.ts +0 -5
  147. package/dist/esm/node/plugin/plugins/buildEntry/getVikeManifest.js +0 -15
  148. package/dist/esm/node/prerender/isPrerenderAutoRunEnabled.d.ts +0 -5
  149. package/dist/esm/node/prerender/isPrerenderAutoRunEnabled.js +0 -14
  150. package/dist/esm/node/shared/assertPluginManifest.d.ts +0 -12
  151. package/dist/esm/node/shared/assertPluginManifest.js +0 -18
  152. package/dist/esm/node/shared/assertRuntimeManifest.d.ts +0 -10
  153. package/dist/esm/node/shared/assertRuntimeManifest.js +0 -14
  154. /package/dist/cjs/utils/{filesystemPathHandling.js → toPosixPath.js} +0 -0
  155. /package/dist/esm/{utils → node/plugin}/getOutDirs.d.ts +0 -0
  156. /package/dist/esm/utils/{filesystemPathHandling.d.ts → toPosixPath.d.ts} +0 -0
  157. /package/dist/esm/utils/{filesystemPathHandling.js → toPosixPath.js} +0 -0
@@ -0,0 +1,23 @@
1
+ export { resolvePrerenderConfig };
2
+ // TODO/now:
3
+ // - prerender.value
4
+ // - correct isPrerendering
5
+ function resolvePrerenderConfig(prerenderConfigs) {
6
+ if (!prerenderConfigs || prerenderConfigs.every((configVal) => !configVal)) {
7
+ return false;
8
+ }
9
+ const prerenderSettings = prerenderConfigs.filter(isObject2);
10
+ const prerenderConfig = {
11
+ partial: pickFirst(prerenderSettings.map((c) => c.partial)) ?? false,
12
+ noExtraDir: pickFirst(prerenderSettings.map((c) => c.noExtraDir)) ?? false,
13
+ parallel: pickFirst(prerenderSettings.map((c) => c.parallel)) ?? true,
14
+ disableAutoRun: pickFirst(prerenderSettings.map((c) => c.disableAutoRun)) ?? false
15
+ };
16
+ return prerenderConfig;
17
+ }
18
+ function isObject2(p) {
19
+ return typeof p === 'object';
20
+ }
21
+ function pickFirst(arr) {
22
+ return arr.filter((v) => v !== undefined)[0];
23
+ }
@@ -3,8 +3,47 @@ export { runPrerenderFromCLIPrerenderCommand };
3
3
  export { runPrerenderFromAutoRun };
4
4
  export { runPrerender_forceExit };
5
5
  export type { PrerenderOptions };
6
+ export type { PrerenderContextPublic };
7
+ import { PageContextInitEnhanced } from '../runtime/renderPage/renderPageAlreadyRouted.js';
6
8
  import type { InlineConfig, ResolvedConfig } from 'vite';
9
+ import { PageContextUrlInternal } from '../../shared/getPageContextUrlComputed.js';
7
10
  import type { APIOptions } from '../api/types.js';
11
+ type ProvidedByHook = null | {
12
+ hookFilePath: string;
13
+ hookName: 'onBeforePrerenderStart' | 'prerender';
14
+ };
15
+ type TransformerHook = {
16
+ hookFilePath: string;
17
+ hookName: 'onPrerenderStart' | 'onBeforePrerender';
18
+ };
19
+ type PageContextPrerendered = {
20
+ urlOriginal: string;
21
+ _providedByHook?: ProvidedByHook;
22
+ };
23
+ type PrerenderedPageContexts = Record<string, PageContextPrerendered>;
24
+ type PrerenderContext = {
25
+ pageContexts: PageContext[];
26
+ pageContextInit: Record<string, unknown> | null;
27
+ noExtraDir: boolean;
28
+ prerenderedPageContexts: PrerenderedPageContexts;
29
+ output: Output;
30
+ };
31
+ type Output = {
32
+ filePath: string;
33
+ fileType: FileType;
34
+ fileContent: string;
35
+ pageContext: PageContextPrerendered;
36
+ }[];
37
+ type FileType = 'HTML' | 'JSON';
38
+ type PrerenderContextPublic = Pick<PrerenderContext, 'pageContexts'>;
39
+ type PageContext = PageContextInitEnhanced & {
40
+ _urlRewrite: null;
41
+ _urlHandler: null;
42
+ _urlOriginalBeforeHook?: string;
43
+ _urlOriginalModifiedByHook?: TransformerHook;
44
+ _providedByHook: ProvidedByHook;
45
+ _pageContextAlreadyProvidedByOnPrerenderHook?: true;
46
+ } & PageContextUrlInternal;
8
47
  type PrerenderOptions = APIOptions & {
9
48
  /** Initial `pageContext` values */
10
49
  pageContextInit?: Record<string, unknown>;
@@ -29,5 +68,7 @@ declare function runPrerenderFromAPI(options?: PrerenderOptions): Promise<{
29
68
  viteConfig: ResolvedConfig;
30
69
  }>;
31
70
  declare function runPrerenderFromCLIPrerenderCommand(): Promise<void>;
32
- declare function runPrerenderFromAutoRun(viteConfig: InlineConfig | undefined): Promise<void>;
71
+ declare function runPrerenderFromAutoRun(viteConfig: InlineConfig | undefined): Promise<{
72
+ prerenderContextPublic: PrerenderContextPublic;
73
+ }>;
33
74
  declare function runPrerender_forceExit(): void;
@@ -4,7 +4,7 @@ export { runPrerenderFromAutoRun };
4
4
  export { runPrerender_forceExit };
5
5
  import path from 'path';
6
6
  import { route } from '../../shared/route/index.js';
7
- import { assert, assertUsage, assertWarning, hasProp, projectInfo, objectAssign, isObjectWithKeys, isCallable, getOutDirs, isPropertyGetter, assertPosixPath, urlToFile, isPlainObject, pLimit, isArray, changeEnumerable, onSetupPrerender, isObject } from './utils.js';
7
+ import { assert, assertUsage, assertWarning, hasProp, projectInfo, objectAssign, isObjectWithKeys, isCallable, getOutDirs, isPropertyGetter, assertPosixPath, urlToFile, isPlainObject, pLimit, isArray, changeEnumerable, onSetupPrerender, isObject, makePublicCopy } from './utils.js';
8
8
  import { prerenderPage, prerender404Page, getPageContextInitEnhanced } from '../runtime/renderPage/renderPageAlreadyRouted.js';
9
9
  import pc from '@brillout/picocolors';
10
10
  import { cpus } from 'os';
@@ -27,6 +27,8 @@ import { logErrorHint } from '../runtime/renderPage/logErrorHint.js';
27
27
  import { executeHook, isUserHookError } from '../../shared/hooks/executeHook.js';
28
28
  import { getConfigValueBuildTime } from '../../shared/page-configs/getConfigValueBuildTime.js';
29
29
  import { prepareViteApiCall } from '../api/prepareViteApiCall.js';
30
+ import { setContextIsPrerendering } from './context.js';
31
+ import { resolvePrerenderConfig } from './resolvePrerenderConfig.js';
30
32
  async function runPrerenderFromAPI(options = {}) {
31
33
  return await runPrerender(options, 'prerender()');
32
34
  // - We purposely propagate the error to the user land, so that the error interrupts the user land. It's also, I guess, a nice-to-have that the user has control over the error.
@@ -46,16 +48,20 @@ async function runPrerenderFromCLIPrerenderCommand() {
46
48
  runPrerender_forceExit();
47
49
  }
48
50
  async function runPrerenderFromAutoRun(viteConfig) {
51
+ let prerenderContextPublic;
49
52
  try {
50
- await runPrerender({ viteConfig });
53
+ const ret = await runPrerender({ viteConfig });
54
+ prerenderContextPublic = ret.prerenderContextPublic;
51
55
  }
52
56
  catch (err) {
53
57
  console.error(err);
54
58
  logErrorHint(err);
55
59
  process.exit(1);
56
60
  }
61
+ return { prerenderContextPublic };
57
62
  }
58
63
  async function runPrerender(options = {}, standaloneTrigger) {
64
+ setContextIsPrerendering();
59
65
  checkOutdatedOptions(options);
60
66
  onSetupPrerender();
61
67
  setGlobalContext_isPrerendering();
@@ -69,7 +75,7 @@ async function runPrerender(options = {}, standaloneTrigger) {
69
75
  const vikeConfig = await getVikeConfig(viteConfig);
70
76
  const { outDirClient } = getOutDirs(viteConfig);
71
77
  const { root } = viteConfig;
72
- const prerenderConfig = vikeConfig.vikeConfigGlobal.prerender;
78
+ const prerenderConfig = resolvePrerenderConfig(vikeConfig.global.config.prerender);
73
79
  validatePrerenderConfig(prerenderConfig);
74
80
  if (!prerenderConfig) {
75
81
  assert(standaloneTrigger);
@@ -82,43 +88,48 @@ async function runPrerender(options = {}, standaloneTrigger) {
82
88
  await initGlobalContext_runPrerender();
83
89
  const globalContext = getGlobalContext();
84
90
  globalContext.pageFilesAll.forEach(assertExportNames);
85
- const prerenderContext = {};
86
- objectAssign(prerenderContext, {
87
- _urlHandler: null,
88
- _noExtraDir: noExtraDir ?? false,
91
+ const prerenderContext = {
92
+ noExtraDir: noExtraDir ?? false,
89
93
  pageContexts: [],
90
- pageContextInit: options.pageContextInit ?? null
91
- });
94
+ pageContextInit: options.pageContextInit ?? null,
95
+ prerenderedPageContexts: {},
96
+ output: []
97
+ };
92
98
  const doNotPrerenderList = [];
93
99
  await collectDoNoPrerenderList(vikeConfig.pageConfigs, doNotPrerenderList, concurrencyLimit);
94
100
  await callOnBeforePrerenderStartHooks(prerenderContext, concurrencyLimit, doNotPrerenderList);
95
101
  await handlePagesWithStaticRoutes(prerenderContext, doNotPrerenderList, concurrencyLimit);
96
102
  await callOnPrerenderStartHook(prerenderContext);
97
- const prerenderedPageContexts = {};
98
103
  let prerenderedCount = 0;
104
+ // Write files as soon as pages finish rendering (instead of writing all files at once only after all pages have rendered).
99
105
  const onComplete = async (htmlFile) => {
100
106
  prerenderedCount++;
101
107
  if (htmlFile.pageId) {
102
- prerenderedPageContexts[htmlFile.pageId] = htmlFile.pageContext;
108
+ prerenderContext.prerenderedPageContexts[htmlFile.pageId] = htmlFile.pageContext;
103
109
  }
104
- await writeFiles(htmlFile, root, outDirClient, options.onPagePrerender, logLevel);
110
+ await writeFiles(htmlFile, root, outDirClient, options.onPagePrerender, prerenderContext.output, logLevel);
105
111
  };
106
112
  await routeAndPrerender(prerenderContext, concurrencyLimit, onComplete);
107
- warnContradictoryNoPrerenderList(prerenderedPageContexts, doNotPrerenderList);
108
- await prerender404(prerenderedPageContexts, prerenderContext, onComplete);
113
+ warnContradictoryNoPrerenderList(prerenderContext.prerenderedPageContexts, doNotPrerenderList);
114
+ await prerender404(prerenderContext, onComplete);
109
115
  if (logLevel === 'info') {
110
116
  console.log(`${pc.green(`✓`)} ${prerenderedCount} HTML documents pre-rendered.`);
111
117
  }
112
- warnMissingPages(prerenderedPageContexts, doNotPrerenderList, partial);
113
- return { viteConfig };
118
+ warnMissingPages(prerenderContext.prerenderedPageContexts, doNotPrerenderList, partial);
119
+ const prerenderContextPublic = makePublic(prerenderContext);
120
+ return { viteConfig, prerenderContextPublic };
114
121
  }
115
122
  async function collectDoNoPrerenderList(pageConfigs, doNotPrerenderList, concurrencyLimit) {
116
123
  // V1 design
117
124
  pageConfigs.forEach((pageConfig) => {
118
125
  const configName = 'prerender';
119
- const configValue = getConfigValueBuildTime(pageConfig, configName, 'boolean');
120
- if (configValue?.value === false) {
121
- const configValueFilePathToShowToUser = getConfigValueFilePathToShowToUser(configValue.definedAtData);
126
+ const configValue = getConfigValueBuildTime(pageConfig, configName);
127
+ if (!configValue)
128
+ return;
129
+ assert(hasProp(configValue, 'value', 'array'));
130
+ if (configValue.value[0] === false) {
131
+ assert(isArray(configValue.definedAtData));
132
+ const configValueFilePathToShowToUser = getConfigValueFilePathToShowToUser(configValue.definedAtData[0]);
122
133
  assert(configValueFilePathToShowToUser);
123
134
  doNotPrerenderList.push({
124
135
  pageId: pageConfig.pageId,
@@ -301,7 +312,7 @@ function createPageContext(urlOriginal, prerenderContext) {
301
312
  const pageContext = {
302
313
  _urlHandler: null,
303
314
  _urlRewrite: null,
304
- _noExtraDir: prerenderContext._noExtraDir,
315
+ _noExtraDir: prerenderContext.noExtraDir,
305
316
  _prerenderContext: prerenderContext
306
317
  };
307
318
  const pageContextInit = {
@@ -387,17 +398,20 @@ async function callOnPrerenderStartHook(prerenderContext) {
387
398
  const docLink = 'https://vike.dev/i18n#pre-rendering';
388
399
  // Set `enumerable` to `false` to avoid computed URL properties from being iterated & copied in onPrerenderStart() hook, e.g. /examples/i18n/
389
400
  const { restoreEnumerable, addPageContextComputedUrl } = makePageContextComputedUrlNonEnumerable(prerenderContext.pageContexts);
390
- let result = await executeHook(() => hookFn({
391
- pageContexts: prerenderContext.pageContexts,
401
+ let result = await executeHook(() => {
402
+ const prerenderContextPublic = makePublic(prerenderContext);
392
403
  // TODO/v1-release: remove warning
393
- get prerenderPageContexts() {
394
- assertWarning(false, `prerenderPageContexts has been renamed pageContexts, see ${docLink}`, {
395
- showStackTrace: true,
396
- onlyOnce: true
397
- });
398
- return prerenderContext.pageContexts;
399
- }
400
- }), onPrerenderStartHook, null);
404
+ Object.defineProperty(prerenderContextPublic, 'prerenderPageContexts', {
405
+ get() {
406
+ assertWarning(false, `prerenderPageContexts has been renamed pageContexts, see ${docLink}`, {
407
+ showStackTrace: true,
408
+ onlyOnce: true
409
+ });
410
+ return prerenderContext.pageContexts;
411
+ }
412
+ });
413
+ return hookFn(prerenderContextPublic);
414
+ }, onPrerenderStartHook, null);
401
415
  restoreEnumerable();
402
416
  if (result === null || result === undefined) {
403
417
  return;
@@ -504,7 +518,7 @@ async function routeAndPrerender(prerenderContext, concurrencyLimit, onComplete)
504
518
  pageContext,
505
519
  htmlString: documentHtml,
506
520
  pageContextSerialized,
507
- doNotCreateExtraDirectory: prerenderContext._noExtraDir,
521
+ doNotCreateExtraDirectory: prerenderContext.noExtraDir,
508
522
  pageId
509
523
  });
510
524
  })));
@@ -539,8 +553,8 @@ function warnMissingPages(prerenderedPageContexts, doNotPrerenderList, partial)
539
553
  assertWarning(partial, `Cannot pre-render page ${pageAt} because it has a non-static route, while no ${hookName}() hook returned any URL matching the page's route. You need to use a ${hookName}() hook (https://vike.dev/${hookName}) providing a list of URLs for ${pageAt} that should be pre-rendered. If you don't want to pre-render ${pageAt} then use the option prerender.partial (https://vike.dev/prerender#partial) to suppress this warning.`, { onlyOnce: true });
540
554
  });
541
555
  }
542
- async function prerender404(prerenderedPageContexts, prerenderContext, onComplete) {
543
- if (!Object.values(prerenderedPageContexts).find(({ urlOriginal }) => urlOriginal === '/404')) {
556
+ async function prerender404(prerenderContext, onComplete) {
557
+ if (!Object.values(prerenderContext.prerenderedPageContexts).find(({ urlOriginal }) => urlOriginal === '/404')) {
544
558
  let result;
545
559
  try {
546
560
  result = await prerender404Page(prerenderContext.pageContextInit);
@@ -563,22 +577,23 @@ async function prerender404(prerenderedPageContexts, prerenderContext, onComplet
563
577
  }
564
578
  }
565
579
  }
566
- async function writeFiles({ urlOriginal, pageContext, htmlString, pageContextSerialized, doNotCreateExtraDirectory }, root, outDirClient, onPagePrerender, logLevel) {
580
+ async function writeFiles({ urlOriginal, pageContext, htmlString, pageContextSerialized, doNotCreateExtraDirectory }, root, outDirClient, onPagePrerender, output, logLevel) {
567
581
  assert(urlOriginal.startsWith('/'));
568
582
  const writeJobs = [
569
- write(urlOriginal, pageContext, '.html', htmlString, root, outDirClient, doNotCreateExtraDirectory, onPagePrerender, logLevel)
583
+ write(urlOriginal, pageContext, 'HTML', htmlString, root, outDirClient, doNotCreateExtraDirectory, onPagePrerender, output, logLevel)
570
584
  ];
571
585
  if (pageContextSerialized !== null) {
572
- writeJobs.push(write(urlOriginal, pageContext, '.pageContext.json', pageContextSerialized, root, outDirClient, doNotCreateExtraDirectory, onPagePrerender, logLevel));
586
+ writeJobs.push(write(urlOriginal, pageContext, 'JSON', pageContextSerialized, root, outDirClient, doNotCreateExtraDirectory, onPagePrerender, output, logLevel));
573
587
  }
574
588
  await Promise.all(writeJobs);
575
589
  }
576
- async function write(urlOriginal, pageContext, fileExtension, fileContent, root, outDirClient, doNotCreateExtraDirectory, onPagePrerender, logLevel) {
590
+ async function write(urlOriginal, pageContext, fileType, fileContent, root, outDirClient, doNotCreateExtraDirectory, onPagePrerender, output, logLevel) {
577
591
  let fileUrl;
578
- if (fileExtension === '.html') {
592
+ if (fileType === 'HTML') {
579
593
  fileUrl = urlToFile(urlOriginal, '.html', doNotCreateExtraDirectory);
580
594
  }
581
595
  else {
596
+ assert(fileType === 'JSON');
582
597
  fileUrl = getPageContextRequestUrl(urlOriginal);
583
598
  }
584
599
  assertPosixPath(fileUrl);
@@ -590,6 +605,12 @@ async function write(urlOriginal, pageContext, fileExtension, fileContent, root,
590
605
  assertPosixPath(outDirClient);
591
606
  assertPosixPath(filePathRelative);
592
607
  const filePath = path.posix.join(outDirClient, filePathRelative);
608
+ output.push({
609
+ filePath,
610
+ fileType,
611
+ fileContent,
612
+ pageContext
613
+ });
593
614
  if (onPagePrerender) {
594
615
  const prerenderPageContext = {};
595
616
  objectAssign(prerenderPageContext, pageContext);
@@ -758,3 +779,9 @@ prerenderConfig) {
758
779
  assertUsage(false, `Setting ${pc.cyan(`prerender.${prop}`)} ${errMsg}`);
759
780
  }
760
781
  }
782
+ function makePublic(prerenderContext) {
783
+ const prerenderContextPublic = makePublicCopy(prerenderContext, 'prerenderContext', [
784
+ 'pageContexts'
785
+ ]);
786
+ return prerenderContextPublic;
787
+ }
@@ -4,9 +4,9 @@ export * from '../../utils/projectInfo.js';
4
4
  export * from '../../utils/objectAssign.js';
5
5
  export * from '../../utils/isObjectWithKeys.js';
6
6
  export * from '../../utils/isCallable.js';
7
- export * from '../../utils/getOutDirs.js';
7
+ export * from '../plugin/getOutDirs.js';
8
8
  export * from '../../utils/isPropertyGetter.js';
9
- export * from '../../utils/filesystemPathHandling.js';
9
+ export * from '../../utils/toPosixPath.js';
10
10
  export * from '../../utils/urlToFile.js';
11
11
  export * from '../../utils/isPlainObject.js';
12
12
  export * from '../../utils/assertSetup.js';
@@ -15,3 +15,4 @@ export * from '../../utils/isFilePathAbsoluteFilesystem.js';
15
15
  export * from '../../utils/isArray.js';
16
16
  export * from '../../utils/isObject.js';
17
17
  export * from '../../utils/changeEnumerable.js';
18
+ export * from '../../utils/makePublicCopy.js';
@@ -6,9 +6,9 @@ export * from '../../utils/projectInfo.js';
6
6
  export * from '../../utils/objectAssign.js';
7
7
  export * from '../../utils/isObjectWithKeys.js';
8
8
  export * from '../../utils/isCallable.js';
9
- export * from '../../utils/getOutDirs.js';
9
+ export * from '../plugin/getOutDirs.js';
10
10
  export * from '../../utils/isPropertyGetter.js';
11
- export * from '../../utils/filesystemPathHandling.js';
11
+ export * from '../../utils/toPosixPath.js';
12
12
  export * from '../../utils/urlToFile.js';
13
13
  export * from '../../utils/isPlainObject.js';
14
14
  export * from '../../utils/assertSetup.js';
@@ -17,3 +17,4 @@ export * from '../../utils/isFilePathAbsoluteFilesystem.js';
17
17
  export * from '../../utils/isArray.js';
18
18
  export * from '../../utils/isObject.js';
19
19
  export * from '../../utils/changeEnumerable.js';
20
+ export * from '../../utils/makePublicCopy.js';
@@ -3,7 +3,6 @@ export { getGlobalContextAsync };
3
3
  export { getGlobalContext };
4
4
  export { getViteDevServer };
5
5
  export { getViteConfig };
6
- export { getRuntimeManifest };
7
6
  export { initGlobalContext_renderPage };
8
7
  export { initGlobalContext_runPrerender };
9
8
  export { initGlobalContext_getGlobalContextAsync };
@@ -14,10 +13,11 @@ export { setGlobalContext_isViteDev };
14
13
  export { setGlobalContext_isPrerendering };
15
14
  export { setGlobalContext_buildEntry };
16
15
  export { clearGlobalContext };
16
+ export { assertBuildInfo };
17
+ export { getViteConfigRuntime };
18
+ export type { BuildInfo };
17
19
  import type { ViteManifest } from '../shared/ViteManifest.js';
18
20
  import type { ResolvedConfig, ViteDevServer } from 'vite';
19
- import type { VikeConfigGlobal } from '../plugin/plugins/importUserCode/v1-design/getVikeConfig.js';
20
- import { type RuntimeManifest } from '../shared/assertRuntimeManifest.js';
21
21
  import type { VikeConfigObject } from '../plugin/plugins/importUserCode/v1-design/getVikeConfig.js';
22
22
  import type { ConfigUserFriendly } from '../../shared/page-configs/getPageConfigUserFriendly.js';
23
23
  type GlobalContextPublic = {
@@ -25,11 +25,9 @@ type GlobalContextPublic = {
25
25
  };
26
26
  type PageRuntimeInfo = Awaited<ReturnType<typeof getPageRuntimeInfo>>['userFiles'];
27
27
  type GlobalContext = {
28
- baseServer: string;
29
- baseAssets: null | string;
30
- includeAssetsImportedByServer: boolean;
31
- trailingSlash: boolean;
32
- disableUrlNormalization: boolean;
28
+ viteConfigRuntime: {
29
+ _baseViteOriginal: null | string;
30
+ };
33
31
  vikeConfig: {
34
32
  global: ConfigUserFriendly;
35
33
  };
@@ -77,6 +75,14 @@ declare function getPageRuntimeInfo(isProduction: boolean): Promise<{
77
75
  };
78
76
  globalConfig: ConfigUserFriendly;
79
77
  }>;
80
- declare function getRuntimeManifest(vikeConfigGlobal: VikeConfigGlobal, viteConfig: ResolvedConfig): RuntimeManifest;
81
78
  declare function setGlobalContext_buildEntry(buildEntry: unknown): void;
79
+ type BuildInfo = {
80
+ versionAtBuildTime: string;
81
+ usesClientRouter: boolean;
82
+ viteConfigRuntime: {
83
+ _baseViteOriginal: string;
84
+ };
85
+ };
86
+ declare function assertBuildInfo(buildInfo: unknown): asserts buildInfo is BuildInfo;
87
+ declare function getViteConfigRuntime(viteConfig: ResolvedConfig): BuildInfo['viteConfigRuntime'];
82
88
  declare function clearGlobalContext(): void;
@@ -5,7 +5,6 @@ export { getGlobalContextAsync };
5
5
  export { getGlobalContext };
6
6
  export { getViteDevServer };
7
7
  export { getViteConfig };
8
- export { getRuntimeManifest };
9
8
  export { initGlobalContext_renderPage };
10
9
  export { initGlobalContext_runPrerender };
11
10
  export { initGlobalContext_getGlobalContextAsync };
@@ -16,14 +15,13 @@ export { setGlobalContext_isViteDev };
16
15
  export { setGlobalContext_isPrerendering };
17
16
  export { setGlobalContext_buildEntry };
18
17
  export { clearGlobalContext };
19
- import { assert, onSetupRuntime, assertUsage, assertWarning, isPlainObject, objectAssign, objectReplace, objectKeys, isObject, hasProp, debugGlob, getGlobalObject, genPromise, createDebugger } from './utils.js';
18
+ export { assertBuildInfo };
19
+ export { getViteConfigRuntime };
20
+ import { assert, onSetupRuntime, assertUsage, assertWarning, isPlainObject, objectAssign, objectReplace, isObject, hasProp, debugGlob, getGlobalObject, genPromise, createDebugger, makePublicCopy, projectInfo, checkType } from './utils.js';
20
21
  import { importServerProductionEntry } from '@brillout/vite-plugin-server-entry/runtime';
21
22
  import { virtualFileIdImportUserCodeServer } from '../shared/virtual-files/virtualFileImportUserCode.js';
22
23
  import { getPageFilesAll, setPageFiles, setPageFilesAsync } from '../../shared/getPageFiles/getPageFiles.js';
23
- import { assertPluginManifest } from '../shared/assertPluginManifest.js';
24
- import { assertRuntimeManifest } from '../shared/assertRuntimeManifest.js';
25
24
  import pc from '@brillout/picocolors';
26
- import { resolveBaseFromResolvedConfig } from '../shared/resolveBase.js';
27
25
  import { loadPageRoutes } from '../../shared/route/loadPageRoutes.js';
28
26
  import { assertV1Design } from '../shared/assertV1Design.js';
29
27
  const debug = createDebugger('vike:globalContext');
@@ -50,28 +48,8 @@ async function getGlobalContextAsync(isProduction) {
50
48
  return makePublic(globalContext);
51
49
  }
52
50
  function makePublic(globalContext) {
53
- const globalContextPublic = {
54
- // TODO/now: add viteConfig and vikeConfig
55
- assetsManifest: globalContext.assetsManifest
56
- };
57
- // Add internals (and prepended _ prefix to their keys)
58
- {
59
- const publicKeys = Object.keys(globalContextPublic);
60
- objectKeys(globalContext)
61
- .filter((key) => !publicKeys.includes(key))
62
- .forEach((key) => {
63
- const keyPublic = `_${key}`;
64
- Object.defineProperty(globalContextPublic, keyPublic, {
65
- enumerable: true,
66
- get() {
67
- assertWarning(false, `Using internal globalContext.${keyPublic} which is discouraged: it may break in any minor version update. Instead, reach out on GitHub and elaborate your use case.`, {
68
- onlyOnce: true
69
- });
70
- return globalContext[key];
71
- }
72
- });
73
- });
74
- }
51
+ // TODO/now: add viteConfig and vikeConfig
52
+ const globalContextPublic = makePublicCopy(globalContext, 'globalContext', ['assetsManifest']);
75
53
  return globalContextPublic;
76
54
  }
77
55
  function setGlobalContext_viteDevServer(viteDevServer) {
@@ -161,7 +139,7 @@ async function initGlobalContext(isProduction) {
161
139
  assert(viteDevServer);
162
140
  assert(!isPrerendering);
163
141
  const { globalConfig, userFiles } = await getPageRuntimeInfo(isProduction);
164
- const pluginManifest = getRuntimeManifest(vikeConfig.vikeConfigGlobal, viteConfig);
142
+ const viteConfigRuntime = getViteConfigRuntime(viteConfig);
165
143
  globalObject.globalContext = {
166
144
  isProduction: false,
167
145
  isPrerendering: false,
@@ -172,20 +150,14 @@ async function initGlobalContext(isProduction) {
172
150
  global: globalConfig
173
151
  },
174
152
  ...userFiles,
175
- baseServer: pluginManifest.baseServer,
176
- baseAssets: pluginManifest.baseAssets,
177
- includeAssetsImportedByServer: pluginManifest.includeAssetsImportedByServer,
178
- trailingSlash: pluginManifest.trailingSlash,
179
- disableUrlNormalization: pluginManifest.disableUrlNormalization
153
+ viteConfigRuntime
180
154
  };
181
155
  }
182
156
  else {
183
157
  const buildEntry = await getBuildEntry(globalObject.outDirRoot, isPrerendering);
184
- const { assetsManifest, pluginManifest } = buildEntry;
158
+ const { assetsManifest, buildInfo } = buildEntry;
185
159
  setPageFiles(buildEntry.pageFiles);
186
160
  const { globalConfig, userFiles } = await getPageRuntimeInfo(isProduction);
187
- assertViteManifest(assetsManifest);
188
- assertPluginManifest(pluginManifest);
189
161
  const globalContext = {
190
162
  isProduction: true,
191
163
  assetsManifest,
@@ -194,12 +166,8 @@ async function initGlobalContext(isProduction) {
194
166
  },
195
167
  ...userFiles,
196
168
  viteDevServer: null,
197
- baseServer: pluginManifest.baseServer,
198
- baseAssets: pluginManifest.baseAssets,
199
- includeAssetsImportedByServer: pluginManifest.includeAssetsImportedByServer,
200
- trailingSlash: pluginManifest.trailingSlash,
201
- usesClientRouter: pluginManifest.usesClientRouter,
202
- disableUrlNormalization: pluginManifest.disableUrlNormalization
169
+ viteConfigRuntime: buildInfo.viteConfigRuntime,
170
+ usesClientRouter: buildInfo.usesClientRouter
203
171
  };
204
172
  if (isPrerendering) {
205
173
  assert(viteConfig);
@@ -234,19 +202,6 @@ async function getPageRuntimeInfo(isProduction) {
234
202
  pageConfigs.length > 0, pageFilesAll);
235
203
  return { userFiles, globalConfig };
236
204
  }
237
- function getRuntimeManifest(vikeConfigGlobal, viteConfig) {
238
- const { includeAssetsImportedByServer, trailingSlash, disableUrlNormalization } = vikeConfigGlobal;
239
- const { baseServer, baseAssets } = resolveBaseFromResolvedConfig(vikeConfigGlobal.baseServer, vikeConfigGlobal.baseAssets, viteConfig);
240
- const manifest = {
241
- baseServer,
242
- baseAssets,
243
- includeAssetsImportedByServer,
244
- trailingSlash,
245
- disableUrlNormalization
246
- };
247
- assertRuntimeManifest(manifest);
248
- return manifest;
249
- }
250
205
  function assertViteManifest(manifest) {
251
206
  assert(isPlainObject(manifest));
252
207
  /* We should include these assertions but we don't as a workaround for PWA manifests: https://github.com/vikejs/vike/issues/769
@@ -279,17 +234,48 @@ async function getBuildEntry(outDir, isPrerendering) {
279
234
  assert(globalObject.buildEntry);
280
235
  }
281
236
  const { buildEntry } = globalObject;
282
- assert(isObject(buildEntry));
283
- assert(hasProp(buildEntry, 'pageFiles', 'object'));
284
- assert(hasProp(buildEntry, 'assetsManifest', 'object'));
285
- assert(hasProp(buildEntry, 'pluginManifest', 'object'));
237
+ assertBuildEntry(buildEntry);
286
238
  return buildEntry;
287
239
  }
288
240
  function setGlobalContext_buildEntry(buildEntry) {
289
241
  debug('setGlobalContext_buildEntry()');
242
+ assertBuildEntry(buildEntry);
290
243
  globalObject.buildEntry = buildEntry;
291
244
  globalObject.buildEntryPrevious = buildEntry;
292
245
  }
246
+ function assertBuildEntry(buildEntry) {
247
+ assert(isObject(buildEntry));
248
+ assert(hasProp(buildEntry, 'pageFiles', 'object'));
249
+ const { pageFiles } = buildEntry;
250
+ assert(hasProp(buildEntry, 'assetsManifest', 'object'));
251
+ const { assetsManifest } = buildEntry;
252
+ assertViteManifest(assetsManifest);
253
+ assert(hasProp(buildEntry, 'buildInfo', 'object'));
254
+ const { buildInfo } = buildEntry;
255
+ assertBuildInfo(buildInfo);
256
+ checkType({ pageFiles, assetsManifest, buildInfo });
257
+ }
258
+ function assertBuildInfo(buildInfo) {
259
+ assert(isObject(buildInfo));
260
+ assert(hasProp(buildInfo, 'versionAtBuildTime', 'string'));
261
+ assertVersionAtBuildTime(buildInfo.versionAtBuildTime);
262
+ assert(hasProp(buildInfo, 'viteConfigRuntime', 'object'));
263
+ assert(hasProp(buildInfo.viteConfigRuntime, '_baseViteOriginal', 'string'));
264
+ assert(hasProp(buildInfo, 'usesClientRouter', 'boolean'));
265
+ checkType({ ...buildInfo, viteConfigRuntime: buildInfo.viteConfigRuntime });
266
+ }
267
+ function assertVersionAtBuildTime(versionAtBuildTime) {
268
+ const versionAtRuntime = projectInfo.projectVersion;
269
+ const pretty = (version) => pc.bold(`vike@${version}`);
270
+ assertUsage(versionAtBuildTime === versionAtRuntime, `Re-build your app (you're using ${pretty(versionAtRuntime)} but your app was built with ${pretty(versionAtBuildTime)})`);
271
+ }
272
+ function getViteConfigRuntime(viteConfig) {
273
+ assert(hasProp(viteConfig, '_baseViteOriginal', 'string'));
274
+ const viteConfigRuntime = {
275
+ _baseViteOriginal: viteConfig._baseViteOriginal
276
+ };
277
+ return viteConfigRuntime;
278
+ }
293
279
  function initDevEntry() {
294
280
  setPageFilesAsync(getPageFilesExports);
295
281
  }
@@ -1,3 +1,3 @@
1
1
  export {};
2
- // TODO/v1-release: remove
2
+ // TODO/v1-release: remove https://github.com/vikejs/vike/issues/2122
3
3
  // This doesn't do anything anymore. (It's kept to avoid introducing a breaking change.)
@@ -37,7 +37,7 @@ declare function prerenderPage(pageContext: PageContextInitEnhanced & PageFiles
37
37
  } & {
38
38
  _objectCreatedByVike: boolean;
39
39
  _baseServer: string;
40
- _baseAssets: string | null;
40
+ _baseAssets: string;
41
41
  _includeAssetsImportedByServer: boolean;
42
42
  _pageFilesAll: import("../../../shared/getPageFiles.js").PageFile[];
43
43
  _pageConfigs: import("../../../__internal/index.js").PageConfig[];
@@ -88,7 +88,7 @@ declare function prerenderPage(pageContext: PageContextInitEnhanced & PageFiles
88
88
  } & {
89
89
  _objectCreatedByVike: boolean;
90
90
  _baseServer: string;
91
- _baseAssets: string | null;
91
+ _baseAssets: string;
92
92
  _includeAssetsImportedByServer: boolean;
93
93
  _pageFilesAll: import("../../../shared/getPageFiles.js").PageFile[];
94
94
  _pageConfigs: import("../../../__internal/index.js").PageConfig[];
@@ -140,7 +140,7 @@ declare function prerender404Page(pageContextInit_: Record<string, unknown> | nu
140
140
  } & {
141
141
  _objectCreatedByVike: boolean;
142
142
  _baseServer: string;
143
- _baseAssets: string | null;
143
+ _baseAssets: string;
144
144
  _includeAssetsImportedByServer: boolean;
145
145
  _pageFilesAll: import("../../../shared/getPageFiles.js").PageFile[];
146
146
  _pageConfigs: import("../../../__internal/index.js").PageConfig[];
@@ -191,7 +191,7 @@ declare function prerender404Page(pageContextInit_: Record<string, unknown> | nu
191
191
  } & {
192
192
  _objectCreatedByVike: boolean;
193
193
  _baseServer: string;
194
- _baseAssets: string | null;
194
+ _baseAssets: string;
195
195
  _includeAssetsImportedByServer: boolean;
196
196
  _pageFilesAll: import("../../../shared/getPageFiles.js").PageFile[];
197
197
  _pageConfigs: import("../../../__internal/index.js").PageConfig[];
@@ -251,7 +251,7 @@ declare function getPageContextInitEnhanced(pageContextInit: {
251
251
  } & {
252
252
  _objectCreatedByVike: boolean;
253
253
  _baseServer: string;
254
- _baseAssets: string | null;
254
+ _baseAssets: string;
255
255
  _includeAssetsImportedByServer: boolean;
256
256
  _pageFilesAll: import("../../../shared/getPageFiles.js").PageFile[];
257
257
  _pageConfigs: import("../../../__internal/index.js").PageConfig[];
@@ -18,6 +18,7 @@ import { preparePageContextForUserConsumptionServerSide } from './preparePageCon
18
18
  import { executeGuardHook } from '../../../shared/route/executeGuardHook.js';
19
19
  import pc from '@brillout/picocolors';
20
20
  import { isServerSideError } from '../../../shared/misc/isServerSideError.js';
21
+ import { resolveBaseRuntime } from '../../shared/resolveBase.js';
21
22
  async function renderPageAlreadyRouted(pageContext) {
22
23
  // pageContext.pageId can either be the:
23
24
  // - ID of the page matching the routing, or the
@@ -114,14 +115,16 @@ function getPageContextInitEnhanced(pageContextInit, { ssr: { urlRewrite, urlHan
114
115
  } } = {}) {
115
116
  assert(pageContextInit.urlOriginal);
116
117
  const globalContext = getGlobalContext();
118
+ const { baseServer, baseAssets } = resolveBaseRuntime();
117
119
  const pageContextInitEnhanced = {};
118
120
  objectAssign(pageContextInitEnhanced, pageContextInit);
119
121
  objectAssign(pageContextInitEnhanced, {
120
122
  _objectCreatedByVike: true,
121
123
  // The following is defined on `pageContext` because we can eventually make these non-global
122
- _baseServer: globalContext.baseServer,
123
- _baseAssets: globalContext.baseAssets,
124
- _includeAssetsImportedByServer: globalContext.includeAssetsImportedByServer,
124
+ _baseServer: baseServer,
125
+ _baseAssets: baseAssets,
126
+ // TODO/now: add meta.default
127
+ _includeAssetsImportedByServer: globalContext.vikeConfig.global.config.includeAssetsImportedByServer ?? true,
125
128
  // TODO: use GloablContext instead
126
129
  _pageFilesAll: globalContext.pageFilesAll,
127
130
  _pageConfigs: globalContext.pageConfigs,
@@ -1,4 +1,6 @@
1
1
  export { resolveRedirects };
2
2
  export { resolveRouteStringRedirect };
3
+ export { redirectsErrPrefix };
4
+ declare const redirectsErrPrefix = "[+redirects]";
3
5
  declare function resolveRedirects(redirectsAll: Record<string, string>[], urlPathname: string): null | string;
4
6
  declare function resolveRouteStringRedirect(urlSource: string, urlTarget: string, urlPathname: string): null | string;