UNPKG

foop

Version:

interfaces that describe their intentions.

51 lines (48 loc) 4.05 kB
var keys = require('../util/keys') var isObj = require('../is/obj') var isFunction = require('../is/function') var isClass = require('../is/class') var construct = require('../fp/construct') var always = require('../fp/always') /** * @name toFunction * @since 5.0.0-beta.6 * @memberOf cast * * @param {Class|Object|*} x class or object to wrap * @param {Function|*} [onCall=null] not implemented, would be onConstruct/call * @return {Function} * * @see fp/construct * @see is/class * * @example * * class Eh {} * const eh = toFunction(Eh) * * isInstanceOf(eh(), Eh) * //=> true * */ function toFunction(x, onCall) { if ( onCall === void 0 ) onCall = null; if (isClass(x)) { return construct(x) } else if (isFunction(x)) { return construct(x.length, (x)) } else if (isObj(x)) { // could bind var first = keys(x).filter(function (key) { return isFunction(x[key]); })[0] if (isFunction(first)) { return first } else { return always(x) } } // else if (isObj(x)) return construct(x) else { return always(x) } } module.exports = toFunction //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9GdW5jdGlvbi5qcyIsInNvdXJjZXMiOlsidG9GdW5jdGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBrZXlzID0gcmVxdWlyZSgnLi4vdXRpbC9rZXlzJylcbmNvbnN0IGlzT2JqID0gcmVxdWlyZSgnLi4vaXMvb2JqJylcbmNvbnN0IGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9pcy9mdW5jdGlvbicpXG5jb25zdCBpc0NsYXNzID0gcmVxdWlyZSgnLi4vaXMvY2xhc3MnKVxuY29uc3QgY29uc3RydWN0ID0gcmVxdWlyZSgnLi4vZnAvY29uc3RydWN0JylcbmNvbnN0IGFsd2F5cyA9IHJlcXVpcmUoJy4uL2ZwL2Fsd2F5cycpXG5cbi8qKlxuICogQG5hbWUgdG9GdW5jdGlvblxuICogQHNpbmNlIDUuMC4wLWJldGEuNlxuICogQG1lbWJlck9mIGNhc3RcbiAqXG4gKiBAcGFyYW0gIHtDbGFzc3xPYmplY3R8Kn0geCBjbGFzcyBvciBvYmplY3QgdG8gd3JhcFxuICogQHBhcmFtICB7RnVuY3Rpb258Kn0gW29uQ2FsbD1udWxsXSBub3QgaW1wbGVtZW50ZWQsIHdvdWxkIGJlIG9uQ29uc3RydWN0L2NhbGxcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICpcbiAqIEBzZWUgZnAvY29uc3RydWN0XG4gKiBAc2VlIGlzL2NsYXNzXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAgICBjbGFzcyBFaCB7fVxuICogICAgY29uc3QgZWggPSB0b0Z1bmN0aW9uKEVoKVxuICpcbiAqICAgIGlzSW5zdGFuY2VPZihlaCgpLCBFaClcbiAqICAgIC8vPT4gdHJ1ZVxuICpcbiAqL1xuZnVuY3Rpb24gdG9GdW5jdGlvbih4LCBvbkNhbGwgPSBudWxsKSB7XG4gIGlmIChpc0NsYXNzKHgpKSB7XG4gICAgcmV0dXJuIGNvbnN0cnVjdCh4KVxuICB9XG4gIGVsc2UgaWYgKGlzRnVuY3Rpb24oeCkpIHtcbiAgICByZXR1cm4gY29uc3RydWN0KHgubGVuZ3RoLCAoeCkpXG4gIH1cbiAgZWxzZSBpZiAoaXNPYmooeCkpIHtcbiAgICAvLyBjb3VsZCBiaW5kXG4gICAgY29uc3QgZmlyc3QgPSBrZXlzKHgpLmZpbHRlcihrZXkgPT4gaXNGdW5jdGlvbih4W2tleV0pKVswXVxuICAgIGlmIChpc0Z1bmN0aW9uKGZpcnN0KSkgcmV0dXJuIGZpcnN0XG4gICAgZWxzZSByZXR1cm4gYWx3YXlzKHgpXG4gIH1cbiAgLy8gZWxzZSBpZiAoaXNPYmooeCkpIHJldHVybiBjb25zdHJ1Y3QoeClcbiAgZWxzZSB7XG4gICAgcmV0dXJuIGFsd2F5cyh4KVxuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IHRvRnVuY3Rpb25cbiJdLCJuYW1lcyI6WyJjb25zdCJdLCJtYXBwaW5ncyI6IkFBQUFBLEdBQUssQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQztBQUNwQ0EsR0FBSyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDO0FBQ2xDQSxHQUFLLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztBQUM1Q0EsR0FBSyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDO0FBQ3RDQSxHQUFLLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztBQUM1Q0EsR0FBSyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXVCdEMsU0FBUyxVQUFVLENBQUMsQ0FBQyxFQUFFLE1BQWEsRUFBRSxDQUFUO2lDQUFBLEdBQUcsSUFBSTtBQUFHO0VBQ3JDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO0lBQ2QsT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDO0dBQ3BCO09BQ0ksSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDdEIsT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0dBQ2hDO09BQ0ksSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7O0lBRWpCQSxHQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBQSxHQUFHLENBQUEsQ0FBQyxBQUFHLFNBQUEsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFBLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUQsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBQSxPQUFPLEtBQUssRUFBQTtTQUM5QixFQUFBLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFBO0dBQ3RCOztPQUVJO0lBQ0gsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDO0dBQ2pCO0NBQ0Y7QUFDRCxNQUFNLENBQUMsT0FBTyxHQUFHLFVBQVU7In0=