vike 0.4.218-commit-ed9b3d4 → 0.4.218-commit-ea8bb27

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 (60) hide show
  1. package/dist/cjs/__internal/index.js +2 -3
  2. package/dist/cjs/node/api/prepareViteApiCall.js +1 -2
  3. package/dist/cjs/node/plugin/index.js +1 -1
  4. package/dist/cjs/node/plugin/plugins/baseUrls.js +3 -10
  5. package/dist/cjs/node/plugin/plugins/commonConfig.js +14 -3
  6. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +26 -22
  7. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +111 -181
  8. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigValuesAll.js +1 -1
  9. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.js +2 -2
  10. package/dist/cjs/node/prerender/runPrerender.js +73 -32
  11. package/dist/cjs/node/prerender/utils.js +1 -0
  12. package/dist/cjs/node/runtime/globalContext.js +31 -5
  13. package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +11 -33
  14. package/dist/cjs/node/runtime/renderPage/resolveRedirects.js +9 -1
  15. package/dist/cjs/node/runtime/renderPage.js +21 -22
  16. package/dist/cjs/node/shared/assertRuntimeManifest.js +0 -2
  17. package/dist/cjs/shared/getPageFiles/getPageFiles.js +6 -3
  18. package/dist/cjs/shared/page-configs/getPageConfigUserFriendly.js +2 -2
  19. package/dist/cjs/shared/page-configs/serialize/serializeConfigValues.js +4 -4
  20. package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
  21. package/dist/esm/__internal/index.js +2 -3
  22. package/dist/esm/client/client-routing-runtime/createPageContext.js +1 -4
  23. package/dist/esm/client/server-routing-runtime/getPageContext.js +1 -4
  24. package/dist/esm/node/api/prepareViteApiCall.js +1 -2
  25. package/dist/esm/node/plugin/index.js +1 -1
  26. package/dist/esm/node/plugin/plugins/baseUrls.d.ts +1 -1
  27. package/dist/esm/node/plugin/plugins/baseUrls.js +4 -11
  28. package/dist/esm/node/plugin/plugins/commonConfig.d.ts +3 -0
  29. package/dist/esm/node/plugin/plugins/commonConfig.js +14 -3
  30. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.d.ts +6 -9
  31. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +25 -21
  32. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.d.ts +1 -4
  33. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +108 -178
  34. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigValuesAll.js +1 -1
  35. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.js +2 -2
  36. package/dist/esm/node/prerender/runPrerender.js +75 -34
  37. package/dist/esm/node/prerender/utils.d.ts +1 -0
  38. package/dist/esm/node/prerender/utils.js +1 -0
  39. package/dist/esm/node/runtime/globalContext.d.ts +17 -3
  40. package/dist/esm/node/runtime/globalContext.js +32 -6
  41. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +27 -42
  42. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +11 -33
  43. package/dist/esm/node/runtime/renderPage/resolveRedirects.d.ts +1 -1
  44. package/dist/esm/node/runtime/renderPage/resolveRedirects.js +9 -1
  45. package/dist/esm/node/runtime/renderPage.js +22 -23
  46. package/dist/esm/node/shared/assertPluginManifest.d.ts +0 -1
  47. package/dist/esm/node/shared/assertRuntimeManifest.d.ts +0 -1
  48. package/dist/esm/node/shared/assertRuntimeManifest.js +1 -3
  49. package/dist/esm/shared/getPageFiles/getPageFiles.d.ts +2 -0
  50. package/dist/esm/shared/getPageFiles/getPageFiles.js +6 -3
  51. package/dist/esm/shared/page-configs/Config/PageContextConfig.d.ts +9 -5
  52. package/dist/esm/shared/page-configs/Config.d.ts +13 -1
  53. package/dist/esm/shared/page-configs/getPageConfigUserFriendly.d.ts +7 -4
  54. package/dist/esm/shared/page-configs/getPageConfigUserFriendly.js +2 -2
  55. package/dist/esm/shared/page-configs/serialize/serializeConfigValues.d.ts +2 -6
  56. package/dist/esm/shared/page-configs/serialize/serializeConfigValues.js +4 -4
  57. package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
  58. package/dist/esm/utils/PROJECT_VERSION.js +1 -1
  59. package/dist/esm/utils/projectInfo.d.ts +1 -1
  60. package/package.json +1 -1
@@ -13,4 +13,5 @@ export * from '../../utils/assertSetup.js';
13
13
  export * from '../../utils/pLimit.js';
14
14
  export * from '../../utils/isFilePathAbsoluteFilesystem.js';
15
15
  export * from '../../utils/isArray.js';
16
+ export * from '../../utils/isObject.js';
16
17
  export * from '../../utils/changeEnumerable.js';
@@ -15,4 +15,5 @@ export * from '../../utils/assertSetup.js';
15
15
  export * from '../../utils/pLimit.js';
16
16
  export * from '../../utils/isFilePathAbsoluteFilesystem.js';
17
17
  export * from '../../utils/isArray.js';
18
+ export * from '../../utils/isObject.js';
18
19
  export * from '../../utils/changeEnumerable.js';
@@ -19,21 +19,24 @@ import type { ResolvedConfig, ViteDevServer } from 'vite';
19
19
  import type { VikeConfigGlobal } from '../plugin/plugins/importUserCode/v1-design/getVikeConfig.js';
20
20
  import { type RuntimeManifest } from '../shared/assertRuntimeManifest.js';
21
21
  import type { VikeConfigObject } from '../plugin/plugins/importUserCode/v1-design/getVikeConfig.js';
