@legendapp/state 2.2.0-next.73 → 2.2.0-next.75

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