pepka 0.13.0-beta12 → 0.14.0-beta0

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,16 +27,23 @@ 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;
33
40
  (a: any): (b: any) => boolean;
34
41
  (a: any, b: any): boolean;
35
42
  };
36
- export declare const ifElse: FT.Curry<AnyFunc<any, AnyArgs>>;
37
- 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>;
43
+ export declare const ifElse: import("ts-toolbelt/out/Function/Curry").Curry<AnyFunc<any, AnyArgs>>;
44
+ export declare const when: import("ts-toolbelt/out/Function/Curry").Curry<(cond: (s: any) => boolean, pipe: (s: any) => any, s: any) => any>;
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;
@@ -55,9 +62,9 @@ export declare const includes: {
55
62
  (a: unknown): (b: unknown[]) => boolean;
56
63
  (a: unknown, b: unknown[]): boolean;
57
64
  };
58
- export declare const slice: FT.Curry<(from: number, to: number, o: any[] | string) => string | any[]>;
65
+ export declare const slice: import("ts-toolbelt/out/Function/Curry").Curry<(from: number, to: number, o: any[] | string) => string | any[]>;
59
66
  export declare const head: (b: string | unknown[]) => unknown;
60
- export declare const tail: FT.Curry<(o: string | any[]) => string | any[]>;
67
+ export declare const tail: import("ts-toolbelt/out/Function/Curry").Curry<(o: string | any[]) => string | any[]>;
61
68
  export declare const add: {
62
69
  (a: symbol, b: number): (a: number) => number;
63
70
  (a: number, b: symbol): (b: number) => number;
@@ -70,7 +77,19 @@ export declare const subtract: {
70
77
  (a: number): (b: number) => number;
71
78
  (a: number, b: number): number;
72
79
  };
73
- export declare const flip: (fn: Function) => FT.Curry<AnyFunc<any, AnyArgs>>;
80
+ export declare const multiply: {
81
+ (a: symbol, b: number): (a: number) => number;
82
+ (a: number, b: symbol): (b: number) => number;
83
+ (a: number): (b: number) => number;
84
+ (a: number, b: number): number;
85
+ };
86
+ export declare const divide: {
87
+ (a: symbol, b: number): (a: number) => number;
88
+ (a: number, b: symbol): (b: number) => number;
89
+ (a: number): (b: number) => number;
90
+ (a: number, b: number): number;
91
+ };
92
+ export declare const flip: (fn: Function) => import("ts-toolbelt/out/Function/Curry").Curry<AnyFunc<any, AnyArgs>>;
74
93
  export declare const isNil: (s: any) => boolean;
75
94
  export declare const length: (s: any[] | string) => number;
76
95
  export declare const always: <T = any>(s: T) => () => T;
@@ -104,10 +123,10 @@ export declare const append: {
104
123
  (a: any, b: any[]): any[];
105
124
  };
106
125
  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[];
126
+ (a: symbol, b: string): (a: string | RegExp) => string[];
127
+ (a: string | RegExp, b: symbol): (b: string) => string[];
128
+ (a: string | RegExp): (b: string) => string[];
129
+ (a: string | RegExp, b: string): string[];
111
130
  };
112
131
  export declare const T: (...args: any[]) => true;
113
132
  export declare const F: (...args: any[]) => false;
@@ -200,7 +219,7 @@ export declare const cond: {
200
219
  Function
201
220
  ][], b: any): any;
202
221
  };
