- Fix noPrecisionLoss on BIGINT UNSIGNED max value (2^64-1) with biome-ignore comments - Fix noThenProperty on custom thenable with biome-ignore comment - Auto-format remaining files (biome check --write) - Re-stage auto-fixed files from previous commit
54 lines
1.1 KiB
JavaScript
54 lines
1.1 KiB
JavaScript
const fs = require("fs");
|
|
const JSON5 = require("json5");
|
|
|
|
const exampleFile = process.argv[2];
|
|
const targetFile = process.argv[3];
|
|
|
|
if (!exampleFile || !targetFile) {
|
|
process.exit(1);
|
|
}
|
|
|
|
function deepMerge(target, source) {
|
|
const result = { ...target };
|
|
for (const key of Object.keys(source)) {
|
|
if (
|
|
source[key] !== null &&
|
|
typeof source[key] === "object" &&
|
|
!Array.isArray(source[key])
|
|
) {
|
|
result[key] = deepMerge(target[key] || {}, source[key]);
|
|
} else {
|
|
if (!(key in result)) {
|
|
result[key] = source[key];
|
|
}
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
|
|
let example;
|
|
try {
|
|
const content = fs.readFileSync(exampleFile, "utf-8");
|
|
example = JSON5.parse(content);
|
|
} catch {
|
|
process.exit(1);
|
|
}
|
|
|
|
let current = {};
|
|
try {
|
|
if (fs.existsSync(targetFile)) {
|
|
const content = fs.readFileSync(targetFile, "utf-8");
|
|
current = JSON5.parse(content);
|
|
}
|
|
} catch {
|
|
current = {};
|
|
}
|
|
|
|
const merged = deepMerge(current, example);
|
|
|
|
const isJson5 = targetFile.endsWith(".json5");
|
|
const output = isJson5
|
|
? JSON5.stringify(merged, null, 4)
|
|
: JSON.stringify(merged, null, 4);
|
|
fs.writeFileSync(targetFile, output + "\n");
|