@limrun/cli 0.1.0 → 0.2.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 (122) hide show
  1. package/README.md +297 -280
  2. package/dist/commands/android/connect.d.ts +16 -0
  3. package/dist/commands/android/connect.d.ts.map +1 -0
  4. package/dist/commands/android/connect.js +81 -0
  5. package/dist/commands/android/connect.js.map +1 -0
  6. package/dist/commands/android/create.d.ts +25 -0
  7. package/dist/commands/android/create.d.ts.map +1 -0
  8. package/dist/commands/android/create.js +184 -0
  9. package/dist/commands/android/create.js.map +1 -0
  10. package/dist/commands/android/delete.d.ts +15 -0
  11. package/dist/commands/android/delete.d.ts.map +1 -0
  12. package/dist/commands/android/delete.js +23 -0
  13. package/dist/commands/android/delete.js.map +1 -0
  14. package/dist/commands/android/list.d.ts +19 -0
  15. package/dist/commands/android/list.d.ts.map +1 -0
  16. package/dist/commands/android/list.js +69 -0
  17. package/dist/commands/android/list.js.map +1 -0
  18. package/dist/commands/asset/delete.d.ts +15 -0
  19. package/dist/commands/asset/delete.d.ts.map +1 -0
  20. package/dist/commands/asset/delete.js +23 -0
  21. package/dist/commands/asset/delete.js.map +1 -0
  22. package/dist/commands/asset/list.d.ts +18 -0
  23. package/dist/commands/asset/list.d.ts.map +1 -0
  24. package/dist/commands/asset/list.js +74 -0
  25. package/dist/commands/asset/list.js.map +1 -0
  26. package/dist/commands/asset/pull.d.ts +17 -0
  27. package/dist/commands/asset/pull.d.ts.map +1 -0
  28. package/dist/commands/asset/pull.js +72 -0
  29. package/dist/commands/asset/pull.js.map +1 -0
  30. package/dist/commands/asset/push.d.ts +16 -0
  31. package/dist/commands/asset/push.d.ts.map +1 -0
  32. package/dist/commands/asset/push.js +44 -0
  33. package/dist/commands/asset/push.js.map +1 -0
  34. package/dist/commands/build.d.ts +1 -0
  35. package/dist/commands/build.d.ts.map +1 -1
  36. package/dist/commands/build.js +1 -0
  37. package/dist/commands/build.js.map +1 -1
  38. package/dist/commands/exec/element-tree.d.ts +1 -0
  39. package/dist/commands/exec/element-tree.d.ts.map +1 -1
  40. package/dist/commands/exec/element-tree.js +2 -1
  41. package/dist/commands/exec/element-tree.js.map +1 -1
  42. package/dist/commands/exec/install-app.d.ts +1 -0
  43. package/dist/commands/exec/install-app.d.ts.map +1 -1
  44. package/dist/commands/exec/install-app.js +3 -2
  45. package/dist/commands/exec/install-app.js.map +1 -1
  46. package/dist/commands/exec/open-url.d.ts +1 -0
  47. package/dist/commands/exec/open-url.d.ts.map +1 -1
  48. package/dist/commands/exec/open-url.js +2 -1
  49. package/dist/commands/exec/open-url.js.map +1 -1
  50. package/dist/commands/exec/press-key.d.ts +1 -0
  51. package/dist/commands/exec/press-key.d.ts.map +1 -1
  52. package/dist/commands/exec/press-key.js +3 -2
  53. package/dist/commands/exec/press-key.js.map +1 -1
  54. package/dist/commands/exec/record.d.ts +1 -0
  55. package/dist/commands/exec/record.d.ts.map +1 -1
  56. package/dist/commands/exec/record.js +4 -3
  57. package/dist/commands/exec/record.js.map +1 -1
  58. package/dist/commands/exec/screenshot.d.ts +1 -0
  59. package/dist/commands/exec/screenshot.d.ts.map +1 -1
  60. package/dist/commands/exec/screenshot.js +3 -2
  61. package/dist/commands/exec/screenshot.js.map +1 -1
  62. package/dist/commands/exec/scroll.d.ts +1 -0
  63. package/dist/commands/exec/scroll.d.ts.map +1 -1
  64. package/dist/commands/exec/scroll.js +2 -1
  65. package/dist/commands/exec/scroll.js.map +1 -1
  66. package/dist/commands/exec/tap-element.d.ts +1 -0
  67. package/dist/commands/exec/tap-element.d.ts.map +1 -1
  68. package/dist/commands/exec/tap-element.js +3 -2
  69. package/dist/commands/exec/tap-element.js.map +1 -1
  70. package/dist/commands/exec/tap.d.ts +1 -0
  71. package/dist/commands/exec/tap.d.ts.map +1 -1
  72. package/dist/commands/exec/tap.js +2 -1
  73. package/dist/commands/exec/tap.js.map +1 -1
  74. package/dist/commands/exec/type.d.ts +1 -0
  75. package/dist/commands/exec/type.d.ts.map +1 -1
  76. package/dist/commands/exec/type.js +2 -1
  77. package/dist/commands/exec/type.js.map +1 -1
  78. package/dist/commands/ios/create.d.ts +24 -0
  79. package/dist/commands/ios/create.d.ts.map +1 -0
  80. package/dist/commands/ios/create.js +130 -0
  81. package/dist/commands/ios/create.js.map +1 -0
  82. package/dist/commands/ios/delete.d.ts +15 -0
  83. package/dist/commands/ios/delete.d.ts.map +1 -0
  84. package/dist/commands/ios/delete.js +25 -0
  85. package/dist/commands/ios/delete.js.map +1 -0
  86. package/dist/commands/ios/launch-app.d.ts +17 -0
  87. package/dist/commands/ios/launch-app.d.ts.map +1 -0
  88. package/dist/commands/ios/launch-app.js +50 -0
  89. package/dist/commands/ios/launch-app.js.map +1 -0
  90. package/dist/commands/ios/list-apps.d.ts +15 -0
  91. package/dist/commands/ios/list-apps.d.ts.map +1 -0
  92. package/dist/commands/ios/list-apps.js +46 -0
  93. package/dist/commands/ios/list-apps.js.map +1 -0
  94. package/dist/commands/ios/list.d.ts +19 -0
  95. package/dist/commands/ios/list.d.ts.map +1 -0
  96. package/dist/commands/ios/list.js +69 -0
  97. package/dist/commands/ios/list.js.map +1 -0
  98. package/dist/commands/ios/log.d.ts +18 -0
  99. package/dist/commands/ios/log.d.ts.map +1 -0
  100. package/dist/commands/ios/log.js +81 -0
  101. package/dist/commands/ios/log.js.map +1 -0
  102. package/dist/commands/ios/terminate-app.d.ts +16 -0
  103. package/dist/commands/ios/terminate-app.d.ts.map +1 -0
  104. package/dist/commands/ios/terminate-app.js +40 -0
  105. package/dist/commands/ios/terminate-app.js.map +1 -0
  106. package/dist/commands/sync.d.ts +1 -0
  107. package/dist/commands/sync.d.ts.map +1 -1
  108. package/dist/commands/sync.js +1 -0
  109. package/dist/commands/sync.js.map +1 -1
  110. package/dist/commands/xcode/create.d.ts +20 -0
  111. package/dist/commands/xcode/create.d.ts.map +1 -0
  112. package/dist/commands/xcode/create.js +85 -0
  113. package/dist/commands/xcode/create.js.map +1 -0
  114. package/dist/commands/xcode/delete.d.ts +15 -0
  115. package/dist/commands/xcode/delete.d.ts.map +1 -0
  116. package/dist/commands/xcode/delete.js +23 -0
  117. package/dist/commands/xcode/delete.js.map +1 -0
  118. package/dist/commands/xcode/list.d.ts +18 -0
  119. package/dist/commands/xcode/list.d.ts.map +1 -0
  120. package/dist/commands/xcode/list.js +66 -0
  121. package/dist/commands/xcode/list.js.map +1 -0
  122. package/package.json +33 -4
