mutts 1.0.7 → 1.0.9

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.
Files changed (191) hide show
  1. package/README.md +72 -17
  2. package/dist/browser.cjs +3111 -0
  3. package/dist/browser.cjs.map +1 -0
  4. package/dist/browser.d.ts +1391 -1
  5. package/dist/browser.esm.js +264 -35
  6. package/dist/browser.esm.js.map +1 -1
  7. package/dist/chunks/async-browser-lvzLOCgk.cjs +297 -0
  8. package/dist/chunks/async-browser-lvzLOCgk.cjs.map +1 -0
  9. package/dist/chunks/async-core-CRLKP3l-.cjs +29 -0
  10. package/dist/chunks/async-core-CRLKP3l-.cjs.map +1 -0
  11. package/dist/chunks/async-node-C3DeIb0y.cjs +96 -0
  12. package/dist/chunks/async-node-C3DeIb0y.cjs.map +1 -0
  13. package/dist/chunks/index-2vea86wD.esm.js +3011 -0
  14. package/dist/chunks/index-2vea86wD.esm.js.map +1 -0
  15. package/dist/chunks/index-CtA2AWl3.esm.js +4376 -0
  16. package/dist/chunks/index-CtA2AWl3.esm.js.map +1 -0
  17. package/dist/chunks/index-VTO-b2vR.cjs +4461 -0
  18. package/dist/chunks/index-VTO-b2vR.cjs.map +1 -0
  19. package/dist/debug/debug.d.ts +122 -0
  20. package/dist/debug/debug.d.ts.map +1 -0
  21. package/dist/debug/index.d.ts +4 -0
  22. package/dist/debug/index.d.ts.map +1 -0
  23. package/dist/debug/lineage-panel.d.ts +5 -0
  24. package/dist/debug/lineage-panel.d.ts.map +1 -0
  25. package/dist/debug/lineage.d.ts +79 -0
  26. package/dist/debug/lineage.d.ts.map +1 -0
  27. package/dist/debug.cjs +35 -0
  28. package/dist/debug.cjs.map +1 -0
  29. package/dist/debug.d.ts +209 -0
  30. package/dist/debug.esm.js +2 -0
  31. package/dist/debug.esm.js.map +1 -0
  32. package/dist/devtools/devtool/devtools.d.ts +1 -0
  33. package/dist/devtools/devtool/devtools.d.ts.map +1 -0
  34. package/dist/devtools/devtool/panel.d.ts +2 -0
  35. package/dist/devtools/devtool/panel.d.ts.map +1 -0
  36. package/dist/index.d.ts +1 -0
  37. package/dist/mutts.umd.js +1 -1
  38. package/dist/mutts.umd.js.map +1 -1
  39. package/dist/mutts.umd.min.js +1 -1
  40. package/dist/mutts.umd.min.js.map +1 -1
  41. package/dist/node.cjs +107 -0
  42. package/dist/node.cjs.map +1 -0
  43. package/dist/node.d.ts +2 -2
  44. package/dist/node.esm.js +86 -33
  45. package/dist/node.esm.js.map +1 -1
  46. package/dist/src/async/browser.d.ts +2 -0
  47. package/dist/src/async/browser.d.ts.map +1 -0
  48. package/dist/src/async/index.d.ts +19 -0
  49. package/dist/src/async/index.d.ts.map +1 -0
  50. package/dist/src/async/node.d.ts +2 -0
  51. package/dist/src/async/node.d.ts.map +1 -0
  52. package/dist/src/decorator.d.ts +106 -0
  53. package/dist/src/decorator.d.ts.map +1 -0
  54. package/dist/src/destroyable.d.ts +87 -0
  55. package/dist/src/destroyable.d.ts.map +1 -0
  56. package/dist/src/entry-browser.d.ts +3 -0
  57. package/dist/src/entry-browser.d.ts.map +1 -0
  58. package/dist/src/entry-node.d.ts +3 -0
  59. package/dist/src/entry-node.d.ts.map +1 -0
  60. package/dist/src/eventful.d.ts +20 -0
  61. package/dist/src/eventful.d.ts.map +1 -0
  62. package/dist/src/flavored.d.ts +33 -0
  63. package/dist/src/flavored.d.ts.map +1 -0
  64. package/dist/src/index.d.ts +14 -0
  65. package/dist/src/index.d.ts.map +1 -0
  66. package/dist/src/indexable.d.ts +243 -0
  67. package/dist/src/indexable.d.ts.map +1 -0
  68. package/dist/src/introspection.d.ts +27 -0
  69. package/dist/src/introspection.d.ts.map +1 -0
  70. package/dist/src/iterableWeak.d.ts +53 -0
  71. package/dist/src/iterableWeak.d.ts.map +1 -0
  72. package/dist/src/mixins.d.ts +25 -0
  73. package/dist/src/mixins.d.ts.map +1 -0
  74. package/dist/src/promiseChain.d.ts +20 -0
  75. package/dist/src/promiseChain.d.ts.map +1 -0
  76. package/dist/src/reactive/array.d.ts +48 -0
  77. package/dist/src/reactive/array.d.ts.map +1 -0
  78. package/dist/src/reactive/buffer.d.ts +120 -0
  79. package/dist/src/reactive/buffer.d.ts.map +1 -0
  80. package/dist/src/reactive/change.d.ts +29 -0
  81. package/dist/src/reactive/change.d.ts.map +1 -0
  82. package/dist/src/reactive/deep-touch.d.ts +28 -0
  83. package/dist/src/reactive/deep-touch.d.ts.map +1 -0
  84. package/dist/src/reactive/deep-watch-state.d.ts +25 -0
  85. package/dist/src/reactive/deep-watch-state.d.ts.map +1 -0
  86. package/dist/src/reactive/deep-watch.d.ts +20 -0
  87. package/dist/src/reactive/deep-watch.d.ts.map +1 -0
  88. package/dist/src/reactive/describe.d.ts +12 -0
  89. package/dist/src/reactive/describe.d.ts.map +1 -0
  90. package/dist/src/reactive/effect-context.d.ts +34 -0
  91. package/dist/src/reactive/effect-context.d.ts.map +1 -0
  92. package/dist/src/reactive/effects.d.ts +164 -0
  93. package/dist/src/reactive/effects.d.ts.map +1 -0
  94. package/dist/src/reactive/index.d.ts +19 -0
  95. package/dist/src/reactive/index.d.ts.map +1 -0
  96. package/dist/src/reactive/map.d.ts +28 -0
  97. package/dist/src/reactive/map.d.ts.map +1 -0
  98. package/dist/src/reactive/memoize.d.ts +28 -0
  99. package/dist/src/reactive/memoize.d.ts.map +1 -0
  100. package/dist/src/reactive/non-reactive-state.d.ts +9 -0
  101. package/dist/src/reactive/non-reactive-state.d.ts.map +1 -0
  102. package/dist/src/reactive/non-reactive.d.ts +11 -0
  103. package/dist/src/reactive/non-reactive.d.ts.map +1 -0
  104. package/dist/src/reactive/project.d.ts +40 -0
  105. package/dist/src/reactive/project.d.ts.map +1 -0
  106. package/dist/src/reactive/proxy-state.d.ts +8 -0
  107. package/dist/src/reactive/proxy-state.d.ts.map +1 -0
  108. package/dist/src/reactive/proxy.d.ts +23 -0
  109. package/dist/src/reactive/proxy.d.ts.map +1 -0
  110. package/dist/src/reactive/record.d.ts +115 -0
  111. package/dist/src/reactive/record.d.ts.map +1 -0
  112. package/dist/src/reactive/register.d.ts +125 -0
  113. package/dist/src/reactive/register.d.ts.map +1 -0
  114. package/dist/src/reactive/registry.d.ts +21 -0
  115. package/dist/src/reactive/registry.d.ts.map +1 -0
  116. package/dist/src/reactive/set.d.ts +26 -0
  117. package/dist/src/reactive/set.d.ts.map +1 -0
  118. package/dist/src/reactive/tracking.d.ts +7 -0
  119. package/dist/src/reactive/tracking.d.ts.map +1 -0
  120. package/dist/src/reactive/types.d.ts +424 -0
  121. package/dist/src/reactive/types.d.ts.map +1 -0
  122. package/dist/src/reactive/watch.d.ts +48 -0
  123. package/dist/src/reactive/watch.d.ts.map +1 -0
  124. package/dist/src/std-decorators.d.ts +45 -0
  125. package/dist/src/std-decorators.d.ts.map +1 -0
  126. package/dist/src/utils.d.ts +49 -0
  127. package/dist/src/utils.d.ts.map +1 -0
  128. package/dist/src/zone.d.ts +40 -0
  129. package/dist/src/zone.d.ts.map +1 -0
  130. package/dist/types-DaHFfhlN.d.ts +414 -0
  131. package/docs/ai/api-reference.md +1 -1
  132. package/docs/ai/manual.md +443 -17
  133. package/docs/events.md +57 -2
  134. package/docs/flavored.md +210 -0
  135. package/docs/reactive/advanced.md +2 -3
  136. package/docs/reactive/attend.md +143 -0
  137. package/docs/reactive/collections.md +55 -0
  138. package/docs/reactive/core.md +120 -4
  139. package/docs/reactive/debugging.md +8 -10
  140. package/docs/reactive/describe.md +85 -0
  141. package/docs/reactive/error-handling.md +121 -0
  142. package/docs/reactive/project.md +1 -1
  143. package/docs/reactive/scan.md +215 -0
  144. package/docs/reactive.md +2 -0
  145. package/docs/std-decorators.md +171 -52
  146. package/docs/zone.md +9 -6
  147. package/package.json +44 -27
  148. package/src/async/browser.ts +277 -41
  149. package/src/async/index.ts +23 -4
  150. package/src/async/node.ts +78 -32
  151. package/src/entry-browser.ts +5 -0
  152. package/src/entry-node.ts +5 -0
  153. package/src/eventful.ts +82 -49
  154. package/src/flavored.ts +106 -0
  155. package/src/index.d.ts +12 -9
  156. package/src/index.ts +2 -1
  157. package/src/introspection.ts +1 -1
  158. package/src/reactive/array.ts +160 -80
  159. package/src/reactive/buffer.ts +187 -27
  160. package/src/reactive/change.ts +16 -23
  161. package/src/reactive/deep-touch.ts +19 -14
  162. package/src/reactive/deep-watch-state.ts +3 -3
  163. package/src/reactive/deep-watch.ts +7 -4
  164. package/src/reactive/describe.ts +39 -0
  165. package/src/reactive/effect-context.ts +71 -6
  166. package/src/reactive/effects.ts +445 -393
  167. package/src/reactive/index.ts +12 -14
  168. package/src/reactive/map.ts +8 -24
  169. package/src/reactive/memoize.ts +26 -3
  170. package/src/reactive/project.md +107 -0
  171. package/src/reactive/project.ts +48 -71
  172. package/src/reactive/proxy.ts +21 -3
  173. package/src/reactive/record.ts +30 -45
  174. package/src/reactive/register.ts +138 -19
  175. package/src/reactive/registry.ts +22 -9
  176. package/src/reactive/set.ts +7 -20
  177. package/src/reactive/tracking.ts +9 -12
  178. package/src/reactive/types.ts +104 -24
  179. package/src/reactive/{interface.ts → watch.ts} +29 -59
  180. package/src/std-decorators.ts +56 -17
  181. package/src/utils.ts +3 -4
  182. package/src/zone.ts +43 -28
  183. package/dist/browser.js +0 -161
  184. package/dist/browser.js.map +0 -1
  185. package/dist/chunks/index-BFYK02LG.js +0 -6378
  186. package/dist/chunks/index-BFYK02LG.js.map +0 -1
  187. package/dist/chunks/index-CNR6QRUl.esm.js +0 -6291
  188. package/dist/chunks/index-CNR6QRUl.esm.js.map +0 -1
  189. package/dist/node.js +0 -136
  190. package/dist/node.js.map +0 -1
  191. package/src/reactive/debug.ts +0 -517
