@@ -6,24 +6,51 @@ import { choosePackage } from './package';
66import { compare } from 'compare-versions' ;
77import { depVersions } from './utils/dep-versions' ;
88import { 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+ }
1035
1136async function showVersion ( appId : string , offset : number ) {
1237 const { data, count } = await get ( `/app/${ appId } /version/list` ) ;
1338 console . log ( `Offset ${ offset } ` ) ;
1439 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 = '' ;
2342 if ( pkgCount === 0 ) {
2443 packageInfo = 'no package' ;
2544 } 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+ }
2754 }
2855 console . log (
2956 `${ version . id } ) ${ version . hash . slice ( 0 , 8 ) } ${
@@ -73,7 +100,10 @@ async function chooseVersion(appId: string) {
73100 offset = 0 ;
74101 break ;
75102 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+ ) ;
77107 if ( v ) {
78108 return v ;
79109 }
@@ -83,12 +113,13 @@ async function chooseVersion(appId: string) {
83113}
84114
85115export 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+ } ) {
92123 const fn = args [ 0 ] ;
93124 const { name, description, metaInfo } = options ;
94125
@@ -99,7 +130,8 @@ export const commands = {
99130 }
100131
101132 const platform = checkPlatform (
102- options . platform || ( await question ( '平台(ios/android/harmony):' ) ) ,
133+ options . platform ||
134+ ( ( await question ( '平台(ios/android/harmony):' ) ) as Platform ) ,
103135 ) ;
104136 const { appId } = await getSelectedApp ( platform ) ;
105137
@@ -125,49 +157,59 @@ export const commands = {
125157 }
126158 return versionName ;
127159 } ,
128- versions : async ( { options } ) => {
160+ versions : async ( { options } : { options : CommandOptions } ) => {
129161 const platform = checkPlatform (
130- options . platform || ( await question ( '平台(ios/android/harmony):' ) ) ,
162+ options . platform ||
163+ ( ( await question ( '平台(ios/android/harmony):' ) ) as Platform ) ,
131164 ) ;
132165 const { appId } = await getSelectedApp ( platform ) ;
133166 await listVersions ( appId ) ;
134167 } ,
135- update : async ( { args, options } ) => {
168+ update : async ( {
169+ args,
170+ options,
171+ } : {
172+ args : string [ ] ;
173+ options : CommandOptions ;
174+ } ) => {
136175 const platform = checkPlatform (
137- options . platform || ( await question ( '平台(ios/android/harmony):' ) ) ,
176+ options . platform ||
177+ ( ( await question ( '平台(ios/android/harmony):' ) ) as Platform ) ,
138178 ) ;
139179 const { appId } = await getSelectedApp ( platform ) ;
140180 let versionId = options . versionId || ( await chooseVersion ( appId ) ) . id ;
141181 if ( versionId === 'null' ) {
142- versionId = null ;
182+ versionId = undefined ;
143183 }
144184
145185 let pkgId : string | undefined ;
146186 let pkgVersion = options . packageVersion ;
147187 let minPkgVersion = options . minPackageVersion ;
148188 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 ) {
153192 try {
154- rollout = Number . parseInt ( rollout ) ;
193+ rollout = Number . parseInt ( options . rollout ) ;
155194 } catch ( e ) {
156195 throw new Error ( 'rollout 必须是 1-100 的整数' ) ;
157196 }
158197 if ( rollout < 1 || rollout > 100 ) {
159198 throw new Error ( 'rollout 必须是 1-100 的整数' ) ;
160199 }
161200 }
201+
162202 if ( minPkgVersion ) {
163203 minPkgVersion = String ( minPkgVersion ) . trim ( ) ;
164204 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+ ) ;
166208 if ( pkgs . length === 0 ) {
167209 throw new Error ( `未查询到 >= ${ minPkgVersion } 的原生版本` ) ;
168210 }
169- if ( rollout ) {
170- const rolloutConfig = { } ;
211+ if ( rollout !== undefined ) {
212+ const rolloutConfig : Record < string , number > = { } ;
171213 for ( const pkg of pkgs ) {
172214 rolloutConfig [ pkg . name ] = rollout ;
173215 }
@@ -178,7 +220,7 @@ export const commands = {
178220 } ) ;
179221 console . log (
180222 `已在原生版本 ${ pkgs
181- . map ( ( p ) => p . name )
223+ . map ( ( pkg : Package ) => pkg . name )
182224 . join ( ', ' ) } 上设置灰度发布 ${ rollout } % 热更版本 ${ versionId } `,
183225 ) ;
184226 }
@@ -196,12 +238,14 @@ export const commands = {
196238 if ( maxPkgVersion ) {
197239 maxPkgVersion = String ( maxPkgVersion ) . trim ( ) ;
198240 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+ ) ;
200244 if ( pkgs . length === 0 ) {
201245 throw new Error ( `未查询到 <= ${ maxPkgVersion } 的原生版本` ) ;
202246 }
203- if ( rollout ) {
204- const rolloutConfig = { } ;
247+ if ( rollout !== undefined ) {
248+ const rolloutConfig : Record < string , number > = { } ;
205249 for ( const pkg of pkgs ) {
206250 rolloutConfig [ pkg . name ] = rollout ;
207251 }
@@ -212,7 +256,7 @@ export const commands = {
212256 } ) ;
213257 console . log (
214258 `已在原生版本 ${ pkgs
215- . map ( ( p ) => p . name )
259+ . map ( ( pkg : Package ) => pkg . name )
216260 . join ( ', ' ) } 上设置灰度发布 ${ rollout } % 热更版本 ${ versionId } `,
217261 ) ;
218262 }
@@ -231,7 +275,7 @@ export const commands = {
231275 const { data } = await get ( `/app/${ appId } /package/list?limit=1000` ) ;
232276 if ( pkgVersion ) {
233277 pkgVersion = pkgVersion . trim ( ) ;
234- const pkg = data . find ( ( d ) => d . name === pkgVersion ) ;
278+ const pkg = data . find ( ( pkg : Package ) => pkg . name === pkgVersion ) ;
235279 if ( pkg ) {
236280 pkgId = pkg . id ;
237281 } else {
@@ -247,13 +291,13 @@ export const commands = {
247291 }
248292
249293 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 ) ) ;
251295 if ( pkg ) {
252296 pkgVersion = pkg . name ;
253297 }
254298 }
255299
256- if ( rollout ) {
300+ if ( rollout !== undefined && pkgVersion ) {
257301 await put ( `/app/${ appId } /version/${ versionId } ` , {
258302 config : {
259303 rollout : {
@@ -265,24 +309,35 @@ export const commands = {
265309 `已将在原生版本 ${ pkgVersion } (id: ${ pkgId } ) 上设置灰度发布 ${ rollout } % 热更版本 ${ versionId } ` ,
266310 ) ;
267311 }
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+ }
274321 } ,
275- updateVersionInfo : async ( { args, options } ) => {
322+ updateVersionInfo : async ( {
323+ args,
324+ options,
325+ } : {
326+ args : string [ ] ;
327+ options : CommandOptions ;
328+ } ) => {
276329 const platform = checkPlatform (
277- options . platform || ( await question ( '平台(ios/android/harmony):' ) ) ,
330+ options . platform ||
331+ ( ( await question ( '平台(ios/android/harmony):' ) ) as Platform ) ,
278332 ) ;
279333 const { appId } = await getSelectedApp ( platform ) ;
280334 const versionId = options . versionId || ( await chooseVersion ( appId ) ) . id ;
281335
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+
286341 await put ( `/app/${ appId } /version/${ versionId } ` , updateParams ) ;
287342 console . log ( '操作成功' ) ;
288343 } ,
0 commit comments