UNPKG

983 BJavaScriptView Raw
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 */
10function createChainedFunction() {
11 for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {
12 funcs[_key] = arguments[_key];
13 }
14
15 return funcs.filter(function (f) {
16 return f != null;
17 }).reduce(function (acc, f) {
18 if (typeof f !== 'function') {
19 throw new Error('Invalid Argument Type, must only provide functions, undefined, or null.');
20 }
21
22 if (acc === null) return f;
23 return function chainedFunction() {
24 for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
25 args[_key2] = arguments[_key2];
26 }
27
28 // @ts-ignore
29 acc.apply(this, args); // @ts-ignore
30
31 f.apply(this, args);
32 };
33 }, null);
34}
35
36export default createChainedFunction;
\No newline at end of file