vike 0.4.249-commit-b3b9c55 → 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 (34) hide show
  1. package/dist/client/runtime-client-routing/createPageContextClientSide.d.ts +1 -1
  2. package/dist/client/runtime-client-routing/getPageContextFromHooks.d.ts +136 -4
  3. package/dist/client/runtime-client-routing/prefetch.d.ts +2 -2
  4. package/dist/client/runtime-client-routing/renderPageClient.d.ts +601 -6
  5. package/dist/client/runtime-server-routing/createPageContextClientSide.d.ts +2 -6
  6. package/dist/client/runtime-server-routing/createPageContextClientSide.js +1 -21
  7. package/dist/client/runtime-server-routing/entry.js +15 -1
  8. package/dist/client/shared/execHookOnRenderClient.d.ts +4 -1
  9. package/dist/node/vite/shared/loggerDev.d.ts +3 -3
  10. package/dist/node/vite/shared/loggerDev.js +3 -3
  11. package/dist/node/vite/shared/resolveVikeConfigInternal/configDefinitionsBuiltIn.js +2 -1
  12. package/dist/server/onLoad.js +2 -2
  13. package/dist/server/runtime/logErrorServer.d.ts +2 -2
  14. package/dist/server/runtime/logErrorServer.js +0 -2
  15. package/dist/server/runtime/loggerRuntime.d.ts +3 -2
  16. package/dist/server/runtime/renderPageServer/createHttpResponse.d.ts +4 -2
  17. package/dist/server/runtime/renderPageServer/createHttpResponse.js +16 -8
  18. package/dist/server/runtime/renderPageServer/createPageContextServerSide.d.ts +5 -2
  19. package/dist/server/runtime/renderPageServer/createPageContextServerSide.js +1 -0
  20. package/dist/server/runtime/renderPageServer/execHookOnError.d.ts +2 -2
  21. package/dist/server/runtime/renderPageServer/handleErrorWithoutErrorPage.d.ts +4 -4
  22. package/dist/server/runtime/renderPageServer/handleErrorWithoutErrorPage.js +3 -4
  23. package/dist/server/runtime/renderPageServer/html/serializeContext.d.ts +2 -2
  24. package/dist/server/runtime/renderPageServer/loadPageConfigsLazyServerSide.d.ts +2 -2
  25. package/dist/server/runtime/renderPageServer/log404/index.d.ts +2 -2
  26. package/dist/server/runtime/renderPageServer/renderPageServerAfterRoute.d.ts +3 -3
  27. package/dist/server/runtime/renderPageServer/renderPageServerAfterRoute.js +2 -2
  28. package/dist/server/runtime/renderPageServer.js +19 -19
  29. package/dist/shared-server-client/hooks/execHook.d.ts +5 -1
  30. package/dist/utils/PROJECT_VERSION.d.ts +1 -1
  31. package/dist/utils/PROJECT_VERSION.js +1 -1
  32. package/dist/utils/assert.d.ts +5 -5
  33. package/dist/utils/assert.js +8 -8
  34. package/package.json +1 -1
@@ -1,13 +1,7 @@
1
1
  export { createPageContextClientSide };
2
- import { assertUsage, updateType, objectAssign } from './utils.js';
3
- import { getPageContextSerializedInHtml } from '../shared/getJsonSerializedInHtml.js';
4
- import { loadPageConfigsLazyClientSide, } from '../shared/loadPageConfigsLazyClientSide.js';
5
- import { getCurrentUrl } from '../shared/getCurrentUrl.js';
2
+ import { updateType, objectAssign } from './utils.js';
6
3
  import { createPageContextObject, createPageContextShared } from '../../shared-server-client/createPageContextShared.js';
7
4
  import { getGlobalContextClientInternal } from './getGlobalContextClientInternal.js';
8
- import { preparePageContextForPublicUsageClient, } from './preparePageContextForPublicUsageClient.js';
9
- import { execHook } from '../../shared-server-client/hooks/execHook.js';
10
- const urlFirst = getCurrentUrl({ withoutHash: true });
11
5
  async function createPageContextClientSide() {
12
6
  const globalContext = await getGlobalContextClientInternal();
13
7
  const pageContextCreated = createPageContextObject();
@@ -21,21 +15,7 @@ async function createPageContextClientSide() {
21
15
  isHistoryNavigation: null,
22
16
  _hasPageContextFromServer: true,
23
17
  });
