vike 0.4.232-commit-1690f53 → 0.4.232
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/node/prerender/runPrerender.js +4 -9
- package/dist/cjs/node/runtime/renderPage/execHookServer.js +4 -1
- package/dist/cjs/node/runtime/renderPage/{execHookDataAndOnBeforeRender.js → executeOnBeforeRenderAndDataHooks.js} +2 -2
- package/dist/cjs/node/runtime/renderPage/{execHookOnRenderHtml.js → executeOnRenderHtmlHook.js} +3 -3
- package/dist/cjs/node/runtime/renderPage/loadPageConfigsLazyServerSide.js +13 -18
- package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +11 -11
- package/dist/cjs/node/runtime/renderPage.js +48 -55
- package/dist/cjs/node/vite/shared/resolveVikeConfigInternal/configDefinitionsBuiltIn.js +2 -0
- package/dist/cjs/shared/createPageContextShared.js +3 -1
- package/dist/cjs/shared/hooks/execHook.js +54 -31
- package/dist/cjs/shared/route/{execHookGuard.js → executeGuardHook.js} +3 -3
- package/dist/cjs/shared/route/{execHookOnBeforeRoute.js → executeOnBeforeRouteHook.js} +4 -4
- package/dist/cjs/shared/route/index.js +2 -3
- package/dist/cjs/shared/route/resolveRouteFunction.js +1 -1
- package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
- package/dist/cjs/utils/styleFileRE.js +0 -1
- package/dist/esm/client/runtime-client-routing/getPageContextFromHooks.d.ts +2 -2
- package/dist/esm/client/runtime-client-routing/getPageContextFromHooks.js +9 -9
- package/dist/esm/client/runtime-client-routing/renderPageClientSide.js +62 -97
- package/dist/esm/client/runtime-server-routing/createPageContextClientSide.js +4 -11
- package/dist/esm/client/runtime-server-routing/entry.js +2 -2
- package/dist/esm/client/shared/{execHookOnRenderClient.d.ts → executeOnRenderClientHook.d.ts} +2 -2
- package/dist/esm/client/shared/{execHookOnRenderClient.js → executeOnRenderClientHook.js} +4 -4
- package/dist/esm/client/shared/loadPageConfigsLazyClientSide.d.ts +4 -12
- package/dist/esm/client/shared/loadPageConfigsLazyClientSide.js +4 -4
- package/dist/esm/node/prerender/runPrerender.d.ts +4 -250
- package/dist/esm/node/prerender/runPrerender.js +6 -11
- package/dist/esm/node/runtime/renderPage/createHttpResponse.d.ts +1 -1
- package/dist/esm/node/runtime/renderPage/execHookServer.d.ts +3 -3
- package/dist/esm/node/runtime/renderPage/execHookServer.js +4 -1
- package/dist/esm/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.d.ts +6 -0
- package/dist/esm/node/runtime/renderPage/{execHookDataAndOnBeforeRender.js → executeOnBeforeRenderAndDataHooks.js} +2 -2
- package/dist/esm/node/runtime/renderPage/{execHookOnRenderHtml.d.ts → executeOnRenderHtmlHook.d.ts} +2 -2
- package/dist/esm/node/runtime/renderPage/{execHookOnRenderHtml.js → executeOnRenderHtmlHook.js} +4 -4
- package/dist/esm/node/runtime/renderPage/getHttpResponseBody.d.ts +1 -1
- package/dist/esm/node/runtime/renderPage/loadPageConfigsLazyServerSide.d.ts +6 -15
- package/dist/esm/node/runtime/renderPage/loadPageConfigsLazyServerSide.js +13 -18
- package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +2 -2
- package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +13 -13
- package/dist/esm/node/runtime/renderPage.js +50 -57
- package/dist/esm/node/vite/shared/resolveVikeConfigInternal/configDefinitionsBuiltIn.js +2 -0
- package/dist/esm/shared/createPageContextShared.js +3 -1
- package/dist/esm/shared/hooks/execHook.d.ts +28 -14
- package/dist/esm/shared/hooks/execHook.js +54 -31
- package/dist/esm/shared/route/executeGuardHook.d.ts +8 -0
- package/dist/esm/shared/route/{execHookGuard.js → executeGuardHook.js} +4 -4
- package/dist/esm/shared/route/{execHookOnBeforeRoute.d.ts → executeOnBeforeRouteHook.d.ts} +2 -2
- package/dist/esm/shared/route/{execHookOnBeforeRoute.js → executeOnBeforeRouteHook.js} +5 -5
- package/dist/esm/shared/route/index.js +2 -3
- package/dist/esm/shared/route/resolveRouteFunction.js +2 -2
- package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
- package/dist/esm/utils/PROJECT_VERSION.js +1 -1
- package/dist/esm/utils/styleFileRE.js +0 -1
- package/package.json +1 -1
- package/dist/esm/node/runtime/renderPage/execHookDataAndOnBeforeRender.d.ts +0 -6
- package/dist/esm/shared/route/execHookGuard.d.ts +0 -8
|
@@ -3,7 +3,7 @@ export { renderPage_addAsyncHookwrapper };
|
|
|
3
3
|
import { renderPageAlreadyRouted } from './renderPage/renderPageAlreadyRouted.js';
|
|
4
4
|
import { createPageContextServerSide, createPageContextServerSideWithoutGlobalContext, } from './renderPage/createPageContextServerSide.js';
|
|
5
5
|
import { route } from '../../shared/route/index.js';
|
|
6
|
-
import { assert, hasProp, objectAssign, isUrl, parseUrl, onSetupRuntime, assertWarning, getGlobalObject, checkType, assertUsage, normalizeUrlPathname, removeBaseServer, modifyUrlPathname, prependBase, removeUrlOrigin, setUrlOrigin, isUri, getUrlPretty,
|
|
6
|
+
import { assert, hasProp, objectAssign, isUrl, parseUrl, onSetupRuntime, assertWarning, getGlobalObject, checkType, assertUsage, normalizeUrlPathname, removeBaseServer, modifyUrlPathname, prependBase, removeUrlOrigin, setUrlOrigin, isUri, getUrlPretty, } from './utils.js';
|
|
7
7
|
import { assertNoInfiniteAbortLoop, getPageContextFromAllRewrites, isAbortError, logAbortErrorHandled, } from '../../shared/route/abort.js';
|
|
8
8
|
import { getGlobalContextServerInternal, initGlobalContext_renderPage, } from './globalContext.js';
|
|
9
9
|
import { handlePageContextRequestUrl } from './renderPage/handlePageContextRequestUrl.js';
|
|
@@ -16,7 +16,7 @@ import pc from '@brillout/picocolors';
|
|
|
16
16
|
import { getPageContextClientSerializedAbort, getPageContextClientSerialized } from './html/serializeContext.js';
|
|
17
17
|
import { getErrorPageId } from '../../shared/error-page.js';
|
|
18
18
|
import { handleErrorWithoutErrorPage } from './renderPage/handleErrorWithoutErrorPage.js';
|
|
19
|
-
import {
|
|
19
|
+
import { loadPageConfigsLazyServerSide } from './renderPage/loadPageConfigsLazyServerSide.js';
|
|
20
20
|
import { resolveRedirects } from './renderPage/resolveRedirects.js';
|
|
21
21
|
import { getVikeConfigError } from '../shared/getVikeConfigError.js';
|
|
22
22
|
const globalObject = getGlobalObject('runtime/renderPage.ts', { httpRequestsCount: 0 });
|
|
@@ -138,66 +138,59 @@ async function renderPageAlreadyPrepared(pageContextBegin, globalContext, httpRe
|
|
|
138
138
|
else {
|
|
139
139
|
assert(errNominalPage);
|
|
140
140
|
assert(pageContextNominalPageSuccess === undefined);
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
//
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
// - throw render(url)
|
|
158
|
-
// - throw render(abortStatusCode) if .pageContext.json request
|
|
159
|
-
return handled.pageContextReturn;
|
|
160
|
-
}
|
|
161
|
-
else {
|
|
162
|
-
// - throw render(abortStatusCode) if not .pageContext.json request
|
|
141
|
+
assert(pageContextNominalPageBegin);
|
|
142
|
+
assert(hasProp(pageContextNominalPageBegin, 'urlOriginal', 'string'));
|
|
143
|
+
const pageContextErrorPageInit = await getPageContextErrorPageInit(pageContextBegin, errNominalPage, pageContextNominalPageBegin);
|
|
144
|
+
// Handle `throw redirect()` and `throw render()` while rendering nominal page
|
|
145
|
+
if (isAbortError(errNominalPage)) {
|
|
146
|
+
const handled = await handleAbortError(errNominalPage, pageContextsFromRewrite, pageContextBegin, pageContextNominalPageBegin, httpRequestId, pageContextErrorPageInit, globalContext);
|
|
147
|
+
if (handled.pageContextReturn) {
|
|
148
|
+
// - throw redirect()
|
|
149
|
+
// - throw render(url)
|
|
150
|
+
// - throw render(abortStatusCode) if .pageContext.json request
|
|
151
|
+
return handled.pageContextReturn;
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
// - throw render(abortStatusCode) if not .pageContext.json request
|
|
155
|
+
}
|
|
156
|
+
Object.assign(pageContextErrorPageInit, handled.pageContextAbort);
|
|
163
157
|
}
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
158
|
+
{
|
|
159
|
+
const errorPageId = getErrorPageId(globalContext._pageFilesAll, globalContext._pageConfigs);
|
|
160
|
+
if (!errorPageId) {
|
|
161
|
+
objectAssign(pageContextErrorPageInit, { pageId: null });
|
|
162
|
+
return handleErrorWithoutErrorPage(pageContextErrorPageInit);
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
objectAssign(pageContextErrorPageInit, { pageId: errorPageId });
|
|
166
|
+
}
|
|
171
167
|
}
|
|
172
|
-
|
|
173
|
-
|
|
168
|
+
let pageContextErrorPage;
|
|
169
|
+
try {
|
|
170
|
+
pageContextErrorPage = await renderPageAlreadyRouted(pageContextErrorPageInit);
|
|
174
171
|
}
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
const pageContextHttpWithError = getPageContextHttpResponseError(errNominalPage, pageContextBegin);
|
|
189
|
-
return pageContextHttpWithError;
|
|
172
|
+
catch (errErrorPage) {
|
|
173
|
+
// Handle `throw redirect()` and `throw render()` while rendering error page
|
|
174
|
+
if (isAbortError(errErrorPage)) {
|
|
175
|
+
const handled = await handleAbortError(errErrorPage, pageContextsFromRewrite, pageContextBegin, pageContextNominalPageBegin, httpRequestId, pageContextErrorPageInit, globalContext);
|
|
176
|
+
// throw render(abortStatusCode)
|
|
177
|
+
if (!handled.pageContextReturn) {
|
|
178
|
+
const pageContextAbort = errErrorPage._pageContextAbort;
|
|
179
|
+
assertWarning(false, `Failed to render error page because ${pc.cyan(pageContextAbort._abortCall)} was called: make sure ${pc.cyan(pageContextAbort._abortCaller)} doesn't occur while the error page is being rendered.`, { onlyOnce: false });
|
|
180
|
+
const pageContextHttpWithError = getPageContextHttpResponseError(errNominalPage, pageContextBegin);
|
|
181
|
+
return pageContextHttpWithError;
|
|
182
|
+
}
|
|
183
|
+
// `throw redirect()` / `throw render(url)`
|
|
184
|
+
return handled.pageContextReturn;
|
|
190
185
|
}
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
186
|
+
if (isNewError(errErrorPage, errNominalPage)) {
|
|
187
|
+
logRuntimeError(errErrorPage, httpRequestId);
|
|
188
|
+
}
|
|
189
|
+
const pageContextWithError = getPageContextHttpResponseError(errNominalPage, pageContextBegin);
|
|
190
|
+
return pageContextWithError;
|
|
196
191
|
}
|
|
197
|
-
|
|
198
|
-
return pageContextWithError;
|
|
192
|
+
return pageContextErrorPage;
|
|
199
193
|
}
|
|
200
|
-
return pageContextErrorPage;
|
|
201
194
|
}
|
|
202
195
|
function logHttpRequest(urlOriginal, httpRequestId) {
|
|
203
196
|
logRuntimeInfo?.(getRequestInfoMessage(urlOriginal), httpRequestId, 'info');
|
|
@@ -419,7 +412,7 @@ pageContextNominalPageBegin, httpRequestId, pageContextErrorPageInit, globalCont
|
|
|
419
412
|
objectAssign(pageContext, { pageId: errorPageId });
|
|
420
413
|
objectAssign(pageContext, pageContextAbort);
|
|
421
414
|
objectAssign(pageContext, pageContextErrorPageInit, true);
|
|
422
|
-
|
|
415
|
+
objectAssign(pageContext, await loadPageConfigsLazyServerSide(pageContext));
|
|
423
416
|
// We include pageContextInit: we don't only serialize pageContextAbort because the error page may need to access pageContextInit
|
|
424
417
|
pageContextSerialized = getPageContextClientSerialized(pageContext);
|
|
425
418
|
}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
export { createPageContextShared };
|
|
2
2
|
export { createPageContextObject };
|
|
3
|
+
import { execHookGlobal } from './hooks/execHook.js';
|
|
4
|
+
import { preparePageContextForPublicUsage } from './preparePageContextForPublicUsage.js';
|
|
3
5
|
import { changeEnumerable, objectAssign } from './utils.js';
|
|
4
|
-
// TODO/now: make this and parents sync
|
|
5
6
|
async function createPageContextShared(pageContextCreated, pageConfigGlobal, vikeConfigPublicGlobal) {
|
|
6
7
|
objectAssign(pageContextCreated, vikeConfigPublicGlobal);
|
|
8
|
+
await execHookGlobal('onCreatePageContext', pageConfigGlobal, pageContextCreated, pageContextCreated, preparePageContextForPublicUsage);
|
|
7
9
|
return pageContextCreated;
|
|
8
10
|
}
|
|
9
11
|
function createPageContextObject() {
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
export { execHook };
|
|
2
|
+
export { execHookSingle };
|
|
3
|
+
export { execHookSingleWithReturn };
|
|
4
|
+
export { execHookErrorHandling };
|
|
5
|
+
export { execHooksErrorHandling };
|
|
6
|
+
export { execHookWithoutPageContext };
|
|
2
7
|
export { execHookGlobal };
|
|
3
|
-
export {
|
|
4
|
-
export { execHookDirectSingle };
|
|
5
|
-
export { execHookDirectSingleWithReturn };
|
|
6
|
-
export { execHookDirectWithoutPageContext };
|
|
7
|
-
export { execHookDirectSync };
|
|
8
|
+
export { execHookSync };
|
|
8
9
|
export { getPageContext };
|
|
9
10
|
export { providePageContext };
|
|
10
11
|
export { isUserHookError };
|
|
11
|
-
export type {
|
|
12
|
+
export type { PageContextExecuteHook };
|
|
12
13
|
import type { PageContextClient, PageContextServer } from '../../types/PageContext.js';
|
|
13
14
|
import type { Hook, HookLoc } from './getHook.js';
|
|
14
15
|
import type { VikeConfigPublicPageLazy } from '../getPageFiles.js';
|
|
@@ -18,21 +19,34 @@ import type { PageContextForPublicUsageServer } from '../../node/runtime/renderP
|
|
|
18
19
|
import type { PageContextForPublicUsageClientShared } from '../../client/shared/preparePageContextForPublicUsageClientShared.js';
|
|
19
20
|
import { type PageContextPrepareMinimum } from '../preparePageContextForPublicUsage.js';
|
|
20
21
|
import type { GlobalContextPrepareMinimum } from '../prepareGlobalContextForPublicUsage.js';
|
|
21
|
-
type
|
|
22
|
+
type PageContextExecuteHook = VikeConfigPublicPageLazy & PageContextForPublicUsage;
|
|
22
23
|
type PageContextForPublicUsage = PageContextForPublicUsageServer | PageContextForPublicUsageClientShared;
|
|
23
24
|
type HookWithResult = Hook & {
|
|
24
25
|
hookReturn: unknown;
|
|
25
26
|
};
|
|
26
|
-
declare function
|
|
27
|
-
declare function
|
|
28
|
-
declare function execHookDirect<PageContext extends PageContextPrepareMinimum>(hooks: Hook[], pageContext: PageContext, preparePageContextForPublicUsage: (pageContext: PageContext) => PageContext): Promise<HookWithResult[]>;
|
|
29
|
-
declare function execHookDirectSingle<PageContext extends PageContextExecHook>(hook: Hook, pageContext: PageContext, preparePageContextForPublicUsage: (pageContext: PageContext) => PageContext): Promise<void>;
|
|
30
|
-
declare function execHookDirectSingleWithReturn<PageContext extends PageContextExecHook>(hook: Hook, pageContext: PageContext, preparePageContextForPublicUsage: (pageContext: PageContext) => PageContext): Promise<{
|
|
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<{
|
|
31
29
|
hookReturn: unknown;
|
|
32
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>;
|
|
33
47
|
declare function isUserHookError(err: unknown): false | HookLoc;
|
|
34
|
-
declare function
|
|
35
|
-
declare function
|
|
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): {
|
|
36
50
|
hookReturn: unknown;
|
|
37
51
|
};
|
|
38
52
|
/**
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
export { execHook };
|
|
2
|
+
export { execHookSingle };
|
|
3
|
+
export { execHookSingleWithReturn };
|
|
4
|
+
export { execHookErrorHandling };
|
|
5
|
+
export { execHooksErrorHandling };
|
|
6
|
+
export { execHookWithoutPageContext };
|
|
2
7
|
export { execHookGlobal };
|
|
3
|
-
export {
|
|
4
|
-
export { execHookDirectSingle };
|
|
5
|
-
export { execHookDirectSingleWithReturn };
|
|
6
|
-
export { execHookDirectWithoutPageContext };
|
|
7
|
-
export { execHookDirectSync };
|
|
8
|
+
export { execHookSync };
|
|
8
9
|
export { getPageContext };
|
|
9
10
|
export { providePageContext };
|
|
10
11
|
export { isUserHookError };
|
|
@@ -18,48 +19,70 @@ const globalObject = getGlobalObject('utils/execHook.ts', {
|
|
|
18
19
|
userHookErrors: new WeakMap(),
|
|
19
20
|
pageContext: null,
|
|
20
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
|
+
}
|
|
21
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) {
|
|
22
43
|
const hooks = getHookFromPageContextNew(hookName, pageContext);
|
|
23
|
-
return
|
|
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
|
+
}
|
|
24
67
|
}
|
|
25
68
|
async function execHookGlobal(hookName, pageConfigGlobal, pageContext, hookArg, prepareForPublicUsage) {
|
|
26
69
|
const hooks = getHookFromPageConfigGlobalCumulative(pageConfigGlobal, hookName);
|
|
27
70
|
const hookArgForPublicUsage = prepareForPublicUsage(hookArg);
|
|
28
71
|
await Promise.all(hooks.map(async (hook) => {
|
|
29
|
-
await
|
|
72
|
+
await execHookAsync(() => hook.hookFn(hookArgForPublicUsage), hook, pageContext);
|
|
30
73
|
}));
|
|
31
74
|
}
|
|
32
|
-
async function execHookDirect(hooks, pageContext, preparePageContextForPublicUsage) {
|
|
33
|
-
if (!hooks.length)
|
|
34
|
-
return [];
|
|
35
|
-
const pageContextForPublicUsage = preparePageContextForPublicUsage(pageContext);
|
|
36
|
-
const hooksWithResult = await Promise.all(hooks.map(async (hook) => {
|
|
37
|
-
const hookReturn = await execHookDirectAsync(() => hook.hookFn(pageContextForPublicUsage), hook, pageContextForPublicUsage);
|
|
38
|
-
return { ...hook, hookReturn };
|
|
39
|
-
}));
|
|
40
|
-
return hooksWithResult;
|
|
41
|
-
}
|
|
42
|
-
async function execHookDirectSingle(hook, pageContext, preparePageContextForPublicUsage) {
|
|
43
|
-
const hooksWithResult = await execHookDirect([hook], pageContext, preparePageContextForPublicUsage);
|
|
44
|
-
const { hookReturn } = hooksWithResult[0];
|
|
45
|
-
assertUsage(hookReturn === undefined, `The ${hook.hookName}() hook defined by ${hook.hookFilePath} isn't allowed to return a value`);
|
|
46
|
-
}
|
|
47
|
-
async function execHookDirectSingleWithReturn(hook, pageContext, preparePageContextForPublicUsage) {
|
|
48
|
-
const hooksWithResult = await execHookDirect([hook], pageContext, preparePageContextForPublicUsage);
|
|
49
|
-
const { hookReturn } = hooksWithResult[0];
|
|
50
|
-
return { hookReturn };
|
|
51
|
-
}
|
|
52
75
|
function isUserHookError(err) {
|
|
53
76
|
if (!isObject(err))
|
|
54
77
|
return false;
|
|
55
78
|
return globalObject.userHookErrors.get(err) ?? false;
|
|
56
79
|
}
|
|
57
|
-
async function
|
|
80
|
+
async function execHookWithoutPageContext(hookFnCaller, hook) {
|
|
58
81
|
const { hookName, hookFilePath, hookTimeout } = hook;
|
|
59
|
-
const hookReturn = await
|
|
82
|
+
const hookReturn = await execHookAsync(hookFnCaller, { hookName, hookFilePath, hookTimeout }, null);
|
|
60
83
|
return hookReturn;
|
|
61
84
|
}
|
|
62
|
-
function
|
|
85
|
+
function execHookAsync(hookFnCaller, hook, pageContextForPublicUsage) {
|
|
63
86
|
const { hookName, hookFilePath, hookTimeout: { error: timeoutErr, warning: timeoutWarn }, } = hook;
|
|
64
87
|
let resolve;
|
|
65
88
|
let reject;
|
|
@@ -103,7 +126,7 @@ function execHookDirectAsync(hookFnCaller, hook, pageContextForPublicUsage) {
|
|
|
103
126
|
})();
|
|
104
127
|
return promise;
|
|
105
128
|
}
|
|
106
|
-
function
|
|
129
|
+
function execHookSync(hook, pageContext, preparePageContextForPublicUsage) {
|
|
107
130
|
const pageContextForPublicUsage = preparePageContextForPublicUsage(pageContext);
|
|
108
131
|
providePageContextInternal(pageContextForPublicUsage);
|
|
109
132
|
const hookReturn = hook.hookFn(pageContextForPublicUsage);
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { executeGuardHook };
|
|
2
|
+
import { type PageContextExecuteHook } from '../hooks/execHook.js';
|
|
3
|
+
import type { GlobalContextInternal } from '../createGlobalContextShared.js';
|
|
4
|
+
declare function executeGuardHook<PageContext extends {
|
|
5
|
+
pageId: string;
|
|
6
|
+
} & {
|
|
7
|
+
_globalContext: GlobalContextInternal;
|
|
8
|
+
} & PageContextExecuteHook>(pageContext: PageContext, prepareForPublicUsage: (pageConfig: PageContext) => PageContext): Promise<void>;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { executeGuardHook };
|
|
2
2
|
import { getHookFromPageContext, getHookTimeoutDefault } from '../hooks/getHook.js';
|
|
3
3
|
import { assert, assertUsage, isCallable } from './utils.js';
|
|
4
|
-
import {
|
|
4
|
+
import { execHookSingle } from '../hooks/execHook.js';
|
|
5
5
|
const errIntro = 'The guard() hook defined by';
|
|
6
|
-
async function
|
|
6
|
+
async function executeGuardHook(pageContext, prepareForPublicUsage) {
|
|
7
7
|
let hook;
|
|
8
8
|
if (pageContext._globalContext._pageFilesAll.length > 0) {
|
|
9
9
|
// TODO/v1-release: remove
|
|
@@ -17,7 +17,7 @@ async function execHookGuard(pageContext, prepareForPublicUsage) {
|
|
|
17
17
|
}
|
|
18
18
|
if (!hook)
|
|
19
19
|
return;
|
|
20
|
-
await
|
|
20
|
+
await execHookSingle(hook, pageContext, prepareForPublicUsage);
|
|
21
21
|
}
|
|
22
22
|
function findPageGuard(pageId, pageFilesAll) {
|
|
23
23
|
const pageRouteFile = pageFilesAll.find((p) => p.pageId === pageId && p.fileType === '.page.route');
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { executeOnBeforeRouteHook };
|
|
2
2
|
import type { PageContextForRoute, PageContextFromRoute } from './index.js';
|
|
3
|
-
declare function
|
|
3
|
+
declare function executeOnBeforeRouteHook(pageContext: PageContextForRoute): Promise<null | ({
|
|
4
4
|
_routingProvidedByOnBeforeRouteHook: true;
|
|
5
5
|
} & PageContextFromRoute) | {
|
|
6
6
|
_routingProvidedByOnBeforeRouteHook: false;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { executeOnBeforeRouteHook };
|
|
2
2
|
import { assertPageContextProvidedByUser } from '../assertPageContextProvidedByUser.js';
|
|
3
3
|
import { assertUsage, hasProp, isObjectWithKeys, objectAssign, assertWarning, assertUsageUrlPathnameAbsolute, joinEnglish, assert, } from './utils.js';
|
|
4
4
|
import { assertRouteParams, assertSyncRouting } from './resolveRouteFunction.js';
|
|
5
5
|
import pc from '@brillout/picocolors';
|
|
6
|
-
import {
|
|
6
|
+
import { execHookSync } from '../hooks/execHook.js';
|
|
7
7
|
import { preparePageContextForPublicUsage, } from '../preparePageContextForPublicUsage.js';
|
|
8
|
-
async function
|
|
8
|
+
async function executeOnBeforeRouteHook(pageContext) {
|
|
9
9
|
const pageContextFromOnBeforeRouteHook = {};
|
|
10
10
|
if (!pageContext._globalContext._onBeforeRouteHook)
|
|
11
11
|
return null;
|
|
@@ -34,9 +34,9 @@ async function execHookOnBeforeRoute(pageContext) {
|
|
|
34
34
|
return pageContextFromOnBeforeRouteHook;
|
|
35
35
|
}
|
|
36
36
|
async function getPageContextFromHook(onBeforeRouteHook, pageContext) {
|
|
37
|
-
let { hookReturn } =
|
|
37
|
+
let { hookReturn } = execHookSync(onBeforeRouteHook, pageContext, preparePageContextForPublicUsage);
|
|
38
38
|
assertSyncRouting(hookReturn, `The onBeforeRoute() hook ${onBeforeRouteHook.hookFilePath}`);
|
|
39
|
-
// TODO/v1-release: make
|
|
39
|
+
// TODO/v1-release: make executeOnBeforeRouteHook() and route() sync
|
|
40
40
|
hookReturn = await hookReturn;
|
|
41
41
|
const errPrefix = `The onBeforeRoute() hook defined by ${onBeforeRouteHook.hookFilePath}`;
|
|
42
42
|
assertUsage(hookReturn === null ||
|
|
@@ -9,16 +9,15 @@ import { assert, assertUsage, isPlainObject, objectAssign } from './utils.js';
|
|
|
9
9
|
import { resolvePrecedence } from './resolvePrecedence.js';
|
|
10
10
|
import { resolveRouteString } from './resolveRouteString.js';
|
|
11
11
|
import { resolveRouteFunction } from './resolveRouteFunction.js';
|
|
12
|
-
import {
|
|
12
|
+
import { executeOnBeforeRouteHook } from './executeOnBeforeRouteHook.js';
|
|
13
13
|
import { debug } from './debug.js';
|
|
14
14
|
import pc from '@brillout/picocolors';
|
|
15
|
-
// TODO/next-major-release: make it sync
|
|
16
15
|
async function route(pageContext, skipOnBeforeRouteHook) {
|
|
17
16
|
debug('Pages routes:', pageContext._globalContext._pageRoutes);
|
|
18
17
|
const pageContextFromRoute = {};
|
|
19
18
|
// onBeforeRoute()
|
|
20
19
|
if (!skipOnBeforeRouteHook) {
|
|
21
|
-
const pageContextFromOnBeforeRouteHook = await
|
|
20
|
+
const pageContextFromOnBeforeRouteHook = await executeOnBeforeRouteHook(pageContext);
|
|
22
21
|
if (pageContextFromOnBeforeRouteHook) {
|
|
23
22
|
if (pageContextFromOnBeforeRouteHook._routingProvidedByOnBeforeRouteHook) {
|
|
24
23
|
assert(pageContextFromOnBeforeRouteHook.pageId);
|
|
@@ -2,12 +2,12 @@ export { resolveRouteFunction };
|
|
|
2
2
|
export { assertRouteParams };
|
|
3
3
|
export { assertSyncRouting };
|
|
4
4
|
export { warnDeprecatedAllowKey };
|
|
5
|
-
import {
|
|
5
|
+
import { execHookSync } from '../hooks/execHook.js';
|
|
6
6
|
import { preparePageContextForPublicUsage } from '../preparePageContextForPublicUsage.js';
|
|
7
7
|
import { assert, assertUsage, assertWarning, hasProp, isPlainObject, isPromise } from './utils.js';
|
|
8
8
|
import pc from '@brillout/picocolors';
|
|
9
9
|
async function resolveRouteFunction(routeFunction, pageContext, routeFunctionFilePath) {
|
|
10
|
-
let { hookReturn: result } =
|
|
10
|
+
let { hookReturn: result } = execHookSync({
|
|
11
11
|
hookFn: routeFunction,
|
|
12
12
|
hookFilePath: routeFunctionFilePath,
|
|
13
13
|
hookName: 'route',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const PROJECT_VERSION: "0.4.232
|
|
1
|
+
export declare const PROJECT_VERSION: "0.4.232";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// Automatically updated by @brillout/release-me
|
|
2
|
-
export const PROJECT_VERSION = '0.4.232
|
|
2
|
+
export const PROJECT_VERSION = '0.4.232';
|
package/package.json
CHANGED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
export { execHookDataAndOnBeforeRender };
|
|
2
|
-
import { type PageContextExecHookServer } from './execHookServer.js';
|
|
3
|
-
declare function execHookDataAndOnBeforeRender(pageContext: {
|
|
4
|
-
pageId: string;
|
|
5
|
-
_pageContextAlreadyProvidedByOnPrerenderHook?: true;
|
|
6
|
-
} & PageContextExecHookServer): Promise<void>;
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export { execHookGuard };
|
|
2
|
-
import { type PageContextExecHook } from '../hooks/execHook.js';
|
|
3
|
-
import type { GlobalContextInternal } from '../createGlobalContextShared.js';
|
|
4
|
-
declare function execHookGuard<PageContext extends {
|
|
5
|
-
pageId: string;
|
|
6
|
-
} & {
|
|
7
|
-
_globalContext: GlobalContextInternal;
|
|
8
|
-
} & PageContextExecHook>(pageContext: PageContext, prepareForPublicUsage: (pageConfig: PageContext) => PageContext): Promise<void>;
|