22
+ import type { ConfigUserFriendly } from '../../shared/page-configs/getPageConfigUserFriendly.js';
22
23
  type GlobalContextPublic = {
23
24
  assetsManifest: null | ViteManifest;
24
25
  };
26
+ type PageRuntimeInfo = Awaited<ReturnType<typeof getPageRuntimeInfo>>['userFiles'];
25
27
  type GlobalContext = {
26
28
  baseServer: string;
27
29
  baseAssets: null | string;
28
30
  includeAssetsImportedByServer: boolean;
29
- redirects: Record<string, string>;
30
31
  trailingSlash: boolean;
31
32
  disableUrlNormalization: boolean;
32
- } & ({
33
+ vikeConfig: {
34
+ global: ConfigUserFriendly;
35
+ };
36
+ } & PageRuntimeInfo & ({
33
37
  isProduction: false;
34
38
  isPrerendering: false;
35
39
  viteConfig: ResolvedConfig;
36
- vikeConfig: VikeConfigObject;
37
40
  viteDevServer: ViteDevServer;
38
41
  assetsManifest: null;
39
42
  } | ({
@@ -63,6 +66,17 @@ declare function getViteConfig(): ResolvedConfig | null;
63
66
  declare function initGlobalContext_renderPage(): Promise<void>;
64
67
  declare function initGlobalContext_runPrerender(): Promise<void>;
65
68
  declare function initGlobalContext_getGlobalContextAsync(isProduction: boolean): Promise<void>;
69
+ declare function getPageRuntimeInfo(isProduction: boolean): Promise<{
70
+ userFiles: {
71
+ pageFilesAll: import("../../shared/getPageFiles.js").PageFile[];
72
+ pageConfigs: import("../../__internal/index.js").PageConfig[];
73
+ pageConfigGlobal: import("../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
74
+ allPageIds: string[];
75
+ pageRoutes: import("../../shared/route/loadPageRoutes.js").PageRoutes;
76
+ onBeforeRouteHook: import("../../shared/hooks/getHook.js").Hook | null;
77
+ };
78
+ globalConfig: ConfigUserFriendly;
79
+ }>;
66
80
  declare function getRuntimeManifest(vikeConfigGlobal: VikeConfigGlobal, viteConfig: ResolvedConfig): RuntimeManifest;
67
81
  declare function setGlobalContext_buildEntry(buildEntry: unknown): void;
68
82
  declare function clearGlobalContext(): void;
@@ -19,11 +19,13 @@ export { clearGlobalContext };
19
19
  import { assert, onSetupRuntime, assertUsage, assertWarning, isPlainObject, objectAssign, objectReplace, objectKeys, isObject, hasProp, debugGlob, getGlobalObject, genPromise, createDebugger } from './utils.js';
20
20
  import { importServerProductionEntry } from '@brillout/vite-plugin-server-entry/runtime';
21
21
  import { virtualFileIdImportUserCodeServer } from '../shared/virtual-files/virtualFileImportUserCode.js';
22
- import { setPageFiles, setPageFilesAsync } from '../../shared/getPageFiles/getPageFiles.js';
22
+ import { getPageFilesAll, setPageFiles, setPageFilesAsync } from '../../shared/getPageFiles/getPageFiles.js';
23
23
  import { assertPluginManifest } from '../shared/assertPluginManifest.js';
24
24
  import { assertRuntimeManifest } from '../shared/assertRuntimeManifest.js';
25
25
  import pc from '@brillout/picocolors';
26
26
  import { resolveBaseFromResolvedConfig } from '../shared/resolveBase.js';
27
+ import { loadPageRoutes } from '../../shared/route/loadPageRoutes.js';
28
+ import { assertV1Design } from '../shared/assertV1Design.js';
27
29
  const debug = createDebugger('vike:globalContext');
28
30
  const globalObject = getGlobalObject('globalContext.ts', getInitialGlobalContext());
29
31
  initDevEntry();
@@ -49,6 +51,7 @@ async function getGlobalContextAsync(isProduction) {
49
51
  }
50
52
  function makePublic(globalContext) {
51
53
  const globalContextPublic = {
54
+ // TODO/now: add viteConfig and vikeConfig
52
55
  assetsManifest: globalContext.assetsManifest
53
56
  };
54
57
  // Add internals (and prepended _ prefix to their keys)
@@ -142,6 +145,7 @@ async function initGlobalContext_getGlobalContextAsync(isProduction) {
142
145
  }
143
146
  await initGlobalContext(isProduction);
144
147
  }
148
+ // TODO/now: refactor: move this to the top of the file
145
149
  async function initGlobalContext(isProduction) {
146
150
  if (globalObject.globalContext) {
147
151
  assert(globalObject.globalContext.isProduction === isProduction);
@@ -156,6 +160,7 @@ async function initGlobalContext(isProduction) {
156
160
  assert(vikeConfig);
157
161
  assert(viteDevServer);
158
162
  assert(!isPrerendering);
163
+ const { globalConfig, userFiles } = await getPageRuntimeInfo(isProduction);
159
164
  const pluginManifest = getRuntimeManifest(vikeConfig.vikeConfigGlobal, viteConfig);
160
165
  globalObject.globalContext = {
161
166
  isProduction: false,
@@ -163,11 +168,13 @@ async function initGlobalContext(isProduction) {
163
168
  assetsManifest: null,
164
169
  viteDevServer,
165
170
  viteConfig,
166
- vikeConfig,
171
+ vikeConfig: {
172
+ global: globalConfig
173
+ },
174
+ ...userFiles,
167
175
  baseServer: pluginManifest.baseServer,
168
176
  baseAssets: pluginManifest.baseAssets,
169
177
  includeAssetsImportedByServer: pluginManifest.includeAssetsImportedByServer,
170
- redirects: pluginManifest.redirects,
171
178
  trailingSlash: pluginManifest.trailingSlash,
172
179
  disableUrlNormalization: pluginManifest.disableUrlNormalization
173
180
  };
@@ -176,16 +183,20 @@ async function initGlobalContext(isProduction) {
176
183
  const buildEntry = await getBuildEntry(globalObject.outDirRoot);
177
184
  const { assetsManifest, pluginManifest } = buildEntry;
178
185
  setPageFiles(buildEntry.pageFiles);
186
+ const { globalConfig, userFiles } = await getPageRuntimeInfo(isProduction);
179
187
  assertViteManifest(assetsManifest);
180
188
  assertPluginManifest(pluginManifest);
181
189
  const globalContext = {
182
190
  isProduction: true,
183
191
  assetsManifest,
192
+ vikeConfig: {
193
+ global: globalConfig
194
+ },
195
+ ...userFiles,
184
196
  viteDevServer: null,
185
197
  baseServer: pluginManifest.baseServer,
186
198
  baseAssets: pluginManifest.baseAssets,
187
199
  includeAssetsImportedByServer: pluginManifest.includeAssetsImportedByServer,
188
- redirects: pluginManifest.redirects,
189
200
  trailingSlash: pluginManifest.trailingSlash,
190
201
  usesClientRouter: pluginManifest.usesClientRouter,
191
202
  disableUrlNormalization: pluginManifest.disableUrlNormalization
@@ -207,14 +218,29 @@ async function initGlobalContext(isProduction) {
207
218
  }
208
219
  }
209
220
  }
221
+ async function getPageRuntimeInfo(isProduction) {
222
+ const { pageFilesAll, allPageIds, pageConfigs, pageConfigGlobal, globalConfig } = await getPageFilesAll(false, isProduction);
223
+ const { pageRoutes, onBeforeRouteHook } = await loadPageRoutes(pageFilesAll, pageConfigs, pageConfigGlobal, allPageIds);
224
+ const userFiles = {
225
+ pageFilesAll,
226
+ pageConfigs,
227
+ pageConfigGlobal,
228
+ allPageIds,
229
+ pageRoutes,
230
+ onBeforeRouteHook
231
+ };
232
+ assertV1Design(
233
+ // pageConfigs is PageConfigRuntime[] but assertV1Design() requires PageConfigBuildTime[]
234
+ pageConfigs.length > 0, pageFilesAll);
235
+ return { userFiles, globalConfig };
236
+ }
210
237
  function getRuntimeManifest(vikeConfigGlobal, viteConfig) {
211
- const { includeAssetsImportedByServer, redirects, trailingSlash, disableUrlNormalization } = vikeConfigGlobal;
238
+ const { includeAssetsImportedByServer, trailingSlash, disableUrlNormalization } = vikeConfigGlobal;
212
239
  const { baseServer, baseAssets } = resolveBaseFromResolvedConfig(vikeConfigGlobal.baseServer, vikeConfigGlobal.baseAssets, viteConfig);
213
240
  const manifest = {
214
241
  baseServer,
215
242
  baseAssets,
216
243
  includeAssetsImportedByServer,
217
- redirects,
218
244
  trailingSlash,
219
245
  disableUrlNormalization
220
246
  };
@@ -2,17 +2,11 @@ export { renderPageAlreadyRouted };
2
2
  export { prerenderPage };
3
3
  export { prerender404Page };
4
4
  export { getPageContextInitEnhanced };
5
- export { getRenderContext };
6
- export type { RenderContext };
7
5
  export type { PageContextAfterRender };
8
6
  export type { PageContextInitEnhanced };
9
- import type { PageFile } from '../../../shared/getPageFiles/getPageFileObject.js';
10
7
  import { type PageContextUrlInternal } from '../../../shared/getPageContextUrlComputed.js';
11
8
  import { HttpResponse } from './createHttpResponse.js';
12
9
  import { PageContext_loadUserFilesServerSide, type PageFiles } from './loadUserFilesServerSide.js';
13
- import type { PageConfigRuntime, PageConfigGlobalRuntime } from '../../../shared/page-configs/PageConfig.js';
14
- import { type PageRoutes } from '../../../shared/route/loadPageRoutes.js';
15
- import type { Hook } from '../../../shared/hooks/getHook.js';
16
10
  type PageContextAfterRender = {
17
11
  httpResponse: HttpResponse;
18
12
  errorWhileRendering: null | Error;
@@ -45,12 +39,12 @@ declare function prerenderPage(pageContext: PageContextInitEnhanced & PageFiles
45
39
  _baseServer: string;
46
40
  _baseAssets: string | null;
47
41
  _includeAssetsImportedByServer: boolean;
48
- _pageFilesAll: PageFile[];
49
- _pageConfigs: PageConfigRuntime[];
50
- _pageConfigGlobal: PageConfigGlobalRuntime;
42
+ _pageFilesAll: import("../../../shared/getPageFiles.js").PageFile[];
43
+ _pageConfigs: import("../../../__internal/index.js").PageConfig[];
44
+ _pageConfigGlobal: import("../../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
51
45
  _allPageIds: string[];
52
- _pageRoutes: PageRoutes;
53
- _onBeforeRouteHook: Hook | null;
46
+ _pageRoutes: import("../../../__internal/index.js").PageRoutes;
47
+ _onBeforeRouteHook: import("../../../shared/hooks/getHook.js").Hook | null;
54
48
  _pageContextInit: {
55
49
  urlOriginal: string;
56
50
  headersOriginal?: unknown;
@@ -96,12 +90,12 @@ declare function prerenderPage(pageContext: PageContextInitEnhanced & PageFiles
96
90
  _baseServer: string;
97
91
  _baseAssets: string | null;
98
92
  _includeAssetsImportedByServer: boolean;
99
- _pageFilesAll: PageFile[];
100
- _pageConfigs: PageConfigRuntime[];
101
- _pageConfigGlobal: PageConfigGlobalRuntime;
93
+ _pageFilesAll: import("../../../shared/getPageFiles.js").PageFile[];
94
+ _pageConfigs: import("../../../__internal/index.js").PageConfig[];
95
+ _pageConfigGlobal: import("../../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
102
96
  _allPageIds: string[];
103
- _pageRoutes: PageRoutes;
104
- _onBeforeRouteHook: Hook | null;
97
+ _pageRoutes: import("../../../__internal/index.js").PageRoutes;
98
+ _onBeforeRouteHook: import("../../../shared/hooks/getHook.js").Hook | null;
105
99
  _pageContextInit: {
106
100
  urlOriginal: string;
107
101
  headersOriginal?: unknown;
@@ -136,7 +130,7 @@ declare function prerenderPage(pageContext: PageContextInitEnhanced & PageFiles
136
130
  _urlHandler: null;
137
131
  };
138
132
  }>;
139
- declare function prerender404Page(renderContext: RenderContext, pageContextInit_: Record<string, unknown> | null): Promise<{
133
+ declare function prerender404Page(pageContextInit_: Record<string, unknown> | null): Promise<{
140
134
  documentHtml: string;
141
135
  pageContextSerialized: null;
142
136
  pageContext: {
@@ -148,12 +142,12 @@ declare function prerender404Page(renderContext: RenderContext, pageContextInit_
148
142
  _baseServer: string;
149
143
  _baseAssets: string | null;
150
144
  _includeAssetsImportedByServer: boolean;
151
- _pageFilesAll: PageFile[];
152
- _pageConfigs: PageConfigRuntime[];
153
- _pageConfigGlobal: PageConfigGlobalRuntime;
145
+ _pageFilesAll: import("../../../shared/getPageFiles.js").PageFile[];
146
+ _pageConfigs: import("../../../__internal/index.js").PageConfig[];
147
+ _pageConfigGlobal: import("../../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
154
148
  _allPageIds: string[];
155
- _pageRoutes: PageRoutes;
156
- _onBeforeRouteHook: Hook | null;
149
+ _pageRoutes: import("../../../__internal/index.js").PageRoutes;
150
+ _onBeforeRouteHook: import("../../../shared/hooks/getHook.js").Hook | null;
157
151
  _pageContextInit: {
158
152
  urlOriginal: string;
159
153
  headersOriginal?: unknown;
@@ -199,12 +193,12 @@ declare function prerender404Page(renderContext: RenderContext, pageContextInit_
199
193
  _baseServer: string;
200
194
  _baseAssets: string | null;
201
195
  _includeAssetsImportedByServer: boolean;
202
- _pageFilesAll: PageFile[];
203
- _pageConfigs: PageConfigRuntime[];
204
- _pageConfigGlobal: PageConfigGlobalRuntime;
196
+ _pageFilesAll: import("../../../shared/getPageFiles.js").PageFile[];
197
+ _pageConfigs: import("../../../__internal/index.js").PageConfig[];
198
+ _pageConfigGlobal: import("../../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
205
199
  _allPageIds: string[];
206
- _pageRoutes: PageRoutes;
207
- _onBeforeRouteHook: Hook | null;
200
+ _pageRoutes: import("../../../__internal/index.js").PageRoutes;
201
+ _onBeforeRouteHook: import("../../../shared/hooks/getHook.js").Hook | null;
208
202
  _pageContextInit: {
209
203
  urlOriginal: string;
210
204
  headersOriginal?: unknown;
@@ -244,7 +238,7 @@ declare function getPageContextInitEnhanced(pageContextInit: {
244
238
  urlOriginal: string;
245
239
  headersOriginal?: unknown;
246
240
  headers?: unknown;
247
- }, renderContext: RenderContext, { ssr: { urlRewrite, urlHandler, isClientSideNavigation } }?: {
241
+ }, { ssr: { urlRewrite, urlHandler, isClientSideNavigation } }?: {
248
242
  ssr?: {
249
243
  urlRewrite: null | string;
250
244
  urlHandler: null | ((url: string) => string);
@@ -259,12 +253,12 @@ declare function getPageContextInitEnhanced(pageContextInit: {
259
253
  _baseServer: string;
260
254
  _baseAssets: string | null;
261
255
  _includeAssetsImportedByServer: boolean;
262
- _pageFilesAll: PageFile[];
263
- _pageConfigs: PageConfigRuntime[];
264
- _pageConfigGlobal: PageConfigGlobalRuntime;
256
+ _pageFilesAll: import("../../../shared/getPageFiles.js").PageFile[];
257
+ _pageConfigs: import("../../../__internal/index.js").PageConfig[];
258
+ _pageConfigGlobal: import("../../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
265
259
  _allPageIds: string[];
266
- _pageRoutes: PageRoutes;
267
- _onBeforeRouteHook: Hook | null;
260
+ _pageRoutes: import("../../../__internal/index.js").PageRoutes;
261
+ _onBeforeRouteHook: import("../../../shared/hooks/getHook.js").Hook | null;
268
262
  _pageContextInit: {
269
263
  urlOriginal: string;
270
264
  headersOriginal?: unknown;
@@ -280,12 +274,3 @@ declare function getPageContextInitEnhanced(pageContextInit: {
280
274
  } & {
281
275
  headers: Record<string, string> | null;
282
276
  };
283
- type RenderContext = {
284
- pageFilesAll: PageFile[];
285
- pageConfigs: PageConfigRuntime[];
286
- pageConfigGlobal: PageConfigGlobalRuntime;
287
- allPageIds: string[];
288
- pageRoutes: PageRoutes;
289
- onBeforeRouteHook: Hook | null;
290
- };
291
- declare function getRenderContext(): Promise<RenderContext>;
@@ -2,10 +2,8 @@ export { renderPageAlreadyRouted };
2
2
  export { prerenderPage };
3
3
  export { prerender404Page };
4
4
  export { getPageContextInitEnhanced };
5
- export { getRenderContext };
6
5
  import { getErrorPageId } from '../../../shared/error-page.js';
7
6
  import { getHtmlString } from '../html/renderHtml.js';
8
- import { getPageFilesAll } from '../../../shared/getPageFiles/getPageFiles.js';
9
7
  import { assert, assertUsage, assertWarning, hasProp, normalizeHeaders, objectAssign } from '../utils.js';
10
8
  import { serializePageContextClientSide } from '../html/serializePageContextClientSide.js';
11
9
  import { getPageContextUrlComputed } from '../../../shared/getPageContextUrlComputed.js';
@@ -18,10 +16,8 @@ import { logRuntimeError } from './loggerRuntime.js';
18
16
  import { isNewError } from './isNewError.js';
19
17
  import { preparePageContextForUserConsumptionServerSide } from './preparePageContextForUserConsumptionServerSide.js';
20
18
  import { executeGuardHook } from '../../../shared/route/executeGuardHook.js';
21
- import { loadPageRoutes } from '../../../shared/route/loadPageRoutes.js';
22
19
  import pc from '@brillout/picocolors';
23
20
  import { isServerSideError } from '../../../shared/misc/isServerSideError.js';
24
- import { assertV1Design } from '../../shared/assertV1Design.js';
25
21
  async function renderPageAlreadyRouted(pageContext) {
26
22
  // pageContext.pageId can either be the:
27
23
  // - ID of the page matching the routing, or the
@@ -84,8 +80,9 @@ async function prerenderPage(pageContext) {
84
80
  return { documentHtml, pageContextSerialized, pageContext };
85
81
  }
86
82
  }
87
- async function prerender404Page(renderContext, pageContextInit_) {
88
- const errorPageId = getErrorPageId(renderContext.pageFilesAll, renderContext.pageConfigs);
83
+ async function prerender404Page(pageContextInit_) {
84
+ const globalContext = getGlobalContext();
85
+ const errorPageId = getErrorPageId(globalContext.pageFilesAll, globalContext.pageConfigs);
89
86
  if (!errorPageId) {
90
87
  return null;
91
88
  }
@@ -104,13 +101,13 @@ async function prerender404Page(renderContext, pageContextInit_) {
104
101
  };
105
102
  objectAssign(pageContextInit, pageContextInit_);
106
103
  {
107
- const pageContextInitEnhanced = getPageContextInitEnhanced(pageContextInit, renderContext);
104
+ const pageContextInitEnhanced = getPageContextInitEnhanced(pageContextInit);
108
105
  objectAssign(pageContext, pageContextInitEnhanced);
109
106
  }
110
107
  objectAssign(pageContext, await loadUserFilesServerSide(pageContext));
111
108
  return prerenderPage(pageContext);
112
109
  }
113
- function getPageContextInitEnhanced(pageContextInit, renderContext, { ssr: { urlRewrite, urlHandler, isClientSideNavigation } = {
110
+ function getPageContextInitEnhanced(pageContextInit, { ssr: { urlRewrite, urlHandler, isClientSideNavigation } = {
114
111
  urlRewrite: null,
115
112
  urlHandler: null,
116
113
  isClientSideNavigation: false
@@ -126,12 +123,12 @@ function getPageContextInitEnhanced(pageContextInit, renderContext, { ssr: { url
126
123
  _baseAssets: globalContext.baseAssets,
127
124
  _includeAssetsImportedByServer: globalContext.includeAssetsImportedByServer,
128
125
  // TODO: use GloablContext instead
129
- _pageFilesAll: renderContext.pageFilesAll,
130
- _pageConfigs: renderContext.pageConfigs,
131
- _pageConfigGlobal: renderContext.pageConfigGlobal,
132
- _allPageIds: renderContext.allPageIds,
133
- _pageRoutes: renderContext.pageRoutes,
134
- _onBeforeRouteHook: renderContext.onBeforeRouteHook,
126
+ _pageFilesAll: globalContext.pageFilesAll,
127
+ _pageConfigs: globalContext.pageConfigs,
128
+ _pageConfigGlobal: globalContext.pageConfigGlobal,
129
+ _allPageIds: globalContext.allPageIds,
130
+ _pageRoutes: globalContext.pageRoutes,
131
+ _onBeforeRouteHook: globalContext.onBeforeRouteHook,
135
132
  _pageContextInit: pageContextInit,
136
133
  _urlRewrite: urlRewrite,
137
134
  _urlHandler: urlHandler,
@@ -159,22 +156,3 @@ function getPageContextInitEnhanced(pageContextInit, renderContext, { ssr: { url
159
156
  }
160
157
  return pageContextInitEnhanced;
161
158
  }
162
- // TODO: remove getRenderContext() in favor of getGlobalObject() + reloadGlobalContext()
163
- // TODO: impl GlobalNodeContext + GlobalClientContext + GloablContext, and use GlobalContext instead of RenderContext
164
- async function getRenderContext() {
165
- const globalContext = getGlobalContext();
166
- const { pageFilesAll, allPageIds, pageConfigs, pageConfigGlobal } = await getPageFilesAll(false, globalContext.isProduction);
167
- const { pageRoutes, onBeforeRouteHook } = await loadPageRoutes(pageFilesAll, pageConfigs, pageConfigGlobal, allPageIds);
168
- assertV1Design(
169
- // pageConfigs is PageConfigRuntime[] but assertV1Design() requires PageConfigBuildTime[]
170
- pageConfigs.length > 0, pageFilesAll);
171
- const renderContext = {
172
- pageFilesAll,
173
- pageConfigs,
174
- pageConfigGlobal,
175
- allPageIds,
176
- pageRoutes,
177
- onBeforeRouteHook
178
- };
179
- return renderContext;
180
- }
@@ -1,4 +1,4 @@
1
1
  export { resolveRedirects };
2
2
  export { resolveRouteStringRedirect };
3
- declare function resolveRedirects(redirects: Record<string, string>, urlPathname: string): null | string;
3
+ declare function resolveRedirects(redirectsAll: Record<string, string>[], urlPathname: string): null | string;
4
4
  declare function resolveRouteStringRedirect(urlSource: string, urlTarget: string, urlPathname: string): null | string;
@@ -9,7 +9,8 @@ import pc from '@brillout/picocolors';
9
9
  assertIsNotBrowser(); // Don't bloat the client
10
10
  // TODO/next-major-release: update
11
11
  const configSrc = '[vite.config.js > vike({ redirects })]';
12
- function resolveRedirects(redirects, urlPathname) {
12
+ function resolveRedirects(redirectsAll, urlPathname) {
13
+ const redirects = merge(redirectsAll);
13
14
  for (const [urlSource, urlTarget] of Object.entries(redirects)) {
14
15
  const urlResolved = resolveRouteStringRedirect(urlSource, urlTarget, urlPathname);
15
16
  if (urlResolved)
@@ -40,3 +41,10 @@ function assertParams(urlSource, urlTarget) {
40
41
  }
41
42
  });
42
43
  }
44
+ function merge(objs) {
45
+ const obj = {};
46
+ objs.forEach((e) => {
47
+ Object.assign(obj, e);
48
+ });
49
+ return obj;
50
+ }
@@ -1,6 +1,6 @@
1
1
  export { renderPage };
2
2
  export { renderPage_addWrapper };
3
- import { getRenderContext, getPageContextInitEnhanced, renderPageAlreadyRouted } from './renderPage/renderPageAlreadyRouted.js';
3
+ import { getPageContextInitEnhanced, renderPageAlreadyRouted } from './renderPage/renderPageAlreadyRouted.js';
4
4
  import { route } from '../../shared/route/index.js';
5
5
  import { assert, hasProp, objectAssign, isUrl, parseUrl, onSetupRuntime, assertWarning, getGlobalObject, checkType, assertUsage, normalizeUrlPathname, removeBaseServer, modifyUrlPathname, prependBase, removeUrlOrigin, setUrlOrigin, createUrlFromComponents, isUri, getUrlPretty } from './utils.js';
6
6
  import { assertNoInfiniteAbortLoop, getPageContextFromAllRewrites, isAbortError, logAbortErrorHandled } from '../../shared/route/abort.js';
@@ -60,10 +60,8 @@ async function renderPageAndPrepare(pageContextInit, httpRequestId) {
60
60
  }
61
61
  }
62
62
  // Prepare context
63
- let renderContext;
64
63
  try {
65
64
  await initGlobalContext_renderPage();
66
- renderContext = await getRenderContext();
67
65
  }
68
66
  catch (err) {
69
67
  // Errors are expected since assertUsage() is used in both initGlobalContext_renderPage() and getRenderContext().
@@ -77,7 +75,7 @@ async function renderPageAndPrepare(pageContextInit, httpRequestId) {
77
75
  return handleInvalidConfig(isConfigInvalid.err);
78
76
  }
79
77
  else {
80
- // From now on, renderContext.pageConfigs contains all the configuration data; getVikeConfig() isn't called anymore for this request
78
+ // From now on, gloablContext contains all the configuration data; getVikeConfig() isn't called anymore for this request
81
79
  }
82
80
  // Check Base URL
83
81
  assertBaseUrl(pageContextInit);
@@ -93,9 +91,9 @@ async function renderPageAndPrepare(pageContextInit, httpRequestId) {
93
91
  if (pageContextHttpResponse)
94
92
  return pageContextHttpResponse;
95
93
  }
96
- return await renderPageAlreadyPrepared(pageContextInit, httpRequestId, renderContext, []);
94
+ return await renderPageAlreadyPrepared(pageContextInit, httpRequestId, []);
97
95
  }
98
- async function renderPageAlreadyPrepared(pageContextInit, httpRequestId, renderContext, pageContextsFromRewrite) {
96
+ async function renderPageAlreadyPrepared(pageContextInit, httpRequestId, pageContextsFromRewrite) {
99
97
  assertNoInfiniteAbortLoop(pageContextsFromRewrite.length,
100
98
  // There doesn't seem to be a way to count the number of HTTP redirects (vike don't have access to the HTTP request headers/cookies)
101
99
  // https://stackoverflow.com/questions/9683007/detect-infinite-http-redirect-loop-on-server-side
@@ -107,7 +105,7 @@ async function renderPageAlreadyPrepared(pageContextInit, httpRequestId, renderC
107
105
  objectAssign(pageContextNominalPageInit, pageContextFromAllRewrites);
108
106
  }
109
107
  {
110
- const pageContextInitEnhanced = getPageContextInitEnhancedSSR(pageContextInit, renderContext, pageContextNominalPageInit._urlRewrite, httpRequestId);
108
+ const pageContextInitEnhanced = getPageContextInitEnhancedSSR(pageContextInit, pageContextNominalPageInit._urlRewrite, httpRequestId);
111
109
  objectAssign(pageContextNominalPageInit, pageContextInitEnhanced);
112
110
  }
113
111
  let errNominalPage;
@@ -139,10 +137,10 @@ async function renderPageAlreadyPrepared(pageContextInit, httpRequestId, renderC
139
137
  assert(pageContextNominalPageSuccess === undefined);
140
138
  assert(pageContextNominalPageInit);
141
139
  assert(hasProp(pageContextNominalPageInit, 'urlOriginal', 'string'));
142
- const pageContextErrorPageInit = await getPageContextErrorPageInit(pageContextInit, errNominalPage, pageContextNominalPageInit, renderContext, httpRequestId);
140
+ const pageContextErrorPageInit = await getPageContextErrorPageInit(pageContextInit, errNominalPage, pageContextNominalPageInit, httpRequestId);
143
141
  // Handle `throw redirect()` and `throw render()` while rendering nominal page
144
142
  if (isAbortError(errNominalPage)) {
145
- const handled = await handleAbortError(errNominalPage, pageContextsFromRewrite, pageContextInit, pageContextNominalPageInit, httpRequestId, renderContext, pageContextErrorPageInit);
143
+ const handled = await handleAbortError(errNominalPage, pageContextsFromRewrite, pageContextInit, pageContextNominalPageInit, httpRequestId, pageContextErrorPageInit);
146
144
  if (handled.pageContextReturn) {
147
145
  // - throw redirect()
148
146
  // - throw render(url)
@@ -155,7 +153,8 @@ async function renderPageAlreadyPrepared(pageContextInit, httpRequestId, renderC
155
153
  Object.assign(pageContextErrorPageInit, handled.pageContextAbort);
156
154
  }
157
155
  {
158
- const errorPageId = getErrorPageId(renderContext.pageFilesAll, renderContext.pageConfigs);
156
+ const globalContext = getGlobalContext();
157
+ const errorPageId = getErrorPageId(globalContext.pageFilesAll, globalContext.pageConfigs);
159
158
  if (!errorPageId) {
160
159
  objectAssign(pageContextErrorPageInit, { pageId: null });
161
160
  return handleErrorWithoutErrorPage(pageContextErrorPageInit);
@@ -171,7 +170,7 @@ async function renderPageAlreadyPrepared(pageContextInit, httpRequestId, renderC
171
170
  catch (errErrorPage) {
172
171
  // Handle `throw redirect()` and `throw render()` while rendering error page
173
172
  if (isAbortError(errErrorPage)) {
174
- const handled = await handleAbortError(errErrorPage, pageContextsFromRewrite, pageContextInit, pageContextNominalPageInit, httpRequestId, renderContext, pageContextErrorPageInit);
173
+ const handled = await handleAbortError(errErrorPage, pageContextsFromRewrite, pageContextInit, pageContextNominalPageInit, httpRequestId, pageContextErrorPageInit);
175
174
  // throw render(abortStatusCode)
176
175
  if (!handled.pageContextReturn) {
177
176
  const pageContextAbort = errErrorPage._pageContextAbort;
@@ -287,8 +286,8 @@ async function renderPageNominal(pageContext) {
287
286
  assert(pageContext === pageContextAfterRender);
288
287
  return pageContextAfterRender;
289
288
  }
290
- async function getPageContextErrorPageInit(pageContextInit, errNominalPage, pageContextNominalPagePartial, renderContext, httpRequestId) {
291
- const pageContextInitEnhanced = getPageContextInitEnhancedSSR(pageContextInit, renderContext, null, httpRequestId);
289
+ async function getPageContextErrorPageInit(pageContextInit, errNominalPage, pageContextNominalPagePartial, httpRequestId) {
290
+ const pageContextInitEnhanced = getPageContextInitEnhancedSSR(pageContextInit, null, httpRequestId);
292
291
  assert(errNominalPage);
293
292
  const pageContext = {};
294
293
  objectAssign(pageContext, pageContextInitEnhanced);
@@ -303,9 +302,9 @@ async function getPageContextErrorPageInit(pageContextInit, errNominalPage, page
303
302
  assert(pageContext.errorWhileRendering);
304
303
  return pageContext;
305
304
  }
306
- function getPageContextInitEnhancedSSR(pageContextInit, renderContext, urlRewrite, httpRequestId) {
305
+ function getPageContextInitEnhancedSSR(pageContextInit, urlRewrite, httpRequestId) {
307
306
  const { isClientSideNavigation, _urlHandler } = handlePageContextUrl(pageContextInit.urlOriginal);
308
- const pageContextInitEnhanced = getPageContextInitEnhanced(pageContextInit, renderContext, {
307
+ const pageContextInitEnhanced = getPageContextInitEnhanced(pageContextInit, {
309
308
  ssr: {
310
309
  urlRewrite,
311
310
  urlHandler: _urlHandler,
@@ -354,12 +353,12 @@ function normalizeUrl(pageContextInit, httpRequestId) {
354
353
  return pageContextHttpResponse;
355
354
  }
356
355
  function getPermanentRedirect(pageContextInit, httpRequestId) {
357
- const { redirects, baseServer } = getGlobalContext();
358
- const urlWithoutBase = removeBaseServer(pageContextInit.urlOriginal, baseServer);
356
+ const globalContext = getGlobalContext();
357
+ const urlWithoutBase = removeBaseServer(pageContextInit.urlOriginal, globalContext.baseServer);
359
358
  let origin = null;
360
359
  let urlTargetExternal = null;
361
360
  let urlTarget = modifyUrlPathname(urlWithoutBase, (urlPathname) => {
362
- const urlTarget = resolveRedirects(redirects, urlPathname);
361
+ const urlTarget = resolveRedirects(globalContext.vikeConfig.global.config.redirects ?? [], urlPathname);
363
362
  if (urlTarget === null)
364
363
  return null;
365
364
  if (!isUrl(urlTarget)) {
@@ -387,7 +386,7 @@ function getPermanentRedirect(pageContextInit, httpRequestId) {
387
386
  if (normalize(urlTarget) === normalize(urlWithoutBase))
388
387
  return null;
389
388
  if (!originChanged)
390
- urlTarget = prependBase(urlTarget, baseServer);
389
+ urlTarget = prependBase(urlTarget, globalContext.baseServer);
391
390
  assert(urlTarget !== pageContextInit.urlOriginal);
392
391
  }
393
392
  logRuntimeInfo?.(`Permanent redirection defined by config.redirects (https://vike.dev/redirects)`, httpRequestId, 'info');
@@ -401,13 +400,14 @@ function normalize(url) {
401
400
  }
402
401
  async function handleAbortError(errAbort, pageContextsFromRewrite, pageContextInit,
403
402
  // handleAbortError() creates a new pageContext object and we don't merge pageContextNominalPageInit to it: we only use some pageContextNominalPageInit information.
404
- pageContextNominalPageInit, httpRequestId, renderContext, pageContextErrorPageInit) {
403
+ pageContextNominalPageInit, httpRequestId, pageContextErrorPageInit) {
405
404
  logAbortErrorHandled(errAbort, getGlobalContext().isProduction, pageContextNominalPageInit);
406
405
  const pageContextAbort = errAbort._pageContextAbort;
407
406
  let pageContextSerialized;
408
407
  if (pageContextNominalPageInit.isClientSideNavigation) {
409
408
  if (pageContextAbort.abortStatusCode) {
410
- const errorPageId = getErrorPageId(renderContext.pageFilesAll, renderContext.pageConfigs);
409
+ const globalContext = getGlobalContext();
410
+ const errorPageId = getErrorPageId(globalContext.pageFilesAll, globalContext.pageConfigs);
411
411
  const abortCall = pageContextAbort._abortCall;
412
412
  assert(abortCall);
413
413
  assertUsage(errorPageId, `You called ${pc.cyan(abortCall)} but you didn't define an error page, make sure to define one https://vike.dev/error-page`);
@@ -415,7 +415,6 @@ pageContextNominalPageInit, httpRequestId, renderContext, pageContextErrorPageIn
415
415
  objectAssign(pageContext, { pageId: errorPageId });
416
416
  objectAssign(pageContext, pageContextAbort);
417
417
  objectAssign(pageContext, pageContextErrorPageInit);
418
- objectAssign(pageContext, renderContext);
419
418
  objectAssign(pageContext, await loadUserFilesServerSide(pageContext));
420
419
  // We include pageContextInit: we don't only serialize pageContextAbort because the error page may need to access pageContextInit
421
420
  pageContextSerialized = serializePageContextClientSide(pageContext);
@@ -428,7 +427,7 @@ pageContextNominalPageInit, httpRequestId, renderContext, pageContextErrorPageIn
428
427
  return { pageContextReturn };
429
428
  }
430
429
  if (pageContextAbort._urlRewrite) {
431
- const pageContextReturn = await renderPageAlreadyPrepared(pageContextInit, httpRequestId, renderContext, [
430
+ const pageContextReturn = await renderPageAlreadyPrepared(pageContextInit, httpRequestId, [
432
431
  ...pageContextsFromRewrite,
433
432
  pageContextAbort
434
433
  ]);
@@ -6,7 +6,6 @@ type PluginManifest = {
6
6
  baseAssets: string | null;
7
7
  usesClientRouter: boolean;
8
8
  includeAssetsImportedByServer: boolean;
9
- redirects: Record<string, string>;
10
9
  trailingSlash: boolean;
11
10
  disableUrlNormalization: boolean;
12
11
  };
@@ -4,7 +4,6 @@ type RuntimeManifest = {
4
4
  baseServer: string;
5
5
  baseAssets: string;
6
6
  includeAssetsImportedByServer: boolean;
7
- redirects: Record<string, string>;
8
7
  trailingSlash: boolean;
9
8
  disableUrlNormalization: boolean;
10
9
  };
@@ -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);
@@ -3,6 +3,7 @@ export { setPageFiles };
3
3
  export { setPageFilesAsync };
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
  }>;