-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathcli.js
More file actions
58 lines (53 loc) · 1.83 KB
/
cli.js
File metadata and controls
58 lines (53 loc) · 1.83 KB
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
const {minify} = require("terser");
const util = require("util");
const path = require("path");
const fs = require("fs");
const process = require("process");
const read_file = util.promisify(fs.readFile);
const write_file = util.promisify(fs.writeFile);
const [input_dir, output_dir] = process.argv.slice(2);
function parse(pattern) {
const regex_pattern = pattern.replace(/\./g, "\\.").replace(/\*/g, ".*");
return new RegExp("^" + regex_pattern + "$");
}
async function get_input_files(glob) {
const dir = path.dirname(glob);
const pattern = parse(path.basename(glob));
let files = [];
try {
files = await fs.promises.readdir(dir, {withFileTypes: true});
files = files.filter(
(file) => file.isFile() && pattern.test(file.name)
).map((file) => path.join(dir, file.name))
} catch (error) {
console.error("error reading directory " + dir + ": ", error.message);
}
return files;
}
async function minify_files(paths) {
let ps;
const stat = await fs.promises.stat(output_dir).catch(
() => Promise.resolve({isDirectory: () => false})
);
if (!stat.isDirectory()) {
await fs.promises.mkdir(
path.join(process.cwd(), output_dir),
{recursive: true}
);
}
ps = paths.map(async function (file_path) {
const abs_path = path.join(process.cwd(), file_path);
const content = await read_file(abs_path);
const minified = await minify(content.toString("utf8"));
return write_file(
path.join(output_dir, path.basename(file_path)),
minified.code,
{encoding: "utf8", flag: "w+"}
);
});
await Promise.all(ps);
}
get_input_files(input_dir).then(async function (files) {
await minify_files(files);
console.log("done minifying javascript files");
});