@@ -146,17 +146,29 @@ export function createUnhead<T = ResolvableHead>(resolvedOptions: CreateHeadOpti
146
146
} , ctx . tagMap )
147
147
148
148
const title = ctx . tagMap . get ( 'title' )
149
- const titleTemplate = ctx . tagMap . get ( 'titleTemplate' ) ?. textContent
149
+ const titleTemplate = ctx . tagMap . get ( 'titleTemplate' )
150
150
head . _title = title ?. textContent
151
- head . _titleTemplate = typeof titleTemplate === 'string' ? titleTemplate : undefined
152
151
153
- if ( titleTemplate && title ) {
154
- // @ts -expect-error todo
155
- let newTitle = typeof titleTemplate === 'function' ? titleTemplate ( title . textContent ) : titleTemplate
156
- if ( typeof newTitle === 'string' && ! head . plugins . has ( 'template-params' ) ) {
157
- newTitle = newTitle . replace ( '%s' , title . textContent || '' )
152
+ if ( titleTemplate ) {
153
+ const titleTemplateFn = titleTemplate ?. textContent
154
+ head . _titleTemplate = typeof titleTemplateFn === 'string' ? titleTemplateFn : undefined
155
+ if ( titleTemplateFn ) {
156
+ // @ts -expect-error todo
157
+ let newTitle = ( typeof titleTemplateFn === 'function' ? titleTemplateFn ( title ?. textContent ) : titleTemplateFn )
158
+ if ( typeof newTitle === 'string' && ! head . plugins . has ( 'template-params' ) ) {
159
+ newTitle = newTitle . replace ( '%s' , title ?. textContent || '' )
160
+ }
161
+ if ( title ) {
162
+ newTitle === null
163
+ ? ctx . tagMap . delete ( 'title' )
164
+ : ctx . tagMap . set ( 'title' , { ...title , textContent : newTitle } )
165
+ }
166
+ else {
167
+ // convert title template to a title
168
+ titleTemplate . tag = 'title'
169
+ titleTemplate . textContent = newTitle
170
+ }
158
171
}
159
- newTitle === null ? ctx . tagMap . delete ( 'title' ) : ctx . tagMap . set ( 'title' , { ...title , textContent : newTitle } )
160
172
}
161
173
// merge _tags into one map
162
174
ctx . tags = Array . from ( ctx . tagMap ! . values ( ) )
0 commit comments