@legendapp/state 2.2.0-next.75 → 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 (48) hide show
  1. package/helpers/time.d.ts +2 -2
  2. package/index.js +7 -5
  3. package/index.js.map +1 -1
  4. package/index.mjs +7 -5
  5. package/index.mjs.map +1 -1
  6. package/package.json +11 -1
  7. package/persist.js +82 -87
  8. package/persist.js.map +1 -1
  9. package/persist.mjs +82 -87
  10. package/persist.mjs.map +1 -1
  11. package/src/batching.ts +2 -0
  12. package/src/computed.ts +4 -2
  13. package/src/globals.ts +1 -1
  14. package/src/helpers.ts +1 -1
  15. package/src/history/undoRedo.ts +111 -0
  16. package/src/observableInterfaces.ts +6 -5
  17. package/src/observe.ts +1 -1
  18. package/src/sync/activateSyncedNode.ts +2 -20
  19. package/src/sync/syncObservable.ts +88 -73
  20. package/src/sync-plugins/crud.ts +109 -98
  21. package/src/sync-plugins/fetch.ts +56 -26
  22. package/src/sync-plugins/keel.ts +447 -0
  23. package/src/sync-plugins/supabase.ts +225 -0
  24. package/src/syncTypes.ts +10 -4
  25. package/sync-plugins/crud.d.ts +27 -26
  26. package/sync-plugins/crud.js +50 -42
  27. package/sync-plugins/crud.js.map +1 -1
  28. package/sync-plugins/crud.mjs +50 -42
  29. package/sync-plugins/crud.mjs.map +1 -1
  30. package/sync-plugins/fetch.d.ts +8 -7
  31. package/sync-plugins/fetch.js +33 -11
  32. package/sync-plugins/fetch.js.map +1 -1
  33. package/sync-plugins/fetch.mjs +34 -12
  34. package/sync-plugins/fetch.mjs.map +1 -1
  35. package/sync-plugins/keel.d.ts +91 -0
  36. package/sync-plugins/keel.js +278 -0
  37. package/sync-plugins/keel.js.map +1 -0
  38. package/sync-plugins/keel.mjs +274 -0
  39. package/sync-plugins/keel.mjs.map +1 -0
  40. package/sync-plugins/supabase.d.ts +32 -0
  41. package/sync-plugins/supabase.js +134 -0
  42. package/sync-plugins/supabase.js.map +1 -0
  43. package/sync-plugins/supabase.mjs +131 -0
  44. package/sync-plugins/supabase.mjs.map +1 -0
  45. package/sync.js +82 -87
  46. package/sync.js.map +1 -1
  47. package/sync.mjs +83 -88
  48. package/sync.mjs.map +1 -1
