appshot-cli 0.7.0 → 0.8.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 (70) hide show
  1. package/README.md +244 -5
  2. package/dist/cli.js +23 -4
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/device.d.ts +3 -0
  5. package/dist/commands/device.d.ts.map +1 -0
  6. package/dist/commands/device.js +414 -0
  7. package/dist/commands/device.js.map +1 -0
  8. package/dist/commands/frame.d.ts +3 -0
  9. package/dist/commands/frame.d.ts.map +1 -0
  10. package/dist/commands/frame.js +251 -0
  11. package/dist/commands/frame.js.map +1 -0
  12. package/dist/commands/unwatch.d.ts +3 -0
  13. package/dist/commands/unwatch.d.ts.map +1 -0
  14. package/dist/commands/unwatch.js +53 -0
  15. package/dist/commands/unwatch.js.map +1 -0
  16. package/dist/commands/watch-status.d.ts +3 -0
  17. package/dist/commands/watch-status.d.ts.map +1 -0
  18. package/dist/commands/watch-status.js +116 -0
  19. package/dist/commands/watch-status.js.map +1 -0
  20. package/dist/commands/watch.d.ts +3 -0
  21. package/dist/commands/watch.d.ts.map +1 -0
  22. package/dist/commands/watch.js +322 -0
  23. package/dist/commands/watch.js.map +1 -0
  24. package/dist/core/compose.d.ts +25 -0
  25. package/dist/core/compose.d.ts.map +1 -1
  26. package/dist/core/compose.js +82 -0
  27. package/dist/core/compose.js.map +1 -1
  28. package/dist/core/devices.d.ts +5 -0
  29. package/dist/core/devices.d.ts.map +1 -1
  30. package/dist/core/devices.js +43 -1
  31. package/dist/core/devices.js.map +1 -1
  32. package/dist/services/compose-bridge.d.ts +47 -0
  33. package/dist/services/compose-bridge.d.ts.map +1 -0
  34. package/dist/services/compose-bridge.js +222 -0
  35. package/dist/services/compose-bridge.js.map +1 -0
  36. package/dist/services/device-manager.d.ts +14 -0
  37. package/dist/services/device-manager.d.ts.map +1 -0
  38. package/dist/services/device-manager.js +244 -0
  39. package/dist/services/device-manager.js.map +1 -0
  40. package/dist/services/doctor.d.ts +1 -0
  41. package/dist/services/doctor.d.ts.map +1 -1
  42. package/dist/services/doctor.js +94 -2
  43. package/dist/services/doctor.js.map +1 -1
  44. package/dist/services/processing-queue.d.ts +32 -0
  45. package/dist/services/processing-queue.d.ts.map +1 -0
  46. package/dist/services/processing-queue.js +150 -0
  47. package/dist/services/processing-queue.js.map +1 -0
  48. package/dist/services/screenshot-router.d.ts +31 -0
  49. package/dist/services/screenshot-router.d.ts.map +1 -0
  50. package/dist/services/screenshot-router.js +227 -0
  51. package/dist/services/screenshot-router.js.map +1 -0
  52. package/dist/services/system-requirements.d.ts +26 -0
  53. package/dist/services/system-requirements.d.ts.map +1 -0
  54. package/dist/services/system-requirements.js +189 -0
  55. package/dist/services/system-requirements.js.map +1 -0
  56. package/dist/services/watch-service.d.ts +39 -0
  57. package/dist/services/watch-service.d.ts.map +1 -0
  58. package/dist/services/watch-service.js +293 -0
  59. package/dist/services/watch-service.js.map +1 -0
  60. package/dist/types/device.d.ts +52 -0
  61. package/dist/types/device.d.ts.map +1 -0
  62. package/dist/types/device.js +2 -0
  63. package/dist/types/device.js.map +1 -0
  64. package/dist/types.d.ts +9 -0
  65. package/dist/types.d.ts.map +1 -1
  66. package/dist/utils/pid-manager.d.ts +11 -0
  67. package/dist/utils/pid-manager.d.ts.map +1 -0
  68. package/dist/utils/pid-manager.js +76 -0
  69. package/dist/utils/pid-manager.js.map +1 -0
  70. package/package.json +3 -3
