@@ -6,24 +6,51 @@ import { choosePackage } from './package';
6
6
import { compare } from 'compare-versions' ;
7
7
import { depVersions } from './utils/dep-versions' ;
8
8
import { getCommitInfo } from './utils/git' ;
9
- import { Platform } from 'types' ;
9
+ import type { Platform } from 'types' ;
10
+
11
+ interface Package {
12
+ id : string ;
13
+ name : string ;
14
+ }
15
+
16
+ interface Version {
17
+ id : string ;
18
+ hash : string ;
19
+ name : string ;
20
+ packages ?: Package [ ] ;
21
+ }
22
+
23
+ interface CommandOptions {
24
+ name ?: string ;
25
+ description ?: string ;
26
+ metaInfo ?: string ;
27
+ platform ?: Platform ;
28
+ versionId ?: string ;
29
+ packageId ?: string ;
30
+ packageVersion ?: string ;
31
+ minPackageVersion ?: string ;
32
+ maxPackageVersion ?: string ;
33
+ rollout ?: string ;
34
+ }
10
35
11
36
async function showVersion ( appId : string , offset : number ) {
12
37
const { data, count } = await get ( `/app/${ appId } /version/list` ) ;
13
38
console . log ( `Offset ${ offset } ` ) ;
14
39
for ( const version of data ) {
15
- let packageInfo = version . packages
16
- . slice ( 0 , 3 )
17
- . map ( ( v ) => v . name )
18
- . join ( ', ' ) ;
19
- const pkgCount = version . packages . length ;
20
- if ( pkgCount > 3 ) {
21
- packageInfo += `...and ${ pkgCount - 3 } more` ;
22
- }
40
+ const pkgCount = version . packages ?. length || 0 ;
41
+ let packageInfo = '' ;
23
42
if ( pkgCount === 0 ) {
24
43
packageInfo = 'no package' ;
25
44
} else {
26
- packageInfo = `[${ packageInfo } ]` ;
45
+ packageInfo = version . packages
46
+ ?. slice ( 0 , 3 )
47
+ . map ( ( pkg : Package ) => pkg . name )
48
+ . join ( ', ' ) ;
49
+ if ( pkgCount > 3 ) {
50
+ packageInfo += `...and ${ pkgCount - 3 } more` ;
51
+ } else {
52
+ packageInfo = `[${ packageInfo } ]` ;
53
+ }
27
54
}
28
55
console . log (
29
56
`${ version . id } ) ${ version . hash . slice ( 0 , 8 ) } ${
@@ -73,7 +100,10 @@ async function chooseVersion(appId: string) {
73
100
offset = 0 ;
74
101
break ;
75
102
default : {
76
- const v = data . find ( ( v ) => v . id === ( cmd | 0 ) ) ;
103
+ const versionId = Number . parseInt ( cmd , 10 ) ;
104
+ const v = data . find (
105
+ ( version : Version ) => version . id === String ( versionId ) ,
106
+ ) ;
77
107
if ( v ) {
78
108
return v ;
79
109
}
@@ -83,12 +113,13 @@ async function chooseVersion(appId: string) {
83
113
}
84
114
85
115
export const commands = {
86
- publish : async function ( { args, options } : { args : string [ ] ; options : {
87
- name : string ;
88
- description ?: string ;
89
- metaInfo ?: string ;
90
- platform ?: Platform ;
91
- } } ) {
116
+ publish : async function ( {
117
+ args,
118
+ options,
119
+ } : {
120
+ args : string [ ] ;
121
+ options : CommandOptions ;
122
+ } ) {
92
123
const fn = args [ 0 ] ;
93
124
const { name, description, metaInfo } = options ;
94
125
@@ -99,7 +130,8 @@ export const commands = {
99
130
}
100
131
101
132
const platform = checkPlatform (
102
- options . platform || ( await question ( '平台(ios/android/harmony):' ) ) ,
133
+ options . platform ||
134
+ ( ( await question ( '平台(ios/android/harmony):' ) ) as Platform ) ,
103
135
) ;
104
136
const { appId } = await getSelectedApp ( platform ) ;
105
137
@@ -125,49 +157,59 @@ export const commands = {
125
157
}
126
158
return versionName ;
127
159
} ,
128
- versions : async ( { options } ) => {
160
+ versions : async ( { options } : { options : CommandOptions } ) => {
129
161
const platform = checkPlatform (
130
- options . platform || ( await question ( '平台(ios/android/harmony):' ) ) ,
162
+ options . platform ||
163
+ ( ( await question ( '平台(ios/android/harmony):' ) ) as Platform ) ,
131
164
) ;
132
165
const { appId } = await getSelectedApp ( platform ) ;
133
166
await listVersions ( appId ) ;
134
167
} ,
135
- update : async ( { args, options } ) => {
168
+ update : async ( {
169
+ args,
170
+ options,
171
+ } : {
172
+ args : string [ ] ;
173
+ options : CommandOptions ;
174
+ } ) => {
136
175
const platform = checkPlatform (
137
- options . platform || ( await question ( '平台(ios/android/harmony):' ) ) ,
176
+ options . platform ||
177
+ ( ( await question ( '平台(ios/android/harmony):' ) ) as Platform ) ,
138
178
) ;
139
179
const { appId } = await getSelectedApp ( platform ) ;
140
180
let versionId = options . versionId || ( await chooseVersion ( appId ) ) . id ;
141
181
if ( versionId === 'null' ) {
142
- versionId = null ;
182
+ versionId = undefined ;
143
183
}
144
184
145
185
let pkgId : string | undefined ;
146
186
let pkgVersion = options . packageVersion ;
147
187
let minPkgVersion = options . minPackageVersion ;
148
188
let maxPkgVersion = options . maxPackageVersion ;
149
- let rollout = options . rollout ;
150
- if ( rollout === undefined ) {
151
- rollout = null ;
152
- } else {
189
+ let rollout : number | undefined = undefined ;
190
+
191
+ if ( options . rollout !== undefined ) {
153
192
try {
154
- rollout = Number . parseInt ( rollout ) ;
193
+ rollout = Number . parseInt ( options . rollout ) ;
155
194
} catch ( e ) {
156
195
throw new Error ( 'rollout 必须是 1-100 的整数' ) ;
157
196
}
158
197
if ( rollout < 1 || rollout > 100 ) {
159
198
throw new Error ( 'rollout 必须是 1-100 的整数' ) ;
160
199
}
161
200
}
201
+
162
202
if ( minPkgVersion ) {
163
203
minPkgVersion = String ( minPkgVersion ) . trim ( ) ;
164
204
const { data } = await get ( `/app/${ appId } /package/list?limit=1000` ) ;
165
- const pkgs = data . filter ( ( d ) => compare ( d . name , minPkgVersion , '>=' ) ) ;
205
+ const pkgs = data . filter ( ( pkg : Package ) =>
206
+ compare ( pkg . name , minPkgVersion , '>=' ) ,
207
+ ) ;
166
208
if ( pkgs . length === 0 ) {
167
209
throw new Error ( `未查询到 >= ${ minPkgVersion } 的原生版本` ) ;
168
210
}
169
- if ( rollout ) {
170
- const rolloutConfig = { } ;
211
+ if ( rollout !== undefined ) {
212
+ const rolloutConfig : Record < string , number > = { } ;
171
213
for ( const pkg of pkgs ) {
172
214
rolloutConfig [ pkg . name ] = rollout ;
173
215
}
@@ -178,7 +220,7 @@ export const commands = {
178
220
} ) ;
179
221
console . log (
180
222
`已在原生版本 ${ pkgs
181
- . map ( ( p ) => p . name )
223
+ . map ( ( pkg : Package ) => pkg . name )
182
224
. join ( ', ' ) } 上设置灰度发布 ${ rollout } % 热更版本 ${ versionId } `,
183
225
) ;
184
226
}
@@ -196,12 +238,14 @@ export const commands = {
196
238
if ( maxPkgVersion ) {
197
239
maxPkgVersion = String ( maxPkgVersion ) . trim ( ) ;
198
240
const { data } = await get ( `/app/${ appId } /package/list?limit=1000` ) ;
199
- const pkgs = data . filter ( ( d ) => compare ( d . name , maxPkgVersion , '<=' ) ) ;
241
+ const pkgs = data . filter ( ( pkg : Package ) =>
242
+ compare ( pkg . name , maxPkgVersion , '<=' ) ,
243
+ ) ;
200
244
if ( pkgs . length === 0 ) {
201
245
throw new Error ( `未查询到 <= ${ maxPkgVersion } 的原生版本` ) ;
202
246
}
203
- if ( rollout ) {
204
- const rolloutConfig = { } ;
247
+ if ( rollout !== undefined ) {
248
+ const rolloutConfig : Record < string , number > = { } ;
205
249
for ( const pkg of pkgs ) {
206
250
rolloutConfig [ pkg . name ] = rollout ;
207
251
}
@@ -212,7 +256,7 @@ export const commands = {
212
256
} ) ;
213
257
console . log (
214
258
`已在原生版本 ${ pkgs
215
- . map ( ( p ) => p . name )
259
+ . map ( ( pkg : Package ) => pkg . name )
216
260
. join ( ', ' ) } 上设置灰度发布 ${ rollout } % 热更版本 ${ versionId } `,
217
261
) ;
218
262
}
@@ -231,7 +275,7 @@ export const commands = {
231
275
const { data } = await get ( `/app/${ appId } /package/list?limit=1000` ) ;
232
276
if ( pkgVersion ) {
233
277
pkgVersion = pkgVersion . trim ( ) ;
234
- const pkg = data . find ( ( d ) => d . name === pkgVersion ) ;
278
+ const pkg = data . find ( ( pkg : Package ) => pkg . name === pkgVersion ) ;
235
279
if ( pkg ) {
236
280
pkgId = pkg . id ;
237
281
} else {
@@ -247,13 +291,13 @@ export const commands = {
247
291
}
248
292
249
293
if ( ! pkgVersion ) {
250
- const pkg = data . find ( ( d ) => String ( d . id ) === String ( pkgId ) ) ;
294
+ const pkg = data . find ( ( pkg : Package ) => String ( pkg . id ) === String ( pkgId ) ) ;
251
295
if ( pkg ) {
252
296
pkgVersion = pkg . name ;
253
297
}
254
298
}
255
299
256
- if ( rollout ) {
300
+ if ( rollout !== undefined && pkgVersion ) {
257
301
await put ( `/app/${ appId } /version/${ versionId } ` , {
258
302
config : {
259
303
rollout : {
@@ -265,24 +309,35 @@ export const commands = {
265
309
`已将在原生版本 ${ pkgVersion } (id: ${ pkgId } ) 上设置灰度发布 ${ rollout } % 热更版本 ${ versionId } ` ,
266
310
) ;
267
311
}
268
- await put ( `/app/${ appId } /package/${ pkgId } ` , {
269
- versionId,
270
- } ) ;
271
- console . log (
272
- `已将热更版本 ${ versionId } 绑定到原生版本 ${ pkgVersion } (id: ${ pkgId } )` ,
273
- ) ;
312
+
313
+ if ( versionId !== undefined ) {
314
+ await put ( `/app/${ appId } /package/${ pkgId } ` , {
315
+ versionId,
316
+ } ) ;
317
+ console . log (
318
+ `已将热更版本 ${ versionId } 绑定到原生版本 ${ pkgVersion } (id: ${ pkgId } )` ,
319
+ ) ;
320
+ }
274
321
} ,
275
- updateVersionInfo : async ( { args, options } ) => {
322
+ updateVersionInfo : async ( {
323
+ args,
324
+ options,
325
+ } : {
326
+ args : string [ ] ;
327
+ options : CommandOptions ;
328
+ } ) => {
276
329
const platform = checkPlatform (
277
- options . platform || ( await question ( '平台(ios/android/harmony):' ) ) ,
330
+ options . platform ||
331
+ ( ( await question ( '平台(ios/android/harmony):' ) ) as Platform ) ,
278
332
) ;
279
333
const { appId } = await getSelectedApp ( platform ) ;
280
334
const versionId = options . versionId || ( await chooseVersion ( appId ) ) . id ;
281
335
282
- const updateParams = { } ;
283
- options . name && ( updateParams . name = options . name ) ;
284
- options . description && ( updateParams . description = options . description ) ;
285
- options . metaInfo && ( updateParams . metaInfo = options . metaInfo ) ;
336
+ const updateParams : Record < string , string > = { } ;
337
+ if ( options . name ) updateParams . name = options . name ;
338
+ if ( options . description ) updateParams . description = options . description ;
339
+ if ( options . metaInfo ) updateParams . metaInfo = options . metaInfo ;
340
+
286
341
await put ( `/app/${ appId } /version/${ versionId } ` , updateParams ) ;
287
342
console . log ( '操作成功' ) ;
288
343
} ,
0 commit comments