/
update_all.js
56 lines (49 loc) · 1.5 KB
/
update_all.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
import fs from "fs";
import { globSync } from "glob";
import jp from "jsonpath";
if (process.argv.length < 5) {
console.log(
"Usage: \nnode update_all.js filename jsonquery value\nnode update_all.js filename jsonquery value apply"
);
console.log(`\tExample: node update_all.js package.json '$.engines.node' ">=18.0.0" apply\n`);
process.exit(1);
}
let pretend = process.argv[5] !== "apply";
function loadFile(file) {
return JSON.parse(fs.readFileSync(file).toString());
}
function saveFile(file, data) {
if (pretend) {
console.log(file);
console.log(JSON.stringify(data, undefined, 2));
return;
}
fs.writeFileSync(file, JSON.stringify(data, undefined, 2));
}
let workspaces = loadFile("./package.json").workspaces;
let filename = process.argv[2]; //"tsconfig.json";
let query = process.argv[3]; //"$.compilerOptions.target";
let value = process.argv[4]; //"es2020";node update_all.js filename jsonquery value
// Try to deduct
if (value === "true") {
value = true;
} else if (value === "false") {
value = false;
} else if (value.match(/^\d+$/) !== null) {
value = parseInt(value);
} else if (value.startsWith("{") || value.startsWith("[")) {
value = JSON.parse(value);
}
// For each workspaces
for (let workspace of workspaces) {
if (!workspace.endsWith("/")) {
workspace += "/";
}
let files = globSync(workspace + filename);
console.log(files);
for (let file of files) {
let content = loadFile(file);
jp.value(content, query, value);
saveFile(file, content);
}
}