vike 0.4.249 → 0.4.250-commit-193dea3

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 (77) hide show
  1. package/bin.js +3 -0
  2. package/dist/client/runtime-client-routing/createPageContextClientSide.d.ts +1 -1
  3. package/dist/client/runtime-client-routing/getPageContext.js +0 -2
  4. package/dist/client/runtime-client-routing/getPageContextFromHooks.d.ts +136 -4
  5. package/dist/client/runtime-client-routing/history.d.ts +1 -1
  6. package/dist/client/runtime-client-routing/history.js +4 -11
  7. package/dist/client/runtime-client-routing/prefetch.d.ts +2 -2
  8. package/dist/client/runtime-client-routing/renderPageClient.d.ts +601 -6
  9. package/dist/client/runtime-client-routing/utils.d.ts +0 -1
  10. package/dist/client/runtime-client-routing/utils.js +0 -1
  11. package/dist/client/runtime-server-routing/createPageContextClientSide.d.ts +2 -6
  12. package/dist/client/runtime-server-routing/createPageContextClientSide.js +1 -21
  13. package/dist/client/runtime-server-routing/entry.js +15 -1
  14. package/dist/client/shared/execHookOnRenderClient.d.ts +4 -1
  15. package/dist/node/vite/index.js +5 -2
  16. package/dist/node/vite/plugins/non-runnable-dev/pluginReplaceConstantsNonRunnableDev.js +38 -13
  17. package/dist/node/vite/plugins/pluginAssertFileEnv.js +22 -13
  18. package/dist/node/vite/plugins/pluginExtractAssets.js +2 -0
  19. package/dist/node/vite/plugins/pluginExtractExportNames.js +2 -0
  20. package/dist/node/vite/plugins/pluginReplaceConstantsEnvVars.js +2 -0
  21. package/dist/node/vite/plugins/pluginReplaceConstantsGlobalThis.js +3 -1
  22. package/dist/node/vite/plugins/pluginReplaceConstantsPageContext.js +2 -0
  23. package/dist/node/vite/plugins/pluginStaticReplace/applyStaticReplace.d.ts +126 -0
  24. package/dist/node/vite/plugins/pluginStaticReplace/applyStaticReplace.js +421 -0
  25. package/dist/node/vite/plugins/pluginStaticReplace.d.ts +4 -0
  26. package/dist/node/vite/plugins/pluginStaticReplace.js +88 -0
  27. package/dist/node/vite/plugins/pluginVirtualFiles.js +73 -113
  28. package/dist/node/vite/plugins/pluginViteConfigVikeExtensions.d.ts +2 -1
  29. package/dist/node/vite/plugins/pluginViteConfigVikeExtensions.js +1 -3
  30. package/dist/node/vite/shared/importString.d.ts +50 -0
  31. package/dist/node/vite/shared/importString.js +63 -0
  32. package/dist/node/vite/shared/loggerDev.d.ts +3 -3
  33. package/dist/node/vite/shared/loggerDev.js +3 -3
  34. package/dist/node/vite/shared/resolveVikeConfigInternal/assertExtensions.d.ts +1 -1
  35. package/dist/node/vite/shared/resolveVikeConfigInternal/configDefinitionsBuiltIn.js +10 -1
  36. package/dist/node/vite/shared/resolveVikeConfigInternal/{crawlPlusFiles.d.ts → crawlPlusFilePaths.d.ts} +2 -2
  37. package/dist/node/vite/shared/resolveVikeConfigInternal/{crawlPlusFiles.js → crawlPlusFilePaths.js} +4 -4
  38. package/dist/node/vite/shared/resolveVikeConfigInternal/{getPlusFilesAll.d.ts → getPlusFilesByLocationId.d.ts} +8 -6
  39. package/dist/node/vite/shared/resolveVikeConfigInternal/{getPlusFilesAll.js → getPlusFilesByLocationId.js} +47 -59
  40. package/dist/node/vite/shared/resolveVikeConfigInternal/loadFileAtConfigTime.d.ts +1 -1
  41. package/dist/node/vite/shared/resolveVikeConfigInternal/pointerImports.js +11 -18
  42. package/dist/node/vite/shared/resolveVikeConfigInternal.d.ts +1 -1
  43. package/dist/node/vite/shared/resolveVikeConfigInternal.js +66 -64
  44. package/dist/server/onLoad.js +2 -2
  45. package/dist/server/runtime/logErrorServer.d.ts +2 -2
  46. package/dist/server/runtime/logErrorServer.js +0 -2
  47. package/dist/server/runtime/loggerRuntime.d.ts +3 -2
  48. package/dist/server/runtime/renderPageServer/createHttpResponse.d.ts +4 -2
  49. package/dist/server/runtime/renderPageServer/createHttpResponse.js +16 -8
  50. package/dist/server/runtime/renderPageServer/createPageContextServerSide.d.ts +5 -2
  51. package/dist/server/runtime/renderPageServer/createPageContextServerSide.js +1 -0
  52. package/dist/server/runtime/renderPageServer/csp.js +2 -0
  53. package/dist/server/runtime/renderPageServer/execHookOnError.d.ts +2 -2
  54. package/dist/server/runtime/renderPageServer/handleErrorWithoutErrorPage.d.ts +4 -4
  55. package/dist/server/runtime/renderPageServer/handleErrorWithoutErrorPage.js +3 -4
  56. package/dist/server/runtime/renderPageServer/html/serializeContext.d.ts +2 -2
  57. package/dist/server/runtime/renderPageServer/html/stream.js +12 -13
  58. package/dist/server/runtime/renderPageServer/loadPageConfigsLazyServerSide.d.ts +2 -2
  59. package/dist/server/runtime/renderPageServer/log404/index.d.ts +2 -2
  60. package/dist/server/runtime/renderPageServer/renderPageServerAfterRoute.d.ts +3 -3
  61. package/dist/server/runtime/renderPageServer/renderPageServerAfterRoute.js +2 -2
  62. package/dist/server/runtime/renderPageServer.js +19 -19
  63. package/dist/shared-server-client/hooks/execHook.d.ts +5 -1
  64. package/dist/types/Config/ConfigResolved.d.ts +3 -2
  65. package/dist/types/Config.d.ts +38 -31
  66. package/dist/types/PageConfig.d.ts +1 -1
  67. package/dist/types/index.d.ts +2 -1
  68. package/dist/utils/PROJECT_VERSION.d.ts +1 -1
  69. package/dist/utils/PROJECT_VERSION.js +1 -1
  70. package/dist/utils/assert.d.ts +5 -5
  71. package/dist/utils/assert.js +8 -8
  72. package/dist/utils/debug.d.ts +1 -1
  73. package/dist/utils/debug.js +1 -0
  74. package/package.json +9 -7
  75. package/node/cli/bin.js +0 -3
  76. /package/dist/node/vite/shared/resolveVikeConfigInternal/{crawlPlusFiles → crawlPlusFilePaths}/ignorePatternsBuiltIn.d.ts +0 -0
  77. /package/dist/node/vite/shared/resolveVikeConfigInternal/{crawlPlusFiles → crawlPlusFilePaths}/ignorePatternsBuiltIn.js +0 -0
