pepka 0.13.0-beta11 → 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 +54 -35
- package/dist/bundle.dev.js +29 -4
- package/dist/bundle.esm.js +1 -0
- package/dist/bundle.js +1 -1
- package/package.json +15 -20
- package/rollup.config.js +13 -7
- package/src/common.ts +3 -1
- package/src/quick.ts +2 -0
- package/src/safe.ts +15 -7
- package/src/strings.ts +21 -9
- package/tsconfig.json +2 -2
- package/dist/es/common.js +0 -13
- package/dist/es/curry.js +0 -68
- package/dist/es/index.js +0 -6
- package/dist/es/quick.js +0 -82
- package/dist/es/safe.js +0 -243
- package/dist/es/strings.js +0 -42
- package/dist/es/types.js +0 -1
- package/dist/es/uncurry.js +0 -3
- package/dist/es/utils.js +0 -11
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:
|
|
37
|
-
export declare const when:
|
|
38
|
-
export type Composed<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:
|
|
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:
|
|
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
|
|
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:
|
|
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:
|
|
238
|
-
export declare const propsEq:
|
|
239
|
-
export declare const pathOr:
|
|
240
|
-
export declare const path:
|
|
241
|
-
export declare const pathEq:
|
|
242
|
-
export declare const pathsEq:
|
|
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:
|
|
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
|
-
][]) =>
|
|
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:
|
|
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:
|
|
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) =>
|
|
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) =>
|
|
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) =>
|
|
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):
|
|
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) =>
|
|
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) =>
|
|
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) =>
|
|
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):
|
|
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) =>
|
|
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) =>
|
|
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) =>
|
|
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):
|
|
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:
|
|
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
|
package/dist/bundle.dev.js
CHANGED
|
@@ -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) => (
|
|
213
|
+
const compose = ((...fns) => (...args) => {
|
|
214
|
+
let first = true;
|
|
215
|
+
let s;
|
|
202
216
|
for (let i = length(fns) - 1; i > -1; i--) {
|
|
203
|
-
|
|
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,
|
|
@@ -0,0 +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=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(),
|
|
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
|
@@ -20,8 +20,10 @@
|
|
|
20
20
|
],
|
|
21
21
|
"license": "MIT",
|
|
22
22
|
"type": "module",
|
|
23
|
-
"
|
|
24
|
-
|
|
23
|
+
"exports": {
|
|
24
|
+
".": "./dist/bundle.esm.js",
|
|
25
|
+
"./cjs": "./dist/bundle.js"
|
|
26
|
+
},
|
|
25
27
|
"name": "pepka",
|
|
26
28
|
"repository": {
|
|
27
29
|
"type": "git",
|
|
@@ -36,41 +38,34 @@
|
|
|
36
38
|
"gentypes": "dts-bundle-generator --no-check -o dist/bundle.d.ts src/index.ts && npm run dts-fix",
|
|
37
39
|
"dev": "cross-env NODE_ENV=development BUILD=es rollup -c",
|
|
38
40
|
"prod:cjs": "cross-env NODE_ENV=production BUILD=cjs rollup -c",
|
|
39
|
-
"prod:es": "cross-env NODE_ENV=production
|
|
41
|
+
"prod:es": "cross-env NODE_ENV=production BUILD=es rollup -c",
|
|
40
42
|
"prod": "npm run gentypes && npm run prod:es && npm run prod:cjs",
|
|
41
43
|
"all": "npm run dev && npm run prod"
|
|
42
44
|
},
|
|
43
|
-
"version": "0.
|
|
45
|
+
"version": "0.14.0-beta0",
|
|
44
46
|
"ava": {
|
|
45
|
-
"files": [
|
|
46
|
-
"./test/specs/*.ts"
|
|
47
|
-
],
|
|
47
|
+
"files": [ "./test/specs/*.ts" ],
|
|
48
48
|
"failFast": true,
|
|
49
49
|
"timeout": "2m",
|
|
50
|
-
"extensions": [
|
|
51
|
-
|
|
52
|
-
],
|
|
53
|
-
"require": [
|
|
54
|
-
"ts-node/register"
|
|
55
|
-
]
|
|
50
|
+
"extensions": [ "ts" ],
|
|
51
|
+
"require": [ "ts-node/register" ]
|
|
56
52
|
},
|
|
57
53
|
"dependencies": {
|
|
58
54
|
"ts-toolbelt": "^9.6.0"
|
|
59
55
|
},
|
|
60
56
|
"devDependencies": {
|
|
61
|
-
"@
|
|
57
|
+
"@rollup/plugin-commonjs": "^23.0.3",
|
|
58
|
+
"@rollup/plugin-node-resolve": "^15.0.1",
|
|
59
|
+
"@rollup/plugin-replace": "^5.0.1",
|
|
60
|
+
"@rollup/plugin-terser": "^0.1.0",
|
|
61
|
+
"@types/node": "^18.11.11",
|
|
62
62
|
"ava": "^5.1.0",
|
|
63
63
|
"codecov": "^3.8.2",
|
|
64
64
|
"cross-env": "^7.0.3",
|
|
65
65
|
"dts-bundle-generator": "^7.1.0",
|
|
66
66
|
"nyc": "^15.1.0",
|
|
67
67
|
"prepend": "^1.0.2",
|
|
68
|
-
"rollup": "^3.
|
|
69
|
-
"rollup-plugin-commonjs": "^10.1.0",
|
|
70
|
-
"rollup-plugin-node-resolve": "^5.2.0",
|
|
71
|
-
"rollup-plugin-replace": "^2.2.0",
|
|
72
|
-
"rollup-plugin-resolve-aliases": "^0.3.0",
|
|
73
|
-
"rollup-plugin-terser": "^7.0.2",
|
|
68
|
+
"rollup": "^3.6.0",
|
|
74
69
|
"rollup-plugin-typescript2": "^0.34.1",
|
|
75
70
|
"ts-node": "^10.9.1",
|
|
76
71
|
"tslint": "^6.1.0",
|
package/rollup.config.js
CHANGED
|
@@ -1,18 +1,21 @@
|
|
|
1
|
-
import commonjs from 'rollup
|
|
2
|
-
import resolve from 'rollup
|
|
1
|
+
import commonjs from '@rollup/plugin-commonjs'
|
|
2
|
+
import resolve from '@rollup/plugin-node-resolve'
|
|
3
3
|
import typescript from 'rollup-plugin-typescript2'
|
|
4
|
-
import
|
|
5
|
-
import replace from 'rollup
|
|
4
|
+
import terser from '@rollup/plugin-terser'
|
|
5
|
+
import replace from '@rollup/plugin-replace'
|
|
6
6
|
import tsc from 'typescript'
|
|
7
7
|
|
|
8
8
|
export default {
|
|
9
9
|
input: process.env.NODE_ENV=='development' ? 'test/in-browser.ts' : 'src/index.ts',
|
|
10
10
|
output: {
|
|
11
|
-
file: process.env.
|
|
11
|
+
file: process.env.NODE_ENV=='development'
|
|
12
|
+
? 'dist/bundle.dev.js'
|
|
13
|
+
: process.env.BUILD == 'cjs' ? 'dist/bundle.js' : 'dist/bundle.esm.js',
|
|
12
14
|
format: process.env.BUILD == 'cjs' ? 'cjs' : 'es',
|
|
13
|
-
exports: 'named',
|
|
15
|
+
// exports: 'named',
|
|
14
16
|
name: 'pepka'
|
|
15
17
|
},
|
|
18
|
+
treeshake: { moduleSideEffects: false },
|
|
16
19
|
plugins: [
|
|
17
20
|
resolve(),
|
|
18
21
|
commonjs(),
|
|
@@ -29,7 +32,10 @@ export default {
|
|
|
29
32
|
}),
|
|
30
33
|
process.env.NODE_ENV!='development' && terser(),
|
|
31
34
|
replace({
|
|
32
|
-
|
|
35
|
+
preventAssignment: true,
|
|
36
|
+
values: {
|
|
37
|
+
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV)
|
|
38
|
+
}
|
|
33
39
|
})
|
|
34
40
|
]
|
|
35
41
|
}
|
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
|
-
|
|
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> = (
|
|
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
|
-
(
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
17
|
-
|
|
21
|
+
if(!hasEcran) {
|
|
22
|
+
open = true; start = i;
|
|
23
|
+
break
|
|
24
|
+
}
|
|
18
25
|
case '}':
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
26
|
+
if(!hasEcran) {
|
|
27
|
+
open = false; parts.push('')
|
|
28
|
+
keymap.push(tmpl.slice(start+1, i))
|
|
29
|
+
break
|
|
30
|
+
}
|
|
22
31
|
default:
|
|
23
|
-
|
|
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
package/dist/es/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/dist/es/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/dist/es/index.js
DELETED
package/dist/es/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/dist/es/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/dist/es/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/dist/es/types.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
package/dist/es/uncurry.js
DELETED
package/dist/es/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';
|