UNPKG

@jwpkg/gitversion

Version:

Gitversion is a complete customizable git-based release management system

207 lines 15.4 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.NodeProject = exports.NodeWorkspace = exports.isNodeManifest = void 0; exports.loadManifest = loadManifest; exports.persistManifest = persistManifest; const colorize_node_1 = require("colorize-node"); const promises_1 = require("fs/promises"); const fs_1 = require("fs"); const glob_1 = require("glob"); const path_1 = require("path"); const t = __importStar(require("typanion")); const bump_utils_1 = require("../../../core/bump-utils"); const changelog_1 = require("../../../core/changelog"); const constants_1 = require("../../../core/constants"); const conventional_commmit_utils_1 = require("../../../core/conventional-commmit-utils"); const version_utils_1 = require("../../../core/version-utils"); exports.isNodeManifest = t.isPartial({ version: t.isOptional(t.isString()), name: t.isString(), private: t.isOptional(t.isBoolean()), workspaces: t.isOptional(t.isArray(t.isString())), }); const NODE_MANIFEST_NAME = 'package.json'; async function loadManifest(folder) { const manifestLocation = (0, path_1.join)(folder, NODE_MANIFEST_NAME); if (!(0, fs_1.existsSync)(manifestLocation)) { return null; } const stringContent = await (0, promises_1.readFile)(manifestLocation, 'utf-8'); const content = JSON.parse(stringContent); const errors = []; if ((0, exports.isNodeManifest)(content, { errors })) { return { eofInEnd: stringContent.endsWith('\n'), manifest: content, }; } return null; } async function persistManifest(folder, manifestContent) { let stringContent = JSON.stringify(manifestContent.manifest, null, 2); if (manifestContent.eofInEnd) { stringContent += '\n'; } await (0, promises_1.writeFile)((0, path_1.join)(folder, NODE_MANIFEST_NAME), stringContent, 'utf-8'); } class NodeWorkspace { _project; manifestContent; get manifest() { return this.manifestContent.manifest; } relativeCwd; get cwd() { return (0, path_1.join)(this.project.cwd, this.relativeCwd); } get version() { return this.manifest.version ?? constants_1.DEFAULT_PACKAGE_VERSION; } get private() { return this.manifest.private ?? false; } get config() { return this.project.config; } get packageName() { return this.manifest.name; } get project() { return this._project; } get tagPrefix() { if (this.config.options.independentVersioning) { return `${this.config.options.versionTagPrefix}${this.packageName}@`; } else { return this.config.options.versionTagPrefix; } } constructor(project, relativeCwd, manifestContent) { this.manifestContent = manifestContent; if (!this.manifest.name) { throw new Error(`Invalid manifest. Package at '${relativeCwd}' does not have a name`); } this.relativeCwd = relativeCwd; this._project = project; } async updateChangelog(entry) { const changeLogFile = (0, path_1.join)(this.cwd, 'CHANGELOG.md'); let changeLog = ''; if ((0, fs_1.existsSync)(changeLogFile)) { changeLog = await (0, promises_1.readFile)(changeLogFile, 'utf-8'); } changeLog = (0, changelog_1.addToChangelog)(entry, changeLog); await (0, promises_1.writeFile)(changeLogFile, changeLog, 'utf-8'); return changeLogFile; } async updateVersion(version) { const newManifest = { ...this.manifest, version, }; this.manifestContent.manifest = newManifest; await persistManifest(this.cwd, this.manifestContent); } async detectBumpType(configuration, versionBranch, gitPlatform, logger) { const tags = await this.project.git.versionTags(this.tagPrefix); const currentVersion = (0, version_utils_1.determineCurrentVersion)(tags, versionBranch, this.tagPrefix); const logs = await this.project.git.logs(currentVersion.hash, this.relativeCwd); const commits = (0, conventional_commmit_utils_1.parseConventionalCommits)(logs, gitPlatform); logger?.reportInfo(`Found ${colorize_node_1.colorize.cyan(commits.length)} commits following conventional commit standard for version`); const bumpType = (0, bump_utils_1.validateBumpType)((0, bump_utils_1.detectBumpType)(commits), logs, configuration, versionBranch, logger); return bumpType; } } exports.NodeWorkspace = NodeWorkspace; class NodeProject extends NodeWorkspace { name = 'Node project'; _cwd; _config; _git; get cwd() { return this._cwd; } get config() { return this._config; } get git() { return this._git; } childWorkspaces = []; get workspaces() { return [ this, ...this.childWorkspaces, ]; } get project() { return this; } static async initialize(initialize) { const manifestContent = await loadManifest(initialize.cwd); if (!manifestContent) { return null; } const project = new NodeProject(initialize.cwd, manifestContent, initialize, initialize.git); if (project.manifest.workspaces && Array.isArray(project.manifest.workspaces)) { const paths = await (0, glob_1.glob)(project.manifest.workspaces, { cwd: initialize.cwd, }); const workspacePromises = paths.map(async (path) => { const worspaceManifestContent = await loadManifest((0, path_1.join)(initialize.cwd, path)); if (worspaceManifestContent && worspaceManifestContent.manifest.private !== true) { return new NodeWorkspace(project, path, worspaceManifestContent); } else { return undefined; } }); const workspaces = await Promise.all(workspacePromises); project.childWorkspaces = workspaces.filter((w) => !!w); } return project; } constructor(cwd, manifestContent, config, git) { super(undefined, '.', manifestContent); this._project = this; this._cwd = cwd; this._config = config; this._git = git; } } exports.NodeProject = NodeProject; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1wcm9qZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3BsdWdpbnMvZW1iZWRkZWQvbm9kZS9ub2RlLXByb2plY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0NBLG9DQWdCQztBQUVELDBDQU1DO0FBMURELGlEQUF5QztBQUN6QywwQ0FBa0Q7QUFDbEQsMkJBQWdDO0FBQ2hDLCtCQUE0QjtBQUM1QiwrQkFBNEI7QUFDNUIsNENBQThCO0FBRTlCLHlEQUFzRjtBQUN0Rix1REFBeUU7QUFFekUsdURBQWtFO0FBQ2xFLHlGQUFvRjtBQUdwRiwrREFBc0U7QUFJekQsUUFBQSxjQUFjLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUN4QyxPQUFPLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbkMsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDbEIsT0FBTyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3BDLFVBQVUsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7Q0FDbEQsQ0FBQyxDQUFDO0FBU0gsTUFBTSxrQkFBa0IsR0FBRyxjQUFjLENBQUM7QUFFbkMsS0FBSyxVQUFVLFlBQVksQ0FBQyxNQUFjO0lBQy9DLE1BQU0sZ0JBQWdCLEdBQUcsSUFBQSxXQUFJLEVBQUMsTUFBTSxFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFDMUQsSUFBSSxDQUFDLElBQUEsZUFBVSxFQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztRQUNsQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUEsbUJBQVEsRUFB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