lim 0.19.2 → 0.19.4

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 (68) hide show
  1. package/README.md +3 -1
  2. package/dist/base-command.d.ts +15 -9
  3. package/dist/base-command.d.ts.map +1 -1
  4. package/dist/base-command.js +137 -48
  5. package/dist/base-command.js.map +1 -1
  6. package/dist/commands/gradle/build.d.ts +28 -0
  7. package/dist/commands/gradle/build.d.ts.map +1 -0
  8. package/dist/commands/gradle/build.js +117 -0
  9. package/dist/commands/gradle/build.js.map +1 -0
  10. package/dist/commands/gradle/create.d.ts +21 -0
  11. package/dist/commands/gradle/create.d.ts.map +1 -0
  12. package/dist/commands/gradle/create.js +66 -0
  13. package/dist/commands/gradle/create.js.map +1 -0
  14. package/dist/commands/gradle/delete.d.ts +18 -0
  15. package/dist/commands/gradle/delete.d.ts.map +1 -0
  16. package/dist/commands/gradle/delete.js +41 -0
  17. package/dist/commands/gradle/delete.js.map +1 -0
  18. package/dist/commands/gradle/get.d.ts +18 -0
  19. package/dist/commands/gradle/get.d.ts.map +1 -0
  20. package/dist/commands/gradle/get.js +44 -0
  21. package/dist/commands/gradle/get.js.map +1 -0
  22. package/dist/commands/gradle/list.d.ts +19 -0
  23. package/dist/commands/gradle/list.d.ts.map +1 -0
  24. package/dist/commands/gradle/list.js +58 -0
  25. package/dist/commands/gradle/list.js.map +1 -0
  26. package/dist/commands/ios/{cp.d.ts → delete-file.d.ts} +4 -3
  27. package/dist/commands/ios/delete-file.d.ts.map +1 -0
  28. package/dist/commands/ios/delete-file.js +57 -0
  29. package/dist/commands/ios/delete-file.js.map +1 -0
  30. package/dist/commands/ios/info.d.ts +3 -1
  31. package/dist/commands/ios/info.d.ts.map +1 -1
  32. package/dist/commands/ios/info.js +9 -3
  33. package/dist/commands/ios/info.js.map +1 -1
  34. package/dist/commands/ios/install-app.d.ts.map +1 -1
  35. package/dist/commands/ios/install-app.js +28 -4
  36. package/dist/commands/ios/install-app.js.map +1 -1
  37. package/dist/commands/ios/pull-file.d.ts +22 -0
  38. package/dist/commands/ios/pull-file.d.ts.map +1 -0
  39. package/dist/commands/ios/pull-file.js +69 -0
  40. package/dist/commands/ios/pull-file.js.map +1 -0
  41. package/dist/commands/ios/push-file.d.ts +22 -0
  42. package/dist/commands/ios/push-file.d.ts.map +1 -0
  43. package/dist/commands/ios/push-file.js +71 -0
  44. package/dist/commands/ios/push-file.js.map +1 -0
  45. package/dist/commands/xcode/build.d.ts +1 -0
  46. package/dist/commands/xcode/build.d.ts.map +1 -1
  47. package/dist/commands/xcode/build.js +7 -0
  48. package/dist/commands/xcode/build.js.map +1 -1
  49. package/dist/lib/config.d.ts +16 -3
  50. package/dist/lib/config.d.ts.map +1 -1
  51. package/dist/lib/config.js +58 -3
  52. package/dist/lib/config.js.map +1 -1
  53. package/dist/lib/gradle-build-options.d.ts +25 -0
  54. package/dist/lib/gradle-build-options.d.ts.map +1 -0
  55. package/dist/lib/gradle-build-options.js +55 -0
  56. package/dist/lib/gradle-build-options.js.map +1 -0
  57. package/dist/lib/instance-cleanup.d.ts +7 -8
  58. package/dist/lib/instance-cleanup.d.ts.map +1 -1
  59. package/dist/lib/instance-cleanup.js +15 -16
  60. package/dist/lib/instance-cleanup.js.map +1 -1
  61. package/dist/lib/instance-client-factory.d.ts +1 -1
  62. package/dist/lib/instance-client-factory.d.ts.map +1 -1
  63. package/dist/lib/instance-client-factory.js +3 -1
  64. package/dist/lib/instance-client-factory.js.map +1 -1
  65. package/package.json +11 -8
  66. package/dist/commands/ios/cp.d.ts.map +0 -1
  67. package/dist/commands/ios/cp.js +0 -64
  68. package/dist/commands/ios/cp.js.map +0 -1
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.gradleAndroidABIs = void 0;
4
+ exports.gradleBuildOptionsFromFlags = gradleBuildOptionsFromFlags;
5
+ /**
6
+ * Single source for the --abi enum: `satisfies` pins every entry to the SDK
7
+ * union, so a server-side rename surfaces here at compile time instead of
8
+ * drifting silently behind an unchecked cast.
9
+ */
10
+ exports.gradleAndroidABIs = [
11
+ 'armeabi-v7a',
12
+ 'arm64-v8a',
13
+ 'x86',
14
+ 'x86_64',
15
+ 'all',
16
+ ];
17
+ /**
18
+ * Maps parsed `lim gradle build` flags to the exec options, throwing on
19
+ * contradictory combinations. Pure and oclif-free so it is unit-testable and
20
+ * so the command can validate BEFORE resolving (and possibly auto-creating)
21
+ * an instance: a doomed flag combination must not leave a billed instance
22
+ * behind. `reactNative` is set only when a flag asks for it; its absence is
23
+ * what lets the server auto-detect.
24
+ */
25
+ function gradleBuildOptionsFromFlags(flags) {
26
+ if (flags.upload && flags['signed-upload-url']) {
27
+ throw new Error('Use either --upload or --signed-upload-url, not both.');
28
+ }
29
+ const options = {};
30
+ if (flags.task?.length) {
31
+ options.tasks = flags.task;
32
+ }
33
+ if (flags['project-path']) {
34
+ options.projectPath = flags['project-path'];
35
+ }
36
+ const expoAppDir = flags['expo-app-dir'];
37
+ const abis = flags.abi?.length ? [...new Set(flags.abi)] : undefined;
38
+ if (abis?.includes('all') && abis.some((abi) => abi !== 'all')) {
39
+ throw new Error("--abi all keeps the project's own ABI configuration and cannot be combined with specific ABIs.");
40
+ }
41
+ if (expoAppDir || abis) {
42
+ options.reactNative = {
43
+ ...(expoAppDir && { expoAppDir }),
44
+ ...(abis && { architectures: abis }),
45
+ };
46
+ }
47
+ if (flags.upload) {
48
+ options.upload = { assetName: flags.upload };
49
+ }
50
+ else if (flags['signed-upload-url']) {
51
+ options.upload = { signedUploadUrl: flags['signed-upload-url'] };
52
+ }
53
+ return options;
54
+ }
55
+ //# sourceMappingURL=gradle-build-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gradle-build-options.js","sourceRoot":"","sources":["../../src/lib/gradle-build-options.ts"],"names":[],"mappings":";;;AAgCA,kEA8BC;AA5DD;;;;GAIG;AACU,QAAA,iBAAiB,GAAG;IAC/B,aAAa;IACb,WAAW;IACX,KAAK;IACL,QAAQ;IACR,KAAK;CACyC,CAAC;AAWjD;;;;;;;GAOG;AACH,SAAgB,2BAA2B,CAAC,KAA4B;IACtE,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;IACD,MAAM,OAAO,GAAuB,EAAE,CAAC;IACvC,IAAI,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;IAC7B,CAAC;IACD,IAAI,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,WAAW,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC;IAC9C,CAAC;IACD,MAAM,UAAU,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAE,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAwB,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7F,IAAI,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,KAAK,CAAC,EAAE,CAAC;QAC/D,MAAM,IAAI,KAAK,CACb,gGAAgG,CACjG,CAAC;IACJ,CAAC;IACD,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;QACvB,OAAO,CAAC,WAAW,GAAG;YACpB,GAAG,CAAC,UAAU,IAAI,EAAE,UAAU,EAAE,CAAC;YACjC,GAAG,CAAC,IAAI,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;SACrC,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,OAAO,CAAC,MAAM,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;IAC/C,CAAC;SAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACtC,OAAO,CAAC,MAAM,GAAG,EAAE,eAAe,EAAE,KAAK,CAAC,mBAAmB,CAAC,EAAE,CAAC;IACnE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -5,14 +5,13 @@
5
5
  * it created in a Set and delegates the "should I delete this, and do it safely"
