@legendapp/state 2.2.0-next.74 → 2.2.0-next.76

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 (60) hide show
  1. package/helpers/time.d.ts +2 -2
  2. package/index.d.ts +1 -1
  3. package/index.js +82 -31
  4. package/index.js.map +1 -1
  5. package/index.mjs +81 -32
  6. package/index.mjs.map +1 -1
  7. package/package.json +16 -1
  8. package/persist.js +122 -129
  9. package/persist.js.map +1 -1
  10. package/persist.mjs +122 -129
  11. package/persist.mjs.map +1 -1
  12. package/react.js +5 -5
  13. package/react.js.map +1 -1
  14. package/react.mjs +6 -6
  15. package/react.mjs.map +1 -1
  16. package/src/ObservableObject.ts +34 -15
  17. package/src/batching.ts +9 -3
  18. package/src/computed.ts +4 -2
  19. package/src/globals.ts +17 -7
  20. package/src/helpers.ts +3 -3
  21. package/src/history/undoRedo.ts +111 -0
  22. package/src/is.ts +7 -0
  23. package/src/observableInterfaces.ts +6 -5
  24. package/src/observableTypes.ts +5 -0
  25. package/src/observe.ts +1 -1
  26. package/src/react/For.tsx +6 -6
  27. package/src/sync/activateSyncedNode.ts +9 -25
  28. package/src/sync/syncHelpers.ts +53 -12
  29. package/src/sync/syncObservable.ts +117 -101
  30. package/src/sync-plugins/crud.ts +384 -0
  31. package/src/sync-plugins/fetch.ts +57 -27
  32. package/src/sync-plugins/keel.ts +447 -0
  33. package/src/sync-plugins/supabase.ts +225 -0
  34. package/src/syncTypes.ts +12 -6
  35. package/src/when.ts +6 -1
  36. package/sync-plugins/crud.d.ts +40 -0
  37. package/sync-plugins/crud.js +275 -0
  38. package/sync-plugins/crud.js.map +1 -0
  39. package/sync-plugins/crud.mjs +271 -0
  40. package/sync-plugins/crud.mjs.map +1 -0
  41. package/sync-plugins/fetch.d.ts +8 -7
  42. package/sync-plugins/fetch.js +34 -12
  43. package/sync-plugins/fetch.js.map +1 -1
  44. package/sync-plugins/fetch.mjs +35 -13
  45. package/sync-plugins/fetch.mjs.map +1 -1
  46. package/sync-plugins/keel.d.ts +91 -0
  47. package/sync-plugins/keel.js +278 -0
  48. package/sync-plugins/keel.js.map +1 -0
  49. package/sync-plugins/keel.mjs +274 -0
  50. package/sync-plugins/keel.mjs.map +1 -0
  51. package/sync-plugins/supabase.d.ts +32 -0
  52. package/sync-plugins/supabase.js +134 -0
  53. package/sync-plugins/supabase.js.map +1 -0
  54. package/sync-plugins/supabase.mjs +131 -0
  55. package/sync-plugins/supabase.mjs.map +1 -0
  56. package/sync.d.ts +1 -0
  57. package/sync.js +157 -127
  58. package/sync.js.map +1 -1
  59. package/sync.mjs +156 -129
  60. package/sync.mjs.map +1 -1
