7
7
8
8
import { blue , yellow } from 'chalk' ;
9
9
import { UX } from '@salesforce/command' ;
10
- import { Logger , Messages } from '@salesforce/core' ;
10
+ import { Logger , Messages , SfdxError } from '@salesforce/core' ;
11
11
import { get , getString , getNumber } from '@salesforce/ts-types' ;
12
12
import { RetrieveResult , MetadataApiRetrieveStatus } from '@salesforce/source-deploy-retrieve' ;
13
13
import {
@@ -26,6 +26,10 @@ export interface PackageRetrieval {
26
26
path : string ;
27
27
}
28
28
29
+ export interface RetrieveResultFormatterOptions extends ResultFormatterOptions {
30
+ packages ?: PackageRetrieval [ ] ;
31
+ }
32
+
29
33
export interface RetrieveCommandResult {
30
34
inboundFiles : FileResponse [ ] ;
31
35
packages : PackageRetrieval [ ] ;
@@ -34,16 +38,20 @@ export interface RetrieveCommandResult {
34
38
}
35
39
36
40
export class RetrieveResultFormatter extends ResultFormatter {
41
+ protected packages : PackageRetrieval [ ] = [ ] ;
37
42
protected result : RetrieveResult ;
38
43
protected fileResponses : FileResponse [ ] ;
39
44
protected warnings : RetrieveMessage [ ] ;
40
45
41
- public constructor ( logger : Logger , ux : UX , options : ResultFormatterOptions , result : RetrieveResult ) {
46
+ public constructor ( logger : Logger , ux : UX , options : RetrieveResultFormatterOptions , result : RetrieveResult ) {
42
47
super ( logger , ux , options ) ;
43
48
this . result = result ;
44
49
this . fileResponses = result ?. getFileResponses ? result . getFileResponses ( ) : [ ] ;
45
50
const warnMessages = get ( result , 'response.messages' , [ ] ) as RetrieveMessage | RetrieveMessage [ ] ;
46
51
this . warnings = Array . isArray ( warnMessages ) ? warnMessages : [ warnMessages ] ;
52
+ this . packages = options . packages || [ ] ;
53
+ // zipFile can become massive and unweildy with JSON parsing/terminal output and, isn't useful
54
+ delete this . result . response . zipFile ;
47
55
}
48
56
49
57
/**
@@ -54,7 +62,7 @@ export class RetrieveResultFormatter extends ResultFormatter {
54
62
public getJson ( ) : RetrieveCommandResult {
55
63
return {
56
64
inboundFiles : this . fileResponses ,
57
- packages : [ ] ,
65
+ packages : this . packages ,
58
66
warnings : this . warnings ,
59
67
response : this . result . response ,
60
68
} ;
@@ -71,28 +79,28 @@ export class RetrieveResultFormatter extends ResultFormatter {
71
79
}
72
80
73
81
if ( this . isSuccess ( ) ) {
74
- if ( this . warnings . length ) {
75
- this . displayWarnings ( ) ;
76
- }
77
82
this . ux . styledHeader ( blue ( messages . getMessage ( 'retrievedSourceHeader' ) ) ) ;
78
83
const retrievedFiles = this . fileResponses . filter ( ( fr ) => fr . state !== ComponentStatus . Failed ) ;
79
84
if ( retrievedFiles ?. length ) {
80
85
this . displaySuccesses ( retrievedFiles ) ;
81
86
} else {
82
87
this . ux . log ( messages . getMessage ( 'NoResultsFound' ) ) ;
83
88
}
89
+ if ( this . warnings . length ) {
90
+ this . displayWarnings ( ) ;
91
+ }
84
92
} else {
85
93
this . displayErrors ( ) ;
86
94
}
87
95
88
96
// Display any package retrievals
89
- // if (results .packages && results .packages.length) {
90
- // this.logger .styledHeader(this.logger.color. blue('Retrieved Packages'));
91
- // results .packages.forEach(pkg => {
92
- // this.logger .log(`${pkg.name} package converted and retrieved to: ${pkg.path}`);
93
- // });
94
- // this.logger .log('');
95
- // }
97
+ if ( this . packages && this . packages . length ) {
98
+ this . ux . styledHeader ( blue ( 'Retrieved Packages' ) ) ;
99
+ this . packages . forEach ( ( pkg ) => {
100
+ this . ux . log ( `${ pkg . name } package converted and retrieved to: ${ pkg . path } ` ) ;
101
+ } ) ;
102
+ this . ux . log ( '' ) ;
103
+ }
96
104
}
97
105
98
106
protected hasStatus ( status : RequestStatus ) : boolean {
@@ -125,6 +133,11 @@ export class RetrieveResultFormatter extends ResultFormatter {
125
133
}
126
134
127
135
private displayErrors ( ) : void {
136
+ // an invalid packagename retrieval will end up with a message in the `errorMessage` entry
137
+ const errorMessage = get ( this . result . response , 'errorMessage' ) as string ;
138
+ if ( errorMessage ) {
139
+ throw new SfdxError ( errorMessage ) ;
140
+ }
128
141
const unknownMsg : RetrieveMessage [ ] = [ { fileName : 'unknown' , problem : 'unknown' } ] ;
129
142
const responseMsgs = get ( this . result , 'response.messages' , unknownMsg ) as RetrieveMessage | RetrieveMessage [ ] ;
130
143
const errMsgs = Array . isArray ( responseMsgs ) ? responseMsgs : [ responseMsgs ] ;
0 commit comments