rubico
Version:
[a]synchronous functional programming
8 lines (7 loc) • 1.34 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,objectAssign=Object.assign,__=Symbol.for("placeholder"),curry2ResolveArg0=(r,n)=>function(e){return r(e,n)},curry2ResolveArg1=(r,n)=>function(e){return r(n,e)},curry2=function(r,n,e){return n==__?curry2ResolveArg0(r,e):curry2ResolveArg1(r,n)},curry3ResolveArg0=(r,n,e)=>function(t){return r(t,n,e)},curry3ResolveArg1=(r,n,e)=>function(t){return r(n,t,e)},curry3ResolveArg2=(r,n,e)=>function(t){return r(n,e,t)},curry3=function(r,n,e,t){return n==__?curry3ResolveArg0(r,e,t):e==__?curry3ResolveArg1(r,n,t):curry3ResolveArg2(r,n,e)},always=r=>function(){return r},promiseAll=Promise.all.bind(Promise),objectSet=function(r,n,e){return r[n]=e,r},functionObjectAll=function(r,n){const e={},t=[];for(const o in r){const s=r[o],u="function"==typeof s?s(...n):s;isPromise(u)?t.push(u.then(curry3(objectSet,e,o,__))):e[o]=u}return 0==t.length?e:promiseAll(t).then(always(e))},_assign=function(r,n){const e=functionObjectAll(n,[r]);return isPromise(e)?e.then(curry3(objectAssign,{},r,__)):{...r,...e}},assign=function(r,n){return null==n?curry2(_assign,__,r):isPromise(r)?r.then(curry2(_assign,__,n)):_assign(r,n)};export default assign;