@rlabs-inc/signals 0.2.0 → 1.0.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.
@@ -0,0 +1,37 @@
1
+ /**
2
+ * A reactive Map with per-key granularity
3
+ *
4
+ * Three levels of reactivity:
5
+ * 1. Per-key signals: map.get('key') only tracks that specific key
6
+ * 2. Version signal: Tracks structural changes (add/delete)
7
+ * 3. Size signal: Tracks map size changes
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * const users = new ReactiveMap<string, User>()
12
+ *
13
+ * effect(() => {
14
+ * // Only re-runs when 'alice' changes
15
+ * console.log(users.get('alice'))
16
+ * })
17
+ *
18
+ * users.set('bob', { name: 'Bob' }) // Doesn't trigger above effect
19
+ * users.set('alice', { name: 'Alice Updated' }) // Triggers effect
20
+ * ```
21
+ */
22
+ export declare class ReactiveMap<K, V> extends Map<K, V> {
23
+ #private;
24
+ constructor(entries?: Iterable<readonly [K, V]> | null);
25
+ get size(): number;
26
+ has(key: K): boolean;
27
+ get(key: K): V | undefined;
28
+ set(key: K, value: V): this;
29
+ delete(key: K): boolean;
30
+ clear(): void;
31
+ keys(): MapIterator<K>;
32
+ values(): MapIterator<V>;
33
+ entries(): MapIterator<[K, V]>;
34
+ forEach(callbackfn: (value: V, key: K, map: Map<K, V>) => void, thisArg?: unknown): void;
35
+ [Symbol.iterator](): MapIterator<[K, V]>;
36
+ }
37
+ //# sourceMappingURL=map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../src/collections/map.ts"],"names":[],"mappings":"AAcA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,WAAW,CAAC,CAAC,EAAE,CAAC,CAAE,SAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;;gBAUlC,OAAO,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI;IA4BtD,IAAI,IAAI,IAAI,MAAM,CAGjB;IAMD,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAwBpB,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;IA0B1B,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAsC3B,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAwBvB,KAAK,IAAI,IAAI;IAmBb,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC;IAKtB,MAAM,IAAI,WAAW,CAAC,CAAC,CAAC;IAKxB,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAK9B,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI;IAKxF,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAGzC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * A reactive Set with per-item granularity
3
+ *
4
+ * Three levels of reactivity:
5
+ * 1. Per-item signals: set.has(item) only tracks that specific item
6
+ * 2. Version signal: Tracks structural changes (add/delete)
7
+ * 3. Size signal: Tracks set size changes
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * const tags = new ReactiveSet<string>()
12
+ *
13
+ * effect(() => {
14
+ * // Only re-runs when 'important' membership changes
15
+ * console.log('Is important:', tags.has('important'))
16
+ * })
17
+ *
18
+ * tags.add('todo') // Doesn't trigger above effect
19
+ * tags.add('important') // Triggers effect
20
+ * ```
21
+ */
22
+ export declare class ReactiveSet<T> extends Set<T> {
23
+ #private;
24
+ constructor(values?: Iterable<T> | null);
25
+ get size(): number;
26
+ has(item: T): boolean;
27
+ add(item: T): this;
28
+ delete(item: T): boolean;
29
+ clear(): void;
30
+ keys(): SetIterator<T>;
31
+ values(): SetIterator<T>;
32
+ entries(): SetIterator<[T, T]>;
33
+ forEach(callbackfn: (value: T, value2: T, set: Set<T>) => void, thisArg?: unknown): void;
34
+ [Symbol.iterator](): SetIterator<T>;
35
+ }
36
+ //# sourceMappingURL=set.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../../src/collections/set.ts"],"names":[],"mappings":"AAcA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,WAAW,CAAC,CAAC,CAAE,SAAQ,GAAG,CAAC,CAAC,CAAC;;gBAU5B,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI;IA4BvC,IAAI,IAAI,IAAI,MAAM,CAGjB;IAMD,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO;IA0BrB,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAmBlB,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO;IAuBxB,KAAK,IAAI,IAAI;IAmBb,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC;IAKtB,MAAM,IAAI,WAAW,CAAC,CAAC,CAAC;IAKxB,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAK9B,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI;IAKxF,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC;CAGpC"}
@@ -0,0 +1,47 @@
1
+ /** Signal is a derived value (computed) */
2
+ export declare const DERIVED: number;
3
+ /** Signal is an effect */
4
+ export declare const EFFECT: number;
5
+ /** Effect is a render effect ($effect.pre) - runs before DOM updates */
6
+ export declare const RENDER_EFFECT: number;
7
+ /** Effect is a root effect (created via effect.root()) */
8
+ export declare const ROOT_EFFECT: number;
9
+ /** Effect is a branch effect (if/each blocks) */
10
+ export declare const BRANCH_EFFECT: number;
11
+ /** Effect is a user effect ($effect) */
12
+ export declare const USER_EFFECT: number;
13
+ /** Effect is a block effect */
14
+ export declare const BLOCK_EFFECT: number;
15
+ /** Signal/reaction is clean (up-to-date) */
16
+ export declare const CLEAN: number;
17
+ /** Signal/reaction is dirty (definitely needs update) */
18
+ export declare const DIRTY: number;
19
+ /** Signal/reaction might be dirty (needs to check dependencies) */
20
+ export declare const MAYBE_DIRTY: number;
21
+ /** Reaction is currently being updated */
22
+ export declare const REACTION_IS_UPDATING: number;
23
+ /** Effect has been destroyed */
24
+ export declare const DESTROYED: number;
25
+ /** Effect is inert (paused) */
26
+ export declare const INERT: number;
27
+ /** Effect has run at least once */
28
+ export declare const EFFECT_RAN: number;
29
+ /** Effect is preserved (not destroyed with parent) */
30
+ export declare const EFFECT_PRESERVED: number;
31
+ /** Derived has no owner (created outside effect) */
32
+ export declare const UNOWNED: number;
33
+ /** Derived is disconnected (no reactions, can be GC'd) */
34
+ export declare const DISCONNECTED: number;
35
+ /** Effect is an inspect effect (for $inspect) */
36
+ export declare const INSPECT_EFFECT: number;
37
+ /** Sentinel for uninitialized values (deleted properties, new deriveds) */
38
+ export declare const UNINITIALIZED: unique symbol;
39
+ /** Sentinel for stale reactions (aborted async work) */
40
+ export declare const STALE_REACTION: unique symbol;
41
+ /** Symbol to identify reactive proxies */
42
+ export declare const STATE_SYMBOL: unique symbol;
43
+ /** Symbol to mark reactive proxies */
44
+ export declare const REACTIVE_MARKER: unique symbol;
45
+ /** Mask to clear all status bits (CLEAN, DIRTY, MAYBE_DIRTY) */
46
+ export declare const STATUS_MASK: number;
47
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/core/constants.ts"],"names":[],"mappings":"AASA,2CAA2C;AAC3C,eAAO,MAAM,OAAO,QAAS,CAAA;AAE7B,0BAA0B;AAC1B,eAAO,MAAM,MAAM,QAAS,CAAA;AAE5B,wEAAwE;AACxE,eAAO,MAAM,aAAa,QAAS,CAAA;AAEnC,0DAA0D;AAC1D,eAAO,MAAM,WAAW,QAAS,CAAA;AAEjC,iDAAiD;AACjD,eAAO,MAAM,aAAa,QAAS,CAAA;AAEnC,wCAAwC;AACxC,eAAO,MAAM,WAAW,QAAS,CAAA;AAEjC,+BAA+B;AAC/B,eAAO,MAAM,YAAY,QAAS,CAAA;AAMlC,4CAA4C;AAC5C,eAAO,MAAM,KAAK,QAAU,CAAA;AAE5B,yDAAyD;AACzD,eAAO,MAAM,KAAK,QAAU,CAAA;AAE5B,mEAAmE;AACnE,eAAO,MAAM,WAAW,QAAU,CAAA;AAElC,0CAA0C;AAC1C,eAAO,MAAM,oBAAoB,QAAU,CAAA;AAE3C,gCAAgC;AAChC,eAAO,MAAM,SAAS,QAAU,CAAA;AAEhC,+BAA+B;AAC/B,eAAO,MAAM,KAAK,QAAU,CAAA;AAE5B,mCAAmC;AACnC,eAAO,MAAM,UAAU,QAAU,CAAA;AAEjC,sDAAsD;AACtD,eAAO,MAAM,gBAAgB,QAAU,CAAA;AAMvC,oDAAoD;AACpD,eAAO,MAAM,OAAO,QAAS,CAAA;AAE7B,0DAA0D;AAC1D,eAAO,MAAM,YAAY,QAAS,CAAA;AAMlC,iDAAiD;AACjD,eAAO,MAAM,cAAc,QAAU,CAAA;AAMrC,2EAA2E;AAC3E,eAAO,MAAM,aAAa,EAAE,OAAO,MAAkD,CAAA;AAErF,wDAAwD;AACxD,eAAO,MAAM,cAAc,EAAE,OAAO,MAAmD,CAAA;AAEvF,0CAA0C;AAC1C,eAAO,MAAM,YAAY,EAAE,OAAO,MAA0C,CAAA;AAE5E,sCAAsC;AACtC,eAAO,MAAM,eAAe,EAAE,OAAO,MAA6C,CAAA;AAMlF,gEAAgE;AAChE,eAAO,MAAM,WAAW,QAAiC,CAAA"}
@@ -0,0 +1,45 @@
1
+ import type { Reaction, Effect, Source } from './types.js';
2
+ /** Currently executing reaction (effect or derived) */
3
+ export declare let activeReaction: Reaction | null;
4
+ /** Currently executing effect */
5
+ export declare let activeEffect: Effect | null;
6
+ /** Whether we're currently untracking (reading without creating dependencies) */
7
+ export declare let untracking: boolean;
8
+ /** Global write version - incremented on every signal write */
9
+ export declare let writeVersion: number;
10
+ /** Global read version - incremented on every reaction run */
11
+ export declare let readVersion: number;
12
+ /** New dependencies collected during current reaction execution */
13
+ export declare let newDeps: Source[] | null;
14
+ /** Number of existing dependencies that matched (optimization) */
15
+ export declare let skippedDeps: number;
16
+ /** Signals written to during current reaction (for self-invalidation) */
17
+ export declare let untrackedWrites: Source[] | null;
18
+ /** Current batch depth (for nested batches) */
19
+ export declare let batchDepth: number;
20
+ /** Pending reactions to run after batch completes */
21
+ export declare let pendingReactions: Set<Reaction>;
22
+ /** Queued root effects to process */
23
+ export declare let queuedRootEffects: Effect[];
24
+ /** Whether we're currently flushing synchronously */
25
+ export declare let isFlushingSync: boolean;
26
+ export declare function setActiveReaction(reaction: Reaction | null): Reaction | null;
27
+ export declare function setActiveEffect(effect: Effect | null): Effect | null;
28
+ export declare function setUntracking(value: boolean): boolean;
29
+ export declare function incrementWriteVersion(): number;
30
+ export declare function incrementReadVersion(): number;
31
+ export declare function setNewDeps(deps: Source[] | null): Source[] | null;
32
+ export declare function setSkippedDeps(count: number): number;
33
+ export declare function setUntrackedWrites(writes: Source[] | null): Source[] | null;
34
+ export declare function addUntrackedWrite(signal: Source): void;
35
+ export declare function incrementBatchDepth(): number;
36
+ export declare function decrementBatchDepth(): number;
37
+ export declare function setIsFlushingSync(value: boolean): boolean;
38
+ export declare function clearPendingReactions(): void;
39
+ export declare function addPendingReaction(reaction: Reaction): void;
40
+ export declare function clearQueuedRootEffects(): Effect[];
41
+ export declare function addQueuedRootEffect(effect: Effect): void;
42
+ export declare function getReadVersion(): number;
43
+ export declare function getWriteVersion(): number;
44
+ export declare function getBatchDepth(): number;
45
+ //# sourceMappingURL=globals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"globals.d.ts","sourceRoot":"","sources":["../../src/core/globals.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAM1D,uDAAuD;AACvD,eAAO,IAAI,cAAc,EAAE,QAAQ,GAAG,IAAW,CAAA;AAEjD,iCAAiC;AACjC,eAAO,IAAI,YAAY,EAAE,MAAM,GAAG,IAAW,CAAA;AAE7C,iFAAiF;AACjF,eAAO,IAAI,UAAU,SAAQ,CAAA;AAM7B,+DAA+D;AAC/D,eAAO,IAAI,YAAY,QAAI,CAAA;AAE3B,8DAA8D;AAC9D,eAAO,IAAI,WAAW,QAAI,CAAA;AAM1B,mEAAmE;AACnE,eAAO,IAAI,OAAO,EAAE,MAAM,EAAE,GAAG,IAAW,CAAA;AAE1C,kEAAkE;AAClE,eAAO,IAAI,WAAW,QAAI,CAAA;AAE1B,yEAAyE;AACzE,eAAO,IAAI,eAAe,EAAE,MAAM,EAAE,GAAG,IAAW,CAAA;AAMlD,+CAA+C;AAC/C,eAAO,IAAI,UAAU,QAAI,CAAA;AAEzB,qDAAqD;AACrD,eAAO,IAAI,gBAAgB,EAAE,GAAG,CAAC,QAAQ,CAAa,CAAA;AAEtD,qCAAqC;AACrC,eAAO,IAAI,iBAAiB,EAAE,MAAM,EAAO,CAAA;AAE3C,qDAAqD;AACrD,eAAO,IAAI,cAAc,SAAQ,CAAA;AAMjC,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,GAAG,QAAQ,GAAG,IAAI,CAI5E;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAIpE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAIrD;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,GAAG,MAAM,EAAE,GAAG,IAAI,CAIjE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIpD;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,GAAG,MAAM,EAAE,GAAG,IAAI,CAI3E;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAMtD;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAIzD;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAE3D;AAED,wBAAgB,sBAAsB,IAAI,MAAM,EAAE,CAIjD;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAExD;AAMD,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
@@ -0,0 +1,76 @@
1
+ import type { UNINITIALIZED } from './constants.js';
2
+ /** Equality function for comparing signal values */
3
+ export type Equals<T = any> = (oldValue: any, newValue: any) => boolean;
4
+ /** Base interface for all reactive values */
5
+ export interface Signal {
6
+ /** Flags bitmask for state tracking */
7
+ f: number;
8
+ /** Write version - incremented when signal is written */
9
+ wv: number;
10
+ }
11
+ /** A reactive source (basic signal) */
12
+ export interface Source<T = unknown> extends Signal {
13
+ /** Current value */
14
+ v: T;
15
+ /** Equality function for comparing values */
16
+ equals: Equals<T>;
17
+ /** Reactions (effects/deriveds) that depend on this source */
18
+ reactions: Reaction[] | null;
19
+ /** Read version - for dependency deduplication */
20
+ rv: number;
21
+ }
22
+ /** Base interface for reactions (effects and deriveds) */
23
+ export interface Reaction extends Signal {
24
+ /** The function to execute */
25
+ fn: Function | null;
26
+ /** Dependencies (sources/deriveds this reaction reads) */
27
+ deps: Source[] | null;
28
+ }
29
+ /** A derived (computed) value */
30
+ export interface Derived<T = unknown> extends Source<T>, Reaction {
31
+ /** Computation function */
32
+ fn: () => T;
33
+ /** Child effects created inside this derived */
34
+ effects: Effect[] | null;
35
+ /** Parent effect or derived */
36
+ parent: Effect | Derived | null;
37
+ }
38
+ /** Cleanup function returned by effects */
39
+ export type CleanupFn = () => void;
40
+ /** Effect function signature */
41
+ export type EffectFn = () => void | CleanupFn;
42
+ /** An effect (side effect) */
43
+ export interface Effect extends Reaction {
44
+ /** Effect function */
45
+ fn: EffectFn | null;
46
+ /** Teardown/cleanup function from last run */
47
+ teardown: CleanupFn | null;
48
+ /** Parent effect in the effect tree */
49
+ parent: Effect | null;
50
+ /** First child effect */
51
+ first: Effect | null;
52
+ /** Last child effect */
53
+ last: Effect | null;
54
+ /** Previous sibling effect */
55
+ prev: Effect | null;
56
+ /** Next sibling effect */
57
+ next: Effect | null;
58
+ }
59
+ /** A value that can be read (source or derived) */
60
+ export type Value<T = unknown> = Source<T> | Derived<T>;
61
+ /** Read-only signal interface (public API) */
62
+ export interface ReadableSignal<T> {
63
+ readonly value: T;
64
+ }
65
+ /** Writable signal interface (public API) */
66
+ export interface WritableSignal<T> extends ReadableSignal<T> {
67
+ value: T;
68
+ }
69
+ /** Derived signal interface (public API) */
70
+ export interface DerivedSignal<T> extends ReadableSignal<T> {
71
+ }
72
+ /** Dispose function for effects */
73
+ export type DisposeFn = () => void;
74
+ /** Type for uninitialized values */
75
+ export type Uninitialized = typeof UNINITIALIZED;
76
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAMnD,oDAAoD;AAGpD,MAAM,MAAM,MAAM,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,KAAK,OAAO,CAAA;AAMvE,6CAA6C;AAC7C,MAAM,WAAW,MAAM;IACrB,uCAAuC;IACvC,CAAC,EAAE,MAAM,CAAA;IAET,yDAAyD;IACzD,EAAE,EAAE,MAAM,CAAA;CACX;AAMD,uCAAuC;AACvC,MAAM,WAAW,MAAM,CAAC,CAAC,GAAG,OAAO,CAAE,SAAQ,MAAM;IACjD,oBAAoB;IACpB,CAAC,EAAE,CAAC,CAAA;IAEJ,6CAA6C;IAC7C,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;IAEjB,8DAA8D;IAC9D,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAA;IAE5B,kDAAkD;IAClD,EAAE,EAAE,MAAM,CAAA;CACX;AAMD,0DAA0D;AAC1D,MAAM,WAAW,QAAS,SAAQ,MAAM;IACtC,8BAA8B;IAC9B,EAAE,EAAE,QAAQ,GAAG,IAAI,CAAA;IAEnB,0DAA0D;IAC1D,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;CACtB;AAMD,iCAAiC;AACjC,MAAM,WAAW,OAAO,CAAC,CAAC,GAAG,OAAO,CAAE,SAAQ,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ;IAC/D,2BAA2B;IAC3B,EAAE,EAAE,MAAM,CAAC,CAAA;IAEX,gDAAgD;IAChD,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IAExB,+BAA+B;IAC/B,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAAA;CAChC;AAMD,2CAA2C;AAC3C,MAAM,MAAM,SAAS,GAAG,MAAM,IAAI,CAAA;AAElC,gCAAgC;AAChC,MAAM,MAAM,QAAQ,GAAG,MAAM,IAAI,GAAG,SAAS,CAAA;AAE7C,8BAA8B;AAC9B,MAAM,WAAW,MAAO,SAAQ,QAAQ;IACtC,sBAAsB;IACtB,EAAE,EAAE,QAAQ,GAAG,IAAI,CAAA;IAEnB,8CAA8C;IAC9C,QAAQ,EAAE,SAAS,GAAG,IAAI,CAAA;IAE1B,uCAAuC;IACvC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IAErB,yBAAyB;IACzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IAEpB,wBAAwB;IACxB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IAEnB,8BAA8B;IAC9B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IAEnB,0BAA0B;IAC1B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CACpB;AAMD,mDAAmD;AACnD,MAAM,MAAM,KAAK,CAAC,CAAC,GAAG,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;AAMvD,8CAA8C;AAC9C,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;CAClB;AAED,6CAA6C;AAC7C,MAAM,WAAW,cAAc,CAAC,CAAC,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;IAC1D,KAAK,EAAE,CAAC,CAAA;CACT;AAED,4CAA4C;AAC5C,MAAM,WAAW,aAAa,CAAC,CAAC,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;CAAG;AAE9D,mCAAmC;AACnC,MAAM,MAAM,SAAS,GAAG,MAAM,IAAI,CAAA;AAMlC,oCAAoC;AACpC,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAA"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Create a deeply reactive proxy for an object or array
3
+ *
4
+ * Key features:
5
+ * 1. Per-property signals (lazy creation)
6
+ * 2. Version signal for structural changes (add/delete)
7
+ * 3. Recursive proxying of nested objects
8
+ * 4. Fine-grained reactivity at every level
9
+ */
10
+ export declare function proxy<T extends object>(value: T): T;
11
+ /**
12
+ * Get the raw (non-reactive) value from a proxy
13
+ */
14
+ export declare function toRaw<T>(value: T): T;
15
+ /**
16
+ * Check if a value is a reactive proxy
17
+ */
18
+ export declare function isReactive(value: unknown): boolean;
19
+ //# sourceMappingURL=proxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../src/deep/proxy.ts"],"names":[],"mappings":"AAoDA;;;;;;;;GAQG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CA2PnD;AAMD;;GAEG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAKpC;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAElD"}
package/dist/index.d.ts CHANGED
@@ -1,278 +1,15 @@
1
- /** Cleanup function returned by effects */
2
- export type CleanupFn = () => void;
3
- /** Effect function that may return a cleanup */
4
- export type EffectFn = () => void | CleanupFn;
5
- /** Equality function for comparing values */
6
- export type EqualityFn<T> = (a: T, b: T) => boolean;
7
- /** A reactive signal that holds a value */
8
- export interface Signal<T> {
9
- readonly value: T;
10
- }
11
- /** A writable reactive signal */
12
- export interface WritableSignal<T> extends Signal<T> {
13
- value: T;
14
- }
15
- /** A derived/computed signal (read-only) */
16
- export interface Derived<T> extends Signal<T> {
17
- readonly value: T;
18
- }
19
- /** Options for creating a signal */
20
- export interface SignalOptions<T> {
21
- equals?: EqualityFn<T>;
22
- }
23
- /** Default equality check using Object.is */
24
- export declare const defaultEquals: <T>(a: T, b: T) => boolean;
25
- /** Shallow equality for objects/arrays */
26
- export declare const shallowEquals: <T>(a: T, b: T) => boolean;
27
- /**
28
- * Create a reactive signal
29
- *
30
- * For objects and arrays, the signal is deeply reactive - mutations at any
31
- * depth will trigger effects.
32
- *
33
- * @example
34
- * ```ts
35
- * const count = signal(0)
36
- * console.log(count.value) // 0
37
- * count.value = 1
38
- * console.log(count.value) // 1
39
- *
40
- * // Deep reactivity for objects/arrays
41
- * const user = signal({ name: 'John', address: { city: 'NYC' } })
42
- * user.value.address.city = 'LA' // Triggers effects!
43
- *
44
- * const items = signal([[1, 2], [3, 4]])
45
- * items.value[0][1] = 99 // Triggers effects!
46
- * ```
47
- */
48
- export declare function signal<T>(initial: T, options?: SignalOptions<T>): WritableSignal<T>;
49
- /**
50
- * Create a reactive effect that re-runs when dependencies change
51
- *
52
- * @returns Dispose function to stop the effect
53
- *
54
- * @example
55
- * ```ts
56
- * const count = signal(0)
57
- * const dispose = effect(() => {
58
- * console.log('Count:', count.value)
59
- * })
60
- * // Logs: "Count: 0"
61
- *
62
- * count.value = 1
63
- * // Logs: "Count: 1"
64
- *
65
- * dispose() // Stop the effect
66
- * ```
67
- */
68
- export declare function effect(fn: EffectFn): CleanupFn;
69
- /**
70
- * Create a derived/computed value that automatically updates
71
- *
72
- * @example
73
- * ```ts
74
- * const count = signal(0)
75
- * const doubled = derived(() => count.value * 2)
76
- * console.log(doubled.value) // 0
77
- *
78
- * count.value = 5
79
- * console.log(doubled.value) // 10
80
- * ```
81
- */
82
- export declare function derived<T>(fn: () => T, options?: SignalOptions<T>): Derived<T>;
83
- export declare namespace derived {
84
- var by: typeof derived;
85
- }
86
- /**
87
- * Batch multiple updates into a single reaction cycle
88
- *
89
- * @example
90
- * ```ts
91
- * const a = signal(1)
92
- * const b = signal(2)
93
- *
94
- * effect(() => console.log(a.value + b.value))
95
- * // Logs: 3
96
- *
97
- * batch(() => {
98
- * a.value = 10
99
- * b.value = 20
100
- * })
101
- * // Logs: 30 (only once, not twice)
102
- * ```
103
- */
104
- export declare function batch<T>(fn: () => T): T;
105
- /**
106
- * Read signals without creating dependencies
107
- *
108
- * @example
109
- * ```ts
110
- * const a = signal(1)
111
- * const b = signal(2)
112
- *
113
- * effect(() => {
114
- * console.log(a.value) // Creates dependency
115
- * untrack(() => {
116
- * console.log(b.value) // Does NOT create dependency
117
- * })
118
- * })
119
- * ```
120
- */
121
- export declare function untrack<T>(fn: () => T): T;
122
- /**
123
- * Create a deeply reactive state object
124
- * All nested properties are automatically reactive
125
- *
126
- * @example
127
- * ```ts
128
- * const user = state({
129
- * name: 'John',
130
- * address: {
131
- * city: 'NYC'
132
- * }
133
- * })
134
- *
135
- * effect(() => {
136
- * console.log(user.address.city)
137
- * })
138
- * // Logs: "NYC"
139
- *
140
- * user.address.city = 'LA'
141
- * // Logs: "LA"
142
- * ```
143
- */
144
- export declare function state<T extends object>(initial: T): T;
145
- /**
146
- * Get the raw (non-reactive) version of a reactive object
147
- */
148
- export declare function toRaw<T>(proxy: T): T;
149
- /**
150
- * Check if a value is a reactive proxy
151
- */
152
- export declare function isReactive(value: unknown): boolean;
153
- /**
154
- * A reactive Map that triggers updates on modifications
155
- *
156
- * @example
157
- * ```ts
158
- * const map = new ReactiveMap<string, number>()
159
- *
160
- * effect(() => {
161
- * console.log('Size:', map.size)
162
- * console.log('Has foo:', map.has('foo'))
163
- * })
164
- *
165
- * map.set('foo', 42) // Triggers effect
166
- * ```
167
- */
168
- export declare class ReactiveMap<K, V> extends Map<K, V> {
169
- #private;
170
- constructor(entries?: Iterable<readonly [K, V]> | null);
171
- get size(): number;
172
- has(key: K): boolean;
173
- get(key: K): V | undefined;
174
- set(key: K, value: V): this;
175
- delete(key: K): boolean;
176
- clear(): void;
177
- forEach(callbackfn: (value: V, key: K, map: Map<K, V>) => void, thisArg?: any): void;
178
- keys(): MapIterator<K>;
179
- values(): MapIterator<V>;
180
- entries(): MapIterator<[K, V]>;
181
- [Symbol.iterator](): MapIterator<[K, V]>;
182
- }
183
- /**
184
- * A reactive Set that triggers updates on modifications
185
- *
186
- * @example
187
- * ```ts
188
- * const set = new ReactiveSet<string>()
189
- *
190
- * effect(() => {
191
- * console.log('Size:', set.size)
192
- * console.log('Has foo:', set.has('foo'))
193
- * })
194
- *
195
- * set.add('foo') // Triggers effect
196
- * ```
197
- */
198
- export declare class ReactiveSet<T> extends Set<T> {
199
- #private;
200
- constructor(values?: Iterable<T> | null);
201
- get size(): number;
202
- has(value: T): boolean;
203
- add(value: T): this;
204
- delete(value: T): boolean;
205
- clear(): void;
206
- forEach(callbackfn: (value: T, value2: T, set: Set<T>) => void, thisArg?: any): void;
207
- keys(): SetIterator<T>;
208
- values(): SetIterator<T>;
209
- entries(): SetIterator<[T, T]>;
210
- [Symbol.iterator](): SetIterator<T>;
211
- }
212
- /**
213
- * Create a reactive array with fine-grained reactivity
214
- *
215
- * @example
216
- * ```ts
217
- * const items = reactiveArray([1, 2, 3])
218
- *
219
- * effect(() => {
220
- * console.log('Length:', items.length)
221
- * console.log('First:', items[0])
222
- * })
223
- *
224
- * items.push(4) // Triggers effect
225
- * items[0] = 10 // Triggers effect
226
- * ```
227
- */
228
- export declare function reactiveArray<T>(initial?: T[]): T[];
229
- /**
230
- * Create an effect scope for grouping and disposing multiple effects
231
- *
232
- * @example
233
- * ```ts
234
- * const scope = effectScope()
235
- *
236
- * scope.run(() => {
237
- * effect(() => console.log('Effect 1'))
238
- * effect(() => console.log('Effect 2'))
239
- * })
240
- *
241
- * scope.stop() // Disposes all effects in the scope
242
- * ```
243
- */
244
- export declare function effectScope(): {
245
- run<T>(fn: () => T): T | undefined;
246
- stop(): void;
247
- readonly active: boolean;
248
- };
249
- /**
250
- * Watch a signal or derived and call callback when it changes
251
- * Like effect but only runs the callback, not for initial subscription
252
- *
253
- * @example
254
- * ```ts
255
- * const count = signal(0)
256
- *
257
- * watch(
258
- * () => count.value,
259
- * (newValue, oldValue) => {
260
- * console.log(`Changed from ${oldValue} to ${newValue}`)
261
- * }
262
- * )
263
- *
264
- * count.value = 1 // Logs: "Changed from 0 to 1"
265
- * ```
266
- */
267
- export declare function watch<T>(source: () => T, callback: (newValue: T, oldValue: T | undefined) => void | CleanupFn, options?: {
268
- immediate?: boolean;
269
- }): CleanupFn;
270
- /**
271
- * Create a readonly signal from a writable signal
272
- */
273
- export declare function readonly<T>(sig: WritableSignal<T>): Signal<T>;
274
- /**
275
- * Compute a value once without reactivity
276
- */
277
- export declare function peek<T>(fn: () => T): T;
1
+ export { signal, source, mutableSource, state, stateRaw } from './primitives/signal.js';
2
+ export { derived, createDerived, disconnectDerived } from './primitives/derived.js';
3
+ export { effect, createEffect, updateEffect, destroyEffect } from './primitives/effect.js';
4
+ export { proxy, toRaw, isReactive } from './deep/proxy.js';
5
+ export { batch, untrack, peek } from './reactivity/batching.js';
6
+ export { flushSync, tick } from './reactivity/scheduling.js';
7
+ export { equals, safeEquals, safeNotEqual, shallowEquals, createEquals, neverEquals, alwaysEquals, } from './reactivity/equality.js';
8
+ export { ReactiveMap } from './collections/map.js';
9
+ export { ReactiveSet } from './collections/set.js';
10
+ export { ReactiveDate } from './collections/date.js';
11
+ export { get, set, isDirty, setSignalStatus, markReactions, updateReaction, removeReactions, } from './reactivity/tracking.js';
12
+ export { DERIVED, EFFECT, RENDER_EFFECT, ROOT_EFFECT, BRANCH_EFFECT, USER_EFFECT, BLOCK_EFFECT, CLEAN, DIRTY, MAYBE_DIRTY, REACTION_IS_UPDATING, DESTROYED, INERT, EFFECT_RAN, EFFECT_PRESERVED, UNOWNED, DISCONNECTED, UNINITIALIZED, STALE_REACTION, STATE_SYMBOL, REACTIVE_MARKER, } from './core/constants.js';
13
+ export { activeReaction, activeEffect, untracking, writeVersion, readVersion, batchDepth, setActiveReaction, setActiveEffect, setUntracking, incrementWriteVersion, incrementReadVersion, incrementBatchDepth, decrementBatchDepth, getReadVersion, getWriteVersion, getBatchDepth, } from './core/globals.js';
14
+ export type { Signal, Source, Reaction, Derived, Effect, Value, ReadableSignal, WritableSignal, DerivedSignal, DisposeFn, CleanupFn, EffectFn, Equals, Uninitialized, } from './core/types.js';
278
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACvF,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AACnF,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAM1F,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAM1D,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAA;AAM5D,OAAO,EACL,MAAM,EACN,UAAU,EACV,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,WAAW,EACX,YAAY,GACb,MAAM,0BAA0B,CAAA;AAMjC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAMpD,OAAO,EACL,GAAG,EACH,GAAG,EACH,OAAO,EACP,eAAe,EACf,aAAa,EACb,cAAc,EACd,eAAe,GAChB,MAAM,0BAA0B,CAAA;AAMjC,OAAO,EAEL,OAAO,EACP,MAAM,EACN,aAAa,EACb,WAAW,EACX,aAAa,EACb,WAAW,EACX,YAAY,EAGZ,KAAK,EACL,KAAK,EACL,WAAW,EACX,oBAAoB,EACpB,SAAS,EACT,KAAK,EACL,UAAU,EACV,gBAAgB,EAGhB,OAAO,EACP,YAAY,EAGZ,aAAa,EACb,cAAc,EACd,YAAY,EACZ,eAAe,GAChB,MAAM,qBAAqB,CAAA;AAM5B,OAAO,EACL,cAAc,EACd,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,EACX,UAAU,EAGV,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EAGnB,cAAc,EACd,eAAe,EACf,aAAa,GACd,MAAM,mBAAmB,CAAA;AAM1B,YAAY,EAEV,MAAM,EACN,MAAM,EACN,QAAQ,EACR,OAAO,EACP,MAAM,EACN,KAAK,EAGL,cAAc,EACd,cAAc,EACd,aAAa,EACb,SAAS,EACT,SAAS,EACT,QAAQ,EAGR,MAAM,EACN,aAAa,GACd,MAAM,iBAAiB,CAAA"}