@@ -43,11 +43,34 @@ export async function copyMpkFiles(packageNames: string[], dest: string): Promis
43
43
export async function selectPackage ( ) : Promise < PackageListing > {
44
44
const pkgs = await oraPromise ( listPackages ( [ "'*'" , "!web-widgets" ] ) , "Loading packages..." ) ;
45
45
46
+ // First, get all display names and find maximum length
47
+ const displayData = pkgs . map ( pkg => {
48
+ const [ category , folderName ] = extractPathInfo ( pkg . path ) ;
49
+ const displayName = pkg . name . includes ( "/" ) ? pkg . name . split ( "/" ) . pop ( ) ! : pkg . name ;
50
+ const categoryInfo = `[${ category } ${ displayName !== folderName ? "/" + folderName : "" } ]` ;
51
+
52
+ return {
53
+ displayName,
54
+ categoryInfo,
55
+ packageName : pkg . name
56
+ } ;
57
+ } ) ;
58
+
59
+ // Find maximum display name length for padding
60
+ const maxDisplayNameLength = Math . max ( ...displayData . map ( item => item . displayName . length ) ) ;
61
+
46
62
const { packageName } = await prompt < { packageName : string } > ( {
47
63
type : "autocomplete" ,
48
64
name : "packageName" ,
49
65
message : "Please select package" ,
50
- choices : pkgs . map ( pkg => pkg . name )
66
+ choices : displayData . map ( item => {
67
+ // Pad the display name with spaces to align the category info
68
+ const paddedName = item . displayName . padEnd ( maxDisplayNameLength + 2 , " " ) ;
69
+ return {
70
+ name : `${ paddedName } ${ item . categoryInfo } ` ,
71
+ value : item . packageName
72
+ } ;
73
+ } )
51
74
} ) ;
52
75
53
76
const pkg = pkgs . find ( p => p . name === packageName ) ;
@@ -58,3 +81,17 @@ export async function selectPackage(): Promise<PackageListing> {
58
81
59
82
return pkg ;
60
83
}
84
+
85
+ function extractPathInfo ( path : string ) : [ string , string ] {
86
+ const automationMatch = path . match ( / a u t o m a t i o n \/ ( [ ^ \/ ] + ) / ) ;
87
+ if ( automationMatch ) {
88
+ return [ "automation" , automationMatch [ 1 ] ] ;
89
+ }
90
+
91
+ const packagesMatch = path . match ( / p a c k a g e s \/ ( [ ^ \/ ] + ) \/ ( [ ^ \/ ] + ) / ) ;
92
+ if ( packagesMatch ) {
93
+ return [ packagesMatch [ 1 ] , packagesMatch [ 2 ] ] ;
94
+ }
95
+
96
+ throw new Error ( `Invalid path format: ${ path } ` ) ;
97
+ }
0 commit comments