-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathutils.ts
54 lines (45 loc) · 1.46 KB
/
utils.ts
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
// Copyright 2020- Szalay Kristóf. All rights reserved. MIT license.
import { colors } from './deps.ts';
export function upInCL(num: number = 1) {
return `\x1B[${num}A`;
}
export function backspace(num: number = 1) {
return '\u0008'.repeat(num);
}
export function separator(num: number = 20) {
return '-'.repeat(num);
}
export function menuState(name: string, disabled: boolean) {
if(!disabled) {
return colors.bold(colors.white(name));
} else {
return colors.gray(name);
}
}
export function paginateArray<T>(array: T[], page: number, pageSize: number) {
return array.slice((Math.max(0, page)-1) * pageSize, Math.min(array.length, page * pageSize));
}
export async function fetchJSON(path: string): Promise<any> {
try {
return await ((await fetch(path)).json());
} catch (e){
return {error: true};
}
}
export async function fetchText(path: string) {
return await ((await fetch(path)).text());
}
export function random<T = any>(array: T[], take: number = 1) {
// https://stackoverflow.com/a/19270021/1497170
let result = new Array(take),
len = array.length,
taken = new Array(len);
if (take > len)
throw new RangeError("getRandom: more elements taken than available");
while (take--) {
var x = Math.floor(Math.random() * len);
result[take] = array[x in taken ? taken[x] : x];
taken[x] = --len in taken ? taken[len] : len;
}
return result;
}