vike 0.4.229-commit-845a4e0 → 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 +1 -3
- 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 +8 -16
- 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 +38 -46
- 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 +14 -22
- package/dist/esm/client/server-routing-runtime/createPageContextClientSide.d.ts +12 -8
- package/dist/esm/client/server-routing-runtime/createPageContextClientSide.js +7 -16
- 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 +1 -3
- 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 +8 -16
- 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 +4 -2
- 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
|
@@ -28,7 +28,7 @@ async function createPageContextClientSide(urlOriginal) {
|
|
|
28
28
|
};
|
|
29
29
|
const pageContextUrlComputed = getPageContextUrlComputed(pageContextCreated);
|
|
30
30
|
objectAssign(pageContextCreated, pageContextUrlComputed);
|
|
31
|
-
const pageContextAugmented = await createPageContextShared(pageContextCreated, globalContext._pageConfigGlobal);
|
|
31
|
+
const pageContextAugmented = await createPageContextShared(pageContextCreated, globalContext._pageConfigGlobal, globalContext._userFriendlyConfigsGlobal);
|
|
32
32
|
augmentType(pageContextCreated, pageContextAugmented);
|
|
33
33
|
return pageContextCreated;
|
|
34
34
|
}
|
|
@@ -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,6 @@ async function getPageContextFromServerHooks(pageContext, isErrorPage) {
|
|
|
70
65
|
return { pageContextFromServerHooks };
|
|
71
66
|
}
|
|
72
67
|
async function getPageContextFromClientHooks(pageContext, isErrorPage) {
|
|
73
|
-
objectAssign(pageContext, {
|
|
74
|
-
_hasPageContextFromClient: false
|
|
75
|
-
});
|
|
76
68
|
let dataHookExists = false;
|
|
77
69
|
// At this point, we need to call the client-side guard(), data() and onBeforeRender() hooks, if they exist on client
|
|
78
70
|
// env. However if we have fetched pageContext from the server, some of them might have run already on the
|
|
@@ -94,51 +86,51 @@ async function getPageContextFromClientHooks(pageContext, isErrorPage) {
|
|
|
94
86
|
dataHookExists = true;
|
|
95
87
|
if (hookClientOnlyExists(hookName, pageContext) || !pageContext._hasPageContextFromServer) {
|
|
96
88
|
// This won't do anything if no hook has been defined or if the hook's env.client is false.
|
|
97
|
-
|
|
98
|
-
assert(!('urlOriginal' in pageContextFromHook));
|
|
99
|
-
Object.assign(pageContext, pageContextFromHook);
|
|
89
|
+
await executeDataLikeHook(hookName, pageContext);
|
|
100
90
|
}
|
|
101
91
|
}
|
|
102
92
|
}
|
|
103
93
|
// Execute +onData
|
|
104
94
|
if (dataHookExists) {
|
|
105
|
-
|
|
106
|
-
if (hook) {
|
|
107
|
-
const pageContextForUserConsumption = preparePageContextForUserConsumptionClientSide(pageContext, true);
|
|
108
|
-
await executeHook(() => hook.hookFn(pageContextForUserConsumption), hook, pageContext);
|
|
109
|
-
}
|
|
95
|
+
await executeHookClient('onData', pageContext);
|
|
110
96
|
}
|
|
111
97
|
const pageContextFromClientHooks = pageContext;
|
|
112
98
|
return pageContextFromClientHooks;
|
|
113
99
|
}
|
|
114
|
-
async function
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
const hookResult = await executeHook(() => hook.hookFn(pageContextForUserConsumption), hook, pageContext);
|
|
122
|
-
const pageContextFromHook = {};
|
|
123
|
-
if (hookName === 'onBeforeRender') {
|
|
124
|
-
assertOnBeforeRenderHookReturn(hookResult, hook.hookFilePath);
|
|
125
|
-
// Note: hookResult looks like { pageContext: { ... } }
|
|
126
|
-
const pageContextFromOnBeforeRender = hookResult?.pageContext;
|
|
127
|
-
if (pageContextFromOnBeforeRender) {
|
|
128
|
-
objectAssign(pageContextFromHook, { _hasPageContextFromClient: true });
|
|
129
|
-
objectAssign(pageContextFromHook, pageContextFromOnBeforeRender);
|
|
130
|
-
}
|
|
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);
|
|
131
107
|
}
|
|
132
108
|
else {
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
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);
|
|
142
134
|
}
|
|
143
135
|
return pageContextFromHook;
|
|
144
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)) {
|
|
@@ -201,20 +200,15 @@ async function renderPageClientSide(renderArgs) {
|
|
|
201
200
|
assert(!('urlOriginal' in pageContextFromServerHooks));
|
|
202
201
|
objectAssign(pageContext, pageContextFromServerHooks);
|
|
203
202
|
// Execute +onData
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
}
|
|
211
|
-
catch (err) {
|
|
212
|
-
await onError(err);
|
|
213
|
-
return;
|
|
214
|
-
}
|
|
215
|
-
if (isRenderOutdated())
|
|
216
|
-
return;
|
|
203
|
+
try {
|
|
204
|
+
await executeHookClient('onData', pageContext);
|
|
205
|
+
}
|
|
206
|
+
catch (err) {
|
|
207
|
+
await onError(err);
|
|
208
|
+
return;
|
|
217
209
|
}
|
|
210
|
+
if (isRenderOutdated())
|
|
211
|
+
return;
|
|
218
212
|
// Get pageContext from client-side hooks
|
|
219
213
|
let pageContextFromClientHooks;
|
|
220
214
|
try {
|
|
@@ -352,7 +346,7 @@ async function renderPageClientSide(renderArgs) {
|
|
|
352
346
|
return;
|
|
353
347
|
}
|
|
354
348
|
try {
|
|
355
|
-
objectAssign(pageContext, await
|
|
349
|
+
objectAssign(pageContext, await loadPageConfigsLazyClientSide(pageContext.pageId, pageContext._pageFilesAll, pageContext._pageConfigs, pageContext._pageConfigGlobal));
|
|
356
350
|
}
|
|
357
351
|
catch (err) {
|
|
358
352
|
if (handleErrorFetchingStaticAssets(err, pageContext, isFirstRender)) {
|
|
@@ -444,7 +438,6 @@ async function renderPageClientSide(renderArgs) {
|
|
|
444
438
|
*/
|
|
445
439
|
// onHydrationEnd()
|
|
446
440
|
if (isFirstRender && !onRenderClientError) {
|
|
447
|
-
assertHook(pageContext, 'onHydrationEnd');
|
|
448
441
|
const hook = getHookFromPageContext(pageContext, 'onHydrationEnd');
|
|
449
442
|
if (hook) {
|
|
450
443
|
const { hookFn } = hook;
|
|
@@ -467,7 +460,6 @@ async function renderPageClientSide(renderArgs) {
|
|
|
467
460
|
if (globalObject.isTransitioning) {
|
|
468
461
|
globalObject.isTransitioning = undefined;
|
|
469
462
|
assert(previousPageContext);
|
|
470
|
-
assertHook(previousPageContext, 'onPageTransitionEnd');
|
|
471
463
|
const hook = getHookFromPageContext(previousPageContext, 'onPageTransitionEnd');
|
|
472
464
|
if (hook) {
|
|
473
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
|
-
} & import("../../shared/getPageFiles.js").PageConfigUserFriendlyOld & {
|
|
29
|
-
_pageFilesLoaded: import("../../shared/getPageFiles.js").PageFile[];
|
|
30
36
|
} & {
|
|
31
|
-
config: import("../../types/index.js").ConfigResolved;
|
|
32
|
-
_source: import("../../shared/page-configs/getPageConfigUserFriendly.js").Source;
|
|
33
|
-
_sources: import("../../shared/page-configs/getPageConfigUserFriendly.js").Sources;
|
|
34
|
-
_from: import("../../shared/page-configs/getPageConfigUserFriendly.js").From;
|
|
35
37
|
isPageContext: true;
|
|
38
|
+
} & import("../../shared/page-configs/getUserFriendlyConfigs.js").PageConfigUserFriendly & import("../../shared/getPageFiles.js").PageConfigUserFriendlyOld & {
|
|
39
|
+
_pageFilesLoaded: import("../../shared/getPageFiles.js").PageFile[];
|
|
36
40
|
}>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { createPageContextClientSide };
|
|
2
|
-
import { assertUsage,
|
|
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,13 +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
|
-
|
|
29
|
-
const pageContextAugmented = await createPageContextShared(pageContextCreated, globalContext._pageConfigGlobal);
|
|
27
|
+
// Sets pageContext.config to global configs
|
|
28
|
+
const pageContextAugmented = await createPageContextShared(pageContextCreated, globalContext._pageConfigGlobal, globalContext._userFriendlyConfigsGlobal);
|
|
30
29
|
augmentType(pageContextCreated, pageContextAugmented);
|
|
30
|
+
// Sets pageContext.config to local configs (overrides the pageContext.config set above)
|
|
31
|
+
objectAssign(pageContextCreated, await loadPageConfigsLazyClientSide(pageContextCreated.pageId, pageContextCreated._pageFilesAll, pageContextCreated._pageConfigs, pageContextCreated._pageConfigGlobal));
|
|
31
32
|
assertPristineUrl();
|
|
32
33
|
return pageContextCreated;
|
|
33
34
|
}
|
|
@@ -35,13 +36,3 @@ function assertPristineUrl() {
|
|
|
35
36
|
const urlCurrent = getCurrentUrl({ withoutHash: true });
|
|
36
37
|
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.`);
|
|
37
38
|
}
|
|
38
|
-
async function loadPageUserFiles(pageId, pageContext) {
|
|
39
|
-
const pageContextAddendum = {};
|
|
40
|
-
objectAssign(pageContextAddendum, await loadUserFilesClientSide(pageId, pageContext._pageFilesAll, pageContext._pageConfigs, pageContext._pageConfigGlobal));
|
|
41
|
-
pageContext._pageFilesAll
|
|
42
|
-
.filter((p) => p.fileType !== '.page.server')
|
|
43
|
-
.forEach((p) => {
|
|
44
|
-
assertWarning(!p.fileExports?.onBeforeRender, `export { onBeforeRender } of ${p.filePath} is loaded in the browser but never executed (because you are using Server-side Routing). In order to reduce the size of you browser-side JavaScript, define onBeforeRender() in a .page.server.js file instead, see https://vike.dev/onBeforeRender-isomorphic#server-routing`, { onlyOnce: true });
|
|
45
|
-
});
|
|
46
|
-
return pageContextAddendum;
|
|
47
|
-
}
|
|
@@ -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 });
|
|
@@ -57,10 +57,8 @@ const configDefinitionsBuiltIn = {
|
|
|
57
57
|
env: { server: true }
|
|
58
58
|
},
|
|
59
59
|
onData: {
|
|
60
|
-
env: { server: true, client: true }
|
|
61
|
-
/* TODO/now
|
|
60
|
+
env: { server: true, client: true },
|
|
62
61
|
cumulative: true
|
|
63
|
-
*/
|
|
64
62
|
},
|
|
65
63
|
iKnowThePerformanceRisksOfAsyncRouteFunctions: {
|
|
66
64
|
env: { server: true, client: 'if-client-routing' },
|
|
@@ -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)
|