mutts 1.0.7 → 1.0.8

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 (132) hide show
  1. package/README.md +61 -23
  2. package/dist/async/browser.d.ts +2 -0
  3. package/dist/async/browser.d.ts.map +1 -0
  4. package/dist/async/index.d.ts +18 -0
  5. package/dist/async/index.d.ts.map +1 -0
  6. package/dist/async/node.d.ts +2 -0
  7. package/dist/async/node.d.ts.map +1 -0
  8. package/dist/{chunks/index-BFYK02LG.js → browser.cjs} +169 -60
  9. package/dist/browser.cjs.map +1 -0
  10. package/dist/browser.d.ts +1654 -1
  11. package/dist/browser.esm.js +260 -25
  12. package/dist/browser.esm.js.map +1 -1
  13. package/dist/chunks/async-browser-CA0jPWIi.cjs +304 -0
  14. package/dist/chunks/async-browser-CA0jPWIi.cjs.map +1 -0
  15. package/dist/chunks/async-core-UqHzvJ-S.cjs +25 -0
  16. package/dist/chunks/async-core-UqHzvJ-S.cjs.map +1 -0
  17. package/dist/chunks/async-node-BYHuGTni.cjs +103 -0
  18. package/dist/chunks/async-node-BYHuGTni.cjs.map +1 -0
  19. package/dist/chunks/{index-CNR6QRUl.esm.js → index-DhaOVusv.esm.js} +173 -53
  20. package/dist/chunks/index-DhaOVusv.esm.js.map +1 -0
  21. package/dist/decorator.d.ts +106 -0
  22. package/dist/decorator.d.ts.map +1 -0
  23. package/dist/destroyable.d.ts +87 -0
  24. package/dist/destroyable.d.ts.map +1 -0
  25. package/dist/devtools/devtool/devtools.d.ts +1 -0
  26. package/dist/devtools/devtool/devtools.d.ts.map +1 -0
  27. package/dist/devtools/devtool/panel.d.ts +2 -0
  28. package/dist/devtools/devtool/panel.d.ts.map +1 -0
  29. package/dist/entry-browser.d.ts +3 -0
  30. package/dist/entry-browser.d.ts.map +1 -0
  31. package/dist/entry-node.d.ts +3 -0
  32. package/dist/entry-node.d.ts.map +1 -0
  33. package/dist/eventful.d.ts +18 -0
  34. package/dist/eventful.d.ts.map +1 -0
  35. package/dist/index.d.ts +13 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/indexable.d.ts +243 -0
  38. package/dist/indexable.d.ts.map +1 -0
  39. package/dist/introspection.d.ts +27 -0
  40. package/dist/introspection.d.ts.map +1 -0
  41. package/dist/iterableWeak.d.ts +53 -0
  42. package/dist/iterableWeak.d.ts.map +1 -0
  43. package/dist/mixins.d.ts +25 -0
  44. package/dist/mixins.d.ts.map +1 -0
  45. package/dist/mutts.umd.js +1 -1
  46. package/dist/mutts.umd.js.map +1 -1
  47. package/dist/mutts.umd.min.js +1 -1
  48. package/dist/mutts.umd.min.js.map +1 -1
  49. package/dist/node.cjs +105 -0
  50. package/dist/node.cjs.map +1 -0
  51. package/dist/node.d.ts +1 -2
  52. package/dist/node.esm.js +91 -32
  53. package/dist/node.esm.js.map +1 -1
  54. package/dist/promiseChain.d.ts +20 -0
  55. package/dist/promiseChain.d.ts.map +1 -0
  56. package/dist/reactive/array.d.ts +49 -0
  57. package/dist/reactive/array.d.ts.map +1 -0
  58. package/dist/reactive/buffer.d.ts +44 -0
  59. package/dist/reactive/buffer.d.ts.map +1 -0
  60. package/dist/reactive/change.d.ts +29 -0
  61. package/dist/reactive/change.d.ts.map +1 -0
  62. package/dist/reactive/debug.d.ts +111 -0
  63. package/dist/reactive/debug.d.ts.map +1 -0
  64. package/dist/reactive/deep-touch.d.ts +28 -0
  65. package/dist/reactive/deep-touch.d.ts.map +1 -0
  66. package/dist/reactive/deep-watch-state.d.ts +25 -0
  67. package/dist/reactive/deep-watch-state.d.ts.map +1 -0
  68. package/dist/reactive/deep-watch.d.ts +19 -0
  69. package/dist/reactive/deep-watch.d.ts.map +1 -0
  70. package/dist/reactive/effect-context.d.ts +7 -0
  71. package/dist/reactive/effect-context.d.ts.map +1 -0
  72. package/dist/reactive/effects.d.ts +151 -0
  73. package/dist/reactive/effects.d.ts.map +1 -0
  74. package/dist/reactive/index.d.ts +20 -0
  75. package/dist/reactive/index.d.ts.map +1 -0
  76. package/dist/reactive/interface.d.ts +64 -0
  77. package/dist/reactive/interface.d.ts.map +1 -0
  78. package/dist/reactive/map.d.ts +30 -0
  79. package/dist/reactive/map.d.ts.map +1 -0
  80. package/dist/reactive/memoize.d.ts +5 -0
  81. package/dist/reactive/memoize.d.ts.map +1 -0
  82. package/dist/reactive/non-reactive-state.d.ts +9 -0
  83. package/dist/reactive/non-reactive-state.d.ts.map +1 -0
  84. package/dist/reactive/non-reactive.d.ts +11 -0
  85. package/dist/reactive/non-reactive.d.ts.map +1 -0
  86. package/dist/reactive/project.d.ts +41 -0
  87. package/dist/reactive/project.d.ts.map +1 -0
  88. package/dist/reactive/proxy-state.d.ts +8 -0
  89. package/dist/reactive/proxy-state.d.ts.map +1 -0
  90. package/dist/reactive/proxy.d.ts +23 -0
  91. package/dist/reactive/proxy.d.ts.map +1 -0
  92. package/dist/reactive/record.d.ts +116 -0
  93. package/dist/reactive/record.d.ts.map +1 -0
  94. package/dist/reactive/register.d.ts +64 -0
  95. package/dist/reactive/register.d.ts.map +1 -0
  96. package/dist/reactive/registry.d.ts +20 -0
  97. package/dist/reactive/registry.d.ts.map +1 -0
  98. package/dist/reactive/set.d.ts +28 -0
  99. package/dist/reactive/set.d.ts.map +1 -0
  100. package/dist/reactive/tracking.d.ts +7 -0
  101. package/dist/reactive/tracking.d.ts.map +1 -0
  102. package/dist/reactive/types.d.ts +376 -0
  103. package/dist/reactive/types.d.ts.map +1 -0
  104. package/dist/std-decorators.d.ts +50 -0
  105. package/dist/std-decorators.d.ts.map +1 -0
  106. package/dist/utils.d.ts +49 -0
  107. package/dist/utils.d.ts.map +1 -0
  108. package/dist/zone.d.ts +40 -0
  109. package/dist/zone.d.ts.map +1 -0
  110. package/docs/std-decorators.md +69 -1
  111. package/docs/zone.md +7 -0
  112. package/package.json +39 -27
  113. package/src/async/browser.ts +266 -34
  114. package/src/async/index.ts +17 -2
  115. package/src/async/node.ts +89 -31
  116. package/src/entry-browser.ts +5 -0
  117. package/src/entry-node.ts +5 -0
  118. package/src/index.d.ts +12 -9
  119. package/src/index.ts +1 -0
  120. package/src/reactive/array.ts +139 -52
  121. package/src/reactive/effect-context.ts +3 -3
  122. package/src/reactive/index.ts +2 -1
  123. package/src/reactive/map.ts +1 -1
  124. package/src/reactive/set.ts +1 -1
  125. package/src/utils.ts +1 -1
  126. package/src/zone.ts +19 -8
  127. package/dist/browser.js +0 -161
  128. package/dist/browser.js.map +0 -1
  129. package/dist/chunks/index-BFYK02LG.js.map +0 -1
  130. package/dist/chunks/index-CNR6QRUl.esm.js.map +0 -1
  131. package/dist/node.js +0 -136
  132. package/dist/node.js.map +0 -1
