vike 0.4.232-commit-134207d → 0.4.232-commit-ec54a7e
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 +2 -1
- package/dist/cjs/node/runtime/renderPage/loadPageConfigsLazyServerSide.js +17 -12
- package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +1 -1
- package/dist/cjs/node/runtime/renderPage.js +55 -48
- package/dist/cjs/shared/createPageContextShared.js +1 -3
- package/dist/cjs/shared/route/index.js +1 -0
- package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
- package/dist/esm/client/runtime-client-routing/prefetch.js +2 -2
- package/dist/esm/client/runtime-client-routing/renderPageClientSide.js +21 -9
- package/dist/esm/client/runtime-server-routing/createPageContextClientSide.js +11 -4
- package/dist/esm/client/shared/loadPageConfigsLazyClientSide.d.ts +12 -2
- package/dist/esm/client/shared/loadPageConfigsLazyClientSide.js +2 -2
- package/dist/esm/node/prerender/runPrerender.d.ts +250 -4
- package/dist/esm/node/prerender/runPrerender.js +2 -1
- package/dist/esm/node/runtime/renderPage/loadPageConfigsLazyServerSide.d.ts +14 -5
- package/dist/esm/node/runtime/renderPage/loadPageConfigsLazyServerSide.js +17 -12
- package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +2 -2
- package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +2 -2
- package/dist/esm/node/runtime/renderPage.js +56 -49
- package/dist/esm/shared/createPageContextShared.js +1 -3
- package/dist/esm/shared/hooks/execHook.d.ts +3 -2
- package/dist/esm/shared/route/index.js +1 -0
- package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
- package/dist/esm/utils/PROJECT_VERSION.js +1 -1
- package/package.json +1 -1
|
@@ -67,6 +67,7 @@ const getOutDirs_js_1 = require("../vite/shared/getOutDirs.js");
|
|
|
67
67
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
68
68
|
const getProxyForPublicUsage_js_1 = require("../../shared/getProxyForPublicUsage.js");
|
|
69
69
|
const resolveRedirects_js_1 = require("../runtime/renderPage/resolveRedirects.js");
|
|
70
|
+
const utils_js_2 = require("../runtime/utils.js");
|
|
70
71
|
const docLink = 'https://vike.dev/i18n#pre-rendering';
|
|
71
72
|
async function runPrerender(options = {}, trigger) {
|
|
72
73
|
(0, context_js_1.setWasPrerenderRun)(trigger);
|
|
@@ -360,7 +361,7 @@ async function createPageContextPrerendering(urlOriginal, prerenderContext, glob
|
|
|
360
361
|
routeParams: {},
|
|
361
362
|
});
|
|
362
363
|
}
|
|
363
|
-
(0,
|
|
364
|
+
(0, utils_js_2.augmentType)(pageContext, await (0, loadPageConfigsLazyServerSide_js_1.loadPageConfigsLazyServerSide)(pageContext));
|
|
364
365
|
let usesClientRouter;
|
|
365
366
|
{
|
|
366
367
|
const { pageId } = pageContext;
|
|
@@ -10,7 +10,14 @@ const debugPageFiles_js_1 = require("./debugPageFiles.js");
|
|
|
10
10
|
const findPageConfig_js_1 = require("../../../shared/page-configs/findPageConfig.js");
|
|
11
11
|
const analyzePage_js_1 = require("./analyzePage.js");
|
|
12
12
|
const loadConfigValues_js_1 = require("../../../shared/page-configs/loadConfigValues.js");
|
|
13
|
+
const execHookServer_js_1 = require("./execHookServer.js");
|
|
13
14
|
async function loadPageConfigsLazyServerSide(pageContext) {
|
|
15
|
+
const pageContextAddendum = await loadPageConfigsLazy(pageContext);
|
|
16
|
+
(0, utils_js_1.objectAssign)(pageContext, pageContextAddendum);
|
|
17
|
+
await (0, execHookServer_js_1.execHookServer)('onCreatePageContext', pageContext);
|
|
18
|
+
return pageContext;
|
|
19
|
+
}
|
|
20
|
+
async function loadPageConfigsLazy(pageContext) {
|
|
14
21
|
const pageConfig = (0, findPageConfig_js_1.findPageConfig)(pageContext._globalContext._pageConfigs, pageContext.pageId); // Make pageConfig globally available as pageContext._pageConfig ?
|
|
15
22
|
const globalContext = pageContext._globalContext;
|
|
16
23
|
const [{ pageFilesLoaded, pageContextExports }] = await Promise.all([
|
|
@@ -86,18 +93,16 @@ async function loadPageConfigsLazyServerSide(pageContext) {
|
|
|
86
93
|
return pageAssetsOldFormat;
|
|
87
94
|
},
|
|
88
95
|
});
|
|
89
|
-
{
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
});
|
|
100
|
-
}
|
|
96
|
+
(0, debugPageFiles_js_1.debugPageFiles)({
|
|
97
|
+
pageContext,
|
|
98
|
+
isHtmlOnly,
|
|
99
|
+
isClientRouting,
|
|
100
|
+
pageFilesLoaded,
|
|
101
|
+
pageFilesClientSide,
|
|
102
|
+
pageFilesServerSide,
|
|
103
|
+
clientEntries,
|
|
104
|
+
clientDependencies,
|
|
105
|
+
});
|
|
101
106
|
return pageContextAddendum;
|
|
102
107
|
}
|
|
103
108
|
async function loadPageUserFiles(pageFilesAll, pageConfig, pageConfigGlobal, pageId, isDev) {
|
|
@@ -28,7 +28,7 @@ async function renderPageAlreadyRouted(pageContext) {
|
|
|
28
28
|
(0, utils_js_1.assert)(isError ===
|
|
29
29
|
(pageContext.pageId ===
|
|
30
30
|
(0, error_page_js_1.getErrorPageId)(pageContext._globalContext._pageFilesAll, pageContext._globalContext._pageConfigs)));
|
|
31
|
-
(0, utils_js_1.
|
|
31
|
+
(0, utils_js_1.augmentType)(pageContext, await (0, loadPageConfigsLazyServerSide_js_1.loadPageConfigsLazyServerSide)(pageContext));
|
|
32
32
|
if (!isError) {
|
|
33
33
|
await (0, executeGuardHook_js_1.executeGuardHook)(pageContext, (pageContext) => (0, preparePageContextForPublicUsageServer_js_1.preparePageContextForPublicUsageServer)(pageContext));
|
|
34
34
|
}
|
|
@@ -143,59 +143,66 @@ async function renderPageAlreadyPrepared(pageContextBegin, globalContext, httpRe
|
|
|
143
143
|
else {
|
|
144
144
|
(0, utils_js_1.assert)(errNominalPage);
|
|
145
145
|
(0, utils_js_1.assert)(pageContextNominalPageSuccess === undefined);
|
|
146
|
-
(
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
146
|
+
return await renderPageOnError(errNominalPage, pageContextBegin, pageContextNominalPageBegin, globalContext, httpRequestId, pageContextsFromRewrite);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
// When the normal page threw an error
|
|
150
|
+
// - Can be a URL rewrite upon `throw render('/some-url')`
|
|
151
|
+
// - Can be rendering the error page
|
|
152
|
+
// - Can be rendering Vike's generic error page (if no error page is defined, or if the error page throws an error)
|
|
153
|
+
async function renderPageOnError(errNominalPage, pageContextBegin, pageContextNominalPageBegin, globalContext, httpRequestId, pageContextsFromRewrite) {
|
|
154
|
+
(0, utils_js_1.assert)(pageContextNominalPageBegin);
|
|
155
|
+
(0, utils_js_1.assert)((0, utils_js_1.hasProp)(pageContextNominalPageBegin, 'urlOriginal', 'string'));
|
|
156
|
+
const pageContextErrorPageInit = await getPageContextErrorPageInit(pageContextBegin, errNominalPage, pageContextNominalPageBegin);
|
|
157
|
+
// Handle `throw redirect()` and `throw render()` while rendering nominal page
|
|
158
|
+
if ((0, abort_js_1.isAbortError)(errNominalPage)) {
|
|
159
|
+
const handled = await handleAbortError(errNominalPage, pageContextsFromRewrite, pageContextBegin, pageContextNominalPageBegin, httpRequestId, pageContextErrorPageInit, globalContext);
|
|
160
|
+
if (handled.pageContextReturn) {
|
|
161
|
+
// - throw redirect()
|
|
162
|
+
// - throw render(url)
|
|
163
|
+
// - throw render(abortStatusCode) if .pageContext.json request
|
|
164
|
+
return handled.pageContextReturn;
|
|
162
165
|
}
|
|
163
|
-
{
|
|
164
|
-
|
|
165
|
-
if (!errorPageId) {
|
|
166
|
-
(0, utils_js_1.objectAssign)(pageContextErrorPageInit, { pageId: null });
|
|
167
|
-
return (0, handleErrorWithoutErrorPage_js_1.handleErrorWithoutErrorPage)(pageContextErrorPageInit);
|
|
168
|
-
}
|
|
169
|
-
else {
|
|
170
|
-
(0, utils_js_1.objectAssign)(pageContextErrorPageInit, { pageId: errorPageId });
|
|
171
|
-
}
|
|
166
|
+
else {
|
|
167
|
+
// - throw render(abortStatusCode) if not .pageContext.json request
|
|
172
168
|
}
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
169
|
+
Object.assign(pageContextErrorPageInit, handled.pageContextAbort);
|
|
170
|
+
}
|
|
171
|
+
{
|
|
172
|
+
const errorPageId = (0, error_page_js_1.getErrorPageId)(globalContext._pageFilesAll, globalContext._pageConfigs);
|
|
173
|
+
if (!errorPageId) {
|
|
174
|
+
(0, utils_js_1.objectAssign)(pageContextErrorPageInit, { pageId: null });
|
|
175
|
+
return (0, handleErrorWithoutErrorPage_js_1.handleErrorWithoutErrorPage)(pageContextErrorPageInit);
|
|
176
176
|
}
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
(0,
|
|
177
|
+
else {
|
|
178
|
+
(0, utils_js_1.objectAssign)(pageContextErrorPageInit, { pageId: errorPageId });
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
let pageContextErrorPage;
|
|
182
|
+
try {
|
|
183
|
+
pageContextErrorPage = await (0, renderPageAlreadyRouted_js_1.renderPageAlreadyRouted)(pageContextErrorPageInit);
|
|
184
|
+
}
|
|
185
|
+
catch (errErrorPage) {
|
|
186
|
+
// Handle `throw redirect()` and `throw render()` while rendering error page
|
|
187
|
+
if ((0, abort_js_1.isAbortError)(errErrorPage)) {
|
|
188
|
+
const handled = await handleAbortError(errErrorPage, pageContextsFromRewrite, pageContextBegin, pageContextNominalPageBegin, httpRequestId, pageContextErrorPageInit, globalContext);
|
|
189
|
+
// throw render(abortStatusCode)
|
|
190
|
+
if (!handled.pageContextReturn) {
|
|
191
|
+
const pageContextAbort = errErrorPage._pageContextAbort;
|
|
192
|
+
(0, utils_js_1.assertWarning)(false, `Failed to render error page because ${picocolors_1.default.cyan(pageContextAbort._abortCall)} was called: make sure ${picocolors_1.default.cyan(pageContextAbort._abortCaller)} doesn't occur while the error page is being rendered.`, { onlyOnce: false });
|
|
193
|
+
const pageContextHttpWithError = getPageContextHttpResponseError(errNominalPage, pageContextBegin);
|
|
194
|
+
return pageContextHttpWithError;
|
|
193
195
|
}
|
|
194
|
-
|
|
195
|
-
return
|
|
196
|
+
// `throw redirect()` / `throw render(url)`
|
|
197
|
+
return handled.pageContextReturn;
|
|
196
198
|
}
|
|
197
|
-
|
|
199
|
+
if ((0, isNewError_js_1.isNewError)(errErrorPage, errNominalPage)) {
|
|
200
|
+
(0, loggerRuntime_js_1.logRuntimeError)(errErrorPage, httpRequestId);
|
|
201
|
+
}
|
|
202
|
+
const pageContextWithError = getPageContextHttpResponseError(errNominalPage, pageContextBegin);
|
|
203
|
+
return pageContextWithError;
|
|
198
204
|
}
|
|
205
|
+
return pageContextErrorPage;
|
|
199
206
|
}
|
|
200
207
|
function logHttpRequest(urlOriginal, httpRequestId) {
|
|
201
208
|
(0, loggerRuntime_js_1.logRuntimeInfo)?.(getRequestInfoMessage(urlOriginal), httpRequestId, 'info');
|
|
@@ -417,7 +424,7 @@ pageContextNominalPageBegin, httpRequestId, pageContextErrorPageInit, globalCont
|
|
|
417
424
|
(0, utils_js_1.objectAssign)(pageContext, { pageId: errorPageId });
|
|
418
425
|
(0, utils_js_1.objectAssign)(pageContext, pageContextAbort);
|
|
419
426
|
(0, utils_js_1.objectAssign)(pageContext, pageContextErrorPageInit, true);
|
|
420
|
-
(0, utils_js_1.
|
|
427
|
+
(0, utils_js_1.augmentType)(pageContext, await (0, loadPageConfigsLazyServerSide_js_1.loadPageConfigsLazyServerSide)(pageContext));
|
|
421
428
|
// We include pageContextInit: we don't only serialize pageContextAbort because the error page may need to access pageContextInit
|
|
422
429
|
pageContextSerialized = (0, serializeContext_js_1.getPageContextClientSerialized)(pageContext);
|
|
423
430
|
}
|
|
@@ -2,12 +2,10 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createPageContextShared = createPageContextShared;
|
|
4
4
|
exports.createPageContextObject = createPageContextObject;
|
|
5
|
-
const execHook_js_1 = require("./hooks/execHook.js");
|
|
6
|
-
const preparePageContextForPublicUsage_js_1 = require("./preparePageContextForPublicUsage.js");
|
|
7
5
|
const utils_js_1 = require("./utils.js");
|
|
6
|
+
// TODO/now: make this and parents sync
|
|
8
7
|
async function createPageContextShared(pageContextCreated, pageConfigGlobal, vikeConfigPublicGlobal) {
|
|
9
8
|
(0, utils_js_1.objectAssign)(pageContextCreated, vikeConfigPublicGlobal);
|
|
10
|
-
await (0, execHook_js_1.execHookGlobal)('onCreatePageContext', pageConfigGlobal, pageContextCreated, pageContextCreated, preparePageContextForPublicUsage_js_1.preparePageContextForPublicUsage);
|
|
11
9
|
return pageContextCreated;
|
|
12
10
|
}
|
|
13
11
|
function createPageContextObject() {
|
|
@@ -17,6 +17,7 @@ const resolveRouteFunction_js_1 = require("./resolveRouteFunction.js");
|
|
|
17
17
|
const executeOnBeforeRouteHook_js_1 = require("./executeOnBeforeRouteHook.js");
|
|
18
18
|
const debug_js_1 = require("./debug.js");
|
|
19
19
|
const picocolors_1 = __importDefault(require("@brillout/picocolors"));
|
|
20
|
+
// TODO/next-major-release: make it sync
|
|
20
21
|
async function route(pageContext, skipOnBeforeRouteHook) {
|
|
21
22
|
(0, debug_js_1.debug)('Pages routes:', pageContext._globalContext._pageRoutes);
|
|
22
23
|
const pageContextFromRoute = {};
|
|
@@ -6,7 +6,7 @@ export { addLinkPrefetchHandlers };
|
|
|
6
6
|
export { addLinkPrefetchHandlers_watch };
|
|
7
7
|
export { addLinkPrefetchHandlers_unwatch };
|
|
8
8
|
import { assert, assertClientRouting, assertUsage, assertWarning, checkIfClientRouting, getGlobalObject, hasProp, objectAssign, } from './utils.js';
|
|
9
|
-
import { isErrorFetchingStaticAssets,
|
|
9
|
+
import { isErrorFetchingStaticAssets, loadPageConfigsLazy } from '../shared/loadPageConfigsLazyClientSide.js';
|
|
10
10
|
import { skipLink } from './skipLink.js';
|
|
11
11
|
import { disableClientRouting } from './renderPageClientSide.js';
|
|
12
12
|
import { isClientSideRoutable } from './isClientSideRoutable.js';
|
|
@@ -45,7 +45,7 @@ function getPageContextPrefetched(pageContext) {
|
|
|
45
45
|
}
|
|
46
46
|
async function prefetchAssets(pageContextLink) {
|
|
47
47
|
try {
|
|
48
|
-
await
|
|
48
|
+
await loadPageConfigsLazy(pageContextLink.pageId, pageContextLink._pageFilesAll, pageContextLink._globalContext._pageConfigs, pageContextLink._globalContext._pageConfigGlobal);
|
|
49
49
|
}
|
|
50
50
|
catch (err) {
|
|
51
51
|
if (isErrorFetchingStaticAssets(err)) {
|
|
@@ -9,7 +9,7 @@ import { createPageContextClientSide } from './createPageContextClientSide.js';
|
|
|
9
9
|
import { addLinkPrefetchHandlers, addLinkPrefetchHandlers_unwatch, addLinkPrefetchHandlers_watch, getPageContextPrefetched, populatePageContextPrefetchCache, } from './prefetch.js';
|
|
10
10
|
import { assertInfo, assertWarning, isReact } from './utils.js';
|
|
11
11
|
import { executeOnRenderClientHook } from '../shared/executeOnRenderClientHook.js';
|
|
12
|
-
import { isErrorFetchingStaticAssets,
|
|
12
|
+
import { isErrorFetchingStaticAssets, loadPageConfigsLazy, } 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 { execHooksErrorHandling, execHookErrorHandling, } from '../../shared/hooks/execHook.js';
|
|
23
|
+
import { execHooksErrorHandling, execHookErrorHandling, 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';
|
|
@@ -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 renderPageOnError({ err });
|
|
64
64
|
};
|
|
65
65
|
const pageContext = await getPageContextBegin(false, pageContextBeginArgs);
|
|
66
66
|
if (isRenderOutdated())
|
|
@@ -134,8 +134,9 @@ async function renderPageClientSide(renderArgs) {
|
|
|
134
134
|
assert(!('urlOriginal' in pageContextFromRoute));
|
|
135
135
|
objectAssign(pageContext, pageContextFromRoute);
|
|
136
136
|
}
|
|
137
|
+
let pageContextAugmented;
|
|
137
138
|
try {
|
|
138
|
-
|
|
139
|
+
pageContextAugmented = await loadPageConfigsLazyClientSide(pageContext);
|
|
139
140
|
}
|
|
140
141
|
catch (err) {
|
|
141
142
|
if (handleErrorFetchingStaticAssets(err, pageContext, isFirstRender)) {
|
|
@@ -147,6 +148,7 @@ async function renderPageClientSide(renderArgs) {
|
|
|
147
148
|
return;
|
|
148
149
|
}
|
|
149
150
|
}
|
|
151
|
+
augmentType(pageContext, pageContextAugmented);
|
|
150
152
|
if (isRenderOutdated())
|
|
151
153
|
return;
|
|
152
154
|
setPageContextCurrent(pageContext);
|
|
@@ -218,7 +220,11 @@ async function renderPageClientSide(renderArgs) {
|
|
|
218
220
|
await renderPageView(pageContext);
|
|
219
221
|
}
|
|
220
222
|
}
|
|
221
|
-
|
|
223
|
+
// When the normal page threw an error
|
|
224
|
+
// - Can be a URL rewrite upon `throw render('/some-url')`
|
|
225
|
+
// - Can be rendering the error page
|
|
226
|
+
// - Can be rendering Vike's generic error page (if no error page is defined, or if the error page throws an error)
|
|
227
|
+
async function renderPageOnError(args) {
|
|
222
228
|
const onError = (err) => {
|
|
223
229
|
if (!isSameErrorMessage(err, args.err)) {
|
|
224
230
|
/* When we can't render the error page, we prefer showing a blank page over letting the server-side try because otherwise:
|
|
@@ -247,8 +253,6 @@ async function renderPageClientSide(renderArgs) {
|
|
|
247
253
|
if (isRenderOutdated())
|
|
248
254
|
return;
|
|
249
255
|
objectAssign(pageContext, { routeParams: {} });
|
|
250
|
-
if (args.is404)
|
|
251
|
-
objectAssign(pageContext, { is404: true });
|
|
252
256
|
if (args.pageContextError)
|
|
253
257
|
objectAssign(pageContext, args.pageContextError);
|
|
254
258
|
if ('err' in args) {
|
|
@@ -313,8 +317,9 @@ async function renderPageClientSide(renderArgs) {
|
|
|
313
317
|
redirectHard(urlOriginal);
|
|
314
318
|
return;
|
|
315
319
|
}
|
|
320
|
+
let pageContextAugmented;
|
|
316
321
|
try {
|
|
317
|
-
|
|
322
|
+
pageContextAugmented = await loadPageConfigsLazyClientSide(pageContext);
|
|
318
323
|
}
|
|
319
324
|
catch (err) {
|
|
320
325
|
if (handleErrorFetchingStaticAssets(err, pageContext, isFirstRender)) {
|
|
@@ -326,6 +331,7 @@ async function renderPageClientSide(renderArgs) {
|
|
|
326
331
|
return;
|
|
327
332
|
}
|
|
328
333
|
}
|
|
334
|
+
augmentType(pageContext, pageContextAugmented);
|
|
329
335
|
if (isRenderOutdated())
|
|
330
336
|
return;
|
|
331
337
|
setPageContextCurrent(pageContext);
|
|
@@ -361,7 +367,7 @@ async function renderPageClientSide(renderArgs) {
|
|
|
361
367
|
async function renderPageView(pageContext, isErrorPage) {
|
|
362
368
|
const onError = async (err) => {
|
|
363
369
|
if (!isErrorPage) {
|
|
364
|
-
await
|
|
370
|
+
await renderPageOnError({ err });
|
|
365
371
|
}
|
|
366
372
|
else {
|
|
367
373
|
if (!isSameErrorMessage(err, isErrorPage.err)) {
|
|
@@ -596,3 +602,9 @@ function areKeysEqual(key1, key2) {
|
|
|
596
602
|
function getPageContextClient() {
|
|
597
603
|
return globalObject.renderedPageContext ?? null;
|
|
598
604
|
}
|
|
605
|
+
async function loadPageConfigsLazyClientSide(pageContext) {
|
|
606
|
+
const pageContextAddendum = await loadPageConfigsLazy(pageContext.pageId, pageContext._pageFilesAll, pageContext._globalContext._pageConfigs, pageContext._globalContext._pageConfigGlobal);
|
|
607
|
+
objectAssign(pageContext, pageContextAddendum);
|
|
608
|
+
await execHook('onCreatePageContext', pageContext, preparePageContextForPublicUsageClient);
|
|
609
|
+
return pageContext;
|
|
610
|
+
}
|
|
@@ -1,10 +1,12 @@
|
|
|
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 { loadPageConfigsLazy, } 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';
|
|
8
10
|
const urlFirst = getCurrentUrl({ withoutHash: true });
|
|
9
11
|
async function createPageContextClientSide() {
|
|
10
12
|
const globalContext = await getGlobalContextClientInternal();
|
|
@@ -20,10 +22,9 @@ async function createPageContextClientSide() {
|
|
|
20
22
|
});
|
|
21
23
|
objectAssign(pageContextCreated, getPageContextSerializedInHtml());
|
|
22
24
|
// Sets pageContext.config to global configs
|
|
23
|
-
|
|
24
|
-
augmentType(pageContextCreated, pageContextAugmented);
|
|
25
|
+
augmentType(pageContextCreated, await createPageContextShared(pageContextCreated, globalContext._pageConfigGlobal, globalContext._vikeConfigPublicGlobal));
|
|
25
26
|
// Sets pageContext.config to local configs (overrides the pageContext.config set above)
|
|
26
|
-
|
|
27
|
+
augmentType(pageContextCreated, await loadPageConfigsLazyClientSide(pageContextCreated));
|
|
27
28
|
assertPristineUrl();
|
|
28
29
|
return pageContextCreated;
|
|
29
30
|
}
|
|
@@ -31,3 +32,9 @@ function assertPristineUrl() {
|
|
|
31
32
|
const urlCurrent = getCurrentUrl({ withoutHash: true });
|
|
32
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.`);
|
|
33
34
|
}
|
|
35
|
+
async function loadPageConfigsLazyClientSide(pageContext) {
|
|
36
|
+
const pageContextAddendum = await loadPageConfigsLazy(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,9 +1,19 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { loadPageConfigsLazy };
|
|
2
|
+
export type { PageContext_loadPageConfigsLazyClientSide };
|
|
2
3
|
export { isErrorFetchingStaticAssets };
|
|
3
4
|
import { type PageFile, type VikeConfigPublicPageLazy } from '../../shared/getPageFiles.js';
|
|
4
5
|
import type { PageConfigGlobalRuntime, PageConfigRuntime } from '../../types/PageConfig.js';
|
|
6
|
+
import { PageContextPrepareMinimum } from '../../shared/preparePageContextForPublicUsage.js';
|
|
7
|
+
type PageContext_loadPageConfigsLazyClientSide = {
|
|
8
|
+
pageId: string;
|
|
9
|
+
_pageFilesAll: PageFile[];
|
|
10
|
+
_globalContext: {
|
|
11
|
+
_pageConfigs: PageConfigRuntime[];
|
|
12
|
+
_pageConfigGlobal: PageConfigGlobalRuntime;
|
|
13
|
+
};
|
|
14
|
+
} & PageContextPrepareMinimum;
|
|
5
15
|
type PageContextUserFilesLoaded = VikeConfigPublicPageLazy & {
|
|
6
16
|
_pageFilesLoaded: PageFile[];
|
|
7
17
|
};
|
|
8
|
-
declare function
|
|
18
|
+
declare function loadPageConfigsLazy(pageId: string, pageFilesAll: PageFile[], pageConfigs: PageConfigRuntime[], pageConfigGlobal: PageConfigGlobalRuntime): Promise<PageContextUserFilesLoaded>;
|
|
9
19
|
declare function isErrorFetchingStaticAssets(err: unknown): boolean;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { loadPageConfigsLazy };
|
|
2
2
|
export { isErrorFetchingStaticAssets };
|
|
3
3
|
import { getPageFilesClientSide } from '../../shared/getPageFiles.js';
|
|
4
4
|
import { resolveVikeConfigPublicPageLazy } from '../../shared/page-configs/resolveVikeConfigPublic.js';
|
|
@@ -6,7 +6,7 @@ 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
8
|
const stamp = '__whileFetchingAssets';
|
|
9
|
-
async function
|
|
9
|
+
async function loadPageConfigsLazy(pageId, pageFilesAll, pageConfigs, pageConfigGlobal) {
|
|
10
10
|
const pageFilesClientSide = getPageFilesClientSide(pageFilesAll, pageId);
|
|
11
11
|
const pageConfig = findPageConfig(pageConfigs, pageId);
|
|
12
12
|
let pageConfigLoaded;
|
|
@@ -171,7 +171,7 @@ declare function createPageContextPrerendering(urlOriginal: string, prerenderCon
|
|
|
171
171
|
_sources: import("../../shared/page-configs/resolveVikeConfigPublic.js").Sources;
|
|
172
172
|
_from: import("../../shared/page-configs/resolveVikeConfigPublic.js").From;
|
|
173
173
|
} & {
|
|
174
|
-
urlParsed: import("../
|
|
174
|
+
urlParsed: import("../runtime/utils.js").UrlPublic;
|
|
175
175
|
urlPathname: string;
|
|
176
176
|
url: string;
|
|
177
177
|
} & {
|
|
@@ -292,7 +292,7 @@ declare function createPageContextPrerendering(urlOriginal: string, prerenderCon
|
|
|
292
292
|
_sources: import("../../shared/page-configs/resolveVikeConfigPublic.js").Sources;
|
|
293
293
|
_from: import("../../shared/page-configs/resolveVikeConfigPublic.js").From;
|
|
294
294
|
} & {
|
|
295
|
-
urlParsed: import("../
|
|
295
|
+
urlParsed: import("../runtime/utils.js").UrlPublic;
|
|
296
296
|
urlPathname: string;
|
|
297
297
|
url: string;
|
|
298
298
|
} & {
|
|
@@ -310,13 +310,259 @@ declare function createPageContextPrerendering(urlOriginal: string, prerenderCon
|
|
|
310
310
|
pageId: string;
|
|
311
311
|
_debugRouteMatches: never[];
|
|
312
312
|
routeParams: {};
|
|
313
|
-
})) &
|
|
313
|
+
})) & (((({
|
|
314
|
+
_isOriginalObject: true;
|
|
315
|
+
isPageContext: true;
|
|
316
|
+
} & {
|
|
317
|
+
isClientSide: false;
|
|
318
|
+
isPrerendering: boolean;
|
|
319
|
+
} & Pick<import("../../types/PageContext.js").PageContextInternalServer, "urlOriginal" | "headersOriginal"> & {
|
|
320
|
+
url?: string;
|
|
321
|
+
headers?: Record<string, string>;
|
|
322
|
+
} & {
|
|
323
|
+
_globalContext: {
|
|
324
|
+
isGlobalContext: true;
|
|
325
|
+
_isOriginalObject: true;
|
|
326
|
+
_virtualFileExports: unknown;
|
|
327
|
+
_pageFilesAll: PageFile[];
|
|
328
|
+
_pageConfigs: import("../../types/PageConfig.js").PageConfigRuntime[];
|
|
329
|
+
_pageConfigGlobal: import("../../types/PageConfig.js").PageConfigGlobalRuntime;
|
|
330
|
+
_allPageIds: string[];
|
|
331
|
+
_vikeConfigPublicGlobal: {
|
|
332
|
+
config: import("../../types/index.js").ConfigResolved;
|
|
333
|
+
_source: import("../../shared/page-configs/resolveVikeConfigPublic.js").Source;
|
|
334
|
+
_sources: import("../../shared/page-configs/resolveVikeConfigPublic.js").Sources;
|
|
335
|
+
_from: import("../../shared/page-configs/resolveVikeConfigPublic.js").From;
|
|
336
|
+
};
|
|
337
|
+
config: import("../../types/index.js").ConfigResolved;
|
|
338
|
+
pages: {
|
|
339
|
+
[k: string]: import("../../shared/page-configs/resolveVikeConfigPublic.js").VikeConfigPublicPageEager;
|
|
340
|
+
};
|
|
341
|
+
} & ({
|
|
342
|
+
_isProduction: false;
|
|
343
|
+
_isPrerendering: false;
|
|
344
|
+
assetsManifest: null;
|
|
345
|
+
_viteDevServer: import("vite").ViteDevServer;
|
|
346
|
+
viteConfig: ResolvedConfig;
|
|
347
|
+
viteConfigRuntime: {
|
|
348
|
+
root: string;
|
|
349
|
+
build: {
|
|
350
|
+
outDir: string;
|
|
351
|
+
};
|
|
352
|
+
_baseViteOriginal: string;
|
|
353
|
+
vitePluginServerEntry: {
|
|
354
|
+
inject: boolean | undefined;
|
|
355
|
+
};
|
|
356
|
+
};
|
|
357
|
+
baseServer: string;
|
|
358
|
+
baseAssets: string;
|
|
359
|
+
isClientSide: false;
|
|
360
|
+
_pageRoutes: import("../../shared/route/loadPageRoutes.js").PageRoutes;
|
|
361
|
+
_onBeforeRouteHook: import("../../shared/hooks/getHook.js").Hook | null;
|
|
362
|
+
} | {
|
|
363
|
+
_isPrerendering: true;
|
|
364
|
+
viteConfig: ResolvedConfig;
|
|
365
|
+
_isProduction: true;
|
|
366
|
+
assetsManifest: import("../../types/ViteManifest.js").ViteManifest;
|
|
367
|
+
_viteDevServer: null;
|
|
368
|
+
viteConfigRuntime: {
|
|
369
|
+
root: string;
|
|
370
|
+
build: {
|
|
371
|
+
outDir: string;
|
|
372
|
+
};
|
|
373
|
+
_baseViteOriginal: string;
|
|
374
|
+
vitePluginServerEntry: {
|
|
375
|
+
inject: boolean | undefined;
|
|
376
|
+
};
|
|
377
|
+
};
|
|
378
|
+
_usesClientRouter: boolean;
|
|
379
|
+
baseServer: string;
|
|
380
|
+
baseAssets: string;
|
|
381
|
+
isClientSide: false;
|
|
382
|
+
_pageRoutes: import("../../shared/route/loadPageRoutes.js").PageRoutes;
|
|
383
|
+
_onBeforeRouteHook: import("../../shared/hooks/getHook.js").Hook | null;
|
|
384
|
+
} | {
|
|
385
|
+
_isPrerendering: false;
|
|
386
|
+
viteConfig: null;
|
|
387
|
+
_isProduction: true;
|
|
388
|
+
assetsManifest: import("../../types/ViteManifest.js").ViteManifest;
|
|
389
|
+
_viteDevServer: null;
|
|
390
|
+
viteConfigRuntime: {
|
|
391
|
+
root: string;
|
|
392
|
+
build: {
|
|
393
|
+
outDir: string;
|
|
394
|
+
};
|
|
395
|
+
_baseViteOriginal: string;
|
|
396
|
+
vitePluginServerEntry: {
|
|
397
|
+
inject: boolean | undefined;
|
|
398
|
+
};
|
|
399
|
+
};
|
|
400
|
+
_usesClientRouter: boolean;
|
|
401
|
+
baseServer: string;
|
|
402
|
+
baseAssets: string;
|
|
403
|
+
isClientSide: false;
|
|
404
|
+
_pageRoutes: import("../../shared/route/loadPageRoutes.js").PageRoutes;
|
|
405
|
+
_onBeforeRouteHook: import("../../shared/hooks/getHook.js").Hook | null;
|
|
406
|
+
});
|
|
407
|
+
_pageFilesAll: PageFile[];
|
|
408
|
+
_baseServer: string;
|
|
409
|
+
_baseAssets: string;
|
|
410
|
+
_pageContextInit: import("../runtime/renderPage.js").PageContextInit;
|
|
411
|
+
_urlRewrite: null;
|
|
412
|
+
_urlHandler: ((url: string) => string) | null;
|
|
413
|
+
isClientSideNavigation: boolean;
|
|
414
|
+
} & {
|
|
415
|
+
config: import("../../types/index.js").ConfigResolved;
|
|
416
|
+
_source: import("../../shared/page-configs/resolveVikeConfigPublic.js").Source;
|
|
417
|
+
_sources: import("../../shared/page-configs/resolveVikeConfigPublic.js").Sources;
|
|
418
|
+
_from: import("../../shared/page-configs/resolveVikeConfigPublic.js").From;
|
|
419
|
+
} & {
|
|
420
|
+
urlParsed: import("../runtime/utils.js").UrlPublic;
|
|
421
|
+
urlPathname: string;
|
|
422
|
+
url: string;
|
|
423
|
+
} & {
|
|
424
|
+
headers: Record<string, string> | null;
|
|
425
|
+
} & {
|
|
426
|
+
_urlHandler: null;
|
|
427
|
+
_httpRequestId: null;
|
|
428
|
+
_urlRewrite: null;
|
|
429
|
+
_noExtraDir: boolean | null;
|
|
430
|
+
_prerenderContext: PrerenderContext;
|
|
431
|
+
_providedByHook: ProvidedByHook;
|
|
432
|
+
_urlOriginalModifiedByHook: ProvidedByHookTransformer;
|
|
433
|
+
is404: boolean;
|
|
434
|
+
} & import("../../shared/route/index.js").PageContextFromRoute & Record<"pageId", string>) | ({
|
|
435
|
+
_isOriginalObject: true;
|
|
436
|
+
isPageContext: true;
|
|
437
|
+
} & {
|
|
438
|
+
isClientSide: false;
|
|
439
|
+
isPrerendering: boolean;
|
|
440
|
+
} & Pick<import("../../types/PageContext.js").PageContextInternalServer, "urlOriginal" | "headersOriginal"> & {
|
|
441
|
+
url?: string;
|
|
442
|
+
headers?: Record<string, string>;
|
|
443
|
+
} & {
|
|
444
|
+
_globalContext: {
|
|
445
|
+
isGlobalContext: true;
|
|
446
|
+
_isOriginalObject: true;
|
|
447
|
+
_virtualFileExports: unknown;
|
|
448
|
+
_pageFilesAll: PageFile[];
|
|
449
|
+
_pageConfigs: import("../../types/PageConfig.js").PageConfigRuntime[];
|
|
450
|
+
_pageConfigGlobal: import("../../types/PageConfig.js").PageConfigGlobalRuntime;
|
|
451
|
+
_allPageIds: string[];
|
|
452
|
+
_vikeConfigPublicGlobal: {
|
|
453
|
+
config: import("../../types/index.js").ConfigResolved;
|
|
454
|
+
_source: import("../../shared/page-configs/resolveVikeConfigPublic.js").Source;
|
|
455
|
+
_sources: import("../../shared/page-configs/resolveVikeConfigPublic.js").Sources;
|
|
456
|
+
_from: import("../../shared/page-configs/resolveVikeConfigPublic.js").From;
|
|
457
|
+
};
|
|
458
|
+
config: import("../../types/index.js").ConfigResolved;
|
|
459
|
+
pages: {
|
|
460
|
+
[k: string]: import("../../shared/page-configs/resolveVikeConfigPublic.js").VikeConfigPublicPageEager;
|
|
461
|
+
};
|
|
462
|
+
} & ({
|
|
463
|
+
_isProduction: false;
|
|
464
|
+
_isPrerendering: false;
|
|
465
|
+
assetsManifest: null;
|
|
466
|
+
_viteDevServer: import("vite").ViteDevServer;
|
|
467
|
+
viteConfig: ResolvedConfig;
|
|
468
|
+
viteConfigRuntime: {
|
|
469
|
+
root: string;
|
|
470
|
+
build: {
|
|
471
|
+
outDir: string;
|
|
472
|
+
};
|
|
473
|
+
_baseViteOriginal: string;
|
|
474
|
+
vitePluginServerEntry: {
|
|
475
|
+
inject: boolean | undefined;
|
|
476
|
+
};
|
|
477
|
+
};
|
|
478
|
+
baseServer: string;
|
|
479
|
+
baseAssets: string;
|
|
480
|
+
isClientSide: false;
|
|
481
|
+
_pageRoutes: import("../../shared/route/loadPageRoutes.js").PageRoutes;
|
|
482
|
+
_onBeforeRouteHook: import("../../shared/hooks/getHook.js").Hook | null;
|
|
483
|
+
} | {
|
|
484
|
+
_isPrerendering: true;
|
|
485
|
+
viteConfig: ResolvedConfig;
|
|
486
|
+
_isProduction: true;
|
|
487
|
+
assetsManifest: import("../../types/ViteManifest.js").ViteManifest;
|
|
488
|
+
_viteDevServer: null;
|
|
489
|
+
viteConfigRuntime: {
|
|
490
|
+
root: string;
|
|
491
|
+
build: {
|
|
492
|
+
outDir: string;
|
|
493
|
+
};
|
|
494
|
+
_baseViteOriginal: string;
|
|
495
|
+
vitePluginServerEntry: {
|
|
496
|
+
inject: boolean | undefined;
|
|
497
|
+
};
|
|
498
|
+
};
|
|
499
|
+
_usesClientRouter: boolean;
|
|
500
|
+
baseServer: string;
|
|
501
|
+
baseAssets: string;
|
|
502
|
+
isClientSide: false;
|
|
503
|
+
_pageRoutes: import("../../shared/route/loadPageRoutes.js").PageRoutes;
|
|
504
|
+
_onBeforeRouteHook: import("../../shared/hooks/getHook.js").Hook | null;
|
|
505
|
+
} | {
|
|
506
|
+
_isPrerendering: false;
|
|
507
|
+
viteConfig: null;
|
|
508
|
+
_isProduction: true;
|
|
509
|
+
assetsManifest: import("../../types/ViteManifest.js").ViteManifest;
|
|
510
|
+
_viteDevServer: null;
|
|
511
|
+
viteConfigRuntime: {
|
|
512
|
+
root: string;
|
|
513
|
+
build: {
|
|
514
|
+
outDir: string;
|
|
515
|
+
};
|
|
516
|
+
_baseViteOriginal: string;
|
|
517
|
+
vitePluginServerEntry: {
|
|
518
|
+
inject: boolean | undefined;
|
|
519
|
+
};
|
|
520
|
+
};
|
|
521
|
+
_usesClientRouter: boolean;
|
|
522
|
+
baseServer: string;
|
|
523
|
+
baseAssets: string;
|
|
524
|
+
isClientSide: false;
|
|
525
|
+
_pageRoutes: import("../../shared/route/loadPageRoutes.js").PageRoutes;
|
|
526
|
+
_onBeforeRouteHook: import("../../shared/hooks/getHook.js").Hook | null;
|
|
527
|
+
});
|
|
528
|
+
_pageFilesAll: PageFile[];
|
|
529
|
+
_baseServer: string;
|
|
530
|
+
_baseAssets: string;
|
|
531
|
+
_pageContextInit: import("../runtime/renderPage.js").PageContextInit;
|
|
532
|
+
_urlRewrite: null;
|
|
533
|
+
_urlHandler: ((url: string) => string) | null;
|
|
534
|
+
isClientSideNavigation: boolean;
|
|
535
|
+
} & {
|
|
536
|
+
config: import("../../types/index.js").ConfigResolved;
|
|
537
|
+
_source: import("../../shared/page-configs/resolveVikeConfigPublic.js").Source;
|
|
538
|
+
_sources: import("../../shared/page-configs/resolveVikeConfigPublic.js").Sources;
|
|
539
|
+
_from: import("../../shared/page-configs/resolveVikeConfigPublic.js").From;
|
|
540
|
+
} & {
|
|
541
|
+
urlParsed: import("../runtime/utils.js").UrlPublic;
|
|
542
|
+
urlPathname: string;
|
|
543
|
+
url: string;
|
|
544
|
+
} & {
|
|
545
|
+
headers: Record<string, string> | null;
|
|
546
|
+
} & {
|
|
547
|
+
_urlHandler: null;
|
|
548
|
+
_httpRequestId: null;
|
|
549
|
+
_urlRewrite: null;
|
|
550
|
+
_noExtraDir: boolean | null;
|
|
551
|
+
_prerenderContext: PrerenderContext;
|
|
552
|
+
_providedByHook: ProvidedByHook;
|
|
553
|
+
_urlOriginalModifiedByHook: ProvidedByHookTransformer;
|
|
554
|
+
is404: boolean;
|
|
555
|
+
} & {
|
|
556
|
+
pageId: string;
|
|
557
|
+
_debugRouteMatches: never[];
|
|
558
|
+
routeParams: {};
|
|
559
|
+
})) & import("../../shared/getPageFiles.js").VikeConfigPublicPageLazy) & {
|
|
314
560
|
Page: unknown;
|
|
315
561
|
_isHtmlOnly: boolean;
|
|
316
562
|
_passToClient: string[];
|
|
317
563
|
_pageFilePathsLoaded: string[];
|
|
318
564
|
} & {
|
|
319
565
|
__getPageAssets: () => Promise<import("../runtime/renderPage/getPageAssets.js").PageAsset[]>;
|
|
320
|
-
}) & {
|
|
566
|
+
})) & {
|
|
321
567
|
_usesClientRouter: boolean;
|
|
322
568
|
}>;
|
|
@@ -29,6 +29,7 @@ import { getOutDirs } from '../vite/shared/getOutDirs.js';
|
|
|
29
29
|
import fs from 'node:fs';
|
|
30
30
|
import { getProxyForPublicUsage } from '../../shared/getProxyForPublicUsage.js';
|
|
31
31
|
import { getStaticRedirectsForPrerender } from '../runtime/renderPage/resolveRedirects.js';
|
|
32
|
+
import { augmentType } from '../runtime/utils.js';
|
|
32
33
|
const docLink = 'https://vike.dev/i18n#pre-rendering';
|
|
33
34
|
async function runPrerender(options = {}, trigger) {
|
|
34
35
|
setWasPrerenderRun(trigger);
|
|
@@ -322,7 +323,7 @@ async function createPageContextPrerendering(urlOriginal, prerenderContext, glob
|
|
|
322
323
|
routeParams: {},
|
|
323
324
|
});
|
|
324
325
|
}
|
|
325
|
-
|
|
326
|
+
augmentType(pageContext, await loadPageConfigsLazyServerSide(pageContext));
|
|
326
327
|
let usesClientRouter;
|
|
327
328
|
{
|
|
328
329
|
const { pageId } = pageContext;
|
|
@@ -1,18 +1,27 @@
|
|
|
1
1
|
export { loadPageConfigsLazyServerSide };
|
|
2
|
-
export type { PageFiles };
|
|
3
2
|
export type { PageContext_loadPageConfigsLazyServerSide };
|
|
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 PageContextExecuteHookServer } from './execHookServer.js';
|
|
9
|
+
type PageContextExecute = Omit<PageContextExecuteHookServer, keyof Awaited<ReturnType<typeof loadPageConfigsLazy>>>;
|
|
8
10
|
type PageContext_loadPageConfigsLazyServerSide = PageContextGetPageAssets & PageContextDebugRouteMatches & {
|
|
11
|
+
pageId: string;
|
|
9
12
|
urlOriginal: string;
|
|
10
13
|
_globalContext: GlobalContextServerInternal;
|
|
11
14
|
};
|
|
12
|
-
type
|
|
13
|
-
declare function loadPageConfigsLazyServerSide(pageContext: {
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
type PageConfigsLazy = PromiseType<ReturnType<typeof loadPageConfigsLazy>>;
|
|
16
|
+
declare function loadPageConfigsLazyServerSide<PageContext extends PageContext_loadPageConfigsLazyServerSide & PageContextExecute>(pageContext: PageContext): Promise<PageContext & import("../../../shared/getPageFiles.js").VikeConfigPublicPageLazy & {
|
|
17
|
+
Page: unknown;
|
|
18
|
+
_isHtmlOnly: boolean;
|
|
19
|
+
_passToClient: string[];
|
|
20
|
+
_pageFilePathsLoaded: string[];
|
|
21
|
+
} & {
|
|
22
|
+
__getPageAssets: () => Promise<PageAsset[]>;
|
|
23
|
+
}>;
|
|
24
|
+
declare function loadPageConfigsLazy(pageContext: PageContext_loadPageConfigsLazyServerSide): Promise<import("../../../shared/getPageFiles.js").VikeConfigPublicPageLazy & {
|
|
16
25
|
Page: unknown;
|
|
17
26
|
_isHtmlOnly: boolean;
|
|
18
27
|
_passToClient: string[];
|
|
@@ -8,7 +8,14 @@ import { debugPageFiles } from './debugPageFiles.js';
|
|
|
8
8
|
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
|
+
import { execHookServer } from './execHookServer.js';
|
|
11
12
|
async function loadPageConfigsLazyServerSide(pageContext) {
|
|
13
|
+
const pageContextAddendum = await loadPageConfigsLazy(pageContext);
|
|
14
|
+
objectAssign(pageContext, pageContextAddendum);
|
|
15
|
+
await execHookServer('onCreatePageContext', pageContext);
|
|
16
|
+
return pageContext;
|
|
17
|
+
}
|
|
18
|
+
async function loadPageConfigsLazy(pageContext) {
|
|
12
19
|
const pageConfig = findPageConfig(pageContext._globalContext._pageConfigs, pageContext.pageId); // Make pageConfig globally available as pageContext._pageConfig ?
|
|
13
20
|
const globalContext = pageContext._globalContext;
|
|
14
21
|
const [{ pageFilesLoaded, pageContextExports }] = await Promise.all([
|
|
@@ -84,18 +91,16 @@ async function loadPageConfigsLazyServerSide(pageContext) {
|
|
|
84
91
|
return pageAssetsOldFormat;
|
|
85
92
|
},
|
|
86
93
|
});
|
|
87
|
-
{
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
});
|
|
98
|
-
}
|
|
94
|
+
debugPageFiles({
|
|
95
|
+
pageContext,
|
|
96
|
+
isHtmlOnly,
|
|
97
|
+
isClientRouting,
|
|
98
|
+
pageFilesLoaded,
|
|
99
|
+
pageFilesClientSide,
|
|
100
|
+
pageFilesServerSide,
|
|
101
|
+
clientEntries,
|
|
102
|
+
clientDependencies,
|
|
103
|
+
});
|
|
99
104
|
return pageContextAddendum;
|
|
100
105
|
}
|
|
101
106
|
async function loadPageUserFiles(pageFilesAll, pageConfig, pageConfigGlobal, pageId, isDev) {
|
|
@@ -3,7 +3,7 @@ export { prerenderPage };
|
|
|
3
3
|
export type { PageContextAfterRender };
|
|
4
4
|
import { type PageContextUrlInternal } from '../../../shared/getPageContextUrlComputed.js';
|
|
5
5
|
import { HttpResponse } from './createHttpResponse.js';
|
|
6
|
-
import { PageContext_loadPageConfigsLazyServerSide, type
|
|
6
|
+
import { PageContext_loadPageConfigsLazyServerSide, type PageConfigsLazy } from './loadPageConfigsLazyServerSide.js';
|
|
7
7
|
import type { PageContextCreated } from './createPageContextServerSide.js';
|
|
8
8
|
type PageContextAfterRender = {
|
|
9
9
|
httpResponse: HttpResponse;
|
|
@@ -17,7 +17,7 @@ declare function renderPageAlreadyRouted<PageContext extends {
|
|
|
17
17
|
errorWhileRendering: null | Error;
|
|
18
18
|
_httpRequestId: number;
|
|
19
19
|
} & PageContextCreated & PageContextUrlInternal & PageContext_loadPageConfigsLazyServerSide>(pageContext: PageContext): Promise<PageContext & PageContextAfterRender>;
|
|
20
|
-
declare function prerenderPage(pageContext: PageContextCreated &
|
|
20
|
+
declare function prerenderPage(pageContext: PageContextCreated & PageConfigsLazy & {
|
|
21
21
|
routeParams: Record<string, string>;
|
|
22
22
|
pageId: string;
|
|
23
23
|
_urlRewrite: null;
|
|
@@ -2,7 +2,7 @@ export { renderPageAlreadyRouted };
|
|
|
2
2
|
export { prerenderPage };
|
|
3
3
|
import { getErrorPageId } from '../../../shared/error-page.js';
|
|
4
4
|
import { getHtmlString } from '../html/renderHtml.js';
|
|
5
|
-
import { assert, assertUsage, hasProp, objectAssign } from '../utils.js';
|
|
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
8
|
import { loadPageConfigsLazyServerSide, } from './loadPageConfigsLazyServerSide.js';
|
|
@@ -23,7 +23,7 @@ async function renderPageAlreadyRouted(pageContext) {
|
|
|
23
23
|
assert(isError ===
|
|
24
24
|
(pageContext.pageId ===
|
|
25
25
|
getErrorPageId(pageContext._globalContext._pageFilesAll, pageContext._globalContext._pageConfigs)));
|
|
26
|
-
|
|
26
|
+
augmentType(pageContext, await loadPageConfigsLazyServerSide(pageContext));
|
|
27
27
|
if (!isError) {
|
|
28
28
|
await executeGuardHook(pageContext, (pageContext) => preparePageContextForPublicUsageServer(pageContext));
|
|
29
29
|
}
|
|
@@ -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, } from './utils.js';
|
|
6
|
+
import { assert, hasProp, objectAssign, isUrl, parseUrl, onSetupRuntime, assertWarning, getGlobalObject, checkType, assertUsage, normalizeUrlPathname, removeBaseServer, modifyUrlPathname, prependBase, removeUrlOrigin, setUrlOrigin, isUri, getUrlPretty, augmentType, } 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';
|
|
@@ -138,59 +138,66 @@ 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
|
-
|
|
141
|
+
return await renderPageOnError(errNominalPage, pageContextBegin, pageContextNominalPageBegin, globalContext, httpRequestId, pageContextsFromRewrite);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// When the normal page threw an error
|
|
145
|
+
// - Can be a URL rewrite upon `throw render('/some-url')`
|
|
146
|
+
// - Can be rendering the error page
|
|
147
|
+
// - Can be rendering Vike's generic error page (if no error page is defined, or if the error page throws an error)
|
|
148
|
+
async function renderPageOnError(errNominalPage, pageContextBegin, pageContextNominalPageBegin, globalContext, httpRequestId, pageContextsFromRewrite) {
|
|
149
|
+
assert(pageContextNominalPageBegin);
|
|
150
|
+
assert(hasProp(pageContextNominalPageBegin, 'urlOriginal', 'string'));
|
|
151
|
+
const pageContextErrorPageInit = await getPageContextErrorPageInit(pageContextBegin, errNominalPage, pageContextNominalPageBegin);
|
|
152
|
+
// Handle `throw redirect()` and `throw render()` while rendering nominal page
|
|
153
|
+
if (isAbortError(errNominalPage)) {
|
|
154
|
+
const handled = await handleAbortError(errNominalPage, pageContextsFromRewrite, pageContextBegin, pageContextNominalPageBegin, httpRequestId, pageContextErrorPageInit, globalContext);
|
|
155
|
+
if (handled.pageContextReturn) {
|
|
156
|
+
// - throw redirect()
|
|
157
|
+
// - throw render(url)
|
|
158
|
+
// - throw render(abortStatusCode) if .pageContext.json request
|
|
159
|
+
return handled.pageContextReturn;
|
|
157
160
|
}
|
|
158
|
-
{
|
|
159
|
-
|
|
160
|
-
if (!errorPageId) {
|
|
161
|
-
objectAssign(pageContextErrorPageInit, { pageId: null });
|
|
162
|
-
return handleErrorWithoutErrorPage(pageContextErrorPageInit);
|
|
163
|
-
}
|
|
164
|
-
else {
|
|
165
|
-
objectAssign(pageContextErrorPageInit, { pageId: errorPageId });
|
|
166
|
-
}
|
|
161
|
+
else {
|
|
162
|
+
// - throw render(abortStatusCode) if not .pageContext.json request
|
|
167
163
|
}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
164
|
+
Object.assign(pageContextErrorPageInit, handled.pageContextAbort);
|
|
165
|
+
}
|
|
166
|
+
{
|
|
167
|
+
const errorPageId = getErrorPageId(globalContext._pageFilesAll, globalContext._pageConfigs);
|
|
168
|
+
if (!errorPageId) {
|
|
169
|
+
objectAssign(pageContextErrorPageInit, { pageId: null });
|
|
170
|
+
return handleErrorWithoutErrorPage(pageContextErrorPageInit);
|
|
171
171
|
}
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
172
|
+
else {
|
|
173
|
+
objectAssign(pageContextErrorPageInit, { pageId: errorPageId });
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
let pageContextErrorPage;
|
|
177
|
+
try {
|
|
178
|
+
pageContextErrorPage = await renderPageAlreadyRouted(pageContextErrorPageInit);
|
|
179
|
+
}
|
|
180
|
+
catch (errErrorPage) {
|
|
181
|
+
// Handle `throw redirect()` and `throw render()` while rendering error page
|
|
182
|
+
if (isAbortError(errErrorPage)) {
|
|
183
|
+
const handled = await handleAbortError(errErrorPage, pageContextsFromRewrite, pageContextBegin, pageContextNominalPageBegin, httpRequestId, pageContextErrorPageInit, globalContext);
|
|
184
|
+
// throw render(abortStatusCode)
|
|
185
|
+
if (!handled.pageContextReturn) {
|
|
186
|
+
const pageContextAbort = errErrorPage._pageContextAbort;
|
|
187
|
+
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 });
|
|
188
|
+
const pageContextHttpWithError = getPageContextHttpResponseError(errNominalPage, pageContextBegin);
|
|
189
|
+
return pageContextHttpWithError;
|
|
188
190
|
}
|
|
189
|
-
|
|
190
|
-
return
|
|
191
|
+
// `throw redirect()` / `throw render(url)`
|
|
192
|
+
return handled.pageContextReturn;
|
|
191
193
|
}
|
|
192
|
-
|
|
194
|
+
if (isNewError(errErrorPage, errNominalPage)) {
|
|
195
|
+
logRuntimeError(errErrorPage, httpRequestId);
|
|
196
|
+
}
|
|
197
|
+
const pageContextWithError = getPageContextHttpResponseError(errNominalPage, pageContextBegin);
|
|
198
|
+
return pageContextWithError;
|
|
193
199
|
}
|
|
200
|
+
return pageContextErrorPage;
|
|
194
201
|
}
|
|
195
202
|
function logHttpRequest(urlOriginal, httpRequestId) {
|
|
196
203
|
logRuntimeInfo?.(getRequestInfoMessage(urlOriginal), httpRequestId, 'info');
|
|
@@ -412,7 +419,7 @@ pageContextNominalPageBegin, httpRequestId, pageContextErrorPageInit, globalCont
|
|
|
412
419
|
objectAssign(pageContext, { pageId: errorPageId });
|
|
413
420
|
objectAssign(pageContext, pageContextAbort);
|
|
414
421
|
objectAssign(pageContext, pageContextErrorPageInit, true);
|
|
415
|
-
|
|
422
|
+
augmentType(pageContext, await loadPageConfigsLazyServerSide(pageContext));
|
|
416
423
|
// We include pageContextInit: we don't only serialize pageContextAbort because the error page may need to access pageContextInit
|
|
417
424
|
pageContextSerialized = getPageContextClientSerialized(pageContext);
|
|
418
425
|
}
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
export { createPageContextShared };
|
|
2
2
|
export { createPageContextObject };
|
|
3
|
-
import { execHookGlobal } from './hooks/execHook.js';
|
|
4
|
-
import { preparePageContextForPublicUsage } from './preparePageContextForPublicUsage.js';
|
|
5
3
|
import { changeEnumerable, objectAssign } from './utils.js';
|
|
4
|
+
// TODO/now: make this and parents sync
|
|
6
5
|
async function createPageContextShared(pageContextCreated, pageConfigGlobal, vikeConfigPublicGlobal) {
|
|
7
6
|
objectAssign(pageContextCreated, vikeConfigPublicGlobal);
|
|
8
|
-
await execHookGlobal('onCreatePageContext', pageConfigGlobal, pageContextCreated, pageContextCreated, preparePageContextForPublicUsage);
|
|
9
7
|
return pageContextCreated;
|
|
10
8
|
}
|
|
11
9
|
function createPageContextObject() {
|
|
@@ -19,6 +19,7 @@ import type { PageContextForPublicUsageServer } from '../../node/runtime/renderP
|
|
|
19
19
|
import type { PageContextForPublicUsageClientShared } from '../../client/shared/preparePageContextForPublicUsageClientShared.js';
|
|
20
20
|
import { type PageContextPrepareMinimum } from '../preparePageContextForPublicUsage.js';
|
|
21
21
|
import type { GlobalContextPrepareMinimum } from '../prepareGlobalContextForPublicUsage.js';
|
|
22
|
+
type PageContextPrepareMinimum2 = PageContextPrepareMinimum & VikeConfigPublicPageLazy;
|
|
22
23
|
type PageContextExecuteHook = VikeConfigPublicPageLazy & PageContextForPublicUsage;
|
|
23
24
|
type PageContextForPublicUsage = PageContextForPublicUsageServer | PageContextForPublicUsageClientShared;
|
|
24
25
|
type HookWithResult = Hook & {
|
|
@@ -28,8 +29,8 @@ declare function execHookSingle<PageContext extends PageContextExecuteHook>(hook
|
|
|
28
29
|
declare function execHookSingleWithReturn<PageContext extends PageContextExecuteHook>(hook: Hook, pageContext: PageContext, preparePageContextForPublicUsage: (pageContext: PageContext) => PageContext): Promise<{
|
|
29
30
|
hookReturn: unknown;
|
|
30
31
|
}>;
|
|
31
|
-
declare function execHook<PageContext extends
|
|
32
|
-
declare function execHookErrorHandling<PageContext extends
|
|
32
|
+
declare function execHook<PageContext extends PageContextPrepareMinimum2>(hookName: HookName, pageContext: PageContext, preparePageContextForPublicUsage: (pageContext: PageContext) => PageContext): Promise<HookWithResult[]>;
|
|
33
|
+
declare function execHookErrorHandling<PageContext extends PageContextPrepareMinimum2>(hookName: HookName, pageContext: PageContext, preparePageContextForPublicUsage: (pageContext: PageContext) => PageContext): Promise<{
|
|
33
34
|
hooks: HookWithResult[];
|
|
34
35
|
err?: undefined;
|
|
35
36
|
} | {
|
|
@@ -12,6 +12,7 @@ import { resolveRouteFunction } from './resolveRouteFunction.js';
|
|
|
12
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
|
|
15
16
|
async function route(pageContext, skipOnBeforeRouteHook) {
|
|
16
17
|
debug('Pages routes:', pageContext._globalContext._pageRoutes);
|
|
17
18
|
const pageContextFromRoute = {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const PROJECT_VERSION: "0.4.232-commit-
|
|
1
|
+
export declare const PROJECT_VERSION: "0.4.232-commit-ec54a7e";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// Automatically updated by @brillout/release-me
|
|
2
|
-
export const PROJECT_VERSION = '0.4.232-commit-
|
|
2
|
+
export const PROJECT_VERSION = '0.4.232-commit-ec54a7e';
|