blokd 0.1.0-beta.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/README.md +28 -0
- package/dist/LICENSE +21 -0
- package/dist/client.d.ts +9 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +48 -0
- package/dist/client.js.map +1 -0
- package/dist/core.d.ts +25 -0
- package/dist/core.d.ts.map +1 -0
- package/dist/core.js +206 -0
- package/dist/core.js.map +1 -0
- package/dist/dom.d.ts +16 -0
- package/dist/dom.d.ts.map +1 -0
- package/dist/dom.js +140 -0
- package/dist/dom.js.map +1 -0
- package/dist/hono.d.ts +49 -0
- package/dist/hono.d.ts.map +1 -0
- package/dist/hono.js +310 -0
- package/dist/hono.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/jsx-runtime.d.ts +45 -0
- package/dist/jsx-runtime.d.ts.map +1 -0
- package/dist/jsx-runtime.js +264 -0
- package/dist/jsx-runtime.js.map +1 -0
- package/dist/resume.d.ts +46 -0
- package/dist/resume.d.ts.map +1 -0
- package/dist/resume.js +231 -0
- package/dist/resume.js.map +1 -0
- package/dist/server.d.ts +39 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +232 -0
- package/dist/server.js.map +1 -0
- package/dist/vite.d.ts +20 -0
- package/dist/vite.d.ts.map +1 -0
- package/dist/vite.js +421 -0
- package/dist/vite.js.map +1 -0
- package/package.json +92 -0
- package/src/client.ts +50 -0
- package/src/core.ts +234 -0
- package/src/dom.ts +142 -0
- package/src/hono.ts +368 -0
- package/src/index.ts +7 -0
- package/src/jsx-runtime.ts +306 -0
- package/src/resume.ts +274 -0
- package/src/server.ts +241 -0
- package/src/vite.ts +413 -0
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
import { cleanup, effect, getOwner, root } from './core.js';
|
|
2
|
+
import { eventAttributeName, isResumableHandler } from './resume.js';
|
|
3
|
+
export const Fragment = Symbol.for('blokd.fragment');
|
|
4
|
+
export function lazy(fn) {
|
|
5
|
+
return { __blokdLazy: true, fn };
|
|
6
|
+
}
|
|
7
|
+
export function isLazy(value) {
|
|
8
|
+
return !!value && typeof value === 'object' && value.__blokdLazy === true;
|
|
9
|
+
}
|
|
10
|
+
function isBrowser() {
|
|
11
|
+
return typeof document !== 'undefined' && typeof Node !== 'undefined';
|
|
12
|
+
}
|
|
13
|
+
function isEventName(name) {
|
|
14
|
+
return /^on[A-Z]/.test(name) || /^on[a-z]/.test(name);
|
|
15
|
+
}
|
|
16
|
+
function normalizeEventName(name) {
|
|
17
|
+
return name.slice(2).toLowerCase();
|
|
18
|
+
}
|
|
19
|
+
function isRenderableObject(value) {
|
|
20
|
+
return !!value && typeof value === 'object' && 'kind' in value;
|
|
21
|
+
}
|
|
22
|
+
function normalizeChildren(children) {
|
|
23
|
+
if (children === undefined || children === null || children === false || children === true)
|
|
24
|
+
return [];
|
|
25
|
+
if (Array.isArray(children))
|
|
26
|
+
return children.flatMap(normalizeChildren);
|
|
27
|
+
return [children];
|
|
28
|
+
}
|
|
29
|
+
function createComponentProps(raw) {
|
|
30
|
+
const out = {};
|
|
31
|
+
for (const [key, value] of Object.entries(raw)) {
|
|
32
|
+
if (isLazy(value)) {
|
|
33
|
+
Object.defineProperty(out, key, {
|
|
34
|
+
enumerable: true,
|
|
35
|
+
configurable: true,
|
|
36
|
+
get: () => value.fn()
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
out[key] = value;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return out;
|
|
44
|
+
}
|
|
45
|
+
export function jsx(type, props) {
|
|
46
|
+
const finalProps = props ?? {};
|
|
47
|
+
if (type === Fragment)
|
|
48
|
+
return createFragment(finalProps.children);
|
|
49
|
+
if (typeof type === 'function')
|
|
50
|
+
return type(createComponentProps(finalProps));
|
|
51
|
+
if (isBrowser())
|
|
52
|
+
return createDomElement(type, finalProps);
|
|
53
|
+
return createVNode(type, finalProps);
|
|
54
|
+
}
|
|
55
|
+
export const jsxs = jsx;
|
|
56
|
+
export const jsxDEV = jsx;
|
|
57
|
+
function createFragment(children) {
|
|
58
|
+
const normalized = normalizeChildren(children);
|
|
59
|
+
if (isBrowser()) {
|
|
60
|
+
const fragment = document.createDocumentFragment();
|
|
61
|
+
appendChildren(fragment, normalized);
|
|
62
|
+
return fragment;
|
|
63
|
+
}
|
|
64
|
+
return { kind: 'fragment', children: normalized };
|
|
65
|
+
}
|
|
66
|
+
function createVNode(tag, props) {
|
|
67
|
+
const children = normalizeChildren(props.children);
|
|
68
|
+
const elementProps = { ...props };
|
|
69
|
+
delete elementProps.children;
|
|
70
|
+
return { kind: 'element', tag, props: elementProps, children };
|
|
71
|
+
}
|
|
72
|
+
function createDomElement(tag, props) {
|
|
73
|
+
const element = tag === 'svg'
|
|
74
|
+
? document.createElementNS('http://www.w3.org/2000/svg', tag)
|
|
75
|
+
: document.createElement(tag);
|
|
76
|
+
for (const [name, value] of Object.entries(props)) {
|
|
77
|
+
if (name === 'children')
|
|
78
|
+
continue;
|
|
79
|
+
applyProp(element, name, value);
|
|
80
|
+
}
|
|
81
|
+
appendChildren(element, normalizeChildren(props.children));
|
|
82
|
+
return element;
|
|
83
|
+
}
|
|
84
|
+
function applyProp(element, name, value) {
|
|
85
|
+
if (name === 'ref') {
|
|
86
|
+
if (typeof value === 'function')
|
|
87
|
+
value(element);
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
if (name === 'className')
|
|
91
|
+
name = 'class';
|
|
92
|
+
if (name === 'classList' && value && typeof value === 'object') {
|
|
93
|
+
bindClassList(element, value);
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
if (name === 'style' && value && typeof value === 'object' && !isLazy(value)) {
|
|
97
|
+
bindStyle(element, value);
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
if (isEventName(name)) {
|
|
101
|
+
const eventName = normalizeEventName(name);
|
|
102
|
+
if (isResumableHandler(value)) {
|
|
103
|
+
element.setAttribute(eventAttributeName(eventName), value.ref);
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
if (typeof value !== 'function')
|
|
107
|
+
return;
|
|
108
|
+
element.addEventListener(eventName, value);
|
|
109
|
+
if (getOwner())
|
|
110
|
+
cleanup(() => element.removeEventListener(eventName, value));
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
if (isLazy(value)) {
|
|
114
|
+
effect(() => setDomProp(element, name, value.fn()));
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
setDomProp(element, name, value);
|
|
118
|
+
}
|
|
119
|
+
function bindClassList(element, classList) {
|
|
120
|
+
for (const [className, active] of Object.entries(classList)) {
|
|
121
|
+
if (isLazy(active))
|
|
122
|
+
effect(() => element.classList.toggle(className, Boolean(active.fn())));
|
|
123
|
+
else
|
|
124
|
+
element.classList.toggle(className, Boolean(active));
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
function bindStyle(element, styles) {
|
|
128
|
+
for (const [name, value] of Object.entries(styles)) {
|
|
129
|
+
const set = (next) => {
|
|
130
|
+
if (next === null || next === undefined || next === false)
|
|
131
|
+
element.style.removeProperty(name);
|
|
132
|
+
else
|
|
133
|
+
element.style.setProperty(name, String(next));
|
|
134
|
+
};
|
|
135
|
+
if (isLazy(value))
|
|
136
|
+
effect(() => set(value.fn()));
|
|
137
|
+
else
|
|
138
|
+
set(value);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
function setDomProp(element, name, value) {
|
|
142
|
+
if (value === false || value === null || value === undefined) {
|
|
143
|
+
element.removeAttribute(name);
|
|
144
|
+
if (name in element) {
|
|
145
|
+
try {
|
|
146
|
+
element[name] = value === false ? false : '';
|
|
147
|
+
}
|
|
148
|
+
catch { }
|
|
149
|
+
}
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
if (value === true) {
|
|
153
|
+
element.setAttribute(name, '');
|
|
154
|
+
if (name in element) {
|
|
155
|
+
try {
|
|
156
|
+
element[name] = true;
|
|
157
|
+
}
|
|
158
|
+
catch { }
|
|
159
|
+
}
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
if (name === 'innerHTML' || name === 'outerHTML') {
|
|
163
|
+
throw new Error(`Blokd blocks direct ${name} assignment. Use text children or an explicit sanitization boundary.`);
|
|
164
|
+
}
|
|
165
|
+
if (name in element && !name.includes('-')) {
|
|
166
|
+
try {
|
|
167
|
+
element[name] = value;
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
catch { }
|
|
171
|
+
}
|
|
172
|
+
element.setAttribute(name, String(value));
|
|
173
|
+
}
|
|
174
|
+
function appendChildren(parent, children) {
|
|
175
|
+
for (const child of children)
|
|
176
|
+
appendChild(parent, child);
|
|
177
|
+
}
|
|
178
|
+
function appendChild(parent, child) {
|
|
179
|
+
if (child === null || child === undefined || child === false || child === true)
|
|
180
|
+
return;
|
|
181
|
+
if (Array.isArray(child)) {
|
|
182
|
+
for (const nested of child)
|
|
183
|
+
appendChild(parent, nested);
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
if (isLazy(child)) {
|
|
187
|
+
appendDynamic(parent, child.fn);
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
if (isRenderableObject(child) && child.kind === 'dynamic') {
|
|
191
|
+
appendDynamic(parent, child.fn);
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
if (typeof Node !== 'undefined' && child instanceof Node) {
|
|
195
|
+
parent.appendChild(child);
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
parent.appendChild(document.createTextNode(String(child)));
|
|
199
|
+
}
|
|
200
|
+
function appendDynamic(parent, fn) {
|
|
201
|
+
const start = document.createComment('bd');
|
|
202
|
+
const end = document.createComment('/bd');
|
|
203
|
+
parent.appendChild(start);
|
|
204
|
+
parent.appendChild(end);
|
|
205
|
+
let disposers = [];
|
|
206
|
+
const clear = () => {
|
|
207
|
+
for (const dispose of disposers.splice(0))
|
|
208
|
+
dispose();
|
|
209
|
+
let node = start.nextSibling;
|
|
210
|
+
while (node && node !== end) {
|
|
211
|
+
const next = node.nextSibling;
|
|
212
|
+
node.parentNode?.removeChild(node);
|
|
213
|
+
node = next;
|
|
214
|
+
}
|
|
215
|
+
};
|
|
216
|
+
effect(() => {
|
|
217
|
+
clear();
|
|
218
|
+
const value = fn();
|
|
219
|
+
const nodes = materialize(value, disposers);
|
|
220
|
+
for (const node of nodes)
|
|
221
|
+
parent.insertBefore(node, end);
|
|
222
|
+
});
|
|
223
|
+
cleanup(clear);
|
|
224
|
+
}
|
|
225
|
+
function materialize(value, disposers) {
|
|
226
|
+
if (value === null || value === undefined || value === false || value === true)
|
|
227
|
+
return [];
|
|
228
|
+
if (Array.isArray(value))
|
|
229
|
+
return value.flatMap(item => materialize(item, disposers));
|
|
230
|
+
if (isLazy(value))
|
|
231
|
+
return materialize(value.fn(), disposers);
|
|
232
|
+
if (isRenderableObject(value) && value.kind === 'dynamic') {
|
|
233
|
+
const fragment = document.createDocumentFragment();
|
|
234
|
+
root(dispose => {
|
|
235
|
+
disposers.push(dispose);
|
|
236
|
+
appendDynamic(fragment, value.fn);
|
|
237
|
+
});
|
|
238
|
+
return Array.from(fragment.childNodes);
|
|
239
|
+
}
|
|
240
|
+
if (typeof Node !== 'undefined' && value instanceof Node)
|
|
241
|
+
return [value];
|
|
242
|
+
return [document.createTextNode(String(value))];
|
|
243
|
+
}
|
|
244
|
+
export function dynamic(fn) {
|
|
245
|
+
if (!isBrowser())
|
|
246
|
+
return { kind: 'dynamic', fn };
|
|
247
|
+
const fragment = document.createDocumentFragment();
|
|
248
|
+
appendDynamic(fragment, fn);
|
|
249
|
+
return fragment;
|
|
250
|
+
}
|
|
251
|
+
export function render(fn, rootElement) {
|
|
252
|
+
rootElement.textContent = '';
|
|
253
|
+
return root(dispose => {
|
|
254
|
+
appendChild(rootElement, fn());
|
|
255
|
+
return dispose;
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
export function hydrate(fn, rootElement) {
|
|
259
|
+
return render(fn, rootElement);
|
|
260
|
+
}
|
|
261
|
+
export function from(value) {
|
|
262
|
+
return value;
|
|
263
|
+
}
|
|
264
|
+
//# sourceMappingURL=jsx-runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsx-runtime.js","sourceRoot":"","sources":["../src/jsx-runtime.ts"],"names":[],"mappings":"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"}
|
package/dist/resume.d.ts
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { type Renderable } from './jsx-runtime.js';
|
|
2
|
+
export type JsonPrimitive = string | number | boolean | null;
|
|
3
|
+
export type JsonValue = JsonPrimitive | JsonValue[] | {
|
|
4
|
+
[key: string]: JsonValue;
|
|
5
|
+
};
|
|
6
|
+
export type ResumableRef = `${string}#${string}` | string;
|
|
7
|
+
export type ResumeContext<TState = JsonValue> = {
|
|
8
|
+
event: Event;
|
|
9
|
+
element: Element;
|
|
10
|
+
island: Element | null;
|
|
11
|
+
state: TState | null;
|
|
12
|
+
setState(next: TState | ((previous: TState | null) => TState)): void;
|
|
13
|
+
ref: string;
|
|
14
|
+
};
|
|
15
|
+
export type ResumableEventHandler<TState = JsonValue> = (event: Event, ctx: ResumeContext<TState>) => unknown | Promise<unknown>;
|
|
16
|
+
export type ResumableHandler<TState = JsonValue> = {
|
|
17
|
+
readonly __blokdResumable: true;
|
|
18
|
+
readonly ref: string;
|
|
19
|
+
readonly handler?: ResumableEventHandler<TState>;
|
|
20
|
+
};
|
|
21
|
+
export type IslandProps<TState extends JsonValue = JsonValue> = {
|
|
22
|
+
name: string;
|
|
23
|
+
state?: TState;
|
|
24
|
+
id?: string;
|
|
25
|
+
as?: string;
|
|
26
|
+
children?: Renderable;
|
|
27
|
+
};
|
|
28
|
+
export type StartResumabilityOptions = {
|
|
29
|
+
root?: Document | Element;
|
|
30
|
+
events?: readonly string[];
|
|
31
|
+
/**
|
|
32
|
+
* Production safety valve. Return false to reject a data-blokd-on* ref before dynamic import.
|
|
33
|
+
*/
|
|
34
|
+
allowRef?: (ref: string) => boolean;
|
|
35
|
+
onError?: (error: unknown, ctx: Omit<ResumeContext, 'state' | 'setState'>) => void;
|
|
36
|
+
};
|
|
37
|
+
export declare function resumable<TState = JsonValue>(ref: ResumableRef, handler?: ResumableEventHandler<TState>): ResumableHandler<TState>;
|
|
38
|
+
export declare function isResumableHandler(value: unknown): value is ResumableHandler;
|
|
39
|
+
export declare function registerResumable<TState = JsonValue>(ref: ResumableRef, handler: ResumableEventHandler<TState>): void;
|
|
40
|
+
export declare function unregisterResumable(ref: ResumableRef): void;
|
|
41
|
+
export declare function Island<TState extends JsonValue = JsonValue>(props: IslandProps<TState>): Renderable;
|
|
42
|
+
export declare function eventAttributeName(eventName: string): string;
|
|
43
|
+
export declare function serializeState(value: JsonValue): string;
|
|
44
|
+
export declare function parseState<TState = JsonValue>(value: string | null): TState | null;
|
|
45
|
+
export declare function startResumability(options?: StartResumabilityOptions): () => void;
|
|
46
|
+
//# sourceMappingURL=resume.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resume.d.ts","sourceRoot":"","sources":["../src/resume.ts"],"names":[],"mappings":"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"}
|
package/dist/resume.js
ADDED
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { jsx } from './jsx-runtime.js';
|
|
2
|
+
const registry = new Map();
|
|
3
|
+
const inflight = new Map();
|
|
4
|
+
const DEFAULT_EVENTS = ['click', 'input', 'change', 'submit'];
|
|
5
|
+
const rootStates = new WeakMap();
|
|
6
|
+
export function resumable(ref, handler) {
|
|
7
|
+
const normalized = String(ref);
|
|
8
|
+
assertValidRef(normalized);
|
|
9
|
+
if (handler) {
|
|
10
|
+
registry.set(normalized, handler);
|
|
11
|
+
return { __blokdResumable: true, ref: normalized, handler };
|
|
12
|
+
}
|
|
13
|
+
return { __blokdResumable: true, ref: normalized };
|
|
14
|
+
}
|
|
15
|
+
export function isResumableHandler(value) {
|
|
16
|
+
return !!value && typeof value === 'object' && value.__blokdResumable === true;
|
|
17
|
+
}
|
|
18
|
+
export function registerResumable(ref, handler) {
|
|
19
|
+
const normalized = String(ref);
|
|
20
|
+
assertValidRef(normalized);
|
|
21
|
+
registry.set(normalized, handler);
|
|
22
|
+
}
|
|
23
|
+
export function unregisterResumable(ref) {
|
|
24
|
+
registry.delete(String(ref));
|
|
25
|
+
inflight.delete(String(ref));
|
|
26
|
+
}
|
|
27
|
+
export function Island(props) {
|
|
28
|
+
const tag = props.as ?? 'div';
|
|
29
|
+
validateIslandTag(tag);
|
|
30
|
+
const attrs = {
|
|
31
|
+
'data-blokd-island': props.name,
|
|
32
|
+
children: props.children
|
|
33
|
+
};
|
|
34
|
+
if (props.id)
|
|
35
|
+
attrs.id = props.id;
|
|
36
|
+
if (props.state !== undefined)
|
|
37
|
+
attrs['data-blokd-state'] = serializeState(props.state);
|
|
38
|
+
return jsx(tag, attrs);
|
|
39
|
+
}
|
|
40
|
+
export function eventAttributeName(eventName) {
|
|
41
|
+
if (!/^[a-z][a-z0-9_-]*$/i.test(eventName))
|
|
42
|
+
throw new Error(`Invalid event name: ${eventName}`);
|
|
43
|
+
return `data-blokd-on${eventName.toLowerCase()}`;
|
|
44
|
+
}
|
|
45
|
+
export function serializeState(value) {
|
|
46
|
+
const serialized = JSON.stringify(value);
|
|
47
|
+
if (serialized === undefined)
|
|
48
|
+
return 'null';
|
|
49
|
+
return serialized
|
|
50
|
+
.replaceAll('<', '\\u003c')
|
|
51
|
+
.replaceAll('>', '\\u003e')
|
|
52
|
+
.replaceAll('&', '\\u0026')
|
|
53
|
+
.replaceAll('\u2028', '\\u2028')
|
|
54
|
+
.replaceAll('\u2029', '\\u2029');
|
|
55
|
+
}
|
|
56
|
+
export function parseState(value) {
|
|
57
|
+
if (!value)
|
|
58
|
+
return null;
|
|
59
|
+
try {
|
|
60
|
+
return JSON.parse(value);
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
export function startResumability(options = {}) {
|
|
67
|
+
if (typeof document === 'undefined')
|
|
68
|
+
return () => undefined;
|
|
69
|
+
const root = options.root ?? document;
|
|
70
|
+
const events = Array.from(new Set(options.events ?? DEFAULT_EVENTS));
|
|
71
|
+
let state = rootStates.get(root);
|
|
72
|
+
if (!state) {
|
|
73
|
+
state = { options, listeners: new Map() };
|
|
74
|
+
rootStates.set(root, state);
|
|
75
|
+
}
|
|
76
|
+
state.options = options;
|
|
77
|
+
for (const eventName of events) {
|
|
78
|
+
eventAttributeName(eventName);
|
|
79
|
+
let record = state.listeners.get(eventName);
|
|
80
|
+
if (!record) {
|
|
81
|
+
const listener = event => {
|
|
82
|
+
const latest = rootStates.get(root);
|
|
83
|
+
if (latest)
|
|
84
|
+
void dispatchResumableEvent(event, latest.options);
|
|
85
|
+
};
|
|
86
|
+
root.addEventListener(eventName, listener, true);
|
|
87
|
+
record = { listener, count: 0 };
|
|
88
|
+
state.listeners.set(eventName, record);
|
|
89
|
+
}
|
|
90
|
+
record.count++;
|
|
91
|
+
}
|
|
92
|
+
let disposed = false;
|
|
93
|
+
return () => {
|
|
94
|
+
if (disposed)
|
|
95
|
+
return;
|
|
96
|
+
disposed = true;
|
|
97
|
+
const current = rootStates.get(root);
|
|
98
|
+
if (!current)
|
|
99
|
+
return;
|
|
100
|
+
for (const eventName of events) {
|
|
101
|
+
const record = current.listeners.get(eventName);
|
|
102
|
+
if (!record)
|
|
103
|
+
continue;
|
|
104
|
+
record.count--;
|
|
105
|
+
if (record.count <= 0) {
|
|
106
|
+
root.removeEventListener(eventName, record.listener, true);
|
|
107
|
+
current.listeners.delete(eventName);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
if (current.listeners.size === 0)
|
|
111
|
+
rootStates.delete(root);
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
async function dispatchResumableEvent(event, options) {
|
|
115
|
+
const match = findResumableElement(event);
|
|
116
|
+
if (!match)
|
|
117
|
+
return;
|
|
118
|
+
const { element, ref } = match;
|
|
119
|
+
const island = element.closest('[data-blokd-island]');
|
|
120
|
+
const baseCtx = { event, element, island, ref };
|
|
121
|
+
try {
|
|
122
|
+
if (options.allowRef && !options.allowRef(ref))
|
|
123
|
+
throw new Error(`Blokd resumable ref rejected by allowRef(): ${ref}`);
|
|
124
|
+
if (!isSafeDynamicRef(ref))
|
|
125
|
+
throw new Error(`Unsafe Blokd resumable ref: ${ref}`);
|
|
126
|
+
const handler = await loadHandler(ref);
|
|
127
|
+
const ctx = createResumeContext(baseCtx);
|
|
128
|
+
await handler(event, ctx);
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
if (options.onError)
|
|
132
|
+
options.onError(error, baseCtx);
|
|
133
|
+
else
|
|
134
|
+
setTimeout(() => { throw error; }, 0);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
function findResumableElement(event) {
|
|
138
|
+
const attr = eventAttributeName(event.type);
|
|
139
|
+
const path = typeof event.composedPath === 'function' ? event.composedPath() : [];
|
|
140
|
+
for (const item of path) {
|
|
141
|
+
if (!(item instanceof Element))
|
|
142
|
+
continue;
|
|
143
|
+
const ref = item.getAttribute(attr);
|
|
144
|
+
if (ref)
|
|
145
|
+
return { element: item, ref };
|
|
146
|
+
}
|
|
147
|
+
const target = event.target;
|
|
148
|
+
if (!(target instanceof Element))
|
|
149
|
+
return null;
|
|
150
|
+
const element = target.closest(`[${attr}]`);
|
|
151
|
+
const ref = element?.getAttribute(attr);
|
|
152
|
+
return element && ref ? { element, ref } : null;
|
|
153
|
+
}
|
|
154
|
+
function createResumeContext(base) {
|
|
155
|
+
const getStateElement = () => base.island ?? base.element;
|
|
156
|
+
const read = () => parseState(getStateElement().getAttribute('data-blokd-state'));
|
|
157
|
+
return {
|
|
158
|
+
...base,
|
|
159
|
+
get state() {
|
|
160
|
+
return read();
|
|
161
|
+
},
|
|
162
|
+
setState(next) {
|
|
163
|
+
const previous = read();
|
|
164
|
+
const value = typeof next === 'function' ? next(previous) : next;
|
|
165
|
+
getStateElement().setAttribute('data-blokd-state', serializeState(value));
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
async function loadHandler(ref) {
|
|
170
|
+
const registered = registry.get(ref);
|
|
171
|
+
if (registered)
|
|
172
|
+
return registered;
|
|
173
|
+
const active = inflight.get(ref);
|
|
174
|
+
if (active)
|
|
175
|
+
return active;
|
|
176
|
+
const promise = importHandler(ref);
|
|
177
|
+
inflight.set(ref, promise);
|
|
178
|
+
try {
|
|
179
|
+
const handler = await promise;
|
|
180
|
+
registry.set(ref, handler);
|
|
181
|
+
return handler;
|
|
182
|
+
}
|
|
183
|
+
finally {
|
|
184
|
+
inflight.delete(ref);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
async function importHandler(ref) {
|
|
188
|
+
const { moduleId, exportName } = parseRef(ref);
|
|
189
|
+
const mod = await import(/* @vite-ignore */ moduleId);
|
|
190
|
+
const handler = mod[exportName];
|
|
191
|
+
if (typeof handler !== 'function') {
|
|
192
|
+
throw new Error(`Blokd resumable handler ${exportName} was not found in ${moduleId}.`);
|
|
193
|
+
}
|
|
194
|
+
return handler;
|
|
195
|
+
}
|
|
196
|
+
function parseRef(ref) {
|
|
197
|
+
const index = ref.lastIndexOf('#');
|
|
198
|
+
if (index <= 0 || index === ref.length - 1) {
|
|
199
|
+
throw new Error(`Invalid Blokd resumable ref: ${ref}. Expected "module#export".`);
|
|
200
|
+
}
|
|
201
|
+
return { moduleId: ref.slice(0, index), exportName: ref.slice(index + 1) };
|
|
202
|
+
}
|
|
203
|
+
function assertValidRef(ref) {
|
|
204
|
+
parseRef(ref);
|
|
205
|
+
if (!isSafeDynamicRef(ref))
|
|
206
|
+
throw new Error(`Unsafe Blokd resumable ref: ${ref}`);
|
|
207
|
+
}
|
|
208
|
+
function isSafeDynamicRef(ref) {
|
|
209
|
+
const { moduleId } = parseRef(ref);
|
|
210
|
+
const lowered = moduleId.trim().toLowerCase();
|
|
211
|
+
if (lowered.startsWith('javascript:') || lowered.startsWith('data:') || lowered.startsWith('blob:'))
|
|
212
|
+
return false;
|
|
213
|
+
if (/^https?:\/\//.test(lowered)) {
|
|
214
|
+
if (typeof location === 'undefined')
|
|
215
|
+
return false;
|
|
216
|
+
try {
|
|
217
|
+
return new URL(moduleId, location.href).origin === location.origin;
|
|
218
|
+
}
|
|
219
|
+
catch {
|
|
220
|
+
return false;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return true;
|
|
224
|
+
}
|
|
225
|
+
function validateIslandTag(tag) {
|
|
226
|
+
if (!/^[a-z][a-z0-9.-]*$/i.test(tag))
|
|
227
|
+
throw new Error(`Invalid Island tag: ${tag}`);
|
|
228
|
+
if (tag.toLowerCase() === 'script')
|
|
229
|
+
throw new Error('Island cannot render as <script>.');
|
|
230
|
+
}
|
|
231
|
+
//# sourceMappingURL=resume.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resume.js","sourceRoot":"","sources":["../src/resume.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { type Renderable } from './jsx-runtime.js';
|
|
2
|
+
export type MetaDescriptor = {
|
|
3
|
+
title?: string;
|
|
4
|
+
description?: string;
|
|
5
|
+
htmlAttrs?: Record<string, string | number | bigint | boolean | null | undefined>;
|
|
6
|
+
bodyAttrs?: Record<string, string | number | bigint | boolean | null | undefined>;
|
|
7
|
+
meta?: Array<Record<string, string | number | boolean>>;
|
|
8
|
+
links?: Array<Record<string, string | number | boolean>>;
|
|
9
|
+
scripts?: Array<Record<string, string | number | boolean>>;
|
|
10
|
+
};
|
|
11
|
+
export type ResponseLike = Response | Renderable | string | number | bigint | boolean | null | undefined;
|
|
12
|
+
export declare class HttpError extends Error {
|
|
13
|
+
readonly response: Response;
|
|
14
|
+
constructor(response: Response);
|
|
15
|
+
}
|
|
16
|
+
export declare class Redirect extends HttpError {
|
|
17
|
+
constructor(location: string, status?: number);
|
|
18
|
+
}
|
|
19
|
+
export declare function redirect(location: string, status?: number): never;
|
|
20
|
+
export declare function notFound(message?: string): never;
|
|
21
|
+
export declare function httpError(status: number, message?: string, init?: ResponseInit): never;
|
|
22
|
+
export declare function isHttpError(error: unknown): error is HttpError;
|
|
23
|
+
export declare function json(data: unknown, init?: ResponseInit): Response;
|
|
24
|
+
export declare function html(body: string, init?: ResponseInit): Response;
|
|
25
|
+
export declare function escapeHtml(value: unknown): string;
|
|
26
|
+
export declare function safeJsonScript(data: unknown): string;
|
|
27
|
+
export declare function renderToString(input: Renderable | (() => Renderable)): string;
|
|
28
|
+
export declare function renderDocument(options: {
|
|
29
|
+
body: Renderable | (() => Renderable);
|
|
30
|
+
data?: unknown;
|
|
31
|
+
meta?: MetaDescriptor;
|
|
32
|
+
status?: number;
|
|
33
|
+
headers?: HeadersInit;
|
|
34
|
+
entryClient?: string;
|
|
35
|
+
}): Response;
|
|
36
|
+
export declare function renderHead(meta: MetaDescriptor): string;
|
|
37
|
+
export declare function mergeMeta(...metas: Array<MetaDescriptor | null | undefined>): MetaDescriptor;
|
|
38
|
+
export declare function attrsToString(attrs: Record<string, string | number | bigint | boolean | null | undefined>): string;
|
|
39
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|