mutts 1.0.8 → 1.0.10

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 (195) hide show
  1. package/README.md +77 -35
  2. package/dist/browser.cjs +2144 -5355
  3. package/dist/browser.cjs.map +1 -1
  4. package/dist/browser.d.ts +2 -1655
  5. package/dist/browser.dev.cjs +110 -0
  6. package/dist/browser.dev.cjs.map +1 -0
  7. package/dist/browser.dev.d.ts +2 -0
  8. package/dist/browser.dev.esm.js +5 -0
  9. package/dist/browser.dev.esm.js.map +1 -0
  10. package/dist/browser.esm.js +20 -107
  11. package/dist/browser.esm.js.map +1 -1
  12. package/dist/chunks/{async-browser-CA0jPWIi.cjs → async-browser-BU_IfxYD.cjs} +19 -107
  13. package/dist/chunks/async-browser-BU_IfxYD.cjs.map +1 -0
  14. package/dist/chunks/{async-core-UqHzvJ-S.cjs → async-core-CRLKP3l-.cjs} +8 -4
  15. package/dist/chunks/async-core-CRLKP3l-.cjs.map +1 -0
  16. package/dist/chunks/{async-node-BYHuGTni.cjs → async-node-3PrbVAbB.cjs} +7 -12
  17. package/dist/chunks/async-node-3PrbVAbB.cjs.map +1 -0
  18. package/dist/chunks/index-CaaQQlPJ.esm.js +3174 -0
  19. package/dist/chunks/index-CaaQQlPJ.esm.js.map +1 -0
  20. package/dist/chunks/node-nKJBk8iJ.esm.js +96 -0
  21. package/dist/chunks/node-nKJBk8iJ.esm.js.map +1 -0
  22. package/dist/chunks/proxy-Dtg-bJ3T.cjs +3763 -0
  23. package/dist/chunks/proxy-Dtg-bJ3T.cjs.map +1 -0
  24. package/dist/chunks/proxy-r7lARftl.esm.js +3701 -0
  25. package/dist/chunks/proxy-r7lARftl.esm.js.map +1 -0
  26. package/dist/debug.cjs +980 -0
  27. package/dist/debug.cjs.map +1 -0
  28. package/dist/debug.d.ts +208 -0
  29. package/dist/debug.esm.js +950 -0
  30. package/dist/debug.esm.js.map +1 -0
  31. package/dist/devtools/manifest.json +1 -1
  32. package/dist/devtools/panel.html +1 -1
  33. package/dist/devtools/panel.js +107 -94
  34. package/dist/devtools/panel.js.map +1 -1
  35. package/dist/index.d.ts +1447 -13
  36. package/dist/mutts.umd.js +7167 -1
  37. package/dist/mutts.umd.js.map +1 -1
  38. package/dist/mutts.umd.min.js +1 -1
  39. package/dist/mutts.umd.min.js.map +1 -1
  40. package/dist/node.cjs +70 -66
  41. package/dist/node.cjs.map +1 -1
  42. package/dist/node.d.ts +2 -1
  43. package/dist/node.dev.cjs +110 -0
  44. package/dist/node.dev.cjs.map +1 -0
  45. package/dist/node.dev.d.ts +2 -0
  46. package/dist/node.dev.esm.js +6 -0
  47. package/dist/node.dev.esm.js.map +1 -0
  48. package/dist/node.esm.js +4 -103
  49. package/dist/node.esm.js.map +1 -1
  50. package/dist/{reactive/types.d.ts → types-W5vD6m2n.d.ts} +186 -93
  51. package/docs/ai/api-reference.md +12 -19
  52. package/docs/ai/manual.md +521 -17
  53. package/docs/events.md +57 -2
  54. package/docs/flavored.md +210 -0
  55. package/docs/reactive/advanced.md +314 -5
  56. package/docs/reactive/attend.md +142 -0
  57. package/docs/reactive/collections.md +76 -39
  58. package/docs/reactive/core.md +100 -14
  59. package/docs/reactive/debugging.md +123 -18
  60. package/docs/reactive/error-handling.md +121 -0
  61. package/docs/reactive/resource.md +125 -0
  62. package/docs/reactive/scan.md +247 -1
  63. package/docs/reactive.md +4 -1
  64. package/docs/std-decorators.md +102 -51
  65. package/docs/utils.md +70 -0
  66. package/docs/zone.md +3 -7
  67. package/package.json +64 -30
  68. package/dist/async/browser.d.ts +0 -2
  69. package/dist/async/browser.d.ts.map +0 -1
  70. package/dist/async/index.d.ts +0 -18
  71. package/dist/async/index.d.ts.map +0 -1
  72. package/dist/async/node.d.ts +0 -2
  73. package/dist/async/node.d.ts.map +0 -1
  74. package/dist/chunks/async-browser-CA0jPWIi.cjs.map +0 -1
  75. package/dist/chunks/async-core-UqHzvJ-S.cjs.map +0 -1
  76. package/dist/chunks/async-node-BYHuGTni.cjs.map +0 -1
  77. package/dist/chunks/index-DhaOVusv.esm.js +0 -6411
  78. package/dist/chunks/index-DhaOVusv.esm.js.map +0 -1
  79. package/dist/decorator.d.ts +0 -106
  80. package/dist/decorator.d.ts.map +0 -1
  81. package/dist/destroyable.d.ts +0 -87
  82. package/dist/destroyable.d.ts.map +0 -1
  83. package/dist/entry-browser.d.ts +0 -3
  84. package/dist/entry-browser.d.ts.map +0 -1
  85. package/dist/entry-node.d.ts +0 -3
  86. package/dist/entry-node.d.ts.map +0 -1
  87. package/dist/eventful.d.ts +0 -18
  88. package/dist/eventful.d.ts.map +0 -1
  89. package/dist/index.d.ts.map +0 -1
  90. package/dist/indexable.d.ts +0 -243
  91. package/dist/indexable.d.ts.map +0 -1
  92. package/dist/introspection.d.ts +0 -27
  93. package/dist/introspection.d.ts.map +0 -1
  94. package/dist/iterableWeak.d.ts +0 -53
  95. package/dist/iterableWeak.d.ts.map +0 -1
  96. package/dist/mixins.d.ts +0 -25
  97. package/dist/mixins.d.ts.map +0 -1
  98. package/dist/promiseChain.d.ts +0 -20
  99. package/dist/promiseChain.d.ts.map +0 -1
  100. package/dist/reactive/array.d.ts +0 -49
  101. package/dist/reactive/array.d.ts.map +0 -1
  102. package/dist/reactive/buffer.d.ts +0 -44
  103. package/dist/reactive/buffer.d.ts.map +0 -1
  104. package/dist/reactive/change.d.ts +0 -29
  105. package/dist/reactive/change.d.ts.map +0 -1
  106. package/dist/reactive/debug.d.ts +0 -111
  107. package/dist/reactive/debug.d.ts.map +0 -1
  108. package/dist/reactive/deep-touch.d.ts +0 -28
  109. package/dist/reactive/deep-touch.d.ts.map +0 -1
  110. package/dist/reactive/deep-watch-state.d.ts +0 -25
  111. package/dist/reactive/deep-watch-state.d.ts.map +0 -1
  112. package/dist/reactive/deep-watch.d.ts +0 -19
  113. package/dist/reactive/deep-watch.d.ts.map +0 -1
  114. package/dist/reactive/effect-context.d.ts +0 -7
  115. package/dist/reactive/effect-context.d.ts.map +0 -1
  116. package/dist/reactive/effects.d.ts +0 -151
  117. package/dist/reactive/effects.d.ts.map +0 -1
  118. package/dist/reactive/index.d.ts +0 -20
  119. package/dist/reactive/index.d.ts.map +0 -1
  120. package/dist/reactive/interface.d.ts +0 -64
  121. package/dist/reactive/interface.d.ts.map +0 -1
  122. package/dist/reactive/map.d.ts +0 -30
  123. package/dist/reactive/map.d.ts.map +0 -1
  124. package/dist/reactive/memoize.d.ts +0 -5
  125. package/dist/reactive/memoize.d.ts.map +0 -1
  126. package/dist/reactive/non-reactive-state.d.ts +0 -9
  127. package/dist/reactive/non-reactive-state.d.ts.map +0 -1
  128. package/dist/reactive/non-reactive.d.ts +0 -11
  129. package/dist/reactive/non-reactive.d.ts.map +0 -1
  130. package/dist/reactive/project.d.ts +0 -41
  131. package/dist/reactive/project.d.ts.map +0 -1
  132. package/dist/reactive/proxy-state.d.ts +0 -8
  133. package/dist/reactive/proxy-state.d.ts.map +0 -1
  134. package/dist/reactive/proxy.d.ts +0 -23
  135. package/dist/reactive/proxy.d.ts.map +0 -1
  136. package/dist/reactive/record.d.ts +0 -116
  137. package/dist/reactive/record.d.ts.map +0 -1
  138. package/dist/reactive/register.d.ts +0 -64
  139. package/dist/reactive/register.d.ts.map +0 -1
  140. package/dist/reactive/registry.d.ts +0 -20
  141. package/dist/reactive/registry.d.ts.map +0 -1
  142. package/dist/reactive/set.d.ts +0 -28
  143. package/dist/reactive/set.d.ts.map +0 -1
  144. package/dist/reactive/tracking.d.ts +0 -7
  145. package/dist/reactive/tracking.d.ts.map +0 -1
  146. package/dist/reactive/types.d.ts.map +0 -1
  147. package/dist/std-decorators.d.ts +0 -50
  148. package/dist/std-decorators.d.ts.map +0 -1
  149. package/dist/utils.d.ts +0 -49
  150. package/dist/utils.d.ts.map +0 -1
  151. package/dist/zone.d.ts +0 -40
  152. package/dist/zone.d.ts.map +0 -1
  153. package/docs/reactive/project.md +0 -93
  154. package/src/async/browser.ts +0 -319
  155. package/src/async/index.ts +0 -23
  156. package/src/async/node.ts +0 -104
  157. package/src/decorator.ts +0 -272
  158. package/src/destroyable.ts +0 -199
  159. package/src/entry-browser.ts +0 -5
  160. package/src/entry-node.ts +0 -5
  161. package/src/eventful.ts +0 -77
  162. package/src/index.d.ts +0 -12
  163. package/src/index.ts +0 -64
  164. package/src/indexable.ts +0 -526
  165. package/src/introspection.ts +0 -59
  166. package/src/iterableWeak.ts +0 -233
  167. package/src/mixins.ts +0 -123
  168. package/src/promiseChain.ts +0 -110
  169. package/src/reactive/array.ts +0 -507
  170. package/src/reactive/buffer.ts +0 -168
  171. package/src/reactive/change.ts +0 -138
  172. package/src/reactive/debug.ts +0 -517
  173. package/src/reactive/deep-touch.ts +0 -268
  174. package/src/reactive/deep-watch-state.ts +0 -82
  175. package/src/reactive/deep-watch.ts +0 -168
  176. package/src/reactive/effect-context.ts +0 -18
  177. package/src/reactive/effects.ts +0 -1382
  178. package/src/reactive/index.ts +0 -75
  179. package/src/reactive/interface.ts +0 -210
  180. package/src/reactive/map.ts +0 -158
  181. package/src/reactive/memoize.ts +0 -163
  182. package/src/reactive/non-reactive-state.ts +0 -49
  183. package/src/reactive/non-reactive.ts +0 -43
  184. package/src/reactive/project.ts +0 -453
  185. package/src/reactive/proxy-state.ts +0 -27
  186. package/src/reactive/proxy.ts +0 -264
  187. package/src/reactive/record.ts +0 -196
  188. package/src/reactive/register.ts +0 -419
  189. package/src/reactive/registry.ts +0 -59
  190. package/src/reactive/set.ts +0 -130
  191. package/src/reactive/tracking.ts +0 -44
  192. package/src/reactive/types.ts +0 -440
  193. package/src/std-decorators.ts +0 -217
  194. package/src/utils.ts +0 -301
  195. package/src/zone.ts +0 -138