6
6
  * decision here.
7
7
  */
8
- /** True for an Xcode instance id (xcode_ / sandbox_ prefix). */
9
- export declare function isXcodeInstanceId(id: string): boolean;
10
8
  /**
11
- * Best-effort delete of an Xcode instance THIS invocation created. Deletes only
12
- * when `id` is in `created` AND is an Xcode id, so a user `--id`, a pre-existing
13
- * cached instance, or a non-xcode id is never touched. Drops the id from the set
14
- * on success (idempotent) and never throws (a failed delete just returns false
15
- * and keeps the id). Returns whether it deleted.
9
+ * Best-effort delete of an instance THIS invocation created. Deletes only when
10
+ * `id` is in `created`, so a user `--id` or a pre-existing cached instance is
11
+ * never touched; the caller's `deleteInstance` dispatches on the id prefix to
12
+ * the right resource. Drops the id from the set on success (idempotent) and
13
+ * never throws (a failed delete just returns false and keeps the id). Returns
14
+ * whether it deleted.
16
15
  */
17
- export declare function deleteCreatedXcodeInstance(created: Set<string>, id: string | undefined, deleteXcodeInstance: (id: string) => Promise<void>): Promise<boolean>;
16
+ export declare function deleteCreatedInstance(created: Set<string>, id: string | undefined, deleteInstance: (id: string) => Promise<void>, onError?: (err: unknown) => void): Promise<boolean>;
18
17
  //# sourceMappingURL=instance-cleanup.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"instance-cleanup.d.ts","sourceRoot":"","sources":["../../src/lib/instance-cleanup.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,gEAAgE;AAChE,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAGrD;AAED;;;;;;GAMG;AACH,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,EACpB,EAAE,EAAE,MAAM,GAAG,SAAS,EACtB,mBAAmB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GACjD,OAAO,CAAC,OAAO,CAAC,CASlB"}
