rubico
Version:
[a]synchronous functional programming
8 lines (7 loc) • 2.7 kB
JavaScript
/**
* rubico v2.6.2
* https://github.com/a-synchronous/rubico
* (c) 2019-2024 Richard Tong
* rubico may be freely distributed under the MIT license.
*/
const isPromise=r=>null!=r&&"function"==typeof r.then,isArray=Array.isArray,areAnyValuesPromises=function(r){if(isArray(r)){const e=r.length;let s=-1;for(;++s<e;){const e=r[s];if(isPromise(e))return!0}return!1}for(const e in r){const s=r[e];if(isPromise(s))return!0}return!1},__=Symbol.for("placeholder"),curry4ResolveArg0=(r,e,s,o)=>function(t){return r(t,e,s,o)},curry4ResolveArg1=(r,e,s,o)=>function(t){return r(e,t,s,o)},curry4ResolveArg2=(r,e,s,o)=>function(t){return r(e,s,t,o)},curry4ResolveArg3=(r,e,s,o)=>function(t){return r(e,s,o,t)},curry4=function(r,e,s,o,t){return e==__?curry4ResolveArg0(r,s,o,t):s==__?curry4ResolveArg1(r,e,o,t):o==__?curry4ResolveArg2(r,e,s,t):curry4ResolveArg3(r,e,s,o)},curryArgs4ResolveArgs0=(r,e,s,o)=>function(...t){return r(t,e,s,o)},curryArgs4ResolveArgs1=(r,e,s,o)=>function(...t){return r(e,t,s,o)},curryArgs4ResolveArgs2=(r,e,s,o)=>function(...t){return r(e,s,t,o)},curryArgs4ResolveArgs3=(r,e,s,o)=>function(...t){return r(e,s,o,t)},curryArgs4=function(r,e,s,o,t){return e==__?curryArgs4ResolveArgs0(r,s,o,t):s==__?curryArgs4ResolveArgs1(r,e,o,t):o==__?curryArgs4ResolveArgs2(r,e,s,t):curryArgs4ResolveArgs3(r,e,s,o)},spread2=r=>function([e,s]){return r(e,s)},promiseAll=Promise.all.bind(Promise),leftResolverRightResolverCompare=function(r,e,s,o){const t=s(...r),n=o(...r);return isPromise(t)||isPromise(n)?promiseAll([t,n]).then(spread2(e)):e(t,n)},leftResolverRightValueCompare=function(r,e,s,o){const t=s(...r);return isPromise(t)||isPromise(o)?promiseAll([t,o]).then(spread2(e)):e(t,o)},leftValueRightResolverCompare=function(r,e,s,o){const t=o(...r);return isPromise(s)||isPromise(t)?promiseAll([s,t]).then(spread2(e)):e(s,t)},ComparisonOperator=r=>function(...e){const s=e.pop(),o=e.pop(),t="function"==typeof o,n="function"==typeof s;return t&&n?0==e.length?curryArgs4(leftResolverRightResolverCompare,__,r,o,s):areAnyValuesPromises(e)?promiseAll(e).then(curry4(leftResolverRightResolverCompare,__,r,o,s)):leftResolverRightResolverCompare(e,r,o,s):t?0==e.length?curryArgs4(leftResolverRightValueCompare,__,r,o,s):areAnyValuesPromises(e)?promiseAll(e).then(curry4(leftResolverRightValueCompare,__,r,o,s)):leftResolverRightValueCompare(e,r,o,s):n?0==e.length?curryArgs4(leftValueRightResolverCompare,__,r,o,s):areAnyValuesPromises(e)?promiseAll(e).then(curry4(leftValueRightResolverCompare,__,r,o,s)):leftValueRightResolverCompare(e,r,o,s):isPromise(o)||isPromise(s)?promiseAll([o,s]).then(spread2(r)):r(o,s)},equals=function(r,e){return r==e},eq=ComparisonOperator(equals);export default eq;