@@ -142,15 +142,22 @@ function logHelpMessage(
142142async function getTools (
143143 { tools, dir, template } : Argv ,
144144 extraTools ?: ExtraTool [ ] ,
145+ templateName ?: string ,
145146) {
146147 // Check if tools are specified via CLI options
147148 const parsedTools = parseToolsOption ( tools ) ;
148149
150+ // Filter extraTools based on templateName
151+ const filteredExtraTools = extraTools ?. filter ( ( tool ) => {
152+ const when = tool . when ?? ( ( ) => true ) ;
153+ return templateName ? when ( templateName ) : true ;
154+ } ) ;
155+
149156 if ( parsedTools !== null ) {
150157 const toolsArr = parsedTools . filter (
151158 ( tool ) =>
152159 BUILTIN_TOOLS . includes ( tool ) ||
153- extraTools ?. some ( ( extraTool ) => extraTool . value === tool ) ,
160+ filteredExtraTools ?. some ( ( extraTool ) => extraTool . value === tool ) ,
154161 ) ;
155162 return toolsArr ;
156163 }
@@ -165,17 +172,21 @@ async function getTools(
165172 { value : 'prettier' , label : 'Prettier - formatting' } ,
166173 ] ;
167174
168- if ( extraTools ) {
175+ if ( filteredExtraTools ) {
169176 const normalize = ( tool : ExtraTool ) => ( {
170177 value : tool . value ,
171178 label : tool . label ,
172179 hint : tool . command ,
173180 } ) ;
174181 options . unshift (
175- ...extraTools . filter ( ( tool ) => tool . order === 'pre' ) . map ( normalize ) ,
182+ ...filteredExtraTools
183+ . filter ( ( tool ) => tool . order === 'pre' )
184+ . map ( normalize ) ,
176185 ) ;
177186 options . push (
178- ...extraTools . filter ( ( tool ) => tool . order !== 'pre' ) . map ( normalize ) ,
187+ ...filteredExtraTools
188+ . filter ( ( tool ) => tool . order !== 'pre' )
189+ . map ( normalize ) ,
179190 ) ;
180191 }
181192
@@ -252,6 +263,12 @@ type ExtraTool = {
252263 * If undefined, the tool will be displayed after built-in tools.
253264 */
254265 order ?: 'pre' | 'post' ;
266+ /**
267+ * Condition to determine whether this tool should be displayed.
268+ * If returns false, the tool will not be shown in the selection.
269+ * @default () => true
270+ */
271+ when ?: ( templateName : string ) => boolean ;
255272} ;
256273
257274function runCommand ( command : string , cwd : string , packageManager : string ) {
@@ -385,7 +402,7 @@ export async function create({
385402 }
386403
387404 const templateName = await getTemplateName ( argv ) ;
388- const tools = await getTools ( argv , extraTools ) ;
405+ const tools = await getTools ( argv , extraTools , templateName ) ;
389406
390407 const srcFolder = path . join ( root , `template-${ templateName } ` ) ;
391408 const commonFolder = path . join ( root , 'template-common' ) ;
0 commit comments