@@ -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