@limrun/cli 0.3.0 → 0.4.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.
- package/README.md +127 -99
- package/bin/run.js +60 -5
- package/dist/base-command.d.ts +6 -0
- package/dist/base-command.d.ts.map +1 -1
- package/dist/base-command.js +28 -7
- package/dist/base-command.js.map +1 -1
- package/dist/commands/android/connect.d.ts +2 -1
- package/dist/commands/android/connect.d.ts.map +1 -1
- package/dist/commands/android/connect.js +13 -4
- package/dist/commands/android/connect.js.map +1 -1
- package/dist/commands/android/create.d.ts +1 -2
- package/dist/commands/android/create.d.ts.map +1 -1
- package/dist/commands/android/create.js +37 -32
- package/dist/commands/android/create.js.map +1 -1
- package/dist/commands/android/delete.d.ts +2 -1
- package/dist/commands/android/delete.d.ts.map +1 -1
- package/dist/commands/android/delete.js +6 -3
- package/dist/commands/android/delete.js.map +1 -1
- package/dist/commands/android/element-tree.d.ts +15 -0
- package/dist/commands/android/element-tree.d.ts.map +1 -0
- package/dist/commands/android/element-tree.js +62 -0
- package/dist/commands/android/element-tree.js.map +1 -0
- 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 +2 -1
- package/dist/commands/android/get.d.ts.map +1 -1
- package/dist/commands/android/get.js +3 -3
- package/dist/commands/android/get.js.map +1 -1
- package/dist/commands/android/install-app.d.ts +17 -0
- package/dist/commands/android/install-app.d.ts.map +1 -0
- package/dist/commands/android/install-app.js +72 -0
- package/dist/commands/android/install-app.js.map +1 -0
- package/dist/commands/android/list.d.ts +2 -0
- package/dist/commands/android/list.d.ts.map +1 -1
- package/dist/commands/android/list.js +17 -5
- package/dist/commands/android/list.js.map +1 -1
- package/dist/commands/android/open-url.d.ts +17 -0
- package/dist/commands/android/open-url.d.ts.map +1 -0
- package/dist/commands/android/open-url.js +53 -0
- package/dist/commands/android/open-url.js.map +1 -0
- package/dist/commands/android/press-key.d.ts +18 -0
- package/dist/commands/android/press-key.d.ts.map +1 -0
- package/dist/commands/android/press-key.js +54 -0
- package/dist/commands/android/press-key.js.map +1 -0
- package/dist/commands/android/record.d.ts +21 -0
- package/dist/commands/android/record.d.ts.map +1 -0
- package/dist/commands/android/record.js +105 -0
- package/dist/commands/android/record.js.map +1 -0
- package/dist/commands/android/screenshot.d.ts +16 -0
- package/dist/commands/android/screenshot.d.ts.map +1 -0
- package/dist/commands/android/screenshot.js +70 -0
- package/dist/commands/android/screenshot.js.map +1 -0
- package/dist/commands/android/scroll.d.ts +31 -0
- package/dist/commands/android/scroll.d.ts.map +1 -0
- package/dist/commands/android/scroll.js +73 -0
- package/dist/commands/android/scroll.js.map +1 -0
- package/dist/commands/android/tap-element.d.ts +26 -0
- package/dist/commands/android/tap-element.d.ts.map +1 -0
- package/dist/commands/android/tap-element.js +62 -0
- package/dist/commands/android/tap-element.js.map +1 -0
- package/dist/commands/android/tap.d.ts +24 -0
- package/dist/commands/android/tap.d.ts.map +1 -0
- package/dist/commands/android/tap.js +57 -0
- package/dist/commands/android/tap.js.map +1 -0
- package/dist/commands/android/type.d.ts +30 -0
- package/dist/commands/android/type.d.ts.map +1 -0
- package/dist/commands/android/type.js +55 -0
- package/dist/commands/android/type.js.map +1 -0
- package/dist/commands/asset/delete.d.ts +2 -1
- package/dist/commands/asset/delete.d.ts.map +1 -1
- package/dist/commands/asset/delete.js +2 -2
- package/dist/commands/asset/delete.js.map +1 -1
- package/dist/commands/asset/list.d.ts +3 -1
- package/dist/commands/asset/list.d.ts.map +1 -1
- package/dist/commands/asset/list.js +22 -6
- package/dist/commands/asset/list.js.map +1 -1
- package/dist/commands/asset/pull.d.ts +2 -1
- package/dist/commands/asset/pull.d.ts.map +1 -1
- package/dist/commands/asset/pull.js +18 -6
- package/dist/commands/asset/pull.js.map +1 -1
- package/dist/commands/asset/push.d.ts +2 -1
- package/dist/commands/asset/push.d.ts.map +1 -1
- package/dist/commands/asset/push.js +5 -6
- package/dist/commands/asset/push.js.map +1 -1
- package/dist/commands/exec/element-tree.d.ts +2 -1
- package/dist/commands/exec/element-tree.d.ts.map +1 -1
- package/dist/commands/exec/element-tree.js +6 -2
- package/dist/commands/exec/element-tree.js.map +1 -1
- package/dist/commands/exec/install-app.d.ts +1 -1
- package/dist/commands/exec/install-app.d.ts.map +1 -1
- package/dist/commands/exec/install-app.js +10 -5
- package/dist/commands/exec/install-app.js.map +1 -1
- package/dist/commands/exec/open-url.d.ts +2 -1
- package/dist/commands/exec/open-url.d.ts.map +1 -1
- package/dist/commands/exec/open-url.js +9 -3
- package/dist/commands/exec/open-url.js.map +1 -1
- package/dist/commands/exec/perform.d.ts +17 -0
- package/dist/commands/exec/perform.d.ts.map +1 -0
- package/dist/commands/exec/perform.js +232 -0
- package/dist/commands/exec/perform.js.map +1 -0
- package/dist/commands/exec/press-key.d.ts +2 -1
- package/dist/commands/exec/press-key.d.ts.map +1 -1
- package/dist/commands/exec/press-key.js +9 -3
- package/dist/commands/exec/press-key.js.map +1 -1
- package/dist/commands/exec/record.d.ts +2 -1
- package/dist/commands/exec/record.d.ts.map +1 -1
- package/dist/commands/exec/record.js +20 -6
- package/dist/commands/exec/record.js.map +1 -1
- package/dist/commands/exec/screenshot.d.ts +2 -1
- package/dist/commands/exec/screenshot.d.ts.map +1 -1
- package/dist/commands/exec/screenshot.js +9 -3
- package/dist/commands/exec/screenshot.js.map +1 -1
- package/dist/commands/exec/scroll.d.ts +2 -1
- package/dist/commands/exec/scroll.d.ts.map +1 -1
- package/dist/commands/exec/scroll.js +7 -4
- package/dist/commands/exec/scroll.js.map +1 -1
- package/dist/commands/exec/tap-element.d.ts +2 -1
- package/dist/commands/exec/tap-element.d.ts.map +1 -1
- package/dist/commands/exec/tap-element.js +16 -6
- package/dist/commands/exec/tap-element.js.map +1 -1
- package/dist/commands/exec/tap.d.ts +2 -1
- package/dist/commands/exec/tap.d.ts.map +1 -1
- package/dist/commands/exec/tap.js +13 -4
- package/dist/commands/exec/tap.js.map +1 -1
- package/dist/commands/exec/type.d.ts +3 -2
- package/dist/commands/exec/type.d.ts.map +1 -1
- package/dist/commands/exec/type.js +12 -6
- package/dist/commands/exec/type.js.map +1 -1
- package/dist/commands/ios/app-log.d.ts +19 -0
- package/dist/commands/ios/app-log.d.ts.map +1 -0
- package/dist/commands/ios/app-log.js +93 -0
- package/dist/commands/ios/app-log.js.map +1 -0
- package/dist/commands/ios/cp.d.ts +18 -0
- 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 -1
- package/dist/commands/ios/create.d.ts.map +1 -1
- package/dist/commands/ios/create.js +55 -24
- package/dist/commands/ios/create.js.map +1 -1
- package/dist/commands/ios/delete.d.ts +2 -1
- package/dist/commands/ios/delete.d.ts.map +1 -1
- package/dist/commands/ios/delete.js +3 -3
- package/dist/commands/ios/delete.js.map +1 -1
- package/dist/commands/ios/element-tree.d.ts +15 -0
- package/dist/commands/ios/element-tree.d.ts.map +1 -0
- package/dist/commands/ios/element-tree.js +59 -0
- package/dist/commands/ios/element-tree.js.map +1 -0
- package/dist/commands/ios/get.d.ts +2 -1
- package/dist/commands/ios/get.d.ts.map +1 -1
- package/dist/commands/ios/get.js +3 -3
- package/dist/commands/ios/get.js.map +1 -1
- package/dist/commands/{delete/index.d.ts → ios/info.d.ts} +6 -5
- package/dist/commands/ios/info.d.ts.map +1 -0
- package/dist/commands/ios/info.js +60 -0
- package/dist/commands/ios/info.js.map +1 -0
- package/dist/commands/ios/install-app.d.ts +19 -0
- package/dist/commands/ios/install-app.d.ts.map +1 -0
- package/dist/commands/ios/install-app.js +99 -0
- package/dist/commands/ios/install-app.js.map +1 -0
- package/dist/commands/ios/launch-app.d.ts +2 -1
- package/dist/commands/ios/launch-app.d.ts.map +1 -1
- package/dist/commands/ios/launch-app.js +5 -3
- package/dist/commands/ios/launch-app.js.map +1 -1
- package/dist/commands/ios/list-apps.d.ts +2 -1
- package/dist/commands/ios/list-apps.d.ts.map +1 -1
- package/dist/commands/ios/list-apps.js +9 -3
- package/dist/commands/ios/list-apps.js.map +1 -1
- package/dist/commands/ios/list.d.ts +2 -0
- package/dist/commands/ios/list.d.ts.map +1 -1
- package/dist/commands/ios/list.js +17 -5
- package/dist/commands/ios/list.js.map +1 -1
- package/dist/commands/ios/log.d.ts +3 -1
- package/dist/commands/ios/log.d.ts.map +1 -1
- package/dist/commands/ios/log.js +31 -8
- package/dist/commands/ios/log.js.map +1 -1
- package/dist/commands/ios/lsof.d.ts +15 -0
- 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 +17 -0
- package/dist/commands/ios/open-url.d.ts.map +1 -0
- package/dist/commands/ios/open-url.js +53 -0
- package/dist/commands/ios/open-url.js.map +1 -0
- package/dist/commands/ios/perform.d.ts +17 -0
- package/dist/commands/ios/perform.d.ts.map +1 -0
- package/dist/commands/ios/perform.js +230 -0
- package/dist/commands/ios/perform.js.map +1 -0
- package/dist/commands/ios/press-key.d.ts +18 -0
- package/dist/commands/ios/press-key.d.ts.map +1 -0
- package/dist/commands/ios/press-key.js +54 -0
- package/dist/commands/ios/press-key.js.map +1 -0
- package/dist/commands/ios/record.d.ts +21 -0
- package/dist/commands/ios/record.d.ts.map +1 -0
- package/dist/commands/ios/record.js +106 -0
- package/dist/commands/ios/record.js.map +1 -0
- package/dist/commands/ios/screenshot.d.ts +16 -0
- package/dist/commands/ios/screenshot.d.ts.map +1 -0
- package/dist/commands/ios/screenshot.js +69 -0
- package/dist/commands/ios/screenshot.js.map +1 -0
- package/dist/commands/ios/scroll.d.ts +18 -0
- package/dist/commands/ios/scroll.d.ts.map +1 -0
- package/dist/commands/ios/scroll.js +58 -0
- package/dist/commands/ios/scroll.js.map +1 -0
- package/dist/commands/ios/simctl.d.ts +16 -0
- 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 +22 -0
- package/dist/commands/ios/sync.d.ts.map +1 -0
- package/dist/commands/ios/sync.js +100 -0
- package/dist/commands/ios/sync.js.map +1 -0
- package/dist/commands/ios/syslog.d.ts +15 -0
- 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 +22 -0
- package/dist/commands/ios/tap-element.d.ts.map +1 -0
- package/dist/commands/ios/tap-element.js +94 -0
- package/dist/commands/ios/tap-element.js.map +1 -0
- package/dist/commands/ios/tap.d.ts +24 -0
- package/dist/commands/ios/tap.d.ts.map +1 -0
- package/dist/commands/ios/tap.js +57 -0
- package/dist/commands/ios/tap.js.map +1 -0
- package/dist/commands/ios/terminate-app.d.ts +2 -1
- package/dist/commands/ios/terminate-app.d.ts.map +1 -1
- package/dist/commands/ios/terminate-app.js +9 -3
- package/dist/commands/ios/terminate-app.js.map +1 -1
- package/dist/commands/ios/type.d.ts +18 -0
- package/dist/commands/ios/type.d.ts.map +1 -0
- package/dist/commands/ios/type.js +55 -0
- package/dist/commands/ios/type.js.map +1 -0
- package/dist/commands/ios/xcodebuild.d.ts +16 -0
- 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 +8 -2
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +7 -3
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logout.d.ts +8 -2
- package/dist/commands/logout.d.ts.map +1 -1
- package/dist/commands/logout.js +7 -3
- 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/start.js +4 -2
- package/dist/commands/session/start.js.map +1 -1
- package/dist/commands/session/status.d.ts +2 -0
- package/dist/commands/session/status.d.ts.map +1 -1
- package/dist/commands/session/status.js +2 -1
- package/dist/commands/session/status.js.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 +12 -5
- package/dist/commands/session/stop.js.map +1 -1
- package/dist/commands/{build.d.ts → xcode/build.d.ts} +6 -3
- package/dist/commands/xcode/build.d.ts.map +1 -0
- package/dist/commands/xcode/build.js +117 -0
- package/dist/commands/xcode/build.js.map +1 -0
- package/dist/commands/xcode/create.d.ts +1 -1
- package/dist/commands/xcode/create.d.ts.map +1 -1
- package/dist/commands/xcode/create.js +28 -14
- package/dist/commands/xcode/create.js.map +1 -1
- package/dist/commands/xcode/delete.d.ts +2 -1
- package/dist/commands/xcode/delete.d.ts.map +1 -1
- package/dist/commands/xcode/delete.js +4 -4
- package/dist/commands/xcode/delete.js.map +1 -1
- package/dist/commands/xcode/get.d.ts +2 -1
- package/dist/commands/xcode/get.d.ts.map +1 -1
- package/dist/commands/xcode/get.js +3 -3
- package/dist/commands/xcode/get.js.map +1 -1
- package/dist/commands/xcode/list.d.ts +2 -0
- package/dist/commands/xcode/list.d.ts.map +1 -1
- package/dist/commands/xcode/list.js +16 -4
- package/dist/commands/xcode/list.js.map +1 -1
- package/dist/commands/{sync.d.ts → xcode/sync.d.ts} +6 -3
- package/dist/commands/xcode/sync.d.ts.map +1 -0
- package/dist/commands/xcode/sync.js +107 -0
- package/dist/commands/xcode/sync.js.map +1 -0
- 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/daemon-client.d.ts +1 -1
- package/dist/lib/daemon-client.d.ts.map +1 -1
- package/dist/lib/daemon-client.js +2 -2
- package/dist/lib/daemon-client.js.map +1 -1
- package/dist/lib/daemon.d.ts.map +1 -1
- package/dist/lib/daemon.js +37 -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/dist/lib/instance-client-factory.d.ts +1 -1
- package/dist/lib/instance-client-factory.d.ts.map +1 -1
- package/dist/lib/instance-client-factory.js +2 -2
- package/dist/lib/instance-client-factory.js.map +1 -1
- package/package.json +7 -19
- package/dist/commands/build.d.ts.map +0 -1
- package/dist/commands/build.js +0 -93
- package/dist/commands/build.js.map +0 -1
- package/dist/commands/delete/index.d.ts.map +0 -1
- package/dist/commands/delete/index.js +0 -48
- package/dist/commands/delete/index.js.map +0 -1
- package/dist/commands/sync.d.ts.map +0 -1
- package/dist/commands/sync.js +0 -85
- package/dist/commands/sync.js.map +0 -1
|
@@ -0,0 +1,72 @@
|
|
|
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
|
+
const path_1 = __importDefault(require("path"));
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const core_1 = require("@oclif/core");
|
|
9
|
+
const base_command_1 = require("../../base-command");
|
|
10
|
+
const instance_client_factory_1 = require("../../lib/instance-client-factory");
|
|
11
|
+
class AndroidInstallApp extends base_command_1.BaseCommand {
|
|
12
|
+
async run() {
|
|
13
|
+
const { args, flags } = await this.parse(AndroidInstallApp);
|
|
14
|
+
this.setParsedFlags(flags);
|
|
15
|
+
await this.withAuth(async () => {
|
|
16
|
+
const id = this.resolveId(flags.id);
|
|
17
|
+
if ((0, instance_client_factory_1.detectInstanceType)(id) !== 'android') {
|
|
18
|
+
this.error('android install-app only supports Android instances');
|
|
19
|
+
}
|
|
20
|
+
let downloadUrl;
|
|
21
|
+
if (args.path_or_url.startsWith('http://') || args.path_or_url.startsWith('https://')) {
|
|
22
|
+
downloadUrl = args.path_or_url;
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
const filePath = path_1.default.resolve(args.path_or_url);
|
|
26
|
+
if (!fs_1.default.existsSync(filePath)) {
|
|
27
|
+
this.error(`File not found: ${filePath}`);
|
|
28
|
+
}
|
|
29
|
+
const name = path_1.default.basename(filePath);
|
|
30
|
+
this.info(`Uploading ${name}...`);
|
|
31
|
+
const asset = await this.client.assets.getOrUpload({ path: filePath, name });
|
|
32
|
+
downloadUrl = asset.signedDownloadUrl;
|
|
33
|
+
}
|
|
34
|
+
if ((0, instance_client_factory_1.hasActiveSession)(id)) {
|
|
35
|
+
await (0, instance_client_factory_1.sendSessionCommand)(id, 'install-app', [downloadUrl]);
|
|
36
|
+
this.log('App sent to instance');
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const { type, client, disconnect } = await (0, instance_client_factory_1.getInstanceClient)(this.client, id);
|
|
40
|
+
try {
|
|
41
|
+
if (type !== 'android') {
|
|
42
|
+
this.error('android install-app only supports Android instances');
|
|
43
|
+
}
|
|
44
|
+
await client.sendAsset(downloadUrl);
|
|
45
|
+
this.log('App sent to instance');
|
|
46
|
+
}
|
|
47
|
+
finally {
|
|
48
|
+
disconnect();
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
AndroidInstallApp.summary = 'Install an app on a running Android instance';
|
|
54
|
+
AndroidInstallApp.description = 'Install an app from a local file path or remote URL onto a running Android instance. Local files are uploaded to Limrun asset storage automatically before installation.';
|
|
55
|
+
AndroidInstallApp.examples = [
|
|
56
|
+
'<%= config.bin %> android install-app ./app.apk',
|
|
57
|
+
'<%= config.bin %> android install-app https://example.com/app.apk --id <instance-ID>',
|
|
58
|
+
];
|
|
59
|
+
AndroidInstallApp.args = {
|
|
60
|
+
path_or_url: core_1.Args.string({
|
|
61
|
+
description: 'Local app file path or remote URL to an installable Android package such as .apk',
|
|
62
|
+
required: true,
|
|
63
|
+
}),
|
|
64
|
+
};
|
|
65
|
+
AndroidInstallApp.flags = {
|
|
66
|
+
...base_command_1.BaseCommand.baseFlags,
|
|
67
|
+
id: core_1.Flags.string({
|
|
68
|
+
description: 'Android instance ID to install the app on. Defaults to the last created Android instance.',
|
|
69
|
+
}),
|
|
70
|
+
};
|
|
71
|
+
exports.default = AndroidInstallApp;
|
|
72
|
+
//# sourceMappingURL=install-app.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-app.js","sourceRoot":"","sources":["../../../src/commands/android/install-app.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { BaseCommand } from '../../base-command';
|
|
2
2
|
export default class AndroidList extends BaseCommand {
|
|
3
3
|
static summary: string;
|
|
4
|
+
static description: string;
|
|
4
5
|
static examples: string[];
|
|
5
6
|
static args: {};
|
|
6
7
|
static flags: {
|
|
@@ -10,6 +11,7 @@ export default class AndroidList extends BaseCommand {
|
|
|
10
11
|
all: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
11
12
|
'api-key': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
12
13
|
json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
14
|
+
quiet: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
13
15
|
};
|
|
14
16
|
run(): Promise<void>;
|
|
15
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/android/list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,WAAW;IAClD,MAAM,CAAC,OAAO,SAA4B;IAC1C,MAAM,CAAC,QAAQ,
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/android/list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,WAAW;IAClD,MAAM,CAAC,OAAO,SAA4B;IAC1C,MAAM,CAAC,WAAW,SACiI;IACnJ,MAAM,CAAC,QAAQ,WAIb;IAEF,MAAM,CAAC,IAAI,KAAM;IAEjB,MAAM,CAAC,KAAK;;;;;;;;MAaV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA8B3B"}
|
|
@@ -36,14 +36,26 @@ class AndroidList extends base_command_1.BaseCommand {
|
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
AndroidList.summary = 'List Android instances';
|
|
39
|
-
AndroidList.
|
|
39
|
+
AndroidList.description = 'List Android instances in your account. By default only ready instances are shown; use `--all` or `--state` to inspect other lifecycle states.';
|
|
40
|
+
AndroidList.examples = [
|
|
41
|
+
'<%= config.bin %> android list',
|
|
42
|
+
'<%= config.bin %> android list --all',
|
|
43
|
+
'<%= config.bin %> android list --region us-west --label-selector env=prod',
|
|
44
|
+
];
|
|
40
45
|
AndroidList.args = {};
|
|
41
46
|
AndroidList.flags = {
|
|
42
47
|
...base_command_1.BaseCommand.baseFlags,
|
|
43
|
-
state: core_1.Flags.string({
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
48
|
+
state: core_1.Flags.string({
|
|
49
|
+
description: 'Lifecycle state to filter by: unknown, creating, ready, or terminated',
|
|
50
|
+
}),
|
|
51
|
+
region: core_1.Flags.string({ description: 'Region to filter by, such as us-west' }),
|
|
52
|
+
'label-selector': core_1.Flags.string({
|
|
53
|
+
description: 'Comma-separated label filters, for example env=prod,team=mobile',
|
|
54
|
+
}),
|
|
55
|
+
all: core_1.Flags.boolean({
|
|
56
|
+
description: 'Show all states instead of defaulting to ready instances only',
|
|
57
|
+
default: false,
|
|
58
|
+
}),
|
|
47
59
|
};
|
|
48
60
|
exports.default = AndroidList;
|
|
49
61
|
//# sourceMappingURL=list.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/android/list.ts"],"names":[],"mappings":";;AAAA,sCAAoC;AACpC,qDAAiD;AAEjD,MAAqB,WAAY,SAAQ,0BAAW;
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/android/list.ts"],"names":[],"mappings":";;AAAA,sCAAoC;AACpC,qDAAiD;AAEjD,MAAqB,WAAY,SAAQ,0BAAW;IA2BlD,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAChD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAE3B,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;YAC7B,MAAM,MAAM,GAA4B,EAAE,CAAC;YAC3C,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAChB,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;YAC7B,CAAC;iBAAM,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;gBACtB,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC;YACzB,CAAC;YACD,IAAI,KAAK,CAAC,MAAM;gBAAE,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;YAC/C,IAAI,KAAK,CAAC,gBAAgB,CAAC;gBAAE,MAAM,CAAC,aAAa,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAE5E,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAa,CAAC,CAAC;YACzE,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,iBAAiB,EAAE,CAAC;YAC/D,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC;gBACjC,CAAC,CAAC,QAAQ,CAAC,EAAE;gBACb,CAAC,CAAC,QAAQ,CAAC,WAAW,IAAI,EAAE;gBAC5B,CAAC,CAAC,IAAI,CAAC,MAAM;gBACb,CAAC,CAAC,MAAM,CAAC,KAAK;aACf,CAAC,CAAC;YAEH,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACf,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;;AAvDM,mBAAO,GAAG,wBAAwB,CAAC;AACnC,uBAAW,GAChB,gJAAgJ,CAAC;AAC5I,oBAAQ,GAAG;IAChB,gCAAgC;IAChC,sCAAsC;IACtC,2EAA2E;CAC5E,CAAC;AAEK,gBAAI,GAAG,EAAE,CAAC;AAEV,iBAAK,GAAG;IACb,GAAG,0BAAW,CAAC,SAAS;IACxB,KAAK,EAAE,YAAK,CAAC,MAAM,CAAC;QAClB,WAAW,EAAE,uEAAuE;KACrF,CAAC;IACF,MAAM,EAAE,YAAK,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,sCAAsC,EAAE,CAAC;IAC7E,gBAAgB,EAAE,YAAK,CAAC,MAAM,CAAC;QAC7B,WAAW,EAAE,iEAAiE;KAC/E,CAAC;IACF,GAAG,EAAE,YAAK,CAAC,OAAO,CAAC;QACjB,WAAW,EAAE,+DAA+D;QAC5E,OAAO,EAAE,KAAK;KACf,CAAC;CACH,CAAC;kBAzBiB,WAAW"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { BaseCommand } from '../../base-command';
|
|
2
|
+
export default class AndroidOpenUrl extends BaseCommand {
|
|
3
|
+
static summary: string;
|
|
4
|
+
static description: string;
|
|
5
|
+
static examples: string[];
|
|
6
|
+
static args: {
|
|
7
|
+
url: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
|
|
8
|
+
};
|
|
9
|
+
static flags: {
|
|
10
|
+
id: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
11
|
+
'api-key': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
12
|
+
json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
13
|
+
quiet: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
14
|
+
};
|
|
15
|
+
run(): Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=open-url.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open-url.d.ts","sourceRoot":"","sources":["../../../src/commands/android/open-url.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAQjD,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,WAAW;IACrD,MAAM,CAAC,OAAO,SAA8C;IAC5D,MAAM,CAAC,WAAW,SAC0I;IAC5J,MAAM,CAAC,QAAQ,WAGb;IAEF,MAAM,CAAC,IAAI;;MAKT;IAEF,MAAM,CAAC,KAAK;;;;;MAKV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA0B3B"}
|
|
@@ -0,0 +1,53 @@
|
|
|
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 instance_client_factory_1 = require("../../lib/instance-client-factory");
|
|
6
|
+
class AndroidOpenUrl extends base_command_1.BaseCommand {
|
|
7
|
+
async run() {
|
|
8
|
+
const { args, flags } = await this.parse(AndroidOpenUrl);
|
|
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 open-url only supports Android instances');
|
|
14
|
+
}
|
|
15
|
+
if ((0, instance_client_factory_1.hasActiveSession)(id)) {
|
|
16
|
+
await (0, instance_client_factory_1.sendSessionCommand)(id, 'open-url', [args.url]);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
const { type, client, disconnect } = await (0, instance_client_factory_1.getInstanceClient)(this.client, id);
|
|
20
|
+
try {
|
|
21
|
+
if (type !== 'android') {
|
|
22
|
+
this.error('android open-url only supports Android instances');
|
|
23
|
+
}
|
|
24
|
+
await client.openUrl(args.url);
|
|
25
|
+
}
|
|
26
|
+
finally {
|
|
27
|
+
disconnect();
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
this.log(`Opened URL: ${args.url}`);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
AndroidOpenUrl.summary = 'Open a URL on a running Android instance';
|
|
35
|
+
AndroidOpenUrl.description = 'Open a web URL or application deep link on a running Android instance. This is useful for browser navigation, deep-link testing, and app routing flows.';
|
|
36
|
+
AndroidOpenUrl.examples = [
|
|
37
|
+
'<%= config.bin %> android open-url https://example.com',
|
|
38
|
+
'<%= config.bin %> android open-url myapp://settings --id <instance-ID>',
|
|
39
|
+
];
|
|
40
|
+
AndroidOpenUrl.args = {
|
|
41
|
+
url: core_1.Args.string({
|
|
42
|
+
description: 'URL or deep link to open, such as https://example.com or myapp://settings',
|
|
43
|
+
required: true,
|
|
44
|
+
}),
|
|
45
|
+
};
|
|
46
|
+
AndroidOpenUrl.flags = {
|
|
47
|
+
...base_command_1.BaseCommand.baseFlags,
|
|
48
|
+
id: core_1.Flags.string({
|
|
49
|
+
description: 'Android instance ID to target. Defaults to the last created Android instance.',
|
|
50
|
+
}),
|
|
51
|
+
};
|
|
52
|
+
exports.default = AndroidOpenUrl;
|
|
53
|
+
//# sourceMappingURL=open-url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open-url.js","sourceRoot":"","sources":["../../../src/commands/android/open-url.ts"],"names":[],"mappings":";;AAAA,sCAA0C;AAC1C,qDAAiD;AACjD,+EAK2C;AAE3C,MAAqB,cAAe,SAAQ,0BAAW;IAuBrD,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACzD,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,kDAAkD,CAAC,CAAC;YACjE,CAAC;YAED,IAAI,IAAA,0CAAgB,EAAC,EAAE,CAAC,EAAE,CAAC;gBACzB,MAAM,IAAA,4CAAkB,EAAC,EAAE,EAAE,UAAU,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YACvD,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,kDAAkD,CAAC,CAAC;oBACjE,CAAC;oBACD,MAAO,MAAc,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC1C,CAAC;wBAAS,CAAC;oBACT,UAAU,EAAE,CAAC;gBACf,CAAC;YACH,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,eAAe,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC;;AA/CM,sBAAO,GAAG,0CAA0C,CAAC;AACrD,0BAAW,GAChB,yJAAyJ,CAAC;AACrJ,uBAAQ,GAAG;IAChB,wDAAwD;IACxD,wEAAwE;CACzE,CAAC;AAEK,mBAAI,GAAG;IACZ,GAAG,EAAE,WAAI,CAAC,MAAM,CAAC;QACf,WAAW,EAAE,2EAA2E;QACxF,QAAQ,EAAE,IAAI;KACf,CAAC;CACH,CAAC;AAEK,oBAAK,GAAG;IACb,GAAG,0BAAW,CAAC,SAAS;IACxB,EAAE,EAAE,YAAK,CAAC,MAAM,CAAC;QACf,WAAW,EAAE,+EAA+E;KAC7F,CAAC;CACH,CAAC;kBArBiB,cAAc"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { BaseCommand } from '../../base-command';
|
|
2
|
+
export default class AndroidPressKey extends BaseCommand {
|
|
3
|
+
static summary: string;
|
|
4
|
+
static description: string;
|
|
5
|
+
static examples: string[];
|
|
6
|
+
static args: {
|
|
7
|
+
key: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
|
|
8
|
+
};
|
|
9
|
+
static flags: {
|
|
10
|
+
id: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
11
|
+
modifier: import("@oclif/core/lib/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
12
|
+
'api-key': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
13
|
+
json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
14
|
+
quiet: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
15
|
+
};
|
|
16
|
+
run(): Promise<void>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=press-key.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"press-key.d.ts","sourceRoot":"","sources":["../../../src/commands/android/press-key.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAQjD,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,WAAW;IACtD,MAAM,CAAC,OAAO,SAA+C;IAC7D,MAAM,CAAC,WAAW,SACiJ;IACnK,MAAM,CAAC,QAAQ,WAGb;IAEF,MAAM,CAAC,IAAI;;MAET;IAEF,MAAM,CAAC,KAAK;;;;;;MAUV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA0B3B"}
|
|
@@ -0,0 +1,54 @@
|
|
|
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 instance_client_factory_1 = require("../../lib/instance-client-factory");
|
|
6
|
+
class AndroidPressKey extends base_command_1.BaseCommand {
|
|
7
|
+
async run() {
|
|
8
|
+
const { args, flags } = await this.parse(AndroidPressKey);
|
|
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 press-key only supports Android instances');
|
|
14
|
+
}
|
|
15
|
+
if ((0, instance_client_factory_1.hasActiveSession)(id)) {
|
|
16
|
+
await (0, instance_client_factory_1.sendSessionCommand)(id, 'press-key', [args.key, flags.modifier]);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
const { type, client, disconnect } = await (0, instance_client_factory_1.getInstanceClient)(this.client, id);
|
|
20
|
+
try {
|
|
21
|
+
if (type !== 'android') {
|
|
22
|
+
this.error('android press-key only supports Android instances');
|
|
23
|
+
}
|
|
24
|
+
await client.pressKey(args.key, flags.modifier);
|
|
25
|
+
}
|
|
26
|
+
finally {
|
|
27
|
+
disconnect();
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
this.log(`Pressed key: ${args.key}`);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
AndroidPressKey.summary = 'Press a key on a running Android instance';
|
|
35
|
+
AndroidPressKey.description = 'Send a keyboard key press to the focused app or text field on a running Android instance. You can repeat `--modifier` to provide modifier keys when supported.';
|
|
36
|
+
AndroidPressKey.examples = [
|
|
37
|
+
'<%= config.bin %> android press-key enter',
|
|
38
|
+
'<%= config.bin %> android press-key tab --id <instance-ID>',
|
|
39
|
+
];
|
|
40
|
+
AndroidPressKey.args = {
|
|
41
|
+
key: core_1.Args.string({ description: 'Key to press (e.g. enter, backspace, a, f1)', required: true }),
|
|
42
|
+
};
|
|
43
|
+
AndroidPressKey.flags = {
|
|
44
|
+
...base_command_1.BaseCommand.baseFlags,
|
|
45
|
+
id: core_1.Flags.string({
|
|
46
|
+
description: 'Android instance ID to target. Defaults to the last created Android instance.',
|
|
47
|
+
}),
|
|
48
|
+
modifier: core_1.Flags.string({
|
|
49
|
+
description: 'Modifier key to hold during the press, such as shift, command, control, or alt. Repeat for multiple modifiers.',
|
|
50
|
+
multiple: true,
|
|
51
|
+
}),
|
|
52
|
+
};
|
|
53
|
+
exports.default = AndroidPressKey;
|
|
54
|
+
//# sourceMappingURL=press-key.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"press-key.js","sourceRoot":"","sources":["../../../src/commands/android/press-key.ts"],"names":[],"mappings":";;AAAA,sCAA0C;AAC1C,qDAAiD;AACjD,+EAK2C;AAE3C,MAAqB,eAAgB,SAAQ,0BAAW;IAyBtD,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAC1D,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,mDAAmD,CAAC,CAAC;YAClE,CAAC;YAED,IAAI,IAAA,0CAAgB,EAAC,EAAE,CAAC,EAAE,CAAC;gBACzB,MAAM,IAAA,4CAAkB,EAAC,EAAE,EAAE,WAAW,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;YACxE,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,mDAAmD,CAAC,CAAC;oBAClE,CAAC;oBACD,MAAO,MAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAC3D,CAAC;wBAAS,CAAC;oBACT,UAAU,EAAE,CAAC;gBACf,CAAC;YACH,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,gBAAgB,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC;;AAjDM,uBAAO,GAAG,2CAA2C,CAAC;AACtD,2BAAW,GAChB,gKAAgK,CAAC;AAC5J,wBAAQ,GAAG;IAChB,2CAA2C;IAC3C,4DAA4D;CAC7D,CAAC;AAEK,oBAAI,GAAG;IACZ,GAAG,EAAE,WAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,6CAA6C,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;CACjG,CAAC;AAEK,qBAAK,GAAG;IACb,GAAG,0BAAW,CAAC,SAAS;IACxB,EAAE,EAAE,YAAK,CAAC,MAAM,CAAC;QACf,WAAW,EAAE,+EAA+E;KAC7F,CAAC;IACF,QAAQ,EAAE,YAAK,CAAC,MAAM,CAAC;QACrB,WAAW,EACT,gHAAgH;QAClH,QAAQ,EAAE,IAAI;KACf,CAAC;CACH,CAAC;kBAvBiB,eAAe"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { BaseCommand } from '../../base-command';
|
|
2
|
+
export default class AndroidRecord extends BaseCommand {
|
|
3
|
+
static summary: string;
|
|
4
|
+
static description: string;
|
|
5
|
+
static examples: string[];
|
|
6
|
+
static args: {
|
|
7
|
+
action: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
|
|
8
|
+
};
|
|
9
|
+
static flags: {
|
|
10
|
+
id: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
11
|
+
quality: import("@oclif/core/lib/interfaces").OptionFlag<number, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
12
|
+
output: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
13
|
+
'presigned-url': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
14
|
+
'api-key': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
15
|
+
json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
16
|
+
quiet: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
17
|
+
};
|
|
18
|
+
run(): Promise<void>;
|
|
19
|
+
private defaultRecordingPath;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=record.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../../src/commands/android/record.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAQjD,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,WAAW;IACpD,MAAM,CAAC,OAAO,SAAiE;IAC/E,MAAM,CAAC,WAAW,SACgK;IAClL,MAAM,CAAC,QAAQ,WAKb;IAEF,MAAM,CAAC,IAAI;;MAOT;IAEF,MAAM,CAAC,KAAK;;;;;;;;MAmBV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IA2D1B,OAAO,CAAC,oBAAoB;CAI7B"}
|
|
@@ -0,0 +1,105 @@
|
|
|
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
|
+
const path_1 = __importDefault(require("path"));
|
|
7
|
+
const core_1 = require("@oclif/core");
|
|
8
|
+
const base_command_1 = require("../../base-command");
|
|
9
|
+
const instance_client_factory_1 = require("../../lib/instance-client-factory");
|
|
10
|
+
class AndroidRecord extends base_command_1.BaseCommand {
|
|
11
|
+
async run() {
|
|
12
|
+
const { args, flags } = await this.parse(AndroidRecord);
|
|
13
|
+
this.setParsedFlags(flags);
|
|
14
|
+
await this.withAuth(async () => {
|
|
15
|
+
const id = this.resolveId(flags.id);
|
|
16
|
+
if ((0, instance_client_factory_1.detectInstanceType)(id) !== 'android') {
|
|
17
|
+
this.error('android record only supports Android instances');
|
|
18
|
+
}
|
|
19
|
+
if (args.action === 'start') {
|
|
20
|
+
if ((0, instance_client_factory_1.hasActiveSession)(id)) {
|
|
21
|
+
await (0, instance_client_factory_1.sendSessionCommand)(id, 'start-recording', [flags.quality]);
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
const { type, client, disconnect } = await (0, instance_client_factory_1.getInstanceClient)(this.client, id);
|
|
25
|
+
try {
|
|
26
|
+
if (type !== 'android') {
|
|
27
|
+
this.error('android record only supports Android instances');
|
|
28
|
+
}
|
|
29
|
+
await client.startRecording({ quality: flags.quality });
|
|
30
|
+
}
|
|
31
|
+
finally {
|
|
32
|
+
disconnect();
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
this.log('Recording started');
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const outputPath = flags.output ? path_1.default.resolve(flags.output) : this.defaultRecordingPath();
|
|
39
|
+
const saveTo = {
|
|
40
|
+
localPath: outputPath,
|
|
41
|
+
presignedUrl: flags['presigned-url'],
|
|
42
|
+
};
|
|
43
|
+
if ((0, instance_client_factory_1.hasActiveSession)(id)) {
|
|
44
|
+
await (0, instance_client_factory_1.sendSessionCommand)(id, 'stop-recording', [saveTo]);
|
|
45
|
+
this.log(`Recording saved to ${outputPath}`);
|
|
46
|
+
if (flags['presigned-url']) {
|
|
47
|
+
this.log('Recording uploaded using the provided presigned URL');
|
|
48
|
+
}
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const { type, client, disconnect } = await (0, instance_client_factory_1.getInstanceClient)(this.client, id);
|
|
52
|
+
try {
|
|
53
|
+
if (type !== 'android') {
|
|
54
|
+
this.error('android record only supports Android instances');
|
|
55
|
+
}
|
|
56
|
+
await client.stopRecording(saveTo);
|
|
57
|
+
this.log(`Recording saved to ${outputPath}`);
|
|
58
|
+
if (flags['presigned-url']) {
|
|
59
|
+
this.log('Recording uploaded using the provided presigned URL');
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
finally {
|
|
63
|
+
disconnect();
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
defaultRecordingPath() {
|
|
68
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
69
|
+
return path_1.default.join(process.cwd(), `video_${timestamp}.mp4`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
AndroidRecord.summary = 'Start or stop video recording on a running Android instance';
|
|
73
|
+
AndroidRecord.description = 'Control screen recording on a running Android instance. Start recording first, then stop recording to download the file locally or upload it directly with `--presigned-url`.';
|
|
74
|
+
AndroidRecord.examples = [
|
|
75
|
+
'<%= config.bin %> android record start',
|
|
76
|
+
'<%= config.bin %> android record stop',
|
|
77
|
+
'<%= config.bin %> android record stop -o recording.mp4 --id <instance-ID>',
|
|
78
|
+
'<%= config.bin %> android record stop --presigned-url https://example.com/upload --id <instance-ID>',
|
|
79
|
+
];
|
|
80
|
+
AndroidRecord.args = {
|
|
81
|
+
action: core_1.Args.string({
|
|
82
|
+
description: 'Recording action to perform: `start` begins capturing and `stop` finalizes the video file',
|
|
83
|
+
required: true,
|
|
84
|
+
options: ['start', 'stop'],
|
|
85
|
+
}),
|
|
86
|
+
};
|
|
87
|
+
AndroidRecord.flags = {
|
|
88
|
+
...base_command_1.BaseCommand.baseFlags,
|
|
89
|
+
id: core_1.Flags.string({
|
|
90
|
+
description: 'Android instance ID to record. Defaults to the last created Android instance.',
|
|
91
|
+
}),
|
|
92
|
+
quality: core_1.Flags.integer({
|
|
93
|
+
description: 'Recording quality from 5 to 10. Higher values increase quality and file size when starting a recording.',
|
|
94
|
+
default: 5,
|
|
95
|
+
}),
|
|
96
|
+
output: core_1.Flags.string({
|
|
97
|
+
char: 'o',
|
|
98
|
+
description: 'Local file path for the finished recording when using the `stop` action. Defaults to a timestamped mp4 in the current directory.',
|
|
99
|
+
}),
|
|
100
|
+
'presigned-url': core_1.Flags.string({
|
|
101
|
+
description: 'Presigned upload URL to receive the recording when using the `stop` action. Use this if you will upload the recording to a bucket.',
|
|
102
|
+
}),
|
|
103
|
+
};
|
|
104
|
+
exports.default = AndroidRecord;
|
|
105
|
+
//# sourceMappingURL=record.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record.js","sourceRoot":"","sources":["../../../src/commands/android/record.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { BaseCommand } from '../../base-command';
|
|
2
|
+
export default class AndroidScreenshot 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
|
+
output: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
10
|
+
'api-key': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
11
|
+
json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
12
|
+
quiet: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
13
|
+
};
|
|
14
|
+
run(): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=screenshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screenshot.d.ts","sourceRoot":"","sources":["../../../src/commands/android/screenshot.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAQjD,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,WAAW;IACxD,MAAM,CAAC,OAAO,SAA0D;IACxE,MAAM,CAAC,WAAW,SACuI;IACzJ,MAAM,CAAC,QAAQ,WAIb;IAEF,MAAM,CAAC,IAAI,KAAM;IAEjB,MAAM,CAAC,KAAK;;;;;;MASV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAqC3B"}
|
|
@@ -0,0 +1,70 @@
|
|
|
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
|
+
const fs_1 = __importDefault(require("fs"));
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const core_1 = require("@oclif/core");
|
|
9
|
+
const base_command_1 = require("../../base-command");
|
|
10
|
+
const instance_client_factory_1 = require("../../lib/instance-client-factory");
|
|
11
|
+
class AndroidScreenshot extends base_command_1.BaseCommand {
|
|
12
|
+
async run() {
|
|
13
|
+
const { flags } = await this.parse(AndroidScreenshot);
|
|
14
|
+
this.setParsedFlags(flags);
|
|
15
|
+
await this.withAuth(async () => {
|
|
16
|
+
const id = this.resolveId(flags.id);
|
|
17
|
+
if ((0, instance_client_factory_1.detectInstanceType)(id) !== 'android') {
|
|
18
|
+
this.error('android screenshot only supports Android instances');
|
|
19
|
+
}
|
|
20
|
+
let screenshot;
|
|
21
|
+
if ((0, instance_client_factory_1.hasActiveSession)(id)) {
|
|
22
|
+
screenshot = await (0, instance_client_factory_1.sendSessionCommand)(id, 'screenshot');
|
|
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 screenshot only supports Android instances');
|
|
29
|
+
}
|
|
30
|
+
screenshot = await client.screenshot();
|
|
31
|
+
}
|
|
32
|
+
finally {
|
|
33
|
+
disconnect();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
if (flags.output) {
|
|
37
|
+
const outPath = path_1.default.resolve(flags.output);
|
|
38
|
+
const base64 = screenshot.dataUri.replace(/^data:image\/\w+;base64,/, '');
|
|
39
|
+
fs_1.default.writeFileSync(outPath, Buffer.from(base64, 'base64'));
|
|
40
|
+
this.log(`Screenshot saved to ${outPath}`);
|
|
41
|
+
}
|
|
42
|
+
else if (flags.json) {
|
|
43
|
+
this.outputJson(screenshot);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
this.log(screenshot.dataUri);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
AndroidScreenshot.summary = 'Capture a screenshot from a running Android instance';
|
|
52
|
+
AndroidScreenshot.description = 'Capture the current screen from a running Android instance. Save the image to a file with `-o`, or use `--json` to inspect the raw response payload.';
|
|
53
|
+
AndroidScreenshot.examples = [
|
|
54
|
+
'<%= config.bin %> android screenshot -o screenshot.png',
|
|
55
|
+
'<%= config.bin %> android screenshot --id <instance-ID>',
|
|
56
|
+
'<%= config.bin %> android screenshot --json',
|
|
57
|
+
];
|
|
58
|
+
AndroidScreenshot.args = {};
|
|
59
|
+
AndroidScreenshot.flags = {
|
|
60
|
+
...base_command_1.BaseCommand.baseFlags,
|
|
61
|
+
id: core_1.Flags.string({
|
|
62
|
+
description: 'Android instance ID to capture. Defaults to the last created Android instance.',
|
|
63
|
+
}),
|
|
64
|
+
output: core_1.Flags.string({
|
|
65
|
+
char: 'o',
|
|
66
|
+
description: 'File path where the screenshot should be written instead of printing the raw image data',
|
|
67
|
+
}),
|
|
68
|
+
};
|
|
69
|
+
exports.default = AndroidScreenshot;
|
|
70
|
+
//# sourceMappingURL=screenshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../../src/commands/android/screenshot.ts"],"names":[],"mappings":";;;;;AAAA,4CAAoB;AACpB,gDAAwB;AACxB,sCAAoC;AACpC,qDAAiD;AACjD,+EAK2C;AAE3C,MAAqB,iBAAkB,SAAQ,0BAAW;IAuBxD,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACtD,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,oDAAoD,CAAC,CAAC;YACnE,CAAC;YAED,IAAI,UAAe,CAAC;YACpB,IAAI,IAAA,0CAAgB,EAAC,EAAE,CAAC,EAAE,CAAC;gBACzB,UAAU,GAAG,MAAM,IAAA,4CAAkB,EAAC,EAAE,EAAE,YAAY,CAAC,CAAC;YAC1D,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,oDAAoD,CAAC,CAAC;oBACnE,CAAC;oBACD,UAAU,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;gBACzC,CAAC;wBAAS,CAAC;oBACT,UAAU,EAAE,CAAC;gBACf,CAAC;YACH,CAAC;YAED,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjB,MAAM,OAAO,GAAG,cAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC3C,MAAM,MAAM,GAAI,UAAU,CAAC,OAAkB,CAAC,OAAO,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC;gBACtF,YAAE,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;gBACzD,IAAI,CAAC,GAAG,CAAC,uBAAuB,OAAO,EAAE,CAAC,CAAC;YAC7C,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACtB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;;AA1DM,yBAAO,GAAG,sDAAsD,CAAC;AACjE,6BAAW,GAChB,sJAAsJ,CAAC;AAClJ,0BAAQ,GAAG;IAChB,wDAAwD;IACxD,yDAAyD;IACzD,6CAA6C;CAC9C,CAAC;AAEK,sBAAI,GAAG,EAAE,CAAC;AAEV,uBAAK,GAAG;IACb,GAAG,0BAAW,CAAC,SAAS;IACxB,EAAE,EAAE,YAAK,CAAC,MAAM,CAAC;QACf,WAAW,EAAE,gFAAgF;KAC9F,CAAC;IACF,MAAM,EAAE,YAAK,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,GAAG;QACT,WAAW,EAAE,yFAAyF;KACvG,CAAC;CACH,CAAC;kBArBiB,iBAAiB"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { BaseCommand } from '../../base-command';
|
|
2
|
+
export default class AndroidScroll extends BaseCommand {
|
|
3
|
+
static summary: string;
|
|
4
|
+
static description: string;
|
|
5
|
+
static examples: string[];
|
|
6
|
+
static args: {
|
|
7
|
+
direction: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
|
|
8
|
+
};
|
|
9
|
+
static flags: {
|
|
10
|
+
amount: import("@oclif/core/lib/interfaces").OptionFlag<number, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
11
|
+
x: import("@oclif/core/lib/interfaces").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
12
|
+
y: import("@oclif/core/lib/interfaces").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
13
|
+
'resource-id': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
14
|
+
text: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
15
|
+
'content-desc': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
16
|
+
'class-name': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
17
|
+
'package-name': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
18
|
+
index: import("@oclif/core/lib/interfaces").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
19
|
+
clickable: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
20
|
+
enabled: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
21
|
+
focused: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
22
|
+
'bounds-contains-x': import("@oclif/core/lib/interfaces").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
23
|
+
'bounds-contains-y': import("@oclif/core/lib/interfaces").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
24
|
+
id: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
25
|
+
'api-key': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
26
|
+
json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
27
|
+
quiet: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
28
|
+
};
|
|
29
|
+
run(): Promise<void>;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=scroll.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scroll.d.ts","sourceRoot":"","sources":["../../../src/commands/android/scroll.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AASjD,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,WAAW;IACpD,MAAM,CAAC,OAAO,SAA0C;IACxD,MAAM,CAAC,WAAW,SACuJ;IACzK,MAAM,CAAC,QAAQ,WAKb;IAEF,MAAM,CAAC,IAAI;;MAMT;IAEF,MAAM,CAAC,KAAK;;;;;;;;;;;;;;;;;;;MAUV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAoC3B"}
|