@legendapp/state 3.0.0-beta.5 → 3.0.0-beta.7

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/index.js CHANGED
@@ -384,7 +384,7 @@ function _mergeIntoObservable(target, source, levelsDeep) {
384
384
  const isSourceSet = isSet(source);
385
385
  if (isSourceSet && isSet(targetValue)) {
386
386
  target.set(/* @__PURE__ */ new Set([...source, ...targetValue]));
387
- } else if (isTargetObj && isObject(source) && !isEmpty(targetValue) || isTargetArr && targetValue.length > 0) {
387
+ } else if (isTargetObj && isObject(source) || isTargetArr && targetValue.length > 0) {
388
388
  const keys = isSourceMap || isSourceSet ? Array.from(source.keys()) : Object.keys(source);
389
389
  for (let i = 0; i < keys.length; i++) {
390
390
  const key = keys[i];
package/index.mjs CHANGED
@@ -382,7 +382,7 @@ function _mergeIntoObservable(target, source, levelsDeep) {
382
382
  const isSourceSet = isSet(source);
383
383
  if (isSourceSet && isSet(targetValue)) {
384
384
  target.set(/* @__PURE__ */ new Set([...source, ...targetValue]));
385
- } else if (isTargetObj && isObject(source) && !isEmpty(targetValue) || isTargetArr && targetValue.length > 0) {
385
+ } else if (isTargetObj && isObject(source) || isTargetArr && targetValue.length > 0) {
386
386
  const keys = isSourceMap || isSourceSet ? Array.from(source.keys()) : Object.keys(source);
387
387
  for (let i = 0; i < keys.length; i++) {
388
388
  const key = keys[i];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@legendapp/state",
3
- "version": "3.0.0-beta.5",
3
+ "version": "3.0.0-beta.7",
4
4
  "description": "legend-state",
5
5
  "sideEffects": false,
6
6
  "private": false,
@@ -21,7 +21,10 @@ var ObservablePersistAsyncStorage = class {
21
21
  if (preload === true) {
22
22
  tables = await AsyncStorage.getAllKeys();
23
23
  } else if (state.isArray(preload)) {
24
- tables = preload;
24
+ const metadataTables = preload.map(
25
+ (table) => table.endsWith(MetadataSuffix) ? void 0 : table + MetadataSuffix
26
+ );
27
+ tables = [...preload, ...metadataTables.filter(Boolean)];
25
28
  }
26
29
  if (tables) {
27
30
  const values = await AsyncStorage.multiGet(tables);
@@ -40,8 +43,10 @@ var ObservablePersistAsyncStorage = class {
40
43
  if (this.data[table] === void 0) {
41
44
  try {
42
45
  return (async () => {
43
- const value = await AsyncStorage.getItem(table);
44
- this.data[table] = value ? safeParse(value) : void 0;
46
+ const values = await AsyncStorage.multiGet([table, table + MetadataSuffix]);
47
+ values.forEach(([table2, value]) => {
48
+ this.data[table2] = value ? safeParse(value) : void 0;
49
+ });
45
50
  })();
46
51
  } catch (e) {
47
52
  console.error("[legend-state] ObservablePersistLocalAsyncStorage failed to parse", table);
@@ -19,7 +19,10 @@ var ObservablePersistAsyncStorage = class {
19
19
  if (preload === true) {
20
20
  tables = await AsyncStorage.getAllKeys();
21
21
  } else if (isArray(preload)) {
22
- tables = preload;
22
+ const metadataTables = preload.map(
23
+ (table) => table.endsWith(MetadataSuffix) ? void 0 : table + MetadataSuffix
24
+ );
25
+ tables = [...preload, ...metadataTables.filter(Boolean)];
23
26
  }
24
27
  if (tables) {
25
28
  const values = await AsyncStorage.multiGet(tables);
@@ -38,8 +41,10 @@ var ObservablePersistAsyncStorage = class {
38
41
  if (this.data[table] === void 0) {
39
42
  try {
40
43
  return (async () => {
41
- const value = await AsyncStorage.getItem(table);
42
- this.data[table] = value ? safeParse(value) : void 0;
44
+ const values = await AsyncStorage.multiGet([table, table + MetadataSuffix]);
45
+ values.forEach(([table2, value]) => {
46
+ this.data[table2] = value ? safeParse(value) : void 0;
47
+ });
43
48
  })();
44
49
  } catch (e) {
45
50
  console.error("[legend-state] ObservablePersistLocalAsyncStorage failed to parse", table);
package/react.d.mts CHANGED
@@ -151,8 +151,10 @@ declare function useSelector<T>(selector: Selector<T>, options?: UseSelectorOpti
151
151
  declare function useUnmount(fn: () => void): void;
152
152
  declare const useUnmountOnce: typeof useUnmount;
153
153
 
154
- declare function useWhen<T>(predicate: Selector<T>, effect: (value: T) => any | (() => any)): Promise<any>;
155
- declare function useWhenReady<T>(predicate: Selector<T>, effect: (value: T) => any | (() => any)): Promise<any>;
154
+ declare function useWhen<T>(predicate: Selector<T>): Promise<T>;
155
+ declare function useWhen<T, T2>(predicate: Selector<T>, effect: (value: T) => T2): Promise<T2>;
156
+ declare function useWhenReady<T>(predicate: Selector<T>): Promise<T>;
157
+ declare function useWhenReady<T, T2>(predicate: Selector<T>, effect: (value: T) => T2 | (() => T2)): Promise<T2>;
156
158
 
157
159
  declare function configureReactive({ components, binders, }: {
158
160
  components?: Record<string, FC | ComponentClass<any>>;
package/react.d.ts CHANGED
@@ -151,8 +151,10 @@ declare function useSelector<T>(selector: Selector<T>, options?: UseSelectorOpti
151
151
  declare function useUnmount(fn: () => void): void;
152
152
  declare const useUnmountOnce: typeof useUnmount;
153
153
 
154
- declare function useWhen<T>(predicate: Selector<T>, effect: (value: T) => any | (() => any)): Promise<any>;
155
- declare function useWhenReady<T>(predicate: Selector<T>, effect: (value: T) => any | (() => any)): Promise<any>;
154
+ declare function useWhen<T>(predicate: Selector<T>): Promise<T>;
155
+ declare function useWhen<T, T2>(predicate: Selector<T>, effect: (value: T) => T2): Promise<T2>;
156
+ declare function useWhenReady<T>(predicate: Selector<T>): Promise<T>;
157
+ declare function useWhenReady<T, T2>(predicate: Selector<T>, effect: (value: T) => T2 | (() => T2)): Promise<T2>;
156
158
 
157
159
  declare function configureReactive({ components, binders, }: {
158
160
  components?: Record<string, FC | ComponentClass<any>>;
@@ -36,9 +36,9 @@ function syncedSupabase(props) {
36
36
  schema,
37
37
  filter,
38
38
  actions,
39
- fieldCreatedAt: fieldCreatedAtParam,
40
- fieldUpdatedAt: fieldUpdatedAtParam,
41
- fieldDeleted: fieldDeletedParam,
39
+ fieldCreatedAt,
40
+ fieldUpdatedAt,
41
+ fieldDeleted,
42
42
  realtime,
43
43
  changesSince,
44
44
  transform: transformParam,
@@ -54,9 +54,17 @@ function syncedSupabase(props) {
54
54
  ...rest
55
55
  } = props;
56
56
  const client = supabase;
57
- const fieldCreatedAt = fieldCreatedAtParam || (changesSince === "last-sync" ? "created_at" : void 0);
58
- const fieldUpdatedAt = fieldUpdatedAtParam || (changesSince === "last-sync" ? "updated_at" : void 0);
59
- const fieldDeleted = fieldDeletedParam || (changesSince === "last-sync" ? "deleted" : void 0);
57
+ if (process.env.NODE_ENV === "development" && changesSince === "last-sync") {
58
+ if (!fieldCreatedAt) {
59
+ console.warn("[legend-state] fieldCreatedAt is required when using last-sync mode");
60
+ }
61
+ if (!fieldUpdatedAt) {
62
+ console.warn("[legend-state] fieldUpdatedAt is required when using last-sync mode");
63
+ }
64
+ if (!fieldDeleted) {
65
+ console.warn("[legend-state] fieldDeleted is required when using last-sync mode");
66
+ }
67
+ }
60
68
  const list = !actions || actions.includes("read") ? listParam ? wrapSupabaseFn(listParam) : async (params) => {
61
69
  const { lastSync } = params;
62
70
  const clientSchema = schema ? client.schema(schema) : client;
@@ -34,9 +34,9 @@ function syncedSupabase(props) {
34
34
  schema,
35
35
  filter,
36
36
  actions,
37
- fieldCreatedAt: fieldCreatedAtParam,
38
- fieldUpdatedAt: fieldUpdatedAtParam,
39
- fieldDeleted: fieldDeletedParam,
37
+ fieldCreatedAt,
38
+ fieldUpdatedAt,
39
+ fieldDeleted,
40
40
  realtime,
41
41
  changesSince,
42
42
  transform: transformParam,
@@ -52,9 +52,17 @@ function syncedSupabase(props) {
52
52
  ...rest
53
53
  } = props;
54
54
  const client = supabase;
55
- const fieldCreatedAt = fieldCreatedAtParam || (changesSince === "last-sync" ? "created_at" : void 0);
56
- const fieldUpdatedAt = fieldUpdatedAtParam || (changesSince === "last-sync" ? "updated_at" : void 0);
57
- const fieldDeleted = fieldDeletedParam || (changesSince === "last-sync" ? "deleted" : void 0);
55
+ if (process.env.NODE_ENV === "development" && changesSince === "last-sync") {
56
+ if (!fieldCreatedAt) {
57
+ console.warn("[legend-state] fieldCreatedAt is required when using last-sync mode");
58
+ }
59
+ if (!fieldUpdatedAt) {
60
+ console.warn("[legend-state] fieldUpdatedAt is required when using last-sync mode");
61
+ }
62
+ if (!fieldDeleted) {
63
+ console.warn("[legend-state] fieldDeleted is required when using last-sync mode");
64
+ }
65
+ }
58
66
  const list = !actions || actions.includes("read") ? listParam ? wrapSupabaseFn(listParam) : async (params) => {
59
67
  const { lastSync } = params;
60
68
  const clientSchema = schema ? client.schema(schema) : client;