| Server IP : 34.87.99.72 / Your IP : 216.73.217.31 Web Server : Apache/2.4.46 (Unix) OpenSSL/1.1.1n System : Linux zlock-bitnami-lamp-prod-v2-vm 4.19.0-16-cloud-amd64 #1 SMP Debian 4.19.181-1 (2021-03-19) x86_64 User : bitnami ( 1000) PHP Version : 7.4.18 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : OFF Directory : /opt/bitnami/nami/node_modules/nami-utils/lib/ |
Upload File : |
'use strict';
const _ = require('lodash');
function _delegateProperties(delegator, properties, target, options) {
options = _.defaults(options || {}, {outputFilter: null, enumerable: null, readOnly: false});
const outputFilter = _.isFunction(options.outputFilter) ? options.outputFilter : _.identity;
_.each(properties, function(value, key) {
let getter = null;
let setter = null;
const enumerable = options.enumerable || target.propertyIsEnumerable(value);
if (options.readOnly) {
setter = function() { throw new Error(`'${key}' is read-only`); };
} else {
setter = function(newVal) { target[value] = newVal; };
}
if (_.isFunction(target[value])) {
getter = () => _.flow(target[value], outputFilter).bind(target);
} else {
getter = function() { return outputFilter(target[value]); };
}
Object.defineProperty(delegator, key, {enumerable: enumerable, set: setter, get: getter});
});
}
function delegate(delegator, toDelegate, target, options) {
// TODO: We should also support inputFilter
options = _.defaults(options || {}, {outputFilter: null, enumerable: null, readOnly: false});
target = target || delegator;
let propertiesMap = {};
if (_.isString(toDelegate)) {
propertiesMap[toDelegate] = toDelegate;
} else if (_.isArray(toDelegate)) {
_.each(toDelegate, function(key) {
propertiesMap[key] = key;
});
} else if (_.isObject(toDelegate)) {
propertiesMap = toDelegate;
} else {
throw new Error(`Invalid delegation definition ${toDelegate}`);
}
_delegateProperties(delegator, propertiesMap, target, options);
}
module.exports = delegate;