@@ -0,0 +1,414 @@
1
+ import { Command } from 'commander';
2
+ import { select, confirm } from '@inquirer/prompts';
3
+ import { platform } from 'os';
4
+ import pc from 'picocolors';
5
+ import fs from 'fs/promises';
6
+ import path from 'path';
7
+ import { systemRequirements } from '../services/system-requirements.js';
8
+ import { deviceManager } from '../services/device-manager.js';
9
+ import { screenshotRouter } from '../services/screenshot-router.js';
10
+ import { createComposeBridge } from '../services/compose-bridge.js';
11
+ import { loadConfig } from '../core/files.js';
12
+ export default function deviceCommand() {
13
+ const cmd = new Command('device')
14
+ .description('Capture screenshots from simulators and physical devices (macOS only)');
15
+ // Capture subcommand
16
+ cmd
17
+ .command('capture')
18
+ .description('Capture screenshot from a device')
19
+ .option('-d, --device <name>', 'Device name or alias')
20
+ .option('--all', 'Capture from all connected/booted devices')
21
+ .option('--physical', 'Physical devices only')
22
+ .option('--simulators', 'Simulators only')
23
+ .option('--booted', 'Use currently booted simulator')
24
+ .option('--process', 'Auto-process with frames and gradients')
25
+ .option('--app <bundleId>', 'Launch app before capture')
26
+ .option('--screen <name>', 'Screen name for filename')
27
+ .action(async (options) => {
28
+ // Check platform first
29
+ if (platform() !== 'darwin') {
30
+ console.error(pc.red('❌ Device features are only available on macOS'));
31
+ console.error(pc.yellow('\nThis feature requires:'));
32
+ console.error(pc.dim(' • macOS operating system'));
33
+ console.error(pc.dim(' • Xcode or Xcode Command Line Tools'));
34
+ console.error(pc.dim(' • iOS simulators or connected iOS devices'));
35
+ process.exit(1);
36
+ }
37
+ // Check system requirements
38
+ const hasRequirements = await systemRequirements.ensureRequirements();
39
+ if (!hasRequirements) {
40
+ process.exit(1);
41
+ }
42
+ try {
43
+ // Get list of devices
44
+ let devices = await deviceManager.listAllDevices();
45
+ // Apply filters
46
+ if (options.physical) {
47
+ devices = devices.filter(d => d.type === 'physical');
48
+ }
49
+ else if (options.simulators) {
50
+ devices = devices.filter(d => d.type === 'simulator');
51
+ }
52
+ if (options.booted) {
53
+ devices = devices.filter(d => d.state === 'booted');
54
+ if (devices.length === 0) {
55
+ console.error(pc.red('❌ No booted simulators found'));
56
+ console.log(pc.dim(' Boot a simulator first or use --device to select one'));
57
+ process.exit(1);
58
+ }
59
+ }
60
+ // Handle device selection
61
+ let selectedDevices = [];
62
+ if (options.all) {
63
+ // Capture from all available devices
64
+ selectedDevices = devices.filter(d => d.type === 'physical' ? d.state === 'connected' : true);
65
+ if (selectedDevices.length === 0) {
66
+ console.error(pc.red('❌ No available devices found'));
67
+ process.exit(1);
68
+ }
69
+ }
70
+ else if (options.device) {
71
+ // Find device by name or alias
72
+ const device = await findDevice(devices, options.device);
73
+ if (!device) {
74
+ console.error(pc.red(`❌ Device not found: ${options.device}`));
75
+ console.log(pc.dim(' Use "appshot device list" to see available devices'));
76
+ process.exit(1);
77
+ }
78
+ selectedDevices = [device];
79
+ }
80
+ else if (options.booted && devices.length === 1) {
81
+ // Single booted device, use it automatically
82
+ selectedDevices = devices;
83
+ }
84
+ else {
85
+ // Interactive selection
86
+ const device = await selectDevice(devices);
87
+ if (!device) {
88
+ console.log(pc.yellow('Cancelled'));
89
+ process.exit(0);
90
+ }
91
+ selectedDevices = [device];
92
+ }
93
+ // Launch app if specified
94
+ if (options.app) {
95
+ for (const device of selectedDevices) {
96
+ try {
97
+ console.log(pc.cyan(`Launching ${options.app} on ${device.name}...`));
98
+ await deviceManager.launchApp({
99
+ device,
100
+ bundleId: options.app
101
+ });
102
+ // Wait for app to load
103
+ await new Promise(resolve => setTimeout(resolve, 3000));
104
+ }
105
+ catch (error) {
106
+ console.error(pc.red(`❌ Failed to launch app on ${device.name}:`), error);
107
+ }
108
+ }
109
+ }
110
+ // Capture screenshots
111
+ for (const device of selectedDevices) {
112
+ await captureFromDevice(device, {
113
+ screenName: options.screen,
114
+ process: options.process
115
+ });
116
+ }
117
+ console.log(pc.green('\n✅ Screenshot capture complete!'));
118
+ }
119
+ catch (error) {
120
+ console.error(pc.red('❌ Error:'), error);
121
+ process.exit(1);
122
+ }
123
+ });
124
+ // List subcommand
125
+ cmd
126
+ .command('list')
127
+ .description('List available devices')
128
+ .option('--json', 'Output as JSON')
129
+ .action(async (options) => {
130
+ // Check platform first
131
+ if (platform() !== 'darwin') {
132
+ console.error(pc.red('❌ Device features are only available on macOS'));
133
+ process.exit(1);
134
+ }
135
+ const hasRequirements = await systemRequirements.ensureRequirements();
136
+ if (!hasRequirements) {
137
+ process.exit(1);
138
+ }
139
+ try {
140
+ const devices = await deviceManager.listAllDevices();
141
+ if (options.json) {
142
+ console.log(JSON.stringify(devices, null, 2));
143
+ return;
144
+ }
145
+ // Group devices
146
+ const physical = devices.filter(d => d.type === 'physical');
147
+ const simulators = devices.filter(d => d.type === 'simulator');
148
+ console.log(pc.bold('\n📱 Available Devices:\n'));
149
+ if (physical.length > 0) {
150
+ console.log(pc.bold('Physical Devices:'));
151
+ for (const device of physical) {
152
+ const status = device.state === 'connected' ? pc.green('🟢') : pc.gray('⚪');
153
+ const info = `${device.displaySize || ''} ${device.resolution || ''}`.trim();
154
+ console.log(` ${status} ${device.name.padEnd(30)} ${device.osVersion || ''} ${pc.dim(info)}`);
155
+ }
156
+ console.log();
157
+ }
158
+ if (simulators.length > 0) {
159
+ console.log(pc.bold('Simulators:'));
160
+ // Group by category
161
+ const iphones = simulators.filter(d => d.category === 'iphone');
162
+ const ipads = simulators.filter(d => d.category === 'ipad');
163
+ const watches = simulators.filter(d => d.category === 'watch');
164
+ const others = simulators.filter(d => !['iphone', 'ipad', 'watch'].includes(d.category));
165
+ if (iphones.length > 0) {
166
+ console.log(pc.dim(' iPhone:'));
167
+ for (const device of iphones) {
168
+ const status = device.state === 'booted' ? pc.green('🟢') : pc.gray('⚪');
169
+ const info = `${device.displaySize || ''} ${device.resolution || ''}`.trim();
170
+ console.log(` ${status} ${device.name.padEnd(28)} ${device.osVersion || ''} ${pc.dim(info)}`);
171
+ }
172
+ }
173
+ if (ipads.length > 0) {
174
+ console.log(pc.dim(' iPad:'));
175
+ for (const device of ipads) {
176
+ const status = device.state === 'booted' ? pc.green('🟢') : pc.gray('⚪');
177
+ const info = `${device.displaySize || ''} ${device.resolution || ''}`.trim();
178
+ console.log(` ${status} ${device.name.padEnd(28)} ${device.osVersion || ''} ${pc.dim(info)}`);
179
+ }
180
+ }
181
+ if (watches.length > 0) {
182
+ console.log(pc.dim(' Apple Watch:'));
183
+ for (const device of watches) {
184
+ const status = device.state === 'booted' ? pc.green('🟢') : pc.gray('⚪');
185
+ const info = `${device.displaySize || ''} ${device.resolution || ''}`.trim();
186
+ console.log(` ${status} ${device.name.padEnd(28)} ${device.osVersion || ''} ${pc.dim(info)}`);
187
+ }
188
+ }
189
+ if (others.length > 0) {
190
+ console.log(pc.dim(' Other:'));
191
+ for (const device of others) {
192
+ const status = device.state === 'booted' ? pc.green('🟢') : pc.gray('⚪');
193
+ const info = `${device.displaySize || ''} ${device.resolution || ''}`.trim();
194
+ console.log(` ${status} ${device.name.padEnd(28)} ${device.osVersion || ''} ${pc.dim(info)}`);
195
+ }
196
+ }
197
+ }
198
+ if (devices.length === 0) {
199
+ console.log(pc.yellow('No devices found'));
200
+ console.log(pc.dim('\nTips:'));
201
+ console.log(pc.dim(' • Connect a physical device via USB'));
202
+ console.log(pc.dim(' • Open Xcode > Window > Devices and Simulators'));
203
+ console.log(pc.dim(' • Create simulators in Xcode'));
204
+ }
205
+ }
206
+ catch (error) {
207
+ console.error(pc.red('❌ Error listing devices:'), error);
208
+ process.exit(1);
209
+ }
210
+ });
211
+ // Prepare subcommand (boot simulators)
212
+ cmd
213
+ .command('prepare')
214
+ .description('Boot required simulators for App Store presets')
215
+ .option('--preset <name>', 'App Store preset (e.g., iphone-6-9,ipad-13)')
216
+ .option('--device <name>', 'Specific device to boot')
217
+ .action(async (options) => {
218
+ // Check platform first
219
+ if (platform() !== 'darwin') {
220
+ console.error(pc.red('❌ Device features are only available on macOS'));
221
+ process.exit(1);
222
+ }
223
+ const hasRequirements = await systemRequirements.ensureRequirements();
224
+ if (!hasRequirements) {
225
+ process.exit(1);
226
+ }
227
+ try {
228
+ const devices = await deviceManager.listSimulators();
229
+ if (options.device) {
230
+ // Boot specific device
231
+ const device = await findDevice(devices, options.device);
232
+ if (!device) {
233
+ console.error(pc.red(`❌ Device not found: ${options.device}`));
234
+ process.exit(1);
235
+ }
236
+ if (device.state === 'booted') {
237
+ console.log(pc.green(`✅ ${device.name} is already booted`));
238
+ }
239
+ else {
240
+ await deviceManager.bootSimulator(device);
241
+ console.log(pc.green(`✅ ${device.name} booted successfully`));
242
+ }
243
+ }
244
+ else if (options.preset) {
245
+ // Boot devices for preset
246
+ console.log(pc.cyan('🚀 Preparing devices for App Store preset...'));
247
+ // TODO: Implement preset device selection
248
+ console.log(pc.yellow('Preset support coming soon!'));
249
+ }
250
+ else {
251
+ // Interactive selection
252
+ const device = await selectDevice(devices.filter(d => d.state !== 'booted'));
253
+ if (device) {
254
+ await deviceManager.bootSimulator(device);
255
+ console.log(pc.green(`✅ ${device.name} booted successfully`));
256
+ }
257
+ }
258
+ }
259
+ catch (error) {
260
+ console.error(pc.red('❌ Error:'), error);
261
+ process.exit(1);
262
+ }
263
+ });
264
+ return cmd;
265
+ }
266
+ async function selectDevice(devices) {
267
+ if (devices.length === 0) {
268
+ console.error(pc.red('No devices available'));
269
+ return null;
270
+ }
271
+ // Group devices for better display
272
+ const choices = [];
273
+ // Physical devices
274
+ const physical = devices.filter(d => d.type === 'physical');
275
+ if (physical.length > 0) {
276
+ choices.push({
277
+ name: pc.dim('━━━ 📱 Physical Devices ━━━'),
278
+ value: null,
279
+ disabled: true
280
+ });
281
+ for (const device of physical) {
282
+ const status = device.state === 'connected' ? '🟢' : '⚪';
283
+ const info = device.displaySize ? `• ${device.displaySize}" display` : '';
284
+ choices.push({
285
+ name: `${status} ${device.name.padEnd(30)} ${device.osVersion || ''} ${pc.dim(info)}`,
286
+ value: device
287
+ });
288
+ }
289
+ }
290
+ // Simulators
291
+ const simulators = devices.filter(d => d.type === 'simulator');
292
+ if (simulators.length > 0) {
293
+ if (choices.length > 0) {
294
+ choices.push({
295
+ name: '',
296
+ value: null,
297
+ disabled: true
298
+ });
299
+ }
300
+ choices.push({
301
+ name: pc.dim('━━━ 💻 Simulators ━━━'),
302
+ value: null,
303
+ disabled: true
304
+ });
305
+ // Group by category
306
+ const categories = ['iphone', 'ipad', 'watch', 'tv', 'vision'];
307
+ for (const category of categories) {
308
+ const categoryDevices = simulators.filter(d => d.category === category);
309
+ if (categoryDevices.length > 0) {
310
+ for (const device of categoryDevices) {
311
+ const status = device.state === 'booted' ? '🟢' : '⚪';
312
+ const info = device.displaySize ? `• ${device.displaySize}" • ${device.resolution || ''}` : '';
313
+ choices.push({
314
+ name: `${status} ${device.name.padEnd(30)} ${device.osVersion || ''} ${pc.dim(info)}`,
315
+ value: device
316
+ });
317
+ }
318
+ }
319
+ }
320
+ }
321
+ try {
322
+ const selected = await select({
323
+ message: 'Select a device for screenshot capture:',
324
+ choices: choices.filter(c => c.value !== null || c.disabled),
325
+ pageSize: 15
326
+ });
327
+ return selected;
328
+ }
329
+ catch {
330
+ // User cancelled
331
+ return null;
332
+ }
333
+ }
334
+ async function findDevice(devices, query) {
335
+ // Try exact match
336
+ let device = devices.find(d => d.name === query);
337
+ if (device)
338
+ return device;
339
+ // Try case-insensitive match
340
+ device = devices.find(d => d.name.toLowerCase() === query.toLowerCase());
341
+ if (device)
342
+ return device;
343
+ // Try partial match
344
+ device = devices.find(d => d.name.toLowerCase().includes(query.toLowerCase()));
345
+ if (device)
346
+ return device;
347
+ // Try by index (if numeric)
348
+ if (/^\d+$/.test(query)) {
349
+ const index = parseInt(query) - 1;
350
+ if (devices[index])
351
+ return devices[index];
352
+ }
353
+ return null;
354
+ }
355
+ async function captureFromDevice(device, options) {
356
+ // Boot simulator if needed
357
+ if (device.type === 'simulator' && device.state !== 'booted') {
358
+ const shouldBoot = await confirm({
359
+ message: `${device.name} is not booted. Boot it now?`,
360
+ default: true
361
+ });
362
+ if (shouldBoot) {
363
+ console.log(pc.cyan(`Booting ${device.name}...`));
364
+ await deviceManager.bootSimulator(device);
365
+ // Wait for boot to complete
366
+ await new Promise(resolve => setTimeout(resolve, 5000));
367
+ }
368
+ else {
369
+ console.log(pc.yellow('Skipping device'));
370
+ return;
371
+ }
372
+ }
373
+ // Capture screenshot
374
+ console.log(pc.cyan(`📸 Capturing from ${device.name}...`));
375
+ try {
376
+ const screenshot = await deviceManager.captureScreenshot({
377
+ device,
378
+ format: 'png'
379
+ });
380
+ // Route to correct directory
381
+ const tempPath = path.join('/tmp', `appshot-temp-${Date.now()}.png`);
382
+ await fs.writeFile(tempPath, screenshot);
383
+ const targetPath = await screenshotRouter.routeAndMove(device, tempPath, options.screenName);
384
+ console.log(pc.green(`✅ Saved to: ${targetPath}`));
385
+ // Process if requested
386
+ if (options.process) {
387
+ console.log(pc.cyan('🎨 Processing with frame and gradient...'));
388
+ const config = await loadConfig();
389
+ const composeBridge = createComposeBridge(config);
390
+ const result = await composeBridge.processDeviceScreenshot({
391
+ screenshotPath: targetPath,
392
+ device,
393
+ processOptions: {
394
+ frameOnly: false,
395
+ format: 'png'
396
+ }
397
+ });
398
+ if (result.success) {
399
+ console.log(pc.green(`✅ Final: ${result.outputPath}`));
400
+ if (result.frameUsed) {
401
+ console.log(pc.dim(` Frame: ${result.frameUsed}`));
402
+ }
403
+ }
404
+ else {
405
+ console.log(pc.red(`❌ Processing failed: ${result.error}`));
406
+ }
407
+ }
408
+ }
409
+ catch (error) {
410
+ console.error(pc.red(`❌ Failed to capture from ${device.name}:`), error);
411
+ throw error;
412
+ }
413
+ }
414
+ //# sourceMappingURL=device.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device.js","sourceRoot":"","sources":["../../src/commands/device.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export default function frameCmd(): Command;
3
+ //# sourceMappingURL=frame.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame.d.ts","sourceRoot":"","sources":["../../src/commands/frame.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgKpC,MAAM,CAAC,OAAO,UAAU,QAAQ,YA+H/B"}