react-native-update-cli 1.46.2 → 2.0.1

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.
Files changed (68) hide show
  1. package/README.md +603 -1
  2. package/README.zh-CN.md +601 -0
  3. package/cli.json +39 -3
  4. package/lib/api.js +5 -5
  5. package/lib/app.js +1 -1
  6. package/lib/bundle.js +30 -28
  7. package/lib/exports.js +65 -0
  8. package/lib/index.js +100 -9
  9. package/lib/locales/en.js +2 -1
  10. package/lib/locales/zh.js +2 -1
  11. package/lib/module-manager.js +125 -0
  12. package/lib/modules/app-module.js +223 -0
  13. package/lib/modules/bundle-module.js +188 -0
  14. package/lib/modules/index.js +42 -0
  15. package/lib/modules/package-module.js +16 -0
  16. package/lib/modules/user-module.js +402 -0
  17. package/lib/modules/version-module.js +16 -0
  18. package/lib/package.js +40 -9
  19. package/lib/provider.js +341 -0
  20. package/lib/user.js +3 -3
  21. package/lib/utils/app-info-parser/apk.js +1 -1
  22. package/lib/utils/app-info-parser/ipa.js +2 -2
  23. package/lib/utils/app-info-parser/resource-finder.js +35 -35
  24. package/lib/utils/app-info-parser/xml-parser/manifest.js +2 -2
  25. package/lib/utils/app-info-parser/zip.js +3 -6
  26. package/lib/utils/check-plugin.js +1 -1
  27. package/lib/utils/git.js +1 -1
  28. package/lib/utils/i18n.js +3 -1
  29. package/lib/utils/index.js +4 -4
  30. package/lib/utils/latest-version/cli.js +3 -3
  31. package/lib/utils/latest-version/index.js +4 -4
  32. package/lib/versions.js +2 -2
  33. package/package.json +4 -4
  34. package/src/api.ts +7 -7
  35. package/src/app.ts +2 -2
  36. package/src/bundle.ts +44 -32
  37. package/src/exports.ts +30 -0
  38. package/src/index.ts +118 -16
  39. package/src/locales/en.ts +1 -0
  40. package/src/locales/zh.ts +1 -0
  41. package/src/module-manager.ts +149 -0
  42. package/src/modules/app-module.ts +205 -0
  43. package/src/modules/bundle-module.ts +202 -0
  44. package/src/modules/index.ts +19 -0
  45. package/src/modules/package-module.ts +11 -0
  46. package/src/modules/user-module.ts +406 -0
  47. package/src/modules/version-module.ts +8 -0
  48. package/src/package.ts +59 -25
  49. package/src/provider.ts +341 -0
  50. package/src/types.ts +126 -0
  51. package/src/user.ts +4 -3
  52. package/src/utils/app-info-parser/apk.js +62 -52
  53. package/src/utils/app-info-parser/app.js +5 -5
  54. package/src/utils/app-info-parser/ipa.js +69 -57
  55. package/src/utils/app-info-parser/resource-finder.js +50 -54
  56. package/src/utils/app-info-parser/utils.js +59 -54
  57. package/src/utils/app-info-parser/xml-parser/binary.js +366 -354
  58. package/src/utils/app-info-parser/xml-parser/manifest.js +145 -137
  59. package/src/utils/app-info-parser/zip.js +1 -1
  60. package/src/utils/check-plugin.ts +4 -2
  61. package/src/utils/dep-versions.ts +13 -6
  62. package/src/utils/git.ts +1 -1
  63. package/src/utils/i18n.ts +3 -1
  64. package/src/utils/index.ts +8 -10
  65. package/src/utils/latest-version/cli.ts +4 -4
  66. package/src/utils/latest-version/index.ts +17 -17
  67. package/src/utils/plugin-config.ts +3 -3
  68. package/src/versions.ts +3 -3
