Get a recommended version bump based on conventional commits.
—
Quality
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Pending
The risk profile of this skill
Complete type definitions for version bump recommendations, presets, configuration options, and related interfaces used throughout the conventional-recommended-bump library.
Core types for representing version bump recommendations and results.
/**
* Base interface for version bump recommendation
*/
interface WhatBump {
/** Version bump level: 0 = major, 1 = minor, 2 = patch */
level: 0 | 1 | 2;
/** Human-readable reason for the recommended bump */
reason: string;
}
/**
* Result type for whatBump functions
*/
type WhatBumpResult = WhatBump | null | undefined;
/**
* Complete bump recommendation with release type and commits
*/
interface BumperRecommendation extends WhatBump {
/** Human-readable release type derived from level */
releaseType: 'major' | 'minor' | 'patch';
/** Array of commits that contributed to this recommendation */
commits: Commit[];
}
/**
* Result when no bump is recommended but commits were analyzed
*/
interface EmptyBumperRecommendation {
/** Array of commits that were analyzed */
commits: Commit[];
}
/**
* Union type for all possible bump analysis results
*/
type BumperRecommendationResult = BumperRecommendation | EmptyBumperRecommendation;Types for configuring conventional commit presets and analysis rules.
/**
* Complete preset configuration interface
*/
interface Preset {
/** Function to determine version bump from commits */
whatBump(commits: Commit[]): Promise<WhatBumpResult> | WhatBumpResult;
/** Optional git tag retrieval parameters */
tags?: GetSemverTagsParams;
/** Optional commit retrieval parameters */
commits?: GetCommitsParams;
/** Optional commit message parser configuration */
parser?: ParserStreamOptions;
}
/**
* Preset configuration parameters (excludes whatBump function)
*/
interface Params extends Omit<Preset, 'whatBump'> {
/** Optional bumper behavior options */
options?: Options;
}Types for configuring logging and debugging behavior.
/**
* Logger function interface
*/
type Logger = (source: string, messages: string | string[]) => void;
/**
* Bumper configuration options
*/
interface Options {
/** Optional warning message logger */
warn?: Logger;
/** Optional debug message logger */
debug?: Logger;
}Key types imported from external dependencies that are used throughout the API.
// From @conventional-changelog/git-client
/**
* Parameters for retrieving semantic version tags
*/
interface GetSemverTagsParams {
/** Tag prefix to match (e.g., 'v', 'release-') */
prefix?: string;
/** Whether to skip unstable versions (alpha, beta, rc) */
skipUnstable?: boolean;
/** Lerna package scope for monorepo analysis */
lernaPackage?: string;
}
/**
* Parameters for retrieving git commits
*/
interface GetCommitsParams {
/** Starting commit or tag (exclusive) */
from?: string;
/** Ending commit or tag (inclusive) */
to?: string;
/** File or directory path to filter commits */
path?: string;
/** Custom git log format string */
format?: string;
/** Whether to filter out revert commits */
filterReverts?: boolean;
}
/**
* Git client for conventional changelog operations
*/
class ConventionalGitClient {
constructor(cwd: string);
getLastSemverTag(params?: GetSemverTagsParams): Promise<string | null>;
getCommits(params: GetCommitsParams, parserOptions?: ParserStreamOptions): AsyncIterable<Commit>;
debug?: Logger;
}// From conventional-commits-parser
/**
* Parsed conventional commit structure
*/
interface Commit {
/** Commit type (feat, fix, docs, etc.) */
type: string | null;
/** Commit scope (optional) */
scope: string | null;
/** Commit subject/description */
subject: string | null;
/** Merge commit information */
merge: string | null;
/** Commit header (first line) */
header: string;
/** Commit body */
body: string | null;
/** Commit footer */
footer: string | null;
/** Array of commit notes (BREAKING CHANGE, etc.) */
notes: CommitNote[];
/** Array of issue/PR references */
references: CommitReference[];
/** Git commit mentions */
mentions: string[];
/** Whether this commit reverts another */
revert: CommitRevert | null;
/** Git commit hash */
hash: string;
/** Git commit short hash */
gitTags: string;
/** Commit author information */
committerDate: string;
}
/**
* Commit note (e.g., BREAKING CHANGE)
*/
interface CommitNote {
/** Note title (BREAKING CHANGE, DEPRECATED, etc.) */
title: string;
/** Note text content */
text: string;
}
/**
* Reference to issues or pull requests
*/
interface CommitReference {
/** Reference action (closes, fixes, etc.) */
action: string;
/** Issue/PR number or identifier */
issue: string;
/** Whether this is the main reference */
raw: string;
/** Reference prefix (#, gh-, etc.) */
prefix: string;
}
/**
* Information about reverted commit
*/
interface CommitRevert {
/** Hash of reverted commit */
hash: string;
/** Header of reverted commit */
header: string;
}
/**
* Parser configuration options
*/
interface ParserStreamOptions {
/** Regex pattern to parse commit headers */
headerPattern?: RegExp;
/** Field names corresponding to header pattern groups */
headerCorrespondence?: string[];
/** Keywords that indicate issue references */
referenceActions?: string[];
/** Prefixes for issue numbers */
issuePrefixes?: string[];
/** Keywords for important notes */
noteKeywords?: string[];
/** Regex pattern for parsing additional fields */
fieldPattern?: RegExp;
/** Regex pattern for identifying revert commits */
revertPattern?: RegExp;
/** Field names for revert pattern groups */
revertCorrespondence?: string[];
/** Regex pattern for identifying merge commits */
mergePattern?: RegExp;
/** Warning message handler */
warn?: Logger | boolean;
}// From conventional-changelog-preset-loader
/**
* Parameters for loading a preset
*/
type PresetParams<T = any> = string | { name: string } & T;
/**
* Unknown preset creator parameters
*/
type UnknownPresetCreatorParams = Record<string, unknown>;
/**
* Custom preset module loader function
*/
type PresetModuleLoader = (presetName: string) => Promise<any> | any;import { Bumper, type BumperRecommendationResult } from "conventional-recommended-bump";
const bumper = new Bumper();
const result: BumperRecommendationResult = await bumper
.loadPreset("angular")
.bump();
// Type guard to check if bump is recommended
if ("releaseType" in result) {
// result is BumperRecommendation
console.log(`Bump: ${result.releaseType}`);
console.log(`Level: ${result.level}`);
console.log(`Reason: ${result.reason}`);
console.log(`Commits: ${result.commits.length}`);
} else {
// result is EmptyBumperRecommendation
console.log(`No bump recommended, analyzed ${result.commits.length} commits`);
}import type { Commit, WhatBumpResult } from "conventional-recommended-bump";
const customWhatBump = (commits: Commit[]): WhatBumpResult => {
// Look for breaking changes
const hasBreaking = commits.some(commit =>
commit.notes.some(note => note.title === 'BREAKING CHANGE')
);
if (hasBreaking) {
return {
level: 0, // major
reason: 'Breaking changes detected'
};
}
// Look for new features
const hasFeatures = commits.some(commit => commit.type === 'feat');
if (hasFeatures) {
return {
level: 1, // minor
reason: 'New features added'
};
}
// Look for bug fixes
const hasFixes = commits.some(commit => commit.type === 'fix');
if (hasFixes) {
return {
level: 2, // patch
reason: 'Bug fixes included'
};
}
// No significant changes
return null;
};
const result = await new Bumper().bump(customWhatBump);import type { Preset, Logger } from "conventional-recommended-bump";
const customLogger: Logger = (source, messages) => {
const messageArray = Array.isArray(messages) ? messages : [messages];
messageArray.forEach(msg => console.log(`[${source}] ${msg}`));
};
const customPreset: Preset = {
whatBump: async (commits) => {
// Custom analysis logic
return { level: 1, reason: 'Custom analysis' };
},
tags: {
prefix: 'release-',
skipUnstable: true
},
commits: {
format: '%B%n-hash-%n%H',
filterReverts: true
},
parser: {
headerPattern: /^(\w*)(?:\((.*)\))?: (.*)$/,
headerCorrespondence: ['type', 'scope', 'subject'],
noteKeywords: ['BREAKING CHANGE', 'DEPRECATED'],
warn: customLogger
}
};
const result = await new Bumper().config(customPreset).bump();