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
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
export { createPageContextShared };
|
|
2
|
+
export { createPageContextObject };
|
|
3
|
+
import type { PageConfigUserFriendly } from './page-configs/getUserFriendlyConfigs.js';
|
|
2
4
|
import type { PageConfigGlobalRuntime } from './page-configs/PageConfig.js';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
_from: import("./page-configs/getPageConfigUserFriendly.js").From;
|
|
5
|
+
import { type PageContextPrepareMinimum } from './preparePageContextForPublicUsage.js';
|
|
6
|
+
declare function createPageContextShared<T extends PageContextPrepareMinimum>(pageContextCreated: T, pageConfigGlobal: PageConfigGlobalRuntime, userFriendlyConfigsGlobal: PageConfigUserFriendly): Promise<T & PageConfigUserFriendly>;
|
|
7
|
+
declare function createPageContextObject(): {
|
|
8
|
+
_isOriginalObject: true;
|
|
8
9
|
isPageContext: true;
|
|
9
|
-
}
|
|
10
|
+
};
|
|
@@ -1,15 +1,20 @@
|
|
|
1
1
|
export { createPageContextShared };
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
isPageContext: true,
|
|
11
|
-
...pageConfigGlobalUserFriendly
|
|
12
|
-
}, true);
|
|
13
|
-
await executeHookGenericGlobalCumulative('onCreatePageContext', pageConfigGlobal, pageContextCreated, pageContextCreated);
|
|
2
|
+
export { createPageContextObject };
|
|
3
|
+
import { getProxyForMutationTracking } from './getProxyForPublicUsage.js';
|
|
4
|
+
import { execHookGlobal } from './hooks/execHook.js';
|
|
5
|
+
import { preparePageContextForPublicUsage } from './preparePageContextForPublicUsage.js';
|
|
6
|
+
import { changeEnumerable, objectAssign } from './utils.js';
|
|
7
|
+
async function createPageContextShared(pageContextCreated, pageConfigGlobal, userFriendlyConfigsGlobal) {
|
|
8
|
+
objectAssign(pageContextCreated, userFriendlyConfigsGlobal);
|
|
9
|
+
await execHookGlobal('onCreatePageContext', pageConfigGlobal, pageContextCreated, pageContextCreated, preparePageContextForPublicUsage);
|
|
14
10
|
return pageContextCreated;
|
|
15
11
|
}
|
|
12
|
+
function createPageContextObject() {
|
|
13
|
+
const pageContext = {
|
|
14
|
+
_isOriginalObject: true,
|
|
15
|
+
isPageContext: true
|
|
16
|
+
};
|
|
17
|
+
changeEnumerable(pageContext, '_isOriginalObject', false);
|
|
18
|
+
const pageContextWithProxy = getProxyForMutationTracking(pageContext);
|
|
19
|
+
return pageContextWithProxy;
|
|
20
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { getPageContext, providePageContext } from './hooks/
|
|
1
|
+
export { getPageContext, providePageContext } from './hooks/execHook.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { getPageContext, providePageContext } from './hooks/
|
|
1
|
+
export { getPageContext, providePageContext } from './hooks/execHook.js';
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
export { getPageContextUrlComputed };
|
|
2
|
-
export { assertPageContextUrl };
|
|
3
2
|
export type { PageContextUrlInternal };
|
|
4
3
|
export type { PageContextUrlClient };
|
|
5
4
|
export type { PageContextUrlServer };
|
|
6
5
|
export type { PageContextUrlSource };
|
|
6
|
+
import { type PageContextPrepareMinimum } from './preparePageContextForPublicUsage.js';
|
|
7
7
|
import { type UrlPublic } from './utils.js';
|
|
8
8
|
type PageContextUrlComputed = {
|
|
9
9
|
/** Parsed information about the current URL */
|
|
@@ -17,7 +17,7 @@ type PageContextUrl = {
|
|
|
17
17
|
/** The URL of the HTTP request */
|
|
18
18
|
urlOriginal: string;
|
|
19
19
|
} & PageContextUrlComputed;
|
|
20
|
-
type PageContextUrlInternal = PageContextUrl & {
|
|
20
|
+
type PageContextUrlInternal = PageContextPrepareMinimum & PageContextUrl & {
|
|
21
21
|
_urlRewrite: string | null;
|
|
22
22
|
};
|
|
23
23
|
type PageContextUrlClient = PageContextUrl;
|
|
@@ -40,6 +40,3 @@ type PageContextUrlSource = {
|
|
|
40
40
|
_baseServer: string;
|
|
41
41
|
_urlHandler: null | ((url: string) => string);
|
|
42
42
|
};
|
|
43
|
-
declare function assertPageContextUrl(pageContext: {
|
|
44
|
-
urlOriginal: string;
|
|
45
|
-
} & PageContextUrlClient): void;
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
export { getPageContextUrlComputed };
|
|
2
|
-
export { assertPageContextUrl };
|
|
3
2
|
// =====================
|
|
4
3
|
// File determining the URL logic.
|
|
5
4
|
// URLs need to be computed, because the user can modify the URL e.g. with onBeforeRoute() for i18n.
|
|
6
5
|
// =====================
|
|
7
6
|
import { objectDefineProperty } from '../utils/objectDefineProperty.js';
|
|
8
|
-
import {
|
|
7
|
+
import { assertPropertyGetters } from './preparePageContextForPublicUsage.js';
|
|
8
|
+
import { assert, parseUrl, assertWarning, isBrowser, changeEnumerable } from './utils.js';
|
|
9
9
|
function getPageContextUrlComputed(pageContext) {
|
|
10
10
|
assert(typeof pageContext.urlOriginal === 'string');
|
|
11
|
-
|
|
11
|
+
assertPropertyGetters(pageContext);
|
|
12
12
|
const pageContextUrlComputed = {};
|
|
13
13
|
objectDefineProperty(pageContextUrlComputed, 'urlPathname', {
|
|
14
14
|
get: urlPathnameGetter,
|
|
@@ -128,37 +128,3 @@ function urlParsedGetter() {
|
|
|
128
128
|
}
|
|
129
129
|
return urlParsedEnhanced;
|
|
130
130
|
}
|
|
131
|
-
function assertPageContextUrl(pageContext) {
|
|
132
|
-
assert(typeof pageContext.urlOriginal === 'string');
|
|
133
|
-
assert(typeof pageContext.urlPathname === 'string');
|
|
134
|
-
assert(isPlainObject(pageContext.urlParsed));
|
|
135
|
-
assert(pageContext.urlPathname === pageContext.urlParsed.pathname);
|
|
136
|
-
assertPageContextUrlComputed(pageContext);
|
|
137
|
-
}
|
|
138
|
-
function assertPageContextUrlComputed(pageContext) {
|
|
139
|
-
/*
|
|
140
|
-
If the isPropertyGetter() assertions fail then it's most likely because Object.assign() was used instead of `objectAssign()`:
|
|
141
|
-
```js
|
|
142
|
-
const PageContextUrlComputed = getPageContextUrlComputed(pageContext)
|
|
143
|
-
|
|
144
|
-
// ❌ Breaks the property descriptors/getters of pageContext defined by getPageContextUrlComputed() such as pageContext.urlPathname
|
|
145
|
-
Object.assign(pageContext, pageContextUrlComputed)
|
|
146
|
-
|
|
147
|
-
// ❌ Also breaks property descriptors/getters
|
|
148
|
-
const pageContext = { ...pageContextUrlComputed }
|
|
149
|
-
|
|
150
|
-
// ✅ Preserves property descriptors/getters (see objectAssign() implementation)
|
|
151
|
-
objectAssign(pageContext, pageContextUrlComputed)
|
|
152
|
-
```
|
|
153
|
-
*/
|
|
154
|
-
if ('urlPathname' in pageContext) {
|
|
155
|
-
assert(typeof pageContext.urlPathname === 'string');
|
|
156
|
-
assert(isPropertyGetter(pageContext, 'urlPathname'));
|
|
157
|
-
assert(isPropertyGetter(pageContext, 'urlParsed'));
|
|
158
|
-
assert(isPropertyGetter(pageContext, 'url'));
|
|
159
|
-
}
|
|
160
|
-
else {
|
|
161
|
-
assert(!('urlParsed' in pageContext));
|
|
162
|
-
assert(!('url' in pageContext));
|
|
163
|
-
}
|
|
164
|
-
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export type { PageFile } from './getPageFiles/getPageFileObject.js';
|
|
2
|
-
export type { ExportsAll, PageConfigUserFriendlyOld } from './page-configs/
|
|
2
|
+
export type { ExportsAll, PageConfigUserFriendlyOld } from './page-configs/getUserFriendlyConfigs.js';
|
|
3
3
|
export { getPageFilesClientSide } from './getPageFiles/getAllPageIdFiles.js';
|
|
4
4
|
export { getPageFilesServerSide } from './getPageFiles/getAllPageIdFiles.js';
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { getProxyForPublicUsage };
|
|
2
|
+
export { getProxyForPublicUsageFlat };
|
|
3
|
+
export { getProxyForMutationTracking };
|
|
4
|
+
type Target = Record<string, unknown> & {
|
|
5
|
+
_onChange?: () => void;
|
|
6
|
+
_proxyTarget?: any;
|
|
7
|
+
_userMods?: any;
|
|
8
|
+
_proxyTargetPublic?: any;
|
|
9
|
+
};
|
|
10
|
+
declare function getProxyForPublicUsage<Obj extends Target>(obj: Obj, objName: string, skipOnInternalProp?: true): Obj;
|
|
11
|
+
declare function getProxyForPublicUsageFlat<Obj extends Target>(obj: Obj, objName: string, skipOnInternalProp?: true): Obj;
|
|
12
|
+
declare function getProxyForMutationTracking<Obj extends Target>(obj: Obj): Obj;
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
export { getProxyForPublicUsage };
|
|
2
|
+
export { getProxyForPublicUsageFlat };
|
|
3
|
+
export { getProxyForMutationTracking };
|
|
4
|
+
// We use a proxy instead of property getters.
|
|
5
|
+
// - The issue with property getters is that they can't be `writable: true` but we do want the user to be able to modify the value of internal properties.
|
|
6
|
+
// ```console
|
|
7
|
+
// TypeError: Invalid property descriptor. Cannot both specify accessors and a value or writable attribute, #<Object>
|
|
8
|
+
// ```
|
|
9
|
+
// - Previous implementation using property getters: https://github.com/vikejs/vike/blob/main/vike/utils/makePublicCopy.ts
|
|
10
|
+
// Show warning when user is accessing internal `_` properties.
|
|
11
|
+
import { NOT_SERIALIZABLE } from './NOT_SERIALIZABLE.js';
|
|
12
|
+
import { assert, assertUsage, assertWarning, getPropAccessNotation, isBrowser, objectAssign, objectReplace } from './utils.js';
|
|
13
|
+
function getProxyForPublicUsage(obj, objName, skipOnInternalProp) {
|
|
14
|
+
return new Proxy(obj, {
|
|
15
|
+
get: getTrapGet(obj, objName, skipOnInternalProp)
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
function getProxyForPublicUsageFlat(obj, objName, skipOnInternalProp) {
|
|
19
|
+
assert(obj._isOriginalObject);
|
|
20
|
+
assert(obj._proxyTarget);
|
|
21
|
+
obj._proxyTargetPublic ?? (obj._proxyTargetPublic = {});
|
|
22
|
+
const target = obj._proxyTargetPublic;
|
|
23
|
+
obj._userMods ?? (obj._userMods = {});
|
|
24
|
+
const objUserMods = obj._userMods;
|
|
25
|
+
const update = () => {
|
|
26
|
+
assert(obj._proxyTarget);
|
|
27
|
+
objectReplace(target, obj._proxyTarget);
|
|
28
|
+
objectAssign(target, objUserMods);
|
|
29
|
+
};
|
|
30
|
+
obj._onChange = () => {
|
|
31
|
+
update();
|
|
32
|
+
};
|
|
33
|
+
update();
|
|
34
|
+
return new Proxy(target, {
|
|
35
|
+
// get: getTrapGet(target, objName, skipOnInternalProp),
|
|
36
|
+
set(_, prop, val) {
|
|
37
|
+
const ret = Reflect.set(objUserMods, prop, val);
|
|
38
|
+
update();
|
|
39
|
+
return ret;
|
|
40
|
+
},
|
|
41
|
+
defineProperty(_, ...args) {
|
|
42
|
+
const ret = Reflect.defineProperty(objUserMods, ...args);
|
|
43
|
+
update();
|
|
44
|
+
return ret;
|
|
45
|
+
},
|
|
46
|
+
deleteProperty(_, ...args) {
|
|
47
|
+
const ret = Reflect.deleteProperty(objUserMods, ...args);
|
|
48
|
+
update();
|
|
49
|
+
return ret;
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
function getTrapGet(obj, objName, skipOnInternalProp) {
|
|
54
|
+
return function (_, prop) {
|
|
55
|
+
const propStr = String(prop);
|
|
56
|
+
if (!skipOnInternalProp)
|
|
57
|
+
onInternalProp(propStr, objName);
|
|
58
|
+
const val = obj[prop];
|
|
59
|
+
onNotSerializable(propStr, val, objName);
|
|
60
|
+
return val;
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
function getProxyForMutationTracking(obj) {
|
|
64
|
+
objectAssign(obj, { _proxyTarget: obj });
|
|
65
|
+
return new Proxy(obj, {
|
|
66
|
+
set(...args) {
|
|
67
|
+
const ret = Reflect.set(...args);
|
|
68
|
+
obj._onChange?.();
|
|
69
|
+
return ret;
|
|
70
|
+
},
|
|
71
|
+
defineProperty(...args) {
|
|
72
|
+
const ret = Reflect.defineProperty(...args);
|
|
73
|
+
obj._onChange?.();
|
|
74
|
+
return ret;
|
|
75
|
+
},
|
|
76
|
+
deleteProperty(...args) {
|
|
77
|
+
const ret = Reflect.deleteProperty(...args);
|
|
78
|
+
obj._onChange?.();
|
|
79
|
+
return ret;
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
function onNotSerializable(propStr, val, objName) {
|
|
84
|
+
if (val !== NOT_SERIALIZABLE)
|
|
85
|
+
return;
|
|
86
|
+
const propName = getPropAccessNotation(propStr);
|
|
87
|
+
assert(isBrowser());
|
|
88
|
+
assertUsage(false, `Can't access ${objName}${propName} on the client side. Because it can't be serialized, see server logs.`);
|
|
89
|
+
}
|
|
90
|
+
function onInternalProp(propStr, objName) {
|
|
91
|
+
// - We must skip it in the client-side because of the reactivity mechanism of UI frameworks like Solid.
|
|
92
|
+
// - TO-DO/eventually: use import.meta.CLIENT instead of isBrowser()
|
|
93
|
+
// - Where import.meta.CLIENT is defined by Vike
|
|
94
|
+
// - Using import.meta.env.CLIENT (note `.env.`) doesn't seem possible: https://github.com/brillout/playground_node_import.meta.env
|
|
95
|
+
// - If Rolldown Vite + Rolldowns always transpiles node_modules/ then we can simply use import.meta.env.SSR
|
|
96
|
+
if (isBrowser())
|
|
97
|
+
return;
|
|
98
|
+
// TODO/now remove this and only warn on built-in access instead
|
|
99
|
+
if (propStr === '_configFromHook')
|
|
100
|
+
return;
|
|
101
|
+
if (propStr.startsWith('_')) {
|
|
102
|
+
assertWarning(false, `Using internal ${objName}.${propStr} which may break in any minor version update. Reach out on GitHub to request official support for your use case.`, { onlyOnce: true, showStackTrace: true });
|
|
103
|
+
}
|
|
104
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
export { execHook };
|
|
2
|
+
export { execHookSingle };
|
|
3
|
+
export { execHookSingleWithReturn };
|
|
4
|
+
export { execHookErrorHandling };
|
|
5
|
+
export { execHooksErrorHandling };
|
|
6
|
+
export { execHookWithoutPageContext };
|
|
7
|
+
export { execHookGlobal };
|
|
8
|
+
export { execHookSync };
|
|
9
|
+
export { getPageContext };
|
|
10
|
+
export { providePageContext };
|
|
11
|
+
export { isUserHookError };
|
|
12
|
+
export type { PageContextExecuteHook };
|
|
13
|
+
import type { PageContextClient, PageContextServer } from '../types.js';
|
|
14
|
+
import type { Hook, HookLoc } from './getHook.js';
|
|
15
|
+
import type { PageConfigUserFriendlyOld } from '../getPageFiles.js';
|
|
16
|
+
import type { HookName, HookNameGlobal } from '../page-configs/Config.js';
|
|
17
|
+
import type { PageConfigGlobalRuntime } from '../page-configs/PageConfig.js';
|
|
18
|
+
import type { PageContextForPublicUsageServer } from '../../node/runtime/renderPage/preparePageContextForPublicUsageServer.js';
|
|
19
|
+
import type { PageContextForPublicUsageClientShared } from '../../client/shared/preparePageContextForPublicUsageClientShared.js';
|
|
20
|
+
import { type PageContextPrepareMinimum } from '../preparePageContextForPublicUsage.js';
|
|
21
|
+
import type { GlobalContextPrepareMinimum } from '../prepareGlobalContextForPublicUsage.js';
|
|
22
|
+
type PageContextExecuteHook = PageConfigUserFriendlyOld & PageContextForPublicUsage;
|
|
23
|
+
type PageContextForPublicUsage = PageContextForPublicUsageServer | PageContextForPublicUsageClientShared;
|
|
24
|
+
type HookWithResult = Hook & {
|
|
25
|
+
hookReturn: unknown;
|
|
26
|
+
};
|
|
27
|
+
declare function execHookSingle<PageContext extends PageContextExecuteHook>(hook: Hook, pageContext: PageContext, preparePageContextForPublicUsage: (pageContext: PageContext) => PageContext): Promise<void>;
|
|
28
|
+
declare function execHookSingleWithReturn<PageContext extends PageContextExecuteHook>(hook: Hook, pageContext: PageContext, preparePageContextForPublicUsage: (pageContext: PageContext) => PageContext): Promise<{
|
|
29
|
+
hookReturn: unknown;
|
|
30
|
+
}>;
|
|
31
|
+
declare function execHook<PageContext extends PageContextExecuteHook>(hookName: HookName, pageContext: PageContext, preparePageContextForPublicUsage: (pageContext: PageContext) => PageContext): Promise<HookWithResult[]>;
|
|
32
|
+
declare function execHookErrorHandling<PageContext extends PageContextExecuteHook>(hookName: HookName, pageContext: PageContext, preparePageContextForPublicUsage: (pageContext: PageContext) => PageContext): Promise<{
|
|
33
|
+
hooks: HookWithResult[];
|
|
34
|
+
err?: undefined;
|
|
35
|
+
} | {
|
|
36
|
+
hooks: Hook[];
|
|
37
|
+
err: unknown;
|
|
38
|
+
}>;
|
|
39
|
+
declare function execHooksErrorHandling<PageContext extends PageContextPrepareMinimum>(hooks: Hook[], pageContext: PageContext, preparePageContextForPublicUsage: (pageContext: PageContext) => PageContext): Promise<{
|
|
40
|
+
hooks: HookWithResult[];
|
|
41
|
+
err?: undefined;
|
|
42
|
+
} | {
|
|
43
|
+
hooks: Hook[];
|
|
44
|
+
err: unknown;
|
|
45
|
+
}>;
|
|
46
|
+
declare function execHookGlobal<HookArg extends PageContextPrepareMinimum | GlobalContextPrepareMinimum>(hookName: HookNameGlobal, pageConfigGlobal: PageConfigGlobalRuntime, pageContext: PageContextPrepareMinimum | null, hookArg: HookArg, prepareForPublicUsage: (hookArg: HookArg) => HookArg): Promise<void>;
|
|
47
|
+
declare function isUserHookError(err: unknown): false | HookLoc;
|
|
48
|
+
declare function execHookWithoutPageContext<HookReturn>(hookFnCaller: () => HookReturn, hook: Omit<Hook, 'hookFn'>): Promise<HookReturn>;
|
|
49
|
+
declare function execHookSync<PageContext extends PageContextPrepareMinimum>(hook: Omit<Hook, 'hookTimeout'>, pageContext: PageContext, preparePageContextForPublicUsage: (pageContext: PageContext) => PageContext): {
|
|
50
|
+
hookReturn: unknown;
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* Access `pageContext` object inside Vike hooks, in order to create universal hooks.
|
|
54
|
+
*
|
|
55
|
+
* https://vike.dev/getPageContext
|
|
56
|
+
*/
|
|
57
|
+
declare function getPageContext<PageContext = PageContextClient | PageContextServer>(): null | PageContext;
|
|
58
|
+
/**
|
|
59
|
+
* Provide `pageContext` for universal hooks.
|
|
60
|
+
*
|
|
61
|
+
* https://vike.dev/getPageContext
|
|
62
|
+
*/
|
|
63
|
+
declare function providePageContext(pageContext: null | PageContextPrepareMinimum): void;
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
export { execHook };
|
|
2
|
+
export { execHookSingle };
|
|
3
|
+
export { execHookSingleWithReturn };
|
|
4
|
+
export { execHookErrorHandling };
|
|
5
|
+
export { execHooksErrorHandling };
|
|
6
|
+
export { execHookWithoutPageContext };
|
|
7
|
+
export { execHookGlobal };
|
|
8
|
+
export { execHookSync };
|
|
9
|
+
export { getPageContext };
|
|
10
|
+
export { providePageContext };
|
|
11
|
+
export { isUserHookError };
|
|
12
|
+
import { getProjectError, assertWarning, assertUsage } from '../../utils/assert.js';
|
|
13
|
+
import { getGlobalObject } from '../../utils/getGlobalObject.js';
|
|
14
|
+
import { humanizeTime } from '../../utils/humanizeTime.js';
|
|
15
|
+
import { isObject } from '../../utils/isObject.js';
|
|
16
|
+
import { getHookFromPageConfigGlobalCumulative, getHookFromPageContextNew } from './getHook.js';
|
|
17
|
+
import { preparePageContextForPublicUsage } from '../preparePageContextForPublicUsage.js';
|
|
18
|
+
const globalObject = getGlobalObject('utils/execHook.ts', {
|
|
19
|
+
userHookErrors: new WeakMap(),
|
|
20
|
+
pageContext: null
|
|
21
|
+
});
|
|
22
|
+
async function execHookSingle(hook, pageContext, preparePageContextForPublicUsage) {
|
|
23
|
+
const res = await execHooksErrorHandling([hook], pageContext, preparePageContextForPublicUsage);
|
|
24
|
+
if ('err' in res)
|
|
25
|
+
throw res.err;
|
|
26
|
+
const { hookReturn } = res.hooks[0];
|
|
27
|
+
assertUsage(hookReturn === undefined, `The ${hook.hookName}() hook defined by ${hook.hookFilePath} isn't allowed to return a value`);
|
|
28
|
+
}
|
|
29
|
+
async function execHookSingleWithReturn(hook, pageContext, preparePageContextForPublicUsage) {
|
|
30
|
+
const res = await execHooksErrorHandling([hook], pageContext, preparePageContextForPublicUsage);
|
|
31
|
+
if ('err' in res)
|
|
32
|
+
throw res.err;
|
|
33
|
+
const { hookReturn } = res.hooks[0];
|
|
34
|
+
return { hookReturn };
|
|
35
|
+
}
|
|
36
|
+
async function execHook(hookName, pageContext, preparePageContextForPublicUsage) {
|
|
37
|
+
const res = await execHookErrorHandling(hookName, pageContext, preparePageContextForPublicUsage);
|
|
38
|
+
if ('err' in res)
|
|
39
|
+
throw res.err;
|
|
40
|
+
return res.hooks;
|
|
41
|
+
}
|
|
42
|
+
async function execHookErrorHandling(hookName, pageContext, preparePageContextForPublicUsage) {
|
|
43
|
+
const hooks = getHookFromPageContextNew(hookName, pageContext);
|
|
44
|
+
return execHooksErrorHandling(hooks, pageContext, preparePageContextForPublicUsage);
|
|
45
|
+
}
|
|
46
|
+
async function execHooksErrorHandling(hooks, pageContext, preparePageContextForPublicUsage) {
|
|
47
|
+
if (!hooks.length)
|
|
48
|
+
return { hooks: [] };
|
|
49
|
+
const pageContextForPublicUsage = preparePageContextForPublicUsage(pageContext);
|
|
50
|
+
let hooksWithResult;
|
|
51
|
+
let err;
|
|
52
|
+
try {
|
|
53
|
+
hooksWithResult = await Promise.all(hooks.map(async (hook) => {
|
|
54
|
+
const hookReturn = await execHookAsync(() => hook.hookFn(pageContextForPublicUsage), hook, pageContextForPublicUsage);
|
|
55
|
+
return { ...hook, hookReturn };
|
|
56
|
+
}));
|
|
57
|
+
}
|
|
58
|
+
catch (err_) {
|
|
59
|
+
err = err_;
|
|
60
|
+
}
|
|
61
|
+
if (hooksWithResult) {
|
|
62
|
+
return { hooks: hooksWithResult };
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
return { hooks, err };
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
async function execHookGlobal(hookName, pageConfigGlobal, pageContext, hookArg, prepareForPublicUsage) {
|
|
69
|
+
const hooks = getHookFromPageConfigGlobalCumulative(pageConfigGlobal, hookName);
|
|
70
|
+
const hookArgForPublicUsage = prepareForPublicUsage(hookArg);
|
|
71
|
+
await Promise.all(hooks.map(async (hook) => {
|
|
72
|
+
await execHookAsync(() => hook.hookFn(hookArgForPublicUsage), hook, pageContext);
|
|
73
|
+
}));
|
|
74
|
+
}
|
|
75
|
+
function isUserHookError(err) {
|
|
76
|
+
if (!isObject(err))
|
|
77
|
+
return false;
|
|
78
|
+
return globalObject.userHookErrors.get(err) ?? false;
|
|
79
|
+
}
|
|
80
|
+
async function execHookWithoutPageContext(hookFnCaller, hook) {
|
|
81
|
+
const { hookName, hookFilePath, hookTimeout } = hook;
|
|
82
|
+
const hookReturn = await execHookAsync(hookFnCaller, { hookName, hookFilePath, hookTimeout }, null);
|
|
83
|
+
return hookReturn;
|
|
84
|
+
}
|
|
85
|
+
function execHookAsync(hookFnCaller, hook, pageContextForPublicUsage) {
|
|
86
|
+
const { hookName, hookFilePath, hookTimeout: { error: timeoutErr, warning: timeoutWarn } } = hook;
|
|
87
|
+
let resolve;
|
|
88
|
+
let reject;
|
|
89
|
+
const promise = new Promise((resolve_, reject_) => {
|
|
90
|
+
resolve = (ret) => {
|
|
91
|
+
clearTimeouts();
|
|
92
|
+
resolve_(ret);
|
|
93
|
+
};
|
|
94
|
+
reject = (err) => {
|
|
95
|
+
clearTimeouts();
|
|
96
|
+
reject_(err);
|
|
97
|
+
};
|
|
98
|
+
});
|
|
99
|
+
const clearTimeouts = () => {
|
|
100
|
+
if (currentTimeoutWarn)
|
|
101
|
+
clearTimeout(currentTimeoutWarn);
|
|
102
|
+
if (currentTimeoutErr)
|
|
103
|
+
clearTimeout(currentTimeoutErr);
|
|
104
|
+
};
|
|
105
|
+
const currentTimeoutWarn = isNotDisabled(timeoutWarn) &&
|
|
106
|
+
setTimeout(() => {
|
|
107
|
+
assertWarning(false, `The ${hookName}() hook defined by ${hookFilePath} is slow: it's taking more than ${humanizeTime(timeoutWarn)} (https://vike.dev/hooksTimeout)`, { onlyOnce: false });
|
|
108
|
+
}, timeoutWarn);
|
|
109
|
+
const currentTimeoutErr = isNotDisabled(timeoutErr) &&
|
|
110
|
+
setTimeout(() => {
|
|
111
|
+
const err = getProjectError(`The ${hookName}() hook defined by ${hookFilePath} timed out: it didn't finish after ${humanizeTime(timeoutErr)} (https://vike.dev/hooksTimeout)`);
|
|
112
|
+
reject(err);
|
|
113
|
+
}, timeoutErr);
|
|
114
|
+
(async () => {
|
|
115
|
+
try {
|
|
116
|
+
providePageContext(pageContextForPublicUsage);
|
|
117
|
+
const ret = await hookFnCaller();
|
|
118
|
+
resolve(ret);
|
|
119
|
+
}
|
|
120
|
+
catch (err) {
|
|
121
|
+
if (isObject(err)) {
|
|
122
|
+
globalObject.userHookErrors.set(err, { hookName, hookFilePath });
|
|
123
|
+
}
|
|
124
|
+
reject(err);
|
|
125
|
+
}
|
|
126
|
+
})();
|
|
127
|
+
return promise;
|
|
128
|
+
}
|
|
129
|
+
function execHookSync(hook, pageContext, preparePageContextForPublicUsage) {
|
|
130
|
+
const pageContextForPublicUsage = preparePageContextForPublicUsage(pageContext);
|
|
131
|
+
providePageContext(pageContextForPublicUsage);
|
|
132
|
+
const hookReturn = hook.hookFn(pageContextForPublicUsage);
|
|
133
|
+
return { hookReturn };
|
|
134
|
+
}
|
|
135
|
+
function isNotDisabled(timeout) {
|
|
136
|
+
return !!timeout && timeout !== Infinity;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Access `pageContext` object inside Vike hooks, in order to create universal hooks.
|
|
140
|
+
*
|
|
141
|
+
* https://vike.dev/getPageContext
|
|
142
|
+
*/
|
|
143
|
+
function getPageContext() {
|
|
144
|
+
const { pageContext } = globalObject;
|
|
145
|
+
if (!pageContext)
|
|
146
|
+
return pageContext;
|
|
147
|
+
const pageContextForPublicUsage = preparePageContextForPublicUsage(pageContext);
|
|
148
|
+
return pageContextForPublicUsage;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Provide `pageContext` for universal hooks.
|
|
152
|
+
*
|
|
153
|
+
* https://vike.dev/getPageContext
|
|
154
|
+
*/
|
|
155
|
+
function providePageContext(pageContext) {
|
|
156
|
+
globalObject.pageContext = pageContext;
|
|
157
|
+
// Promise.resolve() is quicker than process.nextTick() and setImmediate()
|
|
158
|
+
// https://stackoverflow.com/questions/67949576/process-nexttick-before-promise-resolve-then
|
|
159
|
+
Promise.resolve().then(() => {
|
|
160
|
+
globalObject.pageContext = null;
|
|
161
|
+
});
|
|
162
|
+
}
|
|
@@ -1,38 +1,37 @@
|
|
|
1
1
|
export { getHookFromPageContext };
|
|
2
|
+
export { getHookFromPageContextNew };
|
|
2
3
|
export { getHookFromPageConfig };
|
|
3
4
|
export { getHookFromPageConfigGlobal };
|
|
4
5
|
export { getHookFromPageConfigGlobalCumulative };
|
|
5
|
-
export { assertHook };
|
|
6
6
|
export { getHook_setIsPrerenderering };
|
|
7
7
|
export type { Hook };
|
|
8
|
-
export type { HookName };
|
|
9
8
|
export type { HookLoc };
|
|
10
9
|
export type { HookTimeout };
|
|
11
10
|
export type { HooksTimeoutProvidedByUser };
|
|
12
11
|
export { getHookTimeoutDefault };
|
|
13
12
|
import type { PageConfigUserFriendlyOld } from '../getPageFiles.js';
|
|
14
|
-
import type {
|
|
13
|
+
import type { HookNameOld, HookNamePage, HookNameGlobal, HookName } from '../page-configs/Config.js';
|
|
15
14
|
import type { PageConfigGlobalRuntime, PageConfigRuntime } from '../page-configs/PageConfig.js';
|
|
15
|
+
import type { GlobalContextPrepareMinimum } from '../prepareGlobalContextForPublicUsage.js';
|
|
16
|
+
import type { PageContextPrepareMinimum } from '../preparePageContextForPublicUsage.js';
|
|
16
17
|
type Hook = HookLoc & {
|
|
17
18
|
hookFn: HookFn;
|
|
18
19
|
hookTimeout: HookTimeout;
|
|
19
20
|
};
|
|
20
21
|
type HookLoc = {
|
|
21
|
-
hookName:
|
|
22
|
+
hookName: HookNameOld;
|
|
22
23
|
hookFilePath: string;
|
|
23
24
|
};
|
|
24
|
-
type HookFn = (arg:
|
|
25
|
+
type HookFn = (arg: PageContextPrepareMinimum | GlobalContextPrepareMinimum) => unknown;
|
|
25
26
|
type HookTimeout = {
|
|
26
27
|
error: number | false;
|
|
27
28
|
warning: number | false;
|
|
28
29
|
};
|
|
29
|
-
type HooksTimeoutProvidedByUser = false | Partial<Record<
|
|
30
|
-
declare function getHookFromPageContext(pageContext: PageConfigUserFriendlyOld, hookName:
|
|
30
|
+
type HooksTimeoutProvidedByUser = false | Partial<Record<HookNameOld, false | Partial<HookTimeout>>>;
|
|
31
|
+
declare function getHookFromPageContext(pageContext: PageConfigUserFriendlyOld, hookName: HookNameOld): null | Hook;
|
|
32
|
+
declare function getHookFromPageContextNew(hookName: HookName, pageContext: PageConfigUserFriendlyOld): Hook[];
|
|
31
33
|
declare function getHookFromPageConfig(pageConfig: PageConfigRuntime, hookName: HookNamePage): null | Hook;
|
|
32
34
|
declare function getHookFromPageConfigGlobal(pageConfigGlobal: PageConfigGlobalRuntime, hookName: HookNameGlobal): null | Hook;
|
|
33
35
|
declare function getHookFromPageConfigGlobalCumulative(pageConfigGlobal: PageConfigGlobalRuntime, hookName: HookNameGlobal): Hook[];
|
|
34
|
-
declare function
|
|
35
|
-
exports: Record<THookName, Function | undefined>;
|
|
36
|
-
};
|
|
37
|
-
declare function getHookTimeoutDefault(hookName: HookName): HookTimeout;
|
|
36
|
+
declare function getHookTimeoutDefault(hookName: HookNameOld): HookTimeout;
|
|
38
37
|
declare function getHook_setIsPrerenderering(): void;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export { getHookFromPageContext };
|
|
2
|
+
export { getHookFromPageContextNew };
|
|
2
3
|
export { getHookFromPageConfig };
|
|
3
4
|
export { getHookFromPageConfigGlobal };
|
|
4
5
|
export { getHookFromPageConfigGlobalCumulative };
|
|
5
|
-
export { assertHook };
|
|
6
6
|
export { getHook_setIsPrerenderering };
|
|
7
7
|
// TODO/v1-release: remove
|
|
8
8
|
// We export for old V0.4 design which doesn't support config.hooksTimeout
|
|
@@ -22,12 +22,34 @@ function getHookFromPageContext(pageContext, hookName) {
|
|
|
22
22
|
const hookFn = pageContext.exports[hookName];
|
|
23
23
|
if (hookFn === null)
|
|
24
24
|
return null;
|
|
25
|
+
// TO-DO/eventually: use pageContext.configEntries in favor of pageContext.exportsAll once V0.4 is removed
|
|
25
26
|
const file = pageContext.exportsAll[hookName][0];
|
|
26
27
|
assert(file.exportValue === hookFn);
|
|
27
28
|
const hookFilePath = file.filePath;
|
|
28
29
|
assert(hookFilePath);
|
|
29
30
|
return getHook(hookFn, hookName, hookFilePath, hookTimeout);
|
|
30
31
|
}
|
|
32
|
+
// TO-DO/eventually: remove getHookFromPageContext() in favor of getHookFromPageContextNew()
|
|
33
|
+
function getHookFromPageContextNew(hookName, pageContext) {
|
|
34
|
+
const { hooksTimeout } = pageContext.config;
|
|
35
|
+
const hookTimeout = getHookTimeout(hooksTimeout, hookName);
|
|
36
|
+
const hooks = [];
|
|
37
|
+
/* TO-DO/eventually: use pageContext.configEntries in favor of pageContext.exportsAll once V0.4 is removed
|
|
38
|
+
pageContext.configEntries[hookName]?.forEach((val) => {
|
|
39
|
+
const hookFn = val.configValue
|
|
40
|
+
if (hookFn === null) return
|
|
41
|
+
const hookFilePath = val.configDefinedByFile
|
|
42
|
+
*/
|
|
43
|
+
pageContext.exportsAll[hookName]?.forEach((val) => {
|
|
44
|
+
const hookFn = val.exportValue;
|
|
45
|
+
if (hookFn === null)
|
|
46
|
+
return;
|
|
47
|
+
const hookFilePath = val.filePath;
|
|
48
|
+
assert(hookFilePath);
|
|
49
|
+
hooks.push(getHook(hookFn, hookName, hookFilePath, hookTimeout));
|
|
50
|
+
});
|
|
51
|
+
return hooks;
|
|
52
|
+
}
|
|
31
53
|
function getHookFromPageConfig(pageConfig, hookName) {
|
|
32
54
|
const configValue = getConfigValueRuntime(pageConfig, hookName);
|
|
33
55
|
if (!configValue?.value)
|
|
@@ -76,9 +98,6 @@ function getHookFromConfigValue(configValue) {
|
|
|
76
98
|
const hookFilePath = getHookFilePathToShowToUser(configValue.definedAtData);
|
|
77
99
|
return { hookFn, hookFilePath };
|
|
78
100
|
}
|
|
79
|
-
function assertHook(pageContext, hookName) {
|
|
80
|
-
getHookFromPageContext(pageContext, hookName);
|
|
81
|
-
}
|
|
82
101
|
function assertHookFn(hookFn, { hookName, hookFilePath }) {
|
|
83
102
|
assert(hookName && hookFilePath);
|
|
84
103
|
assert(!hookName.endsWith(')'));
|
|
@@ -5,6 +5,7 @@ export type { ConfigNameBuiltIn };
|
|
|
5
5
|
export type { ConfigNameGlobal };
|
|
6
6
|
export type { ConfigMeta };
|
|
7
7
|
export type { HookName };
|
|
8
|
+
export type { HookNameOld };
|
|
8
9
|
export type { HookNamePage };
|
|
9
10
|
export type { HookNameGlobal };
|
|
10
11
|
export type { ImportString };
|
|
@@ -43,10 +44,11 @@ import type { Vike, VikePackages } from '../VikeNamespace.js';
|
|
|
43
44
|
import type { HooksTimeoutProvidedByUser } from '../hooks/getHook.js';
|
|
44
45
|
import type { GlobalContext, PageContextClient, PageContextServer } from '../types.js';
|
|
45
46
|
import type { InlineConfig } from 'vite';
|
|
46
|
-
type
|
|
47
|
-
type
|
|
48
|
-
type
|
|
49
|
-
type
|
|
47
|
+
type HookNameOld = HookName | HookNameOldDesign;
|
|
48
|
+
type HookName = HookNamePage | HookNameGlobal;
|
|
49
|
+
type HookNamePage = 'onHydrationEnd' | 'onBeforePrerenderStart' | 'onBeforeRender' | 'onPageTransitionStart' | 'onPageTransitionEnd' | 'onRenderHtml' | 'onRenderClient' | 'guard' | 'data' | 'onData' | 'route';
|
|
50
|
+
type HookNameGlobal = 'onBeforeRoute' | 'onPrerenderStart' | 'onCreatePageContext' | 'onCreateGlobalContext';
|
|
51
|
+
type HookNameOldDesign = 'render' | 'prerender' | 'onBeforePrerender';
|
|
50
52
|
type ConfigNameBuiltIn = Exclude<keyof Config, keyof VikeVitePluginOptions | 'onBeforeRoute' | 'onPrerenderStart' | 'vite' | 'redirects'> | 'prerender' | 'isClientRuntimeLoaded' | 'onBeforeRenderEnv' | 'dataEnv' | 'hooksTimeout' | 'clientHooks' | 'middleware';
|
|
51
53
|
type ConfigNameGlobal = 'onPrerenderStart' | 'onBeforeRoute' | 'prerender' | 'disableAutoFullBuild' | 'includeAssetsImportedByServer' | 'baseAssets' | 'baseServer' | 'redirects' | 'trailingSlash' | 'disableUrlNormalization' | 'vite';
|
|
52
54
|
type Config = ConfigBuiltIn & Vike.Config & (VikePackages.ConfigVikeReact | VikePackages.ConfigVikeVue | VikePackages.ConfigVikeSolid | VikePackages.ConfigVikeSvelte | VikePackages.ConfigVikeAngular);
|
|
@@ -345,6 +347,11 @@ type ConfigBuiltIn = {
|
|
|
345
347
|
* https://vike.dev/data
|
|
346
348
|
*/
|
|
347
349
|
data?: DataAsync<unknown> | DataSync<unknown> | ImportString | null;
|
|
350
|
+
/** Hook called as soon as `pageContext.data` is available.
|
|
351
|
+
*
|
|
352
|
+
* https://vike.dev/onData
|
|
353
|
+
*/
|
|
354
|
+
onData?: Function;
|
|
348
355
|
/** Determines what pageContext properties are sent to the client-side.
|
|
349
356
|
*
|
|
350
357
|
* https://vike.dev/passToClient
|