vike 0.4.225-commit-37a36a5 → 0.4.225-commit-b8fc36e

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 (75) hide show
  1. package/dist/cjs/client/shared/getPageContextProxyForUser.js +3 -66
  2. package/dist/cjs/node/api/build.js +7 -7
  3. package/dist/cjs/node/api/dev.js +2 -2
  4. package/dist/cjs/node/api/prepareViteApiCall.js +52 -29
  5. package/dist/cjs/node/api/prerender.js +2 -2
  6. package/dist/cjs/node/api/preview.js +2 -2
  7. package/dist/cjs/node/api/utils.js +1 -0
  8. package/dist/cjs/node/cli/parseCli.js +10 -4
  9. package/dist/cjs/node/plugin/plugins/build/pluginAutoFullBuild.js +2 -2
  10. package/dist/cjs/node/plugin/plugins/commonConfig.js +0 -6
  11. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +4 -0
  12. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +20 -7
  13. package/dist/cjs/node/plugin/shared/getEnvVarObject.js +7 -0
  14. package/dist/cjs/node/prerender/resolvePrerenderConfig.js +3 -3
  15. package/dist/cjs/node/prerender/runPrerender.js +8 -12
  16. package/dist/cjs/node/runtime/html/serializePageContextClientSide.js +67 -14
  17. package/dist/cjs/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.js +3 -0
  18. package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +18 -12
  19. package/dist/cjs/node/runtime/renderPage.js +13 -28
  20. package/dist/cjs/node/runtime-dev/createDevMiddleware.js +2 -2
  21. package/dist/cjs/shared/NOT_SERIALIZABLE.js +5 -0
  22. package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
  23. package/dist/cjs/utils/assert.js +1 -1
  24. package/dist/cjs/utils/objectAssign.js +7 -2
  25. package/dist/cjs/utils/pick.js +12 -0
  26. package/dist/esm/client/client-routing-runtime/createPageContext.d.ts +2 -0
  27. package/dist/esm/client/client-routing-runtime/createPageContext.js +2 -1
  28. package/dist/esm/client/client-routing-runtime/renderPageClientSide.js +1 -1
  29. package/dist/esm/client/server-routing-runtime/getPageContext.d.ts +6 -3
  30. package/dist/esm/client/server-routing-runtime/getPageContext.js +6 -3
  31. package/dist/esm/client/shared/getPageContextProxyForUser.d.ts +1 -11
  32. package/dist/esm/client/shared/getPageContextProxyForUser.js +4 -67
  33. package/dist/esm/client/shared/preparePageContextForUserConsumptionClientSide.d.ts +2 -2
  34. package/dist/esm/node/api/build.js +7 -7
  35. package/dist/esm/node/api/dev.js +2 -2
  36. package/dist/esm/node/api/prepareViteApiCall.d.ts +1 -1
  37. package/dist/esm/node/api/prepareViteApiCall.js +54 -31
  38. package/dist/esm/node/api/prerender.js +2 -2
  39. package/dist/esm/node/api/preview.js +2 -2
  40. package/dist/esm/node/api/utils.d.ts +1 -0
  41. package/dist/esm/node/api/utils.js +1 -0
  42. package/dist/esm/node/cli/parseCli.js +10 -4
  43. package/dist/esm/node/plugin/plugins/build/pluginAutoFullBuild.js +2 -2
  44. package/dist/esm/node/plugin/plugins/commonConfig.d.ts +1 -1
  45. package/dist/esm/node/plugin/plugins/commonConfig.js +0 -6
  46. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +4 -0
  47. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.d.ts +8 -0
  48. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +20 -7
  49. package/dist/esm/node/plugin/shared/getEnvVarObject.js +7 -0
  50. package/dist/esm/node/prerender/resolvePrerenderConfig.js +3 -3
  51. package/dist/esm/node/prerender/runPrerender.js +8 -12
  52. package/dist/esm/node/runtime/html/serializePageContextClientSide.d.ts +2 -0
  53. package/dist/esm/node/runtime/html/serializePageContextClientSide.js +69 -15
  54. package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.js +3 -0
  55. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +27 -1
  56. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +18 -12
  57. package/dist/esm/node/runtime/renderPage.js +14 -29
  58. package/dist/esm/node/runtime-dev/createDevMiddleware.js +2 -2
  59. package/dist/esm/shared/NOT_SERIALIZABLE.d.ts +1 -0
  60. package/dist/esm/shared/NOT_SERIALIZABLE.js +2 -0
  61. package/dist/esm/shared/page-configs/Config.d.ts +11 -3
  62. package/dist/esm/shared/page-configs/PageConfig.d.ts +1 -1
  63. package/dist/esm/shared/route/abort.d.ts +2 -2
  64. package/dist/esm/shared/types.d.ts +34 -2
  65. package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
  66. package/dist/esm/utils/PROJECT_VERSION.js +1 -1
  67. package/dist/esm/utils/assert.js +1 -1
  68. package/dist/esm/utils/objectAssign.d.ts +1 -1
  69. package/dist/esm/utils/objectAssign.js +7 -2
  70. package/dist/esm/utils/pick.d.ts +1 -0
  71. package/dist/esm/utils/pick.js +9 -0
  72. package/package.json +1 -1
  73. package/dist/cjs/shared/notSerializable.js +0 -5
  74. package/dist/esm/shared/notSerializable.d.ts +0 -1
  75. package/dist/esm/shared/notSerializable.js +0 -2