@@ -0,0 +1,225 @@
1
+ import {
2
+ Observable,
3
+ SyncedOptionsGlobal,
4
+ computeSelector,
5
+ getNodeValue,
6
+ mergeIntoObservable,
7
+ observable,
8
+ symbolDelete,
9
+ type SyncedGetParams,
10
+ type SyncedSubscribeParams,
11
+ } from '@legendapp/state';
12
+ import {
13
+ CrudAsOption,
14
+ SyncedCrudPropsBase,
15
+ SyncedCrudPropsMany,
16
+ SyncedCrudReturnType,
17
+ syncedCrud,
18
+ } from '@legendapp/state/sync-plugins/crud';
19
+ import type { PostgrestFilterBuilder } from '@supabase/postgrest-js';
20
+ import type { SupabaseClient } from '@supabase/supabase-js';
21
+
22
+ // Unused types but maybe useful in the future so keeping them for now
23
+ // type DatabaseOf<TClient extends SupabaseClient> = TClient extends SupabaseClient<infer TDB> ? TDB : never;
24
+ // type SchemaNameOf<TClient extends SupabaseClient> = TClient extends SupabaseClient<infer _, infer TSchemaName>
25
+ // ? TSchemaName
26
+ // : never;
27
+
28
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
29
+ type SchemaOf<TClient extends SupabaseClient> = TClient extends SupabaseClient<infer _, infer __, infer TSchema>
30
+ ? TSchema
31
+ : never;
32
+ type TableOf<TClient extends SupabaseClient> = SchemaOf<TClient>['Tables'];
33
+ type CollectionOf<TClient extends SupabaseClient> = keyof TableOf<TClient>;
34
+ type RowOf<
35
+ TClient extends SupabaseClient,
36
+ TCollection extends CollectionOf<TClient>,
37
+ > = TableOf<TClient>[TCollection]['Row'];
38
+
39
+ export type SyncedSupabaseConfig<T extends { id: string }> = Omit<
40
+ SyncedCrudPropsBase<T>,
41
+ 'create' | 'update' | 'delete' | 'onSaved' | 'transform' | 'fieldCreatedAt' | 'updatePartial' | 'subscribe'
42
+ >;
43
+
44
+ export interface SyncedSupabaseGlobalConfig extends Omit<SyncedSupabaseConfig<{ id: string }>, 'persist'> {
45
+ persist?: SyncedOptionsGlobal;
46
+ enabled?: Observable<boolean>;
47
+ }
48
+
49
+ interface SyncedSupabaseProps<
50
+ TClient extends SupabaseClient,
51
+ TCollection extends CollectionOf<TClient>,
52
+ TOption extends CrudAsOption = 'object',
53
+ > extends SyncedSupabaseConfig<RowOf<TClient, TCollection>>,
54
+ SyncedCrudPropsMany<RowOf<TClient, TCollection>, RowOf<TClient, TCollection>, TOption> {
55
+ supabase: TClient;
56
+ collection: TCollection;
57
+ filter?: (
58
+ select: PostgrestFilterBuilder<
59
+ SchemaOf<TClient>,
60
+ RowOf<TClient, TCollection>,
61
+ RowOf<TClient, TCollection>[],
62
+ TCollection,
63
+ []
64
+ >,
65
+ params: SyncedGetParams,
66
+ ) => PostgrestFilterBuilder<
67
+ SchemaOf<TClient>,
68
+ RowOf<TClient, TCollection>,
69
+ RowOf<TClient, TCollection>[],
70
+ TCollection,
71
+ []
72
+ >;
73
+ actions?: ('create' | 'read' | 'update' | 'delete')[];
74
+ realtime?: { schema?: string; filter?: string };
75
+ }
76
+
77
+ let channelNum = 1;
78
+ const supabaseConfig: SyncedSupabaseGlobalConfig = {};
79
+ const isEnabled$ = observable(true);
80
+
81
+ export function configureSyncedSupabase(config: SyncedSupabaseGlobalConfig) {
82
+ const { enabled, ...rest } = config;
83
+ if (enabled !== undefined) {
84
+ isEnabled$.set(enabled);
85
+ }
86
+ Object.assign(supabaseConfig, rest);
87
+ }
88
+
89
+ export function syncedSupabase<
90
+ Client extends SupabaseClient,
91
+ Collection extends CollectionOf<Client> & string,
92
+ AsOption extends CrudAsOption = 'object',
93
+ >(props: SyncedSupabaseProps<Client, Collection, AsOption>): SyncedCrudReturnType<RowOf<Client, Collection>, AsOption> {
94
+ mergeIntoObservable(props, supabaseConfig);
95
+ const {
96
+ supabase: client,
97
+ collection,
98
+ filter,
99
+ actions,
100
+ fieldUpdatedAt,
101
+ realtime,
102
+ changesSince,
103
+ waitFor,
104
+ waitForSet,
105
+ ...rest
106
+ } = props;
107
+ const list =
108
+ !actions || actions.includes('read')
109
+ ? async (params: SyncedGetParams) => {
110
+ const { lastSync } = params;
111
+ let select = client.from(collection).select();
112
+ if (changesSince === 'last-sync') {
113
+ select = select.neq('deleted', true);
114
+ if (lastSync) {
115
+ const date = new Date(lastSync).toISOString();
116
+ select = select.or(
117
+ `created_at.gt.${date}${fieldUpdatedAt ? `,${fieldUpdatedAt}.gt.${date}` : ''}`,
118
+ );
119
+ }
120
+ }
121
+ if (filter) {
122
+ select = filter(select, params);
123
+ }
124
+ const { data, error } = await select;
125
+ if (error) {
126
+ throw new Error(error?.message);
127
+ }
128
+ return (data! || []) as RowOf<Client, Collection>[];
129
+ }
130
+ : undefined;
131
+
132
+ const upsert = async (input: RowOf<Client, Collection>) => {
133
+ const res = await client.from(collection).upsert(input).select();
134
+ const { data, error } = res;
135
+ if (data) {
136
+ const created = data[0];
137
+ return created;
138
+ } else {
139
+ throw new Error(error?.message);
140
+ }
141
+ };
142
+ const create = !actions || actions.includes('create') ? upsert : undefined;
143
+ const update = !actions || actions.includes('update') ? upsert : undefined;
144
+ const deleteFn =
145
+ !actions || actions.includes('delete')
146
+ ? async (input: RowOf<Client, Collection>) => {
147
+ const id = input.id;
148
+ const from = client.from(collection);
149
+ const res = await (changesSince === 'last-sync' ? from.update({ deleted: true }) : from.delete())
150
+ .eq('id', id)
151
+ .select();
152
+ const { data, error } = res;
153
+ if (data) {
154
+ const created = data[0];
155
+ return created;
156
+ } else {
157
+ throw new Error(error?.message);
158
+ }
159
+ }
160
+ : undefined;
161
+ const subscribe = realtime
162
+ ? ({ node, update }: SyncedSubscribeParams) => {
163
+ const { filter, schema } = realtime;
164
+ const channel = client
165
+ .channel(`LS_${node.key || ''}${channelNum++}`)
166
+ .on(
167
+ 'postgres_changes',
168
+ {
169
+ event: '*',
170
+ table: collection,
171
+ schema: schema || 'public',
172
+ filter: filter || undefined,
173
+ },
174
+ (payload) => {
175
+ const { eventType, new: value, old } = payload;
176
+ if (eventType === 'INSERT' || eventType === 'UPDATE') {
177
+ const cur = getNodeValue(node)?.[value.id];
178
+ const curDateStr = cur && (cur.updated_at || cur.created_at);
179
+ const valueDateStr = value.updated_at || value.created_at;
180
+ const valueDate = +new Date(valueDateStr);
181
+ // Check if new or newer than last seen locally
182
+ if (valueDateStr && (!curDateStr || valueDate > +new Date(curDateStr))) {
183
+ // Update local with the new value
184
+ update({
185
+ value: { [value.id]: value },
186
+ lastSync: valueDate,
187
+ mode: 'merge',
188
+ });
189
+ }
190
+ } else if (eventType === 'DELETE') {
191
+ const { id } = old;
192
+ update({
193
+ value: { [id]: symbolDelete },
194
+ });
195
+ }
196
+ },
197
+ )
198
+ .subscribe();
199
+
200
+ return channel.unsubscribe;
201
+ }
202
+ : undefined;
203
+
204
+ return syncedCrud<RowOf<Client, Collection>, RowOf<Client, Collection>, AsOption>({
205
+ ...rest,
206
+ list,
207
+ create,
208
+ update,
209
+ delete: deleteFn,
210
+ onSaved: (saved) => {
211
+ // Update the local timestamps with server response
212
+ return {
213
+ id: saved.id,
214
+ created_at: saved.created_at,
215
+ updated_at: saved.updated_at,
216
+ };
217
+ },
218
+ subscribe,
219
+ fieldCreatedAt: 'created_at',
220
+ fieldUpdatedAt,
221
+ updatePartial: true,
222
+ waitFor: () => isEnabled$.get() && (waitFor ? computeSelector(waitFor) : true),
223
+ waitForSet: () => isEnabled$.get() && (waitForSet ? computeSelector(waitForSet) : true),
224
+ });
225
+ }
package/src/syncTypes.ts CHANGED
@@ -38,7 +38,7 @@ export interface SyncedGetParams {
38
38
  refresh: () => void;
39
39
  }
