6
6
*/
7
7
8
8
import { Flags , loglevel , orgApiVersionFlagWithDeprecations , SfCommand } from '@salesforce/sf-plugins-core' ;
9
- import { Messages } from '@salesforce/core' ;
10
- import { PackageVersion , PackageVersionCreateRequestResult } from '@salesforce/packaging' ;
9
+ import { Connection , Messages } from '@salesforce/core' ;
10
+ import { PackageVersion , PackageVersionCreateRequestResult , getPackageVersionNumber } from '@salesforce/packaging' ;
11
11
import * as chalk from 'chalk' ;
12
12
import { requiredHubFlag } from '../../../../utils/hubFlag' ;
13
13
14
14
Messages . importMessagesDirectory ( __dirname ) ;
15
15
const messages = Messages . loadMessages ( '@salesforce/plugin-packaging' , 'package_version_create_list' ) ;
16
16
const packaging = Messages . loadMessages ( '@salesforce/plugin-packaging' , 'packaging' ) ;
17
17
18
- export type CreateListCommandResult = PackageVersionCreateRequestResult [ ] ;
18
+ export type CreateListCommandResult = Array <
19
+ PackageVersionCreateRequestResult & {
20
+ VersionName ?: string ;
21
+ VersionNumber ?: string ;
22
+ }
23
+ > ;
24
+
25
+ type ColumnDataHeader = {
26
+ header ?: string ;
27
+ } ;
28
+ type ColumnData = {
29
+ Id : ColumnDataHeader ;
30
+ Status : ColumnDataHeader ;
31
+ Package2Id : ColumnDataHeader ;
32
+ Package2VersionId : ColumnDataHeader ;
33
+ SubscriberPackageVersionId : ColumnDataHeader ;
34
+ Tag : ColumnDataHeader ;
35
+ Branch : ColumnDataHeader ;
36
+ CreatedDate : ColumnDataHeader ;
37
+ CreatedBy : ColumnDataHeader ;
38
+ VersionName ?: ColumnDataHeader ;
39
+ VersionNumber ?: ColumnDataHeader ;
40
+ } ;
19
41
20
42
type Status = 'Queued' | 'InProgress' | 'Success' | 'Error' ;
21
43
@@ -41,21 +63,26 @@ export class PackageVersionCreateListCommand extends SfCommand<CreateListCommand
41
63
char : 's' ,
42
64
summary : messages . getMessage ( 'flags.status.summary' ) ,
43
65
} ) ,
66
+ verbose : Flags . boolean ( {
67
+ summary : messages . getMessage ( 'flags.verbose.summary' ) ,
68
+ } ) ,
44
69
} ;
45
70
71
+ private connection ! : Connection ;
72
+
46
73
public async run ( ) : Promise < CreateListCommandResult > {
47
74
const { flags } = await this . parse ( PackageVersionCreateListCommand ) ;
48
- const connection = flags [ 'target-dev-hub' ] . getConnection ( flags [ 'api-version' ] ) ;
49
- const results = await PackageVersion . getPackageVersionCreateRequests ( connection , {
75
+ this . connection = flags [ 'target-dev-hub' ] . getConnection ( flags [ 'api-version' ] ) ;
76
+ let results = ( await PackageVersion . getPackageVersionCreateRequests ( this . connection , {
50
77
createdlastdays : flags [ 'created-last-days' ] ,
51
78
status : flags . status ,
52
- } ) ;
79
+ } ) ) as CreateListCommandResult ;
53
80
54
81
if ( results . length === 0 ) {
55
82
this . warn ( 'No results found' ) ;
56
83
} else {
57
84
this . styledHeader ( chalk . blue ( `Package Version Create Requests [${ results . length } ]` ) ) ;
58
- const columnData = {
85
+ const columnData : ColumnData = {
59
86
Id : { } ,
60
87
Status : {
61
88
header : messages . getMessage ( 'status' ) ,
@@ -80,9 +107,53 @@ export class PackageVersionCreateListCommand extends SfCommand<CreateListCommand
80
107
header : messages . getMessage ( 'createdBy' ) ,
81
108
} ,
82
109
} ;
110
+ if ( flags . verbose ) {
111
+ try {
112
+ results = await this . fetchVerboseData ( results ) ;
113
+ columnData . VersionName = { header : 'Version Name' } ;
114
+ columnData . VersionNumber = { header : 'Version Number' } ;
115
+ } catch ( err ) {
116
+ const errMsg = typeof err === 'string' ? err : err instanceof Error ? err . message : 'unknown error' ;
117
+ this . warn ( `error when retrieving verbose data (package name and version) due to: ${ errMsg } ` ) ;
118
+ }
119
+ }
83
120
this . table ( results , columnData , { 'no-truncate' : true } ) ;
84
121
}
85
122
86
123
return results ;
87
124
}
125
+
126
+ // Queries Package2Version for the name and version number of the packages and adds that data
127
+ // to the results.
128
+ private async fetchVerboseData ( results : CreateListCommandResult ) : Promise < CreateListCommandResult > {
129
+ type VersionDataMap = {
130
+ [ id : string ] : { name : string ; version : string } ;
131
+ } ;
132
+ // Query for the version name and number data
133
+ const versionData = await PackageVersion . queryPackage2Version ( this . connection , {
134
+ fields : [ 'Id' , 'Name' , 'MajorVersion' , 'MinorVersion' , 'PatchVersion' , 'BuildNumber' ] ,
135
+ whereClause : "WHERE Id IN ('%IDS%')" ,
136
+ whereClauseItems : results . map ( ( pvcrr ) => pvcrr . Package2VersionId ) . filter ( Boolean ) ,
137
+ } ) ;
138
+
139
+ const vDataMap : VersionDataMap = { } ;
140
+ versionData . map ( ( vData ) => {
141
+ if ( vData ) {
142
+ const version = getPackageVersionNumber ( vData , true ) ;
143
+ vDataMap [ vData . Id ] = { name : vData . Name , version } ;
144
+ }
145
+ } ) ;
146
+
147
+ return results . map ( ( pvcrr ) => {
148
+ if ( vDataMap [ pvcrr . Package2VersionId ] ) {
149
+ return {
150
+ ...pvcrr ,
151
+ ...{
152
+ VersionName : vDataMap [ pvcrr . Package2VersionId ] . name ,
153
+ VersionNumber : vDataMap [ pvcrr . Package2VersionId ] . version ,
154
+ } ,
155
+ } ;
156
+ } else return pvcrr ;
157
+ } ) ;
158
+ }
88
159
}
0 commit comments