@legendapp/state 3.0.0-alpha.3 → 3.0.0-alpha.31

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 (74) hide show
  1. package/CHANGELOG.md +831 -1
  2. package/LICENSE +21 -1
  3. package/README.md +141 -1
  4. package/babel.js +0 -2
  5. package/babel.mjs +0 -2
  6. package/config/enable$GetSet.js +2 -1
  7. package/config/enable$GetSet.mjs +2 -1
  8. package/config/enableReactTracking.js +2 -1
  9. package/config/enableReactTracking.mjs +2 -1
  10. package/config/enableReactUse.js +2 -1
  11. package/config/enableReactUse.mjs +2 -1
  12. package/config/enable_PeekAssign.js +2 -1
  13. package/config/enable_PeekAssign.mjs +2 -1
  14. package/config.d.mts +13 -0
  15. package/config.d.ts +13 -0
  16. package/config.js +2066 -0
  17. package/config.mjs +2064 -0
  18. package/helpers/trackHistory.js +2 -2
  19. package/helpers/trackHistory.mjs +2 -2
  20. package/index.d.mts +25 -302
  21. package/index.d.ts +25 -302
  22. package/index.js +293 -322
  23. package/index.mjs +294 -321
  24. package/observableInterfaces-CZR3_8mM.d.mts +283 -0
  25. package/observableInterfaces-CZR3_8mM.d.ts +283 -0
  26. package/package.json +11 -1
  27. package/persist-plugins/async-storage.d.mts +6 -3
  28. package/persist-plugins/async-storage.d.ts +6 -3
  29. package/persist-plugins/async-storage.js +12 -4
  30. package/persist-plugins/async-storage.mjs +12 -5
  31. package/persist-plugins/indexeddb.d.mts +6 -4
  32. package/persist-plugins/indexeddb.d.ts +6 -4
  33. package/persist-plugins/indexeddb.js +16 -6
  34. package/persist-plugins/indexeddb.mjs +16 -7
  35. package/persist-plugins/mmkv.d.mts +5 -1
  36. package/persist-plugins/mmkv.d.ts +5 -1
  37. package/persist-plugins/mmkv.js +14 -5
  38. package/persist-plugins/mmkv.mjs +14 -6
  39. package/react.d.mts +18 -14
  40. package/react.d.ts +18 -14
  41. package/react.js +57 -32
  42. package/react.mjs +58 -33
  43. package/sync-plugins/crud.d.mts +21 -24
  44. package/sync-plugins/crud.d.ts +21 -24
  45. package/sync-plugins/crud.js +240 -139
  46. package/sync-plugins/crud.mjs +242 -141
  47. package/sync-plugins/fetch.js +12 -8
  48. package/sync-plugins/fetch.mjs +13 -9
  49. package/sync-plugins/firebase.d.mts +27 -0
  50. package/sync-plugins/firebase.d.ts +27 -0
  51. package/sync-plugins/firebase.js +373 -0
  52. package/sync-plugins/firebase.mjs +368 -0
  53. package/sync-plugins/keel.d.mts +27 -10
  54. package/sync-plugins/keel.d.ts +27 -10
  55. package/sync-plugins/keel.js +51 -32
  56. package/sync-plugins/keel.mjs +52 -33
  57. package/sync-plugins/supabase.d.mts +12 -7
  58. package/sync-plugins/supabase.d.ts +12 -7
  59. package/sync-plugins/supabase.js +24 -13
  60. package/sync-plugins/supabase.mjs +25 -14
  61. package/sync-plugins/tanstack-query.d.mts +2 -2
  62. package/sync-plugins/tanstack-query.d.ts +2 -2
  63. package/sync-plugins/tanstack-query.js +3 -2
  64. package/sync-plugins/tanstack-query.mjs +3 -2
  65. package/sync-plugins/tanstack-react-query.d.mts +1 -1
  66. package/sync-plugins/tanstack-react-query.d.ts +1 -1
  67. package/sync.d.mts +71 -197
  68. package/sync.d.ts +71 -197
  69. package/sync.js +465 -284
  70. package/sync.mjs +471 -290
  71. package/types/babel.d.ts +12 -1
  72. package/.DS_Store +0 -0
  73. /package/config/{enable_GetSet.d.mts → enable$GetSet.d.mts} +0 -0
  74. /package/config/{enable_GetSet.d.ts → enable$GetSet.d.ts} +0 -0
