UNPKG

@conventional-changelog/git-client

Version:
124 lines 8.27 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() { 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udmVudGlvbmFsR2l0Q2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0NvbnZlbnRpb25hbEdpdENsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUE7QUFDM0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBSzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUUxQzs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxXQUFvQjtJQUNoRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakIsT0FBTyxNQUFNLENBQUE7SUFDZixDQUFDO0lBRUQsT0FBTyxHQUFHLFdBQVcsR0FBRyxDQUFBO0FBQzFCLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxTQUFTO0lBQzFDLElBQUksR0FBd0UsSUFBSSxDQUFBO0lBRWhGLFFBQVE7UUFDZCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNkLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQTtRQUNsQixDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQ3RCLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQztpQkFDbEMsSUFBSSxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDO1lBQzNDLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQztpQkFDbEMsSUFBSSxDQUFDLENBQUMsRUFBRSxxQkFBcUIsRUFBRSxFQUFFLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztTQUM5RCxDQUFDLENBQUE7UUFFRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUE7SUFDbEIsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILEtBQUssQ0FBQSxDQUFFLFVBQVUsQ0FDZixTQUEyQixFQUFFLEVBQzdCLGdCQUFxQyxFQUFFO1FBRXZDLE1BQU0sRUFBRSxhQUFhLEVBQUUsR0FBRyxZQUFZLEVBQUUsR0FBRyxNQUFNLENBQUE7UUFDakQsTUFBTSxDQUFDLFlBQVksRUFBRSxxQkFBcUIsQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFBO1FBRW5FLElBQUksYUFBYSxFQUFFLENBQUM7WUFDbEIsS0FBSyxDQUFDLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQTtZQUMxRSxPQUFNO1FBQ1IsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUN6QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBRXRELEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUM3QixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILEtBQUssQ0FBQSxDQUFFLGFBQWEsQ0FBQyxTQUE4QixFQUFFO1FBQ25ELE1BQU0sRUFDSixNQUFNLEVBQ04sWUFBWSxFQUNaLEtBQUssRUFDTixHQUFHLE1BQU0sQ0FBQTtRQUNWLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUNqQyxNQUFNLGdCQUFnQixHQUFHLGtCQUFrQixDQUFBO1FBQzNDLE1BQU0sUUFBUSxHQUFHLEtBQUs7WUFDcEIsQ0FBQyxDQUFDLENBQUMsR0FBVyxFQUFFLFVBQW1CLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxJQUFJLEdBQUcsQ0FBQztZQUN2RSxDQUFDLENBQUMsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQTtRQUN4QixJQUFJLFVBQWtCLENBQUE7UUFDdEIsSUFBSSxHQUFrQixDQUFBO1FBRXRCLElBQUksS0FBSyxFQUFFLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUM3QixJQUFJLFlBQVksSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDL0MsU0FBUTtZQUNWLENBQUM7WUFFRCxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNYLE1BQU0sVUFBVSxHQUFHLE9BQU8sTUFBTSxLQUFLLFFBQVE7b0JBQzNDLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztvQkFDeEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7Z0JBRXBCLElBQUksVUFBVSxFQUFFLENBQUM7b0JBQ2YsVUFBVSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFBO29CQUVwQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQzt3QkFDN0IsR0FBRyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUE7d0JBRS9CLElBQUksR0FBRyxFQUFFLENBQUM7NEJBQ1IsTUFBTSxHQUFHLENBQUE7d0JBQ1gsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO2lCQUFNLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM3QixHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFBO2dCQUVuQixJQUFJLEdBQUcsRUFBRSxDQUFDO29CQUNSLE1BQU0sR0FBRyxDQUFBO2dCQUNYLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLGdCQUFnQixDQUFDLFNBQThCLEVBQUU7UUFDckQsT0FBTyxlQUFlLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBQ3BELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLGtCQUFrQixDQUFDLFNBQThCLEVBQUU7UUFDdkQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQzFDLEtBQUssRUFBRSxJQUFJO1lBQ1gsR0FBRyxNQUFNO1NBQ1YsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxVQUFVLEdBQWEsRUFBRSxDQUFBO1FBRS9CLElBQUksS0FBSyxFQUFFLE1BQU0sR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUM7WUFDekMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUN0QixDQUFDO1FBRUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN2QixPQUFPLElBQUksQ0FBQTtRQUNiLENBQUM7UUFFRCxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQTtJQUNwRCxDQUFDO0NBQ0YifQ==