@@ -0,0 +1,601 @@
1
+ # React Native Update CLI
2
+
3
+ 这是一个统一的 React Native Update CLI,同时支持传统命令和模块化架构以及自定义发布流程。
4
+
5
+ ## 🚀 特性
6
+
7
+ - **统一 CLI**: 使用单个`pushy`命令提供所有功能
8
+ - **向后兼容**: 所有现有命令都能正常工作
9
+ - **模块化架构**: 将 CLI 功能拆分为独立的模块
10
+ - **自定义工作流**: 支持创建自定义的发布流程
11
+ - **可扩展性**: 用户可以导入和注册自定义模块
12
+ - **类型安全**: 完整的 TypeScript 类型支持
13
+
14
+ ## 📦 安装
15
+
16
+ ```bash
17
+ npm install react-native-update-cli
18
+ ```
19
+
20
+ ## 🎯 快速开始
21
+
22
+ ### 基本使用
23
+
24
+ ```bash
25
+ # 使用统一CLI
26
+ npx pushy help
27
+
28
+ # 列出所有可用命令和工作流
29
+ npx pushy list
30
+
31
+ # 执行内置的工作流
32
+ npx pushy workflow setup-app
33
+
34
+ # 执行自定义工作流
35
+ npx pushy workflow custom-publish
36
+ ```
37
+
38
+ ### 编程方式使用
39
+
40
+ ```typescript
41
+ import { moduleManager, CLIProviderImpl } from 'react-native-update-cli';
42
+
43
+ // 获取CLI提供者
44
+ const provider = moduleManager.getProvider();
45
+
46
+ // 执行打包
47
+ const bundleResult = await provider.bundle({
48
+ platform: 'ios',
49
+ dev: false,
50
+ sourcemap: true,
51
+ });
52
+
53
+ // 发布版本
54
+ const publishResult = await provider.publish({
55
+ name: 'v1.2.3',
56
+ description: 'Bug fixes and improvements',
57
+ rollout: 100,
58
+ });
59
+ ```
60
+
61
+ ## 🔧 创建自定义模块
62
+
63
+ ### 1. 定义模块
64
+
65
+ ```typescript
66
+ import type {
67
+ CLIModule,
68
+ CommandDefinition,
69
+ CustomWorkflow,
70
+ } from 'react-native-update-cli';
71
+
72
+ export const myCustomModule: CLIModule = {
73
+ name: 'my-custom',
74
+ version: '1.0.0',
75
+
76
+ commands: [
77
+ {
78
+ name: 'custom-command',
79
+ description: 'My custom command',
80
+ handler: async (context) => {
81
+ console.log('Executing custom command...');
82
+ return {
83
+ success: true,
84
+ data: { message: 'Custom command executed' },
85
+ };
86
+ },
87
+ options: {
88
+ param: { hasValue: true, description: 'Custom parameter' },
89
+ },
90
+ },
91
+ ],
92
+
93
+ workflows: [
94
+ {
95
+ name: 'my-workflow',
96
+ description: 'My custom workflow',
97
+ steps: [
98
+ {
99
+ name: 'step1',
100
+ description: 'First step',
101
+ execute: async (context, previousResult) => {
102
+ console.log('Executing step 1...');
103
+ return { step1Completed: true };
104
+ },
105
+ },
106
+ {
107
+ name: 'step2',
108
+ description: 'Second step',
109
+ execute: async (context, previousResult) => {
110
+ console.log('Executing step 2...');
111
+ return { ...previousResult, step2Completed: true };
112
+ },
113
+ },
114
+ ],
115
+ },
116
+ ],
117
+
118
+ init: (provider) => {
119
+ console.log('Custom module initialized');
120
+ },
121
+
122
+ cleanup: () => {
123
+ console.log('Custom module cleanup');
124
+ },
125
+ };
126
+ ```
127
+
128
+ ### 2. 注册模块
129
+
130
+ ```typescript
131
+ import { moduleManager } from 'react-native-update-cli';
132
+ import { myCustomModule } from './my-custom-module';
133
+
134
+ // 注册自定义模块
135
+ moduleManager.registerModule(myCustomModule);
136
+
137
+ // 执行自定义命令
138
+ const result = await moduleManager.executeCommand('custom-command', {
139
+ args: [],
140
+ options: { param: 'value' },
141
+ });
142
+
143
+ // 执行自定义工作流
144
+ const workflowResult = await moduleManager.executeWorkflow('my-workflow', {
145
+ args: [],
146
+ options: {},
147
+ });
148
+ ```
149
+
150
+ ## 🔄 工作流系统
151
+
152
+ ### 工作流步骤
153
+
154
+ 每个工作流步骤包含:
155
+
156
+ - `name`: 步骤名称
157
+ - `description`: 步骤描述
158
+ - `execute`: 执行函数
159
+ - `condition`: 可选的条件函数
160
+
161
+ ### 条件执行
162
+
163
+ ```typescript
164
+ {
165
+ name: 'conditional-step',
166
+ description: 'Only execute in production',
167
+ execute: async (context, previousResult) => {
168
+ // 执行逻辑
169
+ },
170
+ condition: (context) => {
171
+ return context.options.environment === 'production';
172
+ }
173
+ }
174
+ ```
175
+
176
+ ### 工作流验证
177
+
178
+ ```typescript
179
+ {
180
+ name: 'validated-workflow',
181
+ description: 'Workflow with validation',
182
+ steps: [...],
183
+ validate: (context) => {
184
+ if (!context.options.requiredParam) {
185
+ console.error('Required parameter missing');
186
+ return false;
187
+ }
188
+ return true;
189
+ }
190
+ }
191
+ ```
192
+
193
+ ## 📋 内置模块
194
+
195
+ ### Bundle 模块 (`bundle`)
196
+
197
+ - `bundle`: 打包 JavaScript 代码并可选发布
198
+ - `diff`: 生成两个 PPK 文件之间的差异
199
+ - `hdiff`: 生成两个 PPK 文件之间的 hdiff
200
+ - `diffFromApk`: 从 APK 文件生成差异
201
+ - `hdiffFromApk`: 从 APK 文件生成 hdiff
202
+ - `hdiffFromApp`: 从 APP 文件生成 hdiff
203
+ - `diffFromIpa`: 从 IPA 文件生成差异
204
+ - `hdiffFromIpa`: 从 IPA 文件生成 hdiff
205
+
206
+ ### Version 模块 (`version`)
207
+
208
+ - `publish`: 发布新版本
209
+ - `versions`: 列出所有版本
210
+ - `update`: 更新版本信息
211
+ - `updateVersionInfo`: 更新版本元数据
212
+
213
+ ### App 模块 (`app`)
214
+
215
+ - `createApp`: 创建新应用
216
+ - `apps`: 列出所有应用
217
+ - `selectApp`: 选择应用
218
+ - `deleteApp`: 删除应用
219
+
220
+ ### Package 模块 (`package`)
221
+
222
+ - `uploadIpa`: 上传 IPA 文件(支持 `--version` 参数覆盖提取的版本)
223
+ - `uploadApk`: 上传 APK 文件(支持 `--version` 参数覆盖提取的版本)
224
+ - `uploadApp`: 上传 APP 文件(支持 `--version` 参数覆盖提取的版本)
225
+ - `parseApp`: 解析 APP 文件信息
226
+ - `parseIpa`: 解析 IPA 文件信息
227
+ - `parseApk`: 解析 APK 文件信息
228
+ - `packages`: 列出包
229
+
230
+ ### User 模块 (`user`)
231
+
232
+ - `login`: 登录
233
+ - `logout`: 登出
234
+ - `me`: 显示用户信息
235
+
236
+ ## 🛠️ CLI 提供者 API
237
+
238
+ ### 核心功能
239
+
240
+ ```typescript
241
+ interface CLIProvider {
242
+ // 打包
243
+ bundle(options: BundleOptions): Promise<CommandResult>;
244
+
245
+ // 发布
246
+ publish(options: PublishOptions): Promise<CommandResult>;
247
+
248
+ // 上传
249
+ upload(options: UploadOptions): Promise<CommandResult>;
250
+
251
+ // 应用管理
252
+ getSelectedApp(
253
+ platform?: Platform,
254
+ ): Promise<{ appId: string; platform: Platform }>;
255
+ listApps(platform?: Platform): Promise<CommandResult>;
256
+ createApp(name: string, platform: Platform): Promise<CommandResult>;
257
+
258
+ // 版本管理
259
+ listVersions(appId: string): Promise<CommandResult>;
260
+ getVersion(appId: string, versionId: string): Promise<CommandResult>;
261
+ updateVersion(
262
+ appId: string,
263
+ versionId: string,
264
+ updates: Partial<Version>,
265
+ ): Promise<CommandResult>;
266
+
267
+ // 包管理
268
+ listPackages(appId: string, platform?: Platform): Promise<CommandResult>;
269
+ getPackage(appId: string, packageId: string): Promise<CommandResult>;
270
+
271
+ // 工具函数
272
+ getPlatform(platform?: Platform): Promise<Platform>;
273
+ loadSession(): Promise<Session>;
274
+ saveToLocal(key: string, value: string): void;
275
+ question(prompt: string): Promise<string>;
276
+
277
+ // 工作流
278
+ registerWorkflow(workflow: CustomWorkflow): void;
279
+ executeWorkflow(
280
+ workflowName: string,
281
+ context: CommandContext,
282
+ ): Promise<CommandResult>;
283
+ }
284
+ ```
285
+
286
+ ### 自定义命令
287
+
288
+ ```typescript
289
+ // 执行自定义打包命令
290
+ const bundleResult = await moduleManager.executeCommand('custom-bundle', {
291
+ args: [],
292
+ options: {
293
+ platform: 'android',
294
+ validate: true,
295
+ optimize: true,
296
+ },
297
+ });
298
+
299
+ // 生成差异文件
300
+ const diffResult = await moduleManager.executeCommand('diff', {
301
+ args: [],
302
+ options: {
303
+ origin: './build/v1.0.0.ppk',
304
+ next: './build/v1.1.0.ppk',
305
+ output: './build/diff.patch',
306
+ },
307
+ });
308
+
309
+ // 从APK文件生成差异
310
+ const apkDiffResult = await moduleManager.executeCommand('diffFromApk', {
311
+ args: [],
312
+ options: {
313
+ origin: './build/app-v1.0.0.apk',
314
+ next: './build/app-v1.1.0.apk',
315
+ output: './build/apk-diff.patch',
316
+ },
317
+ });
318
+ ```
319
+
320
+ ## 🔧 配置
321
+
322
+ ### 环境变量
323
+
324
+ ```bash
325
+ # 设置API端点
326
+ export PUSHY_REGISTRY=https://your-api-endpoint.com
327
+
328
+ # 设置非交互模式
329
+ export NO_INTERACTIVE=true
330
+ ```
331
+
332
+ ### 配置文件
333
+
334
+ 创建 `update.json` 文件:
335
+
336
+ ```json
337
+ {
338
+ "ios": {
339
+ "appId": "your-ios-app-id",
340
+ "appKey": "your-ios-app-key"
341
+ },
342
+ "android": {
343
+ "appId": "your-android-app-id",
344
+ "appKey": "your-android-app-key"
345
+ }
346
+ }
347
+ ```
348
+
349
+ ## 🚨 注意事项
350
+
351
+ 1. **向后兼容**: 新的模块化 CLI 保持与现有 CLI 的兼容性
352
+ 2. **类型安全**: 所有 API 都有完整的 TypeScript 类型定义
353
+ 3. **错误处理**: 所有操作都返回标准化的结果格式
354
+ 4. **资源清理**: 模块支持清理函数来释放资源
355
+ 5. **模块分离**: 功能按逻辑分离到不同模块中,便于维护和扩展
356
+
357
+ ## 🤝 贡献
358
+
359
+ 欢迎提交 Issue 和 Pull Request 来改进这个项目!
360
+
361
+ ## 🚀 Provider API 使用指南
362
+
363
+ Provider 提供了简洁的编程接口,适合在应用程序中集成 React Native Update CLI 功能。
364
+
365
+ ### 📋 核心 API 方法
366
+
367
+ #### 核心业务功能
368
+
369
+ ```typescript
370
+ // 打包应用
371
+ await provider.bundle({
372
+ platform: 'ios',
373
+ dev: false,
374
+ sourcemap: true,
375
+ });
376
+
377
+ // 发布版本
378
+ await provider.publish({
379
+ name: 'v1.0.0',
380
+ description: 'Bug fixes',
381
+ rollout: 100,
382
+ });
383
+
384
+ // 上传文件
385
+ await provider.upload({
386
+ filePath: 'app.ipa',
387
+ platform: 'ios',
388
+ });
389
+ ```
390
+
391
+ #### 应用管理
392
+
393
+ ```typescript
394
+ // 创建应用
395
+ await provider.createApp('MyApp', 'ios');
396
+
397
+ // 列出应用
398
+ await provider.listApps('ios');
399
+
400
+ // 获取当前应用
401
+ const { appId, platform } = await provider.getSelectedApp('ios');
402
+ ```
403
+
404
+ #### 版本管理
405
+
406
+ ```typescript
407
+ // 列出版本
408
+ await provider.listVersions('app123');
409
+
410
+ // 更新版本
411
+ await provider.updateVersion('app123', 'version456', {
412
+ name: 'v1.1.0',
413
+ description: 'New features',
414
+ });
415
+ ```
416
+
417
+ #### 工具函数
418
+
419
+ ```typescript
420
+ // 获取平台
421
+ const platform = await provider.getPlatform('ios');
422
+
423
+ // 加载会话
424
+ const session = await provider.loadSession();
425
+ ```
426
+
427
+ ### 🎯 使用场景
428
+
429
+ #### 1. 自动化构建脚本
430
+
431
+ ```typescript
432
+ import { moduleManager } from 'react-native-update-cli';
433
+
434
+ async function buildAndPublish() {
435
+ const provider = moduleManager.getProvider();
436
+
437
+ // 1. 打包
438
+ const bundleResult = await provider.bundle({
439
+ platform: 'ios',
440
+ dev: false,
441
+ sourcemap: true,
442
+ });
443
+
444
+ if (!bundleResult.success) {
445
+ throw new Error(`打包失败: ${bundleResult.error}`);
446
+ }
447
+
448
+ // 2. 发布
449
+ const publishResult = await provider.publish({
450
+ name: 'v1.2.3',
451
+ description: 'Bug fixes and performance improvements',
452
+ rollout: 100,
453
+ });
454
+
455
+ if (!publishResult.success) {
456
+ throw new Error(`发布失败: ${publishResult.error}`);
457
+ }
458
+
459
+ console.log('构建和发布完成!');
460
+ }
461
+ ```
462
+
463
+ #### 2. CI/CD 集成
464
+
465
+ ```typescript
466
+ async function ciBuild() {
467
+ const provider = moduleManager.getProvider();
468
+
469
+ const result = await provider.bundle({
470
+ platform: process.env.PLATFORM as 'ios' | 'android',
471
+ dev: process.env.NODE_ENV !== 'production',
472
+ sourcemap: process.env.NODE_ENV === 'production',
473
+ });
474
+
475
+ return result;
476
+ }
477
+ ```
478
+
479
+ #### 3. 应用管理服务
480
+
481
+ ```typescript
482
+ class AppManagementService {
483
+ private provider = moduleManager.getProvider();
484
+
485
+ async setupNewApp(name: string, platform: Platform) {
486
+ // 创建应用
487
+ const createResult = await this.provider.createApp(name, platform);
488
+
489
+ if (createResult.success) {
490
+ // 获取应用信息
491
+ const { appId } = await this.provider.getSelectedApp(platform);
492
+
493
+ // 列出版本
494
+ await this.provider.listVersions(appId);
495
+
496
+ return { appId, success: true };
497
+ }
498
+
499
+ return { success: false, error: createResult.error };
500
+ }
501
+ }
502
+ ```
503
+
504
+ ### ⚠️ 注意事项
505
+
506
+ 1. **错误处理**: 所有 Provider 方法都返回`CommandResult`,需要检查`success`字段
507
+ 2. **类型安全**: Provider 提供完整的 TypeScript 类型支持
508
+ 3. **会话管理**: 使用前确保已登录,可通过`loadSession()`检查
509
+ 4. **平台支持**: 支持`'ios' | 'android' | 'harmony'`三个平台
510
+
511
+ ### 🔧 高级功能
512
+
513
+ #### 自定义工作流
514
+
515
+ ```typescript
516
+ // 注册自定义工作流
517
+ provider.registerWorkflow({
518
+ name: 'quick-release',
519
+ description: '快速发布流程',
520
+ steps: [
521
+ {
522
+ name: 'bundle',
523
+ execute: async () => {
524
+ return await provider.bundle({ platform: 'ios', dev: false });
525
+ },
526
+ },
527
+ {
528
+ name: 'publish',
529
+ execute: async (context, bundleResult) => {
530
+ if (!bundleResult.success) {
531
+ throw new Error('打包失败,无法发布');
532
+ }
533
+ return await provider.publish({ name: 'auto-release', rollout: 50 });
534
+ },
535
+ },
536
+ ],
537
+ });
538
+
539
+ // 执行工作流
540
+ await provider.executeWorkflow('quick-release', { args: [], options: {} });
541
+ ```
542
+
543
+ ### 📚 完整示例
544
+
545
+ ```typescript
546
+ import { moduleManager } from 'react-native-update-cli';
547
+
548
+ class ReactNativeUpdateService {
549
+ private provider = moduleManager.getProvider();
550
+
551
+ async initialize() {
552
+ // 加载会话
553
+ await this.provider.loadSession();
554
+ }
555
+
556
+ async buildAndDeploy(platform: Platform, version: string) {
557
+ try {
558
+ // 1. 打包
559
+ const bundleResult = await this.provider.bundle({
560
+ platform,
561
+ dev: false,
562
+ sourcemap: true,
563
+ });
564
+
565
+ if (!bundleResult.success) {
566
+ throw new Error(`打包失败: ${bundleResult.error}`);
567
+ }
568
+
569
+ // 2. 发布
570
+ const publishResult = await this.provider.publish({
571
+ name: version,
572
+ description: `Release ${version}`,
573
+ rollout: 100,
574
+ });
575
+
576
+ if (!publishResult.success) {
577
+ throw new Error(`发布失败: ${publishResult.error}`);
578
+ }
579
+
580
+ return { success: true, data: publishResult.data };
581
+ } catch (error) {
582
+ return {
583
+ success: false,
584
+ error: error instanceof Error ? error.message : 'Unknown error',
585
+ };
586
+ }
587
+ }
588
+
589
+ async getAppInfo(platform: Platform) {
590
+ const { appId } = await this.provider.getSelectedApp(platform);
591
+ const versions = await this.provider.listVersions(appId);
592
+
593
+ return { appId, versions };
594
+ }
595
+ }
596
+
597
+ // 使用示例
598
+ const service = new ReactNativeUpdateService();
599
+ await service.initialize();
600
+ await service.buildAndDeploy('ios', 'v1.0.0');
601
+ ```
package/cli.json CHANGED
@@ -31,9 +31,27 @@
31
31
  }
