@hozu/runtime-client 0.1.0
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/LICENSE +21 -0
- package/README.md +15 -0
- package/dist/browser/chunk-7HUHKEFT.js +1 -0
- package/dist/browser/chunk-DRLGN2D4.js +1 -0
- package/dist/browser/chunk-FZY6ENWQ.js +1 -0
- package/dist/browser/chunk-HGZ7KQUC.js +1 -0
- package/dist/browser/chunk-Z7ZFHZVV.js +1 -0
- package/dist/browser/client.js +1 -0
- package/dist/browser/navigate.js +1 -0
- package/dist/browser-dev/client.js +1604 -0
- package/dist/browser.d.ts +2 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +3 -0
- package/dist/browser.js.map +1 -0
- package/dist/dev.d.ts +6 -0
- package/dist/dev.d.ts.map +1 -0
- package/dist/dev.js +42 -0
- package/dist/dev.js.map +1 -0
- package/dist/dom.d.ts +11 -0
- package/dist/dom.d.ts.map +1 -0
- package/dist/dom.js +70 -0
- package/dist/dom.js.map +1 -0
- package/dist/files.js +1 -0
- package/dist/hydrate.d.ts +56 -0
- package/dist/hydrate.d.ts.map +1 -0
- package/dist/hydrate.js +163 -0
- package/dist/hydrate.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/live.d.ts +2 -0
- package/dist/live.d.ts.map +1 -0
- package/dist/live.js +7 -0
- package/dist/live.js.map +1 -0
- package/dist/motion.d.ts +5 -0
- package/dist/motion.d.ts.map +1 -0
- package/dist/motion.js +78 -0
- package/dist/motion.js.map +1 -0
- package/dist/mount.d.ts +65 -0
- package/dist/mount.d.ts.map +1 -0
- package/dist/mount.js +550 -0
- package/dist/mount.js.map +1 -0
- package/dist/navigate.d.ts +18 -0
- package/dist/navigate.d.ts.map +1 -0
- package/dist/navigate.js +197 -0
- package/dist/navigate.js.map +1 -0
- package/dist/uploads.d.ts +2 -0
- package/dist/uploads.d.ts.map +1 -0
- package/dist/uploads.js +21 -0
- package/dist/uploads.js.map +1 -0
- package/dist/visible.d.ts +2 -0
- package/dist/visible.d.ts.map +1 -0
- package/dist/visible.js +26 -0
- package/dist/visible.js.map +1 -0
- package/dist/widget.d.ts +16 -0
- package/dist/widget.d.ts.map +1 -0
- package/dist/widget.js +53 -0
- package/dist/widget.js.map +1 -0
- package/files.d.ts +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { PagePayload, Session } from './hydrate.ts';
|
|
2
|
+
export interface State {
|
|
3
|
+
views: Map<string, Set<string>>;
|
|
4
|
+
soft: Record<string, string[]>;
|
|
5
|
+
routes: Record<string, string>;
|
|
6
|
+
}
|
|
7
|
+
export declare function routeOf(routes: Record<string, string>, pathname: string): string | null;
|
|
8
|
+
export declare function islandsIn(root: Node): {
|
|
9
|
+
marker: Comment;
|
|
10
|
+
view: string | null;
|
|
11
|
+
}[];
|
|
12
|
+
export declare function track(state: State, session: Session, payload: PagePayload, found: {
|
|
13
|
+
view: string | null;
|
|
14
|
+
}[]): void;
|
|
15
|
+
export declare function ranges(body: Node): Map<string, Node[]>;
|
|
16
|
+
export declare function swap(session: Session, state: State, next: Document, kept: string[]): Promise<boolean>;
|
|
17
|
+
export declare function soft(session: Session): void;
|
|
18
|
+
//# sourceMappingURL=navigate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigate.d.ts","sourceRoot":"","sources":["../src/navigate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAExD,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;IAC/B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;IAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC/B;AA+BD,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWvF;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAAE,CAWhF;AAED,wBAAgB,KAAK,CACnB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAAE,QAWjC;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAatD;AAED,wBAAsB,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CA4C3G;AAED,wBAAgB,IAAI,CAAC,OAAO,EAAE,OAAO,QA8DpC"}
|
package/dist/navigate.js
ADDED
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
const HEAD = 'title,meta[name=description],meta[name=robots],link[rel=canonical],meta[property],script[type="application/ld+json"]';
|
|
2
|
+
const groups = { '?': '(?:/[^/]+)?', '+': '(?:/[^/]+)+', '*': '(?:/[^/]+)*' };
|
|
3
|
+
const patternOf = (path) => {
|
|
4
|
+
let keys = 0;
|
|
5
|
+
const source = path
|
|
6
|
+
.split(/(\/:[A-Za-z]\w*[?*+]?)/)
|
|
7
|
+
.map((part, i) => {
|
|
8
|
+
if (i % 2 === 0)
|
|
9
|
+
return part.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
10
|
+
const mod = part.at(-1);
|
|
11
|
+
keys += mod === '+' || mod === '*' ? 1.01 : 1;
|
|
12
|
+
return groups[mod] ?? '/[^/]+';
|
|
13
|
+
})
|
|
14
|
+
.join('');
|
|
15
|
+
return { pattern: new RegExp(`^${source.replace(/\/$/, '')}/?$`), keys };
|
|
16
|
+
};
|
|
17
|
+
export function routeOf(routes, pathname) {
|
|
18
|
+
let best = null;
|
|
19
|
+
let fewest = Infinity;
|
|
20
|
+
for (const [id, path] of Object.entries(routes)) {
|
|
21
|
+
const { pattern, keys } = patternOf(path);
|
|
22
|
+
if (keys < fewest && pattern.test(pathname)) {
|
|
23
|
+
best = id;
|
|
24
|
+
fewest = keys;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return best;
|
|
28
|
+
}
|
|
29
|
+
export function islandsIn(root) {
|
|
30
|
+
const found = [];
|
|
31
|
+
const walker = (root.ownerDocument ?? root).createTreeWalker(root, 128);
|
|
32
|
+
let view = null;
|
|
33
|
+
while (walker.nextNode()) {
|
|
34
|
+
const c = walker.currentNode;
|
|
35
|
+
if (c.data === 'i')
|
|
36
|
+
found.push({ marker: c, view });
|
|
37
|
+
else if (c.data.startsWith('v:'))
|
|
38
|
+
view = c.data.slice(2);
|
|
39
|
+
else if (c.data === '/v')
|
|
40
|
+
view = null;
|
|
41
|
+
}
|
|
42
|
+
return found;
|
|
43
|
+
}
|
|
44
|
+
export function track(state, session, payload, found) {
|
|
45
|
+
session.islands(payload).forEach((island, i) => {
|
|
46
|
+
const view = found[i]?.view;
|
|
47
|
+
if (!view)
|
|
48
|
+
return;
|
|
49
|
+
const owners = state.views.get(view) ?? new Set();
|
|
50
|
+
owners.add(island.feature);
|
|
51
|
+
state.views.set(view, owners);
|
|
52
|
+
});
|
|
53
|
+
state.soft = payload.soft ?? {};
|
|
54
|
+
Object.assign(state.routes, payload.routes);
|
|
55
|
+
}
|
|
56
|
+
export function ranges(body) {
|
|
57
|
+
const out = new Map();
|
|
58
|
+
let current = null;
|
|
59
|
+
for (const n of [...body.childNodes]) {
|
|
60
|
+
if (n.nodeType === 8 && n.data.startsWith('v:')) {
|
|
61
|
+
current = [n];
|
|
62
|
+
out.set(n.data.slice(2), current);
|
|
63
|
+
}
|
|
64
|
+
else if (current) {
|
|
65
|
+
current.push(n);
|
|
66
|
+
if (n.nodeType === 8 && n.data === '/v')
|
|
67
|
+
current = null;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return out;
|
|
71
|
+
}
|
|
72
|
+
export async function swap(session, state, next, kept) {
|
|
73
|
+
const { doc, apps } = session;
|
|
74
|
+
const { views } = state;
|
|
75
|
+
const script = next.getElementById('hozu-payload');
|
|
76
|
+
const fresh = ranges(next.body);
|
|
77
|
+
const live = ranges(doc.body);
|
|
78
|
+
if (!script?.textContent || kept.some((v) => !fresh.has(v) || !live.has(v)))
|
|
79
|
+
return false;
|
|
80
|
+
const payload = JSON.parse(script.textContent);
|
|
81
|
+
const keep = new Set(kept);
|
|
82
|
+
const found = islandsIn(next.body);
|
|
83
|
+
const needed = new Set();
|
|
84
|
+
for (const v of keep)
|
|
85
|
+
for (const f of views.get(v) ?? [])
|
|
86
|
+
needed.add(f);
|
|
87
|
+
session.islands(payload).forEach((island, i) => {
|
|
88
|
+
const view = found[i]?.view;
|
|
89
|
+
if (view === undefined || view === null || !keep.has(view))
|
|
90
|
+
needed.add(island.feature);
|
|
91
|
+
});
|
|
92
|
+
for (const [id, app] of apps)
|
|
93
|
+
if (!needed.has(id)) {
|
|
94
|
+
app.destroy();
|
|
95
|
+
apps.delete(id);
|
|
96
|
+
}
|
|
97
|
+
for (const v of [...views.keys()])
|
|
98
|
+
if (!keep.has(v))
|
|
99
|
+
views.delete(v);
|
|
100
|
+
const anchor = doc.getElementById('hozu-payload');
|
|
101
|
+
let cursor = 0;
|
|
102
|
+
const order = [...live.keys()].filter((v) => keep.has(v));
|
|
103
|
+
for (const [ref, nodes] of fresh) {
|
|
104
|
+
if (keep.has(ref)) {
|
|
105
|
+
cursor++;
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
const before = order[cursor] ? live.get(order[cursor])[0] : anchor;
|
|
109
|
+
for (const n of nodes)
|
|
110
|
+
doc.body.insertBefore(n, before);
|
|
111
|
+
}
|
|
112
|
+
for (const [ref, nodes] of live)
|
|
113
|
+
if (!keep.has(ref))
|
|
114
|
+
for (const n of nodes)
|
|
115
|
+
n.remove();
|
|
116
|
+
if (anchor)
|
|
117
|
+
anchor.textContent = script.textContent;
|
|
118
|
+
for (const el of doc.head.querySelectorAll(HEAD))
|
|
119
|
+
el.remove();
|
|
120
|
+
for (const el of next.head.querySelectorAll(HEAD))
|
|
121
|
+
doc.head.append(el);
|
|
122
|
+
doc.documentElement.lang = next.documentElement.lang;
|
|
123
|
+
await session.mount(payload, found.map((f) => (f.view !== null && keep.has(f.view) ? undefined : f.marker)));
|
|
124
|
+
track(state, session, payload, found);
|
|
125
|
+
return true;
|
|
126
|
+
}
|
|
127
|
+
export function soft(session) {
|
|
128
|
+
const { doc } = session;
|
|
129
|
+
const win = doc.defaultView;
|
|
130
|
+
const script = doc.getElementById('hozu-payload');
|
|
131
|
+
if (!win?.navigation || !script?.textContent)
|
|
132
|
+
return;
|
|
133
|
+
const state = { views: new Map(), soft: {}, routes: {} };
|
|
134
|
+
track(state, session, JSON.parse(script.textContent), islandsIn(doc.body));
|
|
135
|
+
let announcer = null;
|
|
136
|
+
let bypass = false;
|
|
137
|
+
const announce = (title) => {
|
|
138
|
+
if (!announcer) {
|
|
139
|
+
announcer = doc.createElement('div');
|
|
140
|
+
announcer.setAttribute('aria-live', 'polite');
|
|
141
|
+
announcer.style.cssText =
|
|
142
|
+
'position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap';
|
|
143
|
+
doc.body.append(announcer);
|
|
144
|
+
}
|
|
145
|
+
announcer.textContent = title;
|
|
146
|
+
};
|
|
147
|
+
win.navigation.addEventListener('navigate', (event) => {
|
|
148
|
+
const e = event;
|
|
149
|
+
if (bypass || !e.canIntercept || e.hashChange || e.downloadRequest !== null || e.formData)
|
|
150
|
+
return;
|
|
151
|
+
if (e.navigationType === 'reload')
|
|
152
|
+
return;
|
|
153
|
+
const url = new URL(e.destination.url);
|
|
154
|
+
if (url.origin !== win.location.origin)
|
|
155
|
+
return;
|
|
156
|
+
const target = routeOf(state.routes, url.pathname);
|
|
157
|
+
const kept = target ? state.soft[target] : undefined;
|
|
158
|
+
if (!kept)
|
|
159
|
+
return;
|
|
160
|
+
const hard = () => {
|
|
161
|
+
bypass = true;
|
|
162
|
+
win.location.replace(url.href);
|
|
163
|
+
};
|
|
164
|
+
e.intercept({
|
|
165
|
+
handler: async () => {
|
|
166
|
+
const root = doc.documentElement;
|
|
167
|
+
root.setAttribute('data-hozu-navigating', '');
|
|
168
|
+
try {
|
|
169
|
+
const response = await win.fetch(url.href, { headers: { accept: 'text/html' } });
|
|
170
|
+
const type = response.headers.get('content-type') ?? '';
|
|
171
|
+
if (response.status !== 200 || response.redirected || !type.includes('text/html'))
|
|
172
|
+
return hard();
|
|
173
|
+
const next = new win.DOMParser().parseFromString(await response.text(), 'text/html');
|
|
174
|
+
let ok = true;
|
|
175
|
+
const run = async () => {
|
|
176
|
+
ok = await swap(session, state, next, kept);
|
|
177
|
+
};
|
|
178
|
+
const transition = doc.startViewTransition;
|
|
179
|
+
if (transition)
|
|
180
|
+
await transition.call(doc, run).updateCallbackDone;
|
|
181
|
+
else
|
|
182
|
+
await run();
|
|
183
|
+
if (!ok)
|
|
184
|
+
return hard();
|
|
185
|
+
announce(doc.title);
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
hard();
|
|
189
|
+
}
|
|
190
|
+
finally {
|
|
191
|
+
root.removeAttribute('data-hozu-navigating');
|
|
192
|
+
}
|
|
193
|
+
},
|
|
194
|
+
});
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=navigate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigate.js","sourceRoot":"","sources":["../src/navigate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uploads.d.ts","sourceRoot":"","sources":["../src/uploads.ts"],"names":[],"mappings":"AAQA,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,MAAM,GAAG,QAAQ,CAOlG"}
|
package/dist/uploads.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
const tokensIn = (value, uploads, out = []) => {
|
|
2
|
+
if (typeof value === 'string') {
|
|
3
|
+
if (uploads.has(value))
|
|
4
|
+
out.push(value);
|
|
5
|
+
}
|
|
6
|
+
else if (value && typeof value === 'object')
|
|
7
|
+
for (const v of Object.values(value))
|
|
8
|
+
tokensIn(v, uploads, out);
|
|
9
|
+
return out;
|
|
10
|
+
};
|
|
11
|
+
export function encode(json, input, uploads) {
|
|
12
|
+
const tokens = tokensIn(input, uploads);
|
|
13
|
+
if (!tokens.length)
|
|
14
|
+
return json;
|
|
15
|
+
const form = new FormData();
|
|
16
|
+
form.append('request', json);
|
|
17
|
+
for (const token of tokens)
|
|
18
|
+
form.append(token, uploads.get(token));
|
|
19
|
+
return form;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=uploads.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uploads.js","sourceRoot":"","sources":["../src/uploads.ts"],"names":[],"mappings":"AAAA,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAE,OAA0B,EAAE,GAAG,GAAa,EAAE,EAAY,EAAE;IAC5F,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACzC,CAAC;SAAM,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAC3C,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;YAAE,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,CAAA;IACjE,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAED,MAAM,UAAU,MAAM,CAAC,IAAY,EAAE,KAAc,EAAE,OAA0B;IAC7E,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IACvC,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,OAAO,IAAI,CAAA;IAC/B,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAA;IAC3B,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;IAC5B,KAAK,MAAM,KAAK,IAAI,MAAM;QAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,CAAA;IACnE,OAAO,IAAI,CAAA;AACb,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visible.d.ts","sourceRoot":"","sources":["../src/visible.ts"],"names":[],"mappings":"AAEA,wBAAgB,KAAK,CAAC,GAAG,EAAE,QAAQ,QAelC"}
|
package/dist/visible.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
const watched = new WeakSet();
|
|
2
|
+
export function watch(doc) {
|
|
3
|
+
const win = doc.defaultView;
|
|
4
|
+
if (!win?.IntersectionObserver || watched.has(doc))
|
|
5
|
+
return;
|
|
6
|
+
watched.add(doc);
|
|
7
|
+
const seen = new IntersectionObserver((entries) => {
|
|
8
|
+
for (const e of entries)
|
|
9
|
+
if (e.isIntersecting)
|
|
10
|
+
e.target.dispatchEvent(new win.Event('visible'));
|
|
11
|
+
});
|
|
12
|
+
const scan = (root) => {
|
|
13
|
+
if (root instanceof win.Element && root.hasAttribute('data-hozu-visible'))
|
|
14
|
+
seen.observe(root);
|
|
15
|
+
for (const el of root.querySelectorAll('[data-hozu-visible]'))
|
|
16
|
+
seen.observe(el);
|
|
17
|
+
};
|
|
18
|
+
scan(doc);
|
|
19
|
+
new win.MutationObserver((records) => {
|
|
20
|
+
for (const r of records)
|
|
21
|
+
for (const n of r.addedNodes)
|
|
22
|
+
if (n.nodeType === 1)
|
|
23
|
+
scan(n);
|
|
24
|
+
}).observe(doc.body, { childList: true, subtree: true });
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=visible.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visible.js","sourceRoot":"","sources":["../src/visible.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG,IAAI,OAAO,EAAY,CAAA;AAEvC,MAAM,UAAU,KAAK,CAAC,GAAa;IACjC,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,CAAA;IAC3B,IAAI,CAAC,GAAG,EAAE,oBAAoB,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAM;IAC1D,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAChB,MAAM,IAAI,GAAG,IAAI,oBAAoB,CAAC,CAAC,OAAO,EAAE,EAAE;QAChD,KAAK,MAAM,CAAC,IAAI,OAAO;YAAE,IAAI,CAAC,CAAC,cAAc;gBAAE,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAA;IACjG,CAAC,CAAC,CAAA;IACF,MAAM,IAAI,GAAG,CAAC,IAAwB,EAAE,EAAE;QACxC,IAAI,IAAI,YAAY,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC;YAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAC7F,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CAAC;YAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IACjF,CAAC,CAAA;IACD,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC,OAAO,EAAE,EAAE;QACnC,KAAK,MAAM,CAAC,IAAI,OAAO;YAAE,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU;gBAAE,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC;oBAAE,IAAI,CAAC,CAAY,CAAC,CAAA;IACjG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;AAC1D,CAAC"}
|
package/dist/widget.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Json } from '@hozu/core/ir';
|
|
2
|
+
import type { WidgetRef, WidgetSetup } from './mount.ts';
|
|
3
|
+
export interface WidgetHost {
|
|
4
|
+
el: HTMLElement;
|
|
5
|
+
ref: WidgetRef;
|
|
6
|
+
name: string;
|
|
7
|
+
doc: Document;
|
|
8
|
+
props(): Json;
|
|
9
|
+
emit(name: string, detail: unknown): void;
|
|
10
|
+
load(url: string): Promise<WidgetSetup>;
|
|
11
|
+
watch(update: () => void): void;
|
|
12
|
+
own(stop: () => void): void;
|
|
13
|
+
same(a: Json, b: Json): boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare function mountWidget(h: WidgetHost): void;
|
|
16
|
+
//# sourceMappingURL=widget.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"widget.d.ts","sourceRoot":"","sources":["../src/widget.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAExD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,WAAW,CAAA;IACf,GAAG,EAAE,SAAS,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,QAAQ,CAAA;IACb,KAAK,IAAI,IAAI,CAAA;IACb,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAAA;IACzC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;IACvC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,GAAG,IAAI,CAAA;IAC/B,GAAG,CAAC,IAAI,EAAE,MAAM,IAAI,GAAG,IAAI,CAAA;IAC3B,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,OAAO,CAAA;CAChC;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,UAAU,QA4CxC"}
|
package/dist/widget.js
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export function mountWidget(h) {
|
|
2
|
+
const controller = new AbortController();
|
|
3
|
+
let props = h.props();
|
|
4
|
+
let instance;
|
|
5
|
+
const fail = (error) => {
|
|
6
|
+
instance = undefined;
|
|
7
|
+
h.doc.defaultView?.console.error(`Widget ${h.name} failed`, error);
|
|
8
|
+
};
|
|
9
|
+
const start = () => void h.load(h.ref.url).then((setup) => {
|
|
10
|
+
if (controller.signal.aborted)
|
|
11
|
+
return;
|
|
12
|
+
try {
|
|
13
|
+
instance = setup({ el: h.el, props, emit: h.emit, signal: controller.signal }) ?? undefined;
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
fail(error);
|
|
17
|
+
}
|
|
18
|
+
}, fail);
|
|
19
|
+
const win = h.doc.defaultView;
|
|
20
|
+
if (h.ref.load === 'eager' || !win)
|
|
21
|
+
start();
|
|
22
|
+
else if (h.ref.load === 'idle')
|
|
23
|
+
(win.requestIdleCallback ?? win.setTimeout)(start);
|
|
24
|
+
else if (!win.IntersectionObserver)
|
|
25
|
+
start();
|
|
26
|
+
else {
|
|
27
|
+
const io = new win.IntersectionObserver((entries) => {
|
|
28
|
+
if (!entries.some((e) => e.isIntersecting))
|
|
29
|
+
return;
|
|
30
|
+
io.disconnect();
|
|
31
|
+
start();
|
|
32
|
+
});
|
|
33
|
+
io.observe(h.el);
|
|
34
|
+
controller.signal.addEventListener('abort', () => io.disconnect());
|
|
35
|
+
}
|
|
36
|
+
h.watch(() => {
|
|
37
|
+
const next = h.props();
|
|
38
|
+
if (h.same(next, props))
|
|
39
|
+
return;
|
|
40
|
+
props = next;
|
|
41
|
+
try {
|
|
42
|
+
instance?.update?.(next);
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
fail(error);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
h.own(() => {
|
|
49
|
+
controller.abort();
|
|
50
|
+
instance?.destroy?.();
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=widget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"widget.js","sourceRoot":"","sources":["../src/widget.ts"],"names":[],"mappings":"AAgBA,MAAM,UAAU,WAAW,CAAC,CAAa;IACvC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;IACxC,IAAI,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,CAAA;IACrB,IAAI,QAAiC,CAAA;IACrC,MAAM,IAAI,GAAG,CAAC,KAAc,EAAE,EAAE;QAC9B,QAAQ,GAAG,SAAS,CAAA;QACpB,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,SAAS,EAAE,KAAK,CAAC,CAAA;IACpE,CAAC,CAAA;IACD,MAAM,KAAK,GAAG,GAAG,EAAE,CACjB,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;QACpC,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;YAAE,OAAM;QACrC,IAAI,CAAC;YACH,QAAQ,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,CAAA;QAC7F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,CAAA;QACb,CAAC;IACH,CAAC,EAAE,IAAI,CAAC,CAAA;IACV,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,WAAkD,CAAA;IACpE,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,GAAG;QAAE,KAAK,EAAE,CAAA;SACtC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM;QAAE,CAAC,GAAG,CAAC,mBAAmB,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAA;SAC7E,IAAI,CAAC,GAAG,CAAC,oBAAoB;QAAE,KAAK,EAAE,CAAA;SACtC,CAAC;QACJ,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,oBAAoB,CAAC,CAAC,OAAO,EAAE,EAAE;YAClD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC;gBAAE,OAAM;YAClD,EAAE,CAAC,UAAU,EAAE,CAAA;YACf,KAAK,EAAE,CAAA;QACT,CAAC,CAAC,CAAA;QACF,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;QAChB,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,CAAA;IACpE,CAAC;IACD,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;QACX,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,CAAA;QACtB,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;YAAE,OAAM;QAC/B,KAAK,GAAG,IAAI,CAAA;QACZ,IAAI,CAAC;YACH,QAAQ,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,CAAA;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,CAAA;QACb,CAAC;IACH,CAAC,CAAC,CAAA;IACF,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;QACT,UAAU,CAAC,KAAK,EAAE,CAAA;QAClB,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAA;IACvB,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
package/files.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const files: Record<string, string>
|
package/package.json
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@hozu/runtime-client",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Hozu client runtime: fine-grained DOM islands, no virtual DOM, about 7.5 KB gzipped",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"hozu",
|
|
7
|
+
"framework",
|
|
8
|
+
"ai",
|
|
9
|
+
"agents",
|
|
10
|
+
"ssr",
|
|
11
|
+
"islands",
|
|
12
|
+
"typescript"
|
|
13
|
+
],
|
|
14
|
+
"homepage": "https://github.com/olevatorr/Hozu/tree/main/packages/runtime-client#readme",
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/olevatorr/Hozu/issues"
|
|
17
|
+
},
|
|
18
|
+
"repository": {
|
|
19
|
+
"type": "git",
|
|
20
|
+
"url": "git+https://github.com/olevatorr/Hozu.git",
|
|
21
|
+
"directory": "packages/runtime-client"
|
|
22
|
+
},
|
|
23
|
+
"license": "MIT",
|
|
24
|
+
"author": "olevatorr",
|
|
25
|
+
"type": "module",
|
|
26
|
+
"exports": {
|
|
27
|
+
".": {
|
|
28
|
+
"types": "./dist/index.d.ts",
|
|
29
|
+
"default": "./dist/index.js"
|
|
30
|
+
},
|
|
31
|
+
"./browser/*": "./dist/browser/*",
|
|
32
|
+
"./files": {
|
|
33
|
+
"types": "./files.d.ts",
|
|
34
|
+
"default": "./dist/files.js"
|
|
35
|
+
},
|
|
36
|
+
"./browser-dev/*": "./dist/browser-dev/*"
|
|
37
|
+
},
|
|
38
|
+
"files": [
|
|
39
|
+
"dist",
|
|
40
|
+
"files.d.ts"
|
|
41
|
+
],
|
|
42
|
+
"engines": {
|
|
43
|
+
"node": ">=22.18"
|
|
44
|
+
},
|
|
45
|
+
"publishConfig": {
|
|
46
|
+
"access": "public"
|
|
47
|
+
},
|
|
48
|
+
"dependencies": {
|
|
49
|
+
"@hozu/core": "0.1.0",
|
|
50
|
+
"@hozu/machine": "0.1.0"
|
|
51
|
+
},
|
|
52
|
+
"sideEffects": false
|
|
53
|
+
}
|