vike 0.4.229-commit-58f7ed0 → 0.4.229-commit-7056ef0
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/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +4 -0
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +12 -6
- package/dist/cjs/node/prerender/runPrerender.js +2 -2
- package/dist/cjs/node/runtime/renderPage/createHttpResponse/getCacheControl.js +7 -5
- package/dist/cjs/node/runtime/renderPage/createHttpResponse.js +0 -1
- package/dist/cjs/node/runtime/renderPage/createPageContextServerSide.js +2 -1
- package/dist/cjs/node/runtime/renderPage/executeHookServer.js +11 -0
- package/dist/cjs/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.js +11 -12
- package/dist/cjs/node/runtime/renderPage/{loadUserFilesServerSide.js → loadPageConfigsLazyServerSide.js} +4 -4
- package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +2 -2
- package/dist/cjs/node/runtime/renderPage.js +2 -2
- package/dist/cjs/shared/createGlobalContextShared.js +33 -7
- package/dist/cjs/shared/createPageContextShared.js +5 -11
- package/dist/cjs/shared/hooks/executeHook.js +21 -0
- package/dist/cjs/shared/hooks/getHook.js +23 -4
- package/dist/cjs/shared/page-configs/{getPageConfigUserFriendly.js → getUserFriendlyConfigs.js} +37 -32
- package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
- package/dist/esm/client/client-routing-runtime/{createPageContext.d.ts → createPageContextClientSide.d.ts} +11 -6
- package/dist/esm/client/client-routing-runtime/{createPageContext.js → createPageContextClientSide.js} +1 -1
- package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.d.ts +15 -7
- package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.js +44 -42
- package/dist/esm/client/client-routing-runtime/globalContext.d.ts +10 -1
- package/dist/esm/client/client-routing-runtime/prefetch.js +3 -3
- package/dist/esm/client/client-routing-runtime/renderPageClientSide.js +16 -9
- package/dist/esm/client/server-routing-runtime/createPageContextClientSide.d.ts +11 -7
- package/dist/esm/client/server-routing-runtime/createPageContextClientSide.js +4 -5
- package/dist/esm/client/server-routing-runtime/entry.js +5 -3
- package/dist/esm/client/server-routing-runtime/globalContext.d.ts +10 -1
- package/dist/esm/client/shared/createGetGlobalContextClient.d.ts +10 -1
- package/dist/esm/client/shared/{loadUserFilesClientSide.d.ts → loadPageConfigsLazyClientSide.d.ts} +2 -2
- package/dist/esm/client/shared/{loadUserFilesClientSide.js → loadPageConfigsLazyClientSide.js} +4 -4
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +4 -0
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.d.ts +1 -1
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +12 -6
- package/dist/esm/node/prerender/runPrerender.d.ts +82 -18
- package/dist/esm/node/prerender/runPrerender.js +2 -2
- package/dist/esm/node/runtime/globalContext.d.ts +181 -18
- package/dist/esm/node/runtime/renderPage/createHttpResponse/getCacheControl.d.ts +1 -1
- package/dist/esm/node/runtime/renderPage/createHttpResponse/getCacheControl.js +7 -5
- package/dist/esm/node/runtime/renderPage/createHttpResponse.js +0 -1
- package/dist/esm/node/runtime/renderPage/createPageContextServerSide.d.ts +41 -9
- package/dist/esm/node/runtime/renderPage/createPageContextServerSide.js +2 -1
- package/dist/esm/node/runtime/renderPage/executeHookServer.d.ts +13 -0
- package/dist/esm/node/runtime/renderPage/executeHookServer.js +9 -0
- package/dist/esm/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.d.ts +2 -3
- package/dist/esm/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.js +11 -12
- package/dist/esm/node/runtime/renderPage/{loadUserFilesServerSide.d.ts → loadPageConfigsLazyServerSide.d.ts} +6 -6
- package/dist/esm/node/runtime/renderPage/{loadUserFilesServerSide.js → loadPageConfigsLazyServerSide.js} +4 -4
- package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.d.ts +1 -1
- package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +84 -20
- package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +2 -2
- package/dist/esm/node/runtime/renderPage.d.ts +41 -9
- package/dist/esm/node/runtime/renderPage.js +2 -2
- package/dist/esm/shared/createGlobalContextShared.d.ts +26 -6
- package/dist/esm/shared/createGlobalContextShared.js +33 -7
- package/dist/esm/shared/createPageContextShared.d.ts +3 -6
- package/dist/esm/shared/createPageContextShared.js +5 -11
- package/dist/esm/shared/getPageFiles.d.ts +1 -1
- package/dist/esm/shared/hooks/executeHook.d.ts +14 -1
- package/dist/esm/shared/hooks/executeHook.js +21 -0
- package/dist/esm/shared/hooks/getHook.d.ts +7 -10
- package/dist/esm/shared/hooks/getHook.js +23 -4
- package/dist/esm/shared/page-configs/Config.d.ts +10 -3
- package/dist/esm/shared/page-configs/{getPageConfigUserFriendly.d.ts → getUserFriendlyConfigs.d.ts} +8 -6
- package/dist/esm/shared/page-configs/{getPageConfigUserFriendly.js → getUserFriendlyConfigs.js} +37 -32
- package/dist/esm/shared/types.d.ts +1 -1
- package/dist/esm/types/index.d.ts +1 -1
- package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
- package/dist/esm/utils/PROJECT_VERSION.js +1 -1
- package/package.json +1 -1
- package/dist/cjs/shared/getPageConfigsRuntime.js +0 -23
- package/dist/cjs/shared/hooks/executeHookGeneric.js +0 -18
- package/dist/esm/shared/getPageConfigsRuntime.d.ts +0 -14
- package/dist/esm/shared/getPageConfigsRuntime.js +0 -21
- package/dist/esm/shared/hooks/executeHookGeneric.d.ts +0 -8
- package/dist/esm/shared/hooks/executeHookGeneric.js +0 -16
|
@@ -3,10 +3,12 @@ export { getPageContextFromHooks_serialized };
|
|
|
3
3
|
export { getPageContextFromServerHooks };
|
|
4
4
|
export { getPageContextFromClientHooks };
|
|
5
5
|
export { setPageContextInitIsPassedToClient };
|
|
6
|
+
export { executeHookClient };
|
|
6
7
|
export type { PageContextFromServerHooks };
|
|
7
|
-
export type { PageContextFromClientHooks };
|
|
8
8
|
import type { PageConfigUserFriendlyOld, PageFile } from '../../shared/getPageFiles.js';
|
|
9
|
+
import { type PageContextForUserConsumptionClientSide } from '../shared/preparePageContextForUserConsumptionClientSide.js';
|
|
9
10
|
import type { PageConfigRuntime } from '../../shared/page-configs/PageConfig.js';
|
|
11
|
+
import type { HookName } from '../../shared/page-configs/Config.js';
|
|
10
12
|
type PageContext = {
|
|
11
13
|
urlOriginal: string;
|
|
12
14
|
_urlRewrite: string | null;
|
|
@@ -25,8 +27,6 @@ declare function getPageContextFromHooks_isHydration(pageContext: PageContextSer
|
|
|
25
27
|
_hasPageContextFromServer: true;
|
|
26
28
|
}): Promise<PageContextSerialized & PageContext & PageConfigUserFriendlyOld & {
|
|
27
29
|
_hasPageContextFromServer: true;
|
|
28
|
-
} & {
|
|
29
|
-
_hasPageContextFromClient: boolean;
|
|
30
30
|
}>;
|
|
31
31
|
type PageContextFromServerHooks = {
|
|
32
32
|
_hasPageContextFromServer: boolean;
|
|
@@ -39,11 +39,19 @@ declare function getPageContextFromServerHooks(pageContext: {
|
|
|
39
39
|
is404ServerSideRouted?: undefined;
|
|
40
40
|
pageContextFromServerHooks: PageContextFromServerHooks;
|
|
41
41
|
}>;
|
|
42
|
-
type PageContextFromClientHooks = {
|
|
43
|
-
_hasPageContextFromClient: boolean;
|
|
44
|
-
};
|
|
45
42
|
declare function getPageContextFromClientHooks(pageContext: {
|
|
46
43
|
pageId: string;
|
|
47
44
|
_hasPageContextFromServer: boolean;
|
|
48
|
-
} & PageContext & PageConfigUserFriendlyOld, isErrorPage: boolean): Promise<
|
|
45
|
+
} & PageContext & PageConfigUserFriendlyOld, isErrorPage: boolean): Promise<{
|
|
46
|
+
pageId: string;
|
|
47
|
+
_hasPageContextFromServer: boolean;
|
|
48
|
+
} & PageContext & PageConfigUserFriendlyOld>;
|
|
49
|
+
type PageContextExecuteHookClient = PageConfigUserFriendlyOld & PageContextForUserConsumptionClientSide;
|
|
50
|
+
declare function executeHookClient(hookName: HookName, pageContext: PageContextExecuteHookClient): Promise<{
|
|
51
|
+
hookResult: unknown;
|
|
52
|
+
hookName: import("../../shared/page-configs/Config.js").HookNameOld;
|
|
53
|
+
hookFilePath: string;
|
|
54
|
+
hookFn: (arg: object) => unknown;
|
|
55
|
+
hookTimeout: import("../../shared/hooks/getHook.js").HookTimeout;
|
|
56
|
+
}[]>;
|
|
49
57
|
declare function setPageContextInitIsPassedToClient(pageContext: Record<string, unknown>): void;
|
|
@@ -3,11 +3,11 @@ export { getPageContextFromHooks_serialized };
|
|
|
3
3
|
export { getPageContextFromServerHooks };
|
|
4
4
|
export { getPageContextFromClientHooks };
|
|
5
5
|
export { setPageContextInitIsPassedToClient };
|
|
6
|
+
export { executeHookClient };
|
|
6
7
|
import { assert, assertUsage, hasProp, objectAssign, getProjectError, redirectHard, isObject, getGlobalObject } from './utils.js';
|
|
7
8
|
import { parse } from '@brillout/json-serializer/parse';
|
|
8
9
|
import { getPageContextSerializedInHtml } from '../shared/getJsonSerializedInHtml.js';
|
|
9
10
|
import { analyzePageServerSide } from '../../shared/getPageFiles/analyzePageServerSide.js';
|
|
10
|
-
import { getHookFromPageContext } from '../../shared/hooks/getHook.js';
|
|
11
11
|
import { preparePageContextForUserConsumptionClientSide } from '../shared/preparePageContextForUserConsumptionClientSide.js';
|
|
12
12
|
import { removeBuiltInOverrides } from './getPageContext/removeBuiltInOverrides.js';
|
|
13
13
|
import { getPageContextRequestUrl } from '../../shared/getPageContextRequestUrl.js';
|
|
@@ -18,9 +18,9 @@ import { executeGuardHook } from '../../shared/route/executeGuardHook.js';
|
|
|
18
18
|
import { AbortRender, isAbortPageContext } from '../../shared/route/abort.js';
|
|
19
19
|
import { pageContextInitIsPassedToClient } from '../../shared/misc/pageContextInitIsPassedToClient.js';
|
|
20
20
|
import { isServerSideError } from '../../shared/misc/isServerSideError.js';
|
|
21
|
-
import {
|
|
21
|
+
import { executeHookNew } from '../../shared/hooks/executeHook.js';
|
|
22
22
|
const globalObject = getGlobalObject('client-routing-runtime/getPageContextFromHooks.ts', {});
|
|
23
|
-
//
|
|
23
|
+
// TO-DO/eventually: rename
|
|
24
24
|
function getPageContextFromHooks_serialized() {
|
|
25
25
|
const pageContextSerialized = getPageContextSerializedInHtml();
|
|
26
26
|
assertUsage(!('urlOriginal' in pageContextSerialized), "Adding 'urlOriginal' to passToClient is forbidden");
|
|
@@ -32,14 +32,9 @@ function getPageContextFromHooks_serialized() {
|
|
|
32
32
|
}
|
|
33
33
|
// TO-DO/eventually: rename
|
|
34
34
|
async function getPageContextFromHooks_isHydration(pageContext) {
|
|
35
|
-
objectAssign(pageContext, {
|
|
36
|
-
_hasPageContextFromClient: false
|
|
37
|
-
});
|
|
38
35
|
for (const hookName of ['data', 'onBeforeRender']) {
|
|
39
36
|
if (hookClientOnlyExists(hookName, pageContext)) {
|
|
40
|
-
|
|
41
|
-
assert(!('urlOriginal' in pageContextFromHook));
|
|
42
|
-
Object.assign(pageContext, pageContextFromHook);
|
|
37
|
+
await executeDataLikeHook(hookName, pageContext);
|
|
43
38
|
}
|
|
44
39
|
}
|
|
45
40
|
return pageContext;
|
|
@@ -70,9 +65,7 @@ async function getPageContextFromServerHooks(pageContext, isErrorPage) {
|
|
|
70
65
|
return { pageContextFromServerHooks };
|
|
71
66
|
}
|
|
72
67
|
async function getPageContextFromClientHooks(pageContext, isErrorPage) {
|
|
73
|
-
|
|
74
|
-
_hasPageContextFromClient: false
|
|
75
|
-
});
|
|
68
|
+
let dataHookExists = false;
|
|
76
69
|
// At this point, we need to call the client-side guard(), data() and onBeforeRender() hooks, if they exist on client
|
|
77
70
|
// env. However if we have fetched pageContext from the server, some of them might have run already on the
|
|
78
71
|
// server-side, so we run only the client-only ones in this case.
|
|
@@ -89,46 +82,55 @@ async function getPageContextFromClientHooks(pageContext, isErrorPage) {
|
|
|
89
82
|
}
|
|
90
83
|
}
|
|
91
84
|
else {
|
|
92
|
-
|
|
85
|
+
if (hookName === 'data')
|
|
86
|
+
dataHookExists = true;
|
|
93
87
|
if (hookClientOnlyExists(hookName, pageContext) || !pageContext._hasPageContextFromServer) {
|
|
94
88
|
// This won't do anything if no hook has been defined or if the hook's env.client is false.
|
|
95
|
-
|
|
96
|
-
assert(!('urlOriginal' in pageContextFromHook));
|
|
97
|
-
Object.assign(pageContext, pageContextFromHook);
|
|
89
|
+
await executeDataLikeHook(hookName, pageContext);
|
|
98
90
|
}
|
|
99
91
|
}
|
|
100
92
|
}
|
|
93
|
+
// Execute +onData
|
|
94
|
+
if (dataHookExists) {
|
|
95
|
+
await executeHookClient('onData', pageContext);
|
|
96
|
+
}
|
|
101
97
|
const pageContextFromClientHooks = pageContext;
|
|
102
98
|
return pageContextFromClientHooks;
|
|
103
99
|
}
|
|
104
|
-
async function
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
const hookResult = await executeHook(() => hook.hookFn(pageContextForUserConsumption), hook, pageContext);
|
|
112
|
-
const pageContextFromHook = {};
|
|
113
|
-
if (hookName === 'onBeforeRender') {
|
|
114
|
-
assertOnBeforeRenderHookReturn(hookResult, hook.hookFilePath);
|
|
115
|
-
// Note: hookResult looks like { pageContext: { ... } }
|
|
116
|
-
const pageContextFromOnBeforeRender = hookResult?.pageContext;
|
|
117
|
-
if (pageContextFromOnBeforeRender) {
|
|
118
|
-
objectAssign(pageContextFromHook, { _hasPageContextFromClient: true });
|
|
119
|
-
objectAssign(pageContextFromHook, pageContextFromOnBeforeRender);
|
|
120
|
-
}
|
|
100
|
+
async function executeHookClient(hookName, pageContext) {
|
|
101
|
+
return await executeHookNew(hookName, pageContext, (p) => preparePageContextForUserConsumptionClientSide(p, true));
|
|
102
|
+
}
|
|
103
|
+
async function executeDataLikeHook(hookName, pageContext) {
|
|
104
|
+
let pageContextFromHook;
|
|
105
|
+
if (hookName === 'data') {
|
|
106
|
+
pageContextFromHook = await executeDataHook(pageContext);
|
|
121
107
|
}
|
|
122
108
|
else {
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
109
|
+
pageContextFromHook = await executeOnBeforeRenderHook(pageContext);
|
|
110
|
+
}
|
|
111
|
+
Object.assign(pageContext, pageContextFromHook);
|
|
112
|
+
}
|
|
113
|
+
async function executeDataHook(pageContext) {
|
|
114
|
+
const res = await executeHookClient('data', pageContext);
|
|
115
|
+
const hook = res[0]; // TO-DO/soon: support cumulative
|
|
116
|
+
if (!hook)
|
|
117
|
+
return;
|
|
118
|
+
const { hookResult } = hook;
|
|
119
|
+
const pageContextAddendum = { data: hookResult };
|
|
120
|
+
return pageContextAddendum;
|
|
121
|
+
}
|
|
122
|
+
async function executeOnBeforeRenderHook(pageContext) {
|
|
123
|
+
const res = await executeHookClient('onBeforeRender', pageContext);
|
|
124
|
+
const hook = res[0]; // TO-DO/soon: support cumulative
|
|
125
|
+
if (!hook)
|
|
126
|
+
return;
|
|
127
|
+
const { hookResult, hookFilePath } = hook;
|
|
128
|
+
const pageContextFromHook = {};
|
|
129
|
+
assertOnBeforeRenderHookReturn(hookResult, hookFilePath);
|
|
130
|
+
// Note: hookResult looks like { pageContext: { ... } }
|
|
131
|
+
const pageContextFromOnBeforeRender = hookResult?.pageContext;
|
|
132
|
+
if (pageContextFromOnBeforeRender) {
|
|
133
|
+
objectAssign(pageContextFromHook, pageContextFromOnBeforeRender);
|
|
132
134
|
}
|
|
133
135
|
return pageContextFromHook;
|
|
134
136
|
}
|
|
@@ -10,8 +10,17 @@ declare const getGlobalContextClientInternal: () => Promise<{
|
|
|
10
10
|
_pageConfigs: import("../../__internal/index.js").PageConfig[];
|
|
11
11
|
_pageConfigGlobal: import("../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
|
|
12
12
|
_allPageIds: string[];
|
|
13
|
+
_userFriendlyConfigsGlobal: import("../../shared/page-configs/getUserFriendlyConfigs.js").PageConfigUserFriendly;
|
|
13
14
|
config: import("../../types/index.js").ConfigResolved;
|
|
14
|
-
pages:
|
|
15
|
+
pages: {
|
|
16
|
+
[k: string]: import("../../shared/page-configs/getUserFriendlyConfigs.js").PageConfigUserFriendly & ({
|
|
17
|
+
route: import("../../shared/page-configs/Config.js").Route;
|
|
18
|
+
isErrorPage?: undefined;
|
|
19
|
+
} | {
|
|
20
|
+
route?: undefined;
|
|
21
|
+
isErrorPage: true;
|
|
22
|
+
});
|
|
23
|
+
};
|
|
15
24
|
} & {
|
|
16
25
|
isClientSide: true;
|
|
17
26
|
} & {
|
|
@@ -6,11 +6,11 @@ export { addLinkPrefetchHandlers };
|
|
|
6
6
|
export { addLinkPrefetchHandlers_watch };
|
|
7
7
|
export { addLinkPrefetchHandlers_unwatch };
|
|
8
8
|
import { assert, assertClientRouting, assertUsage, assertWarning, checkIfClientRouting, getGlobalObject, hasProp, objectAssign } from './utils.js';
|
|
9
|
-
import { isErrorFetchingStaticAssets,
|
|
9
|
+
import { isErrorFetchingStaticAssets, loadPageConfigsLazyClientSide } from '../shared/loadPageConfigsLazyClientSide.js';
|
|
10
10
|
import { skipLink } from './skipLink.js';
|
|
11
11
|
import { disableClientRouting } from './renderPageClientSide.js';
|
|
12
12
|
import { isClientSideRoutable } from './isClientSideRoutable.js';
|
|
13
|
-
import { createPageContextClientSide } from './
|
|
13
|
+
import { createPageContextClientSide } from './createPageContextClientSide.js';
|
|
14
14
|
import { route } from '../../shared/route/index.js';
|
|
15
15
|
import { noRouteMatch } from '../../shared/route/noRouteMatch.js';
|
|
16
16
|
import { getPageContextFromServerHooks } from './getPageContextFromHooks.js';
|
|
@@ -45,7 +45,7 @@ function getPageContextPrefetched(pageContext) {
|
|
|
45
45
|
}
|
|
46
46
|
async function prefetchAssets(pageContextLink) {
|
|
47
47
|
try {
|
|
48
|
-
await
|
|
48
|
+
await loadPageConfigsLazyClientSide(pageContextLink.pageId, pageContextLink._pageFilesAll, pageContextLink._pageConfigs, pageContextLink._pageConfigGlobal);
|
|
49
49
|
}
|
|
50
50
|
catch (err) {
|
|
51
51
|
if (isErrorFetchingStaticAssets(err)) {
|
|
@@ -4,13 +4,13 @@ export { disableClientRouting };
|
|
|
4
4
|
export { firstRenderStartPromise };
|
|
5
5
|
export { getPageContextClient };
|
|
6
6
|
import { assert, isSameErrorMessage, objectAssign, redirectHard, getGlobalObject, hasProp, augmentType, genPromise, isCallable, catchInfiniteLoop } from './utils.js';
|
|
7
|
-
import { getPageContextFromClientHooks, getPageContextFromServerHooks, getPageContextFromHooks_isHydration, getPageContextFromHooks_serialized, setPageContextInitIsPassedToClient } from './getPageContextFromHooks.js';
|
|
8
|
-
import { createPageContextClientSide } from './
|
|
7
|
+
import { getPageContextFromClientHooks, getPageContextFromServerHooks, getPageContextFromHooks_isHydration, getPageContextFromHooks_serialized, setPageContextInitIsPassedToClient, executeHookClient } from './getPageContextFromHooks.js';
|
|
8
|
+
import { createPageContextClientSide } from './createPageContextClientSide.js';
|
|
9
9
|
import { addLinkPrefetchHandlers, addLinkPrefetchHandlers_unwatch, addLinkPrefetchHandlers_watch, getPageContextPrefetched, populatePageContextPrefetchCache } from './prefetch.js';
|
|
10
10
|
import { assertInfo, assertWarning, isReact } from './utils.js';
|
|
11
11
|
import { executeOnRenderClientHook } from '../shared/executeOnRenderClientHook.js';
|
|
12
|
-
import {
|
|
13
|
-
import { isErrorFetchingStaticAssets,
|
|
12
|
+
import { getHookFromPageContext } from '../../shared/hooks/getHook.js';
|
|
13
|
+
import { isErrorFetchingStaticAssets, loadPageConfigsLazyClientSide } from '../shared/loadPageConfigsLazyClientSide.js';
|
|
14
14
|
import { pushHistoryState } from './history.js';
|
|
15
15
|
import { assertNoInfiniteAbortLoop, getPageContextFromAllRewrites, isAbortError, logAbortErrorHandled } from '../../shared/route/abort.js';
|
|
16
16
|
import { route } from '../../shared/route/index.js';
|
|
@@ -60,7 +60,6 @@ async function renderPageClientSide(renderArgs) {
|
|
|
60
60
|
assert(previousPageContext);
|
|
61
61
|
// We use the hook of the previous page in order to be able to call onPageTransitionStart() before fetching the files of the next page.
|
|
62
62
|
// https://github.com/vikejs/vike/issues/1560
|
|
63
|
-
assertHook(previousPageContext, 'onPageTransitionStart');
|
|
64
63
|
if (!globalObject.isTransitioning) {
|
|
65
64
|
globalObject.isTransitioning = true;
|
|
66
65
|
const onPageTransitionStartHook = getHookFromPageContext(previousPageContext, 'onPageTransitionStart');
|
|
@@ -132,7 +131,7 @@ async function renderPageClientSide(renderArgs) {
|
|
|
132
131
|
objectAssign(pageContext, pageContextFromRoute);
|
|
133
132
|
}
|
|
134
133
|
try {
|
|
135
|
-
objectAssign(pageContext, await
|
|
134
|
+
objectAssign(pageContext, await loadPageConfigsLazyClientSide(pageContext.pageId, pageContext._pageFilesAll, pageContext._pageConfigs, pageContext._pageConfigGlobal));
|
|
136
135
|
}
|
|
137
136
|
catch (err) {
|
|
138
137
|
if (handleErrorFetchingStaticAssets(err, pageContext, isFirstRender)) {
|
|
@@ -200,6 +199,16 @@ async function renderPageClientSide(renderArgs) {
|
|
|
200
199
|
// TO-DO/eventually: create helper assertPageContextFromHook()
|
|
201
200
|
assert(!('urlOriginal' in pageContextFromServerHooks));
|
|
202
201
|
objectAssign(pageContext, pageContextFromServerHooks);
|
|
202
|
+
// Execute +onData
|
|
203
|
+
try {
|
|
204
|
+
await executeHookClient('onData', pageContext);
|
|
205
|
+
}
|
|
206
|
+
catch (err) {
|
|
207
|
+
await onError(err);
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
if (isRenderOutdated())
|
|
211
|
+
return;
|
|
203
212
|
// Get pageContext from client-side hooks
|
|
204
213
|
let pageContextFromClientHooks;
|
|
205
214
|
try {
|
|
@@ -337,7 +346,7 @@ async function renderPageClientSide(renderArgs) {
|
|
|
337
346
|
return;
|
|
338
347
|
}
|
|
339
348
|
try {
|
|
340
|
-
objectAssign(pageContext, await
|
|
349
|
+
objectAssign(pageContext, await loadPageConfigsLazyClientSide(pageContext.pageId, pageContext._pageFilesAll, pageContext._pageConfigs, pageContext._pageConfigGlobal));
|
|
341
350
|
}
|
|
342
351
|
catch (err) {
|
|
343
352
|
if (handleErrorFetchingStaticAssets(err, pageContext, isFirstRender)) {
|
|
@@ -429,7 +438,6 @@ async function renderPageClientSide(renderArgs) {
|
|
|
429
438
|
*/
|
|
430
439
|
// onHydrationEnd()
|
|
431
440
|
if (isFirstRender && !onRenderClientError) {
|
|
432
|
-
assertHook(pageContext, 'onHydrationEnd');
|
|
433
441
|
const hook = getHookFromPageContext(pageContext, 'onHydrationEnd');
|
|
434
442
|
if (hook) {
|
|
435
443
|
const { hookFn } = hook;
|
|
@@ -452,7 +460,6 @@ async function renderPageClientSide(renderArgs) {
|
|
|
452
460
|
if (globalObject.isTransitioning) {
|
|
453
461
|
globalObject.isTransitioning = undefined;
|
|
454
462
|
assert(previousPageContext);
|
|
455
|
-
assertHook(previousPageContext, 'onPageTransitionEnd');
|
|
456
463
|
const hook = getHookFromPageContext(previousPageContext, 'onPageTransitionEnd');
|
|
457
464
|
if (hook) {
|
|
458
465
|
const { hookFn } = hook;
|
|
@@ -7,8 +7,17 @@ declare function createPageContextClientSide(): Promise<{
|
|
|
7
7
|
_pageConfigs: import("../../__internal/index.js").PageConfig[];
|
|
8
8
|
_pageConfigGlobal: import("../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
|
|
9
9
|
_allPageIds: string[];
|
|
10
|
+
_userFriendlyConfigsGlobal: import("../../shared/page-configs/getUserFriendlyConfigs.js").PageConfigUserFriendly;
|
|
10
11
|
config: import("../../types/index.js").ConfigResolved;
|
|
11
|
-
pages:
|
|
12
|
+
pages: {
|
|
13
|
+
[k: string]: import("../../shared/page-configs/getUserFriendlyConfigs.js").PageConfigUserFriendly & ({
|
|
14
|
+
route: import("../../shared/page-configs/Config.js").Route;
|
|
15
|
+
isErrorPage?: undefined;
|
|
16
|
+
} | {
|
|
17
|
+
route?: undefined;
|
|
18
|
+
isErrorPage: true;
|
|
19
|
+
});
|
|
20
|
+
};
|
|
12
21
|
} & {
|
|
13
22
|
isClientSide: true;
|
|
14
23
|
} & object;
|
|
@@ -21,16 +30,11 @@ declare function createPageContextClientSide(): Promise<{
|
|
|
21
30
|
isHydration: true;
|
|
22
31
|
isBackwardNavigation: null;
|
|
23
32
|
_hasPageContextFromServer: true;
|
|
24
|
-
_hasPageContextFromClient: false;
|
|
25
33
|
} & {
|
|
26
34
|
pageId: string;
|
|
27
35
|
routeParams: Record<string, string>;
|
|
28
36
|
} & {
|
|
29
|
-
config: import("../../types/index.js").ConfigResolved;
|
|
30
|
-
_source: import("../../shared/page-configs/getPageConfigUserFriendly.js").Source;
|
|
31
|
-
_sources: import("../../shared/page-configs/getPageConfigUserFriendly.js").Sources;
|
|
32
|
-
_from: import("../../shared/page-configs/getPageConfigUserFriendly.js").From;
|
|
33
37
|
isPageContext: true;
|
|
34
|
-
} & import("../../shared/getPageFiles.js").PageConfigUserFriendlyOld & {
|
|
38
|
+
} & import("../../shared/page-configs/getUserFriendlyConfigs.js").PageConfigUserFriendly & import("../../shared/getPageFiles.js").PageConfigUserFriendlyOld & {
|
|
35
39
|
_pageFilesLoaded: import("../../shared/getPageFiles.js").PageFile[];
|
|
36
40
|
}>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { createPageContextClientSide };
|
|
2
2
|
import { assertUsage, augmentType, objectAssign } from './utils.js';
|
|
3
3
|
import { getPageContextSerializedInHtml } from '../shared/getJsonSerializedInHtml.js';
|
|
4
|
-
import {
|
|
4
|
+
import { loadPageConfigsLazyClientSide } from '../shared/loadPageConfigsLazyClientSide.js';
|
|
5
5
|
import { getCurrentUrl } from '../shared/getCurrentUrl.js';
|
|
6
6
|
import { createPageContextShared } from '../../shared/createPageContextShared.js';
|
|
7
7
|
import { getGlobalContextClientInternal } from './globalContext.js';
|
|
@@ -21,15 +21,14 @@ async function createPageContextClientSide() {
|
|
|
21
21
|
isClientSide: true,
|
|
22
22
|
isHydration: true,
|
|
23
23
|
isBackwardNavigation: null,
|
|
24
|
-
_hasPageContextFromServer: true
|
|
25
|
-
_hasPageContextFromClient: false
|
|
24
|
+
_hasPageContextFromServer: true
|
|
26
25
|
};
|
|
27
26
|
objectAssign(pageContextCreated, getPageContextSerializedInHtml());
|
|
28
27
|
// Sets pageContext.config to global configs
|
|
29
|
-
const pageContextAugmented = await createPageContextShared(pageContextCreated, globalContext._pageConfigGlobal);
|
|
28
|
+
const pageContextAugmented = await createPageContextShared(pageContextCreated, globalContext._pageConfigGlobal, globalContext._userFriendlyConfigsGlobal);
|
|
30
29
|
augmentType(pageContextCreated, pageContextAugmented);
|
|
31
30
|
// Sets pageContext.config to local configs (overrides the pageContext.config set above)
|
|
32
|
-
objectAssign(pageContextCreated, await
|
|
31
|
+
objectAssign(pageContextCreated, await loadPageConfigsLazyClientSide(pageContextCreated.pageId, pageContextCreated._pageFilesAll, pageContextCreated._pageConfigs, pageContextCreated._pageConfigGlobal));
|
|
33
32
|
assertPristineUrl();
|
|
34
33
|
return pageContextCreated;
|
|
35
34
|
}
|
|
@@ -2,9 +2,10 @@ import { assertServerRouting } from '../../utils/assertRoutingType.js';
|
|
|
2
2
|
assertServerRouting();
|
|
3
3
|
import { createPageContextClientSide } from './createPageContextClientSide.js';
|
|
4
4
|
import { executeOnRenderClientHook } from '../shared/executeOnRenderClientHook.js';
|
|
5
|
-
import {
|
|
5
|
+
import { getHookFromPageContext } from '../../shared/hooks/getHook.js';
|
|
6
6
|
import { assertSingleInstance_onClientEntryServerRouting } from './utils.js';
|
|
7
7
|
import { removeFoucBuster } from '../shared/removeFoucBuster.js';
|
|
8
|
+
import { executeHook } from '../../shared/hooks/executeHook.js';
|
|
8
9
|
// @ts-ignore Since dist/cjs/client/ is never used, we can ignore this error.
|
|
9
10
|
const isProd = import.meta.env.PROD;
|
|
10
11
|
assertSingleInstance_onClientEntryServerRouting(isProd);
|
|
@@ -14,6 +15,7 @@ hydrate();
|
|
|
14
15
|
async function hydrate() {
|
|
15
16
|
const pageContext = await createPageContextClientSide();
|
|
16
17
|
await executeOnRenderClientHook(pageContext, false);
|
|
17
|
-
|
|
18
|
-
|
|
18
|
+
const hook = getHookFromPageContext(pageContext, 'onHydrationEnd');
|
|
19
|
+
if (hook)
|
|
20
|
+
await executeHook(() => hook.hookFn(pageContext), hook, pageContext);
|
|
19
21
|
}
|
|
@@ -10,8 +10,17 @@ declare const getGlobalContextClientInternal: () => Promise<{
|
|
|
10
10
|
_pageConfigs: import("../../__internal/index.js").PageConfig[];
|
|
11
11
|
_pageConfigGlobal: import("../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
|
|
12
12
|
_allPageIds: string[];
|
|
13
|
+
_userFriendlyConfigsGlobal: import("../../shared/page-configs/getUserFriendlyConfigs.js").PageConfigUserFriendly;
|
|
13
14
|
config: import("../../types/index.js").ConfigResolved;
|
|
14
|
-
pages:
|
|
15
|
+
pages: {
|
|
16
|
+
[k: string]: import("../../shared/page-configs/getUserFriendlyConfigs.js").PageConfigUserFriendly & ({
|
|
17
|
+
route: import("../../shared/page-configs/Config.js").Route;
|
|
18
|
+
isErrorPage?: undefined;
|
|
19
|
+
} | {
|
|
20
|
+
route?: undefined;
|
|
21
|
+
isErrorPage: true;
|
|
22
|
+
});
|
|
23
|
+
};
|
|
15
24
|
} & {
|
|
16
25
|
isClientSide: true;
|
|
17
26
|
} & object>;
|
|
@@ -9,8 +9,17 @@ declare function createGetGlobalContextClient<GlobalContextAddendum extends obje
|
|
|
9
9
|
_pageConfigs: import("../../__internal/index.js").PageConfig[];
|
|
10
10
|
_pageConfigGlobal: import("../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
|
|
11
11
|
_allPageIds: string[];
|
|
12
|
+
_userFriendlyConfigsGlobal: import("../../shared/page-configs/getUserFriendlyConfigs.js").PageConfigUserFriendly;
|
|
12
13
|
config: import("../../types/index.js").ConfigResolved;
|
|
13
|
-
pages:
|
|
14
|
+
pages: {
|
|
15
|
+
[k: string]: import("../../shared/page-configs/getUserFriendlyConfigs.js").PageConfigUserFriendly & ({
|
|
16
|
+
route: import("../../shared/page-configs/Config.js").Route;
|
|
17
|
+
isErrorPage?: undefined;
|
|
18
|
+
} | {
|
|
19
|
+
route?: undefined;
|
|
20
|
+
isErrorPage: true;
|
|
21
|
+
});
|
|
22
|
+
};
|
|
14
23
|
} & Awaited<{
|
|
15
24
|
/**
|
|
16
25
|
* Whether the environment is client-side or server-side / pre-rendering.
|
package/dist/esm/client/shared/{loadUserFilesClientSide.d.ts → loadPageConfigsLazyClientSide.d.ts}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { loadPageConfigsLazyClientSide };
|
|
2
2
|
export { isErrorFetchingStaticAssets };
|
|
3
3
|
export type { PageContextUserFiles };
|
|
4
4
|
import { type PageFile, type PageConfigUserFriendlyOld } from '../../shared/getPageFiles.js';
|
|
@@ -11,5 +11,5 @@ type PageContextUserFiles = {
|
|
|
11
11
|
_pageConfigs: PageConfigRuntime[];
|
|
12
12
|
_pageConfigGlobal: PageConfigGlobalRuntime;
|
|
13
13
|
};
|
|
14
|
-
declare function
|
|
14
|
+
declare function loadPageConfigsLazyClientSide(pageId: string, pageFilesAll: PageFile[], pageConfigs: PageConfigRuntime[], pageConfigGlobal: PageConfigGlobalRuntime): Promise<PageContextUserFilesLoaded>;
|
|
15
15
|
declare function isErrorFetchingStaticAssets(err: unknown): boolean;
|
package/dist/esm/client/shared/{loadUserFilesClientSide.js → loadPageConfigsLazyClientSide.js}
RENAMED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { loadPageConfigsLazyClientSide };
|
|
2
2
|
export { isErrorFetchingStaticAssets };
|
|
3
3
|
import { getPageFilesClientSide } from '../../shared/getPageFiles.js';
|
|
4
|
-
import {
|
|
4
|
+
import { getUserFriendlyConfigsPageLazy } from '../../shared/page-configs/getUserFriendlyConfigs.js';
|
|
5
5
|
import { findPageConfig } from '../../shared/page-configs/findPageConfig.js';
|
|
6
6
|
import { loadConfigValues } from '../../shared/page-configs/loadConfigValues.js';
|
|
7
7
|
import { objectAssign } from '../server-routing-runtime/utils.js';
|
|
8
8
|
const stamp = '__whileFetchingAssets';
|
|
9
|
-
async function
|
|
9
|
+
async function loadPageConfigsLazyClientSide(pageId, pageFilesAll, pageConfigs, pageConfigGlobal) {
|
|
10
10
|
const pageFilesClientSide = getPageFilesClientSide(pageFilesAll, pageId);
|
|
11
11
|
const pageConfig = findPageConfig(pageConfigs, pageId);
|
|
12
12
|
let pageConfigLoaded;
|
|
@@ -30,7 +30,7 @@ async function loadUserFilesClientSide(pageId, pageFilesAll, pageConfigs, pageCo
|
|
|
30
30
|
}
|
|
31
31
|
throw err;
|
|
32
32
|
}
|
|
33
|
-
const pageContextExports =
|
|
33
|
+
const pageContextExports = getUserFriendlyConfigsPageLazy(pageFilesClientSide, pageConfigLoaded, pageConfigGlobal);
|
|
34
34
|
const pageContextAddendum = {};
|
|
35
35
|
objectAssign(pageContextAddendum, pageContextExports);
|
|
36
36
|
objectAssign(pageContextAddendum, { _pageFilesLoaded: pageFilesClientSide });
|
|
@@ -56,6 +56,10 @@ const configDefinitionsBuiltIn = {
|
|
|
56
56
|
data: {
|
|
57
57
|
env: { server: true }
|
|
58
58
|
},
|
|
59
|
+
onData: {
|
|
60
|
+
env: { server: true, client: true },
|
|
61
|
+
cumulative: true
|
|
62
|
+
},
|
|
59
63
|
iKnowThePerformanceRisksOfAsyncRouteFunctions: {
|
|
60
64
|
env: { server: true, client: 'if-client-routing' },
|
|
61
65
|
eager: true
|
|
@@ -11,7 +11,7 @@ export type { VikeConfigObject };
|
|
|
11
11
|
import type { PageConfigGlobalBuildTime, ConfigValueSource, PageConfigBuildTime } from '../../../../../shared/page-configs/PageConfig.js';
|
|
12
12
|
import { type ConfigDefinitions, type ConfigDefinitionInternal } from './getVikeConfig/configDefinitionsBuiltIn.js';
|
|
13
13
|
import type { ResolvedConfig, UserConfig } from 'vite';
|
|
14
|
-
import { type PageConfigUserFriendly, type PageConfigsUserFriendly } from '../../../../../shared/page-configs/
|
|
14
|
+
import { type PageConfigUserFriendly, type PageConfigsUserFriendly } from '../../../../../shared/page-configs/getUserFriendlyConfigs.js';
|
|
15
15
|
import { type PlusFile } from './getVikeConfig/getPlusFilesAll.js';
|
|
16
16
|
type VikeConfigObject = {
|
|
17
17
|
pageConfigs: PageConfigBuildTime[];
|
|
@@ -21,7 +21,7 @@ import { resolvePointerImport } from './getVikeConfig/resolvePointerImport.js';
|
|
|
21
21
|
import { getFilePathResolved } from '../../../shared/getFilePath.js';
|
|
22
22
|
import { getConfigValueBuildTime } from '../../../../../shared/page-configs/getConfigValueBuildTime.js';
|
|
23
23
|
import { assertExtensionsRequire } from './getVikeConfig/assertExtensions.js';
|
|
24
|
-
import {
|
|
24
|
+
import { getUserFriendlyConfigsGlobal, getUserFriendlyConfigsPageEager } from '../../../../../shared/page-configs/getUserFriendlyConfigs.js';
|
|
25
25
|
import { getConfigValuesBase, isJsonValue } from '../../../../../shared/page-configs/serialize/serializeConfigValues.js';
|
|
26
26
|
import { getPlusFilesAll } from './getVikeConfig/getPlusFilesAll.js';
|
|
27
27
|
import { getEnvVarObject } from '../../../shared/getEnvVarObject.js';
|
|
@@ -137,7 +137,7 @@ async function loadVikeConfig_withErrorHandling(userRootDir, isDev, vikeVitePlug
|
|
|
137
137
|
configDefinitions: {},
|
|
138
138
|
configValueSources: {}
|
|
139
139
|
},
|
|
140
|
-
global:
|
|
140
|
+
global: getUserFriendlyConfigsGlobal({ pageConfigGlobalValues: {} }),
|
|
141
141
|
pages: {},
|
|
142
142
|
vikeConfigDependencies: new Set()
|
|
143
143
|
};
|
|
@@ -158,13 +158,19 @@ async function loadVikeConfig(userRootDir, vikeVitePluginOptions) {
|
|
|
158
158
|
setCliAndApiOptions(pageConfigGlobal, configDefinitionsResolved);
|
|
159
159
|
// global
|
|
160
160
|
const pageConfigGlobalValues = getConfigValues(pageConfigGlobal);
|
|
161
|
-
const
|
|
161
|
+
const userFriendlyConfigsGlobal = getUserFriendlyConfigsGlobal({ pageConfigGlobalValues });
|
|
162
162
|
// pages
|
|
163
|
-
const
|
|
163
|
+
const userFriendlyConfigsPageEager = objectFromEntries(pageConfigs.map((pageConfig) => {
|
|
164
164
|
const pageConfigValues = getConfigValues(pageConfig, true);
|
|
165
|
-
return
|
|
165
|
+
return getUserFriendlyConfigsPageEager(pageConfigGlobalValues, pageConfig, pageConfigValues);
|
|
166
166
|
}));
|
|
167
|
-
return {
|
|
167
|
+
return {
|
|
168
|
+
pageConfigs,
|
|
169
|
+
pageConfigGlobal,
|
|
170
|
+
global: userFriendlyConfigsGlobal,
|
|
171
|
+
pages: userFriendlyConfigsPageEager,
|
|
172
|
+
vikeConfigDependencies: esbuildCache.vikeConfigDependencies
|
|
173
|
+
};
|
|
168
174
|
}
|
|
169
175
|
async function resolveConfigDefinitions(plusFilesAll, userRootDir, esbuildCache) {
|
|
170
176
|
const plusFilesAllOrdered = Object.values(plusFilesAll)
|