1
+ {"version":3,"file":"instance-cleanup.d.ts","sourceRoot":"","sources":["../../src/lib/instance-cleanup.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,EACpB,EAAE,EAAE,MAAM,GAAG,SAAS,EACtB,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,EAC7C,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,GAC/B,OAAO,CAAC,OAAO,CAAC,CAalB"}
@@ -7,29 +7,28 @@
7
7
  * decision here.
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.isXcodeInstanceId = isXcodeInstanceId;
11
- exports.deleteCreatedXcodeInstance = deleteCreatedXcodeInstance;
12
- /** True for an Xcode instance id (xcode_ / sandbox_ prefix). */
13
- function isXcodeInstanceId(id) {
14
- const prefix = id.split('_')[0];
15
- return prefix === 'xcode' || prefix === 'sandbox';
16
- }
10
+ exports.deleteCreatedInstance = deleteCreatedInstance;
17
11
  /**
18
- * Best-effort delete of an Xcode instance THIS invocation created. Deletes only
19
- * when `id` is in `created` AND is an Xcode id, so a user `--id`, a pre-existing
20
- * cached instance, or a non-xcode id is never touched. Drops the id from the set
21
- * on success (idempotent) and never throws (a failed delete just returns false
22
- * and keeps the id). Returns whether it deleted.
12
+ * Best-effort delete of an instance THIS invocation created. Deletes only when
13
+ * `id` is in `created`, so a user `--id` or a pre-existing cached instance is
14
+ * never touched; the caller's `deleteInstance` dispatches on the id prefix to
15
+ * the right resource. Drops the id from the set on success (idempotent) and
16
+ * never throws (a failed delete just returns false and keeps the id). Returns
17
+ * whether it deleted.
23
18
  */
24
- async function deleteCreatedXcodeInstance(created, id, deleteXcodeInstance) {
25
- if (!id || !created.has(id) || !isXcodeInstanceId(id))
19
+ async function deleteCreatedInstance(created, id, deleteInstance, onError) {
20
+ if (!id || !created.has(id))
26
21
  return false;
27
22
  try {
28
- await deleteXcodeInstance(id);
23
+ await deleteInstance(id);
29
24
  created.delete(id);
30
25
  return true;
31
26
  }
32
- catch {
27
+ catch (err) {
28
+ // Swallowing keeps cleanup best-effort, but a delete that always fails
29
+ // (say, an id prefix the dispatcher does not recognize) is a billing
30
+ // leak; give the caller a hook to at least surface it in debug output.
31
+ onError?.(err);
33
32
  return false;
34
33
  }
35
34
  }
@@ -1 +1 @@
1
- {"version":3,"file":"instance-cleanup.js","sourceRoot":"","sources":["../../src/lib/instance-cleanup.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAGH,8CAGC;AASD,gEAaC;AA1BD,gEAAgE;AAChE,SAAgB,iBAAiB,CAAC,EAAU;IAC1C,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,OAAO,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,SAAS,CAAC;AACpD,CAAC;AAED;;;;;;GAMG;AACI,KAAK,UAAU,0BAA0B,CAC9C,OAAoB,EACpB,EAAsB,EACtB,mBAAkD;IAElD,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAAE,OAAO,KAAK,CAAC;IACpE,IAAI,CAAC;QACH,MAAM,mBAAmB,CAAC,EAAE,CAAC,CAAC;QAC9B,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"instance-cleanup.js","sourceRoot":"","sources":["../../src/lib/instance-cleanup.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAUH,sDAkBC;AA1BD;;;;;;;GAOG;AACI,KAAK,UAAU,qBAAqB,CACzC,OAAoB,EACpB,EAAsB,EACtB,cAA6C,EAC7C,OAAgC;IAEhC,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,cAAc,CAAC,EAAE,CAAC,CAAC;QACzB,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,uEAAuE;QACvE,qEAAqE;QACrE,uEAAuE;QACvE,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;QACf,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import Limrun, { Ios, type InstanceClient } from '@limrun/api';
2
2
  import { type LastAndroidInstance, type LastIosInstance } from './config';
3
- export type InstanceType = 'android' | 'ios' | 'xcode';
3
+ export type InstanceType = 'android' | 'ios' | 'xcode' | 'gradle';
4
4
  export interface ResolvedAndroidInstanceClient {
5
5
  type: 'android';
6
6
  client: InstanceClient;
@@ -1 +1 @@
1
- {"version":3,"file":"instance-client-factory.d.ts","sourceRoot":"","sources":["../../src/lib/instance-client-factory.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,EAAE,EAAwB,GAAG,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAErF,OAAO,EAAqB,KAAK,mBAAmB,EAAE,KAAK,eAAe,EAAE,MAAM,UAAU,CAAC;AAE7F,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,KAAK,GAAG,OAAO,CAAC;AAEvD,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,cAAc,CAAC;IACvB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,2EAA2E;IAC3E,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,KAAK,CAAC;IACZ,MAAM,EAAE,GAAG,CAAC,cAAc,CAAC;IAC3B,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,2EAA2E;IAC3E,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,CAQ3D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,OAAO,EAAO,EACpB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,OAAO,CAAC,CAElB;AAED,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,mBAAmB,EAC3B,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GACjC,OAAO,CAAC,6BAA6B,CAAC,CAiCxC;AAED,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,yBAAyB,CAAC,CAuBpC"}
1
+ {"version":3,"file":"instance-client-factory.d.ts","sourceRoot":"","sources":["../../src/lib/instance-client-factory.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,EAAE,EAAwB,GAAG,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAErF,OAAO,EAAqB,KAAK,mBAAmB,EAAE,KAAK,eAAe,EAAE,MAAM,UAAU,CAAC;AAE7F,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;AAElE,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,cAAc,CAAC;IACvB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,2EAA2E;IAC3E,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,KAAK,CAAC;IACZ,MAAM,EAAE,GAAG,CAAC,cAAc,CAAC;IAC3B,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,2EAA2E;IAC3E,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,CAS3D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,OAAO,EAAO,EACpB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,OAAO,CAAC,CAElB;AAED,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,mBAAmB,EAC3B,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GACjC,OAAO,CAAC,6BAA6B,CAAC,CAiCxC;AAED,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,yBAAyB,CAAC,CAuBpC"}
@@ -16,7 +16,9 @@ function detectInstanceType(id) {
16
16
  return 'ios';
17
17
  if (prefix === 'xcode' || prefix === 'sandbox')
18
18
  return 'xcode';
19
- throw new Error(`Cannot detect instance type from ID "${id}". Expected prefix "android_", "ios_", "xcode_", or "sandbox_".`);
19
+ if (prefix === 'gradle')
20
+ return 'gradle';
21
+ throw new Error(`Cannot detect instance type from ID "${id}". Expected prefix "android_", "ios_", "xcode_", "sandbox_", or "gradle_".`);
20
22
  }
21
23
  /**
22
24
  * Check if a daemon session is active for the given instance ID.
@@ -1 +1 @@
1
- {"version":3,"file":"instance-client-factory.js","sourceRoot":"","sources":["../../src/lib/instance-client-factory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"instance-client-factory.js","sourceRoot":"","sources":["../../src/lib/instance-client-factory.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lim",
3
- "version": "0.19.2",
3
+ "version": "0.19.4",
4
4
  "description": "Use remote XCode, iOS Simulator, Android Emulator and more to build and test apps from Linux, Windows or macOS.",
5
5
  "bin": {
6
6
  "lim": "./bin/run.js"
@@ -25,7 +25,7 @@
25
25
  "test": "jest"
26
26
  },
27
27
  "dependencies": {
28
- "@limrun/api": "0.40.1",
28
+ "@limrun/api": "0.42.2",
29
29
  "@oclif/core": "^4",
30
30
  "cli-progress": "^3.12.0",
31
31
  "cli-table3": "^0.6.5",
@@ -48,26 +48,29 @@
48
48
  "commands": "./dist/commands",
49
49
  "topicSeparator": " ",
50
50
  "topics": {
51
- "ios": {
52
- "description": "Execute any task on remote iOS Simulators: create, list, get, delete, info, list-apps, launch-app, terminate-app, app-log, syslog, sync, screenshot, tap, tap-element, element-tree, type, press-key, toggle-keyboard, scroll, open-url, install-app, keychain, record, perform, simctl, cp, xcrun, xcodebuild, lsof, reverse"
53
- },
54
51
  "android": {
55
52
  "description": "Execute any task on remote Android Emulators: create, list, get, delete, connect, sync, screenshot, tap, tap-element, find-element, element-tree, type, press-key, scroll, open-url, install-app, record, play-on-microphone, set-wifi-bandwidth"
56
53
  },
57
- "xcode": {
58
- "description": "Execute any task on remote XCode sandboxes: create, list, get, delete, sync, build, attach-simulator"
59
- },
60
54
  "asset": {
61
55
  "description": "Upload, download, list, inspect, and delete files that can be used by iOS & Android as pre-installed apps: push, pull, list, delete"
62
56
  },
63
57
  "assets": {
64
58
  "description": "Upload, download, list, inspect, and delete files that can be used by iOS & Android as pre-installed apps: push, pull, list, delete"
65
59
  },
60
+ "gradle": {
61
+ "description": "Build Android projects on cloud gradle sandboxes"
62
+ },
63
+ "ios": {
64
+ "description": "Execute any task on remote iOS Simulators: create, list, get, delete, info, list-apps, launch-app, terminate-app, app-log, syslog, sync, screenshot, tap, tap-element, element-tree, type, press-key, toggle-keyboard, scroll, open-url, install-app, keychain, record, perform, simctl, cp, xcrun, xcodebuild, lsof, reverse"
65
+ },
66
66
  "session": {
67
67
  "description": "Manage persistent background sessions for device interaction: start, status, stop. Sessions are used to execute commands on remote devices without the need to reconnect to the device after each command."
68
68
  },
69
69
  "skills": {
70
70
  "description": "Install Limrun skills for AI coding agents (Claude Code, Cursor, Codex). Run `lim skills install` to set up."
71
+ },
72
+ "xcode": {
73
+ "description": "Execute any task on remote XCode sandboxes: create, list, get, delete, sync, build, attach-simulator"
71
74
  }
72
75
  }
73
76
  },
@@ -1 +0,0 @@
1
- {"version":3,"file":"cp.d.ts","sourceRoot":"","sources":["../../../src/commands/ios/cp.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,WAAW;IAC5C,MAAM,CAAC,OAAO,SAA4C;IAC1D,MAAM,CAAC,WAAW,SACyH;IAC3I,MAAM,CAAC,QAAQ,WAGb;IAEF,MAAM,CAAC,IAAI;;;MAST;IAEF,MAAM,CAAC,KAAK;;;;;;;MAKV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA6B3B"}
@@ -1,64 +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 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 IosCp extends base_command_1.BaseCommand {
12
- async run() {
13
- const { args, flags } = await this.parse(IosCp);
14
- this.setParsedFlags(flags);
15
- await this.withAuth(async () => {
16
- const resolvedInstance = this.resolveIosInstance(flags.id);
17
- const id = resolvedInstance.id;
18
- if (false) {
19
- this.error('ios cp only supports iOS instances');
20
- }
21
- const localPath = path_1.default.resolve(args.path);
22
- if (!fs_1.default.existsSync(localPath)) {
23
- this.error(`File not found: ${localPath}`);
24
- }
25
- const { client, disconnect } = await (0, instance_client_factory_1.getIosInstanceClient)(this.client, resolvedInstance);
26
- try {
27
- const sandboxPath = await client.cp(args.name, localPath);
28
- if (flags.json) {
29
- this.outputJson({ sandboxPath });
30
- }
31
- else {
32
- this.output(sandboxPath);
33
- }
34
- }
35
- finally {
36
- disconnect();
37
- }
38
- });
39
- }
40
- }
41
- IosCp.summary = 'Copy a local file into the iOS sandbox';
42
- IosCp.description = 'Upload a local file into the simulator sandbox and return the remote path that can be used by follow-up commands such as `ios simctl`.';
43
- IosCp.examples = [
44
- '<%= config.bin %> ios cp test.txt ./fixtures/test.txt',
45
- '<%= config.bin %> ios cp input.json ./payloads/input.json --json',
46
- ];
47
- IosCp.args = {
48
- name: core_1.Args.string({
49
- description: 'Filename to use inside the simulator sandbox.',
50
- required: true,
51
- }),
52
- path: core_1.Args.string({
53
- description: 'Local file path to upload into the simulator sandbox.',
54
- required: true,
55
- }),
56
- };
57
- IosCp.flags = {
58
- ...base_command_1.BaseCommand.baseFlags,
59
- id: core_1.Flags.string({
60
- description: 'iOS instance ID to target. Defaults to the last created iOS instance.',
61
- }),
62
- };
63
- exports.default = IosCp;
64
- //# sourceMappingURL=cp.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cp.js","sourceRoot":"","sources":["../../../src/commands/ios/cp.ts"],"names":[],"mappings":";;;;;AAAA,4CAAoB;AACpB,gDAAwB;AACxB,sCAA0C;AAC1C,qDAAiD;AACjD,+EAAyE;AAEzE,MAAqB,KAAM,SAAQ,0BAAW;IA2B5C,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAChD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAE3B,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;YAC7B,MAAM,gBAAgB,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC3D,MAAM,EAAE,GAAG,gBAAgB,CAAC,EAAE,CAAC;YAC/B,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;YACnD,CAAC;YAED,MAAM,SAAS,GAAG,cAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC9B,IAAI,CAAC,KAAK,CAAC,mBAAmB,SAAS,EAAE,CAAC,CAAC;YAC7C,CAAC;YAED,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,IAAA,8CAAoB,EAAC,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;YACzF,IAAI,CAAC;gBACH,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;gBAC1D,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;oBACf,IAAI,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;gBACnC,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,UAAU,EAAE,CAAC;YACf,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;;AAtDM,aAAO,GAAG,wCAAwC,CAAC;AACnD,iBAAW,GAChB,wIAAwI,CAAC;AACpI,cAAQ,GAAG;IAChB,uDAAuD;IACvD,kEAAkE;CACnE,CAAC;AAEK,UAAI,GAAG;IACZ,IAAI,EAAE,WAAI,CAAC,MAAM,CAAC;QAChB,WAAW,EAAE,+CAA+C;QAC5D,QAAQ,EAAE,IAAI;KACf,CAAC;IACF,IAAI,EAAE,WAAI,CAAC,MAAM,CAAC;QAChB,WAAW,EAAE,uDAAuD;QACpE,QAAQ,EAAE,IAAI;KACf,CAAC;CACH,CAAC;AAEK,WAAK,GAAG;IACb,GAAG,0BAAW,CAAC,SAAS;IACxB,EAAE,EAAE,YAAK,CAAC,MAAM,CAAC;QACf,WAAW,EAAE,uEAAuE;KACrF,CAAC;CACH,CAAC;kBAzBiB,KAAK"}