UNPKG

rubico

Version:

[a]synchronous functional programming

8 lines (7 loc) 3.84 kB
/** * 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 __=Symbol.for("placeholder"),curry2ResolveArg0=(r,t)=>function(n){return r(n,t)},curry2ResolveArg1=(r,t)=>function(n){return r(t,n)},curry2=function(r,t,n){return t==__?curry2ResolveArg0(r,n):curry2ResolveArg1(r,t)},symbolIterator=Symbol.iterator,FilteringIterator=(r,t)=>({[symbolIterator](){return this},next(){let n=r.next();for(;!n.done;){const{value:e}=n;if(t(e))return{value:e,done:!1};n=r.next()}return n}}),isPromise=r=>null!=r&&"function"==typeof r.then,symbolAsyncIterator=Symbol.asyncIterator,FilteringAsyncIterator=(r,t)=>({isAsyncIteratorDone:!1,[symbolAsyncIterator](){return this},async next(){for(;!this.isAsyncIteratorDone;){const{value:n,done:e}=await r.next();if(e)this.isAsyncIteratorDone=!0;else{const r=t(n);if(isPromise(r)?await r:r)return{value:n,done:!1}}}return{value:void 0,done:!0}}}),isArray=Array.isArray,curry4ResolveArg0=(r,t,n,e)=>function(o){return r(o,t,n,e)},curry4ResolveArg1=(r,t,n,e)=>function(o){return r(t,o,n,e)},curry4ResolveArg2=(r,t,n,e)=>function(o){return r(t,n,o,e)},curry4ResolveArg3=(r,t,n,e)=>function(o){return r(t,n,e,o)},curry4=function(r,t,n,e,o){return t==__?curry4ResolveArg0(r,n,e,o):n==__?curry4ResolveArg1(r,t,e,o):e==__?curry4ResolveArg2(r,t,n,o):curry4ResolveArg3(r,t,n,e)},promiseAll=Promise.all.bind(Promise),arrayExtendMap=function(r,t,n,e){const o=t.length;let i=r.length-1;for(;++e<o;)r[++i]=n(t[e],e,r);return r},arrayFilterByConditions=function(r,t,n,e){const o=r.length;let i=-1;for(;++n<o;)e[++i]&&t.push(r[n]);return t},arrayFilter=function(r,t){const n=r.length,e=[];let o=-1,i=-1;for(;++o<n;){const n=r[o],u=t(n,o,r);if(isPromise(u))return promiseAll(arrayExtendMap([u],r,t,o)).then(curry4(arrayFilterByConditions,r,e,o-1,__));u&&(e[++i]=n)}return e},curry3ResolveArg0=(r,t,n)=>function(e){return r(e,t,n)},curry3ResolveArg1=(r,t,n)=>function(e){return r(t,e,n)},curry3ResolveArg2=(r,t,n)=>function(e){return r(t,n,e)},curry3=function(r,t,n,e){return t==__?curry3ResolveArg0(r,n,e):n==__?curry3ResolveArg1(r,t,e):curry3ResolveArg2(r,t,n)},callPropUnary=(r,t,n)=>r[t](n),stringFilter=function(r,t){const n=arrayFilter(r,t);return isPromise(n)?n.then(curry3(callPropUnary,__,"join","")):n.join("")},always=r=>function(){return r},thunkConditional=(r,t,n)=>r?t():n(),thunkify1=(r,t)=>function(){return r(t)},noop=function(){},setFilter=function(r,t){const n=new Set,e=n.add.bind(n),o=[];for(const i of r){const u=t(i,i,r);isPromise(u)?o.push(u.then(curry3(thunkConditional,__,thunkify1(e,i),noop))):u&&n.add(i)}return 0==o.length?n:promiseAll(o).then(always(n))},thunkify4=(r,t,n,e,o)=>function(){return r(t,n,e,o)},callPropBinary=(r,t,n,e)=>r[t](n,e),mapFilter=function(r,t){const n=new Map,e=[];for(const[o,i]of r){const u=t(i,o,r);isPromise(u)?e.push(u.then(curry3(thunkConditional,__,thunkify4(callPropBinary,n,"set",o,i),noop))):u&&n.set(o,i)}return 0==e.length?n:promiseAll(e).then(always(n))},objectSetIf=function(r,t,n,e){e&&(r[t]=n)},objectFilter=function(r,t){const n={},e=[];for(const o in r){const i=r[o],u=t(i,o,r);isPromise(u)?e.push(u.then(curry4(objectSetIf,n,o,r[o],__))):u&&(n[o]=i)}return 0==e.length?n:promiseAll(e).then(always(n))},_filter=function(r,t){return isArray(r)?arrayFilter(r,t):null==r?r:"string"==typeof r||r.constructor==String?stringFilter(r,t):r.constructor==Set?setFilter(r,t):r.constructor==Map?mapFilter(r,t):"function"==typeof r.filter?r.filter(t):"function"==typeof r[symbolIterator]?FilteringIterator(r[symbolIterator](),t):"function"==typeof r[symbolAsyncIterator]?FilteringAsyncIterator(r[symbolAsyncIterator](),t):r.constructor==Object?objectFilter(r,t):r},filter=function(r,t){return"function"==typeof r?curry2(_filter,__,r):_filter(r,t)};export default filter;