vike 0.4.227 → 0.4.228

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 (86) hide show
  1. package/dist/cjs/node/api/dev.js +2 -0
  2. package/dist/cjs/node/plugin/plugins/build/pluginBuildConfig.js +3 -5
  3. package/dist/cjs/node/plugin/plugins/build/pluginBuildEntry.js +5 -7
  4. package/dist/cjs/node/plugin/plugins/build/pluginModuleBanner.js +13 -21
  5. package/dist/cjs/node/plugin/plugins/devConfig/determineFsAllowList.js +8 -9
  6. package/dist/cjs/node/plugin/plugins/envVars.js +22 -13
  7. package/dist/cjs/node/plugin/plugins/extractAssetsPlugin.js +1 -2
  8. package/dist/cjs/node/plugin/plugins/extractExportNamesPlugin.js +1 -2
  9. package/dist/cjs/node/plugin/plugins/fileEnv.js +1 -2
  10. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/resolvePointerImport.js +1 -3
  11. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.js +25 -19
  12. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +1 -1
  13. package/dist/cjs/node/plugin/plugins/setGlobalContext.js +3 -4
  14. package/dist/cjs/node/plugin/shared/getViteConfigRuntime.js +21 -0
  15. package/dist/cjs/node/plugin/shared/resolveClientEntriesDev.js +11 -12
  16. package/dist/cjs/node/plugin/utils.js +1 -0
  17. package/dist/cjs/node/prerender/resolvePrerenderConfig.js +1 -1
  18. package/dist/cjs/node/prerender/runPrerender.js +157 -196
  19. package/dist/cjs/node/prerender/utils.js +1 -1
  20. package/dist/cjs/node/runtime/globalContext.js +52 -27
  21. package/dist/cjs/node/runtime/html/stream.js +2 -4
  22. package/dist/cjs/node/runtime/index-common.js +2 -1
  23. package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +0 -23
  24. package/dist/cjs/node/runtime-dev/createDevMiddleware.js +1 -1
  25. package/dist/cjs/shared/route/executeOnBeforeRouteHook.js +1 -1
  26. package/dist/cjs/shared/route/index.js +13 -11
  27. package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
  28. package/dist/cjs/utils/assert.js +2 -5
  29. package/dist/cjs/utils/findPackageJson.js +2 -2
  30. package/dist/cjs/utils/isFilePathAbsoluteFilesystem.js +1 -1
  31. package/dist/cjs/utils/isNpmPackage.js +1 -1
  32. package/dist/cjs/utils/isScriptFile.js +4 -4
  33. package/dist/cjs/utils/parseUrl.js +4 -4
  34. package/dist/cjs/utils/preservePropertyGetters.js +30 -0
  35. package/dist/cjs/utils/requireResolve.js +60 -16
  36. package/dist/cjs/{node/plugin/shared → utils}/rollupSourceMap.js +4 -4
  37. package/dist/esm/node/api/dev.js +2 -0
  38. package/dist/esm/node/plugin/plugins/build/pluginBuildConfig.js +2 -4
  39. package/dist/esm/node/plugin/plugins/build/pluginBuildEntry.js +4 -6
  40. package/dist/esm/node/plugin/plugins/build/pluginModuleBanner.js +11 -22
  41. package/dist/esm/node/plugin/plugins/devConfig/determineFsAllowList.js +7 -8
  42. package/dist/esm/node/plugin/plugins/envVars.js +19 -13
  43. package/dist/esm/node/plugin/plugins/extractAssetsPlugin.js +2 -3
  44. package/dist/esm/node/plugin/plugins/extractExportNamesPlugin.js +2 -3
  45. package/dist/esm/node/plugin/plugins/fileEnv.js +2 -3
  46. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/resolvePointerImport.js +2 -4
  47. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.js +26 -20
  48. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +1 -1
  49. package/dist/esm/node/plugin/plugins/setGlobalContext.js +4 -5
  50. package/dist/esm/node/plugin/shared/getViteConfigRuntime.d.ts +14 -0
  51. package/dist/esm/node/plugin/shared/getViteConfigRuntime.js +19 -0
  52. package/dist/esm/node/plugin/shared/resolveClientEntriesDev.js +10 -11
  53. package/dist/esm/node/plugin/utils.d.ts +1 -0
  54. package/dist/esm/node/plugin/utils.js +1 -0
  55. package/dist/esm/node/prerender/resolvePrerenderConfig.d.ts +1 -1
  56. package/dist/esm/node/prerender/resolvePrerenderConfig.js +1 -1
  57. package/dist/esm/node/prerender/runPrerender.d.ts +1 -0
  58. package/dist/esm/node/prerender/runPrerender.js +160 -199
  59. package/dist/esm/node/prerender/utils.d.ts +1 -1
  60. package/dist/esm/node/prerender/utils.js +1 -1
  61. package/dist/esm/node/runtime/globalContext.d.ts +26 -17
  62. package/dist/esm/node/runtime/globalContext.js +52 -27
  63. package/dist/esm/node/runtime/html/stream.js +2 -4
  64. package/dist/esm/node/runtime/index-common.d.ts +1 -1
  65. package/dist/esm/node/runtime/index-common.js +1 -1
  66. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +9 -197
  67. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +0 -23
  68. package/dist/esm/node/runtime-dev/createDevMiddleware.js +1 -1
  69. package/dist/esm/shared/route/executeOnBeforeRouteHook.js +1 -1
  70. package/dist/esm/shared/route/index.d.ts +1 -1
  71. package/dist/esm/shared/route/index.js +13 -11
  72. package/dist/esm/shared/types.d.ts +1 -3
  73. package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
  74. package/dist/esm/utils/PROJECT_VERSION.js +1 -1
  75. package/dist/esm/utils/assert.js +2 -5
  76. package/dist/esm/utils/isFilePathAbsoluteFilesystem.js +1 -1
  77. package/dist/esm/utils/isNpmPackage.js +1 -1
  78. package/dist/esm/utils/isScriptFile.js +4 -4
  79. package/dist/esm/utils/parseUrl.js +4 -4
  80. package/dist/esm/utils/preservePropertyGetters.d.ts +2 -0
  81. package/dist/esm/utils/preservePropertyGetters.js +28 -0
  82. package/dist/esm/utils/requireResolve.d.ts +7 -1
  83. package/dist/esm/utils/requireResolve.js +54 -13
  84. package/dist/esm/{node/plugin/shared → utils}/rollupSourceMap.d.ts +4 -4
  85. package/dist/esm/{node/plugin/shared → utils}/rollupSourceMap.js +4 -4
  86. package/package.json +3 -2
