@legendapp/state 3.0.0-alpha.29 → 3.0.0-alpha.30

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 (47) hide show
  1. package/config/enable$GetSet.js +2 -1
  2. package/config/enable$GetSet.mjs +2 -1
  3. package/config/enableReactTracking.js +2 -1
  4. package/config/enableReactTracking.mjs +2 -1
  5. package/config/enableReactUse.js +2 -1
  6. package/config/enableReactUse.mjs +2 -1
  7. package/config/enable_PeekAssign.js +2 -1
  8. package/config/enable_PeekAssign.mjs +2 -1
  9. package/config.d.mts +13 -0
  10. package/config.d.ts +13 -0
  11. package/config.js +2052 -0
  12. package/config.mjs +2050 -0
  13. package/index.d.mts +5 -302
  14. package/index.d.ts +5 -302
  15. package/index.js +27 -142
  16. package/index.mjs +28 -141
  17. package/observableInterfaces-Dilj6F92.d.mts +282 -0
  18. package/observableInterfaces-Dilj6F92.d.ts +282 -0
  19. package/package.json +6 -1
  20. package/persist-plugins/async-storage.d.mts +6 -3
  21. package/persist-plugins/async-storage.d.ts +6 -3
  22. package/persist-plugins/async-storage.js +12 -4
  23. package/persist-plugins/async-storage.mjs +12 -5
  24. package/persist-plugins/indexeddb.d.mts +6 -4
  25. package/persist-plugins/indexeddb.d.ts +6 -4
  26. package/persist-plugins/indexeddb.js +15 -5
  27. package/persist-plugins/indexeddb.mjs +15 -6
  28. package/persist-plugins/mmkv.d.mts +5 -1
  29. package/persist-plugins/mmkv.d.ts +5 -1
  30. package/persist-plugins/mmkv.js +14 -5
  31. package/persist-plugins/mmkv.mjs +14 -6
  32. package/react.d.mts +1 -0
  33. package/react.d.ts +1 -0
  34. package/react.js +2 -2
  35. package/react.mjs +2 -2
  36. package/sync-plugins/crud.d.mts +1 -1
  37. package/sync-plugins/crud.d.ts +1 -1
  38. package/sync-plugins/fetch.js +12 -8
  39. package/sync-plugins/fetch.mjs +13 -9
  40. package/sync-plugins/keel.d.mts +2 -2
  41. package/sync-plugins/keel.d.ts +2 -2
  42. package/sync-plugins/keel.js +6 -6
  43. package/sync-plugins/keel.mjs +6 -6
  44. package/sync.d.mts +37 -19
  45. package/sync.d.ts +37 -19
  46. package/sync.js +143 -41
  47. package/sync.mjs +151 -50
