UNPKG

foop

Version:

interfaces that describe their intentions.

87 lines (80 loc) 7.37 kB
var stringPrimitive = require('../is/stringPrimitive') var isFunction = require('../is/function') var isFalsy = require('../is/falsy') var isNil = require('../is/nullOrUndefined') var hasIn = require('../is/hasIn') var toRegExp = require('../cast/toRegExp') var always = require('../fp/always') var testableFactory = function (matcher) { return function (x) { return matcher.test(x); }; } /** * @desc like matcher, but .isMatch * @since 3.0.0 * @version 5.0.0 <- big change, changed to toTestable, and split `test.js` * @memberOf cast * @memberOf matcher * * @param {Matchable} matchable any matchable * @return {boolean} is a match, passes the test * * @NOTE as else-if for easier ternary uglification * * @ param {any} [arg1=undefined] arg to match with * @ param {any} [arg2=undefined] optional second arg to pass into tester * * @example * * matcher('kinga')('kinga') * //=> true * matcher('k*nga')('kinga') * //=> true * matcher('kinga')('nope') * //=> false * * matcher(new RegExp(/kinga/))('kinga') * //=> true * matcher(new RegExp(/kinga/))('nope') * //=> false * * matcher(x => x === 'kinga')('kinga') * //=> true * matcher(x => x === 'kinga')('nope') * //=> false * * matcher({test: x => x === 'kinga'})('kinga') * //=> true * matcher({test: x => x === 'kinga'})('nope') * //=> false * */ function _toTestable(matchable) { if (stringPrimitive(matchable)) { return toRegExp(matchable) } else if (isFalsy(matchable)) { return {test: always(false)} } else if (hasIn(matchable, 'test')) { return matchable } else if (isFunction(matchable)) { // could be arity, this keeps it still callable // const matchableFn = $0 => matchable($0) // matchableFn.test = matchableFn return {test: matchable} } else { return {test: always(false)} } } // better for always returning the same, the following is just compat // function toTestable(matchable, arg) { // return testableFactory(_toTestable(matchable)) // } function toTestable(matchable, arg, arg2) { var testable = _toTestable(matchable) if (!isNil(arg2)) { return testable.test(arg, arg2) } if (!isNil(arg)) { return testable.test(arg) } else { return testableFactory(testable) } } module.exports = toTestable //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9UZXN0YWJsZS5qcyIsInNvdXJjZXMiOlsidG9UZXN0YWJsZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBzdHJpbmdQcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pcy9zdHJpbmdQcmltaXRpdmUnKVxuY29uc3QgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2lzL2Z1bmN0aW9uJylcbmNvbnN0IGlzRmFsc3kgPSByZXF1aXJlKCcuLi9pcy9mYWxzeScpXG5jb25zdCBpc05pbCA9IHJlcXVpcmUoJy4uL2lzL251bGxPclVuZGVmaW5lZCcpXG5jb25zdCBoYXNJbiA9IHJlcXVpcmUoJy4uL2lzL2hhc0luJylcbmNvbnN0IHRvUmVnRXhwID0gcmVxdWlyZSgnLi4vY2FzdC90b1JlZ0V4cCcpXG5jb25zdCBhbHdheXMgPSByZXF1aXJlKCcuLi9mcC9hbHdheXMnKVxuXG5jb25zdCB0ZXN0YWJsZUZhY3RvcnkgPSBtYXRjaGVyID0+IHggPT4gbWF0Y2hlci50ZXN0KHgpXG5cbi8qKlxuICogQGRlc2MgbGlrZSBtYXRjaGVyLCBidXQgLmlzTWF0Y2hcbiAqIEBzaW5jZSAzLjAuMFxuICogQHZlcnNpb24gNS4wLjAgPC0gYmlnIGNoYW5nZSwgY2hhbmdlZCB0byB0b1Rlc3RhYmxlLCBhbmQgc3BsaXQgYHRlc3QuanNgXG4gKiBAbWVtYmVyT2YgY2FzdFxuICogQG1lbWJlck9mIG1hdGNoZXJcbiAqXG4gKiBAcGFyYW0ge01hdGNoYWJsZX0gbWF0Y2hhYmxlIGFueSBtYXRjaGFibGVcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGlzIGEgbWF0Y2gsIHBhc3NlcyB0aGUgdGVzdFxuICpcbiAqIEBOT1RFIGFzIGVsc2UtaWYgZm9yIGVhc2llciB0ZXJuYXJ5IHVnbGlmaWNhdGlvblxuICpcbiAqIEAgcGFyYW0ge2FueX0gW2FyZzE9dW5kZWZpbmVkXSBhcmcgdG8gbWF0Y2ggd2l0aFxuICogQCBwYXJhbSB7YW55fSBbYXJnMj11bmRlZmluZWRdIG9wdGlvbmFsIHNlY29uZCBhcmcgdG8gcGFzcyBpbnRvIHRlc3RlclxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogICBtYXRjaGVyKCdraW5nYScpKCdraW5nYScpXG4gKiAgIC8vPT4gdHJ1ZVxuICogICBtYXRjaGVyKCdrKm5nYScpKCdraW5nYScpXG4gKiAgIC8vPT4gdHJ1ZVxuICogICBtYXRjaGVyKCdraW5nYScpKCdub3BlJylcbiAqICAgLy89PiBmYWxzZVxuICpcbiAqICAgbWF0Y2hlcihuZXcgUmVnRXhwKC9raW5nYS8pKSgna2luZ2EnKVxuICogICAvLz0+IHRydWVcbiAqICAgbWF0Y2hlcihuZXcgUmVnRXhwKC9raW5nYS8pKSgnbm9wZScpXG4gKiAgIC8vPT4gZmFsc2VcbiAqXG4gKiAgIG1hdGNoZXIoeCA9PiB4ID09PSAna2luZ2EnKSgna2luZ2EnKVxuICogICAvLz0+IHRydWVcbiAqICAgbWF0Y2hlcih4ID0+IHggPT09ICdraW5nYScpKCdub3BlJylcbiAqICAgLy89PiBmYWxzZVxuICpcbiAqICAgbWF0Y2hlcih7dGVzdDogeCA9PiB4ID09PSAna2luZ2EnfSkoJ2tpbmdhJylcbiAqICAgLy89PiB0cnVlXG4gKiAgIG1hdGNoZXIoe3Rlc3Q6IHggPT4geCA9PT0gJ2tpbmdhJ30pKCdub3BlJylcbiAqICAgLy89PiBmYWxzZVxuICpcbiAqL1xuZnVuY3Rpb24gX3RvVGVzdGFibGUobWF0Y2hhYmxlKSB7XG4gIGlmIChzdHJpbmdQcmltaXRpdmUobWF0Y2hhYmxlKSkge1xuICAgIHJldHVybiB0b1JlZ0V4cChtYXRjaGFibGUpXG4gIH1cbiAgZWxzZSBpZiAoaXNGYWxzeShtYXRjaGFibGUpKSB7XG4gICAgcmV0dXJuIHt0ZXN0OiBhbHdheXMoZmFsc2UpfVxuICB9XG4gIGVsc2UgaWYgKGhhc0luKG1hdGNoYWJsZSwgJ3Rlc3QnKSkge1xuICAgIHJldHVybiBtYXRjaGFibGVcbiAgfVxuICBlbHNlIGlmIChpc0Z1bmN0aW9uKG1hdGNoYWJsZSkpIHtcbiAgICAvLyBjb3VsZCBiZSBhcml0eSwgdGhpcyBrZWVwcyBpdCBzdGlsbCBjYWxsYWJsZVxuICAgIC8vIGNvbnN0IG1hdGNoYWJsZUZuID0gJDAgPT4gbWF0Y2hhYmxlKCQwKVxuICAgIC8vIG1hdGNoYWJsZUZuLnRlc3QgPSBtYXRjaGFibGVGblxuXG4gICAgcmV0dXJuIHt0ZXN0OiBtYXRjaGFibGV9XG4gIH1cbiAgZWxzZSB7XG4gICAgcmV0dXJuIHt0ZXN0OiBhbHdheXMoZmFsc2UpfVxuICB9XG59XG5cbi8vIGJldHRlciBmb3IgYWx3YXlzIHJldHVybmluZyB0aGUgc2FtZSwgdGhlIGZvbGxvd2luZyBpcyBqdXN0IGNvbXBhdFxuLy8gZnVuY3Rpb24gdG9UZXN0YWJsZShtYXRjaGFibGUsIGFyZykge1xuLy8gICByZXR1cm4gdGVzdGFibGVGYWN0b3J5KF90b1Rlc3RhYmxlKG1hdGNoYWJsZSkpXG4vLyB9XG5cbmZ1bmN0aW9uIHRvVGVzdGFibGUobWF0Y2hhYmxlLCBhcmcsIGFyZzIpIHtcbiAgY29uc3QgdGVzdGFibGUgPSBfdG9UZXN0YWJsZShtYXRjaGFibGUpXG4gIGlmICghaXNOaWwoYXJnMikpIHJldHVybiB0ZXN0YWJsZS50ZXN0KGFyZywgYXJnMilcbiAgaWYgKCFpc05pbChhcmcpKSByZXR1cm4gdGVzdGFibGUudGVzdChhcmcpXG4gIGVsc2UgcmV0dXJuIHRlc3RhYmxlRmFjdG9yeSh0ZXN0YWJsZSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b1Rlc3RhYmxlXG4iXSwibmFtZXMiOlsiY29uc3QiXSwibWFwcGluZ3MiOiJBQUFBQSxHQUFLLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQztBQUN4REEsR0FBSyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7QUFDNUNBLEdBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztBQUN0Q0EsR0FBSyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsdUJBQXVCLENBQUM7QUFDOUNBLEdBQUssQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztBQUNwQ0EsR0FBSyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUM7QUFDNUNBLEdBQUssQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQzs7QUFFdENBLEdBQUssQ0FBQyxlQUFlLEdBQUcsVUFBQSxPQUFPLENBQUEsQ0FBQyxBQUFHLFNBQUEsVUFBQSxDQUFDLENBQUEsQ0FBQyxBQUFHLFNBQUEsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMEN2RCxTQUFTLFdBQVcsQ0FBQyxTQUFTLEVBQUU7RUFDOUIsSUFBSSxlQUFlLENBQUMsU0FBUyxDQUFDLEVBQUU7SUFDOUIsT0FBTyxRQUFRLENBQUMsU0FBUyxDQUFDO0dBQzNCO09BQ0ksSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7SUFDM0IsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7R0FDN0I7T0FDSSxJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLEVBQUU7SUFDakMsT0FBTyxTQUFTO0dBQ2pCO09BQ0ksSUFBSSxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUU7Ozs7O0lBSzlCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDO0dBQ3pCO09BQ0k7SUFDSCxPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztHQUM3QjtDQUNGOzs7Ozs7O0FBT0QsU0FBUyxVQUFVLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUU7RUFDeENBLEdBQUssQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQztFQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUEsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBQTtFQUNqRCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUEsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFBO09BQ3JDLEVBQUEsT0FBTyxlQUFlLENBQUMsUUFBUSxDQUFDLEVBQUE7Q0FDdEM7O0FBRUQsTUFBTSxDQUFDLE9BQU8sR0FBRyxVQUFVOyJ9