react-native-update-cli 2.7.2 → 2.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cli.json +0 -1
- package/lib/bundle.js +22 -7
- package/package.json +26 -24
- package/src/bundle.ts +19 -9
- package/lib/esm/api..mjs +0 -183
- package/lib/esm/app..mjs +0 -130
- package/lib/esm/bundle..mjs +0 -823
- package/lib/esm/exports..mjs +0 -11
- package/lib/esm/index..mjs +0 -122
- package/lib/esm/install..mjs +0 -18
- package/lib/esm/locales/en..mjs +0 -131
- package/lib/esm/locales/zh..mjs +0 -130
- package/lib/esm/module-manager..mjs +0 -109
- package/lib/esm/modules/app-module..mjs +0 -213
- package/lib/esm/modules/bundle-module..mjs +0 -178
- package/lib/esm/modules/index..mjs +0 -17
- package/lib/esm/modules/package-module..mjs +0 -6
- package/lib/esm/modules/user-module..mjs +0 -351
- package/lib/esm/modules/version-module..mjs +0 -6
- package/lib/esm/package..mjs +0 -316
- package/lib/esm/provider..mjs +0 -293
- package/lib/esm/types..mjs +0 -1
- package/lib/esm/user..mjs +0 -36
- package/lib/esm/utils/add-gitignore..mjs +0 -32
- package/lib/esm/utils/app-info-parser/aab..mjs +0 -215
- package/lib/esm/utils/app-info-parser/apk..mjs +0 -75
- package/lib/esm/utils/app-info-parser/app..mjs +0 -3
- package/lib/esm/utils/app-info-parser/index..mjs +0 -44
- package/lib/esm/utils/app-info-parser/ipa..mjs +0 -73
- package/lib/esm/utils/app-info-parser/resource-finder..mjs +0 -401
- package/lib/esm/utils/app-info-parser/utils..mjs +0 -121
- package/lib/esm/utils/app-info-parser/xml-parser/binary..mjs +0 -569
- package/lib/esm/utils/app-info-parser/xml-parser/manifest..mjs +0 -200
- package/lib/esm/utils/app-info-parser/zip..mjs +0 -65
- package/lib/esm/utils/check-lockfile..mjs +0 -78
- package/lib/esm/utils/check-plugin..mjs +0 -25
- package/lib/esm/utils/constants..mjs +0 -19
- package/lib/esm/utils/dep-versions..mjs +0 -33
- package/lib/esm/utils/git..mjs +0 -43
- package/lib/esm/utils/http-helper..mjs +0 -70
- package/lib/esm/utils/i18n..mjs +0 -23
- package/lib/esm/utils/index..mjs +0 -316
- package/lib/esm/utils/latest-version/cli..mjs +0 -294
- package/lib/esm/utils/latest-version/index..mjs +0 -238
- package/lib/esm/utils/plugin-config..mjs +0 -23
- package/lib/esm/versions..mjs +0 -290
|
@@ -1,238 +0,0 @@
|
|
|
1
|
-
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
|
|
2
|
-
import { homedir } from "os";
|
|
3
|
-
import { dirname, join, parse, resolve as pathResolve } from "path";
|
|
4
|
-
import { URL } from "url";
|
|
5
|
-
import { npm, yarn } from "global-dirs";
|
|
6
|
-
import registryAuthToken from "registry-auth-token";
|
|
7
|
-
import getRegistryUrl from "registry-auth-token/registry-url";
|
|
8
|
-
import gt from "semver/functions/gt";
|
|
9
|
-
import maxSatisfying from "semver/ranges/max-satisfying";
|
|
10
|
-
export const ONE_DAY = 1000 * 60 * 60 * 24; // eslint-disable-line @typescript-eslint/naming-convention
|
|
11
|
-
const isPackageJson = (obj)=>{
|
|
12
|
-
return obj.dependencies !== undefined || obj.devDependencies !== undefined || obj.peerDependencies !== undefined;
|
|
13
|
-
};
|
|
14
|
-
const downloadMetadata = (pkgName, options)=>{
|
|
15
|
-
return new Promise((resolve, reject)=>{
|
|
16
|
-
const i = pkgName.indexOf('/');
|
|
17
|
-
const pkgScope = i !== -1 ? pkgName.slice(0, i) : '';
|
|
18
|
-
var _options_registryUrl;
|
|
19
|
-
const registryUrl = (_options_registryUrl = options == null ? void 0 : options.registryUrl) != null ? _options_registryUrl : getRegistryUrl(pkgScope);
|
|
20
|
-
const pkgUrl = new URL(encodeURIComponent(pkgName).replace(/^%40/, '@'), registryUrl);
|
|
21
|
-
let requestOptions = {
|
|
22
|
-
headers: {
|
|
23
|
-
accept: 'application/vnd.npm.install-v1+json; q=1.0, application/json; q=0.8, */*'
|
|
24
|
-
},
|
|
25
|
-
host: pkgUrl.hostname,
|
|
26
|
-
path: pkgUrl.pathname,
|
|
27
|
-
port: pkgUrl.port
|
|
28
|
-
};
|
|
29
|
-
const authInfo = registryAuthToken(pkgUrl.toString(), {
|
|
30
|
-
recursive: true
|
|
31
|
-
});
|
|
32
|
-
if (authInfo && requestOptions.headers) {
|
|
33
|
-
requestOptions.headers.authorization = `${authInfo.type} ${authInfo.token}`;
|
|
34
|
-
}
|
|
35
|
-
if (options == null ? void 0 : options.requestOptions) {
|
|
36
|
-
requestOptions = {
|
|
37
|
-
...requestOptions,
|
|
38
|
-
...options.requestOptions
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
const { get } = require(pkgUrl.protocol === 'https:' ? 'https' : 'http');
|
|
42
|
-
const request = get(requestOptions, (res)=>{
|
|
43
|
-
if (res.statusCode === 200) {
|
|
44
|
-
let rawData = '';
|
|
45
|
-
res.setEncoding('utf8');
|
|
46
|
-
res.on('data', (chunk)=>rawData += chunk);
|
|
47
|
-
res.once('error', (err)=>{
|
|
48
|
-
res.removeAllListeners();
|
|
49
|
-
reject(`Request error (${err.message}): ${pkgUrl}`);
|
|
50
|
-
});
|
|
51
|
-
res.once('end', ()=>{
|
|
52
|
-
res.removeAllListeners();
|
|
53
|
-
try {
|
|
54
|
-
const pkgMetadata = JSON.parse(rawData);
|
|
55
|
-
resolve({
|
|
56
|
-
name: pkgName,
|
|
57
|
-
lastUpdateDate: Date.now(),
|
|
58
|
-
versions: Object.keys(pkgMetadata.versions),
|
|
59
|
-
distTags: pkgMetadata['dist-tags']
|
|
60
|
-
});
|
|
61
|
-
return;
|
|
62
|
-
} catch (err) {
|
|
63
|
-
reject(err);
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
});
|
|
67
|
-
} else {
|
|
68
|
-
res.removeAllListeners();
|
|
69
|
-
res.resume(); // consume response data to free up memory
|
|
70
|
-
reject(`Request error (${res.statusCode}): ${pkgUrl}`);
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
});
|
|
74
|
-
const abort = (error)=>{
|
|
75
|
-
request.destroy();
|
|
76
|
-
reject(error);
|
|
77
|
-
};
|
|
78
|
-
request.once('timeout', ()=>{
|
|
79
|
-
abort(`Request timed out: ${pkgUrl}`);
|
|
80
|
-
});
|
|
81
|
-
request.once('error', (err)=>{
|
|
82
|
-
abort(err);
|
|
83
|
-
});
|
|
84
|
-
request.on('close', ()=>{
|
|
85
|
-
request.removeAllListeners();
|
|
86
|
-
});
|
|
87
|
-
});
|
|
88
|
-
};
|
|
89
|
-
const getCacheDir = (name = '@badisi/latest-version')=>{
|
|
90
|
-
const homeDir = homedir();
|
|
91
|
-
switch(process.platform){
|
|
92
|
-
case 'darwin':
|
|
93
|
-
return join(homeDir, 'Library', 'Caches', name);
|
|
94
|
-
case 'win32':
|
|
95
|
-
var _process_env_LOCALAPPDATA;
|
|
96
|
-
return join((_process_env_LOCALAPPDATA = process.env.LOCALAPPDATA) != null ? _process_env_LOCALAPPDATA : join(homeDir, 'AppData', 'Local'), name, 'Cache');
|
|
97
|
-
default:
|
|
98
|
-
var _process_env_XDG_CACHE_HOME;
|
|
99
|
-
return join((_process_env_XDG_CACHE_HOME = process.env.XDG_CACHE_HOME) != null ? _process_env_XDG_CACHE_HOME : join(homeDir, '.cache'), name);
|
|
100
|
-
}
|
|
101
|
-
};
|
|
102
|
-
const saveMetadataToCache = (pkg)=>{
|
|
103
|
-
const filePath = join(getCacheDir(), `${pkg.name}.json`);
|
|
104
|
-
if (!existsSync(dirname(filePath))) {
|
|
105
|
-
mkdirSync(dirname(filePath), {
|
|
106
|
-
recursive: true
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
|
-
writeFileSync(filePath, JSON.stringify(pkg));
|
|
110
|
-
};
|
|
111
|
-
const getMetadataFromCache = (pkgName, options)=>{
|
|
112
|
-
var _options_cacheMaxAge;
|
|
113
|
-
const maxAge = (_options_cacheMaxAge = options == null ? void 0 : options.cacheMaxAge) != null ? _options_cacheMaxAge : ONE_DAY;
|
|
114
|
-
if (maxAge !== 0) {
|
|
115
|
-
const pkgCacheFilePath = join(getCacheDir(), `${pkgName}.json`);
|
|
116
|
-
if (existsSync(pkgCacheFilePath)) {
|
|
117
|
-
const pkg = JSON.parse(readFileSync(pkgCacheFilePath).toString());
|
|
118
|
-
if (Date.now() - pkg.lastUpdateDate < maxAge) {
|
|
119
|
-
return pkg;
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
return undefined; // invalidates cache
|
|
124
|
-
};
|
|
125
|
-
const getRegistryVersions = async (pkgName, tagOrRange, options)=>{
|
|
126
|
-
let pkgMetadata;
|
|
127
|
-
if (pkgName.length && (options == null ? void 0 : options.useCache)) {
|
|
128
|
-
pkgMetadata = getMetadataFromCache(pkgName, options);
|
|
129
|
-
if (!pkgMetadata) {
|
|
130
|
-
pkgMetadata = await downloadMetadata(pkgName, options);
|
|
131
|
-
saveMetadataToCache(pkgMetadata);
|
|
132
|
-
}
|
|
133
|
-
} else if (pkgName.length) {
|
|
134
|
-
pkgMetadata = await downloadMetadata(pkgName, options);
|
|
135
|
-
}
|
|
136
|
-
const versions = {
|
|
137
|
-
latest: pkgMetadata == null ? void 0 : pkgMetadata.distTags.latest,
|
|
138
|
-
next: pkgMetadata == null ? void 0 : pkgMetadata.distTags.next
|
|
139
|
-
};
|
|
140
|
-
if (tagOrRange && (pkgMetadata == null ? void 0 : pkgMetadata.distTags[tagOrRange])) {
|
|
141
|
-
versions.wanted = pkgMetadata.distTags[tagOrRange];
|
|
142
|
-
} else if (tagOrRange && (pkgMetadata == null ? void 0 : pkgMetadata.versions.length)) {
|
|
143
|
-
var _maxSatisfying;
|
|
144
|
-
versions.wanted = (_maxSatisfying = maxSatisfying(pkgMetadata.versions, tagOrRange)) != null ? _maxSatisfying : undefined;
|
|
145
|
-
}
|
|
146
|
-
return versions;
|
|
147
|
-
};
|
|
148
|
-
const getInstalledVersion = (pkgName, location = 'local')=>{
|
|
149
|
-
try {
|
|
150
|
-
if (location === 'globalNpm') {
|
|
151
|
-
var _require;
|
|
152
|
-
return (_require = require(join(npm.packages, pkgName, 'package.json'))) == null ? void 0 : _require.version;
|
|
153
|
-
} else if (location === 'globalYarn') {
|
|
154
|
-
var _yarnGlobalPkg_dependencies, _require1;
|
|
155
|
-
// Make sure package is globally installed by Yarn
|
|
156
|
-
const yarnGlobalPkg = require(pathResolve(yarn.packages, '..', 'package.json'));
|
|
157
|
-
if (!(yarnGlobalPkg == null ? void 0 : (_yarnGlobalPkg_dependencies = yarnGlobalPkg.dependencies) == null ? void 0 : _yarnGlobalPkg_dependencies[pkgName])) {
|
|
158
|
-
return undefined;
|
|
159
|
-
}
|
|
160
|
-
return (_require1 = require(join(yarn.packages, pkgName, 'package.json'))) == null ? void 0 : _require1.version;
|
|
161
|
-
} else {
|
|
162
|
-
/**
|
|
163
|
-
* Compute the local paths manually as require.resolve() and require.resolve.paths()
|
|
164
|
-
* cannot be trusted anymore.
|
|
165
|
-
* @see https://github.com/nodejs/node/issues/33460
|
|
166
|
-
* @see https://github.com/nodejs/loaders/issues/26
|
|
167
|
-
*/ const { root } = parse(process.cwd());
|
|
168
|
-
let path = process.cwd();
|
|
169
|
-
const localPaths = [
|
|
170
|
-
join(path, 'node_modules')
|
|
171
|
-
];
|
|
172
|
-
while(path !== root){
|
|
173
|
-
path = dirname(path);
|
|
174
|
-
localPaths.push(join(path, 'node_modules'));
|
|
175
|
-
}
|
|
176
|
-
for (const localPath of localPaths){
|
|
177
|
-
const pkgPath = join(localPath, pkgName, 'package.json');
|
|
178
|
-
if (existsSync(pkgPath)) {
|
|
179
|
-
var _require2;
|
|
180
|
-
return (_require2 = require(pkgPath)) == null ? void 0 : _require2.version;
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
return undefined;
|
|
185
|
-
} catch (e) {
|
|
186
|
-
return undefined;
|
|
187
|
-
}
|
|
188
|
-
};
|
|
189
|
-
const getInfo = async (pkg, options)=>{
|
|
190
|
-
const i = pkg.lastIndexOf('@');
|
|
191
|
-
let pkgInfo = {
|
|
192
|
-
name: i > 1 ? pkg.slice(0, i) : pkg,
|
|
193
|
-
wantedTagOrRange: i > 1 ? pkg.slice(i + 1) : 'latest',
|
|
194
|
-
updatesAvailable: false
|
|
195
|
-
};
|
|
196
|
-
try {
|
|
197
|
-
pkgInfo = {
|
|
198
|
-
...pkgInfo,
|
|
199
|
-
local: getInstalledVersion(pkgInfo.name, 'local'),
|
|
200
|
-
globalNpm: getInstalledVersion(pkgInfo.name, 'globalNpm'),
|
|
201
|
-
globalYarn: getInstalledVersion(pkgInfo.name, 'globalYarn'),
|
|
202
|
-
...await getRegistryVersions(pkgInfo.name, pkgInfo.wantedTagOrRange, options)
|
|
203
|
-
};
|
|
204
|
-
const local = pkgInfo.local && pkgInfo.wanted ? gt(pkgInfo.wanted, pkgInfo.local) ? pkgInfo.wanted : false : false;
|
|
205
|
-
const globalNpm = pkgInfo.globalNpm && pkgInfo.wanted ? gt(pkgInfo.wanted, pkgInfo.globalNpm) ? pkgInfo.wanted : false : false;
|
|
206
|
-
const globalYarn = pkgInfo.globalYarn && pkgInfo.wanted ? gt(pkgInfo.wanted, pkgInfo.globalYarn) ? pkgInfo.wanted : false : false;
|
|
207
|
-
pkgInfo.updatesAvailable = local || globalNpm || globalYarn ? {
|
|
208
|
-
local,
|
|
209
|
-
globalNpm,
|
|
210
|
-
globalYarn
|
|
211
|
-
} : false;
|
|
212
|
-
} catch (err) {
|
|
213
|
-
var _err_message;
|
|
214
|
-
pkgInfo.error = (_err_message = err == null ? void 0 : err.message) != null ? _err_message : err;
|
|
215
|
-
}
|
|
216
|
-
return pkgInfo;
|
|
217
|
-
};
|
|
218
|
-
const latestVersion = async (arg, options)=>{
|
|
219
|
-
const pkgs = [];
|
|
220
|
-
if (typeof arg === 'string') {
|
|
221
|
-
pkgs.push(arg);
|
|
222
|
-
} else if (Array.isArray(arg)) {
|
|
223
|
-
pkgs.push(...arg);
|
|
224
|
-
} else if (isPackageJson(arg)) {
|
|
225
|
-
const addDeps = (deps)=>{
|
|
226
|
-
if (deps) {
|
|
227
|
-
pkgs.push(...Object.keys(deps).map((key)=>`${key}@${deps[key]}`));
|
|
228
|
-
}
|
|
229
|
-
};
|
|
230
|
-
addDeps(arg.dependencies);
|
|
231
|
-
addDeps(arg.devDependencies);
|
|
232
|
-
addDeps(arg.peerDependencies);
|
|
233
|
-
}
|
|
234
|
-
const jobs = await Promise.allSettled(pkgs.map((pkg)=>getInfo(pkg, options)));
|
|
235
|
-
const results = jobs.map((jobResult)=>jobResult.value);
|
|
236
|
-
return typeof arg === 'string' ? results[0] : results;
|
|
237
|
-
};
|
|
238
|
-
export default latestVersion;
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import fs from "fs-extra";
|
|
2
|
-
export const plugins = [
|
|
3
|
-
{
|
|
4
|
-
name: 'sentry',
|
|
5
|
-
bundleParams: {
|
|
6
|
-
sentry: true,
|
|
7
|
-
sourcemap: true
|
|
8
|
-
},
|
|
9
|
-
detect: async ()=>{
|
|
10
|
-
try {
|
|
11
|
-
await fs.access('ios/sentry.properties');
|
|
12
|
-
return true;
|
|
13
|
-
} catch (e) {
|
|
14
|
-
try {
|
|
15
|
-
await fs.access('android/sentry.properties');
|
|
16
|
-
return true;
|
|
17
|
-
} catch (e) {
|
|
18
|
-
return false;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
];
|
package/lib/esm/versions..mjs
DELETED
|
@@ -1,290 +0,0 @@
|
|
|
1
|
-
import { get, getAllPackages, post, put, uploadFile, doDelete } from "./api";
|
|
2
|
-
import { question, saveToLocal } from "./utils";
|
|
3
|
-
import { t } from "./utils/i18n";
|
|
4
|
-
import chalk from "chalk";
|
|
5
|
-
import { satisfies } from "compare-versions";
|
|
6
|
-
import { getPlatform, getSelectedApp } from "./app";
|
|
7
|
-
import { choosePackage } from "./package";
|
|
8
|
-
import { depVersions } from "./utils/dep-versions";
|
|
9
|
-
import { getCommitInfo } from "./utils/git";
|
|
10
|
-
async function showVersion(appId, offset) {
|
|
11
|
-
const { data, count } = await get(`/app/${appId}/version/list`);
|
|
12
|
-
console.log(t('offset', {
|
|
13
|
-
offset
|
|
14
|
-
}));
|
|
15
|
-
for (const version of data){
|
|
16
|
-
var _version_packages;
|
|
17
|
-
const pkgCount = ((_version_packages = version.packages) == null ? void 0 : _version_packages.length) || 0;
|
|
18
|
-
let packageInfo = '';
|
|
19
|
-
if (pkgCount === 0) {
|
|
20
|
-
packageInfo = 'no package';
|
|
21
|
-
} else {
|
|
22
|
-
var _version_packages1;
|
|
23
|
-
packageInfo = (_version_packages1 = version.packages) == null ? void 0 : _version_packages1.slice(0, 3).map((pkg)=>pkg.name).join(', ');
|
|
24
|
-
if (pkgCount > 3) {
|
|
25
|
-
packageInfo += `...and ${pkgCount - 3} more`;
|
|
26
|
-
} else {
|
|
27
|
-
packageInfo = `[${packageInfo}]`;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
console.log(`${version.id}) ${version.hash.slice(0, 8)} ${version.name} ${packageInfo}`);
|
|
31
|
-
}
|
|
32
|
-
return data;
|
|
33
|
-
}
|
|
34
|
-
async function listVersions(appId) {
|
|
35
|
-
let offset = 0;
|
|
36
|
-
while(true){
|
|
37
|
-
await showVersion(appId, offset);
|
|
38
|
-
const cmd = await question('page Up/page Down/Begin/Quit(U/D/B/Q)');
|
|
39
|
-
switch(cmd.toLowerCase()){
|
|
40
|
-
case 'u':
|
|
41
|
-
offset = Math.max(0, offset - 10);
|
|
42
|
-
break;
|
|
43
|
-
case 'd':
|
|
44
|
-
offset += 10;
|
|
45
|
-
break;
|
|
46
|
-
case 'b':
|
|
47
|
-
offset = 0;
|
|
48
|
-
break;
|
|
49
|
-
case 'q':
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
async function chooseVersion(appId) {
|
|
55
|
-
let offset = 0;
|
|
56
|
-
while(true){
|
|
57
|
-
const data = await showVersion(appId, offset);
|
|
58
|
-
const cmd = await question('Enter versionId or page Up/page Down/Begin(U/D/B)');
|
|
59
|
-
switch(cmd.toUpperCase()){
|
|
60
|
-
case 'U':
|
|
61
|
-
offset = Math.max(0, offset - 10);
|
|
62
|
-
break;
|
|
63
|
-
case 'D':
|
|
64
|
-
offset += 10;
|
|
65
|
-
break;
|
|
66
|
-
case 'B':
|
|
67
|
-
offset = 0;
|
|
68
|
-
break;
|
|
69
|
-
default:
|
|
70
|
-
{
|
|
71
|
-
const versionId = Number.parseInt(cmd, 10);
|
|
72
|
-
const v = data.find((version)=>version.id === String(versionId));
|
|
73
|
-
if (v) {
|
|
74
|
-
return v;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
export const bindVersionToPackages = async ({ appId, versionId, pkgs, rollout, dryRun })=>{
|
|
81
|
-
if (dryRun) {
|
|
82
|
-
console.log(chalk.yellow(t('dryRun')));
|
|
83
|
-
}
|
|
84
|
-
if (rollout !== undefined) {
|
|
85
|
-
console.log(`${t('rolloutConfigSet', {
|
|
86
|
-
versions: pkgs.map((pkg)=>pkg.name).join(', '),
|
|
87
|
-
rollout: rollout
|
|
88
|
-
})}`);
|
|
89
|
-
}
|
|
90
|
-
for (const pkg of pkgs){
|
|
91
|
-
if (!dryRun) {
|
|
92
|
-
await post(`/app/${appId}/binding`, {
|
|
93
|
-
versionId,
|
|
94
|
-
rollout,
|
|
95
|
-
packageId: pkg.id
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
console.log(`${t('versionBind', {
|
|
99
|
-
version: versionId,
|
|
100
|
-
nativeVersion: pkg.name,
|
|
101
|
-
id: pkg.id
|
|
102
|
-
})}`);
|
|
103
|
-
}
|
|
104
|
-
console.log(t('operationComplete', {
|
|
105
|
-
count: pkgs.length
|
|
106
|
-
}));
|
|
107
|
-
};
|
|
108
|
-
export const versionCommands = {
|
|
109
|
-
publish: async function({ args, options }) {
|
|
110
|
-
const fn = args[0];
|
|
111
|
-
const { name, description, metaInfo } = options;
|
|
112
|
-
if (!fn || !fn.endsWith('.ppk')) {
|
|
113
|
-
throw new Error(t('publishUsage'));
|
|
114
|
-
}
|
|
115
|
-
const platform = await getPlatform(options.platform);
|
|
116
|
-
const { appId } = await getSelectedApp(platform);
|
|
117
|
-
const { hash } = await uploadFile(fn);
|
|
118
|
-
const versionName = name || await question(t('versionNameQuestion')) || t('unnamed');
|
|
119
|
-
const { id } = await post(`/app/${appId}/version/create`, {
|
|
120
|
-
name: versionName,
|
|
121
|
-
hash,
|
|
122
|
-
description: description || await question(t('versionDescriptionQuestion')),
|
|
123
|
-
metaInfo: metaInfo || await question(t('versionMetaInfoQuestion')),
|
|
124
|
-
deps: depVersions,
|
|
125
|
-
commit: await getCommitInfo()
|
|
126
|
-
});
|
|
127
|
-
// TODO local diff
|
|
128
|
-
saveToLocal(fn, `${appId}/ppk/${id}.ppk`);
|
|
129
|
-
console.log(t('packageUploadSuccess', {
|
|
130
|
-
id
|
|
131
|
-
}));
|
|
132
|
-
const { packageId, packageVersion, packageVersionRange, minPackageVersion, maxPackageVersion, rollout, dryRun } = options;
|
|
133
|
-
if (packageId || packageVersion || packageVersionRange || minPackageVersion || maxPackageVersion) {
|
|
134
|
-
await this.update({
|
|
135
|
-
options: {
|
|
136
|
-
versionId: id,
|
|
137
|
-
platform,
|
|
138
|
-
packageId,
|
|
139
|
-
packageVersion,
|
|
140
|
-
packageVersionRange,
|
|
141
|
-
minPackageVersion,
|
|
142
|
-
maxPackageVersion,
|
|
143
|
-
rollout,
|
|
144
|
-
dryRun
|
|
145
|
-
}
|
|
146
|
-
});
|
|
147
|
-
} else {
|
|
148
|
-
const q = await question(t('updateNativePackageQuestion'));
|
|
149
|
-
if (q.toLowerCase() === 'y') {
|
|
150
|
-
await this.update({
|
|
151
|
-
options: {
|
|
152
|
-
versionId: id,
|
|
153
|
-
platform
|
|
154
|
-
}
|
|
155
|
-
});
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
return versionName;
|
|
159
|
-
},
|
|
160
|
-
versions: async ({ options })=>{
|
|
161
|
-
const platform = await getPlatform(options.platform);
|
|
162
|
-
const { appId } = await getSelectedApp(platform);
|
|
163
|
-
await listVersions(appId);
|
|
164
|
-
},
|
|
165
|
-
update: async ({ options })=>{
|
|
166
|
-
const platform = await getPlatform(options.platform);
|
|
167
|
-
const appId = options.appId || (await getSelectedApp(platform)).appId;
|
|
168
|
-
let versionId = options.versionId || (await chooseVersion(appId)).id;
|
|
169
|
-
if (versionId === 'null') {
|
|
170
|
-
versionId = undefined;
|
|
171
|
-
}
|
|
172
|
-
let pkgId = options.packageId;
|
|
173
|
-
let pkgVersion = options.packageVersion;
|
|
174
|
-
let minPkgVersion = options.minPackageVersion;
|
|
175
|
-
let maxPkgVersion = options.maxPackageVersion;
|
|
176
|
-
let packageVersionRange = options.packageVersionRange;
|
|
177
|
-
let rollout = undefined;
|
|
178
|
-
if (options.rollout !== undefined) {
|
|
179
|
-
try {
|
|
180
|
-
rollout = Number.parseInt(options.rollout);
|
|
181
|
-
} catch (e) {
|
|
182
|
-
throw new Error(t('rolloutRangeError'));
|
|
183
|
-
}
|
|
184
|
-
if (rollout < 1 || rollout > 100) {
|
|
185
|
-
throw new Error(t('rolloutRangeError'));
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
const allPkgs = await getAllPackages(appId);
|
|
189
|
-
if (!allPkgs) {
|
|
190
|
-
throw new Error(t('noPackagesFound', {
|
|
191
|
-
appId
|
|
192
|
-
}));
|
|
193
|
-
}
|
|
194
|
-
let pkgsToBind = [];
|
|
195
|
-
if (minPkgVersion) {
|
|
196
|
-
minPkgVersion = String(minPkgVersion).trim();
|
|
197
|
-
pkgsToBind = allPkgs.filter((pkg)=>satisfies(pkg.name, `>=${minPkgVersion}`));
|
|
198
|
-
if (pkgsToBind.length === 0) {
|
|
199
|
-
throw new Error(t('nativeVersionNotFoundGte', {
|
|
200
|
-
version: minPkgVersion
|
|
201
|
-
}));
|
|
202
|
-
}
|
|
203
|
-
} else if (maxPkgVersion) {
|
|
204
|
-
maxPkgVersion = String(maxPkgVersion).trim();
|
|
205
|
-
pkgsToBind = allPkgs.filter((pkg)=>satisfies(pkg.name, `<=${maxPkgVersion}`));
|
|
206
|
-
if (pkgsToBind.length === 0) {
|
|
207
|
-
throw new Error(t('nativeVersionNotFoundLte', {
|
|
208
|
-
version: maxPkgVersion
|
|
209
|
-
}));
|
|
210
|
-
}
|
|
211
|
-
} else if (pkgVersion) {
|
|
212
|
-
pkgVersion = pkgVersion.trim();
|
|
213
|
-
const pkg = allPkgs.find((pkg)=>pkg.name === pkgVersion);
|
|
214
|
-
if (pkg) {
|
|
215
|
-
pkgsToBind = [
|
|
216
|
-
pkg
|
|
217
|
-
];
|
|
218
|
-
} else {
|
|
219
|
-
throw new Error(t('nativeVersionNotFoundMatch', {
|
|
220
|
-
version: pkgVersion
|
|
221
|
-
}));
|
|
222
|
-
}
|
|
223
|
-
} else if (packageVersionRange) {
|
|
224
|
-
packageVersionRange = packageVersionRange.trim();
|
|
225
|
-
pkgsToBind = allPkgs.filter((pkg)=>satisfies(pkg.name, packageVersionRange));
|
|
226
|
-
if (pkgsToBind.length === 0) {
|
|
227
|
-
throw new Error(t('nativeVersionNotFoundMatch', {
|
|
228
|
-
version: packageVersionRange
|
|
229
|
-
}));
|
|
230
|
-
}
|
|
231
|
-
} else {
|
|
232
|
-
if (!pkgId) {
|
|
233
|
-
pkgId = (await choosePackage(appId)).id;
|
|
234
|
-
}
|
|
235
|
-
if (!pkgId) {
|
|
236
|
-
throw new Error(t('packageIdRequired'));
|
|
237
|
-
}
|
|
238
|
-
const pkg = allPkgs.find((pkg)=>String(pkg.id) === String(pkgId));
|
|
239
|
-
if (pkg) {
|
|
240
|
-
pkgsToBind = [
|
|
241
|
-
pkg
|
|
242
|
-
];
|
|
243
|
-
} else {
|
|
244
|
-
throw new Error(t('nativePackageIdNotFound', {
|
|
245
|
-
id: pkgId
|
|
246
|
-
}));
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
await bindVersionToPackages({
|
|
250
|
-
appId,
|
|
251
|
-
versionId,
|
|
252
|
-
pkgs: pkgsToBind,
|
|
253
|
-
rollout,
|
|
254
|
-
dryRun: options.dryRun
|
|
255
|
-
});
|
|
256
|
-
},
|
|
257
|
-
updateVersionInfo: async ({ options })=>{
|
|
258
|
-
const platform = await getPlatform(options.platform);
|
|
259
|
-
const { appId } = await getSelectedApp(platform);
|
|
260
|
-
const versionId = options.versionId || (await chooseVersion(appId)).id;
|
|
261
|
-
const updateParams = {};
|
|
262
|
-
if (options.name) updateParams.name = options.name;
|
|
263
|
-
if (options.description) updateParams.description = options.description;
|
|
264
|
-
if (options.metaInfo) updateParams.metaInfo = options.metaInfo;
|
|
265
|
-
await put(`/app/${appId}/version/${versionId}`, updateParams);
|
|
266
|
-
console.log(t('operationSuccess'));
|
|
267
|
-
},
|
|
268
|
-
deleteVersion: async ({ options })=>{
|
|
269
|
-
let appId = options.appId;
|
|
270
|
-
if (!appId) {
|
|
271
|
-
const platform = await getPlatform(options.platform);
|
|
272
|
-
appId = (await getSelectedApp(platform)).appId;
|
|
273
|
-
}
|
|
274
|
-
let versionId = options.versionId;
|
|
275
|
-
if (!versionId) {
|
|
276
|
-
versionId = (await chooseVersion(appId)).id;
|
|
277
|
-
}
|
|
278
|
-
try {
|
|
279
|
-
await doDelete(`/app/${appId}/version/${versionId}`);
|
|
280
|
-
console.log(t('deleteVersionSuccess', {
|
|
281
|
-
versionId
|
|
282
|
-
}));
|
|
283
|
-
} catch (error) {
|
|
284
|
-
throw new Error(t('deleteVersionError', {
|
|
285
|
-
versionId,
|
|
286
|
-
error: error.message
|
|
287
|
-
}));
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
};
|