1- import {
2- AdditionOptions ,
3- getAdditionByName ,
4- getAdditionFlags ,
5- getAvailableAdditions ,
6- parseAdditionFlags ,
7- runAddition ,
8- } from '../additions/manager.js' ;
1+ import { getAdditionFlags , getAvailableAdditions , runAdditionByName } from '../additions/manager.js' ;
92import { isGitDirectory , isGitDirectoryClean } from '../utils/utils.git.js' ;
103
114import { isPluginDirectory } from '../utils/utils.plugin.js' ;
@@ -16,58 +9,14 @@ export const add = async (argv: minimist.ParsedArgs) => {
169 const subCommand = argv . _ [ 1 ] ;
1710
1811 if ( ! subCommand ) {
19- const availableAdditions = getAvailableAdditions ( ) ;
20- const additionsList = await Promise . all (
21- Object . values ( availableAdditions ) . map ( async ( addition ) => {
22- let info = `${ addition . name } - ${ addition . description } ` ;
23- const flags = await getAdditionFlags ( addition ) ;
24- if ( flags . length > 0 ) {
25- const flagDocs = flags . map ( ( flag ) => {
26- const req = flag . required ? ' (required)' : ' (optional)' ;
27- return ` --${ flag . name } : ${ flag . description } ${ req } ` ;
28- } ) ;
29- info += '\n' + flagDocs . join ( '\n' ) ;
30- }
31- return info ;
32- } )
33- ) ;
34-
35- output . error ( {
36- title : 'No addition specified' ,
37- body : [
38- 'Usage: npx @grafana/create-plugin add <addition-name> [options]' ,
39- '' ,
40- 'Available additions:' ,
41- ...output . bulletList ( additionsList ) ,
42- ] ,
43- } ) ;
12+ await showAdditionsHelp ( ) ;
4413 process . exit ( 1 ) ;
4514 }
4615
4716 await performPreAddChecks ( argv ) ;
4817
49- const addition = getAdditionByName ( subCommand ) ;
50-
51- if ( ! addition ) {
52- const availableAdditions = getAvailableAdditions ( ) ;
53- const additionsList = Object . values ( availableAdditions ) . map ( ( addition ) => addition . name ) ;
54-
55- output . error ( {
56- title : `Unknown addition: ${ subCommand } ` ,
57- body : [ 'Available additions:' , ...output . bulletList ( additionsList ) ] ,
58- } ) ;
59- process . exit ( 1 ) ;
60- }
61-
6218 try {
63- // Parse addition-specific options from argv flags using the addition's own parser
64- const options = await parseAdditionFlags ( addition , argv ) ;
65-
66- // Validate required flags
67- await validateAdditionOptions ( addition , options ) ;
68-
69- const commitChanges = argv . commit ;
70- await runAddition ( addition , options , { commitChanges } ) ;
19+ await runAdditionByName ( subCommand , argv , { commitChanges : argv . commit } ) ;
7120 } catch ( error ) {
7221 if ( error instanceof Error ) {
7322 output . error ( {
@@ -79,41 +28,32 @@ export const add = async (argv: minimist.ParsedArgs) => {
7928 }
8029} ;
8130
82- async function validateAdditionOptions ( addition : any , options : AdditionOptions ) : Promise < void > {
83- const flags = await getAdditionFlags ( addition ) ;
84-
85- if ( ! flags || flags . length === 0 ) {
86- return ;
87- }
88-
89- const missingFlags : string [ ] = [ ] ;
90-
91- for ( const flag of flags ) {
92- if ( flag . required ) {
93- const value = options [ flag . name ] ;
94- if ( value === undefined || value === null || ( Array . isArray ( value ) && value . length === 0 ) ) {
95- missingFlags . push ( flag . name ) ;
31+ async function showAdditionsHelp ( ) {
32+ const availableAdditions = getAvailableAdditions ( ) ;
33+ const additionsList = await Promise . all (
34+ Object . values ( availableAdditions ) . map ( async ( addition ) => {
35+ let info = `${ addition . name } - ${ addition . description } ` ;
36+ const flags = await getAdditionFlags ( addition ) ;
37+ if ( flags . length > 0 ) {
38+ const flagDocs = flags . map ( ( flag ) => {
39+ const req = flag . required ? ' (required)' : ' (optional)' ;
40+ return ` --${ flag . name } : ${ flag . description } ${ req } ` ;
41+ } ) ;
42+ info += '\n' + flagDocs . join ( '\n' ) ;
9643 }
97- }
98- }
99-
100- if ( missingFlags . length > 0 ) {
101- const flagDocs = flags
102- . filter ( ( f : any ) => missingFlags . includes ( f . name ) )
103- . map ( ( f : any ) => ` --${ f . name } : ${ f . description } ` ) ;
104-
105- output . error ( {
106- title : `Missing required flag${ missingFlags . length > 1 ? 's' : '' } ` ,
107- body : [
108- `The following required flag${ missingFlags . length > 1 ? 's are' : ' is' } missing:` ,
109- '' ,
110- ...flagDocs ,
111- '' ,
112- `Example: npx @grafana/create-plugin add ${ addition . name } --${ missingFlags [ 0 ] } =value` ,
113- ] ,
114- } ) ;
115- process . exit ( 1 ) ;
116- }
44+ return info ;
45+ } )
46+ ) ;
47+
48+ output . error ( {
49+ title : 'No addition specified' ,
50+ body : [
51+ 'Usage: npx @grafana/create-plugin add <addition-name> [options]' ,
52+ '' ,
53+ 'Available additions:' ,
54+ ...output . bulletList ( additionsList ) ,
55+ ] ,
56+ } ) ;
11757}
11858
11959async function performPreAddChecks ( argv : minimist . ParsedArgs ) {
0 commit comments