package/index.d.ts CHANGED
@@ -1,282 +1,5 @@
1
- type Primitive$1 = string | number | boolean | symbol | bigint | undefined | null | Date;
2
- type ArrayOverrideFnNames = 'find' | 'findIndex' | 'every' | 'some' | 'filter' | 'reduce' | 'reduceRight' | 'forEach' | 'map' | 'sort';
3
- type RemoveIndex<T> = {
4
- [K in keyof T as string extends K ? never : number extends K ? never : K]: T[K];
5
- };
6
- type BuiltIns = String | Boolean | Number | Date | Error | RegExp | Array<any> | Function | Promise<any>;
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 : T extends ImmutableObservableBase<infer t>[] ? t[] : IsUserDefinedObject<T> extends true ? {
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: infer TKey extends string | number) => infer TRet ? Record<TKey, RemoveObservables<TRet>> & T : T;
11
- interface ObservableArray<T, U> extends ObservablePrimitive<T>, Pick<Array<Observable<U>>, ArrayOverrideFnNames>, Omit<RemoveIndex<Array<U>>, ArrayOverrideFnNames> {
12
- }
13
- interface ObservableObjectFns<T> {
14
- assign(value: Partial<T>): Observable<T>;
15
- }
16
- interface ObservableObjectFunctions<T = Record<string, any>> extends ObservablePrimitive<T>, ObservableObjectFns<T> {
17
- }
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>> = ReturnType<T['get']>;
20
- type ObservableMap<T extends Map<any, any> | WeakMap<any, any>> = Omit<T, 'get' | 'size' | 'set'> & Omit<ObservablePrimitive<T>, 'get' | 'size'> & {
21
- get(key: Parameters<T['get']>[0]): Observable<Parameters<T['set']>[1]>;
22
- get(): T;
23
- size: number;
24
- set(key: MapKey<T>, value: MapValue<T>): Observable<T>;
25
- assign(value: Record<MapKey<T>, MapValue<T>> | Map<MapKey<T>, MapValue<T>> | WeakMap<MapKey<T>, MapValue<T>>): Observable<T>;
26
- };
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>;
31
- };
32
- interface ObservableBoolean extends ObservablePrimitive<boolean> {
33
- toggle(): void;
34
- }
35
- interface ObservablePrimitive<T> extends ImmutableObservableBase<T>, MutableObservableBase<T> {
36
- }
37
- type ObservableAny = Partial<ObservableObjectFns<any>> & ObservablePrimitive<any> & Record<string, any>;
38
- interface ImmutableObservableSimple<T> {
39
- peek(): T;
40
- get(trackingType?: any): any;
41
- onChange(cb: ListenerFn<any>, options?: any): () => void;
42
- }
43
- interface ImmutableObservableBase<T> extends ImmutableObservableSimple<T> {
44
- peek(): RemoveObservables<T>;
45
- peek(): T;
46
- get(trackingType?: TrackingType | GetOptions): RemoveObservables<T>;
47
- onChange(cb: ListenerFn<T>, options?: {
48
- trackingType?: TrackingType;
49
- initial?: boolean;
50
- immediate?: boolean;
51
- noArgs?: boolean;
52
- }): () => void;
53
- }
54
- interface MutableObservableSimple {
55
- set(value: any): void;
56
- delete(): void;
57
- }
58
- interface MutableObservableBase<T> extends MutableObservableSimple {
59
- set(value: (prev: RemoveObservables<T>) => RemoveObservables<T>): void;
60
- set(value: RecursiveValueOrFunction<T>): void;
61
- set(value: Promise<RemoveObservables<T>>): void;
62
- set(value: RemoveObservables<T>): void;
63
- set(value: Observable<RemoveObservables<T>>): void;
64
- delete(): void;
65
- }
66
- type UndefinedIf<T, U> = U extends true ? T | undefined : T;
67
- type IsNullable<T> = undefined extends T ? true : null extends T ? true : false;
68
- type NonObservable = Function | Observable;
69
- type NonObservableKeys<T> = {
70
- [K in keyof T]-?: IsStrictAny<T[K]> extends true ? never : T[K] extends undefined | null ? never : NonNullable<T[K]> extends NonObservable ? K : never;
71
- }[keyof T];
72
- type ObservableProps<T> = NonObservableKeys<NonNullable<T>> extends never ? T : RestoreNullability<T, Omit<NonNullable<T>, NonObservableKeys<NonNullable<T>>>>;
73
- type NonObservableProps<T> = RestoreNullability<T, NullablePropsIf<Pick<NonNullable<T>, NonObservableKeys<NonNullable<T>>>, IsNullable<T>>>;
74
- type NullablePropsIf<T, U> = {
75
- [K in keyof T]: UndefinedIf<T[K], U>;
76
- };
77
- type RestoreNullability<Source, Target> = IsNullable<Source> extends true ? Target | Extract<Source, null | undefined> : Target;
78
- type ObservableChildren<T, Nullable = IsNullable<T>> = {
79
- [K in keyof T]-?: Observable<UndefinedIf<T[K], Nullable>>;
80
- };
81
- type ObservableFunctionChildren<T> = {
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]>;
83
- };
84
- type IsStrictAny<T> = 0 extends 1 & T ? true : false;
85
- type ObservableObject<T> = ObservableObjectFunctions<ObservableProps<T> & NonObservableProps<T>> & ObservableChildren<ObservableProps<T>> & ObservableFunctionChildren<NonObservableProps<T>>;
86
- type ObservableFunction<T> = T extends () => infer t ? t | (() => t) : T;
87
- type IsLookupFunction<T> = T extends (...args: infer P) => any ? P extends {
88
- length: 1;
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> & {};
91
- type Observable<T = any> = ObservableNode<T> & {};
92
- type ObservableParam<T = any> = ImmutableObservableSimple<T> & MutableObservableSimple;
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>);
95
- type ValueOrFunctionKeys<T> = {
96
- [K in keyof T]: RecursiveValueOrFunction<T[K]>;
97
- };
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>;
99
-
100
- declare const symbolOpaque: unique symbol;
101
- declare function getPathType(value: any): TypeAtPath;
102
- declare function safeStringify(value: any): any;
103
- declare function safeParse(value: any): any;
104
- declare function clone<T>(value: T): any;
105
- declare function isObservable(value$: any): value$ is Observable;
106
- declare function getNode(value$: ObservableParam): NodeInfo;
107
- declare function setNodeValue(node: NodeInfo, newValue: any): {
108
- prevValue: any;
109
- newValue: any;
110
- };
111
- declare function getNodeValue(node: NodeInfo): any;
112
- declare function ensureNodeValue(node: NodeInfo): any;
113
- declare function findIDKey(obj: unknown | undefined, node: NodeInfo): string | ((value: any) => string) | undefined;
114
-
115
- type TrackingType = undefined | true | symbol;
116
- interface GetOptions {
117
- shallow: boolean;
118
- }
119
- type OpaqueObject<T> = T & {
120
- [symbolOpaque]: true;
121
- };
122
- interface ListenerParams<T = any> {
123
- value: T;
124
- getPrevious: () => T;
125
- changes: Change[];
126
- isFromSync: boolean;
127
- isFromPersist: boolean;
128
- }
129
- type ListenerFn<T = any> = (params: ListenerParams<T>) => void;
130
- interface ObservableEvent {
131
- fire(): void;
132
- on(cb?: () => void): ObservableListenerDispose;
133
- get(): void;
134
- }
135
- type TypeAtPath = 'object' | 'array' | 'map' | 'set';
136
- interface Change {
137
- path: string[];
138
- pathTypes: TypeAtPath[];
139
- valueAtPath: any;
140
- prevAtPath: any;
141
- }
142
- type RecordValue<T> = T extends Record<string, infer t> ? t : never;
143
- type ArrayValue<T> = T extends Array<infer t> ? t : never;
144
- type ObservableValue<T> = T extends Observable<infer t> ? t : never;
145
- type Selector<T> = ObservableParam<T> | ObservableEvent | (() => T) | T;
146
- type ClassConstructor<I, Args extends any[] = any[]> = new (...args: Args) => I;
147
- type ObservableListenerDispose = () => void;
148
- interface ObservableRoot {
149
- _: any;
150
- set?: (value: any) => void;
151
- }
152
- type Primitive = boolean | string | number | Date;
153
- type NotPrimitive<T> = T extends Primitive ? never : T;
154
- interface NodeListener {
155
- track: TrackingType;
156
- noArgs?: boolean;
157
- listener: ListenerFn;
158
- }
159
- interface TrackingState {
160
- nodes?: Map<NodeInfo, TrackingNode>;
161
- traceListeners?: (nodes: Map<NodeInfo, TrackingNode>) => void;
162
- traceUpdates?: (fn: Function) => Function;
163
- }
164
- interface BaseNodeInfo {
165
- children?: Map<string, ChildNodeInfo>;
166
- proxy?: object;
167
- root: ObservableRoot;
168
- listeners?: Set<NodeListener>;
169
- listenersImmediate?: Set<NodeListener>;
170
- isEvent?: boolean;
171
- linkedToNode?: NodeInfo;
172
- linkedToNodeDispose?: () => void;
173
- activatedObserveDispose?: () => void;
174
- linkedFromNodes?: Set<NodeInfo>;
175
- isSetting?: number;
176
- isAssigning?: number;
177
- isComputing?: boolean;
178
- parentOther?: NodeInfo;
179
- functions?: Map<string, Function | Observable<any>>;
180
- lazy?: boolean;
181
- lazyFn?: Function;
182
- needsExtract?: boolean;
183
- numListenersRecursive: number;
184
- state?: Observable<ObservableSyncState>;
185
- activated?: boolean;
186
- recursivelyAutoActivated?: boolean;
187
- activationState?: LinkedOptions & {
188
- onError?: () => void;
189
- onChange: (params: UpdateFnParams) => void | Promise<void>;
190
- };
191
- dirtyFn?: () => void;
192
- dirtyChildren?: Set<NodeInfo>;
193
- numGets?: number;
194
- getNumResolved?: number;
195
- }
196
- interface RootNodeInfo extends BaseNodeInfo {
197
- parent?: undefined;
198
- key?: undefined;
199
- }
200
- interface ChildNodeInfo extends BaseNodeInfo {
201
- parent: NodeInfo;
202
- key: string;
203
- }
204
- type NodeInfo = RootNodeInfo | ChildNodeInfo;
205
- interface TrackingNode {
206
- node: NodeInfo;
207
- track: TrackingType;
208
- num: number;
209
- }
210
- interface ObserveEvent<T> {
211
- num: number;
212
- previous?: T | undefined;
213
- cancel?: boolean;
214
- onCleanup?: () => void;
215
- }
216
- interface ObserveEventCallback<T> {
217
- num: number;
218
- previous?: T | undefined;
219
- value?: T;
220
- cancel: boolean;
221
- nodes: Map<NodeInfo, TrackingNode> | undefined;
222
- refresh: () => void;
223
- onCleanup?: () => void;
224
- onCleanupReaction?: () => void;
225
- }
226
- type SetParams<T> = ListenerParams<T extends Promise<infer t> ? t : T>;
227
- interface LinkedOptions<T = any> {
228
- get?: () => Promise<T> | T;
229
- set?: (params: SetParams<T>) => void | Promise<any>;
230
- waitFor?: Selector<any>;
231
- waitForSet?: ((params: WaitForSetFnParams<T>) => any) | Promise<any> | ObservableParam<any> | ObservableEvent;
232
- initial?: (() => T) | T;
233
- activate?: 'auto' | 'lazy';
234
- }
235
- interface WaitForSetFnParams<T = any> {
236
- value: T;
237
- changes: Change[];
238
- }
239
- type GetMode = 'set' | 'assign' | 'merge' | 'append' | 'prepend';
240
- interface UpdateFnParams<T = any> {
241
- value: T;
242
- mode?: GetMode;
243
- lastSync?: number | undefined;
244
- }
245
- type UpdateFn<T = any> = (params: UpdateFnParams<T>) => void;
246
- type Linked<T> = T;
247
- interface ObserveOptions {
248
- immediate?: boolean;
249
- }
250
- interface ObservableSyncStateBase {
251
- isPersistLoaded: boolean;
252
- isPersistEnabled: boolean;
253
- isSyncEnabled: boolean;
254
- lastSync?: number;
255
- syncCount?: number;
256
- isGetting?: boolean;
257
- numPendingGets?: number;
258
- numPendingSets?: number;
259
- isSetting?: boolean;
260
- clearPersist: () => Promise<void>;
261
- sync: () => Promise<void>;
262
- getPendingChanges: () => Record<string, {
263
- p: any;
264
- v?: any;
265
- }> | undefined;
266
- numPendingRemoteLoads?: number;
267
- }
268
- interface ObservableState {
269
- isLoaded: boolean;
270
- error?: Error;
271
- }
272
- type ObservableSyncState = ObservableState & ObservableSyncStateBase;
273
- interface RetryOptions {
274
- infinite?: boolean;
275
- times?: number;
276
- delay?: number;
277
- backoff?: 'constant' | 'exponential';
278
- maxDelay?: number;
279
- }
1
+ import { N as NodeInfo, O as Observable, T as TrackingType, G as GetOptions, C as Change, R as RecursiveValueOrFunction, a as ObservableEvent, S as Selector, b as ObserveEvent, c as ObservableParam, d as OpaqueObject, e as TypeAtPath, L as LinkedOptions, f as Linked, g as ObservablePrimitive, h as ObserveOptions, i as ObserveEventCallback, j as ObservableSyncState, k as ListenerParams, l as TrackingNode, m as clone, n as ensureNodeValue, o as findIDKey, p as getNode, q as getNodeValue, r as getPathType, U as UpdateFn, s as safeParse, t as safeStringify, u as setNodeValue, v as TrackingState } from './observableInterfaces-Dilj6F92.js';
2
+ export { A as ArrayValue, J as ChildNodeInfo, B as ClassConstructor, M as GetMode, a0 as ImmutableObservableBase, x as ListenerFn, H as NodeListener, F as NotPrimitive, $ as ObservableBoolean, D as ObservableListenerDispose, a1 as ObservableObject, _ as ObservableObjectFns, E as ObservableRoot, X as ObservableState, V as ObservableSyncStateBase, z as ObservableValue, P as Primitive, y as RecordValue, Z as RemoveObservables, Y as RetryOptions, I as RootNodeInfo, K as SetParams, Q as UpdateFnParams, W as WaitForSetFnParams, w as isObservable } from './observableInterfaces-Dilj6F92.js';
280
3
 