package/src/syncTypes.ts CHANGED
@@ -19,6 +19,7 @@ import { Observable, ObservableParam, ObservableState } from './observableTypes'
19
19
  export interface PersistOptions<T = any> {
20
20
  name: string;
21
21
  plugin?: ClassConstructor<ObservablePersistPlugin, T[]>;
22
+ retrySync?: boolean;
22
23
  transform?: SyncTransform<T>;
23
24
  readonly?: boolean;
24
25
  mmkv?: MMKVConfiguration;
@@ -33,11 +34,11 @@ export interface SyncedGetParams {
33
34
  value: any;
34
35
  lastSync: number | undefined;
35
36
  updateLastSync: (lastSync: number) => void;
36
- setMode: (mode: GetMode) => void;
37
+ mode: GetMode;
37
38
  refresh: () => void;
38
39
  }
39
40
 
40
- export type SyncedSetParams<T> = SetParams<T> & {
41
+ export interface SyncedSetParams<T> extends SetParams<T> {
41
42
  node: NodeValue;
42
43
  valuePrevious: T;
43
44
  update: UpdateFn;
@@ -45,16 +46,21 @@ export type SyncedSetParams<T> = SetParams<T> & {
45
46
  cancelRetry: () => void;
46
47
  retryNum: number;
47
48
  fromSubscribe: boolean | undefined;
48
- };
49
+ }
50
+
51
+ export interface SyncedSubscribeParams {
52
+ node: NodeValue;
53
+ update: UpdateFn;
54
+ refresh: () => void;
55
+ }
49
56
 
50
57
  export type GetMode = 'set' | 'assign' | 'merge' | 'append' | 'prepend';
51
58
 
52
59
  export interface SyncedOptions<T = any> extends Omit<LinkedOptions<T>, 'get' | 'set'> {
53
60
  get?: (params: SyncedGetParams) => Promise<T> | T;
54
61
  set?: (params: SyncedSetParams<T>) => void | Promise<any>;
55
- subscribe?: (params: { node: NodeValue; update: UpdateFn; refresh: () => void }) => void;
62
+ subscribe?: (params: SyncedSubscribeParams) => void;
56
63
  retry?: RetryOptions;
57
- offlineBehavior?: false | 'retry';
58
64
  persist?: PersistOptions<any>;
59
65
  debounceSet?: number;
60
66
  syncMode?: 'auto' | 'manual';
@@ -71,7 +77,7 @@ export interface SyncedOptions<T = any> extends Omit<LinkedOptions<T>, 'get' | '
71
77
  }
72
78
 
73
79
  export interface SyncedOptionsGlobal<T = any> extends Omit<SyncedOptions<T>, 'get' | 'set' | 'persist'> {
74
- persist?: ObservablePersistPluginOptions & { plugin?: ClassConstructor<ObservablePersistPlugin, T[]> };
80
+ persist?: ObservablePersistPluginOptions & Omit<PersistOptions, 'name' | 'transform' | 'options'>;
75
81
  }
76
82
 
77
83
  export interface ObservablePersistPluginOptions {
package/src/when.ts CHANGED
@@ -16,7 +16,12 @@ function _when<T, T2>(predicate: Selector<T>, effect?: (value: T) => T2, checkRe
16
16
  function run(e: ObserveEvent<T>) {
17
17
  const ret = computeSelector(predicate);
18
18
 
19
- if (!isPromise(ret) && (checkReady ? isObservableValueReady(ret) : ret)) {
19
+ if (isPromise(ret)) {
20
+ value = ret as any;
21
+ // We want value to be the Promise but return undefined
22
+ // so it doesn't run the effect with the Promise as the value
23
+ return undefined;
24
+ } else if (!isPromise(ret) && (checkReady ? isObservableValueReady(ret) : ret)) {
20
25
  value = ret;
21
26
 
22
27
  // Set cancel so that observe does not track anymore
@@ -0,0 +1,40 @@
1
+ import { SyncTransform, SyncedGetParams, SyncedOptions, SyncedSetParams } from '@legendapp/state';
2
+ export type CrudAsOption = 'Map' | 'object' | 'first';
3
+ export type CrudResult<T> = T;
4
+ export interface SyncedCrudPropsSingle<TRemote, TLocal> {
5
+ get?: (params: SyncedGetParams) => Promise<CrudResult<TRemote | null>> | CrudResult<TRemote | null>;
6
+ initial?: InitialValue<TLocal, 'first'>;
7
+ as?: never | 'first';
8
+ }
9
+ export interface SyncedCrudPropsMany<TRemote, TLocal, TAsOption extends CrudAsOption> {
10
+ list?: (params: SyncedGetParams) => Promise<CrudResult<TRemote[] | null>> | CrudResult<TRemote[] | null>;
11
+ as?: TAsOption;
12
+ initial?: InitialValue<TLocal, TAsOption>;
13
+ }
14
+ export interface SyncedCrudPropsBase<TRemote extends {
15
+ id: string | number;
16
+ }, TLocal = TRemote> extends Omit<SyncedOptions<TLocal>, 'get' | 'set' | 'transform' | 'initial'> {
17
+ create?(input: TRemote, params: SyncedSetParams<TRemote>): Promise<CrudResult<TRemote> | null | undefined>;
18
+ update?(input: Partial<TRemote>, params: SyncedSetParams<TRemote>): Promise<CrudResult<Partial<TRemote> | null | undefined>>;
19
+ delete?(input: TRemote, params: SyncedSetParams<TRemote>): Promise<CrudResult<any>>;
20
+ onSaved?(saved: TLocal, input: TRemote, isCreate: boolean): Partial<TLocal> | void;
21
+ transform?: SyncTransform<TLocal, TRemote>;
22
+ fieldUpdatedAt?: string;
23
+ fieldCreatedAt?: string;
24
+ updatePartial?: boolean;
25
+ changesSince?: 'all' | 'last-sync';
26
+ }
27
+ type InitialValue<T, TAsOption extends CrudAsOption> = TAsOption extends 'Map' ? Map<string, T> : TAsOption extends 'object' ? Record<string, T> : TAsOption extends 'first' ? T : T[];
28
+ export type SyncedCrudReturnType<TLocal, TAsOption extends CrudAsOption> = TAsOption extends 'Map' ? Map<string, TLocal> : TAsOption extends 'object' ? Record<string, TLocal> : TAsOption extends 'first' ? TLocal : TLocal[];
29
+ export declare function createTransform<T extends Record<string, any>, T2 extends Record<string, any>>(...keys: (keyof T | {
30
+ from: keyof T;
31
+ to: keyof T2;
32
+ })[]): SyncTransform<T2, T>;
33
+ export declare function combineTransforms<T, T2>(transform1: SyncTransform<T2, T>, ...transforms: Partial<SyncTransform<T2, T>>[]): SyncTransform<T2, T>;
34
+ export declare function syncedCrud<TRemote extends {
35
+ id: string | number;
36
+ }, TLocal = TRemote>(props: SyncedCrudPropsBase<TRemote, TLocal> & SyncedCrudPropsSingle<TRemote, TLocal>): SyncedCrudReturnType<TLocal, 'first'>;
37
+ export declare function syncedCrud<TRemote extends {
38
+ id: string | number;
39
+ }, TLocal = TRemote, TAsOption extends CrudAsOption = 'object'>(props: SyncedCrudPropsBase<TRemote, TLocal> & SyncedCrudPropsMany<TRemote, TLocal, TAsOption>): SyncedCrudReturnType<TLocal, Exclude<TAsOption, 'first'>>;
40
+ export {};
@@ -0,0 +1,275 @@
1
+ 'use strict';
2
+
3
+ var state = require('@legendapp/state');
4
+ var sync = require('@legendapp/state/sync');
5
+
6
+ const { clone } = state.internal;
7
+ function transformOut(data, transform) {
8
+ return transform ? transform(clone(data)) : data;
9
+ }
10
+ // TODO
11
+ function createTransform(...keys) {
12
+ return {
13
+ load: (value) => {
14
+ keys.forEach((key) => {
15
+ const keyRemote = state.isObject(key) ? key.from : key;
16
+ const keyLocal = state.isObject(key) ? key.to : key;
17
+ const v = value[keyRemote];
18
+ if (!state.isNullOrUndefined(v)) {
19
+ value[keyLocal] = state.isString(v) ? JSON.parse(v) : v;
20
+ }
21
+ if (keyLocal !== keyRemote) {
22
+ delete value[keyRemote];
23
+ }
24
+ });
25
+ return value;
26
+ },
27
+ save: (value) => {
28
+ keys.forEach((key) => {
29
+ const keyRemote = state.isObject(key) ? key.from : key;
30
+ const keyLocal = state.isObject(key) ? key.to : key;
31
+ let v = value[keyLocal];
32
+ if (!state.isNullOrUndefined(v)) {
33
+ if (state.isArray(v)) {
34
+ v = v.filter((val) => !state.isNullOrUndefined(val));
35
+ }
36
+ value[keyRemote] =
37
+ state.isNumber(v) || state.isObject(v) || state.isArray(v) ? JSON.stringify(v) : v;
38
+ }
39
+ if (keyLocal !== keyRemote) {
40
+ delete value[keyLocal];
41
+ }
42
+ });
43
+ return value;
44
+ },
45
+ };
46
+ }
47
+ // TODO
48
+ function combineTransforms(transform1, ...transforms) {
49
+ return {
50
+ load: (value) => {
51
+ var _a;
52
+ let inValue = (_a = transform1.load) === null || _a === void 0 ? void 0 : _a.call(transform1, value);
53
+ transforms.forEach((transform) => {
54
+ if (transform.load) {
55
+ inValue = transform.load(inValue);
56
+ }
57
+ });
58
+ return inValue;
59
+ },
60
+ save: (value) => {
61
+ var _a, _b;
62
+ let outValue = value;
63
+ transforms.forEach((transform) => {
64
+ if (transform.save) {
65
+ outValue = transform.save(outValue);
66
+ }
67
+ });
68
+ return (_b = (_a = transform1.save) === null || _a === void 0 ? void 0 : _a.call(transform1, outValue)) !== null && _b !== void 0 ? _b : outValue;
69
+ },
70
+ };
71
+ }
72
+ function syncedCrud(props) {
73
+ const { get: getFn, list: listFn, create: createFn, update: updateFn, delete: deleteFn, transform, fieldCreatedAt, fieldUpdatedAt, updatePartial, onSaved, mode: modeParam, changesSince, ...rest } = props;
74
+ let asType = props.as;
75
+ if (!asType) {
76
+ asType = (getFn ? 'first' : 'object');
77
+ }
78
+ const asMap = asType === 'Map';
79
+ const get = getFn || listFn
80
+ ? async (getParams) => {
81
+ const { updateLastSync, lastSync } = getParams;
82
+ if (listFn) {
83
+ if (changesSince === 'last-sync' && lastSync) {
84
+ getParams.mode = modeParam || (asType === 'first' ? 'set' : 'assign');
85
+ }
86
+ const data = (await listFn(getParams)) || [];
87
+ let newLastSync = 0;
88
+ for (let i = 0; i < data.length; i++) {
89
+ const updated = data[i][fieldUpdatedAt] || data[i][fieldCreatedAt];
90
+ if (updated) {
91
+ newLastSync = Math.max(newLastSync, +new Date(updated));
92
+ }
93
+ }
94
+ if (newLastSync && newLastSync !== lastSync) {
95
+ updateLastSync(newLastSync);
96
+ }
97
+ let transformed = data;
98
+ if (transform === null || transform === void 0 ? void 0 : transform.load) {
99
+ transformed = await Promise.all(data.map(transform.load));
100
+ }
101
+ if (asType === 'first') {
102
+ return transformed.length > 0 ? transformed[0] : null;
103
+ }
104
+ else {
105
+ const out = asMap ? new Map() : {};
106
+ transformed.forEach((result) => {
107
+ const value = result.__deleted ? state.internal.symbolDelete : result;
108
+ asMap ? out.set(result.id, value) : (out[result.id] = value);
109
+ });
110
+ return out;
111
+ }
112
+ }
113
+ else if (getFn) {
114
+ const data = await getFn(getParams);
115
+ let transformed = data;
116
+ if (data) {
117
+ const newLastSync = data[fieldUpdatedAt] || data[fieldCreatedAt];
118
+ if (newLastSync && newLastSync !== lastSync) {
119
+ updateLastSync(newLastSync);
120
+ }
121
+ if (transform === null || transform === void 0 ? void 0 : transform.load) {
122
+ transformed = await transform.load(data);
123
+ }
124
+ }
125
+ return transformed;
126
+ }
127
+ }
128
+ : undefined;
129
+ const set = createFn || updateFn || deleteFn
130
+ ? async (params) => {
131
+ const { value, changes, update, retryAsCreate, valuePrevious } = params;
132
+ const creates = new Map();
133
+ const updates = new Map();
134
+ const deletes = new Map();
135
+ changes.forEach(({ path, prevAtPath, valueAtPath }) => {
136
+ var _a;
137
+ if (asType === 'first') {
138
+ if (value) {
139
+ const id = value === null || value === void 0 ? void 0 : value.id;
140
+ if (id) {
141
+ const isCreate = fieldCreatedAt ? !value[fieldCreatedAt] : !prevAtPath;
142
+ if (isCreate || retryAsCreate) {
143
+ creates.set(id, value);
144
+ }
145
+ else if (path.length === 0) {
146
+ if (valueAtPath) {
147
+ updates.set(id, valueAtPath);
148
+ }
149
+ else if (prevAtPath) {
150
+ deletes.set(prevAtPath === null || prevAtPath === void 0 ? void 0 : prevAtPath.id, prevAtPath);
151
+ }
152
+ }
153
+ else {
154
+ const key = path[0];
155
+ updates.set(id, Object.assign(updates.get(id) || { id }, { [key]: value[key] }));
156
+ }
157
+ }
158
+ else {
159
+ console.error('[legend-state]: added item without an id');
160
+ }
161
+ }
162
+ else if (path.length === 0) {
163
+ const id = prevAtPath === null || prevAtPath === void 0 ? void 0 : prevAtPath.id;
164
+ if (id) {
165
+ deletes.set(id, prevAtPath);
166
+ }
167
+ }
168
+ }
169
+ else {
170
+ let itemsChanged = undefined;
171
+ let isCreateGuess;
172
+ if (path.length === 0) {
173
+ isCreateGuess =
174
+ !(fieldCreatedAt || fieldUpdatedAt) &&
175
+ !(((_a = (asMap
176
+ ? Array.from(valueAtPath.values())
177
+ : state.isArray(valueAtPath)
178
+ ? valueAtPath
179
+ : Object.values(valueAtPath))) === null || _a === void 0 ? void 0 : _a.length) > 0);
180
+ itemsChanged = asMap
181
+ ? Array.from(valueAtPath.values())
182
+ : state.isArray(valueAtPath)
183
+ ? valueAtPath
184
+ : Object.values(valueAtPath);
185
+ }
186
+ else {
187
+ const itemKey = path[0];
188
+ const itemValue = asMap ? value.get(itemKey) : value[itemKey];
189
+ isCreateGuess = !(fieldCreatedAt || fieldUpdatedAt) && path.length === 1 && !prevAtPath;
190
+ if (!itemValue) {
191
+ if (path.length === 1 && prevAtPath) {
192
+ if (deleteFn) {
193
+ deletes.set(itemKey, prevAtPath);
194
+ }
195
+ else {
196
+ console.log('[legend-state] missing delete function');
197
+ }
198
+ }
199
+ }
200
+ else {
201
+ itemsChanged = [itemValue];
202
+ }
203
+ }
204
+ itemsChanged === null || itemsChanged === void 0 ? void 0 : itemsChanged.forEach((item) => {
205
+ const isCreate = fieldCreatedAt
206
+ ? !item[fieldCreatedAt]
207
+ : fieldUpdatedAt
208
+ ? !item[fieldUpdatedAt]
209
+ : isCreateGuess;
210
+ if (isCreate) {
211
+ if (createFn) {
212
+ creates.set(item.id, item);
213
+ }
214
+ else {
215
+ console.log('[legend-state] missing create function');
216
+ }
217
+ }
218
+ else {
219
+ if (updateFn) {
220
+ updates.set(item.id, item);
221
+ }
222
+ else {
223
+ console.log('[legend-state] missing update function');
224
+ }
225
+ }
226
+ });
227
+ }
228
+ });
229
+ const saveResult = async (itemKey, input, data, isCreate) => {
230
+ if (data && onSaved) {
231
+ const dataLoaded = ((transform === null || transform === void 0 ? void 0 : transform.load) ? transform.load(data) : data);
232
+ const savedOut = onSaved(dataLoaded, input, isCreate);
233
+ if (savedOut) {
234
+ const createdAt = fieldCreatedAt ? savedOut[fieldCreatedAt] : undefined;
235
+ const updatedAt = fieldUpdatedAt ? savedOut[fieldUpdatedAt] : undefined;
236
+ const value = itemKey !== 'undefined' && asType !== 'first' ? { [itemKey]: savedOut } : savedOut;
237
+ update({
238
+ value,
239
+ lastSync: updatedAt || createdAt ? +new Date(updatedAt || createdAt) : undefined,
240
+ mode: 'merge',
241
+ });
242
+ }
243
+ }
244
+ };
245
+ return Promise.all([
246
+ ...Array.from(creates).map(([itemKey, itemValue]) => {
247
+ const createObj = transformOut(itemValue, transform === null || transform === void 0 ? void 0 : transform.save);
248
+ return createFn(createObj, params).then((result) => saveResult(itemKey, createObj, result, true));
249
+ }),
250
+ ...Array.from(updates).map(([itemKey, itemValue]) => {
251
+ const toSave = updatePartial
252
+ ? sync.diffObjects(asType === 'first' ? valuePrevious : valuePrevious[itemKey], itemValue)
253
+ : itemValue;
254
+ const changed = transformOut(toSave, transform === null || transform === void 0 ? void 0 : transform.save);
255
+ if (Object.keys(changed).length > 0) {
256
+ return updateFn(changed, params).then((result) => saveResult(itemKey, changed, result, false));
257
+ }
258
+ }),
259
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
260
+ ...Array.from(deletes).map(([_, itemValue]) => deleteFn(itemValue, params)),
261
+ ]);
262
+ }
263
+ : undefined;
264
+ return sync.synced({
265
+ set,
266
+ get,
267
+ mode: modeParam,
268
+ ...rest,
269
+ });
270
+ }
271
+
272
+ exports.combineTransforms = combineTransforms;
273
+ exports.createTransform = createTransform;
274
+ exports.syncedCrud = syncedCrud;
275
+ //# sourceMappingURL=crud.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crud.js","sources":["../src/sync-plugins/crud.ts"],"sourcesContent":[null],"names":["internal","isObject","isNullOrUndefined","isString","isArray","isNumber","diffObjects","synced"],"mappings":"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"}