UNPKG

rubico

Version:

[a]synchronous functional programming

8 lines (7 loc) 5.41 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 EmptyMap=()=>new Map,isPromise=r=>null!=r&&"function"==typeof r.then,__=Symbol.for("placeholder"),curry3ResolveArg0=(r,e,n)=>function(t){return r(t,e,n)},curry3ResolveArg1=(r,e,n)=>function(t){return r(e,t,n)},curry3ResolveArg2=(r,e,n)=>function(t){return r(e,n,t)},curry3=function(r,e,n,t){return e==__?curry3ResolveArg0(r,n,t):n==__?curry3ResolveArg1(r,e,t):curry3ResolveArg2(r,e,n)},isArray=Array.isArray,objectValues=Object.values,objectProto=Object.prototype,nativeObjectToString=objectProto.toString,objectToString=r=>nativeObjectToString.call(r),generatorFunctionTag="[object GeneratorFunction]",isGeneratorFunction=r=>objectToString(r)==generatorFunctionTag,asyncGeneratorFunctionTag="[object AsyncGeneratorFunction]",isAsyncGeneratorFunction=r=>objectToString(r)==asyncGeneratorFunctionTag,iteratorReduceAsync=async function(r,e,n){let t=r.next();if(t.done)return n;for(;!t.done;)n=e(n,t.value),isPromise(n)&&(n=await n),t=r.next();return n},iteratorReduce=function(r,e,n){let t=r.next();if(t.done)return n;for(void 0===n&&(n=t.value,t=r.next());!t.done;){if(n=e(n,t.value),isPromise(n))return n.then(curry3(iteratorReduceAsync,r,e,__));t=r.next()}return n},asyncIteratorReduce=async function(r,e,n){let t=await r.next();if(t.done)return n;for(void 0===n&&(n=t.value,t=await r.next());!t.done;)n=await e(n,t.value),t=await r.next();return n},symbolIterator=Symbol.iterator,symbolAsyncIterator=Symbol.asyncIterator,curry2ResolveArg0=(r,e)=>function(n){return r(n,e)},curry2ResolveArg1=(r,e)=>function(n){return r(e,n)},curry2=function(r,e,n){return e==__?curry2ResolveArg0(r,n):curry2ResolveArg1(r,e)},curryArgs3ResolveArgs0=(r,e,n)=>function(...t){return r(t,e,n)},curryArgs3ResolveArgs1=(r,e,n)=>function(...t){return r(e,t,n)},curryArgs3ResolveArgs2=(r,e,n)=>function(...t){return r(e,n,t)},curryArgs3=function(r,e,n,t){return e==__?curryArgs3ResolveArgs0(r,n,t):n==__?curryArgs3ResolveArgs1(r,e,t):curryArgs3ResolveArgs2(r,e,n)},curry4ResolveArg0=(r,e,n,t)=>function(o){return r(o,e,n,t)},curry4ResolveArg1=(r,e,n,t)=>function(o){return r(e,o,n,t)},curry4ResolveArg2=(r,e,n,t)=>function(o){return r(e,n,o,t)},curry4ResolveArg3=(r,e,n,t)=>function(o){return r(e,n,t,o)},curry4=function(r,e,n,t,o){return e==__?curry4ResolveArg0(r,n,t,o):n==__?curry4ResolveArg1(r,e,t,o):t==__?curry4ResolveArg2(r,e,n,o):curry4ResolveArg3(r,e,n,t)},arrayReduceAsync=async function(r,e,n,t){const o=r.length;for(;++t<o;)n=e(n,r[t],t,r),isPromise(n)&&(n=await n);return n},arrayReduce=function(r,e,n){const t=r.length;let o=-1;for(void 0===n&&(n=r[++o]);++o<t;)if(n=e(n,r[o],o,r),isPromise(n))return n.then(curry4(arrayReduceAsync,r,e,__,o));return n},curry5ResolveArg0=(r,e,n,t,o)=>function(c){return r(c,e,n,t,o)},curry5ResolveArg1=(r,e,n,t,o)=>function(c){return r(e,c,n,t,o)},curry5ResolveArg2=(r,e,n,t,o)=>function(c){return r(e,n,c,t,o)},curry5ResolveArg3=(r,e,n,t,o)=>function(c){return r(e,n,t,c,o)},curry5ResolveArg4=(r,e,n,t,o)=>function(c){return r(e,n,t,o,c)},curry5=function(r,e,n,t,o,c){return e==__?curry5ResolveArg0(r,n,t,o,c):n==__?curry5ResolveArg1(r,e,t,o,c):t==__?curry5ResolveArg2(r,e,n,o,c):o==__?curry5ResolveArg3(r,e,n,t,c):curry5ResolveArg4(r,e,n,t,o)},objectKeys=Object.keys,objectReduceAsync=async function(r,e,n,t,o){const c=t.length;for(;++o<c;){const c=t[o];n=e(n,r[c],c,r),isPromise(n)&&(n=await n)}return n},objectReduce=function(r,e,n){const t=objectKeys(r),o=t.length;let c=-1;for(void 0===n&&(n=r[t[++c]]);++c<o;){const o=t[c];if(n=e(n,r[o],o,r),isPromise(n))return n.then(curry5(objectReduceAsync,r,e,__,t,c))}return n},mapReduceAsync=async function(r,e,n,t){for(const[o,c]of t)n=e(n,c,o,r),isPromise(n)&&(n=await n);return n},mapReduce=function(r,e,n){const t=r.entries();if(void 0===n){const r=t.next();if(r.done)return n;n=r.value[1]}for(const[o,c]of t)if(n=e(n,c,o,r),isPromise(n))return n.then(curry4(mapReduceAsync,r,e,__,t));return n},reducerConcat=(r,e)=>function(n,t){const o=r(n,t);return isPromise(o)?o.then(curry2(e,__,t)):e(o,t)},genericReduce=function(r,e,n){return isArray(r)?arrayReduce(r,e,n):null==r?void 0===n?curry2(e,r,__):e(n,r):r.constructor==Map?mapReduce(r,e,n):"function"==typeof r[symbolIterator]?iteratorReduce(r[symbolIterator](),e,n):"function"==typeof r[symbolAsyncIterator]?asyncIteratorReduce(r[symbolAsyncIterator](),e,n):"function"==typeof r.reduce?r.reduce(e,n):"function"==typeof r.chain?r.chain(curry2(e,n,__)):"function"==typeof r.flatMap?r.flatMap(curry2(e,n,__)):r.constructor==Object?objectReduce(r,e,n):void 0===n?curry2(e,r,__):e(n,r)},_reduce=function(r,e,n){if("function"==typeof n){const t=n(r);return isPromise(t)?t.then(curry3(genericReduce,r,e,__)):genericReduce(r,e,t)}return isPromise(n)?n.then(curry3(genericReduce,r,e,__)):genericReduce(r,e,n)},reduce=function(...r){return"function"==typeof r[0]?curry3(_reduce,__,r[0],r[1]):isPromise(r[0])?r[0].then(curry3(_reduce,__,r[1],r[2])):_reduce(r[0],r[1],r[2])},group=function(r,e,n){const t=r.get(e);return null==t?r.set(e,[n]):t.push(n),r},groupByProperty=r=>function(e,n){return group(e,n[r],n)},groupByResolver=r=>function(e,n){const t=r(n);return isPromise(t)?t.then(curry3(group,e,__,n)):group(e,t,n)},groupBy=r=>reduce("function"==typeof r?groupByResolver(r):groupByProperty(r),EmptyMap);export default groupBy;