@legendapp/state 3.0.0-alpha.4 → 3.0.0-alpha.40

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 (94) hide show
  1. package/.DS_Store +0 -0
  2. package/CHANGELOG.md +831 -1
  3. package/LICENSE +21 -1
  4. package/README.md +141 -1
  5. package/babel.js +0 -2
  6. package/babel.mjs +0 -2
  7. package/config/configureLegendState.d.mts +13 -0
  8. package/config/configureLegendState.d.ts +13 -0
  9. package/config/configureLegendState.js +45 -0
  10. package/config/configureLegendState.mjs +43 -0
  11. package/config/enable$GetSet.js +2 -1
  12. package/config/enable$GetSet.mjs +2 -1
  13. package/config/enableReactTracking.js +2 -1
  14. package/config/enableReactTracking.mjs +2 -1
  15. package/config/enableReactUse.js +2 -1
  16. package/config/enableReactUse.mjs +2 -1
  17. package/config/enable_PeekAssign.js +2 -1
  18. package/config/enable_PeekAssign.mjs +2 -1
  19. package/helpers/trackHistory.js +2 -2
  20. package/helpers/trackHistory.mjs +2 -2
  21. package/index.d.mts +106 -81
  22. package/index.d.ts +106 -81
  23. package/index.js +347 -335
  24. package/index.mjs +344 -333
  25. package/package.json +36 -1
  26. package/persist-plugins/async-storage.d.mts +6 -3
  27. package/persist-plugins/async-storage.d.ts +6 -3
  28. package/persist-plugins/async-storage.js +8 -4
  29. package/persist-plugins/async-storage.mjs +8 -5
  30. package/persist-plugins/indexeddb.d.mts +6 -4
  31. package/persist-plugins/indexeddb.d.ts +6 -4
  32. package/persist-plugins/indexeddb.js +35 -15
  33. package/persist-plugins/indexeddb.mjs +35 -16
  34. package/persist-plugins/mmkv.d.mts +5 -1
  35. package/persist-plugins/mmkv.d.ts +5 -1
  36. package/persist-plugins/mmkv.js +10 -5
  37. package/persist-plugins/mmkv.mjs +10 -6
  38. package/react-reactive/enableReactComponents.d.mts +9 -0
  39. package/react-reactive/enableReactComponents.d.ts +9 -0
  40. package/react-reactive/enableReactComponents.js +19 -0
  41. package/react-reactive/enableReactComponents.mjs +17 -0
  42. package/react-reactive/enableReactNativeComponents.d.mts +22 -0
  43. package/react-reactive/enableReactNativeComponents.d.ts +22 -0
  44. package/react-reactive/enableReactNativeComponents.js +53 -0
  45. package/react-reactive/enableReactNativeComponents.mjs +51 -0
  46. package/react-reactive/enableReactive.d.mts +5 -0
  47. package/react-reactive/enableReactive.d.ts +5 -0
  48. package/react-reactive/enableReactive.js +24 -0
  49. package/react-reactive/enableReactive.mjs +22 -0
  50. package/react-reactive/enableReactive.native.d.mts +5 -0
  51. package/react-reactive/enableReactive.native.d.ts +5 -0
  52. package/react-reactive/enableReactive.native.js +58 -0
  53. package/react-reactive/enableReactive.native.mjs +56 -0
  54. package/react-reactive/enableReactive.web.d.mts +5 -0
  55. package/react-reactive/enableReactive.web.d.ts +5 -0
  56. package/react-reactive/enableReactive.web.js +58 -0
  57. package/react-reactive/enableReactive.web.mjs +56 -0
  58. package/react.d.mts +39 -34
  59. package/react.d.ts +39 -34
  60. package/react.js +54 -27
  61. package/react.mjs +55 -28
  62. package/sync-plugins/crud.d.mts +21 -24
  63. package/sync-plugins/crud.d.ts +21 -24
  64. package/sync-plugins/crud.js +241 -140
  65. package/sync-plugins/crud.mjs +243 -142
  66. package/sync-plugins/fetch.js +12 -8
  67. package/sync-plugins/fetch.mjs +13 -9
  68. package/sync-plugins/firebase.d.mts +27 -0
  69. package/sync-plugins/firebase.d.ts +27 -0
  70. package/sync-plugins/firebase.js +373 -0
  71. package/sync-plugins/firebase.mjs +368 -0
  72. package/sync-plugins/keel.d.mts +43 -26
  73. package/sync-plugins/keel.d.ts +43 -26
  74. package/sync-plugins/keel.js +143 -100
  75. package/sync-plugins/keel.mjs +145 -100
  76. package/sync-plugins/supabase.d.mts +19 -9
  77. package/sync-plugins/supabase.d.ts +19 -9
  78. package/sync-plugins/supabase.js +52 -22
  79. package/sync-plugins/supabase.mjs +53 -23
  80. package/sync-plugins/tanstack-query.d.mts +2 -2
  81. package/sync-plugins/tanstack-query.d.ts +2 -2
  82. package/sync-plugins/tanstack-query.js +22 -5
  83. package/sync-plugins/tanstack-query.mjs +22 -5
  84. package/sync-plugins/tanstack-react-query.d.mts +1 -1
  85. package/sync-plugins/tanstack-react-query.d.ts +1 -1
  86. package/sync-plugins/tanstack-react-query.js +8 -1
  87. package/sync-plugins/tanstack-react-query.mjs +8 -1
  88. package/sync.d.mts +74 -200
  89. package/sync.d.ts +74 -200
  90. package/sync.js +510 -307
  91. package/sync.mjs +516 -313
  92. package/types/babel.d.ts +12 -1
  93. /package/config/{enable_GetSet.d.mts → enable$GetSet.d.mts} +0 -0
  94. /package/config/{enable_GetSet.d.ts → enable$GetSet.d.ts} +0 -0
