@legendapp/state 3.0.0-alpha.37 → 3.0.0-alpha.39

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.
package/index.d.ts CHANGED
@@ -1,5 +1,289 @@
1
- import { O as OpaqueObject, P as PlainObject, N as NodeInfo, a as Observable, T as TrackingType, G as GetOptions, C as Change, R as RecursiveValueOrFunction, b as ObservableEvent, S as Selector, c as ObserveEvent, d as ObservableParam, 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-CgBddSU6.js';
2
- export { A as ArrayValue, K as ChildNodeInfo, B as ClassConstructor, V as GetMode, a2 as ImmutableObservableBase, x as ListenerFn, I as NodeListener, H as NotPrimitive, a1 as ObservableBoolean, D as ObservableListenerDispose, a3 as ObservableObject, a0 as ObservableObjectFns, E as ObservableRoot, Z as ObservableState, Y as ObservableSyncStateBase, z as ObservableValue, F as Primitive, y as RecordValue, $ as RemoveObservables, _ as RetryOptions, J as RootNodeInfo, M as SetParams, X as UpdateFnParams, W as WaitForSet, Q as WaitForSetFnParams, w as isObservable } from './observableInterfaces-CgBddSU6.js';
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'> & Record<MapKey<T>, Observable<MapValue<T>>> & {
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<T>, 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: Observable<RemoveObservables<T>>): void;
61
+ set(value: RecursiveValueOrFunction<T>): void;
62
+ set(value: Promise<RemoveObservables<T>>): void;
63
+ set(value: 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 const symbolPlain: unique symbol;
102
+ declare function getPathType(value: any): TypeAtPath;
103
+ declare function safeStringify(value: any): any;
104
+ declare function safeParse(value: any): any;
105
+ declare function clone<T>(value: T): any;
106
+ declare function isObservable(value$: any): value$ is Observable;
107
+ declare function getNode(value$: ObservableParam): NodeInfo;
108
+ declare function setNodeValue(node: NodeInfo, newValue: any): {
109
+ prevValue: any;
110
+ newValue: any;
111
+ };
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;
115
+
116
+ type TrackingType = undefined | true | symbol;
117
+ interface GetOptions {
118
+ shallow: boolean;
119
+ }
120
+ type OpaqueObject<T> = T & {
121
+ [symbolOpaque]: true;
122
+ };
123
+ type PlainObject<T> = T & {
124
+ [symbolPlain]: true;
125
+ };
126
+ interface ListenerParams<T = any> {
127
+ value: T;
128
+ getPrevious: () => T;
129
+ changes: Change[];
130
+ isFromSync: boolean;
131
+ isFromPersist: boolean;
132
+ }
133
+ type ListenerFn<T = any> = (params: ListenerParams<T>) => void;
134
+ interface ObservableEvent {
135
+ fire(): void;
136
+ on(cb?: () => void): ObservableListenerDispose;
137
+ get(): void;
138
+ }
139
+ type TypeAtPath = 'object' | 'array' | 'map' | 'set';
140
+ interface Change {
141
+ path: string[];
142
+ pathTypes: TypeAtPath[];
143
+ valueAtPath: any;
144
+ prevAtPath: any;
145
+ }
146
+ type RecordValue<T> = T extends Record<string, infer t> ? t : never;
147
+ type ArrayValue<T> = T extends Array<infer t> ? t : never;
148
+ type ObservableValue<T> = T extends Observable<infer t> ? t : never;
149
+ type Selector<T> = ObservableParam<T> | ObservableEvent | (() => T) | T;
150
+ type ClassConstructor<I, Args extends any[] = any[]> = new (...args: Args) => I;
151
+ type ObservableListenerDispose = () => void;
152
+ interface ObservableRoot {
153
+ _: any;
154
+ set?: (value: any) => void;
155
+ }
156
+ type Primitive = boolean | string | number | Date;
157
+ type NotPrimitive<T> = T extends Primitive ? never : T;
158
+ interface NodeListener {
159
+ track: TrackingType;
160
+ noArgs?: boolean;
161
+ listener: ListenerFn;
162
+ }
163
+ interface TrackingState {
164
+ nodes?: Map<NodeInfo, TrackingNode>;
165
+ traceListeners?: (nodes: Map<NodeInfo, TrackingNode>) => void;
166
+ traceUpdates?: (fn: Function) => Function;
167
+ }
168
+ interface BaseNodeInfo {
169
+ children?: Map<string, ChildNodeInfo>;
170
+ proxy?: object;
171
+ root: ObservableRoot;
172
+ listeners?: Set<NodeListener>;
173
+ listenersImmediate?: Set<NodeListener>;
174
+ isEvent?: boolean;
175
+ linkedToNode?: NodeInfo;
176
+ linkedToNodeDispose?: () => void;
177
+ activatedObserveDispose?: () => void;
178
+ linkedFromNodes?: Set<NodeInfo>;
179
+ isSetting?: number;
180
+ isAssigning?: number;
181
+ isComputing?: boolean;
182
+ parentOther?: NodeInfo;
183
+ functions?: Map<string, Function | Observable<any>>;
184
+ lazy?: boolean;
185
+ lazyFn?: Function;
186
+ needsExtract?: boolean;
187
+ numListenersRecursive: number;
188
+ state?: Observable<ObservableSyncState>;
189
+ activated?: boolean;
190
+ recursivelyAutoActivated?: boolean;
191
+ activationState?: LinkedOptions & {
192
+ onError?: () => void;
193
+ onChange: (params: UpdateFnParams) => void | Promise<void>;
194
+ };
195
+ dirtyFn?: () => void;
196
+ dirtyChildren?: Set<NodeInfo>;
197
+ numGets?: number;
198
+ getNumResolved?: number;
199
+ }
200
+ interface RootNodeInfo extends BaseNodeInfo {
201
+ parent?: undefined;
202
+ key?: undefined;
203
+ }
204
+ interface ChildNodeInfo extends BaseNodeInfo {
205
+ parent: NodeInfo;
206
+ key: string;
207
+ }
208
+ type NodeInfo = RootNodeInfo | ChildNodeInfo;
209
+ interface TrackingNode {
210
+ node: NodeInfo;
211
+ track: TrackingType;
212
+ num: number;
213
+ }
214
+ interface ObserveEvent<T> {
215
+ num: number;
216
+ previous?: T | undefined;
217
+ cancel?: boolean;
218
+ onCleanup?: () => void;
219
+ }
220
+ interface ObserveEventCallback<T> {
221
+ num: number;
222
+ previous?: T | undefined;
223
+ value?: T;
224
+ cancel: boolean;
225
+ nodes: Map<NodeInfo, TrackingNode> | undefined;
226
+ refresh: () => void;
227
+ onCleanup?: () => void;
228
+ onCleanupReaction?: () => void;
229
+ }
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[];
232
+ interface LinkedOptions<T = any> {
233
+ get?: () => Promise<T> | T;
234
+ set?: (params: SetParams<T>) => void | Promise<any>;
235
+ waitFor?: Selector<unknown>;
236
+ waitForSet?: WaitForSet<T>;
237
+ initial?: (() => T) | T;
238
+ activate?: 'auto' | 'lazy';
239
+ }
240
+ interface WaitForSetFnParams<T = any> {
241
+ value: T;
242
+ changes: Change[];
243
+ }
244
+ type GetMode = 'set' | 'assign' | 'merge' | 'append' | 'prepend';
245
+ interface UpdateFnParams<T = any> {
246
+ value: T;
247
+ mode?: GetMode;
248
+ lastSync?: number | undefined;
249
+ }
250
+ type UpdateFn<T = any> = (params: UpdateFnParams<T>) => void;
251
+ type Linked<T> = T;
252
+ interface ObserveOptions {
253
+ immediate?: boolean;
254
+ }
255
+ interface ObservableSyncStateBase {
256
+ isPersistLoaded: boolean;
257
+ isPersistEnabled: boolean;
258
+ isSyncEnabled: boolean;
259
+ lastSync?: number;
260
+ syncCount?: number;
261
+ isGetting?: boolean;
262
+ isSetting?: boolean;
263
+ numPendingGets?: number;
264
+ numPendingSets?: number;
265
+ sync: () => Promise<void>;
266
+ getPendingChanges: () => Record<string, {
267
+ p: any;
268
+ v?: any;
269
+ }> | undefined;
270
+ resetPersistence: () => Promise<void>;
271
+ reset: () => Promise<void>;
272
+ numPendingRemoteLoads?: number;
273
+ clearPersist: () => Promise<void>;
274
+ }
275
+ interface ObservableState {
276
+ isLoaded: boolean;
277
+ error?: Error;
278
+ }
279
+ type ObservableSyncState = ObservableState & ObservableSyncStateBase;
280
+ interface RetryOptions {
281
+ infinite?: boolean;
282
+ times?: number;
283
+ delay?: number;
284
+ backoff?: 'constant' | 'exponential';
285
+ maxDelay?: number;
286
+ }
3
287
 
4
288
  declare const ObservableHint: {
5
289
  opaque: <T extends object>(value: T) => OpaqueObject<T>;
@@ -91,6 +375,12 @@ declare function whenReady<T, T2>(predicate: Selector<T>, effect: (value: T) =>
91
375
  declare function whenReady<T>(predicate: Selector<T>[]): Promise<T[]>;
92
376
  declare function whenReady<T>(predicate: Selector<T>): Promise<T>;
93
377
 
378
+ interface ObservablePrimitiveState {
379
+ _node: NodeInfo;
380
+ toggle: () => void;
381
+ }
382
+ declare function ObservablePrimitiveClass<T>(this: ObservablePrimitive<T> & ObservablePrimitiveState, node: NodeInfo): void;
383
+
94
384
  declare const internal: {
95
385
  createPreviousHandler: typeof createPreviousHandler;
96
386
  clone: typeof clone;
@@ -116,6 +406,11 @@ declare const internal: {
116
406
  reviver: ((this: any, key: string, value: any) => any) | undefined;
117
407
  };
118
408
  initializePathType: typeof initializePathType;
409
+ ObservablePrimitiveClass: typeof ObservablePrimitiveClass;
410
+ observableProperties: Map<string, {
411
+ get: (node: NodeInfo, ...args: any[]) => any;
412
+ set: (node: NodeInfo, value: any) => any;
413
+ }>;
119
414
  observableFns: Map<string, (node: NodeInfo, ...args: any[]) => any>;
120
415
  optimized: symbol;
121
416
  peek: typeof peek;
@@ -131,4 +426,4 @@ declare const internal: {
131
426
  };
132
427
  };
133
428
 
134
- export { Change, GetOptions, Linked, LinkedOptions, ListenerParams, NodeInfo, Observable, ObservableEvent, ObservableHint, ObservableParam, ObservablePrimitive, ObservableSyncState, ObserveEvent, ObserveEventCallback, ObserveOptions, OpaqueObject, PlainObject, 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, isPlainObject, isPrimitive, isPromise, isSet, isString, isSymbol, linked, mergeIntoObservable, observable, observablePrimitive, observe, opaqueObject, proxy, setAtPath, 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 };
package/index.js CHANGED
@@ -2272,10 +2272,12 @@ function syncState(obs) {
2272
2272
  numPendingGets: 0,
2273
2273
  numPendingSets: 0,
2274
2274
  syncCount: 0,
2275
- clearPersist: void 0,
2275
+ resetPersistence: void 0,
2276
2276
  reset: () => Promise.resolve(),
2277
2277
  sync: () => Promise.resolve(),
2278
- getPendingChanges: () => ({})
2278
+ getPendingChanges: () => ({}),
2279
+ // TODOV3 remove
2280
+ clearPersist: void 0
2279
2281
  })
2280
2282
  );
2281
2283
  }
