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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) 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 +2052 -0
  17. package/config.mjs +2050 -0
  18. package/helpers/trackHistory.js +2 -2
  19. package/helpers/trackHistory.mjs +2 -2
  20. package/index.d.mts +21 -302
  21. package/index.d.ts +21 -302
  22. package/index.js +274 -318
  23. package/index.mjs +275 -317
  24. package/observableInterfaces-Dilj6F92.d.mts +282 -0
  25. package/observableInterfaces-Dilj6F92.d.ts +282 -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/_transformObjectFields.d.mts +31 -0
  44. package/sync-plugins/_transformObjectFields.d.ts +31 -0
  45. package/sync-plugins/_transformObjectFields.js +114 -0
  46. package/sync-plugins/_transformObjectFields.mjs +110 -0
  47. package/sync-plugins/crud.d.mts +15 -23
  48. package/sync-plugins/crud.d.ts +15 -23
  49. package/sync-plugins/crud.js +213 -134
  50. package/sync-plugins/crud.mjs +214 -135
  51. package/sync-plugins/fetch.js +12 -8
  52. package/sync-plugins/fetch.mjs +13 -9
  53. package/sync-plugins/firebase.d.mts +26 -0
  54. package/sync-plugins/firebase.d.ts +26 -0
  55. package/sync-plugins/firebase.js +373 -0
  56. package/sync-plugins/firebase.mjs +368 -0
  57. package/sync-plugins/keel.d.mts +27 -10
  58. package/sync-plugins/keel.d.ts +27 -10
  59. package/sync-plugins/keel.js +40 -21
  60. package/sync-plugins/keel.mjs +40 -21
  61. package/sync-plugins/supabase.d.mts +12 -7
  62. package/sync-plugins/supabase.d.ts +12 -7
  63. package/sync-plugins/supabase.js +24 -13
  64. package/sync-plugins/supabase.mjs +25 -14
  65. package/sync-plugins/tanstack-query.d.mts +2 -2
  66. package/sync-plugins/tanstack-query.d.ts +2 -2
  67. package/sync-plugins/tanstack-query.js +3 -2
  68. package/sync-plugins/tanstack-query.mjs +3 -2
  69. package/sync-plugins/tanstack-react-query.d.mts +1 -1
  70. package/sync-plugins/tanstack-react-query.d.ts +1 -1
  71. package/sync.d.mts +68 -197
  72. package/sync.d.ts +68 -197
  73. package/sync.js +448 -283
  74. package/sync.mjs +454 -289
  75. package/types/babel.d.ts +12 -1
  76. package/.DS_Store +0 -0
  77. /package/config/{enable_GetSet.d.mts → enable$GetSet.d.mts} +0 -0
  78. /package/config/{enable_GetSet.d.ts → enable$GetSet.d.ts} +0 -0
package/sync.d.mts 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 } 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,15 @@ 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
+
347
218
  declare const internal: {
348
219
  observableSyncConfiguration: SyncedOptionsGlobal;
349
220
  };
350
221
 
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 };
222
+ 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 };