droid-cli 1.0.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.
Files changed (70) hide show
  1. package/README.md +268 -0
  2. package/dist/commands/build.d.ts +12 -0
  3. package/dist/commands/build.d.ts.map +1 -0
  4. package/dist/commands/build.js +375 -0
  5. package/dist/commands/build.js.map +1 -0
  6. package/dist/commands/device.d.ts +2 -0
  7. package/dist/commands/device.d.ts.map +1 -0
  8. package/dist/commands/device.js +177 -0
  9. package/dist/commands/device.js.map +1 -0
  10. package/dist/commands/gradle.d.ts +11 -0
  11. package/dist/commands/gradle.d.ts.map +1 -0
  12. package/dist/commands/gradle.js +147 -0
  13. package/dist/commands/gradle.js.map +1 -0
  14. package/dist/commands/init.d.ts +2 -0
  15. package/dist/commands/init.d.ts.map +1 -0
  16. package/dist/commands/init.js +231 -0
  17. package/dist/commands/init.js.map +1 -0
  18. package/dist/commands/logcat.d.ts +6 -0
  19. package/dist/commands/logcat.d.ts.map +1 -0
  20. package/dist/commands/logcat.js +131 -0
  21. package/dist/commands/logcat.js.map +1 -0
  22. package/dist/commands/variant.d.ts +3 -0
  23. package/dist/commands/variant.d.ts.map +1 -0
  24. package/dist/commands/variant.js +77 -0
  25. package/dist/commands/variant.js.map +1 -0
  26. package/dist/config/config-manager.d.ts +33 -0
  27. package/dist/config/config-manager.d.ts.map +1 -0
  28. package/dist/config/config-manager.js +219 -0
  29. package/dist/config/config-manager.js.map +1 -0
  30. package/dist/config/schema.d.ts +21 -0
  31. package/dist/config/schema.d.ts.map +1 -0
  32. package/dist/config/schema.js +41 -0
  33. package/dist/config/schema.js.map +1 -0
  34. package/dist/core/adb.d.ts +48 -0
  35. package/dist/core/adb.d.ts.map +1 -0
  36. package/dist/core/adb.js +431 -0
  37. package/dist/core/adb.js.map +1 -0
  38. package/dist/core/android-project.d.ts +25 -0
  39. package/dist/core/android-project.d.ts.map +1 -0
  40. package/dist/core/android-project.js +155 -0
  41. package/dist/core/android-project.js.map +1 -0
  42. package/dist/core/gradle-wrapper.d.ts +21 -0
  43. package/dist/core/gradle-wrapper.d.ts.map +1 -0
  44. package/dist/core/gradle-wrapper.js +221 -0
  45. package/dist/core/gradle-wrapper.js.map +1 -0
  46. package/dist/core/terminal.d.ts +20 -0
  47. package/dist/core/terminal.d.ts.map +1 -0
  48. package/dist/core/terminal.js +186 -0
  49. package/dist/core/terminal.js.map +1 -0
  50. package/dist/index.d.ts +3 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +167 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/ui/interactive-menu.d.ts +2 -0
  55. package/dist/ui/interactive-menu.d.ts.map +1 -0
  56. package/dist/ui/interactive-menu.js +272 -0
  57. package/dist/ui/interactive-menu.js.map +1 -0
  58. package/dist/ui/logger.d.ts +20 -0
  59. package/dist/ui/logger.d.ts.map +1 -0
  60. package/dist/ui/logger.js +59 -0
  61. package/dist/ui/logger.js.map +1 -0
  62. package/dist/utils/process.d.ts +53 -0
  63. package/dist/utils/process.d.ts.map +1 -0
  64. package/dist/utils/process.js +62 -0
  65. package/dist/utils/process.js.map +1 -0
  66. package/dist/utils/validators.d.ts +11 -0
  67. package/dist/utils/validators.d.ts.map +1 -0
  68. package/dist/utils/validators.js +84 -0
  69. package/dist/utils/validators.js.map +1 -0
  70. package/package.json +54 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function interactiveMenu(): Promise<void>;