@@ -1,7 +1,8 @@
1
1
  export { createHttpResponsePage };
2
- export { createHttpResponsePageContextJson };
2
+ export { createHttpResponsePageJson };
3
3
  export { createHttpResponseErrorFallback };
4
4
  export { createHttpResponseErrorFallback_noGlobalContext };
5
+ export { createHttpResponseErrorFallbackJson };
5
6
  export { createHttpResponseRedirect };
6
7
  export { createHttpResponse404 };
7
8
  export { createHttpResponseBaseIsMissing };
@@ -36,5 +37,6 @@ declare function createHttpResponseErrorFallback(pageContext: {
36
37
  _globalContext: GlobalContextServerInternal;
37
38
  }): HttpResponse;
38
39
  declare function createHttpResponseErrorFallback_noGlobalContext(): HttpResponse;
39
- declare function createHttpResponsePageContextJson(pageContextSerialized: string): Promise<HttpResponse>;
40
+ declare function createHttpResponseErrorFallbackJson(): HttpResponse;
41
+ declare function createHttpResponsePageJson(pageContextSerialized: string): Promise<HttpResponse>;
40
42
  declare function createHttpResponseRedirect({ url, statusCode }: UrlRedirect, pageContextInit: PageContextBegin): HttpResponse;
@@ -1,7 +1,8 @@
1
1
  export { createHttpResponsePage };
2
- export { createHttpResponsePageContextJson };
2
+ export { createHttpResponsePageJson };
3
3
  export { createHttpResponseErrorFallback };
4
4
  export { createHttpResponseErrorFallback_noGlobalContext };
5
+ export { createHttpResponseErrorFallbackJson };
5
6
  export { createHttpResponseRedirect };
6
7
  export { createHttpResponse404 };
7
8
  export { createHttpResponseBaseIsMissing };
@@ -11,6 +12,9 @@ import { getHttpResponseBody, getHttpResponseBodyStreamHandlers } from './getHtt
11
12
  import { getEarlyHints } from './getEarlyHints.js';
12
13
  import { assertNoInfiniteHttpRedirect } from './createHttpResponse/assertNoInfiniteHttpRedirect.js';
13
14
  import { resolveHeadersResponseFinal } from './headersResponse.js';