24
- objectAssign(pageContextCreated, getPageContextSerializedInHtml());
25
18
  // Sets pageContext.config to global configs
26
19
  updateType(pageContextCreated, createPageContextShared(pageContextCreated, globalContext._globalConfigPublic));
27
- // Sets pageContext.config to local configs (overrides the pageContext.config set above)
28
- updateType(pageContextCreated, await loadPageConfigsLazyClientSideAndExecHook(pageContextCreated));
29
- assertPristineUrl();
30
20
  return pageContextCreated;
31
21
  }
32
- function assertPristineUrl() {
33
- const urlCurrent = getCurrentUrl({ withoutHash: true });
34
- assertUsage(urlFirst === urlCurrent, `The URL was manipulated before the hydration finished ('${urlFirst}' to '${urlCurrent}'). Ensure the hydration has finished before manipulating the URL. Consider using the onHydrationEnd() hook.`);
35
- }
36
- async function loadPageConfigsLazyClientSideAndExecHook(pageContext) {
37
- const pageContextAddendum = await loadPageConfigsLazyClientSide(pageContext.pageId, pageContext._pageFilesAll, pageContext._globalContext._pageConfigs, pageContext._globalContext._pageConfigGlobal);
38
- objectAssign(pageContext, pageContextAddendum);
39
- await execHook('onCreatePageContext', pageContext, preparePageContextForPublicUsageClient);
40
- return pageContext;
41
- }
@@ -2,13 +2,17 @@ import { assertServerRouting } from '../../utils/assertRoutingType.js';
2
2
  assertServerRouting();
3
3
  import { createPageContextClientSide } from './createPageContextClientSide.js';
4
4
  import { execHookOnRenderClient } from '../shared/execHookOnRenderClient.js';
5
- import { assertSingleInstance_onClientEntryServerRouting } from './utils.js';
5
+ import { assertSingleInstance_onClientEntryServerRouting, assertUsage, objectAssign } from './utils.js';
6
6
  import { removeFoucBuster } from '../shared/removeFoucBuster.js';
7
7
  import { execHook } from '../../shared-server-client/hooks/execHook.js';
8
8
  import { preparePageContextForPublicUsageClient } from './preparePageContextForPublicUsageClient.js';
9
9
  import { setVirtualFileExportsGlobalEntry } from '../shared/getGlobalContextClientInternalShared.js';
10
10
  // @ts-expect-error
11
11
  import * as virtualFileExportsGlobalEntry from 'virtual:vike:global-entry:client:server-routing';
12
+ import { loadPageConfigsLazyClientSide } from '../shared/loadPageConfigsLazyClientSide.js';
13
+ import { getPageContextSerializedInHtml } from '../shared/getJsonSerializedInHtml.js';
14
+ import { getCurrentUrl } from '../shared/getCurrentUrl.js';
15
+ const urlFirst = getCurrentUrl({ withoutHash: true });
12
16
  assertSingleInstance_onClientEntryServerRouting(import.meta.env.PROD);
13
17
  setVirtualFileExportsGlobalEntry(virtualFileExportsGlobalEntry);
14
18
  if (import.meta.env.DEV)
@@ -16,6 +20,16 @@ if (import.meta.env.DEV)
16
20
  hydrate();
17
21
  async function hydrate() {
18
22
  const pageContext = await createPageContextClientSide();
23
+ objectAssign(pageContext, getPageContextSerializedInHtml());
24
+ // Sets pageContext.config using local configs — overrides the pageContext.config set using global configs at createPageContextClientSide()
25
+ const pageContextAddendum = await loadPageConfigsLazyClientSide(pageContext.pageId, pageContext._pageFilesAll, pageContext._globalContext._pageConfigs, pageContext._globalContext._pageConfigGlobal);
26
+ objectAssign(pageContext, pageContextAddendum);
27
+ await execHook('onCreatePageContext', pageContext, preparePageContextForPublicUsageClient);
28
+ assertPristineUrl();
19
29
  await execHookOnRenderClient(pageContext, preparePageContextForPublicUsageClient);
20
30
  await execHook('onHydrationEnd', pageContext, preparePageContextForPublicUsageClient);
21
31
  }