281
4
  declare function getProxy(node: NodeInfo, p?: string, asFunction?: Function): Observable;
282
5
  declare function set(node: NodeInfo, newValue?: any): void;
@@ -293,16 +16,6 @@ declare function endBatch(force?: boolean): void;
293
16
  declare function computed<T>(get: () => RecursiveValueOrFunction<T>): Observable<T>;
294
17
  declare function computed<T, T2 = T>(get: (() => RecursiveValueOrFunction<T>) | RecursiveValueOrFunction<T>, set: (value: T2) => void): Observable<T>;
295
18
 
296
- declare function configureLegendState({ observableFunctions, observableProperties, jsonReplacer, jsonReviver, }: {
297
- observableFunctions?: Record<string, (node: NodeInfo, ...args: any[]) => any>;
298
- observableProperties?: Record<string, {
299
- get: (node: NodeInfo) => any;
300
- set: (node: NodeInfo, value: any) => any;
301
- }>;
302
- jsonReplacer?: (this: any, key: string, value: any) => any;
303
- jsonReviver?: (this: any, key: string, value: any) => any;
304
- }): void;
305
-
306
19
  declare function event(): ObservableEvent;
307
20
 
308
21
  declare function computeSelector<T>(selector: Selector<T>, e?: ObserveEvent<T>, retainObservable?: boolean): T;
