vike 0.4.197-commit-9db6c02 → 0.4.197-commit-f4d8658
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/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 +35 -25
- package/dist/esm/client/client-routing-runtime/renderPageClientSide.js +4 -2
- 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
|
@@ -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,8 @@ async function getPageContextLink(urlOfLink) {
|
|
|
218
223
|
objectAssign(pageContextLink, pageContextFromRoute);
|
|
219
224
|
return pageContextLink;
|
|
220
225
|
}
|
|
226
|
+
function getCacheKey(urlPathname) {
|
|
227
|
+
assert(urlPathname.startsWith('/'));
|
|
228
|
+
const key = urlPathname.split('#')[0];
|
|
229
|
+
return key;
|
|
230
|
+
}
|
|
@@ -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';
|
|
@@ -144,6 +144,7 @@ async function renderPageClientSide(renderArgs) {
|
|
|
144
144
|
}
|
|
145
145
|
if (isRenderOutdated())
|
|
146
146
|
return;
|
|
147
|
+
setPageContextCurrent(pageContext);
|
|
147
148
|
// Set global hydrationCanBeAborted
|
|
148
149
|
if (pageContext.exports.hydrationCanBeAborted) {
|
|
149
150
|
setHydrationCanBeAborted();
|
|
@@ -184,6 +185,7 @@ async function renderPageClientSide(renderArgs) {
|
|
|
184
185
|
if (result.is404ServerSideRouted)
|
|
185
186
|
return;
|
|
186
187
|
pageContextFromServerHooks = result.pageContextFromServerHooks;
|
|
188
|
+
populatePageContextPrefetchCache(pageContext, result);
|
|
187
189
|
}
|
|
188
190
|
catch (err) {
|
|
189
191
|
await onError(err);
|
|
@@ -333,6 +335,7 @@ async function renderPageClientSide(renderArgs) {
|
|
|
333
335
|
}
|
|
334
336
|
if (isRenderOutdated())
|
|
335
337
|
return;
|
|
338
|
+
setPageContextCurrent(pageContext);
|
|
336
339
|
let pageContextFromServerHooks;
|
|
337
340
|
try {
|
|
338
341
|
const result = await getPageContextFromServerHooks(pageContext, true);
|
|
@@ -407,7 +410,6 @@ async function renderPageClientSide(renderArgs) {
|
|
|
407
410
|
/* We don't abort in order to ensure that onHydrationEnd() is called: we abort only after onHydrationEnd() is called.
|
|
408
411
|
if (isRenderOutdated(true)) return
|
|
409
412
|
*/
|
|
410
|
-
setPageContextCurrent(pageContext);
|
|
411
413
|
// onHydrationEnd()
|
|
412
414
|
if (isFirstRender && !onRenderClientError) {
|
|
413
415
|
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-f4d8658";
|
|
@@ -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-f4d8658';
|