@@ -0,0 +1,16 @@
1
+ import { BaseCommand } from '../../base-command';
2
+ export default class AndroidConnect extends BaseCommand {
3
+ static summary: string;
4
+ static aliases: string[];
5
+ static examples: string[];
6
+ static args: {
7
+ id: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
8
+ };
9
+ static flags: {
10
+ 'adb-path': import("@oclif/core/lib/interfaces").OptionFlag<string, 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
+ };
14
+ run(): Promise<void>;
15
+ }
16
+ //# sourceMappingURL=connect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../../src/commands/android/connect.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,WAAW;IACrD,MAAM,CAAC,OAAO,SAA4D;IAC1E,MAAM,CAAC,OAAO,WAAuB;IACrC,MAAM,CAAC,QAAQ,WAA8C;IAE7D,MAAM,CAAC,IAAI;;MAET;IAEF,MAAM,CAAC,KAAK;;;;MAGV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAmC3B"}
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const core_1 = require("@oclif/core");
37
+ const base_command_1 = require("../../base-command");
38
+ class AndroidConnect extends base_command_1.BaseCommand {
39
+ async run() {
40
+ const { args, flags } = await this.parse(AndroidConnect);
41
+ this.setParsedFlags(flags);
42
+ await this.withAuth(async () => {
43
+ const instance = await this.client.androidInstances.get(args.id);
44
+ if (!instance.status.apiUrl) {
45
+ this.error(`Instance ${args.id} does not have an apiUrl. Is it ready?`);
46
+ }
47
+ const { createInstanceClient } = await Promise.resolve().then(() => __importStar(require('@limrun/api')));
48
+ const instanceClient = await createInstanceClient({
49
+ apiUrl: instance.status.apiUrl,
50
+ adbUrl: instance.status.adbWebSocketUrl,
51
+ token: instance.status.token,
52
+ });
53
+ const tunnel = await instanceClient.startAdbTunnel();
54
+ this.log('Tunnel started. Press Ctrl+C to stop.');
55
+ await new Promise((resolve) => {
56
+ const keepAlive = setInterval(() => { }, 1 << 30);
57
+ const shutdown = () => {
58
+ clearInterval(keepAlive);
59
+ this.log('Stopping tunnel...');
60
+ resolve();
61
+ };
62
+ process.on('SIGINT', shutdown);
63
+ process.on('SIGTERM', shutdown);
64
+ });
65
+ tunnel.close();
66
+ instanceClient.disconnect();
67
+ });
68
+ }
69
+ }
70
+ AndroidConnect.summary = 'Connect to an existing Android instance via ADB tunnel';
71
+ AndroidConnect.aliases = ['connect android'];
72
+ AndroidConnect.examples = ['<%= config.bin %> android connect <ID>'];
73
+ AndroidConnect.args = {
74
+ id: core_1.Args.string({ description: 'Android instance ID', required: true }),
75
+ };
76
+ AndroidConnect.flags = {
77
+ ...base_command_1.BaseCommand.baseFlags,
78
+ 'adb-path': core_1.Flags.string({ description: 'Path to adb binary', default: 'adb' }),
79
+ };
80
+ exports.default = AndroidConnect;
81
+ //# sourceMappingURL=connect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../../src/commands/android/connect.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sCAA0C;AAC1C,qDAAiD;AAEjD,MAAqB,cAAe,SAAQ,0BAAW;IAcrD,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACzD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAE3B,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;YAC7B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBAC5B,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,EAAE,wCAAwC,CAAC,CAAC;YAC1E,CAAC;YAED,MAAM,EAAE,oBAAoB,EAAE,GAAG,wDAAa,aAAa,GAAC,CAAC;YAC7D,MAAM,cAAc,GAAG,MAAM,oBAAoB,CAAC;gBAChD,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM;gBAC9B,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,eAAe;gBACvC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK;aAC7B,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,cAAc,EAAE,CAAC;YACrD,IAAI,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;YAElD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;gBAClC,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,GAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;gBACjD,MAAM,QAAQ,GAAG,GAAG,EAAE;oBACpB,aAAa,CAAC,SAAS,CAAC,CAAC;oBACzB,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;oBAC/B,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC;gBACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,cAAc,CAAC,UAAU,EAAE,CAAC;QAC9B,CAAC,CAAC,CAAC;IACL,CAAC;;AA/CM,sBAAO,GAAG,wDAAwD,CAAC;AACnE,sBAAO,GAAG,CAAC,iBAAiB,CAAC,CAAC;AAC9B,uBAAQ,GAAG,CAAC,wCAAwC,CAAC,CAAC;AAEtD,mBAAI,GAAG;IACZ,EAAE,EAAE,WAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,qBAAqB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;CACxE,CAAC;AAEK,oBAAK,GAAG;IACb,GAAG,0BAAW,CAAC,SAAS;IACxB,UAAU,EAAE,YAAK,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,oBAAoB,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;CAChF,CAAC;kBAZiB,cAAc"}
@@ -0,0 +1,25 @@
1
+ import { BaseCommand } from '../../base-command';
2
+ export default class AndroidCreate extends BaseCommand {
3
+ static summary: string;
4
+ static description: string;
5
+ static aliases: string[];
6
+ static examples: string[];
7
+ static flags: {
8
+ connect: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
9
+ stream: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
10
+ rm: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
11
+ 'adb-path': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
12
+ 'display-name': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
13
+ region: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
14
+ 'hard-timeout': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
15
+ 'inactivity-timeout': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
16
+ label: import("@oclif/core/lib/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
17
+ 'reuse-if-exists': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
18
+ 'install-asset': import("@oclif/core/lib/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
19
+ install: import("@oclif/core/lib/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
20
+ 'api-key': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
21
+ json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
22
+ };
23
+ run(): Promise<void>;
24
+ }
25
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/android/create.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAIjD,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,WAAW;IACpD,MAAM,CAAC,OAAO,SAAmC;IACjD,MAAM,CAAC,WAAW,SACkF;IACpG,MAAM,CAAC,OAAO,WAAmB;IAEjC,MAAM,CAAC,QAAQ,WAIb;IAEF,MAAM,CAAC,KAAK;;;;;;;;;;;;;;;MAwBV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA6G3B"}
@@ -0,0 +1,184 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const path_1 = __importDefault(require("path"));
40
+ const child_process_1 = require("child_process");
41
+ const core_1 = require("@oclif/core");
42
+ const base_command_1 = require("../../base-command");
43
+ const formatting_1 = require("../../lib/formatting");
44
+ class AndroidCreate extends base_command_1.BaseCommand {
45
+ async run() {
46
+ const { flags } = await this.parse(AndroidCreate);
47
+ this.setParsedFlags(flags);
48
+ await this.withAuth(async () => {
49
+ // Upload local files first
50
+ const assetNames = [...(flags['install-asset'] || [])];
51
+ if (flags.install) {
52
+ for (const filePath of flags.install) {
53
+ const resolved = path_1.default.resolve(filePath);
54
+ const name = path_1.default.basename(resolved);
55
+ this.log(`Uploading ${name}...`);
56
+ const asset = await this.client.assets.getOrUpload({ path: resolved, name });
57
+ assetNames.push(asset.name);
58
+ }
59
+ this.log(`Successfully uploaded ${flags.install.length} file(s)`);
60
+ }
61
+ // Build params
62
+ const params = {
63
+ wait: true,
64
+ reuseIfExists: flags['reuse-if-exists'] || undefined,
65
+ spec: {},
66
+ };
67
+ if (assetNames.length > 0) {
68
+ params.spec.initialAssets = assetNames.map((name) => ({
69
+ kind: 'App',
70
+ source: 'AssetName',
71
+ assetName: name,
72
+ }));
73
+ }
74
+ if (flags.region)
75
+ params.spec.region = flags.region;
76
+ if (flags['hard-timeout'])
77
+ params.spec.hardTimeout = flags['hard-timeout'];
78
+ if (flags['inactivity-timeout'])
79
+ params.spec.inactivityTimeout = flags['inactivity-timeout'];
80
+ const labels = (0, formatting_1.parseLabels)(flags.label);
81
+ if (flags['display-name'] || labels) {
82
+ params.metadata = {};
83
+ if (flags['display-name'])
84
+ params.metadata.displayName = flags['display-name'];
85
+ if (labels)
86
+ params.metadata.labels = labels;
87
+ }
88
+ const start = Date.now();
89
+ const instance = await this.client.androidInstances.create(params);
90
+ this.log(`Created a new instance in ${((Date.now() - start) / 1000).toFixed(1)}s`);
91
+ if (flags.rm) {
92
+ const cleanup = async () => {
93
+ try {
94
+ await this.client.androidInstances.delete(instance.metadata.id);
95
+ this.log(`${instance.metadata.id} is deleted`);
96
+ }
97
+ catch (e) {
98
+ this.log(`Failed to delete instance: ${e}`);
99
+ }
100
+ };
101
+ process.on('SIGINT', async () => {
102
+ await cleanup();
103
+ process.exit(0);
104
+ });
105
+ process.on('SIGTERM', async () => {
106
+ await cleanup();
107
+ process.exit(0);
108
+ });
109
+ }
110
+ if (flags.connect) {
111
+ const { createInstanceClient } = await Promise.resolve().then(() => __importStar(require('@limrun/api')));
112
+ const instanceClient = await createInstanceClient({
113
+ apiUrl: instance.status.apiUrl,
114
+ adbUrl: instance.status.adbWebSocketUrl,
115
+ token: instance.status.token,
116
+ });
117
+ const tunnel = await instanceClient.startAdbTunnel();
118
+ if (flags.stream) {
119
+ const addr = `${tunnel.address.address}:${tunnel.address.port}`;
120
+ const scrcpy = (0, child_process_1.spawn)('scrcpy', ['-s', addr], { stdio: 'inherit' });
121
+ scrcpy.on('error', (err) => {
122
+ this.warn(`Failed to start scrcpy: ${err.message}`);
123
+ });
124
+ scrcpy.on('close', () => {
125
+ process.kill(process.pid, 'SIGTERM');
126
+ });
127
+ }
128
+ this.log('Tunnel started. Press Ctrl+C to stop.');
129
+ await new Promise((resolve) => {
130
+ const keepAlive = setInterval(() => { }, 1 << 30);
131
+ const shutdown = () => {
132
+ clearInterval(keepAlive);
133
+ resolve();
134
+ };
135
+ process.on('SIGINT', shutdown);
136
+ process.on('SIGTERM', shutdown);
137
+ });
138
+ tunnel.close();
139
+ instanceClient.disconnect();
140
+ }
141
+ else {
142
+ this.log(`Created instance ${instance.metadata.id}`);
143
+ if (flags.json) {
144
+ this.outputJson(instance);
145
+ }
146
+ }
147
+ });
148
+ }
149
+ }
150
+ AndroidCreate.summary = 'Create a new Android instance';
151
+ AndroidCreate.description = 'Creates and optionally connects to a new Android instance with ADB tunnel and scrcpy streaming.';
152
+ AndroidCreate.aliases = ['run android'];
153
+ AndroidCreate.examples = [
154
+ '<%= config.bin %> android create',
155
+ '<%= config.bin %> android create --rm --install ./app.apk',
156
+ '<%= config.bin %> android create --region us-west --label env=dev',
157
+ ];
158
+ AndroidCreate.flags = {
159
+ ...base_command_1.BaseCommand.baseFlags,
160
+ connect: core_1.Flags.boolean({
161
+ description: 'Connect to the instance (start ADB tunnel)',
162
+ default: true,
163
+ allowNo: true,
164
+ }),
165
+ stream: core_1.Flags.boolean({ description: 'Stream the instance with scrcpy', default: true, allowNo: true }),
166
+ rm: core_1.Flags.boolean({ description: 'Delete instance on exit', default: false }),
167
+ 'adb-path': core_1.Flags.string({ description: 'Path to adb binary', default: 'adb' }),
168
+ 'display-name': core_1.Flags.string({ description: 'Display name for the instance' }),
169
+ region: core_1.Flags.string({ description: 'Region where the instance will be created' }),
170
+ 'hard-timeout': core_1.Flags.string({ description: 'Hard timeout (e.g. 1m, 10m, 3h). Default: no timeout' }),
171
+ 'inactivity-timeout': core_1.Flags.string({ description: 'Inactivity timeout (e.g. 1m, 10m, 3h). Default: 3m' }),
172
+ label: core_1.Flags.string({ description: 'Labels in key=value format', multiple: true }),
173
+ 'reuse-if-exists': core_1.Flags.boolean({
174
+ description: 'Reuse existing instance with same labels/region',
175
+ default: false,
176
+ }),
177
+ 'install-asset': core_1.Flags.string({ description: 'Asset name to install (can be repeated)', multiple: true }),
178
+ install: core_1.Flags.string({
179
+ description: 'Local file to install (auto-uploads if needed, can be repeated)',
180
+ multiple: true,
181
+ }),
182
+ };
183
+ exports.default = AndroidCreate;
184
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/android/create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { BaseCommand } from '../../base-command';
2
+ export default class AndroidDelete extends BaseCommand {
3
+ static summary: string;
4
+ static aliases: string[];
5
+ static examples: string[];
6
+ static args: {
7
+ id: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
8
+ };
9
+ static flags: {
10
+ 'api-key': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
11
+ json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
12
+ };
13
+ run(): Promise<void>;
14
+ }
15
+ //# sourceMappingURL=delete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/commands/android/delete.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,WAAW;IACpD,MAAM,CAAC,OAAO,SAAgC;IAC9C,MAAM,CAAC,OAAO,WAAsB;IACpC,MAAM,CAAC,QAAQ,WAA6C;IAE5D,MAAM,CAAC,IAAI;;MAET;IAEF,MAAM,CAAC,KAAK;;;MAAgC;IAEtC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAS3B"}
@@ -0,0 +1,23 @@
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
+ class AndroidDelete extends base_command_1.BaseCommand {
6
+ async run() {
7
+ const { args, flags } = await this.parse(AndroidDelete);
8
+ this.setParsedFlags(flags);
9
+ await this.withAuth(async () => {
10
+ await this.client.androidInstances.delete(args.id);
11
+ this.log(`Deleted Android instance: ${args.id}`);
12
+ });
13
+ }
14
+ }
15
+ AndroidDelete.summary = 'Delete an Android instance';
16
+ AndroidDelete.aliases = ['delete android'];
17
+ AndroidDelete.examples = ['<%= config.bin %> android delete <ID>'];
18
+ AndroidDelete.args = {
19
+ id: core_1.Args.string({ description: 'Instance ID to delete', required: true }),
20
+ };
21
+ AndroidDelete.flags = { ...base_command_1.BaseCommand.baseFlags };
22
+ exports.default = AndroidDelete;
23
+ //# sourceMappingURL=delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/commands/android/delete.ts"],"names":[],"mappings":";;AAAA,sCAAmC;AACnC,qDAAiD;AAEjD,MAAqB,aAAc,SAAQ,0BAAW;IAWpD,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACxD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAE3B,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;YAC7B,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACnD,IAAI,CAAC,GAAG,CAAC,6BAA6B,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACL,CAAC;;AAlBM,qBAAO,GAAG,4BAA4B,CAAC;AACvC,qBAAO,GAAG,CAAC,gBAAgB,CAAC,CAAC;AAC7B,sBAAQ,GAAG,CAAC,uCAAuC,CAAC,CAAC;AAErD,kBAAI,GAAG;IACZ,EAAE,EAAE,WAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,uBAAuB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;CAC1E,CAAC;AAEK,mBAAK,GAAG,EAAE,GAAG,0BAAW,CAAC,SAAS,EAAE,CAAC;kBATzB,aAAa"}
@@ -0,0 +1,19 @@
1
+ import { BaseCommand } from '../../base-command';
2
+ export default class AndroidList extends BaseCommand {
3
+ static summary: string;
4
+ static aliases: string[];
5
+ static examples: string[];
6
+ static args: {
7
+ id: import("@oclif/core/lib/interfaces").Arg<string | undefined, Record<string, unknown>>;
8
+ };
9
+ static flags: {
10
+ state: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
11
+ region: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
12
+ 'label-selector': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
13
+ all: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
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
+ };
17
+ run(): Promise<void>;
18
+ }
19
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/android/list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,WAAW;IAClD,MAAM,CAAC,OAAO,SAAkD;IAChE,MAAM,CAAC,OAAO,WAA4B;IAC1C,MAAM,CAAC,QAAQ,WAA6E;IAE5F,MAAM,CAAC,IAAI;;MAET;IAEF,MAAM,CAAC,KAAK;;;;;;;MAMV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAkD3B"}
@@ -0,0 +1,69 @@
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
+ class AndroidList extends base_command_1.BaseCommand {
6
+ async run() {
7
+ const { args, flags } = await this.parse(AndroidList);
8
+ this.setParsedFlags(flags);
9
+ await this.withAuth(async () => {
10
+ if (args.id) {
11
+ const instance = await this.client.androidInstances.get(args.id);
12
+ if (flags.json) {
13
+ this.outputJson(instance);
14
+ }
15
+ else {
16
+ this.outputTable(['ID', 'Name', 'Region', 'State'], [
17
+ [
18
+ instance.metadata.id,
19
+ instance.metadata.displayName || '',
20
+ instance.spec.region,
21
+ instance.status.state,
22
+ ],
23
+ ]);
24
+ }
25
+ return;
26
+ }
27
+ const params = {};
28
+ if (flags.state) {
29
+ params.state = flags.state;
30
+ }
31
+ else if (!flags.all) {
32
+ params.state = 'ready';
33
+ }
34
+ if (flags.region)
35
+ params.region = flags.region;
36
+ if (flags['label-selector'])
37
+ params.labelSelector = flags['label-selector'];
38
+ const instances = await this.client.androidInstances.list(params);
39
+ const items = instances.items ?? instances.getPaginatedItems();
40
+ const rows = items.map((i) => [
41
+ i.metadata.id,
42
+ i.metadata.displayName || '',
43
+ i.spec.region,
44
+ i.status.state,
45
+ ]);
46
+ if (flags.json) {
47
+ this.outputJson(items);
48
+ }
49
+ else {
50
+ this.outputTable(['ID', 'Name', 'Region', 'State'], rows);
51
+ }
52
+ });
53
+ }
54
+ }
55
+ AndroidList.summary = 'List Android instances or get a specific one';
56
+ AndroidList.aliases = ['get android', 'get a'];
57
+ AndroidList.examples = ['<%= config.bin %> android list', '<%= config.bin %> android list <ID>'];
58
+ AndroidList.args = {
59
+ id: core_1.Args.string({ description: 'Instance ID to get', required: false }),
60
+ };
61
+ AndroidList.flags = {
62
+ ...base_command_1.BaseCommand.baseFlags,
63
+ state: core_1.Flags.string({ description: 'Filter by state (unknown, creating, ready, terminated)' }),
64
+ region: core_1.Flags.string({ description: 'Filter by region' }),
65
+ 'label-selector': core_1.Flags.string({ description: 'Filter by labels (e.g. env=prod,region=us-west)' }),
66
+ all: core_1.Flags.boolean({ description: 'Show all states, not just ready', default: false }),
67
+ };
68
+ exports.default = AndroidList;
69
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/android/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { BaseCommand } from '../../base-command';
2
+ export default class AssetDelete extends BaseCommand {
3
+ static summary: string;
4
+ static aliases: string[];
5
+ static examples: string[];
6
+ static args: {
7
+ id: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
8
+ };
9
+ static flags: {
10
+ 'api-key': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
11
+ json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
12
+ };
13
+ run(): Promise<void>;
14
+ }
15
+ //# sourceMappingURL=delete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/commands/asset/delete.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,WAAW;IAClD,MAAM,CAAC,OAAO,SAAqB;IACnC,MAAM,CAAC,OAAO,WAAoB;IAClC,MAAM,CAAC,QAAQ,WAA2C;IAE1D,MAAM,CAAC,IAAI;;MAET;IAEF,MAAM,CAAC,KAAK;;;MAAgC;IAEtC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAS3B"}
@@ -0,0 +1,23 @@
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
+ class AssetDelete extends base_command_1.BaseCommand {
6
+ async run() {
7
+ const { args, flags } = await this.parse(AssetDelete);
8
+ this.setParsedFlags(flags);
9
+ await this.withAuth(async () => {
10
+ await this.client.assets.delete(args.id);
11
+ this.log(`Deleted asset: ${args.id}`);
12
+ });
13
+ }
14
+ }
15
+ AssetDelete.summary = 'Delete an asset';
16
+ AssetDelete.aliases = ['delete asset'];
17
+ AssetDelete.examples = ['<%= config.bin %> asset delete <ID>'];
18
+ AssetDelete.args = {
19
+ id: core_1.Args.string({ description: 'Asset ID to delete', required: true }),
20
+ };
21
+ AssetDelete.flags = { ...base_command_1.BaseCommand.baseFlags };
22
+ exports.default = AssetDelete;
23
+ //# sourceMappingURL=delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/commands/asset/delete.ts"],"names":[],"mappings":";;AAAA,sCAAmC;AACnC,qDAAiD;AAEjD,MAAqB,WAAY,SAAQ,0BAAW;IAWlD,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,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACzC,IAAI,CAAC,GAAG,CAAC,kBAAkB,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC;;AAlBM,mBAAO,GAAG,iBAAiB,CAAC;AAC5B,mBAAO,GAAG,CAAC,cAAc,CAAC,CAAC;AAC3B,oBAAQ,GAAG,CAAC,qCAAqC,CAAC,CAAC;AAEnD,gBAAI,GAAG;IACZ,EAAE,EAAE,WAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,oBAAoB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;CACvE,CAAC;AAEK,iBAAK,GAAG,EAAE,GAAG,0BAAW,CAAC,SAAS,EAAE,CAAC;kBATzB,WAAW"}
@@ -0,0 +1,18 @@
1
+ import { BaseCommand } from '../../base-command';
2
+ export default class AssetList extends BaseCommand {
3
+ static summary: string;
4
+ static aliases: string[];
5
+ static examples: string[];
6
+ static args: {
7
+ id: import("@oclif/core/lib/interfaces").Arg<string | undefined, Record<string, unknown>>;
8
+ };
9
+ static flags: {
10
+ name: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
11
+ 'download-url': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
12
+ 'upload-url': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
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
+ };
16
+ run(): Promise<void>;
17
+ }
18
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/asset/list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,WAAW;IAChD,MAAM,CAAC,OAAO,SAAuC;IACrD,MAAM,CAAC,OAAO,WAA+B;IAC7C,MAAM,CAAC,QAAQ,WAAyE;IAExF,MAAM,CAAC,IAAI;;MAET;IAEF,MAAM,CAAC,KAAK;;;;;;MAKV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAqD3B"}
@@ -0,0 +1,74 @@
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
+ class AssetList extends base_command_1.BaseCommand {
6
+ async run() {
7
+ const { args, flags } = await this.parse(AssetList);
8
+ this.setParsedFlags(flags);
9
+ await this.withAuth(async () => {
10
+ if (args.id) {
11
+ const asset = await this.client.assets.get(args.id, {
12
+ includeDownloadUrl: flags['download-url'],
13
+ includeUploadUrl: flags['upload-url'],
14
+ });
15
+ if (flags.json) {
16
+ this.outputJson(asset);
17
+ return;
18
+ }
19
+ const headers = ['ID', 'Name', 'MD5'];
20
+ const row = [asset.id, asset.name, asset.md5 || ''];
21
+ if (flags['download-url']) {
22
+ headers.push('Download URL');
23
+ row.push(asset.signedDownloadUrl || '');
24
+ }
25
+ if (flags['upload-url']) {
26
+ headers.push('Upload URL');
27
+ row.push(asset.signedUploadUrl || '');
28
+ }
29
+ this.outputTable(headers, [row]);
30
+ return;
31
+ }
32
+ const params = {
33
+ includeDownloadUrl: flags['download-url'],
34
+ includeUploadUrl: flags['upload-url'],
35
+ };
36
+ if (flags.name)
37
+ params.nameFilter = flags.name;
38
+ const assets = await this.client.assets.list(params);
39
+ const headers = ['ID', 'Name', 'MD5'];
40
+ if (flags['download-url'])
41
+ headers.push('Download URL');
42
+ if (flags['upload-url'])
43
+ headers.push('Upload URL');
44
+ const rows = assets.map((a) => {
45
+ const row = [a.id, a.name, a.md5 || ''];
46
+ if (flags['download-url'])
47
+ row.push(a.signedDownloadUrl || '');
48
+ if (flags['upload-url'])
49
+ row.push(a.signedUploadUrl || '');
50
+ return row;
51
+ });
52
+ if (flags.json) {
53
+ this.outputJson(assets);
54
+ }
55
+ else {
56
+ this.outputTable(headers, rows);
57
+ }
58
+ });
59
+ }
60
+ }
61
+ AssetList.summary = 'List assets or get a specific one';
62
+ AssetList.aliases = ['get asset', 'get assets'];
63
+ AssetList.examples = ['<%= config.bin %> asset list', '<%= config.bin %> asset list <ID>'];
64
+ AssetList.args = {
65
+ id: core_1.Args.string({ description: 'Asset ID to get', required: false }),
66
+ };
67
+ AssetList.flags = {
68
+ ...base_command_1.BaseCommand.baseFlags,
69
+ name: core_1.Flags.string({ description: 'Filter by asset name' }),
70
+ 'download-url': core_1.Flags.boolean({ description: 'Include download URL in output', default: false }),
71
+ 'upload-url': core_1.Flags.boolean({ description: 'Include upload URL in output', default: false }),
72
+ };
73
+ exports.default = AssetList;
74
+ //# sourceMappingURL=list.js.map