@mkrause/match
Advanced tools
+194
| 'use strict'; | ||
| Object.defineProperty(exports, "__esModule", { | ||
| value: true | ||
| }); | ||
| exports.matchSingleKey = exports.getSingleKey = exports.matchType = exports.match = exports.matcher = undefined; | ||
| var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); | ||
| var _lodash = require('lodash'); | ||
| var _lodash2 = _interopRequireDefault(_lodash); | ||
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
| // Utility | ||
| var getSingleKey = function getSingleKey(obj) { | ||
| if (!_lodash2.default.isPlainObject(obj)) { | ||
| throw new Error('Error: expected object, given \'' + JSON.stringify(obj) + '\''); | ||
| } | ||
| var keys = Object.keys(obj); | ||
| if (keys.length !== 1) { | ||
| throw new Error('Error: expected object with single key, given \'' + JSON.stringify(obj) + '\''); | ||
| } | ||
| var key = keys[0]; | ||
| return { key: key, value: obj[key] }; | ||
| }; | ||
| // Common definitions | ||
| var defaultCase = Symbol('match.default'); | ||
| var defs = { | ||
| case: function _case(predicate, value) { | ||
| return [predicate, value]; | ||
| }, | ||
| otherwise: function otherwise(fn) { | ||
| return [defaultCase, fn]; | ||
| }, | ||
| default: defaultCase | ||
| }; | ||
| // Match against an object, where each property is one case: | ||
| // match('x', { x: 1, y: 2 }) | ||
| var matchAgainstObject = function matchAgainstObject(discriminator, body, cases) { | ||
| var matchedCase = void 0; | ||
| if (cases.hasOwnProperty(discriminator)) { | ||
| matchedCase = cases[discriminator]; | ||
| } else if (cases.hasOwnProperty(defs.default)) { | ||
| matchedCase = cases[defs.default]; | ||
| } else { | ||
| throw new Error('[match.js] Unmatched case: ' + JSON.stringify(discriminator)); | ||
| } | ||
| // If the property is a function, pass the subject body | ||
| var result = void 0; | ||
| if (_lodash2.default.isFunction(matchedCase)) { | ||
| result = matchedCase(body); | ||
| } else { | ||
| result = matchedCase; | ||
| } | ||
| return result; | ||
| }; | ||
| // Match against a list of predicate functions: | ||
| // match({ type: 'x' }, [{ type: 'x' }, 1], [{ type: 'y' }, 2]) | ||
| var matchAgainstPredicates = function matchAgainstPredicates(discriminator, body, predicates) { | ||
| var _iteratorNormalCompletion = true; | ||
| var _didIteratorError = false; | ||
| var _iteratorError = undefined; | ||
| try { | ||
| for (var _iterator = predicates[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { | ||
| var _step$value = _slicedToArray(_step.value, 2), | ||
| predicate = _step$value[0], | ||
| predicateCase = _step$value[1]; | ||
| // If given an object | ||
| if (_lodash2.default.isObjectLike(predicate)) { | ||
| predicate = _lodash2.default.matches(predicate); | ||
| } | ||
| var matchedCase = void 0; | ||
| if (predicate === discriminator) { | ||
| matchedCase = predicateCase; | ||
| } else if (_lodash2.default.isFunction(predicate) && predicate(discriminator) == true) { | ||
| // Note: using weak equality (==) for predicate check | ||
| matchedCase = predicateCase; | ||
| } else if (predicate === defs.default) { | ||
| matchedCase = predicateCase; | ||
| } | ||
| if (matchedCase !== undefined) { | ||
| if (_lodash2.default.isFunction(matchedCase)) { | ||
| return matchedCase(body); | ||
| } else { | ||
| return matchedCase; | ||
| } | ||
| } | ||
| } | ||
| // Fall-through: no match | ||
| } catch (err) { | ||
| _didIteratorError = true; | ||
| _iteratorError = err; | ||
| } finally { | ||
| try { | ||
| if (!_iteratorNormalCompletion && _iterator.return) { | ||
| _iterator.return(); | ||
| } | ||
| } finally { | ||
| if (_didIteratorError) { | ||
| throw _iteratorError; | ||
| } | ||
| } | ||
| } | ||
| throw new Error('[match.js] Unmatched case: ' + JSON.stringify(discriminator)); | ||
| }; | ||
| // Create a new matcher using the given parser | ||
| var matcher = function matcher(parseSubject) { | ||
| var matcher = function matcher(subject) { | ||
| for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { | ||
| args[_key - 1] = arguments[_key]; | ||
| } | ||
| var _parseSubject = parseSubject(subject), | ||
| discriminator = _parseSubject.discriminator, | ||
| body = _parseSubject.body; | ||
| var result = void 0; | ||
| if (args.length === 1 && _lodash2.default.isPlainObject(args[0])) { | ||
| var cases = args[0]; | ||
| result = matchAgainstObject(discriminator, body, cases); | ||
| } else if (args.length === 1 && _lodash2.default.isArray(args[0])) { | ||
| var predicates = args[0]; | ||
| result = matchAgainstPredicates(discriminator, body, predicates); | ||
| } else if (args.length >= 1) { | ||
| var _predicates = args; | ||
| result = matchAgainstPredicates(discriminator, body, _predicates); | ||
| } else { | ||
| throw new Error('[match.js] Invalid arguments given'); | ||
| } | ||
| return result; | ||
| }; | ||
| return Object.assign(matcher, defs); | ||
| }; | ||
| // Specific matchers | ||
| // Generic match. Accept any subject, and discriminate using the value itself | ||
| var match = matcher(function (subject) { | ||
| return { discriminator: subject, body: subject }; | ||
| }); | ||
| // Match on objects with a `type` property | ||
| var matchType = matcher(function (subject) { | ||
| if (!_lodash2.default.isObjectLike(subject)) { | ||
| throw new Error('[match.js] Expected an object, given ' + JSON.stringify(subject)); | ||
| } | ||
| if (!subject.hasOwnProperty('type')) { | ||
| throw new Error('[match.js] Missing \'type\' property, given ' + JSON.stringify(subject)); | ||
| } | ||
| return { discriminator: subject.type, body: subject }; | ||
| }); | ||
| var matchSingleKey = matcher(function (subject) { | ||
| if (!_lodash2.default.isObjectLike(subject)) { | ||
| throw new Error('[match.js] Expected an object, given ' + JSON.stringify(subject)); | ||
| } | ||
| var keys = Object.keys(subject); | ||
| if (keys.length !== 1) { | ||
| throw new Error('[match.js] Expected an object with a single key, given ' + JSON.stringify(subject)); | ||
| } | ||
| var discriminator = keys[0]; | ||
| return { discriminator: discriminator, body: subject[discriminator] }; | ||
| }); | ||
| exports.matcher = matcher; | ||
| exports.match = match; | ||
| exports.matchType = matchType; | ||
| exports.getSingleKey = getSingleKey; | ||
| exports.matchSingleKey = matchSingleKey; | ||
| exports.default = match; | ||
| //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tYXRjaC5qcyJdLCJuYW1lcyI6WyJnZXRTaW5nbGVLZXkiLCJpc1BsYWluT2JqZWN0Iiwib2JqIiwiRXJyb3IiLCJKU09OIiwic3RyaW5naWZ5Iiwia2V5cyIsIk9iamVjdCIsImxlbmd0aCIsImtleSIsInZhbHVlIiwiZGVmYXVsdENhc2UiLCJTeW1ib2wiLCJkZWZzIiwiY2FzZSIsInByZWRpY2F0ZSIsIm90aGVyd2lzZSIsImZuIiwiZGVmYXVsdCIsIm1hdGNoQWdhaW5zdE9iamVjdCIsImRpc2NyaW1pbmF0b3IiLCJib2R5IiwiY2FzZXMiLCJtYXRjaGVkQ2FzZSIsImhhc093blByb3BlcnR5IiwicmVzdWx0IiwiaXNGdW5jdGlvbiIsIm1hdGNoQWdhaW5zdFByZWRpY2F0ZXMiLCJwcmVkaWNhdGVzIiwicHJlZGljYXRlQ2FzZSIsImlzT2JqZWN0TGlrZSIsIm1hdGNoZXMiLCJ1bmRlZmluZWQiLCJtYXRjaGVyIiwic3ViamVjdCIsImFyZ3MiLCJwYXJzZVN1YmplY3QiLCJpc0FycmF5IiwiYXNzaWduIiwibWF0Y2giLCJtYXRjaFR5cGUiLCJ0eXBlIiwibWF0Y2hTaW5nbGVLZXkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUNBOzs7Ozs7QUFHQTs7QUFFQSxJQUFNQSxlQUFlLFNBQWZBLFlBQWUsTUFBTztBQUN4QixRQUFJLENBQUMsaUJBQUVDLGFBQUYsQ0FBZ0JDLEdBQWhCLENBQUwsRUFBMkI7QUFDdkIsY0FBTSxJQUFJQyxLQUFKLHNDQUE0Q0MsS0FBS0MsU0FBTCxDQUFlSCxHQUFmLENBQTVDLFFBQU47QUFDSDs7QUFFRCxRQUFNSSxPQUFPQyxPQUFPRCxJQUFQLENBQVlKLEdBQVosQ0FBYjtBQUNBLFFBQUlJLEtBQUtFLE1BQUwsS0FBZ0IsQ0FBcEIsRUFBdUI7QUFDbkIsY0FBTSxJQUFJTCxLQUFKLHNEQUE0REMsS0FBS0MsU0FBTCxDQUFlSCxHQUFmLENBQTVELFFBQU47QUFDSDs7QUFFRCxRQUFNTyxNQUFNSCxLQUFLLENB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QUFNLElBQUkvQixLQUFKLDJDQUFrREMsS0FBS0MsU0FBTCxDQUFlNkIsT0FBZixDQUFsRCxDQUFOO0FBQ0g7QUFDRCxRQUFJLENBQUNBLFFBQVFWLGNBQVIsQ0FBdUIsTUFBdkIsQ0FBTCxFQUFxQztBQUNqQyxjQUFNLElBQUlyQixLQUFKLGtEQUF1REMsS0FBS0MsU0FBTCxDQUFlNkIsT0FBZixDQUF2RCxDQUFOO0FBQ0g7O0FBRUQsV0FBTyxFQUFFZCxlQUFlYyxRQUFRTyxJQUF6QixFQUErQnBCLE1BQU1hLE9BQXJDLEVBQVA7QUFDSCxDQVRpQixDQUFsQjs7QUFXQSxJQUFNUSxpQkFBaUJULFFBQVEsbUJBQVc7QUFDdEMsUUFBSSxDQUFDLGlCQUFFSCxZQUFGLENBQWVJLE9BQWYsQ0FBTCxFQUE4QjtBQUMxQixjQUFNLElBQUkvQixLQUFKLDJDQUFrREMsS0FBS0MsU0FBTCxDQUFlNkIsT0FBZixDQUFsRCxDQUFOO0FBQ0g7O0FBRUQsUUFBTTVCLE9BQU9DLE9BQU9ELElBQVAsQ0FBWTRCLE9BQVosQ0FBYjs7QUFFQSxRQUFJNUIsS0FBS0UsTUFBTCxLQUFnQixDQUFwQixFQUF1QjtBQUNuQixjQUFNLElBQUlMLEtBQUosNkRBQW9FQyxLQUFLQyxTQUFMLENBQWU2QixPQUFmLENBQXBFLENBQU47QUFDSDs7QUFFRCxRQUFNZCxnQkFBZ0JkLEtBQUssQ0FBTCxDQUF0QjtBQUNBLFdBQU8sRUFBRWMsNEJBQUYsRUFBaUJDLE1BQU1hLFFBQVFkLGFBQVIsQ0FBdkIsRUFBUDtBQUNILENBYnNCLENBQXZCOztRQWVTYSxPLEdBQUFBLE87UUFBU00sSyxHQUFBQSxLO1FBQU9DLFMsR0FBQUEsUztRQUFXeEMsWSxHQUFBQSxZO1FBQWMwQyxjLEdBQUFBLGM7a0JBQ25DSCxLIiwiZmlsZSI6Im1hdGNoLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuXG5cbi8vIFV0aWxpdHlcblxuY29uc3QgZ2V0U2luZ2xlS2V5ID0gb2JqID0+IHtcbiAgICBpZiAoIV8uaXNQbGFpbk9iamVjdChvYmopKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3I6IGV4cGVjdGVkIG9iamVjdCwgZ2l2ZW4gJyR7SlNPTi5zdHJpbmdpZnkob2JqKX0nYCk7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgIGlmIChrZXlzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yOiBleHBlY3RlZCBvYmplY3Qgd2l0aCBzaW5nbGUga2V5LCBnaXZlbiAnJHtKU09OLnN0cmluZ2lmeShvYmopfSdgKTtcbiAgICB9XG4gICAgXG4gICAgY29uc3Qga2V5ID0ga2V5c1swXTtcbiAgICByZXR1cm4geyBrZXksIHZhbHVlOiBvYmpba2V5XSB9O1xufTtcblxuXG4vLyBDb21tb24gZGVmaW5pdGlvbnNcbmNvbnN0IGRlZmF1bHRDYXNlID0gU3ltYm9sKCdtYXRjaC5kZWZhdWx0Jyk7XG5jb25zdCBkZWZzID0ge1xuICAgIGNhc2U6IChwcmVkaWNhdGUsIHZhbHVlKSA9PiBbcHJlZGljYXRlLCB2YWx1ZV0sXG4gICAgb3RoZXJ3aXNlOiBmbiA9PiBbZGVmYXVsdENhc2UsIGZuXSxcbiAgICBkZWZhdWx0OiBkZWZhdWx0Q2FzZSxcbn07XG5cblxuLy8gTWF0Y2ggYWdhaW5zdCBhbiBvYmplY3QsIHdoZXJlIGVhY2ggcHJvcGVydHkgaXMgb25lIGNhc2U6XG4vLyAgIG1hdGNoKCd4JywgeyB4OiAxLCB5OiAyIH0pXG5jb25zdCBtYXRjaEFnYWluc3RPYmplY3QgPSAoZGlzY3JpbWluYXRvciwgYm9keSwgY2FzZXMpID0+IHtcbiAgICBsZXQgbWF0Y2hlZENhc2U7XG4gICAgaWYgKGNhc2VzLmhhc093blByb3BlcnR5KGRpc2NyaW1pbmF0b3IpKSB7XG4gICAgICAgIG1hdGNoZWRDYXNlID0gY2FzZXNbZGlzY3JpbWluYXRvcl07XG4gICAgfSBlbHNlIGlmIChjYXNlcy5oYXNPd25Qcm9wZXJ0eShkZWZzLmRlZmF1bHQpKSB7XG4gICAgICAgIG1hdGNoZWRDYXNlID0gY2FzZXNbZGVmcy5kZWZhdWx0XTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFttYXRjaC5qc10gVW5tYXRjaGVkIGNhc2U6ICR7SlNPTi5zdHJpbmdpZnkoZGlzY3JpbWluYXRvcil9YCk7XG4gICAgfVxuICAgIFxuICAgIC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBhIGZ1bmN0aW9uLCBwYXNzIHRoZSBzdWJqZWN0IGJvZHlcbiAgICBsZXQgcmVzdWx0O1xuICAgIGlmIChfLmlzRnVuY3Rpb24obWF0Y2hlZENhc2UpKSB7XG4gICAgICAgIHJlc3VsdCA9IG1hdGNoZWRDYXNlKGJvZHkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IG1hdGNoZWRDYXNlO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gTWF0Y2ggYWdhaW5zdCBhIGxpc3Qgb2YgcHJlZGljYXRlIGZ1bmN0aW9uczpcbi8vICAgbWF0Y2goeyB0eXBlOiAneCcgfSwgW3sgdHlwZTogJ3gnIH0sIDFdLCBbeyB0eXBlOiAneScgfSwgMl0pXG5jb25zdCBtYXRjaEFnYWluc3RQcmVkaWNhdGVzID0gKGRpc2NyaW1pbmF0b3IsIGJvZHksIHByZWRpY2F0ZXMpID0+IHtcbiAgICBmb3IgKGxldCBbcHJlZGljYXRlLCBwcmVkaWNhdGVDYXNlXSBvZiBwcmVkaWNhdGVzKSB7XG4gICAgICAgIC8vIElmIGdpdmVuIGFuIG9iamVjdFxuICAgICAgICBpZiAoXy5pc09iamVjdExpa2UocHJlZGljYXRlKSkge1xuICAgICAgICAgICAgcHJlZGljYXRlID0gXy5tYXRjaGVzKHByZWRpY2F0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGxldCBtYXRjaGVkQ2FzZTtcbiAgICAgICAgaWYgKHByZWRpY2F0ZSA9PT0gZGlzY3JpbWluYXRvcikge1xuICAgICAgICAgICAgbWF0Y2hlZENhc2UgPSBwcmVkaWNhdGVDYXNlO1xuICAgICAgICB9IGVsc2UgaWYgKF8uaXNGdW5jdGlvbihwcmVkaWNhdGUpICYmIHByZWRpY2F0ZShkaXNjcmltaW5hdG9yKSA9PSB0cnVlKSB7XG4gICAgICAgICAgICAvLyBOb3RlOiB1c2luZyB3ZWFrIGVxdWFsaXR5ICg9PSkgZm9yIHByZWRpY2F0ZSBjaGVja1xuICAgICAgICAgICAgbWF0Y2hlZENhc2UgPSBwcmVkaWNhdGVDYXNlO1xuICAgICAgICB9IGVsc2UgaWYgKHByZWRpY2F0ZSA9PT0gZGVmcy5kZWZhdWx0KSB7XG4gICAgICAgICAgICBtYXRjaGVkQ2FzZSA9IHByZWRpY2F0ZUNhc2U7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmIChtYXRjaGVkQ2FzZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoXy5pc0Z1bmN0aW9uKG1hdGNoZWRDYXNlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaGVkQ2FzZShib2R5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoZWRDYXNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIEZhbGwtdGhyb3VnaDogbm8gbWF0Y2hcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFttYXRjaC5qc10gVW5tYXRjaGVkIGNhc2U6ICR7SlNPTi5zdHJpbmdpZnkoZGlzY3JpbWluYXRvcil9YCk7XG59O1xuXG5cbi8vIENyZWF0ZSBhIG5ldyBtYXRjaGVyIHVzaW5nIHRoZSBnaXZlbiBwYXJzZXJcbmNvbnN0IG1hdGNoZXIgPSBwYXJzZVN1YmplY3QgPT4ge1xuICAgIGNvbnN0IG1hdGNoZXIgPSAoc3ViamVjdCwgLi4uYXJncykgPT4ge1xuICAgICAgICBjb25zdCB7IGRpc2NyaW1pbmF0b3IsIGJvZHkgfSA9IHBhcnNlU3ViamVjdChzdWJqZWN0KTtcbiAgICAgICAgXG4gICAgICAgIGxldCByZXN1bHQ7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSAmJiBfLmlzUGxhaW5PYmplY3QoYXJnc1swXSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhc2VzID0gYXJnc1swXTtcbiAgICAgICAgICAgIHJlc3VsdCA9IG1hdGNoQWdhaW5zdE9iamVjdChkaXNjcmltaW5hdG9yLCBib2R5LCBjYXNlcyk7XG4gICAgICAgIH0gZWxzZSBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgXy5pc0FycmF5KGFyZ3NbMF0pKSB7XG4gICAgICAgICAgICBjb25zdCBwcmVkaWNhdGVzID0gYXJnc1swXTtcbiAgICAgICAgICAgIHJlc3VsdCA9IG1hdGNoQWdhaW5zdFByZWRpY2F0ZXMoZGlzY3JpbWluYXRvciwgYm9keSwgcHJlZGljYXRlcyk7XG4gICAgICAgIH0gZWxzZSBpZiAoYXJncy5sZW5ndGggPj0gMSkge1xuICAgICAgICAgICAgY29uc3QgcHJlZGljYXRlcyA9IGFyZ3M7XG4gICAgICAgICAgICByZXN1bHQgPSBtYXRjaEFnYWluc3RQcmVkaWNhdGVzKGRpc2NyaW1pbmF0b3IsIGJvZHksIHByZWRpY2F0ZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBbbWF0Y2guanNdIEludmFsaWQgYXJndW1lbnRzIGdpdmVuYCk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICBcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihtYXRjaGVyLCBkZWZzKTtcbn07XG5cblxuLy8gU3BlY2lmaWMgbWF0Y2hlcnNcblxuLy8gR2VuZXJpYyBtYXRjaC4gQWNjZXB0IGFueSBzdWJqZWN0LCBhbmQgZGlzY3JpbWluYXRlIHVzaW5nIHRoZSB2YWx1ZSBpdHNlbGZcbmNvbnN0IG1hdGNoID0gbWF0Y2hlcihzdWJqZWN0ID0+ICh7IGRpc2NyaW1pbmF0b3I6IHN1YmplY3QsIGJvZHk6IHN1YmplY3QgfSkpO1xuXG4vLyBNYXRjaCBvbiBvYmplY3RzIHdpdGggYSBgdHlwZWAgcHJvcGVydHlcbmNvbnN0IG1hdGNoVHlwZSA9IG1hdGNoZXIoc3ViamVjdCA9PiB7XG4gICAgaWYgKCFfLmlzT2JqZWN0TGlrZShzdWJqZWN0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFttYXRjaC5qc10gRXhwZWN0ZWQgYW4gb2JqZWN0LCBnaXZlbiAke0pTT04uc3RyaW5naWZ5KHN1YmplY3QpfWApO1xuICAgIH1cbiAgICBpZiAoIXN1YmplY3QuaGFzT3duUHJvcGVydHkoJ3R5cGUnKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFttYXRjaC5qc10gTWlzc2luZyAndHlwZScgcHJvcGVydHksIGdpdmVuICR7SlNPTi5zdHJpbmdpZnkoc3ViamVjdCl9YCk7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiB7IGRpc2NyaW1pbmF0b3I6IHN1YmplY3QudHlwZSwgYm9keTogc3ViamVjdCB9O1xufSk7XG5cbmNvbnN0IG1hdGNoU2luZ2xlS2V5ID0gbWF0Y2hlcihzdWJqZWN0ID0+IHtcbiAgICBpZiAoIV8uaXNPYmplY3RMaWtlKHN1YmplY3QpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgW21hdGNoLmpzXSBFeHBlY3RlZCBhbiBvYmplY3QsIGdpdmVuICR7SlNPTi5zdHJpbmdpZnkoc3ViamVjdCl9YCk7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzdWJqZWN0KTtcbiAgICBcbiAgICBpZiAoa2V5cy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBbbWF0Y2guanNdIEV4cGVjdGVkIGFuIG9iamVjdCB3aXRoIGEgc2luZ2xlIGtleSwgZ2l2ZW4gJHtKU09OLnN0cmluZ2lmeShzdWJqZWN0KX1gKTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgZGlzY3JpbWluYXRvciA9IGtleXNbMF07XG4gICAgcmV0dXJuIHsgZGlzY3JpbWluYXRvciwgYm9keTogc3ViamVjdFtkaXNjcmltaW5hdG9yXSB9O1xufSk7XG5cbmV4cG9ydCB7IG1hdGNoZXIsIG1hdGNoLCBtYXRjaFR5cGUsIGdldFNpbmdsZUtleSwgbWF0Y2hTaW5nbGVLZXkgfTtcbmV4cG9ydCBkZWZhdWx0IG1hdGNoO1xuIl19 |
+179
| var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); | ||
| import _ from 'lodash'; | ||
| // Utility | ||
| var getSingleKey = function getSingleKey(obj) { | ||
| if (!_.isPlainObject(obj)) { | ||
| throw new Error('Error: expected object, given \'' + JSON.stringify(obj) + '\''); | ||
| } | ||
| var keys = Object.keys(obj); | ||
| if (keys.length !== 1) { | ||
| throw new Error('Error: expected object with single key, given \'' + JSON.stringify(obj) + '\''); | ||
| } | ||
| var key = keys[0]; | ||
| return { key: key, value: obj[key] }; | ||
| }; | ||
| // Common definitions | ||
| var defaultCase = Symbol('match.default'); | ||
| var defs = { | ||
| case: function _case(predicate, value) { | ||
| return [predicate, value]; | ||
| }, | ||
| otherwise: function otherwise(fn) { | ||
| return [defaultCase, fn]; | ||
| }, | ||
| default: defaultCase | ||
| }; | ||
| // Match against an object, where each property is one case: | ||
| // match('x', { x: 1, y: 2 }) | ||
| var matchAgainstObject = function matchAgainstObject(discriminator, body, cases) { | ||
| var matchedCase = void 0; | ||
| if (cases.hasOwnProperty(discriminator)) { | ||
| matchedCase = cases[discriminator]; | ||
| } else if (cases.hasOwnProperty(defs.default)) { | ||
| matchedCase = cases[defs.default]; | ||
| } else { | ||
| throw new Error('[match.js] Unmatched case: ' + JSON.stringify(discriminator)); | ||
| } | ||
| // If the property is a function, pass the subject body | ||
| var result = void 0; | ||
| if (_.isFunction(matchedCase)) { | ||
| result = matchedCase(body); | ||
| } else { | ||
| result = matchedCase; | ||
| } | ||
| return result; | ||
| }; | ||
| // Match against a list of predicate functions: | ||
| // match({ type: 'x' }, [{ type: 'x' }, 1], [{ type: 'y' }, 2]) | ||
| var matchAgainstPredicates = function matchAgainstPredicates(discriminator, body, predicates) { | ||
| var _iteratorNormalCompletion = true; | ||
| var _didIteratorError = false; | ||
| var _iteratorError = undefined; | ||
| try { | ||
| for (var _iterator = predicates[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { | ||
| var _step$value = _slicedToArray(_step.value, 2), | ||
| predicate = _step$value[0], | ||
| predicateCase = _step$value[1]; | ||
| // If given an object | ||
| if (_.isObjectLike(predicate)) { | ||
| predicate = _.matches(predicate); | ||
| } | ||
| var matchedCase = void 0; | ||
| if (predicate === discriminator) { | ||
| matchedCase = predicateCase; | ||
| } else if (_.isFunction(predicate) && predicate(discriminator) == true) { | ||
| // Note: using weak equality (==) for predicate check | ||
| matchedCase = predicateCase; | ||
| } else if (predicate === defs.default) { | ||
| matchedCase = predicateCase; | ||
| } | ||
| if (matchedCase !== undefined) { | ||
| if (_.isFunction(matchedCase)) { | ||
| return matchedCase(body); | ||
| } else { | ||
| return matchedCase; | ||
| } | ||
| } | ||
| } | ||
| // Fall-through: no match | ||
| } catch (err) { | ||
| _didIteratorError = true; | ||
| _iteratorError = err; | ||
| } finally { | ||
| try { | ||
| if (!_iteratorNormalCompletion && _iterator.return) { | ||
| _iterator.return(); | ||
| } | ||
| } finally { | ||
| if (_didIteratorError) { | ||
| throw _iteratorError; | ||
| } | ||
| } | ||
| } | ||
| throw new Error('[match.js] Unmatched case: ' + JSON.stringify(discriminator)); | ||
| }; | ||
| // Create a new matcher using the given parser | ||
| var matcher = function matcher(parseSubject) { | ||
| var matcher = function matcher(subject) { | ||
| for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { | ||
| args[_key - 1] = arguments[_key]; | ||
| } | ||
| var _parseSubject = parseSubject(subject), | ||
| discriminator = _parseSubject.discriminator, | ||
| body = _parseSubject.body; | ||
| var result = void 0; | ||
| if (args.length === 1 && _.isPlainObject(args[0])) { | ||
| var cases = args[0]; | ||
| result = matchAgainstObject(discriminator, body, cases); | ||
| } else if (args.length === 1 && _.isArray(args[0])) { | ||
| var predicates = args[0]; | ||
| result = matchAgainstPredicates(discriminator, body, predicates); | ||
| } else if (args.length >= 1) { | ||
| var _predicates = args; | ||
| result = matchAgainstPredicates(discriminator, body, _predicates); | ||
| } else { | ||
| throw new Error('[match.js] Invalid arguments given'); | ||
| } | ||
| return result; | ||
| }; | ||
| return Object.assign(matcher, defs); | ||
| }; | ||
| // Specific matchers | ||
| // Generic match. Accept any subject, and discriminate using the value itself | ||
| var match = matcher(function (subject) { | ||
| return { discriminator: subject, body: subject }; | ||
| }); | ||
| // Match on objects with a `type` property | ||
| var matchType = matcher(function (subject) { | ||
| if (!_.isObjectLike(subject)) { | ||
| throw new Error('[match.js] Expected an object, given ' + JSON.stringify(subject)); | ||
| } | ||
| if (!subject.hasOwnProperty('type')) { | ||
| throw new Error('[match.js] Missing \'type\' property, given ' + JSON.stringify(subject)); | ||
| } | ||
| return { discriminator: subject.type, body: subject }; | ||
| }); | ||
| var matchSingleKey = matcher(function (subject) { | ||
| if (!_.isObjectLike(subject)) { | ||
| throw new Error('[match.js] Expected an object, given ' + JSON.stringify(subject)); | ||
| } | ||
| var keys = Object.keys(subject); | ||
| if (keys.length !== 1) { | ||
| throw new Error('[match.js] Expected an object with a single key, given ' + JSON.stringify(subject)); | ||
| } | ||
| var discriminator = keys[0]; | ||
| return { discriminator: discriminator, body: subject[discriminator] }; | ||
| }); | ||
| export { matcher, match, matchType, getSingleKey, matchSingleKey }; | ||
| export default match; | ||
| //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tYXRjaC5qcyJdLCJuYW1lcyI6WyJfIiwiZ2V0U2luZ2xlS2V5IiwiaXNQbGFpbk9iamVjdCIsIm9iaiIsIkVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsImtleXMiLCJPYmplY3QiLCJsZW5ndGgiLCJrZXkiLCJ2YWx1ZSIsImRlZmF1bHRDYXNlIiwiU3ltYm9sIiwiZGVmcyIsImNhc2UiLCJwcmVkaWNhdGUiLCJvdGhlcndpc2UiLCJmbiIsImRlZmF1bHQiLCJtYXRjaEFnYWluc3RPYmplY3QiLCJkaXNjcmltaW5hdG9yIiwiYm9keSIsImNhc2VzIiwibWF0Y2hlZENhc2UiLCJoYXNPd25Qcm9wZXJ0eSIsInJlc3VsdCIsImlzRnVuY3Rpb24iLCJtYXRjaEFnYWluc3RQcmVkaWNhdGVzIiwicHJlZGljYXRlcyIsInByZWRpY2F0ZUNhc2UiLCJpc09iamVjdExpa2UiLCJtYXRjaGVzIiwidW5kZWZpbmVkIiwibWF0Y2hlciIsInN1YmplY3QiLCJhcmdzIiwicGFyc2VTdWJqZWN0IiwiaXNBcnJheSIsImFzc2lnbiIsIm1hdGNoIiwibWF0Y2hUeXBlIiwidHlwZSIsIm1hdGNoU2luZ2xlS2V5Il0sIm1hcHBpbmdzIjoiOztBQUNBLE9BQU9BLENBQVAsTUFBYyxRQUFkOztBQUdBOztBQUVBLElBQU1DLGVBQWUsU0FBZkEsWUFBZSxNQUFPO0FBQ3hCLFFBQUksQ0FBQ0QsRUFBRUUsYUFBRixDQUFnQkMsR0FBaEIsQ0FBTCxFQUEyQjtBQUN2QixjQUFNLElBQUlDLEtBQUosc0NBQTRDQyxLQUFLQyxTQUFMLENBQWVILEdBQWYsQ0FBNUMsUUFBTjtBQUNIOztBQUVELFFBQU1JLE9BQU9DLE9BQU9ELElBQVAsQ0FBWUosR0FBWixDQUFiO0FBQ0EsUUFBSUksS0FBS0UsTUFBTCxLQUFnQixDQUFwQixFQUF1QjtBQUNuQixjQUFNLElBQUlMLEtBQUosc0RBQTREQyxLQUFLQyxTQUFMLENBQWVILEdBQWYsQ0FBNUQsUUFBTjtBQUNIOztBQUVELFFBQU1P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SSxPQUFmLENBQUwsRUFBOEI7QUFDMUIsY0FBTSxJQUFJL0IsS0FBSiwyQ0FBa0RDLEtBQUtDLFNBQUwsQ0FBZTZCLE9BQWYsQ0FBbEQsQ0FBTjtBQUNIO0FBQ0QsUUFBSSxDQUFDQSxRQUFRVixjQUFSLENBQXVCLE1BQXZCLENBQUwsRUFBcUM7QUFDakMsY0FBTSxJQUFJckIsS0FBSixrREFBdURDLEtBQUtDLFNBQUwsQ0FBZTZCLE9BQWYsQ0FBdkQsQ0FBTjtBQUNIOztBQUVELFdBQU8sRUFBRWQsZUFBZWMsUUFBUU8sSUFBekIsRUFBK0JwQixNQUFNYSxPQUFyQyxFQUFQO0FBQ0gsQ0FUaUIsQ0FBbEI7O0FBV0EsSUFBTVEsaUJBQWlCVCxRQUFRLG1CQUFXO0FBQ3RDLFFBQUksQ0FBQ2xDLEVBQUUrQixZQUFGLENBQWVJLE9BQWYsQ0FBTCxFQUE4QjtBQUMxQixjQUFNLElBQUkvQixLQUFKLDJDQUFrREMsS0FBS0MsU0FBTCxDQUFlNkIsT0FBZixDQUFsRCxDQUFOO0FBQ0g7O0FBRUQsUUFBTTVCLE9BQU9DLE9BQU9ELElBQVAsQ0FBWTRCLE9BQVosQ0FBYjs7QUFFQSxRQUFJNUIsS0FBS0UsTUFBTCxLQUFnQixDQUFwQixFQUF1QjtBQUNuQixjQUFNLElBQUlMLEtBQUosNkRBQW9FQyxLQUFLQyxTQUFMLENBQWU2QixPQUFmLENBQXBFLENBQU47QUFDSDs7QUFFRCxRQUFNZCxnQkFBZ0JkLEtBQUssQ0FBTCxDQUF0QjtBQUNBLFdBQU8sRUFBRWMsNEJBQUYsRUFBaUJDLE1BQU1hLFFBQVFkLGFBQVIsQ0FBdkIsRUFBUDtBQUNILENBYnNCLENBQXZCOztBQWVBLFNBQVNhLE9BQVQsRUFBa0JNLEtBQWxCLEVBQXlCQyxTQUF6QixFQUFvQ3hDLFlBQXBDLEVBQWtEMEMsY0FBbEQ7QUFDQSxlQUFlSCxLQUFmIiwiZmlsZSI6Im1hdGNoLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuXG5cbi8vIFV0aWxpdHlcblxuY29uc3QgZ2V0U2luZ2xlS2V5ID0gb2JqID0+IHtcbiAgICBpZiAoIV8uaXNQbGFpbk9iamVjdChvYmopKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3I6IGV4cGVjdGVkIG9iamVjdCwgZ2l2ZW4gJyR7SlNPTi5zdHJpbmdpZnkob2JqKX0nYCk7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgIGlmIChrZXlzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yOiBleHBlY3RlZCBvYmplY3Qgd2l0aCBzaW5nbGUga2V5LCBnaXZlbiAnJHtKU09OLnN0cmluZ2lmeShvYmopfSdgKTtcbiAgICB9XG4gICAgXG4gICAgY29uc3Qga2V5ID0ga2V5c1swXTtcbiAgICByZXR1cm4geyBrZXksIHZhbHVlOiBvYmpba2V5XSB9O1xufTtcblxuXG4vLyBDb21tb24gZGVmaW5pdGlvbnNcbmNvbnN0IGRlZmF1bHRDYXNlID0gU3ltYm9sKCdtYXRjaC5kZWZhdWx0Jyk7XG5jb25zdCBkZWZzID0ge1xuICAgIGNhc2U6IChwcmVkaWNhdGUsIHZhbHVlKSA9PiBbcHJlZGljYXRlLCB2YWx1ZV0sXG4gICAgb3RoZXJ3aXNlOiBmbiA9PiBbZGVmYXVsdENhc2UsIGZuXSxcbiAgICBkZWZhdWx0OiBkZWZhdWx0Q2FzZSxcbn07XG5cblxuLy8gTWF0Y2ggYWdhaW5zdCBhbiBvYmplY3QsIHdoZXJlIGVhY2ggcHJvcGVydHkgaXMgb25lIGNhc2U6XG4vLyAgIG1hdGNoKCd4JywgeyB4OiAxLCB5OiAyIH0pXG5jb25zdCBtYXRjaEFnYWluc3RPYmplY3QgPSAoZGlzY3JpbWluYXRvciwgYm9keSwgY2FzZXMpID0+IHtcbiAgICBsZXQgbWF0Y2hlZENhc2U7XG4gICAgaWYgKGNhc2VzLmhhc093blByb3BlcnR5KGRpc2NyaW1pbmF0b3IpKSB7XG4gICAgICAgIG1hdGNoZWRDYXNlID0gY2FzZXNbZGlzY3JpbWluYXRvcl07XG4gICAgfSBlbHNlIGlmIChjYXNlcy5oYXNPd25Qcm9wZXJ0eShkZWZzLmRlZmF1bHQpKSB7XG4gICAgICAgIG1hdGNoZWRDYXNlID0gY2FzZXNbZGVmcy5kZWZhdWx0XTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFttYXRjaC5qc10gVW5tYXRjaGVkIGNhc2U6ICR7SlNPTi5zdHJpbmdpZnkoZGlzY3JpbWluYXRvcil9YCk7XG4gICAgfVxuICAgIFxuICAgIC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBhIGZ1bmN0aW9uLCBwYXNzIHRoZSBzdWJqZWN0IGJvZHlcbiAgICBsZXQgcmVzdWx0O1xuICAgIGlmIChfLmlzRnVuY3Rpb24obWF0Y2hlZENhc2UpKSB7XG4gICAgICAgIHJlc3VsdCA9IG1hdGNoZWRDYXNlKGJvZHkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IG1hdGNoZWRDYXNlO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gTWF0Y2ggYWdhaW5zdCBhIGxpc3Qgb2YgcHJlZGljYXRlIGZ1bmN0aW9uczpcbi8vICAgbWF0Y2goeyB0eXBlOiAneCcgfSwgW3sgdHlwZTogJ3gnIH0sIDFdLCBbeyB0eXBlOiAneScgfSwgMl0pXG5jb25zdCBtYXRjaEFnYWluc3RQcmVkaWNhdGVzID0gKGRpc2NyaW1pbmF0b3IsIGJvZHksIHByZWRpY2F0ZXMpID0+IHtcbiAgICBmb3IgKGxldCBbcHJlZGljYXRlLCBwcmVkaWNhdGVDYXNlXSBvZiBwcmVkaWNhdGVzKSB7XG4gICAgICAgIC8vIElmIGdpdmVuIGFuIG9iamVjdFxuICAgICAgICBpZiAoXy5pc09iamVjdExpa2UocHJlZGljYXRlKSkge1xuICAgICAgICAgICAgcHJlZGljYXRlID0gXy5tYXRjaGVzKHByZWRpY2F0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGxldCBtYXRjaGVkQ2FzZTtcbiAgICAgICAgaWYgKHByZWRpY2F0ZSA9PT0gZGlzY3JpbWluYXRvcikge1xuICAgICAgICAgICAgbWF0Y2hlZENhc2UgPSBwcmVkaWNhdGVDYXNlO1xuICAgICAgICB9IGVsc2UgaWYgKF8uaXNGdW5jdGlvbihwcmVkaWNhdGUpICYmIHByZWRpY2F0ZShkaXNjcmltaW5hdG9yKSA9PSB0cnVlKSB7XG4gICAgICAgICAgICAvLyBOb3RlOiB1c2luZyB3ZWFrIGVxdWFsaXR5ICg9PSkgZm9yIHByZWRpY2F0ZSBjaGVja1xuICAgICAgICAgICAgbWF0Y2hlZENhc2UgPSBwcmVkaWNhdGVDYXNlO1xuICAgICAgICB9IGVsc2UgaWYgKHByZWRpY2F0ZSA9PT0gZGVmcy5kZWZhdWx0KSB7XG4gICAgICAgICAgICBtYXRjaGVkQ2FzZSA9IHByZWRpY2F0ZUNhc2U7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmIChtYXRjaGVkQ2FzZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoXy5pc0Z1bmN0aW9uKG1hdGNoZWRDYXNlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaGVkQ2FzZShib2R5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoZWRDYXNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIEZhbGwtdGhyb3VnaDogbm8gbWF0Y2hcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFttYXRjaC5qc10gVW5tYXRjaGVkIGNhc2U6ICR7SlNPTi5zdHJpbmdpZnkoZGlzY3JpbWluYXRvcil9YCk7XG59O1xuXG5cbi8vIENyZWF0ZSBhIG5ldyBtYXRjaGVyIHVzaW5nIHRoZSBnaXZlbiBwYXJzZXJcbmNvbnN0IG1hdGNoZXIgPSBwYXJzZVN1YmplY3QgPT4ge1xuICAgIGNvbnN0IG1hdGNoZXIgPSAoc3ViamVjdCwgLi4uYXJncykgPT4ge1xuICAgICAgICBjb25zdCB7IGRpc2NyaW1pbmF0b3IsIGJvZHkgfSA9IHBhcnNlU3ViamVjdChzdWJqZWN0KTtcbiAgICAgICAgXG4gICAgICAgIGxldCByZXN1bHQ7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSAmJiBfLmlzUGxhaW5PYmplY3QoYXJnc1swXSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhc2VzID0gYXJnc1swXTtcbiAgICAgICAgICAgIHJlc3VsdCA9IG1hdGNoQWdhaW5zdE9iamVjdChkaXNjcmltaW5hdG9yLCBib2R5LCBjYXNlcyk7XG4gICAgICAgIH0gZWxzZSBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgXy5pc0FycmF5KGFyZ3NbMF0pKSB7XG4gICAgICAgICAgICBjb25zdCBwcmVkaWNhdGVzID0gYXJnc1swXTtcbiAgICAgICAgICAgIHJlc3VsdCA9IG1hdGNoQWdhaW5zdFByZWRpY2F0ZXMoZGlzY3JpbWluYXRvciwgYm9keSwgcHJlZGljYXRlcyk7XG4gICAgICAgIH0gZWxzZSBpZiAoYXJncy5sZW5ndGggPj0gMSkge1xuICAgICAgICAgICAgY29uc3QgcHJlZGljYXRlcyA9IGFyZ3M7XG4gICAgICAgICAgICByZXN1bHQgPSBtYXRjaEFnYWluc3RQcmVkaWNhdGVzKGRpc2NyaW1pbmF0b3IsIGJvZHksIHByZWRpY2F0ZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBbbWF0Y2guanNdIEludmFsaWQgYXJndW1lbnRzIGdpdmVuYCk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICBcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihtYXRjaGVyLCBkZWZzKTtcbn07XG5cblxuLy8gU3BlY2lmaWMgbWF0Y2hlcnNcblxuLy8gR2VuZXJpYyBtYXRjaC4gQWNjZXB0IGFueSBzdWJqZWN0LCBhbmQgZGlzY3JpbWluYXRlIHVzaW5nIHRoZSB2YWx1ZSBpdHNlbGZcbmNvbnN0IG1hdGNoID0gbWF0Y2hlcihzdWJqZWN0ID0+ICh7IGRpc2NyaW1pbmF0b3I6IHN1YmplY3QsIGJvZHk6IHN1YmplY3QgfSkpO1xuXG4vLyBNYXRjaCBvbiBvYmplY3RzIHdpdGggYSBgdHlwZWAgcHJvcGVydHlcbmNvbnN0IG1hdGNoVHlwZSA9IG1hdGNoZXIoc3ViamVjdCA9PiB7XG4gICAgaWYgKCFfLmlzT2JqZWN0TGlrZShzdWJqZWN0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFttYXRjaC5qc10gRXhwZWN0ZWQgYW4gb2JqZWN0LCBnaXZlbiAke0pTT04uc3RyaW5naWZ5KHN1YmplY3QpfWApO1xuICAgIH1cbiAgICBpZiAoIXN1YmplY3QuaGFzT3duUHJvcGVydHkoJ3R5cGUnKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFttYXRjaC5qc10gTWlzc2luZyAndHlwZScgcHJvcGVydHksIGdpdmVuICR7SlNPTi5zdHJpbmdpZnkoc3ViamVjdCl9YCk7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiB7IGRpc2NyaW1pbmF0b3I6IHN1YmplY3QudHlwZSwgYm9keTogc3ViamVjdCB9O1xufSk7XG5cbmNvbnN0IG1hdGNoU2luZ2xlS2V5ID0gbWF0Y2hlcihzdWJqZWN0ID0+IHtcbiAgICBpZiAoIV8uaXNPYmplY3RMaWtlKHN1YmplY3QpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgW21hdGNoLmpzXSBFeHBlY3RlZCBhbiBvYmplY3QsIGdpdmVuICR7SlNPTi5zdHJpbmdpZnkoc3ViamVjdCl9YCk7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzdWJqZWN0KTtcbiAgICBcbiAgICBpZiAoa2V5cy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBbbWF0Y2guanNdIEV4cGVjdGVkIGFuIG9iamVjdCB3aXRoIGEgc2luZ2xlIGtleSwgZ2l2ZW4gJHtKU09OLnN0cmluZ2lmeShzdWJqZWN0KX1gKTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgZGlzY3JpbWluYXRvciA9IGtleXNbMF07XG4gICAgcmV0dXJuIHsgZGlzY3JpbWluYXRvciwgYm9keTogc3ViamVjdFtkaXNjcmltaW5hdG9yXSB9O1xufSk7XG5cbmV4cG9ydCB7IG1hdGNoZXIsIG1hdGNoLCBtYXRjaFR5cGUsIGdldFNpbmdsZUtleSwgbWF0Y2hTaW5nbGVLZXkgfTtcbmV4cG9ydCBkZWZhdWx0IG1hdGNoO1xuIl19 |
+3
-2
| { | ||
| "name": "@mkrause/match", | ||
| "version": "1.0.15", | ||
| "version": "1.0.16", | ||
| "description": "Case matching utility.", | ||
@@ -16,3 +16,4 @@ "author": "mkrause", | ||
| "src/", | ||
| "lib/", | ||
| "lib-cjs/", | ||
| "lib-es/", | ||
| "tests/" | ||
@@ -19,0 +20,0 @@ ], |
54803
225.61%7
40%572
119.16%