@@ -0,0 +1,115 @@
1
+ import { cleanup, type EffectCloser, type ScopedCallback } from './types';
2
+ /**
3
+ * Provides type-safe access to a source object's property within the organized callback.
4
+ * @template Source - The type of the source object
5
+ * @template Key - The type of the property key in the source object
6
+ */
7
+ export type OrganizedAccess<Source extends Record<PropertyKey, any>, Key extends keyof Source> = {
8
+ /** The property key being accessed */
9
+ readonly key: Key;
10
+ /**
11
+ * Gets the current value of the property from the source object
12
+ * @returns The current value of the property
13
+ */
14
+ get(): Source[Key];
15
+ /**
16
+ * Updates the property value in the source object
17
+ * @param value - The new value to set
18
+ * @returns {boolean} True if the update was successful
19
+ */
20
+ set(value: Source[Key]): boolean;
21
+ /**
22
+ * The current value of the property (equivalent to using get()/set() directly)
23
+ */
24
+ value: Source[Key];
25
+ };
26
+ /**
27
+ * Callback function type for the organized function that processes each source property.
28
+ * @template Source - The type of the source object
29
+ * @template Target - The type of the target object
30
+ */
31
+ export type OrganizedCallback<Source extends Record<PropertyKey, any>, Target extends object> = <Key extends keyof Source>(
32
+ /**
33
+ * Accessor object for the current source property
34
+ */
35
+ access: OrganizedAccess<Source, Key>,
36
+ /**
37
+ * The target object where organized data will be stored
38
+ */
39
+ target: Target) => EffectCloser | undefined;
40
+ /**
41
+ * The result type of the organized function, combining the target object with cleanup capability.
42
+ * @template Target - The type of the target object
43
+ */
44
+ export type OrganizedResult<Target extends object> = Target & {
45
+ /**
46
+ * Cleanup function to dispose of all reactive bindings created by organized().
47
+ * This is automatically called when the effect that created the organized binding is disposed.
48
+ */
49
+ [cleanup]: ScopedCallback;
50
+ };
51
+ /**
52
+ * Organizes a source object's properties into a target object using a callback function.
53
+ * This creates a reactive mapping between source properties and a target object,
54
+ * automatically handling property additions, updates, and removals.
55
+ *
56
+ * @template Source - The type of the source object
57
+ * @template Target - The type of the target object (defaults to Record<PropertyKey, any>)
58
+ *
59
+ * @param {Source} source - The source object to organize
60
+ * @param {OrganizedCallback<Source, Target>} apply - Callback function that defines how each source property is mapped to the target
61
+ * @param {Target} [baseTarget={}] - Optional base target object to use (will be made reactive if not already)
62
+ *
63
+ * @returns {OrganizedResult<Target>} The target object with cleanup capability
64
+ *
65
+ * @example
66
+ * // Organize user permissions into role-based access
67
+ * const user = reactive({ isAdmin: true, canEdit: false });
68
+ * const permissions = organized(
69
+ * user,
70
+ * (access, target) => {
71
+ * if (access.key === 'isAdmin') {
72
+ * target.hasFullAccess = access.value;
73
+ * }
74
+ * target[`can${access.key.charAt(0).toUpperCase() + access.key.slice(1)}`] = access.value;
75
+ * }
76
+ * );
77
+ *
78
+ * @example
79
+ * // Transform object structure with cleanup
80
+ * const source = reactive({ firstName: 'John', lastName: 'Doe' });
81
+ * const formatted = organized(
82
+ * source,
83
+ * (access, target) => {
84
+ * if (access.key === 'firstName' || access.key === 'lastName') {
85
+ * target.fullName = `${source.firstName} ${source.lastName}`.trim();
86
+ * }
87
+ * }
88
+ * );
89
+ *
90
+ * @example
91
+ * // Using with cleanup in a component
92
+ * effect(() => {
93
+ * const data = fetchData();
94
+ * const organizedData = organized(data, (access, target) => {
95
+ * // Transform data
96
+ * });
97
+ *
98
+ * // The cleanup will be called automatically when the effect is disposed
99
+ * return () => organizedData[cleanup]();
100
+ * });
101
+ */
102
+ export declare function organized<Source extends Record<PropertyKey, any>, Target extends object = Record<PropertyKey, any>>(source: Source, apply: OrganizedCallback<Source, Target>, baseTarget?: Target): OrganizedResult<Target>;
103
+ /**
104
+ * Organizes a property on a target object
105
+ * Shortcut for defineProperty/delete with touched signal
106
+ * @param target - The target object
107
+ * @param property - The property to organize
108
+ * @param access - The access object
109
+ * @returns The property descriptor
110
+ */
111
+ export declare function organize<T>(target: object, property: PropertyKey, access: {
112
+ get?(): T;
113
+ set?(value: T): boolean;
114
+ }): () => boolean;
115
+ //# sourceMappingURL=record.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../../src/reactive/record.ts"],"names":[],"mappings":"AAKA,OAAO,EACN,OAAO,EACP,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,MAAM,SAAS,CAAA;AAEhB;;;;GAIG;AACH,MAAM,MAAM,eAAe,CAAC,MAAM,SAAS,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,GAAG,SAAS,MAAM,MAAM,IAAI;IAChG,sCAAsC;IACtC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAA;IAEjB;;;OAGG;IACH,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,CAAA;IAElB;;;;OAIG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,CAAA;IAEhC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAA;CAClB,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,CAAC,MAAM,SAAS,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,MAAM,SAAS,MAAM,IAAI,CAC/F,GAAG,SAAS,MAAM,MAAM;AAExB;;GAEG;AACH,MAAM,EAAE,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC;AAEpC;;GAEG;AACH,MAAM,EAAE,MAAM,KACV,YAAY,GAAG,SAAS,CAAA;AAE7B;;;GAGG;AACH,MAAM,MAAM,eAAe,CAAC,MAAM,SAAS,MAAM,IAAI,MAAM,GAAG;IAC7D;;;OAGG;IACH,CAAC,OAAO,CAAC,EAAE,cAAc,CAAA;CACzB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,wBAAgB,SAAS,CACxB,MAAM,SAAS,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,EACvC,MAAM,SAAS,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,EAEhD,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,EACxC,UAAU,GAAE,MAAqB,GAC/B,eAAe,CAAC,MAAM,CAAC,CA6BzB;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EACzB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,WAAW,EACrB,MAAM,EAAE;IAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAA;CAAE,iBAU9C"}
@@ -0,0 +1,125 @@
1
+ import { ArrayReadForward, forwardArray, getAt, setAt } from '../indexable';
2
+ type KeyFunction<T, K extends PropertyKey> = (item: T) => K;
3
+ /**
4
+ * Events emitted by the Register for CRUD operations
5
+ */
6
+ export interface RegisterEvents<T, K extends PropertyKey> {
7
+ /**
8
+ * Emitted when a new item is added to the register
9
+ */
10
+ add: (item: T, key: K, index: number) => void;
11
+ /**
12
+ * Emitted when an item is removed from the register
13
+ */
14
+ delete: (item: T, key: K, index: number) => void;
15
+ /**
16
+ * Emitted when an item's value is updated (same key, new value)
17
+ */
18
+ update: (oldItem: T, newItem: T, key: K, index: number) => void;
19
+ /**
20
+ * Emitted when an item's key changes (rekey operation)
21
+ */
22
+ rekey: (item: T, oldKey: K, newKey: K, index: number) => void;
23
+ /**
24
+ * Index signature for EventsBase compatibility
25
+ */
26
+ [key: string]: (...args: any[]) => void;
27
+ }
28
+ interface RegisterInstance<T> extends ArrayReadForward<T> {
29
+ [index: number]: T;
30
+ }
31
+ declare const RegisterClass_base: new () => ArrayReadForward<any> & {
32
+ [x: number]: any;
33
+ toArray(): any[];
34
+ };
35
+ declare class RegisterClass<T, K extends PropertyKey = PropertyKey> extends RegisterClass_base implements RegisterInstance<T> {
36
+ #private;
37
+ protected get [forwardArray](): readonly T[];
38
+ /**
39
+ * Register event listeners for CRUD operations
40
+ */
41
+ on(events: Partial<RegisterEvents<T, K>>): void;
42
+ on<EventType extends keyof RegisterEvents<T, K>>(event: EventType, cb: RegisterEvents<T, K>[EventType]): () => void;
43
+ /**
44
+ * Remove event listeners
45
+ */
46
+ off(events: Partial<RegisterEvents<T, K>>): void;
47
+ off<EventType extends keyof RegisterEvents<T, K>>(event: EventType, cb?: RegisterEvents<T, K>[EventType]): void;
48
+ /**
49
+ * Register a global hook that receives all events
50
+ */
51
+ hook(cb: <EventType extends keyof RegisterEvents<T, K>>(event: EventType, ...args: Parameters<RegisterEvents<T, K>[EventType]>) => void): () => void;
52
+ constructor(keyFn: KeyFunction<T, K>, initial?: Iterable<T>);
53
+ private ensureKey;
54
+ private assertValidKey;
55
+ private setKeyValue;
56
+ private cleanupValue;
57
+ private disposeKeyEffects;
58
+ private incrementUsage;
59
+ private decrementUsage;
60
+ private normalizeIndex;
61
+ private assignAt;
62
+ private insertKeyValue;
63
+ private rebuildFrom;
64
+ get length(): number;
65
+ [getAt](index: number): T | undefined;
66
+ [setAt](index: number, value: T): void;
67
+ push(...items: T[]): number;
68
+ pop(): T | undefined;
69
+ shift(): T | undefined;
70
+ unshift(...items: T[]): number;
71
+ splice(start: number, deleteCount?: number, ...items: T[]): T[];
72
+ clear(): void;
73
+ get(key: K): T | undefined;
74
+ set(key: K, value: T): void;
75
+ remove(key: K): void;
76
+ removeAt(index: number): T | undefined;
77
+ /**
78
+ * Keep only the items for which the predicate returns true.
79
+ * Items for which the predicate returns false are removed.
80
+ *
81
+ * The predicate is evaluated once per distinct key; duplicate keys
82
+ * will follow the same keep/remove decision.
83
+ */
84
+ keep(predicate: (value: T) => boolean): void;
85
+ hasKey(key: K): boolean;
86
+ indexOfKey(key: K): number;
87
+ mapKeys(): IterableIterator<K>;
88
+ update(...values: T[]): void;
89
+ upsert(insert: (value: T) => void, ...values: T[]): void;
90
+ entries(): IterableIterator<[number, T]>;
91
+ [Symbol.iterator](): IterableIterator<T>;
92
+ toString(): string;
93
+ at(index: number): T | undefined;
94
+ reverse(): this;
95
+ sort(compareFn?: ((a: T, b: T) => number) | undefined): this;
96
+ fill(value: T, start?: number, end?: number): this;
97
+ copyWithin(target: number, start: number, end?: number): this;
98
+ }
99
+ export type Register<T, K extends PropertyKey = PropertyKey> = RegisterClass<T, K> & T[];
100
+ export declare const Register: new <T, K extends PropertyKey = PropertyKey>(keyFn: KeyFunction<T, K>, initial?: Iterable<T>) => Register<T, K>;
101
+ /**
102
+ * Creates a reactive Register - an ordered, array-like collection with stable key-based identity.
103
+ *
104
+ * Register combines array semantics (indexable access, ordering, iteration) with Map-like
105
+ * key-based lookups. Items with the same key share the same value instance, making it ideal
106
+ * for UI lists keyed by IDs or when you need to preserve identity across reorders.
107
+ *
108
+ * @param keyFn - Function that extracts the key from each item
109
+ * @param initial - Optional initial items to populate the register
110
+ * @returns A reactive Register instance
111
+ *
112
+ * @example
113
+ * ```typescript
114
+ * const users = register(
115
+ * (user: User) => user.id,
116
+ * [{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }]
117
+ * )
118
+ *
119
+ * users.push({ id: 3, name: 'Charlie' })
120
+ * const bob = users.get(2) // Get by key
121
+ * ```
122
+ */
123
+ export declare function register<T, K extends PropertyKey = PropertyKey>(keyFn: KeyFunction<T, K>, initial?: Iterable<T>): Register<T, K>;
124
+ export {};
125
+ //# sourceMappingURL=register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../src/reactive/register.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { type EffectNode, type EffectTrigger } from './types';
2
+ export declare let effectToReactiveObjects: WeakMap<import("./types").ScopedCallback, Set<object>>;
3
+ export declare let watchers: WeakMap<object, Map<any, Set<import("./types").ScopedCallback>>>;
4
+ export declare let effectNodes: WeakMap<import("./types").ScopedCallback, EffectNode>;
5
+ export declare function getEffectNode(effect: EffectTrigger): EffectNode;
6
+ export declare function resetRegistry(): void;
7
+ /**
8
+ * Marks a function with its root function for effect tracking
9
+ * Enforces strict unicity: A root function can only identify ONE function.
10
+ * @param fn - The function to mark
11
+ * @param root - The root function
12
+ * @returns The marked function
13
+ */
14
+ export declare function markWithRoot<T extends Function>(fn: T, root: any): T;
15
+ /**
16
+ * Gets the root function of a function for effect tracking
17
+ * @param fn - The function to get the root of
18
+ * @returns The root function
19
+ */
20
+ export declare function getRoot<T extends Function | undefined>(fn: T): T;
21
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/reactive/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,UAAU,EAAE,KAAK,aAAa,EAAgB,MAAM,SAAS,CAAA;AAG/F,eAAO,IAAI,uBAAuB,wDAA4C,CAAA;AAG9E,eAAO,IAAI,QAAQ,kEAAsD,CAAA;AAGzE,eAAO,IAAI,WAAW,uDAA2C,CAAA;AAEjE,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,UAAU,CAO/D;AAKD,wBAAgB,aAAa,SAK5B;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,QAAQ,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,CAwBpE;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,CAAC,SAAS,QAAQ,GAAG,SAAS,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAGhE"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Reactive wrapper around JavaScript's WeakSet class
3
+ * Only tracks individual value operations, no size tracking (WeakSet limitation)
4
+ */
5
+ export declare abstract class ReactiveWeakSet<T extends object> extends WeakSet<T> {
6
+ add(value: T): this;
7
+ delete(value: T): boolean;
8
+ has(value: T): boolean;
9
+ }
10
+ /**
11
+ * Reactive wrapper around JavaScript's Set class
12
+ * Tracks size changes, individual value operations, and collection-wide operations
13
+ */
14
+ export declare abstract class ReactiveSet<T> extends Set<T> {
15
+ get size(): number;
16
+ add(value: T): this;
17
+ clear(): void;
18
+ delete(value: T): boolean;
19
+ has(value: T): boolean;
20
+ entries(): Generator<[T, T]>;
21
+ forEach(callbackfn: (value: T, value2: T, set: Set<T>) => void, thisArg?: any): void;
22
+ keys(): Generator<T>;
23
+ values(): Generator<T>;
24
+ [Symbol.iterator](): SetIterator<T>;
25
+ }
26
+ //# sourceMappingURL=set.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../../../src/reactive/set.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,8BAAsB,eAAe,CAAC,CAAC,SAAS,MAAM,CAAE,SAAQ,OAAO,CAAC,CAAC,CAAC;IACzE,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IAWnB,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO;IAOzB,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO;CAItB;AAED;;;GAGG;AACH,8BAAsB,WAAW,CAAC,CAAC,CAAE,SAAQ,GAAG,CAAC,CAAC,CAAC;IAClD,IAAI,IAAI,IAAI,MAAM,CAIjB;IAED,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IAanB,KAAK,IAAI,IAAI;IAUb,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO;IAWzB,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO;IAKtB,OAAO,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAK5B,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,GAAG,GAAG,IAAI;IAKpF,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC;IAKpB,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC;IAKtB,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC;CAWnC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Marks a property as a dependency of the current effect
3
+ * @param obj - The object containing the property
4
+ * @param prop - The property name (defaults to allProps)
5
+ */
6
+ export declare function dependant(obj: any, prop?: any): void;
7
+ //# sourceMappingURL=tracking.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracking.d.ts","sourceRoot":"","sources":["../../../src/reactive/tracking.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,GAAE,GAAc,QA8BvD"}