8
8
import { SfCommand , Flags } from '@salesforce/sf-plugins-core' ;
9
9
import { Messages , PollingClient , SfError , StatusResult } from '@salesforce/core' ;
10
10
import { Duration } from '@salesforce/kit' ;
11
- import { initiateDataSeed , pollSeedStatus , PollSeedResponse } from '../../utils/api.js'
12
- import { getSeedGenerateMso } from '../../utils/mso.js' ;
11
+ import { initiateDataSeed , pollSeedStatus , PollSeedResponse } from '../../utils/api.js' ;
12
+ import { getSeedGenerateMso , getSeedGenerateStage as getStage } from '../../utils/mso.js' ;
13
+ import { DataSeedingGenerateResult } from '../../utils/types.js' ;
13
14
14
15
Messages . importMessagesDirectoryFromMetaUrl ( import . meta. url ) ;
15
16
const messages = Messages . loadMessages ( '@salesforce/plugin-data-seeding' , 'data-seeding.generate' ) ;
16
-
17
- export type DataSeedingGenerateResult = {
18
- dataSeedingJob : string ;
19
- jobId : string ;
20
- startTime ?: string ;
21
- endTime ?: string ;
22
- sourceOrg : string ;
23
- targetOrg : string ;
24
- status ?: string ;
25
- } ;
26
17
export default class DataSeedingGenerate extends SfCommand < DataSeedingGenerateResult > {
27
18
public static readonly summary = messages . getMessage ( 'summary' ) ;
28
19
public static readonly description = messages . getMessage ( 'description' ) ;
@@ -62,18 +53,22 @@ export default class DataSeedingGenerate extends SfCommand<DataSeedingGenerateRe
62
53
63
54
public async run ( ) : Promise < DataSeedingGenerateResult > {
64
55
const { flags } = await this . parse ( DataSeedingGenerate ) ;
65
- const {
66
- async,
67
- 'config-file' : configFile ,
68
- 'source-org' : sourceOrg ,
69
- 'target-org' : targetOrg ,
70
- wait
71
- } = flags ;
56
+ const { async, 'config-file' : configFile , 'source-org' : sourceOrg , 'target-org' : targetOrg , wait } = flags ;
72
57
73
58
const { request_id : jobId } = await initiateDataSeed ( configFile ) ;
74
59
75
60
if ( ! jobId ) throw new Error ( 'Failed to receive job id' ) ;
76
61
62
+ const buildResponse = ( response : PollSeedResponse ) : DataSeedingGenerateResult => ( {
63
+ dataSeedingJob : 'generate' ,
64
+ jobId,
65
+ startTime : response ?. execution_start_time ,
66
+ endTime : response ?. execution_end_time ,
67
+ sourceOrg,
68
+ targetOrg,
69
+ status : response . status ,
70
+ } ) ;
71
+
77
72
// TODO: Cache the jobId so that it can be used by the `--use-most-recent` flag
78
73
79
74
if ( wait && ! async ) {
@@ -83,57 +78,45 @@ export default class DataSeedingGenerate extends SfCommand<DataSeedingGenerateRe
83
78
const options : PollingClient . Options = {
84
79
poll : async ( ) : Promise < StatusResult > => {
85
80
const response = await pollSeedStatus ( jobId ) ;
86
- mso . goto ( response . step ) ;
87
81
88
- mso . updateData ( {
82
+ mso . goto ( getStage ( response . step ) , {
89
83
startTime : response . execution_start_time ,
90
84
endTime : response . execution_end_time ,
91
- status : response . status
92
- } )
93
-
94
- const completed = response . status === 'Completed'
95
- const failed = response . status === 'Failed' ;
96
-
97
- if ( completed ) mso . stop ( ) ;
98
- if ( failed ) {
99
- const err = new SfError ( `Data seeding job failed on step: ${ response . step } \nLog Text: ${ response . log_text } ` ) ;
100
- mso . stop ( err ) ;
101
- throw err ;
102
- }
85
+ status : response . status ,
86
+ } ) ;
103
87
104
88
return {
105
- completed : completed || failed ,
89
+ completed : response . status === 'Completed' || response . status === 'Failed' ,
106
90
payload : response ,
107
91
} ;
108
92
} ,
109
93
frequency : Duration . seconds ( 1 ) ,
110
- timeout : wait
94
+ timeout : wait ,
111
95
} ;
112
96
113
97
try {
114
98
const client = await PollingClient . create ( options ) ;
115
99
const pollResult : PollSeedResponse = await client . subscribe ( ) ;
116
100
117
- return {
118
- dataSeedingJob : 'generate' ,
119
- jobId,
120
- startTime : pollResult ?. execution_start_time ,
121
- endTime : pollResult ?. execution_end_time ,
122
- sourceOrg,
123
- targetOrg,
124
- status : pollResult . status
101
+ if ( pollResult . status === 'Failed' ) {
102
+ mso . error ( ) ;
103
+ throw new SfError ( `Data seeding job failed on step: ${ pollResult . step } \nLog Text: ${ pollResult . log_text } ` ) ;
104
+ } else {
105
+ mso . stop ( ) ;
125
106
}
107
+
108
+ return buildResponse ( pollResult ) ;
126
109
} catch ( e ) {
127
110
const err = SfError . wrap ( e as Error ) ;
128
111
129
112
if ( err . message . includes ( 'The client has timed out' ) ) {
130
113
mso . updateData ( { status : 'Client Timeout' } ) ;
131
-
132
114
err . actions = [
133
115
'- Increase the value of the "--wait" flag' ,
134
- `- Check the status with: sf data-seeding report -i ${ jobId } `
116
+ `- Check the status with: sf data-seeding report -i ${ jobId } ` ,
135
117
] ;
136
118
}
119
+
137
120
mso . stop ( ) ;
138
121
throw err ;
139
122
}
@@ -143,33 +126,21 @@ export default class DataSeedingGenerate extends SfCommand<DataSeedingGenerateRe
143
126
const mso = getSeedGenerateMso ( {
144
127
jsonEnabled : this . jsonEnabled ( ) ,
145
128
showElapsedTime : false ,
146
- showStageTime : false
129
+ showStageTime : false ,
147
130
} ) ;
148
131
149
- mso . goto ( response . step ) ;
150
-
151
- mso . updateData ( {
132
+ mso . goto ( getStage ( response . step ) , {
152
133
jobId,
153
134
sourceOrg,
154
135
targetOrg,
155
136
startTime : response . execution_start_time ,
156
- status : 'Initiated'
157
- } )
137
+ status : 'Initiated' ,
138
+ } ) ;
158
139
159
140
mso . stop ( ) ;
160
-
161
- this . log ( 'Data seeding process has been initiated\n' ) ;
162
141
this . log ( `- Check the status with: sf data-seeding report -i ${ jobId } ` ) ;
163
142
164
- return {
165
- dataSeedingJob : 'generate' ,
166
- jobId,
167
- startTime : response ?. execution_start_time ,
168
- endTime : response ?. execution_end_time ,
169
- sourceOrg,
170
- targetOrg,
171
- status : response . status
172
- } ;
143
+ return buildResponse ( response ) ;
173
144
}
174
145
}
175
146
}
0 commit comments