@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
@@ -1,4 +1,4 @@
1
- import { observable, computeSelector, isObject, symbolDelete } from '@legendapp/state';
1
+ import { observable, computeSelector, isFunction, isObject, symbolDelete } from '@legendapp/state';
2
2
  import { removeNullUndefined, transformStringifyDates, combineTransforms } from '@legendapp/state/sync';
3
3
  import { syncedCrud } from '@legendapp/state/sync-plugins/crud';
4
4
 
@@ -22,6 +22,7 @@ function syncedSupabase(props) {
22
22
  supabase: client,
23
23
  collection,
24
24
  select: selectFn,
25
+ schema,
25
26
  filter,
26
27
  actions,
27
28
  fieldCreatedAt: fieldCreatedAtParam,
@@ -34,6 +35,7 @@ function syncedSupabase(props) {
34
35
  waitFor,
35
36
  waitForSet,
36
37
  generateId,
38
+ mode,
37
39
  ...rest
38
40
  } = props;
39
41
  const fieldCreatedAt = fieldCreatedAtParam || (changesSince === "last-sync" ? "created_at" : void 0);
@@ -41,7 +43,8 @@ function syncedSupabase(props) {
41
43
  const fieldDeleted = fieldDeletedParam || (changesSince === "last-sync" ? "deleted" : void 0);
42
44
  const list = !actions || actions.includes("read") ? async (params) => {
43
45
  const { lastSync } = params;
44
- const from = client.from(collection);
46
+ const clientSchema = schema ? client.schema(schema) : client;
47
+ const from = clientSchema.from(collection);
45
48
  let select = selectFn ? selectFn(from) : from.select();
46
49
  if (changesSince === "last-sync" && lastSync) {
47
50
  const date = new Date(lastSync).toISOString();
@@ -56,8 +59,8 @@ function syncedSupabase(props) {
56
59
  }
57
60
  return data || [];
58
61
  } : void 0;
59
- const upsert = async (input) => {
60
- const res = await client.from(collection).upsert(input).select();
62
+ const create = !actions || actions.includes("create") ? async (input) => {
63
+ const res = await client.from(collection).insert(input).select();
61
64
  const { data, error } = res;
62
65
  if (data) {
63
66
  const created = data[0];
@@ -65,9 +68,17 @@ function syncedSupabase(props) {
65
68
  } else {
66
69
  throw new Error(error == null ? void 0 : error.message);
67
70
  }
68
- };
69
- const create = !actions || actions.includes("create") ? upsert : void 0;
70
- const update = !actions || actions.includes("update") ? upsert : void 0;
71
+ } : void 0;
72
+ const update = !actions || actions.includes("update") ? async (input) => {
73
+ const res = await client.from(collection).update(input).eq("id", input.id).select();
74
+ const { data, error } = res;
75
+ if (data) {
76
+ const created = data[0];
77
+ return created;
78
+ } else {
79
+ throw new Error(error == null ? void 0 : error.message);
80
+ }
81
+ } : void 0;
71
82
  const deleteFn = !fieldDeleted && (!actions || actions.includes("delete")) ? async (input) => {
72
83
  const id = input.id;
73
84
  const res = await client.from(collection).delete().eq("id", id).select();
@@ -80,13 +91,13 @@ function syncedSupabase(props) {
80
91
  }
81
92
  } : void 0;
82
93
  const subscribe = realtime ? ({ node, value$, update: update2 }) => {
83
- const { filter: filter2, schema } = isObject(realtime) ? realtime : {};
94
+ const { filter: filter2, schema: schema2 } = isObject(realtime) ? realtime : {};
84
95
  const channel = client.channel(`LS_${node.key || ""}${channelNum++}`).on(
85
96
  "postgres_changes",
86
97
  {
87
98
  event: "*",
88
99
  table: collection,
89
- schema: schema || "public",
100
+ schema: schema2 || "public",
90
101
  filter: filter2 || void 0
91
102
  },
92
103
  (payload) => {
@@ -99,15 +110,15 @@ function syncedSupabase(props) {
99
110
  const valueDate = +new Date(valueDateStr);
100
111
  if (valueDateStr && (!curDateStr || valueDate > +new Date(curDateStr))) {
101
112
  update2({
102
- value: { [value.id]: value },
113
+ value: [value],
103
114
  lastSync: valueDate,
104
115
  mode: "merge"
105
116
  });
106
117
  }
107
118
  } else if (eventType === "DELETE") {
108
- const { id } = old;
119
+ old[symbolDelete] = true;
109
120
  update2({
110
- value: { [id]: symbolDelete }
121
+ value: [old]
111
122
  });
112
123
  }
113
124
  }
@@ -121,6 +132,7 @@ function syncedSupabase(props) {
121
132
  }
122
133
  return syncedCrud({
123
134
  ...rest,
135
+ mode: mode || "merge",
124
136
  list,
125
137
  create,
126
138
  update,
@@ -130,11 +142,10 @@ function syncedSupabase(props) {
130
142
  fieldUpdatedAt,
131
143
  fieldDeleted,
132
144
  updatePartial: false,
133
- onSavedUpdate: "createdUpdatedAt",
134
145
  transform,
135
146
  generateId,
136
147
  waitFor: () => isEnabled$.get() && (waitFor ? computeSelector(waitFor) : true),
137
- waitForSet
148
+ waitForSet: (params) => isEnabled$.get() && (waitForSet ? isFunction(waitForSet) ? waitForSet(params) : waitForSet : true)
138
149
  });
139
150
  }
140
151
 
@@ -4,11 +4,11 @@ import { QueryKey, QueryObserverOptions, QueryClient, MutationObserverOptions, D
4
4
  interface ObservableQueryOptions<TQueryFnData, TError, TData, TQueryKey extends QueryKey> extends Omit<QueryObserverOptions<TQueryFnData, TError, TData, TQueryKey>, 'queryKey'> {
5
5
  queryKey?: TQueryKey | (() => TQueryKey);
6
6
  }
7
- interface SyncedQueryParams<TQueryFnData, TError, TData, TQueryKey extends QueryKey> extends SyncedOptions<TData> {
7
+ interface SyncedQueryParams<TQueryFnData, TError, TData, TQueryKey extends QueryKey> extends Omit<SyncedOptions<TData>, 'get' | 'set'> {
8
8
  queryClient: QueryClient;
9
9
  query: ObservableQueryOptions<TQueryFnData, TError, TData, TQueryKey>;
10
10
  mutation?: MutationObserverOptions<TData, TError, void>;
11
11
  }
12
- declare function syncedQuery<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(params: SyncedQueryParams<TQueryFnData, TError, TData, TQueryKey>): NonNullable<TData>;
12
+ declare function syncedQuery<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(params: SyncedQueryParams<TQueryFnData, TError, TData, TQueryKey>): TData;
13
13
 
14
14
  export { type ObservableQueryOptions, type SyncedQueryParams, syncedQuery };
@@ -4,11 +4,11 @@ import { QueryKey, QueryObserverOptions, QueryClient, MutationObserverOptions, D
4
4
  interface ObservableQueryOptions<TQueryFnData, TError, TData, TQueryKey extends QueryKey> extends Omit<QueryObserverOptions<TQueryFnData, TError, TData, TQueryKey>, 'queryKey'> {
5
5
  queryKey?: TQueryKey | (() => TQueryKey);
6
6
  }
7
- interface SyncedQueryParams<TQueryFnData, TError, TData, TQueryKey extends QueryKey> extends SyncedOptions<TData> {
7
+ interface SyncedQueryParams<TQueryFnData, TError, TData, TQueryKey extends QueryKey> extends Omit<SyncedOptions<TData>, 'get' | 'set'> {
8
8
  queryClient: QueryClient;
9
9
  query: ObservableQueryOptions<TQueryFnData, TError, TData, TQueryKey>;
10
10
  mutation?: MutationObserverOptions<TData, TError, void>;
11
11
  }
12
- declare function syncedQuery<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(params: SyncedQueryParams<TQueryFnData, TError, TData, TQueryKey>): NonNullable<TData>;
12
+ declare function syncedQuery<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(params: SyncedQueryParams<TQueryFnData, TError, TData, TQueryKey>): TData;
13
13
 
14
14
  export { type ObservableQueryOptions, type SyncedQueryParams, syncedQuery };
@@ -6,7 +6,7 @@ var queryCore = require('@tanstack/query-core');
6
6
 
7
7
  // src/sync-plugins/tanstack-query.ts
8
8
  function syncedQuery(params) {
9
- const { query: options, mutation: mutationOptions, queryClient } = params;
9
+ const { query: options, mutation: mutationOptions, queryClient, ...rest } = params;
10
10
  const Observer = queryCore.QueryObserver;
11
11
  const defaultedOptions = queryClient.defaultQueryOptions(
12
12
  options
@@ -58,7 +58,8 @@ function syncedQuery(params) {
58
58
  return sync.synced({
59
59
  get,
60
60
  set,
61
- subscribe
61
+ subscribe,
62
+ ...rest
62
63
  });
63
64
  }
64
65
 
@@ -4,7 +4,7 @@ import { MutationObserver, QueryObserver, notifyManager } from '@tanstack/query-
4
4
 
5
5
  // src/sync-plugins/tanstack-query.ts
6
6
  function syncedQuery(params) {
7
- const { query: options, mutation: mutationOptions, queryClient } = params;
7
+ const { query: options, mutation: mutationOptions, queryClient, ...rest } = params;
8
8
  const Observer = QueryObserver;
9
9
  const defaultedOptions = queryClient.defaultQueryOptions(
10
10
  options
@@ -56,7 +56,8 @@ function syncedQuery(params) {
56
56
  return synced({
57
57
  get,
58
58
  set,
59
- subscribe
59
+ subscribe,
60
+ ...rest
60
61
  });
61
62
  }
62
63
 
@@ -3,6 +3,6 @@ import { DefaultError, QueryKey } from '@tanstack/query-core';
3
3
  import { Observable } from '@legendapp/state';
4
4
  import { Synced } from '@legendapp/state/sync';
5
5
 
6
- declare function useObservableSyncedQuery<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(params: SyncedQueryParams<TQueryFnData, TError, TData, TQueryKey>): Observable<NonNullable<Synced<TData>>>;
6
+ declare function useObservableSyncedQuery<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(params: SyncedQueryParams<TQueryFnData, TError, TData, TQueryKey>): Observable<Synced<TData>>;
7
7
 
8
8
  export { useObservableSyncedQuery };
@@ -3,6 +3,6 @@ import { DefaultError, QueryKey } from '@tanstack/query-core';
3
3
  import { Observable } from '@legendapp/state';
4
4
  import { Synced } from '@legendapp/state/sync';
5
5
 
6
- declare function useObservableSyncedQuery<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(params: SyncedQueryParams<TQueryFnData, TError, TData, TQueryKey>): Observable<NonNullable<Synced<TData>>>;
6
+ declare function useObservableSyncedQuery<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(params: SyncedQueryParams<TQueryFnData, TError, TData, TQueryKey>): Observable<Synced<TData>>;
7
7
 
8
8
  export { useObservableSyncedQuery };
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, 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 };