@@ -310,7 +23,6 @@ declare function getObservableIndex(value$: ObservableParam): number;
310
23
  declare function opaqueObject<T extends object>(value: T): OpaqueObject<T>;
311
24
  declare function getValueAtPath(obj: Record<string, any>, path: string[]): any;
312
25
  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;
313
- declare function setInObservableAtPath(value$: ObservableParam, path: string[], pathTypes: TypeAtPath[], value: any, mode: 'assign' | 'set' | 'merge'): void;
314
26
  declare function mergeIntoObservable<T extends ObservableParam<any>>(target: T, ...sources: any[]): T;
315
27
  declare function constructObjectWithPath(path: string[], pathTypes: TypeAtPath[], value: any): object;
316
28
  declare function deconstructObjectWithPath(path: string[], pathTypes: TypeAtPath[], value: any): object;
@@ -368,14 +80,6 @@ declare function whenReady<T, T2>(predicate: Promise<T>, effect: (value: T) => T
368
80
  declare function whenReady<T, T2>(predicate: Selector<T>, effect: (value: T) => T2): Promise<T2>;
369
81
  declare function whenReady<T>(predicate: Selector<T>): Promise<T>;
370
82
 
371
- declare function runWithRetry<T>(state: {
372
- retryNum: number;
373
- retry: RetryOptions | undefined;
374
- }, fn: (e: {
375
- retryNum: number;
376
- cancelRetry: () => void;
377
- }) => T | Promise<T>): T | Promise<T>;
378
-
379
83
  declare const internal: {
380
84
  createPreviousHandler: typeof createPreviousHandler;
381
85
  clone: typeof clone;
@@ -397,14 +101,13 @@ declare const internal: {
397
101
  };
398
102
  pendingNodes: Map<NodeInfo, () => void>;
399
103
  dirtyNodes: Set<NodeInfo>;
400
- replacer: undefined | ((this: any, key: string, value: any) => any);
401
- reviver: undefined | ((this: any, key: string, value: any) => any);
104
+ replacer: ((this: any, key: string, value: any) => any) | undefined;
105
+ reviver: ((this: any, key: string, value: any) => any) | undefined;
402
106
  };
403
107
  initializePathType: typeof initializePathType;
404
108
  observableFns: Map<string, (node: NodeInfo, ...args: any[]) => any>;
405
109
  optimized: symbol;
406
110
  peek: typeof peek;
407
- runWithRetry: typeof runWithRetry;
408
111
  safeParse: typeof safeParse;
409
112
  safeStringify: typeof safeStringify;
410
113
  set: typeof set;
@@ -417,4 +120,4 @@ declare const internal: {
417
120
  };
418
121
  };
