UNPKG

projex

Version:
190 lines (189 loc) 8.33 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.VersionFileUtils = void 0; const _api_1 = require("../../api/index"); const _shared_1 = require("../index"); const fs_extra_1 = require("fs-extra"); const semver_1 = require("semver"); const path_1 = require("path"); const fs = require('fs'); const chalk_1 = __importDefault(require("chalk")); class VersionFileUtils { root; manifestVersionFile; packageVersionFile; manifestFile = ''; packageFile = ''; manifestContent = null; packageJsonContent = null; versionFile = ''; versionContent = null; changelogPath; constructor() { this.root = (0, _api_1.getAppRoot)(); this.manifestVersionFile = (0, path_1.resolve)(this.root, 'manifest.json'); this.packageVersionFile = (0, path_1.resolve)(this.root, 'package.json'); this.changelogPath = (0, path_1.resolve)(this.root, 'CHANGELOG.md'); this.readVersionFile(); } checkDirectory = (repository) => { try { return fs.existsSync(repository); } catch (error) { return false; } }; readVersionFile = () => { if (this.checkDirectory(this.manifestVersionFile)) { this.manifestFile = this.manifestVersionFile; this.manifestContent = (0, fs_extra_1.readJsonSync)(this.manifestVersionFile); } if (this.checkDirectory(this.packageVersionFile)) { this.packageFile = this.packageVersionFile; this.packageJsonContent = (0, fs_extra_1.readJsonSync)(this.packageVersionFile); } if (!this.manifestContent && !this.packageJsonContent) { _shared_1.log.error(`${_api_1.Colors.ERROR('version file not found:')} ${this.manifestVersionFile} or ${this.packageVersionFile}.`); process.exit(1); } this.versionFile = this.manifestFile || this.packageFile; this.versionContent = this.manifestContent || this.packageJsonContent; }; getReleaseFilesFromConfig = () => { const contentPackageJson = this.packageJsonContent; const contentManifest = this.manifestContent; let releaseFiles = []; if (contentPackageJson && contentPackageJson.projex && contentPackageJson.projex.releaseFiles) { releaseFiles = contentPackageJson.projex.releaseFiles; } else if (contentManifest && contentManifest.projex && contentManifest.projex.releaseFiles) { releaseFiles = contentManifest.projex.releaseFiles; } return releaseFiles; }; updateReleaseFilesVersion = (newVersion) => { const releaseFiles = this.getReleaseFilesFromConfig(); releaseFiles.forEach((file) => { const resolveFile = (0, path_1.resolve)(this.root, file); const content = (0, fs_extra_1.readJsonSync)(resolveFile); const oldVersion = content.version; content.version = newVersion; (0, fs_extra_1.writeJsonSync)(file, content, { spaces: 2 }); _shared_1.log.info(`bumped version ${chalk_1.default.bold.yellow(oldVersion)} -> ${chalk_1.default.bold.green(newVersion)} in ${chalk_1.default.bold.blue(file)}`); }); }; addReleaseFiles = () => { const releaseFiles = this.getReleaseFilesFromConfig(); let gitAddCommand = 'git add '; let successMessage = 'files added:'; releaseFiles.forEach((file) => { const resolveFile = (0, path_1.resolve)(this.root, file); gitAddCommand += ` "${resolveFile}"`; successMessage += ` ${resolveFile}`; }); return (0, _shared_1.runCommand)(gitAddCommand, this.root, successMessage, true); }; writeVersionFile = (newVersion) => { const contentPackageJson = this.packageJsonContent; const contentManifest = this.manifestContent; if (contentPackageJson) { const oldVersion = contentPackageJson.version; contentPackageJson.version = newVersion; (0, fs_extra_1.writeJsonSync)(this.packageFile, contentPackageJson, { spaces: 2 }); _shared_1.log.info(`bumped version ${chalk_1.default.bold.yellow(oldVersion)} -> ${chalk_1.default.bold.green(newVersion)} in ${chalk_1.default.bold.blue(this.packageFile)}`); } if (contentManifest) { const oldVersion = contentManifest.version; contentManifest.version = newVersion; (0, fs_extra_1.writeJsonSync)(this.manifestFile, contentManifest, { spaces: 2 }); _shared_1.log.info(`bumped version ${chalk_1.default.bold.yellow(oldVersion)} -> ${chalk_1.default.bold.green(newVersion)} in ${chalk_1.default.bold.blue(this.manifestFile)}`); } }; readVersion = () => { const version = (0, semver_1.valid)(this.versionContent?.version, true); if (!version) { _shared_1.log.error(_api_1.Colors.ERROR(`invalid app version: ${version}`)); process.exit(1); } return version; }; incrementVersion = (rawOldVersion, releaseType, tagName) => { const oldVersion = (0, semver_1.valid)(rawOldVersion, true); if (tagName !== 'stable' && releaseType !== 'prerelease') { return (0, semver_1.inc)(String(oldVersion), `pre${releaseType}`, false, tagName); } return (0, semver_1.inc)(String(oldVersion), releaseType); }; bump = (newVersion) => { this.writeVersionFile(newVersion); }; add = () => { let gitAddCommand = 'git add '; let successMessage = 'files added:'; if ((0, fs_extra_1.existsSync)(this.manifestFile)) { gitAddCommand += ` "${this.manifestFile}"`; successMessage += ` ${this.manifestFile}`; } if ((0, fs_extra_1.existsSync)(this.packageFile)) { gitAddCommand += ` "${this.packageFile}"`; successMessage += ` ${this.packageFile}`; } if ((0, fs_extra_1.existsSync)(this.changelogPath)) { gitAddCommand += ` "${this.changelogPath}"`; successMessage = ` ${this.changelogPath}`; } return (0, _shared_1.runCommand)(gitAddCommand, this.root, successMessage, true); }; getVersionFileToUse = () => { return this.manifestContent || this.packageJsonContent; }; readAppName = () => { const vendor = this.versionContent?.vendor; const name = this.versionContent?.name; return `${vendor ? `${vendor}.` : ''}${name}`; }; getScript = (key) => { const versionFile = this.getVersionFileToUse(); if (!versionFile) { _shared_1.log.error('no version file found'); process.exit(1); } return versionFile.scripts && versionFile.scripts[key]; }; findScript = (key) => { if (this.manifestContent || this.packageJsonContent) { const scriptInManifestFile = this.manifestContent?.scripts && this.manifestContent?.scripts[key]; const scriptInPackageFile = this.packageJsonContent?.scripts && this.packageJsonContent?.scripts[key]; if (scriptInManifestFile) { return scriptInManifestFile; } else if (scriptInPackageFile) { return scriptInPackageFile; } else { _shared_1.log.warn(`no script found for ${key}`); } } }; runFindScript = (key, msg) => { const cmd = this.findScript(key); return cmd ? (0, _shared_1.runCommand)(cmd, this.root, msg, false) : _shared_1.log.verbose(`no script found for ${key}`); }; runScript = (key, msg) => { const cmd = this.getScript(key); return cmd ? (0, _shared_1.runCommand)(cmd, this.root, msg, false) : _shared_1.log.verbose(`no script found for ${key}`); }; getVersionInformation = (oldVersion, newVersion, pushCommandText) => { return { oldVersion, newVersion, pushCommandText, appName: this.readAppName(), }; }; } exports.VersionFileUtils = VersionFileUtils;