vike 0.4.197-commit-9db6c02 → 0.4.197-commit-ab2fbbe
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/utils/PROJECT_VERSION.js +1 -1
- package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.d.ts +1 -1
- package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.js +0 -3
- package/dist/esm/client/client-routing-runtime/prefetch/getPrefetchSettings.js +1 -0
- package/dist/esm/client/client-routing-runtime/prefetch.d.ts +15 -2
- package/dist/esm/client/client-routing-runtime/prefetch.js +37 -25
- package/dist/esm/client/client-routing-runtime/renderPageClientSide.js +14 -7
- package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
- package/dist/esm/utils/PROJECT_VERSION.js +1 -1
- package/dist/esm/utils/projectInfo.d.ts +1 -1
- package/package.json +1 -1
|
@@ -19,13 +19,13 @@ type PageContextSerialized = {
|
|
|
19
19
|
};
|
|
20
20
|
declare function getPageContextFromHooks_serialized(): PageContextSerialized & {
|
|
21
21
|
routeParams: Record<string, string>;
|
|
22
|
+
_hasPageContextFromServer: true;
|
|
22
23
|
};
|
|
23
24
|
declare function getPageContextFromHooks_isHydration(pageContext: PageContextSerialized & PageContext & PageContextExports & {
|
|
24
25
|
_hasPageContextFromServer: true;
|
|
25
26
|
}): Promise<PageContextSerialized & PageContext & PageContextExports & {
|
|
26
27
|
_hasPageContextFromServer: true;
|
|
27
28
|
} & {
|
|
28
|
-
isHydration: true;
|
|
29
29
|
_hasPageContextFromClient: boolean;
|
|
30
30
|
}>;
|
|
31
31
|
type PageContextFromServerHooks = {
|
|
@@ -32,7 +32,6 @@ function getPageContextFromHooks_serialized() {
|
|
|
32
32
|
// TODO/eventually: rename
|
|
33
33
|
async function getPageContextFromHooks_isHydration(pageContext) {
|
|
34
34
|
objectAssign(pageContext, {
|
|
35
|
-
isHydration: true,
|
|
36
35
|
_hasPageContextFromClient: false
|
|
37
36
|
});
|
|
38
37
|
for (const hookName of ['data', 'onBeforeRender']) {
|
|
@@ -46,8 +45,6 @@ async function getPageContextFromHooks_isHydration(pageContext) {
|
|
|
46
45
|
}
|
|
47
46
|
async function getPageContextFromServerHooks(pageContext, isErrorPage) {
|
|
48
47
|
const pageContextFromServerHooks = {
|
|
49
|
-
// TODO/eventually: move this upstream
|
|
50
|
-
isHydration: false,
|
|
51
48
|
_hasPageContextFromServer: false
|
|
52
49
|
};
|
|
53
50
|
// If pageContextInit has some client data or if one of the hooks guard(), data() or onBeforeRender() is server-side
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
export { getPrefetchSettings };
|
|
3
3
|
export { PAGE_CONTEXT_MAX_AGE_DEFAULT };
|
|
4
4
|
import { assertUsage, assertInfo } from '../utils.js';
|
|
5
|
+
// TODO/pageContext-prefetch: Make it `Infinity` for pre-rendered pages.
|
|
5
6
|
const PAGE_CONTEXT_MAX_AGE_DEFAULT = 5000;
|
|
6
7
|
const prefetchSettingTrue = {
|
|
7
8
|
staticAssets: 'hover',
|
|
@@ -1,13 +1,26 @@
|
|
|
1
1
|
export { prefetch };
|
|
2
2
|
export { getPageContextPrefetched };
|
|
3
3
|
export { initLinkPrefetchHandlers };
|
|
4
|
+
export { populatePageContextPrefetchCache };
|
|
4
5
|
export { addLinkPrefetchHandlers };
|
|
5
6
|
export { addLinkPrefetchHandlers_watch };
|
|
6
7
|
export { addLinkPrefetchHandlers_unwatch };
|
|
7
|
-
import { type PageContextFromServerHooks } from './getPageContextFromHooks.js';
|
|
8
|
-
|
|
8
|
+
import { type PageContextFromServerHooks, getPageContextFromServerHooks } from './getPageContextFromHooks.js';
|
|
9
|
+
import { PageFile } from '../../shared/getPageFiles.js';
|
|
10
|
+
import { type PageConfigRuntime } from '../../shared/page-configs/PageConfig.js';
|
|
11
|
+
type ResultPageContextFromServer = Awaited<ReturnType<typeof getPageContextFromServerHooks>>;
|
|
12
|
+
type PageContextForPrefetch = {
|
|
9
13
|
urlOriginal: string;
|
|
14
|
+
urlPathname: string;
|
|
15
|
+
pageId: string;
|
|
16
|
+
_urlRewrite: null;
|
|
17
|
+
_pageFilesAll: PageFile[];
|
|
18
|
+
_pageConfigs: PageConfigRuntime[];
|
|
19
|
+
};
|
|
20
|
+
declare function getPageContextPrefetched(pageContext: {
|
|
21
|
+
urlPathname: string;
|
|
10
22
|
}): null | PageContextFromServerHooks;
|
|
23
|
+
declare function populatePageContextPrefetchCache(pageContext: PageContextForPrefetch, result: ResultPageContextFromServer): void;
|
|
11
24
|
/**
|
|
12
25
|
* Programmatically prefetch client assets.
|
|
13
26
|
*
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { prefetch };
|
|
2
2
|
export { getPageContextPrefetched };
|
|
3
3
|
export { initLinkPrefetchHandlers };
|
|
4
|
+
export { populatePageContextPrefetchCache };
|
|
4
5
|
export { addLinkPrefetchHandlers };
|
|
5
6
|
export { addLinkPrefetchHandlers_watch };
|
|
6
7
|
export { addLinkPrefetchHandlers_unwatch };
|
|
@@ -26,13 +27,15 @@ const globalObject = getGlobalObject('prefetch.ts', {
|
|
|
26
27
|
prefetchedPageContexts: {}
|
|
27
28
|
});
|
|
28
29
|
function getPageContextPrefetched(pageContext) {
|
|
29
|
-
const
|
|
30
|
-
const found = globalObject.prefetchedPageContexts[
|
|
30
|
+
const key = getCacheKey(pageContext.urlPathname);
|
|
31
|
+
const found = globalObject.prefetchedPageContexts[key];
|
|
31
32
|
if (!found || found.result.is404ServerSideRouted || isExpired(found))
|
|
32
33
|
return null;
|
|
33
34
|
const pageContextPrefetched = found.result.pageContextFromServerHooks;
|
|
35
|
+
/* TODO/pageContext-prefetch: make it work for when resultMaxAge is Infinity.
|
|
34
36
|
// We discard the prefetched pageContext whenever we use it, so that the user always sees fresh data upon naivgating.
|
|
35
|
-
delete globalObject.prefetchedPageContexts[
|
|
37
|
+
delete globalObject.prefetchedPageContexts[key]
|
|
38
|
+
*/
|
|
36
39
|
return pageContextPrefetched;
|
|
37
40
|
}
|
|
38
41
|
async function prefetchAssets(pageContextLink) {
|
|
@@ -50,13 +53,30 @@ async function prefetchAssets(pageContextLink) {
|
|
|
50
53
|
}
|
|
51
54
|
async function prefetchPageContextFromServerHooks(pageContextLink, resultMaxAge) {
|
|
52
55
|
const result = await getPageContextFromServerHooks(pageContextLink, false);
|
|
53
|
-
|
|
54
|
-
|
|
56
|
+
setPageContextPrefetchCache(pageContextLink, result, resultMaxAge);
|
|
57
|
+
}
|
|
58
|
+
function populatePageContextPrefetchCache(pageContext, result) {
|
|
59
|
+
setPageContextPrefetchCache(pageContext, result, null);
|
|
60
|
+
}
|
|
61
|
+
function setPageContextPrefetchCache(pageContext, result, resultMaxAge) {
|
|
62
|
+
if (resultMaxAge === null)
|
|
63
|
+
resultMaxAge = getResultMaxAge();
|
|
64
|
+
const key = getCacheKey(pageContext.urlPathname);
|
|
65
|
+
globalObject.prefetchedPageContexts[key] = {
|
|
55
66
|
resultFetchedAt: Date.now(),
|
|
56
67
|
resultMaxAge,
|
|
57
68
|
result
|
|
58
69
|
};
|
|
59
70
|
}
|
|
71
|
+
function getResultMaxAge() {
|
|
72
|
+
const pageContextCurrent = getPageContextCurrent();
|
|
73
|
+
// TODO/pageContext-prefetch: remove this dirty hack used by @brillout/docpress and, instead, use Vike's default if pageContextCurrent isn't defined yet.
|
|
74
|
+
if (!pageContextCurrent)
|
|
75
|
+
return Infinity;
|
|
76
|
+
const prefetchSettings = getPrefetchSettings(pageContextCurrent, null);
|
|
77
|
+
const resultMaxAge = typeof prefetchSettings.pageContext === 'number' ? prefetchSettings.pageContext : PAGE_CONTEXT_MAX_AGE_DEFAULT;
|
|
78
|
+
return resultMaxAge;
|
|
79
|
+
}
|
|
60
80
|
/**
|
|
61
81
|
* Programmatically prefetch client assets.
|
|
62
82
|
*
|
|
@@ -87,27 +107,11 @@ async function prefetch(url, options) {
|
|
|
87
107
|
})(),
|
|
88
108
|
(async () => {
|
|
89
109
|
if (options?.pageContext !== false) {
|
|
90
|
-
const resultMaxAge =
|
|
110
|
+
const resultMaxAge = typeof options?.pageContext === 'number' ? options.pageContext : null;
|
|
91
111
|
await prefetchPageContextFromServerHooks(pageContextLink, resultMaxAge);
|
|
92
112
|
}
|
|
93
113
|
})()
|
|
94
114
|
]);
|
|
95
|
-
return;
|
|
96
|
-
function getResultMaxAge() {
|
|
97
|
-
if (typeof options?.pageContext === 'number') {
|
|
98
|
-
return options.pageContext;
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
// If user calls prefetch() before hydration finished => await the pageContext to be set
|
|
102
|
-
const pageContextCurrent = getPageContextCurrent();
|
|
103
|
-
// TODO/pageContext-prefetch: remove this dirty hack for @brillout/docpress and, instead, use Vike's default if pageContextCurrent isn't defined yet.
|
|
104
|
-
if (!pageContextCurrent)
|
|
105
|
-
return Infinity;
|
|
106
|
-
const prefetchSettings = getPrefetchSettings(pageContextCurrent, null);
|
|
107
|
-
const resultMaxAge = typeof prefetchSettings.pageContext === 'number' ? prefetchSettings.pageContext : PAGE_CONTEXT_MAX_AGE_DEFAULT;
|
|
108
|
-
return resultMaxAge;
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
115
|
}
|
|
112
116
|
// Lazy execution logic copied from: https://github.com/withastro/astro/blob/2594eb088d53a98181ac820243bcb1a765856ecf/packages/astro/src/runtime/client/dev-toolbar/apps/audit/index.ts#L53-L72
|
|
113
117
|
function addLinkPrefetchHandlers() {
|
|
@@ -147,7 +151,7 @@ function addLinkPrefetchHandlers_apply() {
|
|
|
147
151
|
continue;
|
|
148
152
|
globalObject.linkPrefetchHandlerAdded.add(linkTag);
|
|
149
153
|
if (skipLink(linkTag))
|
|
150
|
-
|
|
154
|
+
continue;
|
|
151
155
|
linkTag.addEventListener('mouseover', () => {
|
|
152
156
|
prefetchOnEvent(linkTag, 'hover');
|
|
153
157
|
}, { passive: true });
|
|
@@ -172,7 +176,7 @@ async function prefetchOnEvent(linkTag, event) {
|
|
|
172
176
|
prefetchSettings = getPrefetchSettings(pageContextCurrent, linkTag);
|
|
173
177
|
}
|
|
174
178
|
else {
|
|
175
|
-
// TODO/pageContext-prefetch: remove this dirty hack
|
|
179
|
+
// TODO/pageContext-prefetch: remove this dirty hack used by @brillout/docpress and, instead, use Vike's default if pageContextCurrent isn't defined yet.
|
|
176
180
|
prefetchSettings = { staticAssets: 'hover', pageContext: Infinity };
|
|
177
181
|
}
|
|
178
182
|
const urlOfLink = linkTag.getAttribute('href');
|
|
@@ -191,7 +195,8 @@ async function prefetchOnEvent(linkTag, event) {
|
|
|
191
195
|
})(),
|
|
192
196
|
(async () => {
|
|
193
197
|
if (event !== 'viewport' && prefetchSettings.pageContext) {
|
|
194
|
-
const
|
|
198
|
+
const key = getCacheKey(urlOfLink);
|
|
199
|
+
const found = globalObject.prefetchedPageContexts[key];
|
|
195
200
|
if (!found || isExpired(found)) {
|
|
196
201
|
// TODO/pageContext-prefetch: move this logic in getPrefetchSettings()
|
|
197
202
|
const resultMaxAge = prefetchSettings.pageContext;
|
|
@@ -218,3 +223,10 @@ async function getPageContextLink(urlOfLink) {
|
|
|
218
223
|
objectAssign(pageContextLink, pageContextFromRoute);
|
|
219
224
|
return pageContextLink;
|
|
220
225
|
}
|
|
226
|
+
function getCacheKey(url) {
|
|
227
|
+
if (url.startsWith('#'))
|
|
228
|
+
url = '/';
|
|
229
|
+
assert(url.startsWith('/'), { urlPathname: url });
|
|
230
|
+
const key = url.split('#')[0];
|
|
231
|
+
return key;
|
|
232
|
+
}
|
|
@@ -5,7 +5,7 @@ export { firstRenderStartPromise };
|
|
|
5
5
|
import { assert, getCurrentUrl, isSameErrorMessage, objectAssign, redirectHard, getGlobalObject, executeHook, hasProp, augmentType, genPromise, isCallable } from './utils.js';
|
|
6
6
|
import { getPageContextFromClientHooks, getPageContextFromServerHooks, getPageContextFromHooks_isHydration, getPageContextFromHooks_serialized, setPageContextInitIsPassedToClient } from './getPageContextFromHooks.js';
|
|
7
7
|
import { createPageContext } from './createPageContext.js';
|
|
8
|
-
import { addLinkPrefetchHandlers, addLinkPrefetchHandlers_unwatch, addLinkPrefetchHandlers_watch, getPageContextPrefetched } from './prefetch.js';
|
|
8
|
+
import { addLinkPrefetchHandlers, addLinkPrefetchHandlers_unwatch, addLinkPrefetchHandlers_watch, getPageContextPrefetched, populatePageContextPrefetchCache } from './prefetch.js';
|
|
9
9
|
import { assertInfo, assertWarning, isReact } from './utils.js';
|
|
10
10
|
import { executeOnRenderClientHook } from '../shared/executeOnRenderClientHook.js';
|
|
11
11
|
import { assertHook, getHook } from '../../shared/hooks/getHook.js';
|
|
@@ -56,6 +56,7 @@ async function renderPageClientSide(renderArgs) {
|
|
|
56
56
|
const pageContext = await getPageContextBegin();
|
|
57
57
|
if (isRenderOutdated())
|
|
58
58
|
return;
|
|
59
|
+
objectAssign(pageContext, { isHydration: isFirstRender });
|
|
59
60
|
// onPageTransitionStart()
|
|
60
61
|
if (globalObject.isFirstRenderDone) {
|
|
61
62
|
assert(previousPageContext);
|
|
@@ -81,10 +82,13 @@ async function renderPageClientSide(renderArgs) {
|
|
|
81
82
|
}
|
|
82
83
|
}
|
|
83
84
|
// Route
|
|
84
|
-
let pageContextRouted;
|
|
85
85
|
if (isFirstRender) {
|
|
86
86
|
const pageContextSerialized = getPageContextFromHooks_serialized();
|
|
87
|
-
|
|
87
|
+
// TODO/eventually: create helper assertPageContextFromHook()
|
|
88
|
+
assert(!('urlOriginal' in pageContextSerialized));
|
|
89
|
+
objectAssign(pageContext, pageContextSerialized);
|
|
90
|
+
// TODO/pageContext-prefetch: remove or change, because this only makes sense for a pre-rendered page
|
|
91
|
+
populatePageContextPrefetchCache(pageContext, { pageContextFromServerHooks: pageContextSerialized });
|
|
88
92
|
}
|
|
89
93
|
else {
|
|
90
94
|
let pageContextFromRoute;
|
|
@@ -125,10 +129,10 @@ async function renderPageClientSide(renderArgs) {
|
|
|
125
129
|
// Skip's Vike's rendering; let the user handle the navigation
|
|
126
130
|
return;
|
|
127
131
|
}
|
|
128
|
-
|
|
132
|
+
// TODO/eventually: create helper assertPageContextFromHook()
|
|
133
|
+
assert(!('urlOriginal' in pageContextFromRoute));
|
|
134
|
+
objectAssign(pageContext, pageContextFromRoute);
|
|
129
135
|
}
|
|
130
|
-
assert(!('urlOriginal' in pageContextRouted));
|
|
131
|
-
objectAssign(pageContext, pageContextRouted);
|
|
132
136
|
try {
|
|
133
137
|
objectAssign(pageContext, await loadUserFilesClientSide(pageContext.pageId, pageContext._pageFilesAll, pageContext._pageConfigs));
|
|
134
138
|
}
|
|
@@ -144,6 +148,7 @@ async function renderPageClientSide(renderArgs) {
|
|
|
144
148
|
}
|
|
145
149
|
if (isRenderOutdated())
|
|
146
150
|
return;
|
|
151
|
+
setPageContextCurrent(pageContext);
|
|
147
152
|
// Set global hydrationCanBeAborted
|
|
148
153
|
if (pageContext.exports.hydrationCanBeAborted) {
|
|
149
154
|
setHydrationCanBeAborted();
|
|
@@ -184,6 +189,8 @@ async function renderPageClientSide(renderArgs) {
|
|
|
184
189
|
if (result.is404ServerSideRouted)
|
|
185
190
|
return;
|
|
186
191
|
pageContextFromServerHooks = result.pageContextFromServerHooks;
|
|
192
|
+
// TODO/pageContext-prefetch: remove or change, because this only makes sense for a pre-rendered page
|
|
193
|
+
populatePageContextPrefetchCache(pageContext, result);
|
|
187
194
|
}
|
|
188
195
|
catch (err) {
|
|
189
196
|
await onError(err);
|
|
@@ -333,6 +340,7 @@ async function renderPageClientSide(renderArgs) {
|
|
|
333
340
|
}
|
|
334
341
|
if (isRenderOutdated())
|
|
335
342
|
return;
|
|
343
|
+
setPageContextCurrent(pageContext);
|
|
336
344
|
let pageContextFromServerHooks;
|
|
337
345
|
try {
|
|
338
346
|
const result = await getPageContextFromServerHooks(pageContext, true);
|
|
@@ -407,7 +415,6 @@ async function renderPageClientSide(renderArgs) {
|
|
|
407
415
|
/* We don't abort in order to ensure that onHydrationEnd() is called: we abort only after onHydrationEnd() is called.
|
|
408
416
|
if (isRenderOutdated(true)) return
|
|
409
417
|
*/
|
|
410
|
-
setPageContextCurrent(pageContext);
|
|
411
418
|
// onHydrationEnd()
|
|
412
419
|
if (isFirstRender && !onRenderClientError) {
|
|
413
420
|
assertHook(pageContext, 'onHydrationEnd');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const PROJECT_VERSION: "0.4.197-commit-
|
|
1
|
+
export declare const PROJECT_VERSION: "0.4.197-commit-ab2fbbe";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// Automatically updated by @brillout/release-me
|
|
2
|
-
export const PROJECT_VERSION = '0.4.197-commit-
|
|
2
|
+
export const PROJECT_VERSION = '0.4.197-commit-ab2fbbe';
|