-
Notifications
You must be signed in to change notification settings - Fork 0
/
utils.mjs
70 lines (63 loc) · 1.77 KB
/
utils.mjs
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
67
68
69
70
//@ts-check
import { readdir, stat } from "fs/promises";
import { join } from "path";
export const colors = {
FgBlack: "\x1b[30m",
FgRed: "\x1b[31m",
FgGreen: "\x1b[32m",
FgYellow: "\x1b[33m",
FgBlue: "\x1b[34m",
FgMagenta: "\x1b[35m",
FgCyan: "\x1b[36m",
FgWhite: "\x1b[37m",
FgGray: "\x1b[90m",
BgBlack: "\x1b[40m",
BgRed: "\x1b[41m",
BgGreen: "\x1b[42m",
BgYellow: "\x1b[43m",
BgBlue: "\x1b[44m",
BgMagenta: "\x1b[45m",
BgCyan: "\x1b[46m",
BgWhite: "\x1b[47m",
BgGray: "\x1b[100m",
}
export const color = (color) => (str) => {
return `${color}${str}\x1b[0m`
}
/**
*
* @param {number} idx
* @returns {Partial<Record<"--outDir"|"--snapshotsDir"|"--conf"|"--f"|"--useXOR"|"--jsDoc"|"--noSnapshots", string>>}
*/
export const getFlags = (idx = 3)=>{
const flagsArgs = {
"--outDir":1,
"--snapshotsDir":1,
"--conf":1,
"--f":0,
"--useXOR":0,
"--jsDoc":0,
"--noSnapshots":0,
}
return process.argv.slice(idx).reduce((acc, c, i, arr)=>{
if(flagsArgs[c] !== undefined){
acc[c] = arr.slice(i+1, i+flagsArgs[c]+1).join(" ");
if(flagsArgs[c] !== 0 && acc[c] === ''){
console.log(`${color(colors.FgYellow)("[layj]")}: ${color(colors.FgRed)(`Flag ${c} expected argument`)}`);
process.exit(1);
}
}
return acc;
}, {});
}
export const isDirectory = async (p) => (await stat(p)).isDirectory();
export const walkDir = async (path, cb) => {
const files = await readdir(path);
Promise.all(files.map(async f => {
if (await isDirectory(join(path, f))) {
await walkDir(join(path, f), cb);
} else {
cb(join(path, f));
}
}));
}