419
122
 
420
- 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, 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 RootNodeInfo, 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 };
123
+ export { Change, GetOptions, Linked, LinkedOptions, ListenerParams, NodeInfo, Observable, ObservableEvent, ObservableParam, ObservablePrimitive, ObservableSyncState, ObserveEvent, ObserveEventCallback, ObserveOptions, OpaqueObject, RecursiveValueOrFunction, Selector, TrackingNode, TrackingState, TrackingType, TypeAtPath, UpdateFn, applyChange, applyChanges, batch, beginBatch, computeSelector, computed, constructObjectWithPath, deconstructObjectWithPath, endBatch, event, getObservableIndex, hasOwnProperty, internal, isArray, isBoolean, isDate, isEmpty, isFunction, isMap, isNullOrUndefined, isNumber, isObject, isObservableValueReady, isObserved, isPrimitive, isPromise, isString, isSymbol, linked, mergeIntoObservable, observable, observablePrimitive, observe, opaqueObject, proxy, setAtPath, setSilently, shouldIgnoreUnobserved, syncState, trackSelector, when, whenReady };
package/index.js CHANGED
@@ -74,13 +74,8 @@ var symbolOpaque = Symbol("opaque");
74
74
  var optimized = Symbol("optimized");
75
75
  var symbolLinked = Symbol("linked");
