@formily/reactive
Version:
> Web Reactive Library Like Mobx
131 lines • 4.62 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.createBoundaryAnnotation = exports.createBindFunction = exports.createBoundaryFunction = exports.getObservableMaker = exports.createAnnotation = exports.createObservable = void 0;
var checkers_1 = require("./checkers");
var environment_1 = require("./environment");
var handlers_1 = require("./handlers");
var tree_1 = require("./tree");
var externals_1 = require("./externals");
var createNormalProxy = function (target, shallow) {
var proxy = new Proxy(target, handlers_1.baseHandlers);
environment_1.ProxyRaw.set(proxy, target);
if (shallow) {
environment_1.RawShallowProxy.set(target, proxy);
}
else {
environment_1.RawProxy.set(target, proxy);
}
return proxy;
};
var createCollectionProxy = function (target, shallow) {
var proxy = new Proxy(target, handlers_1.collectionHandlers);
environment_1.ProxyRaw.set(proxy, target);
if (shallow) {
environment_1.RawShallowProxy.set(target, proxy);
}
else {
environment_1.RawProxy.set(target, proxy);
}
return proxy;
};
var createShallowProxy = function (target) {
if ((0, checkers_1.isNormalType)(target))
return createNormalProxy(target, true);
if ((0, checkers_1.isCollectionType)(target))
return createCollectionProxy(target, true);
// never reach
return target;
};
var createObservable = function (target, key, value, shallow) {
if (typeof value !== 'object')
return value;
var raw = environment_1.ProxyRaw.get(value);
if (!!raw) {
var node = (0, tree_1.getDataNode)(raw);
if (!node.target)
node.target = target;
node.key = key;
return value;
}
if (!(0, externals_1.isSupportObservable)(value))
return value;
if (target) {
var parentRaw = environment_1.ProxyRaw.get(target) || target;
var isShallowParent = environment_1.RawShallowProxy.get(parentRaw);
if (isShallowParent)
return value;
}
(0, tree_1.buildDataTree)(target, key, value);
if (shallow)
return createShallowProxy(value);
if ((0, checkers_1.isNormalType)(value))
return createNormalProxy(value);
if ((0, checkers_1.isCollectionType)(value))
return createCollectionProxy(value);
// never reach
return value;
};
exports.createObservable = createObservable;
var createAnnotation = function (maker) {
var annotation = function (target) {
return maker({ value: target });
};
if ((0, checkers_1.isFn)(maker)) {
annotation[environment_1.MakeObModelSymbol] = maker;
}
return annotation;
};
exports.createAnnotation = createAnnotation;
var getObservableMaker = function (target) {
if (target[environment_1.MakeObModelSymbol]) {
if (!target[environment_1.MakeObModelSymbol][environment_1.MakeObModelSymbol]) {
return target[environment_1.MakeObModelSymbol];
}
return (0, exports.getObservableMaker)(target[environment_1.MakeObModelSymbol]);
}
};
exports.getObservableMaker = getObservableMaker;
var createBoundaryFunction = function (start, end) {
function boundary(fn) {
var results;
try {
start();
if ((0, checkers_1.isFn)(fn)) {
results = fn();
}
}
finally {
end();
}
return results;
}
boundary.bound = (0, exports.createBindFunction)(boundary);
return boundary;
};
exports.createBoundaryFunction = createBoundaryFunction;
var createBindFunction = function (boundary) {
function bind(callback, context) {
return (function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
return boundary(function () { return callback.apply(context, args); });
});
}
return bind;
};
exports.createBindFunction = createBindFunction;
var createBoundaryAnnotation = function (start, end) {
var boundary = (0, exports.createBoundaryFunction)(start, end);
var annotation = (0, exports.createAnnotation)(function (_a) {
var target = _a.target, key = _a.key;
target[key] = boundary.bound(target[key], target);
return target;
});
boundary[environment_1.MakeObModelSymbol] = annotation;
boundary.bound[environment_1.MakeObModelSymbol] = annotation;
return boundary;
};
exports.createBoundaryAnnotation = createBoundaryAnnotation;
//# sourceMappingURL=internals.js.map
;