@legendapp/state 1.11.1 → 2.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 (108) hide show
  1. package/CHANGELOG.md +0 -4
  2. package/index.d.ts +2 -3
  3. package/index.js +220 -226
  4. package/index.js.map +1 -1
  5. package/index.mjs +220 -224
  6. package/index.mjs.map +1 -1
  7. package/package.json +21 -24
  8. package/persist-plugins/async-storage.d.ts +14 -0
  9. package/persist-plugins/async-storage.js +100 -0
  10. package/persist-plugins/async-storage.js.map +1 -0
  11. package/persist-plugins/async-storage.mjs +98 -0
  12. package/persist-plugins/async-storage.mjs.map +1 -0
  13. package/persist-plugins/fetch.d.ts +10 -0
  14. package/persist-plugins/fetch.js +22 -0
  15. package/persist-plugins/fetch.js.map +1 -0
  16. package/persist-plugins/fetch.mjs +20 -0
  17. package/persist-plugins/fetch.mjs.map +1 -0
  18. package/persist-plugins/firebase.d.ts +51 -0
  19. package/persist-plugins/firebase.js +692 -0
  20. package/persist-plugins/firebase.js.map +1 -0
  21. package/persist-plugins/firebase.mjs +690 -0
  22. package/persist-plugins/firebase.mjs.map +1 -0
  23. package/persist-plugins/indexeddb.d.ts +2 -3
  24. package/persist-plugins/indexeddb.js +1 -16
  25. package/persist-plugins/indexeddb.js.map +1 -1
  26. package/persist-plugins/indexeddb.mjs +1 -16
  27. package/persist-plugins/indexeddb.mjs.map +1 -1
  28. package/persist-plugins/local-storage.d.ts +1 -2
  29. package/persist-plugins/local-storage.js +1 -5
  30. package/persist-plugins/local-storage.js.map +1 -1
  31. package/persist-plugins/local-storage.mjs +1 -5
  32. package/persist-plugins/local-storage.mjs.map +1 -1
  33. package/persist-plugins/mmkv.d.ts +4 -4
  34. package/persist-plugins/mmkv.js +6 -4
  35. package/persist-plugins/mmkv.js.map +1 -1
  36. package/persist-plugins/mmkv.mjs +6 -4
  37. package/persist-plugins/mmkv.mjs.map +1 -1
  38. package/persist-plugins/query.d.ts +20 -0
  39. package/persist-plugins/query.js +89 -0
  40. package/persist-plugins/query.js.map +1 -0
  41. package/persist-plugins/query.mjs +87 -0
  42. package/persist-plugins/query.mjs.map +1 -0
  43. package/persist.js +170 -143
  44. package/persist.js.map +1 -1
  45. package/persist.mjs +171 -144
  46. package/persist.mjs.map +1 -1
  47. package/react-hooks/usePersistedObservable.d.ts +2 -2
  48. package/react-hooks/usePersistedObservable.js +1 -6
  49. package/react-hooks/usePersistedObservable.js.map +1 -1
  50. package/react-hooks/usePersistedObservable.mjs +1 -6
  51. package/react-hooks/usePersistedObservable.mjs.map +1 -1
  52. package/react.d.ts +1 -6
  53. package/react.js +47 -99
  54. package/react.js.map +1 -1
  55. package/react.mjs +47 -100
  56. package/react.mjs.map +1 -1
  57. package/src/ObservableObject.d.ts +4 -0
  58. package/src/batching.d.ts +0 -7
  59. package/src/globals.d.ts +1 -5
  60. package/src/is.d.ts +1 -0
  61. package/src/observable.d.ts +5 -3
  62. package/src/observableInterfaces.d.ts +93 -69
  63. package/src/observe.d.ts +1 -1
  64. package/src/persist/observablePersistRemoteFunctionsAdapter.d.ts +2 -0
  65. package/src/persist/persistObservable.d.ts +10 -13
  66. package/src/persist-plugins/async-storage.d.ts +14 -0
  67. package/src/persist-plugins/fetch.d.ts +10 -0
  68. package/src/persist-plugins/firebase.d.ts +51 -0
  69. package/src/persist-plugins/indexeddb.d.ts +2 -3
  70. package/src/persist-plugins/local-storage.d.ts +1 -2
  71. package/src/persist-plugins/mmkv.d.ts +4 -4
  72. package/src/persist-plugins/query.d.ts +20 -0
  73. package/src/react/For.d.ts +1 -1
  74. package/src/react/react-globals.d.ts +3 -0
  75. package/src/react/reactInterfaces.d.ts +1 -1
  76. package/src/react/reactive-observer.d.ts +1 -5
  77. package/src/react/useObservableState.d.ts +2 -0
  78. package/src/react/useSelector.d.ts +1 -1
  79. package/src/react/useWhen.d.ts +3 -0
  80. package/src/react-hooks/usePersistedObservable.d.ts +2 -2
  81. package/src/trackSelector.d.ts +1 -1
  82. package/src/tracking.d.ts +2 -3
  83. package/config/disableDeprecationWarnings.d.ts +0 -1
  84. package/config/disableDeprecationWarnings.js +0 -10
  85. package/config/disableDeprecationWarnings.js.map +0 -1
  86. package/config/disableDeprecationWarnings.mjs +0 -8
  87. package/config/disableDeprecationWarnings.mjs.map +0 -1
  88. package/config/enableReactDirectRender.d.ts +0 -7
  89. package/config/enableReactDirectRender.js +0 -77
  90. package/config/enableReactDirectRender.js.map +0 -1
  91. package/config/enableReactDirectRender.mjs +0 -74
  92. package/config/enableReactDirectRender.mjs.map +0 -1
  93. package/react-components.d.ts +0 -2
  94. package/react-components.js +0 -44
  95. package/react-components.js.map +0 -1
  96. package/react-components.mjs +0 -31
  97. package/react-components.mjs.map +0 -1
  98. package/react-native-components.d.ts +0 -2
  99. package/react-native-components.js +0 -67
  100. package/react-native-components.js.map +0 -1
  101. package/react-native-components.mjs +0 -54
  102. package/react-native-components.mjs.map +0 -1
  103. package/src/config/disableDeprecationWarnings.d.ts +0 -1
  104. package/src/config/enableReactDirectRender.d.ts +0 -7
  105. package/src/react/enableLegendStateReact.d.ts +0 -1
  106. package/src/react-components/react-components.d.ts +0 -7
  107. package/src/react-native-components/rn-components.d.ts +0 -21
  108. package/types.d.ts +0 -13