203
- export declare const assoc: FT.Curry<(prop: string, v: any, obj: AnyObject) => {
222
+ export declare const assoc: import("ts-toolbelt/out/Function/Curry").Curry<(prop: string, v: any, obj: AnyObject) => {
204
223
  [x: string]: any;
205
224
  }>;
206
225
  export declare const assocPath: any;
@@ -234,15 +253,15 @@ export declare const prop: {
234
253
  (a: string): (b: AnyObject) => any;
235
254
  (a: string, b: AnyObject): any;
236
255
  };
237
- export declare const propEq: FT.Curry<(key: string, value: any, o: AnyObject) => boolean>;
238
- export declare const propsEq: FT.Curry<(key: string, o1: any, o2: AnyObject) => boolean>;
239
- export declare const pathOr: FT.Curry<(_default: any, path: string[], o: any) => any>;
240
- export declare const path: FT.Curry<(path: string[], o: any) => any>;
241
- export declare const pathEq: FT.Curry<(_path: string[], value: any, o: AnyObject) => (a: any) => boolean>;
242
- export declare const pathsEq: FT.Curry<(_path: string[], o1: AnyObject, o2: AnyObject) => (a: any) => boolean>;
256
+ export declare const propEq: import("ts-toolbelt/out/Function/Curry").Curry<(key: string, value: any, o: AnyObject) => boolean>;
257
+ export declare const propsEq: import("ts-toolbelt/out/Function/Curry").Curry<(key: string, o1: any, o2: AnyObject) => boolean>;
258
+ export declare const pathOr: import("ts-toolbelt/out/Function/Curry").Curry<(_default: any, path: string[], o: any) => any>;
259
+ export declare const path: import("ts-toolbelt/out/Function/Curry").Curry<(path: string[], o: any) => any>;
260
+ export declare const pathEq: import("ts-toolbelt/out/Function/Curry").Curry<(_path: string[], value: any, o: AnyObject) => (a: any) => boolean>;
261
+ export declare const pathsEq: import("ts-toolbelt/out/Function/Curry").Curry<(_path: string[], o1: AnyObject, o2: AnyObject) => (a: any) => boolean>;
243
262
  export declare const clone: (s: any, shallow?: boolean) => any;
244
263
  export declare const cloneShallow: (s: any) => any;
245
- export declare const reduce: FT.Curry<(fn: Reducer, accum: any, arr: any[]) => FT.Curry<(...p: [
264
+ export declare const reduce: import("ts-toolbelt/out/Function/Curry").Curry<(fn: Reducer, accum: any, arr: any[]) => import("ts-toolbelt/out/Function/Curry").Curry<(...p: [
246
265
  ] | [
247
266
  accum: any
248
267
  ]) => any>>;
@@ -267,7 +286,7 @@ export declare const omit: {
267
286
  export declare const fromPairs: (pairs: [
268
287
  string,
269
288
  any
270
- ][]) => FT.Curry<(fn: Reducer, accum: any, arr: any[]) => FT.Curry<(...p: [
289
+ ][]) => import("ts-toolbelt/out/Function/Curry").Curry<(fn: Reducer, accum: any, arr: any[]) => import("ts-toolbelt/out/Function/Curry").Curry<(...p: [
271
290
  ] | [
272
291
  accum: any
273
292
  ]) => any>>;
@@ -295,10 +314,10 @@ export declare const forEach: {
295
314
  (a: (s: any) => any): (b: any[]) => void;
296
315
  (a: (s: any) => any, b: any[]): void;
297
316
  };
298
- export declare const both: FT.Curry<(cond1: Cond, cond2: Cond, s: any) => boolean>;
317
+ export declare const both: import("ts-toolbelt/out/Function/Curry").Curry<(cond1: Cond, cond2: Cond, s: any) => boolean>;
299
318
  export declare const isEmpty: (s: any) => boolean | null;
300
319
  export declare const empty: (s: any) => {} | undefined;
301
- export declare const replace: FT.Curry<(a: string | RegExp, b: string | ((substring: string, ...ps: any[]) => string), where: string) => string>;
320
+ export declare const replace: import("ts-toolbelt/out/Function/Curry").Curry<(a: string | RegExp, b: string | ((substring: string, ...ps: any[]) => string), where: string) => string>;
302
321
  export declare const filter: any;
303
322
  export declare const memoize: (fn: Function) => () => any;
304
323
  export declare const mergeShallow: {
@@ -308,7 +327,7 @@ export declare const mergeShallow: {
308
327
  (a: AnyObject, b: AnyObject): AnyObject;
309
328
  };
310
329
  export declare const mergeDeep: {
311
- (a: symbol, b: AnyObject): (a: AnyObject) => FT.Curry<(...p: [
330
+ (a: symbol, b: AnyObject): (a: AnyObject) => import("ts-toolbelt/out/Function/Curry").Curry<(...p: [
312
331
  ] | [
313
332
  o1: AnyObject,
314
333
  o2: AnyObject
@@ -317,7 +336,7 @@ export declare const mergeDeep: {
317
336
  ] | [
318
337
  o1: AnyObject
319
338
  ]) => any>;
320
- (a: AnyObject, b: symbol): (b: AnyObject) => FT.Curry<(...p: [
339
+ (a: AnyObject, b: symbol): (b: AnyObject) => import("ts-toolbelt/out/Function/Curry").Curry<(...p: [
321
340
  ] | [
322
341
  o1: AnyObject,
323
342
  o2: AnyObject
@@ -326,7 +345,7 @@ export declare const mergeDeep: {
326
345
  ] | [
327
346
  o1: AnyObject
328
347
  ]) => any>;
329
- (a: AnyObject): (b: AnyObject) => FT.Curry<(...p: [
348
+ (a: AnyObject): (b: AnyObject) => import("ts-toolbelt/out/Function/Curry").Curry<(...p: [
330
349
  ] | [
331
350
  o1: AnyObject,
332
351
  o2: AnyObject
@@ -335,7 +354,7 @@ export declare const mergeDeep: {
335
354
  ] | [
336
355
  o1: AnyObject
337
356
  ]) => any>;
338
- (a: AnyObject, b: AnyObject): FT.Curry<(...p: [
357
+ (a: AnyObject, b: AnyObject): import("ts-toolbelt/out/Function/Curry").Curry<(...p: [
339
358
  ] | [
340
359
  o1: AnyObject,
341
360
  o2: AnyObject
@@ -346,7 +365,7 @@ export declare const mergeDeep: {
346
365
  ]) => any>;
347
366
  };
348
367
  export declare const mergeDeepX: {
349
- (a: symbol, b: AnyObject): (a: AnyObject) => FT.Curry<(...p: [
368
+ (a: symbol, b: AnyObject): (a: AnyObject) => import("ts-toolbelt/out/Function/Curry").Curry<(...p: [
350
369
  ] | [
351
370
  o1: AnyObject,
352
371
  o2: AnyObject
@@ -355,7 +374,7 @@ export declare const mergeDeepX: {
355
374
  ] | [
356
375
  o1: AnyObject
357
376
  ]) => any>;
358
- (a: AnyObject, b: symbol): (b: AnyObject) => FT.Curry<(...p: [
377
+ (a: AnyObject, b: symbol): (b: AnyObject) => import("ts-toolbelt/out/Function/Curry").Curry<(...p: [
359
378
  ] | [
360
379
  o1: AnyObject,
361
380
  o2: AnyObject
@@ -364,7 +383,7 @@ export declare const mergeDeepX: {
364
383
  ] | [
365
384
  o1: AnyObject
366
385
  ]) => any>;
367
- (a: AnyObject): (b: AnyObject) => FT.Curry<(...p: [
386
+ (a: AnyObject): (b: AnyObject) => import("ts-toolbelt/out/Function/Curry").Curry<(...p: [
368
387
  ] | [
369
388
  o1: AnyObject,
370
389
  o2: AnyObject
@@ -373,7 +392,7 @@ export declare const mergeDeepX: {
373
392
  ] | [
374
393
  o1: AnyObject
375
394
  ]) => any>;
376
- (a: AnyObject, b: AnyObject): FT.Curry<(...p: [
395
+ (a: AnyObject, b: AnyObject): import("ts-toolbelt/out/Function/Curry").Curry<(...p: [
377
396
  ] | [
378
397
  o1: AnyObject,
379
398
  o2: AnyObject
@@ -384,7 +403,7 @@ export declare const mergeDeepX: {
384
403
  ]) => any>;
385
404
  };
386
405
  export declare const mergeDeepAdd: {
387
- (a: symbol, b: AnyObject): (a: AnyObject) => FT.Curry<(...p: [
406
+ (a: symbol, b: AnyObject): (a: AnyObject) => import("ts-toolbelt/out/Function/Curry").Curry<(...p: [
388
407
  ] | [
389
408
  o1: AnyObject,
390
409
  o2: AnyObject
@@ -393,7 +412,7 @@ export declare const mergeDeepAdd: {
393
412
  ] | [
394
413
  o1: AnyObject
395
414
  ]) => any>;
396
- (a: AnyObject, b: symbol): (b: AnyObject) => FT.Curry<(...p: [
415
+ (a: AnyObject, b: symbol): (b: AnyObject) => import("ts-toolbelt/out/Function/Curry").Curry<(...p: [
397
416
  ] | [
398
417
  o1: AnyObject,
399
418
  o2: AnyObject
@@ -402,7 +421,7 @@ export declare const mergeDeepAdd: {
402
421
  ] | [
403
422
  o1: AnyObject
404
423
  ]) => any>;
405
- (a: AnyObject): (b: AnyObject) => FT.Curry<(...p: [
424
+ (a: AnyObject): (b: AnyObject) => import("ts-toolbelt/out/Function/Curry").Curry<(...p: [
406
425
  ] | [
407
426
  o1: AnyObject,
408
427
  o2: AnyObject
@@ -411,7 +430,7 @@ export declare const mergeDeepAdd: {
411
430
  ] | [
412
431
  o1: AnyObject
413
432
  ]) => any>;
414
- (a: AnyObject, b: AnyObject): FT.Curry<(...p: [
433
+ (a: AnyObject, b: AnyObject): import("ts-toolbelt/out/Function/Curry").Curry<(...p: [
415
434
  ] | [
416
435
  o1: AnyObject,
417
436
  o2: AnyObject
@@ -421,7 +440,7 @@ export declare const mergeDeepAdd: {
421
440
  o1: AnyObject
422
441
  ]) => any>;
423
442
  };
424
- export declare const overProp: FT.Curry<(prop: string, pipe: AnyFunc, data: any) => FT.Curry<(...p: [
443
+ export declare const overProp: import("ts-toolbelt/out/Function/Curry").Curry<(prop: string, pipe: AnyFunc, data: any) => import("ts-toolbelt/out/Function/Curry").Curry<(...p: [
425
444
  ] | [
426
445
  v: any,
427
446
  obj: AnyObject
@@ -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=L(0),G=z(1,i),H=o(((e,r)=>e+r)),J=o(((e,r)=>r-e)),K=o(((e,r)=>e*r)),M=o(((e,r)=>e/r)),Q=e=>s(((r,t)=>e(t,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(H(e),r-e))),he=e=>A(((e,r)=>q(r,e)?e:w(r,e)),[],e),be=o(((e,r)=>e.filter(Q(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)),H(-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}),D)(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))),Q(Ue)(t),D)(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=D(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 __,H 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,M as divide,dr as echo,er as empty,E as equals,ve as explore,tr as filter,Ae as find,Se as findIndex,Q 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,D 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,K 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,J as subtract,G 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=_(0),U=I(1,a),$=n(((e,r)=>e+r)),z=n(((e,r)=>r-e)),F=n(((e,r)=>e*r)),K=n(((e,r)=>e/r)),L=e=>o(((r,t)=>e(t,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($(e),r-e))),se=n(((e,r)=>e.filter(L(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}),T)(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))),L(we)(t),T)(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=$,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=K,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=L,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=T(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=T,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=F,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)),$(-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=z,exports.tail=U,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-beta0",
46
46
  "ava": {
47
47
  "files": [ "./test/specs/*.ts" ],
48
48
  "failFast": true,
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/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
@@ -3,9 +3,9 @@ import { isNum, isUndef, undef, isNull, isArray, isFunc, isStr, isObj, inf } fro
3
3
  import { qmergeDeep, qreduce, qappend, qmapKeys, qmergeDeepX, qmergeDeepAdd } from './quick'
4
4
  import { AnyFunc, Cond, AnyObject, Reducer } from './types'
5
5
  import { type } from './common'
6
- import { F as FT } from 'ts-toolbelt'
7
- // over, lensProp
6
+ // SomeType, totype, over, lensProp
8
7
 
8
+ export const take = (argN: number) => (...args: any[]) => args[argN]
9
9
  export const equals = curry2((a: any, b: any) => {
10
10
  const typea = type(a)
11
11
  if(typea===type(b) && (typea==='Object' || typea=='Array')) {
@@ -44,12 +44,18 @@ export const when = curry3(
44
44
  s: any
45
45
  ) => ifElse(cond, pipe, identity, s)
46
46
  )
47
- type Composed<TIn, TOut> = (x: TIn) => TOut
47
+ type Composed<TIn extends any[], TOut> = (...xs: TIn) => TOut
48
48
  export const compose = (
49
- <TIn = any, TOut = any>(...fns: AnyFunc[]): Composed<TIn, TOut> =>
50
- (s: TIn = Symbol() as any) => {
49
+ <TIn extends any[] = any[], TOut = any>(...fns: AnyFunc[]): Composed<TIn, TOut> =>
50
+ (...args: TIn) => {
51
+ let first = true
52
+ let s: any
51
53
  for(let i = length(fns)-1; i>-1; i--) {
52
- s = s===__ ? fns[i]() : fns[i](s)
54
+ if(first) {
55
+ first = false
56
+ s = fns[i](...args)
57
+ } else
58
+ s = s===__ ? fns[i]() : fns[i](s)
53
59
  }
54
60
  return s as any as TOut
55
61
  }
@@ -84,6 +90,8 @@ export const head = nth(0)
84
90
  export const tail = slice(1, inf) // typeshit.
85
91
  export const add = curry2((n: number, m: number) => n+m)
86
92
  export const subtract = curry2((n: number, m: number) => m-n)
93
+ export const multiply = curry2((n: number, m: number) => n*m)
94
+ export const divide = curry2((n: number, m: number) => n/m)
87
95
  export const flip = (fn: Function) => curry((b: any, a: any) => fn(a, b))
88
96
  export const isNil = (s: any) => isNull(s) || isUndef(s)
89
97
  export const length = (s: any[] | string) => s.length
@@ -102,7 +110,7 @@ export const toPairs = (o: AnyObject | any[]) => Object.entries(o)
102
110
  export const test = curry2((re: RegExp, s: string) => re.test(s))
103
111
  export const tap = curry2((fn: Function, s: any) => { fn(s); return s })
104
112
  export const append = curry2((s: any, xs: any[]) => [...xs, s])
105
- export const split = curry2((s: string, xs: string) => xs.split(s))
113
+ export const split = curry2((s: string|RegExp, xs: string) => xs.split(s))
106
114
  export const T = always<true>(true) as (...args: any[]) => true
107
115
  export const F = always<false>(false) as (...args: any[]) => false
108
116
  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';