package/sync.d.ts CHANGED
@@ -1,8 +1,7 @@
1
1
  import { MMKVConfiguration } from 'react-native-mmkv';
2
2
  import { AsyncStorageStatic } from '@react-native-async-storage/async-storage';
3
- import { ClassConstructor, GetMode, SetParams, NodeValue, UpdateFn, ObservableParam, LinkedOptions, RetryOptions, Change, Observable, ObservableSyncState, UpdateFnParams, Selector, TypeAtPath, ObservableState, RecordValue, ArrayValue } from '@legendapp/state';
3
+ import { ClassConstructor, NodeInfo, ObservableParam, GetMode, SetParams, UpdateFn, LinkedOptions, RetryOptions, Change, Observable, ObservableSyncState, TypeAtPath, RecordValue, ArrayValue, WaitForSet } from '@legendapp/state';
4
4
  import { SyncedOptionsGlobal as SyncedOptionsGlobal$1 } from '@legendapp/state/sync';
5
- import { DatabaseReference, Query } from 'firebase/database';
6
5
 
7
6
  interface PersistOptions<T = any> {
8
7
  name: string;
@@ -17,30 +16,43 @@ interface PersistOptions<T = any> {
17
16
  };
18
17
  options?: any;
19
18
  }
20
- interface SyncedGetParams {
19
+ interface SyncedGetSetSubscribeBaseParams<T = any> {
20
+ node: NodeInfo;
21
+ value$: ObservableParam<T>;
22
+ refresh: () => void;
23
+ }
24
+ interface SyncedGetSetBaseParams<T = any> extends SyncedGetSetSubscribeBaseParams<T>, OnErrorRetryParams {
25
+ }
26
+ interface OnErrorRetryParams {
27
+ retryNum: number;
28
+ cancelRetry: boolean;
29
+ }
30
+ interface SyncedGetParams<T> extends SyncedGetSetBaseParams<T> {
21
31
  value: any;
22
32
  lastSync: number | undefined;
23
33
  updateLastSync: (lastSync: number) => void;
24
34
  mode: GetMode;
25
- refresh: () => void;
35
+ onError: (error: Error) => void;
36
+ options: SyncedOptions;
26
37
  }
27
- interface SyncedSetParams<T> extends SetParams<T> {
28
- node: NodeValue;
29
- valuePrevious: T;
30
- update: UpdateFn;
31
- refresh: () => void;
32
- cancelRetry: () => void;
33
- retryNum: number;
34
- fromSubscribe: boolean | undefined;
38
+ interface SyncedSetParams<T> extends Pick<SetParams<T>, 'changes' | 'value'>, SyncedGetSetBaseParams<T> {
39
+ update: UpdateFn<T>;
40
+ onError: (error: Error, retryParams: OnErrorRetryParams) => void;
35
41
  }
36
- interface SyncedSubscribeParams<T = any> {
37
- node: NodeValue;
38
- value$: ObservableParam<T>;
39
- update: UpdateFn;
40
- refresh: () => void;
42
+ interface SyncedSubscribeParams<T = any> extends SyncedGetSetSubscribeBaseParams<T> {
43
+ lastSync: number | undefined;
44
+ update: UpdateFn<T>;
45
+ onError: (error: Error) => void;
46
+ }
47
+ interface SyncedErrorParams {
48
+ getParams?: SyncedGetParams<any>;
49
+ setParams?: SyncedSetParams<any>;
50
+ subscribeParams?: SyncedSubscribeParams<any>;
51
+ source: 'get' | 'set' | 'subscribe';
52
+ value$: ObservableParam<any>;
41
53
  }
42
54
  interface SyncedOptions<TRemote = any, TLocal = TRemote> extends Omit<LinkedOptions<TRemote>, 'get' | 'set'> {
43
- get?: (params: SyncedGetParams) => Promise<TRemote> | TRemote;
55
+ get?: (params: SyncedGetParams<TRemote>) => Promise<TRemote> | TRemote;
44
56
  set?: (params: SyncedSetParams<TRemote>) => void | Promise<any>;
45
57
  subscribe?: (params: SyncedSubscribeParams<TRemote>) => (() => void) | void;
46
58
  retry?: RetryOptions;
@@ -49,29 +61,36 @@ interface SyncedOptions<TRemote = any, TLocal = TRemote> extends Omit<LinkedOpti
49
61
  syncMode?: 'auto' | 'manual';
50
62
  mode?: GetMode;
51
63
  transform?: SyncTransform<TLocal, TRemote>;
52
- enableSync?: boolean;
53
- onGetError?: (error: Error) => void;
54
- onSetError?: (error: Error) => void;
55
- log?: (message?: any, ...optionalParams: any[]) => void;
64
+ onGetError?: (error: Error, params: SyncedErrorParams) => void;
65
+ onSetError?: (error: Error, params: SyncedErrorParams) => void;
66
+ onBeforeGet?: (params: {
67
+ value: TRemote;
68
+ lastSync: number | undefined;
69
+ pendingChanges: PendingChanges | undefined;
70
+ clearPendingChanges: () => Promise<void>;
71
+ resetCache: () => Promise<void>;
72
+ }) => void;
56
73
  onBeforeSet?: () => void;
57
74
  onAfterSet?: () => void;
58
- allowSetIfGetError?: boolean;
75
+ log?: (message?: any, ...optionalParams: any[]) => void;
59
76
  }
60
77
  interface SyncedOptionsGlobal<T = any> extends Omit<SyncedOptions<T>, 'get' | 'set' | 'persist' | 'initial' | 'waitForSet' | 'waitFor' | 'transform' | 'subscribe'> {
61
78
  persist?: ObservablePersistPluginOptions & Omit<PersistOptions, 'name' | 'transform' | 'options'>;
62
79
  }
80
+ interface ObservablePersistIndexedDBPluginOptions {
81
+ databaseName: string;
82
+ version: number;
83
+ tableNames: string[];
84
+ }
85
+ interface ObservablePersistAsyncStoragePluginOptions {
86
+ AsyncStorage: AsyncStorageStatic;
87
+ preload?: boolean | string[];
88
+ }
63
89
  interface ObservablePersistPluginOptions {
64
90
  onGetError?: (error: Error) => void;
65
91
  onSetError?: (error: Error) => void;
66
- indexedDB?: {
67
- databaseName: string;
68
- version: number;
69
- tableNames: string[];
70
- };
71
- asyncStorage?: {
72
- AsyncStorage: AsyncStorageStatic;
73
- preload?: boolean | string[];
74
- };
92
+ indexedDB?: ObservablePersistIndexedDBPluginOptions;
93
+ asyncStorage?: ObservablePersistAsyncStoragePluginOptions;
75
94
  }
76
95
  interface ObservablePersistPlugin {
77
96
  initialize?(config: ObservablePersistPluginOptions): void | Promise<void>;
@@ -99,31 +118,9 @@ interface ObservableSyncSetParams<T> {
99
118
  options: SyncedOptions<T>;
100
119
  changes: Change[];
101
120
  value: T;
102
- valuePrevious: T;
103
- }
104
- interface ObservableSyncGetParams<T> {
105
- state: Observable<ObservableSyncState>;
106
- value$: ObservableParam<T>;
107
- options: SyncedOptions<T>;
108
- dateModified?: number;
109
- lastSync?: number;
110
- mode?: GetMode;
111
- onGet: () => void;
112
- onError: (error: Error) => void;
113
- onChange: (params: UpdateFnParams) => void | Promise<void>;
114
- }
115
- type ObservableSyncRemoteGetFnParams<T> = Omit<ObservableSyncGetParams<T>, 'onGet'>;
116
- interface ObservableSyncClass {
117
- get?<T>(params: ObservableSyncGetParams<T>): void;
118
- set?<T>(params: ObservableSyncSetParams<T>): void | Promise<void | {
119
- changes?: object;
120
- dateModified?: number;
121
- lastSync?: number;
122
- pathStrs?: string[];
123
- }>;
124
121
  }
125
122
  interface ObservableSyncFunctions<T = any> {
126
- get?(params: ObservableSyncRemoteGetFnParams<T>): T | Promise<T>;
123
+ get?(params: SyncedGetParams<T>): T | Promise<T>;
127
124
  set?(params: ObservableSyncSetParams<T>): void | Promise<void | {
128
125
  changes?: object | undefined;
129
126
  dateModified?: number;
@@ -131,151 +128,19 @@ interface ObservableSyncFunctions<T = any> {
131
128
  }>;
132
129
  }
133
130
  interface SubscribeOptions {
134
- node: NodeValue;
131
+ node: NodeInfo;
135
132
  update: UpdateFn;
136
133
  refresh: () => void;
137
134
  }
138
135
  type Synced<T> = T;
136
+ type PendingChanges = Record<string, {
137
+ p: any;
138
+ v?: any;
139
+ t: TypeAtPath[];
140
+ }>;
139
141
 
140
142
  declare function configureObservableSync(options?: SyncedOptionsGlobal$1): void;
141
143
 
142
- interface PersistTransform<TOrig = any, TSaved = TOrig> {
143
- load?: (value: TSaved) => TOrig | Promise<TOrig>;
144
- save?: (value: TOrig) => TSaved | Promise<TSaved>;
145
- }
146
- interface LegacyPersistOptionsLocal<T = any> {
147
- name: string;
148
- transform?: PersistTransform<T>;
149
- fieldTransforms?: FieldTransforms<T>;
150
- readonly?: boolean;
151
- mmkv?: MMKVConfiguration;
152
- indexedDB?: {
153
- prefixID?: string;
154
- itemID?: string;
155
- };
156
- options?: any;
157
- }
158
- type LegacyPersistOptionsRemote<T = any> = ObservablePersistenceConfigRemoteGlobalOptions & {
159
- readonly?: boolean;
160
- waitForGet?: Selector<any>;
161
- waitForSet?: LinkedOptions['waitForSet'];
162
- manual?: boolean;
163
- fieldTransforms?: FieldTransforms<T>;
164
- allowSetIfError?: boolean;
165
- transform?: PersistTransform<T>;
166
- firebase?: {
167
- refPath: (uid: string | undefined) => string;
168
- query?: (ref: DatabaseReference) => DatabaseReference | Query;
169
- queryByModified?: QueryByModified<T>;
170
- ignoreKeys?: string[];
171
- requireAuth?: boolean;
172
- mode?: 'once' | 'realtime';
173
- };
174
- offlineBehavior?: false | 'retry';
175
- changeTimeout?: number;
176
- metadataTimeout?: number;
177
- retry?: RetryOptions;
178
- onGetError?: (error: Error) => void;
179
- onSetError?: (error: Error) => void;
180
- log?: (message?: any, ...optionalParams: any[]) => void;
181
- onBeforeSet?: () => void;
182
- onSet?: () => void;
183
- };
184
- interface ObservablePersistenceConfigLocalGlobalOptions {
185
- onGetError?: (error: Error) => void;
186
- onSetError?: (error: Error) => void;
187
- indexedDB?: {
188
- databaseName: string;
189
- version: number;
190
- tableNames: string[];
191
- };
192
- asyncStorage?: {
193
- AsyncStorage: AsyncStorageStatic;
194
- preload?: boolean | string[];
195
- };
196
- }
197
- interface ObservablePersistenceConfigRemoteGlobalOptions {
198
- debounceSet?: number;
199
- dateModifiedKey?: string;
200
- offlineBehavior?: false | 'retry';
201
- retry?: RetryOptions;
202
- onGetError?: (error: Error) => void;
203
- onSetError?: (error: Error) => void;
204
- log?: (logLevel: 'verbose' | 'warning' | 'error', message: any, ...optionalParams: any[]) => void;
205
- onBeforeSet?: () => void;
206
- onAfterSet?: () => void;
207
- }
208
- interface ObservablePersistenceConfig {
209
- pluginLocal?: ClassConstructor<ObservablePersistPlugin>;
210
- pluginRemote?: ClassConstructor<ObservablePersistRemoteClass> | ObservablePersistRemoteFunctions;
211
- localOptions?: ObservablePersistenceConfigLocalGlobalOptions;
212
- remoteOptions?: ObservablePersistenceConfigRemoteGlobalOptions;
213
- }
214
- interface LegacyPersistOptions<T = any> {
215
- local?: string | LegacyPersistOptionsLocal<T>;
216
- remote?: LegacyPersistOptionsRemote<T>;
217
- pluginLocal?: ClassConstructor<ObservablePersistPlugin>;
218
- pluginRemote?: ClassConstructor<ObservablePersistRemoteClass> | ObservablePersistRemoteFunctions<T>;
219
- }
220
- interface ObservableOnChangeParams {
221
- value: unknown;
222
- path?: string[];
223
- pathTypes?: TypeAtPath[];
224
- mode?: GetMode;
225
- dateModified?: number | undefined;
226
- lastSync?: number | undefined;
227
- }
228
- interface ObservablePersistRemoteSetParams<T> {
229
- syncState: Observable<ObservablePersistState>;
230
- obs: ObservableParam<T>;
231
- options: LegacyPersistOptions<T>;
232
- changes: Change[];
233
- value: T;
234
- }
235
- interface ObservablePersistRemoteGetParams<T> {
236
- state: Observable<ObservablePersistState>;
237
- obs: ObservableParam<T>;
238
- options: LegacyPersistOptions<T>;
239
- dateModified?: number;
240
- lastSync?: number;
241
- mode?: GetMode;
242
- onGet: () => void;
243
- onError: (error: Error) => void;
244
- onChange: (params: ObservableOnChangeParams) => void | Promise<void>;
245
- }
246
- type ObservablePersistRemoteGetFnParams<T> = Omit<ObservablePersistRemoteGetParams<T>, 'onGet'>;
247
- interface ObservablePersistRemoteClass {
248
- get?<T>(params: ObservablePersistRemoteGetParams<T>): void;
249
- set?<T>(params: ObservablePersistRemoteSetParams<T>): void | Promise<void | {
250
- changes?: object;
251
- dateModified?: number;
252
- lastSync?: number;
253
- pathStrs?: string[];
254
- }>;
255
- }
256
- interface ObservablePersistRemoteFunctions<T = any> {
257
- get?(params: ObservablePersistRemoteGetFnParams<T>): T | Promise<T>;
258
- set?(params: ObservablePersistRemoteSetParams<T>): void | Promise<void | {
259
- changes?: object | undefined;
260
- dateModified?: number;
261
- lastSync?: number;
262
- }>;
263
- }
264
- interface ObservablePersistStateBase {
265
- isLoadedLocal: boolean;
266
- isEnabledLocal: boolean;
267
- isEnabledRemote: boolean;
268
- dateModified?: number;
269
- lastSync?: number;
270
- syncCount?: number;
271
- clearLocal: () => Promise<void>;
272
- sync: () => Promise<void>;
273
- getPendingChanges: () => Record<string, {
274
- p: any;
275
- v?: any;
276
- }> | undefined;
277
- }
278
- type ObservablePersistState = ObservableState & ObservablePersistStateBase;
279
144
  declare type ObjectKeys<T> = Pick<T, {
280
145
  [K in keyof T]-?: K extends string ? T[K] extends Record<string, any> ? T[K] extends any[] ? never : K : never : never;
281
146
  }[keyof T]>;
@@ -333,8 +198,8 @@ declare function transformStringifyDates<TRemote extends Record<string, any>, TL
333
198
  declare function transformStringifyDates<TRemote extends Record<string, any>, Keys extends keyof TRemote = keyof TRemote>(...args: Keys[]): SyncTransform<TransformStringsToDates<TRemote, Keys>, TRemote>;
334
199
  declare function transformStringifyDates<TRemote extends Record<string, any>, TLocal extends Record<string, any> = TRemote>(...args: (keyof TRemote)[]): SyncTransform<TRemote, TLocal>;
335
200
 
336
- declare const mapSyncPlugins: WeakMap<ClassConstructor<ObservablePersistPlugin | ObservableSyncClass>, {
337
- plugin: ObservablePersistPlugin | ObservableSyncClass;
201
+ declare const mapSyncPlugins: WeakMap<ClassConstructor<ObservablePersistPlugin>, {
202
+ plugin: ObservablePersistPlugin;
338
203
  initialized: Observable<boolean>;
339
204
  }>;
340
205
  declare function onChangeRemote(cb: () => void): void;
@@ -343,9 +208,18 @@ declare function syncObservable<T>(obs$: ObservableParam<T>, syncOptions: Synced
343
208
 
344
209
  declare function synced<TRemote, TLocal = TRemote>(params: SyncedOptions<TRemote, TLocal> | (() => TRemote)): Synced<TLocal>;
345
210
 
346
- declare function isInRemoteChange(): boolean;
211
+ interface SyncedOptionsConfigure extends Omit<SyncedOptions, 'persist'> {
212
+ persist?: Partial<PersistOptions<any>>;
213
+ }
214
+ type RetType = typeof synced;
215
+ declare function configureSynced<T extends typeof synced>(fn: T, origOptions: SyncedOptionsConfigure): T;
216
+ declare function configureSynced(origOptions: SyncedOptionsConfigure): RetType;
217
+
218
+ declare function waitForSet(waitForSet: WaitForSet<any>, changes: Change[], value: any, params?: Record<string, any>): Promise<void>;
219
+
347
220
  declare const internal: {
348
221
  observableSyncConfiguration: SyncedOptionsGlobal;
222
+ waitForSet: typeof waitForSet;
349
223
  };
350
224
 
351
- export { type FieldTransforms, type FieldTransformsInner, type LegacyPersistOptions, type LegacyPersistOptionsLocal, type LegacyPersistOptionsRemote, type ObservableOnChangeParams, type ObservablePersistPlugin, type ObservablePersistPluginOptions, type ObservablePersistRemoteClass, type ObservablePersistRemoteFunctions, type ObservablePersistRemoteGetFnParams, type ObservablePersistRemoteGetParams, type ObservablePersistRemoteSetParams, type ObservablePersistState, type ObservablePersistStateBase, type ObservablePersistenceConfig, type ObservablePersistenceConfigLocalGlobalOptions, type ObservablePersistenceConfigRemoteGlobalOptions, type ObservableSyncClass, type ObservableSyncFunctions, type ObservableSyncGetParams, type ObservableSyncRemoteGetFnParams, type ObservableSyncSetParams, type PersistMetadata, type PersistOptions, type PersistTransform, type QueryByModified, type StringToDate, type SubscribeOptions, type SyncTransform, type SyncTransformMethod, type Synced, type SyncedGetParams, type SyncedOptions, type SyncedOptionsGlobal, type SyncedSetParams, type SyncedSubscribeParams, type TransformStringifyKeys, type TransformStringifyOptions, type TransformStringsToDates, combineTransforms, configureObservableSync, deepEqual, diffObjects, internal, isInRemoteChange, mapSyncPlugins, onChangeRemote, removeNullUndefined, syncObservable, synced, transformStringifyDates, transformStringifyKeys };
225
+ export { type FieldTransforms, type FieldTransformsInner, type ObservablePersistAsyncStoragePluginOptions, type ObservablePersistIndexedDBPluginOptions, type ObservablePersistPlugin, type ObservablePersistPluginOptions, type ObservableSyncFunctions, type ObservableSyncSetParams, type OnErrorRetryParams, type PendingChanges, type PersistMetadata, type PersistOptions, type QueryByModified, type StringToDate, type SubscribeOptions, type SyncTransform, type SyncTransformMethod, type Synced, type SyncedErrorParams, type SyncedGetParams, type SyncedGetSetBaseParams, type SyncedGetSetSubscribeBaseParams, type SyncedOptions, type SyncedOptionsGlobal, type SyncedSetParams, type SyncedSubscribeParams, type TransformStringifyKeys, type TransformStringifyOptions, type TransformStringsToDates, combineTransforms, configureObservableSync, configureSynced, deepEqual, diffObjects, internal, mapSyncPlugins, onChangeRemote, removeNullUndefined, syncObservable, synced, transformStringifyDates, transformStringifyKeys };