UNPKG

q-proxyable

Version:
133 lines (132 loc) 3.81 kB
"use strict"; 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;