55 * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
66 */
77
8- import { blue } from 'chalk' ;
8+ import { blue , yellow } from 'chalk' ;
99import { UX } from '@salesforce/command' ;
1010import { Logger , Messages } from '@salesforce/core' ;
1111import { get , getString , getNumber } from '@salesforce/ts-types' ;
1212import { RetrieveResult , MetadataApiRetrieveStatus } from '@salesforce/source-deploy-retrieve' ;
13- import { FileResponse , RequestStatus , RetrieveMessage } from '@salesforce/source-deploy-retrieve/lib/src/client/types' ;
13+ import {
14+ ComponentStatus ,
15+ FileResponse ,
16+ RequestStatus ,
17+ RetrieveMessage ,
18+ } from '@salesforce/source-deploy-retrieve/lib/src/client/types' ;
1419import { ResultFormatter , ResultFormatterOptions } from './resultFormatter' ;
1520
1621Messages . importMessagesDirectory ( __dirname ) ;
@@ -31,11 +36,14 @@ export interface RetrieveCommandResult {
3136export class RetrieveResultFormatter extends ResultFormatter {
3237 protected result : RetrieveResult ;
3338 protected fileResponses : FileResponse [ ] ;
39+ protected warnings : RetrieveMessage [ ] ;
3440
3541 public constructor ( logger : Logger , ux : UX , options : ResultFormatterOptions , result : RetrieveResult ) {
3642 super ( logger , ux , options ) ;
3743 this . result = result ;
3844 this . fileResponses = result ?. getFileResponses ? result . getFileResponses ( ) : [ ] ;
45+ const warnMessages = get ( result , 'response.messages' , [ ] ) as RetrieveMessage | RetrieveMessage [ ] ;
46+ this . warnings = Array . isArray ( warnMessages ) ? warnMessages : [ warnMessages ] ;
3947 }
4048
4149 /**
@@ -44,12 +52,10 @@ export class RetrieveResultFormatter extends ResultFormatter {
4452 * @returns RetrieveCommandResult
4553 */
4654 public getJson ( ) : RetrieveCommandResult {
47- const warnMessages = get ( this . result , 'response.messages' , [ ] ) ;
48- const warnings = Array . isArray ( warnMessages ) ? warnMessages : [ warnMessages ] ;
4955 return {
5056 inboundFiles : this . fileResponses ,
5157 packages : [ ] ,
52- warnings,
58+ warnings : this . warnings ,
5359 response : this . result . response ,
5460 } ;
5561 }
@@ -64,34 +70,21 @@ export class RetrieveResultFormatter extends ResultFormatter {
6470 return ;
6571 }
6672
67- this . ux . styledHeader ( blue ( messages . getMessage ( 'retrievedSourceHeader' ) ) ) ;
6873 if ( this . isSuccess ( ) ) {
69- if ( this . fileResponses ?. length ) {
70- this . sortFileResponses ( this . fileResponses ) ;
71- this . asRelativePaths ( this . fileResponses ) ;
72- const columns = [
73- { key : 'fullName' , label : 'FULL NAME' } ,
74- { key : 'type' , label : 'TYPE' } ,
75- { key : 'filePath' , label : 'PROJECT PATH' } ,
76- ] ;
77- this . ux . table ( this . fileResponses , { columns } ) ;
74+ if ( this . warnings . length ) {
75+ this . displayWarnings ( ) ;
76+ }
77+ this . ux . styledHeader ( blue ( messages . getMessage ( 'retrievedSourceHeader' ) ) ) ;
78+ const retrievedFiles = this . fileResponses . filter ( ( fr ) => fr . state !== ComponentStatus . Failed ) ;
79+ if ( retrievedFiles ?. length ) {
80+ this . displaySuccesses ( retrievedFiles ) ;
7881 } else {
7982 this . ux . log ( messages . getMessage ( 'NoResultsFound' ) ) ;
8083 }
8184 } else {
82- const unknownMsg : RetrieveMessage [ ] = [ { fileName : 'unknown' , problem : 'unknown' } ] ;
83- const responseMsgs = get ( this . result , 'response.messages' , unknownMsg ) as RetrieveMessage | RetrieveMessage [ ] ;
84- const errMsgs = Array . isArray ( responseMsgs ) ? responseMsgs : [ responseMsgs ] ;
85- const errMsgsForDisplay = errMsgs . reduce < string > ( ( p , c ) => `${ p } \n${ c . fileName } : ${ c . problem } ` , '' ) ;
86- this . ux . log ( `Retrieve Failed due to: ${ errMsgsForDisplay } ` ) ;
85+ this . displayErrors ( ) ;
8786 }
8887
89- // if (results.status === 'SucceededPartial' && results.successes.length && results.failures.length) {
90- // this.ux.log('');
91- // this.ux.styledHeader(yellow(messages.getMessage('metadataNotFoundWarning')));
92- // results.failures.forEach((warning) => this.ux.log(warning.message));
93- // }
94-
9588 // Display any package retrievals
9689 // if (results.packages && results.packages.length) {
9790 // this.logger.styledHeader(this.logger.color.blue('Retrieved Packages'));
@@ -109,4 +102,33 @@ export class RetrieveResultFormatter extends ResultFormatter {
109102 protected hasComponents ( ) : boolean {
110103 return getNumber ( this . result , 'components.size' , 0 ) === 0 ;
111104 }
105+
106+ private displayWarnings ( ) : void {
107+ this . ux . styledHeader ( yellow ( messages . getMessage ( 'retrievedSourceWarningsHeader' ) ) ) ;
108+ const columns = [
109+ { key : 'fileName' , label : 'FILE NAME' } ,
110+ { key : 'problem' , label : 'PROBLEM' } ,
111+ ] ;
112+ this . ux . table ( this . warnings , { columns } ) ;
113+ this . ux . log ( ) ;
114+ }
115+
116+ private displaySuccesses ( retrievedFiles : FileResponse [ ] ) : void {
117+ this . sortFileResponses ( retrievedFiles ) ;
118+ this . asRelativePaths ( retrievedFiles ) ;
119+ const columns = [
120+ { key : 'fullName' , label : 'FULL NAME' } ,
121+ { key : 'type' , label : 'TYPE' } ,
122+ { key : 'filePath' , label : 'PROJECT PATH' } ,
123+ ] ;
124+ this . ux . table ( retrievedFiles , { columns } ) ;
125+ }
126+
127+ private displayErrors ( ) : void {
128+ const unknownMsg : RetrieveMessage [ ] = [ { fileName : 'unknown' , problem : 'unknown' } ] ;
129+ const responseMsgs = get ( this . result , 'response.messages' , unknownMsg ) as RetrieveMessage | RetrieveMessage [ ] ;
130+ const errMsgs = Array . isArray ( responseMsgs ) ? responseMsgs : [ responseMsgs ] ;
131+ const errMsgsForDisplay = errMsgs . reduce < string > ( ( p , c ) => `${ p } \n${ c . fileName } : ${ c . problem } ` , '' ) ;
132+ this . ux . log ( `Retrieve Failed due to: ${ errMsgsForDisplay } ` ) ;
133+ }
112134}
0 commit comments