pepka 0.14.0-beta9 → 0.14.0
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.cjs +1 -1
- package/dist/bundle.d.ts +65 -150
- package/dist/bundle.dev.js +625 -0
- package/dist/bundle.mjs +1 -1
- package/dts-fix.js +5 -8
- package/package.json +12 -10
- package/src/curry.ts +8 -9
- package/src/safe.ts +37 -10
- package/src/uncurry.ts +1 -1
package/dist/bundle.cjs
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(),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=e=>(...r)=>r[e],P=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&&P(e[s],r[s])))return!1;return!0}return e===r})),D=o(((e,r,t,s)=>e(s)?r(s):t(s))),
|
|
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=e=>(...r)=>r[e],P=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&&P(e[s],r[s])))return!1;return!0}return e===r})),D=o(((e,r,t,s)=>e(s)?r(s):t(s))),z=c(((e,r,t)=>D(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(P(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),F=n(((e,r)=>e+r)),K=n(((e,r)=>r-e)),L=n(((e,r)=>e*r)),X=n(((e,r)=>e/r)),W=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))),Y=n(((e,r)=>(e(r),r))),Z=n(((e,r)=>[...r,e])),ee=n(((e,r)=>r.split(e))),re=H(!0),te=H(!1),se=n(((e,r)=>pe(F(e),r-e))),oe=n(((e,r)=>e.filter(T(C)(r)))),pe=n(((e,r)=>[...Array(r)].map(((r,t)=>e(t))))),ne=n(((e,r)=>e>r)),ce=n(((e,r)=>e<r)),xe=n(((e,r)=>r>=e)),ae=n(((e,r)=>r<=e)),ie=n(((e,r)=>r.sort(e))),le=n(((e,r)=>r.find(e))),ue=n(((e,r)=>r.findIndex(e))),fe=n(((e,r)=>ue(P(e),r))),he=n(((e,r)=>{for(const[t,s]of e)if(t(r))return s(r)})),de=c(((e,r,t)=>({...t,[e]:r}))),me=c(((e,r,t)=>N((s=>{return de(s,G(e)<2?r:me(I(1,a,e),r,(o=t[s],l(o)||"object"!==i(o)?{}:t[s])),t);var o}),U)(e))),ye=n(((e,r)=>r.every(e))),ge=n(((e,r)=>r.some(e))),be=n(((e,r)=>e.every((e=>e(r))))),we=n(((e,r)=>e.some((e=>e(r))))),je=n(((e,r)=>r[e])),Oe=c(((e,r,t)=>P(t[e],r))),qe=c(((e,r,t)=>P(r[e],t[e]))),Ae=c(((e,r,t)=>D(G,(()=>W(t)?e:N(D(W,H(e),(t=>Ae(e,I(1,a,r),t))),T(je)(t),U)(r)),H(t),r))),Ee=Ae(x),ke=c(((e,r,t)=>P(Ee(e,t),r))),Se=c(((e,r,t)=>P(Ee(e,r),Ee(e,t)))),ve=/^(.*?)(8|16|32|64)(Clamped)?Array$/,Pe=(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(N(Pe,v(0)),e);case"Object":if(r)return{...e};const s={};for(let r in e)s[r]=Pe(e[r]);return s;default:return ve.test(t)?e.constructor.from(e):e}},De=c(((e,r,t)=>w(e,Pe(r),t))),ze=n(((e,r)=>Ke(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)=>Ke(((r,t)=>!C(t,e)),r))),_e=e=>De(((e,r)=>de(...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))),Fe=c(((e,r,t)=>t.replace(e,r))),Ke=n(((e,r)=>f(r)?r.filter(e):N(_e,Ke((([r,t])=>e(t,r))),R)(r))),Le=n(((e,r)=>Object.assign({},e,r))),Xe=n(((e,r)=>O(Pe(e),Pe(r)))),We=n(((e,r)=>q(Pe(e),Pe(r)))),Ge=n(((e,r)=>A(Pe(e),Pe(r)))),He=c(((e,r,t)=>de(e,r(t[e]),t))),Je=n(((e,r)=>E(e,Object.assign({},r)))),Me=n(((e,r)=>Te(((e,t)=>[e,r[t]]),e))),Qe=n(((e,r)=>De(((e,t,s)=>de(t,r[s],e)),{},e))),Re=c(((e,r,t)=>Te(((r,s)=>e(r,t[s])),r))),Ve=(()=>{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)))})(),Ye=n((async(e,r)=>(await e(r),r))),Ze=n(((e,r)=>Promise.all(r.map(e)))),er=(()=>{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)})(),rr=J,tr=J,sr=J;exports.F=te,exports.T=re,exports.__=e,exports.add=F,exports.all=ye,exports.allPass=be,exports.always=H,exports.any=ge,exports.anyPass=we,exports.append=Z,exports.assoc=de,exports.assocPath=me,exports.bind=B,exports.both=$e,exports.clone=Pe,exports.cloneShallow=e=>Pe(e,!0),exports.complement=Q,exports.compose=N,exports.composeAsync=er,exports.concat=Ce,exports.cond=he,exports.curry=o,exports.curry2=n,exports.curry3=c,exports.divide=X,exports.echo=sr,exports.empty=e=>{switch(m(e)){case"String":return"";case"Object":return{};case"Array":return[];default:return x}},exports.equals=P,exports.explore=(e,r="log")=>Y((t=>console[r](e,t))),exports.filter=Ke,exports.find=le,exports.findIndex=ue,exports.flip=T,exports.forEach=Ue,exports.forEachAsync=Ze,exports.forEachSerial=Ve,exports.fromPairs=_e,exports.genBy=pe,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(Ee(t[c].split("."),e));return s.join("")}},exports.gt=ne,exports.gte=xe,exports.head=U,exports.identity=J,exports.ifElse=D,exports.includes=C,exports.indexOf=fe,exports.intersection=oe,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=W,exports.join=Ie,exports.keys=e=>Object.keys(e),exports.last=e=>e[G(e)-1],exports.length=G,exports.lt=ce,exports.lte=ae,exports.map=Te,exports.mapKeys=Je,exports.memoize=e=>{let r,t=!1;return()=>t?r:(t=!0,r=e())},exports.mergeDeep=Xe,exports.mergeDeepAdd=Ge,exports.mergeDeepX=We,exports.mergeShallow=Le,exports.mirror=rr,exports.multiply=L,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=Ee,exports.pathEq=ke,exports.pathOr=Ae,exports.pathsEq=Se,exports.pick=Ne,exports.pickBy=ze,exports.prop=je,exports.propEq=Oe,exports.propsEq=qe,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=se,exports.reduce=De,exports.reflect=tr,exports.replace=Fe,exports.reverse=e=>N((r=>De(((t,s,o)=>g(e[r-o],t)),[],e)),F(-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=ie,exports.split=ee,exports.subtract=K,exports.tail=$,exports.take=v,exports.tap=Y,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=Ye,exports.when=z,exports.zip=Me,exports.zipObj=Qe,exports.zipWith=Re;
|
package/dist/bundle.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import {F as FT} from 'ts-toolbelt'
|
|
2
1
|
export { __ }
|
|
3
2
|
|
|
4
3
|
// Generated by dts-bundle-generator v7.1.0
|
|
@@ -9,11 +8,10 @@ export interface AnyObject {
|
|
|
9
8
|
}
|
|
10
9
|
export type AnyArgs = any[];
|
|
11
10
|
export type Curried<Args extends AnyArgs = AnyArgs, ReturnT = any> = (arg: Args[number]) => Curried<Args> | ReturnT;
|
|
12
|
-
export type Reducer<T = any> = (accum: T, cur: any, index: number) => T;
|
|
13
11
|
export type AnyFunc<ReturnT = any, Args extends AnyArgs = AnyArgs> = (...args: Args) => ReturnT;
|
|
14
12
|
export type Placeholder = symbol;
|
|
15
13
|
declare const __: Placeholder;
|
|
16
|
-
export declare const curry:
|
|
14
|
+
export declare const curry: (fn: AnyFunc) => (...args: AnyArgs) => any;
|
|
17
15
|
export type Func2 = (a: any, b: any) => any;
|
|
18
16
|
export declare function curry2<Func extends Func2>(fn: Func): {
|
|
19
17
|
(a: Placeholder, b: Parameters<Func>[1]): (a: Parameters<Func>[0]) => ReturnType<Func>;
|
|
@@ -22,7 +20,7 @@ export declare function curry2<Func extends Func2>(fn: Func): {
|
|
|
22
20
|
(a: Parameters<Func>[0], b: Parameters<Func>[1]): ReturnType<Func>;
|
|
23
21
|
};
|
|
24
22
|
export type Func3 = (a: any, b: any, c: any) => any;
|
|
25
|
-
export declare function curry3<Func extends Func3>(fn: Func):
|
|
23
|
+
export declare function curry3<Func extends Func3>(fn: Func): (...args: AnyArgs) => any;
|
|
26
24
|
export declare const uncurry: <Args extends any[] = any[], ReturnT = any>(fn: Curried<Args, any>) => AnyFunc;
|
|
27
25
|
export declare const toLower: (s: string) => string;
|
|
28
26
|
export declare const toUpper: (s: string) => string;
|
|
@@ -40,8 +38,8 @@ export declare const equals: {
|
|
|
40
38
|
(a: any): (b: any) => boolean;
|
|
41
39
|
(a: any, b: any): boolean;
|
|
42
40
|
};
|
|
43
|
-
export declare const ifElse:
|
|
44
|
-
export declare const when:
|
|
41
|
+
export declare const ifElse: (...args: AnyArgs) => any;
|
|
42
|
+
export declare const when: (...args: AnyArgs) => any;
|
|
45
43
|
export type Composed<TIn extends any[], TOut> = (...xs: TIn) => TOut;
|
|
46
44
|
export declare const compose: <TIn extends any[] = any[], TOut = any>(...fns: AnyFunc[]) => Composed<TIn, TOut>;
|
|
47
45
|
export declare const bind: {
|
|
@@ -62,7 +60,7 @@ export declare const includes: {
|
|
|
62
60
|
(a: unknown): (b: unknown[]) => boolean;
|
|
63
61
|
(a: unknown, b: unknown[]): boolean;
|
|
64
62
|
};
|
|
65
|
-
export declare const slice:
|
|
63
|
+
export declare const slice: (...args: AnyArgs) => any;
|
|
66
64
|
export declare const flip: <T extends AnyFunc<any, AnyArgs>>(fn: T) => {
|
|
67
65
|
(a: symbol, b: Parameters<T>[0]): (a: Parameters<T>[1]) => any;
|
|
68
66
|
(a: Parameters<T>[1], b: symbol): (b: Parameters<T>[0]) => any;
|
|
@@ -70,7 +68,7 @@ export declare const flip: <T extends AnyFunc<any, AnyArgs>>(fn: T) => {
|
|
|
70
68
|
(a: Parameters<T>[1], b: Parameters<T>[0]): any;
|
|
71
69
|
};
|
|
72
70
|
export declare const head: (b: string | unknown[]) => unknown;
|
|
73
|
-
export declare const tail:
|
|
71
|
+
export declare const tail: any;
|
|
74
72
|
export declare const add: {
|
|
75
73
|
(a: symbol, b: number): (a: number) => number;
|
|
76
74
|
(a: number, b: symbol): (b: number) => number;
|
|
@@ -224,9 +222,12 @@ export declare const cond: {
|
|
|
224
222
|
Function
|
|
225
223
|
][], b: any): any;
|
|
226
224
|
};
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
225
|
+
/** Assigns a prop to an object.
|
|
226
|
+
* @param prop string
|
|
227
|
+
* @param value any
|
|
228
|
+
* @param object AnyObject
|
|
229
|
+
*/
|
|
230
|
+
export declare const assoc: (...args: AnyArgs) => any;
|
|
230
231
|
export declare const assocPath: any;
|
|
231
232
|
export declare const all: {
|
|
232
233
|
(a: symbol, b: any[]): (a: Cond) => boolean;
|
|
@@ -258,18 +259,20 @@ export declare const prop: {
|
|
|
258
259
|
(a: string): (b: AnyObject) => any;
|
|
259
260
|
(a: string, b: AnyObject): any;
|
|
260
261
|
};
|
|
261
|
-
export declare const propEq:
|
|
262
|
-
export declare const propsEq:
|
|
263
|
-
export declare const pathOr:
|
|
264
|
-
export declare const path:
|
|
265
|
-
export declare const pathEq:
|
|
266
|
-
export declare const pathsEq:
|
|
262
|
+
export declare const propEq: (...args: AnyArgs) => any;
|
|
263
|
+
export declare const propsEq: (...args: AnyArgs) => any;
|
|
264
|
+
export declare const pathOr: (...args: AnyArgs) => any;
|
|
265
|
+
export declare const path: any;
|
|
266
|
+
export declare const pathEq: (...args: AnyArgs) => any;
|
|
267
|
+
export declare const pathsEq: (...args: AnyArgs) => any;
|
|
267
268
|
export declare const clone: (s: any, shallow?: boolean) => any;
|
|
268
269
|
export declare const cloneShallow: (s: any) => any;
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
270
|
+
/** types T1, T2
|
|
271
|
+
* @param reducer (accum: T1, current: T2, index: number) => newAccum: T1
|
|
272
|
+
* @param accum T1
|
|
273
|
+
* @param array T2[]
|
|
274
|
+
*/
|
|
275
|
+
export declare const reduce: (...args: AnyArgs) => any;
|
|
273
276
|
export declare const pickBy: {
|
|
274
277
|
(a: symbol, b: AnyObject): (a: Cond) => any;
|
|
275
278
|
(a: Cond, b: symbol): (b: AnyObject) => any;
|
|
@@ -291,10 +294,7 @@ export declare const omit: {
|
|
|
291
294
|
export declare const fromPairs: (pairs: [
|
|
292
295
|
string,
|
|
293
296
|
any
|
|
294
|
-
][]) =>
|
|
295
|
-
] | [
|
|
296
|
-
accum: any
|
|
297
|
-
]) => any>>;
|
|
297
|
+
][]) => any;
|
|
298
298
|
export declare const concat: {
|
|
299
299
|
(a: symbol, b: string | any[]): (a: string | any[]) => string | any[];
|
|
300
300
|
(a: string | any[], b: symbol): (b: string | any[]) => string | any[];
|
|
@@ -319,10 +319,10 @@ export declare const forEach: {
|
|
|
319
319
|
(a: (s: any) => any): (b: any[]) => void;
|
|
320
320
|
(a: (s: any) => any, b: any[]): void;
|
|
321
321
|
};
|
|
322
|
-
export declare const both:
|
|
322
|
+
export declare const both: (...args: AnyArgs) => any;
|
|
323
323
|
export declare const isEmpty: (s: any) => boolean | null;
|
|
324
324
|
export declare const empty: (s: any) => {} | undefined;
|
|
325
|
-
export declare const replace:
|
|
325
|
+
export declare const replace: (...args: AnyArgs) => any;
|
|
326
326
|
export declare const filter: any;
|
|
327
327
|
export declare const memoize: (fn: Function) => () => any;
|
|
328
328
|
export declare const mergeShallow: {
|
|
@@ -332,128 +332,24 @@ export declare const mergeShallow: {
|
|
|
332
332
|
(a: AnyObject, b: AnyObject): AnyObject;
|
|
333
333
|
};
|
|
334
334
|
export declare const mergeDeep: {
|
|
335
|
-
(a: symbol, b: AnyObject): (a: AnyObject) =>
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
] | [
|
|
340
|
-
o2: AnyObject
|
|
341
|
-
] | [
|
|
342
|
-
o1: AnyObject
|
|
343
|
-
]) => any>;
|
|
344
|
-
(a: AnyObject, b: symbol): (b: AnyObject) => FT.Curry<(...p: [
|
|
345
|
-
] | [
|
|
346
|
-
o1: AnyObject,
|
|
347
|
-
o2: AnyObject
|
|
348
|
-
] | [
|
|
349
|
-
o2: AnyObject
|
|
350
|
-
] | [
|
|
351
|
-
o1: AnyObject
|
|
352
|
-
]) => any>;
|
|
353
|
-
(a: AnyObject): (b: AnyObject) => FT.Curry<(...p: [
|
|
354
|
-
] | [
|
|
355
|
-
o1: AnyObject,
|
|
356
|
-
o2: AnyObject
|
|
357
|
-
] | [
|
|
358
|
-
o2: AnyObject
|
|
359
|
-
] | [
|
|
360
|
-
o1: AnyObject
|
|
361
|
-
]) => any>;
|
|
362
|
-
(a: AnyObject, b: AnyObject): FT.Curry<(...p: [
|
|
363
|
-
] | [
|
|
364
|
-
o1: AnyObject,
|
|
365
|
-
o2: AnyObject
|
|
366
|
-
] | [
|
|
367
|
-
o2: AnyObject
|
|
368
|
-
] | [
|
|
369
|
-
o1: AnyObject
|
|
370
|
-
]) => any>;
|
|
335
|
+
(a: symbol, b: AnyObject): (a: AnyObject) => AnyObject;
|
|
336
|
+
(a: AnyObject, b: symbol): (b: AnyObject) => AnyObject;
|
|
337
|
+
(a: AnyObject): (b: AnyObject) => AnyObject;
|
|
338
|
+
(a: AnyObject, b: AnyObject): AnyObject;
|
|
371
339
|
};
|
|
372
340
|
export declare const mergeDeepX: {
|
|
373
|
-
(a: symbol, b: AnyObject): (a: AnyObject) =>
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
] | [
|
|
378
|
-
o2: AnyObject
|
|
379
|
-
] | [
|
|
380
|
-
o1: AnyObject
|
|
381
|
-
]) => any>;
|
|
382
|
-
(a: AnyObject, b: symbol): (b: AnyObject) => FT.Curry<(...p: [
|
|
383
|
-
] | [
|
|
384
|
-
o1: AnyObject,
|
|
385
|
-
o2: AnyObject
|
|
386
|
-
] | [
|
|
387
|
-
o2: AnyObject
|
|
388
|
-
] | [
|
|
389
|
-
o1: AnyObject
|
|
390
|
-
]) => any>;
|
|
391
|
-
(a: AnyObject): (b: AnyObject) => FT.Curry<(...p: [
|
|
392
|
-
] | [
|
|
393
|
-
o1: AnyObject,
|
|
394
|
-
o2: AnyObject
|
|
395
|
-
] | [
|
|
396
|
-
o2: AnyObject
|
|
397
|
-
] | [
|
|
398
|
-
o1: AnyObject
|
|
399
|
-
]) => any>;
|
|
400
|
-
(a: AnyObject, b: AnyObject): FT.Curry<(...p: [
|
|
401
|
-
] | [
|
|
402
|
-
o1: AnyObject,
|
|
403
|
-
o2: AnyObject
|
|
404
|
-
] | [
|
|
405
|
-
o2: AnyObject
|
|
406
|
-
] | [
|
|
407
|
-
o1: AnyObject
|
|
408
|
-
]) => any>;
|
|
341
|
+
(a: symbol, b: AnyObject): (a: AnyObject) => AnyObject;
|
|
342
|
+
(a: AnyObject, b: symbol): (b: AnyObject) => AnyObject;
|
|
343
|
+
(a: AnyObject): (b: AnyObject) => AnyObject;
|
|
344
|
+
(a: AnyObject, b: AnyObject): AnyObject;
|
|
409
345
|
};
|
|
410
346
|
export declare const mergeDeepAdd: {
|
|
411
|
-
(a: symbol, b: AnyObject): (a: AnyObject) =>
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
] | [
|
|
418
|
-
o1: AnyObject
|
|
419
|
-
]) => any>;
|
|
420
|
-
(a: AnyObject, b: symbol): (b: AnyObject) => FT.Curry<(...p: [
|
|
421
|
-
] | [
|
|
422
|
-
o1: AnyObject,
|
|
423
|
-
o2: AnyObject
|
|
424
|
-
] | [
|
|
425
|
-
o2: AnyObject
|
|
426
|
-
] | [
|
|
427
|
-
o1: AnyObject
|
|
428
|
-
]) => any>;
|
|
429
|
-
(a: AnyObject): (b: AnyObject) => FT.Curry<(...p: [
|
|
430
|
-
] | [
|
|
431
|
-
o1: AnyObject,
|
|
432
|
-
o2: AnyObject
|
|
433
|
-
] | [
|
|
434
|
-
o2: AnyObject
|
|
435
|
-
] | [
|
|
436
|
-
o1: AnyObject
|
|
437
|
-
]) => any>;
|
|
438
|
-
(a: AnyObject, b: AnyObject): FT.Curry<(...p: [
|
|
439
|
-
] | [
|
|
440
|
-
o1: AnyObject,
|
|
441
|
-
o2: AnyObject
|
|
442
|
-
] | [
|
|
443
|
-
o2: AnyObject
|
|
444
|
-
] | [
|
|
445
|
-
o1: AnyObject
|
|
446
|
-
]) => any>;
|
|
447
|
-
};
|
|
448
|
-
export declare const overProp: FT.Curry<(prop: string, pipe: AnyFunc, data: any) => FT.Curry<(...p: [
|
|
449
|
-
] | [
|
|
450
|
-
v: any,
|
|
451
|
-
obj: AnyObject
|
|
452
|
-
] | [
|
|
453
|
-
obj: AnyObject
|
|
454
|
-
] | [
|
|
455
|
-
v: any
|
|
456
|
-
]) => any>>;
|
|
347
|
+
(a: symbol, b: AnyObject): (a: AnyObject) => AnyObject;
|
|
348
|
+
(a: AnyObject, b: symbol): (b: AnyObject) => AnyObject;
|
|
349
|
+
(a: AnyObject): (b: AnyObject) => AnyObject;
|
|
350
|
+
(a: AnyObject, b: AnyObject): AnyObject;
|
|
351
|
+
};
|
|
352
|
+
export declare const overProp: (...args: AnyArgs) => any;
|
|
457
353
|
/** mapKeys({ a: 'b' }, { a: 44 }) -> { b: 44 } */
|
|
458
354
|
export declare const mapKeys: {
|
|
459
355
|
(a: symbol, b: AnyObject): (a: {
|
|
@@ -469,6 +365,25 @@ export declare const mapKeys: {
|
|
|
469
365
|
[oldKey: string]: string;
|
|
470
366
|
}, b: AnyObject): AnyObject;
|
|
471
367
|
};
|
|
368
|
+
export declare const zip: {
|
|
369
|
+
(a: symbol, b: unknown[]): (a: unknown[]) => any[];
|
|
370
|
+
(a: unknown[], b: symbol): (b: unknown[]) => any[];
|
|
371
|
+
(a: unknown[]): (b: unknown[]) => any[];
|
|
372
|
+
(a: unknown[], b: unknown[]): any[];
|
|
373
|
+
};
|
|
374
|
+
export declare const zipObj: {
|
|
375
|
+
(a: symbol, b: unknown[]): (a: unknown[]) => any;
|
|
376
|
+
(a: unknown[], b: symbol): (b: unknown[]) => any;
|
|
377
|
+
(a: unknown[]): (b: unknown[]) => any;
|
|
378
|
+
(a: unknown[], b: unknown[]): any;
|
|
379
|
+
};
|
|
380
|
+
/** zips through a pipe. Types T1, T2, T3.
|
|
381
|
+
* @returns T3[]
|
|
382
|
+
* @param pipe (T1, T2) => T3
|
|
383
|
+
* @param a T1[]
|
|
384
|
+
* @param b T2[]
|
|
385
|
+
*/
|
|
386
|
+
export declare const zipWith: (...args: AnyArgs) => any;
|
|
472
387
|
/** One promise waits for another. */
|
|
473
388
|
export declare const forEachSerial: {
|
|
474
389
|
(a: symbol, b: any[]): (a: AnyFunc<any, AnyArgs>) => Promise<void>;
|
|
@@ -502,11 +417,11 @@ export declare const qappend: {
|
|
|
502
417
|
(a: any): (b: any[]) => any[];
|
|
503
418
|
(a: any, b: any[]): any[];
|
|
504
419
|
};
|
|
505
|
-
export declare const qassoc:
|
|
506
|
-
export declare const qreduce:
|
|
507
|
-
export declare const qmergeDeep:
|
|
508
|
-
export declare const qmergeDeepX:
|
|
509
|
-
export declare const qmergeDeepAdd:
|
|
420
|
+
export declare const qassoc: (...args: AnyArgs) => any;
|
|
421
|
+
export declare const qreduce: (...args: AnyArgs) => any;
|
|
422
|
+
export declare const qmergeDeep: any;
|
|
423
|
+
export declare const qmergeDeepX: any;
|
|
424
|
+
export declare const qmergeDeepAdd: any;
|
|
510
425
|
/** qmapKeys({ a: 'b' }, { a: 44 }) -> { b: 44 } */
|
|
511
426
|
export declare const qmapKeys: {
|
|
512
427
|
(a: symbol, b: AnyObject): (a: {
|
|
@@ -0,0 +1,625 @@
|
|
|
1
|
+
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
|
+
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
|
+
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
|
+
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
|
+
// Cannot use ts-toolbelt due to this error:
|
|
68
|
+
// Excessive stack depth comparing types 'GapsOf<?, L2>' and 'GapsOf<?, L2>'
|
|
69
|
+
return curry(fn);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const undef = undefined;
|
|
73
|
+
const nul = null;
|
|
74
|
+
const inf = Infinity;
|
|
75
|
+
const to = (s) => typeof s;
|
|
76
|
+
const isNull = (s) => s === nul;
|
|
77
|
+
const isUndef = (s) => s === undef;
|
|
78
|
+
const isNum = (s) => to(s) == 'number';
|
|
79
|
+
const isArray = (s) => Array.isArray(s);
|
|
80
|
+
const isFunc = (s) => to(s) === 'function';
|
|
81
|
+
const isStr = (s) => to(s) === 'string';
|
|
82
|
+
const isObj = (s) => !isNull(s) && to(s) === 'object';
|
|
83
|
+
|
|
84
|
+
// It's faster that toUpperCase() !
|
|
85
|
+
const caseMap = {
|
|
86
|
+
u: 'U', b: 'B', n: 'N', s: 'S', f: 'F'
|
|
87
|
+
};
|
|
88
|
+
const toLower = (s) => s.toLowerCase();
|
|
89
|
+
const toUpper = (s) => s.toUpperCase();
|
|
90
|
+
const type = (s) => {
|
|
91
|
+
const t = to(s);
|
|
92
|
+
return t === 'object'
|
|
93
|
+
? isNull(s) ? 'Null' : s.constructor.name
|
|
94
|
+
: caseMap[t[0]] + t.slice(1);
|
|
95
|
+
};
|
|
96
|
+
const typeIs = curry2((t, s) => type(s) === t);
|
|
97
|
+
|
|
98
|
+
// TODO: qmap, qfilter.
|
|
99
|
+
const qappend = curry2((s, xs) => { xs.push(s); return xs; });
|
|
100
|
+
const qassoc = curry3((prop, v, obj) => {
|
|
101
|
+
obj[prop] = v;
|
|
102
|
+
return obj;
|
|
103
|
+
});
|
|
104
|
+
const qreduce = curry3((fn, accum, arr) => arr.reduce(fn, accum));
|
|
105
|
+
// strategy is for arrays: 1->clean, 2->merge, 3->push.
|
|
106
|
+
const mergeDeep$1 = curry3((strategy, o1, o2) => {
|
|
107
|
+
for (let k in o2) {
|
|
108
|
+
switch (type(o2[k])) {
|
|
109
|
+
case 'Array':
|
|
110
|
+
if (strategy > 1 && type(o1[k]) === 'Array') {
|
|
111
|
+
switch (strategy) {
|
|
112
|
+
case 2:
|
|
113
|
+
const o1k = o1[k], o2k = o2[k];
|
|
114
|
+
for (const i in o2k) {
|
|
115
|
+
if (o1k[i]) {
|
|
116
|
+
mergeDeep$1(strategy, o1k[i], o2k[i]);
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
o1k[i] = o2k[i];
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
break;
|
|
123
|
+
case 3: o1[k].push(...o2[k]);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
o1[k] = o2[k];
|
|
128
|
+
}
|
|
129
|
+
break;
|
|
130
|
+
case 'Object':
|
|
131
|
+
if (type(o1[k]) === 'Object') {
|
|
132
|
+
mergeDeep$1(strategy, o1[k], o2[k]);
|
|
133
|
+
break;
|
|
134
|
+
}
|
|
135
|
+
default:
|
|
136
|
+
o1[k] = o2[k];
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return o1;
|
|
141
|
+
});
|
|
142
|
+
const qmergeDeep = mergeDeep$1(1);
|
|
143
|
+
const qmergeDeepX = mergeDeep$1(2);
|
|
144
|
+
const qmergeDeepAdd = mergeDeep$1(3);
|
|
145
|
+
/** qmapKeys({ a: 'b' }, { a: 44 }) -> { b: 44 } */
|
|
146
|
+
const qmapKeys = curry2((keyMap, o) => {
|
|
147
|
+
let k, mapped, newKey, newValue;
|
|
148
|
+
for (k in keyMap) {
|
|
149
|
+
mapped = keyMap[k];
|
|
150
|
+
[newKey, newValue] = isFunc(mapped)
|
|
151
|
+
? mapped(o)
|
|
152
|
+
: [mapped, o[k]];
|
|
153
|
+
o[newKey] = newValue;
|
|
154
|
+
if (k !== newKey) {
|
|
155
|
+
delete o[k];
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return o;
|
|
159
|
+
});
|
|
160
|
+
const qfilter = curry2((cond, data) => {
|
|
161
|
+
const isArr = isArray(data);
|
|
162
|
+
for (let k in data) {
|
|
163
|
+
if (!cond(data[k], k)) {
|
|
164
|
+
if (isArr) {
|
|
165
|
+
data.splice(k, 1);
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
// TODO: handle Maps and Sets ?
|
|
169
|
+
delete data[k];
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return data;
|
|
174
|
+
});
|
|
175
|
+
/** @deprecated */
|
|
176
|
+
const qindexOf = curry2((x, xs) => xs.indexOf(x));
|
|
177
|
+
|
|
178
|
+
// TODO: possibly introduce a second argument limiting unfolding.
|
|
179
|
+
const uncurry = (fn) => (...args) => qreduce(((fn, arg) => fn ? fn(arg) : fn), fn, args);
|
|
180
|
+
|
|
181
|
+
// over, lensProp
|
|
182
|
+
const take = (argN) => (...args) => args[argN];
|
|
183
|
+
const equals = curry2((a, b) => {
|
|
184
|
+
const typea = type(a);
|
|
185
|
+
if (typea === type(b) && (typea === 'Object' || typea == 'Array')) {
|
|
186
|
+
if (isNull(a) || isNull(b)) {
|
|
187
|
+
return a === b;
|
|
188
|
+
}
|
|
189
|
+
if (a === b) {
|
|
190
|
+
return true;
|
|
191
|
+
}
|
|
192
|
+
for (const v of [a, b]) {
|
|
193
|
+
for (const k in v) {
|
|
194
|
+
if (!((v === b) && (k in a)) &&
|
|
195
|
+
!((v === a) && (k in b) && equals(a[k], b[k]))) {
|
|
196
|
+
return false;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
return true;
|
|
201
|
+
}
|
|
202
|
+
return a === b;
|
|
203
|
+
});
|
|
204
|
+
const ifElse = curry((cond, pipeYes, pipeNo, s) => cond(s) ? pipeYes(s) : pipeNo(s));
|
|
205
|
+
const when = curry3((cond, pipe, s) => ifElse(cond, pipe, identity, s));
|
|
206
|
+
const compose = ((...fns) => (...args) => {
|
|
207
|
+
let first = true;
|
|
208
|
+
let s;
|
|
209
|
+
for (let i = length(fns) - 1; i > -1; i--) {
|
|
210
|
+
if (first) {
|
|
211
|
+
first = false;
|
|
212
|
+
s = fns[i](...args);
|
|
213
|
+
}
|
|
214
|
+
else
|
|
215
|
+
s = s === __ ? fns[i]() : fns[i](s);
|
|
216
|
+
}
|
|
217
|
+
return s;
|
|
218
|
+
});
|
|
219
|
+
const bind = curry2((fn, context) => fn.bind(context));
|
|
220
|
+
const _nth = (i, data) => data[i];
|
|
221
|
+
const nth = curry2(_nth);
|
|
222
|
+
const includes = curry2((s, ss) => {
|
|
223
|
+
if (isStr(ss)) {
|
|
224
|
+
return ss.includes(s);
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
for (const a of ss) {
|
|
228
|
+
if (equals(a, s)) {
|
|
229
|
+
return true;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
return false;
|
|
233
|
+
}
|
|
234
|
+
});
|
|
235
|
+
const slice = curry3((from, to, o) => o.slice(from, (isNum(to) ? to : inf)));
|
|
236
|
+
const flip = (fn) => curry2((b, a) => fn(a, b));
|
|
237
|
+
const head = nth(0);
|
|
238
|
+
const tail = slice(1, inf); // typeshit.
|
|
239
|
+
const add = curry2((n, m) => n + m);
|
|
240
|
+
const subtract = curry2((n, m) => m - n);
|
|
241
|
+
const multiply = curry2((n, m) => n * m);
|
|
242
|
+
const divide = curry2((n, m) => n / m);
|
|
243
|
+
const isNil = (s) => isNull(s) || isUndef(s);
|
|
244
|
+
const length = (s) => s.length;
|
|
245
|
+
const always = (s) => () => s;
|
|
246
|
+
const identity = (s) => s;
|
|
247
|
+
const trim = (s) => s.trim();
|
|
248
|
+
const last = (s) => s[length(s) - 1];
|
|
249
|
+
const not = (o) => !o;
|
|
250
|
+
const complement = (fn) => (...args) => {
|
|
251
|
+
const out = fn(...args);
|
|
252
|
+
return (isFunc(out) && out.$args_left) ? complement(out) : not(out);
|
|
253
|
+
};
|
|
254
|
+
const keys = (o) => Object.keys(o);
|
|
255
|
+
const values = (o) => Object.values(o);
|
|
256
|
+
const toPairs = (o) => Object.entries(o);
|
|
257
|
+
const test = curry2((re, s) => re.test(s));
|
|
258
|
+
const tap = curry2((fn, s) => { fn(s); return s; });
|
|
259
|
+
const append = curry2((s, xs) => [...xs, s]);
|
|
260
|
+
const split = curry2((s, xs) => xs.split(s));
|
|
261
|
+
const T = always(true);
|
|
262
|
+
const F = always(false);
|
|
263
|
+
const sizeof = (s) => {
|
|
264
|
+
if (type(s) === 'Object') {
|
|
265
|
+
let len = 0;
|
|
266
|
+
for (let _k in s)
|
|
267
|
+
len++;
|
|
268
|
+
return len;
|
|
269
|
+
}
|
|
270
|
+
else
|
|
271
|
+
return length(s);
|
|
272
|
+
};
|
|
273
|
+
const range = curry2((from, to) => genBy(add(from), to - from));
|
|
274
|
+
const uniq = (xs) => qreduce((accum, x) => includes(x, accum) ? accum : qappend(x, accum), [], xs);
|
|
275
|
+
const intersection = curry2((xs1, xs2) => xs1.filter(flip(includes)(xs2)));
|
|
276
|
+
const genBy = curry2((generator, length) => [...Array(length)].map((_, i) => generator(i)));
|
|
277
|
+
const once = (fn) => {
|
|
278
|
+
let done = false, cache;
|
|
279
|
+
return (...args) => {
|
|
280
|
+
if (done) {
|
|
281
|
+
return cache;
|
|
282
|
+
}
|
|
283
|
+
else {
|
|
284
|
+
done = true;
|
|
285
|
+
return cache = fn(...args);
|
|
286
|
+
}
|
|
287
|
+
};
|
|
288
|
+
};
|
|
289
|
+
const reverse = (xs) => compose((ln) => reduce((nxs, _, i) => qappend(xs[ln - i], nxs), [], xs), add(-1), length)(xs);
|
|
290
|
+
const gt = curry2((a, b) => a > b);
|
|
291
|
+
const lt = curry2((a, b) => a < b);
|
|
292
|
+
const gte = curry2((a, b) => b >= a);
|
|
293
|
+
const lte = curry2((a, b) => b <= a);
|
|
294
|
+
const sort = curry2((sortFn, xs) => xs.sort(sortFn));
|
|
295
|
+
const find = curry2((fn, s) => s.find(fn));
|
|
296
|
+
const findIndex = curry2((fn, s) => s.findIndex(fn));
|
|
297
|
+
const indexOf = curry2((x, xs) => findIndex(equals(x), xs));
|
|
298
|
+
const explore = (caption, level = 'log') => tap((v) => console[level](caption, v));
|
|
299
|
+
const cond = curry2((pairs, s) => {
|
|
300
|
+
for (const [cond, fn] of pairs) {
|
|
301
|
+
if (cond(s)) {
|
|
302
|
+
return fn(s);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
});
|
|
306
|
+
/** Assigns a prop to an object.
|
|
307
|
+
* @param prop string
|
|
308
|
+
* @param value any
|
|
309
|
+
* @param object AnyObject
|
|
310
|
+
*/
|
|
311
|
+
const assoc = curry3((prop, v, obj) => ({
|
|
312
|
+
...obj,
|
|
313
|
+
[prop]: v
|
|
314
|
+
}));
|
|
315
|
+
const assocPath = curry3((_path, v, o) => compose((first) => assoc(first, length(_path) < 2
|
|
316
|
+
? v
|
|
317
|
+
: assocPath(slice(1, inf, _path), v, isObj(o[first]) ? o[first] : {}), o), head)(_path));
|
|
318
|
+
const all = curry2((pred, xs) => xs.every(pred));
|
|
319
|
+
const any = curry2((pred, xs) => xs.some(pred));
|
|
320
|
+
const allPass = curry2((preds, x) => preds.every((pred) => pred(x)));
|
|
321
|
+
const anyPass = curry2((preds, x) => preds.some((pred) => pred(x)));
|
|
322
|
+
const prop = curry2((key, o) => o[key]);
|
|
323
|
+
const propEq = curry3((key, value, o) => equals(o[key], value));
|
|
324
|
+
const propsEq = curry3((key, o1, o2) => equals(o1[key], o2[key]));
|
|
325
|
+
const pathOr = curry3((_default, path, o) => ifElse(length, () => isNil(o)
|
|
326
|
+
? _default
|
|
327
|
+
: compose(ifElse(isNil, always(_default), (o) => pathOr(_default, slice(1, inf, path), o)), flip(prop)(o), head)(path), always(o), path));
|
|
328
|
+
const path = pathOr(undef);
|
|
329
|
+
const pathEq = curry3((_path, value, o) => equals(path(_path, o), value));
|
|
330
|
+
const pathsEq = curry3((_path, o1, o2) => equals(path(_path, o1), path(_path, o2)));
|
|
331
|
+
const typed_arr_re = /^(.*?)(8|16|32|64)(Clamped)?Array$/;
|
|
332
|
+
const clone = (s, shallow = false) => {
|
|
333
|
+
const t = type(s);
|
|
334
|
+
switch (t) {
|
|
335
|
+
case 'Null': return s;
|
|
336
|
+
case 'Array': return shallow ? [...s] : map(compose(clone, take(0)), s);
|
|
337
|
+
case 'Object':
|
|
338
|
+
if (shallow)
|
|
339
|
+
return { ...s };
|
|
340
|
+
const out = {};
|
|
341
|
+
for (let k in s) {
|
|
342
|
+
out[k] = clone(s[k]);
|
|
343
|
+
}
|
|
344
|
+
return out;
|
|
345
|
+
case 'String':
|
|
346
|
+
case 'Number':
|
|
347
|
+
case 'Boolean':
|
|
348
|
+
case 'Symbol':
|
|
349
|
+
return s;
|
|
350
|
+
default:
|
|
351
|
+
return typed_arr_re.test(t) ? s.constructor.from(s) : s;
|
|
352
|
+
}
|
|
353
|
+
};
|
|
354
|
+
const cloneShallow = (s) => clone(s, true);
|
|
355
|
+
/** types T1, T2
|
|
356
|
+
* @param reducer (accum: T1, current: T2, index: number) => newAccum: T1
|
|
357
|
+
* @param accum T1
|
|
358
|
+
* @param array T2[]
|
|
359
|
+
*/
|
|
360
|
+
const reduce = curry3((reducer, accum, arr) => qreduce(reducer, clone(accum), arr));
|
|
361
|
+
const pickBy = curry2((cond, o) => filter(cond, o));
|
|
362
|
+
const pick = curry2((props, o) => {
|
|
363
|
+
const out = {};
|
|
364
|
+
for (const p of props) {
|
|
365
|
+
if (p in o) {
|
|
366
|
+
out[p] = o[p];
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
return out;
|
|
370
|
+
});
|
|
371
|
+
const omit = curry2((props, o) => filter((_, k) => !includes(k, props), o));
|
|
372
|
+
const fromPairs = (pairs) => reduce((o, pair) => assoc(...pair, o), {}, pairs);
|
|
373
|
+
const concat = curry2(((a, b) => a.concat(b)));
|
|
374
|
+
const join = curry2((delimeter, arr) => arr.join(delimeter));
|
|
375
|
+
const map = curry2((pipe, arr) => arr.map(pipe));
|
|
376
|
+
const forEach = curry2((pipe, arr) => arr.forEach(pipe));
|
|
377
|
+
const both = curry3((cond1, cond2, s) => cond2(s) && cond1(s));
|
|
378
|
+
const isEmpty = (s) => {
|
|
379
|
+
switch (type(s)) {
|
|
380
|
+
case 'String':
|
|
381
|
+
case 'Array': return length(s) == 0;
|
|
382
|
+
case 'Object':
|
|
383
|
+
for (const _k in s)
|
|
384
|
+
return false;
|
|
385
|
+
return true;
|
|
386
|
+
default: return null;
|
|
387
|
+
}
|
|
388
|
+
};
|
|
389
|
+
const empty = (s) => {
|
|
390
|
+
switch (type(s)) {
|
|
391
|
+
case 'String': return '';
|
|
392
|
+
case 'Object': return {};
|
|
393
|
+
case 'Array': return [];
|
|
394
|
+
default: return undef;
|
|
395
|
+
}
|
|
396
|
+
};
|
|
397
|
+
const replace = curry3((a, b, where
|
|
398
|
+
// @ts-ignore-next Some bug with overload.
|
|
399
|
+
) => where.replace(a, b));
|
|
400
|
+
const filter = curry2((cond, data) => isArray(data)
|
|
401
|
+
? data.filter(cond)
|
|
402
|
+
: compose(fromPairs, filter(([k, v]) => cond(v, k)), toPairs)(data));
|
|
403
|
+
const memoize = (fn) => {
|
|
404
|
+
let cache;
|
|
405
|
+
let cached = false;
|
|
406
|
+
return () => cached ? cache : (cached = true, cache = fn());
|
|
407
|
+
};
|
|
408
|
+
const mergeShallow = curry2((o1, o2) => Object.assign({}, o1, o2));
|
|
409
|
+
const mergeDeep = curry2((a, b) => qmergeDeep(clone(a), clone(b)));
|
|
410
|
+
const mergeDeepX = curry2((a, b) => qmergeDeepX(clone(a), clone(b)));
|
|
411
|
+
const mergeDeepAdd = curry2((a, b) => qmergeDeepAdd(clone(a), clone(b)));
|
|
412
|
+
const overProp = curry3((prop, pipe, data) => assoc(prop, pipe(data[prop]), data));
|
|
413
|
+
/** mapKeys({ a: 'b' }, { a: 44 }) -> { b: 44 } */
|
|
414
|
+
const mapKeys = curry2((keyMap, o) => qmapKeys(keyMap, Object.assign({}, o)));
|
|
415
|
+
const zip = curry2((a, b) => map((s, i) => [s, b[i]], a));
|
|
416
|
+
const zipObj = curry2((a, b) => reduce((ac, s, i) => assoc(s, b[i], ac), {}, a));
|
|
417
|
+
// TODO: Tuple curried functions to replace these `AnyFuncs`.
|
|
418
|
+
/** zips through a pipe. Types T1, T2, T3.
|
|
419
|
+
* @returns T3[]
|
|
420
|
+
* @param pipe (T1, T2) => T3
|
|
421
|
+
* @param a T1[]
|
|
422
|
+
* @param b T2[]
|
|
423
|
+
*/
|
|
424
|
+
const zipWith = curry3((pipe, a, b) => map((s, i) => pipe(s, b[i]), a));
|
|
425
|
+
// ASYNCS
|
|
426
|
+
/** One promise waits for another. */
|
|
427
|
+
const forEachSerial = (() => {
|
|
428
|
+
const pipe = async (fn, items, i) => {
|
|
429
|
+
if (i < items.length) {
|
|
430
|
+
await fn(items[i]);
|
|
431
|
+
await pipe(fn, items, ++i);
|
|
432
|
+
}
|
|
433
|
+
};
|
|
434
|
+
return curry2((fn, items) => pipe(fn, items, 0));
|
|
435
|
+
})();
|
|
436
|
+
/** Promise.all wrapper for functional pipelining. */
|
|
437
|
+
const waitAll = (promises) => Promise.all(promises);
|
|
438
|
+
const waitTap = curry2(async (fn, s) => { await fn(s); return s; });
|
|
439
|
+
/** Waits for all promises mapped by the fn. */
|
|
440
|
+
const forEachAsync = curry2((fn, items) => Promise.all(items.map(fn)));
|
|
441
|
+
/** The same as compose, but waits for promises in chains and returns a Promise. */
|
|
442
|
+
const composeAsync = (() => {
|
|
443
|
+
const pipe = async (fns, data, i) => ~i ? await pipe(fns, await fns[i](data), --i) : data;
|
|
444
|
+
return (...fns) => (data) => pipe(fns, data, fns.length - 1);
|
|
445
|
+
})(); // as FT.Compose<'async'>
|
|
446
|
+
// ALIASES
|
|
447
|
+
const mirror = identity;
|
|
448
|
+
const reflect = identity;
|
|
449
|
+
const echo = identity;
|
|
450
|
+
|
|
451
|
+
const ecran = '\\';
|
|
452
|
+
// TODO: make it splicy, not accumulatie by symbols.
|
|
453
|
+
// Supports ecrans: '\{"json": {yes} \}'
|
|
454
|
+
// get_tmpl(one{meme}two)({meme: 42}) -> one42two
|
|
455
|
+
const getTmpl = (tmpl) => {
|
|
456
|
+
const parts = [];
|
|
457
|
+
const keymap = [];
|
|
458
|
+
const len = tmpl.length;
|
|
459
|
+
let i = 0, s, ln, start = 0, open = false, hasEcran = head(tmpl), hasEcranNext = false, nextChar;
|
|
460
|
+
for (i = 0; i < len; i++) {
|
|
461
|
+
s = tmpl[i];
|
|
462
|
+
switch (s) {
|
|
463
|
+
case '{':
|
|
464
|
+
if (!hasEcran) {
|
|
465
|
+
open = true;
|
|
466
|
+
start = i;
|
|
467
|
+
break;
|
|
468
|
+
}
|
|
469
|
+
case '}':
|
|
470
|
+
if (!hasEcran) {
|
|
471
|
+
open = false;
|
|
472
|
+
parts.push('');
|
|
473
|
+
keymap.push(tmpl.slice(start + 1, i));
|
|
474
|
+
break;
|
|
475
|
+
}
|
|
476
|
+
default:
|
|
477
|
+
nextChar = tmpl[i + 1];
|
|
478
|
+
hasEcranNext = s === ecran;
|
|
479
|
+
if (!open && (!hasEcranNext || nextChar !== '{' && nextChar !== '}')) {
|
|
480
|
+
ln = parts.length - 1;
|
|
481
|
+
if (ln < 0) {
|
|
482
|
+
parts.push('');
|
|
483
|
+
ln++;
|
|
484
|
+
}
|
|
485
|
+
parts[ln] += s;
|
|
486
|
+
}
|
|
487
|
+
hasEcran = hasEcranNext;
|
|
488
|
+
break;
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
return (data) => {
|
|
492
|
+
const out = [];
|
|
493
|
+
const ln = parts.length - 1;
|
|
494
|
+
for (const j in parts) {
|
|
495
|
+
i = +j;
|
|
496
|
+
out.push(parts[i]);
|
|
497
|
+
if (i !== ln)
|
|
498
|
+
out.push(path(keymap[i].split('.'), data));
|
|
499
|
+
}
|
|
500
|
+
return out.join('');
|
|
501
|
+
};
|
|
502
|
+
};
|
|
503
|
+
|
|
504
|
+
var pepka = /*#__PURE__*/Object.freeze({
|
|
505
|
+
__proto__: null,
|
|
506
|
+
__: __,
|
|
507
|
+
curry: curry,
|
|
508
|
+
curry2: curry2,
|
|
509
|
+
curry3: curry3,
|
|
510
|
+
uncurry: uncurry,
|
|
511
|
+
toLower: toLower,
|
|
512
|
+
toUpper: toUpper,
|
|
513
|
+
type: type,
|
|
514
|
+
typeIs: typeIs,
|
|
515
|
+
take: take,
|
|
516
|
+
equals: equals,
|
|
517
|
+
ifElse: ifElse,
|
|
518
|
+
when: when,
|
|
519
|
+
compose: compose,
|
|
520
|
+
bind: bind,
|
|
521
|
+
nth: nth,
|
|
522
|
+
includes: includes,
|
|
523
|
+
slice: slice,
|
|
524
|
+
flip: flip,
|
|
525
|
+
head: head,
|
|
526
|
+
tail: tail,
|
|
527
|
+
add: add,
|
|
528
|
+
subtract: subtract,
|
|
529
|
+
multiply: multiply,
|
|
530
|
+
divide: divide,
|
|
531
|
+
isNil: isNil,
|
|
532
|
+
length: length,
|
|
533
|
+
always: always,
|
|
534
|
+
identity: identity,
|
|
535
|
+
trim: trim,
|
|
536
|
+
last: last,
|
|
537
|
+
not: not,
|
|
538
|
+
complement: complement,
|
|
539
|
+
keys: keys,
|
|
540
|
+
values: values,
|
|
541
|
+
toPairs: toPairs,
|
|
542
|
+
test: test,
|
|
543
|
+
tap: tap,
|
|
544
|
+
append: append,
|
|
545
|
+
split: split,
|
|
546
|
+
T: T,
|
|
547
|
+
F: F,
|
|
548
|
+
sizeof: sizeof,
|
|
549
|
+
range: range,
|
|
550
|
+
uniq: uniq,
|
|
551
|
+
intersection: intersection,
|
|
552
|
+
genBy: genBy,
|
|
553
|
+
once: once,
|
|
554
|
+
reverse: reverse,
|
|
555
|
+
gt: gt,
|
|
556
|
+
lt: lt,
|
|
557
|
+
gte: gte,
|
|
558
|
+
lte: lte,
|
|
559
|
+
sort: sort,
|
|
560
|
+
find: find,
|
|
561
|
+
findIndex: findIndex,
|
|
562
|
+
indexOf: indexOf,
|
|
563
|
+
explore: explore,
|
|
564
|
+
cond: cond,
|
|
565
|
+
assoc: assoc,
|
|
566
|
+
assocPath: assocPath,
|
|
567
|
+
all: all,
|
|
568
|
+
any: any,
|
|
569
|
+
allPass: allPass,
|
|
570
|
+
anyPass: anyPass,
|
|
571
|
+
prop: prop,
|
|
572
|
+
propEq: propEq,
|
|
573
|
+
propsEq: propsEq,
|
|
574
|
+
pathOr: pathOr,
|
|
575
|
+
path: path,
|
|
576
|
+
pathEq: pathEq,
|
|
577
|
+
pathsEq: pathsEq,
|
|
578
|
+
clone: clone,
|
|
579
|
+
cloneShallow: cloneShallow,
|
|
580
|
+
reduce: reduce,
|
|
581
|
+
pickBy: pickBy,
|
|
582
|
+
pick: pick,
|
|
583
|
+
omit: omit,
|
|
584
|
+
fromPairs: fromPairs,
|
|
585
|
+
concat: concat,
|
|
586
|
+
join: join,
|
|
587
|
+
map: map,
|
|
588
|
+
forEach: forEach,
|
|
589
|
+
both: both,
|
|
590
|
+
isEmpty: isEmpty,
|
|
591
|
+
empty: empty,
|
|
592
|
+
replace: replace,
|
|
593
|
+
filter: filter,
|
|
594
|
+
memoize: memoize,
|
|
595
|
+
mergeShallow: mergeShallow,
|
|
596
|
+
mergeDeep: mergeDeep,
|
|
597
|
+
mergeDeepX: mergeDeepX,
|
|
598
|
+
mergeDeepAdd: mergeDeepAdd,
|
|
599
|
+
overProp: overProp,
|
|
600
|
+
mapKeys: mapKeys,
|
|
601
|
+
zip: zip,
|
|
602
|
+
zipObj: zipObj,
|
|
603
|
+
zipWith: zipWith,
|
|
604
|
+
forEachSerial: forEachSerial,
|
|
605
|
+
waitAll: waitAll,
|
|
606
|
+
waitTap: waitTap,
|
|
607
|
+
forEachAsync: forEachAsync,
|
|
608
|
+
composeAsync: composeAsync,
|
|
609
|
+
mirror: mirror,
|
|
610
|
+
reflect: reflect,
|
|
611
|
+
echo: echo,
|
|
612
|
+
qappend: qappend,
|
|
613
|
+
qassoc: qassoc,
|
|
614
|
+
qreduce: qreduce,
|
|
615
|
+
qmergeDeep: qmergeDeep,
|
|
616
|
+
qmergeDeepX: qmergeDeepX,
|
|
617
|
+
qmergeDeepAdd: qmergeDeepAdd,
|
|
618
|
+
qmapKeys: qmapKeys,
|
|
619
|
+
qfilter: qfilter,
|
|
620
|
+
qindexOf: qindexOf,
|
|
621
|
+
getTmpl: getTmpl
|
|
622
|
+
});
|
|
623
|
+
|
|
624
|
+
window.pepka = pepka;
|
|
625
|
+
Object.assign(window, pepka);
|
package/dist/bundle.mjs
CHANGED
|
@@ -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,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(F(Ge,B(0)),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)))})(),
|
|
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(F(Ge,B(0)),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=o(((e,r)=>We(((e,t)=>[e,r[t]]),e))),fr=o(((e,r)=>Je(((e,t,n)=>xe(t,r[n],e)),{},e))),hr=u(((e,r,t)=>We(((r,n)=>e(r,t[n])),r))),br=(()=>{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)))})(),gr=e=>Promise.all(e),pr=o((async(e,r)=>(await e(r),r))),yr=o(((e,r)=>Promise.all(r.map(e)))),dr=(()=>{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)})(),jr=W,mr=W,wr=W,Or=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,dr as composeAsync,Te as concat,Ne as cond,s as curry,o as curry2,u as curry3,Q as divide,wr 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,yr as forEachAsync,br as forEachSerial,Re as fromPairs,ge as genBy,Or 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,jr 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,mr 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,gr as waitAll,pr as waitTap,_ as when,lr as zip,fr as zipObj,hr as zipWith};
|
package/dts-fix.js
CHANGED
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
import prepend from 'prepend'
|
|
2
|
-
|
|
3
|
-
const s =
|
|
4
|
-
`import {F as FT} from 'ts-toolbelt'
|
|
5
|
-
export { __ }
|
|
6
|
-
`
|
|
7
2
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
3
|
+
const s = 'export { __ }\n'
|
|
4
|
+
|
|
5
|
+
prepend('./dist/bundle.d.ts', s, function(error) {
|
|
6
|
+
if (error)
|
|
7
|
+
console.error(error.message)
|
|
11
8
|
})
|
package/package.json
CHANGED
|
@@ -5,9 +5,8 @@
|
|
|
5
5
|
"bugs": {
|
|
6
6
|
"url": "https://github.com/houd1ni/pepka/issues"
|
|
7
7
|
},
|
|
8
|
-
"bundleDependencies": [],
|
|
9
8
|
"deprecated": false,
|
|
10
|
-
"description": "An ultra lightweight or unsafe-speedy ramda alternative.",
|
|
9
|
+
"description": "An ultra lightweight, async or unsafe-speedy ramda alternative.",
|
|
11
10
|
"homepage": "https://houd1ni.github.io/pepka/",
|
|
12
11
|
"keywords": [
|
|
13
12
|
"ramda",
|
|
@@ -22,7 +21,7 @@
|
|
|
22
21
|
"type": "module",
|
|
23
22
|
"exports": {
|
|
24
23
|
".": {
|
|
25
|
-
"
|
|
24
|
+
"import": "./dist/bundle.mjs",
|
|
26
25
|
"require": "./dist/bundle.cjs"
|
|
27
26
|
}
|
|
28
27
|
},
|
|
@@ -44,16 +43,19 @@
|
|
|
44
43
|
"prod": "npm run gentypes && npm run prod:es && npm run prod:cjs",
|
|
45
44
|
"all": "npm run dev && npm run prod"
|
|
46
45
|
},
|
|
47
|
-
"version": "0.14.0
|
|
46
|
+
"version": "0.14.0",
|
|
48
47
|
"ava": {
|
|
49
|
-
"files": [
|
|
48
|
+
"files": [
|
|
49
|
+
"./test/specs/*.ts"
|
|
50
|
+
],
|
|
50
51
|
"failFast": true,
|
|
51
52
|
"timeout": "2m",
|
|
52
|
-
"extensions": [
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
53
|
+
"extensions": [
|
|
54
|
+
"ts"
|
|
55
|
+
],
|
|
56
|
+
"require": [
|
|
57
|
+
"ts-node/register"
|
|
58
|
+
]
|
|
57
59
|
},
|
|
58
60
|
"devDependencies": {
|
|
59
61
|
"@rollup/plugin-commonjs": "^23.0.3",
|
package/src/curry.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { A, F as FT } from 'ts-toolbelt'
|
|
2
1
|
import { AnyFunc, AnyArgs } from "./types"
|
|
3
2
|
|
|
4
3
|
type Placeholder = symbol
|
|
@@ -45,14 +44,12 @@ const _curry = (fn: Function, args: AnyArgs, new_args: AnyArgs) => {
|
|
|
45
44
|
}
|
|
46
45
|
}
|
|
47
46
|
|
|
48
|
-
export const curry = (
|
|
49
|
-
|
|
50
|
-
(
|
|
51
|
-
|
|
52
|
-
: fn(...args)
|
|
53
|
-
) as FT.Curry<Func>
|
|
47
|
+
export const curry = (fn: AnyFunc) => (
|
|
48
|
+
(...args: AnyArgs) => fn.length>countArgs(args)
|
|
49
|
+
? _curry(fn, [], args)
|
|
50
|
+
: fn(...args)
|
|
54
51
|
)
|
|
55
|
-
const endlessph = <Func extends
|
|
52
|
+
const endlessph = <Func extends AnyFunc>(fn: Func) => {
|
|
56
53
|
type ReturnT = ReturnType<Func>
|
|
57
54
|
type p0 = Parameters<Func>[0]
|
|
58
55
|
function _endlessph(a: p0): ReturnT
|
|
@@ -93,5 +90,7 @@ export function curry3<Func extends Func3>(fn: Func) {
|
|
|
93
90
|
// type p2 = Parameters<Func>[2]
|
|
94
91
|
// type ReturnT = ReturnType<Func>
|
|
95
92
|
// TODO: optimize.
|
|
96
|
-
|
|
93
|
+
// Cannot use ts-toolbelt due to this error:
|
|
94
|
+
// Excessive stack depth comparing types 'GapsOf<?, L2>' and 'GapsOf<?, L2>'
|
|
95
|
+
return curry(fn)
|
|
97
96
|
}
|
package/src/safe.ts
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import { F as FT } from 'ts-toolbelt'
|
|
2
1
|
import { __, curry, curry2, curry3 } from './curry'
|
|
3
2
|
import { isNum, isUndef, undef, isNull, isArray, isFunc, isStr, isObj, inf } from './utils'
|
|
4
3
|
import { qmergeDeep, qreduce, qappend, qmapKeys, qmergeDeepX, qmergeDeepAdd } from './quick'
|
|
5
|
-
import { AnyFunc, Cond, AnyObject, Reducer
|
|
4
|
+
import { AnyFunc, Cond, AnyObject, Reducer } from './types'
|
|
6
5
|
import { type } from './common'
|
|
7
|
-
//
|
|
6
|
+
// over, lensProp
|
|
8
7
|
|
|
9
8
|
export const take = (argN: number) => (...args: any[]) => args[argN]
|
|
10
9
|
export const equals = curry2((a: any, b: any) => {
|
|
@@ -152,7 +151,7 @@ export const once = <Func extends AnyFunc>(fn: Func) => {
|
|
|
152
151
|
}
|
|
153
152
|
}
|
|
154
153
|
export const reverse = (xs: any[]) => compose(
|
|
155
|
-
<T>(ln: number) => reduce
|
|
154
|
+
<T>(ln: number) => reduce(
|
|
156
155
|
(nxs: T[], _: any, i: number) => qappend(xs[ln-i], nxs),
|
|
157
156
|
[], xs
|
|
158
157
|
),
|
|
@@ -179,6 +178,11 @@ export const cond = curry2(
|
|
|
179
178
|
}
|
|
180
179
|
}
|
|
181
180
|
)
|
|
181
|
+
/** Assigns a prop to an object.
|
|
182
|
+
* @param prop string
|
|
183
|
+
* @param value any
|
|
184
|
+
* @param object AnyObject
|
|
185
|
+
*/
|
|
182
186
|
export const assoc = curry3(
|
|
183
187
|
(prop: string, v: any, obj: AnyObject) => ({
|
|
184
188
|
...obj,
|
|
@@ -258,9 +262,14 @@ export const clone = (s: any, shallow = false) => {
|
|
|
258
262
|
}
|
|
259
263
|
export const cloneShallow = (s: any) => clone(s, true)
|
|
260
264
|
|
|
265
|
+
/** types T1, T2
|
|
266
|
+
* @param reducer (accum: T1, current: T2, index: number) => newAccum: T1
|
|
267
|
+
* @param accum T1
|
|
268
|
+
* @param array T2[]
|
|
269
|
+
*/
|
|
261
270
|
export const reduce = curry3(
|
|
262
|
-
<T = any>(
|
|
263
|
-
qreduce(
|
|
271
|
+
<T = any>(reducer: Reducer<T>, accum: T, arr: any[]) =>
|
|
272
|
+
qreduce(reducer, clone(accum), arr)
|
|
264
273
|
)
|
|
265
274
|
export const pickBy = curry2(
|
|
266
275
|
(cond: Cond, o: AnyObject) => filter(cond, o)
|
|
@@ -282,7 +291,7 @@ export const omit = curry2(
|
|
|
282
291
|
o
|
|
283
292
|
)
|
|
284
293
|
)
|
|
285
|
-
export const fromPairs = (pairs: [string, any][]) => reduce
|
|
294
|
+
export const fromPairs = (pairs: [string, any][]) => reduce(
|
|
286
295
|
(o: AnyObject, pair: [string, any]) => assoc(...pair, o),
|
|
287
296
|
{}, pairs
|
|
288
297
|
)
|
|
@@ -350,13 +359,13 @@ export const mergeShallow = curry2(
|
|
|
350
359
|
Object.assign({}, o1, o2)
|
|
351
360
|
)
|
|
352
361
|
export const mergeDeep = curry2(
|
|
353
|
-
(a: AnyObject, b: AnyObject) => qmergeDeep(clone(a), clone(b))
|
|
362
|
+
(a: AnyObject, b: AnyObject) => qmergeDeep(clone(a), clone(b)) as AnyObject
|
|
354
363
|
)
|
|
355
364
|
export const mergeDeepX = curry2(
|
|
356
|
-
(a: AnyObject, b: AnyObject) => qmergeDeepX(clone(a), clone(b))
|
|
365
|
+
(a: AnyObject, b: AnyObject) => qmergeDeepX(clone(a), clone(b)) as AnyObject
|
|
357
366
|
)
|
|
358
367
|
export const mergeDeepAdd = curry2(
|
|
359
|
-
(a: AnyObject, b: AnyObject) => qmergeDeepAdd(clone(a), clone(b))
|
|
368
|
+
(a: AnyObject, b: AnyObject) => qmergeDeepAdd(clone(a), clone(b)) as AnyObject
|
|
360
369
|
)
|
|
361
370
|
export const overProp = curry3(
|
|
362
371
|
(prop: string, pipe: AnyFunc, data: any) =>
|
|
@@ -369,6 +378,24 @@ export const mapKeys = curry2(
|
|
|
369
378
|
o: AnyObject
|
|
370
379
|
) => qmapKeys(keyMap, Object.assign({}, o))
|
|
371
380
|
)
|
|
381
|
+
export const zip = curry2(
|
|
382
|
+
<T1 = any, T2 = any>(a: T1[], b: T2[]) => map((s: T1, i: number) => [s, b[i]], a)
|
|
383
|
+
)
|
|
384
|
+
export const zipObj = curry2(
|
|
385
|
+
<T1 = any, T2 = any>(a: T1[], b: T2[]) =>
|
|
386
|
+
reduce((ac: AnyObject, s: T1, i: number) => assoc(s, b[i], ac), {}, a)
|
|
387
|
+
)
|
|
388
|
+
// TODO: Tuple curried functions to replace these `AnyFuncs`.
|
|
389
|
+
/** zips through a pipe. Types T1, T2, T3.
|
|
390
|
+
* @returns T3[]
|
|
391
|
+
* @param pipe (T1, T2) => T3
|
|
392
|
+
* @param a T1[]
|
|
393
|
+
* @param b T2[]
|
|
394
|
+
*/
|
|
395
|
+
export const zipWith = curry3(
|
|
396
|
+
<T1 = any, T2 = any>(pipe: AnyFunc, a: T1[], b: T2[]) =>
|
|
397
|
+
map((s: T1, i: number) => pipe(s, b[i]), a)
|
|
398
|
+
)
|
|
372
399
|
|
|
373
400
|
// ASYNCS
|
|
374
401
|
|
package/src/uncurry.ts
CHANGED