145 lines
4.3 KiB
JavaScript
145 lines
4.3 KiB
JavaScript
'use strict';
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
exports.commands = undefined;
|
||
exports.listPackage = listPackage;
|
||
exports.choosePackage = choosePackage;
|
||
|
||
var _api = require('./api');
|
||
|
||
var _utils = require('./utils');
|
||
|
||
var _app = require('./app');
|
||
|
||
var _ttyTable = require('tty-table');
|
||
|
||
var _ttyTable2 = _interopRequireDefault(_ttyTable);
|
||
|
||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
||
async function listPackage(appId) {
|
||
const { data } = await (0, _api.get)(`/app/${appId}/package/list?limit=1000`);
|
||
|
||
const header = [{ value: '原生包 Id' }, { value: '原生版本' }];
|
||
const rows = [];
|
||
for (const pkg of data) {
|
||
const { version } = pkg;
|
||
let versionInfo = '';
|
||
if (version) {
|
||
versionInfo = `, 已绑定:${version.name} (${version.id})`;
|
||
} else {
|
||
// versionInfo = ' (newest)';
|
||
}
|
||
let output = pkg.name;
|
||
if (pkg.status === 'paused') {
|
||
output += '(已暂停)';
|
||
}
|
||
if (pkg.status === 'expired') {
|
||
output += '(已过期)';
|
||
}
|
||
output += versionInfo;
|
||
rows.push([pkg.id, output]);
|
||
}
|
||
|
||
console.log((0, _ttyTable2.default)(header, rows).render());
|
||
console.log(`\n共 ${data.length} 个包`);
|
||
return data;
|
||
}
|
||
|
||
async function choosePackage(appId) {
|
||
const list = await listPackage(appId);
|
||
|
||
while (true) {
|
||
const id = await (0, _utils.question)('输入原生包 id:');
|
||
const app = list.find(v => v.id === (id | 0));
|
||
if (app) {
|
||
return app;
|
||
}
|
||
}
|
||
}
|
||
|
||
const commands = exports.commands = {
|
||
uploadIpa: async function ({ args }) {
|
||
const fn = args[0];
|
||
if (!fn || !fn.endsWith('.ipa')) {
|
||
throw new Error('使用方法: pushy uploadIpa ipa后缀文件');
|
||
}
|
||
const {
|
||
versionName,
|
||
buildTime,
|
||
appId: appIdInPkg,
|
||
appKey: appKeyInPkg
|
||
} = await (0, _utils.getIpaInfo)(fn);
|
||
const { appId, appKey } = await (0, _app.getSelectedApp)('ios');
|
||
|
||
if (appIdInPkg && appIdInPkg != appId) {
|
||
throw new Error(`appId不匹配!当前ipa: ${appIdInPkg}, 当前update.json: ${appId}`);
|
||
}
|
||
|
||
if (appKeyInPkg && appKeyInPkg !== appKey) {
|
||
throw new Error(`appKey不匹配!当前ipa: ${appKeyInPkg}, 当前update.json: ${appKey}`);
|
||
}
|
||
|
||
const { hash } = await (0, _api.uploadFile)(fn);
|
||
|
||
const { id } = await (0, _api.post)(`/app/${appId}/package/create`, {
|
||
name: versionName,
|
||
hash,
|
||
buildTime
|
||
});
|
||
(0, _utils.saveToLocal)(fn, `${appId}/package/${id}.ipa`);
|
||
console.log(`已成功上传ipa原生包(id: ${id}, version: ${versionName}, buildTime: ${buildTime})`);
|
||
},
|
||
uploadApk: async function ({ args }) {
|
||
const fn = args[0];
|
||
if (!fn || !fn.endsWith('.apk')) {
|
||
throw new Error('使用方法: pushy uploadApk apk后缀文件');
|
||
}
|
||
const {
|
||
versionName,
|
||
buildTime,
|
||
appId: appIdInPkg,
|
||
appKey: appKeyInPkg
|
||
} = await (0, _utils.getApkInfo)(fn);
|
||
const { appId, appKey } = await (0, _app.getSelectedApp)('android');
|
||
|
||
if (appIdInPkg && appIdInPkg != appId) {
|
||
throw new Error(`appId不匹配!当前apk: ${appIdInPkg}, 当前update.json: ${appId}`);
|
||
}
|
||
|
||
if (appKeyInPkg && appKeyInPkg !== appKey) {
|
||
throw new Error(`appKey不匹配!当前apk: ${appKeyInPkg}, 当前update.json: ${appKey}`);
|
||
}
|
||
|
||
const { hash } = await (0, _api.uploadFile)(fn);
|
||
|
||
const { id } = await (0, _api.post)(`/app/${appId}/package/create`, {
|
||
name: versionName,
|
||
hash,
|
||
buildTime
|
||
});
|
||
(0, _utils.saveToLocal)(fn, `${appId}/package/${id}.apk`);
|
||
console.log(`已成功上传apk原生包(id: ${id}, version: ${versionName}, buildTime: ${buildTime})`);
|
||
},
|
||
parseIpa: async function ({ args }) {
|
||
const fn = args[0];
|
||
if (!fn || !fn.endsWith('.ipa')) {
|
||
throw new Error('使用方法: pushy parseIpa ipa后缀文件');
|
||
}
|
||
console.log((await (0, _utils.getIpaInfo)(fn)));
|
||
},
|
||
parseApk: async function ({ args }) {
|
||
const fn = args[0];
|
||
if (!fn || !fn.endsWith('.apk')) {
|
||
throw new Error('使用方法: pushy parseApk apk后缀文件');
|
||
}
|
||
console.log((await (0, _utils.getApkInfo)(fn)));
|
||
},
|
||
packages: async function ({ options }) {
|
||
const platform = (0, _app.checkPlatform)(options.platform || (await (0, _utils.question)('平台(ios/android):')));
|
||
const { appId } = await (0, _app.getSelectedApp)(platform);
|
||
await listPackage(appId);
|
||
}
|
||
}; |