@legendapp/state 3.0.0-alpha.22 → 3.0.0-alpha.23

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.d.mts CHANGED
@@ -319,7 +319,7 @@ declare function setSilently(value$: ObservableParam, newValue: any): any;
319
319
  declare function initializePathType(pathType: TypeAtPath): any;
320
320
  declare function applyChange<T extends object>(value: T, change: Change, applyPrevious?: boolean): T;
321
321
  declare function applyChanges<T extends object>(value: T, changes: Change[], applyPrevious?: boolean): T;
322
- declare function deepMerge<T extends object>(target: T, ...sources: any[]): T;
322
+ declare function deepMerge<T>(target: T, ...sources: any[]): T;
323
323
 
324
324
  declare const hasOwnProperty: (v: PropertyKey) => boolean;
325
325
  declare function isArray(obj: unknown): obj is Array<any>;
package/index.d.ts CHANGED
@@ -319,7 +319,7 @@ declare function setSilently(value$: ObservableParam, newValue: any): any;
319
319
  declare function initializePathType(pathType: TypeAtPath): any;
320
320
  declare function applyChange<T extends object>(value: T, change: Change, applyPrevious?: boolean): T;
321
321
  declare function applyChanges<T extends object>(value: T, changes: Change[], applyPrevious?: boolean): T;
322
- declare function deepMerge<T extends object>(target: T, ...sources: any[]): T;
322
+ declare function deepMerge<T>(target: T, ...sources: any[]): T;
323
323
 
324
324
  declare const hasOwnProperty: (v: PropertyKey) => boolean;
325
325
  declare function isArray(obj: unknown): obj is Array<any>;
package/index.js CHANGED
@@ -312,13 +312,13 @@ function setAtPath(obj, path, pathTypes, value, mode, fullObj, restore) {
312
312
  }
