Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
chain-able-lego / dist / Klass.js
Size: Mime:
"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