vike 0.4.232-commit-ec54a7e → 0.4.232-commit-1690f53
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 +3 -3
- package/dist/cjs/node/runtime/renderPage/{executeOnBeforeRenderAndDataHooks.js → execHookDataAndOnBeforeRender.js} +2 -2
- package/dist/cjs/node/runtime/renderPage/{executeOnRenderHtmlHook.js → execHookOnRenderHtml.js} +3 -3
- package/dist/cjs/node/runtime/renderPage/loadPageConfigsLazyServerSide.js +4 -4
- package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +11 -11
- package/dist/cjs/node/runtime/renderPage.js +1 -1
- package/dist/cjs/node/vite/shared/resolveVikeConfigInternal/configDefinitionsBuiltIn.js +0 -2
- package/dist/cjs/shared/hooks/execHook.js +31 -54
- package/dist/cjs/shared/route/{executeGuardHook.js → execHookGuard.js} +3 -3
- package/dist/cjs/shared/route/{executeOnBeforeRouteHook.js → execHookOnBeforeRoute.js} +4 -4
- package/dist/cjs/shared/route/index.js +2 -2
- package/dist/cjs/shared/route/resolveRouteFunction.js +1 -1
- package/dist/cjs/utils/PROJECT_VERSION.js +1 -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/prefetch.js +2 -2
- package/dist/esm/client/runtime-client-routing/renderPageClientSide.js +88 -65
- package/dist/esm/client/runtime-server-routing/createPageContextClientSide.js +4 -4
- package/dist/esm/client/runtime-server-routing/entry.js +2 -2
- package/dist/esm/client/shared/{executeOnRenderClientHook.d.ts → execHookOnRenderClient.d.ts} +2 -2
- package/dist/esm/client/shared/{executeOnRenderClientHook.js → execHookOnRenderClient.js} +4 -4
- package/dist/esm/client/shared/loadPageConfigsLazyClientSide.d.ts +5 -7
- package/dist/esm/client/shared/loadPageConfigsLazyClientSide.js +6 -6
- package/dist/esm/node/prerender/runPrerender.js +5 -5
- package/dist/esm/node/runtime/renderPage/createHttpResponse.d.ts +1 -1
- package/dist/esm/node/runtime/renderPage/execHookDataAndOnBeforeRender.d.ts +6 -0
- package/dist/esm/node/runtime/renderPage/{executeOnBeforeRenderAndDataHooks.js → execHookDataAndOnBeforeRender.js} +2 -2
- package/dist/esm/node/runtime/renderPage/{executeOnRenderHtmlHook.d.ts → execHookOnRenderHtml.d.ts} +2 -2
- package/dist/esm/node/runtime/renderPage/{executeOnRenderHtmlHook.js → execHookOnRenderHtml.js} +4 -4
- package/dist/esm/node/runtime/renderPage/execHookServer.d.ts +3 -3
- package/dist/esm/node/runtime/renderPage/getHttpResponseBody.d.ts +1 -1
- package/dist/esm/node/runtime/renderPage/loadPageConfigsLazyServerSide.d.ts +6 -6
- package/dist/esm/node/runtime/renderPage/loadPageConfigsLazyServerSide.js +4 -4
- package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +12 -12
- package/dist/esm/node/runtime/renderPage.js +2 -2
- package/dist/esm/node/vite/shared/resolveVikeConfigInternal/configDefinitionsBuiltIn.js +0 -2
- package/dist/esm/shared/hooks/execHook.d.ts +14 -29
- package/dist/esm/shared/hooks/execHook.js +31 -54
- package/dist/esm/shared/route/execHookGuard.d.ts +8 -0
- package/dist/esm/shared/route/{executeGuardHook.js → execHookGuard.js} +4 -4
- package/dist/esm/shared/route/{executeOnBeforeRouteHook.d.ts → execHookOnBeforeRoute.d.ts} +2 -2
- package/dist/esm/shared/route/{executeOnBeforeRouteHook.js → execHookOnBeforeRoute.js} +5 -5
- package/dist/esm/shared/route/index.js +2 -2
- 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/package.json +1 -1
- package/dist/esm/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.d.ts +0 -6
- package/dist/esm/shared/route/executeGuardHook.d.ts +0 -8
|
@@ -8,8 +8,8 @@ import { getPageContextFromClientHooks, getPageContextFromServerHooks, getPageCo
|
|
|
8
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
|
-
import {
|
|
12
|
-
import { isErrorFetchingStaticAssets,
|
|
11
|
+
import { execHookOnRenderClient } from '../shared/execHookOnRenderClient.js';
|
|
12
|
+
import { isErrorFetchingStaticAssets, loadPageConfigsLazyClientSide, } from '../shared/loadPageConfigsLazyClientSide.js';
|
|
13
13
|
import { pushHistoryState } from './history.js';
|
|
14
14
|
import { assertNoInfiniteAbortLoop, getPageContextFromAllRewrites, isAbortError, logAbortErrorHandled, } from '../../shared/route/abort.js';
|
|
15
15
|
import { route } from '../../shared/route/index.js';
|
|
@@ -20,7 +20,7 @@ import { getErrorPageId } from '../../shared/error-page.js';
|
|
|
20
20
|
import { setPageContextCurrent } from './getPageContextCurrent.js';
|
|
21
21
|
import { getRouteStringParameterList } from '../../shared/route/resolveRouteString.js';
|
|
22
22
|
import { getCurrentUrl } from '../shared/getCurrentUrl.js';
|
|
23
|
-
import {
|
|
23
|
+
import { execHookDirect, execHook } from '../../shared/hooks/execHook.js';
|
|
24
24
|
import { preparePageContextForPublicUsageClient, } from './preparePageContextForPublicUsageClient.js';
|
|
25
25
|
import { getHookFromPageContextNew } from '../../shared/hooks/getHook.js';
|
|
26
26
|
import { preparePageContextForPublicUsageClientMinimal } from '../shared/preparePageContextForPublicUsageClientShared.js';
|
|
@@ -73,9 +73,11 @@ async function renderPageClientSide(renderArgs) {
|
|
|
73
73
|
if (!globalObject.isTransitioning) {
|
|
74
74
|
globalObject.isTransitioning = true;
|
|
75
75
|
const hooks = getHookFromPageContextNew('onPageTransitionStart', previousPageContext);
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
76
|
+
try {
|
|
77
|
+
await execHookDirect(hooks, pageContext, preparePageContextForPublicUsageClientMinimal);
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
await onError(err);
|
|
79
81
|
return;
|
|
80
82
|
}
|
|
81
83
|
if (isRenderOutdated())
|
|
@@ -134,23 +136,17 @@ async function renderPageClientSide(renderArgs) {
|
|
|
134
136
|
assert(!('urlOriginal' in pageContextFromRoute));
|
|
135
137
|
objectAssign(pageContext, pageContextFromRoute);
|
|
136
138
|
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
if (handleErrorFetchingStaticAssets(err, pageContext, isFirstRender)) {
|
|
143
|
-
return;
|
|
144
|
-
}
|
|
145
|
-
else {
|
|
146
|
-
// A user file has a syntax error
|
|
147
|
-
await onError(err);
|
|
148
|
-
return;
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
augmentType(pageContext, pageContextAugmented);
|
|
152
|
-
if (isRenderOutdated())
|
|
139
|
+
const res = await loadPageConfigsLazyClientSideAndExecHook(pageContext, isFirstRender, isRenderOutdated);
|
|
140
|
+
/* Already called inside loadPageConfigsLazyClientSideAndExecHook()
|
|
141
|
+
if (isRenderOutdated()) return
|
|
142
|
+
*/
|
|
143
|
+
if (res.skip)
|
|
153
144
|
return;
|
|
145
|
+
if ('err' in res) {
|
|
146
|
+
await onError(res.err);
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
augmentType(pageContext, res.pageContext);
|
|
154
150
|
setPageContextCurrent(pageContext);
|
|
155
151
|
// Set global hydrationCanBeAborted
|
|
156
152
|
if (pageContext.exports.hydrationCanBeAborted) {
|
|
@@ -317,23 +313,17 @@ async function renderPageClientSide(renderArgs) {
|
|
|
317
313
|
redirectHard(urlOriginal);
|
|
318
314
|
return;
|
|
319
315
|
}
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
if (handleErrorFetchingStaticAssets(err, pageContext, isFirstRender)) {
|
|
326
|
-
return;
|
|
327
|
-
}
|
|
328
|
-
else {
|
|
329
|
-
// A user file has a syntax error
|
|
330
|
-
onError(err);
|
|
331
|
-
return;
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
augmentType(pageContext, pageContextAugmented);
|
|
335
|
-
if (isRenderOutdated())
|
|
316
|
+
const res = await loadPageConfigsLazyClientSideAndExecHook(pageContext, isFirstRender, isRenderOutdated);
|
|
317
|
+
/* Already called inside loadPageConfigsLazyClientSideAndExecHook()
|
|
318
|
+
if (isRenderOutdated()) return
|
|
319
|
+
*/
|
|
320
|
+
if (res.skip)
|
|
336
321
|
return;
|
|
322
|
+
if ('err' in res) {
|
|
323
|
+
onError(res.err);
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
326
|
+
augmentType(pageContext, res.pageContext);
|
|
337
327
|
setPageContextCurrent(pageContext);
|
|
338
328
|
let pageContextFromServerHooks;
|
|
339
329
|
try {
|
|
@@ -389,7 +379,7 @@ async function renderPageClientSide(renderArgs) {
|
|
|
389
379
|
const onRenderClientPromise = (async () => {
|
|
390
380
|
let onRenderClientError;
|
|
391
381
|
try {
|
|
392
|
-
await
|
|
382
|
+
await execHookOnRenderClient(pageContext, preparePageContextForPublicUsageClient);
|
|
393
383
|
}
|
|
394
384
|
catch (err) {
|
|
395
385
|
onRenderClientError = err;
|
|
@@ -411,9 +401,11 @@ async function renderPageClientSide(renderArgs) {
|
|
|
411
401
|
*/
|
|
412
402
|
// onHydrationEnd()
|
|
413
403
|
if (isFirstRender && !onRenderClientError) {
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
404
|
+
try {
|
|
405
|
+
await execHook('onHydrationEnd', pageContext, preparePageContextForPublicUsageClient);
|
|
406
|
+
}
|
|
407
|
+
catch (err) {
|
|
408
|
+
await onError(err);
|
|
417
409
|
if (!isErrorPage)
|
|
418
410
|
return;
|
|
419
411
|
}
|
|
@@ -428,9 +420,11 @@ async function renderPageClientSide(renderArgs) {
|
|
|
428
420
|
globalObject.isTransitioning = undefined;
|
|
429
421
|
assert(previousPageContext);
|
|
430
422
|
const hooks = getHookFromPageContextNew('onPageTransitionEnd', previousPageContext);
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
423
|
+
try {
|
|
424
|
+
await execHookDirect(hooks, pageContext, preparePageContextForPublicUsageClient);
|
|
425
|
+
}
|
|
426
|
+
catch (err) {
|
|
427
|
+
await onError(err);
|
|
434
428
|
if (!isErrorPage)
|
|
435
429
|
return;
|
|
436
430
|
}
|
|
@@ -497,22 +491,6 @@ function changeUrl(url, overwriteLastHistoryEntry) {
|
|
|
497
491
|
return;
|
|
498
492
|
pushHistoryState(url, overwriteLastHistoryEntry);
|
|
499
493
|
}
|
|
500
|
-
function handleErrorFetchingStaticAssets(err, pageContext, isFirstRender) {
|
|
501
|
-
if (!isErrorFetchingStaticAssets(err)) {
|
|
502
|
-
return false;
|
|
503
|
-
}
|
|
504
|
-
if (isFirstRender) {
|
|
505
|
-
disableClientRouting(err, false);
|
|
506
|
-
// This may happen if the frontend was newly deployed during hydration.
|
|
507
|
-
// Ideally: re-try a couple of times by reloading the page (not entirely trivial to implement since `localStorage` is needed.)
|
|
508
|
-
throw err;
|
|
509
|
-
}
|
|
510
|
-
else {
|
|
511
|
-
disableClientRouting(err, true);
|
|
512
|
-
}
|
|
513
|
-
redirectHard(pageContext.urlOriginal);
|
|
514
|
-
return true;
|
|
515
|
-
}
|
|
516
494
|
function disableClientRouting(err, log) {
|
|
517
495
|
assert(isErrorFetchingStaticAssets(err));
|
|
518
496
|
globalObject.clientRoutingIsDisabled = true;
|
|
@@ -602,9 +580,54 @@ function areKeysEqual(key1, key2) {
|
|
|
602
580
|
function getPageContextClient() {
|
|
603
581
|
return globalObject.renderedPageContext ?? null;
|
|
604
582
|
}
|
|
605
|
-
async function
|
|
606
|
-
|
|
583
|
+
async function loadPageConfigsLazyClientSideAndExecHook(pageContext, isFirstRender, isRenderOutdated) {
|
|
584
|
+
let hasErr = false;
|
|
585
|
+
let err;
|
|
586
|
+
let pageContextAddendum;
|
|
587
|
+
try {
|
|
588
|
+
pageContextAddendum = await loadPageConfigsLazyClientSide(pageContext.pageId, pageContext._pageFilesAll, pageContext._globalContext._pageConfigs, pageContext._globalContext._pageConfigGlobal);
|
|
589
|
+
}
|
|
590
|
+
catch (err_) {
|
|
591
|
+
err = err_;
|
|
592
|
+
hasErr = true;
|
|
593
|
+
if (handleErrorFetchingStaticAssets(err, pageContext, isFirstRender)) {
|
|
594
|
+
return { skip: true };
|
|
595
|
+
}
|
|
596
|
+
else {
|
|
597
|
+
// Syntax error in user file
|
|
598
|
+
}
|
|
599
|
+
}
|
|
600
|
+
if (isRenderOutdated())
|
|
601
|
+
return { skip: true };
|
|
602
|
+
if (hasErr)
|
|
603
|
+
return { err };
|
|
607
604
|
objectAssign(pageContext, pageContextAddendum);
|
|
608
|
-
|
|
609
|
-
|
|
605
|
+
try {
|
|
606
|
+
await execHook('onCreatePageContext', pageContext, preparePageContextForPublicUsageClient);
|
|
607
|
+
}
|
|
608
|
+
catch (err_) {
|
|
609
|
+
err = err;
|
|
610
|
+
hasErr = true;
|
|
611
|
+
}
|
|
612
|
+
if (isRenderOutdated())
|
|
613
|
+
return { skip: true };
|
|
614
|
+
if (hasErr)
|
|
615
|
+
return { err };
|
|
616
|
+
return { pageContext };
|
|
617
|
+
}
|
|
618
|
+
function handleErrorFetchingStaticAssets(err, pageContext, isFirstRender) {
|
|
619
|
+
if (!isErrorFetchingStaticAssets(err)) {
|
|
620
|
+
return false;
|
|
621
|
+
}
|
|
622
|
+
if (isFirstRender) {
|
|
623
|
+
disableClientRouting(err, false);
|
|
624
|
+
// This may happen if the frontend was newly deployed during hydration.
|
|
625
|
+
// Ideally: re-try a couple of times by reloading the page (not entirely trivial to implement since `localStorage` is needed.)
|
|
626
|
+
throw err;
|
|
627
|
+
}
|
|
628
|
+
else {
|
|
629
|
+
disableClientRouting(err, true);
|
|
630
|
+
}
|
|
631
|
+
redirectHard(pageContext.urlOriginal);
|
|
632
|
+
return true;
|
|
610
633
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { createPageContextClientSide };
|
|
2
2
|
import { assertUsage, augmentType, objectAssign } from './utils.js';
|
|
3
3
|
import { getPageContextSerializedInHtml } from '../shared/getJsonSerializedInHtml.js';
|
|
4
|
-
import {
|
|
4
|
+
import { loadPageConfigsLazyClientSide, } from '../shared/loadPageConfigsLazyClientSide.js';
|
|
5
5
|
import { getCurrentUrl } from '../shared/getCurrentUrl.js';
|
|
6
6
|
import { createPageContextObject, createPageContextShared } from '../../shared/createPageContextShared.js';
|
|
7
7
|
import { getGlobalContextClientInternal } from './globalContext.js';
|
|
@@ -24,7 +24,7 @@ async function createPageContextClientSide() {
|
|
|
24
24
|
// Sets pageContext.config to global configs
|
|
25
25
|
augmentType(pageContextCreated, await createPageContextShared(pageContextCreated, globalContext._pageConfigGlobal, globalContext._vikeConfigPublicGlobal));
|
|
26
26
|
// Sets pageContext.config to local configs (overrides the pageContext.config set above)
|
|
27
|
-
augmentType(pageContextCreated, await
|
|
27
|
+
augmentType(pageContextCreated, await loadPageConfigsLazyClientSideAndExecHook(pageContextCreated));
|
|
28
28
|
assertPristineUrl();
|
|
29
29
|
return pageContextCreated;
|
|
30
30
|
}
|
|
@@ -32,8 +32,8 @@ function assertPristineUrl() {
|
|
|
32
32
|
const urlCurrent = getCurrentUrl({ withoutHash: true });
|
|
33
33
|
assertUsage(urlFirst === urlCurrent, `The URL was manipulated before the hydration finished ('${urlFirst}' to '${urlCurrent}'). Ensure the hydration has finished before manipulating the URL. Consider using the onHydrationEnd() hook.`);
|
|
34
34
|
}
|
|
35
|
-
async function
|
|
36
|
-
const pageContextAddendum = await
|
|
35
|
+
async function loadPageConfigsLazyClientSideAndExecHook(pageContext) {
|
|
36
|
+
const pageContextAddendum = await loadPageConfigsLazyClientSide(pageContext.pageId, pageContext._pageFilesAll, pageContext._globalContext._pageConfigs, pageContext._globalContext._pageConfigGlobal);
|
|
37
37
|
objectAssign(pageContext, pageContextAddendum);
|
|
38
38
|
await execHook('onCreatePageContext', pageContext, preparePageContextForPublicUsageClient);
|
|
39
39
|
return pageContext;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { assertServerRouting } from '../../utils/assertRoutingType.js';
|
|
2
2
|
assertServerRouting();
|
|
3
3
|
import { createPageContextClientSide } from './createPageContextClientSide.js';
|
|
4
|
-
import {
|
|
4
|
+
import { execHookOnRenderClient } from '../shared/execHookOnRenderClient.js';
|
|
5
5
|
import { assertSingleInstance_onClientEntryServerRouting } from './utils.js';
|
|
6
6
|
import { removeFoucBuster } from '../shared/removeFoucBuster.js';
|
|
7
7
|
import { execHook } from '../../shared/hooks/execHook.js';
|
|
@@ -14,6 +14,6 @@ if (import.meta.env.DEV)
|
|
|
14
14
|
hydrate();
|
|
15
15
|
async function hydrate() {
|
|
16
16
|
const pageContext = await createPageContextClientSide();
|
|
17
|
-
await
|
|
17
|
+
await execHookOnRenderClient(pageContext, preparePageContextForPublicUsageClient);
|
|
18
18
|
await execHook('onHydrationEnd', pageContext, preparePageContextForPublicUsageClient);
|
|
19
19
|
}
|
package/dist/esm/client/shared/{executeOnRenderClientHook.d.ts → execHookOnRenderClient.d.ts}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { execHookOnRenderClient };
|
|
2
2
|
export type { PageContextBeforeRenderClient };
|
|
3
3
|
import type { PageFile, VikeConfigPublicPageLazy } from '../../shared/getPageFiles.js';
|
|
4
4
|
import type { PageContextForPublicUsageClientShared } from './preparePageContextForPublicUsageClientShared.js';
|
|
@@ -10,4 +10,4 @@ type PageContextBeforeRenderClient = {
|
|
|
10
10
|
pageId: string;
|
|
11
11
|
_globalContext: GlobalContextClientInternalShared;
|
|
12
12
|
} & VikeConfigPublicPageLazy & PageContextForPublicUsageClientShared;
|
|
13
|
-
declare function
|
|
13
|
+
declare function execHookOnRenderClient<PageContext extends PageContextBeforeRenderClient>(pageContext: PageContext, prepareForPublicUsage: (pageConfig: PageContext) => PageContext): Promise<void>;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { execHookOnRenderClient };
|
|
2
2
|
import { assert, assertUsage } from '../runtime-server-routing/utils.js';
|
|
3
3
|
import { getHookFromPageContext } from '../../shared/hooks/getHook.js';
|
|
4
|
-
import {
|
|
5
|
-
async function
|
|
4
|
+
import { execHookDirectSingle } from '../../shared/hooks/execHook.js';
|
|
5
|
+
async function execHookOnRenderClient(pageContext, prepareForPublicUsage) {
|
|
6
6
|
let hook = null;
|
|
7
7
|
{
|
|
8
8
|
const renderHook = getHookFromPageContext(pageContext, 'render');
|
|
@@ -38,7 +38,7 @@ async function executeOnRenderClientHook(pageContext, prepareForPublicUsage) {
|
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
// We don't use a try-catch wrapper because rendering errors are usually handled by the UI framework. (E.g. React's Error Boundaries.)
|
|
41
|
-
await
|
|
41
|
+
await execHookDirectSingle(hook, pageContext, prepareForPublicUsage);
|
|
42
42
|
}
|
|
43
43
|
function getUrlToShowToUser(pageContext) {
|
|
44
44
|
let url;
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { loadPageConfigsLazyClientSide };
|
|
2
2
|
export type { PageContext_loadPageConfigsLazyClientSide };
|
|
3
3
|
export { isErrorFetchingStaticAssets };
|
|
4
|
-
import { type PageFile
|
|
4
|
+
import { type PageFile } from '../../shared/getPageFiles.js';
|
|
5
5
|
import type { PageConfigGlobalRuntime, PageConfigRuntime } from '../../types/PageConfig.js';
|
|
6
|
-
import { PageContextPrepareMinimum } from '../../shared/preparePageContextForPublicUsage.js';
|
|
7
6
|
type PageContext_loadPageConfigsLazyClientSide = {
|
|
8
7
|
pageId: string;
|
|
9
8
|
_pageFilesAll: PageFile[];
|
|
@@ -11,9 +10,8 @@ type PageContext_loadPageConfigsLazyClientSide = {
|
|
|
11
10
|
_pageConfigs: PageConfigRuntime[];
|
|
12
11
|
_pageConfigGlobal: PageConfigGlobalRuntime;
|
|
13
12
|
};
|
|
14
|
-
} & PageContextPrepareMinimum;
|
|
15
|
-
type PageContextUserFilesLoaded = VikeConfigPublicPageLazy & {
|
|
16
|
-
_pageFilesLoaded: PageFile[];
|
|
17
13
|
};
|
|
18
|
-
declare function
|
|
14
|
+
declare function loadPageConfigsLazyClientSide(pageId: string, pageFilesAll: PageFile[], pageConfigs: PageConfigRuntime[], pageConfigGlobal: PageConfigGlobalRuntime): Promise<import("../../shared/getPageFiles.js").VikeConfigPublicPageLazy & {
|
|
15
|
+
_pageFilesLoaded: PageFile[];
|
|
16
|
+
}>;
|
|
19
17
|
declare function isErrorFetchingStaticAssets(err: unknown): boolean;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { loadPageConfigsLazyClientSide };
|
|
2
2
|
export { isErrorFetchingStaticAssets };
|
|
3
3
|
import { getPageFilesClientSide } from '../../shared/getPageFiles.js';
|
|
4
4
|
import { resolveVikeConfigPublicPageLazy } from '../../shared/page-configs/resolveVikeConfigPublic.js';
|
|
5
5
|
import { findPageConfig } from '../../shared/page-configs/findPageConfig.js';
|
|
6
6
|
import { loadConfigValues } from '../../shared/page-configs/loadConfigValues.js';
|
|
7
7
|
import { objectAssign } from '../runtime-server-routing/utils.js';
|
|
8
|
-
const
|
|
9
|
-
async function
|
|
8
|
+
const errStamp = '_isAssetsError';
|
|
9
|
+
async function loadPageConfigsLazyClientSide(pageId, pageFilesAll, pageConfigs, pageConfigGlobal) {
|
|
10
10
|
const pageFilesClientSide = getPageFilesClientSide(pageFilesAll, pageId);
|
|
11
11
|
const pageConfig = findPageConfig(pageConfigs, pageId);
|
|
12
12
|
let pageConfigLoaded;
|
|
@@ -23,10 +23,10 @@ async function loadPageConfigsLazy(pageId, pageFilesAll, pageConfigs, pageConfig
|
|
|
23
23
|
}
|
|
24
24
|
catch (err) {
|
|
25
25
|
if (isFetchError(err)) {
|
|
26
|
-
Object.assign(err, { [
|
|
26
|
+
Object.assign(err, { [errStamp]: true });
|
|
27
27
|
}
|
|
28
28
|
else {
|
|
29
|
-
//
|
|
29
|
+
// Syntax error in user file
|
|
30
30
|
}
|
|
31
31
|
throw err;
|
|
32
32
|
}
|
|
@@ -40,7 +40,7 @@ function isErrorFetchingStaticAssets(err) {
|
|
|
40
40
|
if (!err) {
|
|
41
41
|
return false;
|
|
42
42
|
}
|
|
43
|
-
return err[
|
|
43
|
+
return err[errStamp] === true;
|
|
44
44
|
}
|
|
45
45
|
// https://stackoverflow.com/questions/75928310/how-to-detect-that-import-some-url-failed-because-some-url-isnt-a-javasc
|
|
46
46
|
function isFetchError(err) {
|
|
@@ -18,11 +18,11 @@ import { getConfigValueRuntime } from '../../shared/page-configs/getConfigValueR
|
|
|
18
18
|
import { loadConfigValues } from '../../shared/page-configs/loadConfigValues.js';
|
|
19
19
|
import { getErrorPageId, isErrorPage } from '../../shared/error-page.js';
|
|
20
20
|
import { isAbortError } from '../../shared/route/abort.js';
|
|
21
|
-
import {
|
|
21
|
+
import { loadPageConfigsLazyServerSideAndExecHook } from '../runtime/renderPage/loadPageConfigsLazyServerSide.js';
|
|
22
22
|
import { getHookFromPageConfig, getHookFromPageConfigGlobal, getHookTimeoutDefault, getHook_setIsPrerenderering, } from '../../shared/hooks/getHook.js';
|
|
23
23
|
import { noRouteMatch } from '../../shared/route/noRouteMatch.js';
|
|
24
24
|
import { getVikeConfigInternal } from '../vite/shared/resolveVikeConfigInternal.js';
|
|
25
|
-
import {
|
|
25
|
+
import { execHookDirectWithoutPageContext, isUserHookError } from '../../shared/hooks/execHook.js';
|
|
26
26
|
import { setWasPrerenderRun } from './context.js';
|
|
27
27
|
import { resolvePrerenderConfigGlobal, resolvePrerenderConfigLocal } from './resolvePrerenderConfig.js';
|
|
28
28
|
import { getOutDirs } from '../vite/shared/getOutDirs.js';
|
|
@@ -216,7 +216,7 @@ async function callOnBeforePrerenderStartHooks(prerenderContext, globalContext,
|
|
|
216
216
|
if (doNotPrerenderList.find((p) => p.pageId === pageId))
|
|
217
217
|
return;
|
|
218
218
|
const { hookName, hookFilePath } = hook;
|
|
219
|
-
const prerenderResult = await
|
|
219
|
+
const prerenderResult = await execHookDirectWithoutPageContext(() => hook.hookFn(), hook);
|
|
220
220
|
const result = normalizeOnPrerenderHookResult(prerenderResult, hookFilePath, hookName);
|
|
221
221
|
// Handle result
|
|
222
222
|
await Promise.all(result.map(async ({ url, pageContext }) => {
|
|
@@ -323,7 +323,7 @@ async function createPageContextPrerendering(urlOriginal, prerenderContext, glob
|
|
|
323
323
|
routeParams: {},
|
|
324
324
|
});
|
|
325
325
|
}
|
|
326
|
-
augmentType(pageContext, await
|
|
326
|
+
augmentType(pageContext, await loadPageConfigsLazyServerSideAndExecHook(pageContext));
|
|
327
327
|
let usesClientRouter;
|
|
328
328
|
{
|
|
329
329
|
const { pageId } = pageContext;
|
|
@@ -444,7 +444,7 @@ async function callOnPrerenderStartHook(prerenderContext, globalContext, concurr
|
|
|
444
444
|
preservePropertyGetters(pageContext);
|
|
445
445
|
});
|
|
446
446
|
const prerenderContextPublic = preparePrerenderContextForPublicUsage(prerenderContext);
|
|
447
|
-
let result = await
|
|
447
|
+
let result = await execHookDirectWithoutPageContext(() => hookFn(prerenderContextPublic), onPrerenderStartHook);
|
|
448
448
|
// Before applying result
|
|
449
449
|
prerenderContext.pageContexts.forEach((pageContext) => {
|
|
450
450
|
;
|
|
@@ -8,7 +8,7 @@ export { createHttpResponseBaseIsMissing };
|
|
|
8
8
|
export type { HttpResponse };
|
|
9
9
|
import type { GetPageAssets } from './getPageAssets.js';
|
|
10
10
|
import type { HtmlRender } from '../html/renderHtml.js';
|
|
11
|
-
import type { RenderHook } from './
|
|
11
|
+
import type { RenderHook } from './execHookOnRenderHtml.js';
|
|
12
12
|
import type { RedirectStatusCode, AbortStatusCode, UrlRedirect } from '../../../shared/route/abort.js';
|
|
13
13
|
import { HttpResponseBody } from './getHttpResponseBody.js';
|
|
14
14
|
import { type EarlyHint } from './getEarlyHints.js';
|
|
@@ -0,0 +1,6 @@
|
|
|
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,7 +1,7 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { execHookDataAndOnBeforeRender };
|
|
2
2
|
import { assertOnBeforeRenderHookReturn } from '../../../shared/assertOnBeforeRenderHookReturn.js';
|
|
3
3
|
import { execHookServer } from './execHookServer.js';
|
|
4
|
-
async function
|
|
4
|
+
async function execHookDataAndOnBeforeRender(pageContext) {
|
|
5
5
|
if (pageContext._pageContextAlreadyProvidedByOnPrerenderHook) {
|
|
6
6
|
return;
|
|
7
7
|
}
|
package/dist/esm/node/runtime/renderPage/{executeOnRenderHtmlHook.d.ts → execHookOnRenderHtml.d.ts}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { execHookOnRenderHtml };
|
|
2
2
|
export type { RenderHook };
|
|
3
3
|
import { type HtmlRender } from '../html/renderHtml.js';
|
|
4
4
|
import { type Hook } from '../../../shared/hooks/getHook.js';
|
|
@@ -11,7 +11,7 @@ type RenderHook = Hook & {
|
|
|
11
11
|
hookName: HookName;
|
|
12
12
|
};
|
|
13
13
|
type HookName = 'onRenderHtml' | 'render';
|
|
14
|
-
declare function
|
|
14
|
+
declare function execHookOnRenderHtml(pageContext: PageContextForPublicUsageServer & PageContextSerialization & {
|
|
15
15
|
pageId: string;
|
|
16
16
|
_globalContext: GlobalContextServerInternal;
|
|
17
17
|
__getPageAssets: GetPageAssets;
|
package/dist/esm/node/runtime/renderPage/{executeOnRenderHtmlHook.js → execHookOnRenderHtml.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { execHookOnRenderHtml };
|
|
2
2
|
import { isDocumentHtml, renderDocumentHtml, dangerouslySkipEscape, } from '../html/renderHtml.js';
|
|
3
3
|
import { getHookFromPageContext } from '../../../shared/hooks/getHook.js';
|
|
4
4
|
import { assert, assertUsage, assertWarning, isObject, objectAssign, isPromise, isCallable } from '../utils.js';
|
|
@@ -8,11 +8,11 @@ import { preparePageContextForPublicUsageServer, } from './preparePageContextFor
|
|
|
8
8
|
import { assertHookReturnedObject } from '../../../shared/assertHookReturnedObject.js';
|
|
9
9
|
import { logRuntimeError } from '../loggerRuntime.js';
|
|
10
10
|
import pc from '@brillout/picocolors';
|
|
11
|
-
import {
|
|
12
|
-
async function
|
|
11
|
+
import { execHookDirectSingleWithReturn } from '../../../shared/hooks/execHook.js';
|
|
12
|
+
async function execHookOnRenderHtml(pageContext) {
|
|
13
13
|
const hook = getRenderHook(pageContext);
|
|
14
14
|
objectAssign(pageContext, { _renderHook: hook });
|
|
15
|
-
const { hookReturn } = await
|
|
15
|
+
const { hookReturn } = await execHookDirectSingleWithReturn(hook, pageContext, preparePageContextForPublicUsageServer);
|
|
16
16
|
const { documentHtml, pageContextProvidedByRenderHook, pageContextPromise, injectFilter } = processHookReturnValue(hookReturn, hook);
|
|
17
17
|
Object.assign(pageContext, pageContextProvidedByRenderHook);
|
|
18
18
|
objectAssign(pageContext, { _pageContextPromise: pageContextPromise });
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
export { execHookServer };
|
|
2
|
-
export type {
|
|
2
|
+
export type { PageContextExecHookServer };
|
|
3
3
|
import { type PageContextForPublicUsageServer } from './preparePageContextForPublicUsageServer.js';
|
|
4
4
|
import type { VikeConfigPublicPageLazy } from '../../../shared/getPageFiles.js';
|
|
5
5
|
import type { HookName } from '../../../types/Config.js';
|
|
6
|
-
type
|
|
7
|
-
declare function execHookServer(hookName: HookName, pageContext:
|
|
6
|
+
type PageContextExecHookServer = VikeConfigPublicPageLazy & PageContextForPublicUsageServer;
|
|
7
|
+
declare function execHookServer(hookName: HookName, pageContext: PageContextExecHookServer): Promise<(import("../../../shared/hooks/getHook.js").HookLoc & {
|
|
8
8
|
hookFn: (arg: import("../../../shared/preparePageContextForPublicUsage.js").PageContextPrepareMinimum | import("../../../shared/prepareGlobalContextForPublicUsage.js").GlobalContextPrepareMinimum) => unknown;
|
|
9
9
|
hookTimeout: import("../../../shared/hooks/getHook.js").HookTimeout;
|
|
10
10
|
} & {
|
|
@@ -3,7 +3,7 @@ export { getHttpResponseBodyStreamHandlers };
|
|
|
3
3
|
export type { HttpResponseBody };
|
|
4
4
|
import { StreamPipeNode, StreamPipeWeb, StreamReadableNode, StreamReadableWeb, StreamWritableNode, StreamWritableWeb } from '../html/stream.js';
|
|
5
5
|
import { type HtmlRender } from '../html/renderHtml.js';
|
|
6
|
-
import type { RenderHook } from './
|
|
6
|
+
import type { RenderHook } from './execHookOnRenderHtml.js';
|
|
7
7
|
type HttpResponseBody = {
|
|
8
8
|
body: string;
|
|
9
9
|
pipe: (writable: StreamWritableWeb | StreamWritableNode) => void;
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { loadPageConfigsLazyServerSideAndExecHook };
|
|
2
2
|
export type { PageContext_loadPageConfigsLazyServerSide };
|
|
3
3
|
export type { PageConfigsLazy };
|
|
4
4
|
import { PromiseType } from '../utils.js';
|
|
5
5
|
import { PageContextGetPageAssets, type PageAsset } from './getPageAssets.js';
|
|
6
6
|
import { type PageContextDebugRouteMatches } from './debugPageFiles.js';
|
|
7
7
|
import type { GlobalContextServerInternal } from '../globalContext.js';
|
|
8
|
-
import { type
|
|
9
|
-
type
|
|
8
|
+
import { type PageContextExecHookServer } from './execHookServer.js';
|
|
9
|
+
type PageContextExecuteHook = Omit<PageContextExecHookServer, keyof Awaited<ReturnType<typeof loadPageConfigsLazyServerSide>>>;
|
|
10
10
|
type PageContext_loadPageConfigsLazyServerSide = PageContextGetPageAssets & PageContextDebugRouteMatches & {
|
|
11
11
|
pageId: string;
|
|
12
12
|
urlOriginal: string;
|
|
13
13
|
_globalContext: GlobalContextServerInternal;
|
|
14
14
|
};
|
|
15
|
-
type PageConfigsLazy = PromiseType<ReturnType<typeof
|
|
16
|
-
declare function
|
|
15
|
+
type PageConfigsLazy = PromiseType<ReturnType<typeof loadPageConfigsLazyServerSide>>;
|
|
16
|
+
declare function loadPageConfigsLazyServerSideAndExecHook<PageContext extends PageContext_loadPageConfigsLazyServerSide & PageContextExecuteHook>(pageContext: PageContext): Promise<PageContext & import("../../../shared/getPageFiles.js").VikeConfigPublicPageLazy & {
|
|
17
17
|
Page: unknown;
|
|
18
18
|
_isHtmlOnly: boolean;
|
|
19
19
|
_passToClient: string[];
|
|
@@ -21,7 +21,7 @@ declare function loadPageConfigsLazyServerSide<PageContext extends PageContext_l
|
|
|
21
21
|
} & {
|
|
22
22
|
__getPageAssets: () => Promise<PageAsset[]>;
|
|
23
23
|
}>;
|
|
24
|
-
declare function
|
|
24
|
+
declare function loadPageConfigsLazyServerSide(pageContext: PageContext_loadPageConfigsLazyServerSide): Promise<import("../../../shared/getPageFiles.js").VikeConfigPublicPageLazy & {
|
|
25
25
|
Page: unknown;
|
|
26
26
|
_isHtmlOnly: boolean;
|
|
27
27
|
_passToClient: string[];
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { loadPageConfigsLazyServerSideAndExecHook };
|
|
2
2
|
import { getPageFilesServerSide } from '../../../shared/getPageFiles.js';
|
|
3
3
|
import { resolveVikeConfigPublicPageLazy } from '../../../shared/page-configs/resolveVikeConfigPublic.js';
|
|
4
4
|
import { analyzePageClientSideInit } from '../../../shared/getPageFiles/analyzePageClientSide.js';
|
|
@@ -9,13 +9,13 @@ import { findPageConfig } from '../../../shared/page-configs/findPageConfig.js';
|
|
|
9
9
|
import { analyzePage } from './analyzePage.js';
|
|
10
10
|
import { loadConfigValues } from '../../../shared/page-configs/loadConfigValues.js';
|
|
11
11
|
import { execHookServer } from './execHookServer.js';
|
|
12
|
-
async function
|
|
13
|
-
const pageContextAddendum = await
|
|
12
|
+
async function loadPageConfigsLazyServerSideAndExecHook(pageContext) {
|
|
13
|
+
const pageContextAddendum = await loadPageConfigsLazyServerSide(pageContext);
|
|
14
14
|
objectAssign(pageContext, pageContextAddendum);
|
|
15
15
|
await execHookServer('onCreatePageContext', pageContext);
|
|
16
16
|
return pageContext;
|
|
17
17
|
}
|
|
18
|
-
async function
|
|
18
|
+
async function loadPageConfigsLazyServerSide(pageContext) {
|
|
19
19
|
const pageConfig = findPageConfig(pageContext._globalContext._pageConfigs, pageContext.pageId); // Make pageConfig globally available as pageContext._pageConfig ?
|
|
20
20
|
const globalContext = pageContext._globalContext;
|
|
21
21
|
const [{ pageFilesLoaded, pageContextExports }] = await Promise.all([
|
|
@@ -5,13 +5,13 @@ import { getHtmlString } from '../html/renderHtml.js';
|
|
|
5
5
|
import { assert, assertUsage, augmentType, hasProp, objectAssign } from '../utils.js';
|
|
6
6
|
import { getPageContextClientSerialized } from '../html/serializeContext.js';
|
|
7
7
|
import { createHttpResponsePage, createHttpResponsePageContextJson } from './createHttpResponse.js';
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
8
|
+
import { loadPageConfigsLazyServerSideAndExecHook, } from './loadPageConfigsLazyServerSide.js';
|
|
9
|
+
import { execHookOnRenderHtml } from './execHookOnRenderHtml.js';
|
|
10
|
+
import { execHookDataAndOnBeforeRender } from './execHookDataAndOnBeforeRender.js';
|
|
11
11
|
import { logRuntimeError } from '../loggerRuntime.js';
|
|
12
12
|
import { isNewError } from './isNewError.js';
|
|
13
13
|
import { preparePageContextForPublicUsageServer } from './preparePageContextForPublicUsageServer.js';
|
|
14
|
-
import {
|
|
14
|
+
import { execHookGuard } from '../../../shared/route/execHookGuard.js';
|
|
15
15
|
import pc from '@brillout/picocolors';
|
|
16
16
|
import { isServerSideError } from '../../../shared/misc/isServerSideError.js';
|
|
17
17
|
async function renderPageAlreadyRouted(pageContext) {
|
|
@@ -23,16 +23,16 @@ async function renderPageAlreadyRouted(pageContext) {
|
|
|
23
23
|
assert(isError ===
|
|
24
24
|
(pageContext.pageId ===
|
|
25
25
|
getErrorPageId(pageContext._globalContext._pageFilesAll, pageContext._globalContext._pageConfigs)));
|
|
26
|
-
augmentType(pageContext, await
|
|
26
|
+
augmentType(pageContext, await loadPageConfigsLazyServerSideAndExecHook(pageContext));
|
|
27
27
|
if (!isError) {
|
|
28
|
-
await
|
|
28
|
+
await execHookGuard(pageContext, (pageContext) => preparePageContextForPublicUsageServer(pageContext));
|
|
29
29
|
}
|
|
30
30
|
if (!isError) {
|
|
31
|
-
await
|
|
31
|
+
await execHookDataAndOnBeforeRender(pageContext);
|
|
32
32
|
}
|
|
33
33
|
else {
|
|
34
34
|
try {
|
|
35
|
-
await
|
|
35
|
+
await execHookDataAndOnBeforeRender(pageContext);
|
|
36
36
|
}
|
|
37
37
|
catch (err) {
|
|
38
38
|
if (isNewError(err, pageContext.errorWhileRendering)) {
|
|
@@ -49,7 +49,7 @@ async function renderPageAlreadyRouted(pageContext) {
|
|
|
49
49
|
objectAssign(pageContext, { httpResponse });
|
|
50
50
|
return pageContext;
|
|
51
51
|
}
|
|
52
|
-
const renderHookResult = await
|
|
52
|
+
const renderHookResult = await execHookOnRenderHtml(pageContext);
|
|
53
53
|
const { htmlRender, renderHook } = renderHookResult;
|
|
54
54
|
const httpResponse = await createHttpResponsePage(htmlRender, renderHook, pageContext);
|
|
55
55
|
objectAssign(pageContext, { httpResponse });
|
|
@@ -62,10 +62,10 @@ async function prerenderPage(pageContext) {
|
|
|
62
62
|
});
|
|
63
63
|
/* Should we execute the guard() hook upon pre-rendering? Is there a use case for this?
|
|
64
64
|
* - It isn't trivial to implement, as it requires to duplicate / factor out the isAbortError() handling
|
|
65
|
-
await
|
|
65
|
+
await execHookGuard(pageContext, (pageContext) => preparePageContextForPublicUsageServer(pageContext))
|
|
66
66
|
*/
|
|
67
|
-
await
|
|
68
|
-
const { htmlRender, renderHook } = await
|
|
67
|
+
await execHookDataAndOnBeforeRender(pageContext);
|
|
68
|
+
const { htmlRender, renderHook } = await execHookOnRenderHtml(pageContext);
|
|
69
69
|
assertUsage(htmlRender !== null, `Cannot pre-render ${pc.cyan(pageContext.urlOriginal)} because the ${renderHook.hookName}() hook defined by ${renderHook.hookFilePath} didn't return an HTML string.`);
|
|
70
70
|
assert(pageContext.isClientSideNavigation === false);
|
|
71
71
|
const documentHtml = await getHtmlString(htmlRender);
|