vike 0.4.228-commit-67e28cd → 0.4.228-commit-ae4784f
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/client/client-routing-runtime/globalContextClientSide.js +10 -0
- package/dist/cjs/client/client-routing-runtime/onLoad.js +10 -0
- package/dist/cjs/client/client-routing-runtime/utils.js +43 -0
- package/dist/cjs/client/server-routing-runtime/utils.js +0 -1
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +5 -0
- package/dist/cjs/node/prerender/runPrerender.js +8 -7
- package/dist/cjs/node/runtime/renderPage/createHttpResponse.js +8 -3
- package/dist/cjs/node/runtime/renderPage/createPageContextServerSide.js +73 -0
- package/dist/cjs/node/runtime/renderPage/executeHookGeneric.js +18 -0
- package/dist/cjs/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.js +2 -2
- package/dist/cjs/node/runtime/renderPage/executeOnRenderHtmlHook.js +2 -2
- package/dist/cjs/node/runtime/renderPage/getPageAssets/retrieveAssetsDev.js +1 -17
- package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +0 -65
- package/dist/cjs/node/runtime/renderPage.js +96 -75
- package/dist/cjs/shared/hooks/getHook.js +45 -27
- package/dist/cjs/shared/route/executeGuardHook.js +1 -1
- package/dist/cjs/shared/route/loadPageRoutes.js +1 -0
- package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
- package/dist/cjs/utils/objectAssign.js +2 -6
- package/dist/esm/client/client-routing-runtime/createPageContext.d.ts +3 -0
- package/dist/esm/client/client-routing-runtime/createPageContext.js +2 -0
- package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.js +4 -3
- package/dist/esm/client/client-routing-runtime/globalContextClientSide.d.ts +5 -0
- package/dist/esm/client/client-routing-runtime/globalContextClientSide.js +8 -0
- package/dist/esm/client/client-routing-runtime/renderPageClientSide.js +8 -6
- package/dist/esm/client/client-routing-runtime/utils.d.ts +0 -1
- package/dist/esm/client/client-routing-runtime/utils.js +0 -1
- package/dist/esm/client/server-routing-runtime/utils.d.ts +0 -1
- package/dist/esm/client/server-routing-runtime/utils.js +0 -1
- package/dist/esm/client/shared/executeOnRenderClientHook.js +5 -4
- package/dist/esm/client/shared/removeFoucBuster.js +1 -0
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +5 -0
- package/dist/esm/node/prerender/runPrerender.js +9 -8
- package/dist/esm/node/runtime/renderPage/createHttpResponse.d.ts +5 -4
- package/dist/esm/node/runtime/renderPage/createHttpResponse.js +8 -3
- package/dist/esm/node/runtime/renderPage/createPageContextServerSide.d.ts +85 -0
- package/dist/esm/node/runtime/renderPage/createPageContextServerSide.js +71 -0
- package/dist/esm/node/runtime/renderPage/executeHookGeneric.d.ts +9 -0
- package/dist/esm/node/runtime/renderPage/executeHookGeneric.js +16 -0
- package/dist/esm/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.js +3 -3
- package/dist/esm/node/runtime/renderPage/executeOnRenderHtmlHook.js +3 -3
- package/dist/esm/node/runtime/renderPage/getPageAssets/retrieveAssetsDev.js +1 -17
- package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +15 -113
- package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +1 -66
- package/dist/esm/node/runtime/renderPage.d.ts +74 -7
- package/dist/esm/node/runtime/renderPage.js +98 -77
- package/dist/esm/shared/hooks/getHook.d.ts +4 -2
- package/dist/esm/shared/hooks/getHook.js +47 -29
- package/dist/esm/shared/page-configs/Config.d.ts +6 -1
- package/dist/esm/shared/route/executeGuardHook.js +2 -2
- package/dist/esm/shared/route/loadPageRoutes.js +1 -0
- package/dist/esm/shared/types.d.ts +8 -6
- package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
- package/dist/esm/utils/PROJECT_VERSION.js +1 -1
- package/dist/esm/utils/objectAssign.js +2 -6
- package/package.json +1 -1
|
@@ -3,13 +3,13 @@ export { getRenderCount };
|
|
|
3
3
|
export { disableClientRouting };
|
|
4
4
|
export { firstRenderStartPromise };
|
|
5
5
|
export { getPageContextClient };
|
|
6
|
-
import { assert, isSameErrorMessage, objectAssign, redirectHard, getGlobalObject,
|
|
6
|
+
import { assert, isSameErrorMessage, objectAssign, redirectHard, getGlobalObject, hasProp, augmentType, genPromise, isCallable, catchInfiniteLoop } from './utils.js';
|
|
7
7
|
import { getPageContextFromClientHooks, getPageContextFromServerHooks, getPageContextFromHooks_isHydration, getPageContextFromHooks_serialized, setPageContextInitIsPassedToClient } from './getPageContextFromHooks.js';
|
|
8
8
|
import { createPageContext } from './createPageContext.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 { assertHook,
|
|
12
|
+
import { assertHook, getHookFromPageContext } from '../../shared/hooks/getHook.js';
|
|
13
13
|
import { isErrorFetchingStaticAssets, loadUserFilesClientSide } from '../shared/loadUserFilesClientSide.js';
|
|
14
14
|
import { pushHistoryState } from './history.js';
|
|
15
15
|
import { assertNoInfiniteAbortLoop, getPageContextFromAllRewrites, isAbortError, logAbortErrorHandled } from '../../shared/route/abort.js';
|
|
@@ -21,12 +21,14 @@ import { getErrorPageId } from '../../shared/error-page.js';
|
|
|
21
21
|
import { setPageContextCurrent } from './getPageContextCurrent.js';
|
|
22
22
|
import { getRouteStringParameterList } from '../../shared/route/resolveRouteString.js';
|
|
23
23
|
import { getCurrentUrl } from '../shared/getCurrentUrl.js';
|
|
24
|
+
import { executeHook } from '../../shared/hooks/executeHook.js';
|
|
24
25
|
const globalObject = getGlobalObject('client-routing-runtime/renderPageClientSide.ts', (() => {
|
|
25
26
|
const { promise: firstRenderStartPromise, resolve: firstRenderStartPromiseResolve } = genPromise();
|
|
26
27
|
return {
|
|
27
28
|
renderCounter: 0,
|
|
28
29
|
firstRenderStartPromise,
|
|
29
|
-
firstRenderStartPromiseResolve
|
|
30
|
+
firstRenderStartPromiseResolve,
|
|
31
|
+
globalContext: {}
|
|
30
32
|
};
|
|
31
33
|
})());
|
|
32
34
|
const { firstRenderStartPromise } = globalObject;
|
|
@@ -62,7 +64,7 @@ async function renderPageClientSide(renderArgs) {
|
|
|
62
64
|
assertHook(previousPageContext, 'onPageTransitionStart');
|
|
63
65
|
if (!globalObject.isTransitioning) {
|
|
64
66
|
globalObject.isTransitioning = true;
|
|
65
|
-
const onPageTransitionStartHook =
|
|
67
|
+
const onPageTransitionStartHook = getHookFromPageContext(previousPageContext, 'onPageTransitionStart');
|
|
66
68
|
if (onPageTransitionStartHook) {
|
|
67
69
|
const hook = onPageTransitionStartHook;
|
|
68
70
|
const { hookFn } = hook;
|
|
@@ -429,7 +431,7 @@ async function renderPageClientSide(renderArgs) {
|
|
|
429
431
|
// onHydrationEnd()
|
|
430
432
|
if (isFirstRender && !onRenderClientError) {
|
|
431
433
|
assertHook(pageContext, 'onHydrationEnd');
|
|
432
|
-
const hook =
|
|
434
|
+
const hook = getHookFromPageContext(pageContext, 'onHydrationEnd');
|
|
433
435
|
if (hook) {
|
|
434
436
|
const { hookFn } = hook;
|
|
435
437
|
try {
|
|
@@ -452,7 +454,7 @@ async function renderPageClientSide(renderArgs) {
|
|
|
452
454
|
globalObject.isTransitioning = undefined;
|
|
453
455
|
assert(previousPageContext);
|
|
454
456
|
assertHook(previousPageContext, 'onPageTransitionEnd');
|
|
455
|
-
const hook =
|
|
457
|
+
const hook = getHookFromPageContext(previousPageContext, 'onPageTransitionEnd');
|
|
456
458
|
if (hook) {
|
|
457
459
|
const { hookFn } = hook;
|
|
458
460
|
try {
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
export * from '../../utils/assert.js';
|
|
2
2
|
export * from '../../utils/assertSingleInstance.js';
|
|
3
|
-
export * from '../../shared/hooks/executeHook.js';
|
|
4
3
|
export * from '../../utils/getGlobalObject.js';
|
|
5
4
|
export * from '../../utils/hasProp.js';
|
|
6
5
|
export * from '../../utils/isBrowser.js';
|
|
@@ -4,7 +4,6 @@ import { onLoad } from './onLoad.js';
|
|
|
4
4
|
onLoad();
|
|
5
5
|
export * from '../../utils/assert.js';
|
|
6
6
|
export * from '../../utils/assertSingleInstance.js';
|
|
7
|
-
export * from '../../shared/hooks/executeHook.js';
|
|
8
7
|
export * from '../../utils/getGlobalObject.js';
|
|
9
8
|
export * from '../../utils/hasProp.js';
|
|
10
9
|
export * from '../../utils/isBrowser.js';
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
export * from '../../utils/assert.js';
|
|
2
2
|
export * from '../../utils/assertSingleInstance.js';
|
|
3
|
-
export * from '../../shared/hooks/executeHook.js';
|
|
4
3
|
export * from '../../utils/checkType.js';
|
|
5
4
|
export * from '../../utils/getGlobalObject.js';
|
|
6
5
|
export * from '../../utils/hasProp.js';
|
|
@@ -4,7 +4,6 @@ import { onLoad } from './onLoad.js';
|
|
|
4
4
|
onLoad();
|
|
5
5
|
export * from '../../utils/assert.js';
|
|
6
6
|
export * from '../../utils/assertSingleInstance.js';
|
|
7
|
-
export * from '../../shared/hooks/executeHook.js';
|
|
8
7
|
export * from '../../utils/checkType.js'; // Only used by Server Routing (not needed for Client Routing)
|
|
9
8
|
export * from '../../utils/getGlobalObject.js';
|
|
10
9
|
export * from '../../utils/hasProp.js';
|
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
export { executeOnRenderClientHook };
|
|
2
|
-
import { assert, assertUsage
|
|
3
|
-
import {
|
|
2
|
+
import { assert, assertUsage } from '../server-routing-runtime/utils.js';
|
|
3
|
+
import { getHookFromPageContext } from '../../shared/hooks/getHook.js';
|
|
4
4
|
import { preparePageContextForUserConsumptionClientSide } from './preparePageContextForUserConsumptionClientSide.js';
|
|
5
|
+
import { executeHook } from '../../shared/hooks/executeHook.js';
|
|
5
6
|
async function executeOnRenderClientHook(pageContext, isClientRouting) {
|
|
6
7
|
const pageContextForUserConsumption = preparePageContextForUserConsumptionClientSide(pageContext, isClientRouting);
|
|
7
8
|
let hook = null;
|
|
8
9
|
let hookName;
|
|
9
10
|
{
|
|
10
|
-
const renderHook =
|
|
11
|
+
const renderHook = getHookFromPageContext(pageContext, 'render');
|
|
11
12
|
hook = renderHook;
|
|
12
13
|
hookName = 'render';
|
|
13
14
|
}
|
|
14
15
|
{
|
|
15
|
-
const renderHook =
|
|
16
|
+
const renderHook = getHookFromPageContext(pageContext, 'onRenderClient');
|
|
16
17
|
if (renderHook) {
|
|
17
18
|
hook = renderHook;
|
|
18
19
|
hookName = 'onRenderClient';
|
|
@@ -6,6 +6,7 @@ import { assert } from './utils.js';
|
|
|
6
6
|
// - https://github.com/rakkasjs/rakkasjs/blob/7d75ccc915e93bca04e6bab37dc6abdb68a85e4a/packages/rakkasjs/src/features/pages/middleware.tsx#L701
|
|
7
7
|
// - https://github.com/remix-run/remix/issues/8830
|
|
8
8
|
function removeFoucBuster() {
|
|
9
|
+
// In production removeFoucBuster() is expected to be have been removed by tree shaking
|
|
9
10
|
assert(import.meta.env.DEV);
|
|
10
11
|
let sleep = 2;
|
|
11
12
|
setTimeout(runClean, sleep);
|
|
@@ -5,7 +5,8 @@ export { runPrerender_forceExit };
|
|
|
5
5
|
import path from 'path';
|
|
6
6
|
import { route } from '../../shared/route/index.js';
|
|
7
7
|
import { assert, assertUsage, assertWarning, hasProp, objectAssign, isObjectWithKeys, isCallable, isPropertyGetter, assertPosixPath, urlToFile, isPlainObject, pLimit, isArray, onSetupPrerender, makePublicCopy, PROJECT_VERSION, preservePropertyGetters } from './utils.js';
|
|
8
|
-
import { prerenderPage
|
|
8
|
+
import { prerenderPage } from '../runtime/renderPage/renderPageAlreadyRouted.js';
|
|
9
|
+
import { createPageContextServerSide } from '../runtime/renderPage/createPageContextServerSide.js';
|
|
9
10
|
import pc from '@brillout/picocolors';
|
|
10
11
|
import { cpus } from 'os';
|
|
11
12
|
import { getGlobalContextInternal, initGlobalContext_runPrerender, setGlobalContext_isPrerendering } from '../runtime/globalContext.js';
|
|
@@ -109,10 +110,10 @@ async function runPrerender(options = {}, standaloneTrigger) {
|
|
|
109
110
|
await callOnBeforePrerenderStartHooks(prerenderContext, globalContext, concurrencyLimit, doNotPrerenderList);
|
|
110
111
|
// Create `pageContext` for each page with a static route
|
|
111
112
|
const urlList = getUrlListFromPagesWithStaticRoute(globalContext, doNotPrerenderList);
|
|
112
|
-
await
|
|
113
|
+
await createPageContexts(urlList, prerenderContext, globalContext, concurrencyLimit, false);
|
|
113
114
|
// Create `pageContext` for 404 page
|
|
114
115
|
const urlList404 = getUrlList404(globalContext);
|
|
115
|
-
await
|
|
116
|
+
await createPageContexts(urlList404, prerenderContext, globalContext, concurrencyLimit, true);
|
|
116
117
|
// Allow user to duplicate the list of `pageContext` for i18n
|
|
117
118
|
// https://vike.dev/onPrerenderStart
|
|
118
119
|
await callOnPrerenderStartHook(prerenderContext, globalContext, concurrencyLimit);
|
|
@@ -257,7 +258,7 @@ async function callOnBeforePrerenderStartHooks(prerenderContext, globalContext,
|
|
|
257
258
|
}
|
|
258
259
|
// Add result
|
|
259
260
|
const providedByHook = { hookFilePath, hookName };
|
|
260
|
-
const pageContextNew = await
|
|
261
|
+
const pageContextNew = await createPageContextPrerendering(url, prerenderContext, globalContext, false, undefined, providedByHook);
|
|
261
262
|
prerenderContext.pageContexts.push(pageContextNew);
|
|
262
263
|
if (pageContext) {
|
|
263
264
|
objectAssign(pageContextNew, { _pageContextAlreadyProvidedByOnPrerenderHook: true });
|
|
@@ -303,22 +304,22 @@ function getUrlList404(globalContext) {
|
|
|
303
304
|
}
|
|
304
305
|
return urlList;
|
|
305
306
|
}
|
|
306
|
-
async function
|
|
307
|
+
async function createPageContexts(urlList, prerenderContext, globalContext, concurrencyLimit, is404) {
|
|
307
308
|
await Promise.all(urlList.map(({ urlOriginal, pageId }) => concurrencyLimit(async () => {
|
|
308
309
|
// Already included in a onBeforePrerenderStart() hook
|
|
309
310
|
if (prerenderContext.pageContexts.find((pageContext) => isSameUrl(pageContext.urlOriginal, urlOriginal))) {
|
|
310
311
|
return;
|
|
311
312
|
}
|
|
312
|
-
const pageContext = await
|
|
313
|
+
const pageContext = await createPageContextPrerendering(urlOriginal, prerenderContext, globalContext, is404, pageId, null);
|
|
313
314
|
prerenderContext.pageContexts.push(pageContext);
|
|
314
315
|
})));
|
|
315
316
|
}
|
|
316
|
-
async function
|
|
317
|
+
async function createPageContextPrerendering(urlOriginal, prerenderContext, globalContext, is404, pageId, providedByHook) {
|
|
317
318
|
const pageContextInit = {
|
|
318
319
|
urlOriginal,
|
|
319
320
|
...prerenderContext.pageContextInit
|
|
320
321
|
};
|
|
321
|
-
const pageContext = await
|
|
322
|
+
const pageContext = await createPageContextServerSide(pageContextInit, globalContext, { isPrerendering: true });
|
|
322
323
|
assert(pageContext.isPrerendering === true);
|
|
323
324
|
objectAssign(pageContext, {
|
|
324
325
|
_urlHandler: null,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { createHttpResponsePage };
|
|
2
2
|
export { createHttpResponsePageContextJson };
|
|
3
3
|
export { createHttpResponseError };
|
|
4
|
+
export { createHttpResponseErrorWithoutGlobalContext };
|
|
4
5
|
export { createHttpResponseRedirect };
|
|
5
6
|
export { createHttpResponseFavicon404 };
|
|
6
7
|
export { createHttpResponseBaseIsMissing };
|
|
@@ -13,6 +14,7 @@ import type { RedirectStatusCode, AbortStatusCode, UrlRedirect } from '../../../
|
|
|
13
14
|
import { HttpResponseBody } from './getHttpResponseBody.js';
|
|
14
15
|
import { type EarlyHint } from './getEarlyHints.js';
|
|
15
16
|
import type { PageFile } from '../../../shared/getPageFiles.js';
|
|
17
|
+
import type { PageContextBegin } from '../renderPage.js';
|
|
16
18
|
type HttpResponse = {
|
|
17
19
|
statusCode: 200 | 404 | 500 | RedirectStatusCode | AbortStatusCode;
|
|
18
20
|
headers: [string, string][];
|
|
@@ -30,11 +32,10 @@ declare function createHttpResponsePage(htmlRender: HtmlRender, renderHook: null
|
|
|
30
32
|
}): Promise<HttpResponse>;
|
|
31
33
|
declare function createHttpResponseFavicon404(): HttpResponse;
|
|
32
34
|
declare function createHttpResponseBaseIsMissing(urlOriginal: string, baseServer: string): HttpResponse;
|
|
33
|
-
declare function createHttpResponseError(pageContext:
|
|
35
|
+
declare function createHttpResponseError(pageContext: {
|
|
34
36
|
_pageFilesAll: PageFile[];
|
|
35
37
|
_pageConfigs: PageConfigRuntime[];
|
|
36
38
|
}): HttpResponse;
|
|
39
|
+
declare function createHttpResponseErrorWithoutGlobalContext(): HttpResponse;
|
|
37
40
|
declare function createHttpResponsePageContextJson(pageContextSerialized: string): Promise<HttpResponse>;
|
|
38
|
-
declare function createHttpResponseRedirect({ url, statusCode }: UrlRedirect, pageContextInit:
|
|
39
|
-
urlOriginal: string;
|
|
40
|
-
}): HttpResponse;
|
|
41
|
+
declare function createHttpResponseRedirect({ url, statusCode }: UrlRedirect, pageContextInit: PageContextBegin): HttpResponse;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { createHttpResponsePage };
|
|
2
2
|
export { createHttpResponsePageContextJson };
|
|
3
3
|
export { createHttpResponseError };
|
|
4
|
+
export { createHttpResponseErrorWithoutGlobalContext };
|
|
4
5
|
export { createHttpResponseRedirect };
|
|
5
6
|
export { createHttpResponseFavicon404 };
|
|
6
7
|
export { createHttpResponseBaseIsMissing };
|
|
@@ -64,9 +65,6 @@ function createHttpResponseBaseIsMissing(urlOriginal, baseServer) {
|
|
|
64
65
|
}
|
|
65
66
|
function createHttpResponseError(pageContext) {
|
|
66
67
|
const reason = (() => {
|
|
67
|
-
if (!pageContext) {
|
|
68
|
-
return 'no error page (https://vike.dev/error-page) could be rendered';
|
|
69
|
-
}
|
|
70
68
|
const errorPageId = getErrorPageId(pageContext._pageFilesAll, pageContext._pageConfigs);
|
|
71
69
|
if (errorPageId) {
|
|
72
70
|
return "the error page (https://vike.dev/error-page) couldn't be rendered (for example if an error occurred while rendering the error page)";
|
|
@@ -75,6 +73,13 @@ function createHttpResponseError(pageContext) {
|
|
|
75
73
|
return 'no error page (https://vike.dev/error-page) is defined, make sure to create one';
|
|
76
74
|
}
|
|
77
75
|
})();
|
|
76
|
+
return createHttpResponseError_(reason);
|
|
77
|
+
}
|
|
78
|
+
function createHttpResponseErrorWithoutGlobalContext() {
|
|
79
|
+
const reason = 'no error page (https://vike.dev/error-page) could be rendered';
|
|
80
|
+
return createHttpResponseError_(reason);
|
|
81
|
+
}
|
|
82
|
+
function createHttpResponseError_(reason) {
|
|
78
83
|
const httpResponse = createHttpResponse(500, 'text/html;charset=utf-8', [], `<p>An error occurred.</p><script>console.log(${JSON.stringify(`This HTTP response was generated by Vike. Vike returned this response because ${reason}.`)})</script>`);
|
|
79
84
|
return httpResponse;
|
|
80
85
|
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
export { createPageContextServerSide };
|
|
2
|
+
export { createPageContextServerSideWithoutGlobalContext };
|
|
3
|
+
export type { PageContextServerSideCreated };
|
|
4
|
+
import type { GlobalContextInternal } from '../globalContext.js';
|
|
5
|
+
import type { PageContextInit } from '../renderPage.js';
|
|
6
|
+
type PageContextServerSideCreated = Awaited<ReturnType<typeof createPageContextServerSide>>;
|
|
7
|
+
declare function createPageContextServerSide(pageContextInit: PageContextInit, globalContext: GlobalContextInternal, { isPrerendering, ssr: { urlHandler, isClientSideNavigation } }: {
|
|
8
|
+
isPrerendering: false;
|
|
9
|
+
ssr: {
|
|
10
|
+
urlHandler: null | ((url: string) => string);
|
|
11
|
+
isClientSideNavigation: boolean;
|
|
12
|
+
};
|
|
13
|
+
} | {
|
|
14
|
+
isPrerendering: true;
|
|
15
|
+
ssr?: undefined;
|
|
16
|
+
}): Promise<{
|
|
17
|
+
_isPageContextObject: boolean;
|
|
18
|
+
isClientSide: boolean;
|
|
19
|
+
isPrerendering: boolean;
|
|
20
|
+
} & Pick<import("../../../shared/types.js").PageContextBuiltInServerInternal, "urlOriginal" | "headersOriginal"> & {
|
|
21
|
+
url?: string;
|
|
22
|
+
headers?: Record<string, string>;
|
|
23
|
+
} & {
|
|
24
|
+
_objectCreatedByVike: boolean;
|
|
25
|
+
_baseServer: string;
|
|
26
|
+
_baseAssets: string;
|
|
27
|
+
_includeAssetsImportedByServer: boolean;
|
|
28
|
+
_pageFilesAll: import("../../../shared/getPageFiles.js").PageFile[];
|
|
29
|
+
_pageConfigs: import("../../../__internal/index.js").PageConfig[];
|
|
30
|
+
_pageConfigGlobal: import("../../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
|
|
31
|
+
_allPageIds: string[];
|
|
32
|
+
_pageRoutes: import("../../../__internal/index.js").PageRoutes;
|
|
33
|
+
_onBeforeRouteHook: import("../../../shared/hooks/getHook.js").Hook | null;
|
|
34
|
+
_globalContext: GlobalContextInternal;
|
|
35
|
+
/** @experimental This is a beta feature https://vike.dev/getGlobalContext */
|
|
36
|
+
globalContext: Pick<{
|
|
37
|
+
viteConfigRuntime: import("../../plugin/shared/getViteConfigRuntime.js").ViteConfigRuntime;
|
|
38
|
+
config: import("../../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigUserFriendly["config"];
|
|
39
|
+
pages: import("../../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigsUserFriendly;
|
|
40
|
+
} & import("../../shared/resolveBase.js").BaseUrlsResolved & ({
|
|
41
|
+
pageFilesAll: import("../../../shared/getPageFiles.js").PageFile[];
|
|
42
|
+
pageConfigs: import("../../../__internal/index.js").PageConfig[];
|
|
43
|
+
pageConfigGlobal: import("../../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
|
|
44
|
+
allPageIds: string[];
|
|
45
|
+
pageRoutes: import("../../../__internal/index.js").PageRoutes;
|
|
46
|
+
onBeforeRouteHook: import("../../../shared/hooks/getHook.js").Hook | null;
|
|
47
|
+
pages: import("../../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigsUserFriendly;
|
|
48
|
+
config: import("../../../types/index.js").ConfigResolved;
|
|
49
|
+
} & ({
|
|
50
|
+
isProduction: false;
|
|
51
|
+
isPrerendering: false;
|
|
52
|
+
viteConfig: import("vite").ResolvedConfig;
|
|
53
|
+
viteDevServer: import("vite").ViteDevServer;
|
|
54
|
+
assetsManifest: null;
|
|
55
|
+
} | ({
|
|
56
|
+
isProduction: true;
|
|
57
|
+
assetsManifest: import("../../shared/ViteManifest.js").ViteManifest;
|
|
58
|
+
viteDevServer: null;
|
|
59
|
+
} & ({
|
|
60
|
+
isPrerendering: false;
|
|
61
|
+
viteConfig: null;
|
|
62
|
+
} | {
|
|
63
|
+
isPrerendering: true;
|
|
64
|
+
usesClientRouter: boolean;
|
|
65
|
+
viteConfig: import("vite").ResolvedConfig;
|
|
66
|
+
})))), "pages" | "baseServer" | "baseAssets" | "config" | "assetsManifest" | "viteConfig" | "viteConfigRuntime">;
|
|
67
|
+
_pageContextInit: PageContextInit;
|
|
68
|
+
_urlRewrite: null;
|
|
69
|
+
_urlHandler: ((url: string) => string) | null;
|
|
70
|
+
isClientSideNavigation: boolean;
|
|
71
|
+
} & {
|
|
72
|
+
urlParsed: import("../utils.js").UrlPublic;
|
|
73
|
+
urlPathname: string;
|
|
74
|
+
url: string;
|
|
75
|
+
} & {
|
|
76
|
+
headers: Record<string, string> | null;
|
|
77
|
+
}>;
|
|
78
|
+
declare function createPageContextServerSideWithoutGlobalContext(pageContextInit: PageContextInit): {
|
|
79
|
+
_isPageContextObject: boolean;
|
|
80
|
+
isClientSide: boolean;
|
|
81
|
+
isPrerendering: boolean;
|
|
82
|
+
} & Pick<import("../../../shared/types.js").PageContextBuiltInServerInternal, "urlOriginal" | "headersOriginal"> & {
|
|
83
|
+
url?: string;
|
|
84
|
+
headers?: Record<string, string>;
|
|
85
|
+
};
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
export { createPageContextServerSide };
|
|
2
|
+
export { createPageContextServerSideWithoutGlobalContext };
|
|
3
|
+
import { assert, assertUsage, assertWarning, normalizeHeaders, objectAssign } from '../utils.js';
|
|
4
|
+
import { getPageContextUrlComputed } from '../../../shared/getPageContextUrlComputed.js';
|
|
5
|
+
import { executeHookGenericGlobalCumulative } from './executeHookGeneric.js';
|
|
6
|
+
async function createPageContextServerSide(pageContextInit, globalContext, { isPrerendering, ssr: { urlHandler, isClientSideNavigation } = {
|
|
7
|
+
urlHandler: null,
|
|
8
|
+
isClientSideNavigation: false
|
|
9
|
+
} }) {
|
|
10
|
+
assert(pageContextInit.urlOriginal);
|
|
11
|
+
const pageContextCreated = createPageContext(pageContextInit, isPrerendering);
|
|
12
|
+
objectAssign(pageContextCreated, pageContextInit);
|
|
13
|
+
objectAssign(pageContextCreated, {
|
|
14
|
+
_objectCreatedByVike: true,
|
|
15
|
+
// The following is defined on `pageContext` because we can eventually make these non-global
|
|
16
|
+
_baseServer: globalContext.baseServer,
|
|
17
|
+
_baseAssets: globalContext.baseAssets,
|
|
18
|
+
// TODO/now: add meta.default
|
|
19
|
+
_includeAssetsImportedByServer: globalContext.config.includeAssetsImportedByServer ?? true,
|
|
20
|
+
// TODO/soon: use GloablContext instead
|
|
21
|
+
_pageFilesAll: globalContext.pageFilesAll,
|
|
22
|
+
_pageConfigs: globalContext.pageConfigs,
|
|
23
|
+
_pageConfigGlobal: globalContext.pageConfigGlobal,
|
|
24
|
+
_allPageIds: globalContext.allPageIds,
|
|
25
|
+
_pageRoutes: globalContext.pageRoutes,
|
|
26
|
+
_onBeforeRouteHook: globalContext.onBeforeRouteHook,
|
|
27
|
+
_globalContext: globalContext,
|
|
28
|
+
// TODO/now: add PageContext['globalContext']
|
|
29
|
+
/** @experimental This is a beta feature https://vike.dev/getGlobalContext */
|
|
30
|
+
globalContext: globalContext.globalContext_public,
|
|
31
|
+
_pageContextInit: pageContextInit,
|
|
32
|
+
_urlRewrite: null,
|
|
33
|
+
_urlHandler: urlHandler,
|
|
34
|
+
isClientSideNavigation
|
|
35
|
+
});
|
|
36
|
+
// pageContext.urlParsed
|
|
37
|
+
const pageContextUrlComputed = getPageContextUrlComputed(pageContextCreated);
|
|
38
|
+
objectAssign(pageContextCreated, pageContextUrlComputed);
|
|
39
|
+
// pageContext.headers
|
|
40
|
+
{
|
|
41
|
+
let headers;
|
|
42
|
+
if (pageContextInit.headersOriginal) {
|
|
43
|
+
headers = normalizeHeaders(pageContextInit.headersOriginal);
|
|
44
|
+
assertUsage(!('headers' in pageContextInit), "You're defining pageContextInit.headersOriginal as well as pageContextInit.headers but you should only define pageContextInit.headersOriginal instead, see https://vike.dev/headers");
|
|
45
|
+
}
|
|
46
|
+
else if (pageContextInit.headers) {
|
|
47
|
+
headers = pageContextInit.headers;
|
|
48
|
+
// TODO/next-major-release: remove
|
|
49
|
+
assertWarning(false, 'Setting pageContextInit.headers is deprecated: set pageContextInit.headersOriginal instead, see https://vike.dev/headers', { onlyOnce: true });
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
headers = null;
|
|
53
|
+
}
|
|
54
|
+
objectAssign(pageContextCreated, { headers });
|
|
55
|
+
}
|
|
56
|
+
await executeHookGenericGlobalCumulative('onCreatePageContext', globalContext, pageContextCreated);
|
|
57
|
+
return pageContextCreated;
|
|
58
|
+
}
|
|
59
|
+
function createPageContextServerSideWithoutGlobalContext(pageContextInit) {
|
|
60
|
+
const pageContext = createPageContext(pageContextInit, false);
|
|
61
|
+
return pageContext;
|
|
62
|
+
}
|
|
63
|
+
function createPageContext(pageContextInit, isPrerendering) {
|
|
64
|
+
const pageContext = {
|
|
65
|
+
_isPageContextObject: true,
|
|
66
|
+
isClientSide: false,
|
|
67
|
+
isPrerendering
|
|
68
|
+
};
|
|
69
|
+
objectAssign(pageContext, pageContextInit);
|
|
70
|
+
return pageContext;
|
|
71
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { executeHookGeneric };
|
|
2
|
+
export { executeHookGenericGlobalCumulative };
|
|
3
|
+
import type { PageConfigUserFriendlyOld } from '../../../shared/getPageFiles.js';
|
|
4
|
+
import { type HookName } from '../../../shared/hooks/getHook.js';
|
|
5
|
+
import type { HookNameGlobal } from '../../../shared/page-configs/Config.js';
|
|
6
|
+
import type { GlobalContextInternal } from '../globalContext.js';
|
|
7
|
+
import type { PageContextServerSideCreated } from './createPageContextServerSide.js';
|
|
8
|
+
declare function executeHookGeneric(hookName: HookName, pageContext: PageConfigUserFriendlyOld): Promise<void>;
|
|
9
|
+
declare function executeHookGenericGlobalCumulative(hookName: HookNameGlobal, globalContext: GlobalContextInternal, pageContext: PageContextServerSideCreated): Promise<void>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export { executeHookGeneric }; // TO-DO/refactor: start using executeHookGeneric() and, eventually, prominently use it
|
|
2
|
+
export { executeHookGenericGlobalCumulative };
|
|
3
|
+
import { executeHook } from '../../../shared/hooks/executeHook.js';
|
|
4
|
+
import { getHookFromPageContext, getHookFromPageConfigGlobalCumulative } from '../../../shared/hooks/getHook.js';
|
|
5
|
+
async function executeHookGeneric(hookName, pageContext) {
|
|
6
|
+
const hook = getHookFromPageContext(pageContext, hookName);
|
|
7
|
+
if (!hook)
|
|
8
|
+
return;
|
|
9
|
+
await executeHook(() => hook.hookFn(pageContext), hook, pageContext);
|
|
10
|
+
}
|
|
11
|
+
async function executeHookGenericGlobalCumulative(hookName, globalContext, pageContext) {
|
|
12
|
+
const hooks = getHookFromPageConfigGlobalCumulative(globalContext.pageConfigGlobal, hookName);
|
|
13
|
+
await Promise.all(hooks.map(async (hook) => {
|
|
14
|
+
await executeHook(() => hook.hookFn(pageContext), hook, null);
|
|
15
|
+
}));
|
|
16
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { executeOnBeforeRenderAndDataHooks };
|
|
2
|
-
import {
|
|
2
|
+
import { getHookFromPageContext } from '../../../shared/hooks/getHook.js';
|
|
3
3
|
import { preparePageContextForUserConsumptionServerSide } from './preparePageContextForUserConsumptionServerSide.js';
|
|
4
4
|
import { assertOnBeforeRenderHookReturn } from '../../../shared/assertOnBeforeRenderHookReturn.js';
|
|
5
5
|
import { executeHook } from '../../../shared/hooks/executeHook.js';
|
|
@@ -7,8 +7,8 @@ async function executeOnBeforeRenderAndDataHooks(pageContext) {
|
|
|
7
7
|
if (pageContext._pageContextAlreadyProvidedByOnPrerenderHook) {
|
|
8
8
|
return;
|
|
9
9
|
}
|
|
10
|
-
const dataHook =
|
|
11
|
-
const onBeforeRenderHook =
|
|
10
|
+
const dataHook = getHookFromPageContext(pageContext, 'data');
|
|
11
|
+
const onBeforeRenderHook = getHookFromPageContext(pageContext, 'onBeforeRender');
|
|
12
12
|
if (!dataHook && !onBeforeRenderHook) {
|
|
13
13
|
return;
|
|
14
14
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { executeOnRenderHtmlHook };
|
|
2
2
|
import { isDocumentHtml, renderDocumentHtml, dangerouslySkipEscape } from '../html/renderHtml.js';
|
|
3
|
-
import {
|
|
3
|
+
import { getHookFromPageContext } from '../../../shared/hooks/getHook.js';
|
|
4
4
|
import { assert, assertUsage, assertWarning, isObject, objectAssign, isPromise, isCallable } from '../utils.js';
|
|
5
5
|
import { isStream } from '../html/stream.js';
|
|
6
6
|
import { assertPageContextProvidedByUser } from '../../../shared/assertPageContextProvidedByUser.js';
|
|
@@ -36,12 +36,12 @@ function getRenderHook(pageContext) {
|
|
|
36
36
|
{
|
|
37
37
|
let hook;
|
|
38
38
|
let hookName = undefined;
|
|
39
|
-
hook =
|
|
39
|
+
hook = getHookFromPageContext(pageContext, 'onRenderHtml');
|
|
40
40
|
if (hook) {
|
|
41
41
|
hookName = 'onRenderHtml';
|
|
42
42
|
}
|
|
43
43
|
else {
|
|
44
|
-
hook =
|
|
44
|
+
hook = getHookFromPageContext(pageContext, 'render');
|
|
45
45
|
if (hook) {
|
|
46
46
|
hookName = 'render';
|
|
47
47
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
export { retrieveAssetsDev };
|
|
2
2
|
import { assert, styleFileRE } from '../../utils.js';
|
|
3
3
|
async function retrieveAssetsDev(clientDependencies, viteDevServer) {
|
|
4
|
-
const visitedModules = new Set();
|
|
5
4
|
const assetUrls = new Set();
|
|
6
5
|
await Promise.all(clientDependencies.map(async ({ id }) => {
|
|
7
6
|
if (id.startsWith('@@vike'))
|
|
@@ -20,7 +19,7 @@ async function retrieveAssetsDev(clientDependencies, viteDevServer) {
|
|
|
20
19
|
return;
|
|
21
20
|
}
|
|
22
21
|
assert(mod, { id });
|
|
23
|
-
collectCss(mod, assetUrls,
|
|
22
|
+
collectCss(mod, assetUrls, new Set());
|
|
24
23
|
}));
|
|
25
24
|
return Array.from(assetUrls);
|
|
26
25
|
}
|
|
@@ -50,9 +49,6 @@ function collectCss(mod, styleUrls, visitedModules, importer) {
|
|
|
50
49
|
// Is this useful? Maybe for virtual modules that don't respect the \0 virtual module convention?
|
|
51
50
|
styleUrls.add(`/@id/${mod.url}`);
|
|
52
51
|
}
|
|
53
|
-
/* Debug:
|
|
54
|
-
logModule(mod)
|
|
55
|
-
//*/
|
|
56
52
|
}
|
|
57
53
|
mod.importedModules.forEach((dep) => {
|
|
58
54
|
collectCss(dep, styleUrls, visitedModules, mod);
|
|
@@ -67,15 +63,3 @@ function isStyle(mod) {
|
|
|
67
63
|
// CSS of .vue files
|
|
68
64
|
(mod.id && /\?vue&type=style/.test(mod.id)));
|
|
69
65
|
}
|
|
70
|
-
/*
|
|
71
|
-
function logModule(mod: ModuleNode) {
|
|
72
|
-
const redacted = 'redacted'
|
|
73
|
-
console.log({
|
|
74
|
-
...mod,
|
|
75
|
-
ssrModule: redacted,
|
|
76
|
-
ssrTransformResult: redacted,
|
|
77
|
-
importedModules: redacted,
|
|
78
|
-
importers: redacted
|
|
79
|
-
})
|
|
80
|
-
}
|
|
81
|
-
//*/
|