package/src/globals.d.ts CHANGED
@@ -4,14 +4,10 @@ export declare const symbolGetNode: unique symbol;
4
4
  export declare const symbolDelete: unique symbol;
5
5
  export declare const symbolOpaque: unique symbol;
6
6
  export declare const optimized: unique symbol;
7
- export declare const extraPrimitiveActivators: Map<string | symbol, boolean>;
8
- export declare const extraPrimitiveProps: Map<string | symbol, any>;
9
- export declare const __devExtractFunctionsAndComputedsNodes: Set<unknown> | undefined;
10
7
  export declare const globalState: {
11
8
  isLoadingLocal: boolean;
12
9
  isLoadingRemote: boolean;
13
10
  isMerging: boolean;
14
- noDepWarn: boolean;
15
11
  };
16
12
  export declare function checkActivate(node: NodeValue): void;
17
13
  export declare function getNode(obs: ObservableReadable): NodeValue;
@@ -20,6 +16,7 @@ export declare function peek(node: NodeValue): any;
20
16
  export declare function setNodeValue(node: NodeValue, newValue: any): {
21
17
  prevValue: any;
22
18
  newValue: any;
19
+ parentValue: any;
23
20
  };
24
21
  export declare function getNodeValue(node: NodeValue): any;
25
22
  export declare function getChildNode(node: NodeValue, key: string): NodeValue;
@@ -27,4 +24,3 @@ export declare function ensureNodeValue(node: NodeValue): any;
27
24
  export declare function findIDKey(obj: unknown | undefined, node: NodeValue): string | ((value: any) => string) | undefined;
28
25
  export declare function extractFunction(node: NodeValue, key: string, fnOrComputed: Function, computedChildNode?: never): void;
29
26
  export declare function extractFunction(node: NodeValue, key: string, fnOrComputed: ObservableComputed, computedChildNode: NodeValue): void;
30
- export declare function extractFunctionsAndComputeds(obj: Record<string, any>, node: NodeValue): false | undefined;
package/src/is.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ export declare const hasOwnProperty: (v: PropertyKey) => boolean;
1
2
  export declare function isArray(obj: unknown): obj is Array<any>;
2
3
  export declare function isString(obj: unknown): obj is string;
3
4
  export declare function isObject(obj: unknown): obj is Record<any, any>;
@@ -1,3 +1,5 @@
1
- import type { Observable, ObservablePrimitive } from './observableInterfaces';
2
- export declare function observable<T>(value?: T | Promise<T>): Observable<T>;
3
- export declare function observablePrimitive<T>(value?: T | Promise<T>): ObservablePrimitive<T>;
1
+ import type { Observable, ObservablePrimitive, PromiseInfo } from './observableInterfaces';
2
+ export declare function observable<T>(value: Promise<T>): Observable<T & PromiseInfo>;
3
+ export declare function observable<T>(value?: T): Observable<T>;
4
+ export declare function observablePrimitive<T>(value: Promise<T>): ObservablePrimitive<T & PromiseInfo>;
5
+ export declare function observablePrimitive<T>(value?: T): ObservablePrimitive<T>;
@@ -1,4 +1,6 @@
1
+ import type { AsyncStorageStatic } from '@react-native-async-storage/async-storage';
1
2
  import type { symbolGetNode, symbolOpaque } from './globals';
