@pyreon/reactivity 0.5.6 → 0.5.7
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/lib/types/index.d.ts +324 -852
- package/lib/types/index.d.ts.map +1 -1
- package/package.json +1 -1
package/lib/types/index.d.ts
CHANGED
|
@@ -1,884 +1,356 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
try {
|
|
4
|
-
fn();
|
|
5
|
-
} finally {
|
|
6
|
-
batchDepth--;
|
|
7
|
-
if (batchDepth === 0 && pendingNotifications.size > 0) {
|
|
8
|
-
const flush = pendingNotifications;
|
|
9
|
-
pendingNotifications = flush === setA ? setB : setA;
|
|
10
|
-
for (const notify of flush) notify();
|
|
11
|
-
flush.clear();
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
function isBatching() {
|
|
16
|
-
return batchDepth > 0;
|
|
17
|
-
}
|
|
18
|
-
function enqueuePendingNotification(notify) {
|
|
19
|
-
pendingNotifications.add(notify);
|
|
20
|
-
}
|
|
1
|
+
//#region src/batch.d.ts
|
|
2
|
+
declare function batch(fn: () => void): void;
|
|
21
3
|
/**
|
|
22
|
-
* Returns a Promise that resolves after all currently-pending microtasks have flushed.
|
|
23
|
-
* Useful when you need to read the DOM after a batch of signal updates has settled.
|
|
24
|
-
*
|
|
25
|
-
* @example
|
|
26
|
-
* count.set(1); count.set(2)
|
|
27
|
-
* await nextTick()
|
|
28
|
-
* // DOM is now up-to-date
|
|
29
|
-
*/
|
|
30
|
-
function nextTick()
|
|
31
|
-
return new Promise(resolve => queueMicrotask(resolve));
|
|
32
|
-
}
|
|
33
|
-
|
|
4
|
+
* Returns a Promise that resolves after all currently-pending microtasks have flushed.
|
|
5
|
+
* Useful when you need to read the DOM after a batch of signal updates has settled.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* count.set(1); count.set(2)
|
|
9
|
+
* await nextTick()
|
|
10
|
+
* // DOM is now up-to-date
|
|
11
|
+
*/
|
|
12
|
+
declare function nextTick(): Promise<void>;
|
|
34
13
|
//#endregion
|
|
35
|
-
//#region src/cell.ts
|
|
14
|
+
//#region src/cell.d.ts
|
|
36
15
|
/**
|
|
37
|
-
* Lightweight reactive cell — class-based alternative to signal().
|
|
38
|
-
*
|
|
39
|
-
* - 1 object allocation vs signal()'s 6 closures
|
|
40
|
-
* - Same API surface: peek(), set(), update(), subscribe(), listen()
|
|
41
|
-
* - NOT callable as a getter (no effect tracking) — use for fixed subscriptions
|
|
42
|
-
* - Methods on prototype, shared across all instances
|
|
43
|
-
* - Single-listener fast path: no Set allocated when ≤1 subscriber
|
|
44
|
-
*
|
|
45
|
-
* Use when you need reactive state but don't need automatic effect dependency tracking.
|
|
46
|
-
* Ideal for list item labels in keyed reconcilers where subscribe() is used directly.
|
|
47
|
-
*/
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
16
|
+
* Lightweight reactive cell — class-based alternative to signal().
|
|
17
|
+
*
|
|
18
|
+
* - 1 object allocation vs signal()'s 6 closures
|
|
19
|
+
* - Same API surface: peek(), set(), update(), subscribe(), listen()
|
|
20
|
+
* - NOT callable as a getter (no effect tracking) — use for fixed subscriptions
|
|
21
|
+
* - Methods on prototype, shared across all instances
|
|
22
|
+
* - Single-listener fast path: no Set allocated when ≤1 subscriber
|
|
23
|
+
*
|
|
24
|
+
* Use when you need reactive state but don't need automatic effect dependency tracking.
|
|
25
|
+
* Ideal for list item labels in keyed reconcilers where subscribe() is used directly.
|
|
26
|
+
*/
|
|
27
|
+
declare class Cell<T> {
|
|
28
|
+
/** @internal */
|
|
29
|
+
_v: T;
|
|
30
|
+
/** @internal */
|
|
31
|
+
_l: (() => void) | null;
|
|
32
|
+
/** @internal */
|
|
33
|
+
_s: Set<() => void> | null;
|
|
34
|
+
constructor(value: T);
|
|
35
|
+
peek(): T;
|
|
36
|
+
set(value: T): void;
|
|
37
|
+
update(fn: (current: T) => T): void;
|
|
38
|
+
/**
|
|
39
|
+
* Fire-and-forget subscription — no unsubscribe returned.
|
|
40
|
+
* Use when the listener's lifetime matches the cell's (e.g., list rows).
|
|
41
|
+
* Saves 1 closure allocation per call vs subscribe().
|
|
42
|
+
*/
|
|
43
|
+
listen(listener: () => void): void;
|
|
44
|
+
subscribe(listener: () => void): () => void;
|
|
45
|
+
}
|
|
46
|
+
declare function cell<T>(value: T): Cell<T>;
|
|
53
47
|
//#endregion
|
|
54
|
-
//#region src/
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
48
|
+
//#region src/computed.d.ts
|
|
49
|
+
interface Computed<T> {
|
|
50
|
+
(): T;
|
|
51
|
+
/** Remove this computed from all its reactive dependencies. */
|
|
52
|
+
dispose(): void;
|
|
53
|
+
}
|
|
54
|
+
interface ComputedOptions<T> {
|
|
55
|
+
/**
|
|
56
|
+
* Custom equality function. When provided, the computed eagerly re-evaluates
|
|
57
|
+
* on dependency change and only notifies downstream if `equals(prev, next)`
|
|
58
|
+
* returns false. Useful for derived objects/arrays to skip spurious updates.
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* const sorted = computed(() => items().slice().sort(), {
|
|
62
|
+
* equals: (a, b) => a.length === b.length && a.every((v, i) => v === b[i])
|
|
63
|
+
* })
|
|
64
|
+
*/
|
|
65
|
+
equals?: (prev: T, next: T) => boolean;
|
|
66
|
+
}
|
|
67
|
+
declare function computed<T>(fn: () => T, options?: ComputedOptions<T>): Computed<T>;
|
|
67
68
|
//#endregion
|
|
68
|
-
//#region src/
|
|
69
|
-
|
|
70
|
-
function setDepsCollector(collector) {
|
|
71
|
-
_depsCollector = collector;
|
|
72
|
-
}
|
|
73
|
-
function setSkipDepsCollection(skip) {
|
|
74
|
-
_skipDepsCollection = skip;
|
|
75
|
-
}
|
|
69
|
+
//#region src/createSelector.d.ts
|
|
76
70
|
/**
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
effectDeps.set(activeEffect, deps);
|
|
91
|
-
}
|
|
92
|
-
deps.add(host._s);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Remove an effect from every subscriber set it was registered in,
|
|
98
|
-
* then clear its dep record. Call this before each re-run and on dispose.
|
|
99
|
-
*/
|
|
100
|
-
function cleanupEffect(fn) {
|
|
101
|
-
const deps = effectDeps.get(fn);
|
|
102
|
-
if (deps) {
|
|
103
|
-
for (const sub of deps) sub.delete(fn);
|
|
104
|
-
deps.clear();
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
function notifySubscribers(subscribers) {
|
|
108
|
-
if (subscribers.size === 0) return;
|
|
109
|
-
if (subscribers.size === 1) {
|
|
110
|
-
const sub = subscribers.values().next().value;
|
|
111
|
-
if (isBatching()) enqueuePendingNotification(sub);else sub();
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
if (isBatching()) for (const sub of subscribers) enqueuePendingNotification(sub);else {
|
|
115
|
-
const originalSize = subscribers.size;
|
|
116
|
-
let i = 0;
|
|
117
|
-
for (const sub of subscribers) {
|
|
118
|
-
if (i >= originalSize) break;
|
|
119
|
-
sub();
|
|
120
|
-
i++;
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
function withTracking(fn, compute) {
|
|
125
|
-
const prev = activeEffect;
|
|
126
|
-
activeEffect = fn;
|
|
127
|
-
try {
|
|
128
|
-
return compute();
|
|
129
|
-
} finally {
|
|
130
|
-
activeEffect = prev;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
function _setActiveEffect(fn) {
|
|
134
|
-
_prevEffect = activeEffect;
|
|
135
|
-
activeEffect = fn;
|
|
136
|
-
}
|
|
137
|
-
function _restoreActiveEffect() {
|
|
138
|
-
activeEffect = _prevEffect;
|
|
139
|
-
_prevEffect = null;
|
|
140
|
-
}
|
|
141
|
-
function runUntracked(fn) {
|
|
142
|
-
const prev = activeEffect;
|
|
143
|
-
activeEffect = null;
|
|
144
|
-
try {
|
|
145
|
-
return fn();
|
|
146
|
-
} finally {
|
|
147
|
-
activeEffect = prev;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
|
|
71
|
+
* Create an equality selector — returns a reactive predicate that is true
|
|
72
|
+
* only for the currently selected value.
|
|
73
|
+
*
|
|
74
|
+
* Unlike a plain `() => source() === value`, this only triggers the TWO
|
|
75
|
+
* affected subscribers (deselected + newly selected) instead of ALL
|
|
76
|
+
* subscribers, making selection O(1) regardless of list size.
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* const isSelected = createSelector(selectedId)
|
|
80
|
+
* // In each row:
|
|
81
|
+
* class: () => (isSelected(row.id) ? "selected" : "")
|
|
82
|
+
*/
|
|
83
|
+
declare function createSelector<T>(source: () => T): (value: T) => boolean;
|
|
151
84
|
//#endregion
|
|
152
|
-
//#region src/
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
/**
|
|
159
|
-
|
|
160
|
-
setDepsCollector(deps);
|
|
161
|
-
const result = withTracking(effect, fn);
|
|
162
|
-
setDepsCollector(null);
|
|
163
|
-
return result;
|
|
164
|
-
}
|
|
165
|
-
function computed(fn, options) {
|
|
166
|
-
return options?.equals ? computedWithEquals(fn, options.equals) : computedLazy(fn);
|
|
85
|
+
//#region src/signal.d.ts
|
|
86
|
+
interface SignalDebugInfo<T> {
|
|
87
|
+
/** Signal name (set via options or inferred) */
|
|
88
|
+
name: string | undefined;
|
|
89
|
+
/** Current value (same as peek()) */
|
|
90
|
+
value: T;
|
|
91
|
+
/** Number of active subscribers */
|
|
92
|
+
subscriberCount: number;
|
|
167
93
|
}
|
|
168
94
|
/**
|
|
169
|
-
*
|
|
170
|
-
*
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
*/
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
dirty = false;
|
|
204
|
-
}
|
|
205
|
-
return value;
|
|
206
|
-
};
|
|
207
|
-
read.dispose = () => {
|
|
208
|
-
disposed = true;
|
|
209
|
-
cleanupLocalDeps$1(deps, recompute);
|
|
210
|
-
};
|
|
211
|
-
getCurrentScope()?.add({
|
|
212
|
-
dispose: read.dispose
|
|
213
|
-
});
|
|
214
|
-
return read;
|
|
95
|
+
* Read-only reactive value — the common interface that both Signal and Computed satisfy.
|
|
96
|
+
* Use this as the parameter type when a function only needs to read a reactive value.
|
|
97
|
+
*/
|
|
98
|
+
interface ReadonlySignal<T> {
|
|
99
|
+
(): T;
|
|
100
|
+
}
|
|
101
|
+
interface Signal<T> {
|
|
102
|
+
(): T;
|
|
103
|
+
/** Read the current value WITHOUT registering a reactive dependency. */
|
|
104
|
+
peek(): T;
|
|
105
|
+
set(value: T): void;
|
|
106
|
+
update(fn: (current: T) => T): void;
|
|
107
|
+
/**
|
|
108
|
+
* Subscribe a static listener directly — no effect overhead (no withTracking,
|
|
109
|
+
* no cleanupEffect, no effectDeps WeakMap). Use when the dependency is fixed
|
|
110
|
+
* and dynamic re-tracking is not needed.
|
|
111
|
+
* Returns a disposer that removes the subscription.
|
|
112
|
+
*/
|
|
113
|
+
subscribe(listener: () => void): () => void;
|
|
114
|
+
/**
|
|
115
|
+
* Register a direct updater — even lighter than subscribe().
|
|
116
|
+
* Uses a flat array instead of Set. Disposal nulls the slot (no Set.delete).
|
|
117
|
+
* Intended for compiler-emitted DOM bindings (_bindText, _bindDirect).
|
|
118
|
+
* Returns a disposer that nulls the slot.
|
|
119
|
+
*/
|
|
120
|
+
direct(updater: () => void): () => void;
|
|
121
|
+
/** Debug name — useful for devtools and logging. */
|
|
122
|
+
label: string | undefined;
|
|
123
|
+
/** Returns a snapshot of the signal's debug info (value, name, subscriber count). */
|
|
124
|
+
debug(): SignalDebugInfo<T>;
|
|
125
|
+
}
|
|
126
|
+
interface SignalOptions {
|
|
127
|
+
/** Debug name for this signal — shows up in devtools and debug() output. */
|
|
128
|
+
name?: string;
|
|
215
129
|
}
|
|
216
130
|
/**
|
|
217
|
-
*
|
|
218
|
-
*
|
|
219
|
-
*
|
|
220
|
-
*
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
let dirty = true;
|
|
225
|
-
let initialized = false;
|
|
226
|
-
let disposed = false;
|
|
227
|
-
const deps = [];
|
|
228
|
-
const host = {
|
|
229
|
-
_s: null
|
|
230
|
-
};
|
|
231
|
-
const recompute = () => {
|
|
232
|
-
if (disposed) return;
|
|
233
|
-
cleanupLocalDeps$1(deps, recompute);
|
|
234
|
-
const next = trackWithLocalDeps(deps, recompute, fn);
|
|
235
|
-
if (initialized && equals(value, next)) return;
|
|
236
|
-
value = next;
|
|
237
|
-
dirty = false;
|
|
238
|
-
initialized = true;
|
|
239
|
-
if (host._s) notifySubscribers(host._s);
|
|
240
|
-
};
|
|
241
|
-
const read = () => {
|
|
242
|
-
trackSubscriber(host);
|
|
243
|
-
if (dirty) {
|
|
244
|
-
cleanupLocalDeps$1(deps, recompute);
|
|
245
|
-
value = trackWithLocalDeps(deps, recompute, fn);
|
|
246
|
-
dirty = false;
|
|
247
|
-
initialized = true;
|
|
248
|
-
}
|
|
249
|
-
return value;
|
|
250
|
-
};
|
|
251
|
-
read.dispose = () => {
|
|
252
|
-
disposed = true;
|
|
253
|
-
cleanupLocalDeps$1(deps, recompute);
|
|
254
|
-
cleanupEffect(recompute);
|
|
255
|
-
};
|
|
256
|
-
getCurrentScope()?.add({
|
|
257
|
-
dispose: read.dispose
|
|
258
|
-
});
|
|
259
|
-
return read;
|
|
260
|
-
}
|
|
261
|
-
|
|
131
|
+
* Create a reactive signal.
|
|
132
|
+
*
|
|
133
|
+
* Only 1 closure is allocated (the read function). State is stored as
|
|
134
|
+
* properties on the function object (_v, _s) and methods (peek, set,
|
|
135
|
+
* update, subscribe) are shared across all signals — not per-signal closures.
|
|
136
|
+
*/
|
|
137
|
+
declare function signal<T>(initialValue: T, options?: SignalOptions): Signal<T>;
|
|
262
138
|
//#endregion
|
|
263
|
-
//#region src/
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
const scope = getCurrentScope();
|
|
280
|
-
let disposed = false;
|
|
281
|
-
let isFirstRun = true;
|
|
282
|
-
let cleanup;
|
|
283
|
-
const deps = [];
|
|
284
|
-
const runCleanup = () => {
|
|
285
|
-
if (typeof cleanup === "function") {
|
|
286
|
-
try {
|
|
287
|
-
cleanup();
|
|
288
|
-
} catch (err) {
|
|
289
|
-
_errorHandler(err);
|
|
290
|
-
}
|
|
291
|
-
cleanup = void 0;
|
|
292
|
-
}
|
|
293
|
-
};
|
|
294
|
-
const run = () => {
|
|
295
|
-
if (disposed) return;
|
|
296
|
-
runCleanup();
|
|
297
|
-
try {
|
|
298
|
-
cleanupLocalDeps(deps, run);
|
|
299
|
-
setDepsCollector(deps);
|
|
300
|
-
cleanup = withTracking(run, fn) || void 0;
|
|
301
|
-
setDepsCollector(null);
|
|
302
|
-
} catch (err) {
|
|
303
|
-
setDepsCollector(null);
|
|
304
|
-
_errorHandler(err);
|
|
305
|
-
}
|
|
306
|
-
if (!isFirstRun) scope?.notifyEffectRan();
|
|
307
|
-
isFirstRun = false;
|
|
308
|
-
};
|
|
309
|
-
run();
|
|
310
|
-
const e = {
|
|
311
|
-
dispose() {
|
|
312
|
-
runCleanup();
|
|
313
|
-
disposed = true;
|
|
314
|
-
cleanupLocalDeps(deps, run);
|
|
315
|
-
}
|
|
316
|
-
};
|
|
317
|
-
getCurrentScope()?.add(e);
|
|
318
|
-
return e;
|
|
319
|
-
}
|
|
139
|
+
//#region src/debug.d.ts
|
|
140
|
+
interface SignalUpdateEvent {
|
|
141
|
+
/** The signal that changed */
|
|
142
|
+
signal: Signal<unknown>;
|
|
143
|
+
/** Signal name (from options or label) */
|
|
144
|
+
name: string | undefined;
|
|
145
|
+
/** Previous value */
|
|
146
|
+
prev: unknown;
|
|
147
|
+
/** New value */
|
|
148
|
+
next: unknown;
|
|
149
|
+
/** Stack trace at the point of the .set() / .update() call */
|
|
150
|
+
stack: string;
|
|
151
|
+
/** Timestamp */
|
|
152
|
+
timestamp: number;
|
|
153
|
+
}
|
|
154
|
+
type SignalUpdateListener = (event: SignalUpdateEvent) => void;
|
|
320
155
|
/**
|
|
321
|
-
*
|
|
322
|
-
*
|
|
323
|
-
*
|
|
324
|
-
*
|
|
325
|
-
*
|
|
326
|
-
*
|
|
327
|
-
*
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
* Returns a dispose function (not an Effect object — saves 1 allocation).
|
|
331
|
-
*/
|
|
156
|
+
* Register a listener that fires on every signal write.
|
|
157
|
+
* Returns a dispose function.
|
|
158
|
+
*
|
|
159
|
+
* @example
|
|
160
|
+
* const dispose = onSignalUpdate(e => {
|
|
161
|
+
* console.log(`${e.name ?? 'anonymous'}: ${e.prev} → ${e.next}`)
|
|
162
|
+
* })
|
|
163
|
+
*/
|
|
164
|
+
declare function onSignalUpdate(listener: SignalUpdateListener): () => void;
|
|
332
165
|
/**
|
|
333
|
-
*
|
|
334
|
-
*
|
|
335
|
-
*
|
|
336
|
-
*
|
|
337
|
-
*
|
|
338
|
-
*
|
|
339
|
-
*
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
* - No deps iteration + Set.delete (cleanup)
|
|
343
|
-
* - No setDepsCollector + withTracking (re-registration)
|
|
344
|
-
* - Signal reads hit `if (activeEffect)` null check → instant return
|
|
345
|
-
*/
|
|
346
|
-
function _bind(fn) {
|
|
347
|
-
const deps = [];
|
|
348
|
-
let disposed = false;
|
|
349
|
-
const run = () => {
|
|
350
|
-
if (disposed) return;
|
|
351
|
-
fn();
|
|
352
|
-
};
|
|
353
|
-
setDepsCollector(deps);
|
|
354
|
-
withTracking(run, fn);
|
|
355
|
-
setDepsCollector(null);
|
|
356
|
-
const dispose = () => {
|
|
357
|
-
if (disposed) return;
|
|
358
|
-
disposed = true;
|
|
359
|
-
for (const s of deps) s.delete(run);
|
|
360
|
-
deps.length = 0;
|
|
361
|
-
};
|
|
362
|
-
getCurrentScope()?.add({
|
|
363
|
-
dispose
|
|
364
|
-
});
|
|
365
|
-
return dispose;
|
|
366
|
-
}
|
|
367
|
-
/** Full re-track path for renderEffect: cleanup old deps, evaluate with tracking. */
|
|
368
|
-
function renderEffectFullTrack(deps, run, fn) {
|
|
369
|
-
if (deps.length === 1) {
|
|
370
|
-
deps[0].delete(run);
|
|
371
|
-
deps.length = 0;
|
|
372
|
-
} else if (deps.length > 1) {
|
|
373
|
-
for (const s of deps) s.delete(run);
|
|
374
|
-
deps.length = 0;
|
|
375
|
-
}
|
|
376
|
-
setDepsCollector(deps);
|
|
377
|
-
_setActiveEffect(run);
|
|
378
|
-
try {
|
|
379
|
-
fn();
|
|
380
|
-
} finally {
|
|
381
|
-
_restoreActiveEffect();
|
|
382
|
-
setDepsCollector(null);
|
|
383
|
-
}
|
|
384
|
-
}
|
|
385
|
-
function renderEffect(fn) {
|
|
386
|
-
const deps = [];
|
|
387
|
-
let disposed = false;
|
|
388
|
-
const run = () => {
|
|
389
|
-
if (disposed) return;
|
|
390
|
-
renderEffectFullTrack(deps, run, fn);
|
|
391
|
-
};
|
|
392
|
-
run();
|
|
393
|
-
const dispose = () => {
|
|
394
|
-
if (disposed) return;
|
|
395
|
-
disposed = true;
|
|
396
|
-
if (deps.length === 1) deps[0].delete(run);else for (const s of deps) s.delete(run);
|
|
397
|
-
deps.length = 0;
|
|
398
|
-
};
|
|
399
|
-
getCurrentScope()?.add({
|
|
400
|
-
dispose
|
|
401
|
-
});
|
|
402
|
-
return dispose;
|
|
403
|
-
}
|
|
404
|
-
|
|
405
|
-
//#endregion
|
|
406
|
-
//#region src/createSelector.ts
|
|
166
|
+
* Trace the next signal update. Logs which signals fire and what changed.
|
|
167
|
+
* Call before triggering a state change to see what updates and why.
|
|
168
|
+
*
|
|
169
|
+
* @example
|
|
170
|
+
* why()
|
|
171
|
+
* count.set(5)
|
|
172
|
+
* // Console: [pyreon:why] "count": 3 → 5 (2 subscribers)
|
|
173
|
+
*/
|
|
174
|
+
declare function why(): void;
|
|
407
175
|
/**
|
|
408
|
-
*
|
|
409
|
-
*
|
|
410
|
-
*
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
let i = 0;
|
|
420
|
-
for (const fn of bucket) {
|
|
421
|
-
if (i >= originalSize) break;
|
|
422
|
-
fn();
|
|
423
|
-
i++;
|
|
424
|
-
}
|
|
425
|
-
}
|
|
426
|
-
/**
|
|
427
|
-
* Create an equality selector — returns a reactive predicate that is true
|
|
428
|
-
* only for the currently selected value.
|
|
429
|
-
*
|
|
430
|
-
* Unlike a plain `() => source() === value`, this only triggers the TWO
|
|
431
|
-
* affected subscribers (deselected + newly selected) instead of ALL
|
|
432
|
-
* subscribers, making selection O(1) regardless of list size.
|
|
433
|
-
*
|
|
434
|
-
* @example
|
|
435
|
-
* const isSelected = createSelector(selectedId)
|
|
436
|
-
* // In each row:
|
|
437
|
-
* class: () => (isSelected(row.id) ? "selected" : "")
|
|
438
|
-
*/
|
|
439
|
-
function createSelector(source) {
|
|
440
|
-
const subs = /* @__PURE__ */new Map();
|
|
441
|
-
let current;
|
|
442
|
-
let initialized = false;
|
|
443
|
-
effect(() => {
|
|
444
|
-
const next = source();
|
|
445
|
-
if (!initialized) {
|
|
446
|
-
initialized = true;
|
|
447
|
-
current = next;
|
|
448
|
-
return;
|
|
449
|
-
}
|
|
450
|
-
if (Object.is(next, current)) return;
|
|
451
|
-
const old = current;
|
|
452
|
-
current = next;
|
|
453
|
-
const oldBucket = subs.get(old);
|
|
454
|
-
const newBucket = subs.get(next);
|
|
455
|
-
if (oldBucket) notifyBucket(oldBucket);
|
|
456
|
-
if (newBucket) notifyBucket(newBucket);
|
|
457
|
-
});
|
|
458
|
-
const hosts = /* @__PURE__ */new Map();
|
|
459
|
-
return value => {
|
|
460
|
-
let host = hosts.get(value);
|
|
461
|
-
if (!host) {
|
|
462
|
-
let bucket = subs.get(value);
|
|
463
|
-
if (!bucket) {
|
|
464
|
-
bucket = /* @__PURE__ */new Set();
|
|
465
|
-
subs.set(value, bucket);
|
|
466
|
-
}
|
|
467
|
-
host = {
|
|
468
|
-
_s: bucket
|
|
469
|
-
};
|
|
470
|
-
hosts.set(value, host);
|
|
471
|
-
}
|
|
472
|
-
trackSubscriber(host);
|
|
473
|
-
return Object.is(current, value);
|
|
474
|
-
};
|
|
475
|
-
}
|
|
476
|
-
|
|
176
|
+
* Print a signal's current state to the console in a readable format.
|
|
177
|
+
*
|
|
178
|
+
* @example
|
|
179
|
+
* const count = signal(42, { name: "count" })
|
|
180
|
+
* inspectSignal(count)
|
|
181
|
+
* // Console:
|
|
182
|
+
* // 🔍 Signal "count"
|
|
183
|
+
* // value: 42
|
|
184
|
+
* // subscribers: 3
|
|
185
|
+
*/
|
|
186
|
+
declare function inspectSignal<T>(sig: Signal<T>): SignalDebugInfo<T>;
|
|
477
187
|
//#endregion
|
|
478
|
-
//#region src/
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
* Register a listener that fires on every signal write.
|
|
482
|
-
* Returns a dispose function.
|
|
483
|
-
*
|
|
484
|
-
* @example
|
|
485
|
-
* const dispose = onSignalUpdate(e => {
|
|
486
|
-
* console.log(`${e.name ?? 'anonymous'}: ${e.prev} → ${e.next}`)
|
|
487
|
-
* })
|
|
488
|
-
*/
|
|
489
|
-
function onSignalUpdate(listener) {
|
|
490
|
-
if (!_traceListeners) _traceListeners = [];
|
|
491
|
-
_traceListeners.push(listener);
|
|
492
|
-
return () => {
|
|
493
|
-
if (!_traceListeners) return;
|
|
494
|
-
_traceListeners = _traceListeners.filter(l => l !== listener);
|
|
495
|
-
if (_traceListeners.length === 0) _traceListeners = null;
|
|
496
|
-
};
|
|
497
|
-
}
|
|
498
|
-
/** @internal — called from signal.set() when tracing is active */
|
|
499
|
-
function _notifyTraceListeners(sig, prev, next) {
|
|
500
|
-
if (!_traceListeners) return;
|
|
501
|
-
const event = {
|
|
502
|
-
signal: sig,
|
|
503
|
-
name: sig.label,
|
|
504
|
-
prev,
|
|
505
|
-
next,
|
|
506
|
-
stack: (/* @__PURE__ */new Error()).stack ?? "",
|
|
507
|
-
timestamp: performance.now()
|
|
508
|
-
};
|
|
509
|
-
for (const l of _traceListeners) l(event);
|
|
510
|
-
}
|
|
511
|
-
/** Check if any trace listeners are active (fast path for signal.set) */
|
|
512
|
-
function isTracing() {
|
|
513
|
-
return _traceListeners !== null;
|
|
188
|
+
//#region src/effect.d.ts
|
|
189
|
+
interface Effect {
|
|
190
|
+
dispose(): void;
|
|
514
191
|
}
|
|
192
|
+
declare function setErrorHandler(fn: (err: unknown) => void): void;
|
|
193
|
+
declare function effect(fn: () => (() => void) | void): Effect;
|
|
515
194
|
/**
|
|
516
|
-
*
|
|
517
|
-
*
|
|
518
|
-
*
|
|
519
|
-
*
|
|
520
|
-
*
|
|
521
|
-
*
|
|
522
|
-
*
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
_whyLog = [];
|
|
528
|
-
const dispose = onSignalUpdate(e => {
|
|
529
|
-
const _subCount = e.signal._s?.size ?? 0;
|
|
530
|
-
const _name = e.name ? `"${e.name}"` : "(anonymous signal)";
|
|
531
|
-
console.log(`[pyreon:why] ${_name}: ${JSON.stringify(e.prev)} → ${JSON.stringify(e.next)} (${_subCount} subscriber${_subCount === 1 ? "" : "s"})`);
|
|
532
|
-
_whyLog.push({
|
|
533
|
-
name: e.name,
|
|
534
|
-
prev: e.prev,
|
|
535
|
-
next: e.next
|
|
536
|
-
});
|
|
537
|
-
});
|
|
538
|
-
queueMicrotask(() => {
|
|
539
|
-
dispose();
|
|
540
|
-
if (_whyLog.length === 0) console.log("[pyreon:why] No signal updates detected");
|
|
541
|
-
_whyActive = false;
|
|
542
|
-
_whyLog = [];
|
|
543
|
-
});
|
|
544
|
-
}
|
|
195
|
+
* Lightweight effect for DOM render bindings.
|
|
196
|
+
*
|
|
197
|
+
* Differences from `effect()`:
|
|
198
|
+
* - No EffectScope registration (caller owns the dispose lifecycle)
|
|
199
|
+
* - No error handler (errors propagate naturally)
|
|
200
|
+
* - No onUpdate notification
|
|
201
|
+
* - Deps stored in a local array instead of the global WeakMap — faster
|
|
202
|
+
* creation and disposal (~200ns saved per effect vs WeakMap path)
|
|
203
|
+
*
|
|
204
|
+
* Returns a dispose function (not an Effect object — saves 1 allocation).
|
|
205
|
+
*/
|
|
545
206
|
/**
|
|
546
|
-
*
|
|
547
|
-
*
|
|
548
|
-
*
|
|
549
|
-
*
|
|
550
|
-
*
|
|
551
|
-
*
|
|
552
|
-
*
|
|
553
|
-
*
|
|
554
|
-
*
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
console.groupEnd();
|
|
562
|
-
return info;
|
|
563
|
-
}
|
|
564
|
-
|
|
207
|
+
* Static-dep binding — compiler helper for template expressions.
|
|
208
|
+
*
|
|
209
|
+
* Like renderEffect but assumes dependencies never change (true for all
|
|
210
|
+
* compiler-emitted template bindings like `_tpl()` text/attribute updates).
|
|
211
|
+
*
|
|
212
|
+
* Tracks dependencies only on the first run. Re-runs skip cleanup, re-tracking,
|
|
213
|
+
* and tracking context save/restore entirely — just calls `fn()` directly.
|
|
214
|
+
*
|
|
215
|
+
* Per re-run savings vs renderEffect:
|
|
216
|
+
* - No deps iteration + Set.delete (cleanup)
|
|
217
|
+
* - No setDepsCollector + withTracking (re-registration)
|
|
218
|
+
* - Signal reads hit `if (activeEffect)` null check → instant return
|
|
219
|
+
*/
|
|
220
|
+
declare function _bind(fn: () => void): () => void;
|
|
221
|
+
declare function renderEffect(fn: () => void): () => void;
|
|
565
222
|
//#endregion
|
|
566
|
-
//#region src/
|
|
567
|
-
function _peek() {
|
|
568
|
-
return this._v;
|
|
569
|
-
}
|
|
570
|
-
function _set(newValue) {
|
|
571
|
-
if (Object.is(this._v, newValue)) return;
|
|
572
|
-
const prev = this._v;
|
|
573
|
-
this._v = newValue;
|
|
574
|
-
if (isTracing()) _notifyTraceListeners(this, prev, newValue);
|
|
575
|
-
if (this._d) notifyDirect(this._d);
|
|
576
|
-
if (this._s) notifySubscribers(this._s);
|
|
577
|
-
}
|
|
578
|
-
function _update(fn) {
|
|
579
|
-
_set.call(this, fn(this._v));
|
|
580
|
-
}
|
|
581
|
-
function _subscribe(listener) {
|
|
582
|
-
if (!this._s) this._s = /* @__PURE__ */new Set();
|
|
583
|
-
this._s.add(listener);
|
|
584
|
-
return () => this._s?.delete(listener);
|
|
585
|
-
}
|
|
223
|
+
//#region src/reconcile.d.ts
|
|
586
224
|
/**
|
|
587
|
-
*
|
|
588
|
-
*
|
|
589
|
-
*
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
}
|
|
600
|
-
|
|
601
|
-
*
|
|
602
|
-
*
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
225
|
+
* reconcile — surgically diff new state into an existing createStore proxy.
|
|
226
|
+
*
|
|
227
|
+
* Instead of replacing the store root (which would trigger all downstream effects),
|
|
228
|
+
* reconcile walks both the new value and the store in parallel and only calls
|
|
229
|
+
* `.set()` on signals whose value actually changed.
|
|
230
|
+
*
|
|
231
|
+
* Ideal for applying API responses to a long-lived store:
|
|
232
|
+
*
|
|
233
|
+
* @example
|
|
234
|
+
* const state = createStore({ user: { name: "Alice", age: 30 }, items: [] })
|
|
235
|
+
*
|
|
236
|
+
* // API response arrives:
|
|
237
|
+
* reconcile({ user: { name: "Alice", age: 31 }, items: [{ id: 1 }] }, state)
|
|
238
|
+
* // → only state.user.age signal fires (name unchanged)
|
|
239
|
+
* // → state.items[0] is newly created
|
|
240
|
+
*
|
|
241
|
+
* Arrays are reconciled by index — elements at the same index are recursively
|
|
242
|
+
* diffed rather than replaced wholesale. Excess old elements are removed.
|
|
243
|
+
*/
|
|
244
|
+
declare function reconcile<T extends object>(source: T, target: T): void;
|
|
245
|
+
//#endregion
|
|
246
|
+
//#region src/resource.d.ts
|
|
247
|
+
interface Resource<T> {
|
|
248
|
+
/** The latest resolved value (undefined while loading or on error). */
|
|
249
|
+
data: Signal<T | undefined>;
|
|
250
|
+
/** True while a fetch is in flight. */
|
|
251
|
+
loading: Signal<boolean>;
|
|
252
|
+
/** The last error thrown by the fetcher, or undefined. */
|
|
253
|
+
error: Signal<unknown>;
|
|
254
|
+
/** Re-run the fetcher with the current source value. */
|
|
255
|
+
refetch(): void;
|
|
616
256
|
}
|
|
617
257
|
/**
|
|
618
|
-
*
|
|
619
|
-
*
|
|
620
|
-
*
|
|
621
|
-
*
|
|
622
|
-
*
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
258
|
+
* Async data primitive. Fetches data reactively whenever `source()` changes.
|
|
259
|
+
*
|
|
260
|
+
* @example
|
|
261
|
+
* const userId = signal(1)
|
|
262
|
+
* const user = createResource(userId, (id) => fetchUser(id))
|
|
263
|
+
* // user.data() — the fetched user (undefined while loading)
|
|
264
|
+
* // user.loading() — true while in flight
|
|
265
|
+
* // user.error() — last error
|
|
266
|
+
*/
|
|
267
|
+
declare function createResource<T, P>(source: () => P, fetcher: (param: P) => Promise<T>): Resource<T>;
|
|
268
|
+
//#endregion
|
|
269
|
+
//#region src/scope.d.ts
|
|
270
|
+
declare class EffectScope {
|
|
271
|
+
private _effects;
|
|
272
|
+
private _active;
|
|
273
|
+
private _updateHooks;
|
|
274
|
+
private _updatePending;
|
|
275
|
+
/** Register an effect/computed to be disposed when this scope stops. */
|
|
276
|
+
add(e: {
|
|
277
|
+
dispose(): void;
|
|
278
|
+
}): void;
|
|
279
|
+
/**
|
|
280
|
+
* Temporarily re-activate this scope so effects created inside `fn` are
|
|
281
|
+
* auto-tracked and will be disposed when the scope stops.
|
|
282
|
+
* Used to ensure effects created in `onMount` callbacks belong to their
|
|
283
|
+
* component's scope rather than leaking as global effects.
|
|
284
|
+
*/
|
|
285
|
+
runInScope<T>(fn: () => T): T;
|
|
286
|
+
/** Register a callback to run after any reactive update in this scope. */
|
|
287
|
+
addUpdateHook(fn: () => void): void;
|
|
288
|
+
/**
|
|
289
|
+
* Called by effects after each non-initial re-run.
|
|
290
|
+
* Schedules onUpdate hooks via microtask so all synchronous effects settle first.
|
|
291
|
+
*/
|
|
292
|
+
notifyEffectRan(): void;
|
|
293
|
+
/** Dispose all tracked effects. */
|
|
294
|
+
stop(): void;
|
|
295
|
+
}
|
|
296
|
+
declare function getCurrentScope(): EffectScope | null;
|
|
297
|
+
declare function setCurrentScope(scope: EffectScope | null): void;
|
|
298
|
+
/** Create a new EffectScope. */
|
|
299
|
+
declare function effectScope(): EffectScope;
|
|
642
300
|
//#endregion
|
|
643
|
-
//#region src/store.ts
|
|
301
|
+
//#region src/store.d.ts
|
|
644
302
|
/**
|
|
645
|
-
* createStore — deep reactive Proxy store.
|
|
646
|
-
*
|
|
647
|
-
* Wraps a plain object/array in a Proxy that creates a fine-grained signal for
|
|
648
|
-
* every property. Direct mutations (`store.count++`, `store.items[0].label = "x"`)
|
|
649
|
-
* trigger only the signals for the mutated properties — not the whole tree.
|
|
650
|
-
*
|
|
651
|
-
* @example
|
|
652
|
-
* const state = createStore({ count: 0, items: [{ id: 1, text: "hello" }] })
|
|
653
|
-
*
|
|
654
|
-
* effect(() => console.log(state.count)) // tracks state.count only
|
|
655
|
-
* state.count++ // only the count effect re-runs
|
|
656
|
-
* state.items[0].text = "world" // only text-tracking effects re-run
|
|
657
|
-
*/
|
|
658
|
-
|
|
303
|
+
* createStore — deep reactive Proxy store.
|
|
304
|
+
*
|
|
305
|
+
* Wraps a plain object/array in a Proxy that creates a fine-grained signal for
|
|
306
|
+
* every property. Direct mutations (`store.count++`, `store.items[0].label = "x"`)
|
|
307
|
+
* trigger only the signals for the mutated properties — not the whole tree.
|
|
308
|
+
*
|
|
309
|
+
* @example
|
|
310
|
+
* const state = createStore({ count: 0, items: [{ id: 1, text: "hello" }] })
|
|
311
|
+
*
|
|
312
|
+
* effect(() => console.log(state.count)) // tracks state.count only
|
|
313
|
+
* state.count++ // only the count effect re-runs
|
|
314
|
+
* state.items[0].text = "world" // only text-tracking effects re-run
|
|
315
|
+
*/
|
|
659
316
|
/** Returns true if the value is a createStore proxy. */
|
|
660
|
-
function isStore(value)
|
|
661
|
-
return value !== null && typeof value === "object" && value[IS_STORE] === true;
|
|
662
|
-
}
|
|
317
|
+
declare function isStore(value: unknown): boolean;
|
|
663
318
|
/**
|
|
664
|
-
* Create a deep reactive store from a plain object or array.
|
|
665
|
-
* Returns a proxy — mutations to the proxy trigger fine-grained reactive updates.
|
|
666
|
-
*/
|
|
667
|
-
function createStore(initial)
|
|
668
|
-
return wrap(initial);
|
|
669
|
-
}
|
|
670
|
-
function wrap(raw) {
|
|
671
|
-
const cached = proxyCache.get(raw);
|
|
672
|
-
if (cached) return cached;
|
|
673
|
-
const propSignals = /* @__PURE__ */new Map();
|
|
674
|
-
const isArray = Array.isArray(raw);
|
|
675
|
-
const lengthSig = isArray ? signal(raw.length) : null;
|
|
676
|
-
function getOrCreateSignal(key) {
|
|
677
|
-
if (!propSignals.has(key)) propSignals.set(key, signal(raw[key]));
|
|
678
|
-
return propSignals.get(key);
|
|
679
|
-
}
|
|
680
|
-
const proxy = new Proxy(raw, {
|
|
681
|
-
get(target, key) {
|
|
682
|
-
if (key === IS_STORE) return true;
|
|
683
|
-
if (typeof key === "symbol") return target[key];
|
|
684
|
-
if (isArray && key === "length") return lengthSig?.();
|
|
685
|
-
if (!Object.hasOwn(target, key)) return target[key];
|
|
686
|
-
const value = getOrCreateSignal(key)();
|
|
687
|
-
if (value !== null && typeof value === "object") return wrap(value);
|
|
688
|
-
return value;
|
|
689
|
-
},
|
|
690
|
-
set(target, key, value) {
|
|
691
|
-
if (typeof key === "symbol") {
|
|
692
|
-
target[key] = value;
|
|
693
|
-
return true;
|
|
694
|
-
}
|
|
695
|
-
const prevLength = isArray ? target.length : 0;
|
|
696
|
-
target[key] = value;
|
|
697
|
-
if (isArray && key === "length") {
|
|
698
|
-
lengthSig?.set(value);
|
|
699
|
-
return true;
|
|
700
|
-
}
|
|
701
|
-
if (propSignals.has(key)) propSignals.get(key)?.set(value);else propSignals.set(key, signal(value));
|
|
702
|
-
if (isArray && target.length !== prevLength) lengthSig?.set(target.length);
|
|
703
|
-
return true;
|
|
704
|
-
},
|
|
705
|
-
deleteProperty(target, key) {
|
|
706
|
-
delete target[key];
|
|
707
|
-
if (typeof key !== "symbol" && propSignals.has(key)) {
|
|
708
|
-
propSignals.get(key)?.set(void 0);
|
|
709
|
-
propSignals.delete(key);
|
|
710
|
-
}
|
|
711
|
-
if (isArray) lengthSig?.set(target.length);
|
|
712
|
-
return true;
|
|
713
|
-
},
|
|
714
|
-
has(target, key) {
|
|
715
|
-
return Reflect.has(target, key);
|
|
716
|
-
},
|
|
717
|
-
ownKeys(target) {
|
|
718
|
-
return Reflect.ownKeys(target);
|
|
719
|
-
},
|
|
720
|
-
getOwnPropertyDescriptor(target, key) {
|
|
721
|
-
return Reflect.getOwnPropertyDescriptor(target, key);
|
|
722
|
-
}
|
|
723
|
-
});
|
|
724
|
-
proxyCache.set(raw, proxy);
|
|
725
|
-
return proxy;
|
|
726
|
-
}
|
|
727
|
-
|
|
319
|
+
* Create a deep reactive store from a plain object or array.
|
|
320
|
+
* Returns a proxy — mutations to the proxy trigger fine-grained reactive updates.
|
|
321
|
+
*/
|
|
322
|
+
declare function createStore<T extends object>(initial: T): T;
|
|
728
323
|
//#endregion
|
|
729
|
-
//#region src/
|
|
730
|
-
|
|
731
|
-
* reconcile — surgically diff new state into an existing createStore proxy.
|
|
732
|
-
*
|
|
733
|
-
* Instead of replacing the store root (which would trigger all downstream effects),
|
|
734
|
-
* reconcile walks both the new value and the store in parallel and only calls
|
|
735
|
-
* `.set()` on signals whose value actually changed.
|
|
736
|
-
*
|
|
737
|
-
* Ideal for applying API responses to a long-lived store:
|
|
738
|
-
*
|
|
739
|
-
* @example
|
|
740
|
-
* const state = createStore({ user: { name: "Alice", age: 30 }, items: [] })
|
|
741
|
-
*
|
|
742
|
-
* // API response arrives:
|
|
743
|
-
* reconcile({ user: { name: "Alice", age: 31 }, items: [{ id: 1 }] }, state)
|
|
744
|
-
* // → only state.user.age signal fires (name unchanged)
|
|
745
|
-
* // → state.items[0] is newly created
|
|
746
|
-
*
|
|
747
|
-
* Arrays are reconciled by index — elements at the same index are recursively
|
|
748
|
-
* diffed rather than replaced wholesale. Excess old elements are removed.
|
|
749
|
-
*/
|
|
750
|
-
function reconcile(source, target) {
|
|
751
|
-
_reconcileInner(source, target, /* @__PURE__ */new WeakSet());
|
|
752
|
-
}
|
|
753
|
-
function _reconcileInner(source, target, seen) {
|
|
754
|
-
if (seen.has(source)) return;
|
|
755
|
-
seen.add(source);
|
|
756
|
-
if (Array.isArray(source) && Array.isArray(target)) _reconcileArray(source, target, seen);else _reconcileObject(source, target, seen);
|
|
757
|
-
}
|
|
758
|
-
function _reconcileArray(source, target, seen) {
|
|
759
|
-
const targetLen = target.length;
|
|
760
|
-
const sourceLen = source.length;
|
|
761
|
-
for (let i = 0; i < sourceLen; i++) {
|
|
762
|
-
const sv = source[i];
|
|
763
|
-
const tv = target[i];
|
|
764
|
-
if (i < targetLen && sv !== null && typeof sv === "object" && tv !== null && typeof tv === "object") _reconcileInner(sv, tv, seen);else target[i] = sv;
|
|
765
|
-
}
|
|
766
|
-
if (targetLen > sourceLen) target.length = sourceLen;
|
|
767
|
-
}
|
|
768
|
-
function _reconcileObject(source, target, seen) {
|
|
769
|
-
const sourceKeys = Object.keys(source);
|
|
770
|
-
const targetKeys = new Set(Object.keys(target));
|
|
771
|
-
for (const key of sourceKeys) {
|
|
772
|
-
const sv = source[key];
|
|
773
|
-
const tv = target[key];
|
|
774
|
-
if (sv !== null && typeof sv === "object" && tv !== null && typeof tv === "object") {
|
|
775
|
-
if (isStore(tv)) _reconcileInner(sv, tv, seen);else target[key] = sv;
|
|
776
|
-
} else target[key] = sv;
|
|
777
|
-
targetKeys.delete(key);
|
|
778
|
-
}
|
|
779
|
-
for (const key of targetKeys) delete target[key];
|
|
780
|
-
}
|
|
781
|
-
|
|
324
|
+
//#region src/tracking.d.ts
|
|
325
|
+
declare function runUntracked<T>(fn: () => T): T;
|
|
782
326
|
//#endregion
|
|
783
|
-
//#region src/
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
* @example
|
|
788
|
-
* const userId = signal(1)
|
|
789
|
-
* const user = createResource(userId, (id) => fetchUser(id))
|
|
790
|
-
* // user.data() — the fetched user (undefined while loading)
|
|
791
|
-
* // user.loading() — true while in flight
|
|
792
|
-
* // user.error() — last error
|
|
793
|
-
*/
|
|
794
|
-
function createResource(source, fetcher) {
|
|
795
|
-
const data = signal(void 0);
|
|
796
|
-
const loading = signal(false);
|
|
797
|
-
const error = signal(void 0);
|
|
798
|
-
let requestId = 0;
|
|
799
|
-
const doFetch = param => {
|
|
800
|
-
const id = ++requestId;
|
|
801
|
-
loading.set(true);
|
|
802
|
-
error.set(void 0);
|
|
803
|
-
fetcher(param).then(result => {
|
|
804
|
-
if (id !== requestId) return;
|
|
805
|
-
data.set(result);
|
|
806
|
-
loading.set(false);
|
|
807
|
-
}).catch(err => {
|
|
808
|
-
if (id !== requestId) return;
|
|
809
|
-
error.set(err);
|
|
810
|
-
loading.set(false);
|
|
811
|
-
});
|
|
812
|
-
};
|
|
813
|
-
effect(() => {
|
|
814
|
-
const param = source();
|
|
815
|
-
runUntracked(() => doFetch(param));
|
|
816
|
-
});
|
|
817
|
-
return {
|
|
818
|
-
data,
|
|
819
|
-
loading,
|
|
820
|
-
error,
|
|
821
|
-
refetch() {
|
|
822
|
-
runUntracked(() => doFetch(source()));
|
|
823
|
-
}
|
|
824
|
-
};
|
|
327
|
+
//#region src/watch.d.ts
|
|
328
|
+
interface WatchOptions {
|
|
329
|
+
/** If true, call the callback immediately with the current value on setup. Default: false. */
|
|
330
|
+
immediate?: boolean;
|
|
825
331
|
}
|
|
826
|
-
|
|
827
|
-
//#endregion
|
|
828
|
-
//#region src/watch.ts
|
|
829
332
|
/**
|
|
830
|
-
* Watch a reactive source and run a callback whenever it changes.
|
|
831
|
-
*
|
|
832
|
-
* Returns a stop function that disposes the watcher.
|
|
833
|
-
*
|
|
834
|
-
* The callback receives (newValue, oldValue). On the first call (when
|
|
835
|
-
* `immediate` is true) oldValue is `undefined`.
|
|
836
|
-
*
|
|
837
|
-
* The callback may return a cleanup function that is called before each
|
|
838
|
-
* re-run and on stop — useful for cancelling async work.
|
|
839
|
-
*
|
|
840
|
-
* @example
|
|
841
|
-
* const stop = watch(
|
|
842
|
-
* () => userId(),
|
|
843
|
-
* async (id, prev) => {
|
|
844
|
-
* const data = await fetch(`/api/user/${id}`)
|
|
845
|
-
* setUser(await data.json())
|
|
846
|
-
* },
|
|
847
|
-
* )
|
|
848
|
-
* // Later: stop()
|
|
849
|
-
*/
|
|
850
|
-
function watch(source, callback, opts
|
|
851
|
-
let oldVal;
|
|
852
|
-
let isFirst = true;
|
|
853
|
-
let cleanupFn;
|
|
854
|
-
const e = effect(() => {
|
|
855
|
-
const newVal = source();
|
|
856
|
-
if (isFirst) {
|
|
857
|
-
isFirst = false;
|
|
858
|
-
oldVal = newVal;
|
|
859
|
-
if (opts.immediate) {
|
|
860
|
-
const result = callback(newVal, void 0);
|
|
861
|
-
if (typeof result === "function") cleanupFn = result;
|
|
862
|
-
}
|
|
863
|
-
return;
|
|
864
|
-
}
|
|
865
|
-
if (cleanupFn) {
|
|
866
|
-
cleanupFn();
|
|
867
|
-
cleanupFn = void 0;
|
|
868
|
-
}
|
|
869
|
-
const result = callback(newVal, oldVal);
|
|
870
|
-
if (typeof result === "function") cleanupFn = result;
|
|
871
|
-
oldVal = newVal;
|
|
872
|
-
});
|
|
873
|
-
return () => {
|
|
874
|
-
e.dispose();
|
|
875
|
-
if (cleanupFn) {
|
|
876
|
-
cleanupFn();
|
|
877
|
-
cleanupFn = void 0;
|
|
878
|
-
}
|
|
879
|
-
};
|
|
880
|
-
}
|
|
881
|
-
|
|
333
|
+
* Watch a reactive source and run a callback whenever it changes.
|
|
334
|
+
*
|
|
335
|
+
* Returns a stop function that disposes the watcher.
|
|
336
|
+
*
|
|
337
|
+
* The callback receives (newValue, oldValue). On the first call (when
|
|
338
|
+
* `immediate` is true) oldValue is `undefined`.
|
|
339
|
+
*
|
|
340
|
+
* The callback may return a cleanup function that is called before each
|
|
341
|
+
* re-run and on stop — useful for cancelling async work.
|
|
342
|
+
*
|
|
343
|
+
* @example
|
|
344
|
+
* const stop = watch(
|
|
345
|
+
* () => userId(),
|
|
346
|
+
* async (id, prev) => {
|
|
347
|
+
* const data = await fetch(`/api/user/${id}`)
|
|
348
|
+
* setUser(await data.json())
|
|
349
|
+
* },
|
|
350
|
+
* )
|
|
351
|
+
* // Later: stop()
|
|
352
|
+
*/
|
|
353
|
+
declare function watch<T>(source: () => T, callback: (newVal: T, oldVal: T | undefined) => void | (() => void), opts?: WatchOptions): () => void;
|
|
882
354
|
//#endregion
|
|
883
|
-
export { Cell, EffectScope, _bind, batch, cell, computed, createResource, createSelector, createStore, effect, effectScope, getCurrentScope, inspectSignal, isStore, nextTick, onSignalUpdate, reconcile, renderEffect, runUntracked, setCurrentScope, setErrorHandler, signal, watch, why };
|
|
884
|
-
//# sourceMappingURL=
|
|
355
|
+
export { Cell, type Computed, type ComputedOptions, type Effect, EffectScope, type ReadonlySignal, type Resource, type Signal, type SignalDebugInfo, type SignalOptions, type WatchOptions, _bind, batch, cell, computed, createResource, createSelector, createStore, effect, effectScope, getCurrentScope, inspectSignal, isStore, nextTick, onSignalUpdate, reconcile, renderEffect, runUntracked, setCurrentScope, setErrorHandler, signal, watch, why };
|
|
356
|
+
//# sourceMappingURL=index2.d.ts.map
|
package/lib/types/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":["cleanupLocalDeps"],"sources":["../../../src/batch.ts","../../../src/cell.ts","../../../src/scope.ts","../../../src/tracking.ts","../../../src/computed.ts","../../../src/effect.ts","../../../src/createSelector.ts","../../../src/debug.ts","../../../src/signal.ts","../../../src/store.ts","../../../src/reconcile.ts","../../../src/resource.ts","../../../src/watch.ts"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index2.d.ts","names":[],"sources":["../../../src/batch.ts","../../../src/cell.ts","../../../src/computed.ts","../../../src/createSelector.ts","../../../src/signal.ts","../../../src/debug.ts","../../../src/effect.ts","../../../src/reconcile.ts","../../../src/resource.ts","../../../src/scope.ts","../../../src/store.ts","../../../src/tracking.ts","../../../src/watch.ts"],"mappings":"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"}
|