package/index.d.mts CHANGED
@@ -5,9 +5,9 @@ type RemoveIndex<T> = {
5
5
  };
6
6
  type BuiltIns = String | Boolean | Number | Date | Error | RegExp | Array<any> | Function | Promise<any>;
7
7
  type IsUserDefinedObject<T> = T extends Function | BuiltIns | any[] ? false : T extends object ? true : false;
8
- type RemoveObservables<T> = T extends ImmutableObservableBase<infer t> ? t : IsUserDefinedObject<T> extends true ? {
8
+ type RemoveObservables<T> = T extends ImmutableObservableBase<infer t> ? t : T extends ImmutableObservableBase<infer t>[] ? t[] : IsUserDefinedObject<T> extends true ? {
9
9
  [K in keyof T]: RemoveObservables<T[K]>;
10
- } : T extends ImmutableObservableBase<infer TObs> ? TObs : T extends () => infer TRet ? RemoveObservables<TRet> & T : T extends (key: string) => infer TRet ? Record<string, RemoveObservables<TRet>> & T : T;
10
+ } : T extends ImmutableObservableBase<infer TObs> ? TObs : T extends () => infer TRet ? RemoveObservables<TRet> & T : T extends (key: infer TKey extends string | number) => infer TRet ? Record<TKey, RemoveObservables<TRet>> & T : T;
11
11
  interface ObservableArray<T, U> extends ObservablePrimitive<T>, Pick<Array<Observable<U>>, ArrayOverrideFnNames>, Omit<RemoveIndex<Array<U>>, ArrayOverrideFnNames> {
12
12
  }
