utils.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
  2. function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
  3. function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
  4. function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }
  5. function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
  6. function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
  7. var identity = function identity(i) {
  8. return i;
  9. };
  10. export var PLACE_HOLDER = {
  11. '@@functional/placeholder': true
  12. };
  13. var isPlaceHolder = function isPlaceHolder(val) {
  14. return val === PLACE_HOLDER;
  15. };
  16. var curry0 = function curry0(fn) {
  17. return function _curried() {
  18. if (arguments.length === 0 || arguments.length === 1 && isPlaceHolder(arguments.length <= 0 ? undefined : arguments[0])) {
  19. return _curried;
  20. }
  21. return fn.apply(void 0, arguments);
  22. };
  23. };
  24. var curryN = function curryN(n, fn) {
  25. if (n === 1) {
  26. return fn;
  27. }
  28. return curry0(function () {
  29. for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
  30. args[_key] = arguments[_key];
  31. }
  32. var argsLength = args.filter(function (arg) {
  33. return arg !== PLACE_HOLDER;
  34. }).length;
  35. if (argsLength >= n) {
  36. return fn.apply(void 0, args);
  37. }
  38. return curryN(n - argsLength, curry0(function () {
  39. for (var _len2 = arguments.length, restArgs = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
  40. restArgs[_key2] = arguments[_key2];
  41. }
  42. var newArgs = args.map(function (arg) {
  43. return isPlaceHolder(arg) ? restArgs.shift() : arg;
  44. });
  45. return fn.apply(void 0, _toConsumableArray(newArgs).concat(restArgs));
  46. }));
  47. });
  48. };
  49. export var curry = function curry(fn) {
  50. return curryN(fn.length, fn);
  51. };
  52. export var range = function range(begin, end) {
  53. var arr = [];
  54. for (var i = begin; i < end; ++i) {
  55. arr[i - begin] = i;
  56. }
  57. return arr;
  58. };
  59. export var map = curry(function (fn, arr) {
  60. if (Array.isArray(arr)) {
  61. return arr.map(fn);
  62. }
  63. return Object.keys(arr).map(function (key) {
  64. return arr[key];
  65. }).map(fn);
  66. });
  67. export var compose = function compose() {
  68. for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
  69. args[_key3] = arguments[_key3];
  70. }
  71. if (!args.length) {
  72. return identity;
  73. }
  74. var fns = args.reverse(); // first function can receive multiply arguments
  75. var firstFn = fns[0];
  76. var tailsFn = fns.slice(1);
  77. return function () {
  78. return tailsFn.reduce(function (res, fn) {
  79. return fn(res);
  80. }, firstFn.apply(void 0, arguments));
  81. };
  82. };
  83. export var reverse = function reverse(arr) {
  84. if (Array.isArray(arr)) {
  85. return arr.reverse();
  86. } // can be string
  87. return arr.split('').reverse.join('');
  88. };
  89. export var memoize = function memoize(fn) {
  90. var lastArgs = null;
  91. var lastResult = null;
  92. return function () {
  93. for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
  94. args[_key4] = arguments[_key4];
  95. }
  96. if (lastArgs && args.every(function (val, i) {
  97. return val === lastArgs[i];
  98. })) {
  99. return lastResult;
  100. }
  101. lastArgs = args;
  102. lastResult = fn.apply(void 0, args);
  103. return lastResult;
  104. };
  105. };