32
32
  }
33
33
  },
34
- "uploadIpa": {},
35
- "uploadApk": {},
36
- "uploadApp": {},
34
+ "uploadIpa": {
35
+ "options": {
36
+ "version": {
37
+ "hasValue": true
38
+ }
39
+ }
40
+ },
41
+ "uploadApk": {
42
+ "options": {
43
+ "version": {
44
+ "hasValue": true
45
+ }
46
+ }
47
+ },
48
+ "uploadApp": {
49
+ "options": {
50
+ "version": {
51
+ "hasValue": true
52
+ }
53
+ }
54
+ },
37
55
  "parseApp": {},
38
56
  "parseIpa": {},
39
57
  "parseApk": {},
@@ -294,6 +312,24 @@
294
312
  "hasValue": true
295
313
  }
296
314
  }
315
+ },
316
+ "list": {
317
+ "description": "List all bundles",
318
+ "options": {
319
+ "output": {
320
+ "default": "${tempDir}/output/list",
321
+ "hasValue": true
322
+ }
323
+ }
324
+ },
325
+ "workflow": {
326
+ "description": "List all workflows",
327
+ "options": {
328
+ "output": {
329
+ "default": "${tempDir}/output/workflow",
330
+ "hasValue": true
331
+ }
332
+ }
297
333
  }
