Dashboard sipadu mbip
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

createChainedFunction.js 948B

12345678910111213141516171819202122232425262728293031323334
  1. /**
  2. * Safe chained function
  3. *
  4. * Will only create a new function if needed,
  5. * otherwise will pass back existing functions or null.
  6. *
  7. * @param {function} functions to chain
  8. * @returns {function|null}
  9. */
  10. function createChainedFunction() {
  11. for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {
  12. funcs[_key] = arguments[_key];
  13. }
  14. return funcs.filter(function (f) {
  15. return f != null;
  16. }).reduce(function (acc, f) {
  17. if (typeof f !== 'function') {
  18. throw new Error('Invalid Argument Type, must only provide functions, undefined, or null.');
  19. }
  20. if (acc === null) return f;
  21. return function chainedFunction() {
  22. for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
  23. args[_key2] = arguments[_key2];
  24. }
  25. acc.apply(this, args);
  26. f.apply(this, args);
  27. };
  28. }, null);
  29. }
  30. export default createChainedFunction;