11import { core , flags , SfdxCommand } from '@salesforce/command' ;
22import chalk from 'chalk' ;
3- import * as child from 'child_process' ;
4- import * as util from 'util' ;
5- import { MetadataResult } from '../../models/metadataResult' ;
6- import { PackageXmlTemplate } from '../../service/packagexmlTemplate' ;
3+ import { MetadataMember } from '../../service/packagexmlbuilder/metadataMember' ;
4+ import { PackageXmlTemplate } from '../../service/packagexmlbuilder/packagexmlTemplate' ;
75// Initialize Messages with the current plugin directory
86core . Messages . importMessagesDirectory ( __dirname ) ;
97
108// Load the specific messages for this file. Messages from @salesforce /command, @salesforce/core,
119// or any library that is using the messages framework can also be loaded this way.
1210const messages = core . Messages . loadMessages ( 'mo-dx-plugin' , 'org' ) ;
1311
14- const exec = util . promisify ( child . exec ) ;
15-
1612export default class PackageXML extends SfdxCommand {
1713
1814 public static description = messages . getMessage ( 'generatePackageXML' ) ;
@@ -35,38 +31,24 @@ export default class PackageXML extends SfdxCommand {
3531 protected static requiresUsername = true ;
3632
3733 public async run ( ) : Promise < string > {
38- let packagexml ;
34+ let packagexml : string ;
3935 const conn = this . org . getConnection ( ) ;
4036 const apiVersion = conn . getApiVersion ( ) ;
4137 const defaultusername = this . flags . targetusername
4238 ? this . flags . targetusername
4339 : this . org . getUsername ( ) ;
4440 this . ux . startSpinner ( chalk . yellowBright ( 'Building package xml for ' + this . flags . metadatatype ) ) ;
45- const listMetadata = `sfdx force:mdapi:listmetadata -m ${ this . flags . metadatatype } -u ${ defaultusername } --json` ;
46- try {
47- const result = await exec ( listMetadata , {
48- maxBuffer : 1000000 * 1024
49- } ) ;
50- const jsonResult = result . stdout ;
51- const metadatalist = JSON . parse ( jsonResult ) . result as MetadataResult [ ] ;
52- packagexml = this . createXML ( metadatalist , apiVersion ) ;
53- process . stdout . write ( packagexml ) ;
54- this . ux . stopSpinner ( chalk . greenBright ( 'Package XML generated Successfully ✔' ) ) ;
55- } catch ( exception ) {
56-
57- }
41+ packagexml = await this . createXML ( this . flags . metadatatype , apiVersion , defaultusername ) ;
42+ process . stdout . write ( packagexml ) ;
43+ this . ux . stopSpinner ( chalk . greenBright ( 'Package XML generated Successfully ✔' ) ) ;
5844 return packagexml ;
5945 }
6046
61- private createXML ( metadataResults : MetadataResult [ ] , version : string ) : string {
47+ private async createXML ( metadatatype : string , version : string , defaultusername : string ) : Promise < string > {
6248 let xml = '' as string ;
6349 xml = PackageXmlTemplate . createHeader ( ) ;
64- xml = xml + PackageXmlTemplate . startType ( ) ;
65- for ( const componentname of metadataResults ) {
66- xml = xml + PackageXmlTemplate . createMember ( componentname . fullName ) ;
67- }
68- xml = xml + PackageXmlTemplate . nameTag ( this . flags . metadatatype ) ;
69- xml = xml + PackageXmlTemplate . endType ( ) ;
50+ const metadataMember = new MetadataMember ( metadatatype , defaultusername ) ;
51+ xml = xml + await metadataMember . createMemberXml ( ) ;
7052 xml = xml + PackageXmlTemplate . createFooter ( version ) ;
7153 return xml ;
7254 }
0 commit comments