shineout
Version:
Shein 前端组件库
101 lines (97 loc) • 2.71 kB
JavaScript
;
exports.__esModule = true;
exports.compose = compose;
// type Fn<V, R> = (x: V) => R
// // @ts-expect-error T is an array :troll:
// type Q<T, V> = (...args: T) => V
//
// export function compose<T, V0, V1>(fn1: Fn<V0, V1>, fn0: Q<T, V0>): Q<T, V1>
// export function compose<T, V0, V1, V2>(fn2: Fn<V1, V2>, fn1: Fn<V0, V1>, fn0: Q<T, V0>): Q<T, V2>
// export function compose<T, V0, V1, V2, V3>(fn3: Fn<V2, V3>, fn2: Fn<V1, V2>, fn1: Fn<V0, V1>, fn0: Q<T, V0>): Q<T, V3>
// export function compose<T, V0, V1, V2, V3, V4>(
// fn4: Fn<V3, V4>,
// fn3: Fn<V2, V3>,
// fn2: Fn<V1, V2>,
// fn1: Fn<V0, V1>,
// fn0: Q<T, V0>
// ): Q<T, V4>
// export function compose<T, V0, V1, V2, V3, V4, V5>(
// fn5: Fn<V4, V5>,
// fn4: Fn<V3, V4>,
// fn3: Fn<V2, V3>,
// fn2: Fn<V1, V2>,
// fn1: Fn<V0, V1>,
// fn0: Q<T, V0>
// ): Q<T, V5>
// export function compose<T, V0, V1, V2, V3, V4, V5, V6>(
// fn6: Fn<V5, V6>,
// fn5: Fn<V4, V5>,
// fn4: Fn<V3, V4>,
// fn3: Fn<V2, V3>,
// fn2: Fn<V1, V2>,
// fn1: Fn<V0, V1>,
// fn0: Q<T, V0>
// ): Q<T, V6>
// export function compose<T, V0, V1, V2, V3, V4, V5, V6, V7>(
// fn7: Fn<V6, V7>,
// fn6: Fn<V5, V6>,
// fn5: Fn<V4, V5>,
// fn4: Fn<V3, V4>,
// fn3: Fn<V2, V3>,
// fn2: Fn<V1, V2>,
// fn1: Fn<V0, V1>,
// fn0: Q<T, V0>
// ): Q<T, V7>
// export function compose<T, V0, V1, V2, V3, V4, V5, V6, V7, V8>(
// fn8: Fn<V7, V8>,
// fn7: Fn<V6, V7>,
// fn6: Fn<V5, V6>,
// fn5: Fn<V4, V5>,
// fn4: Fn<V3, V4>,
// fn3: Fn<V2, V3>,
// fn2: Fn<V1, V2>,
// fn1: Fn<V0, V1>,
// fn0: Q<T, V0>
// ): Q<T, V8>
// export function compose<T, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9>(
// fn9: Fn<V8, V9>,
// fn8: Fn<V7, V8>,
// fn7: Fn<V6, V7>,
// fn6: Fn<V5, V6>,
// fn5: Fn<V4, V5>,
// fn4: Fn<V3, V4>,
// fn3: Fn<V2, V3>,
// fn2: Fn<V1, V2>,
// fn1: Fn<V0, V1>,
// fn0: Q<T, V0>
// ): Q<T, V9>
// export function compose<T, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10>(
// fn10: Fn<V9, V10>,
// fn9: Fn<V8, V9>,
// fn8: Fn<V7, V8>,
// fn7: Fn<V6, V7>,
// fn6: Fn<V5, V6>,
// fn5: Fn<V4, V5>,
// fn4: Fn<V3, V4>,
// fn3: Fn<V2, V3>,
// fn2: Fn<V1, V2>,
// fn1: Fn<V0, V1>,
// fn0: Q<T, V0>
// ): Q<T, V10>
function compose() {
for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {
funcs[_key] = arguments[_key];
}
if (funcs.length === 0) {
return function (arg) {
return arg;
};
}
var last = funcs[funcs.length - 1];
var rest = funcs.slice(0, -1);
return function () {
return rest.reduceRight(function (composed, f) {
return f(composed);
}, last.apply(void 0, arguments));
};
}