@@ -22,11 +22,23 @@ interface FlagOperationsParams {
22
22
flagData : FeatureFlag [ ] ;
23
23
toolkit : Toolkit ;
24
24
ioHelper : IoHelper ;
25
+
26
+ /** User ran --recommended option */
25
27
recommended ?: boolean ;
28
+
29
+ /** User ran --all option */
26
30
all ?: boolean ;
31
+
32
+ /** User provided --value field */
27
33
value ?: string ;
34
+
35
+ /** User provided FLAGNAME field */
28
36
flagName ?: string [ ] ;
37
+
38
+ /** User ran --default option */
29
39
default ?: boolean ;
40
+
41
+ /** User ran --unconfigured option */
30
42
unconfigured ?: boolean ;
31
43
}
32
44
@@ -392,57 +404,35 @@ function formatTable(headers: string[], rows: string[][]): string {
392
404
return table ;
393
405
}
394
406
395
- export async function displayFlags ( params : FlagOperationsParams ) : Promise < void > {
396
- const { flagData, ioHelper, flagName, all } = params ;
397
- if ( flagName && flagName . length > 0 ) {
398
- const flag = flagData . find ( f => f . name === flagName ! [ 0 ] ) ;
399
- if ( ! flag ) {
400
- await ioHelper . defaults . error ( 'Flag not found.' ) ;
401
- return ;
402
- }
403
-
404
- await ioHelper . defaults . info ( `Description: ${ flag . explanation } ` ) ;
405
- await ioHelper . defaults . info ( `Recommended value: ${ flag . recommendedValue } ` ) ;
406
- await ioHelper . defaults . info ( `User value: ${ flag . userValue } ` ) ;
407
- return ;
407
+ function getFlagSortOrder ( flag : FeatureFlag ) : number {
408
+ if ( flag . userValue === undefined ) {
409
+ return 3 ;
410
+ } else if ( isUserValueEqualToRecommended ( flag ) ) {
411
+ return 1 ;
412
+ } else {
413
+ return 2 ;
408
414
}
415
+ }
409
416
417
+ async function displayFlagTable ( flags : FeatureFlag [ ] , ioHelper : IoHelper ) : Promise < void > {
410
418
const headers = [ 'Feature Flag Name' , 'Recommended Value' , 'User Value' ] ;
411
- const rows : string [ ] [ ] = [ ] ;
412
-
413
- const getFlagPriority = ( flag : FeatureFlag ) : number => {
414
- if ( flag . userValue === undefined ) {
415
- return 3 ;
416
- } else if ( isUserValueEqualToRecommended ( flag ) ) {
417
- return 1 ;
418
- } else {
419
- return 2 ;
420
- }
421
- } ;
422
-
423
- let flagsToDisplay : FeatureFlag [ ] ;
424
- if ( all ) {
425
- flagsToDisplay = flagData ;
426
- } else {
427
- flagsToDisplay = flagData . filter ( flag =>
428
- flag . userValue === undefined || ! isUserValueEqualToRecommended ( flag ) ,
429
- ) ;
430
- }
431
419
432
- const sortedFlags = [ ...flagsToDisplay ] . sort ( ( a , b ) => {
433
- const priorityA = getFlagPriority ( a ) ;
434
- const priorityB = getFlagPriority ( b ) ;
420
+ const sortedFlags = [ ...flags ] . sort ( ( a , b ) => {
421
+ const orderA = getFlagSortOrder ( a ) ;
422
+ const orderB = getFlagSortOrder ( b ) ;
435
423
436
- if ( priorityA !== priorityB ) {
437
- return priorityA - priorityB ;
424
+ if ( orderA !== orderB ) {
425
+ return orderA - orderB ;
438
426
}
439
427
if ( a . module !== b . module ) {
440
428
return a . module . localeCompare ( b . module ) ;
441
429
}
442
430
return a . name . localeCompare ( b . name ) ;
443
431
} ) ;
444
432
433
+ const rows : string [ ] [ ] = [ ] ;
445
434
let currentModule = '' ;
435
+
446
436
sortedFlags . forEach ( ( flag ) => {
447
437
if ( flag . module !== currentModule ) {
448
438
rows . push ( [ chalk . bold ( `Module: ${ flag . module } ` ) , '' , '' ] ) ;
@@ -459,6 +449,45 @@ export async function displayFlags(params: FlagOperationsParams): Promise<void>
459
449
await ioHelper . defaults . info ( formattedTable ) ;
460
450
}
461
451
452
+ export async function displayFlags ( params : FlagOperationsParams ) : Promise < void > {
453
+ const { flagData, ioHelper, flagName, all } = params ;
454
+
455
+ if ( flagName && flagName . length > 0 ) {
456
+ const matchingFlags = flagData . filter ( f =>
457
+ flagName . some ( searchTerm => f . name . toLowerCase ( ) . includes ( searchTerm . toLowerCase ( ) ) ) ,
458
+ ) ;
459
+
460
+ if ( matchingFlags . length === 0 ) {
461
+ await ioHelper . defaults . error ( `Flag matching "${ flagName . join ( ', ' ) } " not found.` ) ;
462
+ return ;
463
+ }
464
+
465
+ if ( matchingFlags . length === 1 ) {
466
+ const flag = matchingFlags [ 0 ] ;
467
+ await ioHelper . defaults . info ( `Flag name: ${ flag . name } ` ) ;
468
+ await ioHelper . defaults . info ( `Description: ${ flag . explanation } ` ) ;
469
+ await ioHelper . defaults . info ( `Recommended value: ${ flag . recommendedValue } ` ) ;
470
+ await ioHelper . defaults . info ( `User value: ${ flag . userValue } ` ) ;
471
+ return ;
472
+ }
473
+
474
+ await ioHelper . defaults . info ( `Found ${ matchingFlags . length } flags matching "${ flagName . join ( ', ' ) } ":` ) ;
475
+ await displayFlagTable ( matchingFlags , ioHelper ) ;
476
+ return ;
477
+ }
478
+
479
+ let flagsToDisplay : FeatureFlag [ ] ;
480
+ if ( all ) {
481
+ flagsToDisplay = flagData ;
482
+ } else {
483
+ flagsToDisplay = flagData . filter ( flag =>
484
+ flag . userValue === undefined || ! isUserValueEqualToRecommended ( flag ) ,
485
+ ) ;
486
+ }
487
+
488
+ await displayFlagTable ( flagsToDisplay , ioHelper ) ;
489
+ }
490
+
462
491
function isUserValueEqualToRecommended ( flag : FeatureFlag ) : boolean {
463
492
return String ( flag . userValue ) === String ( flag . recommendedValue ) ;
464
493
}
0 commit comments