vike 0.4.228-commit-f3eb7f0 → 0.4.228-commit-90cfb1a
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/node/plugin/plugins/build/pluginModuleBanner.js +0 -1
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +5 -0
- package/dist/cjs/node/runtime/renderPage/createPageContextServerSide.js +3 -2
- package/dist/cjs/node/runtime/renderPage/executeHookGeneric.js +18 -0
- package/dist/cjs/node/runtime/utils.js +1 -0
- package/dist/cjs/shared/assertPageContextProvidedByUser.js +1 -1
- package/dist/cjs/shared/createPageContextShared.js +17 -0
- package/dist/cjs/shared/hooks/getHook.js +15 -0
- package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
- package/dist/esm/client/client-routing-runtime/{createPageContext.d.ts → createPageContextClientSide.d.ts} +8 -4
- package/dist/esm/client/client-routing-runtime/{createPageContext.js → createPageContextClientSide.js} +10 -9
- package/dist/esm/client/client-routing-runtime/prefetch.js +2 -2
- package/dist/esm/client/client-routing-runtime/renderPageClientSide.js +2 -2
- package/dist/esm/client/server-routing-runtime/{getPageContext.d.ts → createPageContextClientSide.d.ts} +8 -3
- package/dist/esm/client/server-routing-runtime/{getPageContext.js → createPageContextClientSide.js} +10 -8
- package/dist/esm/client/server-routing-runtime/entry.js +2 -2
- 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/node/plugin/plugins/build/pluginModuleBanner.js +0 -1
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +5 -0
- package/dist/esm/node/runtime/renderPage/createPageContextServerSide.d.ts +8 -5
- package/dist/esm/node/runtime/renderPage/createPageContextServerSide.js +4 -3
- package/dist/esm/node/runtime/renderPage/executeHookGeneric.d.ts +8 -0
- package/dist/esm/node/runtime/renderPage/executeHookGeneric.js +16 -0
- package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +15 -7
- package/dist/esm/node/runtime/renderPage.d.ts +6 -2
- package/dist/esm/node/runtime/utils.d.ts +1 -0
- package/dist/esm/node/runtime/utils.js +1 -0
- package/dist/esm/shared/assertPageContextProvidedByUser.js +1 -1
- package/dist/esm/shared/createPageContextShared.d.ts +9 -0
- package/dist/esm/shared/createPageContextShared.js +15 -0
- package/dist/esm/shared/hooks/getHook.d.ts +3 -1
- package/dist/esm/shared/hooks/getHook.js +16 -1
- package/dist/esm/shared/page-configs/Config.d.ts +6 -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
|
@@ -30,3 +30,4 @@ __exportStar(require("../../utils/parseUrl.js"), exports);
|
|
|
30
30
|
__exportStar(require("../../utils/slice.js"), exports);
|
|
31
31
|
__exportStar(require("../../utils/unique.js"), exports); // Only used by Server Routing (not needed for Client Routing)
|
|
32
32
|
__exportStar(require("../../utils/getPropAccessNotation.js"), exports);
|
|
33
|
+
__exportStar(require("../../utils/augmentType.js"), exports);
|
|
@@ -31,7 +31,6 @@ function pluginModuleBanner() {
|
|
|
31
31
|
id = (0, virtual_files_js_1.removeVirtualIdTag)(id);
|
|
32
32
|
if (id.startsWith(config.root))
|
|
33
33
|
id = id.slice(config.root.length + 1);
|
|
34
|
-
id = id.replaceAll('*/', '*\\/'); // https://github.com/vikejs/vike/issues/2377
|
|
35
34
|
const s = new magic_string_1.default(code);
|
|
36
35
|
// Use legal comment so that esbuild doesn't remove it.
|
|
37
36
|
// - Terser still removes the comment, but I guess users use terser to minify JavaScript so I guess it's a good thing that comment is removed.
|
|
@@ -4,6 +4,7 @@ exports.createPageContextServerSide = createPageContextServerSide;
|
|
|
4
4
|
exports.createPageContextServerSideWithoutGlobalContext = createPageContextServerSideWithoutGlobalContext;
|
|
5
5
|
const utils_js_1 = require("../utils.js");
|
|
6
6
|
const getPageContextUrlComputed_js_1 = require("../../../shared/getPageContextUrlComputed.js");
|
|
7
|
+
const createPageContextShared_js_1 = require("../../../shared/createPageContextShared.js");
|
|
7
8
|
async function createPageContextServerSide(pageContextInit, globalContext, { isPrerendering, ssr: { urlHandler, isClientSideNavigation } = {
|
|
8
9
|
urlHandler: null,
|
|
9
10
|
isClientSideNavigation: false
|
|
@@ -12,7 +13,6 @@ async function createPageContextServerSide(pageContextInit, globalContext, { isP
|
|
|
12
13
|
const pageContextCreated = createPageContext(pageContextInit, isPrerendering);
|
|
13
14
|
(0, utils_js_1.objectAssign)(pageContextCreated, pageContextInit);
|
|
14
15
|
(0, utils_js_1.objectAssign)(pageContextCreated, {
|
|
15
|
-
_objectCreatedByVike: true,
|
|
16
16
|
// The following is defined on `pageContext` because we can eventually make these non-global
|
|
17
17
|
_baseServer: globalContext.baseServer,
|
|
18
18
|
_baseAssets: globalContext.baseAssets,
|
|
@@ -54,6 +54,8 @@ async function createPageContextServerSide(pageContextInit, globalContext, { isP
|
|
|
54
54
|
}
|
|
55
55
|
(0, utils_js_1.objectAssign)(pageContextCreated, { headers });
|
|
56
56
|
}
|
|
57
|
+
const pageContextAugmented = await (0, createPageContextShared_js_1.createPageContextShared)(pageContextCreated, globalContext.pageConfigGlobal);
|
|
58
|
+
(0, utils_js_1.augmentType)(pageContextCreated, pageContextAugmented);
|
|
57
59
|
return pageContextCreated;
|
|
58
60
|
}
|
|
59
61
|
function createPageContextServerSideWithoutGlobalContext(pageContextInit) {
|
|
@@ -62,7 +64,6 @@ function createPageContextServerSideWithoutGlobalContext(pageContextInit) {
|
|
|
62
64
|
}
|
|
63
65
|
function createPageContext(pageContextInit, isPrerendering) {
|
|
64
66
|
const pageContext = {
|
|
65
|
-
_isPageContextObject: true,
|
|
66
67
|
isClientSide: false,
|
|
67
68
|
isPrerendering
|
|
68
69
|
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.executeHookGeneric = executeHookGeneric;
|
|
4
|
+
exports.executeHookGenericGlobalCumulative = executeHookGenericGlobalCumulative;
|
|
5
|
+
const executeHook_js_1 = require("../../../shared/hooks/executeHook.js");
|
|
6
|
+
const getHook_js_1 = require("../../../shared/hooks/getHook.js");
|
|
7
|
+
async function executeHookGeneric(hookName, pageContext) {
|
|
8
|
+
const hook = (0, getHook_js_1.getHookFromPageContext)(pageContext, hookName);
|
|
9
|
+
if (!hook)
|
|
10
|
+
return;
|
|
11
|
+
await (0, executeHook_js_1.executeHook)(() => hook.hookFn(pageContext), hook, pageContext);
|
|
12
|
+
}
|
|
13
|
+
async function executeHookGenericGlobalCumulative(hookName, pageConfigGlobal, pageContext) {
|
|
14
|
+
const hooks = (0, getHook_js_1.getHookFromPageConfigGlobalCumulative)(pageConfigGlobal, hookName);
|
|
15
|
+
await Promise.all(hooks.map(async (hook) => {
|
|
16
|
+
await (0, executeHook_js_1.executeHook)(() => hook.hookFn(pageContext), hook, null);
|
|
17
|
+
}));
|
|
18
|
+
}
|
|
@@ -75,3 +75,4 @@ __exportStar(require("../../utils/getPropAccessNotation.js"), exports);
|
|
|
75
75
|
__exportStar(require("../../utils/PROJECT_VERSION.js"), exports);
|
|
76
76
|
__exportStar(require("../../utils/genPromise.js"), exports);
|
|
77
77
|
__exportStar(require("../../utils/makePublicCopy.js"), exports);
|
|
78
|
+
__exportStar(require("../../utils/augmentType.js"), exports);
|
|
@@ -12,7 +12,7 @@ function assertPageContextProvidedByUser(pageContextProvidedByUser, { hookName,
|
|
|
12
12
|
(0, utils_js_1.assert)(!hookName.endsWith(')'));
|
|
13
13
|
const errPrefix = `The ${picocolors_1.default.cyan('pageContext')} object provided by the ${hookName}() hook defined by ${hookFilePath}`;
|
|
14
14
|
(0, utils_js_1.assertUsage)((0, utils_js_1.isObject)(pageContextProvidedByUser), `${errPrefix} should be an object (but it's ${picocolors_1.default.cyan(`typeof pageContext === ${JSON.stringify(typeof pageContextProvidedByUser)}`)} instead)`);
|
|
15
|
-
(0, utils_js_1.assertUsage)(!('
|
|
15
|
+
(0, utils_js_1.assertUsage)(!('_isPageContextObject' in pageContextProvidedByUser), `${errPrefix} shouldn't be the whole ${picocolors_1.default.cyan('pageContext')} object, see https://vike.dev/pageContext-manipulation#do-not-return-entire-pagecontext`);
|
|
16
16
|
// In principle, it's possible to use onBeforeRoute()` to override and define the whole routing.
|
|
17
17
|
// Is that a good idea to allow users to do this? Beyond deep integration with Vue Router or React Router, is there a use case for this?
|
|
18
18
|
(0, utils_js_1.assertWarning)(!('pageId' in pageContextProvidedByUser), `${errPrefix} sets ${picocolors_1.default.cyan('pageContext.pageId')} which means that Vike's routing is overriden. This is an experimental feature: make sure to contact a vike maintainer before using this.`, { onlyOnce: true });
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createPageContextShared = createPageContextShared;
|
|
4
|
+
const executeHookGeneric_js_1 = require("../node/runtime/renderPage/executeHookGeneric.js");
|
|
5
|
+
const getPageConfigUserFriendly_js_1 = require("./page-configs/getPageConfigUserFriendly.js");
|
|
6
|
+
const utils_js_1 = require("./utils.js");
|
|
7
|
+
async function createPageContextShared(pageContextCreated, pageConfigGlobal) {
|
|
8
|
+
const pageConfigGlobalUserFriendly = (0, getPageConfigUserFriendly_js_1.getPageConfigGlobalUserFriendly)({
|
|
9
|
+
pageConfigGlobalValues: pageConfigGlobal.configValues
|
|
10
|
+
});
|
|
11
|
+
(0, utils_js_1.objectAssign)(pageContextCreated, {
|
|
12
|
+
_isPageContextObject: true,
|
|
13
|
+
...pageConfigGlobalUserFriendly
|
|
14
|
+
}, true);
|
|
15
|
+
await (0, executeHookGeneric_js_1.executeHookGenericGlobalCumulative)('onCreatePageContext', pageConfigGlobal, pageContextCreated);
|
|
16
|
+
return pageContextCreated;
|
|
17
|
+
}
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.getHookFromPageContext = getHookFromPageContext;
|
|
7
7
|
exports.getHookFromPageConfig = getHookFromPageConfig;
|
|
8
8
|
exports.getHookFromPageConfigGlobal = getHookFromPageConfigGlobal;
|
|
9
|
+
exports.getHookFromPageConfigGlobalCumulative = getHookFromPageConfigGlobalCumulative;
|
|
9
10
|
exports.assertHook = assertHook;
|
|
10
11
|
exports.getHook_setIsPrerenderering = getHook_setIsPrerenderering;
|
|
11
12
|
exports.getHookTimeoutDefault = getHookTimeoutDefault;
|
|
@@ -47,6 +48,20 @@ function getHookFromPageConfigGlobal(pageConfigGlobal, hookName) {
|
|
|
47
48
|
const hookTimeout = getHookTimeoutGlobal(hookName);
|
|
48
49
|
return getHook(hookFn, hookName, hookFilePath, hookTimeout);
|
|
49
50
|
}
|
|
51
|
+
function getHookFromPageConfigGlobalCumulative(pageConfigGlobal, hookName) {
|
|
52
|
+
const configValue = pageConfigGlobal.configValues[hookName];
|
|
53
|
+
if (!configValue?.value)
|
|
54
|
+
return [];
|
|
55
|
+
const val = configValue.value;
|
|
56
|
+
(0, utils_js_1.assert)((0, utils_js_1.isArray)(val));
|
|
57
|
+
return val.map((v, i) => {
|
|
58
|
+
const hookFn = v;
|
|
59
|
+
const hookTimeout = getHookTimeoutGlobal(hookName);
|
|
60
|
+
(0, utils_js_1.assert)((0, utils_js_1.isArray)(configValue.definedAtData));
|
|
61
|
+
const hookFilePath = (0, helpers_js_1.getHookFilePathToShowToUser)(configValue.definedAtData[i]);
|
|
62
|
+
return getHook(hookFn, hookName, hookFilePath, hookTimeout);
|
|
63
|
+
});
|
|
64
|
+
}
|
|
50
65
|
function getHookTimeoutGlobal(hookName) {
|
|
51
66
|
// TO-DO/perfection: we could use the global value of configooksTimeout but it requires some non-trivial refactoring
|
|
52
67
|
const hookTimeout = getHookTimeoutDefault(hookName);
|
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
export {
|
|
2
|
-
declare function
|
|
3
|
-
_isPageContextObject: boolean;
|
|
1
|
+
export { createPageContextClientSide };
|
|
2
|
+
declare function createPageContextClientSide(urlOriginal: string): Promise<{
|
|
4
3
|
isClientSide: boolean;
|
|
5
4
|
isPrerendering: boolean;
|
|
6
5
|
urlOriginal: string;
|
|
7
6
|
globalContext: {
|
|
8
7
|
[x: string]: unknown;
|
|
9
8
|
};
|
|
10
|
-
_objectCreatedByVike: boolean;
|
|
11
9
|
_urlHandler: null;
|
|
12
10
|
_urlRewrite: null;
|
|
13
11
|
_baseServer: string;
|
|
@@ -21,4 +19,10 @@ declare function createPageContext(urlOriginal: string): Promise<{
|
|
|
21
19
|
urlParsed: import("./utils.js").UrlPublic;
|
|
22
20
|
urlPathname: string;
|
|
23
21
|
url: string;
|
|
22
|
+
} & {
|
|
23
|
+
config: import("../../types/index.js").ConfigResolved;
|
|
24
|
+
_source: import("../../shared/page-configs/getPageConfigUserFriendly.js").Source;
|
|
25
|
+
_sources: import("../../shared/page-configs/getPageConfigUserFriendly.js").Sources;
|
|
26
|
+
_from: import("../../shared/page-configs/getPageConfigUserFriendly.js").From;
|
|
27
|
+
_isPageContextObject: boolean;
|
|
24
28
|
}>;
|
|
@@ -1,24 +1,23 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { createPageContextClientSide };
|
|
2
|
+
import { createPageContextShared } from '../../shared/createPageContextShared.js';
|
|
2
3
|
import { getPageConfigsRuntime } from '../../shared/getPageConfigsRuntime.js';
|
|
3
4
|
import { getPageContextUrlComputed } from '../../shared/getPageContextUrlComputed.js';
|
|
4
5
|
import { loadPageRoutes } from '../../shared/route/loadPageRoutes.js';
|
|
5
6
|
import { getBaseServer } from './getBaseServer.js';
|
|
6
7
|
import { getGlobalContext } from './globalContextClientSide.js';
|
|
7
|
-
import { assert, isBaseServer, objectAssign } from './utils.js';
|
|
8
|
+
import { assert, augmentType, isBaseServer, objectAssign } from './utils.js';
|
|
8
9
|
// @ts-ignore
|
|
9
10
|
import * as virtualFileExports from 'virtual:vike:importUserCode:client:client-routing';
|
|
10
11
|
const { pageFilesAll, allPageIds, pageConfigs, pageConfigGlobal } = getPageConfigsRuntime(virtualFileExports);
|
|
11
|
-
async function
|
|
12
|
+
async function createPageContextClientSide(urlOriginal) {
|
|
12
13
|
const { pageRoutes, onBeforeRouteHook } = await loadPageRoutes(pageFilesAll, pageConfigs, pageConfigGlobal, allPageIds);
|
|
13
14
|
const baseServer = getBaseServer();
|
|
14
15
|
assert(isBaseServer(baseServer));
|
|
15
|
-
const
|
|
16
|
-
_isPageContextObject: true,
|
|
16
|
+
const pageContextCreated = {
|
|
17
17
|
isClientSide: true,
|
|
18
18
|
isPrerendering: false,
|
|
19
19
|
urlOriginal,
|
|
20
20
|
globalContext: getGlobalContext(),
|
|
21
|
-
_objectCreatedByVike: true,
|
|
22
21
|
_urlHandler: null,
|
|
23
22
|
_urlRewrite: null,
|
|
24
23
|
_baseServer: baseServer,
|
|
@@ -29,7 +28,9 @@ async function createPageContext(urlOriginal) {
|
|
|
29
28
|
_pageRoutes: pageRoutes,
|
|
30
29
|
_onBeforeRouteHook: onBeforeRouteHook
|
|
31
30
|
};
|
|
32
|
-
const pageContextUrlComputed = getPageContextUrlComputed(
|
|
33
|
-
objectAssign(
|
|
34
|
-
|
|
31
|
+
const pageContextUrlComputed = getPageContextUrlComputed(pageContextCreated);
|
|
32
|
+
objectAssign(pageContextCreated, pageContextUrlComputed);
|
|
33
|
+
const pageContextAugmented = await createPageContextShared(pageContextCreated, pageConfigGlobal);
|
|
34
|
+
augmentType(pageContextCreated, pageContextAugmented);
|
|
35
|
+
return pageContextCreated;
|
|
35
36
|
}
|
|
@@ -10,7 +10,7 @@ import { isErrorFetchingStaticAssets, loadUserFilesClientSide } from '../shared/
|
|
|
10
10
|
import { skipLink } from './skipLink.js';
|
|
11
11
|
import { disableClientRouting } from './renderPageClientSide.js';
|
|
12
12
|
import { isClientSideRoutable } from './isClientSideRoutable.js';
|
|
13
|
-
import {
|
|
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';
|
|
@@ -238,7 +238,7 @@ function isExpired(found) {
|
|
|
238
238
|
}
|
|
239
239
|
// TODO/next-major-release: make it sync
|
|
240
240
|
async function getPageContextLink(urlOfLink) {
|
|
241
|
-
const pageContextLink = await
|
|
241
|
+
const pageContextLink = await createPageContextClientSide(urlOfLink);
|
|
242
242
|
let pageContextFromRoute;
|
|
243
243
|
try {
|
|
244
244
|
pageContextFromRoute = await route(pageContextLink);
|
|
@@ -5,7 +5,7 @@ export { firstRenderStartPromise };
|
|
|
5
5
|
export { getPageContextClient };
|
|
6
6
|
import { assert, isSameErrorMessage, objectAssign, redirectHard, getGlobalObject, hasProp, augmentType, genPromise, isCallable, catchInfiniteLoop } from './utils.js';
|
|
7
7
|
import { getPageContextFromClientHooks, getPageContextFromServerHooks, getPageContextFromHooks_isHydration, getPageContextFromHooks_serialized, setPageContextInitIsPassedToClient } from './getPageContextFromHooks.js';
|
|
8
|
-
import {
|
|
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';
|
|
@@ -217,7 +217,7 @@ async function renderPageClientSide(renderArgs) {
|
|
|
217
217
|
}
|
|
218
218
|
}
|
|
219
219
|
async function getPageContextBegin(isForErrorPage) {
|
|
220
|
-
const pageContext = await
|
|
220
|
+
const pageContext = await createPageContextClientSide(urlOriginal);
|
|
221
221
|
objectAssign(pageContext, {
|
|
222
222
|
isBackwardNavigation,
|
|
223
223
|
isClientSideNavigation,
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
export {
|
|
2
|
-
declare function
|
|
3
|
-
_isPageContextObject: boolean;
|
|
1
|
+
export { createPageContextClientSide };
|
|
2
|
+
declare function createPageContextClientSide(): Promise<{
|
|
4
3
|
isPrerendering: boolean;
|
|
5
4
|
isClientSide: boolean;
|
|
6
5
|
isHydration: true;
|
|
@@ -16,4 +15,10 @@ declare function getPageContext(): Promise<{
|
|
|
16
15
|
_pageConfigGlobal: import("../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
|
|
17
16
|
} & import("../../shared/getPageFiles.js").PageConfigUserFriendlyOld & {
|
|
18
17
|
_pageFilesLoaded: import("../../shared/getPageFiles.js").PageFile[];
|
|
18
|
+
} & {
|
|
19
|
+
config: import("../../types/index.js").ConfigResolved;
|
|
20
|
+
_source: import("../../shared/page-configs/getPageConfigUserFriendly.js").Source;
|
|
21
|
+
_sources: import("../../shared/page-configs/getPageConfigUserFriendly.js").Sources;
|
|
22
|
+
_from: import("../../shared/page-configs/getPageConfigUserFriendly.js").From;
|
|
23
|
+
_isPageContextObject: boolean;
|
|
19
24
|
}>;
|
package/dist/esm/client/server-routing-runtime/{getPageContext.js → createPageContextClientSide.js}
RENAMED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
export {
|
|
2
|
-
import { assertUsage, assertWarning, objectAssign } from './utils.js';
|
|
1
|
+
export { createPageContextClientSide };
|
|
2
|
+
import { assertUsage, assertWarning, augmentType, objectAssign } from './utils.js';
|
|
3
3
|
import { getPageContextSerializedInHtml } from '../shared/getPageContextSerializedInHtml.js';
|
|
4
4
|
import { loadUserFilesClientSide } from '../shared/loadUserFilesClientSide.js';
|
|
5
5
|
import { getCurrentUrl } from '../shared/getCurrentUrl.js';
|
|
6
6
|
import { getPageConfigsRuntime } from '../../shared/getPageConfigsRuntime.js';
|
|
7
7
|
// @ts-ignore
|
|
8
8
|
import * as virtualFileExports from 'virtual:vike:importUserCode:client:server-routing';
|
|
9
|
+
import { createPageContextShared } from '../../shared/createPageContextShared.js';
|
|
9
10
|
const { pageFilesAll, pageConfigs, pageConfigGlobal } = getPageConfigsRuntime(virtualFileExports);
|
|
10
11
|
const urlFirst = getCurrentUrl({ withoutHash: true });
|
|
11
|
-
async function
|
|
12
|
-
const
|
|
13
|
-
_isPageContextObject: true,
|
|
12
|
+
async function createPageContextClientSide() {
|
|
13
|
+
const pageContextCreated = {
|
|
14
14
|
isPrerendering: false,
|
|
15
15
|
isClientSide: true,
|
|
16
16
|
isHydration: true,
|
|
@@ -18,10 +18,12 @@ async function getPageContext() {
|
|
|
18
18
|
_hasPageContextFromServer: true,
|
|
19
19
|
_hasPageContextFromClient: false
|
|
20
20
|
};
|
|
21
|
-
objectAssign(
|
|
22
|
-
objectAssign(
|
|
21
|
+
objectAssign(pageContextCreated, getPageContextSerializedInHtml());
|
|
22
|
+
objectAssign(pageContextCreated, await loadPageUserFiles(pageContextCreated.pageId));
|
|
23
|
+
const pageContextAugmented = await createPageContextShared(pageContextCreated, pageConfigGlobal);
|
|
24
|
+
augmentType(pageContextCreated, pageContextAugmented);
|
|
23
25
|
assertPristineUrl();
|
|
24
|
-
return
|
|
26
|
+
return pageContextCreated;
|
|
25
27
|
}
|
|
26
28
|
function assertPristineUrl() {
|
|
27
29
|
const urlCurrent = getCurrentUrl({ withoutHash: true });
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { assertServerRouting } from '../../utils/assertRoutingType.js';
|
|
2
2
|
assertServerRouting();
|
|
3
|
-
import {
|
|
3
|
+
import { createPageContextClientSide } from './createPageContextClientSide.js';
|
|
4
4
|
import { executeOnRenderClientHook } from '../shared/executeOnRenderClientHook.js';
|
|
5
5
|
import { assertHook } from '../../shared/hooks/getHook.js';
|
|
6
6
|
import { assertSingleInstance_onClientEntryServerRouting } from './utils.js';
|
|
@@ -12,7 +12,7 @@ if (import.meta.env.DEV)
|
|
|
12
12
|
removeFoucBuster();
|
|
13
13
|
hydrate();
|
|
14
14
|
async function hydrate() {
|
|
15
|
-
const pageContext = await
|
|
15
|
+
const pageContext = await createPageContextClientSide();
|
|
16
16
|
await executeOnRenderClientHook(pageContext, false);
|
|
17
17
|
assertHook(pageContext, 'onHydrationEnd');
|
|
18
18
|
await pageContext.exports.onHydrationEnd?.(pageContext);
|
|
@@ -14,3 +14,4 @@ export * from '../../utils/parseUrl.js';
|
|
|
14
14
|
export * from '../../utils/slice.js';
|
|
15
15
|
export * from '../../utils/unique.js'; // Only used by Server Routing (not needed for Client Routing)
|
|
16
16
|
export * from '../../utils/getPropAccessNotation.js';
|
|
17
|
+
export * from '../../utils/augmentType.js';
|
|
@@ -26,7 +26,6 @@ function pluginModuleBanner() {
|
|
|
26
26
|
id = removeVirtualIdTag(id);
|
|
27
27
|
if (id.startsWith(config.root))
|
|
28
28
|
id = id.slice(config.root.length + 1);
|
|
29
|
-
id = id.replaceAll('*/', '*\\/'); // https://github.com/vikejs/vike/issues/2377
|
|
30
29
|
const s = new MagicString(code);
|
|
31
30
|
// Use legal comment so that esbuild doesn't remove it.
|
|
32
31
|
// - Terser still removes the comment, but I guess users use terser to minify JavaScript so I guess it's a good thing that comment is removed.
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
export { createPageContextServerSide };
|
|
2
2
|
export { createPageContextServerSideWithoutGlobalContext };
|
|
3
|
-
export type {
|
|
3
|
+
export type { PageContextCreatedServerSide };
|
|
4
4
|
import type { GlobalContextInternal } from '../globalContext.js';
|
|
5
5
|
import type { PageContextInit } from '../renderPage.js';
|
|
6
|
-
type
|
|
6
|
+
type PageContextCreatedServerSide = Awaited<ReturnType<typeof createPageContextServerSide>>;
|
|
7
7
|
declare function createPageContextServerSide(pageContextInit: PageContextInit, globalContext: GlobalContextInternal, { isPrerendering, ssr: { urlHandler, isClientSideNavigation } }: {
|
|
8
8
|
isPrerendering: false;
|
|
9
9
|
ssr: {
|
|
@@ -14,14 +14,12 @@ declare function createPageContextServerSide(pageContextInit: PageContextInit, g
|
|
|
14
14
|
isPrerendering: true;
|
|
15
15
|
ssr?: undefined;
|
|
16
16
|
}): Promise<{
|
|
17
|
-
_isPageContextObject: boolean;
|
|
18
17
|
isClientSide: boolean;
|
|
19
18
|
isPrerendering: boolean;
|
|
20
19
|
} & Pick<import("../../../shared/types.js").PageContextBuiltInServerInternal, "urlOriginal" | "headersOriginal"> & {
|
|
21
20
|
url?: string;
|
|
22
21
|
headers?: Record<string, string>;
|
|
23
22
|
} & {
|
|
24
|
-
_objectCreatedByVike: boolean;
|
|
25
23
|
_baseServer: string;
|
|
26
24
|
_baseAssets: string;
|
|
27
25
|
_includeAssetsImportedByServer: boolean;
|
|
@@ -74,9 +72,14 @@ declare function createPageContextServerSide(pageContextInit: PageContextInit, g
|
|
|
74
72
|
url: string;
|
|
75
73
|
} & {
|
|
76
74
|
headers: Record<string, string> | null;
|
|
75
|
+
} & {
|
|
76
|
+
config: import("../../../types/index.js").ConfigResolved;
|
|
77
|
+
_source: import("../../../shared/page-configs/getPageConfigUserFriendly.js").Source;
|
|
78
|
+
_sources: import("../../../shared/page-configs/getPageConfigUserFriendly.js").Sources;
|
|
79
|
+
_from: import("../../../shared/page-configs/getPageConfigUserFriendly.js").From;
|
|
80
|
+
_isPageContextObject: boolean;
|
|
77
81
|
}>;
|
|
78
82
|
declare function createPageContextServerSideWithoutGlobalContext(pageContextInit: PageContextInit): {
|
|
79
|
-
_isPageContextObject: boolean;
|
|
80
83
|
isClientSide: boolean;
|
|
81
84
|
isPrerendering: boolean;
|
|
82
85
|
} & Pick<import("../../../shared/types.js").PageContextBuiltInServerInternal, "urlOriginal" | "headersOriginal"> & {
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
export { createPageContextServerSide };
|
|
2
2
|
export { createPageContextServerSideWithoutGlobalContext };
|
|
3
|
-
import { assert, assertUsage, assertWarning, normalizeHeaders, objectAssign } from '../utils.js';
|
|
3
|
+
import { assert, assertUsage, assertWarning, augmentType, normalizeHeaders, objectAssign } from '../utils.js';
|
|
4
4
|
import { getPageContextUrlComputed } from '../../../shared/getPageContextUrlComputed.js';
|
|
5
|
+
import { createPageContextShared } from '../../../shared/createPageContextShared.js';
|
|
5
6
|
async function createPageContextServerSide(pageContextInit, globalContext, { isPrerendering, ssr: { urlHandler, isClientSideNavigation } = {
|
|
6
7
|
urlHandler: null,
|
|
7
8
|
isClientSideNavigation: false
|
|
@@ -10,7 +11,6 @@ async function createPageContextServerSide(pageContextInit, globalContext, { isP
|
|
|
10
11
|
const pageContextCreated = createPageContext(pageContextInit, isPrerendering);
|
|
11
12
|
objectAssign(pageContextCreated, pageContextInit);
|
|
12
13
|
objectAssign(pageContextCreated, {
|
|
13
|
-
_objectCreatedByVike: true,
|
|
14
14
|
// The following is defined on `pageContext` because we can eventually make these non-global
|
|
15
15
|
_baseServer: globalContext.baseServer,
|
|
16
16
|
_baseAssets: globalContext.baseAssets,
|
|
@@ -52,6 +52,8 @@ async function createPageContextServerSide(pageContextInit, globalContext, { isP
|
|
|
52
52
|
}
|
|
53
53
|
objectAssign(pageContextCreated, { headers });
|
|
54
54
|
}
|
|
55
|
+
const pageContextAugmented = await createPageContextShared(pageContextCreated, globalContext.pageConfigGlobal);
|
|
56
|
+
augmentType(pageContextCreated, pageContextAugmented);
|
|
55
57
|
return pageContextCreated;
|
|
56
58
|
}
|
|
57
59
|
function createPageContextServerSideWithoutGlobalContext(pageContextInit) {
|
|
@@ -60,7 +62,6 @@ function createPageContextServerSideWithoutGlobalContext(pageContextInit) {
|
|
|
60
62
|
}
|
|
61
63
|
function createPageContext(pageContextInit, isPrerendering) {
|
|
62
64
|
const pageContext = {
|
|
63
|
-
_isPageContextObject: true,
|
|
64
65
|
isClientSide: false,
|
|
65
66
|
isPrerendering
|
|
66
67
|
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { executeHookGeneric };
|
|
2
|
+
export { executeHookGenericGlobalCumulative };
|
|
3
|
+
import type { PageConfigUserFriendlyOld } from '../../../shared/getPageFiles.js';
|
|
4
|
+
import { type HookName } from '../../../shared/hooks/getHook.js';
|
|
5
|
+
import type { HookNameGlobal } from '../../../shared/page-configs/Config.js';
|
|
6
|
+
import type { PageConfigGlobalRuntime } from '../../../shared/page-configs/PageConfig.js';
|
|
7
|
+
declare function executeHookGeneric(hookName: HookName, pageContext: PageConfigUserFriendlyOld): Promise<void>;
|
|
8
|
+
declare function executeHookGenericGlobalCumulative(hookName: HookNameGlobal, pageConfigGlobal: PageConfigGlobalRuntime, pageContext: object): Promise<void>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export { executeHookGeneric }; // TO-DO/refactor: start using executeHookGeneric() and, eventually, prominently use it
|
|
2
|
+
export { executeHookGenericGlobalCumulative };
|
|
3
|
+
import { executeHook } from '../../../shared/hooks/executeHook.js';
|
|
4
|
+
import { getHookFromPageContext, getHookFromPageConfigGlobalCumulative } from '../../../shared/hooks/getHook.js';
|
|
5
|
+
async function executeHookGeneric(hookName, pageContext) {
|
|
6
|
+
const hook = getHookFromPageContext(pageContext, hookName);
|
|
7
|
+
if (!hook)
|
|
8
|
+
return;
|
|
9
|
+
await executeHook(() => hook.hookFn(pageContext), hook, pageContext);
|
|
10
|
+
}
|
|
11
|
+
async function executeHookGenericGlobalCumulative(hookName, pageConfigGlobal, pageContext) {
|
|
12
|
+
const hooks = getHookFromPageConfigGlobalCumulative(pageConfigGlobal, hookName);
|
|
13
|
+
await Promise.all(hooks.map(async (hook) => {
|
|
14
|
+
await executeHook(() => hook.hookFn(pageContext), hook, null);
|
|
15
|
+
}));
|
|
16
|
+
}
|
|
@@ -4,7 +4,7 @@ export type { PageContextAfterRender };
|
|
|
4
4
|
import { type PageContextUrlInternal } from '../../../shared/getPageContextUrlComputed.js';
|
|
5
5
|
import { HttpResponse } from './createHttpResponse.js';
|
|
6
6
|
import { PageContext_loadUserFilesServerSide, type PageFiles } from './loadUserFilesServerSide.js';
|
|
7
|
-
import type {
|
|
7
|
+
import type { PageContextCreatedServerSide } from './createPageContextServerSide.js';
|
|
8
8
|
type PageContextAfterRender = {
|
|
9
9
|
httpResponse: HttpResponse;
|
|
10
10
|
errorWhileRendering: null | Error;
|
|
@@ -16,8 +16,8 @@ declare function renderPageAlreadyRouted<PageContext extends {
|
|
|
16
16
|
routeParams: Record<string, string>;
|
|
17
17
|
errorWhileRendering: null | Error;
|
|
18
18
|
_httpRequestId: number;
|
|
19
|
-
} &
|
|
20
|
-
declare function prerenderPage(pageContext:
|
|
19
|
+
} & PageContextCreatedServerSide & PageContextUrlInternal & PageContext_loadUserFilesServerSide>(pageContext: PageContext): Promise<PageContext & PageContextAfterRender>;
|
|
20
|
+
declare function prerenderPage(pageContext: PageContextCreatedServerSide & PageFiles & {
|
|
21
21
|
routeParams: Record<string, string>;
|
|
22
22
|
pageId: string;
|
|
23
23
|
_urlRewrite: null;
|
|
@@ -29,14 +29,12 @@ declare function prerenderPage(pageContext: PageContextServerSideCreated & PageF
|
|
|
29
29
|
documentHtml: string;
|
|
30
30
|
pageContextSerialized: null;
|
|
31
31
|
pageContext: {
|
|
32
|
-
_isPageContextObject: boolean;
|
|
33
32
|
isClientSide: boolean;
|
|
34
33
|
isPrerendering: boolean;
|
|
35
34
|
} & Pick<import("../../../shared/types.js").PageContextBuiltInServerInternal, "urlOriginal" | "headersOriginal"> & {
|
|
36
35
|
url?: string;
|
|
37
36
|
headers?: Record<string, string>;
|
|
38
37
|
} & {
|
|
39
|
-
_objectCreatedByVike: boolean;
|
|
40
38
|
_baseServer: string;
|
|
41
39
|
_baseAssets: string;
|
|
42
40
|
_includeAssetsImportedByServer: boolean;
|
|
@@ -88,6 +86,12 @@ declare function prerenderPage(pageContext: PageContextServerSideCreated & PageF
|
|
|
88
86
|
url: string;
|
|
89
87
|
} & {
|
|
90
88
|
headers: Record<string, string> | null;
|
|
89
|
+
} & {
|
|
90
|
+
config: import("../../../types/index.js").ConfigResolved;
|
|
91
|
+
_source: import("../../../shared/page-configs/getPageConfigUserFriendly.js").Source;
|
|
92
|
+
_sources: import("../../../shared/page-configs/getPageConfigUserFriendly.js").Sources;
|
|
93
|
+
_from: import("../../../shared/page-configs/getPageConfigUserFriendly.js").From;
|
|
94
|
+
_isPageContextObject: boolean;
|
|
91
95
|
} & import("../../../shared/getPageFiles.js").PageConfigUserFriendlyOld & {
|
|
92
96
|
Page: unknown;
|
|
93
97
|
_isHtmlOnly: boolean;
|
|
@@ -111,14 +115,12 @@ declare function prerenderPage(pageContext: PageContextServerSideCreated & PageF
|
|
|
111
115
|
documentHtml: string;
|
|
112
116
|
pageContextSerialized: string;
|
|
113
117
|
pageContext: {
|
|
114
|
-
_isPageContextObject: boolean;
|
|
115
118
|
isClientSide: boolean;
|
|
116
119
|
isPrerendering: boolean;
|
|
117
120
|
} & Pick<import("../../../shared/types.js").PageContextBuiltInServerInternal, "urlOriginal" | "headersOriginal"> & {
|
|
118
121
|
url?: string;
|
|
119
122
|
headers?: Record<string, string>;
|
|
120
123
|
} & {
|
|
121
|
-
_objectCreatedByVike: boolean;
|
|
122
124
|
_baseServer: string;
|
|
123
125
|
_baseAssets: string;
|
|
124
126
|
_includeAssetsImportedByServer: boolean;
|
|
@@ -170,6 +172,12 @@ declare function prerenderPage(pageContext: PageContextServerSideCreated & PageF
|
|
|
170
172
|
url: string;
|
|
171
173
|
} & {
|
|
172
174
|
headers: Record<string, string> | null;
|
|
175
|
+
} & {
|
|
176
|
+
config: import("../../../types/index.js").ConfigResolved;
|
|
177
|
+
_source: import("../../../shared/page-configs/getPageConfigUserFriendly.js").Source;
|
|
178
|
+
_sources: import("../../../shared/page-configs/getPageConfigUserFriendly.js").Sources;
|
|
179
|
+
_from: import("../../../shared/page-configs/getPageConfigUserFriendly.js").From;
|
|
180
|
+
_isPageContextObject: boolean;
|
|
173
181
|
} & import("../../../shared/getPageFiles.js").PageConfigUserFriendlyOld & {
|
|
174
182
|
Page: unknown;
|
|
175
183
|
_isHtmlOnly: boolean;
|
|
@@ -19,14 +19,12 @@ declare let asyncHookWrapper: <PageContext>(_httpRequestId: number, ret: () => P
|
|
|
19
19
|
}>;
|
|
20
20
|
declare function renderPage_addAsyncHookwrapper(wrapper: typeof asyncHookWrapper): void;
|
|
21
21
|
declare function getPageContextBegin(pageContextInit: PageContextInit, globalContext: GlobalContextInternal, httpRequestId: number): Promise<{
|
|
22
|
-
_isPageContextObject: boolean;
|
|
23
22
|
isClientSide: boolean;
|
|
24
23
|
isPrerendering: boolean;
|
|
25
24
|
} & Pick<PageContextBuiltInServerInternal, "urlOriginal" | "headersOriginal"> & {
|
|
26
25
|
/** @deprecated Set `pageContextInit.urlOriginal` instead */ url?: string;
|
|
27
26
|
/** @deprecated Set pageContextInit.headersOriginal instead */ headers?: Record<string, string>;
|
|
28
27
|
} & {
|
|
29
|
-
_objectCreatedByVike: boolean;
|
|
30
28
|
_baseServer: string;
|
|
31
29
|
_baseAssets: string;
|
|
32
30
|
_includeAssetsImportedByServer: boolean;
|
|
@@ -78,6 +76,12 @@ declare function getPageContextBegin(pageContextInit: PageContextInit, globalCon
|
|
|
78
76
|
url: string;
|
|
79
77
|
} & {
|
|
80
78
|
headers: Record<string, string> | null;
|
|
79
|
+
} & {
|
|
80
|
+
config: import("../../types/index.js").ConfigResolved;
|
|
81
|
+
_source: import("../../shared/page-configs/getPageConfigUserFriendly.js").Source;
|
|
82
|
+
_sources: import("../../shared/page-configs/getPageConfigUserFriendly.js").Sources;
|
|
83
|
+
_from: import("../../shared/page-configs/getPageConfigUserFriendly.js").From;
|
|
84
|
+
_isPageContextObject: boolean;
|
|
81
85
|
} & {
|
|
82
86
|
_httpRequestId: number;
|
|
83
87
|
}>;
|
|
@@ -7,7 +7,7 @@ function assertPageContextProvidedByUser(pageContextProvidedByUser, { hookName,
|
|
|
7
7
|
assert(!hookName.endsWith(')'));
|
|
8
8
|
const errPrefix = `The ${pc.cyan('pageContext')} object provided by the ${hookName}() hook defined by ${hookFilePath}`;
|
|
9
9
|
assertUsage(isObject(pageContextProvidedByUser), `${errPrefix} should be an object (but it's ${pc.cyan(`typeof pageContext === ${JSON.stringify(typeof pageContextProvidedByUser)}`)} instead)`);
|
|
10
|
-
assertUsage(!('
|
|
10
|
+
assertUsage(!('_isPageContextObject' in pageContextProvidedByUser), `${errPrefix} shouldn't be the whole ${pc.cyan('pageContext')} object, see https://vike.dev/pageContext-manipulation#do-not-return-entire-pagecontext`);
|
|
11
11
|
// In principle, it's possible to use onBeforeRoute()` to override and define the whole routing.
|
|
12
12
|
// Is that a good idea to allow users to do this? Beyond deep integration with Vue Router or React Router, is there a use case for this?
|
|
13
13
|
assertWarning(!('pageId' in pageContextProvidedByUser), `${errPrefix} sets ${pc.cyan('pageContext.pageId')} which means that Vike's routing is overriden. This is an experimental feature: make sure to contact a vike maintainer before using this.`, { onlyOnce: true });
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { createPageContextShared };
|
|
2
|
+
import type { PageConfigGlobalRuntime } from './page-configs/PageConfig.js';
|
|
3
|
+
declare function createPageContextShared<T extends object>(pageContextCreated: T, pageConfigGlobal: PageConfigGlobalRuntime): Promise<T & {
|
|
4
|
+
config: import("./page-configs/Config/PageContextConfig.js").ConfigResolved;
|
|
5
|
+
_source: import("./page-configs/getPageConfigUserFriendly.js").Source;
|
|
6
|
+
_sources: import("./page-configs/getPageConfigUserFriendly.js").Sources;
|
|
7
|
+
_from: import("./page-configs/getPageConfigUserFriendly.js").From;
|
|
8
|
+
_isPageContextObject: boolean;
|
|
9
|
+
}>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export { createPageContextShared };
|
|
2
|
+
import { executeHookGenericGlobalCumulative } from '../node/runtime/renderPage/executeHookGeneric.js';
|
|
3
|
+
import { getPageConfigGlobalUserFriendly } from './page-configs/getPageConfigUserFriendly.js';
|
|
4
|
+
import { objectAssign } from './utils.js';
|
|
5
|
+
async function createPageContextShared(pageContextCreated, pageConfigGlobal) {
|
|
6
|
+
const pageConfigGlobalUserFriendly = getPageConfigGlobalUserFriendly({
|
|
7
|
+
pageConfigGlobalValues: pageConfigGlobal.configValues
|
|
8
|
+
});
|
|
9
|
+
objectAssign(pageContextCreated, {
|
|
10
|
+
_isPageContextObject: true,
|
|
11
|
+
...pageConfigGlobalUserFriendly
|
|
12
|
+
}, true);
|
|
13
|
+
await executeHookGenericGlobalCumulative('onCreatePageContext', pageConfigGlobal, pageContextCreated);
|
|
14
|
+
return pageContextCreated;
|
|
15
|
+
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { getHookFromPageContext };
|
|
2
2
|
export { getHookFromPageConfig };
|
|
3
3
|
export { getHookFromPageConfigGlobal };
|
|
4
|
+
export { getHookFromPageConfigGlobalCumulative };
|
|
4
5
|
export { assertHook };
|
|
5
6
|
export { getHook_setIsPrerenderering };
|
|
6
7
|
export type { Hook };
|
|
@@ -20,7 +21,7 @@ type HookLoc = {
|
|
|
20
21
|
hookName: HookName;
|
|
21
22
|
hookFilePath: string;
|
|
22
23
|
};
|
|
23
|
-
type HookFn = (arg:
|
|
24
|
+
type HookFn = (arg: object) => unknown;
|
|
24
25
|
type HookTimeout = {
|
|
25
26
|
error: number | false;
|
|
26
27
|
warning: number | false;
|
|
@@ -29,6 +30,7 @@ type HooksTimeoutProvidedByUser = false | Partial<Record<HookName, false | Parti
|
|
|
29
30
|
declare function getHookFromPageContext(pageContext: PageConfigUserFriendlyOld, hookName: HookName): null | Hook;
|
|
30
31
|
declare function getHookFromPageConfig(pageConfig: PageConfigRuntime, hookName: HookNamePage): null | Hook;
|
|
31
32
|
declare function getHookFromPageConfigGlobal(pageConfigGlobal: PageConfigGlobalRuntime, hookName: HookNameGlobal): null | Hook;
|
|
33
|
+
declare function getHookFromPageConfigGlobalCumulative(pageConfigGlobal: PageConfigGlobalRuntime, hookName: HookNameGlobal): Hook[];
|
|
32
34
|
declare function assertHook<TPageContext extends PageConfigUserFriendlyOld, THookName extends PropertyKey & HookName>(pageContext: TPageContext, hookName: THookName): asserts pageContext is TPageContext & {
|
|
33
35
|
exports: Record<THookName, Function | undefined>;
|
|
34
36
|
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { getHookFromPageContext };
|
|
2
2
|
export { getHookFromPageConfig };
|
|
3
3
|
export { getHookFromPageConfigGlobal };
|
|
4
|
+
export { getHookFromPageConfigGlobalCumulative };
|
|
4
5
|
export { assertHook };
|
|
5
6
|
export { getHook_setIsPrerenderering };
|
|
6
7
|
// TODO/v1-release: remove
|
|
@@ -9,7 +10,7 @@ export { getHookTimeoutDefault };
|
|
|
9
10
|
import { getGlobalObject } from '../../utils/getGlobalObject.js';
|
|
10
11
|
import { getHookFilePathToShowToUser } from '../page-configs/helpers.js';
|
|
11
12
|
import { getConfigValueRuntime } from '../page-configs/getConfigValueRuntime.js';
|
|
12
|
-
import { assert, assertUsage, checkType, isCallable, isObject } from '../utils.js';
|
|
13
|
+
import { assert, assertUsage, checkType, isArray, isCallable, isObject } from '../utils.js';
|
|
13
14
|
import pc from '@brillout/picocolors';
|
|
14
15
|
const globalObject = getGlobalObject('hooks/getHook.ts', {});
|
|
15
16
|
function getHookFromPageContext(pageContext, hookName) {
|
|
@@ -44,6 +45,20 @@ function getHookFromPageConfigGlobal(pageConfigGlobal, hookName) {
|
|
|
44
45
|
const hookTimeout = getHookTimeoutGlobal(hookName);
|
|
45
46
|
return getHook(hookFn, hookName, hookFilePath, hookTimeout);
|
|
46
47
|
}
|
|
48
|
+
function getHookFromPageConfigGlobalCumulative(pageConfigGlobal, hookName) {
|
|
49
|
+
const configValue = pageConfigGlobal.configValues[hookName];
|
|
50
|
+
if (!configValue?.value)
|
|
51
|
+
return [];
|
|
52
|
+
const val = configValue.value;
|
|
53
|
+
assert(isArray(val));
|
|
54
|
+
return val.map((v, i) => {
|
|
55
|
+
const hookFn = v;
|
|
56
|
+
const hookTimeout = getHookTimeoutGlobal(hookName);
|
|
57
|
+
assert(isArray(configValue.definedAtData));
|
|
58
|
+
const hookFilePath = getHookFilePathToShowToUser(configValue.definedAtData[i]);
|
|
59
|
+
return getHook(hookFn, hookName, hookFilePath, hookTimeout);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
47
62
|
function getHookTimeoutGlobal(hookName) {
|
|
48
63
|
// TO-DO/perfection: we could use the global value of configooksTimeout but it requires some non-trivial refactoring
|
|
49
64
|
const hookTimeout = getHookTimeoutDefault(hookName);
|
|
@@ -45,7 +45,7 @@ import type { PageContextClient, PageContextServer } from '../types.js';
|
|
|
45
45
|
import type { InlineConfig } from 'vite';
|
|
46
46
|
type HookName = HookNamePage | HookNameGlobal | HookNameOldDesign;
|
|
47
47
|
type HookNamePage = 'onHydrationEnd' | 'onBeforePrerenderStart' | 'onBeforeRender' | 'onPageTransitionStart' | 'onPageTransitionEnd' | 'onRenderHtml' | 'onRenderClient' | 'guard' | 'data';
|
|
48
|
-
type HookNameGlobal = 'onBeforePrerender' | 'onBeforeRoute' | 'onPrerenderStart';
|
|
48
|
+
type HookNameGlobal = 'onBeforePrerender' | 'onBeforeRoute' | 'onPrerenderStart' | 'onCreatePageContext';
|
|
49
49
|
type HookNameOldDesign = 'render' | 'prerender';
|
|
50
50
|
type ConfigNameBuiltIn = Exclude<keyof Config, keyof VikeVitePluginOptions | 'onBeforeRoute' | 'onPrerenderStart' | 'vite' | 'redirects'> | 'prerender' | 'isClientRuntimeLoaded' | 'onBeforeRenderEnv' | 'dataEnv' | 'hooksTimeout' | 'clientHooks' | 'middleware';
|
|
51
51
|
type ConfigNameGlobal = 'onPrerenderStart' | 'onBeforeRoute' | 'prerender' | 'disableAutoFullBuild' | 'includeAssetsImportedByServer' | 'baseAssets' | 'baseServer' | 'redirects' | 'trailingSlash' | 'disableUrlNormalization' | 'vite';
|
|
@@ -330,6 +330,11 @@ type ConfigBuiltIn = {
|
|
|
330
330
|
* https://vike.dev/onBeforeRender
|
|
331
331
|
*/
|
|
332
332
|
onBeforeRender?: OnBeforeRenderAsync | OnBeforeRenderSync | ImportString | null;
|
|
333
|
+
/** Hook called when a `pageContext` object is created.
|
|
334
|
+
*
|
|
335
|
+
* https://vike.dev/onCreatePageContext
|
|
336
|
+
*/
|
|
337
|
+
onCreatePageContext?: (pageContext: PageContextServer) => void | ImportString | null;
|
|
333
338
|
/** Hook for fetching data.
|
|
334
339
|
*
|
|
335
340
|
* https://vike.dev/data
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const PROJECT_VERSION: "0.4.228-commit-
|
|
1
|
+
export declare const PROJECT_VERSION: "0.4.228-commit-90cfb1a";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// Automatically updated by @brillout/release-me
|
|
2
|
-
export const PROJECT_VERSION = '0.4.228-commit-
|
|
2
|
+
export const PROJECT_VERSION = '0.4.228-commit-90cfb1a';
|