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.
@@ -2,4 +2,4 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PROJECT_VERSION = void 0;
4
4
  // Automatically updated by @brillout/release-me
5
- exports.PROJECT_VERSION = '0.4.197-commit-9db6c02';
5
+ exports.PROJECT_VERSION = '0.4.197-commit-f4d8658';
@@ -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
- declare function getPageContextPrefetched(pageContext: {
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 url = pageContext.urlOriginal;
30
- const found = globalObject.prefetchedPageContexts[url];
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[url];
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
- const urlOfLink = pageContextLink.urlOriginal;
54
- globalObject.prefetchedPageContexts[urlOfLink] = {
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 = getResultMaxAge();
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
- return;
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 for @brillout/docpress and, instead, use Vike's default if pageContextCurrent isn't defined yet.
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 found = globalObject.prefetchedPageContexts[urlOfLink];
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-9db6c02";
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-9db6c02';
2
+ export const PROJECT_VERSION = '0.4.197-commit-f4d8658';
@@ -1,4 +1,4 @@
1
1
  export declare const projectInfo: {
2
2
  projectName: "Vike";
3
- projectVersion: "0.4.197-commit-9db6c02";
3
+ projectVersion: "0.4.197-commit-f4d8658";
4
4
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vike",
3
- "version": "0.4.197-commit-9db6c02",
3
+ "version": "0.4.197-commit-f4d8658",
4
4
  "repository": "https://github.com/vikejs/vike",
5
5
  "exports": {
6
6
  "./server": {