40
40
 
41
- export type SyncedSetParams<T> = SetParams<T> & {
41
+ export interface SyncedSetParams<T> extends SetParams<T> {
42
42
  node: NodeValue;
43
43
  valuePrevious: T;
44
44
  update: UpdateFn;
@@ -46,14 +46,20 @@ export type SyncedSetParams<T> = SetParams<T> & {
46
46
  cancelRetry: () => void;
47
47
  retryNum: number;
48
48
  fromSubscribe: boolean | undefined;
49
- };
49
+ }
50
+
51
+ export interface SyncedSubscribeParams {
52
+ node: NodeValue;
53
+ update: UpdateFn;
54
+ refresh: () => void;
55
+ }
50
56
 
51
57
  export type GetMode = 'set' | 'assign' | 'merge' | 'append' | 'prepend';
52
58
 
53
59
  export interface SyncedOptions<T = any> extends Omit<LinkedOptions<T>, 'get' | 'set'> {
54
60
  get?: (params: SyncedGetParams) => Promise<T> | T;
55
61
  set?: (params: SyncedSetParams<T>) => void | Promise<any>;
56
- subscribe?: (params: { node: NodeValue; update: UpdateFn; refresh: () => void }) => void;
62
+ subscribe?: (params: SyncedSubscribeParams) => void;
57
63
  retry?: RetryOptions;
58
64
  persist?: PersistOptions<any>;
59
65
  debounceSet?: number;
@@ -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 {
@@ -1,39 +1,40 @@
1
1
  import { SyncTransform, SyncedGetParams, SyncedOptions, SyncedSetParams } from '@legendapp/state';
2
- export type CrudAsOption = 'Map' | 'object' | 'first' | 'array';
2
+ export type CrudAsOption = 'Map' | 'object' | 'first';
3
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;
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';
7
8
  }
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>;
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>;
12
13
  }
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>;
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
22
  fieldUpdatedAt?: string;
23
+ fieldCreatedAt?: string;
23
24
  updatePartial?: boolean;
25
+ changesSince?: 'all' | 'last-sync';
24
26
  }
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[]> & {};
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[];
28
29
  export declare function createTransform<T extends Record<string, any>, T2 extends Record<string, any>>(...keys: (keyof T | {
29
30
  from: keyof T;
30
31
  to: keyof T2;
31
32
  })[]): SyncTransform<T2, T>;