298
334
  },
299
335
  "globalOptions": {
package/lib/api.js CHANGED
@@ -43,16 +43,16 @@ _export(exports, {
43
43
  return uploadFile;
44
44
  }
45
45
  });
46
- const _nodefetch = /*#__PURE__*/ _interop_require_default(require("node-fetch"));
47
46
  const _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
48
- const _util = /*#__PURE__*/ _interop_require_default(require("util"));
49
47
  const _path = /*#__PURE__*/ _interop_require_default(require("path"));
48
+ const _util = /*#__PURE__*/ _interop_require_default(require("util"));
49
+ const _filesizeparser = /*#__PURE__*/ _interop_require_default(require("filesize-parser"));
50
+ const _formdata = /*#__PURE__*/ _interop_require_default(require("form-data"));
51
+ const _nodefetch = /*#__PURE__*/ _interop_require_default(require("node-fetch"));
50
52
  const _progress = /*#__PURE__*/ _interop_require_default(require("progress"));
51
- const _packagejson = /*#__PURE__*/ _interop_require_default(require("../package.json"));
52
53
  const _tcpping = /*#__PURE__*/ _interop_require_default(require("tcp-ping"));
53
- const _filesizeparser = /*#__PURE__*/ _interop_require_default(require("filesize-parser"));
54
+ const _packagejson = /*#__PURE__*/ _interop_require_default(require("../package.json"));
54
55
  const _constants = require("./utils/constants");
55
- const _formdata = /*#__PURE__*/ _interop_require_default(require("form-data"));
56
56
  const _i18n = require("./utils/i18n");
57
57
  function _interop_require_default(obj) {
58
58
  return obj && obj.__esModule ? obj : {
package/lib/app.js CHANGED
@@ -28,9 +28,9 @@ _export(exports, {
28
28
  return listApp;
29
29
  }
30
30
  });
31
- const _utils = require("./utils");
32
31
  const _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
33
32
  const _ttytable = /*#__PURE__*/ _interop_require_default(require("tty-table"));
33
+ const _utils = require("./utils");
34
34
  const _api = require("./api");
35
35
  const _i18n = require("./utils/i18n");
36
36
  function _interop_require_default(obj) {