-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathutils.js
66 lines (51 loc) · 1.07 KB
/
utils.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
export function uid(){
return self.crypto.randomUUID();
}
export function isEmpty (x) {
return typeof x === 'undefined' || x.length === 0
}
export function isSingleton (x) {
return typeof x !== 'undefined' && x.length === 1
}
export function ignore(f) {
return (_) => f();
}
export function isOneOf(arr) {
return (elem) => Array.prototype.includes.call(arr, elem);
}
export function is(a) {
return (b) => a == b;
}
export function last(arr){
return arr.slice(-1)[0];
}
export function check(p, f) {
function internal(x) {
const hasMatched = p.call(null, x);
if(hasMatched) {
f(x);
}
return hasMatched;
}
return internal;
}
export function when(p, f) {
return check(p, ignore(f));
}
export function dispatch(fs) {
function internal(x) {
for (const f of fs) {
if(f(x)) return;
}
}
return internal;
}
export function mediate(key, f) {
function internal(x) {
f(x[key]);
}
return internal;
}
export function same(x) {
return x;
}