@@ -1,4 +1,5 @@
1
1
  // Public use
2
+ export { getGlobalContext };
2
3
  export { getGlobalContextSync };
3
4
  export { getGlobalContextAsync };
4
5
  // Internal use
@@ -15,7 +16,6 @@ export { setGlobalContext_isProduction };
15
16
  export { setGlobalContext_buildEntry };
16
17
  export { clearGlobalContext };
17
18
  export { assertBuildInfo };
18
- export { getViteConfigRuntime };
19
19
  export { updateUserFiles };
20
20
  // The core logic revolves around:
21
21
  // - globalObject.userFiles which is the main requirement for resolveGlobalContext()
@@ -56,13 +56,24 @@ function assertGlobalContextIsDefined() {
56
56
  assertIsDefined(globalObject.globalContext);
57
57
  assert(globalObject.globalContext_public);
58
58
  }
59
- /** @experimental https://vike.dev/getGlobalContext */
60
- function getGlobalContextSync() {
61
- const { globalContext_public } = globalObject;
62
- assertUsage(globalContext_public, "The global context isn't set yet, call getGlobalContextSync() later or use getGlobalContextAsync() instead.");
63
- return globalContext_public;
64
- }
65
- /** @experimental https://vike.dev/getGlobalContext */
59
+ /**
60
+ * Get runtime information about your app.
61
+ *
62
+ * https://vike.dev/getGlobalContext
63
+ */
64
+ async function getGlobalContext() {
65
+ debug('getGlobalContext()');
66
+ const { isProduction } = globalObject;
67
+ // This assertion cannot fail for vike-server users (because when using vike-server it's guaranteed that globalObject.isProduction is set before executing any user-land code and any Vike extension code).
68
+ assertUsage(isProduction !== undefined, "The global context isn't set yet, use getGlobalContextAsync() instead.");
69
+ assert(typeof globalObject.isProduction === 'boolean');
70
+ return await getGlobalContextAsync(isProduction);
71
+ }
72
+ /**
73
+ * Get runtime information about your app.
74
+ *
75
+ * https://vike.dev/getGlobalContext
76
+ */
66
77
  async function getGlobalContextAsync(isProduction) {
67
78
  debug('getGlobalContextAsync()');
68
79
  assertUsage(typeof isProduction === 'boolean', `[getGlobalContextAsync(isProduction)] Argument ${pc.cyan('isProduction')} ${isProduction === undefined ? 'is missing' : `should be ${pc.cyan('true')} or ${pc.cyan('false')}`}`);
@@ -76,11 +87,29 @@ async function getGlobalContextAsync(isProduction) {
76
87
  assert(globalContext_public);
77
88
  return globalContext_public;
78
89
  }
90
+ /**
91
+ * Get runtime information about your app.
92
+ *
93
+ * https://vike.dev/getGlobalContext
94
+ *
95
+ * @deprecated
96
+ */
97
+ function getGlobalContextSync() {
98
+ debug('getGlobalContextSync()');
99
+ const { globalContext_public } = globalObject;
100
+ assertUsage(globalContext_public, "The global context isn't set yet, call getGlobalContextSync() later or use getGlobalContext() instead.");
101
+ assertWarning(false,
102
+ // We discourage users from using it because using `pageContext.globalContext` is better: it doesn't have the race condition issue that `getGlobalContextSync()` would have when called inside React/Vue components.
103
+ // We're lying about "is going to be deprecated in the next major release": let's keep it and see if users need it (so far I can't see a use case for it).
104
+ 'getGlobalContextSync() is going to be deprecated in the next major release, see https://vike.dev/getGlobalContext', { onlyOnce: true });
105
+ return globalContext_public;
106
+ }
79
107
  function makePublic(globalContext) {
80
108
  const globalContextPublic = makePublicCopy(globalContext, 'globalContext', [
81
109
  'assetsManifest',
82
110
  'config',
83
111
  'viteConfig',
112
+ 'viteConfigRuntime',
84
113
  'pages',
85
114
  'baseServer',
86
115
  'baseAssets'
@@ -100,12 +129,12 @@ async function setGlobalContext_viteDevServer(viteDevServer) {
100
129
  assertGlobalContextIsDefined();
101
130
  globalObject.viteDevServerPromiseResolve(viteDevServer);
102
131
  }
103
- function setGlobalContext_viteConfig(viteConfig, outDirRoot) {
132
+ function setGlobalContext_viteConfig(viteConfig, viteConfigRuntime) {
104
133
  if (globalObject.viteConfig)
105
134
  return;
106
135
  assertIsNotInitilizedYet();
107
136
  globalObject.viteConfig = viteConfig;
108
- globalObject.outDirRoot = outDirRoot;
137
+ globalObject.viteConfigRuntime = viteConfigRuntime;
109
138
  }
110
139
  function assertIsNotInitilizedYet() {
111
140
  // In development, globalObject.viteDevServer always needs to be awaited for before initializing globalObject.globalContext
@@ -115,8 +144,13 @@ function setGlobalContext_isPrerendering() {
115
144
  globalObject.isPrerendering = true;
116
145
  setIsProduction(true);
117
146
  }
118
- function setGlobalContext_isProduction(isProduction) {
119
- setIsProduction(isProduction);
147
+ function setGlobalContext_isProduction(isProduction, tolerateContraditction) {
148
+ if (globalObject.isProduction === undefined) {
149
+ setIsProduction(isProduction);
150
+ }
151
+ else {
152
+ assert(globalObject.isProduction === isProduction || tolerateContraditction);
153
+ }
120
154
  }
121
155
  function getViteDevServer() {
122
156
  return globalObject.viteDevServer ?? null;
@@ -140,7 +174,6 @@ async function initGlobalContext_runPrerender() {
140
174
  globalObject.initGlobalContext_runPrerender_alreadyCalled = true;
141
175
  assert(globalObject.isPrerendering);
142
176
  assert(globalObject.viteConfig);
143
- assert(globalObject.outDirRoot);
144
177
  // We assume initGlobalContext_runPrerender() to be called before:
145
178
  // - initGlobalContext_renderPage()
146
179
  // - initGlobalContext_getGlobalContextAsync()
@@ -176,7 +209,7 @@ async function initGlobalContext() {
176
209
  await waitForViteDevServer();
177
210
  }
178
211
  else {
179
- await loadBuildEntry(globalObject.outDirRoot);
212
+ await loadBuildEntry(globalObject.viteConfigRuntime?.build.outDir);
180
213
  }
181
214
  assertGlobalContextIsDefined();
182
215
  globalObject.isInitialized = true;
@@ -199,7 +232,7 @@ function defineGlobalContext() {
199
232
  onSetupRuntime();
200
233
  }
201
234
  function resolveGlobalContext() {
202
- const { viteDevServer, viteConfig, isPrerendering, isProduction, userFiles } = globalObject;
235
+ const { viteDevServer, viteConfig, viteConfigRuntime, isPrerendering, isProduction, userFiles } = globalObject;
203
236
  assert(typeof isProduction === 'boolean');
204
237
  let globalContext;
205
238
  if (!isProduction) {
@@ -208,8 +241,8 @@ function resolveGlobalContext() {
208
241
  return null;
209
242
  assert(userFiles); // main common requiement
210
243
  assert(viteConfig);
244
+ assert(viteConfigRuntime);
211
245
  assert(!isPrerendering);
212
- const viteConfigRuntime = getViteConfigRuntime(viteConfig);
213
246
  globalContext = {
214
247
  isProduction: false,
215
248
  isPrerendering: false,
@@ -352,25 +385,17 @@ function assertBuildInfo(buildInfo) {
352
385
  assertVersionAtBuildTime(buildInfo.versionAtBuildTime);
353
386
  assert(hasProp(buildInfo, 'viteConfigRuntime', 'object'));
354
387
  assert(hasProp(buildInfo.viteConfigRuntime, '_baseViteOriginal', 'string'));
388
+ assert(hasProp(buildInfo.viteConfigRuntime, 'root', 'string'));
389
+ assert(hasProp(buildInfo.viteConfigRuntime, 'build', 'object'));
390
+ assert(hasProp(buildInfo.viteConfigRuntime.build, 'outDir', 'string'));
355
391
  assert(hasProp(buildInfo.viteConfigRuntime, 'vitePluginServerEntry', 'object'));
356
392
  assert(hasProp(buildInfo, 'usesClientRouter', 'boolean'));
357
- checkType({ ...buildInfo, viteConfigRuntime: buildInfo.viteConfigRuntime });
358
393
  }
359
394
  function assertVersionAtBuildTime(versionAtBuildTime) {
360
395
  const versionAtRuntime = PROJECT_VERSION;
361
396
  const pretty = (version) => pc.bold(`vike@${version}`);
362
397
  assertUsage(versionAtBuildTime === versionAtRuntime, `Re-build your app (you're using ${pretty(versionAtRuntime)} but your app was built with ${pretty(versionAtBuildTime)})`);
363
398
  }
364
- function getViteConfigRuntime(viteConfig) {
365
- assert(hasProp(viteConfig, '_baseViteOriginal', 'string'));
366
- const viteConfigRuntime = {
367
- _baseViteOriginal: viteConfig._baseViteOriginal,
368
- vitePluginServerEntry: {
369
- inject: viteConfig.vitePluginServerEntry?.inject
370
- }
371
- };
372
- return viteConfigRuntime;
373
- }
374
399
  async function updateUserFiles() {
375
400
  const { promise, resolve } = genPromise();
376
401
  assert(!globalObject.isProduction);
@@ -517,7 +517,6 @@ async function createStreamWrapper({ streamOriginal, onError, onData, onEnd, onF
517
517
  if (isStreamReadableWeb(streamOriginal)) {
518
518
  debug('onRenderHtml() hook returned Web Readable');
519
519
  const readableOriginal = streamOriginal;
520
- let controllerProxyIsClosed = false;
521
520
  let isClosed = false;
522
521
  let isCancel = false;
523
522
  const closeStream = async () => {
@@ -526,7 +525,6 @@ async function createStreamWrapper({ streamOriginal, onError, onData, onEnd, onF
526
525
  isClosed = true;
527
526
  await onEnd(isCancel);
528
527
  controllerProxy.close();
529
- controllerProxyIsClosed = true;
530
528
  };
531
529
  let controllerProxy;
532
530
  assertReadableStreamConstructor();
@@ -554,8 +552,8 @@ async function createStreamWrapper({ streamOriginal, onError, onData, onEnd, onF
554
552
  });
555
553
  const writeChunk = (chunk) => {
556
554
  if (
557
- // If readableOriginal doesn't implement readableOriginal.cancel() then it may still emit data after we close the stream. We therefore need to check whether we closed `controllerProxy`.
558
- !controllerProxyIsClosed) {
555
+ // If readableOriginal doesn't implement readableOriginal.cancel() then it may still emit data after we close the stream. We therefore need to check whether the steam is closed.
556
+ !isClosed) {
559
557
  controllerProxy.enqueue(encodeForWebStream(chunk));
560
558
  debugWithChunk('data written (Web Readable)', chunk);
561
559
  }
@@ -2,7 +2,7 @@ export { renderPage } from './renderPage.js';
2
2
  export { escapeInject, dangerouslySkipEscape } from './html/renderHtml.js';
3
3
  export { pipeWebStream, pipeNodeStream, pipeStream, stampPipe } from './html/stream.js';
4
4
  export { PROJECT_VERSION as version } from './utils.js';
5
- export { getGlobalContextSync, getGlobalContextAsync } from './globalContext.js';
5
+ export { getGlobalContext, getGlobalContextSync, getGlobalContextAsync } from './globalContext.js';
6
6
  export { createDevMiddleware } from '../runtime-dev/index.js';
7
7
  export { injectAssets__public as _injectAssets } from './html/injectAssets/injectAssets__public.js';
8
8
  export { createPageRenderer } from '../createPageRenderer.js';
@@ -2,7 +2,7 @@ export { renderPage } from './renderPage.js';
2
2
  export { escapeInject, dangerouslySkipEscape } from './html/renderHtml.js';
3
3
  export { pipeWebStream, pipeNodeStream, pipeStream, stampPipe } from './html/stream.js';
4
4
  export { PROJECT_VERSION as version } from './utils.js';
5
- export { getGlobalContextSync, getGlobalContextAsync } from './globalContext.js';
5
+ export { getGlobalContext, getGlobalContextSync, getGlobalContextAsync } from './globalContext.js';
6
6
  export { createDevMiddleware } from '../runtime-dev/index.js';
7
7
  // TODO/v1-release: remove
8
8
  export { injectAssets__public as _injectAssets } from './html/injectAssets/injectAssets__public.js';
@@ -1,6 +1,5 @@
1
1
  export { renderPageAlreadyRouted };
2
2
  export { prerenderPage };
3
- export { prerender404Page };
4
3
  export { getPageContextInitEnhanced };
5
4
  export { createPageContext };
6
5
  export type { PageContextAfterRender };
@@ -28,7 +27,7 @@ declare function prerenderPage(pageContext: PageContextInitEnhanced & PageFiles
28
27
  _httpRequestId: number | null;
29
28
  _usesClientRouter: boolean;
30
29
  _pageContextAlreadyProvidedByOnPrerenderHook?: true;
31
- is404: null | boolean;
30
+ is404: boolean;
32
31
  }): Promise<{
33
32
  documentHtml: string;
34
33
  pageContextSerialized: null;
@@ -54,9 +53,7 @@ declare function prerenderPage(pageContext: PageContextInitEnhanced & PageFiles
54
53
  _globalContext: GlobalContextInternal;
55
54
  /** @experimental This is a beta feature https://vike.dev/getGlobalContext */
56
55
  globalContext: Pick<{
57
- viteConfigRuntime: {
58
- _baseViteOriginal: null | string;
59
- };
56
+ viteConfigRuntime: import("../../plugin/shared/getViteConfigRuntime.js").ViteConfigRuntime;
60
57
  config: import("../../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigUserFriendly["config"];
61
58
  pages: import("../../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigsUserFriendly;
62
59
  } & import("../../shared/resolveBase.js").BaseUrlsResolved & ({
@@ -85,7 +82,7 @@ declare function prerenderPage(pageContext: PageContextInitEnhanced & PageFiles
85
82
  isPrerendering: true;
86
83
  usesClientRouter: boolean;
87
84
  viteConfig: import("vite").ResolvedConfig;
88
- })))), "pages" | "baseServer" | "baseAssets" | "config" | "assetsManifest" | "viteConfig">;
85
+ })))), "pages" | "baseServer" | "baseAssets" | "config" | "assetsManifest" | "viteConfig" | "viteConfigRuntime">;
89
86
  _pageContextInit: {
90
87
  urlOriginal: string;
91
88
  headersOriginal?: unknown;
@@ -114,7 +111,7 @@ declare function prerenderPage(pageContext: PageContextInitEnhanced & PageFiles
114
111
  _httpRequestId: number | null;
115
112
  _usesClientRouter: boolean;
116
113
  _pageContextAlreadyProvidedByOnPrerenderHook?: true;
117
- is404: null | boolean;
114
+ is404: boolean;
118
115
  } & {
119
116
  isClientSideNavigation: boolean;
120
117
  _urlHandler: null;
@@ -144,9 +141,7 @@ declare function prerenderPage(pageContext: PageContextInitEnhanced & PageFiles
144
141
  _globalContext: GlobalContextInternal;
145
142
  /** @experimental This is a beta feature https://vike.dev/getGlobalContext */
146
143
  globalContext: Pick<{
147
- viteConfigRuntime: {
148
- _baseViteOriginal: null | string;
149
- };
144
+ viteConfigRuntime: import("../../plugin/shared/getViteConfigRuntime.js").ViteConfigRuntime;
150
145
  config: import("../../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigUserFriendly["config"];
151
146
  pages: import("../../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigsUserFriendly;
152
147
  } & import("../../shared/resolveBase.js").BaseUrlsResolved & ({
@@ -175,7 +170,7 @@ declare function prerenderPage(pageContext: PageContextInitEnhanced & PageFiles
175
170
  isPrerendering: true;
176
171
  usesClientRouter: boolean;
177
172
  viteConfig: import("vite").ResolvedConfig;
178
- })))), "pages" | "baseServer" | "baseAssets" | "config" | "assetsManifest" | "viteConfig">;
173
+ })))), "pages" | "baseServer" | "baseAssets" | "config" | "assetsManifest" | "viteConfig" | "viteConfigRuntime">;
179
174
  _pageContextInit: {
180
175
  urlOriginal: string;
181
176
  headersOriginal?: unknown;
@@ -204,193 +199,12 @@ declare function prerenderPage(pageContext: PageContextInitEnhanced & PageFiles
204
199
  _httpRequestId: number | null;
205
200
  _usesClientRouter: boolean;
206
201
  _pageContextAlreadyProvidedByOnPrerenderHook?: true;
207
- is404: null | boolean;
202
+ is404: boolean;
208
203
  } & {
209
204
  isClientSideNavigation: boolean;
210
205
  _urlHandler: null;
211
206
  };
212
207
  }>;
213
- declare function prerender404Page(pageContextInit_: Record<string, unknown> | null, globalContext: GlobalContextInternal): Promise<{
214
- documentHtml: string;
215
- pageContextSerialized: null;
216
- pageContext: {
217
- _isPageContextObject: boolean;
218
- isClientSide: boolean;
219
- isPrerendering: boolean;
220
- } & Record<string, unknown> & {
221
- urlOriginal: string;
222
- headersOriginal?: unknown;
223
- headers?: unknown;
224
- } & {
225
- _objectCreatedByVike: boolean;
226
- _baseServer: string;
227
- _baseAssets: string;
228
- _includeAssetsImportedByServer: boolean;
229
- _pageFilesAll: import("../../../shared/getPageFiles.js").PageFile[];
230
- _pageConfigs: import("../../../__internal/index.js").PageConfig[];
231
- _pageConfigGlobal: import("../../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
232
- _allPageIds: string[];
233
- _pageRoutes: import("../../../__internal/index.js").PageRoutes;
234
- _onBeforeRouteHook: import("../../../shared/hooks/getHook.js").Hook | null;
235
- _globalContext: GlobalContextInternal;
236
- /** @experimental This is a beta feature https://vike.dev/getGlobalContext */
237
- globalContext: Pick<{
238
- viteConfigRuntime: {
239
- _baseViteOriginal: null | string;
240
- };
241
- config: import("../../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigUserFriendly["config"];
242
- pages: import("../../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigsUserFriendly;
243
- } & import("../../shared/resolveBase.js").BaseUrlsResolved & ({
244
- pageFilesAll: import("../../../shared/getPageFiles.js").PageFile[];
245
- pageConfigs: import("../../../__internal/index.js").PageConfig[];
246
- pageConfigGlobal: import("../../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
247
- allPageIds: string[];
248
- pageRoutes: import("../../../__internal/index.js").PageRoutes;
249
- onBeforeRouteHook: import("../../../shared/hooks/getHook.js").Hook | null;
250
- pages: import("../../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigsUserFriendly;
251
- config: import("../../../types/index.js").ConfigResolved;
252
- } & ({
253
- isProduction: false;
254
- isPrerendering: false;
255
- viteConfig: import("vite").ResolvedConfig;
256
- viteDevServer: import("vite").ViteDevServer;
257
- assetsManifest: null;
258
- } | ({
259
- isProduction: true;
260
- assetsManifest: import("../../shared/ViteManifest.js").ViteManifest;
261
- viteDevServer: null;
262
- } & ({
263
- isPrerendering: false;
264
- viteConfig: null;
265
- } | {
266
- isPrerendering: true;
267
- usesClientRouter: boolean;
268
- viteConfig: import("vite").ResolvedConfig;
269
- })))), "pages" | "baseServer" | "baseAssets" | "config" | "assetsManifest" | "viteConfig">;
270
- _pageContextInit: {
271
- urlOriginal: string;
272
- headersOriginal?: unknown;
273
- headers?: unknown;
274
- };
275
- _urlRewrite: string | null;
276
- _urlHandler: ((url: string) => string) | null;
277
- isClientSideNavigation: boolean;
278
- } & {
279
- urlParsed: import("../utils.js").UrlPublic;
280
- urlPathname: string;
281
- url: string;
282
- } & {
283
- headers: Record<string, string> | null;
284
- } & import("../../../shared/getPageFiles.js").PageConfigUserFriendlyOld & {
285
- Page: unknown;
286
- _isHtmlOnly: boolean;
287
- _passToClient: string[];
288
- _pageFilePathsLoaded: string[];
289
- } & {
290
- __getPageAssets: () => Promise<import("./getPageAssets.js").PageAsset[]>;
291
- } & {
292
- routeParams: Record<string, string>;
293
- pageId: string;
294
- _urlRewrite: null;
295
- _httpRequestId: number | null;
296
- _usesClientRouter: boolean;
297
- _pageContextAlreadyProvidedByOnPrerenderHook?: true;
298
- is404: null | boolean;
299
- } & {
300
- isClientSideNavigation: boolean;
301
- _urlHandler: null;
302
- };
303
- } | {
304
- documentHtml: string;
305
- pageContextSerialized: string;
306
- pageContext: {
307
- _isPageContextObject: boolean;
308
- isClientSide: boolean;
309
- isPrerendering: boolean;
310
- } & Record<string, unknown> & {
311
- urlOriginal: string;
312
- headersOriginal?: unknown;
313
- headers?: unknown;
314
- } & {
315
- _objectCreatedByVike: boolean;
316
- _baseServer: string;
317
- _baseAssets: string;
318
- _includeAssetsImportedByServer: boolean;
319
- _pageFilesAll: import("../../../shared/getPageFiles.js").PageFile[];
320
- _pageConfigs: import("../../../__internal/index.js").PageConfig[];
321
- _pageConfigGlobal: import("../../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
322
- _allPageIds: string[];
323
- _pageRoutes: import("../../../__internal/index.js").PageRoutes;
324
- _onBeforeRouteHook: import("../../../shared/hooks/getHook.js").Hook | null;
325
- _globalContext: GlobalContextInternal;
326
- /** @experimental This is a beta feature https://vike.dev/getGlobalContext */
327
- globalContext: Pick<{
328
- viteConfigRuntime: {
329
- _baseViteOriginal: null | string;
330
- };
331
- config: import("../../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigUserFriendly["config"];
332
- pages: import("../../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigsUserFriendly;
333
- } & import("../../shared/resolveBase.js").BaseUrlsResolved & ({
334
- pageFilesAll: import("../../../shared/getPageFiles.js").PageFile[];
335
- pageConfigs: import("../../../__internal/index.js").PageConfig[];
336
- pageConfigGlobal: import("../../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
337
- allPageIds: string[];
338
- pageRoutes: import("../../../__internal/index.js").PageRoutes;
339
- onBeforeRouteHook: import("../../../shared/hooks/getHook.js").Hook | null;
340
- pages: import("../../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigsUserFriendly;
341
- config: import("../../../types/index.js").ConfigResolved;
342
- } & ({
343
- isProduction: false;
344
- isPrerendering: false;
345
- viteConfig: import("vite").ResolvedConfig;
346
- viteDevServer: import("vite").ViteDevServer;
347
- assetsManifest: null;
348
- } | ({
349
- isProduction: true;
350
- assetsManifest: import("../../shared/ViteManifest.js").ViteManifest;
351
- viteDevServer: null;
352
- } & ({
353
- isPrerendering: false;
354
- viteConfig: null;
355
- } | {
356
- isPrerendering: true;
357
- usesClientRouter: boolean;
358
- viteConfig: import("vite").ResolvedConfig;
359
- })))), "pages" | "baseServer" | "baseAssets" | "config" | "assetsManifest" | "viteConfig">;
360
- _pageContextInit: {
361
- urlOriginal: string;
362
- headersOriginal?: unknown;
363
- headers?: unknown;
364
- };
365
- _urlRewrite: string | null;
366
- _urlHandler: ((url: string) => string) | null;
367
- isClientSideNavigation: boolean;
368
- } & {
369
- urlParsed: import("../utils.js").UrlPublic;
370
- urlPathname: string;
371
- url: string;
372
- } & {
373
- headers: Record<string, string> | null;
374
- } & import("../../../shared/getPageFiles.js").PageConfigUserFriendlyOld & {
375
- Page: unknown;
376
- _isHtmlOnly: boolean;
377
- _passToClient: string[];
378
- _pageFilePathsLoaded: string[];
379
- } & {
380
- __getPageAssets: () => Promise<import("./getPageAssets.js").PageAsset[]>;
381
- } & {
382
- routeParams: Record<string, string>;
383
- pageId: string;
384
- _urlRewrite: null;
385
- _httpRequestId: number | null;
386
- _usesClientRouter: boolean;
387
- _pageContextAlreadyProvidedByOnPrerenderHook?: true;
388
- is404: null | boolean;
389
- } & {
390
- isClientSideNavigation: boolean;
391
- _urlHandler: null;
392
- };
393
- } | null>;
394
208
  type PageContextInitEnhanced = Awaited<ReturnType<typeof getPageContextInitEnhanced>>;
395
209
  declare function getPageContextInitEnhanced(pageContextInit: {
396
210
  urlOriginal: string;
@@ -424,9 +238,7 @@ declare function getPageContextInitEnhanced(pageContextInit: {
424
238
  _globalContext: GlobalContextInternal;
425
239
  /** @experimental This is a beta feature https://vike.dev/getGlobalContext */
426
240
  globalContext: Pick<{
427
- viteConfigRuntime: {
428
- _baseViteOriginal: null | string;
429
- };
241
+ viteConfigRuntime: import("../../plugin/shared/getViteConfigRuntime.js").ViteConfigRuntime;
430
242
  config: import("../../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigUserFriendly["config"];
431
243
  pages: import("../../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigsUserFriendly;
432
244
  } & import("../../shared/resolveBase.js").BaseUrlsResolved & ({
@@ -455,7 +267,7 @@ declare function getPageContextInitEnhanced(pageContextInit: {
455
267
  isPrerendering: true;
456
268
  usesClientRouter: boolean;
457
269
  viteConfig: import("vite").ResolvedConfig;
458
- })))), "pages" | "baseServer" | "baseAssets" | "config" | "assetsManifest" | "viteConfig">;
270
+ })))), "pages" | "baseServer" | "baseAssets" | "config" | "assetsManifest" | "viteConfig" | "viteConfigRuntime">;
459
271
  _pageContextInit: {
460
272
  urlOriginal: string;
461
273
  headersOriginal?: unknown;
@@ -1,6 +1,5 @@
1
1
  export { renderPageAlreadyRouted };
2
2
  export { prerenderPage };
3
- export { prerender404Page };
4
3
  export { getPageContextInitEnhanced };
5
4
  export { createPageContext };
6
5
  import { getErrorPageId } from '../../../shared/error-page.js';
@@ -80,28 +79,6 @@ async function prerenderPage(pageContext) {
80
79
  return { documentHtml, pageContextSerialized, pageContext };
81
80
  }
82
81
  }
83
- async function prerender404Page(pageContextInit_, globalContext) {
84
- const errorPageId = getErrorPageId(globalContext.pageFilesAll, globalContext.pageConfigs);
85
- if (!errorPageId) {
86
- return null;
87
- }
88
- // A URL is required for `viteDevServer.transformIndexHtml(url,html)`
89
- const pageContextInit = { urlOriginal: '/fake-404-url' };
90
- objectAssign(pageContextInit, pageContextInit_);
91
- const pageContext = await getPageContextInitEnhanced(pageContextInit, globalContext, true);
92
- objectAssign(pageContext, {
93
- pageId: errorPageId,
94
- _httpRequestId: null,
95
- _urlRewrite: null,
96
- is404: true,
97
- routeParams: {},
98
- // `prerender404Page()` is about generating `dist/client/404.html` for static hosts; there is no Client Routing.
99
- _usesClientRouter: false,
100
- _debugRouteMatches: []
101
- });
102
- objectAssign(pageContext, await loadUserFilesServerSide(pageContext));
103
- return prerenderPage(pageContext);
104
- }
105
82
  async function getPageContextInitEnhanced(pageContextInit, globalContext, isPrerendering, { ssr: { urlRewrite, urlHandler, isClientSideNavigation } = {
106
83
  urlRewrite: null,
107
84
  urlHandler: null,
@@ -8,7 +8,7 @@ import { setGlobalContext_isProduction } from '../runtime/globalContext.js';
8
8
  * https://vike.dev/createDevMiddleware
9
9
  */
10
10
  async function createDevMiddleware(options = {}) {
11
- setGlobalContext_isProduction(false);
11
+ setGlobalContext_isProduction(false, true);
12
12
  const optionsMod = {
13
13
  ...options,
14
14
  viteConfig: {
@@ -67,7 +67,7 @@ async function getPageContextFromHook(onBeforeRouteHook, pageContext) {
67
67
  if (hasProp(hookReturn.pageContext, 'urlLogical')) {
68
68
  assertUsageUrlPathnameAbsolute(
69
69
  // We skip validation and type-cast instead of assertUsage() in order to save client-side KBs
70
- hookReturn.pageContext.urlLogical, `${errPrefix} returned ${pc.cyan('{ pageContext: { urlLogical } }')} but ${pc.cyan('urlLogical')}`);
70
+ hookReturn.pageContext.urlLogical, `${errPrefix} returned ${pc.cyan('{ pageContext: { urlLogical } }')} and ${pc.cyan('urlLogical')}`);
71
71
  }
72
72
  assertPageContextProvidedByUser(hookReturn.pageContext, {
73
73
  hookFilePath: onBeforeRouteHook.hookFilePath,
@@ -30,4 +30,4 @@ type RouteMatch = {
30
30
  routeParams: Record<string, string>;
31
31
  };
32
32
  type RouteMatches = 'CUSTOM_ROUTING' | RouteMatch[];
33
- declare function route(pageContext: PageContextForRoute): Promise<PageContextFromRoute>;
33
+ declare function route(pageContext: PageContextForRoute, skipOnBeforeRouteHook?: true): Promise<PageContextFromRoute>;
@@ -13,23 +13,25 @@ import { resolveRouteFunction } from './resolveRouteFunction.js';
13
13
  import { executeOnBeforeRouteHook } from './executeOnBeforeRouteHook.js';
14
14
  import { debug } from './debug.js';
15
15
  import pc from '@brillout/picocolors';
16
- async function route(pageContext) {
16
+ async function route(pageContext, skipOnBeforeRouteHook) {
17
17
  debug('Pages routes:', pageContext._pageRoutes);
18
18
  assertPageContextUrl(pageContext);
19
19
  const pageContextFromRoute = {};
20
20
  // onBeforeRoute()
21
- const pageContextFromOnBeforeRouteHook = await executeOnBeforeRouteHook(pageContext);
22
- if (pageContextFromOnBeforeRouteHook) {
23
- if (pageContextFromOnBeforeRouteHook._routingProvidedByOnBeforeRouteHook) {
24
- assert(pageContextFromOnBeforeRouteHook.pageId);
25
- return pageContextFromOnBeforeRouteHook;
26
- }
27
- else {
28
- objectAssign(pageContextFromRoute, pageContextFromOnBeforeRouteHook);
21
+ if (!skipOnBeforeRouteHook) {
22
+ const pageContextFromOnBeforeRouteHook = await executeOnBeforeRouteHook(pageContext);
23
+ if (pageContextFromOnBeforeRouteHook) {
24
+ if (pageContextFromOnBeforeRouteHook._routingProvidedByOnBeforeRouteHook) {
25
+ assert(pageContextFromOnBeforeRouteHook.pageId);
26
+ return pageContextFromOnBeforeRouteHook;
27
+ }
28
+ else {
29
+ objectAssign(pageContextFromRoute, pageContextFromOnBeforeRouteHook);
30
+ }
29
31
  }
32
+ // We take into account pageContext.urlLogical set by onBeforeRoute()
33
+ objectAssign(pageContext, pageContextFromOnBeforeRouteHook);
30
34
  }
31
- // We take into account pageContext.urlLogical set by onBeforeRoute()
32
- objectAssign(pageContext, pageContextFromOnBeforeRouteHook);
33
35
  // Vike's routing
34
36
  const allPageIds = pageContext._allPageIds;
35
37
  assertUsage(allPageIds.length > 0, 'No page found. You must create at least one page.');
@@ -120,11 +120,9 @@ type PageContextBuiltInCommon<Data> = {
120
120
  /** @experimental https://github.com/vikejs/vike/issues/1268 */
121
121
  sources: Sources;
122
122
  /**
123
- * Information shared by all pages.
123
+ * Runtime information about your app.
124
124
  *
125
125
  * https://vike.dev/getGlobalContext
126
- *
127
- * @experimental
128
126
  */
129
127
  globalContext: GlobalContextPublic;
130
128
  /** @deprecated */
@@ -1 +1 @@
1
- export declare const PROJECT_VERSION: "0.4.227";
1
+ export declare const PROJECT_VERSION: "0.4.228";
@@ -1,2 +1,2 @@
1
1
  // Automatically updated by @brillout/release-me
2
- export const PROJECT_VERSION = '0.4.227';
2
+ export const PROJECT_VERSION = '0.4.228';
@@ -93,12 +93,9 @@ function assertWarning(condition, msg, { onlyOnce, showStackTrace }) {
93
93
  if (onlyOnce) {
94
94
  const { alreadyLogged } = globalObject;
95
95
  const key = onlyOnce === true ? msg : onlyOnce;
96
- if (alreadyLogged.has(key)) {
96
+ if (alreadyLogged.has(key))
97
97
  return;
98
- }
99
- else {
100
- alreadyLogged.add(key);
101
- }
98
+ alreadyLogged.add(key);
102
99
  }
103
100
  globalObject.onBeforeLog?.();
104
101
  if (showStackTrace) {
@@ -19,8 +19,8 @@ function assertFilePathAbsoluteFilesystem(filePath) {
19
19
  // - For Linux users assertFilePathAbsoluteFilesystem() will erroneously succeed if `p` is a path absolute from the user root dir.
20
20
  // - But that's okay because the assertion will eventually fail for Windows users.
21
21
  // - On Linux there doesn't seem to be a way to distinguish between an absolute path starting from the filesystem root or starting from the user root directory, see comment at isFilePathAbsoluteFilesystem()
22
- assert(isFilePathAbsoluteFilesystem(filePath));
23
22
  assertPosixPath(filePath);
23
+ assert(isFilePathAbsoluteFilesystem(filePath));
24
24
  }
25
25
  /**
26
26
  * Whether `filePath` is an absolute file path starting from the filesystem root.