import { AsyncSeriesBailHook } from 'tapable'; import { ICommitAuthor, IExtendedCommit } from './log-parse'; import { ILabelDefinitionMap } from './release'; import { ILogger } from './utils/logger'; export interface IGenerateReleaseNotesOptions { owner: string; repo: string; baseUrl: string; jira?: string; labels: ILabelDefinitionMap; baseBranch: string; } export interface IChangelogHooks { renderChangelogLine: AsyncSeriesBailHook<[IExtendedCommit[], (commit: IExtendedCommit) => Promise], string[] | void>; renderChangelogTitle: AsyncSeriesBailHook<[string, { [label: string]: string; }], string | void>; renderChangelogAuthor: AsyncSeriesBailHook<[ICommitAuthor, IExtendedCommit, IGenerateReleaseNotesOptions], string | void>; renderChangelogAuthorLine: AsyncSeriesBailHook<[ICommitAuthor, string], string | void>; } export default class Changelog { readonly hooks: IChangelogHooks; private readonly logger; private readonly options; constructor(logger: ILogger, options: IGenerateReleaseNotesOptions); loadDefaultHooks(): void; generateReleaseNotes(commits: IExtendedCommit[]): Promise; createUserLink(author: ICommitAuthor, commit: IExtendedCommit): string | undefined; /** * Split commits into changelogTitle sections. */ private splitCommits; private createUserLinkList; private generateCommitNote; private createAuthorSection; private createLabelSection; private createReleaseNotesSection; }