@@ -2297,6 +2299,8 @@ var internal = {
2297
2299
  getValueAtPath,
2298
2300
  globalState,
2299
2301
  initializePathType,
2302
+ ObservablePrimitiveClass,
2303
+ observableProperties,
2300
2304
  observableFns,
2301
2305
  optimized,
2302
2306
  peek,
package/index.mjs CHANGED
@@ -2270,10 +2270,12 @@ function syncState(obs) {
2270
2270
  numPendingGets: 0,
2271
2271
  numPendingSets: 0,
2272
2272
  syncCount: 0,
2273
- clearPersist: void 0,
2273
+ resetPersistence: void 0,
2274
2274
  reset: () => Promise.resolve(),
2275
2275
  sync: () => Promise.resolve(),
2276
- getPendingChanges: () => ({})
2276
+ getPendingChanges: () => ({}),
2277
+ // TODOV3 remove
2278
+ clearPersist: void 0
2277
2279
  })
2278
2280
  );
2279
2281
  }
@@ -2295,6 +2297,8 @@ var internal = {
2295
2297
  getValueAtPath,
2296
2298
  globalState,
2297
2299
  initializePathType,
2300
+ ObservablePrimitiveClass,
2301
+ observableProperties,
2298
2302
  observableFns,
2299
2303
  optimized,
2300
2304
  peek,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@legendapp/state",
3
- "version": "3.0.0-alpha.37",
3
+ "version": "3.0.0-alpha.39",
4
4
  "description": "legend-state",
5
5
  "sideEffects": false,
6
6
  "private": false,
@@ -63,11 +63,6 @@
63
63
  "require": "./react.js",
64
64
  "types": "./react.d.ts"
65
65
  },