2
+ //# sourceMappingURL=interactive-menu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive-menu.d.ts","sourceRoot":"","sources":["../../src/ui/interactive-menu.ts"],"names":[],"mappings":"AAuFA,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CA4HrD"}
@@ -0,0 +1,272 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.interactiveMenu = interactiveMenu;
7
+ const prompts_1 = require("@inquirer/prompts");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const logger_1 = require("./logger");
10
+ const build_1 = require("../commands/build");
11
+ const device_1 = require("../commands/device");
12
+ const logcat_1 = require("../commands/logcat");
13
+ const gradle_1 = require("../commands/gradle");
14
+ const init_1 = require("../commands/init");
15
+ const variant_1 = require("../commands/variant");
16
+ const config_manager_1 = require("../config/config-manager");
17
+ const android_project_1 = require("../core/android-project");
18
+ const adb_1 = require("../core/adb");
19
+ async function handleTaskFailure(taskName, error) {
20
+ console.log(''); // Add spacing
21
+ logger_1.Logger.error(`${taskName} failed:`, error);
22
+ console.log(''); // Add spacing
23
+ console.log(chalk_1.default.gray('───────────────────────────────────────'));
24
+ console.log(chalk_1.default.cyan('🔄 Press r to retry'));
25
+ console.log(chalk_1.default.cyan('🏠 Press x to return to main menu'));
26
+ console.log(chalk_1.default.gray('───────────────────────────────────────'));
27
+ console.log(''); // Add spacing
28
+ while (true) {
29
+ const choice = await (0, prompts_1.input)({
30
+ message: 'Enter your choice (r/x):',
31
+ validate: (input) => {
32
+ const choice = input.toLowerCase().trim();
33
+ if (choice === 'r' || choice === 'x') {
34
+ return true;
35
+ }
36
+ return 'Please enter "r" to retry or "x" to return to main menu';
37
+ },
38
+ });
39
+ const normalizedChoice = choice.toLowerCase().trim();
40
+ if (normalizedChoice === 'r') {
41
+ return 'retry';
42
+ }
43
+ else if (normalizedChoice === 'x') {
44
+ return 'menu';
45
+ }
46
+ }
47
+ }
48
+ async function handleBuildFailure(error) {
49
+ return handleTaskFailure('Build', error);
50
+ }
51
+ async function handleBuildSuccess() {
52
+ console.log(''); // Add spacing
53
+ console.log(chalk_1.default.green('🎉 Build, install, and launch completed successfully!'));
54
+ console.log(chalk_1.default.cyan('📱 Your app is now running on the device'));
55
+ console.log(''); // Add spacing
56
+ console.log(chalk_1.default.gray('───────────────────────────────────────'));
57
+ console.log(chalk_1.default.cyan('📋 View app logs in real-time'));
58
+ console.log(chalk_1.default.cyan('🔨 Build again to test changes'));
59
+ console.log(chalk_1.default.cyan('📱 Switch to different device'));
60
+ console.log(chalk_1.default.cyan('🏠 Return to main menu'));
61
+ console.log(chalk_1.default.gray('───────────────────────────────────────'));
62
+ console.log(''); // Add spacing
63
+ const choice = await (0, prompts_1.select)({
64
+ message: 'What would you like to do next?',
65
+ choices: [
66
+ { name: '📋 Open Logcat', value: 'logcat' },
67
+ { name: '🔨 Build Again', value: 'build' },
68
+ { name: '📱 Select Different Device', value: 'device' },
69
+ { name: '🏠 Return to Main Menu', value: 'menu' },
70
+ ],
71
+ });
72
+ switch (choice) {
73
+ case 'logcat':
74
+ await (0, logcat_1.logcatCommand)();
75
+ return choice;
76
+ case 'build':
77
+ return choice; // Will trigger another build in the next iteration
78
+ case 'device':
79
+ await (0, device_1.deviceCommand)();
80
+ return choice;
81
+ case 'menu':
82
+ return choice; // Will return to main menu in the next iteration
83
+ default:
84
+ return 'menu';
85
+ }
86
+ }
87
+ async function interactiveMenu() {
88
+ while (true) {
89
+ try {
90
+ await displayStatus();
91
+ const choice = await (0, prompts_1.select)({
92
+ message: 'What would you like to do?',
93
+ choices: [
94
+ { name: '🔨 Build & Run App', value: 'build' },
95
+ { name: '📱 Select Device', value: 'device' },
96
+ { name: '🏗️ Change Build Variant', value: 'variant' },
97
+ { name: '📋 Open Logcat', value: 'logcat' },
98
+ { name: '⚙️ Run Gradle Task', value: 'gradle' },
99
+ { name: '🧹 Clean Project', value: 'clean' },
100
+ { name: '🔄 Sync Project', value: 'sync' },
101
+ { name: '🛠️ Configure Settings', value: 'config' },
102
+ { name: '❌ Exit', value: 'exit' },
103
+ ],
104
+ });
105
+ console.log(''); // Add spacing
106
+ switch (choice) {
107
+ case 'build': {
108
+ let continueBuildFlow = true;
109
+ while (continueBuildFlow) {
110
+ const buildResult = await (0, build_1.buildCommand)({ interactive: true });
111
+ if (buildResult.success) {
112
+ const nextAction = await handleBuildSuccess();
113
+ if (nextAction === 'menu') {
114
+ continueBuildFlow = false; // Exit build flow and return to main menu
115
+ }
116
+ else if (nextAction === 'build') {
117
+ // Continue the loop for another build
118
+ continue;
119
+ }
120
+ else {
121
+ // For logcat or device commands, we've handled them and can exit build flow
122
+ continueBuildFlow = false;
123
+ }
124
+ }
125
+ else {
126
+ const action = await handleBuildFailure(buildResult.error || 'Unknown error');
127
+ if (action === 'menu') {
128
+ continueBuildFlow = false; // Exit build flow and return to main menu
129
+ }
130
+ // If action is 'retry', the loop continues
131
+ }
132
+ }
133
+ break;
134
+ }
135
+ case 'device':
136
+ await (0, device_1.deviceCommand)();
137
+ break;
138
+ case 'variant':
139
+ await (0, variant_1.variantCommand)();
140
+ break;
141
+ case 'logcat':
142
+ await (0, logcat_1.logcatCommand)();
143
+ break;
144
+ case 'gradle': {
145
+ const task = await (0, gradle_1.selectGradleTask)();
146
+ let taskSuccess = false;
147
+ while (!taskSuccess) {
148
+ const result = await (0, gradle_1.gradleCommand)(task);
149
+ if (result.success) {
150
+ taskSuccess = true;
151
+ }
152
+ else {
153
+ const action = await handleTaskFailure(`Gradle task '${task}'`, result.error || 'Unknown error');
154
+ if (action === 'menu') {
155
+ break;
156
+ }
157
+ }
158
+ }
159
+ break;
160
+ }
161
+ case 'clean': {
162
+ let cleanSuccess = false;
163
+ while (!cleanSuccess) {
164
+ const result = await (0, gradle_1.gradleCommand)('clean');
165
+ if (result.success) {
166
+ cleanSuccess = true;
167
+ }
168
+ else {
169
+ const action = await handleTaskFailure('Clean', result.error || 'Unknown error');
170
+ if (action === 'menu') {
171
+ break;
172
+ }
173
+ }
174
+ }
175
+ break;
176
+ }
177
+ case 'sync': {
178
+ let syncSuccess = false;
179
+ while (!syncSuccess) {
180
+ const result = await (0, gradle_1.gradleCommand)('sync');
181
+ if (result.success) {
182
+ syncSuccess = true;
183
+ }
184
+ else {
185
+ const action = await handleTaskFailure('Sync', result.error || 'Unknown error');
186
+ if (action === 'menu') {
187
+ break;
188
+ }
189
+ }
190
+ }
191
+ break;
192
+ }
193
+ case 'config':
194
+ await (0, init_1.initCommand)();
195
+ break;
196
+ case 'exit':
197
+ logger_1.Logger.info('Goodbye! 👋');
198
+ process.exit(0);
199
+ break;
200
+ default:
201
+ logger_1.Logger.error('Invalid choice');
202
+ }
203
+ console.log(''); // Add spacing between iterations
204
+ }
205
+ catch (error) {
206
+ if (error instanceof Error && error.message.includes('User force closed')) {
207
+ logger_1.Logger.info('\\nGoodbye! 👋');
208
+ process.exit(0);
209
+ }
210
+ logger_1.Logger.error('Menu error:', error);
211
+ console.log(''); // Add spacing after error
212
+ }
213
+ }
214
+ }
215
+ async function displayStatus() {
216
+ console.clear();
217
+ console.log(chalk_1.default.cyan.bold('🤖 Droid CLI'));
218
+ console.log(chalk_1.default.gray('─'.repeat(50)));
219
+ try {
220
+ // Try to load config and project info
221
+ const configManager = config_manager_1.ConfigManager.getInstance();
222
+ const config = await configManager.load();
223
+ const project = await android_project_1.AndroidProject.detect(configManager.getProjectPath());
224
+ if (project) {
225
+ const projectInfo = project.getInfo();
226
+ if (projectInfo) {
227
+ console.log(`${chalk_1.default.bold('📁 Project:')} ${chalk_1.default.green(projectInfo.packageName)}`);
228
+ console.log(`${chalk_1.default.bold('📂 Path:')} ${projectInfo.rootPath}`);
229
+ console.log(`${chalk_1.default.bold('🏗️ Variant:')} ${config.defaultVariant}`);
230
+ // Display selected device
231
+ if (config.selectedDevice) {
232
+ const adbManager = adb_1.AdbManager.getInstance();
233
+ const devices = await adbManager.getDevices();
234
+ const selectedDevice = devices.find(d => d.id === config.selectedDevice);
235
+ if (selectedDevice && selectedDevice.state === 'device') {
236
+ console.log(`${chalk_1.default.bold('📱 Device:')} ${chalk_1.default.green(selectedDevice.name)} (${selectedDevice.id})`);
237
+ }
238
+ else {
239
+ console.log(`${chalk_1.default.bold('📱 Device:')} ${chalk_1.default.yellow('Not connected or unavailable')}`);
240
+ }
241
+ }
242
+ else {
243
+ console.log(`${chalk_1.default.bold('📱 Device:')} ${chalk_1.default.gray('None selected')}`);
244
+ }
245
+ }
246
+ else {
247
+ console.log(`${chalk_1.default.bold('📁 Project:')} ${chalk_1.default.red('Failed to load project info')}`);
248
+ }
249
+ }
250
+ else {
251
+ console.log(`${chalk_1.default.bold('📁 Project:')} ${chalk_1.default.yellow('No Android project detected')}`);
252
+ console.log(`${chalk_1.default.gray('Run "Configure Settings" to set up a project')}`);
253
+ }
254
+ // Display device status
255
+ const adbManager = adb_1.AdbManager.getInstance();
256
+ const devices = await adbManager.getDevices();
257
+ const availableDevices = adbManager.getAvailableDevices();
258
+ if (devices.length > 0) {
259
+ console.log(`${chalk_1.default.bold('🔌 Devices:')} ${availableDevices.length}/${devices.length} available`);
260
+ }
261
+ else {
262
+ console.log(`${chalk_1.default.bold('🔌 Devices:')} ${chalk_1.default.red('None detected')}`);
263
+ }
264
+ }
265
+ catch (error) {
266
+ console.log(`${chalk_1.default.bold('📁 Project:')} ${chalk_1.default.red('Error loading status')}`);
267
+ logger_1.Logger.debug('Status error:', error);
268
+ }
269
+ console.log(chalk_1.default.gray('─'.repeat(50)));
270
+ console.log('');
271
+ }
272
+ //# sourceMappingURL=interactive-menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive-menu.js","sourceRoot":"","sources":["../../src/ui/interactive-menu.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export declare enum LogLevel {
2
+ DEBUG = 0,
3
+ INFO = 1,
4
+ WARN = 2,
5
+ ERROR = 3
6
+ }
7
+ export declare class Logger {
8
+ private static level;
9
+ static setLevel(level: LogLevel): void;
10
+ static debug(message: string, ...args: any[]): void;
11
+ static info(message: string, ...args: any[]): void;
12
+ static success(message: string, ...args: any[]): void;
13
+ static warn(message: string, ...args: any[]): void;
14
+ static error(message: string, ...args: any[]): void;
15
+ static step(message: string): void;
16
+ static build(message: string): void;
17
+ static device(message: string): void;
18
+ static gradle(message: string): void;
19
+ }
20
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/ui/logger.ts"],"names":[],"mappings":"AAEA,oBAAY,QAAQ;IAClB,KAAK,IAAI;IACT,IAAI,IAAI;IACR,IAAI,IAAI;IACR,KAAK,IAAI;CACV;AAED,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAgE;IAEpF,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ;IAI/B,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE;IAM5C,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE;IAM3C,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE;IAM9C,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE;IAM3C,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE;IAM5C,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM;IAI3B,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM;IAI5B,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM;IAI7B,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM;CAG9B"}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Logger = exports.LogLevel = void 0;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ var LogLevel;
9
+ (function (LogLevel) {
10
+ LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG";
11
+ LogLevel[LogLevel["INFO"] = 1] = "INFO";
12
+ LogLevel[LogLevel["WARN"] = 2] = "WARN";
13
+ LogLevel[LogLevel["ERROR"] = 3] = "ERROR";
14
+ })(LogLevel || (exports.LogLevel = LogLevel = {}));
15
+ class Logger {
16
+ static setLevel(level) {
17
+ Logger.level = level;
18
+ }
19
+ static debug(message, ...args) {
20
+ if (Logger.level <= LogLevel.DEBUG) {
21
+ console.log(chalk_1.default.gray('🔍 DEBUG:'), message, ...args);
22
+ }
23
+ }
24
+ static info(message, ...args) {
25
+ if (Logger.level <= LogLevel.INFO) {
26
+ console.log(chalk_1.default.blue('ℹ️ INFO:'), message, ...args);
27
+ }
28
+ }
29
+ static success(message, ...args) {
30
+ if (Logger.level <= LogLevel.INFO) {
31
+ console.log(chalk_1.default.green('✅ SUCCESS:'), message, ...args);
32
+ }
33
+ }
34
+ static warn(message, ...args) {
35
+ if (Logger.level <= LogLevel.WARN) {
36
+ console.log(chalk_1.default.yellow('⚠️ WARN:'), message, ...args);
37
+ }
38
+ }
39
+ static error(message, ...args) {
40
+ if (Logger.level <= LogLevel.ERROR) {
41
+ console.error(chalk_1.default.red('❌ ERROR:'), message, ...args);
42
+ }
43
+ }
44
+ static step(message) {
45
+ console.log(chalk_1.default.cyan('📋'), message);
46
+ }
47
+ static build(message) {
48
+ console.log(chalk_1.default.magenta('🔨'), message);
49
+ }
50
+ static device(message) {
51
+ console.log(chalk_1.default.green('📱'), message);
52
+ }
53
+ static gradle(message) {
54
+ console.log(chalk_1.default.blue('⚙️ '), message);
55
+ }
56
+ }
57
+ exports.Logger = Logger;
58
+ Logger.level = process.env.DEBUG ? LogLevel.DEBUG : LogLevel.INFO;
59
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/ui/logger.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAE1B,IAAY,QAKX;AALD,WAAY,QAAQ;IAClB,yCAAS,CAAA;IACT,uCAAQ,CAAA;IACR,uCAAQ,CAAA;IACR,yCAAS,CAAA;AACX,CAAC,EALW,QAAQ,wBAAR,QAAQ,QAKnB;AAED,MAAa,MAAM;IAGjB,MAAM,CAAC,QAAQ,CAAC,KAAe;QAC7B,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAe,EAAE,GAAG,IAAW;QAC1C,IAAI,MAAM,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,OAAe,EAAE,GAAG,IAAW;QACzC,IAAI,MAAM,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,OAAe,EAAE,GAAG,IAAW;QAC5C,IAAI,MAAM,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,OAAe,EAAE,GAAG,IAAW;QACzC,IAAI,MAAM,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAe,EAAE,GAAG,IAAW;QAC1C,IAAI,MAAM,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACnC,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,OAAe;QACzB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAe;QAC1B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,OAAe;QAC3B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,OAAe;QAC3B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;;AAnDH,wBAoDC;AAnDgB,YAAK,GAAa,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC"}
@@ -0,0 +1,53 @@
1
+ import type { Options } from 'execa';
2
+ export interface ProcessResult {
3
+ stdout: string;
4
+ stderr: string;
5
+ exitCode: number;
6
+ success: boolean;
7
+ }
8
+ export declare class ProcessManager {
9
+ static run(command: string, args?: string[], options?: Options): Promise<ProcessResult>;
10
+ static spawn(command: string, args?: string[], options?: Options): import("execa").ResultPromise<{
11
+ preferLocal?: boolean;
12
+ localDir?: string | URL;
13
+ node?: boolean;
14
+ nodeOptions?: readonly string[];
15
+ nodePath?: string | URL;
16
+ shell?: boolean | string | URL;
17
+ cwd: string | URL;
18
+ env: Readonly<Partial<Record<string, string>>>;
19
+ extendEnv?: boolean;
20
+ input?: string | Uint8Array | import("stream").Readable;
21
+ inputFile?: string | URL;
22
+ stdin?: import("execa/types/stdio/type").StdinOptionCommon<false>;
23
+ stdout?: import("execa/types/stdio/type").StdoutStderrOptionCommon<false>;
24
+ stderr?: import("execa/types/stdio/type").StdoutStderrOptionCommon<false>;
25
+ stdio: "pipe" | "inherit" | "ignore" | "overlapped" | readonly [import("execa/types/stdio/type").StdinOptionCommon<false, false>, import("execa/types/stdio/type").StdoutStderrOptionCommon<false, false>, import("execa/types/stdio/type").StdoutStderrOptionCommon<false, false>, ...import("execa/types/stdio/type").StdioExtraOptionCommon<false>[]];
26
+ all?: boolean;
27
+ encoding?: import("execa/types/arguments/encoding-option").EncodingOption;
28
+ lines?: import("execa/types/arguments/specific").FdGenericOption<boolean>;
29
+ stripFinalNewline?: import("execa/types/arguments/specific").FdGenericOption<boolean>;
30
+ maxBuffer?: import("execa/types/arguments/specific").FdGenericOption<number>;
31
+ buffer?: import("execa/types/arguments/specific").FdGenericOption<boolean>;
32
+ ipc?: boolean | undefined;
33
+ serialization?: "json" | "advanced" | undefined;
34
+ ipcInput?: import("execa").Message | undefined;
35
+ verbose?: import("execa/types/verbose").VerboseOption;
36
+ reject?: boolean;
37
+ timeout?: number;
38
+ cancelSignal?: AbortSignal | undefined;
39
+ gracefulCancel?: boolean | undefined;
40
+ forceKillAfterDelay?: number | boolean | undefined;
41
+ killSignal?: keyof import("os").SignalConstants | number;
42
+ detached?: boolean | undefined;
43
+ cleanup?: boolean | undefined;
44
+ uid?: number;
45
+ gid?: number;
46
+ argv0?: string;
47
+ windowsHide?: boolean;
48
+ windowsVerbatimArguments?: boolean;
49
+ }>;
50
+ static checkCommand(command: string): Promise<boolean>;
51
+ static getCommandVersion(command: string, versionFlag?: string): Promise<string | null>;
52
+ }
53
+ //# sourceMappingURL=process.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../src/utils/process.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAGrC,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,qBAAa,cAAc;WACZ,GAAG,CACd,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,MAAM,EAAO,EACnB,OAAO,GAAE,OAAY,GACpB,OAAO,CAAC,aAAa,CAAC;IA6BzB,MAAM,CAAC,KAAK,CACV,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,MAAM,EAAO,EACnB,OAAO,GAAE,OAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAYV,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;WAS/C,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,SAAc,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAQnG"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ProcessManager = void 0;
4
+ const execa_1 = require("execa");
5
+ const logger_1 = require("../ui/logger");
6
+ class ProcessManager {
7
+ static async run(command, args = [], options = {}) {
8
+ try {
9
+ logger_1.Logger.debug(`Running: ${command} ${args.join(' ')}`);
10
+ const result = await (0, execa_1.execa)(command, args, {
11
+ stdio: options.stdio || 'pipe',
12
+ cwd: options.cwd || process.cwd(),
13
+ env: { ...process.env, ...options.env },
14
+ ...options,
15
+ });
16
+ return {
17
+ stdout: String(result.stdout || ''),
18
+ stderr: String(result.stderr || ''),
19
+ exitCode: result.exitCode || 0,
20
+ success: true,
21
+ };
22
+ }
23
+ catch (error) {
24
+ logger_1.Logger.debug(`Command failed: ${command} ${args.join(' ')}`);
25
+ return {
26
+ stdout: String(error.stdout || ''),
27
+ stderr: String(error.stderr || error.message || ''),
28
+ exitCode: error.exitCode || 1,
29
+ success: false,
30
+ };
31
+ }
32
+ }
33
+ static spawn(command, args = [], options = {}) {
34
+ logger_1.Logger.debug(`Spawning: ${command} ${args.join(' ')}`);
35
+ return (0, execa_1.execa)(command, args, {
36
+ stdio: 'inherit',
37
+ cwd: options.cwd || process.cwd(),
38
+ env: { ...process.env, ...options.env },
39
+ ...options,
40
+ });
41
+ }
42
+ static async checkCommand(command) {
43
+ try {
44
+ await (0, execa_1.execa)('which', [command], { stdio: 'pipe' });
45
+ return true;
46
+ }
47
+ catch {
48
+ return false;
49
+ }
50
+ }
51
+ static async getCommandVersion(command, versionFlag = '--version') {
52
+ try {
53
+ const result = await (0, execa_1.execa)(command, [versionFlag], { stdio: 'pipe' });
54
+ return String(result.stdout || '').trim();
55
+ }
56
+ catch {
57
+ return null;
58
+ }
59
+ }
60
+ }
61
+ exports.ProcessManager = ProcessManager;
62
+ //# sourceMappingURL=process.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process.js","sourceRoot":"","sources":["../../src/utils/process.ts"],"names":[],"mappings":";;;AAAA,iCAA8B;AAE9B,yCAAsC;AAStC,MAAa,cAAc;IACzB,MAAM,CAAC,KAAK,CAAC,GAAG,CACd,OAAe,EACf,OAAiB,EAAE,EACnB,UAAmB,EAAE;QAErB,IAAI,CAAC;YACH,eAAM,CAAC,KAAK,CAAC,YAAY,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAEtD,MAAM,MAAM,GAAG,MAAM,IAAA,aAAK,EAAC,OAAO,EAAE,IAAI,EAAE;gBACxC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,MAAM;gBAC9B,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;gBACjC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE;gBACvC,GAAG,OAAO;aACX,CAAC,CAAC;YAEH,OAAO;gBACL,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;gBACnC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;gBACnC,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,CAAC;gBAC9B,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,eAAM,CAAC,KAAK,CAAC,mBAAmB,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAE7D,OAAO;gBACL,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;gBAClC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;gBACnD,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,CAAC;gBAC7B,OAAO,EAAE,KAAK;aACf,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,CAAC,KAAK,CACV,OAAe,EACf,OAAiB,EAAE,EACnB,UAAmB,EAAE;QAErB,eAAM,CAAC,KAAK,CAAC,aAAa,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEvD,OAAO,IAAA,aAAK,EAAC,OAAO,EAAE,IAAI,EAAE;YAC1B,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;YACjC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE;YACvC,GAAG,OAAO;SACX,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,OAAe;QACvC,IAAI,CAAC;YACH,MAAM,IAAA,aAAK,EAAC,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YACnD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAe,EAAE,WAAW,GAAG,WAAW;QACvE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAA,aAAK,EAAC,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YACtE,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;CACF;AAlED,wCAkEC"}
@@ -0,0 +1,11 @@
1
+ export declare class Validators {
2
+ static isAndroidProject(projectPath: string): boolean;
3
+ static hasGradleWrapper(projectPath: string): boolean;
4
+ static isValidDeviceId(deviceId: string): boolean;
5
+ static isValidBuildVariant(variant: string): boolean;
6
+ static isValidGradleTask(task: string): boolean;
7
+ static isDirectory(dirPath: string): Promise<boolean>;
8
+ static isFile(filePath: string): Promise<boolean>;
9
+ static isPortAvailable(port: number): boolean;
10
+ }
11
+ //# sourceMappingURL=validators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../src/utils/validators.ts"],"names":[],"mappings":"AAGA,qBAAa,UAAU;IACrB,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAOrD,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAKrD,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAKjD,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAKpD,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;WAKlC,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;WAS9C,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASvD,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAG9C"}
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.Validators = void 0;
37
+ const fs = __importStar(require("fs-extra"));
38
+ const path = __importStar(require("path"));
39
+ class Validators {
40
+ static isAndroidProject(projectPath) {
41
+ const settingsGradle = path.join(projectPath, 'settings.gradle');
42
+ const settingsGradleKts = path.join(projectPath, 'settings.gradle.kts');
43
+ return fs.existsSync(settingsGradle) || fs.existsSync(settingsGradleKts);
44
+ }
45
+ static hasGradleWrapper(projectPath) {
46
+ const gradlewPath = path.join(projectPath, 'gradlew');
47
+ return fs.existsSync(gradlewPath);
48
+ }
49
+ static isValidDeviceId(deviceId) {
50
+ // Basic validation for Android device IDs
51
+ return /^[a-zA-Z0-9_-]+$/.test(deviceId) && deviceId.length > 0;
52
+ }
53
+ static isValidBuildVariant(variant) {
54
+ const validVariants = ['debug', 'release'];
55
+ return validVariants.includes(variant.toLowerCase());
56
+ }
57
+ static isValidGradleTask(task) {
58
+ // Basic validation for gradle task names
59
+ return /^[a-zA-Z][a-zA-Z0-9]*$/.test(task);
60
+ }
61
+ static async isDirectory(dirPath) {
62
+ try {
63
+ const stat = await fs.stat(dirPath);
64
+ return stat.isDirectory();
65
+ }
66
+ catch {
67
+ return false;
68
+ }
69
+ }
70
+ static async isFile(filePath) {
71
+ try {
72
+ const stat = await fs.stat(filePath);
73
+ return stat.isFile();
74
+ }
75
+ catch {
76
+ return false;
77
+ }
78
+ }
79
+ static isPortAvailable(port) {
80
+ return port > 0 && port <= 65535;
81
+ }
82
+ }
83
+ exports.Validators = Validators;
84
+ //# sourceMappingURL=validators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../src/utils/validators.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAA+B;AAC/B,2CAA6B;AAE7B,MAAa,UAAU;IACrB,MAAM,CAAC,gBAAgB,CAAC,WAAmB;QACzC,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;QACjE,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC;QAExE,OAAO,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,WAAmB;QACzC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QACtD,OAAO,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,eAAe,CAAC,QAAgB;QACrC,0CAA0C;QAC1C,OAAO,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IAClE,CAAC;IAED,MAAM,CAAC,mBAAmB,CAAC,OAAe;QACxC,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAC3C,OAAO,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,CAAC,iBAAiB,CAAC,IAAY;QACnC,yCAAyC;QACzC,OAAO,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,OAAe;QACtC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAgB;QAClC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrC,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,MAAM,CAAC,eAAe,CAAC,IAAY;QACjC,OAAO,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,KAAK,CAAC;IACnC,CAAC;CACF;AAjDD,gCAiDC"}