13
13
  interface ObservableObjectFns<T> {
@@ -16,15 +16,18 @@ interface ObservableObjectFns<T> {
16
16
  interface ObservableObjectFunctions<T = Record<string, any>> extends ObservablePrimitive<T>, ObservableObjectFns<T> {
17
17
  }
18
18
  type MapKey<T extends Map<any, any> | WeakMap<any, any>> = Parameters<T['has']>[0];
19
- type MapValue<T extends Map<any, any> | WeakMap<any, any>> = Parameters<T['get']>[0];
20
- type ObservableMap<T extends Map<any, any> | WeakMap<any, any>> = Omit<T, 'get' | 'size'> & Omit<ObservablePrimitive<T>, 'get' | 'size'> & {
19
+ type MapValue<T extends Map<any, any> | WeakMap<any, any>> = ReturnType<T['get']>;
20
+ type ObservableMap<T extends Map<any, any> | WeakMap<any, any>> = Omit<T, 'get' | 'size' | 'set'> & Omit<ObservablePrimitive<T>, 'get' | 'size'> & Record<MapKey<T>, Observable<MapValue<T>>> & {
21
21
  get(key: Parameters<T['get']>[0]): Observable<Parameters<T['set']>[1]>;
22
22
  get(): T;
23
- size: ImmutableObservableBase<number>;
23
+ size: number;
24
+ set(key: MapKey<T>, value: MapValue<T>): Observable<T>;
24
25
  assign(value: Record<MapKey<T>, MapValue<T>> | Map<MapKey<T>, MapValue<T>> | WeakMap<MapKey<T>, MapValue<T>>): Observable<T>;
25
26
  };
26
- type ObservableSet<T extends Set<any> | WeakSet<any>> = Omit<T, 'size'> & Omit<ObservablePrimitive<T>, 'size'> & {
27
- size: ImmutableObservableBase<number>;
27
+ type SetValue<T extends Set<any> | WeakSet<any>> = Parameters<T['has']>[0];
28
+ type ObservableSet<T extends Set<any> | WeakSet<any>> = Omit<T, 'size' | 'add'> & Omit<ObservablePrimitive<T>, 'size'> & {
29
+ size: number;
30
+ add: (value: SetValue<T>) => Observable<T>;
28
31
  };
29
32
  interface ObservableBoolean extends ObservablePrimitive<boolean> {
30
33
  toggle(): void;
@@ -35,7 +38,7 @@ type ObservableAny = Partial<ObservableObjectFns<any>> & ObservablePrimitive<any
35
38
  interface ImmutableObservableSimple<T> {
36
39
  peek(): T;
37
40
  get(trackingType?: any): any;
38
- onChange(cb: ListenerFn<any>, options?: any): () => void;
41
+ onChange(cb: ListenerFn<T>, options?: any): () => void;
39
42
  }
40
43
  interface ImmutableObservableBase<T> extends ImmutableObservableSimple<T> {
41
44
  peek(): RemoveObservables<T>;
@@ -54,10 +57,10 @@ interface MutableObservableSimple {
54
57
  }
55
58
  interface MutableObservableBase<T> extends MutableObservableSimple {
56
59
  set(value: (prev: RemoveObservables<T>) => RemoveObservables<T>): void;
60
+ set(value: Observable<RemoveObservables<T>>): void;
57
61
  set(value: RecursiveValueOrFunction<T>): void;
58
62
  set(value: Promise<RemoveObservables<T>>): void;
59
63
  set(value: RemoveObservables<T>): void;
60
- set(value: Observable<RemoveObservables<T>>): void;
61
64
  delete(): void;
62
65
  }
63
66
  type UndefinedIf<T, U> = U extends true ? T | undefined : T;
@@ -76,37 +79,39 @@ type ObservableChildren<T, Nullable = IsNullable<T>> = {
76
79
  [K in keyof T]-?: Observable<UndefinedIf<T[K], Nullable>>;
77
80
  };
78
81
  type ObservableFunctionChildren<T> = {
79
- [K in keyof T]-?: T[K] extends Observable ? T[K] : T[K] extends (key: infer Key extends string) => Promise<infer t> | infer t ? HasOneStringParam<T[K]> extends true ? Observable<Record<Key, t>> & T[K] : t extends void ? T[K] : t extends Observable ? t : Observable<t> & (() => t) : T[K] & Observable<T[K]>;
82
+ [K in keyof T]-?: T[K] extends Observable ? T[K] : T[K] extends (key: infer Key extends string | number) => Promise<infer t> | infer t ? IsLookupFunction<T[K]> extends true ? Observable<Record<Key, t>> & T[K] : t extends void ? T[K] : t extends Observable ? t : Observable<t> & (() => t) : T[K] & Observable<T[K]>;
80
83
  };
81
84
  type IsStrictAny<T> = 0 extends 1 & T ? true : false;
82
85
  type ObservableObject<T> = ObservableObjectFunctions<ObservableProps<T> & NonObservableProps<T>> & ObservableChildren<ObservableProps<T>> & ObservableFunctionChildren<NonObservableProps<T>>;
83
86
  type ObservableFunction<T> = T extends () => infer t ? t | (() => t) : T;
84
- type HasOneStringParam<T> = T extends (...args: infer P) => any ? P extends {
87
+ type IsLookupFunction<T> = T extends (...args: infer P) => any ? P extends {
85
88
  length: 1;
86
- } ? P[0] extends string | ObservablePrimitive<string> ? true : false : false : false;
87
- type ObservableNode<T, NT = NonNullable<T>> = [NT] extends [never] ? ObservablePrimitive<T> : IsStrictAny<T> extends true ? ObservableAny : [T] extends [Promise<infer t>] ? ObservableNode<t> : [T] extends [(key: infer K extends string) => infer t] ? [t] extends [ImmutableObservableBase<any>] ? HasOneStringParam<T> extends true ? Observable<Record<K, t>> : t : HasOneStringParam<T> extends true ? Observable<Record<K, t>> & T : Observable<ObservableFunction<t>> : [NT] extends [ImmutableObservableBase<any>] ? NT : [NT] extends [Primitive$1] ? [NT] extends [boolean] ? ObservableBoolean : ObservablePrimitive<T> : NT extends Map<any, any> | WeakMap<any, any> ? ObservableMap<NT> : NT extends Set<infer U> ? ObservableSet<Set<UndefinedIf<U, IsNullable<T>>>> : NT extends WeakSet<any> ? ObservableSet<NT> : NT extends Array<infer U> ? ObservableArray<T, U> & ObservableChildren<T> : ObservableObject<T> & {};
89
+ } ? P[0] extends string | ObservablePrimitive<string> | number | ObservablePrimitive<number> ? true : false : false : false;
90
+ type ObservableNode<T, NT = NonNullable<T>> = [NT] extends [never] ? ObservablePrimitive<T> : IsStrictAny<T> extends true ? ObservableAny : [T] extends [Promise<infer t>] ? ObservableNode<t> : [T] extends [(key: infer K extends string) => infer t] ? [t] extends [ImmutableObservableBase<any>] ? IsLookupFunction<T> extends true ? Observable<Record<K, t>> : t : IsLookupFunction<T> extends true ? Observable<Record<K, t>> & T : Observable<ObservableFunction<t>> : [NT] extends [ImmutableObservableBase<any>] ? NT : [NT] extends [Primitive$1] ? [NT] extends [boolean] ? ObservableBoolean : ObservablePrimitive<T> : NT extends Map<any, any> | WeakMap<any, any> ? ObservableMap<NT> : NT extends Set<infer U> ? ObservableSet<Set<UndefinedIf<U, IsNullable<T>>>> : NT extends WeakSet<any> ? ObservableSet<NT> : NT extends Array<infer U> ? ObservableArray<T, U> & ObservableChildren<T> : ObservableObject<T> & {};
88
91
  type Observable<T = any> = ObservableNode<T> & {};
89
92
  type ObservableParam<T = any> = ImmutableObservableSimple<T> & MutableObservableSimple;
90
- type ValueOrFunction<T> = T extends Function ? T : T | ImmutableObservableBase<T> | Promise<T> | (() => T | Promise<T>);
93
+ type FixExpanded<T> = [T] extends [boolean] ? boolean : T;
94
+ type ValueOrFunction<T> = [T] extends [Function] ? T : T | ImmutableObservableBase<FixExpanded<T> | T> | Promise<FixExpanded<T> | T> | (() => FixExpanded<T> | T | Promise<FixExpanded<T> | T> | ImmutableObservableBase<FixExpanded<T> | T>);
91
95
  type ValueOrFunctionKeys<T> = {
92
96
  [K in keyof T]: RecursiveValueOrFunction<T[K]>;
93
97
  };
94
98
  type RecursiveValueOrFunction<T> = T extends Function ? T : T extends object ? ((key: string) => any) | Promise<ValueOrFunctionKeys<T>> | ValueOrFunctionKeys<T> | ImmutableObservableBase<T> | (() => T | Promise<T> | ValueOrFunctionKeys<T> | Promise<ValueOrFunctionKeys<T>> | Observable<T>) : ValueOrFunction<T>;
95
99
 
96
100
  declare const symbolOpaque: unique symbol;
101
+ declare const symbolPlain: unique symbol;
97
102
  declare function getPathType(value: any): TypeAtPath;
98
- declare function safeStringify(value: any): string;
103
+ declare function safeStringify(value: any): any;
99
104
  declare function safeParse(value: any): any;
100
105
  declare function clone<T>(value: T): any;
101
106
  declare function isObservable(value$: any): value$ is Observable;
102
- declare function getNode(value$: ObservableParam): NodeValue;
103
- declare function setNodeValue(node: NodeValue, newValue: any): {
107
+ declare function getNode(value$: ObservableParam): NodeInfo;
108
+ declare function setNodeValue(node: NodeInfo, newValue: any): {
104
109
  prevValue: any;
105
110
  newValue: any;
106
111
  };
107
- declare function getNodeValue(node: NodeValue): any;
108
- declare function ensureNodeValue(node: NodeValue): any;
109
- declare function findIDKey(obj: unknown | undefined, node: NodeValue): string | ((value: any) => string) | undefined;
112
+ declare function getNodeValue(node: NodeInfo): any;
113
+ declare function ensureNodeValue(node: NodeInfo): any;
114
+ declare function findIDKey(obj: unknown | undefined, node: NodeInfo): string | ((value: any) => string) | undefined;
110
115
 
111
116
  type TrackingType = undefined | true | symbol;
112
117
  interface GetOptions {
@@ -115,11 +120,15 @@ interface GetOptions {
115
120
  type OpaqueObject<T> = T & {
116
121
  [symbolOpaque]: true;
117
122
  };
123
+ type PlainObject<T> = T & {
124
+ [symbolPlain]: true;
125
+ };
118
126
  interface ListenerParams<T = any> {
119
127
  value: T;
120
128
  getPrevious: () => T;
121
129
  changes: Change[];
122
- remote: boolean;
130
+ isFromSync: boolean;
131
+ isFromPersist: boolean;
123
132
  }
124
133
  type ListenerFn<T = any> = (params: ListenerParams<T>) => void;
125
134
  interface ObservableEvent {
@@ -146,31 +155,31 @@ interface ObservableRoot {
146
155
  }
147
156
  type Primitive = boolean | string | number | Date;
148
157
  type NotPrimitive<T> = T extends Primitive ? never : T;
149
- interface NodeValueListener {
158
+ interface NodeListener {
150
159
  track: TrackingType;
151
160
  noArgs?: boolean;
152
161
  listener: ListenerFn;
153
162
  }
154
163
  interface TrackingState {
155
- nodes?: Map<NodeValue, TrackingNode>;
156
- traceListeners?: (nodes: Map<NodeValue, TrackingNode>) => void;
164
+ nodes?: Map<NodeInfo, TrackingNode>;
165
+ traceListeners?: (nodes: Map<NodeInfo, TrackingNode>) => void;
157
166
  traceUpdates?: (fn: Function) => Function;
158
167
  }
159
- interface BaseNodeValue {
160
- children?: Map<string, ChildNodeValue>;
168
+ interface BaseNodeInfo {
169
+ children?: Map<string, ChildNodeInfo>;
161
170
  proxy?: object;
162
171
  root: ObservableRoot;
163
- listeners?: Set<NodeValueListener>;
164
- listenersImmediate?: Set<NodeValueListener>;
172
+ listeners?: Set<NodeListener>;
173
+ listenersImmediate?: Set<NodeListener>;
165
174
  isEvent?: boolean;
166
- linkedToNode?: NodeValue;
175
+ linkedToNode?: NodeInfo;
167
176
  linkedToNodeDispose?: () => void;
168
177
  activatedObserveDispose?: () => void;
169
- linkedFromNodes?: Set<NodeValue>;
178
+ linkedFromNodes?: Set<NodeInfo>;
170
179
  isSetting?: number;
171
180
  isAssigning?: number;
172
181
  isComputing?: boolean;
173
- parentOther?: NodeValue;
182
+ parentOther?: NodeInfo;
174
183
  functions?: Map<string, Function | Observable<any>>;
175
184
  lazy?: boolean;
176
185
  lazyFn?: Function;
@@ -178,24 +187,27 @@ interface BaseNodeValue {
178
187
  numListenersRecursive: number;
179
188
  state?: Observable<ObservableSyncState>;
180
189
  activated?: boolean;
190
+ recursivelyAutoActivated?: boolean;
181
191
  activationState?: LinkedOptions & {
182
192
  onError?: () => void;
183
- persistedRetry?: boolean;
193
+ onChange: (params: UpdateFnParams) => void | Promise<void>;
184
194
  };
185
195
  dirtyFn?: () => void;
186
- dirtyChildren?: Set<NodeValue>;
196
+ dirtyChildren?: Set<NodeInfo>;
197
+ numGets?: number;
198
+ getNumResolved?: number;
187
199
  }
188
- interface RootNodeValue extends BaseNodeValue {
200
+ interface RootNodeInfo extends BaseNodeInfo {
189
201
  parent?: undefined;
190
202
  key?: undefined;
191
203
  }
192
- interface ChildNodeValue extends BaseNodeValue {
193
- parent: NodeValue;
204
+ interface ChildNodeInfo extends BaseNodeInfo {
205
+ parent: NodeInfo;
194
206
  key: string;
195
207
  }
196
- type NodeValue = RootNodeValue | ChildNodeValue;
208
+ type NodeInfo = RootNodeInfo | ChildNodeInfo;
197
209
  interface TrackingNode {
198
- node: NodeValue;
210
+ node: NodeInfo;
199
211
  track: TrackingType;
200
212
  num: number;
201
213
  }
@@ -210,17 +222,18 @@ interface ObserveEventCallback<T> {
210
222
  previous?: T | undefined;
211
223
  value?: T;
212
224
  cancel: boolean;
213
- nodes: Map<NodeValue, TrackingNode> | undefined;
225
+ nodes: Map<NodeInfo, TrackingNode> | undefined;
214
226
  refresh: () => void;
215
227
  onCleanup?: () => void;
216
228
  onCleanupReaction?: () => void;
217
229
  }
218
230
  type SetParams<T> = ListenerParams<T extends Promise<infer t> ? t : T>;
231
+ type WaitForSet<T> = ((params: WaitForSetFnParams<T>) => any) | Promise<any> | ObservableParam<any> | ObservableEvent | ObservableParam<any>[] | ObservableEvent[];
219
232
  interface LinkedOptions<T = any> {
220
233
  get?: () => Promise<T> | T;
221
234
  set?: (params: SetParams<T>) => void | Promise<any>;
222
- waitFor?: Selector<any>;
223
- waitForSet?: ((params: WaitForSetFnParams<T>) => any) | Promise<any> | ObservableParam<any> | ObservableEvent;
235
+ waitFor?: Selector<unknown>;
236
+ waitForSet?: WaitForSet<T>;
224
237
  initial?: (() => T) | T;
225
238
  activate?: 'auto' | 'lazy';
226
239
  }
@@ -229,12 +242,12 @@ interface WaitForSetFnParams<T = any> {
229
242
  changes: Change[];
230
243
  }
231
244
  type GetMode = 'set' | 'assign' | 'merge' | 'append' | 'prepend';
232
- interface UpdateFnParams {
233
- value: unknown;
245
+ interface UpdateFnParams<T = any> {
246
+ value: T;
234
247
  mode?: GetMode;
235
248
  lastSync?: number | undefined;
236
249
  }
237
- type UpdateFn = (params: UpdateFnParams) => void;
250
+ type UpdateFn<T = any> = (params: UpdateFnParams<T>) => void;
238
251
  type Linked<T> = T;
239
252
  interface ObserveOptions {
240
253
  immediate?: boolean;
@@ -245,12 +258,19 @@ interface ObservableSyncStateBase {
245
258
  isSyncEnabled: boolean;
246
259
  lastSync?: number;
247
260
  syncCount?: number;
248
- clearPersist: () => Promise<void>;
261
+ isGetting?: boolean;
262
+ isSetting?: boolean;
263
+ numPendingGets?: number;
264
+ numPendingSets?: number;
249
265
  sync: () => Promise<void>;
250
266
  getPendingChanges: () => Record<string, {
251
267
  p: any;
252
268
  v?: any;
253
269
  }> | undefined;
270
+ resetPersistence: () => Promise<void>;
271
+ reset: () => Promise<void>;
272
+ numPendingRemoteLoads?: number;
273
+ clearPersist: () => Promise<void>;
254
274
  }
255
275
  interface ObservableState {
256
276
  isLoaded: boolean;
@@ -265,6 +285,18 @@ interface RetryOptions {
265
285
  maxDelay?: number;
266
286
  }
267
287
 
288
+ declare const ObservableHint: {
289
+ opaque: <T extends object>(value: T) => OpaqueObject<T>;
290
+ plain: <T extends object>(value: T) => PlainObject<T>;
291
+ };
292
+
293
+ declare function getProxy(node: NodeInfo, p?: string, asFunction?: Function): Observable;
294
+ declare function set(node: NodeInfo, newValue?: any): void;
295
+ declare function get(node: NodeInfo, options?: TrackingType | GetOptions): any;
296
+ declare function peek(node: NodeInfo): any;
297
+ declare function isObserved(node: NodeInfo): boolean;
298
+ declare function shouldIgnoreUnobserved(node: NodeInfo, refreshFn: () => void): true | undefined;
299
+
268
300
  declare function createPreviousHandler(value: any, changes: Change[]): () => any;
269
301
  declare function batch(fn: () => void): void;
270
302
  declare function beginBatch(): void;
@@ -273,18 +305,6 @@ declare function endBatch(force?: boolean): void;
273
305
  declare function computed<T>(get: () => RecursiveValueOrFunction<T>): Observable<T>;
274
306
  declare function computed<T, T2 = T>(get: (() => RecursiveValueOrFunction<T>) | RecursiveValueOrFunction<T>, set: (value: T2) => void): Observable<T>;
275
307
 
276
- declare function linked<T>(params: LinkedOptions<T> | (() => T), options?: LinkedOptions<T>): Linked<T>;
277
-
278
- declare function configureLegendState({ observableFunctions, observableProperties, jsonReplacer, jsonReviver, }: {
279
- observableFunctions?: Record<string, (node: NodeValue, ...args: any[]) => any>;
280
- observableProperties?: Record<string, {
281
- get: (node: NodeValue) => any;
282
- set: (node: NodeValue, value: any) => any;
283
- }>;
284
- jsonReplacer?: (this: any, key: string, value: any) => any;
285
- jsonReviver?: (this: any, key: string, value: any) => any;
286
- }): void;
287
-
288
308
  declare function event(): ObservableEvent;
289
309
 
290
310
  declare function computeSelector<T>(selector: Selector<T>, e?: ObserveEvent<T>, retainObservable?: boolean): T;
@@ -292,8 +312,7 @@ declare function getObservableIndex(value$: ObservableParam): number;
292
312
  declare function opaqueObject<T extends object>(value: T): OpaqueObject<T>;
293
313
  declare function getValueAtPath(obj: Record<string, any>, path: string[]): any;
294
314
  declare function setAtPath<T extends object>(obj: T, path: string[], pathTypes: TypeAtPath[], value: any, mode?: 'set' | 'merge', fullObj?: T, restore?: (path: string[], value: any) => void): T;
295
- declare function setInObservableAtPath(value$: ObservableParam, path: string[], pathTypes: TypeAtPath[], value: any, mode: 'assign' | 'set' | 'merge'): void;
296
- declare function mergeIntoObservable<T extends ObservableParam<Record<string, any>> | object>(target: T, ...sources: any[]): T;
315
+ declare function mergeIntoObservable<T extends ObservableParam<any>>(target: T, ...sources: any[]): T;
297
316
  declare function constructObjectWithPath(path: string[], pathTypes: TypeAtPath[], value: any): object;
298
317
  declare function deconstructObjectWithPath(path: string[], pathTypes: TypeAtPath[], value: any): object;
299
318
  declare function isObservableValueReady(value: any): boolean;
@@ -301,11 +320,13 @@ declare function setSilently(value$: ObservableParam, newValue: any): any;
301
320
  declare function initializePathType(pathType: TypeAtPath): any;
302
321
  declare function applyChange<T extends object>(value: T, change: Change, applyPrevious?: boolean): T;
303
322
  declare function applyChanges<T extends object>(value: T, changes: Change[], applyPrevious?: boolean): T;
323
+ declare function deepMerge<T>(target: T, ...sources: any[]): T;
304
324
 
305
325
  declare const hasOwnProperty: (v: PropertyKey) => boolean;
306
326
  declare function isArray(obj: unknown): obj is Array<any>;
307
327
  declare function isString(obj: unknown): obj is string;
308
328
  declare function isObject(obj: unknown): obj is Record<any, any>;
329
+ declare function isPlainObject(obj: unknown): obj is Record<any, any>;
309
330
  declare function isFunction(obj: unknown): obj is Function;
310
331
  declare function isPrimitive(arg: unknown): arg is string | number | bigint | boolean | symbol;
311
332
  declare function isDate(obj: unknown): obj is Date;
@@ -313,16 +334,18 @@ declare function isSymbol(obj: unknown): obj is symbol;
313
334
  declare function isBoolean(obj: unknown): obj is boolean;
314
335
  declare function isPromise<T>(obj: unknown): obj is Promise<T>;
315
336
  declare function isMap(obj: unknown): obj is Map<any, any>;
337
+ declare function isSet(obj: unknown): obj is Set<any>;
316
338
  declare function isNumber(obj: unknown): obj is number;
317
339
  declare function isEmpty(obj: object): boolean;
318
340
  declare function isNullOrUndefined(value: any): value is undefined | null;
319
341
 
342
+ declare function linked<T>(params: LinkedOptions<T> | (() => T), options?: LinkedOptions<T>): Linked<T>;
343
+
320
344
  declare function observable<T>(): Observable<T | undefined>;
321
345
  declare function observable<T>(value: Promise<RecursiveValueOrFunction<T>> | (() => RecursiveValueOrFunction<T>) | RecursiveValueOrFunction<T>): Observable<T>;
322
346
  declare function observable<T>(value: T): Observable<T>;
323
347
  declare function observablePrimitive<T>(value: Promise<T>): ObservablePrimitive<T>;
324
348
  declare function observablePrimitive<T>(value?: T): ObservablePrimitive<T>;
325
- declare function syncState(obs: ObservableParam): Observable<ObservableSyncState>;
326
349
 
327
350
  declare function observe<T>(run: (e: ObserveEvent<T>) => T | void, options?: ObserveOptions): () => void;
328
351
  declare function observe<T>(selector: Selector<T> | ((e: ObserveEvent<T>) => any), reaction?: (e: ObserveEventCallback<T>) => any, options?: ObserveOptions): () => void;
@@ -332,37 +355,36 @@ declare function proxy<T extends Record<string, any>>(get: <K extends keyof T>(k
332
355
  declare function proxy<T>(get: (key: string) => ObservableParam<T>): Observable<Record<string, T>>;
333
356
  declare function proxy<T>(get: (key: string) => T): Observable<Record<string, T>>;
334
357
 
358
+ declare function syncState(obs: ObservableParam): Observable<ObservableSyncState>;
359
+
335
360
  declare function trackSelector<T>(selector: Selector<T>, update: (params: ListenerParams) => void, observeEvent?: ObserveEvent<T>, observeOptions?: ObserveOptions, createResubscribe?: boolean): {
336
- nodes: Map<NodeValue, TrackingNode> | undefined;
361
+ nodes: Map<NodeInfo, TrackingNode> | undefined;
337
362
  value: T;
338
363
  dispose: (() => void) | undefined;
339
364
  resubscribe: (() => () => void) | undefined;
340
365
  };
341
366
 
342
367
  declare function when<T, T2>(predicate: Promise<T>, effect: (value: T) => T2): Promise<T2>;
368
+ declare function when<T, T2>(predicate: Selector<T>[], effect: (value: T[]) => T2): Promise<T2>;
343
369
  declare function when<T, T2>(predicate: Selector<T>, effect: (value: T) => T2): Promise<T2>;
370
+ declare function when<T>(predicate: Selector<T>[]): Promise<T[]>;
344
371
  declare function when<T>(predicate: Selector<T>): Promise<T>;
345
372
  declare function whenReady<T, T2>(predicate: Promise<T>, effect: (value: T) => T2): Promise<T2>;
373
+ declare function whenReady<T, T2>(predicate: Selector<T>[], effect: (value: T[]) => T2): Promise<T2[]>;
346
374
  declare function whenReady<T, T2>(predicate: Selector<T>, effect: (value: T) => T2): Promise<T2>;
375
+ declare function whenReady<T>(predicate: Selector<T>[]): Promise<T[]>;
347
376
  declare function whenReady<T>(predicate: Selector<T>): Promise<T>;
348
377
 
349
- declare function getProxy(node: NodeValue, p?: string, asFunction?: Function): Observable;
350
- declare function set(node: NodeValue, newValue?: any): void;
351
- declare function get(node: NodeValue, options?: TrackingType | GetOptions): any;
352
- declare function peek(node: NodeValue): any;
353
- declare function isObserved(node: NodeValue): boolean;
354
- declare function shouldIgnoreUnobserved(node: NodeValue, refreshFn: () => void): true | undefined;
355
-
356
- declare function runWithRetry<T>(node: NodeValue, state: {
357
- attemptNum: number;
358
- retry: RetryOptions | undefined;
359
- }, fn: (e: {
360
- cancel?: boolean;
361
- }) => T | Promise<T>): T | Promise<T>;
378
+ interface ObservablePrimitiveState {
379
+ _node: NodeInfo;
380
+ toggle: () => void;
381
+ }
382
+ declare function ObservablePrimitiveClass<T>(this: ObservablePrimitive<T> & ObservablePrimitiveState, node: NodeInfo): void;
362
383
 
363
384
  declare const internal: {
364
385
  createPreviousHandler: typeof createPreviousHandler;
365
386
  clone: typeof clone;
387
+ deepMerge: typeof deepMerge;
366
388
  ensureNodeValue: typeof ensureNodeValue;
367
389
  findIDKey: typeof findIDKey;
368
390
  get: typeof get;
@@ -373,22 +395,25 @@ declare const internal: {
373
395
  getValueAtPath: typeof getValueAtPath;
374
396
  globalState: {
375
397
  isLoadingLocal: boolean;
376
- isMerging: boolean;
377
398
  isLoadingRemote: boolean;
378
- activateSyncedNode: (node: NodeValue, newValue: any) => {
399
+ activateSyncedNode: (node: NodeInfo, newValue: any) => {
379
400
  update: UpdateFn;
380
401
  value: any;
381
402
  };
382
- pendingNodes: Map<NodeValue, () => void>;
383
- dirtyNodes: Set<NodeValue>;
403
+ pendingNodes: Map<NodeInfo, () => void>;
404
+ dirtyNodes: Set<NodeInfo>;
384
405
  replacer: ((this: any, key: string, value: any) => any) | undefined;
385
406
  reviver: ((this: any, key: string, value: any) => any) | undefined;
386
407
  };
387
408
  initializePathType: typeof initializePathType;
388
- observableFns: Map<string, (node: NodeValue, ...args: any[]) => any>;
409
+ ObservablePrimitiveClass: typeof ObservablePrimitiveClass;
410
+ observableProperties: Map<string, {
411
+ get: (node: NodeInfo, ...args: any[]) => any;
412
+ set: (node: NodeInfo, value: any) => any;
413
+ }>;
414
+ observableFns: Map<string, (node: NodeInfo, ...args: any[]) => any>;
389
415
  optimized: symbol;
390
416
  peek: typeof peek;
391
- runWithRetry: typeof runWithRetry;
392
417
  safeParse: typeof safeParse;
393
418
  safeStringify: typeof safeStringify;
394
419
  set: typeof set;
@@ -401,4 +426,4 @@ declare const internal: {
401
426
  };
402
427
  };
403
428
 
404
- export { type ArrayValue, type Change, type ChildNodeValue, type ClassConstructor, type GetMode, type GetOptions, type ImmutableObservableBase, type Linked, type LinkedOptions, type ListenerFn, type ListenerParams, type NodeValue, type NodeValueListener, type NotPrimitive, type Observable, type ObservableBoolean, type ObservableEvent, type ObservableListenerDispose, type ObservableObject, type ObservableParam, type ObservablePrimitive, type ObservableRoot, type ObservableState, type ObservableSyncState, type ObservableSyncStateBase, type ObservableValue, type ObserveEvent, type ObserveEventCallback, type ObserveOptions, type OpaqueObject, type Primitive, type RecordValue, type RecursiveValueOrFunction, type RemoveObservables, type RetryOptions, type RootNodeValue, type Selector, type SetParams, type TrackingNode, type TrackingState, type TrackingType, type TypeAtPath, type UpdateFn, type UpdateFnParams, type WaitForSetFnParams, applyChange, applyChanges, batch, beginBatch, computeSelector, computed, configureLegendState, constructObjectWithPath, deconstructObjectWithPath, endBatch, event, getObservableIndex, hasOwnProperty, internal, isArray, isBoolean, isDate, isEmpty, isFunction, isMap, isNullOrUndefined, isNumber, isObject, isObservable, isObservableValueReady, isObserved, isPrimitive, isPromise, isString, isSymbol, linked, mergeIntoObservable, observable, observablePrimitive, observe, opaqueObject, proxy, setAtPath, setInObservableAtPath, setSilently, shouldIgnoreUnobserved, syncState, trackSelector, when, whenReady };
429
+ export { type ArrayValue, type Change, type ChildNodeInfo, type ClassConstructor, type GetMode, type GetOptions, type ImmutableObservableBase, type Linked, type LinkedOptions, type ListenerFn, type ListenerParams, type NodeInfo, type NodeListener, type NotPrimitive, type Observable, type ObservableBoolean, type ObservableEvent, ObservableHint, type ObservableListenerDispose, type ObservableMap, type ObservableObject, type ObservableObjectFns, type ObservableParam, type ObservablePrimitive, type ObservableRoot, type ObservableState, type ObservableSyncState, type ObservableSyncStateBase, type ObservableValue, type ObserveEvent, type ObserveEventCallback, type ObserveOptions, type OpaqueObject, type PlainObject, type Primitive, type RecordValue, type RecursiveValueOrFunction, type RemoveObservables, type RetryOptions, type RootNodeInfo, type Selector, type SetParams, type TrackingNode, type TrackingState, type TrackingType, type TypeAtPath, type UpdateFn, type UpdateFnParams, type WaitForSet, type WaitForSetFnParams, applyChange, applyChanges, batch, beginBatch, computeSelector, computed, constructObjectWithPath, deconstructObjectWithPath, endBatch, event, getObservableIndex, hasOwnProperty, internal, isArray, isBoolean, isDate, isEmpty, isFunction, isMap, isNullOrUndefined, isNumber, isObject, isObservable, isObservableValueReady, isObserved, isPlainObject, isPrimitive, isPromise, isSet, isString, isSymbol, linked, mergeIntoObservable, observable, observablePrimitive, observe, opaqueObject, proxy, setAtPath, setSilently, shouldIgnoreUnobserved, syncState, trackSelector, when, whenReady };