@limrun/cli 0.3.1 → 0.4.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.
- package/README.md +37 -10
- package/dist/base-command.d.ts +6 -0
- package/dist/base-command.d.ts.map +1 -1
- package/dist/base-command.js +26 -5
- package/dist/base-command.js.map +1 -1
- package/dist/commands/android/connect.d.ts +1 -0
- package/dist/commands/android/connect.d.ts.map +1 -1
- package/dist/commands/android/create.d.ts +1 -0
- package/dist/commands/android/create.d.ts.map +1 -1
- package/dist/commands/android/create.js +12 -10
- package/dist/commands/android/create.js.map +1 -1
- package/dist/commands/android/delete.d.ts +1 -0
- package/dist/commands/android/delete.d.ts.map +1 -1
- package/dist/commands/android/element-tree.d.ts +14 -1
- package/dist/commands/android/element-tree.d.ts.map +1 -1
- package/dist/commands/android/element-tree.js +59 -6
- package/dist/commands/android/element-tree.js.map +1 -1
- package/dist/commands/android/find-element.d.ts +27 -0
- package/dist/commands/android/find-element.d.ts.map +1 -0
- package/dist/commands/android/find-element.js +72 -0
- package/dist/commands/android/find-element.js.map +1 -0
- package/dist/commands/android/get.d.ts +1 -0
- package/dist/commands/android/get.d.ts.map +1 -1
- package/dist/commands/android/install-app.d.ts +16 -1
- package/dist/commands/android/install-app.d.ts.map +1 -1
- package/dist/commands/android/install-app.js +66 -3
- package/dist/commands/android/install-app.js.map +1 -1
- package/dist/commands/android/list.d.ts +1 -0
- package/dist/commands/android/list.d.ts.map +1 -1
- package/dist/commands/android/open-url.d.ts +16 -1
- package/dist/commands/android/open-url.d.ts.map +1 -1
- package/dist/commands/android/open-url.js +50 -6
- package/dist/commands/android/open-url.js.map +1 -1
- package/dist/commands/android/press-key.d.ts +17 -1
- package/dist/commands/android/press-key.d.ts.map +1 -1
- package/dist/commands/android/press-key.js +51 -6
- package/dist/commands/android/press-key.js.map +1 -1
- package/dist/commands/android/record.d.ts +20 -1
- package/dist/commands/android/record.d.ts.map +1 -1
- package/dist/commands/android/record.js +99 -3
- package/dist/commands/android/record.js.map +1 -1
- package/dist/commands/android/screenshot.d.ts +15 -1
- package/dist/commands/android/screenshot.d.ts.map +1 -1
- package/dist/commands/android/screenshot.js +64 -3
- package/dist/commands/android/screenshot.js.map +1 -1
- package/dist/commands/android/scroll.d.ts +30 -1
- package/dist/commands/android/scroll.d.ts.map +1 -1
- package/dist/commands/android/scroll.js +70 -6
- package/dist/commands/android/scroll.js.map +1 -1
- package/dist/commands/android/tap-element.d.ts +25 -1
- package/dist/commands/android/tap-element.d.ts.map +1 -1
- package/dist/commands/android/tap-element.js +59 -6
- package/dist/commands/android/tap-element.js.map +1 -1
- package/dist/commands/android/tap.d.ts +23 -1
- package/dist/commands/android/tap.d.ts.map +1 -1
- package/dist/commands/android/tap.js +54 -6
- package/dist/commands/android/tap.js.map +1 -1
- package/dist/commands/android/type.d.ts +29 -1
- package/dist/commands/android/type.d.ts.map +1 -1
- package/dist/commands/android/type.js +52 -6
- package/dist/commands/android/type.js.map +1 -1
- package/dist/commands/asset/delete.d.ts +1 -0
- package/dist/commands/asset/delete.d.ts.map +1 -1
- package/dist/commands/asset/list.d.ts +2 -0
- package/dist/commands/asset/list.d.ts.map +1 -1
- package/dist/commands/asset/list.js +6 -0
- package/dist/commands/asset/list.js.map +1 -1
- package/dist/commands/asset/pull.d.ts +1 -0
- package/dist/commands/asset/pull.d.ts.map +1 -1
- package/dist/commands/asset/pull.js +2 -2
- package/dist/commands/asset/pull.js.map +1 -1
- package/dist/commands/asset/push.d.ts +1 -0
- package/dist/commands/asset/push.d.ts.map +1 -1
- package/dist/commands/asset/push.js +2 -3
- package/dist/commands/asset/push.js.map +1 -1
- package/dist/commands/ios/{log.d.ts → app-log.d.ts} +4 -3
- package/dist/commands/ios/app-log.d.ts.map +1 -0
- package/dist/commands/ios/{log.js → app-log.js} +20 -21
- package/dist/commands/ios/app-log.js.map +1 -0
- package/dist/commands/{exec/type.d.ts → ios/cp.d.ts} +5 -4
- package/dist/commands/ios/cp.d.ts.map +1 -0
- package/dist/commands/ios/cp.js +66 -0
- package/dist/commands/ios/cp.js.map +1 -0
- package/dist/commands/ios/create.d.ts +1 -0
- package/dist/commands/ios/create.d.ts.map +1 -1
- package/dist/commands/ios/create.js +27 -13
- package/dist/commands/ios/create.js.map +1 -1
- package/dist/commands/ios/delete.d.ts +1 -0
- package/dist/commands/ios/delete.d.ts.map +1 -1
- package/dist/commands/ios/element-tree.d.ts +14 -1
- package/dist/commands/ios/element-tree.d.ts.map +1 -1
- package/dist/commands/ios/element-tree.js +56 -6
- package/dist/commands/ios/element-tree.js.map +1 -1
- package/dist/commands/ios/get.d.ts +1 -0
- package/dist/commands/ios/get.d.ts.map +1 -1
- package/dist/commands/ios/info.d.ts +1 -0
- package/dist/commands/ios/info.d.ts.map +1 -1
- package/dist/commands/ios/install-app.d.ts +18 -1
- package/dist/commands/ios/install-app.d.ts.map +1 -1
- package/dist/commands/ios/install-app.js +93 -3
- package/dist/commands/ios/install-app.js.map +1 -1
- package/dist/commands/ios/launch-app.d.ts +1 -0
- package/dist/commands/ios/launch-app.d.ts.map +1 -1
- package/dist/commands/ios/list-apps.d.ts +1 -0
- package/dist/commands/ios/list-apps.d.ts.map +1 -1
- package/dist/commands/ios/list.d.ts +1 -0
- package/dist/commands/ios/list.d.ts.map +1 -1
- package/dist/commands/{exec/element-tree.d.ts → ios/lsof.d.ts} +3 -2
- package/dist/commands/ios/lsof.d.ts.map +1 -0
- package/dist/commands/ios/lsof.js +49 -0
- package/dist/commands/ios/lsof.js.map +1 -0
- package/dist/commands/ios/open-url.d.ts +16 -1
- package/dist/commands/ios/open-url.d.ts.map +1 -1
- package/dist/commands/ios/open-url.js +50 -6
- package/dist/commands/ios/open-url.js.map +1 -1
- package/dist/commands/ios/perform.d.ts +16 -1
- package/dist/commands/ios/perform.d.ts.map +1 -1
- package/dist/commands/ios/perform.js +224 -3
- package/dist/commands/ios/perform.js.map +1 -1
- package/dist/commands/ios/press-key.d.ts +17 -1
- package/dist/commands/ios/press-key.d.ts.map +1 -1
- package/dist/commands/ios/press-key.js +51 -6
- package/dist/commands/ios/press-key.js.map +1 -1
- package/dist/commands/ios/record.d.ts +20 -1
- package/dist/commands/ios/record.d.ts.map +1 -1
- package/dist/commands/ios/record.js +100 -3
- package/dist/commands/ios/record.js.map +1 -1
- package/dist/commands/ios/screenshot.d.ts +15 -1
- package/dist/commands/ios/screenshot.d.ts.map +1 -1
- package/dist/commands/ios/screenshot.js +63 -3
- package/dist/commands/ios/screenshot.js.map +1 -1
- package/dist/commands/ios/scroll.d.ts +17 -1
- package/dist/commands/ios/scroll.d.ts.map +1 -1
- package/dist/commands/ios/scroll.js +55 -6
- package/dist/commands/ios/scroll.js.map +1 -1
- package/dist/commands/{exec/install-app.d.ts → ios/simctl.d.ts} +5 -5
- package/dist/commands/ios/simctl.d.ts.map +1 -0
- package/dist/commands/ios/simctl.js +75 -0
- package/dist/commands/ios/simctl.js.map +1 -0
- package/dist/commands/ios/sync.d.ts +3 -0
- package/dist/commands/ios/sync.d.ts.map +1 -1
- package/dist/commands/ios/sync.js +13 -4
- package/dist/commands/ios/sync.js.map +1 -1
- package/dist/commands/{exec/open-url.d.ts → ios/syslog.d.ts} +4 -5
- package/dist/commands/ios/syslog.d.ts.map +1 -0
- package/dist/commands/ios/syslog.js +65 -0
- package/dist/commands/ios/syslog.js.map +1 -0
- package/dist/commands/ios/tap-element.d.ts +21 -1
- package/dist/commands/ios/tap-element.d.ts.map +1 -1
- package/dist/commands/ios/tap-element.js +91 -6
- package/dist/commands/ios/tap-element.js.map +1 -1
- package/dist/commands/ios/tap.d.ts +23 -1
- package/dist/commands/ios/tap.d.ts.map +1 -1
- package/dist/commands/ios/tap.js +54 -6
- package/dist/commands/ios/tap.js.map +1 -1
- package/dist/commands/ios/terminate-app.d.ts +1 -0
- package/dist/commands/ios/terminate-app.d.ts.map +1 -1
- package/dist/commands/ios/type.d.ts +17 -1
- package/dist/commands/ios/type.d.ts.map +1 -1
- package/dist/commands/ios/type.js +52 -6
- package/dist/commands/ios/type.js.map +1 -1
- package/dist/commands/{exec/screenshot.d.ts → ios/xcodebuild.d.ts} +4 -3
- package/dist/commands/ios/xcodebuild.d.ts.map +1 -0
- package/dist/commands/ios/xcodebuild.js +61 -0
- package/dist/commands/ios/xcodebuild.js.map +1 -0
- package/dist/commands/ios/xcrun.d.ts +16 -0
- package/dist/commands/ios/xcrun.d.ts.map +1 -0
- package/dist/commands/ios/xcrun.js +62 -0
- package/dist/commands/ios/xcrun.js.map +1 -0
- package/dist/commands/login.d.ts +7 -2
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +5 -2
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logout.d.ts +7 -2
- package/dist/commands/logout.d.ts.map +1 -1
- package/dist/commands/logout.js +5 -2
- package/dist/commands/logout.js.map +1 -1
- package/dist/commands/session/start.d.ts +1 -0
- package/dist/commands/session/start.d.ts.map +1 -1
- package/dist/commands/session/status.d.ts +1 -0
- package/dist/commands/session/status.d.ts.map +1 -1
- package/dist/commands/session/stop.d.ts +5 -2
- package/dist/commands/session/stop.d.ts.map +1 -1
- package/dist/commands/session/stop.js +4 -2
- package/dist/commands/session/stop.js.map +1 -1
- package/dist/commands/xcode/build.d.ts +4 -0
- package/dist/commands/xcode/build.d.ts.map +1 -1
- package/dist/commands/xcode/build.js +28 -9
- package/dist/commands/xcode/build.js.map +1 -1
- package/dist/commands/xcode/create.d.ts +1 -0
- package/dist/commands/xcode/create.d.ts.map +1 -1
- package/dist/commands/xcode/create.js +13 -7
- package/dist/commands/xcode/create.js.map +1 -1
- package/dist/commands/xcode/delete.d.ts +1 -0
- package/dist/commands/xcode/delete.d.ts.map +1 -1
- package/dist/commands/xcode/get.d.ts +1 -0
- package/dist/commands/xcode/get.d.ts.map +1 -1
- package/dist/commands/xcode/list.d.ts +1 -0
- package/dist/commands/xcode/list.d.ts.map +1 -1
- package/dist/commands/xcode/sync.d.ts +4 -0
- package/dist/commands/xcode/sync.d.ts.map +1 -1
- package/dist/commands/xcode/sync.js +19 -3
- package/dist/commands/xcode/sync.js.map +1 -1
- package/dist/lib/android-selector.d.ts +50 -0
- package/dist/lib/android-selector.d.ts.map +1 -0
- package/dist/lib/android-selector.js +103 -0
- package/dist/lib/android-selector.js.map +1 -0
- package/dist/lib/config.js +1 -1
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/daemon.d.ts.map +1 -1
- package/dist/lib/daemon.js +25 -3
- package/dist/lib/daemon.js.map +1 -1
- package/dist/lib/ignore-patterns.d.ts +2 -0
- package/dist/lib/ignore-patterns.d.ts.map +1 -0
- package/dist/lib/ignore-patterns.js +18 -0
- package/dist/lib/ignore-patterns.js.map +1 -0
- package/package.json +3 -6
- package/dist/commands/exec/element-tree.d.ts.map +0 -1
- package/dist/commands/exec/element-tree.js +0 -61
- package/dist/commands/exec/element-tree.js.map +0 -1
- package/dist/commands/exec/install-app.d.ts.map +0 -1
- package/dist/commands/exec/install-app.js +0 -84
- package/dist/commands/exec/install-app.js.map +0 -1
- package/dist/commands/exec/open-url.d.ts.map +0 -1
- package/dist/commands/exec/open-url.js +0 -48
- package/dist/commands/exec/open-url.js.map +0 -1
- package/dist/commands/exec/perform.d.ts +0 -16
- package/dist/commands/exec/perform.d.ts.map +0 -1
- package/dist/commands/exec/perform.js +0 -232
- package/dist/commands/exec/perform.js.map +0 -1
- package/dist/commands/exec/press-key.d.ts +0 -17
- package/dist/commands/exec/press-key.d.ts.map +0 -1
- package/dist/commands/exec/press-key.js +0 -49
- package/dist/commands/exec/press-key.js.map +0 -1
- package/dist/commands/exec/record.d.ts +0 -20
- package/dist/commands/exec/record.d.ts.map +0 -1
- package/dist/commands/exec/record.js +0 -101
- package/dist/commands/exec/record.js.map +0 -1
- package/dist/commands/exec/screenshot.d.ts.map +0 -1
- package/dist/commands/exec/screenshot.js +0 -72
- package/dist/commands/exec/screenshot.js.map +0 -1
- package/dist/commands/exec/scroll.d.ts +0 -17
- package/dist/commands/exec/scroll.d.ts.map +0 -1
- package/dist/commands/exec/scroll.js +0 -58
- package/dist/commands/exec/scroll.js.map +0 -1
- package/dist/commands/exec/tap-element.d.ts +0 -18
- package/dist/commands/exec/tap-element.d.ts.map +0 -1
- package/dist/commands/exec/tap-element.js +0 -102
- package/dist/commands/exec/tap-element.js.map +0 -1
- package/dist/commands/exec/tap.d.ts +0 -23
- package/dist/commands/exec/tap.d.ts.map +0 -1
- package/dist/commands/exec/tap.js +0 -57
- package/dist/commands/exec/tap.js.map +0 -1
- package/dist/commands/exec/type.d.ts.map +0 -1
- package/dist/commands/exec/type.js +0 -54
- package/dist/commands/exec/type.js.map +0 -1
- package/dist/commands/ios/log.d.ts.map +0 -1
- package/dist/commands/ios/log.js.map +0 -1
package/README.md
CHANGED
|
@@ -39,6 +39,7 @@ Every command supports these flags:
|
|
|
39
39
|
| ------------------- | ----------------------------------------------- |
|
|
40
40
|
| `--api-key <value>` | API key (also reads `LIM_API_KEY` env var) |
|
|
41
41
|
| `--json` | Output as JSON instead of human-readable tables |
|
|
42
|
+
| `--quiet` | Suppress intermediate logs and print only the final result |
|
|
42
43
|
| `--help` | Show help for any command |
|
|
43
44
|
|
|
44
45
|
## Command Structure
|
|
@@ -160,8 +161,8 @@ lim ios screenshot # Output base64 to stdout
|
|
|
160
161
|
|
|
161
162
|
# Tapping
|
|
162
163
|
lim ios tap 100 200
|
|
163
|
-
lim ios tap-element --label "Submit"
|
|
164
|
-
lim ios tap-element --
|
|
164
|
+
lim ios tap-element --ax-label "Submit"
|
|
165
|
+
lim ios tap-element --ax-unique-id btn_ok
|
|
165
166
|
|
|
166
167
|
# Text input
|
|
167
168
|
lim ios type "Hello World"
|
|
@@ -191,6 +192,13 @@ lim ios element-tree | jq '.'
|
|
|
191
192
|
# Open URLs / deep links
|
|
192
193
|
lim ios open-url https://example.com
|
|
193
194
|
lim ios open-url myapp://settings
|
|
195
|
+
|
|
196
|
+
# Low-level simulator access
|
|
197
|
+
lim ios simctl -- listapps booted
|
|
198
|
+
lim ios xcrun -- --sdk iphonesimulator --show-sdk-version
|
|
199
|
+
lim ios xcodebuild -- -version
|
|
200
|
+
lim ios cp payload.json ./fixtures/payload.json
|
|
201
|
+
lim ios lsof
|
|
194
202
|
```
|
|
195
203
|
|
|
196
204
|
#### App Management (iOS only)
|
|
@@ -199,6 +207,8 @@ lim ios open-url myapp://settings
|
|
|
199
207
|
# Install an app (local file auto-uploads, or use URL)
|
|
200
208
|
lim ios install-app ./MyApp.ipa
|
|
201
209
|
lim ios install-app https://example.com/app.ipa
|
|
210
|
+
lim ios install-app https://example.com/app.ipa --md5 <hex-digest>
|
|
211
|
+
lim ios install-app ./MyApp.ipa --launch-mode RelaunchIfRunning
|
|
202
212
|
|
|
203
213
|
# Launch / terminate
|
|
204
214
|
lim ios launch-app com.example.myapp
|
|
@@ -213,10 +223,14 @@ lim ios list-apps
|
|
|
213
223
|
|
|
214
224
|
```bash
|
|
215
225
|
# Tail recent logs
|
|
216
|
-
lim ios log com.example.myapp --
|
|
226
|
+
lim ios app-log com.example.myapp --tail 50
|
|
217
227
|
|
|
218
228
|
# Stream logs continuously (Ctrl+C to stop)
|
|
219
|
-
lim ios log com.example.myapp
|
|
229
|
+
lim ios app-log com.example.myapp --follow
|
|
230
|
+
|
|
231
|
+
# Stream full simulator syslog
|
|
232
|
+
lim ios syslog
|
|
233
|
+
lim ios syslog --json
|
|
220
234
|
```
|
|
221
235
|
|
|
222
236
|
#### Video Recording
|
|
@@ -237,6 +251,9 @@ lim ios sync ./Build/Products/Debug-iphonesimulator/MyApp.app
|
|
|
237
251
|
|
|
238
252
|
# Re-sync on changes and relaunch if the app is already running
|
|
239
253
|
lim ios sync ./MyApp.app --watch --launch-mode RelaunchIfRunning
|
|
254
|
+
|
|
255
|
+
# Tune the delta-sync cache and patch size
|
|
256
|
+
lim ios sync ./MyApp.app --basis-cache-dir ./.limsync-cache --max-patch-bytes 2097152
|
|
240
257
|
```
|
|
241
258
|
|
|
242
259
|
---
|
|
@@ -286,14 +303,18 @@ lim android screenshot -o screenshot.png
|
|
|
286
303
|
# Tapping
|
|
287
304
|
lim android tap 100 200
|
|
288
305
|
lim android tap-element --resource-id com.example:id/button
|
|
306
|
+
lim android tap-element --content-desc "Sign In button"
|
|
289
307
|
lim android tap-element --text "Sign In"
|
|
308
|
+
lim android find-element --resource-id com.example:id/button --json
|
|
290
309
|
|
|
291
310
|
# Text input
|
|
292
311
|
lim android type "Hello World"
|
|
312
|
+
lim android type "Hello World" --resource-id com.example:id/search_input
|
|
293
313
|
lim android press-key enter
|
|
294
314
|
|
|
295
315
|
# Scrolling
|
|
296
316
|
lim android scroll down --amount 500
|
|
317
|
+
lim android scroll down --resource-id com.example:id/list --amount 500
|
|
297
318
|
|
|
298
319
|
# UI inspection
|
|
299
320
|
lim android element-tree
|
|
@@ -306,6 +327,7 @@ lim android open-url https://example.com
|
|
|
306
327
|
|
|
307
328
|
# Video recording
|
|
308
329
|
lim android record start
|
|
330
|
+
lim android record start --quality 8
|
|
309
331
|
lim android record stop
|
|
310
332
|
lim android record stop -o recording.mp4
|
|
311
333
|
lim android record stop --presigned-url https://example.com/upload
|
|
@@ -344,6 +366,10 @@ lim xcode build ./MyProject --scheme MyApp --workspace MyApp.xcworkspace
|
|
|
344
366
|
|
|
345
367
|
# Build and upload artifact
|
|
346
368
|
lim xcode build ./MyProject --scheme MyApp --upload my-app-build
|
|
369
|
+
|
|
370
|
+
# Tune sync cache, patch size, or ignore additional paths
|
|
371
|
+
lim xcode sync ./MyProject --watch --basis-cache-dir ./.limsync-cache --max-patch-bytes 2097152
|
|
372
|
+
lim xcode sync ./MyProject --ignore "\\.xcuserdata/" --ignore "^DerivedData/"
|
|
347
373
|
```
|
|
348
374
|
|
|
349
375
|
---
|
|
@@ -367,6 +393,7 @@ lim asset pull asset_abc123
|
|
|
367
393
|
lim asset list
|
|
368
394
|
lim asset list --name my-app
|
|
369
395
|
lim asset list --download-url
|
|
396
|
+
lim asset list --include-app-store
|
|
370
397
|
|
|
371
398
|
# Get a specific asset
|
|
372
399
|
lim asset list asset_abc123
|
|
@@ -408,7 +435,7 @@ This makes sessions essential for interactive workflows, AI agent loops, and any
|
|
|
408
435
|
#### Session Commands
|
|
409
436
|
|
|
410
437
|
```bash
|
|
411
|
-
# Start a session (defaults to last
|
|
438
|
+
# Start a session (defaults to the last remembered iOS instance, otherwise Android, then Xcode)
|
|
412
439
|
lim session start
|
|
413
440
|
|
|
414
441
|
# Or specify an instance explicitly
|
|
@@ -436,7 +463,7 @@ If only one session is active, `lim session stop` (no ID) stops it automatically
|
|
|
436
463
|
Each `lim session start` spawns an independent background daemon that:
|
|
437
464
|
|
|
438
465
|
- Holds a persistent WebSocket connection to that specific instance
|
|
439
|
-
- Listens on its own Unix socket
|
|
466
|
+
- Listens on its own Unix socket under `~/.lim/sessions/<hashed-instance-id>/`
|
|
440
467
|
- All interaction commands automatically detect the matching session and route through it
|
|
441
468
|
- Multiple sessions run in parallel with no shared state
|
|
442
469
|
|
|
@@ -449,9 +476,9 @@ lim session start
|
|
|
449
476
|
# Fast interaction loop — each command takes ~50ms
|
|
450
477
|
lim ios launch-app com.example.myapp
|
|
451
478
|
lim ios element-tree | jq '.tree'
|
|
452
|
-
lim ios tap-element --label "Login"
|
|
479
|
+
lim ios tap-element --ax-label "Login"
|
|
453
480
|
lim ios type "user@example.com"
|
|
454
|
-
lim ios tap-element --label "Submit"
|
|
481
|
+
lim ios tap-element --ax-label "Submit"
|
|
455
482
|
lim ios screenshot -o after-login.png
|
|
456
483
|
|
|
457
484
|
lim session stop
|
|
@@ -639,12 +666,12 @@ lim session start
|
|
|
639
666
|
# Agent can interact at high speed
|
|
640
667
|
lim ios tap 200 400
|
|
641
668
|
lim ios type "test@example.com"
|
|
642
|
-
lim ios tap-element --label "Sign In"
|
|
669
|
+
lim ios tap-element --ax-label "Sign In"
|
|
643
670
|
lim ios screenshot -o result.png
|
|
644
671
|
lim ios element-tree --json > ui-state.json
|
|
645
672
|
|
|
646
673
|
# Tail logs (non-streaming works through session too)
|
|
647
|
-
lim ios log com.example.myapp --
|
|
674
|
+
lim ios app-log com.example.myapp --tail 20
|
|
648
675
|
|
|
649
676
|
# Clean up
|
|
650
677
|
lim session stop
|
package/dist/base-command.d.ts
CHANGED
|
@@ -4,12 +4,18 @@ export declare abstract class BaseCommand extends Command {
|
|
|
4
4
|
static baseFlags: {
|
|
5
5
|
'api-key': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
6
6
|
json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
7
|
+
quiet: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
7
8
|
};
|
|
8
9
|
private _client?;
|
|
9
10
|
protected get client(): Limrun;
|
|
10
11
|
private _parsedFlags?;
|
|
11
12
|
protected get parsedFlags(): Record<string, unknown> | undefined;
|
|
12
13
|
protected setParsedFlags(flags: Record<string, unknown>): void;
|
|
14
|
+
protected isJsonEnabled(): boolean;
|
|
15
|
+
protected isQuietEnabled(): boolean;
|
|
16
|
+
protected shouldSuppressInfo(): boolean;
|
|
17
|
+
protected info(message?: string): void;
|
|
18
|
+
protected output(message?: string): void;
|
|
13
19
|
protected withAuth<T>(fn: () => Promise<T>): Promise<T>;
|
|
14
20
|
protected outputTable(headers: string[], rows: string[][]): void;
|
|
15
21
|
protected outputJson(data: unknown): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-command.d.ts","sourceRoot":"","sources":["../src/base-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAC7C,OAAO,MAA+B,MAAM,aAAa,CAAC;AAO1D,8BAAsB,WAAY,SAAQ,OAAO;IAC/C,MAAM,CAAC,SAAS
|
|
1
|
+
{"version":3,"file":"base-command.d.ts","sourceRoot":"","sources":["../src/base-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAC7C,OAAO,MAA+B,MAAM,aAAa,CAAC;AAO1D,8BAAsB,WAAY,SAAQ,OAAO;IAC/C,MAAM,CAAC,SAAS;;;;MAed;IAEF,OAAO,CAAC,OAAO,CAAC,CAAS;IAEzB,SAAS,KAAK,MAAM,IAAI,MAAM,CAc7B;IAED,OAAO,CAAC,YAAY,CAAC,CAA0B;IAE/C,SAAS,KAAK,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAE/D;IAED,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI9D,SAAS,CAAC,aAAa,IAAI,OAAO;IAIlC,SAAS,CAAC,cAAc,IAAI,OAAO;IAInC,SAAS,CAAC,kBAAkB,IAAI,OAAO;IAIvC,SAAS,CAAC,IAAI,CAAC,OAAO,SAAK,GAAG,IAAI;IAMlC,SAAS,CAAC,MAAM,CAAC,OAAO,SAAK,GAAG,IAAI;cAIpB,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAiB7D,SAAS,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI;IAgBhE,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAIzC,SAAS,CAAC,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAKtD;;;OAGG;IACH,SAAS,CAAC,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM;CAO5D"}
|
package/dist/base-command.js
CHANGED
|
@@ -60,6 +60,23 @@ class BaseCommand extends core_1.Command {
|
|
|
60
60
|
setParsedFlags(flags) {
|
|
61
61
|
this._parsedFlags = flags;
|
|
62
62
|
}
|
|
63
|
+
isJsonEnabled() {
|
|
64
|
+
return Boolean(this.parsedFlags?.json);
|
|
65
|
+
}
|
|
66
|
+
isQuietEnabled() {
|
|
67
|
+
return Boolean(this.parsedFlags?.quiet);
|
|
68
|
+
}
|
|
69
|
+
shouldSuppressInfo() {
|
|
70
|
+
return this.isJsonEnabled() || this.isQuietEnabled();
|
|
71
|
+
}
|
|
72
|
+
info(message = '') {
|
|
73
|
+
if (!this.shouldSuppressInfo()) {
|
|
74
|
+
super.log(message);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
output(message = '') {
|
|
78
|
+
super.log(message);
|
|
79
|
+
}
|
|
63
80
|
async withAuth(fn) {
|
|
64
81
|
try {
|
|
65
82
|
return await fn();
|
|
@@ -67,9 +84,9 @@ class BaseCommand extends core_1.Command {
|
|
|
67
84
|
catch (err) {
|
|
68
85
|
if (err instanceof api_1.AuthenticationError) {
|
|
69
86
|
const config = (0, config_1.readConfig)();
|
|
70
|
-
this.
|
|
87
|
+
this.info('Session expired. Logging in...');
|
|
71
88
|
await (0, auth_1.login)(config.consoleEndpoint, VERSION);
|
|
72
|
-
this.
|
|
89
|
+
this.info('You are logged in now.');
|
|
73
90
|
// Reset client so it picks up the new key
|
|
74
91
|
this._client = undefined;
|
|
75
92
|
return fn();
|
|
@@ -87,14 +104,14 @@ class BaseCommand extends core_1.Command {
|
|
|
87
104
|
});
|
|
88
105
|
return obj;
|
|
89
106
|
});
|
|
90
|
-
this.
|
|
107
|
+
this.output(JSON.stringify(objects, null, 2));
|
|
91
108
|
}
|
|
92
109
|
else {
|
|
93
|
-
this.
|
|
110
|
+
this.output((0, formatting_1.renderTable)(headers, rows));
|
|
94
111
|
}
|
|
95
112
|
}
|
|
96
113
|
outputJson(data) {
|
|
97
|
-
this.
|
|
114
|
+
this.output(JSON.stringify(data, null, 2));
|
|
98
115
|
}
|
|
99
116
|
consoleStreamUrl(instanceId) {
|
|
100
117
|
const baseUrl = (0, config_1.readConfig)().consoleEndpoint.replace(/\/+$/, '');
|
|
@@ -122,5 +139,9 @@ BaseCommand.baseFlags = {
|
|
|
122
139
|
description: 'Output structured JSON instead of human-readable tables or plain text when the command supports it.',
|
|
123
140
|
default: false,
|
|
124
141
|
}),
|
|
142
|
+
quiet: core_1.Flags.boolean({
|
|
143
|
+
description: 'Suppress intermediate human-readable logs and only emit the final result.',
|
|
144
|
+
default: false,
|
|
145
|
+
}),
|
|
125
146
|
};
|
|
126
147
|
//# sourceMappingURL=base-command.js.map
|
package/dist/base-command.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-command.js","sourceRoot":"","sources":["../src/base-command.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sCAA6C;AAC7C,mDAA0D;AAC1D,yCAA6D;AAC7D,qCAAmC;AACnC,iDAA+C;AAE/C,MAAM,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC;AAEnD,MAAsB,WAAY,SAAQ,cAAO;
|
|
1
|
+
{"version":3,"file":"base-command.js","sourceRoot":"","sources":["../src/base-command.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sCAA6C;AAC7C,mDAA0D;AAC1D,yCAA6D;AAC7D,qCAAmC;AACnC,iDAA+C;AAE/C,MAAM,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC;AAEnD,MAAsB,WAAY,SAAQ,cAAO;IAoB/C,IAAc,MAAM;QAClB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,MAAM,GAAG,IAAA,mBAAU,GAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;YAC/B,MAAM,MAAM,GAAG,KAAK,EAAE,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC;YACnD,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC;YAEnC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,IAAI,CAAC,KAAK,CAAC,iEAAiE,CAAC,CAAC;YAChF,CAAC;YAED,IAAI,CAAC,OAAO,GAAG,IAAI,aAAM,CAAC,EAAE,MAAM,EAAE,MAAgB,EAAE,OAAO,EAAE,CAAC,CAAC;QACnE,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAID,IAAc,WAAW;QACvB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAES,cAAc,CAAC,KAA8B;QACrD,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5B,CAAC;IAES,aAAa;QACrB,OAAO,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IAES,cAAc;QACtB,OAAO,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;IAES,kBAAkB;QAC1B,OAAO,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;IACvD,CAAC;IAES,IAAI,CAAC,OAAO,GAAG,EAAE;QACzB,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;YAC/B,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAES,MAAM,CAAC,OAAO,GAAG,EAAE;QAC3B,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACrB,CAAC;IAES,KAAK,CAAC,QAAQ,CAAI,EAAoB;QAC9C,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,yBAAmB,EAAE,CAAC;gBACvC,MAAM,MAAM,GAAG,IAAA,mBAAU,GAAE,CAAC;gBAC5B,IAAI,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;gBAC5C,MAAM,IAAA,YAAK,EAAC,MAAM,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;gBAC7C,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;gBACpC,0CAA0C;gBAC1C,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;gBACzB,OAAO,EAAE,EAAE,CAAC;YACd,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAES,WAAW,CAAC,OAAiB,EAAE,IAAgB;QACvD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;QAC/B,IAAI,KAAK,EAAE,IAAI,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;gBAC/B,MAAM,GAAG,GAA2B,EAAE,CAAC;gBACvC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;oBACvB,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC3D,CAAC,CAAC,CAAC;gBACH,OAAO,GAAG,CAAC;YACb,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,CAAC,IAAA,wBAAW,EAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAES,UAAU,CAAC,IAAa;QAChC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IAES,gBAAgB,CAAC,UAAkB;QAC3C,MAAM,OAAO,GAAG,IAAA,mBAAU,GAAE,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACjE,OAAO,GAAG,OAAO,WAAW,UAAU,EAAE,CAAC;IAC3C,CAAC;IAED;;;OAGG;IACO,SAAS,CAAC,UAA8B;QAChD,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QACnF,OAAO,IAAA,0BAAiB,EAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IACrD,CAAC;;AAxHH,kCAyHC;AAxHQ,qBAAS,GAAG;IACjB,SAAS,EAAE,YAAK,CAAC,MAAM,CAAC;QACtB,WAAW,EACT,sGAAsG;QACxG,GAAG,EAAE,aAAa;KACnB,CAAC;IACF,IAAI,EAAE,YAAK,CAAC,OAAO,CAAC;QAClB,WAAW,EACT,qGAAqG;QACvG,OAAO,EAAE,KAAK;KACf,CAAC;IACF,KAAK,EAAE,YAAK,CAAC,OAAO,CAAC;QACnB,WAAW,EAAE,2EAA2E;QACxF,OAAO,EAAE,KAAK;KACf,CAAC;CACH,CAAC"}
|
|
@@ -9,6 +9,7 @@ export default class AndroidConnect extends BaseCommand {
|
|
|
9
9
|
'adb-path': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
10
10
|
'api-key': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
11
11
|
json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
12
|
+
quiet: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
12
13
|
};
|
|
13
14
|
run(): Promise<void>;
|
|
14
15
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../../src/commands/android/connect.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,WAAW;IACrD,MAAM,CAAC,OAAO,SAA4D;IAC1E,MAAM,CAAC,WAAW,SACmN;IACrO,MAAM,CAAC,QAAQ,WAIb;IAEF,MAAM,CAAC,IAAI,KAAM;IAEjB,MAAM,CAAC,KAAK
|
|
1
|
+
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../../src/commands/android/connect.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,WAAW;IACrD,MAAM,CAAC,OAAO,SAA4D;IAC1E,MAAM,CAAC,WAAW,SACmN;IACrO,MAAM,CAAC,QAAQ,WAIb;IAEF,MAAM,CAAC,IAAI,KAAM;IAEjB,MAAM,CAAC,KAAK;;;;;;MAUV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAoC3B"}
|
|
@@ -17,6 +17,7 @@ export default class AndroidCreate extends BaseCommand {
|
|
|
17
17
|
install: import("@oclif/core/lib/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
18
18
|
'api-key': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
19
19
|
json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
20
|
+
quiet: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
20
21
|
};
|
|
21
22
|
run(): Promise<void>;
|
|
22
23
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/android/create.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAKjD,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,WAAW;IACpD,MAAM,CAAC,OAAO,SAAmC;IACjD,MAAM,CAAC,WAAW,SAC+J;IAEjL,MAAM,CAAC,QAAQ,WAKb;IAEF,MAAM,CAAC,KAAK
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/android/create.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAKjD,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,WAAW;IACpD,MAAM,CAAC,OAAO,SAAmC;IACjD,MAAM,CAAC,WAAW,SAC+J;IAEjL,MAAM,CAAC,QAAQ,WAKb;IAEF,MAAM,CAAC,KAAK;;;;;;;;;;;;;;;MAsCV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA0G3B"}
|
|
@@ -52,11 +52,11 @@ class AndroidCreate extends base_command_1.BaseCommand {
|
|
|
52
52
|
for (const filePath of flags.install) {
|
|
53
53
|
const resolved = path_1.default.resolve(filePath);
|
|
54
54
|
const name = path_1.default.basename(resolved);
|
|
55
|
-
this.
|
|
55
|
+
this.info(`Uploading ${name}...`);
|
|
56
56
|
const asset = await this.client.assets.getOrUpload({ path: resolved, name });
|
|
57
57
|
assetNames.push(asset.name);
|
|
58
58
|
}
|
|
59
|
-
this.
|
|
59
|
+
this.info(`Successfully uploaded ${flags.install.length} file(s)`);
|
|
60
60
|
}
|
|
61
61
|
// Build params
|
|
62
62
|
const params = {
|
|
@@ -88,17 +88,17 @@ class AndroidCreate extends base_command_1.BaseCommand {
|
|
|
88
88
|
const start = Date.now();
|
|
89
89
|
const instance = await this.client.androidInstances.create(params);
|
|
90
90
|
(0, config_1.saveLastInstanceId)(instance.metadata.id);
|
|
91
|
-
this.
|
|
92
|
-
this.
|
|
93
|
-
this.
|
|
91
|
+
this.info(`Created a new instance in ${((Date.now() - start) / 1000).toFixed(1)}s`);
|
|
92
|
+
this.info(`Instance ID: ${instance.metadata.id}`);
|
|
93
|
+
this.info(`Console URL: ${this.consoleStreamUrl(instance.metadata.id)}`);
|
|
94
94
|
if (flags.rm) {
|
|
95
95
|
const cleanup = async () => {
|
|
96
96
|
try {
|
|
97
97
|
await this.client.androidInstances.delete(instance.metadata.id);
|
|
98
|
-
this.
|
|
98
|
+
this.info(`${instance.metadata.id} is deleted`);
|
|
99
99
|
}
|
|
100
100
|
catch (e) {
|
|
101
|
-
this.
|
|
101
|
+
this.info(`Failed to delete instance: ${e}`);
|
|
102
102
|
}
|
|
103
103
|
};
|
|
104
104
|
process.on('SIGINT', async () => {
|
|
@@ -118,8 +118,8 @@ class AndroidCreate extends base_command_1.BaseCommand {
|
|
|
118
118
|
token: instance.status.token,
|
|
119
119
|
});
|
|
120
120
|
const tunnel = await instanceClient.startAdbTunnel();
|
|
121
|
-
this.
|
|
122
|
-
this.
|
|
121
|
+
this.info(`Open the Console URL in your browser to stream the device: ${this.consoleStreamUrl(instance.metadata.id)}`);
|
|
122
|
+
this.output('Tunnel started. Press Ctrl+C to stop.');
|
|
123
123
|
await new Promise((resolve) => {
|
|
124
124
|
const keepAlive = setInterval(() => { }, 1 << 30);
|
|
125
125
|
const shutdown = () => {
|
|
@@ -133,10 +133,12 @@ class AndroidCreate extends base_command_1.BaseCommand {
|
|
|
133
133
|
instanceClient.disconnect();
|
|
134
134
|
}
|
|
135
135
|
else {
|
|
136
|
-
this.log(`Created instance ${instance.metadata.id}`);
|
|
137
136
|
if (flags.json) {
|
|
138
137
|
this.outputJson(instance);
|
|
139
138
|
}
|
|
139
|
+
else {
|
|
140
|
+
this.output(`Created instance ${instance.metadata.id}`);
|
|
141
|
+
}
|
|
140
142
|
}
|
|
141
143
|
});
|
|
142
144
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/android/create.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAwB;AACxB,sCAAoC;AACpC,qDAAiD;AACjD,qDAAmD;AACnD,6CAAsD;AAGtD,MAAqB,aAAc,SAAQ,0BAAW;IAoDpD,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAClD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAE3B,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;YAC7B,2BAA2B;YAC3B,MAAM,UAAU,GAAa,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACjE,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAClB,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBACrC,MAAM,QAAQ,GAAG,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;oBACxC,MAAM,IAAI,GAAG,cAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBACrC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/android/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@ export default class AndroidDelete extends BaseCommand {
|
|
|
9
9
|
static flags: {
|
|
10
10
|
'api-key': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
11
11
|
json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
12
|
+
quiet: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
12
13
|
};
|
|
13
14
|
run(): Promise<void>;
|
|
14
15
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/commands/android/delete.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,WAAW;IACpD,MAAM,CAAC,OAAO,SAAgC;IAC9C,MAAM,CAAC,WAAW,SAAgD;IAClE,MAAM,CAAC,QAAQ,WAGb;IAEF,MAAM,CAAC,IAAI;;MAET;IAEF,MAAM,CAAC,KAAK
|
|
1
|
+
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/commands/android/delete.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,WAAW;IACpD,MAAM,CAAC,OAAO,SAAgC;IAC9C,MAAM,CAAC,WAAW,SAAgD;IAClE,MAAM,CAAC,QAAQ,WAGb;IAEF,MAAM,CAAC,IAAI;;MAET;IAEF,MAAM,CAAC,KAAK;;;;MAAgC;IAEtC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAS3B"}
|
|
@@ -1,2 +1,15 @@
|
|
|
1
|
-
|
|
1
|
+
import { BaseCommand } from '../../base-command';
|
|
2
|
+
export default class AndroidElementTree extends BaseCommand {
|
|
3
|
+
static summary: string;
|
|
4
|
+
static description: string;
|
|
5
|
+
static examples: string[];
|
|
6
|
+
static args: {};
|
|
7
|
+
static flags: {
|
|
8
|
+
id: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
9
|
+
'api-key': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
10
|
+
json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
11
|
+
quiet: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
12
|
+
};
|
|
13
|
+
run(): Promise<void>;
|
|
14
|
+
}
|
|
2
15
|
//# sourceMappingURL=element-tree.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"element-tree.d.ts","sourceRoot":"","sources":["../../../src/commands/android/element-tree.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"element-tree.d.ts","sourceRoot":"","sources":["../../../src/commands/android/element-tree.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAQjD,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,WAAW;IACzD,MAAM,CAAC,OAAO,SAA6D;IAC3E,MAAM,CAAC,WAAW,SACiJ;IACnK,MAAM,CAAC,QAAQ,WAIb;IAEF,MAAM,CAAC,IAAI,KAAM;IAEjB,MAAM,CAAC,KAAK;;;;;MAKV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAwC3B"}
|
|
@@ -1,9 +1,62 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
3
|
+
const core_1 = require("@oclif/core");
|
|
4
|
+
const base_command_1 = require("../../base-command");
|
|
5
|
+
const instance_client_factory_1 = require("../../lib/instance-client-factory");
|
|
6
|
+
class AndroidElementTree extends base_command_1.BaseCommand {
|
|
7
|
+
async run() {
|
|
8
|
+
const { flags } = await this.parse(AndroidElementTree);
|
|
9
|
+
this.setParsedFlags(flags);
|
|
10
|
+
await this.withAuth(async () => {
|
|
11
|
+
const id = this.resolveId(flags.id);
|
|
12
|
+
if ((0, instance_client_factory_1.detectInstanceType)(id) !== 'android') {
|
|
13
|
+
this.error('android element-tree only supports Android instances');
|
|
14
|
+
}
|
|
15
|
+
if ((0, instance_client_factory_1.hasActiveSession)(id)) {
|
|
16
|
+
const tree = await (0, instance_client_factory_1.sendSessionCommand)(id, 'element-tree');
|
|
17
|
+
if (flags.json) {
|
|
18
|
+
this.outputJson(tree);
|
|
19
|
+
}
|
|
20
|
+
else if (typeof tree === 'object' && tree && 'xml' in tree) {
|
|
21
|
+
this.log(tree.xml || JSON.stringify(tree.nodes, null, 2));
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
this.log(JSON.stringify(tree, null, 2));
|
|
25
|
+
}
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
const { type, client, disconnect } = await (0, instance_client_factory_1.getInstanceClient)(this.client, id);
|
|
29
|
+
try {
|
|
30
|
+
if (type !== 'android') {
|
|
31
|
+
this.error('android element-tree only supports Android instances');
|
|
32
|
+
}
|
|
33
|
+
const tree = await client.getElementTree();
|
|
34
|
+
if (flags.json) {
|
|
35
|
+
this.outputJson(tree);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
this.log(tree.xml || JSON.stringify(tree.nodes, null, 2));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
finally {
|
|
42
|
+
disconnect();
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
AndroidElementTree.summary = 'Get the UI element tree from a running Android instance';
|
|
48
|
+
AndroidElementTree.description = 'Inspect the current UI hierarchy of a running Android instance. Use `--json` for structured output that agents can search or feed into later automation steps.';
|
|
49
|
+
AndroidElementTree.examples = [
|
|
50
|
+
'<%= config.bin %> android element-tree',
|
|
51
|
+
'<%= config.bin %> android element-tree --id <instance-ID>',
|
|
52
|
+
'<%= config.bin %> android element-tree --json',
|
|
53
|
+
];
|
|
54
|
+
AndroidElementTree.args = {};
|
|
55
|
+
AndroidElementTree.flags = {
|
|
56
|
+
...base_command_1.BaseCommand.baseFlags,
|
|
57
|
+
id: core_1.Flags.string({
|
|
58
|
+
description: 'Android instance ID to inspect. Defaults to the last created Android instance.',
|
|
59
|
+
}),
|
|
60
|
+
};
|
|
61
|
+
exports.default = AndroidElementTree;
|
|
9
62
|
//# sourceMappingURL=element-tree.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"element-tree.js","sourceRoot":"","sources":["../../../src/commands/android/element-tree.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"element-tree.js","sourceRoot":"","sources":["../../../src/commands/android/element-tree.ts"],"names":[],"mappings":";;AAAA,sCAAoC;AACpC,qDAAiD;AACjD,+EAK2C;AAE3C,MAAqB,kBAAmB,SAAQ,0BAAW;IAmBzD,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACvD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAE3B,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;YAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACpC,IAAI,IAAA,4CAAkB,EAAC,EAAE,CAAC,KAAK,SAAS,EAAE,CAAC;gBACzC,IAAI,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;YACrE,CAAC;YAED,IAAI,IAAA,0CAAgB,EAAC,EAAE,CAAC,EAAE,CAAC;gBACzB,MAAM,IAAI,GAAG,MAAM,IAAA,4CAAkB,EAAC,EAAE,EAAE,cAAc,CAAC,CAAC;gBAC1D,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;oBACf,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBACxB,CAAC;qBAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,IAAI,KAAK,IAAK,IAAgC,EAAE,CAAC;oBAC1F,IAAI,CAAC,GAAG,CACL,IAAyB,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS,CAAE,IAA4B,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAC/F,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC1C,CAAC;gBACD,OAAO;YACT,CAAC;YAED,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,IAAA,2CAAiB,EAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC9E,IAAI,CAAC;gBACH,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;oBACvB,IAAI,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;gBACrE,CAAC;gBACD,MAAM,IAAI,GAAG,MAAO,MAAc,CAAC,cAAc,EAAE,CAAC;gBACpD,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;oBACf,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBACxB,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC5D,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,UAAU,EAAE,CAAC;YACf,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;;AAzDM,0BAAO,GAAG,yDAAyD,CAAC;AACpE,8BAAW,GAChB,gKAAgK,CAAC;AAC5J,2BAAQ,GAAG;IAChB,wCAAwC;IACxC,2DAA2D;IAC3D,+CAA+C;CAChD,CAAC;AAEK,uBAAI,GAAG,EAAE,CAAC;AAEV,wBAAK,GAAG;IACb,GAAG,0BAAW,CAAC,SAAS;IACxB,EAAE,EAAE,YAAK,CAAC,MAAM,CAAC;QACf,WAAW,EAAE,gFAAgF;KAC9F,CAAC;CACH,CAAC;kBAjBiB,kBAAkB"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { BaseCommand } from '../../base-command';
|
|
2
|
+
export default class AndroidFindElement extends BaseCommand {
|
|
3
|
+
static summary: string;
|
|
4
|
+
static description: string;
|
|
5
|
+
static examples: string[];
|
|
6
|
+
static args: {};
|
|
7
|
+
static flags: {
|
|
8
|
+
limit: import("@oclif/core/lib/interfaces").OptionFlag<number, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
9
|
+
'resource-id': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
10
|
+
text: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
11
|
+
'content-desc': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
12
|
+
'class-name': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
13
|
+
'package-name': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
14
|
+
index: import("@oclif/core/lib/interfaces").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
15
|
+
clickable: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
16
|
+
enabled: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
17
|
+
focused: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
18
|
+
'bounds-contains-x': import("@oclif/core/lib/interfaces").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
19
|
+
'bounds-contains-y': import("@oclif/core/lib/interfaces").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
20
|
+
id: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
21
|
+
'api-key': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
22
|
+
json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
23
|
+
quiet: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
24
|
+
};
|
|
25
|
+
run(): Promise<void>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=find-element.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"find-element.d.ts","sourceRoot":"","sources":["../../../src/commands/android/find-element.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAsBjD,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,WAAW;IACzD,MAAM,CAAC,OAAO,SAAuC;IACrD,MAAM,CAAC,WAAW,SAC8G;IAChI,MAAM,CAAC,QAAQ,WAIb;IAEF,MAAM,CAAC,IAAI,KAAM;IAEjB,MAAM,CAAC,KAAK;;;;;;;;;;;;;;;;;MAUV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAgD3B"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const core_1 = require("@oclif/core");
|
|
4
|
+
const base_command_1 = require("../../base-command");
|
|
5
|
+
const android_selector_1 = require("../../lib/android-selector");
|
|
6
|
+
const instance_client_factory_1 = require("../../lib/instance-client-factory");
|
|
7
|
+
class AndroidFindElement extends base_command_1.BaseCommand {
|
|
8
|
+
async run() {
|
|
9
|
+
const { flags } = await this.parse(AndroidFindElement);
|
|
10
|
+
this.setParsedFlags(flags);
|
|
11
|
+
await this.withAuth(async () => {
|
|
12
|
+
const id = this.resolveId(flags.id);
|
|
13
|
+
if ((0, instance_client_factory_1.detectInstanceType)(id) !== 'android') {
|
|
14
|
+
this.error('android find-element only supports Android instances');
|
|
15
|
+
}
|
|
16
|
+
const selector = (0, android_selector_1.buildAndroidSelector)(flags);
|
|
17
|
+
if (!selector) {
|
|
18
|
+
this.error('Provide at least one Android selector flag such as --resource-id, --text, --content-desc, or --class-name.');
|
|
19
|
+
}
|
|
20
|
+
let result;
|
|
21
|
+
if ((0, instance_client_factory_1.hasActiveSession)(id)) {
|
|
22
|
+
result = (await (0, instance_client_factory_1.sendSessionCommand)(id, 'find-element', [selector, flags.limit]));
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
const { type, client, disconnect } = await (0, instance_client_factory_1.getInstanceClient)(this.client, id);
|
|
26
|
+
try {
|
|
27
|
+
if (type !== 'android') {
|
|
28
|
+
this.error('android find-element only supports Android instances');
|
|
29
|
+
}
|
|
30
|
+
result = await client.findElement(selector, flags.limit);
|
|
31
|
+
}
|
|
32
|
+
finally {
|
|
33
|
+
disconnect();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
if (flags.json) {
|
|
37
|
+
this.outputJson(result);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const rows = result.elements.map((element) => [
|
|
41
|
+
element.text || '',
|
|
42
|
+
element.resourceId || '',
|
|
43
|
+
element.className || '',
|
|
44
|
+
element.contentDesc || '',
|
|
45
|
+
element.bounds || '',
|
|
46
|
+
]);
|
|
47
|
+
this.outputTable(['Text', 'Resource ID', 'Class', 'Content Description', 'Bounds'], rows);
|
|
48
|
+
this.output(`Matched ${result.count} element(s).`);
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
AndroidFindElement.summary = 'Find Android elements by selector';
|
|
53
|
+
AndroidFindElement.description = 'Search the current Android UI hierarchy using native selector fields and return the matching elements without tapping them.';
|
|
54
|
+
AndroidFindElement.examples = [
|
|
55
|
+
'<%= config.bin %> android find-element --resource-id com.example:id/submit',
|
|
56
|
+
'<%= config.bin %> android find-element --text "Sign In" --limit 5 --json',
|
|
57
|
+
'<%= config.bin %> android find-element --content-desc "Settings" --id <instance-ID>',
|
|
58
|
+
];
|
|
59
|
+
AndroidFindElement.args = {};
|
|
60
|
+
AndroidFindElement.flags = {
|
|
61
|
+
...base_command_1.BaseCommand.baseFlags,
|
|
62
|
+
id: core_1.Flags.string({
|
|
63
|
+
description: 'Android instance ID to inspect. Defaults to the last created Android instance.',
|
|
64
|
+
}),
|
|
65
|
+
...android_selector_1.androidSelectorFlags,
|
|
66
|
+
limit: core_1.Flags.integer({
|
|
67
|
+
description: 'Maximum number of matching elements to return.',
|
|
68
|
+
default: 20,
|
|
69
|
+
}),
|
|
70
|
+
};
|
|
71
|
+
exports.default = AndroidFindElement;
|
|
72
|
+
//# sourceMappingURL=find-element.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"find-element.js","sourceRoot":"","sources":["../../../src/commands/android/find-element.ts"],"names":[],"mappings":";;AAAA,sCAAoC;AACpC,qDAAiD;AACjD,iEAAwF;AACxF,+EAK2C;AAe3C,MAAqB,kBAAmB,SAAQ,0BAAW;IAwBzD,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACvD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAE3B,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;YAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACpC,IAAI,IAAA,4CAAkB,EAAC,EAAE,CAAC,KAAK,SAAS,EAAE,CAAC;gBACzC,IAAI,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;YACrE,CAAC;YAED,MAAM,QAAQ,GAAG,IAAA,uCAAoB,EAAC,KAAK,CAAC,CAAC;YAC7C,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,IAAI,CAAC,KAAK,CACR,4GAA4G,CAC7G,CAAC;YACJ,CAAC;YAED,IAAI,MAAyB,CAAC;YAC9B,IAAI,IAAA,0CAAgB,EAAC,EAAE,CAAC,EAAE,CAAC;gBACzB,MAAM,GAAG,CAAC,MAAM,IAAA,4CAAkB,EAAC,EAAE,EAAE,cAAc,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAsB,CAAC;YACxG,CAAC;iBAAM,CAAC;gBACN,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,IAAA,2CAAiB,EAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBAC9E,IAAI,CAAC;oBACH,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;wBACvB,IAAI,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;oBACrE,CAAC;oBACD,MAAM,GAAG,MAAO,MAAc,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;gBACpE,CAAC;wBAAS,CAAC;oBACT,UAAU,EAAE,CAAC;gBACf,CAAC;YACH,CAAC;YAED,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACf,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACxB,OAAO;YACT,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;gBAC5C,OAAO,CAAC,IAAI,IAAI,EAAE;gBAClB,OAAO,CAAC,UAAU,IAAI,EAAE;gBACxB,OAAO,CAAC,SAAS,IAAI,EAAE;gBACvB,OAAO,CAAC,WAAW,IAAI,EAAE;gBACzB,OAAO,CAAC,MAAM,IAAI,EAAE;aACrB,CAAC,CAAC;YACH,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC;YAC1F,IAAI,CAAC,MAAM,CAAC,WAAW,MAAM,CAAC,KAAK,cAAc,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;IACL,CAAC;;AAtEM,0BAAO,GAAG,mCAAmC,CAAC;AAC9C,8BAAW,GAChB,6HAA6H,CAAC;AACzH,2BAAQ,GAAG;IAChB,4EAA4E;IAC5E,0EAA0E;IAC1E,qFAAqF;CACtF,CAAC;AAEK,uBAAI,GAAG,EAAE,CAAC;AAEV,wBAAK,GAAG;IACb,GAAG,0BAAW,CAAC,SAAS;IACxB,EAAE,EAAE,YAAK,CAAC,MAAM,CAAC;QACf,WAAW,EAAE,gFAAgF;KAC9F,CAAC;IACF,GAAG,uCAAoB;IACvB,KAAK,EAAE,YAAK,CAAC,OAAO,CAAC;QACnB,WAAW,EAAE,gDAAgD;QAC7D,OAAO,EAAE,EAAE;KACZ,CAAC;CACH,CAAC;kBAtBiB,kBAAkB"}
|
|
@@ -9,6 +9,7 @@ export default class AndroidGet extends BaseCommand {
|
|
|
9
9
|
static flags: {
|
|
10
10
|
'api-key': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
11
11
|
json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
12
|
+
quiet: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
12
13
|
};
|
|
13
14
|
run(): Promise<void>;
|
|
14
15
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/commands/android/get.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,WAAW;IACjD,MAAM,CAAC,OAAO,SAAiD;IAC/D,MAAM,CAAC,WAAW,SACmI;IACrJ,MAAM,CAAC,QAAQ,WAAuF;IAEtG,MAAM,CAAC,IAAI;;MAET;IAEF,MAAM,CAAC,KAAK
|
|
1
|
+
{"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/commands/android/get.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,WAAW;IACjD,MAAM,CAAC,OAAO,SAAiD;IAC/D,MAAM,CAAC,WAAW,SACmI;IACrJ,MAAM,CAAC,QAAQ,WAAuF;IAEtG,MAAM,CAAC,IAAI;;MAET;IAEF,MAAM,CAAC,KAAK;;;;MAAgC;IAEtC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAqB3B"}
|