typedux
Version:
Slightly adjusted Redux (awesome by default) for TS
79 lines • 3.25 kB
JavaScript
(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