@vidact/start 0.2.0-beta.0 → 0.2.0-beta.10

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.
Files changed (58) hide show
  1. package/CHANGELOG.md +109 -0
  2. package/README.md +26 -5
  3. package/dist/client.d.ts +29 -16
  4. package/dist/client.d.ts.map +1 -1
  5. package/dist/client.js +352 -165
  6. package/dist/client.js.map +1 -1
  7. package/dist/index-client.d.ts +5 -4
  8. package/dist/index-client.js +4 -4
  9. package/dist/index.d.ts +5 -4
  10. package/dist/index.js +4 -4
  11. package/dist/link-client.d.ts +6 -4
  12. package/dist/link-client.d.ts.map +1 -1
  13. package/dist/link-client.js +10 -4
  14. package/dist/link-client.js.map +1 -1
  15. package/dist/link-contract.d.ts +12 -7
  16. package/dist/link-contract.d.ts.map +1 -1
  17. package/dist/link-contract.js +12 -7
  18. package/dist/link-contract.js.map +1 -1
  19. package/dist/link.d.ts +6 -4
  20. package/dist/link.d.ts.map +1 -1
  21. package/dist/link.js +8 -4
  22. package/dist/link.js.map +1 -1
  23. package/dist/router.d.ts +57 -55
  24. package/dist/router.d.ts.map +1 -1
  25. package/dist/router.js +150 -157
  26. package/dist/router.js.map +1 -1
  27. package/dist/server.d.ts +29 -16
  28. package/dist/server.d.ts.map +1 -1
  29. package/dist/server.js +159 -100
  30. package/dist/server.js.map +1 -1
  31. package/dist/snapshot.d.ts +13 -10
  32. package/dist/snapshot.d.ts.map +1 -1
  33. package/dist/snapshot.js +19 -20
  34. package/dist/snapshot.js.map +1 -1
  35. package/dist/virtual.d.ts +3 -2
  36. package/dist/virtual.js +1 -2
  37. package/dist/vite.d.ts +18 -15
  38. package/dist/vite.d.ts.map +1 -1
  39. package/dist/vite.js +144 -171
  40. package/dist/vite.js.map +1 -1
  41. package/package.json +9 -8
  42. package/src/client.ts +577 -0
  43. package/src/index-client.ts +3 -0
  44. package/src/index.ts +3 -0
  45. package/src/link-client.ts +11 -0
  46. package/src/link-contract.ts +20 -0
  47. package/src/link.ts +10 -0
  48. package/src/router.ts +282 -0
  49. package/src/server.ts +295 -0
  50. package/src/snapshot.ts +40 -0
  51. package/src/virtual.ts +5 -0
  52. package/src/vite.ts +256 -0
  53. package/dist/index-client.d.ts.map +0 -1
  54. package/dist/index-client.js.map +0 -1
  55. package/dist/index.d.ts.map +0 -1
  56. package/dist/index.js.map +0 -1
  57. package/dist/virtual.d.ts.map +0 -1
  58. package/dist/virtual.js.map +0 -1
