@@ -92,13 +92,28 @@ const addSubject = (subject?: string, colorize?: boolean) => {
9292 return subject . trim ( )
9393}
9494
95- const addFooter = ( footer : string , footerPrefix = '' , colorize ?: boolean ) => {
95+ const addFooter = ( footerSuffix : string , footerPrefix = '' , colorize ?: boolean ) => {
96+ if ( footerSuffix === '' )
97+ return ''
9698 if ( footerPrefix === '' )
97- return colorize ? `\n\n${ style . green ( footer ) } ` : `\n\n${ footer } `
99+ return colorize ? `\n\n${ style . green ( footerSuffix ) } ` : `\n\n${ footerSuffix } `
98100
99101 return colorize
100- ? `\n\n${ style . green ( `${ footerPrefix } ${ footer } ` ) } `
101- : `\n\n${ footerPrefix } ${ footer } `
102+ ? `\n\n${ style . green ( `${ footerPrefix } ${ footerSuffix } ` ) } `
103+ : `\n\n${ footerPrefix } ${ footerSuffix } `
104+ }
105+
106+ const formatDefaultMessage = ( defaultHeader : string , body : string , breaking : string , footer : string ) => {
107+ let result = defaultHeader
108+ if ( body )
109+ result += `\n\n${ body } `
110+
111+ if ( breaking )
112+ result += `\n\nBREAKING CHANGE :\n${ breaking } `
113+
114+ if ( footer )
115+ result += footer
116+ return result
102117}
103118
104119export const generateMessage = (
@@ -113,38 +128,50 @@ export const generateMessage = (
113128 indent : '' ,
114129 width : options . breaklineNumber ,
115130 }
116-
131+ // resolve custom value
117132 const { customScope, customFooterPrefixs } = answers
118133 answers . scope = getCustomValue ( answers . scope , customScope )
119134 answers . footerPrefix = getCustomValue ( answers . footerPrefix , customFooterPrefixs ) as string
120-
135+ // resolve single | multiple item
121136 const { singleScope, singeIssuePrefix } = getSingleParams ( answers , options )
122- const scope = Array . isArray ( answers . scope )
137+ const scopeSource = Array . isArray ( answers . scope )
123138 ? answers . scope . join ( options . scopeEnumSeparator )
124139 : answers . scope
140+
141+ const type = addType ( answers . type ?? '' , colorize )
125142 const emoji = getEmojiCode ( answers . type || '' , options )
126- const head
127- = `${ addEmoji ( emoji , 'left' , options . emojiAlign )
128- + addType ( answers . type ?? '' , colorize )
129- + addScope ( singleScope || scope , colorize )
130- + addBreakchangeMark ( answers . markBreaking , colorize )
131- } : ${
132- addEmoji ( emoji , 'center' , options . emojiAlign )
133- } ${ addSubject ( answers . subject , colorize )
134- } ${ addEmoji ( emoji , 'right' , options . emojiAlign ) } `
143+ const scope = addScope ( singleScope || scopeSource , colorize )
144+ const markBreaking = addBreakchangeMark ( answers . markBreaking , colorize )
145+ const subject = addSubject ( answers . subject , colorize )
146+ const defaultHeader = `${ addEmoji ( emoji , 'left' , options . emojiAlign )
147+ + type
148+ + scope
149+ + markBreaking
150+ } : ${ addEmoji ( emoji , 'center' , options . emojiAlign )
151+ + subject
152+ + addEmoji ( emoji , 'right' , options . emojiAlign )
153+ } `
135154 const body = wrap ( answers . body ?? '' , wrapOptions )
136155 const breaking = wrap ( answers . breaking ?? '' , wrapOptions )
137- const footer = wrap ( answers . footer ?? '' , wrapOptions )
138-
139- let result = head
140- if ( body )
141- result += `\n\n${ body } `
142-
143- if ( breaking )
144- result += `\n\nBREAKING CHANGE :\n${ breaking } `
145-
146- if ( footer )
147- result += addFooter ( footer , answers . footerPrefix || singeIssuePrefix , colorize )
148-
149- return result
156+ const footerSuffix = wrap ( answers . footer ?? '' , wrapOptions )
157+ const footer = addFooter ( footerSuffix , answers . footerPrefix || singeIssuePrefix , colorize )
158+ const defaultMessage = formatDefaultMessage ( defaultHeader , body , breaking , footer )
159+
160+ if ( typeof options . formatMessageCB === 'function' ) {
161+ return options . formatMessageCB ( {
162+ type,
163+ emoji,
164+ scope,
165+ markBreaking,
166+ subject,
167+ defaultHeader,
168+ body,
169+ breaking,
170+ footer,
171+ defaultMessage,
172+ } )
173+ }
174+ else {
175+ return defaultMessage
176+ }
150177}
0 commit comments