UNPKG

chain-able

Version:

interfaces that describe their intentions.

47 lines (45 loc) 3.94 kB
var isString = require('../is/string') var isFunction = require('../is/function') var esc = require('./escape-string-regex') /** * @desc like matcher, but .isMatch * @since 3.0.0 * * @param {Matchable} matchable any matchable * @param {any} [arg1=undefined] arg to match with * @param {any} [arg2=undefined] optional second arg to pass into tester * @return {boolean} is a match, passes the test * * @NOTE as else-if for easier ternary uglification * * @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 * */ module.exports = function (matchable, arg1, arg2) { if (isString(matchable)) { return !!new RegExp(esc(matchable)).test(arg1) } else if (isFunction(matchable) && !matchable.test) { return !!matchable(arg1) } else { return !!matchable.test(arg1, arg2) } } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG8tdGVzdC5qcyIsInNvdXJjZXMiOlsidG8tdGVzdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBpc1N0cmluZyA9IHJlcXVpcmUoJy4uL2lzL3N0cmluZycpXG5jb25zdCBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi4vaXMvZnVuY3Rpb24nKVxuY29uc3QgZXNjID0gcmVxdWlyZSgnLi9lc2NhcGUtc3RyaW5nLXJlZ2V4JylcblxuLyoqXG4gKiBAZGVzYyBsaWtlIG1hdGNoZXIsIGJ1dCAuaXNNYXRjaFxuICogQHNpbmNlICAzLjAuMFxuICpcbiAqIEBwYXJhbSAge01hdGNoYWJsZX0gbWF0Y2hhYmxlIGFueSBtYXRjaGFibGVcbiAqIEBwYXJhbSAge2FueX0gW2FyZzE9dW5kZWZpbmVkXSBhcmcgdG8gbWF0Y2ggd2l0aFxuICogQHBhcmFtICB7YW55fSBbYXJnMj11bmRlZmluZWRdIG9wdGlvbmFsIHNlY29uZCBhcmcgdG8gcGFzcyBpbnRvIHRlc3RlclxuICogQHJldHVybiB7Ym9vbGVhbn0gaXMgYSBtYXRjaCwgcGFzc2VzIHRoZSB0ZXN0XG4gKlxuICogQE5PVEUgICBhcyBlbHNlLWlmIGZvciBlYXNpZXIgdGVybmFyeSB1Z2xpZmljYXRpb25cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgbWF0Y2hlcigna2luZ2EnLCAna2luZ2EnKVxuICogICAvLz0+IHRydWVcbiAqICAgbWF0Y2hlcignaypuZ2EnLCAna2luZ2EnKVxuICogICAvLz0+IHRydWVcbiAqICAgbWF0Y2hlcigna2luZ2EnLCAnbm9wZScpXG4gKiAgIC8vPT4gZmFsc2VcbiAqXG4gKiAgIG1hdGNoZXIobmV3IFJlZ0V4cCgva2luZ2EvKSwgJ2tpbmdhJylcbiAqICAgLy89PiB0cnVlXG4gKiAgIG1hdGNoZXIobmV3IFJlZ0V4cCgva2luZ2EvKSwgJ25vcGUnKVxuICogICAvLz0+IGZhbHNlXG4gKlxuICogICBtYXRjaGVyKHggPT4geCA9PT0gJ2tpbmdhJywgJ2tpbmdhJylcbiAqICAgLy89PiB0cnVlXG4gKiAgIG1hdGNoZXIoeCA9PiB4ID09PSAna2luZ2EnLCAnbm9wZScpXG4gKiAgIC8vPT4gZmFsc2VcbiAqXG4gKiAgIG1hdGNoZXIoe3Rlc3Q6IHggPT4geCA9PT0gJ2tpbmdhJ30sICdraW5nYScpXG4gKiAgIC8vPT4gdHJ1ZVxuICogICBtYXRjaGVyKHt0ZXN0OiB4ID0+IHggPT09ICdraW5nYSd9LCAnbm9wZScpXG4gKiAgIC8vPT4gZmFsc2VcbiAqXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gKG1hdGNoYWJsZSwgYXJnMSwgYXJnMikgPT4ge1xuICBpZiAoaXNTdHJpbmcobWF0Y2hhYmxlKSkgcmV0dXJuICEhbmV3IFJlZ0V4cChlc2MobWF0Y2hhYmxlKSkudGVzdChhcmcxKVxuICBlbHNlIGlmIChpc0Z1bmN0aW9uKG1hdGNoYWJsZSkgJiYgIW1hdGNoYWJsZS50ZXN0KSByZXR1cm4gISFtYXRjaGFibGUoYXJnMSlcbiAgZWxzZSByZXR1cm4gISFtYXRjaGFibGUudGVzdChhcmcxLCBhcmcyKVxufVxuIl0sIm5hbWVzIjpbImNvbnN0Il0sIm1hcHBpbmdzIjoiQUFBQUEsR0FBSyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDO0FBQ3hDQSxHQUFLLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztBQUM1Q0EsR0FBSyxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsdUJBQXVCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBc0M1QyxNQUFNLENBQUMsT0FBTyxHQUFHLFNBQUEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxBQUFHO0VBQzFDLElBQUksUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUEsT0FBTyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFBO09BQ2xFLElBQUksVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxFQUFBLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBQTtPQUN0RSxFQUFBLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFBO0NBQ3pDOyJ9