pepka 0.13.0-beta12 → 0.14.0-beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/bundle.d.ts CHANGED
@@ -27,6 +27,13 @@ export declare const uncurry: <Args extends any[] = any[], ReturnT = any>(fn: Cu
27
27
  export declare const toLower: (s: string) => string;
28
28
  export declare const toUpper: (s: string) => string;
29
29
  export declare const type: (s: any) => any;
30
+ export declare const typeIs: {
31
+ (a: symbol, b: any): (a: string) => boolean;
32
+ (a: string, b: symbol): (b: any) => boolean;
33
+ (a: string): (b: any) => boolean;
34
+ (a: string, b: any): boolean;
35
+ };
36
+ export declare const take: (argN: number) => (...args: any[]) => any;
30
37
  export declare const equals: {
31
38
  (a: symbol, b: any): (a: any) => boolean;
32
39
  (a: any, b: symbol): (b: any) => boolean;
@@ -35,8 +42,8 @@ export declare const equals: {
35
42
  };
36
43
  export declare const ifElse: FT.Curry<AnyFunc<any, AnyArgs>>;
37
44
  export declare const when: FT.Curry<(cond: (s: any) => boolean, pipe: (s: any) => any, s: any) => any>;
38
- export type Composed<TIn, TOut> = (x: TIn) => TOut;
39
- export declare const compose: <TIn = any, TOut = any>(...fns: AnyFunc[]) => Composed<TIn, TOut>;
45
+ export type Composed<TIn extends any[], TOut> = (...xs: TIn) => TOut;
46
+ export declare const compose: <TIn extends any[] = any[], TOut = any>(...fns: AnyFunc[]) => Composed<TIn, TOut>;
40
47
  export declare const bind: {
41
48
  (a: symbol, b: any): (a: any) => any;
42
49
  (a: any, b: symbol): (b: any) => any;
@@ -56,6 +63,8 @@ export declare const includes: {
56
63
  (a: unknown, b: unknown[]): boolean;
57
64
  };
58
65
  export declare const slice: FT.Curry<(from: number, to: number, o: any[] | string) => string | any[]>;
66
+ export type TupleFn<ARG1 = any, ARG2 = any, Out = any> = (a: ARG1, b: ARG2) => Out;
67
+ export declare const flip: <ARG1 = any, ARG2 = any, Out = any>(fn: FT.Curry<TupleFn<ARG1, ARG2, Out>>) => FT.Curry<TupleFn<ARG2, ARG1, Out>>;
59
68
  export declare const head: (b: string | unknown[]) => unknown;
60
69
  export declare const tail: FT.Curry<(o: string | any[]) => string | any[]>;
61
70
  export declare const add: {
@@ -70,7 +79,18 @@ export declare const subtract: {
70
79
  (a: number): (b: number) => number;
71
80
  (a: number, b: number): number;
72
81
  };
73
- export declare const flip: (fn: Function) => FT.Curry<AnyFunc<any, AnyArgs>>;
82
+ export declare const multiply: {
83
+ (a: symbol, b: number): (a: number) => number;
84
+ (a: number, b: symbol): (b: number) => number;
85
+ (a: number): (b: number) => number;
86
+ (a: number, b: number): number;
87
+ };
88
+ export declare const divide: {
89
+ (a: symbol, b: number): (a: number) => number;
90
+ (a: number, b: symbol): (b: number) => number;
91
+ (a: number): (b: number) => number;
92
+ (a: number, b: number): number;
93
+ };
74
94
  export declare const isNil: (s: any) => boolean;
75
95
  export declare const length: (s: any[] | string) => number;
76
96
  export declare const always: <T = any>(s: T) => () => T;
@@ -104,10 +124,10 @@ export declare const append: {
104
124
  (a: any, b: any[]): any[];
105
125
  };
106
126
  export declare const split: {
107
- (a: symbol, b: string): (a: string) => string[];
108
- (a: string, b: symbol): (b: string) => string[];
109
- (a: string): (b: string) => string[];
110
- (a: string, b: string): string[];
127
+ (a: symbol, b: string): (a: string | RegExp) => string[];
128
+ (a: string | RegExp, b: symbol): (b: string) => string[];
129
+ (a: string | RegExp): (b: string) => string[];
130
+ (a: string | RegExp, b: string): string[];
111
131
  };
112
132
  export declare const T: (...args: any[]) => true;
113
133
  export declare const F: (...args: any[]) => false;
@@ -90,8 +90,10 @@ const type = (s) => {
90
90
  return t === 'object'
91
91
  ? isNull(s) ? 'Null' : s.constructor.name
92
92
  : caseMap[t[0]] + t.slice(1);
93
- };
93
+ };
94
+ const typeIs = curry2((t, s) => type(s) === t);
94
95
 
96
+ // TODO: qmap, qfilter.
95
97
  const qappend = curry2((s, xs) => { xs.push(s); return xs; });
96
98
  const qassoc = curry3((prop, v, obj) => {
97
99
  obj[prop] = v;
@@ -174,7 +176,17 @@ const qindexOf = curry2((x, xs) => xs.indexOf(x));
174
176
  // TODO: possibly introduce a second argument limiting unfolding.
175
177
  const uncurry = (fn) => (...args) => qreduce(((fn, arg) => fn ? fn(arg) : fn), fn, args);
176
178
 
177
- // over, lensProp
179
+ // SomeType, totype, over, lensProp
180
+ // take (if not exsit in ramda):
181
+ /* res = code.replace(/css\`((.|\s)*?)\`/g, (_, g1) => {
182
+ return compressRules(g1)
183
+ }) ->
184
+ res = code.replace(/css\`((.|\s)*?)\`/g, compose(
185
+ compressRules,
186
+ take(2) // second arg
187
+ ))
188
+ */
189
+ const take = (argN) => (...args) => args[argN];
178
190
  const equals = curry2((a, b) => {
179
191
  const typea = type(a);
180
192
  if (typea === type(b) && (typea === 'Object' || typea == 'Array')) {
@@ -198,9 +210,16 @@ const equals = curry2((a, b) => {
198
210
  });
199
211
  const ifElse = curry((cond, pipeYes, pipeNo, s) => cond(s) ? pipeYes(s) : pipeNo(s));
200
212
  const when = curry3((cond, pipe, s) => ifElse(cond, pipe, identity, s));
201
- const compose = ((...fns) => (s = Symbol()) => {
213
+ const compose = ((...fns) => (...args) => {
214
+ let first = true;
215
+ let s;
202
216
  for (let i = length(fns) - 1; i > -1; i--) {
203
- s = s === __ ? fns[i]() : fns[i](s);
217
+ if (first) {
218
+ first = false;
219
+ s = fns[i](...args);
220
+ }
221
+ else
222
+ s = s === __ ? fns[i]() : fns[i](s);
204
223
  }
205
224
  return s;
206
225
  });
@@ -225,6 +244,8 @@ const head = nth(0);
225
244
  const tail = slice(1, inf); // typeshit.
226
245
  const add = curry2((n, m) => n + m);
227
246
  const subtract = curry2((n, m) => m - n);
247
+ const multiply = curry2((n, m) => n * m);
248
+ const divide = curry2((n, m) => n / m);
228
249
  const flip = (fn) => curry((b, a) => fn(a, b));
229
250
  const isNil = (s) => isNull(s) || isUndef(s);
230
251
  const length = (s) => s.length;
@@ -466,6 +487,8 @@ var pepka = /*#__PURE__*/Object.freeze({
466
487
  toLower: toLower,
467
488
  toUpper: toUpper,
468
489
  type: type,
490
+ typeIs: typeIs,
491
+ take: take,
469
492
  equals: equals,
470
493
  ifElse: ifElse,
471
494
  when: when,
@@ -478,6 +501,8 @@ var pepka = /*#__PURE__*/Object.freeze({
478
501
  tail: tail,
479
502
  add: add,
480
503
  subtract: subtract,
504
+ multiply: multiply,
505
+ divide: divide,
481
506
  flip: flip,
482
507
  isNil: isNil,
483
508
  length: length,
@@ -1 +1 @@
1
- const e=Symbol("Placeholder"),r=r=>{let t=0;for(const n of r)n!==e&&t++;return t},t=(r,t)=>{const n=r.length,s=r.slice(),c=t.length;let o=c,u=0;for(;o&&u<n;u++)s[u]===e&&(s[u]=t[c-o],o--);for(u=n;o;u++,o--)s[u]=t[c-o];return s},n=(e,s,c)=>{const o=e.length-s.length-r(c);if(o<1)return e(...t(s,c));{const r=(...r)=>n(e,t(s,c),r);return r.$args_left=o,r}},s=e=>(...t)=>e.length>r(t)?n(e,[],t):e(...t),c=r=>function(t){return t===e?r:r(t)};function o(r){return function(t,n){const s=t===e,o=arguments.length;if(1===o&&s)throw new Error("Senseless placeholder usage.");return arguments.length>1?s?c((e=>r(e,n))):r(t,n):e=>r(t,e)}}function u(e){return s(e)}const a=void 0,l=1/0,i=e=>typeof e,f=e=>null===e,h=e=>"number"==i(e),b=e=>Array.isArray(e),g=e=>"function"===i(e),p={u:"U",b:"B",n:"N",s:"S",f:"F"},y=e=>e.toLowerCase(),d=e=>e.toUpperCase(),j=e=>{const r=i(e);return"object"===r?f(e)?"Null":e.constructor.name:p[r[0]]+r.slice(1)},m=o(((e,r)=>(r.push(e),r))),w=u(((e,r,t)=>(t[e]=r,t))),O=u(((e,r,t)=>t.reduce(e,r))),A=u(((e,r,t)=>{for(let n in t)switch(j(t[n])){case"Array":if(e>1&&"Array"===j(r[n]))switch(e){case 2:const s=r[n],c=t[n];for(const r in c)s[r]?A(e,s[r],c[r]):s[r]=c[r];break;case 3:r[n].push(...t[n])}else r[n]=t[n];break;case"Object":if("Object"===j(r[n])){A(e,r[n],t[n]);break}default:r[n]=t[n]}return r})),S=A(1),k=A(2),v=A(3),N=o(((e,r)=>{let t,n,s,c;for(t in e)n=e[t],[s,c]=g(n)?n(r):[n,r[t]],r[s]=c,t!==s&&delete r[t];return r})),x=o(((e,r)=>{const t=b(r);for(let n in r)e(r[n],n)||(t?r.splice(n,1):delete r[n]);return r})),C=o(((e,r)=>r.indexOf(e))),P=e=>(...r)=>O(((e,r)=>e?e(r):e),e,r),$=o(((e,r)=>{const t=j(e);if(t===j(r)&&("Object"===t||"Array"==t)){if(f(e)||f(r))return e===r;if(e===r)return!0;for(const t of[e,r])for(const n in t)if(!(t===r&&n in e||t===e&&n in r&&$(e[n],r[n])))return!1;return!0}return e===r})),B=s(((e,r,t,n)=>e(n)?r(n):t(n))),E=u(((e,r,t)=>B(e,r,Q,t))),U=(...r)=>(t=Symbol())=>{for(let n=K(r)-1;n>-1;n--)t=t===e?r[n]():r[n](t);return t},_=o(((e,r)=>e.bind(r))),F=o(((e,r)=>r[e])),I=o(((e,r)=>{if((e=>"string"===i(e))(r))return r.includes(e);for(const t of r)if($(t,e))return!0;return!1})),L=u(((e,r,t)=>t.slice(e,h(r)?r:l))),q=F(0),z=L(1,l),D=o(((e,r)=>e+r)),G=o(((e,r)=>r-e)),H=e=>s(((r,t)=>e(t,r))),J=e=>f(e)||(e=>e===a)(e),K=e=>e.length,M=e=>()=>e,Q=e=>e,R=e=>e.trim(),T=e=>e[K(e)-1],V=e=>!e,W=e=>(...r)=>{const t=e(...r);return g(t)&&t.$args_left?W(t):V(t)},X=e=>Object.keys(e),Y=e=>Object.values(e),Z=e=>Object.entries(e),ee=o(((e,r)=>e.test(r))),re=o(((e,r)=>(e(r),r))),te=o(((e,r)=>[...r,e])),ne=o(((e,r)=>r.split(e))),se=M(!0),ce=M(!1),oe=e=>{if("Object"===j(e)){let r=0;for(let t in e)r++;return r}return K(e)},ue=o(((e,r)=>ie(D(e),r-e))),ae=e=>O(((e,r)=>I(r,e)?e:m(r,e)),[],e),le=o(((e,r)=>e.filter(H(I)(r)))),ie=o(((e,r)=>[...Array(r)].map(((r,t)=>e(t))))),fe=e=>{let r,t=!1;return(...n)=>t?r:(t=!0,r=e(...n))},he=e=>U((r=>ze(((t,n,s)=>m(e[r-s],t)),[],e)),D(-1),K)(e),be=o(((e,r)=>e>r)),ge=o(((e,r)=>e<r)),pe=o(((e,r)=>r>=e)),ye=o(((e,r)=>r<=e)),de=o(((e,r)=>r.sort(e))),je=o(((e,r)=>r.find(e))),me=o(((e,r)=>r.findIndex(e))),we=o(((e,r)=>me($(e),r))),Oe=(e,r="log")=>re((t=>console[r](e,t))),Ae=o(((e,r)=>{for(const[t,n]of e)if(t(r))return n(r)})),Se=u(((e,r,t)=>({...t,[e]:r}))),ke=u(((e,r,t)=>U((n=>{return Se(n,K(e)<2?r:ke(L(1,l,e),r,(s=t[n],f(s)||"object"!==i(s)?{}:t[n])),t);var s}),q)(e))),ve=o(((e,r)=>r.every(e))),Ne=o(((e,r)=>r.some(e))),xe=o(((e,r)=>e.every((e=>e(r))))),Ce=o(((e,r)=>e.some((e=>e(r))))),Pe=o(((e,r)=>r[e])),$e=u(((e,r,t)=>$(t[e],r))),Be=u(((e,r,t)=>$(r[e],t[e]))),Ee=u(((e,r,t)=>B(K,(()=>J(t)?e:U(B(J,M(e),(t=>Ee(e,L(1,l,r),t))),H(Pe)(t),q)(r)),M(t),r))),Ue=Ee(a),_e=u(((e,r,t)=>$(Ue(e,t),r))),Fe=u(((e,r,t)=>$(Ue(e,r),Ue(e,t)))),Ie=/^(.*?)(8|16|32|64)(Clamped)?Array$/,Le=(e,r=!1)=>{const t=j(e);switch(t){case"Null":case"String":case"Number":case"Boolean":case"Symbol":return e;case"Array":return r?[...e]:Qe(Le,e);case"Object":if(r)return{...e};const n={};for(let r in e)n[r]=Le(e[r]);return n;default:return Ie.test(t)?e.constructor.from(e):e}},qe=e=>Le(e,!0),ze=u(((e,r,t)=>O(e,Le(r),t))),De=o(((e,r)=>Ye(e,r))),Ge=o(((e,r)=>{const t={};for(const n of e)n in r&&(t[n]=r[n]);return t})),He=o(((e,r)=>Ye(((r,t)=>!I(t,e)),r))),Je=e=>ze(((e,r)=>Se(...r,e)),{},e),Ke=o(((e,r)=>e.concat(r))),Me=o(((e,r)=>r.join(e))),Qe=o(((e,r)=>r.map(e))),Re=o(((e,r)=>r.forEach(e))),Te=u(((e,r,t)=>r(t)&&e(t))),Ve=e=>{switch(j(e)){case"String":case"Array":return 0==K(e);case"Object":for(const r in e)return!1;return!0;default:return null}},We=e=>{switch(j(e)){case"String":return"";case"Object":return{};case"Array":return[];default:return a}},Xe=u(((e,r,t)=>t.replace(e,r))),Ye=o(((e,r)=>b(r)?r.filter(e):U(Je,Ye((([r,t])=>e(t,r))),Z)(r))),Ze=e=>{let r,t=!1;return()=>t?r:(t=!0,r=e())},er=o(((e,r)=>Object.assign({},e,r))),rr=o(((e,r)=>S(Le(e),Le(r)))),tr=o(((e,r)=>k(Le(e),Le(r)))),nr=o(((e,r)=>v(Le(e),Le(r)))),sr=u(((e,r,t)=>Se(e,r(t[e]),t))),cr=o(((e,r)=>N(e,Object.assign({},r)))),or=(()=>{const e=async(r,t,n)=>{n<t.length&&(await r(t[n]),await e(r,t,++n))};return o(((r,t)=>e(r,t,0)))})(),ur=e=>Promise.all(e),ar=o((async(e,r)=>(await e(r),r))),lr=o(((e,r)=>Promise.all(r.map(e)))),ir=(()=>{const e=async(r,t,n)=>~n?await e(r,await r[n](t),--n):t;return(...r)=>t=>e(r,t,r.length-1)})(),fr=Q,hr=Q,br=Q,gr=e=>{const r=[],t=[],n=e.length;let s,c,o=0,u=0,a=!1;for(o=0;o<n;o++)switch(s=e[o],s){case"{":a=!0,u=o;break;case"}":a=!1,r.push(""),t.push(e.slice(u+1,o));break;default:a||(c=r.length-1,c<0&&(r.push(""),c++),r[c]+=s)}return e=>{const n=[],s=r.length-1;for(const c in r)o=+c,n.push(r[o]),o!==s&&n.push(Ue(t[o].split("."),e));return n.join("")}};export{ce as F,se as T,e as __,D as add,ve as all,xe as allPass,M as always,Ne as any,Ce as anyPass,te as append,Se as assoc,ke as assocPath,_ as bind,Te as both,Le as clone,qe as cloneShallow,W as complement,U as compose,ir as composeAsync,Ke as concat,Ae as cond,s as curry,o as curry2,u as curry3,br as echo,We as empty,$ as equals,Oe as explore,Ye as filter,je as find,me as findIndex,H as flip,Re as forEach,lr as forEachAsync,or as forEachSerial,Je as fromPairs,ie as genBy,gr as getTmpl,be as gt,pe as gte,q as head,Q as identity,B as ifElse,I as includes,we as indexOf,le as intersection,Ve as isEmpty,J as isNil,Me as join,X as keys,T as last,K as length,ge as lt,ye as lte,Qe as map,cr as mapKeys,Ze as memoize,rr as mergeDeep,nr as mergeDeepAdd,tr as mergeDeepX,er as mergeShallow,fr as mirror,V as not,F as nth,He as omit,fe as once,sr as overProp,Ue as path,_e as pathEq,Ee as pathOr,Fe as pathsEq,Ge as pick,De as pickBy,Pe as prop,$e as propEq,Be as propsEq,m as qappend,w as qassoc,x as qfilter,C as qindexOf,N as qmapKeys,S as qmergeDeep,v as qmergeDeepAdd,k as qmergeDeepX,O as qreduce,ue as range,ze as reduce,hr as reflect,Xe as replace,he as reverse,oe as sizeof,L as slice,de as sort,ne as split,G as subtract,z as tail,re as tap,ee as test,y as toLower,Z as toPairs,d as toUpper,R as trim,j as type,P as uncurry,ae as uniq,Y as values,ur as waitAll,ar as waitTap,E as when};
1
+ const e=Symbol("Placeholder"),r=r=>{let t=0;for(const n of r)n!==e&&t++;return t},t=(r,t)=>{const n=r.length,s=r.slice(),c=t.length;let o=c,u=0;for(;o&&u<n;u++)s[u]===e&&(s[u]=t[c-o],o--);for(u=n;o;u++,o--)s[u]=t[c-o];return s},n=(e,s,c)=>{const o=e.length-s.length-r(c);if(o<1)return e(...t(s,c));{const r=(...r)=>n(e,t(s,c),r);return r.$args_left=o,r}},s=e=>(...t)=>e.length>r(t)?n(e,[],t):e(...t),c=r=>function(t){return t===e?r:r(t)};function o(r){return function(t,n){const s=t===e,o=arguments.length;if(1===o&&s)throw new Error("Senseless placeholder usage.");return arguments.length>1?s?c((e=>r(e,n))):r(t,n):e=>r(t,e)}}function u(e){return s(e)}const a=void 0,i=1/0,l=e=>typeof e,f=e=>null===e,h=e=>"number"==l(e),b=e=>Array.isArray(e),g=e=>"function"===l(e),p={u:"U",b:"B",n:"N",s:"S",f:"F"},y=e=>e.toLowerCase(),d=e=>e.toUpperCase(),j=e=>{const r=l(e);return"object"===r?f(e)?"Null":e.constructor.name:p[r[0]]+r.slice(1)},m=o(((e,r)=>j(r)===e)),w=o(((e,r)=>(r.push(e),r))),O=u(((e,r,t)=>(t[e]=r,t))),A=u(((e,r,t)=>t.reduce(e,r))),S=u(((e,r,t)=>{for(let n in t)switch(j(t[n])){case"Array":if(e>1&&"Array"===j(r[n]))switch(e){case 2:const s=r[n],c=t[n];for(const r in c)s[r]?S(e,s[r],c[r]):s[r]=c[r];break;case 3:r[n].push(...t[n])}else r[n]=t[n];break;case"Object":if("Object"===j(r[n])){S(e,r[n],t[n]);break}default:r[n]=t[n]}return r})),k=S(1),v=S(2),N=S(3),x=o(((e,r)=>{let t,n,s,c;for(t in e)n=e[t],[s,c]=g(n)?n(r):[n,r[t]],r[s]=c,t!==s&&delete r[t];return r})),C=o(((e,r)=>{const t=b(r);for(let n in r)e(r[n],n)||(t?r.splice(n,1):delete r[n]);return r})),P=o(((e,r)=>r.indexOf(e))),$=e=>(...r)=>A(((e,r)=>e?e(r):e),e,r),B=e=>(...r)=>r[e],E=o(((e,r)=>{const t=j(e);if(t===j(r)&&("Object"===t||"Array"==t)){if(f(e)||f(r))return e===r;if(e===r)return!0;for(const t of[e,r])for(const n in t)if(!(t===r&&n in e||t===e&&n in r&&E(e[n],r[n])))return!1;return!0}return e===r})),U=s(((e,r,t,n)=>e(n)?r(n):t(n))),_=u(((e,r,t)=>U(e,r,W,t))),F=(...r)=>(...t)=>{let n,s=!0;for(let c=T(r)-1;c>-1;c--)s?(s=!1,n=r[c](...t)):n=n===e?r[c]():r[c](n);return n},I=o(((e,r)=>e.bind(r))),L=o(((e,r)=>r[e])),q=o(((e,r)=>{if((e=>"string"===l(e))(r))return r.includes(e);for(const t of r)if(E(t,e))return!0;return!1})),z=u(((e,r,t)=>t.slice(e,h(r)?r:i))),D=e=>o(((r,t)=>e(t,r))),G=L(0),H=z(1,i),J=o(((e,r)=>e+r)),K=o(((e,r)=>r-e)),M=o(((e,r)=>e*r)),Q=o(((e,r)=>e/r)),R=e=>f(e)||(e=>e===a)(e),T=e=>e.length,V=e=>()=>e,W=e=>e,X=e=>e.trim(),Y=e=>e[T(e)-1],Z=e=>!e,ee=e=>(...r)=>{const t=e(...r);return g(t)&&t.$args_left?ee(t):Z(t)},re=e=>Object.keys(e),te=e=>Object.values(e),ne=e=>Object.entries(e),se=o(((e,r)=>e.test(r))),ce=o(((e,r)=>(e(r),r))),oe=o(((e,r)=>[...r,e])),ue=o(((e,r)=>r.split(e))),ae=V(!0),ie=V(!1),le=e=>{if("Object"===j(e)){let r=0;for(let t in e)r++;return r}return T(e)},fe=o(((e,r)=>ge(J(e),r-e))),he=e=>A(((e,r)=>q(r,e)?e:w(r,e)),[],e),be=o(((e,r)=>e.filter(D(q)(r)))),ge=o(((e,r)=>[...Array(r)].map(((r,t)=>e(t))))),pe=e=>{let r,t=!1;return(...n)=>t?r:(t=!0,r=e(...n))},ye=e=>F((r=>Je(((t,n,s)=>w(e[r-s],t)),[],e)),J(-1),T)(e),de=o(((e,r)=>e>r)),je=o(((e,r)=>e<r)),me=o(((e,r)=>r>=e)),we=o(((e,r)=>r<=e)),Oe=o(((e,r)=>r.sort(e))),Ae=o(((e,r)=>r.find(e))),Se=o(((e,r)=>r.findIndex(e))),ke=o(((e,r)=>Se(E(e),r))),ve=(e,r="log")=>ce((t=>console[r](e,t))),Ne=o(((e,r)=>{for(const[t,n]of e)if(t(r))return n(r)})),xe=u(((e,r,t)=>({...t,[e]:r}))),Ce=u(((e,r,t)=>F((n=>{return xe(n,T(e)<2?r:Ce(z(1,i,e),r,(s=t[n],f(s)||"object"!==l(s)?{}:t[n])),t);var s}),G)(e))),Pe=o(((e,r)=>r.every(e))),$e=o(((e,r)=>r.some(e))),Be=o(((e,r)=>e.every((e=>e(r))))),Ee=o(((e,r)=>e.some((e=>e(r))))),Ue=o(((e,r)=>r[e])),_e=u(((e,r,t)=>E(t[e],r))),Fe=u(((e,r,t)=>E(r[e],t[e]))),Ie=u(((e,r,t)=>U(T,(()=>R(t)?e:F(U(R,V(e),(t=>Ie(e,z(1,i,r),t))),D(Ue)(t),G)(r)),V(t),r))),Le=Ie(a),qe=u(((e,r,t)=>E(Le(e,t),r))),ze=u(((e,r,t)=>E(Le(e,r),Le(e,t)))),De=/^(.*?)(8|16|32|64)(Clamped)?Array$/,Ge=(e,r=!1)=>{const t=j(e);switch(t){case"Null":case"String":case"Number":case"Boolean":case"Symbol":return e;case"Array":return r?[...e]:We(Ge,e);case"Object":if(r)return{...e};const n={};for(let r in e)n[r]=Ge(e[r]);return n;default:return De.test(t)?e.constructor.from(e):e}},He=e=>Ge(e,!0),Je=u(((e,r,t)=>A(e,Ge(r),t))),Ke=o(((e,r)=>tr(e,r))),Me=o(((e,r)=>{const t={};for(const n of e)n in r&&(t[n]=r[n]);return t})),Qe=o(((e,r)=>tr(((r,t)=>!q(t,e)),r))),Re=e=>Je(((e,r)=>xe(...r,e)),{},e),Te=o(((e,r)=>e.concat(r))),Ve=o(((e,r)=>r.join(e))),We=o(((e,r)=>r.map(e))),Xe=o(((e,r)=>r.forEach(e))),Ye=u(((e,r,t)=>r(t)&&e(t))),Ze=e=>{switch(j(e)){case"String":case"Array":return 0==T(e);case"Object":for(const r in e)return!1;return!0;default:return null}},er=e=>{switch(j(e)){case"String":return"";case"Object":return{};case"Array":return[];default:return a}},rr=u(((e,r,t)=>t.replace(e,r))),tr=o(((e,r)=>b(r)?r.filter(e):F(Re,tr((([r,t])=>e(t,r))),ne)(r))),nr=e=>{let r,t=!1;return()=>t?r:(t=!0,r=e())},sr=o(((e,r)=>Object.assign({},e,r))),cr=o(((e,r)=>k(Ge(e),Ge(r)))),or=o(((e,r)=>v(Ge(e),Ge(r)))),ur=o(((e,r)=>N(Ge(e),Ge(r)))),ar=u(((e,r,t)=>xe(e,r(t[e]),t))),ir=o(((e,r)=>x(e,Object.assign({},r)))),lr=(()=>{const e=async(r,t,n)=>{n<t.length&&(await r(t[n]),await e(r,t,++n))};return o(((r,t)=>e(r,t,0)))})(),fr=e=>Promise.all(e),hr=o((async(e,r)=>(await e(r),r))),br=o(((e,r)=>Promise.all(r.map(e)))),gr=(()=>{const e=async(r,t,n)=>~n?await e(r,await r[n](t),--n):t;return(...r)=>t=>e(r,t,r.length-1)})(),pr=W,yr=W,dr=W,jr=e=>{const r=[],t=[],n=e.length;let s,c,o,u=0,a=0,i=!1,l=G(e),f=!1;for(u=0;u<n;u++)switch(s=e[u],s){case"{":if(!l){i=!0,a=u;break}case"}":if(!l){i=!1,r.push(""),t.push(e.slice(a+1,u));break}default:o=e[u+1],f="\\"===s,i||f&&("{"===o||"}"===o)||(c=r.length-1,c<0&&(r.push(""),c++),r[c]+=s),l=f}return e=>{const n=[],s=r.length-1;for(const c in r)u=+c,n.push(r[u]),u!==s&&n.push(Le(t[u].split("."),e));return n.join("")}};export{ie as F,ae as T,e as __,J as add,Pe as all,Be as allPass,V as always,$e as any,Ee as anyPass,oe as append,xe as assoc,Ce as assocPath,I as bind,Ye as both,Ge as clone,He as cloneShallow,ee as complement,F as compose,gr as composeAsync,Te as concat,Ne as cond,s as curry,o as curry2,u as curry3,Q as divide,dr as echo,er as empty,E as equals,ve as explore,tr as filter,Ae as find,Se as findIndex,D as flip,Xe as forEach,br as forEachAsync,lr as forEachSerial,Re as fromPairs,ge as genBy,jr as getTmpl,de as gt,me as gte,G as head,W as identity,U as ifElse,q as includes,ke as indexOf,be as intersection,Ze as isEmpty,R as isNil,Ve as join,re as keys,Y as last,T as length,je as lt,we as lte,We as map,ir as mapKeys,nr as memoize,cr as mergeDeep,ur as mergeDeepAdd,or as mergeDeepX,sr as mergeShallow,pr as mirror,M as multiply,Z as not,L as nth,Qe as omit,pe as once,ar as overProp,Le as path,qe as pathEq,Ie as pathOr,ze as pathsEq,Me as pick,Ke as pickBy,Ue as prop,_e as propEq,Fe as propsEq,w as qappend,O as qassoc,C as qfilter,P as qindexOf,x as qmapKeys,k as qmergeDeep,N as qmergeDeepAdd,v as qmergeDeepX,A as qreduce,fe as range,Je as reduce,yr as reflect,rr as replace,ye as reverse,le as sizeof,z as slice,Oe as sort,ue as split,K as subtract,H as tail,B as take,ce as tap,se as test,y as toLower,ne as toPairs,d as toUpper,X as trim,j as type,m as typeIs,$ as uncurry,he as uniq,te as values,fr as waitAll,hr as waitTap,_ as when};
package/dist/bundle.js CHANGED
@@ -1 +1 @@
1
- "use strict";const e=Symbol("Placeholder"),r=r=>{let t=0;for(const s of r)s!==e&&t++;return t},t=(r,t)=>{const s=r.length,o=r.slice(),n=t.length;let p=n,c=0;for(;p&&c<s;c++)o[c]===e&&(o[c]=t[n-p],p--);for(c=s;p;c++,p--)o[c]=t[n-p];return o},s=(e,o,n)=>{const p=e.length-o.length-r(n);if(p<1)return e(...t(o,n));{const r=(...r)=>s(e,t(o,n),r);return r.$args_left=p,r}},o=e=>(...t)=>e.length>r(t)?s(e,[],t):e(...t),n=r=>function(t){return t===e?r:r(t)};function p(r){return function(t,s){const o=t===e,p=arguments.length;if(1===p&&o)throw new Error("Senseless placeholder usage.");return arguments.length>1?o?n((e=>r(e,s))):r(t,s):e=>r(t,e)}}function c(e){return o(e)}const a=void 0,x=1/0,l=e=>typeof e,i=e=>null===e,u=e=>"number"==l(e),f=e=>Array.isArray(e),h=e=>"function"===l(e),m={u:"U",b:"B",n:"N",s:"S",f:"F"},d=e=>{const r=l(e);return"object"===r?i(e)?"Null":e.constructor.name:m[r[0]]+r.slice(1)},y=p(((e,r)=>(r.push(e),r))),g=c(((e,r,t)=>(t[e]=r,t))),b=c(((e,r,t)=>t.reduce(e,r))),w=c(((e,r,t)=>{for(let s in t)switch(d(t[s])){case"Array":if(e>1&&"Array"===d(r[s]))switch(e){case 2:const o=r[s],n=t[s];for(const r in n)o[r]?w(e,o[r],n[r]):o[r]=n[r];break;case 3:r[s].push(...t[s])}else r[s]=t[s];break;case"Object":if("Object"===d(r[s])){w(e,r[s],t[s]);break}default:r[s]=t[s]}return r})),j=w(1),O=w(2),q=w(3),A=p(((e,r)=>{let t,s,o,n;for(t in e)s=e[t],[o,n]=h(s)?s(r):[s,r[t]],r[o]=n,t!==o&&delete r[t];return r})),E=p(((e,r)=>{const t=f(r);for(let s in r)e(r[s],s)||(t?r.splice(s,1):delete r[s]);return r})),S=p(((e,r)=>r.indexOf(e))),k=p(((e,r)=>{const t=d(e);if(t===d(r)&&("Object"===t||"Array"==t)){if(i(e)||i(r))return e===r;if(e===r)return!0;for(const t of[e,r])for(const s in t)if(!(t===r&&s in e||t===e&&s in r&&k(e[s],r[s])))return!1;return!0}return e===r})),P=o(((e,r,t,s)=>e(s)?r(s):t(s))),v=c(((e,r,t)=>P(e,r,X,t))),D=(...r)=>(t=Symbol())=>{for(let s=K(r)-1;s>-1;s--)t=t===e?r[s]():r[s](t);return t},N=p(((e,r)=>e.bind(r))),B=p(((e,r)=>r[e])),_=p(((e,r)=>{if((e=>"string"===l(e))(r))return r.includes(e);for(const t of r)if(k(t,e))return!0;return!1})),C=c(((e,r,t)=>t.slice(e,u(r)?r:x))),T=B(0),U=C(1,x),$=p(((e,r)=>e+r)),z=p(((e,r)=>r-e)),F=e=>o(((r,t)=>e(t,r))),I=e=>i(e)||(e=>e===a)(e),K=e=>e.length,L=e=>()=>e,X=e=>e,G=e=>!e,H=e=>(...r)=>{const t=e(...r);return h(t)&&t.$args_left?H(t):G(t)},J=e=>Object.entries(e),M=p(((e,r)=>e.test(r))),Q=p(((e,r)=>(e(r),r))),R=p(((e,r)=>[...r,e])),V=p(((e,r)=>r.split(e))),W=L(!0),Y=L(!1),Z=p(((e,r)=>re($(e),r-e))),ee=p(((e,r)=>e.filter(F(_)(r)))),re=p(((e,r)=>[...Array(r)].map(((r,t)=>e(t))))),te=p(((e,r)=>e>r)),se=p(((e,r)=>e<r)),oe=p(((e,r)=>r>=e)),ne=p(((e,r)=>r<=e)),pe=p(((e,r)=>r.sort(e))),ce=p(((e,r)=>r.find(e))),ae=p(((e,r)=>r.findIndex(e))),xe=p(((e,r)=>ae(k(e),r))),le=p(((e,r)=>{for(const[t,s]of e)if(t(r))return s(r)})),ie=c(((e,r,t)=>({...t,[e]:r}))),ue=c(((e,r,t)=>D((s=>{return ie(s,K(e)<2?r:ue(C(1,x,e),r,(o=t[s],i(o)||"object"!==l(o)?{}:t[s])),t);var o}),T)(e))),fe=p(((e,r)=>r.every(e))),he=p(((e,r)=>r.some(e))),me=p(((e,r)=>e.every((e=>e(r))))),de=p(((e,r)=>e.some((e=>e(r))))),ye=p(((e,r)=>r[e])),ge=c(((e,r,t)=>k(t[e],r))),be=c(((e,r,t)=>k(r[e],t[e]))),we=c(((e,r,t)=>P(K,(()=>I(t)?e:D(P(I,L(e),(t=>we(e,C(1,x,r),t))),F(ye)(t),T)(r)),L(t),r))),je=we(a),Oe=c(((e,r,t)=>k(je(e,t),r))),qe=c(((e,r,t)=>k(je(e,r),je(e,t)))),Ae=/^(.*?)(8|16|32|64)(Clamped)?Array$/,Ee=(e,r=!1)=>{const t=d(e);switch(t){case"Null":case"String":case"Number":case"Boolean":case"Symbol":return e;case"Array":return r?[...e]:_e(Ee,e);case"Object":if(r)return{...e};const s={};for(let r in e)s[r]=Ee(e[r]);return s;default:return Ae.test(t)?e.constructor.from(e):e}},Se=c(((e,r,t)=>b(e,Ee(r),t))),ke=p(((e,r)=>$e(e,r))),Pe=p(((e,r)=>{const t={};for(const s of e)s in r&&(t[s]=r[s]);return t})),ve=p(((e,r)=>$e(((r,t)=>!_(t,e)),r))),De=e=>Se(((e,r)=>ie(...r,e)),{},e),Ne=p(((e,r)=>e.concat(r))),Be=p(((e,r)=>r.join(e))),_e=p(((e,r)=>r.map(e))),Ce=p(((e,r)=>r.forEach(e))),Te=c(((e,r,t)=>r(t)&&e(t))),Ue=c(((e,r,t)=>t.replace(e,r))),$e=p(((e,r)=>f(r)?r.filter(e):D(De,$e((([r,t])=>e(t,r))),J)(r))),ze=p(((e,r)=>Object.assign({},e,r))),Fe=p(((e,r)=>j(Ee(e),Ee(r)))),Ie=p(((e,r)=>O(Ee(e),Ee(r)))),Ke=p(((e,r)=>q(Ee(e),Ee(r)))),Le=c(((e,r,t)=>ie(e,r(t[e]),t))),Xe=p(((e,r)=>A(e,Object.assign({},r)))),Ge=(()=>{const e=async(r,t,s)=>{s<t.length&&(await r(t[s]),await e(r,t,++s))};return p(((r,t)=>e(r,t,0)))})(),He=p((async(e,r)=>(await e(r),r))),Je=p(((e,r)=>Promise.all(r.map(e)))),Me=(()=>{const e=async(r,t,s)=>~s?await e(r,await r[s](t),--s):t;return(...r)=>t=>e(r,t,r.length-1)})(),Qe=X,Re=X,Ve=X;exports.F=Y,exports.T=W,exports.__=e,exports.add=$,exports.all=fe,exports.allPass=me,exports.always=L,exports.any=he,exports.anyPass=de,exports.append=R,exports.assoc=ie,exports.assocPath=ue,exports.bind=N,exports.both=Te,exports.clone=Ee,exports.cloneShallow=e=>Ee(e,!0),exports.complement=H,exports.compose=D,exports.composeAsync=Me,exports.concat=Ne,exports.cond=le,exports.curry=o,exports.curry2=p,exports.curry3=c,exports.echo=Ve,exports.empty=e=>{switch(d(e)){case"String":return"";case"Object":return{};case"Array":return[];default:return a}},exports.equals=k,exports.explore=(e,r="log")=>Q((t=>console[r](e,t))),exports.filter=$e,exports.find=ce,exports.findIndex=ae,exports.flip=F,exports.forEach=Ce,exports.forEachAsync=Je,exports.forEachSerial=Ge,exports.fromPairs=De,exports.genBy=re,exports.getTmpl=e=>{const r=[],t=[],s=e.length;let o,n,p=0,c=0,a=!1;for(p=0;p<s;p++)switch(o=e[p],o){case"{":a=!0,c=p;break;case"}":a=!1,r.push(""),t.push(e.slice(c+1,p));break;default:a||(n=r.length-1,n<0&&(r.push(""),n++),r[n]+=o)}return e=>{const s=[],o=r.length-1;for(const n in r)p=+n,s.push(r[p]),p!==o&&s.push(je(t[p].split("."),e));return s.join("")}},exports.gt=te,exports.gte=oe,exports.head=T,exports.identity=X,exports.ifElse=P,exports.includes=_,exports.indexOf=xe,exports.intersection=ee,exports.isEmpty=e=>{switch(d(e)){case"String":case"Array":return 0==K(e);case"Object":for(const r in e)return!1;return!0;default:return null}},exports.isNil=I,exports.join=Be,exports.keys=e=>Object.keys(e),exports.last=e=>e[K(e)-1],exports.length=K,exports.lt=se,exports.lte=ne,exports.map=_e,exports.mapKeys=Xe,exports.memoize=e=>{let r,t=!1;return()=>t?r:(t=!0,r=e())},exports.mergeDeep=Fe,exports.mergeDeepAdd=Ke,exports.mergeDeepX=Ie,exports.mergeShallow=ze,exports.mirror=Qe,exports.not=G,exports.nth=B,exports.omit=ve,exports.once=e=>{let r,t=!1;return(...s)=>t?r:(t=!0,r=e(...s))},exports.overProp=Le,exports.path=je,exports.pathEq=Oe,exports.pathOr=we,exports.pathsEq=qe,exports.pick=Pe,exports.pickBy=ke,exports.prop=ye,exports.propEq=ge,exports.propsEq=be,exports.qappend=y,exports.qassoc=g,exports.qfilter=E,exports.qindexOf=S,exports.qmapKeys=A,exports.qmergeDeep=j,exports.qmergeDeepAdd=q,exports.qmergeDeepX=O,exports.qreduce=b,exports.range=Z,exports.reduce=Se,exports.reflect=Re,exports.replace=Ue,exports.reverse=e=>D((r=>Se(((t,s,o)=>y(e[r-o],t)),[],e)),$(-1),K)(e),exports.sizeof=e=>{if("Object"===d(e)){let r=0;for(let t in e)r++;return r}return K(e)},exports.slice=C,exports.sort=pe,exports.split=V,exports.subtract=z,exports.tail=U,exports.tap=Q,exports.test=M,exports.toLower=e=>e.toLowerCase(),exports.toPairs=J,exports.toUpper=e=>e.toUpperCase(),exports.trim=e=>e.trim(),exports.type=d,exports.uncurry=e=>(...r)=>b(((e,r)=>e?e(r):e),e,r),exports.uniq=e=>b(((e,r)=>_(r,e)?e:y(r,e)),[],e),exports.values=e=>Object.values(e),exports.waitAll=e=>Promise.all(e),exports.waitTap=He,exports.when=v;
1
+ "use strict";const e=Symbol("Placeholder"),r=r=>{let t=0;for(const s of r)s!==e&&t++;return t},t=(r,t)=>{const s=r.length,o=r.slice(),p=t.length;let n=p,c=0;for(;n&&c<s;c++)o[c]===e&&(o[c]=t[p-n],n--);for(c=s;n;c++,n--)o[c]=t[p-n];return o},s=(e,o,p)=>{const n=e.length-o.length-r(p);if(n<1)return e(...t(o,p));{const r=(...r)=>s(e,t(o,p),r);return r.$args_left=n,r}},o=e=>(...t)=>e.length>r(t)?s(e,[],t):e(...t),p=r=>function(t){return t===e?r:r(t)};function n(r){return function(t,s){const o=t===e,n=arguments.length;if(1===n&&o)throw new Error("Senseless placeholder usage.");return arguments.length>1?o?p((e=>r(e,s))):r(t,s):e=>r(t,e)}}function c(e){return o(e)}const x=void 0,a=1/0,i=e=>typeof e,l=e=>null===e,u=e=>"number"==i(e),f=e=>Array.isArray(e),h=e=>"function"===i(e),d={u:"U",b:"B",n:"N",s:"S",f:"F"},m=e=>{const r=i(e);return"object"===r?l(e)?"Null":e.constructor.name:d[r[0]]+r.slice(1)},y=n(((e,r)=>m(r)===e)),g=n(((e,r)=>(r.push(e),r))),b=c(((e,r,t)=>(t[e]=r,t))),w=c(((e,r,t)=>t.reduce(e,r))),j=c(((e,r,t)=>{for(let s in t)switch(m(t[s])){case"Array":if(e>1&&"Array"===m(r[s]))switch(e){case 2:const o=r[s],p=t[s];for(const r in p)o[r]?j(e,o[r],p[r]):o[r]=p[r];break;case 3:r[s].push(...t[s])}else r[s]=t[s];break;case"Object":if("Object"===m(r[s])){j(e,r[s],t[s]);break}default:r[s]=t[s]}return r})),O=j(1),q=j(2),A=j(3),E=n(((e,r)=>{let t,s,o,p;for(t in e)s=e[t],[o,p]=h(s)?s(r):[s,r[t]],r[o]=p,t!==o&&delete r[t];return r})),k=n(((e,r)=>{const t=f(r);for(let s in r)e(r[s],s)||(t?r.splice(s,1):delete r[s]);return r})),S=n(((e,r)=>r.indexOf(e))),v=n(((e,r)=>{const t=m(e);if(t===m(r)&&("Object"===t||"Array"==t)){if(l(e)||l(r))return e===r;if(e===r)return!0;for(const t of[e,r])for(const s in t)if(!(t===r&&s in e||t===e&&s in r&&v(e[s],r[s])))return!1;return!0}return e===r})),P=o(((e,r,t,s)=>e(s)?r(s):t(s))),D=c(((e,r,t)=>P(e,r,J,t))),N=(...r)=>(...t)=>{let s,o=!0;for(let p=G(r)-1;p>-1;p--)o?(o=!1,s=r[p](...t)):s=s===e?r[p]():r[p](s);return s},B=n(((e,r)=>e.bind(r))),_=n(((e,r)=>r[e])),C=n(((e,r)=>{if((e=>"string"===i(e))(r))return r.includes(e);for(const t of r)if(v(t,e))return!0;return!1})),I=c(((e,r,t)=>t.slice(e,u(r)?r:a))),T=e=>n(((r,t)=>e(t,r))),U=_(0),$=I(1,a),z=n(((e,r)=>e+r)),F=n(((e,r)=>r-e)),K=n(((e,r)=>e*r)),L=n(((e,r)=>e/r)),X=e=>l(e)||(e=>e===x)(e),G=e=>e.length,H=e=>()=>e,J=e=>e,M=e=>!e,Q=e=>(...r)=>{const t=e(...r);return h(t)&&t.$args_left?Q(t):M(t)},R=e=>Object.entries(e),V=n(((e,r)=>e.test(r))),W=n(((e,r)=>(e(r),r))),Y=n(((e,r)=>[...r,e])),Z=n(((e,r)=>r.split(e))),ee=H(!0),re=H(!1),te=n(((e,r)=>oe(z(e),r-e))),se=n(((e,r)=>e.filter(T(C)(r)))),oe=n(((e,r)=>[...Array(r)].map(((r,t)=>e(t))))),pe=n(((e,r)=>e>r)),ne=n(((e,r)=>e<r)),ce=n(((e,r)=>r>=e)),xe=n(((e,r)=>r<=e)),ae=n(((e,r)=>r.sort(e))),ie=n(((e,r)=>r.find(e))),le=n(((e,r)=>r.findIndex(e))),ue=n(((e,r)=>le(v(e),r))),fe=n(((e,r)=>{for(const[t,s]of e)if(t(r))return s(r)})),he=c(((e,r,t)=>({...t,[e]:r}))),de=c(((e,r,t)=>N((s=>{return he(s,G(e)<2?r:de(I(1,a,e),r,(o=t[s],l(o)||"object"!==i(o)?{}:t[s])),t);var o}),U)(e))),me=n(((e,r)=>r.every(e))),ye=n(((e,r)=>r.some(e))),ge=n(((e,r)=>e.every((e=>e(r))))),be=n(((e,r)=>e.some((e=>e(r))))),we=n(((e,r)=>r[e])),je=c(((e,r,t)=>v(t[e],r))),Oe=c(((e,r,t)=>v(r[e],t[e]))),qe=c(((e,r,t)=>P(G,(()=>X(t)?e:N(P(X,H(e),(t=>qe(e,I(1,a,r),t))),T(we)(t),U)(r)),H(t),r))),Ae=qe(x),Ee=c(((e,r,t)=>v(Ae(e,t),r))),ke=c(((e,r,t)=>v(Ae(e,r),Ae(e,t)))),Se=/^(.*?)(8|16|32|64)(Clamped)?Array$/,ve=(e,r=!1)=>{const t=m(e);switch(t){case"Null":case"String":case"Number":case"Boolean":case"Symbol":return e;case"Array":return r?[...e]:Te(ve,e);case"Object":if(r)return{...e};const s={};for(let r in e)s[r]=ve(e[r]);return s;default:return Se.test(t)?e.constructor.from(e):e}},Pe=c(((e,r,t)=>w(e,ve(r),t))),De=n(((e,r)=>Fe(e,r))),Ne=n(((e,r)=>{const t={};for(const s of e)s in r&&(t[s]=r[s]);return t})),Be=n(((e,r)=>Fe(((r,t)=>!C(t,e)),r))),_e=e=>Pe(((e,r)=>he(...r,e)),{},e),Ce=n(((e,r)=>e.concat(r))),Ie=n(((e,r)=>r.join(e))),Te=n(((e,r)=>r.map(e))),Ue=n(((e,r)=>r.forEach(e))),$e=c(((e,r,t)=>r(t)&&e(t))),ze=c(((e,r,t)=>t.replace(e,r))),Fe=n(((e,r)=>f(r)?r.filter(e):N(_e,Fe((([r,t])=>e(t,r))),R)(r))),Ke=n(((e,r)=>Object.assign({},e,r))),Le=n(((e,r)=>O(ve(e),ve(r)))),Xe=n(((e,r)=>q(ve(e),ve(r)))),Ge=n(((e,r)=>A(ve(e),ve(r)))),He=c(((e,r,t)=>he(e,r(t[e]),t))),Je=n(((e,r)=>E(e,Object.assign({},r)))),Me=(()=>{const e=async(r,t,s)=>{s<t.length&&(await r(t[s]),await e(r,t,++s))};return n(((r,t)=>e(r,t,0)))})(),Qe=n((async(e,r)=>(await e(r),r))),Re=n(((e,r)=>Promise.all(r.map(e)))),Ve=(()=>{const e=async(r,t,s)=>~s?await e(r,await r[s](t),--s):t;return(...r)=>t=>e(r,t,r.length-1)})(),We=J,Ye=J,Ze=J;exports.F=re,exports.T=ee,exports.__=e,exports.add=z,exports.all=me,exports.allPass=ge,exports.always=H,exports.any=ye,exports.anyPass=be,exports.append=Y,exports.assoc=he,exports.assocPath=de,exports.bind=B,exports.both=$e,exports.clone=ve,exports.cloneShallow=e=>ve(e,!0),exports.complement=Q,exports.compose=N,exports.composeAsync=Ve,exports.concat=Ce,exports.cond=fe,exports.curry=o,exports.curry2=n,exports.curry3=c,exports.divide=L,exports.echo=Ze,exports.empty=e=>{switch(m(e)){case"String":return"";case"Object":return{};case"Array":return[];default:return x}},exports.equals=v,exports.explore=(e,r="log")=>W((t=>console[r](e,t))),exports.filter=Fe,exports.find=ie,exports.findIndex=le,exports.flip=T,exports.forEach=Ue,exports.forEachAsync=Re,exports.forEachSerial=Me,exports.fromPairs=_e,exports.genBy=oe,exports.getTmpl=e=>{const r=[],t=[],s=e.length;let o,p,n,c=0,x=0,a=!1,i=U(e),l=!1;for(c=0;c<s;c++)switch(o=e[c],o){case"{":if(!i){a=!0,x=c;break}case"}":if(!i){a=!1,r.push(""),t.push(e.slice(x+1,c));break}default:n=e[c+1],l="\\"===o,a||l&&("{"===n||"}"===n)||(p=r.length-1,p<0&&(r.push(""),p++),r[p]+=o),i=l}return e=>{const s=[],o=r.length-1;for(const p in r)c=+p,s.push(r[c]),c!==o&&s.push(Ae(t[c].split("."),e));return s.join("")}},exports.gt=pe,exports.gte=ce,exports.head=U,exports.identity=J,exports.ifElse=P,exports.includes=C,exports.indexOf=ue,exports.intersection=se,exports.isEmpty=e=>{switch(m(e)){case"String":case"Array":return 0==G(e);case"Object":for(const r in e)return!1;return!0;default:return null}},exports.isNil=X,exports.join=Ie,exports.keys=e=>Object.keys(e),exports.last=e=>e[G(e)-1],exports.length=G,exports.lt=ne,exports.lte=xe,exports.map=Te,exports.mapKeys=Je,exports.memoize=e=>{let r,t=!1;return()=>t?r:(t=!0,r=e())},exports.mergeDeep=Le,exports.mergeDeepAdd=Ge,exports.mergeDeepX=Xe,exports.mergeShallow=Ke,exports.mirror=We,exports.multiply=K,exports.not=M,exports.nth=_,exports.omit=Be,exports.once=e=>{let r,t=!1;return(...s)=>t?r:(t=!0,r=e(...s))},exports.overProp=He,exports.path=Ae,exports.pathEq=Ee,exports.pathOr=qe,exports.pathsEq=ke,exports.pick=Ne,exports.pickBy=De,exports.prop=we,exports.propEq=je,exports.propsEq=Oe,exports.qappend=g,exports.qassoc=b,exports.qfilter=k,exports.qindexOf=S,exports.qmapKeys=E,exports.qmergeDeep=O,exports.qmergeDeepAdd=A,exports.qmergeDeepX=q,exports.qreduce=w,exports.range=te,exports.reduce=Pe,exports.reflect=Ye,exports.replace=ze,exports.reverse=e=>N((r=>Pe(((t,s,o)=>g(e[r-o],t)),[],e)),z(-1),G)(e),exports.sizeof=e=>{if("Object"===m(e)){let r=0;for(let t in e)r++;return r}return G(e)},exports.slice=I,exports.sort=ae,exports.split=Z,exports.subtract=F,exports.tail=$,exports.take=e=>(...r)=>r[e],exports.tap=W,exports.test=V,exports.toLower=e=>e.toLowerCase(),exports.toPairs=R,exports.toUpper=e=>e.toUpperCase(),exports.trim=e=>e.trim(),exports.type=m,exports.typeIs=y,exports.uncurry=e=>(...r)=>w(((e,r)=>e?e(r):e),e,r),exports.uniq=e=>w(((e,r)=>C(r,e)?e:g(r,e)),[],e),exports.values=e=>Object.values(e),exports.waitAll=e=>Promise.all(e),exports.waitTap=Qe,exports.when=D;
package/package.json CHANGED
@@ -42,7 +42,7 @@
42
42
  "prod": "npm run gentypes && npm run prod:es && npm run prod:cjs",
43
43
  "all": "npm run dev && npm run prod"
44
44
  },
45
- "version": "0.13.0-beta12",
45
+ "version": "0.14.0-beta1",
46
46
  "ava": {
47
47
  "files": [ "./test/specs/*.ts" ],
48
48
  "failFast": true,
@@ -69,7 +69,7 @@
69
69
  "rollup-plugin-typescript2": "^0.34.1",
70
70
  "ts-node": "^10.9.1",
71
71
  "tslint": "^6.1.0",
72
- "typescript": "^4.9.3"
72
+ "typescript": "^4.9.4"
73
73
  },
74
74
  "types": "./dist/bundle.d.ts",
75
75
  "sideEffects": false
package/src/common.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { curry2 } from "./curry"
1
2
  import { to, isNull } from "./utils"
2
3
 
3
4
  // It's faster that toUpperCase() !
@@ -12,4 +13,5 @@ export const type = (s: any) => {
12
13
  return t==='object'
13
14
  ? isNull(s) ? 'Null' : s.constructor.name
14
15
  : caseMap[t[0]] + t.slice(1)
15
- }
16
+ }
17
+ export const typeIs = curry2((t: string, s: any) => type(s)===t)
package/src/curry.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { F as FT } from 'ts-toolbelt'
1
+ import { A, F as FT } from 'ts-toolbelt'
2
2
  import { AnyFunc, AnyArgs } from "./types"
3
3
 
4
4
  type Placeholder = symbol
package/src/quick.ts CHANGED
@@ -3,6 +3,8 @@ import { type } from "./common"
3
3
  import { AnyObject, Reducer, AnyFunc } from "./types"
4
4
  import { isFunc, isArray } from "./utils"
5
5
 
6
+ // TODO: qmap, qfilter.
7
+
6
8
  export const qappend = curry2((s: any, xs: any[]) => {xs.push(s); return xs})
7
9
  export const qassoc = curry3(
8
10
  (prop: string, v: any, obj: AnyObject) => {
package/src/safe.ts CHANGED
@@ -1,11 +1,12 @@
1
+ import { F as FT } from 'ts-toolbelt'
1
2
  import { __, curry, curry2, curry3 } from './curry'
2
3
  import { isNum, isUndef, undef, isNull, isArray, isFunc, isStr, isObj, inf } from './utils'
3
4
  import { qmergeDeep, qreduce, qappend, qmapKeys, qmergeDeepX, qmergeDeepAdd } from './quick'
4
- import { AnyFunc, Cond, AnyObject, Reducer } from './types'
5
+ import { AnyFunc, Cond, AnyObject, Reducer, Curried } from './types'
5
6
  import { type } from './common'
6
- import { F as FT } from 'ts-toolbelt'
7
- // over, lensProp
7
+ // SomeType, totype, over, lensProp
8
8
 
9
+ export const take = (argN: number) => (...args: any[]) => args[argN]
9
10
  export const equals = curry2((a: any, b: any) => {
10
11
  const typea = type(a)
11
12
  if(typea===type(b) && (typea==='Object' || typea=='Array')) {
@@ -44,12 +45,18 @@ export const when = curry3(
44
45
  s: any
45
46
  ) => ifElse(cond, pipe, identity, s)
46
47
  )
47
- type Composed<TIn, TOut> = (x: TIn) => TOut
48
+ type Composed<TIn extends any[], TOut> = (...xs: TIn) => TOut
48
49
  export const compose = (
49
- <TIn = any, TOut = any>(...fns: AnyFunc[]): Composed<TIn, TOut> =>
50
- (s: TIn = Symbol() as any) => {
50
+ <TIn extends any[] = any[], TOut = any>(...fns: AnyFunc[]): Composed<TIn, TOut> =>
51
+ (...args: TIn) => {
52
+ let first = true
53
+ let s: any
51
54
  for(let i = length(fns)-1; i>-1; i--) {
52
- s = s===__ ? fns[i]() : fns[i](s)
55
+ if(first) {
56
+ first = false
57
+ s = fns[i](...args)
58
+ } else
59
+ s = s===__ ? fns[i]() : fns[i](s)
53
60
  }
54
61
  return s as any as TOut
55
62
  }
@@ -80,11 +87,17 @@ export const slice = curry3(
80
87
  (from: number, to: number, o: any[] | string) =>
81
88
  o.slice(from, (isNum(to)?to:inf) as number)
82
89
  )
90
+ type TupleFn<ARG1=any, ARG2=any, Out=any> = (a: ARG1, b: ARG2) => Out
91
+ export const flip = <ARG1=any, ARG2=any, Out=any>(
92
+ fn: FT.Curry<TupleFn<ARG1, ARG2, Out>>
93
+ ): FT.Curry<TupleFn<ARG2, ARG1, Out>> =>
94
+ curry2((b: ARG2, a: ARG1) => fn(a as any, b as any))
83
95
  export const head = nth(0)
84
96
  export const tail = slice(1, inf) // typeshit.
85
97
  export const add = curry2((n: number, m: number) => n+m)
86
98
  export const subtract = curry2((n: number, m: number) => m-n)
87
- export const flip = (fn: Function) => curry((b: any, a: any) => fn(a, b))
99
+ export const multiply = curry2((n: number, m: number) => n*m)
100
+ export const divide = curry2((n: number, m: number) => n/m)
88
101
  export const isNil = (s: any) => isNull(s) || isUndef(s)
89
102
  export const length = (s: any[] | string) => s.length
90
103
  export const always = <T=any>(s: T) => () => s
@@ -102,7 +115,7 @@ export const toPairs = (o: AnyObject | any[]) => Object.entries(o)
102
115
  export const test = curry2((re: RegExp, s: string) => re.test(s))
103
116
  export const tap = curry2((fn: Function, s: any) => { fn(s); return s })
104
117
  export const append = curry2((s: any, xs: any[]) => [...xs, s])
105
- export const split = curry2((s: string, xs: string) => xs.split(s))
118
+ export const split = curry2((s: string|RegExp, xs: string) => xs.split(s))
106
119
  export const T = always<true>(true) as (...args: any[]) => true
107
120
  export const F = always<false>(false) as (...args: any[]) => false
108
121
  export const sizeof = (s: any[] | string | AnyObject) => {
package/src/strings.ts CHANGED
@@ -1,30 +1,42 @@
1
1
  import { AnyObject } from "./types"
2
- import { path } from "./safe"
2
+ import { head, path } from "./safe"
3
+
4
+ type StrTmpl = ((data: AnyObject) => string)
5
+ const ecran = '\\'
3
6
 
4
7
  // TODO: make it splicy, not accumulatie by symbols.
8
+ // Supports ecrans: '\{"json": {yes} \}'
5
9
  // get_tmpl(one{meme}two)({meme: 42}) -> one42two
6
- type StrTmpl = ((data: AnyObject) => string)
7
10
  export const getTmpl = (tmpl: string): StrTmpl => {
8
11
  const parts: string[] = []
9
12
  const keymap: string[] = []
10
13
  const len = tmpl.length
11
- let i = 0, s: string, ln: number, start = 0, open = false
14
+ let i = 0, s, ln, start = 0, open = false,
15
+ hasEcran = head(tmpl), hasEcranNext = false,
16
+ nextChar: string
12
17
  for(i=0; i<len; i++) {
13
18
  s = tmpl[i]
14
19
  switch(s) {
15
20
  case '{':
16
- open = true; start = i;
17
- break
21
+ if(!hasEcran) {
22
+ open = true; start = i;
23
+ break
24
+ }
18
25
  case '}':
19
- open = false; parts.push('')
20
- keymap.push(tmpl.slice(start+1, i))
21
- break
26
+ if(!hasEcran) {
27
+ open = false; parts.push('')
28
+ keymap.push(tmpl.slice(start+1, i))
29
+ break
30
+ }
22
31
  default:
23
- if(!open) {
32
+ nextChar = tmpl[i+1]
33
+ hasEcranNext = s === ecran
34
+ if(!open && (!hasEcranNext || nextChar!=='{' && nextChar!=='}')) {
24
35
  ln = parts.length-1
25
36
  if(ln<0) { parts.push(''); ln++ }
26
37
  parts[ln] += s
27
38
  }
39
+ hasEcran = hasEcranNext
28
40
  break
29
41
  }
30
42
  }
package/tsconfig.json CHANGED
@@ -12,7 +12,8 @@
12
12
  "noUnusedParameters": true,
13
13
  "noUnusedLocals": false,
14
14
  "rootDir": "src",
15
- "baseUrl": "."
15
+ "baseUrl": ".",
16
+ "outDir": "dist/ts"
16
17
  },
17
18
  "include": [ "src/**/*" ]
18
19
  }
package/src/common.js DELETED
@@ -1,13 +0,0 @@
1
- import { to, isNull } from "./utils";
2
- // It's faster that toUpperCase() !
3
- const caseMap = {
4
- u: 'U', b: 'B', n: 'N', s: 'S', f: 'F'
5
- };
6
- export const toLower = (s) => s.toLowerCase();
7
- export const toUpper = (s) => s.toUpperCase();
8
- export const type = (s) => {
9
- const t = to(s);
10
- return t === 'object'
11
- ? isNull(s) ? 'Null' : s.constructor.name
12
- : caseMap[t[0]] + t.slice(1);
13
- };
package/src/curry.js DELETED
@@ -1,68 +0,0 @@
1
- export const __ = Symbol('Placeholder');
2
- const countArgs = (s) => {
3
- let i = 0;
4
- for (const v of s)
5
- v !== __ && i++;
6
- return i;
7
- };
8
- // TODO: try to make it mutable.
9
- // { 0: __, 1: 10 }, [ 11 ]
10
- const addArgs = (args, _args) => {
11
- const len = args.length;
12
- const new_args = args.slice();
13
- const _args_len = _args.length;
14
- let _args_left = _args_len;
15
- let i = 0;
16
- for (; _args_left && i < len; i++) {
17
- if (new_args[i] === __) {
18
- new_args[i] = _args[_args_len - _args_left];
19
- _args_left--;
20
- }
21
- }
22
- for (i = len; _args_left; i++, _args_left--) {
23
- new_args[i] = _args[_args_len - _args_left];
24
- }
25
- return new_args;
26
- };
27
- const _curry = (fn, args, new_args) => {
28
- const args2add = fn.length - args.length - countArgs(new_args);
29
- if (args2add < 1) {
30
- return fn(...addArgs(args, new_args));
31
- }
32
- else {
33
- const curried = (...__args) => _curry(fn, addArgs(args, new_args), __args);
34
- curried.$args_left = args2add;
35
- return curried;
36
- }
37
- };
38
- export const curry = ((fn) => ((...args) => fn.length > countArgs(args)
39
- ? _curry(fn, [], args)
40
- : fn(...args)));
41
- const endlessph = (fn) => {
42
- function _endlessph(a) {
43
- return a === __ ? fn : fn(a);
44
- }
45
- return _endlessph;
46
- };
47
- export function curry2(fn) {
48
- function curried2(a, b) {
49
- const withPlaceholder1 = a === __;
50
- const aln = arguments.length;
51
- if (aln === 1 && withPlaceholder1)
52
- throw new Error('Senseless placeholder usage.');
53
- return arguments.length > 1
54
- ? withPlaceholder1
55
- ? endlessph((a) => fn(a, b))
56
- : fn(a, b)
57
- : (b) => fn(a, b);
58
- }
59
- return curried2;
60
- }
61
- export function curry3(fn) {
62
- // type p0 = Parameters<Func>[0]
63
- // type p1 = Parameters<Func>[1]
64
- // type p2 = Parameters<Func>[2]
65
- // type ReturnT = ReturnType<Func>
66
- // TODO: optimize.
67
- return curry(fn);
68
- }
package/src/index.js DELETED
@@ -1,6 +0,0 @@
1
- export * from './curry';
2
- export * from './uncurry';
3
- export * from './common';
4
- export * from './safe';
5
- export * from './quick';
6
- export * from './strings';
package/src/quick.js DELETED
@@ -1,82 +0,0 @@
1
- import { curry2, curry3 } from "./curry";
2
- import { type } from "./common";
3
- import { isFunc, isArray } from "./utils";
4
- export const qappend = curry2((s, xs) => { xs.push(s); return xs; });
5
- export const qassoc = curry3((prop, v, obj) => {
6
- obj[prop] = v;
7
- return obj;
8
- });
9
- export const qreduce = curry3((fn, accum, arr) => arr.reduce(fn, accum));
10
- // strategy is for arrays: 1->clean, 2->merge, 3->push.
11
- const mergeDeep = curry3((strategy, o1, o2) => {
12
- for (let k in o2) {
13
- switch (type(o2[k])) {
14
- case 'Array':
15
- if (strategy > 1 && type(o1[k]) === 'Array') {
16
- switch (strategy) {
17
- case 2:
18
- const o1k = o1[k], o2k = o2[k];
19
- for (const i in o2k) {
20
- if (o1k[i]) {
21
- mergeDeep(strategy, o1k[i], o2k[i]);
22
- }
23
- else {
24
- o1k[i] = o2k[i];
25
- }
26
- }
27
- break;
28
- case 3: o1[k].push(...o2[k]);
29
- default: break;
30
- }
31
- }
32
- else {
33
- o1[k] = o2[k];
34
- }
35
- break;
36
- case 'Object':
37
- if (type(o1[k]) === 'Object') {
38
- mergeDeep(strategy, o1[k], o2[k]);
39
- break;
40
- }
41
- default:
42
- o1[k] = o2[k];
43
- break;
44
- }
45
- }
46
- return o1;
47
- });
48
- export const qmergeDeep = mergeDeep(1);
49
- export const qmergeDeepX = mergeDeep(2);
50
- export const qmergeDeepAdd = mergeDeep(3);
51
- /** qmapKeys({ a: 'b' }, { a: 44 }) -> { b: 44 } */
52
- export const qmapKeys = curry2((keyMap, o) => {
53
- let k, mapped, newKey, newValue;
54
- for (k in keyMap) {
55
- mapped = keyMap[k];
56
- [newKey, newValue] = isFunc(mapped)
57
- ? mapped(o)
58
- : [mapped, o[k]];
59
- o[newKey] = newValue;
60
- if (k !== newKey) {
61
- delete o[k];
62
- }
63
- }
64
- return o;
65
- });
66
- export const qfilter = curry2((cond, data) => {
67
- const isArr = isArray(data);
68
- for (let k in data) {
69
- if (!cond(data[k], k)) {
70
- if (isArr) {
71
- data.splice(k, 1);
72
- }
73
- else {
74
- // TODO: handle Maps and Sets ?
75
- delete data[k];
76
- }
77
- }
78
- }
79
- return data;
80
- });
81
- /** @deprecated */
82
- export const qindexOf = curry2((x, xs) => xs.indexOf(x));
package/src/safe.js DELETED
@@ -1,243 +0,0 @@
1
- import { __, curry, curry2, curry3 } from './curry';
2
- import { isNum, isUndef, undef, isNull, isArray, isFunc, isStr, isObj, inf } from './utils';
3
- import { qmergeDeep, qreduce, qappend, qmapKeys, qmergeDeepX, qmergeDeepAdd } from './quick';
4
- import { type } from './common';
5
- // over, lensProp
6
- export const equals = curry2((a, b) => {
7
- const typea = type(a);
8
- if (typea === type(b) && (typea === 'Object' || typea == 'Array')) {
9
- if (isNull(a) || isNull(b)) {
10
- return a === b;
11
- }
12
- if (a === b) {
13
- return true;
14
- }
15
- for (const v of [a, b]) {
16
- for (const k in v) {
17
- if (!((v === b) && (k in a)) &&
18
- !((v === a) && (k in b) && equals(a[k], b[k]))) {
19
- return false;
20
- }
21
- }
22
- }
23
- return true;
24
- }
25
- return a === b;
26
- });
27
- export const ifElse = curry((cond, pipeYes, pipeNo, s) => cond(s) ? pipeYes(s) : pipeNo(s));
28
- export const when = curry3((cond, pipe, s) => ifElse(cond, pipe, identity, s));
29
- export const compose = ((...fns) => (s = Symbol()) => {
30
- for (let i = length(fns) - 1; i > -1; i--) {
31
- s = s === __ ? fns[i]() : fns[i](s);
32
- }
33
- return s;
34
- });
35
- export const bind = curry2((fn, context) => fn.bind(context));
36
- const _nth = (i, data) => data[i];
37
- export const nth = curry2(_nth);
38
- export const includes = curry2((s, ss) => {
39
- if (isStr(ss)) {
40
- return ss.includes(s);
41
- }
42
- else {
43
- for (const a of ss) {
44
- if (equals(a, s)) {
45
- return true;
46
- }
47
- }
48
- return false;
49
- }
50
- });
51
- export const slice = curry3((from, to, o) => o.slice(from, (isNum(to) ? to : inf)));
52
- export const head = nth(0);
53
- export const tail = slice(1, inf); // typeshit.
54
- export const add = curry2((n, m) => n + m);
55
- export const subtract = curry2((n, m) => m - n);
56
- export const flip = (fn) => curry((b, a) => fn(a, b));
57
- export const isNil = (s) => isNull(s) || isUndef(s);
58
- export const length = (s) => s.length;
59
- export const always = (s) => () => s;
60
- export const identity = (s) => s;
61
- export const trim = (s) => s.trim();
62
- export const last = (s) => s[length(s) - 1];
63
- export const not = (o) => !o;
64
- export const complement = (fn) => (...args) => {
65
- const out = fn(...args);
66
- return (isFunc(out) && out.$args_left) ? complement(out) : not(out);
67
- };
68
- export const keys = (o) => Object.keys(o);
69
- export const values = (o) => Object.values(o);
70
- export const toPairs = (o) => Object.entries(o);
71
- export const test = curry2((re, s) => re.test(s));
72
- export const tap = curry2((fn, s) => { fn(s); return s; });
73
- export const append = curry2((s, xs) => [...xs, s]);
74
- export const split = curry2((s, xs) => xs.split(s));
75
- export const T = always(true);
76
- export const F = always(false);
77
- export const sizeof = (s) => {
78
- if (type(s) === 'Object') {
79
- let len = 0;
80
- for (let _k in s)
81
- len++;
82
- return len;
83
- }
84
- else
85
- return length(s);
86
- };
87
- export const range = curry2((from, to) => genBy(add(from), to - from));
88
- export const uniq = (xs) => qreduce((accum, x) => includes(x, accum) ? accum : qappend(x, accum), [], xs);
89
- export const intersection = curry2((xs1, xs2) => xs1.filter(flip(includes)(xs2)));
90
- export const genBy = curry2((generator, length) => [...Array(length)].map((_, i) => generator(i)));
91
- export const once = (fn) => {
92
- let done = false, cache;
93
- return (...args) => {
94
- if (done) {
95
- return cache;
96
- }
97
- else {
98
- done = true;
99
- return cache = fn(...args);
100
- }
101
- };
102
- };
103
- export const reverse = (xs) => compose((ln) => reduce((nxs, _, i) => qappend(xs[ln - i], nxs), [], xs), add(-1), length)(xs);
104
- export const gt = curry2((a, b) => a > b);
105
- export const lt = curry2((a, b) => a < b);
106
- export const gte = curry2((a, b) => b >= a);
107
- export const lte = curry2((a, b) => b <= a);
108
- export const sort = curry2((sortFn, xs) => xs.sort(sortFn));
109
- export const find = curry2((fn, s) => s.find(fn));
110
- export const findIndex = curry2((fn, s) => s.findIndex(fn));
111
- export const indexOf = curry2((x, xs) => findIndex(equals(x), xs));
112
- export const explore = (caption, level = 'log') => tap((v) => console[level](caption, v));
113
- export const cond = curry2((pairs, s) => {
114
- for (const [cond, fn] of pairs) {
115
- if (cond(s)) {
116
- return fn(s);
117
- }
118
- }
119
- });
120
- export const assoc = curry3((prop, v, obj) => ({
121
- ...obj,
122
- [prop]: v
123
- }));
124
- export const assocPath = curry3((_path, v, o) => compose((first) => assoc(first, length(_path) < 2
125
- ? v
126
- : assocPath(slice(1, inf, _path), v, isObj(o[first]) ? o[first] : {}), o), head)(_path));
127
- export const all = curry2((pred, xs) => xs.every(pred));
128
- export const any = curry2((pred, xs) => xs.some(pred));
129
- export const allPass = curry2((preds, x) => preds.every((pred) => pred(x)));
130
- export const anyPass = curry2((preds, x) => preds.some((pred) => pred(x)));
131
- export const prop = curry2((key, o) => o[key]);
132
- export const propEq = curry3((key, value, o) => equals(o[key], value));
133
- export const propsEq = curry3((key, o1, o2) => equals(o1[key], o2[key]));
134
- export const pathOr = curry3((_default, path, o) => ifElse(length, () => isNil(o)
135
- ? _default
136
- : compose(ifElse(isNil, always(_default), (o) => pathOr(_default, slice(1, inf, path), o)), flip(prop)(o), head)(path), always(o), path));
137
- export const path = pathOr(undef);
138
- export const pathEq = curry3((_path, value, o) => equals(path(_path, o), value));
139
- export const pathsEq = curry3((_path, o1, o2) => equals(path(_path, o1), path(_path, o2)));
140
- const typed_arr_re = /^(.*?)(8|16|32|64)(Clamped)?Array$/;
141
- export const clone = (s, shallow = false) => {
142
- const t = type(s);
143
- switch (t) {
144
- case 'Null': return s;
145
- case 'Array': return shallow ? [...s] : map(clone, s);
146
- case 'Object':
147
- if (shallow)
148
- return { ...s };
149
- const out = {};
150
- for (let k in s) {
151
- out[k] = clone(s[k]);
152
- }
153
- return out;
154
- case 'String':
155
- case 'Number':
156
- case 'Boolean':
157
- case 'Symbol':
158
- return s;
159
- default:
160
- return typed_arr_re.test(t) ? s.constructor.from(s) : s;
161
- }
162
- };
163
- export const cloneShallow = (s) => clone(s, true);
164
- export const reduce = curry3((fn, accum, arr) => qreduce(fn, clone(accum), arr));
165
- export const pickBy = curry2((cond, o) => filter(cond, o));
166
- export const pick = curry2((props, o) => {
167
- const out = {};
168
- for (const p of props) {
169
- if (p in o) {
170
- out[p] = o[p];
171
- }
172
- }
173
- return out;
174
- });
175
- export const omit = curry2((props, o) => filter((_, k) => !includes(k, props), o));
176
- export const fromPairs = (pairs) => reduce((o, pair) => assoc(...pair, o), {}, pairs);
177
- export const concat = curry2(((a, b) => a.concat(b)));
178
- export const join = curry2((delimeter, arr) => arr.join(delimeter));
179
- export const map = curry2((pipe, arr) => arr.map(pipe));
180
- export const forEach = curry2((pipe, arr) => arr.forEach(pipe));
181
- export const both = curry3((cond1, cond2, s) => cond2(s) && cond1(s));
182
- export const isEmpty = (s) => {
183
- switch (type(s)) {
184
- case 'String':
185
- case 'Array': return length(s) == 0;
186
- case 'Object':
187
- for (const _k in s)
188
- return false;
189
- return true;
190
- default: return null;
191
- }
192
- };
193
- export const empty = (s) => {
194
- switch (type(s)) {
195
- case 'String': return '';
196
- case 'Object': return {};
197
- case 'Array': return [];
198
- default: return undef;
199
- }
200
- };
201
- export const replace = curry3((a, b, where
202
- // @ts-ignore-next Some bug with overload.
203
- ) => where.replace(a, b));
204
- export const filter = curry2((cond, data) => isArray(data)
205
- ? data.filter(cond)
206
- : compose(fromPairs, filter(([k, v]) => cond(v, k)), toPairs)(data));
207
- export const memoize = (fn) => {
208
- let cache;
209
- let cached = false;
210
- return () => cached ? cache : (cached = true, cache = fn());
211
- };
212
- export const mergeShallow = curry2((o1, o2) => Object.assign({}, o1, o2));
213
- export const mergeDeep = curry2((a, b) => qmergeDeep(clone(a), clone(b)));
214
- export const mergeDeepX = curry2((a, b) => qmergeDeepX(clone(a), clone(b)));
215
- export const mergeDeepAdd = curry2((a, b) => qmergeDeepAdd(clone(a), clone(b)));
216
- export const overProp = curry3((prop, pipe, data) => assoc(prop, pipe(data[prop]), data));
217
- /** mapKeys({ a: 'b' }, { a: 44 }) -> { b: 44 } */
218
- export const mapKeys = curry2((keyMap, o) => qmapKeys(keyMap, Object.assign({}, o)));
219
- // ASYNCS
220
- /** One promise waits for another. */
221
- export const forEachSerial = (() => {
222
- const pipe = async (fn, items, i) => {
223
- if (i < items.length) {
224
- await fn(items[i]);
225
- await pipe(fn, items, ++i);
226
- }
227
- };
228
- return curry2((fn, items) => pipe(fn, items, 0));
229
- })();
230
- /** Promise.all wrapper for functional pipelining. */
231
- export const waitAll = (promises) => Promise.all(promises);
232
- export const waitTap = curry2(async (fn, s) => { await fn(s); return s; });
233
- /** Waits for all promises mapped by the fn. */
234
- export const forEachAsync = curry2((fn, items) => Promise.all(items.map(fn)));
235
- /** The same as compose, but waits for promises in chains and returns a Promise. */
236
- export const composeAsync = (() => {
237
- const pipe = async (fns, data, i) => ~i ? await pipe(fns, await fns[i](data), --i) : data;
238
- return (...fns) => (data) => pipe(fns, data, fns.length - 1);
239
- })(); // as FT.Compose<'async'>
240
- // ALIASES
241
- export const mirror = identity;
242
- export const reflect = identity;
243
- export const echo = identity;
package/src/strings.js DELETED
@@ -1,42 +0,0 @@
1
- import { path } from "./safe";
2
- export const getTmpl = (tmpl) => {
3
- const parts = [];
4
- const keymap = [];
5
- const len = tmpl.length;
6
- let i = 0, s, ln, start = 0, open = false;
7
- for (i = 0; i < len; i++) {
8
- s = tmpl[i];
9
- switch (s) {
10
- case '{':
11
- open = true;
12
- start = i;
13
- break;
14
- case '}':
15
- open = false;
16
- parts.push('');
17
- keymap.push(tmpl.slice(start + 1, i));
18
- break;
19
- default:
20
- if (!open) {
21
- ln = parts.length - 1;
22
- if (ln < 0) {
23
- parts.push('');
24
- ln++;
25
- }
26
- parts[ln] += s;
27
- }
28
- break;
29
- }
30
- }
31
- return (data) => {
32
- const out = [];
33
- const ln = parts.length - 1;
34
- for (const j in parts) {
35
- i = +j;
36
- out.push(parts[i]);
37
- if (i !== ln)
38
- out.push(path(keymap[i].split('.'), data));
39
- }
40
- return out.join('');
41
- };
42
- };
package/src/types.js DELETED
@@ -1 +0,0 @@
1
- export {};
package/src/uncurry.js DELETED
@@ -1,3 +0,0 @@
1
- import { qreduce } from "./quick";
2
- // TODO: possibly introduce a second argument limiting unfolding.
3
- export const uncurry = (fn) => (...args) => qreduce(((fn, arg) => fn ? fn(arg) : fn), fn, args);
package/src/utils.js DELETED
@@ -1,11 +0,0 @@
1
- export const undef = undefined;
2
- export const nul = null;
3
- export const inf = Infinity;
4
- export const to = (s) => typeof s;
5
- export const isNull = (s) => s === nul;
6
- export const isUndef = (s) => s === undef;
7
- export const isNum = (s) => to(s) == 'number';
8
- export const isArray = (s) => Array.isArray(s);
9
- export const isFunc = (s) => to(s) === 'function';
10
- export const isStr = (s) => to(s) === 'string';
11
- export const isObj = (s) => !isNull(s) && to(s) === 'object';