@vidact/start 0.2.0-beta.0 → 0.2.0-beta.5
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/CHANGELOG.md +65 -0
- package/dist/client.d.ts +24 -16
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +137 -165
- package/dist/client.js.map +1 -1
- package/dist/index-client.d.ts +5 -4
- package/dist/index-client.js +4 -4
- package/dist/index.d.ts +5 -4
- package/dist/index.js +4 -4
- package/dist/link-client.d.ts +6 -4
- package/dist/link-client.d.ts.map +1 -1
- package/dist/link-client.js +8 -4
- package/dist/link-client.js.map +1 -1
- package/dist/link-contract.d.ts +10 -7
- package/dist/link-contract.d.ts.map +1 -1
- package/dist/link-contract.js +11 -7
- package/dist/link-contract.js.map +1 -1
- package/dist/link.d.ts +6 -4
- package/dist/link.d.ts.map +1 -1
- package/dist/link.js +8 -4
- package/dist/link.js.map +1 -1
- package/dist/router.d.ts +57 -55
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +150 -157
- package/dist/router.js.map +1 -1
- package/dist/server.d.ts +18 -16
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +95 -99
- package/dist/server.js.map +1 -1
- package/dist/snapshot.d.ts +13 -10
- package/dist/snapshot.d.ts.map +1 -1
- package/dist/snapshot.js +19 -20
- package/dist/snapshot.js.map +1 -1
- package/dist/virtual.d.ts +3 -2
- package/dist/virtual.js +1 -2
- package/dist/vite.d.ts +18 -15
- package/dist/vite.d.ts.map +1 -1
- package/dist/vite.js +144 -171
- package/dist/vite.js.map +1 -1
- package/package.json +9 -8
- package/src/client.ts +272 -0
- package/src/index-client.ts +3 -0
- package/src/index.ts +3 -0
- package/src/link-client.ts +10 -0
- package/src/link-contract.ts +17 -0
- package/src/link.ts +10 -0
- package/src/router.ts +282 -0
- package/src/server.ts +211 -0
- package/src/snapshot.ts +40 -0
- package/src/virtual.ts +5 -0
- package/src/vite.ts +256 -0
- package/dist/index-client.d.ts.map +0 -1
- package/dist/index-client.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/virtual.d.ts.map +0 -1
- package/dist/virtual.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,70 @@
|
|
|
1
1
|
# @vidact/start
|
|
2
2
|
|
|
3
|
+
## 0.2.0-beta.5
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- f7fe490: Hydration fixes for server-rendered content the client cannot reproduce immediately.
|
|
8
|
+
|
|
9
|
+
- Keep hydration markers out of raw-text elements. The server no longer emits `<!--vidact:v1:*-->` comments inside `<textarea>`, `<title>`, `<script>` and `<style>`, where the HTML parser turned them into literal text that stayed visible until hydration recovered from the mismatch. The hydrator synthesizes those markers around the element's parsed text node instead, so such elements hydrate in place.
|
|
10
|
+
- Dehydrated Suspense boundaries. When a Suspense child suspends while hydrating server-rendered content — a `lazy` chunk that has not loaded yet, for example — the boundary now keeps the server DOM on screen and swaps in the client render once the resource resolves, instead of publishing the fallback over it, mismatching, and re-mounting the whole root.
|
|
11
|
+
- `@vidact/start` renders the route tree inside a root component on the server. The client mounts the application under a compiled root of its own, which claims a component marker range; without a matching server root every client component claimed the range of the _next_ server component, which surfaced as a hydration mismatch (and a visible fallback flash) on any route whose component has more than one return.
|
|
12
|
+
- `hydrateStart` accepts `onRecoverableError`, and warns on the console by default when hydration has to recover by re-rendering. A silent recovery looks like a working page that merely flashes.
|
|
13
|
+
- Hydration mismatch messages describe the element (`DIV.class[data-x]`) instead of just its tag.
|
|
14
|
+
- Element claiming no longer prefers a candidate that contains an array marker unless the pending structural child is a list. A conditional or Suspense child triggered the same bias, so a class-less wrapper `<div>{cond ? <A/> : <B/>}</div>` could claim an unrelated sibling that happened to hold a keyed list.
|
|
15
|
+
|
|
16
|
+
- Hydration marker protocol `v2`. The server no longer wraps intrinsic elements (`s`) or scalar text (`t`) in marker comments — inside a child slot an element can only be the intrinsic child and a text node the scalar, so the hydrator infers them, splitting a text node that adjacent scalars parsed into. A scalar binding borrows its child-slot markers as its range (no DOM writes) and only creates anchor comments where there is nothing to borrow, such as inside `<textarea>`. The prefix shrank from `vidact:v1` to `v2`; together this removes about 40% of markers and 60% of marker bytes from server HTML. A `v1` render is rejected by a `v2` client and re-rendered, and vice versa.
|
|
17
|
+
|
|
18
|
+
- Updated dependencies [f7fe490]
|
|
19
|
+
- @vidact/runtime@0.2.0-beta.5
|
|
20
|
+
- @vidact/vite@0.2.0-beta.5
|
|
21
|
+
|
|
22
|
+
## 0.2.0-beta.4
|
|
23
|
+
|
|
24
|
+
### Patch Changes
|
|
25
|
+
|
|
26
|
+
- 917f0be: Re-release CLI
|
|
27
|
+
- Updated dependencies [917f0be]
|
|
28
|
+
- @vidact/runtime@0.2.0-beta.4
|
|
29
|
+
- @vidact/vite@0.2.0-beta.4
|
|
30
|
+
|
|
31
|
+
## 0.2.0-beta.3
|
|
32
|
+
|
|
33
|
+
### Patch Changes
|
|
34
|
+
|
|
35
|
+
- 917f0be: Release vidact CLI
|
|
36
|
+
- Updated dependencies [917f0be]
|
|
37
|
+
- @vidact/runtime@0.2.0-beta.3
|
|
38
|
+
- @vidact/vite@0.2.0-beta.3
|
|
39
|
+
|
|
40
|
+
## 0.2.0-beta.2
|
|
41
|
+
|
|
42
|
+
### Patch Changes
|
|
43
|
+
|
|
44
|
+
- 9b7d659: Build every package with `tsdown` in unbundle mode instead of `tsc` plus two
|
|
45
|
+
repository scripts. `dist` still mirrors `src` file for file, with the same entry
|
|
46
|
+
points, ESM output, declarations, declaration maps, and source maps, and the
|
|
47
|
+
runtime's tree-shaking budgets are unchanged. The Vidact Start ambient route
|
|
48
|
+
module ships as written so it stays an ambient declaration rather than a module
|
|
49
|
+
augmentation.
|
|
50
|
+
|
|
51
|
+
Packages now publish their `src` directory, so the shipped source maps and
|
|
52
|
+
declaration maps resolve. Vite no longer reports "points to missing source
|
|
53
|
+
files" for Vidact modules, debugging steps into real TypeScript, and go-to-
|
|
54
|
+
definition lands on the source rather than the declaration.
|
|
55
|
+
|
|
56
|
+
- Updated dependencies [9b7d659]
|
|
57
|
+
- @vidact/runtime@0.2.0-beta.2
|
|
58
|
+
- @vidact/vite@0.2.0-beta.2
|
|
59
|
+
|
|
60
|
+
## 0.2.0-beta.1
|
|
61
|
+
|
|
62
|
+
### Patch Changes
|
|
63
|
+
|
|
64
|
+
- Updated dependencies [7765e99]
|
|
65
|
+
- @vidact/runtime@0.2.0-beta.1
|
|
66
|
+
- @vidact/vite@0.2.0-beta.1
|
|
67
|
+
|
|
3
68
|
## 0.2.0-beta.0
|
|
4
69
|
|
|
5
70
|
### Minor Changes
|
package/dist/client.d.ts
CHANGED
|
@@ -1,20 +1,28 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
import { RouteManifest, StartComponent } from "./router.js";
|
|
2
|
+
import { CompiledRoot } from "@vidact/runtime";
|
|
3
|
+
//#region src/client.d.ts
|
|
4
|
+
interface HydrateStartOptions {
|
|
5
|
+
readonly fetch?: typeof globalThis.fetch;
|
|
6
|
+
readonly manifest: RouteManifest;
|
|
7
|
+
/**
|
|
8
|
+
* Called when hydration could not attach to the server DOM and the root was rendered
|
|
9
|
+
* client-side instead. Defaults to a console warning: a silent recovery looks like a
|
|
10
|
+
* working page that merely flashes, and is far harder to notice than a warning.
|
|
11
|
+
*/
|
|
12
|
+
readonly onRecoverableError?: (error: unknown) => void;
|
|
13
|
+
readonly root?: ParentNode;
|
|
14
|
+
readonly rootId?: string;
|
|
15
|
+
readonly snapshot?: string;
|
|
16
|
+
readonly snapshotId?: string;
|
|
10
17
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
18
|
+
interface StartNavigateOptions {
|
|
19
|
+
readonly replace?: boolean;
|
|
20
|
+
readonly scroll?: boolean;
|
|
14
21
|
}
|
|
15
|
-
|
|
16
|
-
|
|
22
|
+
interface StartClient extends CompiledRoot {
|
|
23
|
+
readonly navigate: (to: string | URL, options?: StartNavigateOptions) => Promise<boolean>;
|
|
17
24
|
}
|
|
18
|
-
|
|
19
|
-
|
|
25
|
+
declare function hydrateStart(options: HydrateStartOptions): Promise<StartClient>;
|
|
26
|
+
//#endregion
|
|
27
|
+
export { HydrateStartOptions, StartClient, type StartComponent, StartNavigateOptions, hydrateStart };
|
|
20
28
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","
|
|
1
|
+
{"version":3,"file":"client.d.ts","names":[],"sources":["../src/client.ts"],"mappings":";;;UA0BiB;WACN,eAAe,WAAW;WAC1B,UAAU;;;;;;WAMV,sBAAsB;WACtB,OAAO;WACP;WACA;WACA;;UAGM;WACN;WACA;;UAGM,oBAAoB;WAC1B,WAAW,aAAa,KAAK,UAAU,yBAAyB;;iBAKrD,aAAa,SAAS,sBAAsB,QAAQ"}
|
package/dist/client.js
CHANGED
|
@@ -1,181 +1,153 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
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 { composeRouteMatches, loadRouteMatches, matchRoutes } from "./router.js";
|
|
2
|
+
import { VIDACT_START_NAVIGATION_HEADER, decodeStartSnapshot } from "./snapshot.js";
|
|
3
|
+
import { cloneRenderable, compiledRoot, createCompiledScope } from "@vidact/runtime";
|
|
4
|
+
import { createElement, 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
|
+
async function hydrateStart(options) {
|
|
9
|
+
const snapshot = decodeStartSnapshot(options.snapshot ?? readSnapshot(options.snapshotId ?? DEFAULT_SNAPSHOT_ID));
|
|
10
|
+
const initialUrl = new URL(snapshot.pathname, window.location.href);
|
|
11
|
+
const matches = matchRoutes(options.manifest, initialUrl.pathname);
|
|
12
|
+
if (matches.length === 0) 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) throw new Error("Vidact Start hydration root is missing");
|
|
17
|
+
const root = hydrateRoot(host, createClientApplication(loaded, request.url), { onRecoverableError: options.onRecoverableError ?? ((error) => console.warn("[vidact/start] hydration recovered by re-rendering:", error)) });
|
|
18
|
+
const fetchNavigation = options.fetch ?? window.fetch.bind(window);
|
|
19
|
+
let navigation = 0;
|
|
20
|
+
let navigationController;
|
|
21
|
+
let disposed = false;
|
|
22
|
+
async function navigate(to, navigationOptions = {}) {
|
|
23
|
+
return performNavigation(new URL(to, window.location.href), navigationOptions.replace === true ? "replace" : "push", navigationOptions.scroll !== false);
|
|
24
|
+
}
|
|
25
|
+
async function performNavigation(target, historyMode, scroll) {
|
|
26
|
+
if (disposed) throw new Error("cannot navigate an unmounted Vidact Start client");
|
|
27
|
+
if (!isClientNavigationUrl(target)) {
|
|
28
|
+
navigateDocument(target, historyMode === "replace");
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
if (matchRoutes(options.manifest, target.pathname).length === 0) {
|
|
32
|
+
navigateDocument(target, historyMode === "replace");
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
navigation += 1;
|
|
36
|
+
const attempt = navigation;
|
|
37
|
+
navigationController?.abort();
|
|
38
|
+
const controller = new AbortController();
|
|
39
|
+
navigationController = controller;
|
|
40
|
+
try {
|
|
41
|
+
const response = await fetchNavigation(target, {
|
|
42
|
+
credentials: "same-origin",
|
|
43
|
+
headers: { [VIDACT_START_NAVIGATION_HEADER]: "1" },
|
|
44
|
+
signal: controller.signal
|
|
45
|
+
});
|
|
46
|
+
if (attempt !== navigation) return false;
|
|
47
|
+
if (!response.ok || response.headers.get("content-type")?.split(";", 1)[0] !== "application/x-vidact-start+json") {
|
|
48
|
+
navigateDocument(target, historyMode === "replace");
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
const nextSnapshot = decodeStartSnapshot(await response.text());
|
|
52
|
+
const nextUrl = new URL(nextSnapshot.pathname, target.origin);
|
|
53
|
+
const snapshotMatches = matchRoutes(options.manifest, nextUrl.pathname);
|
|
54
|
+
if (snapshotMatches.length === 0) {
|
|
55
|
+
navigateDocument(target, historyMode === "replace");
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
const nextRequest = new Request(nextUrl);
|
|
59
|
+
const nextLoaded = await loadRouteMatches(snapshotMatches, nextRequest, nextSnapshot.loaderData);
|
|
60
|
+
if (attempt !== navigation) return false;
|
|
61
|
+
root.replace(createClientApplication(nextLoaded, nextRequest.url));
|
|
62
|
+
updateHistory(nextUrl, historyMode);
|
|
63
|
+
if (scroll) scrollToLocation(nextUrl);
|
|
64
|
+
return true;
|
|
65
|
+
} catch {
|
|
66
|
+
if (controller.signal.aborted || attempt !== navigation) return false;
|
|
67
|
+
navigateDocument(target, historyMode === "replace");
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function handleClick(event) {
|
|
72
|
+
const anchor = linkForEvent(event);
|
|
73
|
+
if (anchor === void 0) return;
|
|
74
|
+
const target = new URL(anchor.href, window.location.href);
|
|
75
|
+
if (target.pathname === window.location.pathname && target.search === window.location.search && target.hash !== window.location.hash) return;
|
|
76
|
+
event.preventDefault();
|
|
77
|
+
performNavigation(target, anchor.hasAttribute("data-vidact-start-replace") ? "replace" : "push", true);
|
|
78
|
+
}
|
|
79
|
+
function handlePopState() {
|
|
80
|
+
performNavigation(new URL(window.location.href), "none", false);
|
|
81
|
+
}
|
|
82
|
+
document.addEventListener("click", handleClick);
|
|
83
|
+
window.addEventListener("popstate", handlePopState);
|
|
84
|
+
return {
|
|
85
|
+
mount: root.mount,
|
|
86
|
+
replace: root.replace,
|
|
87
|
+
navigate,
|
|
88
|
+
unmount() {
|
|
89
|
+
if (disposed) return;
|
|
90
|
+
disposed = true;
|
|
91
|
+
navigation += 1;
|
|
92
|
+
navigationController?.abort();
|
|
93
|
+
document.removeEventListener("click", handleClick);
|
|
94
|
+
window.removeEventListener("popstate", handlePopState);
|
|
95
|
+
root.unmount();
|
|
96
|
+
}
|
|
97
|
+
};
|
|
113
98
|
}
|
|
114
99
|
function createClientApplication(matches, requestUrl) {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
100
|
+
return () => {
|
|
101
|
+
const scope = createCompiledScope();
|
|
102
|
+
const application = composeRouteMatches(matches, (component, props) => createElement(component, props), requestUrl);
|
|
103
|
+
return compiledRoot(scope, () => cloneRenderable(application));
|
|
104
|
+
};
|
|
120
105
|
}
|
|
121
106
|
function linkForEvent(event) {
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
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;
|
|
107
|
+
if (event.defaultPrevented || event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return;
|
|
108
|
+
const target = event.target;
|
|
109
|
+
if (!(target instanceof Element)) return void 0;
|
|
110
|
+
const anchor = target.closest("a[data-vidact-start-link]");
|
|
111
|
+
if (anchor === null || anchor.hasAttribute("download") || anchor.target !== "" && anchor.target !== "_self" || anchor.rel.split(/\s+/u).includes("external")) return;
|
|
112
|
+
return isClientNavigationUrl(new URL(anchor.href, window.location.href)) ? anchor : void 0;
|
|
142
113
|
}
|
|
143
114
|
function isClientNavigationUrl(url) {
|
|
144
|
-
|
|
115
|
+
return url.origin === window.location.origin && (url.protocol === "http:" || url.protocol === "https:");
|
|
145
116
|
}
|
|
146
117
|
function updateHistory(url, mode) {
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
else if (mode === 'replace')
|
|
150
|
-
window.history.replaceState(window.history.state, '', url);
|
|
118
|
+
if (mode === "push") window.history.pushState({}, "", url);
|
|
119
|
+
else if (mode === "replace") window.history.replaceState(window.history.state, "", url);
|
|
151
120
|
}
|
|
152
121
|
function scrollToLocation(url) {
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
122
|
+
if (url.hash.length > 1) {
|
|
123
|
+
let id;
|
|
124
|
+
try {
|
|
125
|
+
id = decodeURIComponent(url.hash.slice(1));
|
|
126
|
+
} catch {
|
|
127
|
+
id = url.hash.slice(1);
|
|
128
|
+
}
|
|
129
|
+
const target = document.getElementById(id);
|
|
130
|
+
if (target !== null) {
|
|
131
|
+
target.scrollIntoView();
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
window.scrollTo({
|
|
136
|
+
top: 0,
|
|
137
|
+
left: 0,
|
|
138
|
+
behavior: "instant"
|
|
139
|
+
});
|
|
168
140
|
}
|
|
169
141
|
function navigateDocument(url, replace) {
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
else
|
|
173
|
-
window.location.assign(url);
|
|
142
|
+
if (replace) window.location.replace(url);
|
|
143
|
+
else window.location.assign(url);
|
|
174
144
|
}
|
|
175
145
|
function readSnapshot(id) {
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
return element.textContent ?? '';
|
|
146
|
+
const element = document.querySelector(`#${CSS.escape(id)}`);
|
|
147
|
+
if (element === null) throw new Error(`Vidact Start snapshot ${id} is missing`);
|
|
148
|
+
return element.textContent ?? "";
|
|
180
149
|
}
|
|
150
|
+
//#endregion
|
|
151
|
+
export { hydrateStart };
|
|
152
|
+
|
|
181
153
|
//# sourceMappingURL=client.js.map
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","
|
|
1
|
+
{"version":3,"file":"client.js","names":[],"sources":["../src/client.ts"],"mappings":"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"}
|
package/dist/index-client.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { FileRouteDefinition, FileRouteOptions, LoadedRouteMatch, ResolvedRouteMatch, RouteComponentProps, RouteLoaderContext, RouteManifest, RouteManifestEntry, RouteMatch, RouteModule, RouteParameters, RouteServerContext, RouteServerHandler, StartComponent, composeRouteMatches, createRouteManifest, defineFileRoute, isFileRouteDefinition, loadRouteMatches, matchRoutes, resolveRouteMatches, routeLoaderData, runRouteLoaders } from "./router.js";
|
|
2
|
+
import { LinkProps } from "./link-contract.js";
|
|
3
|
+
import { Link } from "./link-client.js";
|
|
4
|
+
import { StartSnapshot, VIDACT_START_NAVIGATION_HEADER, VIDACT_START_PROTOCOL, VIDACT_START_SNAPSHOT_MEDIA_TYPE, decodeStartSnapshot, encodeStartSnapshot } from "./snapshot.js";
|
|
5
|
+
export { FileRouteDefinition, FileRouteOptions, Link, type LinkProps, LoadedRouteMatch, ResolvedRouteMatch, RouteComponentProps, RouteLoaderContext, RouteManifest, RouteManifestEntry, RouteMatch, RouteModule, RouteParameters, RouteServerContext, RouteServerHandler, StartComponent, StartSnapshot, VIDACT_START_NAVIGATION_HEADER, VIDACT_START_PROTOCOL, VIDACT_START_SNAPSHOT_MEDIA_TYPE, composeRouteMatches, createRouteManifest, decodeStartSnapshot, defineFileRoute, encodeStartSnapshot, isFileRouteDefinition, loadRouteMatches, matchRoutes, resolveRouteMatches, routeLoaderData, runRouteLoaders };
|
package/dist/index-client.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { composeRouteMatches, createRouteManifest, defineFileRoute, isFileRouteDefinition, loadRouteMatches, matchRoutes, resolveRouteMatches, routeLoaderData, runRouteLoaders } from "./router.js";
|
|
2
|
+
import { VIDACT_START_NAVIGATION_HEADER, VIDACT_START_PROTOCOL, VIDACT_START_SNAPSHOT_MEDIA_TYPE, decodeStartSnapshot, encodeStartSnapshot } from "./snapshot.js";
|
|
3
|
+
import { Link } from "./link-client.js";
|
|
4
|
+
export { Link, VIDACT_START_NAVIGATION_HEADER, VIDACT_START_PROTOCOL, VIDACT_START_SNAPSHOT_MEDIA_TYPE, composeRouteMatches, createRouteManifest, decodeStartSnapshot, defineFileRoute, encodeStartSnapshot, isFileRouteDefinition, loadRouteMatches, matchRoutes, resolveRouteMatches, routeLoaderData, runRouteLoaders };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { FileRouteDefinition, FileRouteOptions, LoadedRouteMatch, ResolvedRouteMatch, RouteComponentProps, RouteLoaderContext, RouteManifest, RouteManifestEntry, RouteMatch, RouteModule, RouteParameters, RouteServerContext, RouteServerHandler, StartComponent, composeRouteMatches, createRouteManifest, defineFileRoute, isFileRouteDefinition, loadRouteMatches, matchRoutes, resolveRouteMatches, routeLoaderData, runRouteLoaders } from "./router.js";
|
|
2
|
+
import { LinkProps } from "./link-contract.js";
|
|
3
|
+
import { StartSnapshot, VIDACT_START_NAVIGATION_HEADER, VIDACT_START_PROTOCOL, VIDACT_START_SNAPSHOT_MEDIA_TYPE, decodeStartSnapshot, encodeStartSnapshot } from "./snapshot.js";
|
|
4
|
+
import { Link } from "./link.js";
|
|
5
|
+
export { FileRouteDefinition, FileRouteOptions, Link, type LinkProps, LoadedRouteMatch, ResolvedRouteMatch, RouteComponentProps, RouteLoaderContext, RouteManifest, RouteManifestEntry, RouteMatch, RouteModule, RouteParameters, RouteServerContext, RouteServerHandler, StartComponent, StartSnapshot, VIDACT_START_NAVIGATION_HEADER, VIDACT_START_PROTOCOL, VIDACT_START_SNAPSHOT_MEDIA_TYPE, composeRouteMatches, createRouteManifest, decodeStartSnapshot, defineFileRoute, encodeStartSnapshot, isFileRouteDefinition, loadRouteMatches, matchRoutes, resolveRouteMatches, routeLoaderData, runRouteLoaders };
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { composeRouteMatches, createRouteManifest, defineFileRoute, isFileRouteDefinition, loadRouteMatches, matchRoutes, resolveRouteMatches, routeLoaderData, runRouteLoaders } from "./router.js";
|
|
2
|
+
import { VIDACT_START_NAVIGATION_HEADER, VIDACT_START_PROTOCOL, VIDACT_START_SNAPSHOT_MEDIA_TYPE, decodeStartSnapshot, encodeStartSnapshot } from "./snapshot.js";
|
|
3
|
+
import { Link } from "./link.js";
|
|
4
|
+
export { Link, VIDACT_START_NAVIGATION_HEADER, VIDACT_START_PROTOCOL, VIDACT_START_SNAPSHOT_MEDIA_TYPE, composeRouteMatches, createRouteManifest, decodeStartSnapshot, defineFileRoute, encodeStartSnapshot, isFileRouteDefinition, loadRouteMatches, matchRoutes, resolveRouteMatches, routeLoaderData, runRouteLoaders };
|
package/dist/link-client.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { LinkProps } from "./link-contract.js";
|
|
2
|
+
import { CompiledRenderValue } from "@vidact/runtime";
|
|
3
|
+
//#region src/link-client.d.ts
|
|
4
|
+
declare function Link(props: LinkProps): CompiledRenderValue;
|
|
5
|
+
//#endregion
|
|
6
|
+
export { Link, type LinkProps };
|
|
5
7
|
//# sourceMappingURL=link-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link-client.d.ts","
|
|
1
|
+
{"version":3,"file":"link-client.d.ts","names":[],"sources":["../src/link-client.ts"],"mappings":";;;iBAKgB,KAAK,OAAO,YAAY"}
|
package/dist/link-client.js
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { anchorProps } from "./link-contract.js";
|
|
2
|
+
import { createElement } from "@vidact/runtime/hydrate";
|
|
3
|
+
//#region src/link-client.ts
|
|
4
|
+
function Link(props) {
|
|
5
|
+
return createElement("a", anchorProps(props));
|
|
5
6
|
}
|
|
7
|
+
//#endregion
|
|
8
|
+
export { Link };
|
|
9
|
+
|
|
6
10
|
//# sourceMappingURL=link-client.js.map
|
package/dist/link-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link-client.js","
|
|
1
|
+
{"version":3,"file":"link-client.js","names":[],"sources":["../src/link-client.ts"],"mappings":";;;AAKA,SAAgB,KAAK,OAAuC;CAC1D,OAAO,cAAc,KAAK,YAAY,KAAK,CAAC;AAC9C"}
|
package/dist/link-contract.d.ts
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import { CompiledRenderValue } from "@vidact/runtime";
|
|
2
|
+
//#region src/link-contract.d.ts
|
|
3
|
+
interface LinkProps extends Readonly<Record<string, unknown>> {
|
|
4
|
+
readonly children?: CompiledRenderValue;
|
|
5
|
+
readonly href: string;
|
|
6
|
+
readonly reloadDocument?: boolean;
|
|
7
|
+
readonly replace?: boolean;
|
|
7
8
|
}
|
|
8
|
-
|
|
9
|
+
declare function anchorProps(props: LinkProps): Record<string, unknown>;
|
|
10
|
+
//#endregion
|
|
11
|
+
export { LinkProps, anchorProps };
|
|
9
12
|
//# sourceMappingURL=link-contract.d.ts.map
|