@@ -1,20 +0,0 @@
1
- type Resolved<T> = T extends Promise<infer U> ? Resolved<U> : T extends (...args: infer Args) => infer R ? (...args: Args) => Resolved<R> : T extends object ? {
2
- [k in keyof T]: k extends 'then' | 'catch' | 'finally' ? T[k] : Resolved<T[k]>;
3
- } : T;
4
- type PromiseAnd<T> = Resolved<T> & Promise<Resolved<T>>;
5
- /**
6
- * Type that transforms promises into chainable objects
7
- * Allows calling methods directly on promise results without awaiting them first
8
- */
9
- export type PromiseChain<T> = T extends (...args: infer Args) => infer R ? PromiseAnd<(...args: Args) => PromiseChain<Resolved<R>>> : T extends object ? PromiseAnd<{
10
- [k in keyof T]: k extends 'then' | 'catch' | 'finally' ? T[k] : PromiseChain<Resolved<T[k]>>;
11
- }> : Promise<Resolved<T>>;
12
- /**
13
- * Transforms a promise or value into a chainable object
14
- * Allows calling methods directly on promise results without awaiting them first
15
- * @param given - The promise or value to make chainable
16
- * @returns A chainable version of the input
17
- */
18
- export declare function chainPromise<T>(given: Promise<T> | T): PromiseChain<T>;
19
- export {};
20
- //# sourceMappingURL=promiseChain.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"promiseChain.d.ts","sourceRoot":"","sources":["../src/promiseChain.ts"],"names":[],"mappings":"AAAA,KAAK,QAAQ,CAAC,CAAC,IACd,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,CAAC,GACvB,QAAQ,CAAC,CAAC,CAAC,GACX,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,MAAM,IAAI,KAAK,MAAM,CAAC,GACzC,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAC9B,CAAC,SAAS,MAAM,GACf;KACC,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,SAAS,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC9E,GACA,CAAC,CAAA;AACP,KAAK,UAAU,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;AACvD;;;GAGG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,MAAM,IAAI,KAAK,MAAM,CAAC,GACrE,UAAU,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GACxD,CAAC,SAAS,MAAM,GACf,UAAU,CAAC;KACV,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,SAAS,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC5F,CAAC,GACD,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;AA6DxB;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAqBtE"}
@@ -1,49 +0,0 @@
1
- export declare abstract class Indexer extends Array {
2
- get(i: number): any;
3
- set(i: number, value: any): void;
4
- getLength(): number;
5
- setLength(value: number): void;
6
- }
7
- export declare abstract class ReactiveArray extends Array {
8
- toJSON(): this;
9
- get [Symbol.toStringTag](): string;
10
- at(index: number): any;
11
- toReversed(): any[];
12
- toSorted(compareFn?: (a: any, b: any) => number): any[];
13
- toSpliced(start: number, deleteCount?: number, ...items: any[]): any[];
14
- with(index: number, value: any): any[];
15
- entries(): any;
16
- keys(): any;
17
- values(): any;
18
- [Symbol.iterator](): ArrayIterator<any>;
19
- indexOf(searchElement: any, fromIndex?: number): number;
20
- lastIndexOf(searchElement: any, fromIndex?: number): number;
21
- includes(searchElement: any, fromIndex?: number): boolean;
22
- find(predicate: (this: any, value: any, index: number, obj: any[]) => boolean, thisArg?: any): any;
23
- find(searchElement: any, fromIndex?: number): any;
24
- findIndex(predicate: (this: any, value: any, index: number, obj: any[]) => boolean, thisArg?: any): number;
25
- findIndex(searchElement: any, fromIndex?: number): number;
26
- flat(depth?: number): any[];
27
- flatMap(callbackfn: (this: any, value: any, index: number, array: any[]) => any[], thisArg?: any): any[];
28
- filter(callbackfn: (value: any, index: number, array: any[]) => boolean, thisArg?: any): any[];
29
- map(callbackfn: (value: any, index: number, array: any[]) => any, thisArg?: any): any[];
30
- reduce(callbackfn: (previousValue: any, currentValue: any, currentIndex: number, array: any[]) => any, initialValue?: any): any;
31
- reduceRight(callbackfn: (previousValue: any, currentValue: any, currentIndex: number, array: any[]) => any, initialValue?: any): any;
32
- slice(start?: number, end?: number): any[];
33
- concat(...items: any[]): any[];
34
- join(separator?: string): string;
35
- forEach(callbackfn: (value: any, index: number, array: any[]) => void, thisArg?: any): void;
36
- every<S>(predicate: (value: any, index: number, array: any[]) => value is S, thisArg?: any): this is S[];
37
- every(callbackfn: (value: any, index: number, array: any[]) => boolean, thisArg?: any): boolean;
38
- some(callbackfn: (value: any, index: number, array: any[]) => boolean, thisArg?: any): boolean;
39
- push(...items: any[]): any;
40
- pop(): any;
41
- shift(): any;
42
- unshift(...items: any[]): any;
43
- splice(start: number, deleteCount?: number, ...items: any[]): any;
44
- reverse(): any;
45
- sort(compareFn?: (a: any, b: any) => number): any;
46
- fill(value: any, start?: number, end?: number): any;
47
- copyWithin(target: number, start: number, end?: number): any;
48
- }
49
- //# sourceMappingURL=array.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../../src/reactive/array.ts"],"names":[],"mappings":"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"}
@@ -1,44 +0,0 @@
1
- import { cleanup } from './interface';
2
- import type { ScopedCallback } from './types';
3
- /**
4
- * Result of a reactive scan, which is a reactive array of accumulated values
5
- * with an attached cleanup function.
6
- */
7
- export type ScanResult<Output> = readonly Output[] & {
8
- [cleanup]: ScopedCallback;
9
- };
10
- /**
11
- * Perform a reactive scan over an array of items.
12
- *
13
- * This implementation is highly optimized for performance and fine-grained reactivity:
14
- * - **Incremental Updates**: Changes to an item only trigger re-computation from that
15
- * point onwards in the result chain.
16
- * - **Move Optimization**: If items are moved within the array, their accumulated
17
- * values are reused as long as their predecessor remains the same.
18
- * - **Duplicate Support**: Correctly handles multiple occurrences of the same object
19
- * instance using an internal occurrence tracking mechanism.
20
- * - **Memory Efficient**: Uses `WeakMap` for caching intermediates, which are
21
- * automatically cleared when source items are garbage collected.
22
- *
23
- * @example
24
- * ```typescript
25
- * const source = reactive([{ val: 1 }, { val: 2 }, { val: 3 }])
26
- * const sum = scan(source, (acc, item) => acc + item.val, 0)
27
- *
28
- * expect([...sum]).toEqual([1, 3, 6])
29
- *
30
- * // Modifying an item only re-computes subsequent sums
31
- * source[1].val = 10
32
- * expect([...sum]).toEqual([1, 11, 14])
33
- * ```
34
- *
35
- * @param source The source array of objects (will be made reactive)
36
- * @param callback The accumulator function called with (accumulator, currentItem)
37
- * @param initialValue The starting value for the accumulation
38
- * @returns A reactive array of accumulated values, with a [cleanup] property to stop the tracking
39
- */
40
- export declare function scan<Input extends object, Output>(source: readonly Input[], callback: (acc: Output, val: Input) => Output, initialValue: Output): ScanResult<Output>;
41
- export declare function resolve<Output>(cb: () => Output[]): Output[] & {
42
- [cleanup]: ScopedCallback;
43
- };
44
- //# sourceMappingURL=buffer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"buffer.d.ts","sourceRoot":"","sources":["../../src/reactive/buffer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,OAAO,EAAE,MAAM,aAAa,CAAA;AAGhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAE7C;;;GAGG;AACH,MAAM,MAAM,UAAU,CAAC,MAAM,IAAI,SAAS,MAAM,EAAE,GAAG;IAAE,CAAC,OAAO,CAAC,EAAE,cAAc,CAAA;CAAE,CAAA;AAElF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,IAAI,CAAC,KAAK,SAAS,MAAM,EAAE,MAAM,EAChD,MAAM,EAAE,SAAS,KAAK,EAAE,EACxB,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,KAAK,MAAM,EAC7C,YAAY,EAAE,MAAM,GAClB,UAAU,CAAC,MAAM,CAAC,CA8GpB;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG;IAAE,CAAC,OAAO,CAAC,EAAE,cAAc,CAAA;CAAE,CAQ5F"}
@@ -1,29 +0,0 @@
1
- import { type Evolution, type ScopedCallback, type State } from './types';
2
- export declare function addState(obj: any, evolution: Evolution): void;
3
- /**
4
- * Gets the current state of a reactive object for evolution tracking
5
- * @param obj - The reactive object
6
- * @returns The current state object
7
- */
8
- export declare function getState(obj: any): State;
9
- export declare function collectEffects(obj: any, evolution: Evolution, effects: Set<ScopedCallback>, objectWatchers: Map<any, Set<ScopedCallback>>, ...keyChains: Iterable<any>[]): void;
10
- /**
11
- * Triggers effects for a single property change
12
- * @param obj - The object that changed
13
- * @param evolution - The type of change
14
- * @param prop - The property that changed
15
- */
16
- export declare function touched1(obj: any, evolution: Evolution, prop: any): void;
17
- /**
18
- * Triggers effects for property changes
19
- * @param obj - The object that changed
20
- * @param evolution - The type of change
21
- * @param props - The properties that changed
22
- */
23
- export declare function touched(obj: any, evolution: Evolution, props?: Iterable<any>): void;
24
- /**
25
- * Triggers only opaque effects for property changes
26
- * Used by deep-touch to ensure opaque listeners are notified even when deep optimization is active
27
- */
28
- export declare function touchedOpaque(obj: any, evolution: Evolution, prop: any): void;
29
- //# sourceMappingURL=change.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"change.d.ts","sourceRoot":"","sources":["../../src/reactive/change.ts"],"names":[],"mappings":"AAMA,OAAO,EAAY,KAAK,SAAS,EAAW,KAAK,cAAc,EAAE,KAAK,KAAK,EAAE,MAAM,SAAS,CAAA;AAI5F,wBAAgB,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,QAMtD;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,GAAG,SAQhC;AAED,wBAAgB,cAAc,CAC7B,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,GAAG,CAAC,cAAc,CAAC,EAC5B,cAAc,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC,EAC7C,GAAG,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,QAyB7B;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,QAEjE;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,QAiB5E;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,QAiCtE"}
@@ -1,111 +0,0 @@
1
- /**
2
- * Debug utilities for the reactivity system
3
- * - Captures effect metadata (names, parent relationships)
4
- * - Records cause → consequence edges with object/prop labels
5
- * - Provides graph data for tooling (DevTools panel, etc.)
6
- */
7
- import { type Evolution, type ScopedCallback } from './types';
8
- export type NodeKind = 'effect' | 'external' | 'state';
9
- export type EdgeKind = 'cause' | 'dependency' | 'trigger';
10
- export interface EffectNode {
11
- id: string;
12
- label: string;
13
- type: NodeKind;
14
- depth: number;
15
- parentId?: string;
16
- debugName?: string;
17
- }
18
- export interface ObjectNode {
19
- id: string;
20
- label: string;
21
- type: NodeKind;
22
- debugName?: string;
23
- }
24
- export interface GraphEdge {
25
- id: string;
26
- source: string;
27
- target: string;
28
- type: EdgeKind;
29
- label: string;
30
- count?: number;
31
- }
32
- export interface ReactivityGraph {
33
- nodes: Array<EffectNode | ObjectNode>;
34
- edges: GraphEdge[];
35
- meta: {
36
- generatedAt: number;
37
- devtoolsEnabled: boolean;
38
- };
39
- }
40
- /**
41
- * Assign a debug-friendly name to an effect (shown in DevTools)
42
- */
43
- export declare function setEffectName(effect: ScopedCallback, name: string): void;
44
- /**
45
- * Assign a debug-friendly name to a reactive object
46
- */
47
- export declare function setObjectName(obj: object, name: string): void;
48
- /**
49
- * Register an effect so it appears in the DevTools graph
50
- */
51
- export declare function registerEffectForDebug(effect: ScopedCallback): void;
52
- /**
53
- * Register a reactive object so it appears in the DevTools graph
54
- */
55
- export declare function registerObjectForDebug(obj: object): void;
56
- /**
57
- * Records a cause → consequence relationship between effects.
58
- * @param source - The effect performing the write (undefined if external/user input)
59
- * @param target - The effect that re-ran because of the write
60
- * @param obj - The reactive object that changed
61
- * @param prop - The property that changed
62
- * @param evolution - The type of change (set/add/del/bunch)
63
- */
64
- export declare function recordTriggerLink(source: ScopedCallback | undefined, target: ScopedCallback, obj: object, prop: any, evolution: Evolution): void;
65
- /**
66
- * Traces back the chain of triggers that led to a specific effect
67
- * @param effect The effect to trace back
68
- * @param limit Max depth
69
- */
70
- export declare function getTriggerChain(effect: ScopedCallback, limit?: number): string[];
71
- /**
72
- * Builds a graph representing current reactive state (effects, objects, and trigger edges)
73
- */
74
- export declare function buildReactivityGraph(): ReactivityGraph;
75
- /**
76
- * Enables the DevTools bridge and exposes the debug API on window.
77
- * Call as early as possible in development builds.
78
- */
79
- export declare function enableDevTools(): void;
80
- export declare function forceEnableGraphTracking(): void;
81
- export declare function isDevtoolsEnabled(): boolean;
82
- /**
83
- * Returns the raw dependency graph data structure.
84
- * This is useful for programmatic analysis of the reactive system.
85
- */
86
- export declare function getDependencyGraph(): {
87
- nodes: (EffectNode | ObjectNode)[];
88
- edges: GraphEdge[];
89
- };
90
- /**
91
- * Returns a list of effects that depend on the given object.
92
- */
93
- export declare function getDependents(obj: object): ScopedCallback[];
94
- /**
95
- * Returns a list of objects that the given effect depends on.
96
- */
97
- export declare function getDependencies(effect: ScopedCallback): object[];
98
- export interface MutationRecord {
99
- id: number;
100
- timestamp: number;
101
- source: string;
102
- target: string;
103
- objectName: string;
104
- prop: string;
105
- type: string;
106
- }
107
- /**
108
- * Get the recent mutation history
109
- */
110
- export declare function getMutationHistory(): MutationRecord[];
111
- //# sourceMappingURL=debug.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../src/reactive/debug.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAY,KAAK,SAAS,EAAW,KAAK,cAAc,EAAE,MAAM,SAAS,CAAA;AA6BhF,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAA;AACtD,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,YAAY,GAAG,SAAS,CAAA;AAEzD,MAAM,WAAW,UAAU;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,QAAQ,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,UAAU;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,QAAQ,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,SAAS;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,QAAQ,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,eAAe;IAC/B,KAAK,EAAE,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC,CAAA;IACrC,KAAK,EAAE,SAAS,EAAE,CAAA;IAClB,IAAI,EAAE;QACL,WAAW,EAAE,MAAM,CAAA;QACnB,eAAe,EAAE,OAAO,CAAA;KACxB,CAAA;CACD;AA+FD;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,QAEjE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAGtD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,cAAc,QAG5D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,QAGjD;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAChC,MAAM,EAAE,cAAc,GAAG,SAAS,EAClC,MAAM,EAAE,cAAc,EACtB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,GAAG,EACT,SAAS,EAAE,SAAS,QAoBpB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,SAAI,GAAG,MAAM,EAAE,CAwC3E;AA6CD;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,eAAe,CA0EtD;AAED;;;GAGG;AACH,wBAAgB,cAAc,SAa7B;AAED,wBAAgB,wBAAwB,SAEvC;AAED,wBAAgB,iBAAiB,YAEhC;AAID;;;GAGG;AACH,wBAAgB,kBAAkB;;;EAKjC;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,EAAE,CAkB3D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,EAAE,CAGhE;AAID,MAAM,WAAW,cAAc;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACZ;AA4BD;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,cAAc,EAAE,CAErD"}
@@ -1,28 +0,0 @@
1
- import { type Evolution } from './types';
2
- export declare function shouldRecurseTouch(oldValue: any, newValue: any): boolean;
3
- /**
4
- * Centralized function to handle property change notifications with optional recursive touch
5
- * @param targetObj - The object whose property changed
6
- * @param prop - The property that changed
7
- * @param oldValue - The old value (before change)
8
- * @param newValue - The new value (after change)
9
- * @param hadProperty - Whether the property existed before (for add vs set)
10
- */
11
- export declare function notifyPropertyChange(targetObj: any, prop: any, oldValue: any, newValue: any, hadProperty: boolean): void;
12
- type VisitedPairs = WeakMap<object, WeakSet<object>>;
13
- type PendingNotification = {
14
- target: any;
15
- evolution: Evolution;
16
- prop: any;
17
- origin?: {
18
- obj: object;
19
- prop: PropertyKey;
20
- };
21
- };
22
- export declare function recursiveTouch(oldValue: any, newValue: any, visited?: VisitedPairs, notifications?: PendingNotification[], origin?: {
23
- obj: object;
24
- prop: PropertyKey;
25
- }): PendingNotification[];
26
- export declare function dispatchNotifications(notifications: PendingNotification[]): void;
27
- export {};
28
- //# sourceMappingURL=deep-touch.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deep-touch.d.ts","sourceRoot":"","sources":["../../src/reactive/deep-touch.ts"],"names":[],"mappings":"AAMA,OAAO,EAAY,KAAK,SAAS,EAAgC,MAAM,SAAS,CAAA;AAoBhF,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,GAAG,OAAO,CAKxE;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CACnC,SAAS,EAAE,GAAG,EACd,IAAI,EAAE,GAAG,EACT,QAAQ,EAAE,GAAG,EACb,QAAQ,EAAE,GAAG,EACb,WAAW,EAAE,OAAO,QAoBpB;AAED,KAAK,YAAY,GAAG,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;AACpD,KAAK,mBAAmB,GAAG;IAC1B,MAAM,EAAE,GAAG,CAAA;IACX,SAAS,EAAE,SAAS,CAAA;IACpB,IAAI,EAAE,GAAG,CAAA;IACT,MAAM,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,WAAW,CAAA;KAAE,CAAA;CAC3C,CAAA;AA0BD,wBAAgB,cAAc,CAC7B,QAAQ,EAAE,GAAG,EACb,QAAQ,EAAE,GAAG,EACb,OAAO,GAAE,YAA4B,EACrC,aAAa,GAAE,mBAAmB,EAAO,EACzC,MAAM,CAAC,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GACzC,mBAAmB,EAAE,CAYvB;AA2FD,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,mBAAmB,EAAE,QA0DzE"}
@@ -1,25 +0,0 @@
1
- import type { Evolution, ScopedCallback } from './types';
2
- export declare const objectParents: WeakMap<object, Set<{
3
- parent: object;
4
- prop: PropertyKey;
5
- }>>;
6
- export declare const objectsWithDeepWatchers: WeakSet<object>;
7
- export declare const deepWatchers: WeakMap<object, Set<ScopedCallback>>;
8
- export declare const effectToDeepWatchedObjects: WeakMap<ScopedCallback, Set<object>>;
9
- /**
10
- * Add a back-reference from child to parent
11
- */
12
- export declare function addBackReference(child: object, parent: object, prop: any): void;
13
- /**
14
- * Remove a back-reference from child to parent
15
- */
16
- export declare function removeBackReference(child: object, parent: object, prop: any): void;
17
- /**
18
- * Check if an object needs back-references (has deep watchers or parents with deep watchers)
19
- */
20
- export declare function needsBackReferences(obj: object): boolean;
21
- /**
22
- * Bubble up changes through the back-reference chain
23
- */
24
- export declare function bubbleUpChange(changedObject: object, evolution: Evolution): void;
25
- //# sourceMappingURL=deep-watch-state.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deep-watch-state.d.ts","sourceRoot":"","sources":["../../src/reactive/deep-watch-state.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAGxD,eAAO,MAAM,aAAa;YAAqC,MAAM;UAAQ,WAAW;GAAM,CAAA;AAG9F,eAAO,MAAM,uBAAuB,iBAAwB,CAAA;AAG5D,eAAO,MAAM,YAAY,sCAA6C,CAAA;AAGtE,eAAO,MAAM,0BAA0B,sCAA6C,CAAA;AAEpF;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,QAOxE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,QAa3E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAKxD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,QAYzE"}
@@ -1,19 +0,0 @@
1
- export { addBackReference, bubbleUpChange, deepWatchers, effectToDeepWatchedObjects, needsBackReferences, objectParents, objectsWithDeepWatchers, removeBackReference, } from './deep-watch-state';
2
- /**
3
- * Deep watch an object and all its nested properties
4
- * @param target - The object to watch deeply
5
- * @param callback - The callback to call when any nested property changes
6
- * @param options - Options for the deep watch
7
- * @returns A cleanup function to stop watching
8
- */
9
- /**
10
- * Sets up deep watching for an object, tracking all nested property changes
11
- * @param target - The object to watch
12
- * @param callback - The callback to call when changes occur
13
- * @param options - Options for deep watching
14
- * @returns A cleanup function to stop deep watching
15
- */
16
- export declare function deepWatch<T extends object>(target: T, callback: (value: T) => void, { immediate }?: {
17
- immediate?: boolean;
18
- }): (() => void) | undefined;
19
- //# sourceMappingURL=deep-watch.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deep-watch.d.ts","sourceRoot":"","sources":["../../src/reactive/deep-watch.ts"],"names":[],"mappings":"AAeA,OAAO,EACN,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,0BAA0B,EAC1B,mBAAmB,EACnB,aAAa,EACb,uBAAuB,EACvB,mBAAmB,GACnB,MAAM,oBAAoB,CAAA;AAE3B;;;;;;GAMG;AACH;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,EACzC,MAAM,EAAE,CAAC,EACT,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,EAC5B,EAAE,SAAiB,EAAE;;CAAK,GACxB,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CA2H1B"}
@@ -1,7 +0,0 @@
1
- import { ZoneAggregator, ZoneHistory } from '../zone';
2
- import { type ScopedCallback } from './types';
3
- export declare const effectHistory: ZoneHistory<ScopedCallback>;
4
- export declare const effectAggregator: ZoneAggregator;
5
- export declare function isRunning(effect: ScopedCallback): boolean;
6
- export declare function getActiveEffect(): ScopedCallback;
7
- //# sourceMappingURL=effect-context.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"effect-context.d.ts","sourceRoot":"","sources":["../../src/reactive/effect-context.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,cAAc,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAEhE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,SAAS,CAAA;AAE7C,eAAO,MAAM,aAAa,6BAA0D,CAAA;AAGpF,eAAO,MAAM,gBAAgB,gBAAqE,CAAA;AAElG,wBAAgB,SAAS,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAGzD;AAED,wBAAgB,eAAe,mBAE9B"}
@@ -1,151 +0,0 @@
1
- import { cleanup as cleanupSymbol, type DependencyAccess, type EffectOptions, type Evolution, type ScopedCallback, stopped } from './types';
2
- type EffectTracking = (obj: any, evolution: Evolution, prop: any) => void;
3
- export interface ActivationRecord {
4
- effect: ScopedCallback;
5
- obj: any;
6
- evolution: Evolution;
7
- prop: any;
8
- batchId: number;
9
- }
10
- export declare const activationLog: Omit<ActivationRecord, 'batchId'>[];
11
- export declare function getActivationLog(): Omit<ActivationRecord, "batchId">[];
12
- export declare function recordActivation(effect: ScopedCallback, obj: any, evolution: Evolution, prop: any): void;
13
- /**
14
- * Registers a debug callback that is called when the current effect is triggered by a dependency change
15
- *
16
- * This function is useful for debugging purposes as it pin-points exactly which reactive property
17
- * change triggered the effect. The callback receives information about:
18
- * - The object that changed
19
- * - The type of change (evolution)
20
- * - The specific property that changed
21
- *
22
- * **Note:** The tracker callback is automatically removed after being called once. If you need
23
- * to track multiple triggers, call `trackEffect` again within the effect.
24
- *
25
- * @param onTouch - Callback function that receives (obj, evolution, prop) when the effect is triggered
26
- * @throws {Error} If called outside of an effect context
27
- *
28
- * @example
29
- * ```typescript
30
- * const state = reactive({ count: 0, name: 'John' })
31
- *
32
- * effect(() => {
33
- * // Register a tracker to see what triggers this effect
34
- * trackEffect((obj, evolution, prop) => {
35
- * console.log(`Effect triggered by:`, {
36
- * object: obj,
37
- * change: evolution.type,
38
- * property: prop
39
- * })
40
- * })
41
- *
42
- * // Access reactive properties
43
- * console.log(state.count, state.name)
44
- * })
45
- *
46
- * state.count = 5
47
- * // Logs: Effect triggered by: { object: state, change: 'set', property: 'count' }
48
- * ```
49
- */
50
- export declare function trackEffect(onTouch: EffectTracking): void;
51
- declare const effectTrackers: WeakMap<ScopedCallback, Set<EffectTracking>>;
52
- export declare const opaqueEffects: WeakSet<ScopedCallback>;
53
- export declare const effectCreationStacks: WeakMap<Function, string>;
54
- export declare function hasBatched(effect: ScopedCallback): boolean;
55
- /**
56
- * Adds a cleanup function to be called when the current batch of effects completes
57
- * @param cleanup - The cleanup function to add
58
- */
59
- export declare function addBatchCleanup(cleanup: ScopedCallback): void;
60
- /**
61
- * Semantic alias for `addBatchCleanup` - defers work to the end of the current reactive batch.
62
- *
63
- * Use this when an effect needs to perform an action that would modify state the effect depends on,
64
- * which would create a reactive cycle. The deferred callback runs after all effects complete.
65
- *
66
- * @param callback - The callback to defer until after the current batch completes
67
- *
68
- * @example
69
- * ```typescript
70
- * effect(() => {
71
- * processData()
72
- *
73
- * // Defer to avoid cycle (createMovement modifies state this effect reads)
74
- * defer(() => {
75
- * createMovement(data)
76
- * })
77
- * })
78
- * ```
79
- */
80
- export declare const defer: typeof addBatchCleanup;
81
- export declare function batch(effect: ScopedCallback | ScopedCallback[], immediate?: 'immediate'): any;
82
- /**
83
- * Decorator that makes methods atomic - batches all effects triggered within the method
84
- */
85
- export declare const atomic: import("../decorator").LegacyPropertyDecorator<any> & import("../decorator").ModernMethodDecorator<any> & (<Args extends any[], Return>(original: (...args: Args) => Return) => (...args: Args) => Return);
86
- /**
87
- * @param fn - The effect function to run - provides the cleaner
88
- * @returns The cleanup function
89
- */
90
- /**
91
- * Creates a reactive effect that automatically re-runs when dependencies change
92
- * @param fn - The effect function that provides dependencies and may return a cleanup function or Promise
93
- * @param options - Options for effect execution
94
- * @returns A cleanup function to stop the effect
95
- */
96
- export declare function effect(fn: (access: DependencyAccess) => ScopedCallback | undefined | void | Promise<any>, effectOptions?: EffectOptions): ScopedCallback & {
97
- [stopped]: boolean;
98
- [cleanupSymbol]: () => void;
99
- };
100
- /**
101
- * Executes a function without tracking dependencies but maintains parent cleanup relationship
102
- * Effects created inside will still be cleaned up when the parent effect is destroyed
103
- * @param fn - The function to execute
104
- */
105
- export declare function untracked<T>(fn: () => T): T;
106
- /**
107
- * Executes a function from a virgin/root context - no parent effect, no tracking
108
- * Creates completely independent effects that won't be cleaned up by any parent
109
- * @param fn - The function to execute
110
- */
111
- export declare function root<T>(fn: () => T): T;
112
- export { effectTrackers };
113
- /**
114
- * Creates a bidirectional binding between a reactive value and a non-reactive external value
115
- * Prevents infinite loops by automatically suppressing circular notifications
116
- *
117
- * @param received - Function called when the reactive value changes (external setter)
118
- * @param get - Getter for the reactive value OR an object with `{ get, set }` properties
119
- * @param set - Setter for the reactive value (required if `get` is a function)
120
- * @returns A function to manually provide updates from the external side
121
- *
122
- * @example
123
- * ```typescript
124
- * const model = reactive({ value: '' })
125
- * const input = { value: '' }
126
- *
127
- * // Bidirectional binding
128
- * const provide = biDi(
129
- * (v) => input.value = v, // external setter
130
- * () => model.value, // reactive getter
131
- * (v) => model.value = v // reactive setter
132
- * )
133
- *
134
- * // External notification (e.g., from input event)
135
- * provide('new value') // Updates model.value, doesn't trigger circular loop
136
- * ```
137
- *
138
- * @example Using object syntax
139
- * ```typescript
140
- * const provide = biDi(
141
- * (v) => setHTMLValue(v),
142
- * { get: () => reactiveObj.value, set: (v) => reactiveObj.value = v }
143
- * )
144
- * ```
145
- */
146
- export declare function biDi<T>(received: (value: T) => void, value: {
147
- get: () => T;
148
- set: (value: T) => void;
149
- }): (value: T) => void;
150
- export declare function biDi<T>(received: (value: T) => void, get: () => T, set: (value: T) => void): (value: T) => void;
151
- //# sourceMappingURL=effects.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"effects.d.ts","sourceRoot":"","sources":["../../src/reactive/effects.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- export { getState, touched, touched1 } from './change';
2
- export type { ReactivityGraph } from './debug';
3
- export { buildReactivityGraph, enableDevTools, isDevtoolsEnabled, registerEffectForDebug, registerObjectForDebug, setEffectName, setObjectName, } from './debug';
4
- export { deepWatch } from './deep-watch';
5
- export { addBatchCleanup, atomic, biDi, defer, effect, getActivationLog, root, trackEffect, untracked, } from './effects';
6
- export { cleanedBy, cleanup, derived, unreactive, watch } from './interface';
7
- export { type Memoizable, memoize } from './memoize';
8
- export { immutables, isNonReactive, registerNativeReactivity } from './non-reactive';
9
- export { getActiveProjection, project } from './project';
10
- export { isReactive, ReactiveBase, reactive, unwrap } from './proxy';
11
- export { organize, organized } from './record';
12
- export { scan, type ScanResult, resolve } from './buffer';
13
- export { Register, register } from './register';
14
- export { getActiveEffect, effectAggregator } from './effect-context';
15
- export { type DependencyAccess, type Evolution, options as reactiveOptions, ReactiveError, ReactiveErrorCode, type ScopedCallback, } from './types';
16
- /**
17
- * Object containing internal reactive system state for debugging and profiling
18
- */
19
- export declare const profileInfo: any;
20
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/reactive/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACtD,YAAY,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAC9C,OAAO,EACN,oBAAoB,EACpB,cAAc,EACd,iBAAiB,EACjB,sBAAsB,EACtB,sBAAsB,EACtB,aAAa,EACb,aAAa,GACb,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EACN,eAAe,EACf,MAAM,EACN,IAAI,EACJ,KAAK,EACL,MAAM,EACN,gBAAgB,EAChB,IAAI,EACJ,WAAW,EACX,SAAS,GACT,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAC5E,OAAO,EAAE,KAAK,UAAU,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACpD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAA;AACpF,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AACpE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAC9C,OAAO,EAAE,IAAI,EAAE,KAAK,UAAU,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACpE,OAAO,EACN,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,OAAO,IAAI,eAAe,EAC1B,aAAa,EACb,iBAAiB,EACjB,KAAK,cAAc,GACnB,MAAM,SAAS,CAAA;AAsBhB;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,GAUzB,CAAA"}
@@ -1,64 +0,0 @@
1
- import { type GenericClassDecorator } from '../decorator';
2
- import { type DependencyAccess, type ScopedCallback } from './types';
3
- /**
4
- * Symbol for accessing the cleanup function on cleaned objects
5
- */
6
- export declare const cleanup: unique symbol;
7
- /**
8
- * Options for the watch function
9
- */
10
- export interface WatchOptions {
11
- /** Whether to call the callback immediately */
12
- immediate?: boolean;
13
- /** Whether to watch nested properties */
14
- deep?: boolean;
15
- }
16
- /**
17
- * Watches a reactive value and calls a callback when it changes
18
- * @param value - Function that returns the value to watch
19
- * @param changed - Callback to call when the value changes
20
- * @param options - Watch options
21
- * @returns Cleanup function to stop watching
22
- */
23
- export declare function watch<T>(value: (dep: DependencyAccess) => T, changed: (value: T, oldValue?: T) => void, options?: Omit<WatchOptions, 'deep'> & {
24
- deep?: false;
25
- }): ScopedCallback;
26
- /**
27
- * Watches a reactive value with deep watching enabled
28
- * @param value - Function that returns the value to watch
29
- * @param changed - Callback to call when the value changes
30
- * @param options - Watch options with deep watching enabled
31
- * @returns Cleanup function to stop watching
32
- */
33
- export declare function watch<T extends object | any[]>(value: (dep: DependencyAccess) => T, changed: (value: T, oldValue?: T) => void, options?: Omit<WatchOptions, 'deep'> & {
34
- deep: true;
35
- }): ScopedCallback;
36
- /**
37
- * Watches a reactive object directly
38
- * @param value - The reactive object to watch
39
- * @param changed - Callback to call when the object changes
40
- * @param options - Watch options
41
- * @returns Cleanup function to stop watching
42
- */
43
- export declare function watch<T extends object | any[]>(value: T, changed: (value: T) => void, options?: WatchOptions): ScopedCallback;
44
- declare function unreactiveApplication<T extends object>(...args: (keyof T)[]): GenericClassDecorator<T>;
45
- declare function unreactiveApplication<T extends object>(obj: T): T;
46
- /**
47
- * Decorator that marks classes or properties as non-reactive
48
- * Prevents objects from being made reactive
49
- */
50
- export declare const unreactive: import("../decorator").LegacyClassDecorator<new (...args: any[]) => any> & import("../decorator").ModernClassDecorator<new (...args: any[]) => any> & typeof unreactiveApplication;
51
- export declare function cleanedBy<T extends object>(obj: T, cleanupFn: ScopedCallback): T & {
52
- [cleanup]: ScopedCallback;
53
- };
54
- /**
55
- * Creates a derived value that automatically recomputes when dependencies change
56
- * @param compute - Function that computes the derived value
57
- * @returns Object with value and cleanup function
58
- */
59
- export declare function derived<T>(compute: (dep: DependencyAccess) => T): {
60
- value: T;
61
- [cleanup]: ScopedCallback;
62
- };
63
- export {};
64
- //# sourceMappingURL=interface.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/reactive/interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAOpE,OAAO,EACN,KAAK,gBAAgB,EAErB,KAAK,cAAc,EAEnB,MAAM,SAAS,CAAA;AAEhB;;GAEG;AACH,eAAO,MAAM,OAAO,eAAoB,CAAA;AAKxC;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B,+CAA+C;IAC/C,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,yCAAyC;IACzC,IAAI,CAAC,EAAE,OAAO,CAAA;CACd;AAED;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,CAAC,EACtB,KAAK,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,CAAC,EACnC,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,KAAK,IAAI,EACzC,OAAO,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,GAAG;IAAE,IAAI,CAAC,EAAE,KAAK,CAAA;CAAE,GACrD,cAAc,CAAA;AACjB;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,GAAG,GAAG,EAAE,EAC7C,KAAK,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,CAAC,EACnC,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,KAAK,IAAI,EACzC,OAAO,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,GAAG;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,GACnD,cAAc,CAAA;AACjB;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,GAAG,GAAG,EAAE,EAC7C,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,EAC3B,OAAO,CAAC,EAAE,YAAY,GACpB,cAAc,CAAA;AAgFjB,iBAAS,qBAAqB,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAA;AAChG,iBAAS,qBAAqB,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;AAkB3D;;;GAGG;AACH,eAAO,MAAM,UAAU,oLAMrB,CAAA;AAIF,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,cAAc,GAMtE,CAAC,GAAG;IAAE,CAAC,OAAO,CAAC,EAAE,cAAc,CAAA;CAAE,CACvC;AAID;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,CAAC,GAAG;IAClE,KAAK,EAAE,CAAC,CAAA;IACR,CAAC,OAAO,CAAC,EAAE,cAAc,CAAA;CACzB,CAUA"}