32
+ function assertPristineUrl() {
33
+ const urlCurrent = getCurrentUrl({ withoutHash: true });
34
+ assertUsage(urlFirst === urlCurrent, `The URL was manipulated before the hydration finished ('${urlFirst}' to '${urlCurrent}'). Ensure the hydration has finished before manipulating the URL. Consider using the onHydrationEnd() hook.`);
35
+ }
@@ -3,11 +3,14 @@ export type { PageContextBeforeRenderClient };
3
3
  import type { PageFile, PageContextConfig } from '../../shared-server-client/getPageFiles.js';
4
4
  import type { PageContextForPublicUsageClientShared } from './preparePageContextForPublicUsageClientShared.js';
5
5
  import type { GlobalContextClientInternalShared } from './getGlobalContextClientInternalShared.js';
6
+ import type { PageContextCreatedClient } from '../runtime-client-routing/createPageContextClientSide.js';
7
+ import type { PageContextCreatedClient_ServerRouting } from '../runtime-server-routing/createPageContextClientSide.js';
8
+ type PageContextCreatedClientShared = PageContextCreatedClient | PageContextCreatedClient_ServerRouting;
6
9
  type PageContextBeforeRenderClient = {
7
10
  _pageFilesLoaded: PageFile[];
8
11
  urlOriginal?: string;
9
12
  urlPathname?: string;
10
13
  pageId: string;
11
14
  _globalContext: GlobalContextClientInternalShared;
12
- } & PageContextConfig & PageContextForPublicUsageClientShared;
15
+ } & PageContextCreatedClientShared & PageContextConfig & PageContextForPublicUsageClientShared;
13
16
  declare function execHookOnRenderClient<PageContext extends PageContextBeforeRenderClient>(pageContext: PageContext, prepareForPublicUsage: (pageConfig: PageContext) => PageContext): Promise<void>;
@@ -2,11 +2,11 @@ export { logVite };
2
2
  export { logConfigInfo };
3
3
  export { logErrorServerDev };
4
4
  export type { LogType };
5
- export type { AddTagsDev };
5
+ export type { AddAssertTagsDev };
6
6
  import { type PageContext_logRuntime } from '../../../server/runtime/loggerRuntime.js';
7
7
  type LogType = 'info' | 'warn' | 'error' | 'error-resolve';
8
8
  declare function logConfigInfo(msg: string, logType: LogType): void;
9
9
  declare function logVite(msg: string, logType: LogType, requestId: number | null, prependViteTag: boolean): void;
10
10
  declare function logErrorServerDev(err: unknown, pageContext: PageContext_logRuntime, errorComesFromVite?: boolean): void;
11
- type AddTagsDev = typeof addTagsDev;
12
- declare function addTagsDev<TagVike extends string, TagType extends string>(tagVike: TagVike, tagType: TagType): `1:37:00 PM ${TagVike}[request(n)]${TagType}`;
11
+ type AddAssertTagsDev = typeof addAssertTagsDev;
12
+ declare function addAssertTagsDev<TagVike extends string, TagType extends string>(tagVike: TagVike, tagType: TagType): `1:37:00 PM ${TagVike}[request(n)]${TagType}`;
@@ -12,7 +12,7 @@ export { logErrorServerDev };
12
12
  import { isAbortError } from '../../../shared-server-client/route/abort.js';
13
13
  import { getViteConfig } from '../../../server/runtime/globalContext.js';
14
14
  import { assertPageContext_logRuntime, setLogRuntimeDev, } from '../../../server/runtime/loggerRuntime.js';
15
- import { setAssertOnBeforeErr, assert, assertIsNotProductionRuntime, colorVike, colorVite, formatHintLog, hasGreen, hasProp, hasRed, hasYellow, isDebugError, stripAnsi, colorError, colorWarning, setAssertAddTagsDev, } from '../utils.js';
15
+ import { setAssertOnBeforeErr, assert, assertIsNotProductionRuntime, colorVike, colorVite, formatHintLog, hasGreen, hasProp, hasRed, hasYellow, isDebugError, stripAnsi, colorError, colorWarning, setAssertAddAssertTagsDev, } from '../utils.js';
16
16
  import { isErrorWithCodeSnippet, getPrettyErrorWithCodeSnippet } from './loggerDev/errorWithCodeSnippet.js';
17
17
  import { getConfigExecutionErrorIntroMsg, getConfigBuildErrorFormatted, } from './resolveVikeConfigInternal/transpileAndExecuteFile.js';
