Skip to content

Commit c4a3449

Browse files
committed
fix versions command
1 parent e2737a2 commit c4a3449

File tree

2 files changed

+107
-52
lines changed

2 files changed

+107
-52
lines changed

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "react-native-update-cli",
3-
"version": "1.43.4",
3+
"version": "1.43.5",
44
"description": "command line tool for react-native-update (remote updates for react native)",
55
"main": "index.js",
66
"bin": {

src/versions.ts

+106-51
Original file line numberDiff line numberDiff line change
@@ -6,24 +6,51 @@ import { choosePackage } from './package';
66
import { compare } from 'compare-versions';
77
import { depVersions } from './utils/dep-versions';
88
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+
}
1035

1136
async 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

85115
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+
}) {
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

Comments
 (0)