@limrun/cli 0.4.0 → 0.4.3
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 +1 -0
- package/dist/base-command.d.ts +2 -0
- package/dist/base-command.d.ts.map +1 -1
- package/dist/base-command.js +22 -2
- package/dist/base-command.js.map +1 -1
- package/dist/commands/android/delete.d.ts.map +1 -1
- package/dist/commands/android/delete.js +13 -1
- package/dist/commands/android/delete.js.map +1 -1
- package/dist/commands/ios/delete.d.ts.map +1 -1
- package/dist/commands/ios/delete.js +12 -1
- package/dist/commands/ios/delete.js.map +1 -1
- package/dist/commands/session/stop.d.ts.map +1 -1
- package/dist/commands/session/stop.js +4 -5
- package/dist/commands/session/stop.js.map +1 -1
- package/dist/commands/xcode/build.d.ts.map +1 -1
- package/dist/commands/xcode/build.js +10 -7
- 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 +85 -2
- package/dist/commands/xcode/create.js.map +1 -1
- package/dist/commands/xcode/delete.d.ts.map +1 -1
- package/dist/commands/xcode/delete.js +14 -1
- package/dist/commands/xcode/delete.js.map +1 -1
- package/dist/commands/xcode/sync.d.ts.map +1 -1
- package/dist/commands/xcode/sync.js +6 -3
- package/dist/commands/xcode/sync.js.map +1 -1
- package/dist/lib/config.d.ts +9 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +19 -3
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/daemon.d.ts +1 -0
- package/dist/lib/daemon.d.ts.map +1 -1
- package/dist/lib/daemon.js +11 -0
- package/dist/lib/daemon.js.map +1 -1
- package/dist/lib/duration.d.ts +2 -0
- package/dist/lib/duration.d.ts.map +1 -0
- package/dist/lib/duration.js +37 -0
- package/dist/lib/duration.js.map +1 -0
- 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
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { BaseCommand } from '../../base-command';
|
|
2
|
-
export default class ExecTapElement 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
|
-
label: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
10
|
-
'accessibility-id': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
11
|
-
'resource-id': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
12
|
-
text: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
13
|
-
'api-key': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
14
|
-
json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
15
|
-
quiet: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
16
|
-
};
|
|
17
|
-
run(): Promise<void>;
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=tap-element.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tap-element.d.ts","sourceRoot":"","sources":["../../../src/commands/exec/tap-element.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,WAAW;IACrD,MAAM,CAAC,OAAO,SAA8C;IAC5D,MAAM,CAAC,WAAW,SAC2K;IAC7L,MAAM,CAAC,QAAQ,WAKb;IAEF,MAAM,CAAC,IAAI,KAAM;IAEjB,MAAM,CAAC,KAAK;;;;;;;;;MAiBV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAgD3B"}
|
|
@@ -1,102 +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 ExecTapElement extends base_command_1.BaseCommand {
|
|
7
|
-
async run() {
|
|
8
|
-
const { flags } = await this.parse(ExecTapElement);
|
|
9
|
-
this.setParsedFlags(flags);
|
|
10
|
-
await this.withAuth(async () => {
|
|
11
|
-
const id = this.resolveId(flags.id);
|
|
12
|
-
const type = id.split('_')[0];
|
|
13
|
-
if ((0, instance_client_factory_1.hasActiveSession)(id)) {
|
|
14
|
-
const selector = {};
|
|
15
|
-
if (type === 'ios') {
|
|
16
|
-
if (flags.label)
|
|
17
|
-
selector.label = flags.label;
|
|
18
|
-
if (flags['accessibility-id'])
|
|
19
|
-
selector.accessibilityId = flags['accessibility-id'];
|
|
20
|
-
}
|
|
21
|
-
else {
|
|
22
|
-
if (flags.label)
|
|
23
|
-
selector.contentDesc = flags.label;
|
|
24
|
-
if (flags['resource-id'])
|
|
25
|
-
selector.resourceId = flags['resource-id'];
|
|
26
|
-
if (flags.text)
|
|
27
|
-
selector.text = flags.text;
|
|
28
|
-
if (flags['accessibility-id'])
|
|
29
|
-
selector.resourceId = flags['accessibility-id'];
|
|
30
|
-
}
|
|
31
|
-
const result = await (0, instance_client_factory_1.sendSessionCommand)(id, 'tap-element', [selector]);
|
|
32
|
-
if (flags.json)
|
|
33
|
-
this.outputJson(result);
|
|
34
|
-
else
|
|
35
|
-
this.log('Element tapped');
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
38
|
-
const { type, client, disconnect } = await (0, instance_client_factory_1.getInstanceClient)(this.client, id);
|
|
39
|
-
try {
|
|
40
|
-
if (type === 'ios') {
|
|
41
|
-
const selector = {};
|
|
42
|
-
if (flags.label)
|
|
43
|
-
selector.label = flags.label;
|
|
44
|
-
if (flags['accessibility-id'])
|
|
45
|
-
selector.accessibilityId = flags['accessibility-id'];
|
|
46
|
-
const result = await client.tapElement(selector);
|
|
47
|
-
if (flags.json)
|
|
48
|
-
this.outputJson(result);
|
|
49
|
-
else
|
|
50
|
-
this.log('Element tapped');
|
|
51
|
-
}
|
|
52
|
-
else {
|
|
53
|
-
const selector = {};
|
|
54
|
-
if (flags.label)
|
|
55
|
-
selector.contentDesc = flags.label;
|
|
56
|
-
if (flags['resource-id'])
|
|
57
|
-
selector.resourceId = flags['resource-id'];
|
|
58
|
-
if (flags.text)
|
|
59
|
-
selector.text = flags.text;
|
|
60
|
-
if (flags['accessibility-id'])
|
|
61
|
-
selector.resourceId = flags['accessibility-id'];
|
|
62
|
-
const result = await client.tap({ selector });
|
|
63
|
-
if (flags.json)
|
|
64
|
-
this.outputJson(result);
|
|
65
|
-
else
|
|
66
|
-
this.log('Element tapped');
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
finally {
|
|
70
|
-
disconnect();
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
ExecTapElement.summary = 'Tap an element by accessibility selector';
|
|
77
|
-
ExecTapElement.description = 'Find an element on the current screen and tap it using accessibility metadata. The selector fields differ slightly by platform, so choose the flags that match the target instance type.';
|
|
78
|
-
ExecTapElement.examples = [
|
|
79
|
-
'<%= config.bin %> ios tap-element --label "Submit"',
|
|
80
|
-
'<%= config.bin %> ios tap-element --accessibility-id login_button --id <instance-ID>',
|
|
81
|
-
'<%= config.bin %> android tap-element --accessibility-id btn_ok --id <instance-ID>',
|
|
82
|
-
'<%= config.bin %> android tap-element --resource-id com.example:id/submit',
|
|
83
|
-
];
|
|
84
|
-
ExecTapElement.args = {};
|
|
85
|
-
ExecTapElement.flags = {
|
|
86
|
-
...base_command_1.BaseCommand.baseFlags,
|
|
87
|
-
id: core_1.Flags.string({
|
|
88
|
-
description: 'Instance ID to target. Defaults to the last created instance of the command alias type.',
|
|
89
|
-
}),
|
|
90
|
-
label: core_1.Flags.string({
|
|
91
|
-
description: 'Visible accessibility label to match. Works as AXLabel on iOS and content description on Android.',
|
|
92
|
-
}),
|
|
93
|
-
'accessibility-id': core_1.Flags.string({
|
|
94
|
-
description: 'Accessibility identifier to match. Maps to accessibilityId on iOS and resource ID matching on Android.',
|
|
95
|
-
}),
|
|
96
|
-
'resource-id': core_1.Flags.string({
|
|
97
|
-
description: 'Android resource ID to match, such as com.example:id/submit',
|
|
98
|
-
}),
|
|
99
|
-
text: core_1.Flags.string({ description: 'Android visible text to match exactly' }),
|
|
100
|
-
};
|
|
101
|
-
exports.default = ExecTapElement;
|
|
102
|
-
//# sourceMappingURL=tap-element.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tap-element.js","sourceRoot":"","sources":["../../../src/commands/exec/tap-element.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { BaseCommand } from '../../base-command';
|
|
2
|
-
export default class ExecTap extends BaseCommand {
|
|
3
|
-
static summary: string;
|
|
4
|
-
static description: string;
|
|
5
|
-
static examples: string[];
|
|
6
|
-
static args: {
|
|
7
|
-
x: import("@oclif/core/lib/interfaces").Arg<number, {
|
|
8
|
-
max?: number;
|
|
9
|
-
min?: number;
|
|
10
|
-
}>;
|
|
11
|
-
y: import("@oclif/core/lib/interfaces").Arg<number, {
|
|
12
|
-
max?: number;
|
|
13
|
-
min?: number;
|
|
14
|
-
}>;
|
|
15
|
-
};
|
|
16
|
-
static flags: {
|
|
17
|
-
id: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
18
|
-
'api-key': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
19
|
-
json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
20
|
-
quiet: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
21
|
-
};
|
|
22
|
-
run(): Promise<void>;
|
|
23
|
-
}
|
|
24
|
-
//# sourceMappingURL=tap.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tap.d.ts","sourceRoot":"","sources":["../../../src/commands/exec/tap.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,WAAW;IAC9C,MAAM,CAAC,OAAO,SAA8C;IAC5D,MAAM,CAAC,WAAW,SAC6J;IAC/K,MAAM,CAAC,QAAQ,WAIb;IAEF,MAAM,CAAC,IAAI;;;;;;;;;MAST;IAEF,MAAM,CAAC,KAAK;;;;;MAKV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAuB3B"}
|
|
@@ -1,57 +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 ExecTap extends base_command_1.BaseCommand {
|
|
7
|
-
async run() {
|
|
8
|
-
const { args, flags } = await this.parse(ExecTap);
|
|
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, 'tap', [args.x, args.y]);
|
|
14
|
-
}
|
|
15
|
-
else {
|
|
16
|
-
const { type, client, disconnect } = await (0, instance_client_factory_1.getInstanceClient)(this.client, id);
|
|
17
|
-
try {
|
|
18
|
-
if (type === 'ios') {
|
|
19
|
-
await client.tap(args.x, args.y);
|
|
20
|
-
}
|
|
21
|
-
else {
|
|
22
|
-
await client.tap({ x: args.x, y: args.y });
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
finally {
|
|
26
|
-
disconnect();
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
this.log(`Tapped at (${args.x}, ${args.y})`);
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
ExecTap.summary = 'Tap at coordinates on a running instance';
|
|
34
|
-
ExecTap.description = 'Tap a specific coordinate on the current screen of a running iOS or Android instance. Use this when element selectors are unavailable or when automating canvas-style UIs.';
|
|
35
|
-
ExecTap.examples = [
|
|
36
|
-
'<%= config.bin %> ios tap 100 200',
|
|
37
|
-
'<%= config.bin %> ios tap 100 200 --id <instance-ID>',
|
|
38
|
-
'<%= config.bin %> android tap 540 1200',
|
|
39
|
-
];
|
|
40
|
-
ExecTap.args = {
|
|
41
|
-
x: core_1.Args.integer({
|
|
42
|
-
description: 'X coordinate in screen points or pixels for the current device view',
|
|
43
|
-
required: true,
|
|
44
|
-
}),
|
|
45
|
-
y: core_1.Args.integer({
|
|
46
|
-
description: 'Y coordinate in screen points or pixels for the current device view',
|
|
47
|
-
required: true,
|
|
48
|
-
}),
|
|
49
|
-
};
|
|
50
|
-
ExecTap.flags = {
|
|
51
|
-
...base_command_1.BaseCommand.baseFlags,
|
|
52
|
-
id: core_1.Flags.string({
|
|
53
|
-
description: 'Instance ID to target. Defaults to the last created instance of the command alias type.',
|
|
54
|
-
}),
|
|
55
|
-
};
|
|
56
|
-
exports.default = ExecTap;
|
|
57
|
-
//# sourceMappingURL=tap.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tap.js","sourceRoot":"","sources":["../../../src/commands/exec/tap.ts"],"names":[],"mappings":";;AAAA,sCAA0C;AAC1C,qDAAiD;AACjD,+EAA4G;AAE5G,MAAqB,OAAQ,SAAQ,0BAAW;IA4B9C,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAClD,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,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACxD,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,MAAO,MAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;oBAC5C,CAAC;yBAAM,CAAC;wBACN,MAAO,MAAc,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBACtD,CAAC;gBACH,CAAC;wBAAS,CAAC;oBACT,UAAU,EAAE,CAAC;gBACf,CAAC;YACH,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC;;AAjDM,eAAO,GAAG,0CAA0C,CAAC;AACrD,mBAAW,GAChB,4KAA4K,CAAC;AACxK,gBAAQ,GAAG;IAChB,mCAAmC;IACnC,sDAAsD;IACtD,wCAAwC;CACzC,CAAC;AAEK,YAAI,GAAG;IACZ,CAAC,EAAE,WAAI,CAAC,OAAO,CAAC;QACd,WAAW,EAAE,qEAAqE;QAClF,QAAQ,EAAE,IAAI;KACf,CAAC;IACF,CAAC,EAAE,WAAI,CAAC,OAAO,CAAC;QACd,WAAW,EAAE,qEAAqE;QAClF,QAAQ,EAAE,IAAI;KACf,CAAC;CACH,CAAC;AAEK,aAAK,GAAG;IACb,GAAG,0BAAW,CAAC,SAAS;IACxB,EAAE,EAAE,YAAK,CAAC,MAAM,CAAC;QACf,WAAW,EAAE,yFAAyF;KACvG,CAAC;CACH,CAAC;kBA1BiB,OAAO"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { BaseCommand } from '../../base-command';
|
|
2
|
-
export default class ExecType extends BaseCommand {
|
|
3
|
-
static summary: string;
|
|
4
|
-
static description: string;
|
|
5
|
-
static examples: string[];
|
|
6
|
-
static args: {
|
|
7
|
-
text: 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
|
-
enter: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
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=type.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../../src/commands/exec/type.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,WAAW;IAC/C,MAAM,CAAC,OAAO,SAA4C;IAC1D,MAAM,CAAC,WAAW,SAC8H;IAChJ,MAAM,CAAC,QAAQ,WAIb;IAEF,MAAM,CAAC,IAAI;;MAET;IAEF,MAAM,CAAC,KAAK;;;;;;MASV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAuB3B"}
|
|
@@ -1,54 +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 ExecType extends base_command_1.BaseCommand {
|
|
7
|
-
async run() {
|
|
8
|
-
const { args, flags } = await this.parse(ExecType);
|
|
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, 'type', [args.text, flags.enter]);
|
|
14
|
-
}
|
|
15
|
-
else {
|
|
16
|
-
const { type, client, disconnect } = await (0, instance_client_factory_1.getInstanceClient)(this.client, id);
|
|
17
|
-
try {
|
|
18
|
-
if (type === 'ios') {
|
|
19
|
-
await client.typeText(args.text, flags.enter);
|
|
20
|
-
}
|
|
21
|
-
else {
|
|
22
|
-
await client.setText(undefined, args.text);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
finally {
|
|
26
|
-
disconnect();
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
this.log('Text typed');
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
ExecType.summary = 'Type text into the focused input field';
|
|
34
|
-
ExecType.description = 'Type text into the currently focused input field on a running iOS or Android instance. On iOS, `--enter` can submit the field after typing.';
|
|
35
|
-
ExecType.examples = [
|
|
36
|
-
'<%= config.bin %> ios type "Hello World"',
|
|
37
|
-
'<%= config.bin %> ios type "Hello World" --id <instance-ID>',
|
|
38
|
-
'<%= config.bin %> ios type "search query" --enter',
|
|
39
|
-
];
|
|
40
|
-
ExecType.args = {
|
|
41
|
-
text: core_1.Args.string({ description: 'Text to type into the focused field', required: true }),
|
|
42
|
-
};
|
|
43
|
-
ExecType.flags = {
|
|
44
|
-
...base_command_1.BaseCommand.baseFlags,
|
|
45
|
-
id: core_1.Flags.string({
|
|
46
|
-
description: 'Instance ID to target. Defaults to the last created instance of the command alias type.',
|
|
47
|
-
}),
|
|
48
|
-
enter: core_1.Flags.boolean({
|
|
49
|
-
description: 'Press Enter after typing on iOS. Ignored on Android.',
|
|
50
|
-
default: false,
|
|
51
|
-
}),
|
|
52
|
-
};
|
|
53
|
-
exports.default = ExecType;
|
|
54
|
-
//# sourceMappingURL=type.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"type.js","sourceRoot":"","sources":["../../../src/commands/exec/type.ts"],"names":[],"mappings":";;AAAA,sCAA0C;AAC1C,qDAAiD;AACjD,+EAA4G;AAE5G,MAAqB,QAAS,SAAQ,0BAAW;IAyB/C,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACnD,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,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;YACjE,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,MAAO,MAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;oBACzD,CAAC;yBAAM,CAAC;wBACN,MAAO,MAAc,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;oBACtD,CAAC;gBACH,CAAC;wBAAS,CAAC;oBACT,UAAU,EAAE,CAAC;gBACf,CAAC;YACH,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC;;AA9CM,gBAAO,GAAG,wCAAwC,CAAC;AACnD,oBAAW,GAChB,6IAA6I,CAAC;AACzI,iBAAQ,GAAG;IAChB,0CAA0C;IAC1C,6DAA6D;IAC7D,mDAAmD;CACpD,CAAC;AAEK,aAAI,GAAG;IACZ,IAAI,EAAE,WAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,qCAAqC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;CAC1F,CAAC;AAEK,cAAK,GAAG;IACb,GAAG,0BAAW,CAAC,SAAS;IACxB,EAAE,EAAE,YAAK,CAAC,MAAM,CAAC;QACf,WAAW,EAAE,yFAAyF;KACvG,CAAC;IACF,KAAK,EAAE,YAAK,CAAC,OAAO,CAAC;QACnB,WAAW,EAAE,sDAAsD;QACnE,OAAO,EAAE,KAAK;KACf,CAAC;CACH,CAAC;kBAvBiB,QAAQ"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { BaseCommand } from '../../base-command';
|
|
2
|
-
export default class IosLog extends BaseCommand {
|
|
3
|
-
static summary: string;
|
|
4
|
-
static description: string;
|
|
5
|
-
static examples: string[];
|
|
6
|
-
static args: {
|
|
7
|
-
bundleId: 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
|
-
follow: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
12
|
-
tail: import("@oclif/core/lib/interfaces").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
13
|
-
lines: import("@oclif/core/lib/interfaces").OptionFlag<number, 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
|
-
}
|
|
20
|
-
//# sourceMappingURL=log.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../../src/commands/ios/log.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAUjD,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,WAAW;IAC7C,MAAM,CAAC,OAAO,SAAyD;IACvE,MAAM,CAAC,WAAW,SAC2J;IAC7K,MAAM,CAAC,QAAQ,WAIb;IAEF,MAAM,CAAC,IAAI;;MAKT;IAEF,MAAM,CAAC,KAAK;;;;;;;;MAkBV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA2D3B"}
|
package/dist/commands/ios/log.js
DELETED
|
@@ -1,105 +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
|
-
function resolveTailCount(flags) {
|
|
7
|
-
if (flags.tail !== undefined) {
|
|
8
|
-
return flags.tail;
|
|
9
|
-
}
|
|
10
|
-
return flags.lines ?? 100;
|
|
11
|
-
}
|
|
12
|
-
class IosLog extends base_command_1.BaseCommand {
|
|
13
|
-
async run() {
|
|
14
|
-
const { args, flags } = await this.parse(IosLog);
|
|
15
|
-
this.setParsedFlags(flags);
|
|
16
|
-
await this.withAuth(async () => {
|
|
17
|
-
const id = this.resolveId(flags.id);
|
|
18
|
-
const tailCount = resolveTailCount(flags);
|
|
19
|
-
// Log tail (non-streaming) can use session
|
|
20
|
-
if (!flags.follow) {
|
|
21
|
-
if ((0, instance_client_factory_1.hasActiveSession)(id)) {
|
|
22
|
-
const output = await (0, instance_client_factory_1.sendSessionCommand)(id, 'app-log-tail', [args.bundleId, tailCount]);
|
|
23
|
-
this.log(String(output));
|
|
24
|
-
}
|
|
25
|
-
else {
|
|
26
|
-
const { type, client, disconnect } = await (0, instance_client_factory_1.getInstanceClient)(this.client, id);
|
|
27
|
-
if (type !== 'ios') {
|
|
28
|
-
disconnect();
|
|
29
|
-
this.error('log command is only supported on iOS instances');
|
|
30
|
-
}
|
|
31
|
-
try {
|
|
32
|
-
const output = await client.appLogTail(args.bundleId, tailCount);
|
|
33
|
-
this.log(output);
|
|
34
|
-
}
|
|
35
|
-
finally {
|
|
36
|
-
disconnect();
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
// Streaming requires direct connection (long-lived)
|
|
42
|
-
const { type, client, disconnect } = await (0, instance_client_factory_1.getInstanceClient)(this.client, id);
|
|
43
|
-
if (type !== 'ios') {
|
|
44
|
-
disconnect();
|
|
45
|
-
this.error('log command is only supported on iOS instances');
|
|
46
|
-
}
|
|
47
|
-
try {
|
|
48
|
-
const logStream = client.streamAppLog(args.bundleId);
|
|
49
|
-
logStream.on('line', (line) => {
|
|
50
|
-
process.stdout.write(line + '\n');
|
|
51
|
-
});
|
|
52
|
-
logStream.on('error', (err) => {
|
|
53
|
-
this.warn(`Log stream error: ${err.message}`);
|
|
54
|
-
});
|
|
55
|
-
await new Promise((resolve) => {
|
|
56
|
-
const keepAlive = setInterval(() => { }, 1 << 30);
|
|
57
|
-
const shutdown = () => {
|
|
58
|
-
clearInterval(keepAlive);
|
|
59
|
-
logStream.stop();
|
|
60
|
-
resolve();
|
|
61
|
-
};
|
|
62
|
-
process.on('SIGINT', shutdown);
|
|
63
|
-
process.on('SIGTERM', shutdown);
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
finally {
|
|
67
|
-
disconnect();
|
|
68
|
-
}
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
IosLog.summary = 'Stream or tail app logs from a running iOS instance';
|
|
73
|
-
IosLog.description = 'Read logs from an installed app on a running iOS instance. Use `--tail` for a snapshot of recent lines, or `--follow` to keep streaming logs until you stop the command.';
|
|
74
|
-
IosLog.examples = [
|
|
75
|
-
'<%= config.bin %> ios log com.example.app',
|
|
76
|
-
'<%= config.bin %> ios log com.example.app --id <instance-ID> --tail 50',
|
|
77
|
-
'<%= config.bin %> ios log com.example.app --id <instance-ID> -f',
|
|
78
|
-
];
|
|
79
|
-
IosLog.args = {
|
|
80
|
-
bundleId: core_1.Args.string({
|
|
81
|
-
description: 'Bundle identifier of the installed app whose logs should be read',
|
|
82
|
-
required: true,
|
|
83
|
-
}),
|
|
84
|
-
};
|
|
85
|
-
IosLog.flags = {
|
|
86
|
-
...base_command_1.BaseCommand.baseFlags,
|
|
87
|
-
id: core_1.Flags.string({
|
|
88
|
-
description: 'iOS instance ID to target. Defaults to the last created iOS instance.',
|
|
89
|
-
}),
|
|
90
|
-
follow: core_1.Flags.boolean({
|
|
91
|
-
char: 'f',
|
|
92
|
-
description: 'Keep streaming log lines until interrupted',
|
|
93
|
-
default: false,
|
|
94
|
-
}),
|
|
95
|
-
tail: core_1.Flags.integer({
|
|
96
|
-
char: 'n',
|
|
97
|
-
description: 'Number of recent lines to fetch when not using `--follow`.',
|
|
98
|
-
}),
|
|
99
|
-
lines: core_1.Flags.integer({
|
|
100
|
-
description: 'Deprecated alias for `--tail`.',
|
|
101
|
-
default: 100,
|
|
102
|
-
}),
|
|
103
|
-
};
|
|
104
|
-
exports.default = IosLog;
|
|
105
|
-
//# sourceMappingURL=log.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../../src/commands/ios/log.ts"],"names":[],"mappings":"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"}
|