76
76
  var globalState = {
77
- isLoadingLocal: false,
78
- isLoadingRemote: false,
79
- activateSyncedNode: void 0,
80
77
  pendingNodes: /* @__PURE__ */ new Map(),
81
- dirtyNodes: /* @__PURE__ */ new Set(),
82
- replacer: void 0,
83
- reviver: void 0
78
+ dirtyNodes: /* @__PURE__ */ new Set()
84
79
  };
85
80
  function isOpaqueObject(value) {
86
81
  return value && (value[symbolOpaque] || value["$$typeof"]);
@@ -294,7 +289,7 @@ function setAtPath(obj, path, pathTypes, value, mode, fullObj, restore) {
294
289
  return obj;
295
290
  } else if (o[p] === void 0 && value === void 0 && i === path.length - 1) {
296
291
  return obj;
297
- } else if (o[p] === void 0 || o[p] === null) {
292
+ } else if (i < path.length - 1 && (o[p] === void 0 || o[p] === null)) {
298
293
  const child = initializePathType(pathTypes[i]);
299
294
  if (isMap(o)) {
300
295
  o.set(p, child);
@@ -327,27 +322,6 @@ function setAtPath(obj, path, pathTypes, value, mode, fullObj, restore) {
327
322
  }
328
323
  return obj;
329
324
  }
330
- function setInObservableAtPath(value$, path, pathTypes, value, mode) {
331
- let o = value$;
332
- let v = value;
333
- for (let i = 0; i < path.length; i++) {
334
- const p = path[i];
335
- if (!o.peek()[p]) {
336
- o[p].set(initializePathType(pathTypes[i]));
337
- }
338
- o = o[p];
339
- v = v[p];
340
- }
341
- if (v === symbolDelete) {
342
- o.delete();
343
- } else if (mode === "assign" && o.assign && isObject(o.peek())) {
344
- o.assign(v);
345
- } else if (mode === "merge") {
346
- mergeIntoObservable(o, v);
347
- } else {
348
- o.set(v);
349
- }
350
- }
351
325
  function mergeIntoObservable(target, ...sources) {
352
326
  if (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "test") {
353
327
  if (!isObservable(target)) {
@@ -437,12 +411,13 @@ function initializePathType(pathType) {
437
411
  switch (pathType) {
438
412
  case "array":
439
413
  return [];
440
- case "object":
441
- return {};
442
414
  case "map":
443
415
  return /* @__PURE__ */ new Map();
444
416
  case "set":
445
417
  return /* @__PURE__ */ new Set();
418
+ case "object":
419
+ default:
420
+ return {};
446
421
  }
447
422
  }
448
423
  function applyChange(value, change, applyPrevious) {
@@ -459,20 +434,25 @@ function deepMerge(target, ...sources) {
459
434
  if (isPrimitive(target)) {
460
435
  return sources[sources.length - 1];
461
436
  }
462
- const result = isArray(target) ? [...target] : { ...target };
437
+ let result = isArray(target) ? [...target] : { ...target };
463
438
  for (let i = 0; i < sources.length; i++) {
464
439
  const obj2 = sources[i];
465
- for (const key in obj2) {
466
- if (hasOwnProperty.call(obj2, key)) {
467
- if (obj2[key] instanceof Object && !isObservable(obj2[key]) && Object.keys(obj2[key]).length > 0) {
468
- result[key] = deepMerge(
469
- result[key] || (isArray(obj2[key]) ? [] : {}),
470
- obj2[key]
471
- );
472
- } else {
473
- result[key] = obj2[key];
440
+ if (isObject(obj2) || isArray(obj2)) {
441
+ const objTarget = obj2;
442
+ for (const key in objTarget) {
443
+ if (hasOwnProperty.call(objTarget, key)) {
444
+ if (objTarget[key] instanceof Object && !isObservable(objTarget[key]) && Object.keys(objTarget[key]).length > 0) {
445
+ result[key] = deepMerge(
446
+ result[key] || (isArray(objTarget[key]) ? [] : {}),
447
+ objTarget[key]
448
+ );
449
+ } else {
450
+ result[key] = objTarget[key];
451
+ }
474
452
  }
475
453
  }
454
+ } else {
455
+ result = obj2;
476
456
  }
477
457
  }
478
458
  return result;
@@ -523,9 +503,9 @@ function notify(node, value, prev, level, whenOptimizedOnlyIf) {
523
503
  changesInBatch,
524
504
  node,
525
505
  /*loading*/
526
- globalState.isLoadingLocal,
506
+ !!globalState.isLoadingLocal,
527
507
  /*remote*/
528
- globalState.isLoadingRemote,
508
+ !!globalState.isLoadingRemote,
529
509
  value,
530
510
  [],
531
511
  [],
@@ -549,8 +529,8 @@ function notify(node, value, prev, level, whenOptimizedOnlyIf) {
549
529
  prev,
550
530
  level,
551
531
  whenOptimizedOnlyIf,
552
- isFromSync: globalState.isLoadingRemote,
553
- isFromPersist: globalState.isLoadingLocal
532
+ isFromSync: !!globalState.isLoadingRemote,
533
+ isFromPersist: !!globalState.isLoadingLocal
554
534
  });
555
535
  }
556
536
  if (changesInBatch.size) {
@@ -880,9 +860,9 @@ function onChange(node, callback, options = {}, fromLinks) {
880
860
  };
881
861
  }
882
862
  function createCb(linkedFromNode, path, callback) {
883
- let { valueAtPath: prevAtPath } = getValueAtPath2(getNodeValue(linkedFromNode), path);
863
+ let prevAtPath = deconstructObjectWithPath(path, [], getNodeValue(linkedFromNode));
884
864
  return function({ value: valueA, isFromPersist, isFromSync }) {
885
- const { valueAtPath } = getValueAtPath2(valueA, path);
865
+ const valueAtPath = deconstructObjectWithPath(path, [], valueA);
886
866
  if (valueAtPath !== prevAtPath) {
887
867
  callback({
888
868
  value: valueAtPath,
@@ -902,16 +882,6 @@ function createCb(linkedFromNode, path, callback) {
902
882
  prevAtPath = valueAtPath;
903
883
  };
904
884
  }
905
- function getValueAtPath2(obj, path) {
906
- let o = obj;
907
- const pathTypes = [];
908
- for (let i = 0; o && i < path.length; i++) {
909
- pathTypes.push(isArray(o) ? "array" : "object");
910
- const p = path[i];
911
- o = o[p];
912
- }
913
- return { valueAtPath: o, pathTypes };
914
- }
915
885
 
916
886
  // src/setupTracking.ts
917
887
  function setupTracking(nodes, update, noArgs, immediate) {
@@ -2211,45 +2181,6 @@ function computed(get2, set2) {
2211
2181
  );
2212
2182
  }
2213
2183
 
2214
- // src/config.ts
2215
- function configureLegendState({
2216
- observableFunctions,
2217
- observableProperties: observableProperties2,
2218
- jsonReplacer,
2219
- jsonReviver
2220
- }) {
2221
- if (observableFunctions) {
2222
- for (const key in observableFunctions) {
2223
- const fn = observableFunctions[key];
2224
- observableFns.set(key, fn);
2225
- ObservablePrimitiveClass.prototype[key] = function(...args) {
2226
- return fn.call(this, this._node, ...args);
2227
- };
2228
- }
2229
- }
2230
- if (observableProperties2) {
2231
- for (const key in observableProperties2) {
2232
- const fns2 = observableProperties2[key];
2233
- observableProperties.set(key, fns2);
2234
- Object.defineProperty(ObservablePrimitiveClass.prototype, key, {
2235
- configurable: true,
2236
- get() {
2237
- return fns2.get.call(this, this._node);
2238
- },
2239
- set(value) {
2240
- return fns2.set.call(this, this._node, value);
2241
- }
2242
- });
2243
- }
2244
- }
2245
- if (jsonReplacer) {
2246
- globalState.replacer = jsonReplacer;
2247
- }
2248
- if (jsonReviver) {
2249
- globalState.reviver = jsonReviver;
2250
- }
2251
- }
2252
-
2253
2184
  // src/event.ts
2254
2185
  function event() {
2255
2186
  const obs = observable(0);
@@ -2294,6 +2225,7 @@ function syncState(obs) {
2294
2225
  numPendingSets: 0,
2295
2226
  syncCount: 0,
2296
2227
  clearPersist: void 0,
2228
+ reset: () => Promise.resolve(),
2297
2229
  sync: () => Promise.resolve(),
2298
2230
  getPendingChanges: () => ({})
2299
2231
  });
@@ -2301,50 +2233,6 @@ function syncState(obs) {
2301
2233
  return node.state;
2302
2234
  }
2303
2235
 
2304
- // src/retry.ts
2305
- function calculateRetryDelay(retryOptions, retryNum) {
2306
- const { backoff, delay = 1e3, infinite, times = 3, maxDelay = 3e4 } = retryOptions;
2307
- if (infinite || retryNum < times) {
2308
- const delayTime = Math.min(delay * (backoff === "constant" ? 1 : 2 ** retryNum), maxDelay);
2309
- return delayTime;
2310
- }
2311
- return null;
2312
- }
2313
- function createRetryTimeout(retryOptions, retryNum, fn) {
2314
- const delayTime = calculateRetryDelay(retryOptions, retryNum);
2315
- if (delayTime) {
2316
- return setTimeout(fn, delayTime);
2317
- }
2318
- }
2319
- function runWithRetry(state, fn) {
2320
- const { retry } = state;
2321
- const e = Object.assign(state, { cancel: false, cancelRetry: () => e.cancel = false });
2322
- let value = fn(e);
2323
- if (isPromise(value) && retry) {
2324
- let timeoutRetry;
2325
- return new Promise((resolve) => {
2326
- const run = () => {
2327
- value.then((val) => {
2328
- resolve(val);
2329
- }).catch(() => {
2330
- state.retryNum++;
2331
- if (timeoutRetry) {
2332
- clearTimeout(timeoutRetry);
2333
- }
2334
- if (!e.cancel) {
2335
- timeoutRetry = createRetryTimeout(retry, state.retryNum, () => {
2336
- value = fn(e);
2337
- run();
2338
- });
2339
- }
2340
- });
2341
- };
2342
- run();
2343
- });
2344
- }
2345
- return value;
2346
- }
2347
-
2348
2236
  // index.ts
2349
2237
  var internal = {
2350
2238
  createPreviousHandler,
@@ -2363,7 +2251,6 @@ var internal = {
2363
2251
  observableFns,
2364
2252
  optimized,
2365
2253
  peek,
2366
- runWithRetry,
2367
2254
  safeParse,
2368
2255
  safeStringify,
2369
2256
  set,
@@ -2382,7 +2269,6 @@ exports.beginBatch = beginBatch;
2382
2269
  exports.beginTracking = beginTracking;
2383
2270
  exports.computeSelector = computeSelector;
2384
2271
  exports.computed = computed;
2385
- exports.configureLegendState = configureLegendState;
2386
2272
  exports.constructObjectWithPath = constructObjectWithPath;
2387
2273
  exports.deconstructObjectWithPath = deconstructObjectWithPath;
2388
2274
  exports.endBatch = endBatch;
@@ -2419,7 +2305,6 @@ exports.opaqueObject = opaqueObject;
2419
2305
  exports.optimized = optimized;
2420
2306
  exports.proxy = proxy;
2421
2307
  exports.setAtPath = setAtPath;
2422
- exports.setInObservableAtPath = setInObservableAtPath;
2423
2308
  exports.setSilently = setSilently;
2424
2309
  exports.setupTracking = setupTracking;
2425
2310
  exports.shouldIgnoreUnobserved = shouldIgnoreUnobserved;