3
+ import { DatabaseReference, Query } from 'firebase/database';
2
4
  interface MMKVConfiguration {
3
5
  /**
4
6
  * The MMKV instance's ID. If you want to use multiple instances, make sure to use different IDs!
@@ -34,7 +36,7 @@ interface MMKVConfiguration {
34
36
  encryptionKey?: string;
35
37
  }
36
38
  type Nullable<T> = T | null | undefined;
37
- export type TrackingType = undefined | true | 'shallow' | 'optimize' | symbol;
39
+ export type TrackingType = undefined | true | symbol;
38
40
  export interface MapGet<T extends Map<any, any> | WeakMap<any, any>> {
39
41
  get(key: Parameters<T['get']>[0]): ObservableChild<Parameters<T['set']>[1]>;
40
42
  get(): T;
@@ -91,7 +93,7 @@ type PrimitiveKeys<T> = Pick<T, {
91
93
  type NonPrimitiveKeys<T> = Pick<T, {
92
94
  [K in keyof T]-?: T[K] extends Primitive ? never : K;
93
95
  }[keyof T]>;
94
- type Recurse<T, K extends keyof T, TRecurse> = T[K] extends ObservableReadable ? T[K] : T[K] extends Function | Promise<any> ? T[K] : T[K] extends ObservableProxyTwoWay<infer t, infer t2> ? ObservableProxyTwoWay<t, t2> : T[K] extends ObservableProxy<infer t> ? ObservableProxy<t> : T[K] extends ObservableProxyLink<infer t> ? ObservableProxyLink<t> : T[K] extends Map<any, any> | WeakMap<any, any> ? ObservableMap<T[K]> : T[K] extends Set<any> | WeakSet<any> ? ObservableSet<T[K]> : T[K] extends Set<any> | WeakSet<any> ? T[K] & ObservablePrimitiveBaseFns<T[K]> : T[K] extends OpaqueObject<T[K]> ? T[K] & ObservablePrimitiveChildFns<T[K]> : T[K] extends Primitive ? ObservablePrimitiveChild<T[K]> : T[K] extends Array<any> ? ObservableObjectFns<T[K]> & ObservableArrayOverride<T[K][number]> : T extends object ? TRecurse : T[K];
96
+ type Recurse<T, K extends keyof T, TRecurse> = T[K] extends ObservableReadable ? T[K] : T[K] extends Promise<infer t> ? Observable<t & PromiseInfo> : T[K] extends Function ? T[K] : T[K] extends ObservableProxyTwoWay<infer t, infer t2> ? ObservableProxyTwoWay<t, t2> : T[K] extends ObservableProxy<infer t> ? ObservableProxy<t> : T[K] extends ObservableProxyLink<infer t> ? ObservableProxyLink<t> : T[K] extends Map<any, any> | WeakMap<any, any> ? ObservableMap<T[K]> : T[K] extends Set<any> | WeakSet<any> ? ObservableSet<T[K]> : T[K] extends Set<any> | WeakSet<any> ? T[K] & ObservablePrimitiveBaseFns<T[K]> : T[K] extends OpaqueObject<T[K]> ? T[K] & ObservablePrimitiveChildFns<T[K]> : T[K] extends Primitive ? ObservablePrimitiveChild<T[K]> : T[K] extends Array<any> ? ObservableObjectFns<T[K]> & ObservableArrayOverride<T[K][number]> : T extends object ? TRecurse : T[K];
95
97
  type ObservableFnsRecursiveUnsafe<T> = {
96
98
  [K in keyof T]-?: Recurse<T, K, ObservableObject<NonNullable<T[K]>>>;
97
99
  };
@@ -109,6 +111,8 @@ export interface ObservableEvent {
109
111
  }
110
112
  export type QueryByModified<T> = boolean | {
111
113
  [K in keyof T]?: QueryByModified<T[K]>;
114
+ } | {
115
+ '*'?: boolean;
112
116
  };
113
117
  export type TypeAtPath = 'object' | 'array';
114
118
  export interface Change {
@@ -117,12 +121,13 @@ export interface Change {
117
121
  valueAtPath: any;
118
122
  prevAtPath: any;
119
123
  }
124
+ export interface PersistTransform<T = any> {
125
+ in?: (value: T) => T | Promise<T>;
126
+ out?: (value: T) => T | Promise<T>;
127
+ }
120
128
  export interface PersistOptionsLocal<T = any> {
121
129
  name: string;
122
- adjustData?: {
123
- load?: (value: T) => T | Promise<T>;
124
- save?: (value: T) => T | Promise<T>;
125
- };
130
+ transform?: PersistTransform<T>;
126
131
  fieldTransforms?: FieldTransforms<T>;
127
132
  readonly?: boolean;
128
133
  mmkv?: MMKVConfiguration;
@@ -132,36 +137,64 @@ export interface PersistOptionsLocal<T = any> {
132
137
  };
133
138
  options?: any;
134
139
  }
135
- export interface PersistOptionsRemote<T = any> {
140
+ export type PersistOptionsRemote<T = any> = ObservablePersistenceConfigRemoteGlobalOptions & {
136
141
  readonly?: boolean;
137
- once?: boolean;
138
- requireAuth?: boolean;
139
- saveTimeout?: number;
140
- waitForLoad?: Promise<any> | ObservableReadable<any>;
141
- waitForSave?: Promise<any> | ObservableReadable<any> | ((value: any, path: string[]) => Promise<any>);
142
+ waitForGet?: Promise<any> | ObservableReadable<any>;
143
+ waitForSet?: Promise<any> | ObservableReadable<any>;
142
144
  manual?: boolean;
143
145
  fieldTransforms?: FieldTransforms<T>;
144
- allowSaveIfError?: boolean;
145
- onLoadError?: (error: Error) => void;
146
- onSaveError?: (error: Error) => void;
147
- adjustData?: {
148
- load?: (value: T) => T | Promise<T>;
149
- save?: (value: T) => T | Promise<T>;
150
- };
146
+ allowSetIfError?: boolean;
147
+ transform?: PersistTransform<T>;
151
148
  firebase?: {
152
- syncPath: (uid: string) => `/${string}/`;
149
+ refPath: (uid: string | undefined) => string;
150
+ query?: (ref: DatabaseReference) => DatabaseReference | Query;
153
151
  queryByModified?: QueryByModified<T>;
154
152
  ignoreKeys?: string[];
155
- dateModifiedKey?: string;
153
+ requireAuth?: boolean;
154
+ mode?: 'once' | 'realtime';
155
+ };
156
+ offlineBehavior?: false | 'retry';
157
+ changeTimeout?: number;
158
+ onGetError?: (error: Error) => void;
159
+ onSetError?: (error: Error) => void;
160
+ log?: (message?: any, ...optionalParams: any[]) => void;
161
+ onBeforeSet?: () => void;
162
+ onSet?: () => void;
163
+ };
164
+ export interface ObservablePersistenceConfigLocalGlobalOptions {
165
+ onGetError?: (error: Error) => void;
166
+ onSetError?: (error: Error) => void;
167
+ indexedDB?: {
168
+ databaseName: string;
169
+ version: number;
170
+ tableNames: string[];
156
171
  };
157
- onBeforeSaveRemote?: () => void;
158
- onSaveRemote?: () => void;
172
+ asyncStorage?: {
173
+ AsyncStorage: AsyncStorageStatic;
174
+ preload?: boolean | string[];
175
+ };
176
+ }
177
+ export interface ObservablePersistenceConfigRemoteGlobalOptions {
178
+ saveTimeout?: number;
179
+ dateModifiedKey?: string;
180
+ offlineBehavior?: false | 'retry';
181
+ onGetError?: (error: Error) => void;
182
+ onSetError?: (error: Error) => void;
183
+ log?: (logLevel: 'verbose' | 'warning' | 'error', message: any, ...optionalParams: any[]) => void;
184
+ onBeforeSet?: () => void;
185
+ onSet?: () => void;
186
+ }
187
+ export interface ObservablePersistenceConfig {
188
+ pluginLocal?: ClassConstructor<ObservablePersistLocal>;
189
+ pluginRemote?: ClassConstructor<ObservablePersistRemoteClass> | ObservablePersistRemoteFunctions;
190
+ localOptions?: ObservablePersistenceConfigLocalGlobalOptions;
191
+ remoteOptions?: ObservablePersistenceConfigRemoteGlobalOptions;
159
192
  }
160
- export interface PersistOptions<T = any> {
193
+ export interface PersistOptions<T = any, TState = {}> {
161
194
  local?: string | PersistOptionsLocal<T>;
162
195
  remote?: PersistOptionsRemote<T>;
163
- persistLocal?: ClassConstructor<ObservablePersistLocal>;
164
- persistRemote?: ClassConstructor<ObservablePersistRemote>;
196
+ pluginLocal?: ClassConstructor<ObservablePersistLocal>;
197
+ pluginRemote?: ClassConstructor<ObservablePersistRemoteClass> | ObservablePersistRemoteFunctions<T, TState>;
165
198
  }
166
199
  export interface PersistMetadata {
167
200
  id?: '__legend_metadata';
@@ -169,45 +202,50 @@ export interface PersistMetadata {
169
202
  pending?: any;
170
203
  }
171
204
  export interface ObservablePersistLocal {
172
- initialize?(config: ObservablePersistenceConfig['persistLocalOptions']): void | Promise<void>;
205
+ initialize?(config: ObservablePersistenceConfigLocalGlobalOptions): void | Promise<void>;
206
+ loadTable?(table: string, config: PersistOptionsLocal): Promise<any> | void;
173
207
  getTable<T = any>(table: string, config: PersistOptionsLocal): T;
174
- getTableTransformed?<T = any>(table: string, config: PersistOptionsLocal): T;
175
- getMetadata(table: string, config: PersistOptionsLocal): PersistMetadata;
176
208
  set(table: string, changes: Change[], config: PersistOptionsLocal): Promise<any> | void;
177
- updateMetadata(table: string, metadata: PersistMetadata, config: PersistOptionsLocal): Promise<any> | void;
178
209
  deleteTable(table: string, config: PersistOptionsLocal): Promise<any> | void;
210
+ getMetadata(table: string, config: PersistOptionsLocal): PersistMetadata;
211
+ setMetadata(table: string, metadata: PersistMetadata, config: PersistOptionsLocal): Promise<any> | void;
179
212
  deleteMetadata(table: string, config: PersistOptionsLocal): Promise<any> | void;
180
- loadTable?(table: string, config: PersistOptionsLocal): Promise<any> | void;
181
213
  }
182
- export interface ObservablePersistRemoteSaveParams<T, T2> {
183
- state: Observable<ObservablePersistState>;
214
+ export interface ObservablePersistRemoteSetParams<T> {
215
+ syncState: Observable<ObservablePersistState>;
184
216
  obs: Observable<T>;
185
217
  options: PersistOptions<T>;
186
- path: string[];
187
- pathTypes: TypeAtPath[];
188
- valueAtPath: T2;
189
- prevAtPath: any;
218
+ changes: Change[];
219
+ value: T;
190
220
  }
191
- export interface ObservablePersistRemoteListenParams<T> {
192
- state: Observable<ObservablePersistState>;
221
+ export interface ObservablePersistRemoteGetParams<T, TState = {}> {
222
+ state: Observable<ObservablePersistState & TState>;
193
223
  obs: ObservableReadable<T>;
194
- options: PersistOptions<T>;
224
+ options: PersistOptions<T, TState>;
195
225
  dateModified?: number;
196
- onLoad: () => void;
226
+ onGet: () => void;
197
227
  onChange: (params: {
198
- value: T;
199
- path: string[];
200
- pathTypes: TypeAtPath[];
201
- mode: 'assign' | 'set' | 'dateModified';
202
- dateModified: number | undefined;
228
+ value: unknown;
229
+ path?: string[];
230
+ pathTypes?: TypeAtPath[];
231
+ mode?: 'assign' | 'set' | 'dateModified';
232
+ dateModified?: number | undefined;
203
233
  }) => void | Promise<void>;
204
234
  }
205
- export interface ObservablePersistRemote {
206
- save<T, T2>(params: ObservablePersistRemoteSaveParams<T, T2>): Promise<{
235
+ export interface ObservablePersistRemoteClass<TState = {}> {
236
+ get<T>(params: ObservablePersistRemoteGetParams<T, TState>): void;
237
+ set?<T>(params: ObservablePersistRemoteSetParams<T>): Promise<void | {
207
238
  changes?: object;
208
239
  dateModified?: number;
240
+ pathStrs?: string[];
241
+ }>;
242
+ }
243
+ export interface ObservablePersistRemoteFunctions<T = any, TState = {}> {
244
+ get(params: ObservablePersistRemoteGetParams<T, TState>): T | Promise<T>;
245
+ set?(params: ObservablePersistRemoteSetParams<T>): Promise<void | {
246
+ changes?: object | undefined;
247
+ dateModified?: number;
209
248
  }>;
210
- listen<T>(params: ObservablePersistRemoteListenParams<T>): void;
211
249
  }
212
250
  export interface ObservablePersistState {
213
251
  isLoadedLocal: boolean;
@@ -255,7 +293,7 @@ export type ObservableListenerDispose = () => void;
255
293
  export interface ObservableRoot {
256
294
  _: any;
257
295
  locked?: boolean;
258
- computedChildrenNeedingActivation?: NodeValue[];
296
+ toActivate?: NodeValue[];
259
297
  set?: (value: any) => void;
260
298
  activate?: () => void;
261
299
  }
@@ -288,11 +326,9 @@ export interface NodeValueListener {
288
326
  interface BaseNodeValue {
289
327
  children?: Map<string, ChildNodeValue>;
290
328
  proxy?: object;
291
- isActivatedPrimitive?: boolean;
292
329
  root: ObservableRoot;
293
330
  listeners?: Set<NodeValueListener>;
294
331
  listenersImmediate?: Set<NodeValueListener>;
295
- descendantHasListener?: boolean;
296
332
  isComputed?: boolean;
297
333
  proxyFn?: (key: string) => ObservableReadable;
298
334
  isEvent?: boolean;
@@ -300,7 +336,7 @@ interface BaseNodeValue {
300
336
  linkedFromNodes?: Set<NodeValue>;
301
337
  isSetting?: number;
302
338
  isAssigning?: number;
303
- computedChildOfNode?: NodeValue;
339
+ parentOther?: NodeValue;
304
340
  functions?: Map<string, Function | ObservableComputed<any>>;
305
341
  }
306
342
  export interface RootNodeValue extends BaseNodeValue {
@@ -326,22 +362,6 @@ export interface ObserveEventCallback<T> {
326
362
  onCleanup?: () => void;
327
363
  onCleanupReaction?: () => void;
328
364
  }
329
- export interface ObservablePersistenceConfigLocalOptions {
330
- onLoadError?: (error: Error) => void;
331
- onSaveError?: (error: Error) => void;
332
- indexedDB?: {
333
- databaseName: string;
334
- version: number;
335
- tableNames: string[];
336
- };
337
- }
338
- export interface ObservablePersistenceConfig {
339
- persistLocal?: ClassConstructor<ObservablePersistLocal>;
340
- persistRemote?: ClassConstructor<ObservablePersistRemote>;
341
- persistLocalOptions?: ObservablePersistenceConfigLocalOptions;
342
- saveTimeout?: number;
343
- dateModifiedKey?: string;
344
- }
345
365
  export type ObservableProxy<T extends Record<string, any>> = {
346
366
  [K in keyof T]: ObservableComputed<T[K]>;
347
367
  } & ObservableBaseFns<T> & {
@@ -357,4 +377,8 @@ export type ObservableProxyTwoWay<T extends Record<string, any>, T2> = {
357
377
  } & ObservableBaseFns<T> & {
358
378
  [symbolGetNode]: NodeValue;
359
379
  };
380
+ export type PromiseInfo = {
381
+ error?: any;
382
+ status?: 'pending' | 'rejected';
383
+ };
360
384
  export {};
package/src/observe.d.ts CHANGED
@@ -4,4 +4,4 @@ export interface ObserveOptions {
4
4
  retainObservable?: boolean;
5
5
  }
6
6
  export declare function observe<T>(run: (e: ObserveEvent<T>) => T | void, options?: ObserveOptions): () => void;
7
- export declare function observe<T>(selector: Selector<T>, reaction?: (e: ObserveEventCallback<T>) => any, options?: ObserveOptions): () => void;
7
+ export declare function observe<T>(selector: Selector<T> | ((e: ObserveEvent<T>) => any), reaction?: (e: ObserveEventCallback<T>) => any, options?: ObserveOptions): () => void;
@@ -0,0 +1,2 @@
1
+ import type { ObservablePersistRemoteClass, ObservablePersistRemoteFunctions } from '@legendapp/state';
2
+ export declare function observablePersistRemoteFunctionsAdapter<T = {}, TState = {}>({ get, set, }: ObservablePersistRemoteFunctions<T, TState>): ObservablePersistRemoteClass;
@@ -1,15 +1,13 @@
1
- import type { ClassConstructor, FieldTransforms, Observable, ObservableObject, ObservablePersistLocal, ObservablePersistRemote, ObservablePersistState, ObservableWriteable, PersistOptions, TypeAtPath } from '@legendapp/state';
2
- export declare const mapPersistences: WeakMap<ClassConstructor<ObservablePersistLocal | ObservablePersistRemote>, {
3
- persist: ObservablePersistLocal | ObservablePersistRemote;
1
+ import type { ClassConstructor, FieldTransforms, Observable, ObservableObject, ObservablePersistLocal, ObservablePersistRemoteClass, ObservablePersistState, ObservableWriteable, PersistOptions, PersistTransform, TypeAtPath } from '@legendapp/state';
2
+ export declare const mapPersistences: WeakMap<ClassConstructor<ObservablePersistLocal | ObservablePersistRemoteClass>, {
3
+ persist: ObservablePersistLocal | ObservablePersistRemoteClass;
4
4
  initialized?: Observable<boolean>;
5
5
  }>;
6
6
  export declare const persistState: ObservableObject<{
7
7
  inRemoteSync: boolean;
8
8
  }>;
9
- export declare function adjustSaveData(value: any, path: string[], pathTypes: TypeAtPath[], { adjustData, fieldTransforms, }: {
10
- adjustData?: {
11
- save?: (value: any) => any;
12
- };
9
+ export declare function transformOutData(value: any, path: string[], pathTypes: TypeAtPath[], { transform, fieldTransforms }: {
10
+ transform?: PersistTransform;
13
11
  fieldTransforms?: FieldTransforms<any>;
14
12
  }): {
15
13
  value: any;
@@ -18,11 +16,10 @@ export declare function adjustSaveData(value: any, path: string[], pathTypes: Ty
18
16
  value: any;
19
17
  path: string[];
20
18
  }>;
21
- export declare function adjustLoadData(value: any, { adjustData, fieldTransforms, }: {
19
+ export declare function transformLoadData(value: any, { transform, fieldTransforms }: {
22
20
  fieldTransforms?: FieldTransforms<any>;
23
- adjustData?: {
24
- load?: (value: any) => any;
25
- };
26
- }, doUserAdjustData: boolean): Promise<any> | any;
21
+ transform?: PersistTransform;
22
+ }, doUserTransform: boolean): Promise<any> | any;
27
23
  export declare function onChangeRemote(cb: () => void): void;
28
- export declare function persistObservable<T>(obs: ObservableWriteable<T>, persistOptions: PersistOptions<T>): ObservableObject<ObservablePersistState>;
24
+ export declare function persistObservable<T, TState = {}>(observable: ObservableWriteable<T>, persistOptions: PersistOptions<T, TState>): [Observable<T>, ObservableObject<ObservablePersistState & TState>];
25
+ export declare function persistObservable<T, TState = {}>(initial: T | (() => T) | (() => Promise<T>), persistOptions: PersistOptions<T, TState>): [Observable<T>, ObservableObject<ObservablePersistState & TState>];
@@ -0,0 +1,14 @@
1
+ import type { Change, ObservablePersistLocal, ObservablePersistenceConfigLocalGlobalOptions, PersistMetadata } from '@legendapp/state';
2
+ export declare class ObservablePersistAsyncStorage implements ObservablePersistLocal {
3
+ private data;
4
+ initialize(config: ObservablePersistenceConfigLocalGlobalOptions): Promise<void>;
5
+ loadTable(table: string): void | Promise<void>;
6
+ getTable(table: string): any;
7
+ getMetadata(table: string): PersistMetadata;
8
+ set(table: string, changes: Change[]): Promise<void>;
9
+ setMetadata(table: string, metadata: PersistMetadata): Promise<void>;
10
+ deleteTable(table: string): Promise<void>;
11
+ deleteMetadata(table: string): Promise<void>;
12
+ private setValue;
13
+ private save;
14
+ }
@@ -0,0 +1,10 @@
1
+ import { ObservablePersistRemoteFunctions } from '@legendapp/state';
2
+ interface PersistFetchProps {
3
+ get: string | RequestInfo;
4
+ set?: string | RequestInfo;
5
+ getInit?: RequestInit;
6
+ setInit?: RequestInit;
7
+ valueType?: 'arrayBuffer' | 'blob' | 'formData' | 'json' | 'text';
8
+ }
9
+ export declare function persistPluginFetch({ get, set, getInit, setInit, valueType, }: PersistFetchProps): ObservablePersistRemoteFunctions;
10
+ export {};
@@ -0,0 +1,51 @@
1
+ import { ObservablePersistRemoteClass, ObservablePersistRemoteGetParams, ObservablePersistRemoteSetParams } from '@legendapp/state';
2
+ import { type User } from 'firebase/auth';
3
+ import type { DataSnapshot } from 'firebase/database';
4
+ import { DatabaseReference } from 'firebase/database';
5
+ interface FirebaseFns {
6
+ isInitialized: () => boolean;
7
+ getCurrentUser: () => string | undefined;
8
+ ref: (path: string) => DatabaseReference;
9
+ orderByChild: (ref: any, child: string, startAt: number) => any;
10
+ once: (query: any, callback: (snapshot: DataSnapshot) => unknown, onError: (error: Error) => void) => () => void;
11
+ onChildAdded: (query: any, callback: (snapshot: DataSnapshot) => unknown, cancelCallback?: (error: Error) => unknown) => () => void;
12
+ onChildChanged: (query: any, callback: (snapshot: DataSnapshot) => unknown, cancelCallback?: (error: Error) => unknown) => () => void;
13
+ serverTimestamp: () => any;
14
+ update: (object: object) => Promise<void>;
15
+ onAuthStateChanged: (cb: (user: User | null) => void) => void;
16
+ }
17
+ declare class ObservablePersistFirebaseBase implements ObservablePersistRemoteClass {
18
+ protected _batch: Record<string, any>;
19
+ protected fns: FirebaseFns;
20
+ private _pathsLoadStatus;
21
+ private SaveTimeout;
22
+ private user;
23
+ private listenErrors;
24
+ private saveStates;
25
+ constructor(fns: FirebaseFns);
26
+ get<T>(params: ObservablePersistRemoteGetParams<T>): Promise<void>;
27
+ private iterateListen;
28
+ private retryListens;
29
+ private _listen;
30
+ private _updatePendingSave;
31
+ set<T>({ options, changes, obs }: ObservablePersistRemoteSetParams<T>): Promise<{
32
+ changes?: object;
33
+ dateModified?: number;
34
+ pathStrs?: string[];
35
+ } | undefined>;
36
+ private _constructBatch;
37
+ private _constructBatchesForSave;
38
+ private _onTimeoutSave;
39
+ private _saveBatch;
40
+ private _convertFBTimestamps;
41
+ private _onceValue;
42
+ private _onChange;
43
+ private insertDateToObject;
44
+ private insertDatesToSaveObject;
45
+ private insertDatesToSave;
46
+ private addValuesToPendingSaves;
47
+ }
48
+ export declare class ObservablePersistFirebase extends ObservablePersistFirebaseBase {
49
+ constructor();
50
+ }
51
+ export {};
@@ -8,12 +8,11 @@ export declare class ObservablePersistIndexedDB implements ObservablePersistLoca
8
8
  private pendingSaves;
9
9
  private promisesQueued;
10
10
  constructor();
11
- initialize(config: ObservablePersistenceConfig['persistLocalOptions']): Promise<void>;
11
+ initialize(config: ObservablePersistenceConfig['localOptions']): Promise<void>;
12
12
  loadTable(table: string, config: PersistOptionsLocal): void | Promise<void>;
13
13
  getTable(table: string, config: PersistOptionsLocal): any;
14
- getTableTransformed<T = any>(table: string, config: PersistOptionsLocal<any>): T;
15
14
  getMetadata(table: string, config: PersistOptionsLocal): any;
16
- updateMetadata(table: string, metadata: PersistMetadata, config: PersistOptionsLocal): Promise<IDBRequest<IDBValidKey>>;
15
+ setMetadata(table: string, metadata: PersistMetadata, config: PersistOptionsLocal): Promise<IDBRequest<IDBValidKey>>;
17
16
  deleteMetadata(table: string, config: PersistOptionsLocal): Promise<void>;
18
17
  set(table: string, changes: Change[], config: PersistOptionsLocal): Promise<void>;
19
18
  private doSave;
@@ -5,9 +5,8 @@ declare class ObservablePersistLocalStorageBase implements ObservablePersistLoca
5
5
  constructor(storage: Storage | undefined);
6
6
  getTable(table: string): any;
7
7
  getMetadata(table: string): PersistMetadata;
8
- get(table: string, id: string): any;
9
8
  set(table: string, changes: Change[]): void;
10
- updateMetadata(table: string, metadata: PersistMetadata): void;
9
+ setMetadata(table: string, metadata: PersistMetadata): void;
11
10
  deleteTable(table: string): undefined;
12
11
  deleteMetadata(table: string): void;
13
12
  private setValue;
@@ -4,10 +4,10 @@ export declare class ObservablePersistMMKV implements ObservablePersistLocal {
4
4
  private storages;
5
5
  getTable<T = any>(table: string, config: PersistOptionsLocal): T;
6
6
  getMetadata(table: string, config: PersistOptionsLocal): PersistMetadata;
7
- set(table: string, changes: Change[], config: PersistOptionsLocal): Promise<void>;
8
- updateMetadata(table: string, metadata: PersistMetadata, config: PersistOptionsLocal): Promise<void>;
9
- deleteTable(table: string, config: PersistOptionsLocal): Promise<void>;
10
- deleteMetadata(table: string, config: PersistOptionsLocal): Promise<void>;
7
+ set(table: string, changes: Change[], config: PersistOptionsLocal): void;
8
+ setMetadata(table: string, metadata: PersistMetadata, config: PersistOptionsLocal): Promise<void>;
9
+ deleteTable(table: string, config: PersistOptionsLocal): void;
10
+ deleteMetadata(table: string, config: PersistOptionsLocal): void;
11
11
  private getStorage;
12
12
  private setValue;
13
13
  private save;
@@ -0,0 +1,20 @@
1
+ import { ObservablePersistRemoteFunctions } from '@legendapp/state';
2
+ import { QueryClient, QueryKey, UseBaseQueryOptions, UseMutationOptions } from '@tanstack/react-query';
3
+ type ObservableQueryOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey extends QueryKey> = Omit<UseBaseQueryOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>, 'queryKey'> & {
4
+ queryKey?: TQueryKey | (() => TQueryKey);
5
+ };
6
+ type Params<TQueryFnData, TError, TData, TQueryData, TQueryKey extends QueryKey> = {
7
+ query: ObservableQueryOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>;
8
+ mutation?: UseMutationOptions<TData, TError, void>;
9
+ type?: 'Query' | 'Infinite';
10
+ } & ({
11
+ queryClient: QueryClient;
12
+ useContext?: false | undefined | never;
13
+ } | {
14
+ queryClient?: QueryClient;
15
+ useContext?: true;
16
+ });
17
+ export declare function persistPluginQuery<TObs, TQueryFnData, TError, TData, TQueryData, TQueryKey extends QueryKey>({ query: options, mutation: mutationOptions, type, queryClient, useContext, }: Params<TQueryFnData, TError, TData, TQueryData, TQueryKey>): ObservablePersistRemoteFunctions<TObs, {
18
+ query: UseBaseQueryOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>;
19
+ }>;
20
+ export {};
@@ -1,6 +1,6 @@
1
1
  import type { Observable, ObservableReadable } from '@legendapp/state';
2
2
  import { FC, ReactElement } from 'react';
3
- export declare function For<T, TProps>({ each, eachValues, optimized: isOptimized, item, itemProps, sortValues, children, }: {
3
+ export declare function For<T, TProps>({ each, optimized: isOptimized, item, itemProps, sortValues, children, }: {
4
4
  each?: ObservableReadable<T[] | Record<any, T> | Map<any, T>>;
5
5
  eachValues?: ObservableReadable<Record<any, T> | Map<any, T>>;
6
6
  optimized?: boolean;
@@ -0,0 +1,3 @@
1
+ export declare const reactGlobals: {
2
+ inObserver: boolean;
3
+ };
@@ -17,5 +17,5 @@ export type FCReactive<P, P2> = P & FC<ShapeWithNew$<P2> & {
17
17
  ref?: LegacyRef<P> | undefined;
18
18
  }>;
19
19
  export interface UseSelectorOptions {
20
- suspend?: boolean;
20
+ suspense?: boolean;
21
21
  }
@@ -1,10 +1,7 @@
1
1
  import { Selector } from '@legendapp/state';
2
2
  import { FC } from 'react';
3
3
  import type { BindKeys } from './reactInterfaces';
4
- type ShapeWithOld$<T, T2 extends keyof T = keyof T> = {
5
- [K in T2 as K extends `${string & K}$` ? K : `${string & K}$`]?: Selector<T[K]>;
6
- };
7
- export type ShapeWith$<T, T2 extends keyof T = keyof T> = Partial<T> & ShapeWithOld$<T, T2> & {
4
+ export type ShapeWith$<T, T2 extends keyof T = keyof T> = Partial<T> & {
8
5
  [K in T2 as K extends `$${string & K}` ? K : `$${string & K}`]?: Selector<T[K]>;
9
6
  };
10
7
  export type ObjectShapeWith$<T> = {
@@ -15,4 +12,3 @@ export declare function observer<P = object>(component: FC<P>): FC<P>;
15
12
  export declare function reactive<P = object, P2 extends keyof P = keyof P>(component: FC<P>, bindKeys?: BindKeys<P>): FC<ShapeWith$<P, P2>>;
16
13
  export declare function reactiveObserver<P = object>(component: FC<P>, bindKeys?: BindKeys<P>): FC<ShapeWith$<P, keyof P>>;
17
14
  export declare function reactiveComponents<P extends Record<string, FC>>(components: P): ObjectShapeWith$<P>;
18
- export {};
@@ -0,0 +1,2 @@
1
+ import { type Observable } from '@legendapp/state';
2
+ export declare function useObservableState<T>(initialValue?: T | (() => T) | (() => Promise<T>)): [Observable<T>, T];
@@ -1,3 +1,3 @@
1
1
  import { Selector } from '@legendapp/state';
2
- import { UseSelectorOptions } from 'src/react/reactInterfaces';
2
+ import type { UseSelectorOptions } from './reactInterfaces';
3
3
  export declare function useSelector<T>(selector: Selector<T>, options?: UseSelectorOptions): T;
@@ -0,0 +1,3 @@
1
+ import { Selector } from '@legendapp/state';
2
+ export declare function useWhen<T>(predicate: Selector<T>, effect: (value: T) => any | (() => any)): Promise<T>;
3
+ export declare function useWhenReady<T>(predicate: Selector<T>, effect: (value: T) => any | (() => any)): Promise<T>;
@@ -1,4 +1,4 @@
1
- import { Observable, PersistOptions } from '@legendapp/state';
1
+ import { Observable, ObservableObject, ObservablePersistState, PersistOptions } from '@legendapp/state';
2
2
  /**
3
3
  * A React hook that creates a new observable and can optionally listen or persist its state.
4
4
  *
@@ -7,4 +7,4 @@ import { Observable, PersistOptions } from '@legendapp/state';
7
7
  *
8
8
  * @see https://www.legendapp.com/dev/state/react/#useObservable
9
9
  */
10
- export declare function usePersistedObservable<T>(initialValue?: T | (() => T) | (() => Promise<T>), options?: PersistOptions<T>): Observable<T>;
10
+ export declare function usePersistedObservable<T>(initialValue: T | (() => T) | (() => Promise<T>), options: PersistOptions<T>): [Observable<T>, ObservableObject<ObservablePersistState>];
@@ -1,6 +1,6 @@
1
1
  import type { ObservableListenerDispose, ObserveEvent, Selector } from './observableInterfaces';
2
2
  import type { ObserveOptions } from './observe';
3
- export declare function trackSelector<T>(selector: Selector<T>, update: () => void, observeEvent?: ObserveEvent<T>, observeOptions?: ObserveOptions, createResubscribe?: boolean, inRender?: boolean): {
3
+ export declare function trackSelector<T>(selector: Selector<T>, update: () => void, observeEvent?: ObserveEvent<T>, observeOptions?: ObserveOptions, createResubscribe?: boolean): {
4
4
  value: any;
5
5
  dispose: ObservableListenerDispose | undefined;
6
6
  resubscribe: ObservableListenerDispose | undefined;
package/src/tracking.d.ts CHANGED
@@ -6,9 +6,8 @@ interface TrackingState {
6
6
  }
7
7
  export declare const tracking: {
8
8
  current: TrackingState | undefined;
9
- inRender: boolean | undefined;
10
9
  };
11
- export declare function beginTracking(inRender?: boolean): void;
12
- export declare function endTracking(fromRender?: boolean): void;
10
+ export declare function beginTracking(): void;
11
+ export declare function endTracking(): void;
13
12
  export declare function updateTracking(node: NodeValue, track?: TrackingType): void;
14
13
  export {};
@@ -1 +0,0 @@
1
- export declare function disableDeprecationWarnings(): void;
@@ -1,10 +0,0 @@
1
- 'use strict';
2
-
3
- var state = require('@legendapp/state');
4
-
5
- function disableDeprecationWarnings() {
6
- state.internal.globalState.noDepWarn = true;
7
- }
8
-
9
- exports.disableDeprecationWarnings = disableDeprecationWarnings;
10
- //# sourceMappingURL=disableDeprecationWarnings.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"disableDeprecationWarnings.js","sources":["../../../../src/config/disableDeprecationWarnings.ts"],"sourcesContent":[null],"names":["internal"],"mappings":";;;;SAEgB,0BAA0B,GAAA;AACtC,IAAAA,cAAQ,CAAC,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC;AAC1C;;;;"}
@@ -1,8 +0,0 @@
1
- import { internal } from '@legendapp/state';
2
-
3
- function disableDeprecationWarnings() {
4
- internal.globalState.noDepWarn = true;
5
- }
6
-
7
- export { disableDeprecationWarnings };
8
- //# sourceMappingURL=disableDeprecationWarnings.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"disableDeprecationWarnings.mjs","sources":["../../../../src/config/disableDeprecationWarnings.ts"],"sourcesContent":[null],"names":[],"mappings":";;SAEgB,0BAA0B,GAAA;AACtC,IAAA,QAAQ,CAAC,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC;AAC1C;;;;"}