@nisli/core 0.51.0 → 0.52.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 +15 -0
- package/dist/component.d.ts +54 -3
- package/dist/component.js +186 -8
- package/dist/component.js.map +1 -1
- package/dist/element-context.d.ts +81 -0
- package/dist/element-context.js +108 -0
- package/dist/element-context.js.map +1 -0
- package/dist/index.d.ts +5 -3
- package/dist/index.js +7 -3
- package/dist/index.js.map +1 -1
- package/dist/projection.d.ts +44 -0
- package/dist/projection.js +155 -0
- package/dist/projection.js.map +1 -0
- package/dist/query.d.ts +5 -1
- package/dist/query.js +11 -4
- package/dist/query.js.map +1 -1
- package/dist/signal.d.ts +20 -0
- package/dist/signal.js +53 -3
- package/dist/signal.js.map +1 -1
- package/dist/template.d.ts +44 -0
- package/dist/template.js +159 -19
- package/dist/template.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* projection.ts — First-class content projection (ADR 0025 item 1)
|
|
3
|
+
*
|
|
4
|
+
* `children(fallback?)` is a setup-context primitive that owns the light-DOM
|
|
5
|
+
* projection machinery the registry currently hand-rolls
|
|
6
|
+
* (captureChildren/projectChildren + per-component conditional-default swaps).
|
|
7
|
+
*
|
|
8
|
+
* ```ts
|
|
9
|
+
* component('ui-button', (props, host) => {
|
|
10
|
+
* transparentHost(host);
|
|
11
|
+
* return html`<button class="${classes}">${children()}</button>`;
|
|
12
|
+
* });
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* Semantics:
|
|
16
|
+
* - Returns a reactive slot value (a signal) that a template interpolates. The
|
|
17
|
+
* slot resolves, in priority order: the factory `children` prop → the host's
|
|
18
|
+
* captured light-DOM children → the fallback.
|
|
19
|
+
* - Factory `children` route through the SAME slot: `children()` READS the
|
|
20
|
+
* host's `children` prop signal (sugar over one path). Crucially it renders
|
|
21
|
+
* them AT the slot position (not by relocating them to light DOM), so a
|
|
22
|
+
* factory-composed child element is a DOM descendant of its parent when its
|
|
23
|
+
* connectedCallback runs — `closest()`-based parent lookup keeps working.
|
|
24
|
+
* - Plain-HTML light-DOM children are captured pre-setup by component.ts
|
|
25
|
+
* (SEED → CAPTURE → CONTEXT) and projected here; late parser children are
|
|
26
|
+
* swept in a microtask (the ADR 0023 streaming machinery, now in core).
|
|
27
|
+
* - `children(fallback)` renders `fallback` when no MEANINGFUL children exist
|
|
28
|
+
* (whitespace-only light DOM does not count) and REPLACES it reactively when
|
|
29
|
+
* children arrive — including late parser children. This natively solves the
|
|
30
|
+
* conditional-default class (message-scroller-button's default glyph).
|
|
31
|
+
* - Single default slot only; named/multiple slots are a later design (v1 OUT).
|
|
32
|
+
*
|
|
33
|
+
* Zero-cost when unused: component.ts only snapshots childNodes when the host
|
|
34
|
+
* has any, and only children() consumes them.
|
|
35
|
+
*/
|
|
36
|
+
import { type ReadonlySignal } from './signal.js';
|
|
37
|
+
import type { TemplateResult } from './template.js';
|
|
38
|
+
/**
|
|
39
|
+
* Project the host's children (factory `children` prop or light DOM) into this
|
|
40
|
+
* slot, with an optional `fallback` rendered when empty. Must be called in
|
|
41
|
+
* setup context. Interpolate the result in a template:
|
|
42
|
+
* `html`<button>${children()}</button>``.
|
|
43
|
+
*/
|
|
44
|
+
export declare function children(fallback?: TemplateResult | string): ReadonlySignal<unknown>;
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* projection.ts — First-class content projection (ADR 0025 item 1)
|
|
3
|
+
*
|
|
4
|
+
* `children(fallback?)` is a setup-context primitive that owns the light-DOM
|
|
5
|
+
* projection machinery the registry currently hand-rolls
|
|
6
|
+
* (captureChildren/projectChildren + per-component conditional-default swaps).
|
|
7
|
+
*
|
|
8
|
+
* ```ts
|
|
9
|
+
* component('ui-button', (props, host) => {
|
|
10
|
+
* transparentHost(host);
|
|
11
|
+
* return html`<button class="${classes}">${children()}</button>`;
|
|
12
|
+
* });
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* Semantics:
|
|
16
|
+
* - Returns a reactive slot value (a signal) that a template interpolates. The
|
|
17
|
+
* slot resolves, in priority order: the factory `children` prop → the host's
|
|
18
|
+
* captured light-DOM children → the fallback.
|
|
19
|
+
* - Factory `children` route through the SAME slot: `children()` READS the
|
|
20
|
+
* host's `children` prop signal (sugar over one path). Crucially it renders
|
|
21
|
+
* them AT the slot position (not by relocating them to light DOM), so a
|
|
22
|
+
* factory-composed child element is a DOM descendant of its parent when its
|
|
23
|
+
* connectedCallback runs — `closest()`-based parent lookup keeps working.
|
|
24
|
+
* - Plain-HTML light-DOM children are captured pre-setup by component.ts
|
|
25
|
+
* (SEED → CAPTURE → CONTEXT) and projected here; late parser children are
|
|
26
|
+
* swept in a microtask (the ADR 0023 streaming machinery, now in core).
|
|
27
|
+
* - `children(fallback)` renders `fallback` when no MEANINGFUL children exist
|
|
28
|
+
* (whitespace-only light DOM does not count) and REPLACES it reactively when
|
|
29
|
+
* children arrive — including late parser children. This natively solves the
|
|
30
|
+
* conditional-default class (message-scroller-button's default glyph).
|
|
31
|
+
* - Single default slot only; named/multiple slots are a later design (v1 OUT).
|
|
32
|
+
*
|
|
33
|
+
* Zero-cost when unused: component.ts only snapshots childNodes when the host
|
|
34
|
+
* has any, and only children() consumes them.
|
|
35
|
+
*/
|
|
36
|
+
import { getCurrentComponent } from './context.js';
|
|
37
|
+
import { onMount, onCleanup } from './lifecycle.js';
|
|
38
|
+
import { signal, computed, flush } from './signal.js';
|
|
39
|
+
/** True if the nodes carry meaningful content (element or non-blank text). */
|
|
40
|
+
function isMeaningful(nodes) {
|
|
41
|
+
return nodes.some((n) => n.nodeType === 1 || (n.nodeType === 3 && (n.textContent ?? '').trim() !== ''));
|
|
42
|
+
}
|
|
43
|
+
/** A minimal TemplateResult that mounts pre-existing DOM nodes into the slot. */
|
|
44
|
+
function nodesTemplate(nodes) {
|
|
45
|
+
return {
|
|
46
|
+
__templateResult: true,
|
|
47
|
+
mount(w) {
|
|
48
|
+
for (const node of nodes)
|
|
49
|
+
w.appendChild(node);
|
|
50
|
+
},
|
|
51
|
+
dispose() { },
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/** A re-mountable TemplateResult that renders a primitive as a fresh text node. */
|
|
55
|
+
function textTemplate(text) {
|
|
56
|
+
return {
|
|
57
|
+
__templateResult: true,
|
|
58
|
+
mount(w) {
|
|
59
|
+
w.appendChild(document.createTextNode(text));
|
|
60
|
+
},
|
|
61
|
+
dispose() { },
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Normalize a slot value so the template ALWAYS sees a TemplateResult / factory
|
|
66
|
+
* / array / null — never a bare primitive. The engine picks the slot binding
|
|
67
|
+
* kind by probing the FIRST value: a bare string would bind a plain text node,
|
|
68
|
+
* which then can't host a later template child (it stringifies to
|
|
69
|
+
* "[object Object]"). Wrapping primitives keeps the slot a reactive-template
|
|
70
|
+
* slot for its whole life.
|
|
71
|
+
*/
|
|
72
|
+
function asSlot(value) {
|
|
73
|
+
if (value == null || value === '')
|
|
74
|
+
return null;
|
|
75
|
+
if (typeof value === 'object'
|
|
76
|
+
&& ('__templateResult' in value || '__type' in value)) {
|
|
77
|
+
return value;
|
|
78
|
+
}
|
|
79
|
+
if (Array.isArray(value))
|
|
80
|
+
return value;
|
|
81
|
+
return textTemplate(String(value));
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Project the host's children (factory `children` prop or light DOM) into this
|
|
85
|
+
* slot, with an optional `fallback` rendered when empty. Must be called in
|
|
86
|
+
* setup context. Interpolate the result in a template:
|
|
87
|
+
* `html`<button>${children()}</button>``.
|
|
88
|
+
*/
|
|
89
|
+
export function children(fallback) {
|
|
90
|
+
const host = getCurrentComponent().element;
|
|
91
|
+
// Consume the pre-setup light-DOM capture; remove those nodes from the host
|
|
92
|
+
// so the rendered template doesn't duplicate them.
|
|
93
|
+
const captured = host.__capturedChildren ?? [];
|
|
94
|
+
host.__capturedChildren = undefined;
|
|
95
|
+
for (const node of captured) {
|
|
96
|
+
if (node.parentNode === host)
|
|
97
|
+
host.removeChild(node);
|
|
98
|
+
}
|
|
99
|
+
// The factory `children` prop, folded into the same slot (sugar over one path).
|
|
100
|
+
const childrenProp = host._propSignal ? host._propSignal('children') : undefined;
|
|
101
|
+
// Projected light-DOM nodes; grows when the late-parser sweep finds more.
|
|
102
|
+
const projectedNodes = signal(captured);
|
|
103
|
+
onMount(() => {
|
|
104
|
+
// The host's direct children right after mount are the rendered template
|
|
105
|
+
// roots. Anything that appears later is a late parser/innerHTML child.
|
|
106
|
+
const renderedRoots = new Set(Array.from(host.childNodes));
|
|
107
|
+
queueMicrotask(() => {
|
|
108
|
+
const late = Array.from(host.childNodes).filter((n) => !renderedRoots.has(n));
|
|
109
|
+
if (late.length && isMeaningful(late)) {
|
|
110
|
+
for (const node of late)
|
|
111
|
+
host.removeChild(node);
|
|
112
|
+
projectedNodes.value = [...projectedNodes.value, ...late];
|
|
113
|
+
// Flush the slot effect NOW so the late children land in this same
|
|
114
|
+
// microtask — the projectChildren() this replaces mutated the DOM
|
|
115
|
+
// imperatively, so callers only await one microtask for the sweep.
|
|
116
|
+
flush();
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
// Stable, RE-MOUNTABLE fallback slot: the same slot object is returned on
|
|
121
|
+
// every empty render, and it can be mounted → unmounted → mounted again
|
|
122
|
+
// (empty → filled → empty) without crashing. A string wraps to a fresh text
|
|
123
|
+
// node each mount. A TemplateResult is mounted ONCE here into a detached
|
|
124
|
+
// holder (its reactive bindings run in this component's context and dispose
|
|
125
|
+
// with it); its rendered nodes are then exposed as a re-mountable node slot,
|
|
126
|
+
// so the engine can detach and re-append them freely.
|
|
127
|
+
let fallbackSlot = null;
|
|
128
|
+
if (fallback != null) {
|
|
129
|
+
if (typeof fallback === 'string') {
|
|
130
|
+
fallbackSlot = textTemplate(fallback);
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
const holder = document.createDocumentFragment();
|
|
134
|
+
fallback.mount(holder);
|
|
135
|
+
const fallbackNodes = Array.from(holder.childNodes);
|
|
136
|
+
onCleanup(() => { try {
|
|
137
|
+
fallback.dispose();
|
|
138
|
+
}
|
|
139
|
+
catch (_) { /* ignore */ } });
|
|
140
|
+
fallbackSlot = nodesTemplate(fallbackNodes);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// Priority: factory children → captured/late light DOM → fallback. Reactive,
|
|
144
|
+
// so late children (or a changing `children` prop) replace the fallback.
|
|
145
|
+
return computed(() => {
|
|
146
|
+
const kids = childrenProp?.value;
|
|
147
|
+
if (kids != null && kids !== '')
|
|
148
|
+
return asSlot(kids);
|
|
149
|
+
const nodes = projectedNodes.value;
|
|
150
|
+
if (isMeaningful(nodes))
|
|
151
|
+
return nodesTemplate(nodes);
|
|
152
|
+
return fallbackSlot;
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=projection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projection.js","sourceRoot":"","sources":["../src/projection.ts"],"names":[],"mappings":"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"}
|
package/dist/query.d.ts
CHANGED
|
@@ -25,7 +25,11 @@ export interface QueryResult<T> {
|
|
|
25
25
|
loading: ReadonlySignal<boolean>;
|
|
26
26
|
/** The error if the fetch failed, null otherwise */
|
|
27
27
|
error: Signal<Error | null>;
|
|
28
|
-
/** Manually trigger a refetch
|
|
28
|
+
/** Manually trigger a refetch. Bypasses staleTime's fresh-cache
|
|
29
|
+
* suppression — a manual refetch inside the freshness window is never a
|
|
30
|
+
* silent no-op (react-query semantics). It does not bypass in-flight
|
|
31
|
+
* deduplication: if a request for the same key is already running, this
|
|
32
|
+
* joins it rather than starting a second fetch. */
|
|
29
33
|
refetch(): void;
|
|
30
34
|
}
|
|
31
35
|
export interface QueryOptions<T> {
|
package/dist/query.js
CHANGED
|
@@ -124,7 +124,14 @@ export function query(keyFn, fetcher, options = {}) {
|
|
|
124
124
|
// Track the current fetch generation to handle race conditions
|
|
125
125
|
let fetchGeneration = 0;
|
|
126
126
|
let disposed = false;
|
|
127
|
-
|
|
127
|
+
// `force` is set by the manual refetch() path. An explicit refetch is a
|
|
128
|
+
// force (react-query semantics): it skips the fresh-cache short-circuit, so a
|
|
129
|
+
// manual refetch inside the freshness window is never a silent no-op. It does
|
|
130
|
+
// NOT skip in-flight deduplication — a same-key request already running is
|
|
131
|
+
// joined, not duplicated — and the generation guards are unchanged. The
|
|
132
|
+
// automatic (effect-driven) path leaves `force` false and stays cache-first.
|
|
133
|
+
// (ADR 0025 item 12.)
|
|
134
|
+
const doFetch = async (force = false) => {
|
|
128
135
|
if (disposed)
|
|
129
136
|
return;
|
|
130
137
|
// Check enabled
|
|
@@ -133,8 +140,8 @@ export function query(keyFn, fetcher, options = {}) {
|
|
|
133
140
|
const key = keyFn();
|
|
134
141
|
const serialized = serializeKey(key);
|
|
135
142
|
const generation = ++fetchGeneration;
|
|
136
|
-
// Check cache freshness
|
|
137
|
-
if (staleTime > 0 && client.isFresh(serialized, staleTime)) {
|
|
143
|
+
// Check cache freshness (automatic path only — an explicit refetch forces).
|
|
144
|
+
if (!force && staleTime > 0 && client.isFresh(serialized, staleTime)) {
|
|
138
145
|
const cached = client.getCached(serialized);
|
|
139
146
|
if (cached !== undefined) {
|
|
140
147
|
data.value = cached;
|
|
@@ -219,7 +226,7 @@ export function query(keyFn, fetcher, options = {}) {
|
|
|
219
226
|
}
|
|
220
227
|
const refetch = () => {
|
|
221
228
|
fetchGeneration++; // invalidate any in-flight
|
|
222
|
-
doFetch().catch(() => { });
|
|
229
|
+
doFetch(true).catch(() => { }); // force: bypass staleTime (ADR 0025 item 12)
|
|
223
230
|
};
|
|
224
231
|
return {
|
|
225
232
|
data,
|
package/dist/query.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAoC,MAAM,aAAa,CAAC;AACzF,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAoB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAoC,MAAM,aAAa,CAAC;AACzF,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAoB,MAAM,eAAe,CAAC;AA0CzD;;;GAGG;AACH,MAAM,OAAO,WAAW;IACd,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAC;IACtC,QAAQ,GAAG,IAAI,GAAG,EAA4B,CAAC;IAEvD,sCAAsC;IACtC,OAAO,CAAC,GAAW,EAAE,SAAiB;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACzB,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;IAClD,CAAC;IAED,sBAAsB;IACtB,SAAS,CAAI,GAAW;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAqB,CAAC;IACpD,CAAC;IAED,0BAA0B;IAC1B,GAAG,CAAC,GAAW,EAAE,IAAa,EAAE,SAAiB;QAC/C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,8CAA8C;IAC9C,WAAW,CAAC,GAAW;QACrB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,oCAAoC;IACpC,WAAW,CAAC,GAAW,EAAE,OAAyB;QAChD,+EAA+E;QAC/E,qFAAqF;QACrF,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACxC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAChC,qBAAqB;QACrB,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE;YACnB,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC;gBACvC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,UAAU,CAAC,SAAoB;QAC7B,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACtC,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAc,CAAC;gBAChD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAClG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;oBAC9B,KAAK,EAAE,CAAC;gBACV,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,oBAAoB;YACtB,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,8BAA8B;IAC9B,KAAK,CAAC,QAAQ,CAAC,GAAc,EAAE,OAA+B,EAAE,SAAS,GAAG,CAAC;QAC3E,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC;YAAE,OAAO;QAChD,MAAM,IAAI,GAAG,MAAM,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IACxC,CAAC;IAED,sBAAsB;IACtB,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;CACF;AAED,uEAAuE;AAEvE,SAAS,YAAY,CAAC,GAAc;IAClC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED,uEAAuE;AAEvE;;;;;;GAMG;AACH,MAAM,UAAU,KAAK,CACnB,KAAsB,EACtB,OAAyB,EACzB,UAA2B,EAAE;IAE7B,MAAM,EACJ,SAAS,GAAG,CAAC,EACb,KAAK,GAAG,CAAC,EACT,OAAO,EACP,WAAW,EACX,SAAS,EACT,OAAO,GACR,GAAG,OAAO,CAAC;IAEZ,MAAM,IAAI,GAAG,MAAM,CAAgB,WAAW,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,MAAM,CAAe,IAAI,CAAC,CAAC;IAEzC,uCAAuC;IACvC,IAAI,MAAmB,CAAC;IACxB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,0CAA0C;QAC1C,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;IAC7B,CAAC;IAED,+DAA+D;IAC/D,IAAI,eAAe,GAAG,CAAC,CAAC;IACxB,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,wEAAwE;IACxE,8EAA8E;IAC9E,8EAA8E;IAC9E,2EAA2E;IAC3E,wEAAwE;IACxE,6EAA6E;IAC7E,sBAAsB;IACtB,MAAM,OAAO,GAAG,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE,EAAE;QACtC,IAAI,QAAQ;YAAE,OAAO;QAErB,gBAAgB;QAChB,IAAI,OAAO,IAAI,CAAC,OAAO,EAAE;YAAE,OAAO;QAElC,MAAM,GAAG,GAAG,KAAK,EAAE,CAAC;QACpB,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,UAAU,GAAG,EAAE,eAAe,CAAC;QAErC,4EAA4E;QAC5E,IAAI,CAAC,KAAK,IAAI,SAAS,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,CAAC;YACrE,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAI,UAAU,CAAC,CAAC;YAC/C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;gBACpB,OAAO;YACT,CAAC;QACH,CAAC;QAED,oCAAoC;QACpC,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,QAAa,CAAC;gBACnC,IAAI,UAAU,KAAK,eAAe,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAChD,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;oBACpB,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;gBACrB,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,UAAU,KAAK,eAAe,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAChD,KAAK,CAAC,KAAK,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9D,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,IAAI,UAAU,KAAK,eAAe,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAChD,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;gBACxB,CAAC;YACH,CAAC;YACD,OAAO;QACT,CAAC;QAED,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;QACrB,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;QAEnB,IAAI,SAAS,GAAiB,IAAI,CAAC;QACnC,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,CAAC;QAE3B,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC;YACpD,IAAI,QAAQ,IAAI,UAAU,KAAK,eAAe;gBAAE,OAAO;YAEvD,MAAM,OAAO,GAAG,OAAO,EAAE,CAAC;YAC1B,gEAAgE;YAChE,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACxB,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAExC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;gBAC7B,gCAAgC;gBAChC,IAAI,UAAU,KAAK,eAAe,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAChD,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;oBACpB,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;oBACnB,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;oBACtB,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;oBAC1C,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC;gBACtB,CAAC;gBACD,OAAO,CAAC,UAAU;YACpB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,SAAS,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1D,iCAAiC;YACnC,CAAC;QACH,CAAC;QAED,wBAAwB;QACxB,IAAI,UAAU,KAAK,eAAe,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChD,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;YACxB,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;YACtB,IAAI,SAAS;gBAAE,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CAAC;IAEF,mDAAmD;IACnD,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,EAAE;QAChC,+DAA+D;QAC/D,MAAM,IAAI,GAAG,KAAK,EAAE,CAAC;QACrB,uBAAuB;QACvB,IAAI,OAAO;YAAE,OAAO,EAAE,CAAC;QACvB,0EAA0E;QAC1E,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,4CAA4C;IAC5C,IAAI,UAAU,EAAE,EAAE,CAAC;QACjB,mBAAmB,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;YACrC,QAAQ,GAAG,IAAI,CAAC;YAChB,aAAa,EAAE,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,eAAe,EAAE,CAAC,CAAC,2BAA2B;QAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,CAAC,6CAA6C;IAC9E,CAAC,CAAC;IAEF,OAAO;QACL,IAAI;QACJ,OAAO,EAAE,OAAkC;QAC3C,KAAK;QACL,OAAO;KACR,CAAC;AACJ,CAAC"}
|
package/dist/signal.d.ts
CHANGED
|
@@ -91,3 +91,23 @@ export declare function untrack(fn: () => void): void;
|
|
|
91
91
|
export declare function flush(): void;
|
|
92
92
|
/** Backward compat alias for tests. */
|
|
93
93
|
export { flush as flushEffects };
|
|
94
|
+
/**
|
|
95
|
+
* Settle the synchronous effect cascade AND all MICROTASK-scheduled work
|
|
96
|
+
* pending at await time (content-projection sweeps, query/command initial
|
|
97
|
+
* passes — at any queueMicrotask depth), plus the effects that work
|
|
98
|
+
* schedules. Replaces the hand-rolled `flush(); await Promise.resolve();
|
|
99
|
+
* flush()` and double-`flushEffects()` idioms.
|
|
100
|
+
*
|
|
101
|
+
* Bounded contract — deliberately NOT awaited: timers and other future
|
|
102
|
+
* TASKS scheduled by that microtask work (e.g. a microtask calling
|
|
103
|
+
* setTimeout) may fire after tick() resolves; awaiting arbitrary future
|
|
104
|
+
* tasks is unbounded. Self-perpetuating schedulers are cut off at the
|
|
105
|
+
* iteration cap.
|
|
106
|
+
*
|
|
107
|
+
* ```ts
|
|
108
|
+
* host.setProp('x', 1);
|
|
109
|
+
* await tick();
|
|
110
|
+
* expect(el.textContent).toBe('1');
|
|
111
|
+
* ```
|
|
112
|
+
*/
|
|
113
|
+
export declare function tick(): Promise<void>;
|
package/dist/signal.js
CHANGED
|
@@ -150,8 +150,12 @@ class ComputedImpl {
|
|
|
150
150
|
if (!Object.is(this._node.value, newValue)) {
|
|
151
151
|
this._node.value = newValue;
|
|
152
152
|
this._node.lastChanged = ++globalEpoch;
|
|
153
|
-
//
|
|
154
|
-
|
|
153
|
+
// NOTE: no notifyObservers() here. This update() is a *lazy* recompute
|
|
154
|
+
// triggered by a read; every downstream observer was already marked
|
|
155
|
+
// dirty / scheduled eagerly when the source signal changed (notify()
|
|
156
|
+
// propagates through the computed chain). Re-notifying here would
|
|
157
|
+
// re-schedule the very effect performing this read — a spurious
|
|
158
|
+
// double-run that only surfaced once flush() began draining cascades.
|
|
155
159
|
}
|
|
156
160
|
}
|
|
157
161
|
finally {
|
|
@@ -396,8 +400,54 @@ export function untrack(fn) {
|
|
|
396
400
|
* flush() is idempotent: calling it with no pending effects is a no-op.
|
|
397
401
|
*/
|
|
398
402
|
export function flush() {
|
|
399
|
-
|
|
403
|
+
// Drain cascades: an effect may write a signal that schedules more effects
|
|
404
|
+
// (e.g. A computes → B renders). Loop until the queue is empty so a single
|
|
405
|
+
// flush() settles the whole synchronous cascade — no double-flush idiom.
|
|
406
|
+
// Bounded to mirror the effect-loop guard; a runaway is a bug, not silence.
|
|
407
|
+
let guard = 0;
|
|
408
|
+
while (pendingEffects.size > 0) {
|
|
409
|
+
flushPendingEffects();
|
|
410
|
+
if (++guard > 100000)
|
|
411
|
+
break;
|
|
412
|
+
}
|
|
400
413
|
}
|
|
401
414
|
/** Backward compat alias for tests. */
|
|
402
415
|
export { flush as flushEffects };
|
|
416
|
+
/**
|
|
417
|
+
* Settle the synchronous effect cascade AND all MICROTASK-scheduled work
|
|
418
|
+
* pending at await time (content-projection sweeps, query/command initial
|
|
419
|
+
* passes — at any queueMicrotask depth), plus the effects that work
|
|
420
|
+
* schedules. Replaces the hand-rolled `flush(); await Promise.resolve();
|
|
421
|
+
* flush()` and double-`flushEffects()` idioms.
|
|
422
|
+
*
|
|
423
|
+
* Bounded contract — deliberately NOT awaited: timers and other future
|
|
424
|
+
* TASKS scheduled by that microtask work (e.g. a microtask calling
|
|
425
|
+
* setTimeout) may fire after tick() resolves; awaiting arbitrary future
|
|
426
|
+
* tasks is unbounded. Self-perpetuating schedulers are cut off at the
|
|
427
|
+
* iteration cap.
|
|
428
|
+
*
|
|
429
|
+
* ```ts
|
|
430
|
+
* host.setProp('x', 1);
|
|
431
|
+
* await tick();
|
|
432
|
+
* expect(el.textContent).toBe('1');
|
|
433
|
+
* ```
|
|
434
|
+
*/
|
|
435
|
+
export async function tick() {
|
|
436
|
+
flush(); // drain the synchronous effect cascade first
|
|
437
|
+
// Each iteration crosses a MACROTASK boundary (setTimeout 0). Doing so runs
|
|
438
|
+
// the ENTIRE microtask queue to completion first — including microtasks a
|
|
439
|
+
// microtask schedules, at any depth — so a 3-deep `queueMicrotask` chain is
|
|
440
|
+
// fully drained before the timer fires. After the drain we flush the effects
|
|
441
|
+
// that work scheduled. When a full iteration schedules no effects, the queue
|
|
442
|
+
// is quiescent and we return. Contract: microtask-scheduled work + effect
|
|
443
|
+
// cascades pending at await time settle; TIMER-scheduled work does not
|
|
444
|
+
// (see the doc above — bounded by design). The iteration cap is a
|
|
445
|
+
// documented backstop for self-perpetuating schedulers, not a silent hang.
|
|
446
|
+
for (let i = 0; i < 50; i++) {
|
|
447
|
+
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
448
|
+
if (pendingEffects.size === 0)
|
|
449
|
+
return; // the microtask drain scheduled nothing
|
|
450
|
+
flush();
|
|
451
|
+
}
|
|
452
|
+
}
|
|
403
453
|
//# sourceMappingURL=signal.js.map
|
package/dist/signal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signal.js","sourceRoot":"","sources":["../src/signal.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"signal.js","sourceRoot":"","sources":["../src/signal.ts"],"names":[],"mappings":"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"}
|
package/dist/template.d.ts
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
* 2. Updates: signal changes trigger individual binding updates (O(1))
|
|
11
11
|
*/
|
|
12
12
|
import { type ReadonlySignal } from './signal.js';
|
|
13
|
+
import { type Ref } from './ref.js';
|
|
13
14
|
export interface TemplateResult {
|
|
14
15
|
/** Mount this template into a host element */
|
|
15
16
|
mount(host: HTMLElement): void;
|
|
@@ -18,6 +19,8 @@ export interface TemplateResult {
|
|
|
18
19
|
/** Brand for type checking */
|
|
19
20
|
__templateResult: true;
|
|
20
21
|
}
|
|
22
|
+
/** A DOM event handler whose event type is inferred from its native event name. */
|
|
23
|
+
export type TypedEventHandler<K extends keyof HTMLElementEventMap> = (event: HTMLElementEventMap[K]) => void;
|
|
21
24
|
/**
|
|
22
25
|
* Tagged template literal for creating reactive DOM templates.
|
|
23
26
|
*
|
|
@@ -47,3 +50,44 @@ export declare function html(strings: TemplateStringsArray, ...values: unknown[]
|
|
|
47
50
|
*/
|
|
48
51
|
export declare function each<T>(items: ReadonlySignal<T[]>, keyFn: (item: T, index: number) => string | number, templateFn: (item: ReadonlySignal<T>, index: ReadonlySignal<number>) => TemplateResult): TemplateResult;
|
|
49
52
|
export declare function when(condition: unknown, template: TemplateResult | (() => TemplateResult)): TemplateResult | ReadonlySignal<TemplateResult | null> | null;
|
|
53
|
+
/** A value bindable to an `el()` attribute — static or reactive. */
|
|
54
|
+
type ElAttrValue = string | number | boolean | null | undefined | ReadonlySignal<unknown>;
|
|
55
|
+
export interface ElProps {
|
|
56
|
+
/** Assigned to `.current` on mount, nulled on dispose. */
|
|
57
|
+
ref?: Ref;
|
|
58
|
+
/** Event handlers by native event name; auto-removed on dispose. */
|
|
59
|
+
on?: Record<string, EventListener>;
|
|
60
|
+
/** Any other key is an HTML attribute (static or signal → reactive). */
|
|
61
|
+
[attr: string]: ElAttrValue | Ref | Record<string, EventListener> | undefined;
|
|
62
|
+
}
|
|
63
|
+
/** A child accepted by `el()` — anything an `html` text slot accepts, plus arrays. */
|
|
64
|
+
export type ElChild = string | number | boolean | null | undefined | TemplateResult | ReadonlySignal<unknown> | {
|
|
65
|
+
__type: 'factory';
|
|
66
|
+
} | ElChild[];
|
|
67
|
+
/**
|
|
68
|
+
* Build a DOM element by a (possibly *dynamic*) tag name with reactive
|
|
69
|
+
* attributes, event handlers, and children, returned as a mountable/disposable
|
|
70
|
+
* `TemplateResult` — so it composes in an `html` slot:
|
|
71
|
+
* `` html`${el(tag, { class: cls }, children)}` ``.
|
|
72
|
+
*
|
|
73
|
+
* `el()` is the "author plain HTML programmatically" primitive. It exists for
|
|
74
|
+
* the one thing `html` cannot express — a tag name chosen at runtime — while
|
|
75
|
+
* the `html` PARSER STAYS 100% STATIC: `el()` is a separate construction path
|
|
76
|
+
* that shares `html`'s binding helpers (`bindPlainAttribute`, `bindClassAttribute`,
|
|
77
|
+
* `bindEvent`, and the `replaceMarkerWithBinding` slot mounter). Prefer `html`
|
|
78
|
+
* for static tags and typed factories for typed composition.
|
|
79
|
+
*
|
|
80
|
+
* Semantics (ADR 0025 item 11):
|
|
81
|
+
* - Props are **HTML attributes**: `class` uses the reactive class binder, every
|
|
82
|
+
* other key uses `setAttribute` with `html`'s boolean/null rules — NEVER
|
|
83
|
+
* `_setProp`. A framework component tag reached via `el()` receives its values
|
|
84
|
+
* as attributes and resolves them through its `attr()`/`boolAttr()` fallbacks.
|
|
85
|
+
* - `ref` assigns `.current`; `on: { event: handler }` adds auto-removed listeners.
|
|
86
|
+
* - Children accept the full `html` text-slot range — string/number, signals
|
|
87
|
+
* (reactive text or reactive template slot), `TemplateResult`, factory results,
|
|
88
|
+
* and arrays — via the shared slot mounter.
|
|
89
|
+
* - v1 is HTML-only: SVG/namespaced tags (`createElementNS`) are deferred until a
|
|
90
|
+
* real consumer needs them.
|
|
91
|
+
*/
|
|
92
|
+
export declare function el(tag: string, props?: ElProps, children?: ElChild | ElChild[]): TemplateResult;
|
|
93
|
+
export {};
|