vike 0.4.229-commit-58f7ed0 → 0.4.229-commit-5da80bf
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/client/server-routing-runtime/utils.js +1 -0
- package/dist/cjs/client/shared/{preparePageContextForUserConsumptionClientSide.js → preparePageContextForPublicUsageClientShared.js} +15 -19
- package/dist/cjs/node/api/build.js +1 -5
- 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/plugin/shared/loggerNotProd.js +2 -2
- package/dist/cjs/node/prerender/runPrerender.js +42 -38
- package/dist/cjs/node/prerender/utils.js +1 -1
- package/dist/cjs/node/runtime/globalContext.js +13 -27
- package/dist/cjs/node/runtime/html/serializeContext.js +1 -1
- 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 +6 -9
- package/dist/cjs/node/runtime/renderPage/execHookServer.js +11 -0
- package/dist/cjs/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.js +14 -15
- package/dist/cjs/node/runtime/renderPage/executeOnRenderHtmlHook.js +8 -12
- package/dist/cjs/node/runtime/renderPage/{loadUserFilesServerSide.js → loadPageConfigsLazyServerSide.js} +4 -4
- package/dist/cjs/node/runtime/renderPage/preparePageContextForPublicUsageServer.js +10 -0
- package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +5 -5
- package/dist/cjs/node/runtime/renderPage.js +9 -7
- package/dist/cjs/node/runtime/utils.js +1 -1
- package/dist/cjs/shared/NOT_SERIALIZABLE.js +0 -1
- package/dist/cjs/shared/addIs404ToPageProps.js +0 -7
- package/dist/cjs/shared/createGlobalContextShared.js +37 -8
- package/dist/cjs/shared/createPageContextShared.js +16 -11
- package/dist/cjs/shared/getPageContext.js +3 -3
- package/dist/cjs/shared/getPageContextUrlComputed.js +2 -36
- package/dist/cjs/shared/getProxyForPublicUsage.js +106 -0
- package/dist/cjs/shared/hooks/execHook.js +164 -0
- package/dist/cjs/shared/hooks/getHook.js +23 -4
- package/dist/cjs/shared/page-configs/{getPageConfigUserFriendly.js → getUserFriendlyConfigs.js} +54 -47
- package/dist/cjs/shared/prepareGlobalContextForPublicUsage.js +10 -0
- package/dist/cjs/shared/preparePageContextForPublicUsage.js +75 -0
- package/dist/cjs/shared/route/abort.js +2 -2
- package/dist/cjs/shared/route/executeGuardHook.js +4 -9
- package/dist/cjs/shared/route/executeOnBeforeRouteHook.js +4 -3
- package/dist/cjs/shared/route/index.js +2 -4
- package/dist/cjs/shared/route/loadPageRoutes.js +6 -0
- package/dist/cjs/shared/route/resolveRouteFunction.js +14 -10
- package/dist/cjs/shared/utils.js +2 -0
- package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
- package/dist/cjs/utils/objectAssign.js +3 -3
- package/dist/cjs/utils/objectDefineProperty.js +1 -1
- package/dist/esm/client/client-routing-runtime/{createPageContext.d.ts → createPageContextClientSide.d.ts} +21 -13
- package/dist/esm/client/client-routing-runtime/{createPageContext.js → createPageContextClientSide.js} +9 -11
- package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.d.ts +400 -15
- package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.js +46 -44
- package/dist/esm/client/client-routing-runtime/globalContext.d.ts +11 -1
- package/dist/esm/client/client-routing-runtime/prefetch.d.ts +3 -8
- package/dist/esm/client/client-routing-runtime/prefetch.js +3 -3
- package/dist/esm/client/client-routing-runtime/preparePageContextForPublicUsageClient.d.ts +11 -0
- package/dist/esm/client/client-routing-runtime/preparePageContextForPublicUsageClient.js +5 -0
- package/dist/esm/client/client-routing-runtime/renderPageClientSide.d.ts +135 -0
- package/dist/esm/client/client-routing-runtime/renderPageClientSide.js +79 -78
- package/dist/esm/client/client-routing-runtime/utils.d.ts +1 -0
- package/dist/esm/client/client-routing-runtime/utils.js +1 -0
- package/dist/esm/client/server-routing-runtime/createPageContextClientSide.d.ts +19 -13
- package/dist/esm/client/server-routing-runtime/createPageContextClientSide.js +12 -15
- package/dist/esm/client/server-routing-runtime/entry.js +4 -4
- package/dist/esm/client/server-routing-runtime/globalContext.d.ts +11 -1
- package/dist/esm/client/server-routing-runtime/preparePageContextForPublicUsageClient.d.ts +9 -0
- package/dist/esm/client/server-routing-runtime/preparePageContextForPublicUsageClient.js +5 -0
- package/dist/esm/client/server-routing-runtime/utils.d.ts +1 -0
- package/dist/esm/client/server-routing-runtime/utils.js +1 -0
- package/dist/esm/client/shared/createGetGlobalContextClient.d.ts +11 -1
- package/dist/esm/client/shared/executeOnRenderClientHook.d.ts +3 -3
- package/dist/esm/client/shared/executeOnRenderClientHook.js +4 -13
- 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/client/shared/preparePageContextForPublicUsageClientShared.d.ts +11 -0
- package/dist/esm/client/shared/preparePageContextForPublicUsageClientShared.js +40 -0
- package/dist/esm/node/api/build.js +1 -2
- 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/plugin/shared/loggerNotProd.js +1 -1
- package/dist/esm/node/prerender/runPrerender.d.ts +37 -73
- package/dist/esm/node/prerender/runPrerender.js +42 -38
- package/dist/esm/node/prerender/utils.d.ts +1 -1
- package/dist/esm/node/prerender/utils.js +1 -1
- package/dist/esm/node/runtime/globalContext.d.ts +46 -251
- package/dist/esm/node/runtime/globalContext.js +14 -28
- package/dist/esm/node/runtime/html/serializeContext.d.ts +1 -1
- package/dist/esm/node/runtime/html/serializeContext.js +1 -1
- 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 +26 -41
- package/dist/esm/node/runtime/renderPage/createPageContextServerSide.js +7 -10
- package/dist/esm/node/runtime/renderPage/execHookServer.d.ts +12 -0
- package/dist/esm/node/runtime/renderPage/execHookServer.js +9 -0
- package/dist/esm/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.d.ts +2 -3
- package/dist/esm/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.js +14 -15
- package/dist/esm/node/runtime/renderPage/executeOnRenderHtmlHook.d.ts +4 -2
- package/dist/esm/node/runtime/renderPage/executeOnRenderHtmlHook.js +8 -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/preparePageContextForPublicUsageServer.d.ts +20 -0
- package/dist/esm/node/runtime/renderPage/preparePageContextForPublicUsageServer.js +8 -0
- package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +38 -74
- package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +5 -5
- package/dist/esm/node/runtime/renderPage.d.ts +21 -39
- package/dist/esm/node/runtime/renderPage.js +9 -7
- package/dist/esm/node/runtime/utils.d.ts +1 -1
- package/dist/esm/node/runtime/utils.js +1 -1
- package/dist/esm/shared/NOT_SERIALIZABLE.js +0 -1
- package/dist/esm/shared/addIs404ToPageProps.d.ts +1 -6
- package/dist/esm/shared/addIs404ToPageProps.js +1 -8
- package/dist/esm/shared/createGlobalContextShared.d.ts +28 -6
- package/dist/esm/shared/createGlobalContextShared.js +37 -8
- package/dist/esm/shared/createPageContextShared.d.ts +7 -6
- package/dist/esm/shared/createPageContextShared.js +17 -12
- package/dist/esm/shared/getPageContext.d.ts +1 -1
- package/dist/esm/shared/getPageContext.js +1 -1
- package/dist/esm/shared/getPageContextUrlComputed.d.ts +2 -5
- package/dist/esm/shared/getPageContextUrlComputed.js +3 -37
- package/dist/esm/shared/getPageFiles.d.ts +1 -1
- package/dist/esm/shared/getProxyForPublicUsage.d.ts +12 -0
- package/dist/esm/shared/getProxyForPublicUsage.js +104 -0
- package/dist/esm/shared/hooks/execHook.d.ts +63 -0
- package/dist/esm/shared/hooks/execHook.js +162 -0
- package/dist/esm/shared/hooks/getHook.d.ts +10 -11
- package/dist/esm/shared/hooks/getHook.js +23 -4
- package/dist/esm/shared/page-configs/Config.d.ts +11 -4
- package/dist/esm/shared/page-configs/{getPageConfigUserFriendly.d.ts → getUserFriendlyConfigs.d.ts} +8 -6
- package/dist/esm/shared/page-configs/{getPageConfigUserFriendly.js → getUserFriendlyConfigs.js} +55 -48
- package/dist/esm/shared/prepareGlobalContextForPublicUsage.d.ts +7 -0
- package/dist/esm/shared/prepareGlobalContextForPublicUsage.js +8 -0
- package/dist/esm/shared/preparePageContextForPublicUsage.d.ts +12 -0
- package/dist/esm/shared/preparePageContextForPublicUsage.js +73 -0
- package/dist/esm/shared/route/abort.js +1 -1
- package/dist/esm/shared/route/executeGuardHook.d.ts +4 -3
- package/dist/esm/shared/route/executeGuardHook.js +4 -9
- package/dist/esm/shared/route/executeOnBeforeRouteHook.js +4 -3
- package/dist/esm/shared/route/index.js +2 -4
- package/dist/esm/shared/route/loadPageRoutes.d.ts +2 -1
- package/dist/esm/shared/route/loadPageRoutes.js +7 -1
- package/dist/esm/shared/route/resolveRouteFunction.d.ts +2 -2
- package/dist/esm/shared/route/resolveRouteFunction.js +14 -10
- package/dist/esm/shared/types.d.ts +14 -4
- package/dist/esm/shared/utils.d.ts +2 -0
- package/dist/esm/shared/utils.js +2 -0
- 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/dist/esm/utils/objectAssign.d.ts +1 -1
- package/dist/esm/utils/objectAssign.js +3 -3
- package/dist/esm/utils/objectDefineProperty.d.ts +0 -1
- package/dist/esm/utils/objectDefineProperty.js +1 -1
- package/package.json +2 -2
- package/dist/cjs/client/shared/getPageContextProxyForUser.js +0 -16
- package/dist/cjs/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.js +0 -16
- package/dist/cjs/shared/getPageConfigsRuntime.js +0 -23
- package/dist/cjs/shared/hooks/executeHook.js +0 -87
- package/dist/cjs/shared/hooks/executeHookGeneric.js +0 -18
- package/dist/cjs/shared/preparePageContextForUserConsumption.js +0 -34
- package/dist/cjs/utils/getPublicProxy.js +0 -27
- package/dist/esm/client/shared/getPageContextProxyForUser.d.ts +0 -2
- package/dist/esm/client/shared/getPageContextProxyForUser.js +0 -14
- package/dist/esm/client/shared/preparePageContextForUserConsumptionClientSide.d.ts +0 -12
- package/dist/esm/client/shared/preparePageContextForUserConsumptionClientSide.js +0 -44
- package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.d.ts +0 -24
- package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.js +0 -14
- package/dist/esm/shared/getPageConfigsRuntime.d.ts +0 -14
- package/dist/esm/shared/getPageConfigsRuntime.js +0 -21
- package/dist/esm/shared/hooks/executeHook.d.ts +0 -21
- package/dist/esm/shared/hooks/executeHook.js +0 -85
- package/dist/esm/shared/hooks/executeHookGeneric.d.ts +0 -8
- package/dist/esm/shared/hooks/executeHookGeneric.js +0 -16
- package/dist/esm/shared/preparePageContextForUserConsumption.d.ts +0 -5
- package/dist/esm/shared/preparePageContextForUserConsumption.js +0 -32
- package/dist/esm/utils/getPublicProxy.d.ts +0 -2
- package/dist/esm/utils/getPublicProxy.js +0 -25
|
@@ -3,12 +3,11 @@ export { getPageContextFromHooks_serialized };
|
|
|
3
3
|
export { getPageContextFromServerHooks };
|
|
4
4
|
export { getPageContextFromClientHooks };
|
|
5
5
|
export { setPageContextInitIsPassedToClient };
|
|
6
|
+
export { execHookClient };
|
|
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
|
-
import { preparePageContextForUserConsumptionClientSide } from '../shared/preparePageContextForUserConsumptionClientSide.js';
|
|
12
11
|
import { removeBuiltInOverrides } from './getPageContext/removeBuiltInOverrides.js';
|
|
13
12
|
import { getPageContextRequestUrl } from '../../shared/getPageContextRequestUrl.js';
|
|
14
13
|
import { getPageConfig } from '../../shared/page-configs/helpers.js';
|
|
@@ -18,9 +17,10 @@ import { executeGuardHook } from '../../shared/route/executeGuardHook.js';
|
|
|
18
17
|
import { AbortRender, isAbortPageContext } from '../../shared/route/abort.js';
|
|
19
18
|
import { pageContextInitIsPassedToClient } from '../../shared/misc/pageContextInitIsPassedToClient.js';
|
|
20
19
|
import { isServerSideError } from '../../shared/misc/isServerSideError.js';
|
|
21
|
-
import {
|
|
20
|
+
import { execHook } from '../../shared/hooks/execHook.js';
|
|
21
|
+
import { preparePageContextForPublicUsageClient } from './preparePageContextForPublicUsageClient.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.
|
|
@@ -85,50 +78,59 @@ async function getPageContextFromClientHooks(pageContext, isErrorPage) {
|
|
|
85
78
|
!pageContext._hasPageContextFromServer) {
|
|
86
79
|
// Should we really call the guard() hook on the client-side? Shouldn't we make the guard() hook a server-side
|
|
87
80
|
// only hook? Or maybe make its env configurable like data() and onBeforeRender()?
|
|
88
|
-
await executeGuardHook(pageContext, (pageContext) =>
|
|
81
|
+
await executeGuardHook(pageContext, (pageContext) => preparePageContextForPublicUsageClient(pageContext));
|
|
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 execHookClient('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 execHookClient(hookName, pageContext) {
|
|
101
|
+
return await execHook(hookName, pageContext, (p) => preparePageContextForPublicUsageClient(p));
|
|
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 execHookClient('data', pageContext);
|
|
115
|
+
const hook = res[0]; // TO-DO/soon: support cumulative
|
|
116
|
+
if (!hook)
|
|
117
|
+
return;
|
|
118
|
+
const { hookReturn } = hook;
|
|
119
|
+
const pageContextAddendum = { data: hookReturn };
|
|
120
|
+
return pageContextAddendum;
|
|
121
|
+
}
|
|
122
|
+
async function executeOnBeforeRenderHook(pageContext) {
|
|
123
|
+
const res = await execHookClient('onBeforeRender', pageContext);
|
|
124
|
+
const hook = res[0]; // TO-DO/soon: support cumulative
|
|
125
|
+
if (!hook)
|
|
126
|
+
return;
|
|
127
|
+
const { hookReturn, hookFilePath } = hook;
|
|
128
|
+
const pageContextFromHook = {};
|
|
129
|
+
assertOnBeforeRenderHookReturn(hookReturn, hookFilePath);
|
|
130
|
+
// Note: hookReturn looks like { pageContext: { ... } }
|
|
131
|
+
const pageContextFromOnBeforeRender = hookReturn?.pageContext;
|
|
132
|
+
if (pageContextFromOnBeforeRender) {
|
|
133
|
+
objectAssign(pageContextFromHook, pageContextFromOnBeforeRender);
|
|
132
134
|
}
|
|
133
135
|
return pageContextFromHook;
|
|
134
136
|
}
|
|
@@ -5,13 +5,23 @@ type GlobalContextClient = GlobalContextSharedPublic & Pick<GlobalContextClientI
|
|
|
5
5
|
type GlobalContextClientInternal = Awaited<ReturnType<typeof getGlobalContextClientInternal>>;
|
|
6
6
|
declare const getGlobalContextClientInternal: () => Promise<{
|
|
7
7
|
isGlobalContext: true;
|
|
8
|
+
_isOriginalObject: true;
|
|
8
9
|
_virtualFileExports: unknown;
|
|
9
10
|
_pageFilesAll: import("../../shared/getPageFiles.js").PageFile[];
|
|
10
11
|
_pageConfigs: import("../../__internal/index.js").PageConfig[];
|
|
11
12
|
_pageConfigGlobal: import("../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
|
|
12
13
|
_allPageIds: string[];
|
|
14
|
+
_userFriendlyConfigsGlobal: import("../../shared/page-configs/getUserFriendlyConfigs.js").PageConfigUserFriendly;
|
|
13
15
|
config: import("../../types/index.js").ConfigResolved;
|
|
14
|
-
pages:
|
|
16
|
+
pages: {
|
|
17
|
+
[k: string]: import("../../shared/page-configs/getUserFriendlyConfigs.js").PageConfigUserFriendly & ({
|
|
18
|
+
route: import("../../shared/page-configs/Config.js").Route;
|
|
19
|
+
isErrorPage?: undefined;
|
|
20
|
+
} | {
|
|
21
|
+
route?: undefined;
|
|
22
|
+
isErrorPage: true;
|
|
23
|
+
});
|
|
24
|
+
};
|
|
15
25
|
} & {
|
|
16
26
|
isClientSide: true;
|
|
17
27
|
} & {
|
|
@@ -5,17 +5,12 @@ export { populatePageContextPrefetchCache };
|
|
|
5
5
|
export { addLinkPrefetchHandlers };
|
|
6
6
|
export { addLinkPrefetchHandlers_watch };
|
|
7
7
|
export { addLinkPrefetchHandlers_unwatch };
|
|
8
|
+
import { type PageContextCreated } from './createPageContextClientSide.js';
|
|
8
9
|
import { type PageContextFromServerHooks, getPageContextFromServerHooks } from './getPageContextFromHooks.js';
|
|
9
|
-
import type { PageConfigUserFriendlyOld
|
|
10
|
-
import { type PageConfigRuntime } from '../../shared/page-configs/PageConfig.js';
|
|
10
|
+
import type { PageConfigUserFriendlyOld } from '../../shared/getPageFiles.js';
|
|
11
11
|
type ResultPageContextFromServer = Awaited<ReturnType<typeof getPageContextFromServerHooks>>;
|
|
12
|
-
type PageContextForPrefetch = {
|
|
13
|
-
urlOriginal: string;
|
|
14
|
-
urlPathname: string;
|
|
12
|
+
type PageContextForPrefetch = PageContextCreated & {
|
|
15
13
|
pageId: string;
|
|
16
|
-
_urlRewrite: null;
|
|
17
|
-
_pageFilesAll: PageFile[];
|
|
18
|
-
_pageConfigs: PageConfigRuntime[];
|
|
19
14
|
};
|
|
20
15
|
declare function getPageContextPrefetched(pageContext: {
|
|
21
16
|
urlPathname: string;
|
|
@@ -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)) {
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { preparePageContextForPublicUsageClient };
|
|
2
|
+
export type { PageContextForPublicUsageClient };
|
|
3
|
+
import type { PageConfigUserFriendlyOld } from '../../shared/getPageFiles.js';
|
|
4
|
+
import type { PageContextInternalClient_ClientRouting } from '../../shared/types.js';
|
|
5
|
+
import type { PageContextPrepareMinimum } from '../../shared/preparePageContextForPublicUsage.js';
|
|
6
|
+
type PageContextForPublicUsageClient = PageContextPrepareMinimum & PageContextInternalClient_ClientRouting & PageConfigUserFriendlyOld & {
|
|
7
|
+
urlOriginal: string;
|
|
8
|
+
};
|
|
9
|
+
declare function preparePageContextForPublicUsageClient<PageContext extends PageContextForPublicUsageClient>(pageContext: PageContext): PageContext & {
|
|
10
|
+
Page: unknown;
|
|
11
|
+
};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { preparePageContextForPublicUsageClient };
|
|
2
|
+
import { preparePageContextForPublicUsageClientShared } from '../shared/preparePageContextForPublicUsageClientShared.js';
|
|
3
|
+
function preparePageContextForPublicUsageClient(pageContext) {
|
|
4
|
+
return preparePageContextForPublicUsageClientShared(pageContext);
|
|
5
|
+
}
|
|
@@ -3,10 +3,17 @@ export { getRenderCount };
|
|
|
3
3
|
export { disableClientRouting };
|
|
4
4
|
export { firstRenderStartPromise };
|
|
5
5
|
export { getPageContextClient };
|
|
6
|
+
export type { PageContextBegin };
|
|
6
7
|
import { type PageContextFromRewrite } from '../../shared/route/abort.js';
|
|
7
8
|
import { type ScrollTarget } from './setScrollPosition.js';
|
|
9
|
+
import type { PageConfigUserFriendlyOld } from '../../shared/getPageFiles.js';
|
|
8
10
|
import type { PageContextClient } from '../../shared/types.js';
|
|
9
11
|
declare const firstRenderStartPromise: Promise<void>;
|
|
12
|
+
type PageContextRouted = {
|
|
13
|
+
pageId: string;
|
|
14
|
+
routeParams: Record<string, string>;
|
|
15
|
+
};
|
|
16
|
+
type PageContextBegin = Awaited<ReturnType<typeof getPageContextBegin>>;
|
|
10
17
|
type RenderArgs = {
|
|
11
18
|
scrollTarget: ScrollTarget;
|
|
12
19
|
isBackwardNavigation: boolean | null;
|
|
@@ -19,6 +26,134 @@ type RenderArgs = {
|
|
|
19
26
|
pageContextInitClient?: Record<string, unknown>;
|
|
20
27
|
};
|
|
21
28
|
declare function renderPageClientSide(renderArgs: RenderArgs): Promise<void>;
|
|
29
|
+
declare function getPageContextBegin(isForErrorPage: boolean, { urlOriginal, isBackwardNavigation, pageContextsFromRewrite, isClientSideNavigation, pageContextInitClient, isFirstRender }: {
|
|
30
|
+
urlOriginal: string;
|
|
31
|
+
isBackwardNavigation: boolean | null;
|
|
32
|
+
pageContextsFromRewrite: PageContextFromRewrite[];
|
|
33
|
+
isClientSideNavigation: boolean;
|
|
34
|
+
pageContextInitClient: Record<string, unknown> | undefined;
|
|
35
|
+
isFirstRender: boolean;
|
|
36
|
+
}): Promise<{
|
|
37
|
+
_isOriginalObject: true;
|
|
38
|
+
isPageContext: true;
|
|
39
|
+
} & {
|
|
40
|
+
isClientSide: true;
|
|
41
|
+
isPrerendering: false;
|
|
42
|
+
urlOriginal: string;
|
|
43
|
+
_globalContext: {
|
|
44
|
+
isGlobalContext: true;
|
|
45
|
+
_isOriginalObject: true;
|
|
46
|
+
_virtualFileExports: unknown;
|
|
47
|
+
_pageFilesAll: import("../../shared/getPageFiles.js").PageFile[];
|
|
48
|
+
_pageConfigs: import("../../__internal/index.js").PageConfig[];
|
|
49
|
+
_pageConfigGlobal: import("../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
|
|
50
|
+
_allPageIds: string[];
|
|
51
|
+
_userFriendlyConfigsGlobal: import("../../shared/page-configs/getUserFriendlyConfigs.js").PageConfigUserFriendly;
|
|
52
|
+
config: import("../../types/index.js").ConfigResolved;
|
|
53
|
+
pages: {
|
|
54
|
+
[k: string]: import("../../shared/page-configs/getUserFriendlyConfigs.js").PageConfigUserFriendly & ({
|
|
55
|
+
route: import("../../shared/page-configs/Config.js").Route;
|
|
56
|
+
isErrorPage?: undefined;
|
|
57
|
+
} | {
|
|
58
|
+
route?: undefined;
|
|
59
|
+
isErrorPage: true;
|
|
60
|
+
});
|
|
61
|
+
};
|
|
62
|
+
} & {
|
|
63
|
+
isClientSide: true;
|
|
64
|
+
} & {
|
|
65
|
+
_pageRoutes: import("../../shared/route/loadPageRoutes.js").PageRoutes;
|
|
66
|
+
_onBeforeRouteHook: import("../../shared/hooks/getHook.js").Hook | null;
|
|
67
|
+
};
|
|
68
|
+
_pageFilesAll: import("../../shared/getPageFiles.js").PageFile[];
|
|
69
|
+
_pageConfigs: import("../../__internal/index.js").PageConfig[];
|
|
70
|
+
_pageConfigGlobal: import("../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
|
|
71
|
+
_allPageIds: string[];
|
|
72
|
+
_pageRoutes: import("../../shared/route/loadPageRoutes.js").PageRoutes;
|
|
73
|
+
_onBeforeRouteHook: import("../../shared/hooks/getHook.js").Hook | null;
|
|
74
|
+
_urlHandler: null;
|
|
75
|
+
_urlRewrite: null | string;
|
|
76
|
+
_baseServer: string;
|
|
77
|
+
} & {
|
|
78
|
+
urlParsed: import("./utils.js").UrlPublic;
|
|
79
|
+
urlPathname: string;
|
|
80
|
+
url: string;
|
|
81
|
+
} & import("../../shared/page-configs/getUserFriendlyConfigs.js").PageConfigUserFriendly & {
|
|
82
|
+
isBackwardNavigation: boolean | null;
|
|
83
|
+
isClientSideNavigation: boolean;
|
|
84
|
+
isHydration: boolean;
|
|
85
|
+
previousPageContext: ({
|
|
86
|
+
pageId: string;
|
|
87
|
+
} & PageConfigUserFriendlyOld & PageContextRouted & import("../../shared/preparePageContextForPublicUsage.js").PageContextPrepareMinimum & import("../../shared/types.js").PageContextInternalClient & Omit<Partial<{
|
|
88
|
+
isPageContext: true;
|
|
89
|
+
Page: import("../../types/index.js").Config["Page"];
|
|
90
|
+
routeParams: Record<string, string>;
|
|
91
|
+
data: unknown;
|
|
92
|
+
config: import("../../shared/page-configs/Config/PageContextConfig.js").PageContextConfig;
|
|
93
|
+
configEntries: import("../../types/index.js").ConfigEntries;
|
|
94
|
+
exports: Record<string, unknown>;
|
|
95
|
+
exportsAll: import("../../shared/getPageFiles.js").ExportsAll;
|
|
96
|
+
urlOriginal: string;
|
|
97
|
+
headers: Record<string, string> | null;
|
|
98
|
+
headersOriginal?: unknown;
|
|
99
|
+
is404: boolean | null;
|
|
100
|
+
isClientSideNavigation: boolean;
|
|
101
|
+
abortReason?: unknown;
|
|
102
|
+
abortStatusCode?: import("../../shared/route/abort.js").AbortStatusCode;
|
|
103
|
+
errorWhileRendering?: unknown;
|
|
104
|
+
pageId: string | null;
|
|
105
|
+
from: import("../../shared/page-configs/getUserFriendlyConfigs.js").From;
|
|
106
|
+
source: import("../../shared/page-configs/getUserFriendlyConfigs.js").Source;
|
|
107
|
+
sources: import("../../shared/page-configs/getUserFriendlyConfigs.js").Sources;
|
|
108
|
+
url: string;
|
|
109
|
+
pageExports: Record<string, unknown>;
|
|
110
|
+
isBaseMissing?: true;
|
|
111
|
+
}> & Pick<{
|
|
112
|
+
isPageContext: true;
|
|
113
|
+
Page: import("../../types/index.js").Config["Page"];
|
|
114
|
+
routeParams: Record<string, string>;
|
|
115
|
+
data: unknown;
|
|
116
|
+
config: import("../../shared/page-configs/Config/PageContextConfig.js").PageContextConfig;
|
|
117
|
+
configEntries: import("../../types/index.js").ConfigEntries;
|
|
118
|
+
exports: Record<string, unknown>;
|
|
119
|
+
exportsAll: import("../../shared/getPageFiles.js").ExportsAll;
|
|
120
|
+
urlOriginal: string;
|
|
121
|
+
headers: Record<string, string> | null;
|
|
122
|
+
headersOriginal?: unknown;
|
|
123
|
+
is404: boolean | null;
|
|
124
|
+
isClientSideNavigation: boolean;
|
|
125
|
+
abortReason?: unknown;
|
|
126
|
+
abortStatusCode?: import("../../shared/route/abort.js").AbortStatusCode;
|
|
127
|
+
errorWhileRendering?: unknown;
|
|
128
|
+
pageId: string | null;
|
|
129
|
+
from: import("../../shared/page-configs/getUserFriendlyConfigs.js").From;
|
|
130
|
+
source: import("../../shared/page-configs/getUserFriendlyConfigs.js").Source;
|
|
131
|
+
sources: import("../../shared/page-configs/getUserFriendlyConfigs.js").Sources;
|
|
132
|
+
url: string;
|
|
133
|
+
pageExports: Record<string, unknown>;
|
|
134
|
+
isBaseMissing?: true;
|
|
135
|
+
}, "exports" | "pageId" | "Page" | "data" | "config" | "pageExports" | "routeParams" | "configEntries" | "exportsAll" | "abortReason" | "source" | "sources" | "from"> & {
|
|
136
|
+
isClientSide: true;
|
|
137
|
+
isPrerendering: false;
|
|
138
|
+
} & {
|
|
139
|
+
isHydration: boolean;
|
|
140
|
+
isBackwardNavigation: boolean | null;
|
|
141
|
+
previousPageContext: PageContextClient<unknown> | null;
|
|
142
|
+
globalContext: import("./globalContext.js").GlobalContextClient;
|
|
143
|
+
} & {
|
|
144
|
+
urlOriginal: string;
|
|
145
|
+
} & {
|
|
146
|
+
urlParsed: import("./utils.js").UrlPublic;
|
|
147
|
+
urlPathname: string;
|
|
148
|
+
url: string;
|
|
149
|
+
}, ("globalContext" | "Page" | "data") | "previousPageContext"> & {
|
|
150
|
+
previousPageContext: {
|
|
151
|
+
pageId: string;
|
|
152
|
+
} | null;
|
|
153
|
+
} & {
|
|
154
|
+
urlOriginal: string;
|
|
155
|
+
}) | null;
|
|
156
|
+
}>;
|
|
22
157
|
declare global {
|
|
23
158
|
var _vike: {
|
|
24
159
|
fullyRenderedUrl?: string;
|
|
@@ -4,13 +4,12 @@ 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, execHookClient } 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, loadUserFilesClientSide } from '../shared/loadUserFilesClientSide.js';
|
|
12
|
+
import { isErrorFetchingStaticAssets, loadPageConfigsLazyClientSide } from '../shared/loadPageConfigsLazyClientSide.js';
|
|
14
13
|
import { pushHistoryState } from './history.js';
|
|
15
14
|
import { assertNoInfiniteAbortLoop, getPageContextFromAllRewrites, isAbortError, logAbortErrorHandled } from '../../shared/route/abort.js';
|
|
16
15
|
import { route } from '../../shared/route/index.js';
|
|
@@ -21,7 +20,10 @@ import { getErrorPageId } from '../../shared/error-page.js';
|
|
|
21
20
|
import { setPageContextCurrent } from './getPageContextCurrent.js';
|
|
22
21
|
import { getRouteStringParameterList } from '../../shared/route/resolveRouteString.js';
|
|
23
22
|
import { getCurrentUrl } from '../shared/getCurrentUrl.js';
|
|
24
|
-
import {
|
|
23
|
+
import { execHooksErrorHandling, execHookErrorHandling } from '../../shared/hooks/execHook.js';
|
|
24
|
+
import { preparePageContextForPublicUsageClient } from './preparePageContextForPublicUsageClient.js';
|
|
25
|
+
import { getHookFromPageContextNew } from '../../shared/hooks/getHook.js';
|
|
26
|
+
import { preparePageContextForPublicUsageClientMinimal } from '../shared/preparePageContextForPublicUsageClientShared.js';
|
|
25
27
|
const globalObject = getGlobalObject('client-routing-runtime/renderPageClientSide.ts', (() => {
|
|
26
28
|
const { promise: firstRenderStartPromise, resolve: firstRenderStartPromiseResolve } = genPromise();
|
|
27
29
|
return {
|
|
@@ -39,6 +41,14 @@ async function renderPageClientSide(renderArgs) {
|
|
|
39
41
|
addLinkPrefetchHandlers_unwatch();
|
|
40
42
|
const { isRenderOutdated, setHydrationCanBeAborted, isFirstRender } = getIsRenderOutdated();
|
|
41
43
|
assertNoInfiniteAbortLoop(pageContextsFromRewrite.length, redirectCount);
|
|
44
|
+
const pageContextBeginArgs = {
|
|
45
|
+
urlOriginal,
|
|
46
|
+
isBackwardNavigation,
|
|
47
|
+
pageContextsFromRewrite,
|
|
48
|
+
isClientSideNavigation,
|
|
49
|
+
pageContextInitClient,
|
|
50
|
+
isFirstRender
|
|
51
|
+
};
|
|
42
52
|
if (globalObject.clientRoutingIsDisabled) {
|
|
43
53
|
redirectHard(urlOriginal);
|
|
44
54
|
return;
|
|
@@ -52,7 +62,7 @@ async function renderPageClientSide(renderArgs) {
|
|
|
52
62
|
const onError = async (err) => {
|
|
53
63
|
await renderErrorPage({ err });
|
|
54
64
|
};
|
|
55
|
-
const pageContext = await getPageContextBegin(false);
|
|
65
|
+
const pageContext = await getPageContextBegin(false, pageContextBeginArgs);
|
|
56
66
|
if (isRenderOutdated())
|
|
57
67
|
return;
|
|
58
68
|
// onPageTransitionStart()
|
|
@@ -60,23 +70,16 @@ async function renderPageClientSide(renderArgs) {
|
|
|
60
70
|
assert(previousPageContext);
|
|
61
71
|
// 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
72
|
// https://github.com/vikejs/vike/issues/1560
|
|
63
|
-
assertHook(previousPageContext, 'onPageTransitionStart');
|
|
64
73
|
if (!globalObject.isTransitioning) {
|
|
65
74
|
globalObject.isTransitioning = true;
|
|
66
|
-
const
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
await executeHook(() => hookFn(pageContext), hook, pageContext);
|
|
72
|
-
}
|
|
73
|
-
catch (err) {
|
|
74
|
-
await onError(err);
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
if (isRenderOutdated())
|
|
78
|
-
return;
|
|
75
|
+
const hooks = getHookFromPageContextNew('onPageTransitionStart', previousPageContext);
|
|
76
|
+
const res = await execHooksErrorHandling(hooks, pageContext, preparePageContextForPublicUsageClientMinimal);
|
|
77
|
+
if ('err' in res) {
|
|
78
|
+
await onError(res.err);
|
|
79
|
+
return;
|
|
79
80
|
}
|
|
81
|
+
if (isRenderOutdated())
|
|
82
|
+
return;
|
|
80
83
|
}
|
|
81
84
|
}
|
|
82
85
|
// Route
|
|
@@ -132,7 +135,7 @@ async function renderPageClientSide(renderArgs) {
|
|
|
132
135
|
objectAssign(pageContext, pageContextFromRoute);
|
|
133
136
|
}
|
|
134
137
|
try {
|
|
135
|
-
objectAssign(pageContext, await
|
|
138
|
+
objectAssign(pageContext, await loadPageConfigsLazyClientSide(pageContext.pageId, pageContext._pageFilesAll, pageContext._pageConfigs, pageContext._pageConfigGlobal));
|
|
136
139
|
}
|
|
137
140
|
catch (err) {
|
|
138
141
|
if (handleErrorFetchingStaticAssets(err, pageContext, isFirstRender)) {
|
|
@@ -200,6 +203,16 @@ async function renderPageClientSide(renderArgs) {
|
|
|
200
203
|
// TO-DO/eventually: create helper assertPageContextFromHook()
|
|
201
204
|
assert(!('urlOriginal' in pageContextFromServerHooks));
|
|
202
205
|
objectAssign(pageContext, pageContextFromServerHooks);
|
|
206
|
+
// Execute +onData
|
|
207
|
+
try {
|
|
208
|
+
await execHookClient('onData', pageContext);
|
|
209
|
+
}
|
|
210
|
+
catch (err) {
|
|
211
|
+
await onError(err);
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
if (isRenderOutdated())
|
|
215
|
+
return;
|
|
203
216
|
// Get pageContext from client-side hooks
|
|
204
217
|
let pageContextFromClientHooks;
|
|
205
218
|
try {
|
|
@@ -215,33 +228,6 @@ async function renderPageClientSide(renderArgs) {
|
|
|
215
228
|
await renderPageView(pageContext);
|
|
216
229
|
}
|
|
217
230
|
}
|
|
218
|
-
async function getPageContextBegin(isForErrorPage) {
|
|
219
|
-
const pageContext = await createPageContextClientSide(urlOriginal);
|
|
220
|
-
objectAssign(pageContext, {
|
|
221
|
-
isBackwardNavigation,
|
|
222
|
-
isClientSideNavigation,
|
|
223
|
-
isHydration: isFirstRender && !isForErrorPage,
|
|
224
|
-
previousPageContext,
|
|
225
|
-
...pageContextInitClient
|
|
226
|
-
});
|
|
227
|
-
// TODO/next-major-release: remove
|
|
228
|
-
Object.defineProperty(pageContext, '_previousPageContext', {
|
|
229
|
-
get() {
|
|
230
|
-
assertWarning(false, 'pageContext._previousPageContext has been renamed pageContext.previousPageContext', {
|
|
231
|
-
showStackTrace: true,
|
|
232
|
-
onlyOnce: true
|
|
233
|
-
});
|
|
234
|
-
return previousPageContext;
|
|
235
|
-
},
|
|
236
|
-
enumerable: false
|
|
237
|
-
});
|
|
238
|
-
{
|
|
239
|
-
const pageContextFromAllRewrites = getPageContextFromAllRewrites(pageContextsFromRewrite);
|
|
240
|
-
assert(!('urlOriginal' in pageContextFromAllRewrites));
|
|
241
|
-
objectAssign(pageContext, pageContextFromAllRewrites);
|
|
242
|
-
}
|
|
243
|
-
return pageContext;
|
|
244
|
-
}
|
|
245
231
|
async function renderErrorPage(args) {
|
|
246
232
|
const onError = (err) => {
|
|
247
233
|
if (!isSameErrorMessage(err, args.err)) {
|
|
@@ -267,9 +253,10 @@ async function renderPageClientSide(renderArgs) {
|
|
|
267
253
|
// We handle the abort error down below.
|
|
268
254
|
}
|
|
269
255
|
}
|
|
270
|
-
const pageContext = await getPageContextBegin(true);
|
|
256
|
+
const pageContext = await getPageContextBegin(true, pageContextBeginArgs);
|
|
271
257
|
if (isRenderOutdated())
|
|
272
258
|
return;
|
|
259
|
+
objectAssign(pageContext, { routeParams: {} });
|
|
273
260
|
if (args.is404)
|
|
274
261
|
objectAssign(pageContext, { is404: true });
|
|
275
262
|
if (args.pageContextError)
|
|
@@ -337,7 +324,7 @@ async function renderPageClientSide(renderArgs) {
|
|
|
337
324
|
return;
|
|
338
325
|
}
|
|
339
326
|
try {
|
|
340
|
-
objectAssign(pageContext, await
|
|
327
|
+
objectAssign(pageContext, await loadPageConfigsLazyClientSide(pageContext.pageId, pageContext._pageFilesAll, pageContext._pageConfigs, pageContext._pageConfigGlobal));
|
|
341
328
|
}
|
|
342
329
|
catch (err) {
|
|
343
330
|
if (handleErrorFetchingStaticAssets(err, pageContext, isFirstRender)) {
|
|
@@ -379,7 +366,6 @@ async function renderPageClientSide(renderArgs) {
|
|
|
379
366
|
if (isRenderOutdated())
|
|
380
367
|
return;
|
|
381
368
|
augmentType(pageContext, pageContextFromClientHooks);
|
|
382
|
-
objectAssign(pageContext, { routeParams: {} });
|
|
383
369
|
await renderPageView(pageContext, args);
|
|
384
370
|
}
|
|
385
371
|
async function renderPageView(pageContext, isErrorPage) {
|
|
@@ -407,7 +393,7 @@ async function renderPageClientSide(renderArgs) {
|
|
|
407
393
|
const onRenderClientPromise = (async () => {
|
|
408
394
|
let onRenderClientError;
|
|
409
395
|
try {
|
|
410
|
-
await executeOnRenderClientHook(pageContext,
|
|
396
|
+
await executeOnRenderClientHook(pageContext, preparePageContextForPublicUsageClient);
|
|
411
397
|
}
|
|
412
398
|
catch (err) {
|
|
413
399
|
onRenderClientError = err;
|
|
@@ -429,21 +415,14 @@ async function renderPageClientSide(renderArgs) {
|
|
|
429
415
|
*/
|
|
430
416
|
// onHydrationEnd()
|
|
431
417
|
if (isFirstRender && !onRenderClientError) {
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
try {
|
|
437
|
-
await executeHook(() => hookFn(pageContext), hook, pageContext);
|
|
438
|
-
}
|
|
439
|
-
catch (err) {
|
|
440
|
-
await onError(err);
|
|
441
|
-
if (!isErrorPage)
|
|
442
|
-
return;
|
|
443
|
-
}
|
|
444
|
-
if (isRenderOutdated(true))
|
|
418
|
+
const res = await execHookErrorHandling('onHydrationEnd', pageContext, preparePageContextForPublicUsageClient);
|
|
419
|
+
if ('err' in res) {
|
|
420
|
+
await onError(res.err);
|
|
421
|
+
if (!isErrorPage)
|
|
445
422
|
return;
|
|
446
423
|
}
|
|
424
|
+
if (isRenderOutdated(true))
|
|
425
|
+
return;
|
|
447
426
|
}
|
|
448
427
|
// We purposely abort *after* onHydrationEnd() is called (see comment above).
|
|
449
428
|
if (isRenderOutdated(true))
|
|
@@ -452,21 +431,15 @@ async function renderPageClientSide(renderArgs) {
|
|
|
452
431
|
if (globalObject.isTransitioning) {
|
|
453
432
|
globalObject.isTransitioning = undefined;
|
|
454
433
|
assert(previousPageContext);
|
|
455
|
-
|
|
456
|
-
const
|
|
457
|
-
if (
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
await executeHook(() => hookFn(pageContext), hook, pageContext);
|
|
461
|
-
}
|
|
462
|
-
catch (err) {
|
|
463
|
-
await onError(err);
|
|
464
|
-
if (!isErrorPage)
|
|
465
|
-
return;
|
|
466
|
-
}
|
|
467
|
-
if (isRenderOutdated(true))
|
|
434
|
+
const hooks = getHookFromPageContextNew('onPageTransitionEnd', previousPageContext);
|
|
435
|
+
const res = await execHooksErrorHandling(hooks, pageContext, preparePageContextForPublicUsageClient);
|
|
436
|
+
if ('err' in res) {
|
|
437
|
+
await onError(res.err);
|
|
438
|
+
if (!isErrorPage)
|
|
468
439
|
return;
|
|
469
440
|
}
|
|
441
|
+
if (isRenderOutdated(true))
|
|
442
|
+
return;
|
|
470
443
|
}
|
|
471
444
|
if (!scrollTarget && previousPageContext) {
|
|
472
445
|
const keepScrollPositionPrev = getKeepScrollPositionSetting(previousPageContext);
|
|
@@ -489,6 +462,34 @@ async function renderPageClientSide(renderArgs) {
|
|
|
489
462
|
stampFinished(urlOriginal);
|
|
490
463
|
}
|
|
491
464
|
}
|
|
465
|
+
async function getPageContextBegin(isForErrorPage, { urlOriginal, isBackwardNavigation, pageContextsFromRewrite, isClientSideNavigation, pageContextInitClient, isFirstRender }) {
|
|
466
|
+
const previousPageContext = globalObject.previousPageContext ?? null;
|
|
467
|
+
const pageContext = await createPageContextClientSide(urlOriginal);
|
|
468
|
+
objectAssign(pageContext, {
|
|
469
|
+
isBackwardNavigation,
|
|
470
|
+
isClientSideNavigation,
|
|
471
|
+
isHydration: isFirstRender && !isForErrorPage,
|
|
472
|
+
previousPageContext,
|
|
473
|
+
...pageContextInitClient
|
|
474
|
+
});
|
|
475
|
+
// TODO/next-major-release: remove
|
|
476
|
+
Object.defineProperty(pageContext, '_previousPageContext', {
|
|
477
|
+
get() {
|
|
478
|
+
assertWarning(false, 'pageContext._previousPageContext has been renamed pageContext.previousPageContext', {
|
|
479
|
+
showStackTrace: true,
|
|
480
|
+
onlyOnce: true
|
|
481
|
+
});
|
|
482
|
+
return previousPageContext;
|
|
483
|
+
},
|
|
484
|
+
enumerable: false
|
|
485
|
+
});
|
|
486
|
+
{
|
|
487
|
+
const pageContextFromAllRewrites = getPageContextFromAllRewrites(pageContextsFromRewrite);
|
|
488
|
+
assert(!('urlOriginal' in pageContextFromAllRewrites));
|
|
489
|
+
objectAssign(pageContext, pageContextFromAllRewrites);
|
|
490
|
+
}
|
|
491
|
+
return pageContext;
|
|
492
|
+
}
|
|
492
493
|
// For Vike tests (but also potentially for Vike users)
|
|
493
494
|
// https://github.com/vikejs/vike/blob/ffbc5cf16407bcc075f414447e50d997c87c0c94/test/playground/pages/nested-layout/e2e-test.ts#L59
|
|
494
495
|
function stampFinished(urlOriginal) {
|