q-proxyable
Version:
normal utils by qianzhixiang
133 lines (132 loc) • 3.81 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.resetProto = exports.resetProtoType = exports.addHandlersToTarget = exports.getProxyableTarget = exports.getOriginTarget = exports.storeProxyableDataWithTarget = exports.addProxyableFlagToTarget = exports.setProto = exports.getProxyStore = exports.suportProxy = exports.isProxyable = void 0;
var common_1 = require("./common");
function isProxyable(value) {
if (value && typeof value === 'object') {
return !!value[common_1.SYMBOL_OF_PROXYABLE];
}
return false;
}
exports.isProxyable = isProxyable;
function suportProxy() {
return !!Proxy;
}
exports.suportProxy = suportProxy;
function getProxyStore(target) {
if (target) {
var store = target[common_1.SYMBOL_OF_PROXYABLE];
return store;
}
return null;
}
exports.getProxyStore = getProxyStore;
function setProto(target) {
var isArray = Array.isArray(target);
var originProto = target.__proto__;
var temp = isArray ? [] : {};
temp.__proto__ = originProto;
target.__proto__ = temp;
return temp;
}
exports.setProto = setProto;
function addProxyableFlagToTarget(target, option, isProxy) {
if (isProxy === void 0) { isProxy = suportProxy(); }
if (!target || !target.__proto__) {
return;
}
if (target.__proto__.hasOwnProperty[common_1.SYMBOL_OF_PROXYABLE]) {
return target[common_1.SYMBOL_OF_PROXYABLE];
}
var tempProto = setProto(target);
var handlers = {
get: [],
set: [],
delete: [],
};
for (var i in option) {
handlers[i].push(option[i]);
}
tempProto[common_1.SYMBOL_OF_PROXYABLE] = {
target: target,
handlers: handlers,
isProxy: isProxy,
};
return tempProto[common_1.SYMBOL_OF_PROXYABLE];
}
exports.addProxyableFlagToTarget = addProxyableFlagToTarget;
function storeProxyableDataWithTarget(target, proxy) {
if (target) {
var store = getProxyStore(target);
if (store) {
store.proxy = proxy;
}
}
}
exports.storeProxyableDataWithTarget = storeProxyableDataWithTarget;
function getOriginTarget(target) {
if (target) {
var store = getProxyStore(target);
if (store) {
return store.target;
}
}
return null;
}
exports.getOriginTarget = getOriginTarget;
function getProxyableTarget(target) {
if (target) {
var store = getProxyStore(target);
if (store) {
return store.proxy;
}
}
return null;
}
exports.getProxyableTarget = getProxyableTarget;
function addHandlersToTarget(target, option) {
if (target) {
if (option) {
var store = getProxyStore(target);
if (store) {
var handlers = store.handlers;
for (var i in option) {
handlers[i].push(option[i]);
}
}
}
}
}
exports.addHandlersToTarget = addHandlersToTarget;
function resetProtoType(t, m) {
if (m === void 0) { m = t; }
var prototype = t.prototype;
var Temp = function () { };
Temp.prototype = prototype;
try {
m.prototype = new Temp();
}
catch (e) {
console.log(e);
}
return m.prototype;
}
exports.resetProtoType = resetProtoType;
function hasProto(t) {
return t && t.__proto__;
}
function resetProto(m) {
if (!hasProto(m)) {
return;
}
var Temp = function () { };
Temp.prototype = m.__proto__;
try {
m.__proto__ = new Temp();
}
catch (e) {
console.log(e);
}
return m.__proto__;
}
exports.resetProto = resetProto;
;