@@ -2,6 +2,7 @@ export { renderPageAlreadyRouted };
2
2
  export { prerenderPage };
3
3
  export { prerender404Page };
4
4
  export { getPageContextInitEnhanced };
5
+ export { createPageContext };
5
6
  export type { PageContextAfterRender };
6
7
  export type { PageContextInitEnhanced };
7
8
  import { type PageContextUrlInternal } from '../../../shared/getPageContextUrlComputed.js';
@@ -32,6 +33,10 @@ declare function prerenderPage(pageContext: PageContextInitEnhanced & PageFiles
32
33
  documentHtml: string;
33
34
  pageContextSerialized: null;
34
35
  pageContext: {
36
+ _isPageContextObject: boolean;
37
+ isClientSide: boolean;
38
+ isPrerendering: boolean;
39
+ } & Record<string, unknown> & {
35
40
  urlOriginal: string;
36
41
  headersOriginal?: unknown;
37
42
  headers?: unknown;
@@ -118,6 +123,10 @@ declare function prerenderPage(pageContext: PageContextInitEnhanced & PageFiles
118
123
  documentHtml: string;
119
124
  pageContextSerialized: string;
120
125
  pageContext: {
126
+ _isPageContextObject: boolean;
127
+ isClientSide: boolean;
128
+ isPrerendering: boolean;
129
+ } & Record<string, unknown> & {
121
130
  urlOriginal: string;
122
131
  headersOriginal?: unknown;
123
132
  headers?: unknown;
@@ -205,6 +214,10 @@ declare function prerender404Page(pageContextInit_: Record<string, unknown> | nu
205
214
  documentHtml: string;
206
215
  pageContextSerialized: null;
207
216
  pageContext: {
217
+ _isPageContextObject: boolean;
218
+ isClientSide: boolean;
219
+ isPrerendering: boolean;
220
+ } & Record<string, unknown> & {
208
221
  urlOriginal: string;
209
222
  headersOriginal?: unknown;
210
223
  headers?: unknown;
@@ -291,6 +304,10 @@ declare function prerender404Page(pageContextInit_: Record<string, unknown> | nu
291
304
  documentHtml: string;
292
305
  pageContextSerialized: string;
293
306
  pageContext: {
307
+ _isPageContextObject: boolean;
308
+ isClientSide: boolean;
309
+ isPrerendering: boolean;
310
+ } & Record<string, unknown> & {
294
311
  urlOriginal: string;
295
312
  headersOriginal?: unknown;
296
313
  headers?: unknown;
@@ -379,13 +396,17 @@ declare function getPageContextInitEnhanced(pageContextInit: {
379
396
  urlOriginal: string;
380
397
  headersOriginal?: unknown;
381
398
  headers?: unknown;
382
- }, globalContext: GlobalContextInternal, { ssr: { urlRewrite, urlHandler, isClientSideNavigation } }?: {
399
+ }, globalContext: GlobalContextInternal, isPrerendering: boolean, { ssr: { urlRewrite, urlHandler, isClientSideNavigation } }?: {
383
400
  ssr?: {
384
401
  urlRewrite: null | string;
385
402
  urlHandler: null | ((url: string) => string);
386
403
  isClientSideNavigation: boolean;
387
404
  };
388
405
  }): Promise<{
406
+ _isPageContextObject: boolean;
407
+ isClientSide: boolean;
408
+ isPrerendering: boolean;
409
+ } & Record<string, unknown> & {
389
410
  urlOriginal: string;
390
411
  headersOriginal?: unknown;
391
412
  headers?: unknown;
@@ -450,3 +471,8 @@ declare function getPageContextInitEnhanced(pageContextInit: {
450
471
  } & {
451
472
  headers: Record<string, string> | null;
452
473
  }>;
474
+ declare function createPageContext(pageContextInit: Record<string, unknown>, isPrerendering: boolean): {
475
+ _isPageContextObject: boolean;
476
+ isClientSide: boolean;
477
+ isPrerendering: boolean;
478
+ } & Record<string, unknown>;
@@ -2,6 +2,7 @@ export { renderPageAlreadyRouted };
2
2
  export { prerenderPage };
3
3
  export { prerender404Page };
4
4
  export { getPageContextInitEnhanced };
5
+ export { createPageContext };
5
6
  import { getErrorPageId } from '../../../shared/error-page.js';
6
7
  import { getHtmlString } from '../html/renderHtml.js';
7
8
  import { assert, assertUsage, assertWarning, hasProp, normalizeHeaders, objectAssign } from '../utils.js';
@@ -84,7 +85,11 @@ async function prerender404Page(pageContextInit_, globalContext) {
84
85
  if (!errorPageId) {
85
86
  return null;
86
87
  }
87
- const pageContext = {
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, {
88
93
  pageId: errorPageId,
89
94
  _httpRequestId: null,
90
95
  _urlRewrite: null,
@@ -93,25 +98,17 @@ async function prerender404Page(pageContextInit_, globalContext) {
93
98
  // `prerender404Page()` is about generating `dist/client/404.html` for static hosts; there is no Client Routing.
94
99
  _usesClientRouter: false,
95
100
  _debugRouteMatches: []
96
- };
97
- const pageContextInit = {
98
- urlOriginal: '/fake-404-url' // A URL is needed for `applyViteHtmlTransform`
99
- };
100
- objectAssign(pageContextInit, pageContextInit_);
101
- {
102
- const pageContextInitEnhanced = await getPageContextInitEnhanced(pageContextInit, globalContext);
103
- objectAssign(pageContext, pageContextInitEnhanced);
104
- }
101
+ });
105
102
  objectAssign(pageContext, await loadUserFilesServerSide(pageContext));
106
103
  return prerenderPage(pageContext);
107
104
  }
108
- async function getPageContextInitEnhanced(pageContextInit, globalContext, { ssr: { urlRewrite, urlHandler, isClientSideNavigation } = {
105
+ async function getPageContextInitEnhanced(pageContextInit, globalContext, isPrerendering, { ssr: { urlRewrite, urlHandler, isClientSideNavigation } = {
109
106
  urlRewrite: null,
110
107
  urlHandler: null,
111
108
  isClientSideNavigation: false
112
109
  } } = {}) {
113
110
  assert(pageContextInit.urlOriginal);
114
- const pageContextInitEnhanced = {};
111
+ const pageContextInitEnhanced = createPageContext(pageContextInit, isPrerendering);
115
112
  objectAssign(pageContextInitEnhanced, pageContextInit);
116
113
  objectAssign(pageContextInitEnhanced, {
117
114
  _objectCreatedByVike: true,
@@ -158,3 +155,12 @@ async function getPageContextInitEnhanced(pageContextInit, globalContext, { ssr:
158
155
  }
159
156
  return pageContextInitEnhanced;
160
157
  }
158
+ function createPageContext(pageContextInit, isPrerendering) {
159
+ const pageContext = {
160
+ _isPageContextObject: true,
161
+ isClientSide: false,
162
+ isPrerendering
163
+ };
164
+ objectAssign(pageContext, pageContextInit);
165
+ return pageContext;
166
+ }
@@ -1,6 +1,6 @@
1
1
  export { renderPage };
2
2
  export { renderPage_addAsyncHookwrapper };
3
- import { getPageContextInitEnhanced, renderPageAlreadyRouted } from './renderPage/renderPageAlreadyRouted.js';
3
+ import { getPageContextInitEnhanced, renderPageAlreadyRouted, createPageContext } 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, isUri, getUrlPretty } from './utils.js';
6
6
  import { assertNoInfiniteAbortLoop, getPageContextFromAllRewrites, isAbortError, logAbortErrorHandled } from '../../shared/route/abort.js';
@@ -103,15 +103,9 @@ async function renderPageAlreadyPrepared(pageContextInit, globalContext, httpReq
103
103
  // https://stackoverflow.com/questions/9683007/detect-infinite-http-redirect-loop-on-server-side
104
104
  0);
105
105
  let pageContextNominalPageSuccess;
106
- let pageContextNominalPageInit = {};
107
- {
108
- const pageContextFromAllRewrites = getPageContextFromAllRewrites(pageContextsFromRewrite);
109
- objectAssign(pageContextNominalPageInit, pageContextFromAllRewrites);
110
- }
111
- {
112
- const pageContextInitEnhanced = await getPageContextInitEnhancedSSR(pageContextInit, globalContext, pageContextNominalPageInit._urlRewrite, httpRequestId);
113
- objectAssign(pageContextNominalPageInit, pageContextInitEnhanced);
114
- }
106
+ const pageContextFromAllRewrites = getPageContextFromAllRewrites(pageContextsFromRewrite);
107
+ const pageContextNominalPageInit = await getPageContextInitEnhancedSSR(pageContextInit, globalContext, pageContextFromAllRewrites._urlRewrite, httpRequestId);
108
+ objectAssign(pageContextNominalPageInit, pageContextFromAllRewrites);
115
109
  let errNominalPage;
116
110
  {
117
111
  try {
@@ -242,7 +236,7 @@ function prettyUrl(url) {
242
236
  return pc.bold(decodeURI(url));
243
237
  }
244
238
  function getPageContextHttpResponseError(err, pageContextInit, pageContext) {
245
- const pageContextWithError = createPageContext(pageContextInit);
239
+ const pageContextWithError = createPageContext(pageContextInit, false);
246
240
  const httpResponse = createHttpResponseError(pageContext);
247
241
  objectAssign(pageContextWithError, {
248
242
  httpResponse,
@@ -250,13 +244,6 @@ function getPageContextHttpResponseError(err, pageContextInit, pageContext) {
250
244
  });
251
245
  return pageContextWithError;
252
246
  }
253
- function createPageContext(pageContextInit) {
254
- const pageContext = {
255
- _isPageContextObject: true
256
- };
257
- Object.assign(pageContext, pageContextInit);
258
- return pageContext;
259
- }
260
247
  async function renderPageNominal(pageContext) {
261
248
  objectAssign(pageContext, { errorWhileRendering: null });
262
249
  // Route
@@ -281,10 +268,8 @@ async function renderPageNominal(pageContext) {
281
268
  return pageContextAfterRender;
282
269
  }
283
270
  async function getPageContextErrorPageInit(pageContextInit, globalContext, errNominalPage, pageContextNominalPagePartial, httpRequestId) {
284
- const pageContextInitEnhanced = await getPageContextInitEnhancedSSR(pageContextInit, globalContext, null, httpRequestId);
271
+ const pageContext = await getPageContextInitEnhancedSSR(pageContextInit, globalContext, null, httpRequestId);
285
272
  assert(errNominalPage);
286
- const pageContext = {};
287
- objectAssign(pageContext, pageContextInitEnhanced);
288
273
  objectAssign(pageContext, {
289
274
  is404: false,
290
275
  errorWhileRendering: errNominalPage,
@@ -298,7 +283,7 @@ async function getPageContextErrorPageInit(pageContextInit, globalContext, errNo
298
283
  }
299
284
  async function getPageContextInitEnhancedSSR(pageContextInit, globalContext, urlRewrite, httpRequestId) {
300
285
  const { isClientSideNavigation, _urlHandler } = handlePageContextUrl(pageContextInit.urlOriginal);
301
- const pageContextInitEnhanced = await getPageContextInitEnhanced(pageContextInit, globalContext, {
286
+ const pageContextInitEnhanced = await getPageContextInitEnhanced(pageContextInit, globalContext, false, {
302
287
  ssr: {
303
288
  urlRewrite,
304
289
  urlHandler: _urlHandler,
@@ -342,7 +327,7 @@ async function normalizeUrl(pageContextInit, globalContext, httpRequestId) {
342
327
  return null;
343
328
  logRuntimeInfo?.(`URL normalized from ${pc.cyan(urlOriginal)} to ${pc.cyan(urlNormalized)} (https://vike.dev/url-normalization)`, httpRequestId, 'info');
344
329
  const httpResponse = createHttpResponseRedirect({ url: urlNormalized, statusCode: 301 }, pageContextInit);
345
- const pageContextHttpResponse = createPageContext(pageContextInit);
330
+ const pageContextHttpResponse = createPageContext(pageContextInit, false);
346
331
  objectAssign(pageContextHttpResponse, { httpResponse });
347
332
  return pageContextHttpResponse;
348
333
  }
@@ -384,7 +369,7 @@ async function getPermanentRedirect(pageContextInit, globalContext, httpRequestI
384
369
  }
385
370
  logRuntimeInfo?.(`Permanent redirection defined by config.redirects (https://vike.dev/redirects)`, httpRequestId, 'info');
386
371
  const httpResponse = createHttpResponseRedirect({ url: urlTarget, statusCode: 301 }, pageContextInit);
387
- const pageContextHttpResponse = createPageContext(pageContextInit);
372
+ const pageContextHttpResponse = createPageContext(pageContextInit, false);
388
373
  objectAssign(pageContextHttpResponse, { httpResponse });
389
374
  return pageContextHttpResponse;
390
375
  }
@@ -405,10 +390,10 @@ pageContextNominalPageInit, httpRequestId, pageContextErrorPageInit, globalConte
405
390
  const abortCall = pageContextAbort._abortCall;
406
391
  assert(abortCall);
407
392
  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`);
408
- const pageContext = createPageContext({});
393
+ const pageContext = createPageContext({}, false);
409
394
  objectAssign(pageContext, { pageId: errorPageId });
410
395
  objectAssign(pageContext, pageContextAbort);
411
- objectAssign(pageContext, pageContextErrorPageInit);
396
+ objectAssign(pageContext, pageContextErrorPageInit, true);
412
397
  objectAssign(pageContext, await loadUserFilesServerSide(pageContext));
413
398
  // We include pageContextInit: we don't only serialize pageContextAbort because the error page may need to access pageContextInit
414
399
  pageContextSerialized = serializePageContextClientSide(pageContext);
@@ -429,7 +414,7 @@ pageContextNominalPageInit, httpRequestId, pageContextErrorPageInit, globalConte
429
414
  return { pageContextReturn };
430
415
  }
431
416
  if (pageContextAbort._urlRedirect) {
432
- const pageContextReturn = createPageContext(pageContextInit);
417
+ const pageContextReturn = createPageContext(pageContextInit, false);
433
418
  objectAssign(pageContextReturn, pageContextAbort);
434
419
  const httpResponse = createHttpResponseRedirect(pageContextAbort._urlRedirect, pageContextInit);
435
420
  objectAssign(pageContextReturn, { httpResponse });
@@ -444,7 +429,7 @@ async function checkBaseUrl(pageContextInit, globalContext) {
444
429
  const { isBaseMissing } = parseUrl(urlOriginal, baseServer);
445
430
  if (!isBaseMissing)
446
431
  return;
447
- const pageContext = createPageContext(pageContextInit);
432
+ const pageContext = createPageContext(pageContextInit, false);
448
433
  const httpResponse = createHttpResponseBaseIsMissing(urlOriginal, baseServer);
449
434
  objectAssign(pageContext, {
450
435
  httpResponse,
@@ -457,7 +442,7 @@ function renderInvalidRequest(pageContextInit) {
457
442
  const urlPathnameWithBase = parseUrl(pageContextInit.urlOriginal, '/').pathname;
458
443
  assertIsNotViteRequest(urlPathnameWithBase, pageContextInit.urlOriginal);
459
444
  if (urlPathnameWithBase.endsWith('/favicon.ico')) {
460
- const pageContext = createPageContext(pageContextInit);
445
+ const pageContext = createPageContext(pageContextInit, false);
461
446
  const httpResponse = createHttpResponseFavicon404();
462
447
  objectAssign(pageContext, { httpResponse });
463
448
  checkType(pageContext);
@@ -20,8 +20,8 @@ async function createDevMiddleware(options = {}) {
20
20
  }
21
21
  }
22
22
  };
23
- const { viteConfigEnhanced } = await prepareViteApiCall(optionsMod, 'dev');
24
- const server = await createServer(viteConfigEnhanced);
23
+ const { viteConfigFromUserEnhanced } = await prepareViteApiCall(optionsMod, 'dev');
24
+ const server = await createServer(viteConfigFromUserEnhanced);
25
25
  const devMiddleware = server.middlewares;
26
26
  return { devMiddleware, viteServer: server, viteConfig: server.config };
27
27
  }
@@ -0,0 +1 @@
1
+ export declare const NOT_SERIALIZABLE = "__VIKE__NOT_SERIALIZABLE__";
@@ -0,0 +1,2 @@
1
+ // TODO: move to ../node/runtime/html/NOT_SERIALIZABLE.ts once code is distributed as ESM
2
+ export const NOT_SERIALIZABLE = '__VIKE__NOT_SERIALIZABLE__';
@@ -299,13 +299,15 @@ type ConfigBuiltIn = {
299
299
  /**
300
300
  * Whether to enable pre-rendering.
301
301
  *
302
- * Setting `value: null` enables you to set prerender settings without activating pre-rendering. (Useful for Vike extensions.)
302
+ * Setting `enable: null` enables you to set prerender settings without enabling pre-rendering by default.
303
303
  *
304
- * https://vike.dev/prerender#value
304
+ * This is useful, for example, if you want pre-rendering to stay opt-in instead of opt-out while setting pre-render settings globally.
305
+ *
306
+ * https://vike.dev/prerender#enable
305
307
  *
306
308
  * @default true
307
309
  */
308
- value?: boolean | null;
310
+ enable?: boolean | null;
309
311
  };
310
312
  /**
311
313
  * Install Vike extensions.
@@ -489,6 +491,12 @@ type ConfigBuiltIn = {
489
491
  * https://vike.dev/port
490
492
  */
491
493
  port?: number;
494
+ /**
495
+ * Set the mode to run in.
496
+ *
497
+ * https://vike.dev/mode
498
+ */
499
+ mode?: string;
492
500
  /** Where scripts are injected in the HTML.
493
501
  *
494
502
  * https://vike.dev/injectScriptsAt
@@ -97,7 +97,7 @@ type ConfigValueSource = {
97
97
  locationId: LocationId;
98
98
  /** Wether the config value is loaded at runtime, for example config.Page or config.onBeforeRender */
99
99
  valueIsLoadedWithImport: boolean;
100
- /** Whether the config value is a file path, for example config.client */
100
+ /** Whether the config value is a file path, this is currently only true for +client */
101
101
  valueIsFilePath?: true;
102
102
  /** Whether the config value is defined by a +{configName}.js file */
103
103
  valueIsDefinedByPlusValueFile: boolean;
@@ -100,9 +100,9 @@ declare function logAbortErrorHandled(err: ErrorAbort, isProduction: boolean, pa
100
100
  }): void;
101
101
  type PageContextFromRewrite = {
102
102
  _urlRewrite: string;
103
- } & Record<string, unknown>;
103
+ };
104
104
  type PageContextFromAllRewrites = {
105
105
  _urlRewrite: null | string;
106
- } & Record<string, unknown>;
106
+ };
107
107
  declare function getPageContextFromAllRewrites(pageContextsFromRewrite: PageContextFromRewrite[]): PageContextFromAllRewrites;
108
108
  declare function assertNoInfiniteAbortLoop(rewriteCount: number, redirectCount: number): void;
@@ -139,11 +139,26 @@ type PageContextBuiltInCommon<Data> = {
139
139
  isBaseMissing?: true;
140
140
  };
141
141
  type PageContextBuiltInServer<Data> = PageContextBuiltInCommon<Data> & PageContextUrlServer & {
142
+ /**
143
+ * Whether the page is being rendered on the client-side, or rendered on the server-side / pre-rendered.
144
+ *
145
+ * In order to save client-side KBs, we recommend using `import.meta.env.SSR` whenever possible instead, see https://vike.dev/pageContext
146
+ */
147
+ isClientSide: false;
148
+ /**
149
+ * Whether the page is being pre-rendered.
150
+ *
151
+ * The value is always `false` in development.
152
+ *
153
+ * https://vike.dev/pre-rendering
154
+ * https://vike.dev/pageContext
155
+ */
156
+ isPrerendering: boolean;
142
157
  isHydration?: undefined;
143
158
  isBackwardNavigation?: undefined;
144
159
  previousPageContext?: undefined;
145
160
  };
146
- type PageContextBuiltInClientWithClientRouting<Data> = Partial<PageContextBuiltInCommon<Data>> & Pick<PageContextBuiltInCommon<Data>, 'Page' | 'routeParams' | 'pageExports' | 'config' | 'configEntries' | 'exports' | 'exportsAll' | 'abortReason' | 'data' | 'pageId' | 'source' | 'sources' | 'from'> & {
161
+ type PageContextBuiltInClientWithClientRouting<Data> = Partial<PageContextBuiltInCommon<Data>> & Pick<PageContextBuiltInCommon<Data>, 'Page' | 'routeParams' | 'pageExports' | 'config' | 'configEntries' | 'exports' | 'exportsAll' | 'abortReason' | 'data' | 'pageId' | 'source' | 'sources' | 'from'> & PageContextClientCommon & {
147
162
  /** Whether the current page is already rendered to HTML */
148
163
  isHydration: boolean;
149
164
  /**
@@ -159,7 +174,7 @@ type PageContextBuiltInClientWithClientRouting<Data> = Partial<PageContextBuiltI
159
174
  */
160
175
  previousPageContext: PageContextClient<Data> | null;
161
176
  } & PageContextUrlClient;
162
- type PageContextBuiltInClientWithServerRouting<Data> = Partial<PageContextBuiltInCommon<Data>> & Pick<PageContextBuiltInCommon<Data>, 'Page' | 'pageExports' | 'exports' | 'abortReason' | 'pageId' | 'data'> & {
177
+ type PageContextBuiltInClientWithServerRouting<Data> = Partial<PageContextBuiltInCommon<Data>> & Pick<PageContextBuiltInCommon<Data>, 'Page' | 'pageExports' | 'exports' | 'abortReason' | 'pageId' | 'data'> & PageContextClientCommon & {
163
178
  /**
164
179
  * Whether the current page is already rendered to HTML.
165
180
  *
@@ -173,6 +188,23 @@ type PageContextBuiltInClientWithServerRouting<Data> = Partial<PageContextBuiltI
173
188
  */
174
189
  isBackwardNavigation: null;
175
190
  };
191
+ type PageContextClientCommon = {
192
+ /**
193
+ * Whether the page is being rendered on the client-side, or rendered on the server-side / pre-rendered.
194
+ *
195
+ * In order to save client-side KBs, we recommend using `import.meta.env.SSR` whenever possible instead, see https://vike.dev/pageContext
196
+ */
197
+ isClientSide: true;
198
+ /**
199
+ * Whether the page is being pre-rendered.
200
+ *
201
+ * The value is always `false` in development.
202
+ *
203
+ * https://vike.dev/pre-rendering
204
+ * https://vike.dev/pageContext
205
+ */
206
+ isPrerendering: false;
207
+ };
176
208
  /** For Vike internal use */
177
209
  type PageContextBuiltInServerInternal = Omit<PageContextBuiltInCommon<unknown> & PageContextUrlInternal, 'data'>;
178
210
  /** @deprecated
@@ -1 +1 @@
1
- export declare const PROJECT_VERSION: "0.4.225-commit-37a36a5";
1
+ export declare const PROJECT_VERSION: "0.4.225-commit-b8fc36e";
@@ -1,2 +1,2 @@
1
1
  // Automatically updated by @brillout/release-me
2
- export const PROJECT_VERSION = '0.4.225-commit-37a36a5';
2
+ export const PROJECT_VERSION = '0.4.225-commit-b8fc36e';
@@ -42,7 +42,7 @@ function assert(condition, debugInfo) {
42
42
  const debugInfoSerialized = typeof debugInfo === 'string' ? debugInfo : JSON.stringify(debugInfo);
43
43
  return pc.dim(`Debug info (for Vike maintainers; you can ignore this): ${debugInfoSerialized}`);
44
44
  })();
45
- const link = pc.blue('https://github.com/vikejs/vike/issues/new?template=bug.yml');
45
+ const link = pc.underline('https://github.com/vikejs/vike/issues/new?template=bug.yml');
46
46
  let errMsg = [
47
47
  `You stumbled upon a Vike bug. Go to ${link} and copy-paste this error. A maintainer will fix the bug (usually within 24 hours).`,
48
48
  debugStr
@@ -1,2 +1,2 @@
1
1
  export { objectAssign };
2
- declare function objectAssign<Obj extends object, ObjAddendum extends object | null>(obj: Obj, objAddendum: ObjAddendum): asserts obj is Obj & ObjAddendum;
2
+ declare function objectAssign<Obj extends object, ObjAddendum extends object | null>(obj: Obj, objAddendum: ObjAddendum, objAddendumCanBePageContextObject?: true): asserts obj is Obj & ObjAddendum;
@@ -3,9 +3,14 @@ import { assert } from './assert.js';
3
3
  // Same as Object.assign() but:
4
4
  // - With type inference
5
5
  // - Preserves property descriptors, which we need for preserving the getters added by getPageContextUrlComputed()
6
- function objectAssign(obj, objAddendum) {
6
+ function objectAssign(obj, objAddendum, objAddendumCanBePageContextObject) {
7
7
  if (objAddendum) {
8
- assert(!('_isPageContextObject' in objAddendum));
8
+ if (!objAddendumCanBePageContextObject) {
9
+ // We only need this assert() in the rare case when the user is expected to mutate `pageContext` after the Vike hook was executed (and its promise resolved).
10
+ // - The only use case I can think of is the user mutating `pageContext` after the onRenderClient() promise resolved (which can happen when client-side rendering finishes after onRenderClient() resolves). In that case, having Vike await async Vike hooks isn't enough.
11
+ // - IIRC this assert() was mostly needed for preserving the getters added by getPageContextUrlComputed() but we don't need this anymore.
12
+ assert(!('_isPageContextObject' in objAddendum));
13
+ }
9
14
  Object.defineProperties(obj, Object.getOwnPropertyDescriptors(objAddendum));
10
15
  }
11
16
  }
@@ -0,0 +1 @@
1
+ export declare function pick<Obj extends Record<string, unknown>, Keys extends keyof Obj>(obj: Obj, keys: Keys[]): Pick<Obj, Keys>;
@@ -0,0 +1,9 @@
1
+ export function pick(obj, keys) {
2
+ const result = {};
3
+ for (const key of keys) {
4
+ if (key in obj) {
5
+ result[key] = obj[key];
6
+ }
7
+ }
8
+ return result;
9
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vike",
3
- "version": "0.4.225-commit-37a36a5",
3
+ "version": "0.4.225-commit-b8fc36e",
4
4
  "repository": "https://github.com/vikejs/vike",
5
5
  "exports": {
6
6
  "./server": {
@@ -1,5 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.notSerializable = void 0;
4
- // TODO: move to ../node/runtime/html/notSerializable.ts once code is distributed as ESM
5
- exports.notSerializable = 'not-serializable';
@@ -1 +0,0 @@
1
- export declare const notSerializable = "not-serializable";
@@ -1,2 +0,0 @@
1
- // TODO: move to ../node/runtime/html/notSerializable.ts once code is distributed as ESM
2
- export const notSerializable = 'not-serializable';