@@ -0,0 +1,19 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,7 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,151 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effects.d.ts","sourceRoot":"","sources":["../../src/reactive/effects.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,64 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Reactive wrapper around JavaScript's WeakMap class
3
+ * Only tracks individual key operations, no size tracking (WeakMap limitation)
4
+ */
5
+ export declare abstract class ReactiveWeakMap<K extends object, V> extends WeakMap<K, V> {
6
+ get [Symbol.toStringTag](): string;
7
+ delete(key: K): boolean;
8
+ get(key: K): V | undefined;
9
+ has(key: K): boolean;
10
+ set(key: K, value: V): this;
11
+ }
12
+ /**
13
+ * Reactive wrapper around JavaScript's Map class
14
+ * Tracks size changes, individual key operations, and collection-wide operations
15
+ */
16
+ export declare abstract class ReactiveMap<K, V> extends Map<K, V> {
17
+ get [Symbol.toStringTag](): string;
18
+ get size(): number;
19
+ clear(): void;
20
+ entries(): Generator<[K, V]>;
21
+ forEach(callbackfn: (value: V, key: K, map: Map<K, V>) => void, thisArg?: any): void;
22
+ keys(): MapIterator<K>;
23
+ values(): Generator<V>;
24
+ [Symbol.iterator](): MapIterator<[K, V]>;
25
+ delete(key: K): boolean;
26
+ get(key: K): V | undefined;
27
+ has(key: K): boolean;
28
+ set(key: K, value: V): this;
29
+ }
30
+ //# sourceMappingURL=map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../src/reactive/map.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,8BAAsB,eAAe,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,CAAE,SAAQ,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IAC/E,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,WAEvB;IAGD,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IASvB,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;IAK1B,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAKpB,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;CAY3B;AAED;;;GAGG;AACH,8BAAsB,WAAW,CAAC,CAAC,EAAE,CAAC,CAAE,SAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IACxD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,WAEvB;IAGD,IAAI,IAAI,IAAI,MAAM,CAGjB;IAED,KAAK,IAAI,IAAI;IAYb,OAAO,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAK5B,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,GAAG,GAAG,IAAI;IAKpF,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC;IAKtB,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC;IAKtB,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAsBxC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAavB,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;IAK1B,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAKpB,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;CAe3B"}
@@ -0,0 +1,5 @@
1
+ export type Memoizable = object | any[] | symbol | ((...args: any[]) => any);
2
+ declare function memoizeFunction<Result, Args extends Memoizable[]>(fn: (...args: Args) => Result): (...args: Args) => Result;
3
+ export declare const memoize: import("../decorator").LegacyPropertyDecorator<any> & import("../decorator").ModernMethodDecorator<any> & import("../decorator").ModernGetterDecorator<any> & import("../decorator").ModernAccessorDecorator<any> & typeof memoizeFunction;
4
+ export {};
5
+ //# sourceMappingURL=memoize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memoize.d.ts","sourceRoot":"","sources":["../../src/reactive/memoize.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,GAAG,EAAE,GAAG,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,CAAA;AAqB5E,iBAAS,eAAe,CAAC,MAAM,EAAE,IAAI,SAAS,UAAU,EAAE,EACzD,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,MAAM,GAC3B,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,MAAM,CA6E3B;AAED,eAAO,MAAM,OAAO,4OAoDlB,CAAA"}
@@ -0,0 +1,9 @@
1
+ export declare const nonReactiveObjects: WeakSet<object>;
2
+ export declare const immutables: Set<(tested: any) => boolean>;
3
+ export declare const absent: unique symbol;
4
+ declare function markNonReactive<T extends object[]>(...obj: T): T[0];
5
+ export declare function nonReactiveClass<T extends (new (...args: any[]) => any)[]>(...cls: T): T[0];
6
+ export declare function isNonReactive(obj: any): boolean;
7
+ export declare function registerNativeReactivity(originalClass: new (...args: any[]) => any, reactiveClass: new (...args: any[]) => any): void;
8
+ export { markNonReactive as nonReactive };
9
+ //# sourceMappingURL=non-reactive-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"non-reactive-state.d.ts","sourceRoot":"","sources":["../../src/reactive/non-reactive-state.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,kBAAkB,iBAAwB,CAAA;AACvD,eAAO,MAAM,UAAU,eAAoB,GAAG,KAAK,OAAO,CAAG,CAAA;AAC7D,eAAO,MAAM,MAAM,eAAmB,CAAA;AAEtC,iBAAS,eAAe,CAAC,CAAC,SAAS,MAAM,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAa5D;AAED,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,CAAC,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAG3F;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAM/C;AAED,wBAAgB,wBAAwB,CACvC,aAAa,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAC1C,aAAa,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,QAI1C;AAQD,OAAO,EAAE,eAAe,IAAI,WAAW,EAAE,CAAA"}
@@ -0,0 +1,11 @@
1
+ import { absent, immutables, isNonReactive, nonReactive, nonReactiveClass, nonReactiveObjects, registerNativeReactivity } from './non-reactive-state';
2
+ /**
3
+ * Converts an iterator to a generator that yields reactive values
4
+ */
5
+ export declare function makeReactiveIterator<T>(iterator: Iterator<T>): Generator<T>;
6
+ /**
7
+ * Converts an iterator of key-value pairs to a generator that yields reactive key-value pairs
8
+ */
9
+ export declare function makeReactiveEntriesIterator<K, V>(iterator: Iterator<[K, V]>): Generator<[K, V]>;
10
+ export { absent, immutables, isNonReactive, nonReactive, nonReactiveClass, nonReactiveObjects, registerNativeReactivity, };
11
+ //# sourceMappingURL=non-reactive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"non-reactive.d.ts","sourceRoot":"","sources":["../../src/reactive/non-reactive.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,MAAM,EACN,UAAU,EACV,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,wBAAwB,EACxB,MAAM,sBAAsB,CAAA;AAG7B;;GAEG;AACH,wBAAiB,oBAAoB,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAM5E;AAED;;GAEG;AACH,wBAAiB,2BAA2B,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAOhG;AAED,OAAO,EACN,MAAM,EACN,UAAU,EACV,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,wBAAwB,GACxB,CAAA"}
@@ -0,0 +1,41 @@
1
+ import { cleanup } from './interface';
2
+ import { Register } from './register';
3
+ import { type ProjectionContext, type ScopedCallback } from './types';
4
+ /**
5
+ * Maps projection effects (item effects) to their projection context
6
+ */
7
+ export declare const effectProjectionMetadata: WeakMap<ScopedCallback, ProjectionContext>;
8
+ /**
9
+ * Returns the projection context of the currently running effect, if any.
10
+ */
11
+ export declare function getActiveProjection(): ProjectionContext | undefined;
12
+ type ProjectOldValue<Target> = Target extends readonly (infer Item)[] ? Item : Target extends Map<any, infer Item> ? Item : Target extends Record<PropertyKey, infer Item> ? Item : unknown;
13
+ export type ProjectAccess<SourceValue, Key, SourceType, Target> = {
14
+ readonly key: Key;
15
+ get(): SourceValue;
16
+ set(value: SourceValue): boolean;
17
+ readonly source: SourceType;
18
+ readonly old?: ProjectOldValue<Target>;
19
+ value: SourceValue;
20
+ };
21
+ export type ProjectCallback<SourceValue, Key, Target extends object, SourceType, Result> = (access: ProjectAccess<SourceValue, Key, SourceType, Target>, target: Target) => Result;
22
+ export type ProjectResult<Target extends object> = Target & {
23
+ [cleanup]: ScopedCallback;
24
+ };
25
+ declare function projectArray<SourceValue, ResultValue>(source: readonly SourceValue[], apply: ProjectCallback<SourceValue, number, ResultValue[], readonly SourceValue[], ResultValue>): ProjectResult<ResultValue[]>;
26
+ declare function projectRegister<Key extends PropertyKey, SourceValue, ResultValue>(source: Register<SourceValue, Key>, apply: ProjectCallback<SourceValue, Key, Map<Key, ResultValue>, Register<SourceValue, Key>, ResultValue>): ProjectResult<Map<Key, ResultValue>>;
27
+ declare function projectRecord<Source extends Record<PropertyKey, any>, ResultValue>(source: Source, apply: ProjectCallback<Source[keyof Source], keyof Source, Record<keyof Source, ResultValue>, Source, ResultValue>): ProjectResult<Record<keyof Source, ResultValue>>;
28
+ declare function projectMap<Key, Value, ResultValue>(source: Map<Key, Value>, apply: ProjectCallback<Value, Key, Map<Key, ResultValue>, Map<Key, Value>, ResultValue>): ProjectResult<Map<Key, ResultValue>>;
29
+ type ProjectOverload = {
30
+ <SourceValue, ResultValue>(source: readonly SourceValue[], apply: ProjectCallback<SourceValue, number, ResultValue[], readonly SourceValue[], ResultValue>): ProjectResult<ResultValue[]>;
31
+ <Key extends PropertyKey, SourceValue, ResultValue>(source: Register<SourceValue, Key>, apply: ProjectCallback<SourceValue, Key, Map<Key, ResultValue>, Register<SourceValue, Key>, ResultValue>): ProjectResult<Map<Key, ResultValue>>;
32
+ <Source extends Record<PropertyKey, any>, ResultValue>(source: Source, apply: ProjectCallback<Source[keyof Source], keyof Source, Record<keyof Source, ResultValue>, Source, ResultValue>): ProjectResult<Record<keyof Source, ResultValue>>;
33
+ <Key, Value, ResultValue>(source: Map<Key, Value>, apply: ProjectCallback<Value, Key, Map<Key, ResultValue>, Map<Key, Value>, ResultValue>): ProjectResult<Map<Key, ResultValue>>;
34
+ array: typeof projectArray;
35
+ register: typeof projectRegister;
36
+ record: typeof projectRecord;
37
+ map: typeof projectMap;
38
+ };
39
+ export declare const project: ProjectOverload;
40
+ export {};
41
+ //# sourceMappingURL=project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/reactive/project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export declare const objectToProxy: WeakMap<object, object>;
2
+ export declare const proxyToObject: WeakMap<object, object>;
3
+ export declare function storeProxyRelationship(target: object, proxy: object): void;
4
+ export declare function getExistingProxy<T extends object>(target: T): T | undefined;
5
+ export declare function trackProxyObject(proxy: object, target: object): void;
6
+ export declare function unwrap<T>(obj: T): T;
7
+ export declare function isReactive(obj: any): boolean;
8
+ //# sourceMappingURL=proxy-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy-state.d.ts","sourceRoot":"","sources":["../../src/reactive/proxy-state.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,yBAAgC,CAAA;AAC1D,eAAO,MAAM,aAAa,yBAAgC,CAAA;AAE1D,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAGnE;AAED,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS,CAE3E;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAE7D;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAMnC;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAE5C"}
@@ -0,0 +1,23 @@
1
+ export declare const metaProtos: WeakMap<WeakKey, any>;
2
+ /**
3
+ * Base mixin for reactive classes that provides proper constructor reactivity
4
+ * Solves constructor reactivity issues in complex inheritance trees
5
+ */
6
+ export declare const ReactiveBase: (new (...args: any[]) => {
7
+ [x: string]: any;
8
+ }) & (<Base>(base: abstract new (...args: any[]) => Base) => new (...args: any[]) => {
9
+ [x: string]: any;
10
+ } & Base);
11
+ declare function reactiveObject<T>(anyTarget: T): T;
12
+ /**
13
+ * Main decorator for making classes reactive
14
+ * Automatically makes class instances reactive when created
15
+ */
16
+ export declare const reactive: import("../decorator").LegacyClassDecorator<new (...args: any[]) => any> & import("../decorator").ModernClassDecorator<new (...args: any[]) => any> & typeof reactiveObject;
17
+ /**
18
+ * Gets the original, non-reactive object from a reactive proxy
19
+ * @param proxy - The reactive proxy
20
+ * @returns The original object
21
+ */
22
+ export { isReactive, objectToProxy, proxyToObject, unwrap } from './proxy-state';
23
+ //# sourceMappingURL=proxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../src/reactive/proxy.ts"],"names":[],"mappings":"AA+BA,eAAO,MAAM,UAAU,uBAAgB,CAAA;AAyJvC;;;GAGG;AACH,eAAO,MAAM,YAAY;;;;SAWvB,CAAA;AACF,iBAAS,cAAc,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,CAsB1C;AAED;;;GAGG;AACH,eAAO,MAAM,QAAQ,6KA4BnB,CAAA;AAEF;;;;GAIG;AACH,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA"}
@@ -0,0 +1,116 @@
1
+ import { cleanup } from './interface';
2
+ import { type ScopedCallback } from './types';
3
+ /**
4
+ * Provides type-safe access to a source object's property within the organized callback.
5
+ * @template Source - The type of the source object
6
+ * @template Key - The type of the property key in the source object
7
+ */
8
+ export type OrganizedAccess<Source extends Record<PropertyKey, any>, Key extends keyof Source> = {
9
+ /** The property key being accessed */
10
+ readonly key: Key;
11
+ /**
12
+ * Gets the current value of the property from the source object
13
+ * @returns The current value of the property
14
+ */
15
+ get(): Source[Key];
16
+ /**
17
+ * Updates the property value in the source object
18
+ * @param value - The new value to set
19
+ * @returns {boolean} True if the update was successful
20
+ */
21
+ set(value: Source[Key]): boolean;
22
+ /**
23
+ * The current value of the property (equivalent to using get()/set() directly)
24
+ */
25
+ value: Source[Key];
26
+ };
27
+ /**
28
+ * Callback function type for the organized function that processes each source property.
29
+ * @template Source - The type of the source object
30
+ * @template Target - The type of the target object
31
+ */
32
+ export type OrganizedCallback<Source extends Record<PropertyKey, any>, Target extends object> = <Key extends keyof Source>(
33
+ /**
34
+ * Accessor object for the current source property
35
+ */
36
+ access: OrganizedAccess<Source, Key>,
37
+ /**
38
+ * The target object where organized data will be stored
39
+ */
40
+ target: Target) => ScopedCallback | undefined;
41
+ /**
42
+ * The result type of the organized function, combining the target object with cleanup capability.
43
+ * @template Target - The type of the target object
44
+ */
45
+ export type OrganizedResult<Target extends object> = Target & {
46
+ /**
47
+ * Cleanup function to dispose of all reactive bindings created by organized().
48
+ * This is automatically called when the effect that created the organized binding is disposed.
49
+ */
50
+ [cleanup]: ScopedCallback;
51
+ };
52
+ /**
53
+ * Organizes a source object's properties into a target object using a callback function.
54
+ * This creates a reactive mapping between source properties and a target object,
55
+ * automatically handling property additions, updates, and removals.
56
+ *
57
+ * @template Source - The type of the source object
58
+ * @template Target - The type of the target object (defaults to Record<PropertyKey, any>)
59
+ *
60
+ * @param {Source} source - The source object to organize
61
+ * @param {OrganizedCallback<Source, Target>} apply - Callback function that defines how each source property is mapped to the target
62
+ * @param {Target} [baseTarget={}] - Optional base target object to use (will be made reactive if not already)
63
+ *
64
+ * @returns {OrganizedResult<Target>} The target object with cleanup capability
65
+ *
66
+ * @example
67
+ * // Organize user permissions into role-based access
68
+ * const user = reactive({ isAdmin: true, canEdit: false });
69
+ * const permissions = organized(
70
+ * user,
71
+ * (access, target) => {
72
+ * if (access.key === 'isAdmin') {
73
+ * target.hasFullAccess = access.value;
74
+ * }
75
+ * target[`can${access.key.charAt(0).toUpperCase() + access.key.slice(1)}`] = access.value;
76
+ * }
77
+ * );
78
+ *
79
+ * @example
80
+ * // Transform object structure with cleanup
81
+ * const source = reactive({ firstName: 'John', lastName: 'Doe' });
82
+ * const formatted = organized(
83
+ * source,
84
+ * (access, target) => {
85
+ * if (access.key === 'firstName' || access.key === 'lastName') {
86
+ * target.fullName = `${source.firstName} ${source.lastName}`.trim();
87
+ * }
88
+ * }
89
+ * );
90
+ *
91
+ * @example
92
+ * // Using with cleanup in a component
93
+ * effect(() => {
94
+ * const data = fetchData();
95
+ * const organizedData = organized(data, (access, target) => {
96
+ * // Transform data
97
+ * });
98
+ *
99
+ * // The cleanup will be called automatically when the effect is disposed
100
+ * return () => organizedData[cleanup]();
101
+ * });
102
+ */
103
+ 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>;
104
+ /**
105
+ * Organizes a property on a target object
106
+ * Shortcut for defineProperty/delete with touched signal
107
+ * @param target - The target object
108
+ * @param property - The property to organize
109
+ * @param access - The access object
110
+ * @returns The property descriptor
111
+ */
112
+ export declare function organize<T>(target: object, property: PropertyKey, access: {
113
+ get?(): T;
114
+ set?(value: T): boolean;
115
+ }): () => boolean;
116
+ //# sourceMappingURL=record.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../src/reactive/record.ts"],"names":[],"mappings":"AAGA,OAAO,EAAa,OAAO,EAAE,MAAM,aAAa,CAAA;AAEhD,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,SAAS,CAAA;AAE7C;;;;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,cAAc,GAAG,SAAS,CAAA;AAE/B;;;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,CAgDzB;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"}