@legendapp/state 3.0.0-alpha.34 → 3.0.0-alpha.36

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/config.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { N as NodeInfo } from './observableInterfaces-CZR3_8mM.mjs';
1
+ import { N as NodeInfo } from './observableInterfaces-CgBddSU6.mjs';
2
2
 
3
3
  declare function configureLegendState({ observableFunctions, observableProperties, jsonReplacer, jsonReviver, }: {
4
4
  observableFunctions?: Record<string, (node: NodeInfo, ...args: any[]) => any>;
package/config.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { N as NodeInfo } from './observableInterfaces-CZR3_8mM.js';
1
+ import { N as NodeInfo } from './observableInterfaces-CgBddSU6.js';
2
2
 
3
3
  declare function configureLegendState({ observableFunctions, observableProperties, jsonReplacer, jsonReviver, }: {
4
4
  observableFunctions?: Record<string, (node: NodeInfo, ...args: any[]) => any>;
package/config.js CHANGED
@@ -61,15 +61,19 @@ var symbolIterator = Symbol.iterator;
61
61
  var symbolGetNode = Symbol("getNode");
62
62
  var symbolDelete = /* @__PURE__ */ Symbol("delete");
63
63
  var symbolOpaque = Symbol("opaque");
64
+ var symbolPlain = Symbol("plain");
64
65
  var optimized = Symbol("optimized");
65
66
  var symbolLinked = Symbol("linked");
66
67
  var globalState = {
67
68
  pendingNodes: /* @__PURE__ */ new Map(),
68
69
  dirtyNodes: /* @__PURE__ */ new Set()
69
70
  };
70
- function isOpaqueObject(value) {
71
+ function isHintOpaque(value) {
71
72
  return value && (value[symbolOpaque] || value["$$typeof"]);
72
73
  }
74
+ function isHintPlain(value) {
75
+ return value && value[symbolPlain];
76
+ }
73
77
  function getPathType(value) {
74
78
  return isArray(value) ? "array" : isMap(value) ? "map" : value instanceof Set ? "set" : "object";
75
79
  }
@@ -255,12 +259,14 @@ function setAtPath(obj, path, pathTypes, value, mode, fullObj, restore) {
255
259
  if (path.length > 0) {
256
260
  for (let i = 0; i < path.length; i++) {
257
261
  p = path[i];
258
- if (o[p] === symbolDelete) {
262
+ const map = isMap(o);
263
+ let child = o ? map ? o.get(p) : o[p] : void 0;
264
+ if (child === symbolDelete) {
259
265
  return obj;
260
- } else if (o[p] === void 0 && value === void 0 && i === path.length - 1) {
266
+ } else if (child === void 0 && value === void 0 && i === path.length - 1) {
261
267
  return obj;
262
- } else if (i < path.length - 1 && (o[p] === void 0 || o[p] === null)) {
263
- const child = initializePathType(pathTypes[i]);
268
+ } else if (i < path.length - 1 && (child === void 0 || child === null)) {
269
+ child = initializePathType(pathTypes[i]);
264
270
  if (isMap(o)) {
265
271
  o.set(p, child);
266
272
  } else {
@@ -268,7 +274,7 @@ function setAtPath(obj, path, pathTypes, value, mode, fullObj, restore) {
268
274
  }
269
275
  }
270
276
  if (i < path.length - 1) {
271
- o = isMap(o) ? o.get(p) : o[p];
277
+ o = child;
272
278
  }
273
279
  }
274
280
  }
@@ -997,7 +1003,7 @@ function updateNodes(parent, obj, prevValue) {
997
1003
  }
998
1004
  __devUpdateNodes.add(obj);
999
1005
  }
1000
- if (isObject(obj) && isOpaqueObject(obj) || isObject(prevValue) && isOpaqueObject(prevValue)) {
1006
+ if (isObject(obj) && isHintOpaque(obj) || isObject(prevValue) && isHintOpaque(prevValue)) {
1001
1007
  const isDiff = obj !== prevValue;
1002
1008
  if (isDiff) {
1003
1009
  if (parent.listeners || parent.listenersImmediate) {
@@ -1233,7 +1239,7 @@ var proxyHandler = {
1233
1239
  return property.get(node);
1234
1240
  }
1235
1241
  let vProp = value == null ? void 0 : value[p];
1236
- if (isObject(value) && isOpaqueObject(value)) {
1242
+ if (isObject(value) && isHintOpaque(value)) {
1237
1243
  return vProp;
1238
1244
  }
1239
1245
  const fnOrComputed = (_a = node.functions) == null ? void 0 : _a.get(p);
@@ -1934,14 +1940,14 @@ function setToObservable(node, value) {
1934
1940
  return value;
1935
1941
  }
1936
1942
  function recursivelyAutoActivate(obj, node) {
1937
- if (!node.recursivelyAutoActivated && (isObject(obj) || isArray(obj)) && !isOpaqueObject(obj)) {
1943
+ if (!node.recursivelyAutoActivated && (isObject(obj) || isArray(obj)) && !isHintOpaque(obj)) {
1938
1944
  node.recursivelyAutoActivated = true;
1939
1945
  const pathStack = [];
1940
1946
  const getNodeAtPath2 = () => {
1941
1947
  var _a;
1942
1948
  let childNode = node;
1943
1949
  for (let i = 0; i < pathStack.length; i++) {
1944
- const { key } = pathStack[i];
1950
+ const key = pathStack[i];
1945
1951
  const value = (_a = getNodeValue(childNode)) == null ? void 0 : _a[key];
1946
1952
  childNode = getChildNode(childNode, key, isFunction(value) ? value : void 0);
1947
1953
  peekInternal(childNode);
@@ -1953,7 +1959,7 @@ function recursivelyAutoActivate(obj, node) {
1953
1959
  }
1954
1960
  function recursivelyAutoActivateInner(obj, pathStack, getNodeAtPath2) {
1955
1961
  var _a;
1956
- if ((isObject(obj) || isArray(obj)) && !isOpaqueObject(obj)) {
1962
+ if ((isObject(obj) || isArray(obj)) && !isHintOpaque(obj) && !isHintPlain(obj)) {
1957
1963
  for (const key in obj) {
1958
1964
  if (hasOwnProperty.call(obj, key)) {
1959
1965
  const value = obj[key];
@@ -1972,7 +1978,7 @@ function recursivelyAutoActivateInner(obj, pathStack, getNodeAtPath2) {
1972
1978
  }
1973
1979
  }
1974
1980
  if (typeof value === "object") {
1975
- pathStack.push({ key, value });
1981
+ pathStack.push(key);
1976
1982
  recursivelyAutoActivateInner(value, pathStack, getNodeAtPath2);
1977
1983
  pathStack.pop();
1978
1984
  }
package/config.mjs CHANGED
@@ -59,15 +59,19 @@ var symbolIterator = Symbol.iterator;
59
59
  var symbolGetNode = Symbol("getNode");
60
60
  var symbolDelete = /* @__PURE__ */ Symbol("delete");
61
61
  var symbolOpaque = Symbol("opaque");
62
+ var symbolPlain = Symbol("plain");
62
63
  var optimized = Symbol("optimized");
63
64
  var symbolLinked = Symbol("linked");
64
65
  var globalState = {
65
66
  pendingNodes: /* @__PURE__ */ new Map(),
66
67
  dirtyNodes: /* @__PURE__ */ new Set()
67
68
  };
68
- function isOpaqueObject(value) {
69
+ function isHintOpaque(value) {
69
70
  return value && (value[symbolOpaque] || value["$$typeof"]);
70
71
  }
72
+ function isHintPlain(value) {
73
+ return value && value[symbolPlain];
74
+ }
71
75
  function getPathType(value) {
72
76
  return isArray(value) ? "array" : isMap(value) ? "map" : value instanceof Set ? "set" : "object";
73
77
  }
@@ -253,12 +257,14 @@ function setAtPath(obj, path, pathTypes, value, mode, fullObj, restore) {
253
257
  if (path.length > 0) {
254
258
  for (let i = 0; i < path.length; i++) {
255
259
  p = path[i];
256
- if (o[p] === symbolDelete) {
260
+ const map = isMap(o);
261
+ let child = o ? map ? o.get(p) : o[p] : void 0;
262
+ if (child === symbolDelete) {
257
263
  return obj;
258
- } else if (o[p] === void 0 && value === void 0 && i === path.length - 1) {
264
+ } else if (child === void 0 && value === void 0 && i === path.length - 1) {
259
265
  return obj;
260
- } else if (i < path.length - 1 && (o[p] === void 0 || o[p] === null)) {
261
- const child = initializePathType(pathTypes[i]);
266
+ } else if (i < path.length - 1 && (child === void 0 || child === null)) {
267
+ child = initializePathType(pathTypes[i]);
262
268
  if (isMap(o)) {
263
269
  o.set(p, child);
264
270
  } else {
@@ -266,7 +272,7 @@ function setAtPath(obj, path, pathTypes, value, mode, fullObj, restore) {
266
272
  }
267
273
  }
268
274
  if (i < path.length - 1) {
269
- o = isMap(o) ? o.get(p) : o[p];
275
+ o = child;
270
276
  }
271
277
  }
272
278
  }
@@ -995,7 +1001,7 @@ function updateNodes(parent, obj, prevValue) {
995
1001
  }
996
1002
  __devUpdateNodes.add(obj);
997
1003
  }
998
- if (isObject(obj) && isOpaqueObject(obj) || isObject(prevValue) && isOpaqueObject(prevValue)) {
1004
+ if (isObject(obj) && isHintOpaque(obj) || isObject(prevValue) && isHintOpaque(prevValue)) {
999
1005
  const isDiff = obj !== prevValue;
1000
1006
  if (isDiff) {
1001
1007
  if (parent.listeners || parent.listenersImmediate) {
@@ -1231,7 +1237,7 @@ var proxyHandler = {
1231
1237
  return property.get(node);
1232
1238
  }
1233
1239
  let vProp = value == null ? void 0 : value[p];
1234
- if (isObject(value) && isOpaqueObject(value)) {
1240
+ if (isObject(value) && isHintOpaque(value)) {
1235
1241
  return vProp;
1236
1242
  }
1237
1243
  const fnOrComputed = (_a = node.functions) == null ? void 0 : _a.get(p);
@@ -1932,14 +1938,14 @@ function setToObservable(node, value) {
1932
1938
  return value;
1933
1939
  }
1934
1940
  function recursivelyAutoActivate(obj, node) {
1935
- if (!node.recursivelyAutoActivated && (isObject(obj) || isArray(obj)) && !isOpaqueObject(obj)) {
1941
+ if (!node.recursivelyAutoActivated && (isObject(obj) || isArray(obj)) && !isHintOpaque(obj)) {
1936
1942
  node.recursivelyAutoActivated = true;
1937
1943
  const pathStack = [];
1938
1944
  const getNodeAtPath2 = () => {
1939
1945
  var _a;
1940
1946
  let childNode = node;
1941
1947
  for (let i = 0; i < pathStack.length; i++) {
1942
- const { key } = pathStack[i];
1948
+ const key = pathStack[i];
1943
1949
  const value = (_a = getNodeValue(childNode)) == null ? void 0 : _a[key];
1944
1950
  childNode = getChildNode(childNode, key, isFunction(value) ? value : void 0);
1945
1951
  peekInternal(childNode);
@@ -1951,7 +1957,7 @@ function recursivelyAutoActivate(obj, node) {
1951
1957
  }
1952
1958
  function recursivelyAutoActivateInner(obj, pathStack, getNodeAtPath2) {
1953
1959
  var _a;
1954
- if ((isObject(obj) || isArray(obj)) && !isOpaqueObject(obj)) {
1960
+ if ((isObject(obj) || isArray(obj)) && !isHintOpaque(obj) && !isHintPlain(obj)) {
1955
1961
  for (const key in obj) {
1956
1962
  if (hasOwnProperty.call(obj, key)) {
1957
1963
  const value = obj[key];
@@ -1970,7 +1976,7 @@ function recursivelyAutoActivateInner(obj, pathStack, getNodeAtPath2) {
1970
1976
  }
1971
1977
  }
1972
1978
  if (typeof value === "object") {
1973
- pathStack.push({ key, value });
1979
+ pathStack.push(key);
1974
1980
  recursivelyAutoActivateInner(value, pathStack, getNodeAtPath2);
1975
1981
  pathStack.pop();
1976
1982
  }
package/index.d.mts CHANGED
@@ -1,5 +1,10 @@
1
- import { N as NodeInfo, O as Observable, T as TrackingType, G as GetOptions, C as Change, R as RecursiveValueOrFunction, a as ObservableEvent, S as Selector, b as ObserveEvent, c as ObservableParam, d as OpaqueObject, e as TypeAtPath, L as LinkedOptions, f as Linked, g as ObservablePrimitive, h as ObserveOptions, i as ObserveEventCallback, j as ObservableSyncState, k as ListenerParams, l as TrackingNode, m as clone, n as ensureNodeValue, o as findIDKey, p as getNode, q as getNodeValue, r as getPathType, U as UpdateFn, s as safeParse, t as safeStringify, u as setNodeValue, v as TrackingState } from './observableInterfaces-CZR3_8mM.mjs';
2
- export { A as ArrayValue, J as ChildNodeInfo, B as ClassConstructor, Q as GetMode, a1 as ImmutableObservableBase, x as ListenerFn, H as NodeListener, F as NotPrimitive, a0 as ObservableBoolean, D as ObservableListenerDispose, a2 as ObservableObject, $ as ObservableObjectFns, E as ObservableRoot, Y as ObservableState, X as ObservableSyncStateBase, z as ObservableValue, P as Primitive, y as RecordValue, _ as RemoveObservables, Z as RetryOptions, I as RootNodeInfo, K as SetParams, V as UpdateFnParams, W as WaitForSet, M as WaitForSetFnParams, w as isObservable } from './observableInterfaces-CZR3_8mM.mjs';
1
+ import { O as OpaqueObject, P as PlainObject, N as NodeInfo, a as Observable, T as TrackingType, G as GetOptions, C as Change, R as RecursiveValueOrFunction, b as ObservableEvent, S as Selector, c as ObserveEvent, d as ObservableParam, e as TypeAtPath, L as LinkedOptions, f as Linked, g as ObservablePrimitive, h as ObserveOptions, i as ObserveEventCallback, j as ObservableSyncState, k as ListenerParams, l as TrackingNode, m as clone, n as ensureNodeValue, o as findIDKey, p as getNode, q as getNodeValue, r as getPathType, U as UpdateFn, s as safeParse, t as safeStringify, u as setNodeValue, v as TrackingState } from './observableInterfaces-CgBddSU6.mjs';
2
+ export { A as ArrayValue, K as ChildNodeInfo, B as ClassConstructor, V as GetMode, a2 as ImmutableObservableBase, x as ListenerFn, I as NodeListener, H as NotPrimitive, a1 as ObservableBoolean, D as ObservableListenerDispose, a3 as ObservableObject, a0 as ObservableObjectFns, E as ObservableRoot, Z as ObservableState, Y as ObservableSyncStateBase, z as ObservableValue, F as Primitive, y as RecordValue, $ as RemoveObservables, _ as RetryOptions, J as RootNodeInfo, M as SetParams, X as UpdateFnParams, W as WaitForSet, Q as WaitForSetFnParams, w as isObservable } from './observableInterfaces-CgBddSU6.mjs';
3
+
4
+ declare const ObservableHint: {
5
+ opaque: <T extends object>(value: T) => OpaqueObject<T>;
6
+ plain: <T extends object>(value: T) => PlainObject<T>;
7
+ };
3
8
 
4
9
  declare function getProxy(node: NodeInfo, p?: string, asFunction?: Function): Observable;
5
10
  declare function set(node: NodeInfo, newValue?: any): void;
@@ -37,6 +42,7 @@ declare const hasOwnProperty: (v: PropertyKey) => boolean;
37
42
  declare function isArray(obj: unknown): obj is Array<any>;
38
43
  declare function isString(obj: unknown): obj is string;
39
44
  declare function isObject(obj: unknown): obj is Record<any, any>;
45
+ declare function isPlainObject(obj: unknown): obj is Record<any, any>;
40
46
  declare function isFunction(obj: unknown): obj is Function;
41
47
  declare function isPrimitive(arg: unknown): arg is string | number | bigint | boolean | symbol;
42
48
  declare function isDate(obj: unknown): obj is Date;
@@ -44,6 +50,7 @@ declare function isSymbol(obj: unknown): obj is symbol;
44
50
  declare function isBoolean(obj: unknown): obj is boolean;
45
51
  declare function isPromise<T>(obj: unknown): obj is Promise<T>;
46
52
  declare function isMap(obj: unknown): obj is Map<any, any>;
53
+ declare function isSet(obj: unknown): obj is Set<any>;
47
54
  declare function isNumber(obj: unknown): obj is number;
48
55
  declare function isEmpty(obj: object): boolean;
49
56
  declare function isNullOrUndefined(value: any): value is undefined | null;
@@ -124,4 +131,4 @@ declare const internal: {
124
131
  };
125
132
  };
126
133
 
127
- export { Change, GetOptions, Linked, LinkedOptions, ListenerParams, NodeInfo, Observable, ObservableEvent, ObservableParam, ObservablePrimitive, ObservableSyncState, ObserveEvent, ObserveEventCallback, ObserveOptions, OpaqueObject, RecursiveValueOrFunction, Selector, TrackingNode, TrackingState, TrackingType, TypeAtPath, UpdateFn, applyChange, applyChanges, batch, beginBatch, computeSelector, computed, constructObjectWithPath, deconstructObjectWithPath, endBatch, event, getObservableIndex, hasOwnProperty, internal, isArray, isBoolean, isDate, isEmpty, isFunction, isMap, isNullOrUndefined, isNumber, isObject, isObservableValueReady, isObserved, isPrimitive, isPromise, isString, isSymbol, linked, mergeIntoObservable, observable, observablePrimitive, observe, opaqueObject, proxy, setAtPath, setSilently, shouldIgnoreUnobserved, syncState, trackSelector, when, whenReady };
134
+ export { Change, GetOptions, Linked, LinkedOptions, ListenerParams, NodeInfo, Observable, ObservableEvent, ObservableHint, ObservableParam, ObservablePrimitive, ObservableSyncState, ObserveEvent, ObserveEventCallback, ObserveOptions, OpaqueObject, PlainObject, RecursiveValueOrFunction, Selector, TrackingNode, TrackingState, TrackingType, TypeAtPath, UpdateFn, applyChange, applyChanges, batch, beginBatch, computeSelector, computed, constructObjectWithPath, deconstructObjectWithPath, endBatch, event, getObservableIndex, hasOwnProperty, internal, isArray, isBoolean, isDate, isEmpty, isFunction, isMap, isNullOrUndefined, isNumber, isObject, isObservableValueReady, isObserved, isPlainObject, isPrimitive, isPromise, isSet, isString, isSymbol, linked, mergeIntoObservable, observable, observablePrimitive, observe, opaqueObject, proxy, setAtPath, setSilently, shouldIgnoreUnobserved, syncState, trackSelector, when, whenReady };
package/index.d.ts CHANGED
@@ -1,5 +1,10 @@
1
- import { N as NodeInfo, O as Observable, T as TrackingType, G as GetOptions, C as Change, R as RecursiveValueOrFunction, a as ObservableEvent, S as Selector, b as ObserveEvent, c as ObservableParam, d as OpaqueObject, e as TypeAtPath, L as LinkedOptions, f as Linked, g as ObservablePrimitive, h as ObserveOptions, i as ObserveEventCallback, j as ObservableSyncState, k as ListenerParams, l as TrackingNode, m as clone, n as ensureNodeValue, o as findIDKey, p as getNode, q as getNodeValue, r as getPathType, U as UpdateFn, s as safeParse, t as safeStringify, u as setNodeValue, v as TrackingState } from './observableInterfaces-CZR3_8mM.js';
2
- export { A as ArrayValue, J as ChildNodeInfo, B as ClassConstructor, Q as GetMode, a1 as ImmutableObservableBase, x as ListenerFn, H as NodeListener, F as NotPrimitive, a0 as ObservableBoolean, D as ObservableListenerDispose, a2 as ObservableObject, $ as ObservableObjectFns, E as ObservableRoot, Y as ObservableState, X as ObservableSyncStateBase, z as ObservableValue, P as Primitive, y as RecordValue, _ as RemoveObservables, Z as RetryOptions, I as RootNodeInfo, K as SetParams, V as UpdateFnParams, W as WaitForSet, M as WaitForSetFnParams, w as isObservable } from './observableInterfaces-CZR3_8mM.js';
1
+ import { O as OpaqueObject, P as PlainObject, N as NodeInfo, a as Observable, T as TrackingType, G as GetOptions, C as Change, R as RecursiveValueOrFunction, b as ObservableEvent, S as Selector, c as ObserveEvent, d as ObservableParam, e as TypeAtPath, L as LinkedOptions, f as Linked, g as ObservablePrimitive, h as ObserveOptions, i as ObserveEventCallback, j as ObservableSyncState, k as ListenerParams, l as TrackingNode, m as clone, n as ensureNodeValue, o as findIDKey, p as getNode, q as getNodeValue, r as getPathType, U as UpdateFn, s as safeParse, t as safeStringify, u as setNodeValue, v as TrackingState } from './observableInterfaces-CgBddSU6.js';
2
+ export { A as ArrayValue, K as ChildNodeInfo, B as ClassConstructor, V as GetMode, a2 as ImmutableObservableBase, x as ListenerFn, I as NodeListener, H as NotPrimitive, a1 as ObservableBoolean, D as ObservableListenerDispose, a3 as ObservableObject, a0 as ObservableObjectFns, E as ObservableRoot, Z as ObservableState, Y as ObservableSyncStateBase, z as ObservableValue, F as Primitive, y as RecordValue, $ as RemoveObservables, _ as RetryOptions, J as RootNodeInfo, M as SetParams, X as UpdateFnParams, W as WaitForSet, Q as WaitForSetFnParams, w as isObservable } from './observableInterfaces-CgBddSU6.js';
3
+
4
+ declare const ObservableHint: {
5
+ opaque: <T extends object>(value: T) => OpaqueObject<T>;
6
+ plain: <T extends object>(value: T) => PlainObject<T>;
7
+ };
3
8
 
4
9
  declare function getProxy(node: NodeInfo, p?: string, asFunction?: Function): Observable;
5
10
  declare function set(node: NodeInfo, newValue?: any): void;
@@ -37,6 +42,7 @@ declare const hasOwnProperty: (v: PropertyKey) => boolean;
37
42
  declare function isArray(obj: unknown): obj is Array<any>;
38
43
  declare function isString(obj: unknown): obj is string;
39
44
  declare function isObject(obj: unknown): obj is Record<any, any>;
45
+ declare function isPlainObject(obj: unknown): obj is Record<any, any>;
40
46
  declare function isFunction(obj: unknown): obj is Function;
41
47
  declare function isPrimitive(arg: unknown): arg is string | number | bigint | boolean | symbol;
42
48
  declare function isDate(obj: unknown): obj is Date;
@@ -44,6 +50,7 @@ declare function isSymbol(obj: unknown): obj is symbol;
44
50
  declare function isBoolean(obj: unknown): obj is boolean;
45
51
  declare function isPromise<T>(obj: unknown): obj is Promise<T>;
46
52
  declare function isMap(obj: unknown): obj is Map<any, any>;
53
+ declare function isSet(obj: unknown): obj is Set<any>;
47
54
  declare function isNumber(obj: unknown): obj is number;
48
55
  declare function isEmpty(obj: object): boolean;
49
56
  declare function isNullOrUndefined(value: any): value is undefined | null;
@@ -124,4 +131,4 @@ declare const internal: {
124
131
  };
125
132
  };
126
133
 
127
- export { Change, GetOptions, Linked, LinkedOptions, ListenerParams, NodeInfo, Observable, ObservableEvent, ObservableParam, ObservablePrimitive, ObservableSyncState, ObserveEvent, ObserveEventCallback, ObserveOptions, OpaqueObject, RecursiveValueOrFunction, Selector, TrackingNode, TrackingState, TrackingType, TypeAtPath, UpdateFn, applyChange, applyChanges, batch, beginBatch, computeSelector, computed, constructObjectWithPath, deconstructObjectWithPath, endBatch, event, getObservableIndex, hasOwnProperty, internal, isArray, isBoolean, isDate, isEmpty, isFunction, isMap, isNullOrUndefined, isNumber, isObject, isObservableValueReady, isObserved, isPrimitive, isPromise, isString, isSymbol, linked, mergeIntoObservable, observable, observablePrimitive, observe, opaqueObject, proxy, setAtPath, setSilently, shouldIgnoreUnobserved, syncState, trackSelector, when, whenReady };
134
+ export { Change, GetOptions, Linked, LinkedOptions, ListenerParams, NodeInfo, Observable, ObservableEvent, ObservableHint, ObservableParam, ObservablePrimitive, ObservableSyncState, ObserveEvent, ObserveEventCallback, ObserveOptions, OpaqueObject, PlainObject, RecursiveValueOrFunction, Selector, TrackingNode, TrackingState, TrackingType, TypeAtPath, UpdateFn, applyChange, applyChanges, batch, beginBatch, computeSelector, computed, constructObjectWithPath, deconstructObjectWithPath, endBatch, event, getObservableIndex, hasOwnProperty, internal, isArray, isBoolean, isDate, isEmpty, isFunction, isMap, isNullOrUndefined, isNumber, isObject, isObservableValueReady, isObserved, isPlainObject, isPrimitive, isPromise, isSet, isString, isSymbol, linked, mergeIntoObservable, observable, observablePrimitive, observe, opaqueObject, proxy, setAtPath, setSilently, shouldIgnoreUnobserved, syncState, trackSelector, when, whenReady };
package/index.js CHANGED
@@ -11,6 +11,9 @@ function isString(obj) {
11
11
  function isObject(obj) {
12
12
  return !!obj && typeof obj === "object" && !(obj instanceof Date) && !isArray(obj);
13
13
  }
14
+ function isPlainObject(obj) {
15
+ return isObject(obj) && obj.constructor === Object;
16
+ }
14
17
  function isFunction(obj) {
15
18
  return typeof obj === "function";
16
19
  }
@@ -71,15 +74,19 @@ var symbolIterator = Symbol.iterator;
71
74
  var symbolGetNode = Symbol("getNode");
72
75
  var symbolDelete = /* @__PURE__ */ Symbol("delete");
73
76
  var symbolOpaque = Symbol("opaque");
77
+ var symbolPlain = Symbol("plain");
74
78
  var optimized = Symbol("optimized");
75
79
  var symbolLinked = Symbol("linked");
76
80
  var globalState = {
77
81
  pendingNodes: /* @__PURE__ */ new Map(),
78
82
  dirtyNodes: /* @__PURE__ */ new Set()
79
83
  };
80
- function isOpaqueObject(value) {
84
+ function isHintOpaque(value) {
81
85
  return value && (value[symbolOpaque] || value["$$typeof"]);
82
86
  }
87
+ function isHintPlain(value) {
88
+ return value && value[symbolPlain];
89
+ }
83
90
  function getPathType(value) {
84
91
  return isArray(value) ? "array" : isMap(value) ? "map" : value instanceof Set ? "set" : "object";
85
92
  }
@@ -251,6 +258,27 @@ function equals(a, b) {
251
258
  return a === b || isDate(a) && isDate(b) && +a === +b;
252
259
  }
253
260
 
261
+ // src/ObservableHint.ts
262
+ function addSymbol(value, symbol) {
263
+ if (value) {
264
+ Object.defineProperty(value, symbol, {
265
+ value: true,
266
+ enumerable: false,
267
+ writable: true,
268
+ configurable: true
269
+ });
270
+ }
271
+ return value;
272
+ }
273
+ var ObservableHint = {
274
+ opaque: function opaqueObject(value) {
275
+ return addSymbol(value, symbolOpaque);
276
+ },
277
+ plain: function plainObject(value) {
278
+ return addSymbol(value, symbolPlain);
279
+ }
280
+ };
281
+
254
282
  // src/helpers.ts
255
283
  function computeSelector(selector, e, retainObservable) {
256
284
  let c = selector;
@@ -264,7 +292,10 @@ function getObservableIndex(value$) {
264
292
  const n = +node.key;
265
293
  return isNumber(n) ? n : -1;
266
294
  }
267
- function opaqueObject(value) {
295
+ function opaqueObject2(value) {
296
+ if (process.env.NODE_ENV === "development") {
297
+ console.warn("[legend-state]: In version 3.0 opaqueObject is moved to ObservableHint.opaque");
298
+ }
268
299
  if (value) {
269
300
  value[symbolOpaque] = true;
270
301
  }
@@ -281,16 +312,23 @@ function setAtPath(obj, path, pathTypes, value, mode, fullObj, restore) {
281
312
  let oFull = fullObj;
282
313
  for (let i = 0; i < path.length; i++) {
283
314
  p = path[i];
284
- if (o[p] === symbolDelete) {
315
+ const map = isMap(o);
316
+ let child = o ? map ? o.get(p) : o[p] : void 0;
317
+ const fullChild = oFull ? map ? oFull.get(p) : oFull[p] : void 0;
318
+ if (child === symbolDelete) {
285
319
  if (oFull) {
286
- o[p] = oFull[p];
287
- restore == null ? void 0 : restore(path.slice(0, i + 1), o[p]);
320
+ if (map) {
321
+ o.set(p, fullChild);
322
+ } else {
323
+ o[p] = fullChild;
324
+ }
325
+ restore == null ? void 0 : restore(path.slice(0, i + 1), fullChild);
288
326
  }
289
327
  return obj;
290
- } else if (o[p] === void 0 && value === void 0 && i === path.length - 1) {
328
+ } else if (child === void 0 && value === void 0 && i === path.length - 1) {
291
329
  return obj;
292
- } else if (i < path.length - 1 && (o[p] === void 0 || o[p] === null)) {
293
- const child = initializePathType(pathTypes[i]);
330
+ } else if (i < path.length - 1 && (child === void 0 || child === null)) {
331
+ child = initializePathType(pathTypes[i]);
294
332
  if (isMap(o)) {
295
333
  o.set(p, child);
296
334
  } else {
@@ -298,9 +336,9 @@ function setAtPath(obj, path, pathTypes, value, mode, fullObj, restore) {
298
336
  }
299
337
  }
300
338
  if (i < path.length - 1) {
301
- o = isMap(o) ? o.get(p) : o[p];
339
+ o = child;
302
340
  if (oFull) {
303
- oFull = oFull[p];
341
+ oFull = fullChild;
304
342
  }
305
343
  }
306
344
  }
@@ -330,18 +368,12 @@ function mergeIntoObservable(target, ...sources) {
330
368
  }
331
369
  beginBatch();
332
370
  for (let i = 0; i < sources.length; i++) {
333
- _mergeIntoObservable(
334
- target,
335
- sources[i],
336
- /*assign*/
337
- i < sources.length - 1,
338
- 0
339
- );
371
+ _mergeIntoObservable(target, sources[i], 0);
340
372
  }
341
373
  endBatch();
342
374
  return target;
343
375
  }
344
- function _mergeIntoObservable(target, source, assign2, levelsDeep) {
376
+ function _mergeIntoObservable(target, source, levelsDeep) {
345
377
  if (isObservable(source)) {
346
378
  source = source.peek();
347
379
  }
@@ -367,7 +399,7 @@ function _mergeIntoObservable(target, source, assign2, levelsDeep) {
367
399
  if (levelsDeep > 0 && isEmpty(sourceValue)) {
368
400
  targetChild.set(sourceValue);
369
401
  }
370
- _mergeIntoObservable(targetChild, sourceValue, false, levelsDeep + 1);
402
+ _mergeIntoObservable(targetChild, sourceValue, levelsDeep + 1);
371
403
  } else {
372
404
  targetChild.set(sourceValue);
373
405
  }
@@ -437,7 +469,7 @@ function deepMerge(target, ...sources) {
437
469
  let result = isArray(target) ? [...target] : { ...target };
438
470
  for (let i = 0; i < sources.length; i++) {
439
471
  const obj2 = sources[i];
440
- if (isObject(obj2) || isArray(obj2)) {
472
+ if (isPlainObject(obj2) || isArray(obj2)) {
441
473
  const objTarget = obj2;
442
474
  for (const key in objTarget) {
443
475
  if (hasOwnProperty.call(objTarget, key)) {
@@ -1153,7 +1185,7 @@ function updateNodes(parent, obj, prevValue) {
1153
1185
  }
1154
1186
  __devUpdateNodes.add(obj);
1155
1187
  }
1156
- if (isObject(obj) && isOpaqueObject(obj) || isObject(prevValue) && isOpaqueObject(prevValue)) {
1188
+ if (isObject(obj) && isHintOpaque(obj) || isObject(prevValue) && isHintOpaque(prevValue)) {
1157
1189
  const isDiff = obj !== prevValue;
1158
1190
  if (isDiff) {
1159
1191
  if (parent.listeners || parent.listenersImmediate) {
@@ -1389,7 +1421,7 @@ var proxyHandler = {
1389
1421
  return property.get(node);
1390
1422
  }
1391
1423
  let vProp = value == null ? void 0 : value[p];
1392
- if (isObject(value) && isOpaqueObject(value)) {
1424
+ if (isObject(value) && isHintOpaque(value)) {
1393
1425
  return vProp;
1394
1426
  }
1395
1427
  const fnOrComputed = (_a = node.functions) == null ? void 0 : _a.get(p);
@@ -2090,14 +2122,14 @@ function setToObservable(node, value) {
2090
2122
  return value;
2091
2123
  }
2092
2124
  function recursivelyAutoActivate(obj, node) {
2093
- if (!node.recursivelyAutoActivated && (isObject(obj) || isArray(obj)) && !isOpaqueObject(obj)) {
2125
+ if (!node.recursivelyAutoActivated && (isObject(obj) || isArray(obj)) && !isHintOpaque(obj)) {
2094
2126
  node.recursivelyAutoActivated = true;
2095
2127
  const pathStack = [];
2096
2128
  const getNodeAtPath2 = () => {
2097
2129
  var _a;
2098
2130
  let childNode = node;
2099
2131
  for (let i = 0; i < pathStack.length; i++) {
2100
- const { key } = pathStack[i];
2132
+ const key = pathStack[i];
2101
2133
  const value = (_a = getNodeValue(childNode)) == null ? void 0 : _a[key];
2102
2134
  childNode = getChildNode(childNode, key, isFunction(value) ? value : void 0);
2103
2135
  peekInternal(childNode);
@@ -2109,7 +2141,7 @@ function recursivelyAutoActivate(obj, node) {
2109
2141
  }
2110
2142
  function recursivelyAutoActivateInner(obj, pathStack, getNodeAtPath2) {
2111
2143
  var _a;
2112
- if ((isObject(obj) || isArray(obj)) && !isOpaqueObject(obj)) {
2144
+ if ((isObject(obj) || isArray(obj)) && !isHintOpaque(obj) && !isHintPlain(obj)) {
2113
2145
  for (const key in obj) {
2114
2146
  if (hasOwnProperty.call(obj, key)) {
2115
2147
  const value = obj[key];
@@ -2128,7 +2160,7 @@ function recursivelyAutoActivateInner(obj, pathStack, getNodeAtPath2) {
2128
2160
  }
2129
2161
  }
2130
2162
  if (typeof value === "object") {
2131
- pathStack.push({ key, value });
2163
+ pathStack.push(key);
2132
2164
  recursivelyAutoActivateInner(value, pathStack, getNodeAtPath2);
2133
2165
  pathStack.pop();
2134
2166
  }
@@ -2229,21 +2261,23 @@ function proxy(get2, set2) {
2229
2261
  function syncState(obs) {
2230
2262
  const node = getNode(obs);
2231
2263
  if (!node.state) {
2232
- node.state = observable({
2233
- isPersistLoaded: false,
2234
- isLoaded: false,
2235
- isPersistEnabled: true,
2236
- isSyncEnabled: true,
2237
- isGetting: false,
2238
- isSetting: false,
2239
- numPendingGets: 0,
2240
- numPendingSets: 0,
2241
- syncCount: 0,
2242
- clearPersist: void 0,
2243
- reset: () => Promise.resolve(),
2244
- sync: () => Promise.resolve(),
2245
- getPendingChanges: () => ({})
2246
- });
2264
+ node.state = observable(
2265
+ ObservableHint.plain({
2266
+ isPersistLoaded: false,
2267
+ isLoaded: false,
2268
+ isPersistEnabled: true,
2269
+ isSyncEnabled: true,
2270
+ isGetting: false,
2271
+ isSetting: false,
2272
+ numPendingGets: 0,
2273
+ numPendingSets: 0,
2274
+ syncCount: 0,
2275
+ clearPersist: void 0,
2276
+ reset: () => Promise.resolve(),
2277
+ sync: () => Promise.resolve(),
2278
+ getPendingChanges: () => ({})
2279
+ })
2280
+ );
2247
2281
  }
2248
2282
  return node.state;
2249
2283
  }
@@ -2276,6 +2310,7 @@ var internal = {
2276
2310
  tracking
2277
2311
  };
2278
2312
 
2313
+ exports.ObservableHint = ObservableHint;
2279
2314
  exports.ObservablePrimitiveClass = ObservablePrimitiveClass;
2280
2315
  exports.applyChange = applyChange;
2281
2316
  exports.applyChanges = applyChanges;
@@ -2307,8 +2342,10 @@ exports.isObject = isObject;
2307
2342
  exports.isObservable = isObservable;
2308
2343
  exports.isObservableValueReady = isObservableValueReady;
2309
2344
  exports.isObserved = isObserved;
2345
+ exports.isPlainObject = isPlainObject;
2310
2346
  exports.isPrimitive = isPrimitive;
2311
2347
  exports.isPromise = isPromise;
2348
+ exports.isSet = isSet;
2312
2349
  exports.isString = isString;
2313
2350
  exports.isSymbol = isSymbol;
2314
2351
  exports.linked = linked;
@@ -2316,7 +2353,7 @@ exports.mergeIntoObservable = mergeIntoObservable;
2316
2353
  exports.observable = observable;
2317
2354
  exports.observablePrimitive = observablePrimitive;
2318
2355
  exports.observe = observe;
2319
- exports.opaqueObject = opaqueObject;
2356
+ exports.opaqueObject = opaqueObject2;
2320
2357
  exports.optimized = optimized;
2321
2358
  exports.proxy = proxy;
2322
2359
  exports.setAtPath = setAtPath;