32
33
  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'>>;
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'>>;
39
40
  export {};
@@ -70,25 +70,23 @@ function combineTransforms(transform1, ...transforms) {
70
70
  };
71
71
  }
72
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;
73
+ const { get: getFn, list: listFn, create: createFn, update: updateFn, delete: deleteFn, transform, fieldCreatedAt, fieldUpdatedAt, updatePartial, onSaved, mode: modeParam, changesSince, ...rest } = props;
74
74
  let asType = props.as;
75
75
  if (!asType) {
76
- asType = (getFn ? 'first' : 'array');
76
+ asType = (getFn ? 'first' : 'object');
77
77
  }
78
78
  const asMap = asType === 'Map';
79
- const ensureId = (obj) => obj.id || (obj.id = generateId());
80
79
  const get = getFn || listFn
81
80
  ? async (getParams) => {
82
81
  const { updateLastSync, lastSync } = getParams;
83
82
  if (listFn) {
84
- if (lastSync) {
85
- getParams.mode =
86
- modeParam || (asType === 'array' ? 'append' : asType === 'first' ? 'set' : 'assign');
83
+ if (changesSince === 'last-sync' && lastSync) {
84
+ getParams.mode = modeParam || (asType === 'first' ? 'set' : 'assign');
87
85
  }
88
- let data = await listFn(getParams);
86
+ const data = (await listFn(getParams)) || [];
89
87
  let newLastSync = 0;
90
88
  for (let i = 0; i < data.length; i++) {
91
- const updated = data[i][fieldUpdatedAt];
89
+ const updated = data[i][fieldUpdatedAt] || data[i][fieldCreatedAt];
92
90
  if (updated) {
93
91
  newLastSync = Math.max(newLastSync, +new Date(updated));
94
92
  }
@@ -96,18 +94,16 @@ function syncedCrud(props) {
96
94
  if (newLastSync && newLastSync !== lastSync) {
97
95
  updateLastSync(newLastSync);
98
96
  }
97
+ let transformed = data;
99
98
  if (transform === null || transform === void 0 ? void 0 : transform.load) {
100
- data = data.map(transform.load);
99
+ transformed = await Promise.all(data.map(transform.load));
101
100
  }
102
101
  if (asType === 'first') {
103
- return data.length > 0 ? data[0] : lastSync ? {} : null;
104
- }
105
- else if (asType === 'array') {
106
- return data;
102
+ return transformed.length > 0 ? transformed[0] : null;
107
103
  }
108
104
  else {
109
105
  const out = asMap ? new Map() : {};
110
- data.forEach((result) => {
106
+ transformed.forEach((result) => {
111
107
  const value = result.__deleted ? state.internal.symbolDelete : result;
112
108
  asMap ? out.set(result.id, value) : (out[result.id] = value);
113
109
  });
@@ -115,17 +111,18 @@ function syncedCrud(props) {
115
111
  }
116
112
  }
117
113
  else if (getFn) {
118
- let data = await getFn(getParams);
114
+ const data = await getFn(getParams);
115
+ let transformed = data;
119
116
  if (data) {
120
- const newLastSync = data[fieldUpdatedAt];
117
+ const newLastSync = data[fieldUpdatedAt] || data[fieldCreatedAt];
121
118
  if (newLastSync && newLastSync !== lastSync) {
122
119
  updateLastSync(newLastSync);
123
120
  }
124
121
  if (transform === null || transform === void 0 ? void 0 : transform.load) {
125
- data = transform.load(data);
122
+ transformed = await transform.load(data);
126
123
  }
127
124
  }
128
- return data;
125
+ return transformed;
129
126
  }
130
127
  }
131
128
  : undefined;
@@ -139,23 +136,27 @@ function syncedCrud(props) {
139
136
  var _a;
140
137
  if (asType === 'first') {
141
138
  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);
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);
151
144
  }
152
- else if (prevAtPath) {
153
- deletes.set(prevAtPath === null || prevAtPath === void 0 ? void 0 : prevAtPath.id, prevAtPath);
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] }));
154
156
  }
155
157
  }