66
- "./config": {
67
- "import": "./config.mjs",
68
- "require": "./config.js",
69
- "types": "./config.d.ts"
70
- },
71
66
  "./trace": {
72
67
  "import": "./trace.mjs",
73
68
  "require": "./trace.js",
@@ -183,6 +178,11 @@
183
178
  "require": "./config/enableReactTracking.js",
184
179
  "types": "./config/enableReactTracking.d.ts"
185
180
  },
181
+ "./config/configureLegendState": {
182
+ "import": "./config/configureLegendState.mjs",
183
+ "require": "./config/configureLegendState.js",
184
+ "types": "./config/configureLegendState.d.ts"
185
+ },
186
186
  "./config/enable$GetSet": {
187
187
  "import": "./config/enable$GetSet.mjs",
188
188
  "require": "./config/enable$GetSet.js",
@@ -1,6 +1,4 @@
1
- import { c as configureReactive } from '../configureReactive-BAV1PS2I.mjs';
2
- import 'react';
3
- import '@legendapp/state';
1
+ import { configureReactive } from '@legendapp/state/react';
4
2
 
5
3
  declare function enableReactive(config: typeof configureReactive): void;
6
4
 
@@ -1,6 +1,4 @@
1
- import { c as configureReactive } from '../configureReactive-BAV1PS2I.js';
2
- import 'react';
3
- import '@legendapp/state';
1
+ import { configureReactive } from '@legendapp/state/react';
4
2
 
5
3
  declare function enableReactive(config: typeof configureReactive): void;
6
4
 
package/react.d.mts CHANGED
@@ -1,8 +1,6 @@
1
1
  import * as react from 'react';
2
- import { ReactNode, ReactElement, FC, DependencyList, ReducerWithoutAction, ReducerStateWithoutAction, DispatchWithoutAction, Reducer, ReducerState, Dispatch, ReducerAction } from 'react';
2
+ import { ReactNode, ReactElement, FC, LegacyRef, DependencyList, ReducerWithoutAction, ReducerStateWithoutAction, DispatchWithoutAction, Reducer, ReducerState, Dispatch, ReducerAction, ComponentClass } from 'react';
3
3
  import { ObservableParam, Observable, ObservableBoolean, Selector, RecursiveValueOrFunction, ObserveOptions, ObserveEvent, ObserveEventCallback } from '@legendapp/state';
4
- import { B as BindKeys, U as UseSelectorOptions } from './configureReactive-BAV1PS2I.mjs';
5
- export { a as BindKey, b as FCReactive, F as FCReactiveObject, S as ShapeWithNew$, c as configureReactive } from './configureReactive-BAV1PS2I.mjs';
6
4
 
7
5
  declare function Computed({ children }: {
8
6
  children: ObservableParam | (() => ReactNode);
@@ -68,6 +66,29 @@ declare function Switch<T>({ value, children, }: {
68
66
  children: Partial<Record<'undefined' | 'default', () => ReactNode>>;
69
67
  }): ReactElement | null;
70
68
 
69
+ type ShapeWithNew$<T> = Partial<Omit<T, 'children'>> & {
70
+ [K in keyof T as K extends `$${string & K}` ? K : `$${string & K}`]?: Selector<T[K]>;
71
+ } & {
72
+ children?: Selector<ReactNode>;
73
+ };
74
+ interface BindKey<P> {
75
+ handler?: keyof P;
76
+ getValue?: (e: any) => any;
77
+ defaultValue?: any;
78
+ selector?: (propsOut: Record<string, any>, p: Observable<any>) => any;
79
+ }
80
+ type BindKeys<P = any> = Record<keyof P, BindKey<P>>;
81
+ type FCReactiveObject<T> = {
82
+ [K in keyof T]: FC<ShapeWithNew$<T[K]>>;
83
+ };
84
+ type FCReactive<P, P2> = P & FC<ShapeWithNew$<P2> & {
85
+ ref?: LegacyRef<P> | undefined;
86
+ }>;
87
+ interface UseSelectorOptions {
88
+ suspense?: boolean;
89
+ skipCheck?: boolean;
90
+ }
91
+
71
92
  type ShapeWithPick$<T, T2 extends keyof T = keyof T> = Partial<T> & {
72
93
  [K in T2 as K extends `$${string & K}` ? K : `$${string & K}`]?: Selector<T[K]>;
73
94
  };
@@ -133,4 +154,9 @@ declare const useUnmountOnce: typeof useUnmount;
133
154
  declare function useWhen<T>(predicate: Selector<T>, effect: (value: T) => any | (() => any)): Promise<any>;
134
155
  declare function useWhenReady<T>(predicate: Selector<T>, effect: (value: T) => any | (() => any)): Promise<any>;
135
156
 
136
- export { BindKeys, Computed, type ExtractFCPropsType, For, type IReactive, Memo, type ObjectShapeWith$, Reactive, type ShapeWith$, type ShapeWithPick$, Show, Switch, type UseObserveOptions, UseSelectorOptions, hasSymbol, observer, reactive, reactiveComponents, reactiveObserver, useComputed, useEffectOnce, useIsMounted, useMount, useMountOnce, useObservable, useObservableReducer, useObserve, useObserveEffect, usePauseProvider, useSelector, useUnmount, useUnmountOnce, useWhen, useWhenReady };
157
+ declare function configureReactive({ components, binders, }: {
158
+ components?: Record<string, FC | ComponentClass<any>>;
159
+ binders?: Record<string, BindKeys>;
160
+ }): void;
161
+
162
+ export { type BindKey, type BindKeys, Computed, type ExtractFCPropsType, type FCReactive, type FCReactiveObject, For, type IReactive, Memo, type ObjectShapeWith$, Reactive, type ShapeWith$, type ShapeWithNew$, type ShapeWithPick$, Show, Switch, type UseObserveOptions, type UseSelectorOptions, configureReactive, hasSymbol, observer, reactive, reactiveComponents, reactiveObserver, useComputed, useEffectOnce, useIsMounted, useMount, useMountOnce, useObservable, useObservableReducer, useObserve, useObserveEffect, usePauseProvider, useSelector, useUnmount, useUnmountOnce, useWhen, useWhenReady };
package/react.d.ts CHANGED
@@ -1,8 +1,6 @@
1
1
  import * as react from 'react';
2
- import { ReactNode, ReactElement, FC, DependencyList, ReducerWithoutAction, ReducerStateWithoutAction, DispatchWithoutAction, Reducer, ReducerState, Dispatch, ReducerAction } from 'react';
2
+ import { ReactNode, ReactElement, FC, LegacyRef, DependencyList, ReducerWithoutAction, ReducerStateWithoutAction, DispatchWithoutAction, Reducer, ReducerState, Dispatch, ReducerAction, ComponentClass } from 'react';
3
3
  import { ObservableParam, Observable, ObservableBoolean, Selector, RecursiveValueOrFunction, ObserveOptions, ObserveEvent, ObserveEventCallback } from '@legendapp/state';
4
- import { B as BindKeys, U as UseSelectorOptions } from './configureReactive-BAV1PS2I.js';
5
- export { a as BindKey, b as FCReactive, F as FCReactiveObject, S as ShapeWithNew$, c as configureReactive } from './configureReactive-BAV1PS2I.js';
6
4
 
7
5
  declare function Computed({ children }: {
8
6
  children: ObservableParam | (() => ReactNode);
@@ -68,6 +66,29 @@ declare function Switch<T>({ value, children, }: {
68
66
  children: Partial<Record<'undefined' | 'default', () => ReactNode>>;
69
67
  }): ReactElement | null;
70
68
 
69
+ type ShapeWithNew$<T> = Partial<Omit<T, 'children'>> & {
70
+ [K in keyof T as K extends `$${string & K}` ? K : `$${string & K}`]?: Selector<T[K]>;
71
+ } & {
72
+ children?: Selector<ReactNode>;
73
+ };
74
+ interface BindKey<P> {
75
+ handler?: keyof P;
76
+ getValue?: (e: any) => any;
77
+ defaultValue?: any;
78
+ selector?: (propsOut: Record<string, any>, p: Observable<any>) => any;
79
+ }
80
+ type BindKeys<P = any> = Record<keyof P, BindKey<P>>;
81
+ type FCReactiveObject<T> = {
82
+ [K in keyof T]: FC<ShapeWithNew$<T[K]>>;
83
+ };
84
+ type FCReactive<P, P2> = P & FC<ShapeWithNew$<P2> & {
85
+ ref?: LegacyRef<P> | undefined;
86
+ }>;
87
+ interface UseSelectorOptions {
88
+ suspense?: boolean;
89
+ skipCheck?: boolean;
90
+ }
91
+
71
92
  type ShapeWithPick$<T, T2 extends keyof T = keyof T> = Partial<T> & {
72
93
  [K in T2 as K extends `$${string & K}` ? K : `$${string & K}`]?: Selector<T[K]>;
73
94
  };
@@ -133,4 +154,9 @@ declare const useUnmountOnce: typeof useUnmount;
133
154
  declare function useWhen<T>(predicate: Selector<T>, effect: (value: T) => any | (() => any)): Promise<any>;
134
155
  declare function useWhenReady<T>(predicate: Selector<T>, effect: (value: T) => any | (() => any)): Promise<any>;
135
156
 
136
- export { BindKeys, Computed, type ExtractFCPropsType, For, type IReactive, Memo, type ObjectShapeWith$, Reactive, type ShapeWith$, type ShapeWithPick$, Show, Switch, type UseObserveOptions, UseSelectorOptions, hasSymbol, observer, reactive, reactiveComponents, reactiveObserver, useComputed, useEffectOnce, useIsMounted, useMount, useMountOnce, useObservable, useObservableReducer, useObserve, useObserveEffect, usePauseProvider, useSelector, useUnmount, useUnmountOnce, useWhen, useWhenReady };
157
+ declare function configureReactive({ components, binders, }: {
158
+ components?: Record<string, FC | ComponentClass<any>>;
159
+ binders?: Record<string, BindKeys>;
160
+ }): void;
161
+
162
+ export { type BindKey, type BindKeys, Computed, type ExtractFCPropsType, type FCReactive, type FCReactiveObject, For, type IReactive, Memo, type ObjectShapeWith$, Reactive, type ShapeWith$, type ShapeWithNew$, type ShapeWithPick$, Show, Switch, type UseObserveOptions, type UseSelectorOptions, configureReactive, hasSymbol, observer, reactive, reactiveComponents, reactiveObserver, useComputed, useEffectOnce, useIsMounted, useMount, useMountOnce, useObservable, useObservableReducer, useObserve, useObserveEffect, usePauseProvider, useSelector, useUnmount, useUnmountOnce, useWhen, useWhenReady };
package/react.js CHANGED
@@ -377,7 +377,9 @@ var Reactive = new Proxy(
377
377
  }
378
378
  }
379
379
  );
380
- enableReactive.enableReactive(configureReactive);
380
+ if (process.env.NODE_ENV !== "test") {
381
+ enableReactive.enableReactive(configureReactive);
382
+ }
381
383
  function Show({ if: if_, ifReady, else: else_, $value, wrap, children }) {
382
384
  const value = useSelector(if_ != null ? if_ : ifReady);
383
385
  const show = ifReady !== void 0 ? state.isObservableValueReady(value) : value;
package/react.mjs CHANGED
@@ -371,7 +371,9 @@ var Reactive = new Proxy(
371
371
  }
372
372
  }
373
373
  );
374
- enableReactive(configureReactive);
374
+ if (process.env.NODE_ENV !== "test") {
375
+ enableReactive(configureReactive);
376
+ }
375
377
  function Show({ if: if_, ifReady, else: else_, $value, wrap, children }) {
376
378
  const value = useSelector(if_ != null ? if_ : ifReady);
377
379
  const show = ifReady !== void 0 ? isObservableValueReady(value) : value;
@@ -14,6 +14,7 @@ function syncedQuery(params) {
14
14
  let observer = void 0;
15
15
  let latestOptions = defaultedOptions;
16
16
  let queryKeyFromFn;
17
+ let resolveInitialPromise = void 0;
17
18
  const origQueryKey = options.queryKey;
18
19
  const isKeyFunction = state.isFunction(origQueryKey);
19
20
  const updateQueryOptions = (obj) => {
@@ -33,14 +34,29 @@ function syncedQuery(params) {
33
34
  });
34
35
  }
35
36
  observer = new Observer(queryClient, latestOptions);
36
- const get = () => {
37
- const result = observer.getOptimisticResult(latestOptions);
38
- return result.data;
37
+ let isFirstRun = true;
38
+ const get = async () => {
39
+ if (isFirstRun) {
40
+ isFirstRun = false;
41
+ const result = observer.getOptimisticResult(latestOptions);
42
+ if (result.isLoading) {
43
+ await new Promise((resolve) => {
44
+ resolveInitialPromise = resolve;
45
+ });
46
+ }
47
+ return result.data;
48
+ } else {
49
+ observer.refetch();
50
+ }
39
51
  };
40
52
  const subscribe = ({ update }) => {
41
53
  const unsubscribe = observer.subscribe(
42
54
  queryCore.notifyManager.batchCalls((result) => {
43
55
  if (result.status === "success") {
56
+ if (resolveInitialPromise) {
57
+ resolveInitialPromise(result.data);
58
+ resolveInitialPromise = void 0;
59
+ }
44
60
  update({ value: result.data });
45
61
  }
46
62
  })
@@ -12,6 +12,7 @@ function syncedQuery(params) {
12
12
  let observer = void 0;
13
13
  let latestOptions = defaultedOptions;
14
14
  let queryKeyFromFn;
15
+ let resolveInitialPromise = void 0;
15
16
  const origQueryKey = options.queryKey;
16
17
  const isKeyFunction = isFunction(origQueryKey);
17
18
  const updateQueryOptions = (obj) => {
@@ -31,14 +32,29 @@ function syncedQuery(params) {
31
32
  });
32
33
  }
33
34
  observer = new Observer(queryClient, latestOptions);
34
- const get = () => {
35
- const result = observer.getOptimisticResult(latestOptions);
36
- return result.data;
35
+ let isFirstRun = true;
36
+ const get = async () => {
37
+ if (isFirstRun) {
38
+ isFirstRun = false;
39
+ const result = observer.getOptimisticResult(latestOptions);
40
+ if (result.isLoading) {
41
+ await new Promise((resolve) => {
42
+ resolveInitialPromise = resolve;
43
+ });
44
+ }
45
+ return result.data;
46
+ } else {
47
+ observer.refetch();
48
+ }
37
49
  };
38
50
  const subscribe = ({ update }) => {
39
51
  const unsubscribe = observer.subscribe(
40
52
  notifyManager.batchCalls((result) => {
41
53
  if (result.status === "success") {
54
+ if (resolveInitialPromise) {
55
+ resolveInitialPromise(result.data);
56
+ resolveInitialPromise = void 0;
57
+ }
42
58
  update({ value: result.data });
43
59
  }
44
60
  })
@@ -2,10 +2,17 @@
2
2
 
3
3
  var react = require('@legendapp/state/react');
4
4
  var tanstackQuery = require('@legendapp/state/sync-plugins/tanstack-query');
5
+ var reactQuery = require('@tanstack/react-query');
5
6
 
6
7
  // src/sync-plugins/tanstack-react-query.ts
7
8
  function useObservableSyncedQuery(params) {
8
- return react.useObservable(tanstackQuery.syncedQuery(params));
9
+ const queryClient = params.queryClient || reactQuery.useQueryClient();
10
+ return react.useObservable(
11
+ tanstackQuery.syncedQuery({
12
+ ...params,
13
+ queryClient
14
+ })
15
+ );
9
16
  }
10
17
 
11
18
  exports.useObservableSyncedQuery = useObservableSyncedQuery;