15
+ import { stringify } from '@brillout/json-serializer/stringify';
16
+ const contentTypeJson = 'application/json';
17
+ const contentTypeHtml = 'text/html;charset=utf-8';
14
18
  async function createHttpResponsePage(htmlRender, renderHook, pageContext) {
15
19
  let statusCode = pageContext.abortStatusCode;
16
20
  if (!statusCode) {
@@ -29,17 +33,17 @@ async function createHttpResponsePage(htmlRender, renderHook, pageContext) {
29
33
  }
30
34
  const earlyHints = getEarlyHints(await pageContext.__getPageAssets());
31
35
  const headers = resolveHeadersResponseFinal(pageContext, statusCode);
32
- return createHttpResponse(statusCode, 'text/html;charset=utf-8', headers, htmlRender, earlyHints, renderHook);
36
+ return createHttpResponse(statusCode, contentTypeHtml, headers, htmlRender, earlyHints, renderHook);
33
37
  }
34
38
  function createHttpResponse404(errMsg404) {
35
- const httpResponse = createHttpResponse(404, 'text/html;charset=utf-8', [], `<p>${errMsg404}.</p><script>console.log('This HTML was generated by Vike.')</script>`);
39
+ const httpResponse = createHttpResponse(404, contentTypeHtml, [], `<p>${errMsg404}.</p><script>console.log('This HTML was generated by Vike.')</script>`);
36
40
  return httpResponse;
37
41
  }
38
42
  function createHttpResponseBaseIsMissing(urlOriginal, baseServer) {
39
43
  const httpResponse = createHttpResponse(
40
44
  // We use the error code `500` to signal a failing state because this HTTP response should never be used, see https://vike.dev/base-url#setup
41
45
  // In other words: this HTTP response is expected to be generated but isn't expected to be actually used.
42
- 500, 'text/html;charset=utf-8', [], `
46
+ 500, contentTypeHtml, [], `
43
47
  <h1>Error: Base URL is missing</h1>
44
48
  <p>
45
49
  <a href="https://vike.dev/renderPage"><code>renderPage(pageContextInit)</code></a> called with <code>pageContextInit.urlOriginal===${JSON.stringify(urlOriginal)}</code> which doesn't start with the Base URL <code>${baseServer}</code>.
@@ -74,11 +78,15 @@ function createHttpResponseErrorFallback_noGlobalContext() {
74
78
  return createHttpResponseError_('no error page (https://vike.dev/error-page) could be rendered');
75
79
  }
76
80
  function createHttpResponseError_(reason) {
77
- const httpResponse = createHttpResponse(500, 'text/html;charset=utf-8', [], `<p>An error occurred.</p><script>console.log(${JSON.stringify(`This HTML was generated by Vike. Vike returned this HTML because ${reason}.`)})</script>`);
81
+ const httpResponse = createHttpResponse(500, contentTypeHtml, [], `<p>An error occurred.</p><script>console.log(${JSON.stringify(`This HTML was generated by Vike. Vike returned this HTML because ${reason}.`)})</script>`);
78
82
  return httpResponse;
79
83
  }
80
- async function createHttpResponsePageContextJson(pageContextSerialized) {
81
- const httpResponse = createHttpResponse(200, 'application/json', [], pageContextSerialized, [], null);
84
+ function createHttpResponseErrorFallbackJson() {
85
+ const httpResponse = createHttpResponse(500, contentTypeJson, [], stringify({ serverSideError: true }));
86
+ return httpResponse;
87
+ }
88
+ async function createHttpResponsePageJson(pageContextSerialized) {
89
+ const httpResponse = createHttpResponse(200, contentTypeJson, [], pageContextSerialized, [], null);
82
90
  return httpResponse;
83
91
  }
84
92
  function createHttpResponseRedirect({ url, statusCode }, pageContextInit) {
@@ -87,7 +95,7 @@ function createHttpResponseRedirect({ url, statusCode }, pageContextInit) {
87
95
  assert(statusCode);
88
96
  assert(300 <= statusCode && statusCode <= 399);
89
97
  const headers = [['Location', url]];
90
- return createHttpResponse(statusCode, 'text/html;charset=utf-8', headers,
98
+ return createHttpResponse(statusCode, contentTypeHtml, headers,
91
99
  // For bots / programmatic crawlig: show what's going on.
92
100
  // For users: showing a blank page is probably better than a flickering text.
93
101
  `<p style="display: none">Redirecting to ${escapeHtml(url)}</p><script>console.log('This HTML was generated by Vike.')</script>`);
@@ -1,9 +1,11 @@
1
1
  export { createPageContextServerSide };
2
2
  export { createPageContextServerSideWithoutGlobalContext };
3
- export type { PageContextCreated };
3
+ export type { PageContextCreatedServer };
4
+ export type { PageContextCreatedServerMinimum };
4
5
  import type { GlobalContextServerInternal } from '../globalContext.js';
5
6
  import type { PageContextInit } from '../renderPageServer.js';
6
- type PageContextCreated = Awaited<ReturnType<typeof createPageContextServerSide>>;
7
+ type PageContextCreatedServerMinimum = ReturnType<typeof createPageContextServerSideWithoutGlobalContext>;
8
+ type PageContextCreatedServer = Awaited<ReturnType<typeof createPageContextServerSide>>;
7
9
  declare function createPageContextServerSide(pageContextInit: PageContextInit, globalContext: GlobalContextServerInternal, args: {
8
10
  requestId: number;
9
11
  } & ({
@@ -146,6 +148,7 @@ declare function createPageContextServerSide(pageContextInit: PageContextInit, g
146
148
  } & {
147
149
  headers: Record<string, string> | null;
148
150
  };
151
+ /** Use this as last resort — prefer passing richer `pageContext` objects to the runtime logger */
149
152
  declare function createPageContextServerSideWithoutGlobalContext(pageContextInit: PageContextInit, requestId: number): {
150
153
  _isOriginalObject: true;
151
154
  isPageContext: true;
@@ -41,6 +41,7 @@ function createPageContextServerSide(pageContextInit, globalContext, args) {
41
41
  updateType(pageContextCreated, pageContextAugmented);
42
42
  return pageContextCreated;
43
43
  }
44
+ /** Use this as last resort — prefer passing richer `pageContext` objects to the runtime logger */
44
45
  function createPageContextServerSideWithoutGlobalContext(pageContextInit, requestId) {
45
46
  const pageContext = createPageContext(pageContextInit, false, requestId);
46
47
  return pageContext;
@@ -32,6 +32,7 @@ async function generateNonce() {
32
32
  return cryptoModule.randomBytes(16).toString('base64url');
33
33
  }
34
34
  function inferNonceAttr(pageContext) {
35
+ // No need to escape the injected HTML — pageContext.cspNone is controlled by the developer, not by the website visitor (I wouldn't know why the developer would set +csp.none to a value coming from the database)
35
36
  const nonceAttr = pageContext.cspNonce ? ` nonce="${pageContext.cspNonce}"` : '';
36
37
  return nonceAttr;
37
38
  }
@@ -41,5 +42,6 @@ function addCspResponseHeader(pageContext, headersResponse) {
41
42
  return;
42
43
  if (headersResponse.get('Content-Security-Policy'))
43
44
  return;
45
+ // No need to sanitize the injected header — see comment above about not escaping HTML
44
46
  headersResponse.set('Content-Security-Policy', `script-src 'self' 'nonce-${pageContext.cspNonce}'`);
45
47
  }
@@ -1,3 +1,3 @@
1
1
  export { execHookOnError };
2
- import type { PageContext_logRuntime } from '../loggerRuntime.js';
3
- declare function execHookOnError(err: unknown, pageContext: PageContext_logRuntime): void;
2
+ import type { PageContextCreatedServerMinimum } from './createPageContextServerSide.js';
3
+ declare function execHookOnError(err: unknown, pageContext: PageContextCreatedServerMinimum | null): void;
@@ -1,12 +1,12 @@
1
1
  export { handleErrorWithoutErrorPage };
2
2
  import type { GlobalContextServerInternal } from '../globalContext.js';
3
- import type { PageContextCreated } from './createPageContextServerSide.js';
4
- declare function handleErrorWithoutErrorPage<PageContext extends PageContextCreated & {
3
+ import type { PageContextCreatedServer } from './createPageContextServerSide.js';
4
+ declare function handleErrorWithoutErrorPage<PageContext extends PageContextCreatedServer & {
5
5
  errorWhileRendering: null | Error;
6
6
  is404: null | boolean;
7
7
  pageId: null;
8
8
  _globalContext: GlobalContextServerInternal;
9
9
  urlOriginal: string;
10
- }>(pageContext: PageContext): Promise<PageContext & {
10
+ }>(pageContext: PageContext): PageContext & {
11
11
  httpResponse: import("./createHttpResponse.js").HttpResponse;
12
- }>;
12
+ };
@@ -1,10 +1,9 @@
1
1
  export { handleErrorWithoutErrorPage };
2
- import { stringify } from '@brillout/json-serializer/stringify';
3
2
  import { assert, assertWarning, objectAssign } from '../../utils.js';
4
- import { createHttpResponsePage, createHttpResponseErrorFallback } from './createHttpResponse.js';
3
+ import { createHttpResponseErrorFallback, createHttpResponseErrorFallbackJson } from './createHttpResponse.js';
5
4
  import pc from '@brillout/picocolors';
6
5
  // When the user hasn't defined _error.page.js
7
- async function handleErrorWithoutErrorPage(pageContext) {
6
+ function handleErrorWithoutErrorPage(pageContext) {
8
7
  assert(pageContext.pageId === null);
9
8
  assert(pageContext.errorWhileRendering || pageContext.is404);
10
9
  {
@@ -19,7 +18,7 @@ async function handleErrorWithoutErrorPage(pageContext) {
19
18
  else {
20
19
  const __getPageAssets = async () => [];
21
20
  objectAssign(pageContext, { __getPageAssets });
22
- const httpResponse = await createHttpResponsePage(stringify({ serverSideError: true }), null, pageContext);
21
+ const httpResponse = createHttpResponseErrorFallbackJson();
23
22
  objectAssign(pageContext, { httpResponse });
24
23
  return pageContext;
25
24
  }
@@ -6,10 +6,10 @@ export type { PassToClient };
6
6
  export type { PassToClientPublic };
7
7
  import type { UrlRedirect } from '../../../../shared-server-client/route/abort.js';
8
8
  import type { GlobalContextServerInternal } from '../../globalContext.js';
9
- import type { PageContextCreated } from '../createPageContextServerSide.js';
9
+ import type { PageContextCreatedServer } from '../createPageContextServerSide.js';
10
10
  import type { PageContextBegin } from '../../renderPageServer.js';
11
11
  import type { PageContextCspNonce } from '../csp.js';
12
- type PageContextSerialization = PageContextCreated & {
12
+ type PageContextSerialization = PageContextCreatedServer & {
13
13
  pageId: string;
14
14
  routeParams: Record<string, string>;
15
15
  _passToClient: PassToClient;
@@ -242,7 +242,7 @@ async function processStream(streamOriginal, { injectStringAtBegin, injectString
242
242
  writeStream(injectedChunk); // Adds injectedChunk to buffer
243
243
  flushStream(); // Sets shouldFlushStream to true
244
244
  }
245
- // We call onStreamEvent() also when the stream ends in order to properly handle the situation when the stream didn't emit any data
245
+ // We call onStreamDataOrEnd() also when the stream ends in order to properly handle the situation when the stream didn't emit any data
246
246
  const onStreamDataOrEnd = (cb) => {
247
247
  assert(streamOriginalEnded === false);
248
248
  streamOriginalHasStartedEmitting = true;
@@ -277,26 +277,23 @@ async function processStream(streamOriginal, { injectStringAtBegin, injectString
277
277
  }
278
278
  });
279
279
  },
280
- async onEnd(
281
- /* Should we use this `isCancel`? Maybe we can skip `injectStringAtEnd()`?
282
- isCancel,
283
- //*/
284
- ) {
280
+ async onEnd(isCancel) {
285
281
  try {
286
282
  assert(!onEndWasCalled);
287
283
  onEndWasCalled = true;
288
284
  debug('stream end');
289
- // We call onStreamEvent() also here in case the stream didn't emit any data
285
+ // We call onStreamDataOrEnd() also here in case the stream didn't emit any data
290
286
  onStreamDataOrEnd(() => {
291
287
  streamOriginalEnded = true;
292
288
  });
293
- if (injectStringAtEnd) {
289
+ if (injectStringAtEnd && !isCancel) {
294
290
  const injectedChunk = await injectStringAtEnd();
295
291
  writeStream(injectedChunk);
296
292
  }
297
293
  await promiseReadyToWrite; // E.g. if the user calls the pipe wrapper after the original writable has ended
298
294
  assert(isReady());
299
- flushBuffer();
295
+ if (!isCancel)
296
+ flushBuffer();
300
297
  streamClosed = true;
301
298
  debug('stream ended');
302
299
  }
@@ -526,7 +523,8 @@ async function createStreamWrapper({ streamOriginal, onError, onData, onEnd, onF
526
523
  return;
527
524
  await onEnd(isCancel);
528
525
  isClosed = true;
529
- controllerProxy.close();
526
+ if (!isCancel)
527
+ controllerProxy.close();
530
528
  };
531
529
  let controllerProxy;
532
530
  assertReadableStreamConstructor();
@@ -546,6 +544,7 @@ async function createStreamWrapper({ streamOriginal, onError, onData, onEnd, onF
546
544
  });
547
545
  },
548
546
  async cancel(...args) {
547
+ debug('stream cancelled');
549
548
  isCancel = true;
550
549
  await readableOriginal.cancel(...args);
551
550
  // If readableOriginal has implemented readableOriginal.cancel() then the onEnd() callback and therefore closeStream() may already have been called at this point
@@ -553,9 +552,9 @@ async function createStreamWrapper({ streamOriginal, onError, onData, onEnd, onF
553
552
  },
554
553
  });
555
554
  const writeChunk = (chunk) => {
556
- 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 the steam is closed.
558
- !isClosed) {
555
+ if (!isCancel &&
556
+ // 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.
557
+ !isClosed) {
559
558
  controllerProxy.enqueue(encodeForWebStream(chunk));
560
559
  debugWithChunk('data written (Web Readable)', chunk);
561
560
  }
@@ -8,8 +8,8 @@ import { type PageAsset } from './getPageAssets.js';
8
8
  import type { PageConfigRuntime } from '../../../types/PageConfig.js';
9
9
  import type { PassToClient } from './html/serializeContext.js';
10
10
  import type { PageContextAfterRoute } from '../../../shared-server-client/route/index.js';
11
- import type { PageContextCreated } from './createPageContextServerSide.js';
12
- type PageContext_loadPageConfigsLazyServerSide = PageContextCreated & PageContextAfterRoute & {
11
+ import type { PageContextCreatedServer } from './createPageContextServerSide.js';
12
+ type PageContext_loadPageConfigsLazyServerSide = PageContextCreatedServer & PageContextAfterRoute & {
13
13
  is404: boolean | null;
14
14
  pageId: string;
15
15
  };
@@ -2,8 +2,8 @@ export { log404 };
2
2
  export { getRoutesInfo };
3
3
  import type { PageRoutes } from '../../../../shared-server-client/route/index.js';
4
4
  import type { GlobalContextServerInternal } from '../../globalContext.js';
5
- import type { PageContextCreated } from '../createPageContextServerSide.js';
6
- declare function log404(pageContext: PageContextCreated & {
5
+ import type { PageContextCreatedServer } from '../createPageContextServerSide.js';
6
+ declare function log404(pageContext: PageContextCreatedServer & {
7
7
  urlPathname: string;
8
8
  errorWhileRendering: null | Error;
9
9
  _globalContext: GlobalContextServerInternal;
@@ -5,7 +5,7 @@ export type { PageContextAfterRender };
5
5
  import { type PageContextUrlInternal } from '../../../shared-server-client/getPageContextUrlComputed.js';
6
6
  import { HttpResponse } from './createHttpResponse.js';
7
7
  import { type PageContext_loadPageConfigsLazyServerSide, type PageConfigsLazy } from './loadPageConfigsLazyServerSide.js';
8
- import type { PageContextCreated } from './createPageContextServerSide.js';
8
+ import type { PageContextCreatedServer } from './createPageContextServerSide.js';
9
9
  import type { PageContextBegin } from '../renderPageServer.js';
10
10
  type PageContextAfterRender = {
11
11
  httpResponse: HttpResponse;
@@ -18,7 +18,7 @@ declare function renderPageServerAfterRoute<PageContext extends {
18
18
  routeParams: Record<string, string>;
19
19
  errorWhileRendering: null | Error;
20
20
  _requestId: number;
21
- } & PageContextCreated & PageContextBegin & PageContextUrlInternal & PageContext_loadPageConfigsLazyServerSide>(pageContext: PageContext): Promise<PageContext & PageContextAfterRender>;
21
+ } & PageContextCreatedServer & PageContextBegin & PageContextUrlInternal & PageContext_loadPageConfigsLazyServerSide>(pageContext: PageContext): Promise<PageContext & PageContextAfterRender>;
22
22
  declare function prerenderPage(pageContext: Parameters<typeof prerenderPageEntry>[0]): Promise<{
23
23
  documentHtml: string;
24
24
  pageContextSerialized: null;
@@ -348,7 +348,7 @@ declare function prerenderPage(pageContext: Parameters<typeof prerenderPageEntry
348
348
  pageContextsAborted: never[];
349
349
  };
350
350
  }>;
351
- declare function prerenderPageEntry(pageContext: PageContextCreated & PageConfigsLazy & {
351
+ declare function prerenderPageEntry(pageContext: PageContextCreatedServer & PageConfigsLazy & {
352
352
  routeParams: Record<string, string>;
353
353
  pageId: string;
354
354
  _requestId: number;
@@ -5,7 +5,7 @@ import { getErrorPageId } from '../../../shared-server-client/error-page.js';
5
5
  import { getHtmlString } from './html/renderHtml.js';
6
6
  import { assert, assertUsage, updateType, hasProp, objectAssign, isSameErrorMessage } from '../../utils.js';
7
7
  import { getPageContextClientSerialized } from './html/serializeContext.js';
8
- import { createHttpResponsePage, createHttpResponsePageContextJson } from './createHttpResponse.js';
8
+ import { createHttpResponsePage, createHttpResponsePageJson } from './createHttpResponse.js';
9
9
  import { loadPageConfigsLazyServerSide, } from './loadPageConfigsLazyServerSide.js';
10
10
  import { execHookOnRenderHtml } from './execHookOnRenderHtml.js';
11
11
  import { execHookDataAndOnBeforeRender } from './execHookDataAndOnBeforeRender.js';
@@ -46,7 +46,7 @@ async function renderPageServerAfterRoute(pageContext) {
46
46
  objectAssign(pageContext, { [isServerSideError]: true });
47
47
  }
48
48
  const pageContextSerialized = getPageContextClientSerialized(pageContext, false);
49
- const httpResponse = await createHttpResponsePageContextJson(pageContextSerialized);
49
+ const httpResponse = await createHttpResponsePageJson(pageContextSerialized);
50
50
  objectAssign(pageContext, { httpResponse });
51
51
  return pageContext;
52
52
  }
@@ -6,7 +6,7 @@ import { assert, hasProp, objectAssign, isUrl, parseUrl, onSetupRuntime, assertW
6
6
  import { getPageContextAddendumAbort, isAbortError, logAbort, addNewPageContextAborted, } from '../../shared-server-client/route/abort.js';
7
7
  import { getGlobalContextServerInternal, initGlobalContext_renderPage, } from './globalContext.js';
8
8
  import { handlePageContextRequestUrl } from './renderPageServer/handlePageContextRequestUrl.js';
9
- import { createHttpResponse404, createHttpResponseRedirect, createHttpResponsePageContextJson, createHttpResponseErrorFallback, createHttpResponseErrorFallback_noGlobalContext, createHttpResponseBaseIsMissing, } from './renderPageServer/createHttpResponse.js';
9
+ import { createHttpResponse404, createHttpResponseRedirect, createHttpResponsePageJson, createHttpResponseErrorFallback, createHttpResponseErrorFallback_noGlobalContext, createHttpResponseBaseIsMissing, } from './renderPageServer/createHttpResponse.js';
10
10
  import { logRuntimeError, logRuntimeInfo } from './loggerRuntime.js';
11
11
  import { assertArguments } from './renderPageServer/assertArguments.js';
12
12
  import { log404 } from './renderPageServer/log404/index.js';
@@ -40,7 +40,7 @@ async function renderPageServer(pageContextInit) {
40
40
  const pageContextFinish = !asyncLocalStorage ? await render() : await asyncLocalStorage.run(asyncStore, render);
41
41
  logHttpResponse(urlOriginalPretty, pageContextFinish);
42
42
  checkType(pageContextFinish);
43
- assert(pageContextFinish.httpResponse);
43
+ assertPageContextFinish(pageContextFinish);
44
44
  return pageContextFinish;
45
45
  }
46
46
  async function renderPageServerEntryOnce(pageContextInit, requestId, asyncStore) {
@@ -63,8 +63,8 @@ async function renderPageServerEntryOnce(pageContextInit, requestId, asyncStore)
63
63
  // ```
64
64
  // - initGlobalContext_renderPage() depends on +onCreateGlobalContext hooks
65
65
  assert(!isAbortError(err));
66
- const pageContext_logRuntime = getPageContext_logRuntimeEarly(pageContextInit, requestId);
67
- logRuntimeError(err, pageContext_logRuntime);
66
+ const pageContext = createPageContextServerSideWithoutGlobalContext(pageContextInit, requestId);
67
+ logRuntimeError(err, pageContext);
68
68
  const pageContextHttpErrorFallback = getPageContextHttpErrorFallback_noGlobalContext(err, pageContextInit, requestId);
69
69
  return pageContextHttpErrorFallback;
70
70
  }
@@ -131,7 +131,7 @@ async function renderPageServerEntryRecursive(pageContextBegin, globalContext, r
131
131
  const errorPageId = getErrorPageId(pageContextNominalPageBegin._globalContext._pageFilesAll, pageContextNominalPageBegin._globalContext._pageConfigs);
132
132
  if (!errorPageId) {
133
133
  assert(hasProp(pageContextNominalPageBegin, 'pageId', 'null')); // Help TS
134
- return await handleErrorWithoutErrorPage(pageContextNominalPageBegin);
134
+ return handleErrorWithoutErrorPage(pageContextNominalPageBegin);
135
135
  }
136
136
  objectAssign(pageContextNominalPageBegin, { pageId: errorPageId });
137
137
  }
@@ -182,7 +182,7 @@ async function renderPageServerEntryRecursive_onError(err, pageContextBegin, pag
182
182
  const errorPageId = getErrorPageId(globalContext._pageFilesAll, globalContext._pageConfigs);
183
183
  if (!errorPageId) {
184
184
  objectAssign(pageContextErrorPageInit, { pageId: null });
185
- return await handleErrorWithoutErrorPage(pageContextErrorPageInit);
185
+ return handleErrorWithoutErrorPage(pageContextErrorPageInit);
186
186
  }
187
187
  objectAssign(pageContextErrorPageInit, { pageId: errorPageId });
188
188
  }
@@ -216,8 +216,8 @@ async function renderPageServerEntryRecursive_onError(err, pageContextBegin, pag
216
216
  return pageContextErrorPage;
217
217
  }
218
218
  function logHttpRequest(urlOriginal, pageContextInit, requestId) {
219
- const pageContext_logRuntime = getPageContext_logRuntimeEarly(pageContextInit, requestId);
220
- logRuntimeInfo?.(getRequestInfoMessage(urlOriginal), pageContext_logRuntime, 'info');
219
+ const pageContext = createPageContextServerSideWithoutGlobalContext(pageContextInit, requestId);
220
+ logRuntimeInfo?.(getRequestInfoMessage(urlOriginal), pageContext, 'info');
221
221
  }
222
222
  /* Alternative icons:
223
223
  const arrowRight = pc.dim('»')
@@ -430,7 +430,7 @@ pageContextNominalPageBegin, requestId, pageContextErrorPageInit, globalContext)
430
430
  else {
431
431
  pageContextSerialized = getPageContextClientSerializedAbort(pageContextAbort, false);
432
432
  }
433
- const httpResponse = await createHttpResponsePageContextJson(pageContextSerialized);
433
+ const httpResponse = await createHttpResponsePageJson(pageContextSerialized);
434
434
  objectAssign(pageContext, { httpResponse });
435
435
  return { pageContextReturn: pageContext };
436
436
  }
@@ -486,19 +486,11 @@ function getPageContextSkipRequest(pageContextInit, requestId) {
486
486
  return pageContext;
487
487
  }
488
488
  function getPageContextInvalidVikeConfig(err, pageContextInit, requestId) {
489
- const pageContext_logRuntime = getPageContext_logRuntimeEarly(pageContextInit, requestId);
490
- logRuntimeInfo?.(pc.bold(pc.red('Error loading Vike config — see error above')), pageContext_logRuntime, 'error');
489
+ const pageContext = createPageContextServerSideWithoutGlobalContext(pageContextInit, requestId);
490
+ logRuntimeInfo?.(pc.bold(pc.red('Error loading Vike config — see error above')), pageContext, 'error');
491
491
  const pageContextHttpErrorFallback = getPageContextHttpErrorFallback_noGlobalContext(err, pageContextInit, requestId);
492
492
  return pageContextHttpErrorFallback;
493
493
  }
494
- /** Use this as last resort — prefer passing richer `pageContext` objects to the runtime logger */
495
- function getPageContext_logRuntimeEarly(pageContextInit, requestId) {
496
- const pageContext_logRuntime = {
497
- ...pageContextInit,
498
- _requestId: requestId,
499
- };
500
- return pageContext_logRuntime;
501
- }
502
494
  function fork(pageContext) {
503
495
  const pageContextNew = forkPageContext(pageContext);
504
496
  if (pageContext._asyncStore)
@@ -506,3 +498,11 @@ function fork(pageContext) {
506
498
  assert(pageContextNew._asyncStore === pageContext._asyncStore);
507
499
  return pageContextNew;
508
500
  }
501
+ function assertPageContextFinish(pageContextFinish) {
502
+ assert(pageContextFinish.httpResponse);
503
+ if (pageContextFinish.isClientSideNavigation) {
504
+ const headers = new Headers(pageContextFinish.httpResponse.headers);
505
+ const contentType = headers.get('Content-Type');
506
+ assert(contentType?.toLowerCase() === 'application/json');
507
+ }
508
+ }
@@ -18,7 +18,11 @@ import type { PageContextForPublicUsageServer } from '../../server/runtime/rende
18
18
  import type { PageContextForPublicUsageClientShared } from '../../client/shared/preparePageContextForPublicUsageClientShared.js';
19
19
  import { type PageContextPrepareMinimum } from '../preparePageContextForPublicUsage.js';
20
20
  import type { GlobalContextPrepareMinimum } from '../prepareGlobalContextForPublicUsage.js';
21
- type PageContextExecHook = PageContextConfig & PageContextForPublicUsage;
21
+ import type { PageContextCreatedClient } from '../../client/runtime-client-routing/createPageContextClientSide.js';
22
+ import type { PageContextCreatedServer } from '../../server/runtime/renderPageServer/createPageContextServerSide.js';
23
+ import type { PageContextCreatedClient_ServerRouting } from '../../client/runtime-server-routing/createPageContextClientSide.js';
24
+ type PageContextExecHook = PageContextCreated & PageContextConfig & PageContextForPublicUsage;
25
+ type PageContextCreated = PageContextCreatedServer | PageContextCreatedClient | PageContextCreatedClient_ServerRouting;
22
26
  type PageContextForPublicUsage = PageContextForPublicUsageServer | PageContextForPublicUsageClientShared;
23
27
  type HookWithResult = Hook & {
24
28
  hookReturn: unknown;
@@ -1,8 +1,9 @@
1
1
  export type { ConfigResolved };
2
- import type { ConfigBuiltIn, ConfigBuiltInResolved, ImportString } from '../Config.js';
2
+ import type { ConfigBuiltIn, ConfigBuiltInResolved } from '../Config.js';
3
+ import type { ImportStringList } from '../../node/vite/shared/importString.js';
3
4
  type ConfigUnresolved = WithoutImportString<ConfigBuiltIn & Vike.Config>;
4
5
  type ConfigResolvedOnly = ConfigBuiltInResolved & Vike.ConfigResolved;
5
6
  type ConfigResolved = ConfigResolvedOnly & Omit<ConfigUnresolved, keyof ConfigResolvedOnly>;
6
7
  type WithoutImportString<T> = {
7
- [K in keyof T]: Exclude<T[K], ImportString>;
8
+ [K in keyof T]: Exclude<T[K], ImportStringList>;
8
9
  };