@@ -18,6 +18,11 @@ import { Utils } from '../../../utils/index.js';
1818
1919const ALIAS_REGEX = / ^ ' ? ( [ ^ = ] + ?) ' ? = ' ? ( .* ?) ' ? $ /
2020
21+ interface AliasDeclaration {
22+ alias : string ;
23+ value : string ;
24+ }
25+
2126export const schema = z . object ( {
2227 aliases : z
2328 . array ( z . object ( {
@@ -26,10 +31,14 @@ export const schema = z.object({
2631 } ) )
2732 . describe ( 'Aliases to create' )
2833 . optional ( ) ,
34+ declarationsOnly : z . boolean ( ) . default ( false ) ,
2935} )
3036
3137export type AliasesConfig = z . infer < typeof schema > ;
3238export class AliasesResource extends Resource < AliasesConfig > {
39+ private readonly ALIAS_DECLARATION_REGEX = / ^ \s * a l i a s \s + ( [ A - Z _ a - z ] [ \w - ] * ) \s * = \s * ( [ " ' ] ? ) ( .+ ?) \2\s * (?: # .* ) ? $ / gm;
40+ readonly filePaths = Utils . getShellRcFiles ( )
41+
3342 getSettings ( ) : ResourceSettings < AliasesConfig > {
3443 return {
3544 id : 'aliases' ,
@@ -43,37 +52,46 @@ export class AliasesResource extends Resource<AliasesConfig> {
4352 filterInStatelessMode : ( desired , current ) =>
4453 current . filter ( ( c ) => desired . some ( ( d ) => d . alias === c . alias ) ) ,
4554 canModify : true ,
46- }
55+ } ,
56+ declarationsOnly : { default : false , setting : true } ,
4757 } ,
4858 importAndDestroy : {
49- requiredParameters : [ 'aliases' ] ,
50- } ,
51- allowMultiple : {
52- identifyingParameters : [ 'alias' ] ,
53- } ,
59+ refreshMapper ( input ) {
60+ if ( ( input . aliases ?. length === 0 || ! input ?. aliases ) && input ?. aliases === undefined ) {
61+ return { aliases : [ ] , declarationsOnly : true } ;
62+ }
63+
64+ return input ;
65+ }
66+ }
5467 }
5568 }
5669
5770 override async refresh ( parameters : any , context : RefreshContext < AliasesConfig > ) : Promise < Partial < AliasesConfig > | null > {
5871 const $ = getPty ( ) ;
5972
6073 const { data, status } = await $ . spawnSafe ( 'alias' , { interactive : true } ) ;
61-
62- console . log ( 'Data' , data ) ;
63-
6474 if ( status === SpawnStatus . ERROR ) {
6575 return null ;
6676 }
6777
68- const aliases = data . split ( / \n / g)
78+ let aliases = data . split ( / \n / g)
6979 . map ( ( l ) => l . trim ( ) )
7080 . map ( ( l ) => l . match ( ALIAS_REGEX ) )
7181 . filter ( Boolean )
7282 . map ( ( m ) => ( m ? { alias : m [ 1 ] , value : m [ 2 ] } : null ) )
7383 . filter ( Boolean ) as Array < { alias : string ; value : string } > ;
7484
75- console . log ( 'Command type' , context . commandType ) ;
76- console . log ( 'Aliases' , aliases ) ;
85+ if ( parameters . declarationsOnly ) {
86+ const aliasDeclarations : AliasDeclaration [ ] = [ ] ;
87+ for ( const file of this . filePaths ) {
88+ if ( await FileUtils . fileExists ( file ) ) {
89+ aliasDeclarations . push ( ...this . findAllDeclarations ( await fs . readFile ( file , 'utf8' ) ) ) ;
90+ }
91+ }
92+
93+ aliases = aliases . filter ( ( a ) => aliasDeclarations . some ( ( d ) => d . alias === a . alias ) ) ;
94+ }
7795
7896 // If validation plan and no aliases match, return null
7997 if ( context . commandType === 'validationPlan'
@@ -128,15 +146,12 @@ export class AliasesResource extends Resource<AliasesConfig> {
128146 ?. filter ( ( a ) => ! pc . previousValue ?. some ( ( c ) => c . alias === a . alias )
129147 || pc . previousValue ?. some ( ( c ) => c . alias === a . alias && c . value !== a . value ) ) ;
130148
131- console . log ( 'Aliases to add' , aliasesToAdd ) ;
132-
133149 await this . removeAliases ( aliasesToRemove ) ;
134150 await this . addAliases ( aliasesToAdd ) ;
135151 }
136152 }
137153
138154 async destroy ( plan : DestroyPlan < AliasesConfig > ) : Promise < void > {
139- console . log ( plan . currentConfig . aliases ) ;
140155 await this . removeAliases ( plan . currentConfig . aliases ?? [ ] ) ;
141156 }
142157
@@ -192,6 +207,16 @@ export class AliasesResource extends Resource<AliasesConfig> {
192207 await FileUtils . addToStartupFile ( aliasString ) ;
193208 }
194209 }
195- }
196210
211+ findAllDeclarations ( contents : string ) : AliasDeclaration [ ] {
212+ const results = [ ] ;
213+ const aliasDeclarations = contents . matchAll ( this . ALIAS_DECLARATION_REGEX ) ;
214+
215+ for ( const declaration of aliasDeclarations ) {
216+ const [ _ , alias , __ , value ] = declaration ;
217+ results . push ( { alias, value } ) ;
218+ }
197219
220+ return results ;
221+ }
222+ }
0 commit comments