123456789101112131415161718192021222324252627282930313233343536373839404142 |
- export default function buildMatchFn(args) {
- return function (string) {
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
- var width = options.width;
- var matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth];
- var matchResult = string.match(matchPattern);
- if (!matchResult) {
- return null;
- }
- var matchedString = matchResult[0];
- var parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth];
- var key = Array.isArray(parsePatterns) ? findIndex(parsePatterns, function (pattern) {
- return pattern.test(matchedString);
- }) : findKey(parsePatterns, function (pattern) {
- return pattern.test(matchedString);
- });
- var value;
- value = args.valueCallback ? args.valueCallback(key) : key;
- value = options.valueCallback ? options.valueCallback(value) : value;
- var rest = string.slice(matchedString.length);
- return {
- value: value,
- rest: rest
- };
- };
- }
- function findKey(object, predicate) {
- for (var key in object) {
- if (object.hasOwnProperty(key) && predicate(object[key])) {
- return key;
- }
- }
- return undefined;
- }
- function findIndex(array, predicate) {
- for (var key = 0; key < array.length; key++) {
- if (predicate(array[key])) {
- return key;
- }
- }
- return undefined;
- }
|