amatch
Version:
Namespace string matcher
129 lines (109 loc) • 7.15 kB
JavaScript
/**
* Simple matcher
* @function amatch
* @param {string} patterns
* @returns {function}
*/
;
/** @lends amatch */
var _assign = require('babel-runtime/core-js/object/assign');
var _assign2 = _interopRequireDefault(_assign);
var _getIterator2 = require('babel-runtime/core-js/get-iterator');
var _getIterator3 = _interopRequireDefault(_getIterator2);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function amatch() {
var patterns = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
var _amatch$parse = amatch.parse(patterns),
rejects = _amatch$parse.rejects,
accepts = _amatch$parse.accepts;
return function matches(value) {
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = (0, _getIterator3.default)(rejects), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var reject = _step.value;
if (reject.test(value)) {
return false;
}
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
var _iteratorNormalCompletion2 = true;
var _didIteratorError2 = false;
var _iteratorError2 = undefined;
try {
for (var _iterator2 = (0, _getIterator3.default)(accepts), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
var accept = _step2.value;
if (accept.test(value)) {
return true;
}
}
} catch (err) {
_didIteratorError2 = true;
_iteratorError2 = err;
} finally {
try {
if (!_iteratorNormalCompletion2 && _iterator2.return) {
_iterator2.return();
}
} finally {
if (_didIteratorError2) {
throw _iteratorError2;
}
}
}
return false;
};
}
(0, _assign2.default)(amatch, {
parse: function parse(patterns) {
var rejects = [];
var accepts = [];
var _iteratorNormalCompletion3 = true;
var _didIteratorError3 = false;
var _iteratorError3 = undefined;
try {
for (var _iterator3 = (0, _getIterator3.default)(patterns.split(/[\s,]+/)), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
var pattern = _step3.value;
if (!pattern) {
continue;
}
var converted = pattern.replace(/[\\^$+?.()|[\]{}]/g, '\\$&').replace(/\*/g, '.*?');
if (converted[0] === '-') {
rejects.push(new RegExp('^' + converted.substr(1) + '$'));
} else {
accepts.push(new RegExp('^' + converted + '$'));
}
}
} catch (err) {
_didIteratorError3 = true;
_iteratorError3 = err;
} finally {
try {
if (!_iteratorNormalCompletion3 && _iterator3.return) {
_iterator3.return();
}
} finally {
if (_didIteratorError3) {
throw _iteratorError3;
}
}
}
return { rejects: rejects, accepts: accepts };
}
});
module.exports = amatch;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFtYXRjaC5qcyJdLCJuYW1lcyI6WyJhbWF0Y2giLCJwYXR0ZXJucyIsInBhcnNlIiwicmVqZWN0cyIsImFjY2VwdHMiLCJtYXRjaGVzIiwidmFsdWUiLCJyZWplY3QiLCJ0ZXN0IiwiYWNjZXB0Iiwic3BsaXQiLCJwYXR0ZXJuIiwiY29udmVydGVkIiwicmVwbGFjZSIsInB1c2giLCJSZWdFeHAiLCJzdWJzdHIiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0FBTUE7O0FBRUE7Ozs7Ozs7Ozs7OztBQUNBLFNBQVNBLE1BQVQsR0FBZ0M7QUFBQSxNQUFmQyxRQUFlLHVFQUFKLEVBQUk7O0FBQUEsc0JBQ0hELE9BQU9FLEtBQVAsQ0FBYUQsUUFBYixDQURHO0FBQUEsTUFDeEJFLE9BRHdCLGlCQUN4QkEsT0FEd0I7QUFBQSxNQUNmQyxPQURlLGlCQUNmQSxPQURlOztBQUU5QixTQUFPLFNBQVNDLE9BQVQsQ0FBa0JDLEtBQWxCLEVBQXlCO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQzlCLHNEQUFtQkgsT0FBbkIsNEdBQTRCO0FBQUEsWUFBbkJJLE1BQW1COztBQUMxQixZQUFJQSxPQUFPQyxJQUFQLENBQVlGLEtBQVosQ0FBSixFQUF3QjtBQUN0QixpQkFBTyxLQUFQO0FBQ0Q7QUFDRjtBQUw2QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQU05Qix1REFBbUJGLE9BQW5CLGlIQUE0QjtBQUFBLFlBQW5CSyxNQUFtQjs7QUFDMUIsWUFBSUEsT0FBT0QsSUFBUCxDQUFZRixLQUFaLENBQUosRUFBd0I7QUFDdEIsaUJBQU8sSUFBUDtBQUNEO0FBQ0Y7QUFWNkI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFXOUIsV0FBTyxLQUFQO0FBQ0QsR0FaRDtBQWFEOztBQUVELHNCQUFjTixNQUFkLEVBQXNCO0FBQ3BCRSxPQURvQixpQkFDYkQsUUFEYSxFQUNIO0FBQ2YsUUFBSUUsVUFBVSxFQUFkO0FBQ0EsUUFBSUMsVUFBVSxFQUFkO0FBRmU7QUFBQTtBQUFBOztBQUFBO0FBR2YsdURBQW9CSCxTQUFTUyxLQUFULENBQWUsUUFBZixDQUFwQixpSEFBOEM7QUFBQSxZQUFyQ0MsT0FBcUM7O0FBQzVDLFlBQUksQ0FBQ0EsT0FBTCxFQUFjO0FBQ1o7QUFDRDtBQUNELFlBQUlDLFlBQVlELFFBQVFFLE9BQVIsQ0FBZ0Isb0JBQWhCLEVBQXNDLE1BQXRDLEVBQThDQSxPQUE5QyxDQUFzRCxLQUF0RCxFQUE2RCxLQUE3RCxDQUFoQjtBQUNBLFlBQUlELFVBQVcsQ0FBWCxNQUFtQixHQUF2QixFQUE0QjtBQUMxQlQsa0JBQVFXLElBQVIsQ0FBYSxJQUFJQyxNQUFKLENBQVcsTUFBTUgsVUFBVUksTUFBVixDQUFpQixDQUFqQixDQUFOLEdBQTRCLEdBQXZDLENBQWI7QUFDRCxTQUZELE1BRU87QUFDTFosa0JBQVFVLElBQVIsQ0FBYSxJQUFJQyxNQUFKLENBQVcsTUFBTUgsU0FBTixHQUFrQixHQUE3QixDQUFiO0FBQ0Q7QUFDRjtBQWJjO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBY2YsV0FBTyxFQUFFVCxnQkFBRixFQUFXQyxnQkFBWCxFQUFQO0FBQ0Q7QUFoQm1CLENBQXRCOztBQW1CQWEsT0FBT0MsT0FBUCxHQUFpQmxCLE1BQWpCIiwiZmlsZSI6ImFtYXRjaC5qcyIsInNvdXJjZVJvb3QiOiJsaWIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNpbXBsZSBtYXRjaGVyXG4gKiBAZnVuY3Rpb24gYW1hdGNoXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0dGVybnNcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn1cbiAqL1xuJ3VzZSBzdHJpY3QnXG5cbi8qKiBAbGVuZHMgYW1hdGNoICovXG5mdW5jdGlvbiBhbWF0Y2ggKHBhdHRlcm5zID0gJycpIHtcbiAgbGV0IHsgcmVqZWN0cywgYWNjZXB0cyB9ID0gYW1hdGNoLnBhcnNlKHBhdHRlcm5zKVxuICByZXR1cm4gZnVuY3Rpb24gbWF0Y2hlcyAodmFsdWUpIHtcbiAgICBmb3IgKGxldCByZWplY3Qgb2YgcmVqZWN0cykge1xuICAgICAgaWYgKHJlamVjdC50ZXN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChsZXQgYWNjZXB0IG9mIGFjY2VwdHMpIHtcbiAgICAgIGlmIChhY2NlcHQudGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuT2JqZWN0LmFzc2lnbihhbWF0Y2gsIHtcbiAgcGFyc2UgKHBhdHRlcm5zKSB7XG4gICAgbGV0IHJlamVjdHMgPSBbXVxuICAgIGxldCBhY2NlcHRzID0gW11cbiAgICBmb3IgKGxldCBwYXR0ZXJuIG9mIHBhdHRlcm5zLnNwbGl0KC9bXFxzLF0rLykpIHtcbiAgICAgIGlmICghcGF0dGVybikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgbGV0IGNvbnZlcnRlZCA9IHBhdHRlcm4ucmVwbGFjZSgvW1xcXFxeJCs/LigpfFtcXF17fV0vZywgJ1xcXFwkJicpLnJlcGxhY2UoL1xcKi9nLCAnLio/JylcbiAgICAgIGlmIChjb252ZXJ0ZWRbIDAgXSA9PT0gJy0nKSB7XG4gICAgICAgIHJlamVjdHMucHVzaChuZXcgUmVnRXhwKCdeJyArIGNvbnZlcnRlZC5zdWJzdHIoMSkgKyAnJCcpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWNjZXB0cy5wdXNoKG5ldyBSZWdFeHAoJ14nICsgY29udmVydGVkICsgJyQnKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgcmVqZWN0cywgYWNjZXB0cyB9XG4gIH1cbn0pXG5cbm1vZHVsZS5leHBvcnRzID0gYW1hdGNoXG5cblxuIl19