313
313
  if (p === void 0) {
314
314
  if (mode === "merge") {
315
- obj = deepMerge(obj, value, false, 0);
315
+ obj = deepMerge(obj, value);
316
316
  } else {
317
317
  obj = value;
318
318
  }
319
319
  } else {
320
320
  if (mode === "merge") {
321
- o[p] = deepMerge(o[p], value, false, 0);
321
+ o[p] = deepMerge(o[p], value);
322
322
  } else if (isMap(o)) {
323
323
  o.set(p, value);
324
324
  } else {
@@ -456,7 +456,10 @@ function applyChanges(value, changes, applyPrevious) {
456
456
  return value;
457
457
  }
458
458
  function deepMerge(target, ...sources) {
459
- const result = { ...target };
459
+ if (isPrimitive(target)) {
460
+ return sources[sources.length - 1];
461
+ }
462
+ const result = isArray(target) ? [...target] : { ...target };
460
463
  for (let i = 0; i < sources.length; i++) {
461
464
  const obj2 = sources[i];
462
465
  for (const key in obj2) {
package/index.mjs CHANGED
@@ -310,13 +310,13 @@ function setAtPath(obj, path, pathTypes, value, mode, fullObj, restore) {
310
310
  }
311
311
  if (p === void 0) {
312
312
  if (mode === "merge") {
313
- obj = deepMerge(obj, value, false, 0);
313
+ obj = deepMerge(obj, value);
314
314
  } else {
315
315
  obj = value;
316
316
  }
317
317
  } else {
318
318
  if (mode === "merge") {
319
- o[p] = deepMerge(o[p], value, false, 0);
319
+ o[p] = deepMerge(o[p], value);
320
320
  } else if (isMap(o)) {
321
321
  o.set(p, value);
322
322
  } else {
@@ -454,7 +454,10 @@ function applyChanges(value, changes, applyPrevious) {
454
454
  return value;
455
455
  }
456
456
  function deepMerge(target, ...sources) {
457
- const result = { ...target };
457
+ if (isPrimitive(target)) {
458
+ return sources[sources.length - 1];
459
+ }
460
+ const result = isArray(target) ? [...target] : { ...target };
458
461
  for (let i = 0; i < sources.length; i++) {
459
462
  const obj2 = sources[i];
460
463
  for (const key in obj2) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@legendapp/state",
3
- "version": "3.0.0-alpha.22",
3
+ "version": "3.0.0-alpha.23",
4
4
  "description": "legend-state",
5
5
  "sideEffects": false,
6
6
  "private": false,
@@ -232,6 +232,9 @@ function syncedFirebase(props) {
232
232
  return;
233
233
  const key = snap.key;
234
234
  const val = snap.val();
235
+ if (fieldId && !val[fieldId]) {
236
+ val[fieldId] = key;
237
+ }
235
238
  if (saving$[key].get()) {
236
239
  pendingIncoming$[key].set(val);
237
240
  } else {
@@ -230,6 +230,9 @@ function syncedFirebase(props) {
230
230
  return;
231
231
  const key = snap.key;
232
232
  const val = snap.val();
233
+ if (fieldId && !val[fieldId]) {
234
+ val[fieldId] = key;
235
+ }
233
236
  if (saving$[key].get()) {
234
237
  pendingIncoming$[key].set(val);
235
238
  } else {
package/sync.js CHANGED
@@ -777,6 +777,7 @@ function syncObservable(obs$, syncOptionsOrSynced) {
777
777
  const pending = localState.pendingChanges;
778
778
  const get = syncOptions.get;
779
779
  if (get) {
780
+ const { waitFor } = syncOptions;
780
781
  const runGet = () => {
781
782
  var _a2;
782
783
  const onChange = async ({ value, mode, lastSync: lastSync2 }) => {
@@ -865,22 +866,30 @@ function syncObservable(obs$, syncOptionsOrSynced) {
865
866
  node.activationState.onChange = onChange;
866
867
  }
867
868
  if (!isSubscribed && syncOptions.subscribe) {
869
+ const subscribe = syncOptions.subscribe;
868
870
  isSubscribed = true;
869
- unsubscribe = syncOptions.subscribe({
870
- node,
871
- value$: obs$,
872
- lastSync,
873
- update: (params) => {
874
- state.when(syncState$.isLoaded, () => {
875
- state.when(waitFor || true, () => {
876
- params.mode || (params.mode = syncOptions.mode || "merge");
877
- onChange(params);
871
+ const doSubscribe = () => {
872
+ unsubscribe = subscribe({
873
+ node,
874
+ value$: obs$,
875
+ lastSync,
876
+ update: (params) => {
877
+ state.when(syncState$.isLoaded, () => {
878
+ state.when(waitFor || true, () => {
879
+ params.mode || (params.mode = syncOptions.mode || "merge");
880
+ onChange(params);
881
+ });
878
882
  });
879
- });
880
- },
881
- refresh: () => state.when(syncState$.isLoaded, sync),
882
- onError: (error) => onError(error, void 0, "subscribe")
883
- });
883
+ },
884
+ refresh: () => state.when(syncState$.isLoaded, sync),
885
+ onError: (error) => onError(error, void 0, "subscribe")
886
+ });
887
+ };
888
+ if (waitFor) {
889
+ state.whenReady(waitFor, doSubscribe);
890
+ } else {
891
+ doSubscribe();
892
+ }
884
893
  }
885
894
  const existingValue = getNodeValue(node);
886
895
  const getParams = {
@@ -953,7 +962,6 @@ function syncObservable(obs$, syncOptionsOrSynced) {
953
962
  handle(got);
954
963
  }
955
964
  };
956
- const { waitFor } = syncOptions;
957
965
  if (waitFor) {
958
966
  if (node.activationState) {
959
967
  node.activationState.waitFor = void 0;
package/sync.mjs CHANGED
@@ -775,6 +775,7 @@ function syncObservable(obs$, syncOptionsOrSynced) {
775
775
  const pending = localState.pendingChanges;
776
776
  const get = syncOptions.get;
777
777
  if (get) {
778
+ const { waitFor } = syncOptions;
778
779
  const runGet = () => {
779
780
  var _a2;
780
781
  const onChange = async ({ value, mode, lastSync: lastSync2 }) => {
@@ -863,22 +864,30 @@ function syncObservable(obs$, syncOptionsOrSynced) {
863
864
  node.activationState.onChange = onChange;
864
865
  }
865
866
  if (!isSubscribed && syncOptions.subscribe) {
867
+ const subscribe = syncOptions.subscribe;
866
868
  isSubscribed = true;
867
- unsubscribe = syncOptions.subscribe({
868
- node,
869
- value$: obs$,
870
- lastSync,
871
- update: (params) => {
872
- when(syncState$.isLoaded, () => {
873
- when(waitFor || true, () => {
874
- params.mode || (params.mode = syncOptions.mode || "merge");
875
- onChange(params);
869
+ const doSubscribe = () => {
870
+ unsubscribe = subscribe({
871
+ node,
872
+ value$: obs$,
873
+ lastSync,
874
+ update: (params) => {
875
+ when(syncState$.isLoaded, () => {
876
+ when(waitFor || true, () => {
877
+ params.mode || (params.mode = syncOptions.mode || "merge");
878
+ onChange(params);
879
+ });
876
880
  });
877
- });
878
- },
879
- refresh: () => when(syncState$.isLoaded, sync),
880
- onError: (error) => onError(error, void 0, "subscribe")
881
- });
881
+ },
882
+ refresh: () => when(syncState$.isLoaded, sync),
883
+ onError: (error) => onError(error, void 0, "subscribe")
884
+ });
885
+ };
886
+ if (waitFor) {
887
+ whenReady(waitFor, doSubscribe);
888
+ } else {
889
+ doSubscribe();
890
+ }
882
891
  }
883
892
  const existingValue = getNodeValue(node);
884
893
  const getParams = {
@@ -951,7 +960,6 @@ function syncObservable(obs$, syncOptionsOrSynced) {
951
960
  handle(got);
952
961
  }
953
962
  };
954
- const { waitFor } = syncOptions;
955
963
  if (waitFor) {
956
964
  if (node.activationState) {
957
965
  node.activationState.waitFor = void 0;