Files
gommibot/scripts/bump-patch.mjs

46 lines
1.3 KiB
JavaScript

import fs from "node:fs";
import path from "node:path";
const root = process.cwd();
const pkgPath = path.join(root, "package.json");
const lockPath = path.join(root, "package-lock.json");
const target = String(process.argv[2] || "patch").toLowerCase();
if (!["patch", "minor", "major"].includes(target)) {
console.error(`[version] unsupported target: ${target}`);
process.exit(1);
}
function bump(version, mode) {
const parts = String(version || "0.0.0").split(".").map((v) => Number(v) || 0);
const [major, minor, patch] = [parts[0] ?? 0, parts[1] ?? 0, parts[2] ?? 0];
if (mode === "major") return `${major + 1}.0.0`;
if (mode === "minor") return `${major}.${minor + 1}.0`;
return `${major}.${minor}.${patch + 1}`;
}
function readJson(filePath) {
return JSON.parse(fs.readFileSync(filePath, "utf8"));
}
function writeJson(filePath, obj) {
fs.writeFileSync(filePath, `${JSON.stringify(obj, null, 2)}\n`, "utf8");
}
const pkg = readJson(pkgPath);
const current = String(pkg.version || "0.0.0");
const next = bump(current, target);
pkg.version = next;
writeJson(pkgPath, pkg);
if (fs.existsSync(lockPath)) {
const lock = readJson(lockPath);
lock.version = next;
if (lock.packages && lock.packages[""]) {
lock.packages[""].version = next;
}
writeJson(lockPath, lock);
}
console.log(`[version] ${current} -> ${next} (${target})`);