@legendapp/state 3.0.0-alpha.8 → 3.0.0-beta.0

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