package/dist/client.js CHANGED
@@ -1,181 +1,368 @@
1
- import { cloneRenderable, compiledRoot, createCompiledScope, } from '@vidact/runtime';
2
- import { createElement, hydrateRoot } from '@vidact/runtime/hydrate';
3
- import { composeRouteMatches, loadRouteMatches, matchRoutes, } from './router.js';
4
- import { decodeStartSnapshot, VIDACT_START_NAVIGATION_HEADER, VIDACT_START_SNAPSHOT_MEDIA_TYPE, } from './snapshot.js';
5
- const DEFAULT_ROOT_ID = 'vidact-start-root';
6
- const DEFAULT_SNAPSHOT_ID = 'vidact-start-snapshot';
7
- export async function hydrateStart(options) {
8
- const snapshot = decodeStartSnapshot(options.snapshot ?? readSnapshot(options.snapshotId ?? DEFAULT_SNAPSHOT_ID));
9
- const initialUrl = new URL(snapshot.pathname, window.location.href);
10
- const matches = matchRoutes(options.manifest, initialUrl.pathname);
11
- if (matches.length === 0)
12
- throw new Error(`cannot hydrate unmatched route ${snapshot.pathname}`);
13
- const request = new Request(initialUrl);
14
- const loaded = await loadRouteMatches(matches, request, snapshot.loaderData);
15
- const host = options.root ?? document.querySelector(`#${CSS.escape(options.rootId ?? DEFAULT_ROOT_ID)}`);
16
- if (host === null)
17
- throw new Error('Vidact Start hydration root is missing');
18
- const root = hydrateRoot(host, createClientApplication(loaded, request.url));
19
- const fetchNavigation = options.fetch ?? window.fetch.bind(window);
20
- let navigation = 0;
21
- let navigationController;
22
- let disposed = false;
23
- async function navigate(to, navigationOptions = {}) {
24
- return performNavigation(new URL(to, window.location.href), navigationOptions.replace === true ? 'replace' : 'push', navigationOptions.scroll !== false);
25
- }
26
- async function performNavigation(target, historyMode, scroll) {
27
- if (disposed)
28
- throw new Error('cannot navigate an unmounted Vidact Start client');
29
- if (!isClientNavigationUrl(target)) {
30
- navigateDocument(target, historyMode === 'replace');
31
- return false;
32
- }
33
- const nextMatches = matchRoutes(options.manifest, target.pathname);
34
- if (nextMatches.length === 0) {
35
- navigateDocument(target, historyMode === 'replace');
36
- return false;
37
- }
38
- navigation += 1;
39
- const attempt = navigation;
40
- navigationController?.abort();
41
- const controller = new AbortController();
42
- navigationController = controller;
43
- try {
44
- const response = await fetchNavigation(target, {
45
- credentials: 'same-origin',
46
- headers: { [VIDACT_START_NAVIGATION_HEADER]: '1' },
47
- signal: controller.signal,
48
- });
49
- if (attempt !== navigation)
50
- return false;
51
- if (!response.ok ||
52
- response.headers.get('content-type')?.split(';', 1)[0] !== VIDACT_START_SNAPSHOT_MEDIA_TYPE) {
53
- navigateDocument(target, historyMode === 'replace');
54
- return false;
55
- }
56
- const nextSnapshot = decodeStartSnapshot(await response.text());
57
- const nextUrl = new URL(nextSnapshot.pathname, target.origin);
58
- const snapshotMatches = matchRoutes(options.manifest, nextUrl.pathname);
59
- if (snapshotMatches.length === 0) {
60
- navigateDocument(target, historyMode === 'replace');
61
- return false;
62
- }
63
- const nextRequest = new Request(nextUrl);
64
- const nextLoaded = await loadRouteMatches(snapshotMatches, nextRequest, nextSnapshot.loaderData);
65
- if (attempt !== navigation)
66
- return false;
67
- root.replace(createClientApplication(nextLoaded, nextRequest.url));
68
- updateHistory(nextUrl, historyMode);
69
- if (scroll)
70
- scrollToLocation(nextUrl);
71
- return true;
72
- }
73
- catch {
74
- if (controller.signal.aborted || attempt !== navigation)
75
- return false;
76
- navigateDocument(target, historyMode === 'replace');
77
- return false;
78
- }
79
- }
80
- function handleClick(event) {
81
- const anchor = linkForEvent(event);
82
- if (anchor === undefined)
83
- return;
84
- const target = new URL(anchor.href, window.location.href);
85
- if (target.pathname === window.location.pathname &&
86
- target.search === window.location.search &&
87
- target.hash !== window.location.hash) {
88
- return;
89
- }
90
- event.preventDefault();
91
- void performNavigation(target, anchor.hasAttribute('data-vidact-start-replace') ? 'replace' : 'push', true);
92
- }
93
- function handlePopState() {
94
- void performNavigation(new URL(window.location.href), 'none', false);
95
- }
96
- document.addEventListener('click', handleClick);
97
- window.addEventListener('popstate', handlePopState);
98
- return {
99
- mount: root.mount,
100
- replace: root.replace,
101
- navigate,
102
- unmount() {
103
- if (disposed)
104
- return;
105
- disposed = true;
106
- navigation += 1;
107
- navigationController?.abort();
108
- document.removeEventListener('click', handleClick);
109
- window.removeEventListener('popstate', handlePopState);
110
- root.unmount();
111
- },
112
- };
1
+ import { loadRouteMatches, matchRoutes, resolveRouteMatches } from "./router.js";
2
+ import { VIDACT_START_NAVIGATION_HEADER, decodeStartSnapshot } from "./snapshot.js";
3
+ import { binding, cloneRenderable, compiledRoot, createCompiledScope, createCompiledState, createComponentRenderable, source } from "@vidact/runtime";
4
+ import { hydrateRoot } from "@vidact/runtime/hydrate";
5
+ //#region src/client.ts
6
+ const DEFAULT_ROOT_ID = "vidact-start-root";
7
+ const DEFAULT_SNAPSHOT_ID = "vidact-start-snapshot";
8
+ /** How long a prefetched snapshot may stand in for a fresh navigation request. */
9
+ const PREFETCH_STALE_TIME = 3e4;
10
+ /** Hover must rest on a link this long before it counts as intent to navigate. */
11
+ const PREFETCH_HOVER_DELAY = 50;
12
+ const routeComponentIdentities = /* @__PURE__ */ new WeakMap();
13
+ async function hydrateStart(options) {
14
+ const snapshot = decodeStartSnapshot(options.snapshot ?? readSnapshot(options.snapshotId ?? DEFAULT_SNAPSHOT_ID));
15
+ const initialUrl = new URL(snapshot.pathname, window.location.href);
16
+ const matches = matchRoutes(options.manifest, initialUrl.pathname);
17
+ if (matches.length === 0) throw new Error(`cannot hydrate unmatched route ${snapshot.pathname}`);
18
+ const request = new Request(initialUrl);
19
+ const loaded = await loadRouteMatches(matches, request, snapshot.loaderData);
20
+ const host = options.root ?? document.querySelector(`#${CSS.escape(options.rootId ?? DEFAULT_ROOT_ID)}`);
21
+ if (host === null) throw new Error("Vidact Start hydration root is missing");
22
+ let application = createClientApplication(loaded, request.url);
23
+ const root = hydrateRoot(host, application.application, { onRecoverableError: options.onRecoverableError ?? ((error) => console.warn("[vidact/start] hydration recovered by re-rendering:", error)) });
24
+ const fetchNavigation = options.fetch ?? window.fetch.bind(window);
25
+ let navigation = 0;
26
+ let navigationController;
27
+ let disposed = false;
28
+ const prefetchController = new AbortController();
29
+ const prefetches = /* @__PURE__ */ new Map();
30
+ let hoverAnchor;
31
+ let hoverTimer;
32
+ /** The snapshot key of the navigation in flight, which prefetching must not duplicate. */
33
+ let navigatingKey;
34
+ async function requestNavigationPayload(target, signal) {
35
+ const response = await fetchNavigation(target, {
36
+ credentials: "same-origin",
37
+ headers: { [VIDACT_START_NAVIGATION_HEADER]: "1" },
38
+ signal
39
+ });
40
+ if (!response.ok || response.headers.get("content-type")?.split(";", 1)[0] !== "application/x-vidact-start+json") return { kind: "document" };
41
+ return {
42
+ kind: "snapshot",
43
+ text: await response.text()
44
+ };
45
+ }
46
+ async function prefetch(to) {
47
+ if (disposed) return;
48
+ const target = new URL(to, window.location.href);
49
+ if (!isClientNavigationUrl(target) || isCurrentDocument(target)) return;
50
+ const targetMatches = matchRoutes(options.manifest, target.pathname);
51
+ if (targetMatches.length === 0) return;
52
+ resolveRouteMatches(targetMatches).catch(() => void 0);
53
+ const key = prefetchKey(target);
54
+ if (key === navigatingKey) return;
55
+ const now = Date.now();
56
+ let entry = prefetches.get(key);
57
+ if (entry === void 0 || entry.expires <= now) {
58
+ for (const [cachedKey, cached] of prefetches) if (cached.expires <= now) prefetches.delete(cachedKey);
59
+ const created = {
60
+ expires: now + PREFETCH_STALE_TIME,
61
+ payload: requestNavigationPayload(target, prefetchController.signal)
62
+ };
63
+ created.payload.catch(() => {
64
+ if (prefetches.get(key) === created) prefetches.delete(key);
65
+ });
66
+ prefetches.set(key, created);
67
+ entry = created;
68
+ }
69
+ await entry.payload.then(() => void 0, () => void 0);
70
+ }
71
+ /** Removes and returns a fresh prefetch so each snapshot backs at most one navigation. */
72
+ function takePrefetch(target) {
73
+ const key = prefetchKey(target);
74
+ const entry = prefetches.get(key);
75
+ if (entry === void 0) return void 0;
76
+ prefetches.delete(key);
77
+ return entry.expires > Date.now() ? entry.payload : void 0;
78
+ }
79
+ async function navigate(to, navigationOptions = {}) {
80
+ return performNavigation(new URL(to, window.location.href), navigationOptions.replace === true ? "replace" : "push", navigationOptions.scroll !== false);
81
+ }
82
+ async function performNavigation(target, historyMode, scroll) {
83
+ if (disposed) throw new Error("cannot navigate an unmounted Vidact Start client");
84
+ if (!isClientNavigationUrl(target)) {
85
+ navigateDocument(target, historyMode === "replace");
86
+ return false;
87
+ }
88
+ const nextMatches = matchRoutes(options.manifest, target.pathname);
89
+ if (nextMatches.length === 0) {
90
+ navigateDocument(target, historyMode === "replace");
91
+ return false;
92
+ }
93
+ navigation += 1;
94
+ const attempt = navigation;
95
+ navigationController?.abort();
96
+ const controller = new AbortController();
97
+ navigationController = controller;
98
+ navigatingKey = prefetchKey(target);
99
+ cancelHover();
100
+ resolveRouteMatches(nextMatches).catch(() => void 0);
101
+ try {
102
+ const prefetched = await takePrefetch(target)?.catch(() => void 0);
103
+ if (attempt !== navigation) return false;
104
+ const payload = prefetched ?? await requestNavigationPayload(target, controller.signal);
105
+ if (attempt !== navigation) return false;
106
+ if (payload.kind === "document") {
107
+ navigateDocument(target, historyMode === "replace");
108
+ return false;
109
+ }
110
+ const nextSnapshot = decodeStartSnapshot(payload.text);
111
+ const nextUrl = new URL(nextSnapshot.pathname, target.origin);
112
+ if (nextUrl.hash === "") nextUrl.hash = target.hash;
113
+ const snapshotMatches = matchRoutes(options.manifest, nextUrl.pathname);
114
+ if (snapshotMatches.length === 0) {
115
+ navigateDocument(target, historyMode === "replace");
116
+ return false;
117
+ }
118
+ const nextRequest = new Request(nextUrl);
119
+ const nextLoaded = await loadRouteMatches(snapshotMatches, nextRequest, nextSnapshot.loaderData);
120
+ if (attempt !== navigation) return false;
121
+ const nextState = createClientRouteState(nextLoaded, nextRequest.url);
122
+ if (sharedRouteComponentCount(application.state, nextState) === 0) {
123
+ const replacement = createClientApplication(nextLoaded, nextRequest.url);
124
+ root.replace(replacement.application);
125
+ application = replacement;
126
+ } else application.update(nextState);
127
+ updateHistory(nextUrl, historyMode);
128
+ if (scroll) scrollToLocation(nextUrl);
129
+ return true;
130
+ } catch {
131
+ if (controller.signal.aborted || attempt !== navigation) return false;
132
+ navigateDocument(target, historyMode === "replace");
133
+ return false;
134
+ } finally {
135
+ if (attempt === navigation) navigatingKey = void 0;
136
+ }
137
+ }
138
+ function handleClick(event) {
139
+ const anchor = linkForEvent(event);
140
+ if (anchor === void 0) return;
141
+ const target = new URL(anchor.href, window.location.href);
142
+ if (target.pathname === window.location.pathname && target.search === window.location.search && target.hash !== window.location.hash) return;
143
+ event.preventDefault();
144
+ performNavigation(target, anchor.hasAttribute("data-vidact-start-replace") ? "replace" : "push", true);
145
+ }
146
+ function handlePopState() {
147
+ performNavigation(new URL(window.location.href), "none", false);
148
+ }
149
+ function prefetchAnchor(anchor) {
150
+ prefetch(anchor.href);
151
+ }
152
+ function cancelHover() {
153
+ if (hoverTimer !== void 0) clearTimeout(hoverTimer);
154
+ hoverTimer = void 0;
155
+ hoverAnchor = void 0;
156
+ }
157
+ function handlePointerOver(event) {
158
+ const anchor = prefetchLinkForTarget(event.target);
159
+ if (anchor === void 0 || anchor === hoverAnchor || prefersReducedData()) return;
160
+ cancelHover();
161
+ hoverAnchor = anchor;
162
+ hoverTimer = setTimeout(() => {
163
+ hoverTimer = void 0;
164
+ prefetchAnchor(anchor);
165
+ }, PREFETCH_HOVER_DELAY);
166
+ }
167
+ function handlePointerOut(event) {
168
+ if (hoverAnchor === void 0) return;
169
+ const related = event.relatedTarget;
170
+ if (related instanceof Node && hoverAnchor.contains(related)) return;
171
+ cancelHover();
172
+ }
173
+ function handleFocusIn(event) {
174
+ const anchor = prefetchLinkForTarget(event.target);
175
+ if (anchor !== void 0 && !prefersReducedData()) prefetchAnchor(anchor);
176
+ }
177
+ /** A press is a stronger signal than hover, so it prefetches even in data saver mode. */
178
+ function handlePointerDown(event) {
179
+ if (event.button !== 0) return;
180
+ const anchor = prefetchLinkForTarget(event.target);
181
+ if (anchor !== void 0) prefetchAnchor(anchor);
182
+ }
183
+ document.addEventListener("click", handleClick);
184
+ document.addEventListener("pointerover", handlePointerOver);
185
+ document.addEventListener("pointerout", handlePointerOut);
186
+ document.addEventListener("focusin", handleFocusIn);
187
+ document.addEventListener("pointerdown", handlePointerDown);
188
+ window.addEventListener("popstate", handlePopState);
189
+ return {
190
+ mount: root.mount,
191
+ replace: root.replace,
192
+ navigate,
193
+ prefetch,
194
+ unmount() {
195
+ if (disposed) return;
196
+ disposed = true;
197
+ navigation += 1;
198
+ navigationController?.abort();
199
+ prefetchController.abort();
200
+ prefetches.clear();
201
+ cancelHover();
202
+ document.removeEventListener("click", handleClick);
203
+ document.removeEventListener("pointerover", handlePointerOver);
204
+ document.removeEventListener("pointerout", handlePointerOut);
205
+ document.removeEventListener("focusin", handleFocusIn);
206
+ document.removeEventListener("pointerdown", handlePointerDown);
207
+ window.removeEventListener("popstate", handlePopState);
208
+ root.unmount();
209
+ }
210
+ };
113
211
  }
114
212
  function createClientApplication(matches, requestUrl) {
115
- return () => {
116
- const scope = createCompiledScope();
117
- const application = composeRouteMatches(matches, (component, props) => createElement(component, props), requestUrl);
118
- return compiledRoot(scope, () => cloneRenderable(application));
119
- };
213
+ let currentState = createClientRouteState(matches, requestUrl);
214
+ let updateState;
215
+ return {
216
+ application: () => {
217
+ const scope = createCompiledScope();
218
+ const routeSource = source(0);
219
+ const state = createCompiledState(scope, routeSource, currentState);
220
+ updateState = (nextState) => {
221
+ const previousState = currentState;
222
+ try {
223
+ state.set(nextState);
224
+ currentState = nextState;
225
+ } catch (error) {
226
+ try {
227
+ state.set(previousState);
228
+ } catch {}
229
+ currentState = previousState;
230
+ throw error;
231
+ }
232
+ };
233
+ const route = createRetainedRouteRenderable(scope, routeSource, state.get, 0);
234
+ return compiledRoot(scope, () => cloneRenderable(route));
235
+ },
236
+ get state() {
237
+ return currentState;
238
+ },
239
+ update(nextState) {
240
+ if (updateState === void 0) throw new Error("cannot update a Vidact Start application before it mounts");
241
+ updateState(nextState);
242
+ }
243
+ };
244
+ }
245
+ function createClientRouteState(matches, requestUrl) {
246
+ return {
247
+ components: matches.flatMap((match) => {
248
+ const component = match.definition.options.component;
249
+ return component === void 0 ? [] : [{
250
+ component,
251
+ entry: match.entry,
252
+ loaderData: match.loaderData,
253
+ params: match.params
254
+ }];
255
+ }),
256
+ requestUrl
257
+ };
258
+ }
259
+ function createRetainedRouteRenderable(scope, routeSource, readState, index) {
260
+ const initial = readState().components[index];
261
+ if (initial === void 0) return void 0;
262
+ const identity = routeComponentIdentity(initial.entry, initial.component);
263
+ let lastProps = routeComponentProps(scope, routeSource, readState, index);
264
+ const input = binding(scope, routeSource, () => {
265
+ const current = readState().components[index];
266
+ if (current === void 0 || routeComponentIdentity(current.entry, current.component) !== identity) return lastProps;
267
+ lastProps = routeComponentProps(scope, routeSource, readState, index);
268
+ return lastProps;
269
+ });
270
+ return createComponentRenderable(initial.component, input, identity);
271
+ }
272
+ function routeComponentProps(scope, routeSource, readState, index) {
273
+ const state = readState();
274
+ const match = state.components[index];
275
+ return {
276
+ children: createRetainedRouteRenderable(scope, routeSource, readState, index + 1),
277
+ loaderData: match.loaderData,
278
+ params: match.params,
279
+ requestUrl: state.requestUrl
280
+ };
281
+ }
282
+ function sharedRouteComponentCount(left, right) {
283
+ const length = Math.min(left.components.length, right.components.length);
284
+ let index = 0;
285
+ while (index < length) {
286
+ const previous = left.components[index];
287
+ const next = right.components[index];
288
+ if (previous.entry !== next.entry || previous.component !== next.component) break;
289
+ index += 1;
290
+ }
291
+ return index;
292
+ }
293
+ function routeComponentIdentity(entry, component) {
294
+ let componentIdentities = routeComponentIdentities.get(entry);
295
+ if (componentIdentities === void 0) {
296
+ componentIdentities = /* @__PURE__ */ new WeakMap();
297
+ routeComponentIdentities.set(entry, componentIdentities);
298
+ }
299
+ let identity = componentIdentities.get(component);
300
+ if (identity === void 0) {
301
+ identity = {};
302
+ componentIdentities.set(component, identity);
303
+ }
304
+ return identity;
120
305
  }
121
306
  function linkForEvent(event) {
122
- if (event.defaultPrevented ||
123
- event.button !== 0 ||
124
- event.metaKey ||
125
- event.ctrlKey ||
126
- event.shiftKey ||
127
- event.altKey) {
128
- return undefined;
129
- }
130
- const target = event.target;
131
- if (!(target instanceof Element))
132
- return undefined;
133
- const anchor = target.closest('a[data-vidact-start-link]');
134
- if (anchor === null ||
135
- anchor.hasAttribute('download') ||
136
- (anchor.target !== '' && anchor.target !== '_self') ||
137
- anchor.rel.split(/\s+/u).includes('external')) {
138
- return undefined;
139
- }
140
- const url = new URL(anchor.href, window.location.href);
141
- return isClientNavigationUrl(url) ? anchor : undefined;
307
+ if (event.defaultPrevented || event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return;
308
+ return startLinkForTarget(event.target);
309
+ }
310
+ function prefetchLinkForTarget(target) {
311
+ const anchor = startLinkForTarget(target);
312
+ return anchor === void 0 || anchor.dataset.vidactStartPrefetch === "none" ? void 0 : anchor;
313
+ }
314
+ function startLinkForTarget(target) {
315
+ if (!(target instanceof Element)) return void 0;
316
+ const anchor = target.closest("a[data-vidact-start-link]");
317
+ if (anchor === null || anchor.hasAttribute("download") || anchor.target !== "" && anchor.target !== "_self" || anchor.rel.split(/\s+/u).includes("external")) return;
318
+ return isClientNavigationUrl(new URL(anchor.href, window.location.href)) ? anchor : void 0;
142
319
  }
143
320
  function isClientNavigationUrl(url) {
144
- return (url.origin === window.location.origin && (url.protocol === 'http:' || url.protocol === 'https:'));
321
+ return url.origin === window.location.origin && (url.protocol === "http:" || url.protocol === "https:");
322
+ }
323
+ function isCurrentDocument(url) {
324
+ return url.pathname === window.location.pathname && url.search === window.location.search;
325
+ }
326
+ function prefetchKey(url) {
327
+ return `${url.pathname}${url.search}`;
328
+ }
329
+ function prefersReducedData() {
330
+ return navigator.connection?.saveData === true;
145
331
  }
146
332
  function updateHistory(url, mode) {
147
- if (mode === 'push')
148
- window.history.pushState({}, '', url);
149
- else if (mode === 'replace')
150
- window.history.replaceState(window.history.state, '', url);
333
+ if (mode === "push") window.history.pushState({}, "", url);
334
+ else if (mode === "replace") window.history.replaceState(window.history.state, "", url);
151
335
  }
152
336
  function scrollToLocation(url) {
153
- if (url.hash.length > 1) {
154
- let id;
155
- try {
156
- id = decodeURIComponent(url.hash.slice(1));
157
- }
158
- catch {
159
- id = url.hash.slice(1);
160
- }
161
- const target = document.getElementById(id);
162
- if (target !== null) {
163
- target.scrollIntoView();
164
- return;
165
- }
166
- }
167
- window.scrollTo({ top: 0, left: 0, behavior: 'instant' });
337
+ if (url.hash.length > 1) {
338
+ let id;
339
+ try {
340
+ id = decodeURIComponent(url.hash.slice(1));
341
+ } catch {
342
+ id = url.hash.slice(1);
343
+ }
344
+ const target = document.getElementById(id);
345
+ if (target !== null) {
346
+ target.scrollIntoView();
347
+ return;
348
+ }
349
+ }
350
+ window.scrollTo({
351
+ top: 0,
352
+ left: 0,
353
+ behavior: "instant"
354
+ });
168
355
  }
169
356
  function navigateDocument(url, replace) {
170
- if (replace)
171
- window.location.replace(url);
172
- else
173
- window.location.assign(url);
357
+ if (replace) window.location.replace(url);
358
+ else window.location.assign(url);
174
359
  }
175
360
  function readSnapshot(id) {
176
- const element = document.querySelector(`#${CSS.escape(id)}`);
177
- if (element === null)
178
- throw new Error(`Vidact Start snapshot ${id} is missing`);
179
- return element.textContent ?? '';
361
+ const element = document.querySelector(`#${CSS.escape(id)}`);
362
+ if (element === null) throw new Error(`Vidact Start snapshot ${id} is missing`);
363
+ return element.textContent ?? "";
180
364
  }
365
+ //#endregion
366
+ export { hydrateStart };
367
+
181
368
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","names":[],"sources":["../src/client.ts"],"mappings":"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"}