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
|
@@ -13,7 +13,7 @@ import { getPageContextRequestUrl } from '../../shared/getPageContextRequestUrl.
|
|
|
13
13
|
import { getPageConfig } from '../../shared/page-configs/helpers.js';
|
|
14
14
|
import { getConfigValueRuntime } from '../../shared/page-configs/getConfigValueRuntime.js';
|
|
15
15
|
import { assertOnBeforeRenderHookReturn } from '../../shared/assertOnBeforeRenderHookReturn.js';
|
|
16
|
-
import {
|
|
16
|
+
import { executeGuardHook } from '../../shared/route/executeGuardHook.js';
|
|
17
17
|
import { AbortRender, isAbortPageContext } from '../../shared/route/abort.js';
|
|
18
18
|
import { pageContextInitIsPassedToClient } from '../../shared/misc/pageContextInitIsPassedToClient.js';
|
|
19
19
|
import { isServerSideError } from '../../shared/misc/isServerSideError.js';
|
|
@@ -34,7 +34,7 @@ function getPageContextFromHooks_serialized() {
|
|
|
34
34
|
async function getPageContextFromHooks_isHydration(pageContext) {
|
|
35
35
|
for (const hookName of ['data', 'onBeforeRender']) {
|
|
36
36
|
if (hookClientOnlyExists(hookName, pageContext)) {
|
|
37
|
-
await
|
|
37
|
+
await executeDataLikeHook(hookName, pageContext);
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
return pageContext;
|
|
@@ -78,7 +78,7 @@ async function getPageContextFromClientHooks(pageContext, isErrorPage) {
|
|
|
78
78
|
!pageContext._hasPageContextFromServer) {
|
|
79
79
|
// Should we really call the guard() hook on the client-side? Shouldn't we make the guard() hook a server-side
|
|
80
80
|
// only hook? Or maybe make its env configurable like data() and onBeforeRender()?
|
|
81
|
-
await
|
|
81
|
+
await executeGuardHook(pageContext, (pageContext) => preparePageContextForPublicUsageClient(pageContext));
|
|
82
82
|
}
|
|
83
83
|
}
|
|
84
84
|
else {
|
|
@@ -86,7 +86,7 @@ async function getPageContextFromClientHooks(pageContext, isErrorPage) {
|
|
|
86
86
|
if (hookName === 'data')
|
|
87
87
|
dataHookExec = true;
|
|
88
88
|
// This won't do anything if no hook has been defined or if the hook's env.client is false.
|
|
89
|
-
await
|
|
89
|
+
await executeDataLikeHook(hookName, pageContext);
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
92
|
}
|
|
@@ -101,17 +101,17 @@ async function getPageContextFromClientHooks(pageContext, isErrorPage) {
|
|
|
101
101
|
async function execHookClient(hookName, pageContext) {
|
|
102
102
|
return await execHook(hookName, pageContext, (p) => preparePageContextForPublicUsageClient(p));
|
|
103
103
|
}
|
|
104
|
-
async function
|
|
104
|
+
async function executeDataLikeHook(hookName, pageContext) {
|
|
105
105
|
let pageContextFromHook;
|
|
106
106
|
if (hookName === 'data') {
|
|
107
|
-
pageContextFromHook = await
|
|
107
|
+
pageContextFromHook = await executeDataHook(pageContext);
|
|
108
108
|
}
|
|
109
109
|
else {
|
|
110
|
-
pageContextFromHook = await
|
|
110
|
+
pageContextFromHook = await executeOnBeforeRenderHook(pageContext);
|
|
111
111
|
}
|
|
112
112
|
Object.assign(pageContext, pageContextFromHook);
|
|
113
113
|
}
|
|
114
|
-
async function
|
|
114
|
+
async function executeDataHook(pageContext) {
|
|
115
115
|
const res = await execHookClient('data', pageContext);
|
|
116
116
|
const hook = res[0]; // TO-DO/soon: support cumulative
|
|
117
117
|
if (!hook)
|
|
@@ -120,7 +120,7 @@ async function execHookData(pageContext) {
|
|
|
120
120
|
const pageContextAddendum = { data: hookReturn };
|
|
121
121
|
return pageContextAddendum;
|
|
122
122
|
}
|
|
123
|
-
async function
|
|
123
|
+
async function executeOnBeforeRenderHook(pageContext) {
|
|
124
124
|
const res = await execHookClient('onBeforeRender', pageContext);
|
|
125
125
|
const hook = res[0]; // TO-DO/soon: support cumulative
|
|
126
126
|
if (!hook)
|
|
@@ -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, loadPageConfigsLazyClientSide
|
|
11
|
+
import { executeOnRenderClientHook } from '../shared/executeOnRenderClientHook.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 { execHooksErrorHandling, execHookErrorHandling, } 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';
|
|
@@ -60,7 +60,7 @@ async function renderPageClientSide(renderArgs) {
|
|
|
60
60
|
return;
|
|
61
61
|
async function renderPageNominal() {
|
|
62
62
|
const onError = async (err) => {
|
|
63
|
-
await
|
|
63
|
+
await renderErrorPage({ err });
|
|
64
64
|
};
|
|
65
65
|
const pageContext = await getPageContextBegin(false, pageContextBeginArgs);
|
|
66
66
|
if (isRenderOutdated())
|
|
@@ -73,11 +73,9 @@ async function renderPageClientSide(renderArgs) {
|
|
|
73
73
|
if (!globalObject.isTransitioning) {
|
|
74
74
|
globalObject.isTransitioning = true;
|
|
75
75
|
const hooks = getHookFromPageContextNew('onPageTransitionStart', previousPageContext);
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
catch (err) {
|
|
80
|
-
await onError(err);
|
|
76
|
+
const res = await execHooksErrorHandling(hooks, pageContext, preparePageContextForPublicUsageClientMinimal);
|
|
77
|
+
if ('err' in res) {
|
|
78
|
+
await onError(res.err);
|
|
81
79
|
return;
|
|
82
80
|
}
|
|
83
81
|
if (isRenderOutdated())
|
|
@@ -136,17 +134,21 @@ async function renderPageClientSide(renderArgs) {
|
|
|
136
134
|
assert(!('urlOriginal' in pageContextFromRoute));
|
|
137
135
|
objectAssign(pageContext, pageContextFromRoute);
|
|
138
136
|
}
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
if (isRenderOutdated()) return
|
|
142
|
-
*/
|
|
143
|
-
if (res.skip)
|
|
144
|
-
return;
|
|
145
|
-
if ('err' in res) {
|
|
146
|
-
await onError(res.err);
|
|
147
|
-
return;
|
|
137
|
+
try {
|
|
138
|
+
objectAssign(pageContext, await loadPageConfigsLazyClientSide(pageContext.pageId, pageContext._pageFilesAll, pageContext._globalContext._pageConfigs, pageContext._globalContext._pageConfigGlobal));
|
|
148
139
|
}
|
|
149
|
-
|
|
140
|
+
catch (err) {
|
|
141
|
+
if (handleErrorFetchingStaticAssets(err, pageContext, isFirstRender)) {
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
// A user file has a syntax error
|
|
146
|
+
await onError(err);
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
if (isRenderOutdated())
|
|
151
|
+
return;
|
|
150
152
|
setPageContextCurrent(pageContext);
|
|
151
153
|
// Set global hydrationCanBeAborted
|
|
152
154
|
if (pageContext.exports.hydrationCanBeAborted) {
|
|
@@ -216,11 +218,7 @@ async function renderPageClientSide(renderArgs) {
|
|
|
216
218
|
await renderPageView(pageContext);
|
|
217
219
|
}
|
|
218
220
|
}
|
|
219
|
-
|
|
220
|
-
// - Can be a URL rewrite upon `throw render('/some-url')`
|
|
221
|
-
// - Can be rendering the error page
|
|
222
|
-
// - Can be rendering Vike's generic error page (if no error page is defined, or if the error page throws an error)
|
|
223
|
-
async function renderPageOnError(args) {
|
|
221
|
+
async function renderErrorPage(args) {
|
|
224
222
|
const onError = (err) => {
|
|
225
223
|
if (!isSameErrorMessage(err, args.err)) {
|
|
226
224
|
/* When we can't render the error page, we prefer showing a blank page over letting the server-side try because otherwise:
|
|
@@ -249,6 +247,8 @@ async function renderPageClientSide(renderArgs) {
|
|
|
249
247
|
if (isRenderOutdated())
|
|
250
248
|
return;
|
|
251
249
|
objectAssign(pageContext, { routeParams: {} });
|
|
250
|
+
if (args.is404)
|
|
251
|
+
objectAssign(pageContext, { is404: true });
|
|
252
252
|
if (args.pageContextError)
|
|
253
253
|
objectAssign(pageContext, args.pageContextError);
|
|
254
254
|
if ('err' in args) {
|
|
@@ -313,17 +313,21 @@ async function renderPageClientSide(renderArgs) {
|
|
|
313
313
|
redirectHard(urlOriginal);
|
|
314
314
|
return;
|
|
315
315
|
}
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
316
|
+
try {
|
|
317
|
+
objectAssign(pageContext, await loadPageConfigsLazyClientSide(pageContext.pageId, pageContext._pageFilesAll, pageContext._globalContext._pageConfigs, pageContext._globalContext._pageConfigGlobal));
|
|
318
|
+
}
|
|
319
|
+
catch (err) {
|
|
320
|
+
if (handleErrorFetchingStaticAssets(err, pageContext, isFirstRender)) {
|
|
321
|
+
return;
|
|
322
|
+
}
|
|
323
|
+
else {
|
|
324
|
+
// A user file has a syntax error
|
|
325
|
+
onError(err);
|
|
326
|
+
return;
|
|
327
|
+
}
|
|
325
328
|
}
|
|
326
|
-
|
|
329
|
+
if (isRenderOutdated())
|
|
330
|
+
return;
|
|
327
331
|
setPageContextCurrent(pageContext);
|
|
328
332
|
let pageContextFromServerHooks;
|
|
329
333
|
try {
|
|
@@ -357,7 +361,7 @@ async function renderPageClientSide(renderArgs) {
|
|
|
357
361
|
async function renderPageView(pageContext, isErrorPage) {
|
|
358
362
|
const onError = async (err) => {
|
|
359
363
|
if (!isErrorPage) {
|
|
360
|
-
await
|
|
364
|
+
await renderErrorPage({ err });
|
|
361
365
|
}
|
|
362
366
|
else {
|
|
363
367
|
if (!isSameErrorMessage(err, isErrorPage.err)) {
|
|
@@ -379,7 +383,7 @@ async function renderPageClientSide(renderArgs) {
|
|
|
379
383
|
const onRenderClientPromise = (async () => {
|
|
380
384
|
let onRenderClientError;
|
|
381
385
|
try {
|
|
382
|
-
await
|
|
386
|
+
await executeOnRenderClientHook(pageContext, preparePageContextForPublicUsageClient);
|
|
383
387
|
}
|
|
384
388
|
catch (err) {
|
|
385
389
|
onRenderClientError = err;
|
|
@@ -401,11 +405,9 @@ async function renderPageClientSide(renderArgs) {
|
|
|
401
405
|
*/
|
|
402
406
|
// onHydrationEnd()
|
|
403
407
|
if (isFirstRender && !onRenderClientError) {
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
catch (err) {
|
|
408
|
-
await onError(err);
|
|
408
|
+
const res = await execHookErrorHandling('onHydrationEnd', pageContext, preparePageContextForPublicUsageClient);
|
|
409
|
+
if ('err' in res) {
|
|
410
|
+
await onError(res.err);
|
|
409
411
|
if (!isErrorPage)
|
|
410
412
|
return;
|
|
411
413
|
}
|
|
@@ -420,11 +422,9 @@ async function renderPageClientSide(renderArgs) {
|
|
|
420
422
|
globalObject.isTransitioning = undefined;
|
|
421
423
|
assert(previousPageContext);
|
|
422
424
|
const hooks = getHookFromPageContextNew('onPageTransitionEnd', previousPageContext);
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
catch (err) {
|
|
427
|
-
await onError(err);
|
|
425
|
+
const res = await execHooksErrorHandling(hooks, pageContext, preparePageContextForPublicUsageClient);
|
|
426
|
+
if ('err' in res) {
|
|
427
|
+
await onError(res.err);
|
|
428
428
|
if (!isErrorPage)
|
|
429
429
|
return;
|
|
430
430
|
}
|
|
@@ -491,6 +491,22 @@ function changeUrl(url, overwriteLastHistoryEntry) {
|
|
|
491
491
|
return;
|
|
492
492
|
pushHistoryState(url, overwriteLastHistoryEntry);
|
|
493
493
|
}
|
|
494
|
+
function handleErrorFetchingStaticAssets(err, pageContext, isFirstRender) {
|
|
495
|
+
if (!isErrorFetchingStaticAssets(err)) {
|
|
496
|
+
return false;
|
|
497
|
+
}
|
|
498
|
+
if (isFirstRender) {
|
|
499
|
+
disableClientRouting(err, false);
|
|
500
|
+
// This may happen if the frontend was newly deployed during hydration.
|
|
501
|
+
// Ideally: re-try a couple of times by reloading the page (not entirely trivial to implement since `localStorage` is needed.)
|
|
502
|
+
throw err;
|
|
503
|
+
}
|
|
504
|
+
else {
|
|
505
|
+
disableClientRouting(err, true);
|
|
506
|
+
}
|
|
507
|
+
redirectHard(pageContext.urlOriginal);
|
|
508
|
+
return true;
|
|
509
|
+
}
|
|
494
510
|
function disableClientRouting(err, log) {
|
|
495
511
|
assert(isErrorFetchingStaticAssets(err));
|
|
496
512
|
globalObject.clientRoutingIsDisabled = true;
|
|
@@ -580,54 +596,3 @@ function areKeysEqual(key1, key2) {
|
|
|
580
596
|
function getPageContextClient() {
|
|
581
597
|
return globalObject.renderedPageContext ?? null;
|
|
582
598
|
}
|
|
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 };
|
|
604
|
-
objectAssign(pageContext, pageContextAddendum);
|
|
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;
|
|
633
|
-
}
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
export { createPageContextClientSide };
|
|
2
2
|
import { assertUsage, augmentType, objectAssign } from './utils.js';
|
|
3
3
|
import { getPageContextSerializedInHtml } from '../shared/getJsonSerializedInHtml.js';
|
|
4
|
-
import { loadPageConfigsLazyClientSide
|
|
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';
|
|
8
|
-
import { preparePageContextForPublicUsageClient, } from './preparePageContextForPublicUsageClient.js';
|
|
9
|
-
import { execHook } from '../../shared/hooks/execHook.js';
|
|
10
8
|
const urlFirst = getCurrentUrl({ withoutHash: true });
|
|
11
9
|
async function createPageContextClientSide() {
|
|
12
10
|
const globalContext = await getGlobalContextClientInternal();
|
|
@@ -22,9 +20,10 @@ async function createPageContextClientSide() {
|
|
|
22
20
|
});
|
|
23
21
|
objectAssign(pageContextCreated, getPageContextSerializedInHtml());
|
|
24
22
|
// Sets pageContext.config to global configs
|
|
25
|
-
|
|
23
|
+
const pageContextAugmented = await createPageContextShared(pageContextCreated, globalContext._pageConfigGlobal, globalContext._vikeConfigPublicGlobal);
|
|
24
|
+
augmentType(pageContextCreated, pageContextAugmented);
|
|
26
25
|
// Sets pageContext.config to local configs (overrides the pageContext.config set above)
|
|
27
|
-
|
|
26
|
+
objectAssign(pageContextCreated, await loadPageConfigsLazyClientSide(pageContextCreated.pageId, globalContext._pageFilesAll, globalContext._pageConfigs, globalContext._pageConfigGlobal));
|
|
28
27
|
assertPristineUrl();
|
|
29
28
|
return pageContextCreated;
|
|
30
29
|
}
|
|
@@ -32,9 +31,3 @@ function assertPristineUrl() {
|
|
|
32
31
|
const urlCurrent = getCurrentUrl({ withoutHash: true });
|
|
33
32
|
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
33
|
}
|
|
35
|
-
async function loadPageConfigsLazyClientSideAndExecHook(pageContext) {
|
|
36
|
-
const pageContextAddendum = await loadPageConfigsLazyClientSide(pageContext.pageId, pageContext._pageFilesAll, pageContext._globalContext._pageConfigs, pageContext._globalContext._pageConfigGlobal);
|
|
37
|
-
objectAssign(pageContext, pageContextAddendum);
|
|
38
|
-
await execHook('onCreatePageContext', pageContext, preparePageContextForPublicUsageClient);
|
|
39
|
-
return pageContext;
|
|
40
|
-
}
|
|
@@ -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 { executeOnRenderClientHook } from '../shared/executeOnRenderClientHook.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 executeOnRenderClientHook(pageContext, preparePageContextForPublicUsageClient);
|
|
18
18
|
await execHook('onHydrationEnd', pageContext, preparePageContextForPublicUsageClient);
|
|
19
19
|
}
|
package/dist/esm/client/shared/{execHookOnRenderClient.d.ts → executeOnRenderClientHook.d.ts}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { executeOnRenderClientHook };
|
|
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 executeOnRenderClientHook<PageContext extends PageContextBeforeRenderClient>(pageContext: PageContext, prepareForPublicUsage: (pageConfig: PageContext) => PageContext): Promise<void>;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { executeOnRenderClientHook };
|
|
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 { execHookSingle } from '../../shared/hooks/execHook.js';
|
|
5
|
+
async function executeOnRenderClientHook(pageContext, prepareForPublicUsage) {
|
|
6
6
|
let hook = null;
|
|
7
7
|
{
|
|
8
8
|
const renderHook = getHookFromPageContext(pageContext, 'render');
|
|
@@ -38,7 +38,7 @@ async function execHookOnRenderClient(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 execHookSingle(hook, pageContext, prepareForPublicUsage);
|
|
42
42
|
}
|
|
43
43
|
function getUrlToShowToUser(pageContext) {
|
|
44
44
|
let url;
|
|
@@ -1,17 +1,9 @@
|
|
|
1
1
|
export { loadPageConfigsLazyClientSide };
|
|
2
|
-
export type { PageContext_loadPageConfigsLazyClientSide };
|
|
3
2
|
export { isErrorFetchingStaticAssets };
|
|
4
|
-
import { type PageFile } from '../../shared/getPageFiles.js';
|
|
3
|
+
import { type PageFile, type VikeConfigPublicPageLazy } from '../../shared/getPageFiles.js';
|
|
5
4
|
import type { PageConfigGlobalRuntime, PageConfigRuntime } from '../../types/PageConfig.js';
|
|
6
|
-
type
|
|
7
|
-
pageId: string;
|
|
8
|
-
_pageFilesAll: PageFile[];
|
|
9
|
-
_globalContext: {
|
|
10
|
-
_pageConfigs: PageConfigRuntime[];
|
|
11
|
-
_pageConfigGlobal: PageConfigGlobalRuntime;
|
|
12
|
-
};
|
|
13
|
-
};
|
|
14
|
-
declare function loadPageConfigsLazyClientSide(pageId: string, pageFilesAll: PageFile[], pageConfigs: PageConfigRuntime[], pageConfigGlobal: PageConfigGlobalRuntime): Promise<import("../../shared/getPageFiles.js").VikeConfigPublicPageLazy & {
|
|
5
|
+
type PageContextUserFilesLoaded = VikeConfigPublicPageLazy & {
|
|
15
6
|
_pageFilesLoaded: PageFile[];
|
|
16
|
-
}
|
|
7
|
+
};
|
|
8
|
+
declare function loadPageConfigsLazyClientSide(pageId: string, pageFilesAll: PageFile[], pageConfigs: PageConfigRuntime[], pageConfigGlobal: PageConfigGlobalRuntime): Promise<PageContextUserFilesLoaded>;
|
|
17
9
|
declare function isErrorFetchingStaticAssets(err: unknown): boolean;
|
|
@@ -5,7 +5,7 @@ import { resolveVikeConfigPublicPageLazy } from '../../shared/page-configs/resol
|
|
|
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
|
|
8
|
+
const stamp = '__whileFetchingAssets';
|
|
9
9
|
async function loadPageConfigsLazyClientSide(pageId, pageFilesAll, pageConfigs, pageConfigGlobal) {
|
|
10
10
|
const pageFilesClientSide = getPageFilesClientSide(pageFilesAll, pageId);
|
|
11
11
|
const pageConfig = findPageConfig(pageConfigs, pageId);
|
|
@@ -23,10 +23,10 @@ async function loadPageConfigsLazyClientSide(pageId, pageFilesAll, pageConfigs,
|
|
|
23
23
|
}
|
|
24
24
|
catch (err) {
|
|
25
25
|
if (isFetchError(err)) {
|
|
26
|
-
Object.assign(err, { [
|
|
26
|
+
Object.assign(err, { [stamp]: true });
|
|
27
27
|
}
|
|
28
28
|
else {
|
|
29
|
-
//
|
|
29
|
+
// A user file has a syntax error
|
|
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[stamp] === 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) {
|