index.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. 'use strict';
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. var patternParts = {
  4. value: '[-+]?(?:Infinity|[[0-9]*\\.?\\d*(?:[eE][-+]?\\d+)?)',
  5. leftBrace: '[\\(\\]\\[]',
  6. delimeter: ',',
  7. rightBrace: '[\\)\\]\\[]',
  8. };
  9. var PATTERN = new RegExp("(" + patternParts.leftBrace + ")" +
  10. ("(" + patternParts.value + ")?") +
  11. ("(" + patternParts.delimeter + ")?") +
  12. ("(" + patternParts.value + ")?") +
  13. ("(" + patternParts.rightBrace + ")"));
  14. function execPattern(str) {
  15. var match = PATTERN.exec(str);
  16. if (!match) {
  17. return null;
  18. }
  19. var _ = match[0], leftBrace = match[1], fromValue = match[2], delimeter = match[3], toValue = match[4], rightBrace = match[5];
  20. return {
  21. leftBrace: leftBrace,
  22. fromValue: fromValue,
  23. delimeter: delimeter,
  24. toValue: toValue,
  25. rightBrace: rightBrace,
  26. };
  27. }
  28. function parse(str) {
  29. var match = execPattern(str);
  30. if (!match) {
  31. return null;
  32. }
  33. return {
  34. from: {
  35. value: match.fromValue !== undefined ?
  36. +match.fromValue :
  37. -Infinity,
  38. included: match.leftBrace === '['
  39. },
  40. to: {
  41. value: match.toValue !== undefined ?
  42. +match.toValue :
  43. (match.delimeter ?
  44. +Infinity :
  45. match.fromValue !== undefined ?
  46. +match.fromValue :
  47. NaN),
  48. included: match.rightBrace === ']'
  49. }
  50. };
  51. }
  52. function check(interval) {
  53. if (interval.from.value === interval.to.value) {
  54. return interval.from.included && interval.to.included;
  55. }
  56. return Math.min(interval.from.value, interval.to.value) === interval.from.value;
  57. }
  58. function entry(str) {
  59. var interval = parse(str);
  60. if (!interval || !check(interval)) {
  61. return null;
  62. }
  63. return interval;
  64. }
  65. exports.default = entry;