46 lines
1.3 KiB
JavaScript
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})`);
|