@ketvietlab/ketjs-view 0.1.1
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 +18 -0
- package/dist/host.d.ts +45 -0
- package/dist/host.d.ts.map +1 -0
- package/dist/host.js +177 -0
- package/dist/host.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/island.d.ts +74 -0
- package/dist/island.d.ts.map +1 -0
- package/dist/island.js +278 -0
- package/dist/island.js.map +1 -0
- package/dist/jsx-dev-runtime.d.ts +3 -0
- package/dist/jsx-dev-runtime.d.ts.map +1 -0
- package/dist/jsx-dev-runtime.js +2 -0
- package/dist/jsx-dev-runtime.js.map +1 -0
- package/dist/jsx-runtime.d.ts +46 -0
- package/dist/jsx-runtime.d.ts.map +1 -0
- package/dist/jsx-runtime.js +117 -0
- package/dist/jsx-runtime.js.map +1 -0
- package/dist/mount.d.ts +13 -0
- package/dist/mount.d.ts.map +1 -0
- package/dist/mount.js +44 -0
- package/dist/mount.js.map +1 -0
- package/dist/render.d.ts +39 -0
- package/dist/render.d.ts.map +1 -0
- package/dist/render.js +536 -0
- package/dist/render.js.map +1 -0
- package/dist/signal.d.ts +18 -0
- package/dist/signal.d.ts.map +1 -0
- package/dist/signal.js +132 -0
- package/dist/signal.js.map +1 -0
- package/dist/ssr.d.ts +30 -0
- package/dist/ssr.d.ts.map +1 -0
- package/dist/ssr.js +145 -0
- package/dist/ssr.js.map +1 -0
- package/dist/template.d.ts +27 -0
- package/dist/template.d.ts.map +1 -0
- package/dist/template.js +129 -0
- package/dist/template.js.map +1 -0
- package/package.json +54 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Ketviet
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# KetJS View
|
|
2
|
+
|
|
3
|
+
The browser-safe view layer used by KetJS: signals, surgical DOM updates, SSR, hydration, JSX
|
|
4
|
+
runtime support, and persistent islands. It has no runtime dependencies.
|
|
5
|
+
|
|
6
|
+
> KetJS View 0.x is preview software. APIs may change before 1.0.
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
npm install @ketvietlab/ketjs-view
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
```ts
|
|
13
|
+
import { html, signal, createIslandManager } from '@ketvietlab/ketjs-view'
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
JSX projects can use `@ketvietlab/ketjs-view/jsx-runtime` through TypeScript's automatic JSX runtime.
|
|
17
|
+
|
|
18
|
+
Documentation and source: [github.com/ketvietlab/ketjs](https://github.com/ketvietlab/ketjs)
|
package/dist/host.d.ts
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export type HostNode = {
|
|
2
|
+
id: number;
|
|
3
|
+
tag?: string;
|
|
4
|
+
attrs?: Record<string, string>;
|
|
5
|
+
children?: HostNode[];
|
|
6
|
+
text?: string;
|
|
7
|
+
/** Trusted markup in the counting host; real DOM hosts materialise actual nodes. */
|
|
8
|
+
rawHtml?: string;
|
|
9
|
+
parent: HostNode | null;
|
|
10
|
+
};
|
|
11
|
+
export type Host = {
|
|
12
|
+
ops: Record<string, number> | null;
|
|
13
|
+
createElement(tag: string): HostNode;
|
|
14
|
+
createText(value: unknown): HostNode;
|
|
15
|
+
setText(node: HostNode, value: unknown): void;
|
|
16
|
+
setAttribute(node: HostNode, name: string, value: unknown): void;
|
|
17
|
+
insert(parent: HostNode, node: HostNode, before?: HostNode | null): void;
|
|
18
|
+
/** Parse compiler-trusted markup and insert every resulting node. */
|
|
19
|
+
insertMarkup(parent: HostNode, html: string, before?: HostNode | null): HostNode[];
|
|
20
|
+
move(parent: HostNode, node: HostNode, before?: HostNode | null): void;
|
|
21
|
+
remove(node: HostNode): void;
|
|
22
|
+
/** Attach a listener; returns the detach function. */
|
|
23
|
+
listen(node: HostNode, event: string, handler: (e: unknown) => void): () => void;
|
|
24
|
+
};
|
|
25
|
+
export declare const escapeHtml: (s: unknown) => string;
|
|
26
|
+
export type CountingHost = Host & {
|
|
27
|
+
ops: Record<string, number>;
|
|
28
|
+
fire(node: HostNode, event: string, payload?: unknown): void;
|
|
29
|
+
reset(): void;
|
|
30
|
+
text(node: HostNode): string;
|
|
31
|
+
html(node: HostNode): string;
|
|
32
|
+
root(): HostNode;
|
|
33
|
+
};
|
|
34
|
+
export declare function countingHost(): CountingHost;
|
|
35
|
+
type DomLike = {
|
|
36
|
+
createElement(tag: string): unknown;
|
|
37
|
+
createTextNode(data: string): unknown;
|
|
38
|
+
/** Test hosts may supply their small parser instead of implementing <template>. */
|
|
39
|
+
parseHTML?(html: string): {
|
|
40
|
+
childNodes: Iterable<unknown>;
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
export declare function domHost(doc?: DomLike): Host;
|
|
44
|
+
export {};
|
|
45
|
+
//# sourceMappingURL=host.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../../../packages/ketjs-view/src/host.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,QAAQ,GAAG;IACrB,EAAE,EAAE,MAAM,CAAA;IACV,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAA;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,oFAAoF;IACpF,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,QAAQ,GAAG,IAAI,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,IAAI,GAAG;IACjB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAA;IAClC,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAAA;IACpC,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,CAAA;IACpC,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAA;IAC7C,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAA;IAChE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAA;IACxE,qEAAqE;IACrE,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,IAAI,GAAG,QAAQ,EAAE,CAAA;IAClF,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAA;IACtE,MAAM,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAA;IAC5B,sDAAsD;IACtD,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI,CAAA;CACjF,CAAA;AAYD,eAAO,MAAM,UAAU,MAAO,OAAO,KAAG,MAKvC,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG;IAChC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC3B,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;IAC5D,KAAK,IAAI,IAAI,CAAA;IACb,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAA;IAC5B,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAA;IAC5B,IAAI,IAAI,QAAQ,CAAA;CACjB,CAAA;AAED,wBAAgB,YAAY,IAAI,YAAY,CAuG3C;AAID,KAAK,OAAO,GAAG;IACb,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;IACnC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;IACrC,mFAAmF;IACnF,SAAS,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;KAAE,CAAA;CAC5D,CAAA;AAED,wBAAgB,OAAO,CAAC,GAAG,GAAE,OAAoE,GAAG,IAAI,CAuDvG"}
|
package/dist/host.js
ADDED
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
// Rendering targets an abstract host, so one renderer drives a real DOM in the
|
|
2
|
+
// browser, a string builder on the server, and a counting mock in tests.
|
|
3
|
+
// The counting mock is how "surgical update" stops being a claim and becomes a number.
|
|
4
|
+
const ESCAPES = {
|
|
5
|
+
'&': '&',
|
|
6
|
+
'<': '<',
|
|
7
|
+
'>': '>',
|
|
8
|
+
'"': '"',
|
|
9
|
+
"'": ''',
|
|
10
|
+
};
|
|
11
|
+
const NEEDS_ESCAPE = /[&<>"']/;
|
|
12
|
+
const ESCAPE_ALL = /[&<>"']/g;
|
|
13
|
+
export const escapeHtml = (s) => {
|
|
14
|
+
const str = String(s);
|
|
15
|
+
// Most interpolated values contain nothing to escape, and testing is far cheaper
|
|
16
|
+
// than replacing. The lookup table is hoisted; it used to be rebuilt per character.
|
|
17
|
+
return NEEDS_ESCAPE.test(str) ? str.replace(ESCAPE_ALL, (c) => ESCAPES[c]) : str;
|
|
18
|
+
};
|
|
19
|
+
export function countingHost() {
|
|
20
|
+
let id = 0;
|
|
21
|
+
const ops = {
|
|
22
|
+
createElement: 0,
|
|
23
|
+
createText: 0,
|
|
24
|
+
setText: 0,
|
|
25
|
+
setAttribute: 0,
|
|
26
|
+
insert: 0,
|
|
27
|
+
remove: 0,
|
|
28
|
+
move: 0,
|
|
29
|
+
listen: 0,
|
|
30
|
+
};
|
|
31
|
+
const listeners = new Map();
|
|
32
|
+
const detach = (node) => {
|
|
33
|
+
if (!node.parent)
|
|
34
|
+
return;
|
|
35
|
+
const sibs = node.parent.children;
|
|
36
|
+
const i = sibs.indexOf(node);
|
|
37
|
+
if (i >= 0)
|
|
38
|
+
sibs.splice(i, 1);
|
|
39
|
+
node.parent = null;
|
|
40
|
+
};
|
|
41
|
+
const place = (parent, node, before) => {
|
|
42
|
+
detach(node);
|
|
43
|
+
const sibs = (parent.children ??= []);
|
|
44
|
+
const idx = before ? sibs.indexOf(before) : -1;
|
|
45
|
+
if (idx >= 0)
|
|
46
|
+
sibs.splice(idx, 0, node);
|
|
47
|
+
else
|
|
48
|
+
sibs.push(node);
|
|
49
|
+
node.parent = parent;
|
|
50
|
+
};
|
|
51
|
+
const host = {
|
|
52
|
+
ops,
|
|
53
|
+
reset() {
|
|
54
|
+
for (const k of Object.keys(ops))
|
|
55
|
+
ops[k] = 0;
|
|
56
|
+
},
|
|
57
|
+
root() {
|
|
58
|
+
return { id: -1, tag: '#root', attrs: {}, children: [], parent: null };
|
|
59
|
+
},
|
|
60
|
+
createElement(tag) {
|
|
61
|
+
ops.createElement++;
|
|
62
|
+
return { id: id++, tag, attrs: {}, children: [], parent: null };
|
|
63
|
+
},
|
|
64
|
+
createText(value) {
|
|
65
|
+
ops.createText++;
|
|
66
|
+
return { id: id++, text: String(value), parent: null };
|
|
67
|
+
},
|
|
68
|
+
setText(node, value) {
|
|
69
|
+
ops.setText++;
|
|
70
|
+
node.text = String(value);
|
|
71
|
+
},
|
|
72
|
+
setAttribute(node, name, value) {
|
|
73
|
+
ops.setAttribute++;
|
|
74
|
+
const attrs = (node.attrs ??= {});
|
|
75
|
+
if (value == null || value === false)
|
|
76
|
+
delete attrs[name];
|
|
77
|
+
else
|
|
78
|
+
attrs[name] = String(value);
|
|
79
|
+
},
|
|
80
|
+
listen(node, event, handler) {
|
|
81
|
+
ops.listen++;
|
|
82
|
+
const byEvent = listeners.get(node) ?? new Map();
|
|
83
|
+
listeners.set(node, byEvent);
|
|
84
|
+
const set = byEvent.get(event) ?? new Set();
|
|
85
|
+
byEvent.set(event, set);
|
|
86
|
+
set.add(handler);
|
|
87
|
+
return () => {
|
|
88
|
+
set.delete(handler);
|
|
89
|
+
};
|
|
90
|
+
},
|
|
91
|
+
fire(node, event, payload) {
|
|
92
|
+
for (const fn of listeners.get(node)?.get(event) ?? [])
|
|
93
|
+
fn(payload ?? { type: event });
|
|
94
|
+
},
|
|
95
|
+
insert(parent, node, before = null) {
|
|
96
|
+
ops.insert++;
|
|
97
|
+
place(parent, node, before);
|
|
98
|
+
},
|
|
99
|
+
insertMarkup(parent, html, before = null) {
|
|
100
|
+
const node = { id: id++, rawHtml: html, parent: null };
|
|
101
|
+
ops.createElement++;
|
|
102
|
+
ops.insert++;
|
|
103
|
+
place(parent, node, before);
|
|
104
|
+
return [node];
|
|
105
|
+
},
|
|
106
|
+
move(parent, node, before = null) {
|
|
107
|
+
ops.move++;
|
|
108
|
+
place(parent, node, before);
|
|
109
|
+
},
|
|
110
|
+
remove(node) {
|
|
111
|
+
ops.remove++;
|
|
112
|
+
detach(node);
|
|
113
|
+
},
|
|
114
|
+
text(node) {
|
|
115
|
+
if (node.rawHtml != null)
|
|
116
|
+
return '';
|
|
117
|
+
return node.text != null ? node.text : (node.children ?? []).map((c) => host.text(c)).join('');
|
|
118
|
+
},
|
|
119
|
+
html(node) {
|
|
120
|
+
if (node.rawHtml != null)
|
|
121
|
+
return node.rawHtml;
|
|
122
|
+
if (node.text != null)
|
|
123
|
+
return escapeHtml(node.text);
|
|
124
|
+
const attrs = Object.entries(node.attrs ?? {})
|
|
125
|
+
.map(([k, v]) => ` ${k}="${escapeHtml(v)}"`)
|
|
126
|
+
.join('');
|
|
127
|
+
return `<${node.tag}${attrs}>${(node.children ?? []).map((c) => host.html(c)).join('')}</${node.tag}>`;
|
|
128
|
+
},
|
|
129
|
+
};
|
|
130
|
+
return host;
|
|
131
|
+
}
|
|
132
|
+
export function domHost(doc = globalThis.document) {
|
|
133
|
+
const el = (n) => n;
|
|
134
|
+
return {
|
|
135
|
+
ops: null,
|
|
136
|
+
createElement: (tag) => doc.createElement(tag),
|
|
137
|
+
createText: (value) => doc.createTextNode(String(value)),
|
|
138
|
+
setText: (node, value) => {
|
|
139
|
+
el(node).data = String(value);
|
|
140
|
+
},
|
|
141
|
+
setAttribute: (node, name, value) => {
|
|
142
|
+
if (value == null || value === false)
|
|
143
|
+
el(node).removeAttribute(name);
|
|
144
|
+
else
|
|
145
|
+
el(node).setAttribute(name, String(value));
|
|
146
|
+
},
|
|
147
|
+
insert: (parent, node, before = null) => {
|
|
148
|
+
el(parent).insertBefore(node, before);
|
|
149
|
+
},
|
|
150
|
+
insertMarkup: (parent, html, before = null) => {
|
|
151
|
+
let fragment;
|
|
152
|
+
if (doc.parseHTML)
|
|
153
|
+
fragment = doc.parseHTML(html);
|
|
154
|
+
else {
|
|
155
|
+
const template = doc.createElement('template');
|
|
156
|
+
template.innerHTML = html;
|
|
157
|
+
fragment = template.content;
|
|
158
|
+
}
|
|
159
|
+
const nodes = [...fragment.childNodes];
|
|
160
|
+
for (const node of nodes)
|
|
161
|
+
el(parent).insertBefore(node, before);
|
|
162
|
+
return nodes;
|
|
163
|
+
},
|
|
164
|
+
move: (parent, node, before = null) => {
|
|
165
|
+
el(parent).insertBefore(node, before);
|
|
166
|
+
},
|
|
167
|
+
remove: (node) => {
|
|
168
|
+
el(node).remove();
|
|
169
|
+
},
|
|
170
|
+
listen: (node, event, handler) => {
|
|
171
|
+
const target = node;
|
|
172
|
+
target.addEventListener(event, handler);
|
|
173
|
+
return () => target.removeEventListener(event, handler);
|
|
174
|
+
},
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=host.js.map
|
package/dist/host.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host.js","sourceRoot":"","sources":["../../../../../packages/ketjs-view/src/host.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export { signal, computed, effect, batch } from './signal.ts';
|
|
2
|
+
export type { Signal, Computed } from './signal.ts';
|
|
3
|
+
export { html, each, when, createRoot, hydrateRoot } from './render.ts';
|
|
4
|
+
export type { TemplateResult, Renderable, Root } from './render.ts';
|
|
5
|
+
export { mount, mountHydrated } from './mount.ts';
|
|
6
|
+
export type { Mounted } from './mount.ts';
|
|
7
|
+
export { countingHost, domHost, escapeHtml } from './host.ts';
|
|
8
|
+
export type { Host, HostNode } from './host.ts';
|
|
9
|
+
export { renderToString, HydrationMismatch, HOLE_MARKER, trustedMarkup, isMarkup } from './ssr.ts';
|
|
10
|
+
export type { Markup } from './ssr.ts';
|
|
11
|
+
export { renderIsland, hydrateIslands, createIslandManager, ISLAND_TAG } from './island.ts';
|
|
12
|
+
export type { IslandView, IslandController, IslandFactory, IslandDefinition, IslandRegistry, IslandProps, HydratedIsland, IslandElement, IslandManager, } from './island.ts';
|
|
13
|
+
export type { JSXChild, JSXComponent, IntrinsicProps } from './jsx-runtime.ts';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/ketjs-view/src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAC7D,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACvE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AACnE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AACjD,YAAY,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAC7D,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAC/C,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAClG,YAAY,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACtC,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC3F,YAAY,EACV,UAAU,EACV,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,cAAc,EACd,aAAa,EACb,aAAa,GACd,MAAM,aAAa,CAAA;AACpB,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { signal, computed, effect, batch } from './signal.js';
|
|
2
|
+
export { html, each, when, createRoot, hydrateRoot } from './render.js';
|
|
3
|
+
export { mount, mountHydrated } from './mount.js';
|
|
4
|
+
export { countingHost, domHost, escapeHtml } from './host.js';
|
|
5
|
+
export { renderToString, HydrationMismatch, HOLE_MARKER, trustedMarkup, isMarkup } from './ssr.js';
|
|
6
|
+
export { renderIsland, hydrateIslands, createIslandManager, ISLAND_TAG } from './island.js';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/ketjs-view/src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAE7D,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEvE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAEjD,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAE7D,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAElG,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA"}
|
package/dist/island.d.ts
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import type { Host, HostNode } from './host.ts';
|
|
2
|
+
import type { TemplateResult } from './render.ts';
|
|
3
|
+
export declare const ISLAND_TAG = "ket-island";
|
|
4
|
+
export declare class IslandError extends Error {
|
|
5
|
+
code: string;
|
|
6
|
+
hint: string | null;
|
|
7
|
+
constructor(d: {
|
|
8
|
+
code: string;
|
|
9
|
+
message: string;
|
|
10
|
+
hint?: string;
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
export type IslandProps = Record<string, unknown>;
|
|
14
|
+
/** One mounted island instance. Signals and other local state live in this closure. */
|
|
15
|
+
export type IslandView = () => TemplateResult;
|
|
16
|
+
/** Optional lifecycle around a mounted island. A plain IslandView remains valid. */
|
|
17
|
+
export type IslandController = {
|
|
18
|
+
view: IslandView;
|
|
19
|
+
update?(props: Readonly<IslandProps>): void;
|
|
20
|
+
dispose?(): void;
|
|
21
|
+
};
|
|
22
|
+
/** Create one isolated instance from serializable server props. */
|
|
23
|
+
export type IslandFactory = (props: IslandProps) => IslandView | IslandController;
|
|
24
|
+
export type IslandDefinition = {
|
|
25
|
+
view: IslandFactory;
|
|
26
|
+
/** The only surrounding scope keys that may cross into the island. */
|
|
27
|
+
props?: Record<string, string>;
|
|
28
|
+
/** Props that identify one persistent instance. Empty means one global instance. */
|
|
29
|
+
key?: readonly string[];
|
|
30
|
+
/** Browser module, relative to the declaring module's assets directory. */
|
|
31
|
+
client?: string;
|
|
32
|
+
/** Named browser export; defaults to `default`. */
|
|
33
|
+
export?: string;
|
|
34
|
+
};
|
|
35
|
+
export type IslandRegistry = Record<string, IslandFactory>;
|
|
36
|
+
/**
|
|
37
|
+
* Render an island to markup, carrying its props alongside so the client can
|
|
38
|
+
* revive it with exactly the same input the server used. A different input would
|
|
39
|
+
* mean a different tree, and hydration would rightly refuse it.
|
|
40
|
+
*/
|
|
41
|
+
export declare function renderIsland(name: string, factory: IslandFactory, props: IslandProps, options?: {
|
|
42
|
+
key?: readonly string[];
|
|
43
|
+
}): string;
|
|
44
|
+
export type IslandElement = HostNode & {
|
|
45
|
+
getAttribute(name: string): string | null;
|
|
46
|
+
setAttribute?(name: string, value: string): void;
|
|
47
|
+
querySelectorAll(sel: string): Iterable<IslandElement>;
|
|
48
|
+
childNodes?: Iterable<IslandElement>;
|
|
49
|
+
parentNode?: IslandElement | null;
|
|
50
|
+
};
|
|
51
|
+
export type HydratedIsland = {
|
|
52
|
+
name: string;
|
|
53
|
+
key: string;
|
|
54
|
+
props: Readonly<IslandProps>;
|
|
55
|
+
element: IslandElement;
|
|
56
|
+
dispose(): void;
|
|
57
|
+
};
|
|
58
|
+
export type IslandManager = {
|
|
59
|
+
hydrate(root: IslandElement): HydratedIsland[];
|
|
60
|
+
reconcile(slot: IslandElement, nextContent: IslandElement): HydratedIsland[];
|
|
61
|
+
dispose(root: IslandElement): void;
|
|
62
|
+
};
|
|
63
|
+
export declare function createIslandManager(host: Host, registry: IslandRegistry, options?: {
|
|
64
|
+
strict?: boolean;
|
|
65
|
+
}): IslandManager;
|
|
66
|
+
/**
|
|
67
|
+
* Find every island in a server-rendered page and bring it to life. Only the
|
|
68
|
+
* islands are hydrated — the rest of the page stays inert markup, which is the
|
|
69
|
+
* whole point of rendering a theme to a string in the first place.
|
|
70
|
+
*/
|
|
71
|
+
export declare function hydrateIslands(host: Host, root: IslandElement, registry: IslandRegistry, options?: {
|
|
72
|
+
strict?: boolean;
|
|
73
|
+
}): HydratedIsland[];
|
|
74
|
+
//# sourceMappingURL=island.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"island.d.ts","sourceRoot":"","sources":["../../../../packages/ketjs-view/src/island.ts"],"names":[],"mappings":"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"}
|