@legendapp/state 3.0.0-alpha.34 → 3.0.0-alpha.35
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 +1 -1
- package/config.d.ts +1 -1
- package/config.js +18 -12
- package/config.mjs +18 -12
- package/index.d.mts +10 -3
- package/index.d.ts +10 -3
- package/index.js +79 -42
- package/index.mjs +76 -42
- package/{observableInterfaces-CZR3_8mM.d.mts → observableInterfaces-CgBddSU6.d.mts} +6 -2
- package/{observableInterfaces-CZR3_8mM.d.ts → observableInterfaces-CgBddSU6.d.ts} +6 -2
- package/package.json +1 -1
- package/persist-plugins/async-storage.d.mts +2 -2
- package/persist-plugins/async-storage.d.ts +2 -2
- package/persist-plugins/async-storage.js +3 -7
- package/persist-plugins/async-storage.mjs +3 -7
- package/persist-plugins/indexeddb.d.mts +2 -2
- package/persist-plugins/indexeddb.d.ts +2 -2
- package/persist-plugins/indexeddb.js +3 -7
- package/persist-plugins/indexeddb.mjs +3 -7
- package/persist-plugins/mmkv.d.mts +2 -2
- package/persist-plugins/mmkv.d.ts +2 -2
- package/persist-plugins/mmkv.js +3 -7
- package/persist-plugins/mmkv.mjs +3 -7
- package/sync-plugins/crud.js +6 -7
- package/sync-plugins/crud.mjs +7 -8
- package/sync-plugins/keel.d.mts +28 -28
- package/sync-plugins/keel.d.ts +28 -28
- package/sync-plugins/keel.js +106 -82
- package/sync-plugins/keel.mjs +108 -82
- package/sync.d.mts +11 -13
- package/sync.d.ts +11 -13
- package/sync.js +149 -130
- package/sync.mjs +150 -131
package/config.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { N as NodeInfo } from './observableInterfaces-
|
|
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-
|
|
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
|
|
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
|
-
|
|
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 (
|
|
266
|
+
} else if (child === void 0 && value === void 0 && i === path.length - 1) {
|
|
261
267
|
return obj;
|
|
262
|
-
} else if (i < path.length - 1 && (
|
|
263
|
-
|
|
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 =
|
|
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) &&
|
|
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) &&
|
|
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)) && !
|
|
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
|
|
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)) && !
|
|
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(
|
|
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
|
|
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
|
-
|
|
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 (
|
|
264
|
+
} else if (child === void 0 && value === void 0 && i === path.length - 1) {
|
|
259
265
|
return obj;
|
|
260
|
-
} else if (i < path.length - 1 && (
|
|
261
|
-
|
|
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 =
|
|
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) &&
|
|
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) &&
|
|
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)) && !
|
|
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
|
|
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)) && !
|
|
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(
|
|
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,
|
|
2
|
-
export { A as ArrayValue,
|
|
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,
|
|
2
|
-
export { A as ArrayValue,
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
287
|
-
|
|
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 (
|
|
328
|
+
} else if (child === void 0 && value === void 0 && i === path.length - 1) {
|
|
291
329
|
return obj;
|
|
292
|
-
} else if (i < path.length - 1 && (
|
|
293
|
-
|
|
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 =
|
|
339
|
+
o = child;
|
|
302
340
|
if (oFull) {
|
|
303
|
-
oFull =
|
|
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,
|
|
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,
|
|
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 (
|
|
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) &&
|
|
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) &&
|
|
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)) && !
|
|
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
|
|
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)) && !
|
|
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(
|
|
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
|
-
|
|
2234
|
-
|
|
2235
|
-
|
|
2236
|
-
|
|
2237
|
-
|
|
2238
|
-
|
|
2239
|
-
|
|
2240
|
-
|
|
2241
|
-
|
|
2242
|
-
|
|
2243
|
-
|
|
2244
|
-
|
|
2245
|
-
|
|
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 =
|
|
2356
|
+
exports.opaqueObject = opaqueObject2;
|
|
2320
2357
|
exports.optimized = optimized;
|
|
2321
2358
|
exports.proxy = proxy;
|
|
2322
2359
|
exports.setAtPath = setAtPath;
|