index.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = buildMatchFn;
  6. function buildMatchFn(args) {
  7. return function (string) {
  8. var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  9. var width = options.width;
  10. var matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth];
  11. var matchResult = string.match(matchPattern);
  12. if (!matchResult) {
  13. return null;
  14. }
  15. var matchedString = matchResult[0];
  16. var parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth];
  17. var key = Array.isArray(parsePatterns) ? findIndex(parsePatterns, function (pattern) {
  18. return pattern.test(matchedString);
  19. }) : findKey(parsePatterns, function (pattern) {
  20. return pattern.test(matchedString);
  21. });
  22. var value;
  23. value = args.valueCallback ? args.valueCallback(key) : key;
  24. value = options.valueCallback ? options.valueCallback(value) : value;
  25. var rest = string.slice(matchedString.length);
  26. return {
  27. value: value,
  28. rest: rest
  29. };
  30. };
  31. }
  32. function findKey(object, predicate) {
  33. for (var key in object) {
  34. if (object.hasOwnProperty(key) && predicate(object[key])) {
  35. return key;
  36. }
  37. }
  38. return undefined;
  39. }
  40. function findIndex(array, predicate) {
  41. for (var key = 0; key < array.length; key++) {
  42. if (predicate(array[key])) {
  43. return key;
  44. }
  45. }
  46. return undefined;
  47. }
  48. module.exports = exports.default;