UNPKG

typedux

Version:

Slightly adjusted Redux (awesome by default) for TS

79 lines 3.25 kB
(function (factory) { if (typeof module === "object" && typeof module.exports === "object") { var v = factory(require, exports); if (v !== undefined) module.exports = v; } else if (typeof define === "function" && define.amd) { define(["require", "exports", "./index", "@3fv/logger-proxy", "../dev"], factory); } })(function (require, exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.VariableProxy = void 0; var index_1 = require("./index"); var logger_proxy_1 = require("@3fv/logger-proxy"); var dev_1 = require("../dev"); var log = logger_proxy_1.getLogger(__filename); /** * A reloadable proxy between a target object * and the end consumer. * * Implemented specifically for hot loading */ var VariableProxy = /** @class */ (function () { function VariableProxy(target, ignoredProps) { if (ignoredProps === void 0) { ignoredProps = []; } this.ignoredProps = ignoredProps; this.proxy = {}; this.changeTarget(target); } VariableProxy.prototype.addProxies = function (o) { var _this = this; if (!o) return; var keys = Object.getOwnPropertyNames(o); if (log.isInfoEnabled() && dev_1.isDev) { log.info("Creating proxy for", keys); } keys.forEach(function (prop) { if (!/(constructor|prototype|__proto__)/.test(prop) && !_this.proxy[prop] && _this.ignoredProps.indexOf(prop) < 0) { if (index_1.isFunction(_this.target[prop])) { _this.proxy[prop] = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return _this.target[prop].apply(_this.target, args); }; } else { Object.defineProperty(_this.proxy, prop, { get: function () { return _this.target[prop]; }, set: function (newVal) { return _this.target[prop] = newVal; } }); } } }); }; VariableProxy.prototype.changeTarget = function (target) { this.target = target; // Update the proxy to ensure all methods are available // this.addProxies(_.get(this,'target')) var proto = index_1.getProperty(this, 'target.constructor.prototype'); while (proto) { this.addProxies(proto); proto = index_1.getProperty(proto, '__proto__'); } // this.addProxies(_.get(this,'target.__proto__')) }; return VariableProxy; }()); exports.VariableProxy = VariableProxy; }); //# sourceMappingURL=VariableProxy.js.map