@limrun/cli 0.4.0 → 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/dist/commands/xcode/build.js +4 -4
- package/dist/commands/xcode/build.js.map +1 -1
- package/dist/lib/config.js +1 -1
- package/dist/lib/config.js.map +1 -1
- package/package.json +1 -1
- package/dist/commands/exec/element-tree.d.ts +0 -15
- 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 +0 -17
- 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 +0 -17
- 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 -17
- 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 -18
- 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 -21
- 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 +0 -16
- 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 -18
- 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 -19
- 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 -24
- 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 +0 -18
- 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 +0 -20
- package/dist/commands/ios/log.d.ts.map +0 -1
- package/dist/commands/ios/log.js +0 -105
- package/dist/commands/ios/log.js.map +0 -1
|
@@ -35,11 +35,11 @@ class XcodeBuild extends base_command_1.BaseCommand {
|
|
|
35
35
|
this.info('Sync complete.');
|
|
36
36
|
this.info('Starting xcodebuild...');
|
|
37
37
|
const proc = xcodeClient.xcodebuild(Object.keys(settings).length > 0 ? settings : undefined, Object.keys(options).length > 0 ? options : undefined);
|
|
38
|
-
proc.stdout.on('data', (
|
|
39
|
-
process.stdout.write(
|
|
38
|
+
proc.stdout.on('data', (line) => {
|
|
39
|
+
process.stdout.write(line + '\n');
|
|
40
40
|
});
|
|
41
|
-
proc.stderr.on('data', (
|
|
42
|
-
process.stderr.write(
|
|
41
|
+
proc.stderr.on('data', (line) => {
|
|
42
|
+
process.stderr.write(line + '\n');
|
|
43
43
|
});
|
|
44
44
|
const result = await proc;
|
|
45
45
|
if (result.exitCode !== 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/commands/xcode/build.ts"],"names":[],"mappings":";;AAAA,sCAA0C;AAC1C,qDAAiD;AACjD,+EAAuE;AACvE,6CAAqD;AACrD,+DAAkE;AAElE,MAAqB,UAAW,SAAQ,0BAAW;IAgDjD,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACrD,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,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAC5C,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,iCAAiC,CAAC,EAAE,CAAC,CAAC;YAErE,MAAM,QAAQ,GAA2B,EAAE,CAAC;YAC5C,IAAI,KAAK,CAAC,MAAM;gBAAE,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;YACjD,IAAI,KAAK,CAAC,SAAS;gBAAE,QAAQ,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;YAC1D,IAAI,KAAK,CAAC,OAAO;gBAAE,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YAEpD,MAAM,OAAO,GAA4B,EAAE,CAAC;YAC5C,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjB,OAAO,CAAC,MAAM,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;YAC/C,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,WAAW,QAAQ,gBAAgB,EAAE,KAAK,CAAC,CAAC;YACtD,MAAM,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAC/B,KAAK,EAAE,KAAK;gBACZ,OAAO,EAAE,KAAK;gBACd,aAAa,EAAE,KAAK,CAAC,iBAAiB,CAAC;gBACvC,aAAa,EAAE,KAAK,CAAC,iBAAiB,CAAC;gBACvC,MAAM,EAAE,IAAA,uCAAqB,EAAC,KAAK,CAAC,MAAM,CAAC;aAC5C,CAAC,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAE5B,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YAEpC,MAAM,IAAI,GAAG,WAAW,CAAC,UAAU,CACjC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,EACvD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CACtD,CAAC;YAEF,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/commands/xcode/build.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/config.js
CHANGED
|
@@ -110,7 +110,7 @@ function resolveInstanceId(providedId, expectedType) {
|
|
|
110
110
|
const lastId = loadLastInstanceId(expectedType);
|
|
111
111
|
if (lastId)
|
|
112
112
|
return lastId;
|
|
113
|
-
const typeHint =
|
|
113
|
+
const typeHint = `${expectedType ?? 'ios|xcode|android'}`.trim();
|
|
114
114
|
throw new Error(`No instance ID provided and no recent${typeHint} instance found.\n` +
|
|
115
115
|
`Provide an instance ID or create one first with: lim${typeHint} create`);
|
|
116
116
|
}
|
package/dist/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { BaseCommand } from '../../base-command';
|
|
2
|
-
export default class ExecElementTree 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
|
-
}
|
|
15
|
-
//# sourceMappingURL=element-tree.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"element-tree.d.ts","sourceRoot":"","sources":["../../../src/commands/exec/element-tree.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,WAAW;IACtD,MAAM,CAAC,OAAO,SAAqD;IACnE,MAAM,CAAC,WAAW,SAC4K;IAC9L,MAAM,CAAC,QAAQ,WAKb;IAEF,MAAM,CAAC,IAAI,KAAM;IAEjB,MAAM,CAAC,KAAK;;;;;MAKV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAiC3B"}
|
|
@@ -1,61 +0,0 @@
|
|
|
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 ExecElementTree extends base_command_1.BaseCommand {
|
|
7
|
-
async run() {
|
|
8
|
-
const { flags } = await this.parse(ExecElementTree);
|
|
9
|
-
this.setParsedFlags(flags);
|
|
10
|
-
await this.withAuth(async () => {
|
|
11
|
-
const id = this.resolveId(flags.id);
|
|
12
|
-
if ((0, instance_client_factory_1.hasActiveSession)(id)) {
|
|
13
|
-
const tree = await (0, instance_client_factory_1.sendSessionCommand)(id, 'element-tree');
|
|
14
|
-
if (flags.json) {
|
|
15
|
-
this.outputJson(tree);
|
|
16
|
-
}
|
|
17
|
-
else {
|
|
18
|
-
this.log(typeof tree === 'string' ? tree : JSON.stringify(tree, null, 2));
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
else {
|
|
22
|
-
const { type, client, disconnect } = await (0, instance_client_factory_1.getInstanceClient)(this.client, id);
|
|
23
|
-
try {
|
|
24
|
-
if (type === 'ios') {
|
|
25
|
-
const tree = await client.elementTree();
|
|
26
|
-
this.log(typeof tree === 'string' ? tree : JSON.stringify(tree, null, 2));
|
|
27
|
-
}
|
|
28
|
-
else {
|
|
29
|
-
const tree = await client.getElementTree();
|
|
30
|
-
if (flags.json) {
|
|
31
|
-
this.outputJson(tree);
|
|
32
|
-
}
|
|
33
|
-
else {
|
|
34
|
-
this.log(tree.xml || JSON.stringify(tree.nodes, null, 2));
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
finally {
|
|
39
|
-
disconnect();
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
ExecElementTree.summary = 'Get the UI element tree from a running instance';
|
|
46
|
-
ExecElementTree.description = 'Inspect the current accessibility hierarchy of a running iOS or Android instance. Use `--json` for structured output that agents can search, filter, or feed into later automation steps.';
|
|
47
|
-
ExecElementTree.examples = [
|
|
48
|
-
'<%= config.bin %> ios element-tree',
|
|
49
|
-
'<%= config.bin %> android element-tree --id <instance-ID>',
|
|
50
|
-
'<%= config.bin %> ios element-tree --id <instance-ID>',
|
|
51
|
-
'<%= config.bin %> ios element-tree --json',
|
|
52
|
-
];
|
|
53
|
-
ExecElementTree.args = {};
|
|
54
|
-
ExecElementTree.flags = {
|
|
55
|
-
...base_command_1.BaseCommand.baseFlags,
|
|
56
|
-
id: core_1.Flags.string({
|
|
57
|
-
description: 'Instance ID to inspect. Defaults to the last created instance of the command alias type.',
|
|
58
|
-
}),
|
|
59
|
-
};
|
|
60
|
-
exports.default = ExecElementTree;
|
|
61
|
-
//# sourceMappingURL=element-tree.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"element-tree.js","sourceRoot":"","sources":["../../../src/commands/exec/element-tree.ts"],"names":[],"mappings":";;AAAA,sCAAoC;AACpC,qDAAiD;AACjD,+EAA4G;AAE5G,MAAqB,eAAgB,SAAQ,0BAAW;IAoBtD,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QACpD,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,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,CAAC;oBACN,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC5E,CAAC;YACH,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,KAAK,EAAE,CAAC;wBACnB,MAAM,IAAI,GAAG,MAAO,MAAc,CAAC,WAAW,EAAE,CAAC;wBACjD,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC5E,CAAC;yBAAM,CAAC;wBACN,MAAM,IAAI,GAAG,MAAO,MAAc,CAAC,cAAc,EAAE,CAAC;wBACpD,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;4BACf,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;wBACxB,CAAC;6BAAM,CAAC;4BACN,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;wBAC5D,CAAC;oBACH,CAAC;gBACH,CAAC;wBAAS,CAAC;oBACT,UAAU,EAAE,CAAC;gBACf,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;;AAnDM,uBAAO,GAAG,iDAAiD,CAAC;AAC5D,2BAAW,GAChB,2LAA2L,CAAC;AACvL,wBAAQ,GAAG;IAChB,oCAAoC;IACpC,2DAA2D;IAC3D,uDAAuD;IACvD,2CAA2C;CAC5C,CAAC;AAEK,oBAAI,GAAG,EAAE,CAAC;AAEV,qBAAK,GAAG;IACb,GAAG,0BAAW,CAAC,SAAS;IACxB,EAAE,EAAE,YAAK,CAAC,MAAM,CAAC;QACf,WAAW,EAAE,0FAA0F;KACxG,CAAC;CACH,CAAC;kBAlBiB,eAAe"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { BaseCommand } from '../../base-command';
|
|
2
|
-
export default class ExecInstallApp extends BaseCommand {
|
|
3
|
-
static summary: string;
|
|
4
|
-
static description: string;
|
|
5
|
-
static examples: string[];
|
|
6
|
-
static args: {
|
|
7
|
-
path_or_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=install-app.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"install-app.d.ts","sourceRoot":"","sources":["../../../src/commands/exec/install-app.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,WAAW;IACrD,MAAM,CAAC,OAAO,SAA0C;IACxD,MAAM,CAAC,WAAW,SACkK;IAEpL,MAAM,CAAC,QAAQ,WAIb;IAEF,MAAM,CAAC,IAAI;;MAKT;IAEF,MAAM,CAAC,KAAK;;;;;MAMV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAgD3B"}
|
|
@@ -1,84 +0,0 @@
|
|
|
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 ExecInstallApp extends base_command_1.BaseCommand {
|
|
12
|
-
async run() {
|
|
13
|
-
const { args, flags } = await this.parse(ExecInstallApp);
|
|
14
|
-
this.setParsedFlags(flags);
|
|
15
|
-
await this.withAuth(async () => {
|
|
16
|
-
const id = this.resolveId(flags.id);
|
|
17
|
-
let downloadUrl;
|
|
18
|
-
if (args.path_or_url.startsWith('http://') || args.path_or_url.startsWith('https://')) {
|
|
19
|
-
downloadUrl = args.path_or_url;
|
|
20
|
-
}
|
|
21
|
-
else {
|
|
22
|
-
const filePath = path_1.default.resolve(args.path_or_url);
|
|
23
|
-
if (!fs_1.default.existsSync(filePath)) {
|
|
24
|
-
this.error(`File not found: ${filePath}`);
|
|
25
|
-
}
|
|
26
|
-
const name = path_1.default.basename(filePath);
|
|
27
|
-
this.info(`Uploading ${name}...`);
|
|
28
|
-
const asset = await this.client.assets.getOrUpload({ path: filePath, name });
|
|
29
|
-
downloadUrl = asset.signedDownloadUrl;
|
|
30
|
-
}
|
|
31
|
-
if ((0, instance_client_factory_1.hasActiveSession)(id)) {
|
|
32
|
-
const result = await (0, instance_client_factory_1.sendSessionCommand)(id, 'install-app', [downloadUrl]);
|
|
33
|
-
if (flags.json) {
|
|
34
|
-
this.outputJson(result);
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
this.log('App installed');
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
else {
|
|
41
|
-
const { type, client, disconnect } = await (0, instance_client_factory_1.getInstanceClient)(this.client, id);
|
|
42
|
-
try {
|
|
43
|
-
if (type === 'ios') {
|
|
44
|
-
const result = await client.installApp(downloadUrl);
|
|
45
|
-
if (flags.json) {
|
|
46
|
-
this.outputJson(result);
|
|
47
|
-
}
|
|
48
|
-
else {
|
|
49
|
-
this.log(`App installed${result?.bundleId ? `: ${result.bundleId}` : ''}`);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
else {
|
|
53
|
-
await client.sendAsset(downloadUrl);
|
|
54
|
-
this.log('App sent to instance');
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
finally {
|
|
58
|
-
disconnect();
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
ExecInstallApp.summary = 'Install an app on a running instance';
|
|
65
|
-
ExecInstallApp.description = 'Install an app from a local file path or remote URL onto a running iOS or Android instance. Local files are uploaded to Limrun asset storage automatically before installation.';
|
|
66
|
-
ExecInstallApp.examples = [
|
|
67
|
-
'<%= config.bin %> ios install-app ./MyApp.ipa',
|
|
68
|
-
'<%= config.bin %> android install-app ./app.apk --id <instance-ID>',
|
|
69
|
-
'<%= config.bin %> ios install-app https://example.com/MyApp.ipa --json',
|
|
70
|
-
];
|
|
71
|
-
ExecInstallApp.args = {
|
|
72
|
-
path_or_url: core_1.Args.string({
|
|
73
|
-
description: 'Local app file path or remote URL to an installable package such as .ipa or .apk',
|
|
74
|
-
required: true,
|
|
75
|
-
}),
|
|
76
|
-
};
|
|
77
|
-
ExecInstallApp.flags = {
|
|
78
|
-
...base_command_1.BaseCommand.baseFlags,
|
|
79
|
-
id: core_1.Flags.string({
|
|
80
|
-
description: 'Instance ID to install the app on. Defaults to the last created instance of the command alias type.',
|
|
81
|
-
}),
|
|
82
|
-
};
|
|
83
|
-
exports.default = ExecInstallApp;
|
|
84
|
-
//# sourceMappingURL=install-app.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"install-app.js","sourceRoot":"","sources":["../../../src/commands/exec/install-app.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { BaseCommand } from '../../base-command';
|
|
2
|
-
export default class ExecOpenUrl 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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"open-url.d.ts","sourceRoot":"","sources":["../../../src/commands/exec/open-url.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,WAAW;IAClD,MAAM,CAAC,OAAO,SAAsC;IACpD,MAAM,CAAC,WAAW,SACiJ;IACnK,MAAM,CAAC,QAAQ,WAIb;IAEF,MAAM,CAAC,IAAI;;MAKT;IAEF,MAAM,CAAC,KAAK;;;;;MAKV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAmB3B"}
|
|
@@ -1,48 +0,0 @@
|
|
|
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 ExecOpenUrl extends base_command_1.BaseCommand {
|
|
7
|
-
async run() {
|
|
8
|
-
const { args, flags } = await this.parse(ExecOpenUrl);
|
|
9
|
-
this.setParsedFlags(flags);
|
|
10
|
-
await this.withAuth(async () => {
|
|
11
|
-
const id = this.resolveId(flags.id);
|
|
12
|
-
if ((0, instance_client_factory_1.hasActiveSession)(id)) {
|
|
13
|
-
await (0, instance_client_factory_1.sendSessionCommand)(id, 'open-url', [args.url]);
|
|
14
|
-
}
|
|
15
|
-
else {
|
|
16
|
-
const { client, disconnect } = await (0, instance_client_factory_1.getInstanceClient)(this.client, id);
|
|
17
|
-
try {
|
|
18
|
-
await client.openUrl(args.url);
|
|
19
|
-
}
|
|
20
|
-
finally {
|
|
21
|
-
disconnect();
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
this.log(`Opened URL: ${args.url}`);
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
ExecOpenUrl.summary = 'Open a URL on a running instance';
|
|
29
|
-
ExecOpenUrl.description = 'Open a web URL or application deep link on a running iOS or Android instance. This is useful for browser navigation, deep-link testing, and app routing flows.';
|
|
30
|
-
ExecOpenUrl.examples = [
|
|
31
|
-
'<%= config.bin %> ios open-url https://example.com',
|
|
32
|
-
'<%= config.bin %> ios open-url https://example.com --id <instance-ID>',
|
|
33
|
-
'<%= config.bin %> android open-url myapp://settings --id <instance-ID>',
|
|
34
|
-
];
|
|
35
|
-
ExecOpenUrl.args = {
|
|
36
|
-
url: core_1.Args.string({
|
|
37
|
-
description: 'URL or deep link to open, such as https://example.com or myapp://settings',
|
|
38
|
-
required: true,
|
|
39
|
-
}),
|
|
40
|
-
};
|
|
41
|
-
ExecOpenUrl.flags = {
|
|
42
|
-
...base_command_1.BaseCommand.baseFlags,
|
|
43
|
-
id: core_1.Flags.string({
|
|
44
|
-
description: 'Instance ID to target. Defaults to the last created instance of the command alias type.',
|
|
45
|
-
}),
|
|
46
|
-
};
|
|
47
|
-
exports.default = ExecOpenUrl;
|
|
48
|
-
//# sourceMappingURL=open-url.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"open-url.js","sourceRoot":"","sources":["../../../src/commands/exec/open-url.ts"],"names":[],"mappings":";;AAAA,sCAA0C;AAC1C,qDAAiD;AACjD,+EAA4G;AAE5G,MAAqB,WAAY,SAAQ,0BAAW;IAwBlD,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,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,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,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,IAAA,2CAAiB,EAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBACxE,IAAI,CAAC;oBACH,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;;AAzCM,mBAAO,GAAG,kCAAkC,CAAC;AAC7C,uBAAW,GAChB,gKAAgK,CAAC;AAC5J,oBAAQ,GAAG;IAChB,oDAAoD;IACpD,uEAAuE;IACvE,wEAAwE;CACzE,CAAC;AAEK,gBAAI,GAAG;IACZ,GAAG,EAAE,WAAI,CAAC,MAAM,CAAC;QACf,WAAW,EAAE,2EAA2E;QACxF,QAAQ,EAAE,IAAI;KACf,CAAC;CACH,CAAC;AAEK,iBAAK,GAAG;IACb,GAAG,0BAAW,CAAC,SAAS;IACxB,EAAE,EAAE,YAAK,CAAC,MAAM,CAAC;QACf,WAAW,EAAE,yFAAyF;KACvG,CAAC;CACH,CAAC;kBAtBiB,WAAW"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { BaseCommand } from '../../base-command';
|
|
2
|
-
export default class ExecPerform extends BaseCommand {
|
|
3
|
-
static summary: string;
|
|
4
|
-
static description: string;
|
|
5
|
-
static examples: string[];
|
|
6
|
-
static flags: {
|
|
7
|
-
id: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
8
|
-
action: import("@oclif/core/lib/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
9
|
-
file: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
10
|
-
timeout: import("@oclif/core/lib/interfaces").OptionFlag<number | 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=perform.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"perform.d.ts","sourceRoot":"","sources":["../../../src/commands/exec/perform.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAwKjD,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,WAAW;IAClD,MAAM,CAAC,OAAO,SAAoD;IAClE,MAAM,CAAC,WAAW,SAC6N;IAC/O,MAAM,CAAC,QAAQ,WAIb;IAEF,MAAM,CAAC,KAAK;;;;;;;;MAqDV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA8C3B"}
|
|
@@ -1,232 +0,0 @@
|
|
|
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 js_yaml_1 = __importDefault(require("js-yaml"));
|
|
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
|
-
const IPC_TIMEOUT_BUFFER_MS = 5000;
|
|
12
|
-
function splitActionFields(raw) {
|
|
13
|
-
const fields = [];
|
|
14
|
-
let current = '';
|
|
15
|
-
let escaped = false;
|
|
16
|
-
for (const char of raw) {
|
|
17
|
-
if (escaped) {
|
|
18
|
-
current += char;
|
|
19
|
-
escaped = false;
|
|
20
|
-
continue;
|
|
21
|
-
}
|
|
22
|
-
if (char === '\\') {
|
|
23
|
-
escaped = true;
|
|
24
|
-
continue;
|
|
25
|
-
}
|
|
26
|
-
if (char === ',') {
|
|
27
|
-
fields.push(current);
|
|
28
|
-
current = '';
|
|
29
|
-
continue;
|
|
30
|
-
}
|
|
31
|
-
current += char;
|
|
32
|
-
}
|
|
33
|
-
if (escaped) {
|
|
34
|
-
current += '\\';
|
|
35
|
-
}
|
|
36
|
-
fields.push(current);
|
|
37
|
-
return fields;
|
|
38
|
-
}
|
|
39
|
-
function parseScalarValue(value) {
|
|
40
|
-
const trimmed = value.trim();
|
|
41
|
-
if ((trimmed.startsWith('{') && trimmed.endsWith('}')) ||
|
|
42
|
-
(trimmed.startsWith('[') && trimmed.endsWith(']')) ||
|
|
43
|
-
(trimmed.startsWith('"') && trimmed.endsWith('"'))) {
|
|
44
|
-
try {
|
|
45
|
-
return JSON.parse(trimmed);
|
|
46
|
-
}
|
|
47
|
-
catch {
|
|
48
|
-
// Fall through to plain string parsing if this is not valid JSON.
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
if (value === 'true')
|
|
52
|
-
return true;
|
|
53
|
-
if (value === 'false')
|
|
54
|
-
return false;
|
|
55
|
-
if (/^-?\d+(\.\d+)?$/.test(value))
|
|
56
|
-
return Number(value);
|
|
57
|
-
return value;
|
|
58
|
-
}
|
|
59
|
-
function parseAction(raw, index) {
|
|
60
|
-
const action = {};
|
|
61
|
-
for (const field of splitActionFields(raw)) {
|
|
62
|
-
const trimmed = field.trim();
|
|
63
|
-
if (!trimmed)
|
|
64
|
-
continue;
|
|
65
|
-
const equalsIndex = trimmed.indexOf('=');
|
|
66
|
-
if (equalsIndex === -1) {
|
|
67
|
-
throw new Error(`Action ${index + 1} field "${trimmed}" must use key=value syntax`);
|
|
68
|
-
}
|
|
69
|
-
const key = trimmed.slice(0, equalsIndex).trim();
|
|
70
|
-
const value = trimmed.slice(equalsIndex + 1);
|
|
71
|
-
if (!key) {
|
|
72
|
-
throw new Error(`Action ${index + 1} contains an empty key`);
|
|
73
|
-
}
|
|
74
|
-
action[key] = parseScalarValue(value);
|
|
75
|
-
}
|
|
76
|
-
if (typeof action.type !== 'string' || action.type.length === 0) {
|
|
77
|
-
throw new Error(`Action ${index + 1} must include type=<action-name>`);
|
|
78
|
-
}
|
|
79
|
-
return action;
|
|
80
|
-
}
|
|
81
|
-
function parseActionsDocument(raw, source) {
|
|
82
|
-
let parsed;
|
|
83
|
-
try {
|
|
84
|
-
parsed = js_yaml_1.default.load(raw);
|
|
85
|
-
}
|
|
86
|
-
catch (error) {
|
|
87
|
-
throw new Error(`Failed to parse actions from ${source}: ${error.message}`);
|
|
88
|
-
}
|
|
89
|
-
if (!Array.isArray(parsed)) {
|
|
90
|
-
throw new Error(`Actions in ${source} must be an array`);
|
|
91
|
-
}
|
|
92
|
-
for (const [index, action] of parsed.entries()) {
|
|
93
|
-
if (!action || typeof action !== 'object' || typeof action.type !== 'string') {
|
|
94
|
-
throw new Error(`Action at index ${index} in ${source} must be an object with a string "type" field`);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
return parsed;
|
|
98
|
-
}
|
|
99
|
-
function parseActions(rawActions) {
|
|
100
|
-
if (rawActions.length === 0) {
|
|
101
|
-
throw new Error('Provide at least one --action flag');
|
|
102
|
-
}
|
|
103
|
-
return rawActions.map((rawAction, index) => parseAction(rawAction, index));
|
|
104
|
-
}
|
|
105
|
-
async function readActions(flags) {
|
|
106
|
-
const hasInlineActions = (flags.action?.length ?? 0) > 0;
|
|
107
|
-
const hasFile = typeof flags.file === 'string';
|
|
108
|
-
if (!hasInlineActions && !hasFile) {
|
|
109
|
-
throw new Error('Provide either at least one --action flag or --file');
|
|
110
|
-
}
|
|
111
|
-
if (hasInlineActions && hasFile) {
|
|
112
|
-
throw new Error('Use either --action or --file, not both');
|
|
113
|
-
}
|
|
114
|
-
if (hasInlineActions) {
|
|
115
|
-
return parseActions(flags.action);
|
|
116
|
-
}
|
|
117
|
-
const raw = await fs_1.default.promises.readFile(flags.file, 'utf-8');
|
|
118
|
-
return parseActionsDocument(raw, flags.file);
|
|
119
|
-
}
|
|
120
|
-
function estimateTimeoutMs(actions, overrideTimeoutMs) {
|
|
121
|
-
if (overrideTimeoutMs !== undefined) {
|
|
122
|
-
return overrideTimeoutMs;
|
|
123
|
-
}
|
|
124
|
-
const waitMs = actions.reduce((total, action) => {
|
|
125
|
-
if (action.type !== 'wait' || typeof action.durationMs !== 'number') {
|
|
126
|
-
return total;
|
|
127
|
-
}
|
|
128
|
-
return total + Math.max(0, action.durationMs);
|
|
129
|
-
}, 0);
|
|
130
|
-
return 30000 + waitMs + actions.length * 2000;
|
|
131
|
-
}
|
|
132
|
-
class ExecPerform extends base_command_1.BaseCommand {
|
|
133
|
-
async run() {
|
|
134
|
-
const { flags } = await this.parse(ExecPerform);
|
|
135
|
-
this.setParsedFlags(flags);
|
|
136
|
-
await this.withAuth(async () => {
|
|
137
|
-
const id = this.resolveId(flags.id);
|
|
138
|
-
if ((0, instance_client_factory_1.detectInstanceType)(id) !== 'ios') {
|
|
139
|
-
this.error('perform is only supported on iOS instances');
|
|
140
|
-
}
|
|
141
|
-
const actions = await readActions(flags);
|
|
142
|
-
const timeoutMs = estimateTimeoutMs(actions, flags.timeout);
|
|
143
|
-
const ipcTimeoutMs = timeoutMs + IPC_TIMEOUT_BUFFER_MS;
|
|
144
|
-
let result;
|
|
145
|
-
if ((0, instance_client_factory_1.hasActiveSession)(id)) {
|
|
146
|
-
// Keep the local socket alive slightly longer than the server-side
|
|
147
|
-
// request timeout so the daemon can return the real API outcome.
|
|
148
|
-
result = (await (0, instance_client_factory_1.sendSessionCommand)(id, 'perform-actions', [actions, flags.timeout], ipcTimeoutMs));
|
|
149
|
-
}
|
|
150
|
-
else {
|
|
151
|
-
const { type, client, disconnect } = await (0, instance_client_factory_1.getInstanceClient)(this.client, id);
|
|
152
|
-
try {
|
|
153
|
-
if (type !== 'ios') {
|
|
154
|
-
this.error('perform is only supported on iOS instances');
|
|
155
|
-
}
|
|
156
|
-
result = (await client.performActions(actions, flags.timeout !== undefined ? { timeoutMs: flags.timeout } : undefined));
|
|
157
|
-
}
|
|
158
|
-
finally {
|
|
159
|
-
disconnect();
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
if (flags.json) {
|
|
163
|
-
this.outputJson(result);
|
|
164
|
-
}
|
|
165
|
-
else {
|
|
166
|
-
this.log(`Performed ${result.results.length} action${result.results.length === 1 ? '' : 's'}`);
|
|
167
|
-
}
|
|
168
|
-
});
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
ExecPerform.summary = 'Perform multiple iOS actions in a single batch';
|
|
172
|
-
ExecPerform.description = 'Run a batch of iOS actions in a single CLI invocation using repeated `--action` flags or a JSON/YAML action file. This is the best choice for agent-driven multi-step interactions that should execute without reconnecting between steps.';
|
|
173
|
-
ExecPerform.examples = [
|
|
174
|
-
'<%= config.bin %> ios perform --action type=tap,x=100,y=200 --action "type=typeText,text=Hello World"',
|
|
175
|
-
'<%= config.bin %> ios perform --action type=wait,durationMs=1000 --action type=pressKey,key=enter',
|
|
176
|
-
'<%= config.bin %> ios perform --file ./actions.yaml',
|
|
177
|
-
];
|
|
178
|
-
ExecPerform.flags = {
|
|
179
|
-
...base_command_1.BaseCommand.baseFlags,
|
|
180
|
-
id: core_1.Flags.string({
|
|
181
|
-
description: 'iOS instance ID to target. Defaults to the last created iOS instance.',
|
|
182
|
-
}),
|
|
183
|
-
action: core_1.Flags.string({
|
|
184
|
-
description: `Action definition as comma-separated key=value pairs; repeat for multiple actions.
|
|
185
|
-
|
|
186
|
-
Available action types:
|
|
187
|
-
- Tap on coordinate: type=tap,x=100,y=200
|
|
188
|
-
- Tap on element by using a selector: type=tapElement,selector={"AXLabel":"Submit"}
|
|
189
|
-
- Increment an element by using a selector: type=incrementElement,selector={"AXLabel":"Volume"}
|
|
190
|
-
- Decrement an element by using a selector: type=decrementElement,selector={"AXLabel":"Volume"}
|
|
191
|
-
- Set an element value by using a selector: type=setElementValue,text=42,selector={"AXLabel":"Counter"}
|
|
192
|
-
- Type text into the focused field: type=typeText,text=Hello World,pressEnter=true
|
|
193
|
-
- Press a key with optional modifiers: type=pressKey,key=a,modifiers=["shift"]
|
|
194
|
-
- Scroll the screen: type=scroll,direction=down,pixels=300,coordinate=[200,400],momentum=0.2
|
|
195
|
-
- Toggle the software keyboard: type=toggleKeyboard
|
|
196
|
-
- Open a URL or deep link: type=openUrl,url=https://example.com
|
|
197
|
-
- Set device orientation: type=setOrientation,orientation=Landscape
|
|
198
|
-
- Wait before the next action: type=wait,durationMs=1000
|
|
199
|
-
- Start a touch gesture: type=touchDown,x=100,y=200
|
|
200
|
-
- Move a touch gesture: type=touchMove,x=120,y=220
|
|
201
|
-
- End a touch gesture: type=touchUp,x=120,y=220
|
|
202
|
-
- Press a raw key code down: type=keyDown,keyCode=4
|
|
203
|
-
- Release a raw key code: type=keyUp,keyCode=4
|
|
204
|
-
- Press a hardware button down: type=buttonDown,button=home
|
|
205
|
-
- Release a hardware button: type=buttonUp,button=home
|
|
206
|
-
|
|
207
|
-
Use JSON values for complex fields like selector, modifiers, and coordinate.`,
|
|
208
|
-
multiple: true,
|
|
209
|
-
}),
|
|
210
|
-
file: core_1.Flags.string({
|
|
211
|
-
char: 'f',
|
|
212
|
-
description: `Path to a YAML or JSON file containing an array of action objects.
|
|
213
|
-
|
|
214
|
-
JSON example:
|
|
215
|
-
[
|
|
216
|
-
{ "type": "tap", "x": 100, "y": 200 },
|
|
217
|
-
{ "type": "typeText", "text": "Hello World" }
|
|
218
|
-
]
|
|
219
|
-
|
|
220
|
-
YAML example:
|
|
221
|
-
- type: tap
|
|
222
|
-
x: 100
|
|
223
|
-
y: 200
|
|
224
|
-
- type: typeText
|
|
225
|
-
text: "Hello World"`,
|
|
226
|
-
}),
|
|
227
|
-
timeout: core_1.Flags.integer({
|
|
228
|
-
description: 'Override the total batch timeout in milliseconds. By default the CLI grows the timeout based on waits and action count.',
|
|
229
|
-
}),
|
|
230
|
-
};
|
|
231
|
-
exports.default = ExecPerform;
|
|
232
|
-
//# sourceMappingURL=perform.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"perform.js","sourceRoot":"","sources":["../../../src/commands/exec/perform.ts"],"names":[],"mappings":"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"}
|