UNPKG

obsidian-plugin-config

Version:

Système d'injection pour plugins Obsidian autonomes

133 lines (116 loc) 4.2 kB
import { readFile, writeFile } from "fs/promises"; import dedent from "dedent"; import { askQuestion, createReadlineInterface, gitExec, ensureGitSync } from "./utils.js"; // Simple version increment functions to avoid semver compatibility issues function incrementVersion(version: string, type: 'patch' | 'minor' | 'major'): string { const parts = version.split('.').map(Number); if (parts.length !== 3) return ''; switch (type) { case 'patch': parts[2]++; break; case 'minor': parts[1]++; parts[2] = 0; break; case 'major': parts[0]++; parts[1] = 0; parts[2] = 0; break; } return parts.join('.'); } function isValidVersion(version: string): boolean { const versionRegex = /^\d+\.\d+\.\d+$/; return versionRegex.test(version); } const rl = createReadlineInterface(); async function getTargetVersion(currentVersion: string): Promise<string> { const updateType = await askQuestion(dedent` Current version: ${currentVersion} Kind of update: patch(1.0.1) -> type 1 or p minor(1.1.0) -> type 2 or min major(2.0.0) -> type 3 or maj or version number (e.g. 2.0.0) Enter choice: `, rl); switch (updateType.trim()) { case "p": case "1": return incrementVersion(currentVersion, "patch"); case "min": case "2": return incrementVersion(currentVersion, "minor"); case "maj": case "3": return incrementVersion(currentVersion, "major"); default: const trimmed = updateType.trim(); return isValidVersion(trimmed) ? trimmed : ""; } } async function updateJsonFile(filename: string, updateFn: (json: any) => void): Promise<void> { try { const content = JSON.parse(await readFile(filename, "utf8")); updateFn(content); await writeFile(filename, JSON.stringify(content, null, "\t")); } catch (error) { console.error(`Error updating ${filename}:`, error instanceof Error ? error.message : String(error)); throw error; } } async function updateManifestVersions(targetVersion: string): Promise<void> { try { const manifest = JSON.parse(await readFile("manifest.json", "utf8")); const { minAppVersion } = manifest; await Promise.all([ updateJsonFile("manifest.json", json => json.version = targetVersion), updateJsonFile("versions.json", json => json[targetVersion] = minAppVersion), updateJsonFile("package.json", json => json.version = targetVersion), // updateJsonFile("package-lock.json", json => json.version = targetVersion) ]); } catch (error) { console.error("Error updating manifest versions:", error instanceof Error ? error.message : String(error)); throw error; } } async function updateVersion(): Promise<void> { try { const currentVersion = process.env.npm_package_version || "1.0.0"; const targetVersion = await getTargetVersion(currentVersion); if (!targetVersion) { console.log("Invalid version"); return; } try { // Update all files first await updateManifestVersions(targetVersion); console.log(`Files updated to version ${targetVersion}`); // Add files to git gitExec("git add manifest.json package.json versions.json"); gitExec(`git commit -m "Updated to version ${targetVersion}"`); console.log("Changes committed"); } catch (error) { console.error("Error during update or commit:", error instanceof Error ? error.message : String(error)); console.log("Operation failed."); return; } try { // Ensure Git is synchronized before pushing await ensureGitSync(); gitExec("git push"); console.log(`Version successfully updated to ${targetVersion} and pushed.`); } catch (pushError) { console.error("Failed to push version update:", pushError instanceof Error ? pushError.message : String(pushError)); } } catch (error) { console.error("Error:", error instanceof Error ? error.message : String(error)); } finally { rl.close(); } } updateVersion().catch(console.error).finally(() => { console.log("Exiting..."); process.exit(); });