156
158
  else {
157
- const key = path[0];
158
- updates.set(id, Object.assign(updates.get(id) || { id }, { [key]: value[key] }));
159
+ console.error('[legend-state]: added item without an id');
159
160
  }
160
161
  }
161
162
  else if (path.length === 0) {
@@ -170,7 +171,7 @@ function syncedCrud(props) {
170
171
  let isCreateGuess;
171
172
  if (path.length === 0) {
172
173
  isCreateGuess =
173
- !fieldUpdatedAt &&
174
+ !(fieldCreatedAt || fieldUpdatedAt) &&
174
175
  !(((_a = (asMap
175
176
  ? Array.from(valueAtPath.values())
176
177
  : state.isArray(valueAtPath)
@@ -185,7 +186,7 @@ function syncedCrud(props) {
185
186
  else {
186
187
  const itemKey = path[0];
187
188
  const itemValue = asMap ? value.get(itemKey) : value[itemKey];
188
- isCreateGuess = !fieldUpdatedAt && path.length === 1 && !prevAtPath;
189
+ isCreateGuess = !(fieldCreatedAt || fieldUpdatedAt) && path.length === 1 && !prevAtPath;
189
190
  if (!itemValue) {
190
191
  if (path.length === 1 && prevAtPath) {
191
192
  if (deleteFn) {
@@ -201,8 +202,11 @@ function syncedCrud(props) {
201
202
  }
202
203
  }
203
204
  itemsChanged === null || itemsChanged === void 0 ? void 0 : itemsChanged.forEach((item) => {
204
- ensureId(item);
205
- const isCreate = fieldUpdatedAt ? !item[fieldUpdatedAt] : isCreateGuess;
205
+ const isCreate = fieldCreatedAt
206
+ ? !item[fieldCreatedAt]
207
+ : fieldUpdatedAt
208
+ ? !item[fieldUpdatedAt]
209
+ : isCreateGuess;
206
210
  if (isCreate) {
207
211
  if (createFn) {
208
212
  creates.set(item.id, item);
@@ -226,13 +230,16 @@ function syncedCrud(props) {
226
230
  if (data && onSaved) {
227
231
  const dataLoaded = ((transform === null || transform === void 0 ? void 0 : transform.load) ? transform.load(data) : data);
228
232
  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
- });
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
+ }
236
243
  }
237
244
  };
238
245
  return Promise.all([
@@ -257,6 +264,7 @@ function syncedCrud(props) {
257
264
  return sync.synced({
258
265
  set,
259
266
  get,
267
+ mode: modeParam,
260
268
  ...rest,
261
269
  });
262
270
  }
@@ -1 +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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"}
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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"}