18
18
  import pc from '@brillout/picocolors';
@@ -27,7 +27,7 @@ setAssertOnBeforeErr((err) => {
27
27
  // We must directly apply vite.ssrFixStacktrace() to `assertWarning(..., { showStackTrace: true })` because warnings aren't caught by the try-catch of renderPageServer()
28
28
  applyViteSourceMap(err);
29
29
  });
30
- setAssertAddTagsDev(addTagsDev);
30
+ setAssertAddAssertTagsDev(addAssertTagsDev);
31
31
  // Note shown to user when Vike completely modifies the error message (which is somewhat risky)
32
32
  const errorDebugNote = pc.dim(formatHintLog("Error isn't helpful? See https://vike.dev/debug#verbose-errors"));
33
33
  function logRuntimeInfoDev(msg, pageContext, logType) {
@@ -186,7 +186,7 @@ function getTagSourceOuter(tagSource) {
186
186
  const tagSourceOuter = (!tagSource ? '' : pc.dim(`[${tagSource}]`));
187
187
  return tagSourceOuter;
188
188
  }
189
- function addTagsDev(tagVike, tagType) {
189
+ function addAssertTagsDev(tagVike, tagType) {
190
190
  const timestamp = getTagTimestamp();
191
191
  const tagSource = getTagSource();
192
192
  const tagSourceOuter = getTagSourceOuter(tagSource);
@@ -2,6 +2,7 @@ export { configDefinitionsBuiltIn };
2
2
  import { assert, assertUsage } from '../../utils.js';
3
3
  import { getConfigDefinedAt, } from '../../../../shared-server-client/page-configs/getConfigDefinedAt.js';
4
4
  import { getConfigValueSourceRelevantAnyEnv, getConfigValueSourcesRelevant, isConfigSourceValueNull, } from '../../plugins/pluginVirtualFiles/getConfigValueSourcesRelevant.js';
5
+ import { getFileSuffixes } from '../../../../shared-server-node/getFileSuffixes.js';
5
6
  const configDefinitionsBuiltIn = {
6
7
  onRenderHtml: {
7
8
  env: { server: true },
@@ -117,7 +118,7 @@ const configDefinitionsBuiltIn = {
117
118
  // Exclude `.ssr.js` hooks (they don't require pageContext.json requests)
118
119
  .filter((source) => {
119
120
  const { definedAt } = source;
120
- if ('filePathAbsoluteVite' in definedAt && definedAt.filePathAbsoluteVite.includes('.ssr.')) {
121
+ if ('fileName' in definedAt && getFileSuffixes(definedAt.fileName).includes('ssr')) {
121
122
  return false;
122
123
  }
123
124
  return true;
@@ -1,7 +1,7 @@
1
1
  export { onLoad };
2
2
  import { assertIsNotBrowser } from '../utils/assertIsNotBrowser.js';
3
3
  import { assertNodeVersion } from '../utils/assertNodeVersion.js';
4
- import { setAlwaysShowStackTrace } from '../utils/assert.js';
4
+ import { setAssertAlwaysShowStackTrace } from '../utils/assert.js';
5
5
  import { installRequireShim } from '@brillout/require-shim';
6
6
  import { isDebugError } from '../utils/debug.js';
7
7
  function onLoad() {
@@ -10,7 +10,7 @@ function onLoad() {
10
10
  if (isDebugError()) {
11
11
  // Is also executed upon `$ vike build` because node/vite/utils.ts imports server/utils.ts
12
12
  Error.stackTraceLimit = Infinity;
13
- setAlwaysShowStackTrace();
13
+ setAssertAlwaysShowStackTrace();
14
14
  }
15
15
  addEcosystemStamp();
16
16
  installRequireShim();
@@ -1,5 +1,5 @@
1
1
  export { logErrorServer };
2
2
  export { hasAlreadyLogged };
3
- import { type PageContext_logRuntime } from './loggerRuntime.js';
4
- declare function logErrorServer(err: unknown, pageContext: PageContext_logRuntime): void;
3
+ import type { PageContextCreatedServerMinimum } from './renderPageServer/createPageContextServerSide.js';
4
+ declare function logErrorServer(err: unknown, pageContext: PageContextCreatedServerMinimum | null): void;
5
5
  declare function hasAlreadyLogged(err: unknown): boolean;
@@ -3,7 +3,6 @@ export { hasAlreadyLogged };
3
3
  import pc from '@brillout/picocolors';
4
4
  import { assertIsNotBrowser, assertWarning, getGlobalObject, hasRed, isDebugError, isObject } from '../utils.js';
5
5
  import { execHookOnError } from './renderPageServer/execHookOnError.js';
6
- import { assertPageContext_logRuntime } from './loggerRuntime.js';
7
6
  import { addErrorHint } from './renderPageServer/addErrorHint.js';
8
7
  import { isAbortError } from '../../shared-server-client/route/abort.js';
9
8
  assertIsNotBrowser();
@@ -11,7 +10,6 @@ const globalObject = getGlobalObject('server/runtime/logErrorServer.ts', {
11
10
  wasAlreadyLogged: new WeakSet(),
12
11
  });
13
12
  function logErrorServer(err, pageContext) {
14
- assertPageContext_logRuntime(pageContext);
15
13
  if (isAbortError(err) && !isDebugError())
16
14
  return;
17
15
  // I don't think there is a use case for printing the same error object twice? Reloading page throwing error => the same error is printed a second time but it's a different error object.
@@ -4,10 +4,11 @@ export { setLogRuntimeDev };
4
4
  export { assertPageContext_logRuntime };
5
5
  export type { PageContext_logRuntime };
6
6
  import type { LogType } from '../../node/vite/shared/loggerDev.js';
7
+ import type { PageContextCreatedServerMinimum } from './renderPageServer/createPageContextServerSide.js';
7
8
  type LogRuntimeInfo = (msg: string, pageContext: PageContext_logRuntime, logType: LogType) => void;
8
9
  type LogRuntimeError = (err: unknown, pageContext: PageContext_logRuntime) => void;
9
- type PageContext_logRuntime = null | {
10
+ type PageContext_logRuntime = null | (PageContextCreatedServerMinimum & {
10
11
  _requestId: number;
11
- };
12
+ });
12
13
  declare function setLogRuntimeDev(logRuntimeErrorDev: LogRuntimeError, logRuntimeInfoDev: LogRuntimeInfo): void;
13
14
  declare function assertPageContext_logRuntime(pageContext: PageContext_logRuntime): void;
@@ -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;
@@ -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;
@@ -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 +1 @@
1
- export declare const PROJECT_VERSION: "0.4.249-commit-b3b9c55";
1
+ export declare const PROJECT_VERSION: "0.4.250-commit-193dea3";
@@ -1,2 +1,2 @@
1
1
  // Automatically updated by @brillout/release-me
2
- export const PROJECT_VERSION = '0.4.249-commit-b3b9c55';
2
+ export const PROJECT_VERSION = '0.4.250-commit-193dea3';
@@ -6,9 +6,9 @@ export { getProjectError };
6
6
  export { isVikeBug };
7
7
  export { setAssertOnBeforeLog };
8
8
  export { setAssertOnBeforeErr };
9
- export { setAlwaysShowStackTrace };
10
- export { setAssertAddTagsDev };
11
- import type { AddTagsDev } from '../node/vite/shared/loggerDev.js';
9
+ export { setAssertAlwaysShowStackTrace };
10
+ export { setAssertAddAssertTagsDev };
11
+ import type { AddAssertTagsDev } from '../node/vite/shared/loggerDev.js';
12
12
  declare function assert(condition: unknown, debugInfo?: unknown): asserts condition;
13
13
  declare function assertUsage(condition: unknown, errMsg: string, { showStackTrace, exitOnError }?: {
14
14
  showStackTrace?: true;
@@ -24,6 +24,6 @@ declare function assertInfo(condition: unknown, msg: string, { onlyOnce }: {
24
24
  }): void;
25
25
  declare function setAssertOnBeforeLog(onBeforeAssertLog: () => void): void;
26
26
  declare function setAssertOnBeforeErr(onBeforeAssertErr: (err: unknown) => void): void;
27
- declare function setAssertAddTagsDev(addTagsDev: AddTagsDev): void;
27
+ declare function setAssertAddAssertTagsDev(addAssertTagsDev: AddAssertTagsDev): void;
28
28
  declare function isVikeBug(err: unknown): boolean;
29
- declare function setAlwaysShowStackTrace(): void;
29
+ declare function setAssertAlwaysShowStackTrace(): void;