@@ -830,6 +830,82 @@ program
830830 console . log ( result . success ? chalk . green ( 'Success.' ) : chalk . red ( 'Failed.' ) ) ;
831831 } ) ;
832832
833+ program
834+ . command ( 'get-msp' )
835+ . description ( 'Show all MSP (Muse SDK Presets) from msp.yaml' )
836+ . action ( async ( ) => {
837+ const msp = await muse . msp . getMsp ( ) ;
838+ if ( ! msp ) {
839+ console . log ( chalk . yellow ( 'No msp.yaml found.' ) ) ;
840+ } else {
841+ console . log ( chalk . cyan ( JSON . stringify ( msp , null , 2 ) ) ) ;
842+ }
843+ } ) ;
844+
845+ program
846+ . command ( 'add-preset' )
847+ . description ( 'Add a new preset to msp.yaml' )
848+ . argument ( '<name>' , 'The preset name.' )
849+ . option ( '--extends <preset>' , 'The parent preset to extend.' )
850+ . option ( '--versions <versions...>' , 'Package versions, e.g: @ebay/muse-core=1.0.45 @ebay/muse-cli=1.0.34 .' )
851+ . action ( async ( name , options ) => {
852+ const versions = options . versions
853+ ? Object . fromEntries ( options . versions . map ( ( kv ) => kv . split ( '=' ) ) )
854+ : { } ;
855+ const preset = { versions } ;
856+ if ( options . extends ) preset . extends = options . extends ;
857+ await muse . msp . addPreset ( { name, preset } ) ;
858+ console . log ( chalk . cyan ( `Preset ${ name } added.` ) ) ;
859+ } ) ;
860+
861+ program
862+ . command ( 'delete-preset' )
863+ . description ( 'Delete a preset from msp.yaml' )
864+ . argument ( '<name>' , 'The preset name to delete.' )
865+ . action ( async ( name ) => {
866+ const rl = readline . createInterface ( { input, output } ) ;
867+ const answer = await new Promise ( ( resolve ) =>
868+ rl . question ( `Delete preset "${ name } "? This cannot be undone. Confirm (yes/no) [Y] ? ` , resolve ) ,
869+ ) ;
870+ rl . close ( ) ;
871+ if ( confirmAnswer ( answer ) ) {
872+ await muse . msp . deletePreset ( { name } ) ;
873+ console . log ( chalk . cyan ( `Preset ${ name } deleted.` ) ) ;
874+ }
875+ } ) ;
876+
877+ program
878+ . command ( 'update-preset-packages' )
879+ . description ( 'Update package versions in msp.yaml across all presets (same major version only)' )
880+ . option ( '--versions <versions...>' , 'Package versions, e.g: @ebay/muse-core=1.0.46 @ebay/muse-cli=1.0.35 .' )
881+ . action ( async ( options ) => {
882+ const pkgs = options . versions
883+ ? Object . fromEntries (
884+ options . versions . map ( ( kv ) => {
885+ const [ pkg , version ] = kv . split ( '=' ) ;
886+ return [ pkg , { version } ] ;
887+ } ) ,
888+ )
889+ : { } ;
890+ await muse . msp . updatePackages ( { pkgs } ) ;
891+ console . log ( chalk . cyan ( 'Packages updated in msp.yaml.' ) ) ;
892+ } ) ;
893+
894+ program
895+ . command ( 'sync-preset-latest' )
896+ . description ( 'Sync all packages in msp.yaml to their latest versions from the npm registry' )
897+ . option (
898+ '--registry [registry]' ,
899+ 'The npm registry to use. Defaults to https://registry.npmjs.org .' ,
900+ 'https://registry.npmjs.org' ,
901+ )
902+ . action ( async ( options ) => {
903+ console . log ( chalk . cyan ( `Syncing latest package versions from ${ options . registry } ...` ) ) ;
904+ const msp = await muse . msp . syncLatest ( { registry : options . registry } ) ;
905+ console . log ( chalk . cyan ( 'msp.yaml updated:' ) ) ;
906+ console . log ( chalk . cyan ( JSON . stringify ( msp , null , 2 ) ) ) ;
907+ } ) ;
908+
833909// let other plugins add their own cli program commands
834910muse . plugin . invoke ( 'museCli.processProgram' , program , { commander, chalk, timeAgo } ) ;
835911
0 commit comments