Repository URL to install this package:
Version:
6.0.4 ▾
|
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const chain_able_deps_1 = require("chain-able-deps");
const getFunctions = (Klass) => {
const methods = chain_able_deps_1.props(Klass);
const names = [];
for (let index = 0; index < methods.length; index++) {
const method = methods[index];
if (chain_able_deps_1.isFunction(Klass[method])) {
names.push(method);
}
}
return names;
};
exports.getFunctions = getFunctions;
// @TODO in wrap
// @TODO to avoid `new` errors
const constructIfNeeded = (Klass) => {
const KlassConstructor = new Klass();
return KlassConstructor;
};
const constructAndCall = chain_able_deps_1.curry(2, (Klass, method) => {
const instance = constructIfNeeded(Klass);
return chain_able_deps_1.bind(instance[method], instance);
});
const hoistStatics = (Klass) => {
const scopedMethod = constructAndCall(Klass);
for (let method in Klass.prototype) {
Klass[method] = scopedMethod(method);
}
return Klass;
};
exports.hoistStatics = hoistStatics;
// @TODO just curry `mapObjVals` ?
const updateObjProps = chain_able_deps_1.curry(3, (Klass, methods, fn) => {
// const destucturAble = {}
// destucturAble[method]
for (let index = 0; index < methods.length; index++) {
const method = methods[index];
Klass[method] = fn(Klass[method], method, index);
}
return Klass;
});
const overStaticMethods = chain_able_deps_1.curry(2, (Klass, fn) => {
const methods = getFunctions(Klass);
return updateObjProps(Klass, methods, fn);
});
exports.overStaticMethods = overStaticMethods;
// @TODO safety
const getMethods = chain_able_deps_1.pipe(chain_able_deps_1.getPrototypeOf, getFunctions);
exports.getMethods = getMethods;
const getStaticMethods = getFunctions;
exports.getStaticMethods = getStaticMethods;
const overMethods = chain_able_deps_1.curry(2, (Klass, fn) => {
const methods = getMethods(Klass);
return updateObjProps(Klass, methods, fn);
});
exports.overMethods = overMethods;
//# sourceMappingURL=Klass.js.map