rubico
Version:
[a]synchronous functional programming
9 lines (8 loc) • 2.52 kB
JavaScript
/**
* Rubico v2.8.2
* https://rubico.land/
*
* © Richard Yufei Tong, King of Software
* Rubico may be freely distributed under the CFOSS license.
*/
const isArray=Array.isArray,isPromise=r=>null!=r&&"function"==typeof r.then,areAnyValuesPromises=function(r){if(isArray(r)){const e=r.length;let u=-1;for(;++u<e;){const e=r[u];if(isPromise(e))return!0}return!1}for(const e in r){const u=r[e];if(isPromise(u))return!0}return!1},promiseAll=Promise.all.bind(Promise),__=Symbol.for("placeholder"),curry4ResolveArg0=(r,e,u,n)=>function(t){return r(t,e,u,n)},curry4ResolveArg1=(r,e,u,n)=>function(t){return r(e,t,u,n)},curry4ResolveArg2=(r,e,u,n)=>function(t){return r(e,u,t,n)},curry4ResolveArg3=(r,e,u,n)=>function(t){return r(e,u,n,t)},curry4=function(r,e,u,n,t){return e==__?curry4ResolveArg0(r,u,n,t):u==__?curry4ResolveArg1(r,e,n,t):n==__?curry4ResolveArg2(r,e,u,t):curry4ResolveArg3(r,e,u,n)},curry3ResolveArg0=(r,e,u)=>function(n){return r(n,e,u)},curry3ResolveArg1=(r,e,u)=>function(n){return r(e,n,u)},curry3ResolveArg2=(r,e,u)=>function(n){return r(e,u,n)},curry3=function(r,e,u,n){return e==__?curry3ResolveArg0(r,u,n):u==__?curry3ResolveArg1(r,e,n):curry3ResolveArg2(r,e,u)},funcApply2=(r,e,u)=>r.apply(e,u),_curryArity=(r,e,u,n)=>function(...t){const y=n.length,c=t.length,i=[];let s=-1,l=-1,o=0;for(;++s<y;){const y=n[s];if(y==__&&(l+=1)<c){const r=t[l];r==__&&(o+=1),i.push(r)}else i.push(y);if(i.length==r)return areAnyValuesPromises(i)?0==o?promiseAll(i).then(curry3(funcApply2,e,u,__)):promiseAll(i).then(curry4(curryArity,r,e,u,__)):0==o?e.apply(u,i):curryArity(r,e,u,i)}for(;++l<c;){const n=t[l];if(n==__&&(o+=1),i.push(n),i.length==r)return areAnyValuesPromises(i)?0==o?promiseAll(i).then(curry3(funcApply2,e,u,__)):promiseAll(i).then(curry4(curryArity,r,e,u,__)):0==o?e.apply(u,i):curryArity(r,e,u,i)}return areAnyValuesPromises(i)?promiseAll(i).then(curry4(curryArity,r,e,u,__)):curryArity(r,e,u,i)},curryArity=function(r,e,u,n){const t=n.length;if(t<r)return _curryArity(r,e,u,n);let y=-1;for(;++y<t;){if(n[y]==__)return _curryArity(r,e,u,n)}return e.apply(u,n)},curry=(r,...e)=>areAnyValuesPromises(e)?promiseAll(e).then(curry4(curryArity,r.length,r,this,__)):curryArity(r.length,r,this,e);curry.arity=function(r,e,...u){return areAnyValuesPromises(u)?promiseAll(u).then(curry4(curryArity,r,e,this,__)):curryArity(r,e,this,u)},curry.call=function(r,e,...u){return areAnyValuesPromises(u)?promiseAll(u).then(curry4(curryArity,r.length,r,e,__)):curryArity(r.length,r,e,u)};export default curry;