@formily/reactive
Version:
> Web Reactive Library Like Mobx
35 lines • 1.33 kB
JavaScript
import { ObserverListeners } from './environment';
import { raw as getRaw } from './externals';
import { isFn } from './checkers';
import { DataChange, getDataNode } from './tree';
export var observe = function (target, observer, deep) {
if (deep === void 0) { deep = true; }
var addListener = function (target) {
var raw = getRaw(target);
var node = getDataNode(raw);
var listener = function (operation) {
var targetRaw = getRaw(operation.target);
var targetNode = getDataNode(targetRaw);
if (deep) {
if (node.contains(targetNode)) {
observer(new DataChange(operation, targetNode));
return;
}
}
if (node === targetNode ||
(node.targetRaw === targetRaw && node.key === operation.key)) {
observer(new DataChange(operation, targetNode));
}
};
if (node && isFn(observer)) {
ObserverListeners.add(listener);
}
return function () {
ObserverListeners.delete(listener);
};
};
if (target && typeof target !== 'object')
throw Error("Can not observe ".concat(typeof target, " type."));
return addListener(target);
};
//# sourceMappingURL=observe.js.map