mirror of
https://gitcode.com/github-mirrors/react-native-update-cli.git
synced 2025-09-16 09:41:38 +08:00
ts
This commit is contained in:
@@ -8,7 +8,8 @@
|
|||||||
"recommended": true,
|
"recommended": true,
|
||||||
"suspicious": {
|
"suspicious": {
|
||||||
"noExplicitAny": "off",
|
"noExplicitAny": "off",
|
||||||
"noAssignInExpressions": "off"
|
"noAssignInExpressions": "off",
|
||||||
|
"noDoubleEquals": "off"
|
||||||
},
|
},
|
||||||
"style": {
|
"style": {
|
||||||
"noNonNullAssertion": "off"
|
"noNonNullAssertion": "off"
|
||||||
|
@@ -6,7 +6,7 @@ import { checkPlatform, getSelectedApp } from './app';
|
|||||||
import { getApkInfo, getIpaInfo, getAppInfo } from './utils';
|
import { getApkInfo, getIpaInfo, getAppInfo } from './utils';
|
||||||
import Table from 'tty-table';
|
import Table from 'tty-table';
|
||||||
|
|
||||||
export async function listPackage(appId) {
|
export async function listPackage(appId: string) {
|
||||||
const { data } = await get(`/app/${appId}/package/list?limit=1000`);
|
const { data } = await get(`/app/${appId}/package/list?limit=1000`);
|
||||||
|
|
||||||
const header = [{ value: '原生包 Id' }, { value: '原生版本' }];
|
const header = [{ value: '原生包 Id' }, { value: '原生版本' }];
|
||||||
@@ -35,12 +35,12 @@ export async function listPackage(appId) {
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function choosePackage(appId) {
|
export async function choosePackage(appId: string) {
|
||||||
const list = await listPackage(appId);
|
const list = await listPackage(appId);
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
const id = await question('输入原生包 id:');
|
const id = await question('输入原生包 id:');
|
||||||
const app = list.find((v) => v.id === (id | 0));
|
const app = list.find((v) => v.id === Number(id));
|
||||||
if (app) {
|
if (app) {
|
||||||
return app;
|
return app;
|
||||||
}
|
}
|
||||||
@@ -48,7 +48,7 @@ export async function choosePackage(appId) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const commands = {
|
export const commands = {
|
||||||
uploadIpa: async function ({ args }) {
|
uploadIpa: async ({ args }: { args: string[] }) => {
|
||||||
const fn = args[0];
|
const fn = args[0];
|
||||||
if (!fn || !fn.endsWith('.ipa')) {
|
if (!fn || !fn.endsWith('.ipa')) {
|
||||||
throw new Error('使用方法: pushy uploadIpa ipa后缀文件');
|
throw new Error('使用方法: pushy uploadIpa ipa后缀文件');
|
||||||
@@ -85,7 +85,7 @@ export const commands = {
|
|||||||
`已成功上传ipa原生包(id: ${id}, version: ${versionName}, buildTime: ${buildTime})`,
|
`已成功上传ipa原生包(id: ${id}, version: ${versionName}, buildTime: ${buildTime})`,
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
uploadApk: async function ({ args }) {
|
uploadApk: async ({ args }) => {
|
||||||
const fn = args[0];
|
const fn = args[0];
|
||||||
if (!fn || !fn.endsWith('.apk')) {
|
if (!fn || !fn.endsWith('.apk')) {
|
||||||
throw new Error('使用方法: pushy uploadApk apk后缀文件');
|
throw new Error('使用方法: pushy uploadApk apk后缀文件');
|
||||||
@@ -122,7 +122,7 @@ export const commands = {
|
|||||||
`已成功上传apk原生包(id: ${id}, version: ${versionName}, buildTime: ${buildTime})`,
|
`已成功上传apk原生包(id: ${id}, version: ${versionName}, buildTime: ${buildTime})`,
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
uploadApp: async function ({ args }) {
|
uploadApp: async ({ args }) => {
|
||||||
const fn = args[0];
|
const fn = args[0];
|
||||||
if (!fn || !fn.endsWith('.app')) {
|
if (!fn || !fn.endsWith('.app')) {
|
||||||
throw new Error('使用方法: pushy uploadApp app后缀文件');
|
throw new Error('使用方法: pushy uploadApp app后缀文件');
|
||||||
@@ -134,7 +134,6 @@ export const commands = {
|
|||||||
appKey: appKeyInPkg,
|
appKey: appKeyInPkg,
|
||||||
} = await getAppInfo(fn);
|
} = await getAppInfo(fn);
|
||||||
const { appId, appKey } = await getSelectedApp('harmony');
|
const { appId, appKey } = await getSelectedApp('harmony');
|
||||||
|
|
||||||
|
|
||||||
if (appIdInPkg && appIdInPkg != appId) {
|
if (appIdInPkg && appIdInPkg != appId) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
@@ -160,28 +159,28 @@ export const commands = {
|
|||||||
`已成功上传app原生包(id: ${id}, version: ${versionName}, buildTime: ${buildTime})`,
|
`已成功上传app原生包(id: ${id}, version: ${versionName}, buildTime: ${buildTime})`,
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
parseApp: async function ({ args }) {
|
parseApp: async ({ args }) => {
|
||||||
const fn = args[0];
|
const fn = args[0];
|
||||||
if (!fn || !fn.endsWith('.app')) {
|
if (!fn || !fn.endsWith('.app')) {
|
||||||
throw new Error('使用方法: pushy parseApp app后缀文件');
|
throw new Error('使用方法: pushy parseApp app后缀文件');
|
||||||
}
|
}
|
||||||
console.log(await getAppInfo(fn));
|
console.log(await getAppInfo(fn));
|
||||||
},
|
},
|
||||||
parseIpa: async function ({ args }) {
|
parseIpa: async ({ args }) => {
|
||||||
const fn = args[0];
|
const fn = args[0];
|
||||||
if (!fn || !fn.endsWith('.ipa')) {
|
if (!fn || !fn.endsWith('.ipa')) {
|
||||||
throw new Error('使用方法: pushy parseIpa ipa后缀文件');
|
throw new Error('使用方法: pushy parseIpa ipa后缀文件');
|
||||||
}
|
}
|
||||||
console.log(await getIpaInfo(fn));
|
console.log(await getIpaInfo(fn));
|
||||||
},
|
},
|
||||||
parseApk: async function ({ args }) {
|
parseApk: async ({ args }) => {
|
||||||
const fn = args[0];
|
const fn = args[0];
|
||||||
if (!fn || !fn.endsWith('.apk')) {
|
if (!fn || !fn.endsWith('.apk')) {
|
||||||
throw new Error('使用方法: pushy parseApk apk后缀文件');
|
throw new Error('使用方法: pushy parseApk apk后缀文件');
|
||||||
}
|
}
|
||||||
console.log(await getApkInfo(fn));
|
console.log(await getApkInfo(fn));
|
||||||
},
|
},
|
||||||
packages: async function ({ options }) {
|
packages: async ({ options }) => {
|
||||||
const platform = checkPlatform(
|
const platform = checkPlatform(
|
||||||
options.platform || (await question('平台(ios/android/harmony):')),
|
options.platform || (await question('平台(ios/android/harmony):')),
|
||||||
);
|
);
|
@@ -2,12 +2,12 @@ import { question } from './utils';
|
|||||||
import { post, get, replaceSession, saveSession, closeSession } from './api';
|
import { post, get, replaceSession, saveSession, closeSession } from './api';
|
||||||
import crypto from 'node:crypto';
|
import crypto from 'node:crypto';
|
||||||
|
|
||||||
function md5(str) {
|
function md5(str: string) {
|
||||||
return crypto.createHash('md5').update(str).digest('hex');
|
return crypto.createHash('md5').update(str).digest('hex');
|
||||||
}
|
}
|
||||||
|
|
||||||
export const commands = {
|
export const commands = {
|
||||||
login: async ({ args }) => {
|
login: async ({ args }: { args: string[] }) => {
|
||||||
const email = args[0] || (await question('email:'));
|
const email = args[0] || (await question('email:'));
|
||||||
const pwd = args[1] || (await question('password:', true));
|
const pwd = args[1] || (await question('password:', true));
|
||||||
const { token, info } = await post('/user/login', {
|
const { token, info } = await post('/user/login', {
|
@@ -25,8 +25,9 @@ export function translateOptions(options) {
|
|||||||
for (const key in options) {
|
for (const key in options) {
|
||||||
const v = options[key];
|
const v = options[key];
|
||||||
if (typeof v === 'string') {
|
if (typeof v === 'string') {
|
||||||
ret[key] = v.replace(/\$\{(\w+)\}/g, (v, n) =>
|
ret[key] = v.replace(
|
||||||
options[n] || process.env[n] || v,
|
/\$\{(\w+)\}/g,
|
||||||
|
(v, n) => options[n] || process.env[n] || v,
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
ret[key] = v;
|
ret[key] = v;
|
||||||
@@ -124,7 +125,7 @@ export async function getAppInfo(fn) {
|
|||||||
return { versionName, buildTime, ...appCredential };
|
return { versionName, buildTime, ...appCredential };
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getIpaInfo(fn) {
|
export async function getIpaInfo(fn: string) {
|
||||||
const appInfoParser = new AppInfoParser(fn);
|
const appInfoParser = new AppInfoParser(fn);
|
||||||
const bundleFile = await appInfoParser.parser.getEntry(
|
const bundleFile = await appInfoParser.parser.getEntry(
|
||||||
/payload\/.+?\.app\/main.jsbundle/,
|
/payload\/.+?\.app\/main.jsbundle/,
|
Reference in New Issue
Block a user