@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.
Files changed (53) hide show
  1. package/dist/commands/xcode/build.js +4 -4
  2. package/dist/commands/xcode/build.js.map +1 -1
  3. package/dist/lib/config.js +1 -1
  4. package/dist/lib/config.js.map +1 -1
  5. package/package.json +1 -1
  6. package/dist/commands/exec/element-tree.d.ts +0 -15
  7. package/dist/commands/exec/element-tree.d.ts.map +0 -1
  8. package/dist/commands/exec/element-tree.js +0 -61
  9. package/dist/commands/exec/element-tree.js.map +0 -1
  10. package/dist/commands/exec/install-app.d.ts +0 -17
  11. package/dist/commands/exec/install-app.d.ts.map +0 -1
  12. package/dist/commands/exec/install-app.js +0 -84
  13. package/dist/commands/exec/install-app.js.map +0 -1
  14. package/dist/commands/exec/open-url.d.ts +0 -17
  15. package/dist/commands/exec/open-url.d.ts.map +0 -1
  16. package/dist/commands/exec/open-url.js +0 -48
  17. package/dist/commands/exec/open-url.js.map +0 -1
  18. package/dist/commands/exec/perform.d.ts +0 -17
  19. package/dist/commands/exec/perform.d.ts.map +0 -1
  20. package/dist/commands/exec/perform.js +0 -232
  21. package/dist/commands/exec/perform.js.map +0 -1
  22. package/dist/commands/exec/press-key.d.ts +0 -18
  23. package/dist/commands/exec/press-key.d.ts.map +0 -1
  24. package/dist/commands/exec/press-key.js +0 -49
  25. package/dist/commands/exec/press-key.js.map +0 -1
  26. package/dist/commands/exec/record.d.ts +0 -21
  27. package/dist/commands/exec/record.d.ts.map +0 -1
  28. package/dist/commands/exec/record.js +0 -101
  29. package/dist/commands/exec/record.js.map +0 -1
  30. package/dist/commands/exec/screenshot.d.ts +0 -16
  31. package/dist/commands/exec/screenshot.d.ts.map +0 -1
  32. package/dist/commands/exec/screenshot.js +0 -72
  33. package/dist/commands/exec/screenshot.js.map +0 -1
  34. package/dist/commands/exec/scroll.d.ts +0 -18
  35. package/dist/commands/exec/scroll.d.ts.map +0 -1
  36. package/dist/commands/exec/scroll.js +0 -58
  37. package/dist/commands/exec/scroll.js.map +0 -1
  38. package/dist/commands/exec/tap-element.d.ts +0 -19
  39. package/dist/commands/exec/tap-element.d.ts.map +0 -1
  40. package/dist/commands/exec/tap-element.js +0 -102
  41. package/dist/commands/exec/tap-element.js.map +0 -1
  42. package/dist/commands/exec/tap.d.ts +0 -24
  43. package/dist/commands/exec/tap.d.ts.map +0 -1
  44. package/dist/commands/exec/tap.js +0 -57
  45. package/dist/commands/exec/tap.js.map +0 -1
  46. package/dist/commands/exec/type.d.ts +0 -18
  47. package/dist/commands/exec/type.d.ts.map +0 -1
  48. package/dist/commands/exec/type.js +0 -54
  49. package/dist/commands/exec/type.js.map +0 -1
  50. package/dist/commands/ios/log.d.ts +0 -20
  51. package/dist/commands/ios/log.d.ts.map +0 -1
  52. package/dist/commands/ios/log.js +0 -105
  53. package/dist/commands/ios/log.js.map +0 -1
@@ -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"}
@@ -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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"}