UNPKG

@conventional-changelog/git-client

Version:
125 lines 8.19 kB
import semver from 'semver'; import { firstFromStream } from '@simple-libs/stream-utils'; import { GitClient } from './GitClient.js'; /** * Helper to get package tag prefix. * @param packageName * @returns Tag prefix. */ export function packagePrefix(packageName) { if (!packageName) { return /^.+@/; } return `${packageName}@`; } /** * Wrapper around Git CLI with conventional commits support. */ export class ConventionalGitClient extends GitClient { deps = null; loadDeps() { // eslint-disable-next-line @typescript-eslint/no-misused-promises if (this.deps) { return this.deps; } this.deps = Promise.all([ import('conventional-commits-parser') .then(({ parseCommits }) => parseCommits), import('conventional-commits-filter') .then(({ filterRevertedCommits }) => filterRevertedCommits) ]); return this.deps; } /** * Get parsed commits stream. * @param params * @param params.path - Read commits from specific path. * @param params.from - Start commits range. * @param params.to - End commits range. * @param params.format - Commits format. * @param parserOptions - Commit parser options. * @yields Raw commits data. */ async *getCommits(params = {}, parserOptions = {}) { const { filterReverts, ...gitLogParams } = params; const [parseCommits, filterRevertedCommits] = await this.loadDeps(); if (filterReverts) { yield* filterRevertedCommits(this.getCommits(gitLogParams, parserOptions)); return; } const parse = parseCommits(parserOptions); const commitsStream = this.getRawCommits(gitLogParams); yield* parse(commitsStream); } /** * Get semver tags stream. * @param params * @param params.prefix - Get semver tags with specific prefix. * @param params.skipUnstable - Skip semver tags with unstable versions. * @param params.clean - Clean version from prefix and trash. * @yields Semver tags. */ async *getSemverTags(params = {}) { const { prefix, skipUnstable, clean } = params; const tagsStream = this.getTags(); const unstableTagRegex = /\d+\.\d+\.\d+-.+/; const cleanTag = clean ? (tag, unprefixed) => semver.clean(unprefixed || tag) : (tag) => tag; let unprefixed; let tag; for await (tag of tagsStream) { if (skipUnstable && unstableTagRegex.test(tag)) { continue; } if (prefix) { const isPrefixed = typeof prefix === 'string' ? tag.startsWith(prefix) : prefix.test(tag); if (isPrefixed) { unprefixed = tag.replace(prefix, ''); if (semver.valid(unprefixed)) { tag = cleanTag(tag, unprefixed); if (tag) { yield tag; } } } } else if (semver.valid(tag)) { tag = cleanTag(tag); if (tag) { yield tag; } } } } /** * Get last semver tag. * @param params - getSemverTags params. * @returns Last semver tag, `null` if not found. */ async getLastSemverTag(params = {}) { return firstFromStream(this.getSemverTags(params)); } /** * Get current sematic version from git tags. * @param params - Additional git params. * @returns Current sematic version, `null` if not found. */ async getVersionFromTags(params = {}) { const semverTagsStream = this.getSemverTags({ clean: true, ...params }); const semverTags = []; for await (const tag of semverTagsStream) { semverTags.push(tag); } if (!semverTags.length) { return null; } return semverTags.sort(semver.rcompare)[0] || null; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udmVudGlvbmFsR2l0Q2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0NvbnZlbnRpb25hbEdpdENsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUE7QUFDM0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBSzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUUxQzs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxXQUFvQjtJQUNoRCxJQUFJLENBQUMsV0FBVyxFQUFFO1FBQ2hCLE9BQU8sTUFBTSxDQUFBO0tBQ2Q7SUFFRCxPQUFPLEdBQUcsV0FBVyxHQUFHLENBQUE7QUFDMUIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLHFCQUFzQixTQUFRLFNBQVM7SUFDMUMsSUFBSSxHQUF3RSxJQUFJLENBQUE7SUFFaEYsUUFBUTtRQUNkLGtFQUFrRTtRQUNsRSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDYixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUE7U0FDakI7UUFFRCxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFDdEIsTUFBTSxDQUFDLDZCQUE2QixDQUFDO2lCQUNsQyxJQUFJLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUM7WUFDM0MsTUFBTSxDQUFDLDZCQUE2QixDQUFDO2lCQUNsQyxJQUFJLENBQUMsQ0FBQyxFQUFFLHFCQUFxQixFQUFFLEVBQUUsRUFBRSxDQUFDLHFCQUFxQixDQUFDO1NBQzlELENBQUMsQ0FBQTtRQUVGLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQTtJQUNsQixDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsS0FBSyxDQUFBLENBQUUsVUFBVSxDQUNmLFNBQTJCLEVBQUUsRUFDN0IsZ0JB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