vike 0.4.250-commit-193dea3 → 0.4.250-commit-6161324
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.
- package/dist/client/runtime-client-routing/createPageContextClientSide.d.ts +19 -1
- package/dist/client/runtime-client-routing/createPageContextClientSide.js +19 -11
- package/dist/client/runtime-client-routing/getPageContextFromHooks.d.ts +58 -70
- package/dist/client/runtime-client-routing/renderPageClient.d.ts +100 -98
- package/dist/client/runtime-server-routing/createPageContextClientSide.d.ts +14 -1
- package/dist/client/runtime-server-routing/createPageContextClientSide.js +10 -4
- package/dist/node/prerender/runPrerender.d.ts +2 -5
- package/dist/node/prerender/runPrerender.js +2 -2
- package/dist/node/vite/shared/resolveVikeConfigInternal/configDefinitionsBuiltIn.js +5 -0
- package/dist/server/runtime/logErrorServer.d.ts +2 -2
- package/dist/server/runtime/loggerRuntime.d.ts +2 -2
- package/dist/server/runtime/renderPageServer/createPageContextServerSide.d.ts +12 -10
- package/dist/server/runtime/renderPageServer/createPageContextServerSide.js +11 -11
- package/dist/server/runtime/renderPageServer/execHookOnError.d.ts +2 -2
- package/dist/server/runtime/renderPageServer/execHookOnError.js +3 -1
- package/dist/server/runtime/renderPageServer/loadPageConfigsLazyServerSide.d.ts +1 -4
- package/dist/server/runtime/renderPageServer/renderPageServerAfterRoute.d.ts +4 -16
- package/dist/server/runtime/renderPageServer.d.ts +2 -9
- package/dist/shared-server-client/createGlobalContextShared.js +1 -1
- package/dist/shared-server-client/createPageContextShared.d.ts +12 -2
- package/dist/shared-server-client/createPageContextShared.js +1 -0
- package/dist/shared-server-client/getPageContextUrlComputed.d.ts +5 -2
- package/dist/shared-server-client/hooks/execHook.d.ts +5 -7
- package/dist/shared-server-client/hooks/execHook.js +77 -12
- package/dist/shared-server-client/prepareGlobalContextForPublicUsage.d.ts +2 -0
- package/dist/shared-server-client/preparePageContextForPublicUsage.d.ts +2 -3
- package/dist/types/Config.d.ts +10 -1
- package/dist/types/Config.js +1 -0
- package/dist/types/PageContext.d.ts +33 -26
- package/dist/utils/PROJECT_VERSION.d.ts +1 -1
- package/dist/utils/PROJECT_VERSION.js +1 -1
- package/package.json +1 -1
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
export { createPageContextServerSide };
|
|
2
2
|
export { createPageContextServerSideWithoutGlobalContext };
|
|
3
3
|
export type { PageContextCreatedServer };
|
|
4
|
-
export type {
|
|
4
|
+
export type { PageContextCreatedServerBase };
|
|
5
5
|
import type { GlobalContextServerInternal } from '../globalContext.js';
|
|
6
6
|
import type { PageContextInit } from '../renderPageServer.js';
|
|
7
|
-
type
|
|
7
|
+
type PageContextCreatedServerBase = ReturnType<typeof createPageContextBase>;
|
|
8
8
|
type PageContextCreatedServer = Awaited<ReturnType<typeof createPageContextServerSide>>;
|
|
9
9
|
declare function createPageContextServerSide(pageContextInit: PageContextInit, globalContext: GlobalContextServerInternal, args: {
|
|
10
10
|
requestId: number;
|
|
@@ -21,10 +21,7 @@ declare function createPageContextServerSide(pageContextInit: PageContextInit, g
|
|
|
21
21
|
isClientSide: false;
|
|
22
22
|
isPrerendering: boolean;
|
|
23
23
|
_requestId: number;
|
|
24
|
-
} &
|
|
25
|
-
url?: string;
|
|
26
|
-
headers?: Record<string, string>;
|
|
27
|
-
} & {
|
|
24
|
+
} & PageContextInit & {
|
|
28
25
|
_globalContext: ({
|
|
29
26
|
_globalConfigPublic: {
|
|
30
27
|
pages: {
|
|
@@ -156,7 +153,12 @@ declare function createPageContextServerSideWithoutGlobalContext(pageContextInit
|
|
|
156
153
|
isClientSide: false;
|
|
157
154
|
isPrerendering: boolean;
|
|
158
155
|
_requestId: number;
|
|
159
|
-
} &
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
156
|
+
} & PageContextInit;
|
|
157
|
+
declare function createPageContextBase(pageContextInit: PageContextInit | null, isPrerendering: boolean, requestId: number): {
|
|
158
|
+
_isOriginalObject: true;
|
|
159
|
+
isPageContext: true;
|
|
160
|
+
} & {
|
|
161
|
+
isClientSide: false;
|
|
162
|
+
isPrerendering: boolean;
|
|
163
|
+
_requestId: number;
|
|
164
|
+
} & PageContextInit;
|
|
@@ -5,8 +5,8 @@ import { getPageContextUrlComputed } from '../../../shared-server-client/getPage
|
|
|
5
5
|
import { createPageContextObject, createPageContextShared, } from '../../../shared-server-client/createPageContextShared.js';
|
|
6
6
|
function createPageContextServerSide(pageContextInit, globalContext, args) {
|
|
7
7
|
assert(pageContextInit.urlOriginal);
|
|
8
|
-
const
|
|
9
|
-
objectAssign(
|
|
8
|
+
const pageContext = createPageContextBase(pageContextInit, args.isPrerendering, args.requestId);
|
|
9
|
+
objectAssign(pageContext, {
|
|
10
10
|
_globalContext: globalContext,
|
|
11
11
|
_pageFilesAll: globalContext._pageFilesAll, // TO-DO/next-major-release: remove
|
|
12
12
|
// We use pageContext._baseServer and pageContext._baseAssets instead of pageContext._globalContext.baseServer and pageContext._globalContext.baseAssets because the Base URLs can (eventually one day if needed) be made non-global
|
|
@@ -16,10 +16,10 @@ function createPageContextServerSide(pageContextInit, globalContext, args) {
|
|
|
16
16
|
_urlHandler: args.isPrerendering ? null : args.urlHandler,
|
|
17
17
|
isClientSideNavigation: args.isPrerendering ? false : args.isClientSideNavigation,
|
|
18
18
|
});
|
|
19
|
-
objectAssign(
|
|
19
|
+
objectAssign(pageContext, globalContext._globalConfigPublic);
|
|
20
20
|
// pageContext.urlParsed
|
|
21
|
-
const pageContextUrlComputed = getPageContextUrlComputed(
|
|
22
|
-
objectAssign(
|
|
21
|
+
const pageContextUrlComputed = getPageContextUrlComputed(pageContext);
|
|
22
|
+
objectAssign(pageContext, pageContextUrlComputed);
|
|
23
23
|
// pageContext.headers
|
|
24
24
|
{
|
|
25
25
|
let headers;
|
|
@@ -35,18 +35,18 @@ function createPageContextServerSide(pageContextInit, globalContext, args) {
|
|
|
35
35
|
else {
|
|
36
36
|
headers = null;
|
|
37
37
|
}
|
|
38
|
-
objectAssign(
|
|
38
|
+
objectAssign(pageContext, { headers });
|
|
39
39
|
}
|
|
40
|
-
const pageContextAugmented = createPageContextShared(
|
|
41
|
-
updateType(
|
|
42
|
-
return
|
|
40
|
+
const pageContextAugmented = createPageContextShared(pageContext, globalContext._globalConfigPublic);
|
|
41
|
+
updateType(pageContext, pageContextAugmented);
|
|
42
|
+
return pageContext;
|
|
43
43
|
}
|
|
44
44
|
/** Use this as last resort — prefer passing richer `pageContext` objects to the runtime logger */
|
|
45
45
|
function createPageContextServerSideWithoutGlobalContext(pageContextInit, requestId) {
|
|
46
|
-
const pageContext =
|
|
46
|
+
const pageContext = createPageContextBase(pageContextInit, false, requestId);
|
|
47
47
|
return pageContext;
|
|
48
48
|
}
|
|
49
|
-
function
|
|
49
|
+
function createPageContextBase(pageContextInit, isPrerendering, requestId) {
|
|
50
50
|
const pageContext = createPageContextObject();
|
|
51
51
|
objectAssign(pageContext, {
|
|
52
52
|
isClientSide: false,
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { execHookOnError };
|
|
2
|
-
import type {
|
|
3
|
-
declare function execHookOnError(err: unknown, pageContext:
|
|
2
|
+
import type { PageContextCreatedServerBase } from './createPageContextServerSide.js';
|
|
3
|
+
declare function execHookOnError(err: unknown, pageContext: PageContextCreatedServerBase | null): void;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { execHookOnError };
|
|
2
2
|
import { isObject, getGlobalObject } from '../../utils.js';
|
|
3
|
+
import { execHookBase } from '../../../shared-server-client/hooks/execHook.js';
|
|
3
4
|
import { getGlobalContextServerInternalOptional } from '../globalContext.js';
|
|
4
5
|
import { getHookFromPageConfigGlobalCumulative } from '../../../shared-server-client/hooks/getHook.js';
|
|
5
6
|
const globalObject = getGlobalObject('renderPageServer/execHookOnError.ts', {
|
|
@@ -17,7 +18,8 @@ function execHookOnError(err, pageContext) {
|
|
|
17
18
|
const hooks = getHookFromPageConfigGlobalCumulative(globalContext._pageConfigGlobal, 'onError');
|
|
18
19
|
for (const hook of hooks) {
|
|
19
20
|
try {
|
|
20
|
-
|
|
21
|
+
// TODO/refactor: stop using any
|
|
22
|
+
execHookBase(() => hook.hookFn(err, pageContext), hook, globalContext, pageContext);
|
|
21
23
|
}
|
|
22
24
|
catch (hookErr) {
|
|
23
25
|
console.error(hookErr);
|
|
@@ -21,10 +21,7 @@ declare function loadPageConfigsLazyServerSide(pageContext: PageContext_loadPage
|
|
|
21
21
|
isClientSide: false;
|
|
22
22
|
isPrerendering: boolean;
|
|
23
23
|
_requestId: number;
|
|
24
|
-
} &
|
|
25
|
-
url?: string;
|
|
26
|
-
headers?: Record<string, string>;
|
|
27
|
-
} & {
|
|
24
|
+
} & import("../renderPageServer.js").PageContextInit & {
|
|
28
25
|
_globalContext: ({
|
|
29
26
|
_globalConfigPublic: {
|
|
30
27
|
pages: {
|
|
@@ -29,10 +29,7 @@ declare function prerenderPage(pageContext: Parameters<typeof prerenderPageEntry
|
|
|
29
29
|
isClientSide: false;
|
|
30
30
|
isPrerendering: boolean;
|
|
31
31
|
_requestId: number;
|
|
32
|
-
} &
|
|
33
|
-
url?: string;
|
|
34
|
-
headers?: Record<string, string>;
|
|
35
|
-
} & {
|
|
32
|
+
} & import("../renderPageServer.js").PageContextInit & {
|
|
36
33
|
_globalContext: ({
|
|
37
34
|
_globalConfigPublic: {
|
|
38
35
|
pages: {
|
|
@@ -193,10 +190,7 @@ declare function prerenderPage(pageContext: Parameters<typeof prerenderPageEntry
|
|
|
193
190
|
isClientSide: false;
|
|
194
191
|
isPrerendering: boolean;
|
|
195
192
|
_requestId: number;
|
|
196
|
-
} &
|
|
197
|
-
url?: string;
|
|
198
|
-
headers?: Record<string, string>;
|
|
199
|
-
} & {
|
|
193
|
+
} & import("../renderPageServer.js").PageContextInit & {
|
|
200
194
|
_globalContext: ({
|
|
201
195
|
_globalConfigPublic: {
|
|
202
196
|
pages: {
|
|
@@ -365,10 +359,7 @@ declare function prerenderPageEntry(pageContext: PageContextCreatedServer & Page
|
|
|
365
359
|
isClientSide: false;
|
|
366
360
|
isPrerendering: boolean;
|
|
367
361
|
_requestId: number;
|
|
368
|
-
} &
|
|
369
|
-
url?: string;
|
|
370
|
-
headers?: Record<string, string>;
|
|
371
|
-
} & {
|
|
362
|
+
} & import("../renderPageServer.js").PageContextInit & {
|
|
372
363
|
_globalContext: ({
|
|
373
364
|
_globalConfigPublic: {
|
|
374
365
|
pages: {
|
|
@@ -529,10 +520,7 @@ declare function prerenderPageEntry(pageContext: PageContextCreatedServer & Page
|
|
|
529
520
|
isClientSide: false;
|
|
530
521
|
isPrerendering: boolean;
|
|
531
522
|
_requestId: number;
|
|
532
|
-
} &
|
|
533
|
-
url?: string;
|
|
534
|
-
headers?: Record<string, string>;
|
|
535
|
-
} & {
|
|
523
|
+
} & import("../renderPageServer.js").PageContextInit & {
|
|
536
524
|
_globalContext: ({
|
|
537
525
|
_globalConfigPublic: {
|
|
538
526
|
pages: {
|
|
@@ -5,12 +5,8 @@ import { type PageContextAborted } from '../../shared-server-client/route/abort.
|
|
|
5
5
|
import { type GlobalContextServerInternal } from './globalContext.js';
|
|
6
6
|
import { type HttpResponse } from './renderPageServer/createHttpResponse.js';
|
|
7
7
|
import type { PageContextServer } from '../../types/index.js';
|
|
8
|
-
import type {
|
|
8
|
+
import type { PageContextInit } from '../../types/PageContext.js';
|
|
9
9
|
import { type AsyncStore } from './asyncHook.js';
|
|
10
|
-
type PageContextInit = Pick<PageContextInternalServer, 'urlOriginal' | 'headersOriginal'> & {
|
|
11
|
-
/** @deprecated Set `pageContextInit.urlOriginal` instead */ url?: string;
|
|
12
|
-
/** @deprecated Set pageContextInit.headersOriginal instead */ headers?: Record<string, string>;
|
|
13
|
-
};
|
|
14
10
|
type PageContextBegin = ReturnType<typeof getPageContextBegin>;
|
|
15
11
|
declare function renderPageServer<PageContextUserAdded extends {}, PageContextInitUser extends PageContextInit>(pageContextInit: PageContextInitUser): Promise<PageContextInitUser & {
|
|
16
12
|
httpResponse: HttpResponse;
|
|
@@ -22,10 +18,7 @@ declare function getPageContextBegin(pageContextInit: PageContextInit, globalCon
|
|
|
22
18
|
isClientSide: false;
|
|
23
19
|
isPrerendering: boolean;
|
|
24
20
|
_requestId: number;
|
|
25
|
-
} &
|
|
26
|
-
/** @deprecated Set `pageContextInit.urlOriginal` instead */ url?: string;
|
|
27
|
-
/** @deprecated Set pageContextInit.headersOriginal instead */ headers?: Record<string, string>;
|
|
28
|
-
} & {
|
|
21
|
+
} & PageContextInit & {
|
|
29
22
|
_globalContext: ({
|
|
30
23
|
_globalConfigPublic: {
|
|
31
24
|
pages: {
|
|
@@ -54,7 +54,7 @@ addGlobalContextTmp, addGlobalContextAsync) {
|
|
|
54
54
|
let hooksCalled = false;
|
|
55
55
|
if (!hooksAreEqual(globalObject.onCreateGlobalContextHooks ?? [], onCreateGlobalContextHooks)) {
|
|
56
56
|
globalObject.onCreateGlobalContextHooks = onCreateGlobalContextHooks;
|
|
57
|
-
await execHookGlobal('onCreateGlobalContext', globalContext
|
|
57
|
+
await execHookGlobal('onCreateGlobalContext', globalContext, null, globalContext, prepareGlobalContextForPublicUsage);
|
|
58
58
|
hooksCalled = true;
|
|
59
59
|
}
|
|
60
60
|
if (isNewGlobalContext) {
|
|
@@ -1,8 +1,18 @@
|
|
|
1
1
|
export { createPageContextShared };
|
|
2
2
|
export { createPageContextObject };
|
|
3
|
+
export type { PageContextCreated };
|
|
4
|
+
export type { PageContextCreatedBase };
|
|
3
5
|
import type { GlobalConfigPublic } from './page-configs/resolveVikeConfigPublic.js';
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
+
import type { PageContextCreatedClient } from '../client/runtime-client-routing/createPageContextClientSide.js';
|
|
7
|
+
import type { PageContextCreatedServer } from '../server/runtime/renderPageServer/createPageContextServerSide.js';
|
|
8
|
+
import type { PageContextCreatedClient_ServerRouting } from '../client/runtime-server-routing/createPageContextClientSide.js';
|
|
9
|
+
type PageContextCreated = PageContextCreatedServer | PageContextCreatedClient | PageContextCreatedClient_ServerRouting;
|
|
10
|
+
type PageContextCreatedBase = {
|
|
11
|
+
_isOriginalObject: true;
|
|
12
|
+
isPageContext: true;
|
|
13
|
+
isClientSide: boolean;
|
|
14
|
+
};
|
|
15
|
+
declare function createPageContextShared<T extends Record<string, unknown>>(pageContextCreated: T, globalConfigPublic: GlobalConfigPublic): T & GlobalConfigPublic;
|
|
6
16
|
declare function createPageContextObject(): {
|
|
7
17
|
_isOriginalObject: true;
|
|
8
18
|
isPageContext: true;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { createPageContextShared };
|
|
2
2
|
export { createPageContextObject };
|
|
3
3
|
import { changeEnumerable, objectAssign } from './utils.js';
|
|
4
|
+
//*/
|
|
4
5
|
function createPageContextShared(pageContextCreated, globalConfigPublic) {
|
|
5
6
|
objectAssign(pageContextCreated, globalConfigPublic);
|
|
6
7
|
return pageContextCreated;
|
|
@@ -3,8 +3,9 @@ export type { PageContextUrlInternal };
|
|
|
3
3
|
export type { PageContextUrlClient };
|
|
4
4
|
export type { PageContextUrlServer };
|
|
5
5
|
export type { PageContextUrlSource };
|
|
6
|
-
import { type PageContextPrepareMinimum } from './preparePageContextForPublicUsage.js';
|
|
7
6
|
import { type UrlPublic } from './utils.js';
|
|
7
|
+
import type { GlobalContextPrepareMinimum } from './prepareGlobalContextForPublicUsage.js';
|
|
8
|
+
import type { PageContextCreatedBase } from './createPageContextShared.js';
|
|
8
9
|
type PageContextUrlComputed = {
|
|
9
10
|
/** Parsed information about the current URL */
|
|
10
11
|
urlParsed: UrlPublic;
|
|
@@ -17,8 +18,10 @@ type PageContextUrl = {
|
|
|
17
18
|
/** The URL of the HTTP request */
|
|
18
19
|
urlOriginal: string;
|
|
19
20
|
} & PageContextUrlComputed;
|
|
20
|
-
type PageContextUrlInternal =
|
|
21
|
+
type PageContextUrlInternal = PageContextUrl & {
|
|
21
22
|
_urlRewrite?: string;
|
|
23
|
+
} & PageContextCreatedBase & {
|
|
24
|
+
_globalContext: GlobalContextPrepareMinimum;
|
|
22
25
|
};
|
|
23
26
|
type PageContextUrlClient = PageContextUrl;
|
|
24
27
|
type PageContextUrlServer = PageContextUrl & {
|
|
@@ -5,6 +5,7 @@ export { execHookDirectSingle };
|
|
|
5
5
|
export { execHookDirectSingleWithReturn };
|
|
6
6
|
export { execHookDirectWithoutPageContext };
|
|
7
7
|
export { execHookDirectSync };
|
|
8
|
+
export { execHookBase };
|
|
8
9
|
export { getPageContext_sync };
|
|
9
10
|
export { providePageContext };
|
|
10
11
|
export { isUserHookError };
|
|
@@ -13,32 +14,29 @@ import type { PageContextClient, PageContextServer } from '../../types/PageConte
|
|
|
13
14
|
import type { Hook, HookLoc } from './getHook.js';
|
|
14
15
|
import type { PageContextConfig } from '../getPageFiles.js';
|
|
15
16
|
import type { HookName, HookNameGlobal } from '../../types/Config.js';
|
|
16
|
-
import type {
|
|
17
|
+
import type { PageContextCreated } from '../createPageContextShared.js';
|
|
17
18
|
import type { PageContextForPublicUsageServer } from '../../server/runtime/renderPageServer/preparePageContextForPublicUsageServer.js';
|
|
18
19
|
import type { PageContextForPublicUsageClientShared } from '../../client/shared/preparePageContextForPublicUsageClientShared.js';
|
|
19
20
|
import { type PageContextPrepareMinimum } from '../preparePageContextForPublicUsage.js';
|
|
20
21
|
import type { GlobalContextPrepareMinimum } from '../prepareGlobalContextForPublicUsage.js';
|
|
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
22
|
type PageContextExecHook = PageContextCreated & PageContextConfig & PageContextForPublicUsage;
|
|
25
|
-
type PageContextCreated = PageContextCreatedServer | PageContextCreatedClient | PageContextCreatedClient_ServerRouting;
|
|
26
23
|
type PageContextForPublicUsage = PageContextForPublicUsageServer | PageContextForPublicUsageClientShared;
|
|
27
24
|
type HookWithResult = Hook & {
|
|
28
25
|
hookReturn: unknown;
|
|
29
26
|
};
|
|
30
27
|
declare function execHook<PageContext extends PageContextExecHook>(hookName: HookName, pageContext: PageContext, preparePageContextForPublicUsage: (pageContext: PageContext) => PageContext): Promise<HookWithResult[]>;
|
|
31
|
-
declare function execHookGlobal<HookArg extends GlobalContextPrepareMinimum>(hookName: HookNameGlobal,
|
|
28
|
+
declare function execHookGlobal<HookArg extends GlobalContextPrepareMinimum>(hookName: HookNameGlobal, globalContext: GlobalContextPrepareMinimum, pageContext: PageContextPrepareMinimum | null, hookArg: HookArg, prepareForPublicUsage: (hookArg: HookArg) => HookArg): Promise<void>;
|
|
32
29
|
declare function execHookDirect<PageContext extends PageContextPrepareMinimum>(hooks: Hook[], pageContext: PageContext, preparePageContextForPublicUsage: (pageContext: PageContext) => PageContext): Promise<HookWithResult[]>;
|
|
33
30
|
declare function execHookDirectSingle<PageContext extends PageContextExecHook>(hook: Hook, pageContext: PageContext, preparePageContextForPublicUsage: (pageContext: PageContext) => PageContext): Promise<void>;
|
|
34
31
|
declare function execHookDirectSingleWithReturn<PageContext extends PageContextExecHook>(hook: Hook, pageContext: PageContext, preparePageContextForPublicUsage: (pageContext: PageContext) => PageContext): Promise<{
|
|
35
32
|
hookReturn: unknown;
|
|
36
33
|
}>;
|
|
37
34
|
declare function isUserHookError(err: unknown): false | HookLoc;
|
|
38
|
-
declare function execHookDirectWithoutPageContext<HookReturn>(hookFnCaller: () => HookReturn, hook: Omit<Hook, 'hookFn'
|
|
35
|
+
declare function execHookDirectWithoutPageContext<HookReturn>(hookFnCaller: () => HookReturn, hook: Omit<Hook, 'hookFn'>, globalContext: GlobalContextPrepareMinimum): Promise<HookReturn>;
|
|
39
36
|
declare function execHookDirectSync<PageContext extends PageContextPrepareMinimum>(hook: Omit<Hook, 'hookTimeout'>, pageContext: PageContext, preparePageContextForPublicUsage: (pageContext: PageContext) => PageContext): {
|
|
40
37
|
hookReturn: unknown;
|
|
41
38
|
};
|
|
39
|
+
declare function execHookBase<HookReturn>(hookFnCaller: () => HookReturn, hook: Omit<Hook, 'hookTimeout' | 'hookFn'>, globalContext: GlobalContextPrepareMinimum, pageContext: PageContextPrepareMinimum | null): HookReturn | Promise<HookReturn>;
|
|
42
40
|
declare function getPageContext_sync<PageContext = PageContextClient | PageContextServer>(): null | PageContext;
|
|
43
41
|
/**
|
|
44
42
|
* Provide `pageContext` for universal hooks.
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
// TODO: rename all exports
|
|
1
2
|
export { execHook };
|
|
2
3
|
export { execHookGlobal };
|
|
3
4
|
export { execHookDirect };
|
|
@@ -5,10 +6,12 @@ export { execHookDirectSingle };
|
|
|
5
6
|
export { execHookDirectSingleWithReturn };
|
|
6
7
|
export { execHookDirectWithoutPageContext };
|
|
7
8
|
export { execHookDirectSync };
|
|
9
|
+
export { execHookBase };
|
|
8
10
|
export { getPageContext_sync };
|
|
9
11
|
export { providePageContext };
|
|
10
12
|
export { isUserHookError };
|
|
11
|
-
|
|
13
|
+
// TODO: minor refactor — maybe completely remove (some) utils.js files?
|
|
14
|
+
import { assert, getProjectError, assertWarning, assertUsage } from '../../utils/assert.js';
|
|
12
15
|
import { getGlobalObject } from '../../utils/getGlobalObject.js';
|
|
13
16
|
import { humanizeTime } from '../../utils/humanizeTime.js';
|
|
14
17
|
import { isObject } from '../../utils/isObject.js';
|
|
@@ -18,15 +21,16 @@ const globalObject = getGlobalObject('utils/execHook.ts', {
|
|
|
18
21
|
userHookErrors: new WeakMap(),
|
|
19
22
|
pageContext: null,
|
|
20
23
|
});
|
|
24
|
+
// TODO/refactor: export new type PageContextExecHookMinimum instead of PageContextPrepareMinimum ?
|
|
21
25
|
async function execHook(hookName, pageContext, preparePageContextForPublicUsage) {
|
|
22
26
|
const hooks = getHookFromPageContextNew(hookName, pageContext);
|
|
23
27
|
return await execHookDirect(hooks, pageContext, preparePageContextForPublicUsage);
|
|
24
28
|
}
|
|
25
|
-
async function execHookGlobal(hookName,
|
|
26
|
-
const hooks = getHookFromPageConfigGlobalCumulative(
|
|
29
|
+
async function execHookGlobal(hookName, globalContext, pageContext, hookArg, prepareForPublicUsage) {
|
|
30
|
+
const hooks = getHookFromPageConfigGlobalCumulative(globalContext._pageConfigGlobal, hookName);
|
|
27
31
|
const hookArgForPublicUsage = prepareForPublicUsage(hookArg);
|
|
28
32
|
await Promise.all(hooks.map(async (hook) => {
|
|
29
|
-
await execHookDirectAsync(() => hook.hookFn(hookArgForPublicUsage), hook, pageContext);
|
|
33
|
+
await execHookDirectAsync(() => hook.hookFn(hookArgForPublicUsage), hook, globalContext, pageContext);
|
|
30
34
|
}));
|
|
31
35
|
}
|
|
32
36
|
async function execHookDirect(hooks, pageContext, preparePageContextForPublicUsage) {
|
|
@@ -34,7 +38,7 @@ async function execHookDirect(hooks, pageContext, preparePageContextForPublicUsa
|
|
|
34
38
|
return [];
|
|
35
39
|
const pageContextForPublicUsage = preparePageContextForPublicUsage(pageContext);
|
|
36
40
|
const hooksWithResult = await Promise.all(hooks.map(async (hook) => {
|
|
37
|
-
const hookReturn = await execHookDirectAsync(() => hook.hookFn(pageContextForPublicUsage), hook, pageContextForPublicUsage);
|
|
41
|
+
const hookReturn = await execHookDirectAsync(() => hook.hookFn(pageContextForPublicUsage), hook, pageContext._globalContext, pageContextForPublicUsage);
|
|
38
42
|
return { ...hook, hookReturn };
|
|
39
43
|
}));
|
|
40
44
|
return hooksWithResult;
|
|
@@ -54,12 +58,12 @@ function isUserHookError(err) {
|
|
|
54
58
|
return false;
|
|
55
59
|
return globalObject.userHookErrors.get(err) ?? false;
|
|
56
60
|
}
|
|
57
|
-
async function execHookDirectWithoutPageContext(hookFnCaller, hook) {
|
|
61
|
+
async function execHookDirectWithoutPageContext(hookFnCaller, hook, globalContext) {
|
|
58
62
|
const { hookName, hookFilePath, hookTimeout } = hook;
|
|
59
|
-
const hookReturn = await execHookDirectAsync(hookFnCaller, { hookName, hookFilePath, hookTimeout }, null);
|
|
63
|
+
const hookReturn = await execHookDirectAsync(hookFnCaller, { hookName, hookFilePath, hookTimeout }, globalContext, null);
|
|
60
64
|
return hookReturn;
|
|
61
65
|
}
|
|
62
|
-
function execHookDirectAsync(hookFnCaller, hook, pageContextForPublicUsage) {
|
|
66
|
+
function execHookDirectAsync(hookFnCaller, hook, globalContext, pageContextForPublicUsage) {
|
|
63
67
|
const { hookName, hookFilePath, hookTimeout: { error: timeoutErr, warning: timeoutWarn }, } = hook;
|
|
64
68
|
let resolve;
|
|
65
69
|
let reject;
|
|
@@ -90,8 +94,7 @@ function execHookDirectAsync(hookFnCaller, hook, pageContextForPublicUsage) {
|
|
|
90
94
|
}, timeoutErr);
|
|
91
95
|
(async () => {
|
|
92
96
|
try {
|
|
93
|
-
|
|
94
|
-
const ret = await hookFnCaller();
|
|
97
|
+
const ret = await execHookBase(hookFnCaller, hook, globalContext, pageContextForPublicUsage);
|
|
95
98
|
resolve(ret);
|
|
96
99
|
}
|
|
97
100
|
catch (err) {
|
|
@@ -105,10 +108,72 @@ function execHookDirectAsync(hookFnCaller, hook, pageContextForPublicUsage) {
|
|
|
105
108
|
}
|
|
106
109
|
function execHookDirectSync(hook, pageContext, preparePageContextForPublicUsage) {
|
|
107
110
|
const pageContextForPublicUsage = preparePageContextForPublicUsage(pageContext);
|
|
108
|
-
|
|
109
|
-
const hookReturn = hook.hookFn(pageContextForPublicUsage);
|
|
111
|
+
const hookReturn = execHookBase(() => hook.hookFn(pageContextForPublicUsage), hook, pageContext._globalContext, pageContextForPublicUsage);
|
|
110
112
|
return { hookReturn };
|
|
111
113
|
}
|
|
114
|
+
// Every execHook* variant should call this
|
|
115
|
+
function execHookBase(hookFnCaller, hook, globalContext, pageContext) {
|
|
116
|
+
const { hookName, hookFilePath } = hook;
|
|
117
|
+
assert(hookName !== 'onHookCall'); // ensure no infinite loop
|
|
118
|
+
const configValue = globalContext._pageConfigGlobal.configValues['onHookCall'];
|
|
119
|
+
const callOriginal = () => {
|
|
120
|
+
providePageContextInternal(pageContext);
|
|
121
|
+
return hookFnCaller();
|
|
122
|
+
};
|
|
123
|
+
// +onHookCall doesn't exist
|
|
124
|
+
if (!configValue?.value)
|
|
125
|
+
return callOriginal();
|
|
126
|
+
// +onHookCall wrapping
|
|
127
|
+
let originalCalled = false;
|
|
128
|
+
let originalReturn;
|
|
129
|
+
let originalError;
|
|
130
|
+
let call = () => {
|
|
131
|
+
originalCalled = true;
|
|
132
|
+
try {
|
|
133
|
+
originalReturn = callOriginal();
|
|
134
|
+
}
|
|
135
|
+
catch (err) {
|
|
136
|
+
originalError = err;
|
|
137
|
+
}
|
|
138
|
+
return originalReturn;
|
|
139
|
+
};
|
|
140
|
+
for (const onHookCall of configValue.value) {
|
|
141
|
+
const hookPublic = { name: hookName, filePath: hookFilePath, call };
|
|
142
|
+
// Recursively wrap callOriginal() so +onHookCall can use async hooks. (E.g. vike-react-sentry integrates Sentry's `Tracer.startActiveSpan()`.)
|
|
143
|
+
call = () => {
|
|
144
|
+
;
|
|
145
|
+
(async () => {
|
|
146
|
+
try {
|
|
147
|
+
await onHookCall(hookPublic, pageContext);
|
|
148
|
+
}
|
|
149
|
+
catch (err) {
|
|
150
|
+
console.error(err);
|
|
151
|
+
/* TO-DO/eventually: use dependency injection to be able to use logErrorServer() when this function runs on the server-side.
|
|
152
|
+
if (
|
|
153
|
+
!globalThis.__VIKE__IS_CLIENT &&
|
|
154
|
+
pageContext &&
|
|
155
|
+
// Avoid infinite loop
|
|
156
|
+
hookName !== 'onError'
|
|
157
|
+
) {
|
|
158
|
+
assert(!pageContext.isClientSide)
|
|
159
|
+
logErrorServer(err, pageContext)
|
|
160
|
+
} else {
|
|
161
|
+
logErrorClient(err)
|
|
162
|
+
}
|
|
163
|
+
//*/
|
|
164
|
+
}
|
|
165
|
+
})();
|
|
166
|
+
// +onHookCall must run hook.call() before any `await` — https://github.com/vikejs/vike/pull/2978#discussion_r2645232953
|
|
167
|
+
assertUsage(originalCalled, 'onHookCall() must run hook.call()');
|
|
168
|
+
return originalReturn;
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
// Start the call() chain
|
|
172
|
+
call();
|
|
173
|
+
if (originalError)
|
|
174
|
+
throw originalError;
|
|
175
|
+
return originalReturn;
|
|
176
|
+
}
|
|
112
177
|
function isNotDisabled(timeout) {
|
|
113
178
|
return !!timeout && timeout !== Infinity;
|
|
114
179
|
}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
export { prepareGlobalContextForPublicUsage };
|
|
2
2
|
export type { GlobalContextPrepareMinimum };
|
|
3
|
+
import type { PageConfigGlobalRuntime } from '../types/PageConfig.js';
|
|
3
4
|
type GlobalContextPrepareMinimum = {
|
|
4
5
|
_isOriginalObject: true;
|
|
5
6
|
isGlobalContext: true;
|
|
7
|
+
_pageConfigGlobal: PageConfigGlobalRuntime;
|
|
6
8
|
};
|
|
7
9
|
declare function prepareGlobalContextForPublicUsage<GlobalContext extends GlobalContextPrepareMinimum>(globalContext: GlobalContext): GlobalContext & {
|
|
8
10
|
_isProxyObject: true;
|
|
@@ -2,11 +2,10 @@ export { preparePageContextForPublicUsage };
|
|
|
2
2
|
export { assertPropertyGetters };
|
|
3
3
|
export type { PageContextPrepareMinimum };
|
|
4
4
|
import { type GlobalContextPrepareMinimum } from './prepareGlobalContextForPublicUsage.js';
|
|
5
|
+
import type { PageContextCreatedBase } from './createPageContextShared.js';
|
|
5
6
|
type PageContextPrepareMinimum = {
|
|
6
|
-
_isOriginalObject: true;
|
|
7
|
-
isPageContext: true;
|
|
8
7
|
_globalContext: GlobalContextPrepareMinimum;
|
|
9
|
-
};
|
|
8
|
+
} & PageContextCreatedBase;
|
|
10
9
|
declare function preparePageContextForPublicUsage<PageContext extends PageContextPrepareMinimum>(pageContext: PageContext): PageContext & {
|
|
11
10
|
_isProxyObject: true;
|
|
12
11
|
_originalObject: PageContext;
|
package/dist/types/Config.d.ts
CHANGED
|
@@ -51,7 +51,7 @@ import type { ImportStringList } from '../node/vite/shared/importString.js';
|
|
|
51
51
|
type HookNameOld = HookName | HookNameOldDesign;
|
|
52
52
|
type HookName = HookNamePage | HookNameGlobal;
|
|
53
53
|
type HookNamePage = 'onHydrationEnd' | 'onBeforePrerenderStart' | 'onBeforeRender' | 'onPageTransitionStart' | 'onPageTransitionEnd' | 'onRenderHtml' | 'onRenderClient' | 'guard' | 'data' | 'onData' | 'route';
|
|
54
|
-
type HookNameGlobal = 'onBeforeRoute' | 'onPrerenderStart' | 'onCreatePageContext' | 'onCreateGlobalContext' | 'onError';
|
|
54
|
+
type HookNameGlobal = 'onBeforeRoute' | 'onPrerenderStart' | 'onCreatePageContext' | 'onCreateGlobalContext' | 'onError' | 'onHookCall';
|
|
55
55
|
type HookNameOldDesign = 'render' | 'prerender' | 'onBeforePrerender';
|
|
56
56
|
type ConfigNameBuiltIn = Exclude<keyof ConfigBuiltIn, keyof VikeVitePluginOptions | 'onBeforeRoute' | 'onPrerenderStart' | 'vite' | 'redirects'> | 'prerender' | 'hasServerOnlyHook' | 'isClientRuntimeLoaded' | 'onBeforeRenderEnv' | 'dataEnv' | 'guardEnv' | 'hooksTimeout' | 'clientHooks' | 'middleware';
|
|
57
57
|
type ConfigNameGlobal = 'onPrerenderStart' | 'onBeforeRoute' | 'prerender' | 'disableAutoFullBuild' | 'includeAssetsImportedByServer' | 'baseAssets' | 'baseServer' | 'redirects' | 'trailingSlash' | 'disableUrlNormalization' | 'vite';
|
|
@@ -361,6 +361,15 @@ type ConfigBuiltIn = {
|
|
|
361
361
|
* https://vike.dev/onCreateGlobalContext
|
|
362
362
|
*/
|
|
363
363
|
onCreateGlobalContext?: ((globalContext: GlobalContext) => void) | ImportStringList | null;
|
|
364
|
+
/** Called whenever a hook is called.
|
|
365
|
+
*
|
|
366
|
+
* https://vike.dev/onHookCall
|
|
367
|
+
*/
|
|
368
|
+
onHookCall?: ((hook: {
|
|
369
|
+
name: HookName;
|
|
370
|
+
filePath: string;
|
|
371
|
+
call: () => void | Promise<void>;
|
|
372
|
+
}, pageContext: PageContextClient | PageContextServer | null) => void | Promise<void>) | ImportStringList;
|
|
364
373
|
/** Hook for fetching data.
|
|
365
374
|
*
|
|
366
375
|
* https://vike.dev/data
|
package/dist/types/Config.js
CHANGED
|
@@ -7,6 +7,7 @@ export type { PageContextInternalServer };
|
|
|
7
7
|
export type { PageContextInternalClient };
|
|
8
8
|
export type { PageContextInternalClient_ServerRouting };
|
|
9
9
|
export type { PageContextInternalClient_ClientRouting };
|
|
10
|
+
export type { PageContextInit };
|
|
10
11
|
export type { PageContextBuiltInServer_deprecated as PageContextBuiltInServer };
|
|
11
12
|
export type { PageContextBuiltInClientWithClientRouting_deprecated as PageContextBuiltInClientWithClientRouting };
|
|
12
13
|
export type { PageContextBuiltInClientWithServerRouting_deprecated as PageContextBuiltInClientWithServerRouting };
|
|
@@ -56,29 +57,6 @@ type PageContextBuiltInCommon<Data> = PageContextConfig & {
|
|
|
56
57
|
* https://vike.dev/pageContext#data
|
|
57
58
|
*/
|
|
58
59
|
data: Data;
|
|
59
|
-
/** The URL you provided to Vike when calling `renderPage({ urlOriginal })` in your server middleware.
|
|
60
|
-
*
|
|
61
|
-
* https://vike.dev/renderPage
|
|
62
|
-
*/
|
|
63
|
-
urlOriginal: string;
|
|
64
|
-
/**
|
|
65
|
-
* The HTTP request headers.
|
|
66
|
-
*
|
|
67
|
-
* As a string object normalized by Vike.
|
|
68
|
-
*
|
|
69
|
-
* https://vike.dev/headers
|
|
70
|
-
* https://vike.dev/pageContext#headers
|
|
71
|
-
*/
|
|
72
|
-
headers: Record<string, string> | null;
|
|
73
|
-
/**
|
|
74
|
-
* The HTTP request headers.
|
|
75
|
-
*
|
|
76
|
-
* The original object provided by the server.
|
|
77
|
-
*
|
|
78
|
-
* https://vike.dev/headers
|
|
79
|
-
* https://vike.dev/pageContext#headersOriginal
|
|
80
|
-
*/
|
|
81
|
-
headersOriginal?: unknown;
|
|
82
60
|
/**
|
|
83
61
|
* The HTTP response headers.
|
|
84
62
|
*
|
|
@@ -128,8 +106,6 @@ type PageContextBuiltInCommon<Data> = PageContextConfig & {
|
|
|
128
106
|
/** @experimental https://github.com/vikejs/vike/issues/1268 */
|
|
129
107
|
sources: Sources;
|
|
130
108
|
/** @deprecated */
|
|
131
|
-
url: string;
|
|
132
|
-
/** @deprecated */
|
|
133
109
|
pageExports: Record<string, unknown>;
|
|
134
110
|
/**
|
|
135
111
|
* Whether the Base URL is missing in the URL of the HTTP request made to the SSR server.
|
|
@@ -139,7 +115,34 @@ type PageContextBuiltInCommon<Data> = PageContextConfig & {
|
|
|
139
115
|
*/
|
|
140
116
|
isBaseMissing?: true;
|
|
141
117
|
};
|
|
142
|
-
type
|
|
118
|
+
type PageContextInit = {
|
|
119
|
+
/** The URL provided when `renderPage({ urlOriginal })` is called.
|
|
120
|
+
*
|
|
121
|
+
* https://vike.dev/renderPage
|
|
122
|
+
*/
|
|
123
|
+
urlOriginal: string;
|
|
124
|
+
/**
|
|
125
|
+
* The HTTP request headers.
|
|
126
|
+
*
|
|
127
|
+
* The original object provided by the server.
|
|
128
|
+
*
|
|
129
|
+
* https://vike.dev/headers
|
|
130
|
+
* https://vike.dev/pageContext#headersOriginal
|
|
131
|
+
*/
|
|
132
|
+
headersOriginal?: unknown;
|
|
133
|
+
/** @deprecated Set `pageContextInit.urlOriginal` instead */ url?: string;
|
|
134
|
+
/** @deprecated Set pageContextInit.headersOriginal instead */ headers?: Record<string, string>;
|
|
135
|
+
};
|
|
136
|
+
type PageContextBuiltInServer<Data> = PageContextBuiltInCommon<Data> & PageContextInit & PageContextUrlServer & {
|
|
137
|
+
/**
|
|
138
|
+
* The HTTP request headers.
|
|
139
|
+
*
|
|
140
|
+
* As a string object normalized by Vike.
|
|
141
|
+
*
|
|
142
|
+
* https://vike.dev/headers
|
|
143
|
+
* https://vike.dev/pageContext#headers
|
|
144
|
+
*/
|
|
145
|
+
headers: Record<string, string> | null;
|
|
143
146
|
/**
|
|
144
147
|
* Whether the environment is the client-side:
|
|
145
148
|
* - In the browser, the value is `true`.
|
|
@@ -182,6 +185,10 @@ type PageContextBuiltInServer<Data> = PageContextBuiltInCommon<Data> & PageConte
|
|
|
182
185
|
previousPageContext?: undefined;
|
|
183
186
|
};
|
|
184
187
|
type PageContextBuiltInClientWithClientRouting<Data> = Partial<PageContextBuiltInCommon<Data>> & Pick<PageContextBuiltInCommon<Data>, 'Page' | 'routeParams' | 'pageExports' | 'config' | 'configEntries' | 'exports' | 'exportsAll' | 'abortReason' | 'data' | 'pageId' | 'source' | 'sources' | 'from'> & PageContextClientCommon & {
|
|
188
|
+
/**
|
|
189
|
+
* The current URL unprocessed (e.g. with the Base URL).
|
|
190
|
+
*/
|
|
191
|
+
urlOriginal: string;
|
|
185
192
|
/**
|
|
186
193
|
* Whether the page is the first page rendered.
|
|
187
194
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const PROJECT_VERSION: "0.4.250-commit-
|
|
1
|
+
export declare const PROJECT_VERSION: "0.4.250-commit-6161324";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// Automatically updated by @brillout/release-me
|
|
2
|
-
export const PROJECT_VERSION = '0.4.250-commit-
|
|
2
|
+
export const PROJECT_VERSION = '0.4.250-commit-6161324';
|