@limrun/cli 0.3.0 → 0.4.0
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 +127 -99
- package/bin/run.js +60 -5
- package/dist/base-command.d.ts +6 -0
- package/dist/base-command.d.ts.map +1 -1
- package/dist/base-command.js +28 -7
- package/dist/base-command.js.map +1 -1
- package/dist/commands/android/connect.d.ts +2 -1
- package/dist/commands/android/connect.d.ts.map +1 -1
- package/dist/commands/android/connect.js +13 -4
- package/dist/commands/android/connect.js.map +1 -1
- package/dist/commands/android/create.d.ts +1 -2
- package/dist/commands/android/create.d.ts.map +1 -1
- package/dist/commands/android/create.js +37 -32
- package/dist/commands/android/create.js.map +1 -1
- package/dist/commands/android/delete.d.ts +2 -1
- package/dist/commands/android/delete.d.ts.map +1 -1
- package/dist/commands/android/delete.js +6 -3
- package/dist/commands/android/delete.js.map +1 -1
- package/dist/commands/android/element-tree.d.ts +15 -0
- package/dist/commands/android/element-tree.d.ts.map +1 -0
- package/dist/commands/android/element-tree.js +62 -0
- package/dist/commands/android/element-tree.js.map +1 -0
- package/dist/commands/android/find-element.d.ts +27 -0
- package/dist/commands/android/find-element.d.ts.map +1 -0
- package/dist/commands/android/find-element.js +72 -0
- package/dist/commands/android/find-element.js.map +1 -0
- package/dist/commands/android/get.d.ts +2 -1
- package/dist/commands/android/get.d.ts.map +1 -1
- package/dist/commands/android/get.js +3 -3
- package/dist/commands/android/get.js.map +1 -1
- package/dist/commands/android/install-app.d.ts +17 -0
- package/dist/commands/android/install-app.d.ts.map +1 -0
- package/dist/commands/android/install-app.js +72 -0
- package/dist/commands/android/install-app.js.map +1 -0
- package/dist/commands/android/list.d.ts +2 -0
- package/dist/commands/android/list.d.ts.map +1 -1
- package/dist/commands/android/list.js +17 -5
- package/dist/commands/android/list.js.map +1 -1
- package/dist/commands/android/open-url.d.ts +17 -0
- package/dist/commands/android/open-url.d.ts.map +1 -0
- package/dist/commands/android/open-url.js +53 -0
- package/dist/commands/android/open-url.js.map +1 -0
- package/dist/commands/android/press-key.d.ts +18 -0
- package/dist/commands/android/press-key.d.ts.map +1 -0
- package/dist/commands/android/press-key.js +54 -0
- package/dist/commands/android/press-key.js.map +1 -0
- package/dist/commands/android/record.d.ts +21 -0
- package/dist/commands/android/record.d.ts.map +1 -0
- package/dist/commands/android/record.js +105 -0
- package/dist/commands/android/record.js.map +1 -0
- package/dist/commands/android/screenshot.d.ts +16 -0
- package/dist/commands/android/screenshot.d.ts.map +1 -0
- package/dist/commands/android/screenshot.js +70 -0
- package/dist/commands/android/screenshot.js.map +1 -0
- package/dist/commands/android/scroll.d.ts +31 -0
- package/dist/commands/android/scroll.d.ts.map +1 -0
- package/dist/commands/android/scroll.js +73 -0
- package/dist/commands/android/scroll.js.map +1 -0
- package/dist/commands/android/tap-element.d.ts +26 -0
- package/dist/commands/android/tap-element.d.ts.map +1 -0
- package/dist/commands/android/tap-element.js +62 -0
- package/dist/commands/android/tap-element.js.map +1 -0
- package/dist/commands/android/tap.d.ts +24 -0
- package/dist/commands/android/tap.d.ts.map +1 -0
- package/dist/commands/android/tap.js +57 -0
- package/dist/commands/android/tap.js.map +1 -0
- package/dist/commands/android/type.d.ts +30 -0
- package/dist/commands/android/type.d.ts.map +1 -0
- package/dist/commands/android/type.js +55 -0
- package/dist/commands/android/type.js.map +1 -0
- package/dist/commands/asset/delete.d.ts +2 -1
- package/dist/commands/asset/delete.d.ts.map +1 -1
- package/dist/commands/asset/delete.js +2 -2
- package/dist/commands/asset/delete.js.map +1 -1
- package/dist/commands/asset/list.d.ts +3 -1
- package/dist/commands/asset/list.d.ts.map +1 -1
- package/dist/commands/asset/list.js +22 -6
- package/dist/commands/asset/list.js.map +1 -1
- package/dist/commands/asset/pull.d.ts +2 -1
- package/dist/commands/asset/pull.d.ts.map +1 -1
- package/dist/commands/asset/pull.js +18 -6
- package/dist/commands/asset/pull.js.map +1 -1
- package/dist/commands/asset/push.d.ts +2 -1
- package/dist/commands/asset/push.d.ts.map +1 -1
- package/dist/commands/asset/push.js +5 -6
- package/dist/commands/asset/push.js.map +1 -1
- package/dist/commands/exec/element-tree.d.ts +2 -1
- package/dist/commands/exec/element-tree.d.ts.map +1 -1
- package/dist/commands/exec/element-tree.js +6 -2
- package/dist/commands/exec/element-tree.js.map +1 -1
- package/dist/commands/exec/install-app.d.ts +1 -1
- package/dist/commands/exec/install-app.d.ts.map +1 -1
- package/dist/commands/exec/install-app.js +10 -5
- package/dist/commands/exec/install-app.js.map +1 -1
- package/dist/commands/exec/open-url.d.ts +2 -1
- package/dist/commands/exec/open-url.d.ts.map +1 -1
- package/dist/commands/exec/open-url.js +9 -3
- package/dist/commands/exec/open-url.js.map +1 -1
- package/dist/commands/exec/perform.d.ts +17 -0
- package/dist/commands/exec/perform.d.ts.map +1 -0
- package/dist/commands/exec/perform.js +232 -0
- package/dist/commands/exec/perform.js.map +1 -0
- package/dist/commands/exec/press-key.d.ts +2 -1
- package/dist/commands/exec/press-key.d.ts.map +1 -1
- package/dist/commands/exec/press-key.js +9 -3
- package/dist/commands/exec/press-key.js.map +1 -1
- package/dist/commands/exec/record.d.ts +2 -1
- package/dist/commands/exec/record.d.ts.map +1 -1
- package/dist/commands/exec/record.js +20 -6
- package/dist/commands/exec/record.js.map +1 -1
- package/dist/commands/exec/screenshot.d.ts +2 -1
- package/dist/commands/exec/screenshot.d.ts.map +1 -1
- package/dist/commands/exec/screenshot.js +9 -3
- package/dist/commands/exec/screenshot.js.map +1 -1
- package/dist/commands/exec/scroll.d.ts +2 -1
- package/dist/commands/exec/scroll.d.ts.map +1 -1
- package/dist/commands/exec/scroll.js +7 -4
- package/dist/commands/exec/scroll.js.map +1 -1
- package/dist/commands/exec/tap-element.d.ts +2 -1
- package/dist/commands/exec/tap-element.d.ts.map +1 -1
- package/dist/commands/exec/tap-element.js +16 -6
- package/dist/commands/exec/tap-element.js.map +1 -1
- package/dist/commands/exec/tap.d.ts +2 -1
- package/dist/commands/exec/tap.d.ts.map +1 -1
- package/dist/commands/exec/tap.js +13 -4
- package/dist/commands/exec/tap.js.map +1 -1
- package/dist/commands/exec/type.d.ts +3 -2
- package/dist/commands/exec/type.d.ts.map +1 -1
- package/dist/commands/exec/type.js +12 -6
- package/dist/commands/exec/type.js.map +1 -1
- package/dist/commands/ios/app-log.d.ts +19 -0
- package/dist/commands/ios/app-log.d.ts.map +1 -0
- package/dist/commands/ios/app-log.js +93 -0
- package/dist/commands/ios/app-log.js.map +1 -0
- package/dist/commands/ios/cp.d.ts +18 -0
- package/dist/commands/ios/cp.d.ts.map +1 -0
- package/dist/commands/ios/cp.js +66 -0
- package/dist/commands/ios/cp.js.map +1 -0
- package/dist/commands/ios/create.d.ts +1 -1
- package/dist/commands/ios/create.d.ts.map +1 -1
- package/dist/commands/ios/create.js +55 -24
- package/dist/commands/ios/create.js.map +1 -1
- package/dist/commands/ios/delete.d.ts +2 -1
- package/dist/commands/ios/delete.d.ts.map +1 -1
- package/dist/commands/ios/delete.js +3 -3
- package/dist/commands/ios/delete.js.map +1 -1
- package/dist/commands/ios/element-tree.d.ts +15 -0
- package/dist/commands/ios/element-tree.d.ts.map +1 -0
- package/dist/commands/ios/element-tree.js +59 -0
- package/dist/commands/ios/element-tree.js.map +1 -0
- package/dist/commands/ios/get.d.ts +2 -1
- package/dist/commands/ios/get.d.ts.map +1 -1
- package/dist/commands/ios/get.js +3 -3
- package/dist/commands/ios/get.js.map +1 -1
- package/dist/commands/{delete/index.d.ts → ios/info.d.ts} +6 -5
- package/dist/commands/ios/info.d.ts.map +1 -0
- package/dist/commands/ios/info.js +60 -0
- package/dist/commands/ios/info.js.map +1 -0
- package/dist/commands/ios/install-app.d.ts +19 -0
- package/dist/commands/ios/install-app.d.ts.map +1 -0
- package/dist/commands/ios/install-app.js +99 -0
- package/dist/commands/ios/install-app.js.map +1 -0
- package/dist/commands/ios/launch-app.d.ts +2 -1
- package/dist/commands/ios/launch-app.d.ts.map +1 -1
- package/dist/commands/ios/launch-app.js +5 -3
- package/dist/commands/ios/launch-app.js.map +1 -1
- package/dist/commands/ios/list-apps.d.ts +2 -1
- package/dist/commands/ios/list-apps.d.ts.map +1 -1
- package/dist/commands/ios/list-apps.js +9 -3
- package/dist/commands/ios/list-apps.js.map +1 -1
- package/dist/commands/ios/list.d.ts +2 -0
- package/dist/commands/ios/list.d.ts.map +1 -1
- package/dist/commands/ios/list.js +17 -5
- package/dist/commands/ios/list.js.map +1 -1
- package/dist/commands/ios/log.d.ts +3 -1
- package/dist/commands/ios/log.d.ts.map +1 -1
- package/dist/commands/ios/log.js +31 -8
- package/dist/commands/ios/log.js.map +1 -1
- package/dist/commands/ios/lsof.d.ts +15 -0
- package/dist/commands/ios/lsof.d.ts.map +1 -0
- package/dist/commands/ios/lsof.js +49 -0
- package/dist/commands/ios/lsof.js.map +1 -0
- package/dist/commands/ios/open-url.d.ts +17 -0
- package/dist/commands/ios/open-url.d.ts.map +1 -0
- package/dist/commands/ios/open-url.js +53 -0
- package/dist/commands/ios/open-url.js.map +1 -0
- package/dist/commands/ios/perform.d.ts +17 -0
- package/dist/commands/ios/perform.d.ts.map +1 -0
- package/dist/commands/ios/perform.js +230 -0
- package/dist/commands/ios/perform.js.map +1 -0
- package/dist/commands/ios/press-key.d.ts +18 -0
- package/dist/commands/ios/press-key.d.ts.map +1 -0
- package/dist/commands/ios/press-key.js +54 -0
- package/dist/commands/ios/press-key.js.map +1 -0
- package/dist/commands/ios/record.d.ts +21 -0
- package/dist/commands/ios/record.d.ts.map +1 -0
- package/dist/commands/ios/record.js +106 -0
- package/dist/commands/ios/record.js.map +1 -0
- package/dist/commands/ios/screenshot.d.ts +16 -0
- package/dist/commands/ios/screenshot.d.ts.map +1 -0
- package/dist/commands/ios/screenshot.js +69 -0
- package/dist/commands/ios/screenshot.js.map +1 -0
- package/dist/commands/ios/scroll.d.ts +18 -0
- package/dist/commands/ios/scroll.d.ts.map +1 -0
- package/dist/commands/ios/scroll.js +58 -0
- package/dist/commands/ios/scroll.js.map +1 -0
- package/dist/commands/ios/simctl.d.ts +16 -0
- package/dist/commands/ios/simctl.d.ts.map +1 -0
- package/dist/commands/ios/simctl.js +75 -0
- package/dist/commands/ios/simctl.js.map +1 -0
- package/dist/commands/ios/sync.d.ts +22 -0
- package/dist/commands/ios/sync.d.ts.map +1 -0
- package/dist/commands/ios/sync.js +100 -0
- package/dist/commands/ios/sync.js.map +1 -0
- package/dist/commands/ios/syslog.d.ts +15 -0
- package/dist/commands/ios/syslog.d.ts.map +1 -0
- package/dist/commands/ios/syslog.js +65 -0
- package/dist/commands/ios/syslog.js.map +1 -0
- package/dist/commands/ios/tap-element.d.ts +22 -0
- package/dist/commands/ios/tap-element.d.ts.map +1 -0
- package/dist/commands/ios/tap-element.js +94 -0
- package/dist/commands/ios/tap-element.js.map +1 -0
- package/dist/commands/ios/tap.d.ts +24 -0
- package/dist/commands/ios/tap.d.ts.map +1 -0
- package/dist/commands/ios/tap.js +57 -0
- package/dist/commands/ios/tap.js.map +1 -0
- package/dist/commands/ios/terminate-app.d.ts +2 -1
- package/dist/commands/ios/terminate-app.d.ts.map +1 -1
- package/dist/commands/ios/terminate-app.js +9 -3
- package/dist/commands/ios/terminate-app.js.map +1 -1
- package/dist/commands/ios/type.d.ts +18 -0
- package/dist/commands/ios/type.d.ts.map +1 -0
- package/dist/commands/ios/type.js +55 -0
- package/dist/commands/ios/type.js.map +1 -0
- package/dist/commands/ios/xcodebuild.d.ts +16 -0
- package/dist/commands/ios/xcodebuild.d.ts.map +1 -0
- package/dist/commands/ios/xcodebuild.js +61 -0
- package/dist/commands/ios/xcodebuild.js.map +1 -0
- package/dist/commands/ios/xcrun.d.ts +16 -0
- package/dist/commands/ios/xcrun.d.ts.map +1 -0
- package/dist/commands/ios/xcrun.js +62 -0
- package/dist/commands/ios/xcrun.js.map +1 -0
- package/dist/commands/login.d.ts +8 -2
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +7 -3
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logout.d.ts +8 -2
- package/dist/commands/logout.d.ts.map +1 -1
- package/dist/commands/logout.js +7 -3
- package/dist/commands/logout.js.map +1 -1
- package/dist/commands/session/start.d.ts +1 -0
- package/dist/commands/session/start.d.ts.map +1 -1
- package/dist/commands/session/start.js +4 -2
- package/dist/commands/session/start.js.map +1 -1
- package/dist/commands/session/status.d.ts +2 -0
- package/dist/commands/session/status.d.ts.map +1 -1
- package/dist/commands/session/status.js +2 -1
- package/dist/commands/session/status.js.map +1 -1
- package/dist/commands/session/stop.d.ts +5 -2
- package/dist/commands/session/stop.d.ts.map +1 -1
- package/dist/commands/session/stop.js +12 -5
- package/dist/commands/session/stop.js.map +1 -1
- package/dist/commands/{build.d.ts → xcode/build.d.ts} +6 -3
- package/dist/commands/xcode/build.d.ts.map +1 -0
- package/dist/commands/xcode/build.js +117 -0
- package/dist/commands/xcode/build.js.map +1 -0
- package/dist/commands/xcode/create.d.ts +1 -1
- package/dist/commands/xcode/create.d.ts.map +1 -1
- package/dist/commands/xcode/create.js +28 -14
- package/dist/commands/xcode/create.js.map +1 -1
- package/dist/commands/xcode/delete.d.ts +2 -1
- package/dist/commands/xcode/delete.d.ts.map +1 -1
- package/dist/commands/xcode/delete.js +4 -4
- package/dist/commands/xcode/delete.js.map +1 -1
- package/dist/commands/xcode/get.d.ts +2 -1
- package/dist/commands/xcode/get.d.ts.map +1 -1
- package/dist/commands/xcode/get.js +3 -3
- package/dist/commands/xcode/get.js.map +1 -1
- package/dist/commands/xcode/list.d.ts +2 -0
- package/dist/commands/xcode/list.d.ts.map +1 -1
- package/dist/commands/xcode/list.js +16 -4
- package/dist/commands/xcode/list.js.map +1 -1
- package/dist/commands/{sync.d.ts → xcode/sync.d.ts} +6 -3
- package/dist/commands/xcode/sync.d.ts.map +1 -0
- package/dist/commands/xcode/sync.js +107 -0
- package/dist/commands/xcode/sync.js.map +1 -0
- package/dist/lib/android-selector.d.ts +50 -0
- package/dist/lib/android-selector.d.ts.map +1 -0
- package/dist/lib/android-selector.js +103 -0
- package/dist/lib/android-selector.js.map +1 -0
- package/dist/lib/daemon-client.d.ts +1 -1
- package/dist/lib/daemon-client.d.ts.map +1 -1
- package/dist/lib/daemon-client.js +2 -2
- package/dist/lib/daemon-client.js.map +1 -1
- package/dist/lib/daemon.d.ts.map +1 -1
- package/dist/lib/daemon.js +37 -3
- package/dist/lib/daemon.js.map +1 -1
- package/dist/lib/ignore-patterns.d.ts +2 -0
- package/dist/lib/ignore-patterns.d.ts.map +1 -0
- package/dist/lib/ignore-patterns.js +18 -0
- package/dist/lib/ignore-patterns.js.map +1 -0
- package/dist/lib/instance-client-factory.d.ts +1 -1
- package/dist/lib/instance-client-factory.d.ts.map +1 -1
- package/dist/lib/instance-client-factory.js +2 -2
- package/dist/lib/instance-client-factory.js.map +1 -1
- package/package.json +7 -19
- package/dist/commands/build.d.ts.map +0 -1
- package/dist/commands/build.js +0 -93
- package/dist/commands/build.js.map +0 -1
- package/dist/commands/delete/index.d.ts.map +0 -1
- package/dist/commands/delete/index.js +0 -48
- package/dist/commands/delete/index.js.map +0 -1
- package/dist/commands/sync.d.ts.map +0 -1
- package/dist/commands/sync.js +0 -85
- package/dist/commands/sync.js.map +0 -1
|
@@ -0,0 +1,117 @@
|
|
|
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
|
+
const config_1 = require("../../lib/config");
|
|
7
|
+
const ignore_patterns_1 = require("../../lib/ignore-patterns");
|
|
8
|
+
class XcodeBuild extends base_command_1.BaseCommand {
|
|
9
|
+
async run() {
|
|
10
|
+
const { args, flags } = await this.parse(XcodeBuild);
|
|
11
|
+
this.setParsedFlags(flags);
|
|
12
|
+
await this.withAuth(async () => {
|
|
13
|
+
const id = this.resolveId(flags.id);
|
|
14
|
+
const syncPath = args.path ?? process.cwd();
|
|
15
|
+
const xcodeClient = await this.resolveXcodeClientFromIosInstance(id);
|
|
16
|
+
const settings = {};
|
|
17
|
+
if (flags.scheme)
|
|
18
|
+
settings.scheme = flags.scheme;
|
|
19
|
+
if (flags.workspace)
|
|
20
|
+
settings.workspace = flags.workspace;
|
|
21
|
+
if (flags.project)
|
|
22
|
+
settings.project = flags.project;
|
|
23
|
+
const options = {};
|
|
24
|
+
if (flags.upload) {
|
|
25
|
+
options.upload = { assetName: flags.upload };
|
|
26
|
+
}
|
|
27
|
+
this.info(`Syncing ${syncPath} to instance ${id}...`);
|
|
28
|
+
await xcodeClient.sync(syncPath, {
|
|
29
|
+
watch: false,
|
|
30
|
+
install: false,
|
|
31
|
+
basisCacheDir: flags['basis-cache-dir'],
|
|
32
|
+
maxPatchBytes: flags['max-patch-bytes'],
|
|
33
|
+
ignore: (0, ignore_patterns_1.compileIgnorePatterns)(flags.ignore),
|
|
34
|
+
});
|
|
35
|
+
this.info('Sync complete.');
|
|
36
|
+
this.info('Starting xcodebuild...');
|
|
37
|
+
const proc = xcodeClient.xcodebuild(Object.keys(settings).length > 0 ? settings : undefined, Object.keys(options).length > 0 ? options : undefined);
|
|
38
|
+
proc.stdout.on('data', (chunk) => {
|
|
39
|
+
process.stdout.write(chunk);
|
|
40
|
+
});
|
|
41
|
+
proc.stderr.on('data', (chunk) => {
|
|
42
|
+
process.stderr.write(chunk);
|
|
43
|
+
});
|
|
44
|
+
const result = await proc;
|
|
45
|
+
if (result.exitCode !== 0) {
|
|
46
|
+
this.error(`xcodebuild failed with exit code ${result.exitCode}`, { exit: result.exitCode });
|
|
47
|
+
}
|
|
48
|
+
this.output(`\nBuild succeeded (exit code ${result.exitCode})`);
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
async resolveXcodeClientFromIosInstance(id) {
|
|
52
|
+
const type = (0, instance_client_factory_1.detectInstanceType)(id).toString();
|
|
53
|
+
if (type === 'ios') {
|
|
54
|
+
const instance = await this.client.iosInstances.get(id);
|
|
55
|
+
let sandboxUrl = instance.status.sandbox?.xcode?.url;
|
|
56
|
+
let token = instance.status.token;
|
|
57
|
+
if (!sandboxUrl) {
|
|
58
|
+
const cached = (0, config_1.loadInstanceCache)(id);
|
|
59
|
+
if (cached?.sandboxXcodeUrl) {
|
|
60
|
+
sandboxUrl = cached.sandboxXcodeUrl;
|
|
61
|
+
token = cached.token || token;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
if (!sandboxUrl) {
|
|
65
|
+
this.error(`iOS instance ${id} does not have a Xcode sandbox. Create it with: lim ios create --xcode`);
|
|
66
|
+
}
|
|
67
|
+
return this.client.xcodeInstances.createClient({
|
|
68
|
+
apiUrl: sandboxUrl,
|
|
69
|
+
token,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
const instance = await this.client.xcodeInstances.get(id);
|
|
73
|
+
return this.client.xcodeInstances.createClient({ instance });
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
XcodeBuild.summary = 'Run xcodebuild on an Xcode sandbox';
|
|
77
|
+
XcodeBuild.description = 'Sync a local project path once (or the current working directory if omitted), then trigger a remote xcodebuild with streaming output. This works with standalone Xcode instances and can also target an iOS instance with `--xcode` enabled when you pass `--id`.';
|
|
78
|
+
XcodeBuild.examples = [
|
|
79
|
+
'<%= config.bin %> xcode build',
|
|
80
|
+
'<%= config.bin %> xcode build ./MyProject',
|
|
81
|
+
'<%= config.bin %> xcode build --id <xcode-instance-ID>',
|
|
82
|
+
'<%= config.bin %> xcode build ./MyProject --id <xcode-instance-ID>',
|
|
83
|
+
'<%= config.bin %> xcode build --scheme MyApp --workspace MyApp.xcworkspace',
|
|
84
|
+
'<%= config.bin %> xcode build --id <ios-instance-ID> --project MyApp.xcodeproj --upload ios-build.zip',
|
|
85
|
+
'<%= config.bin %> xcode build ./MyProject --basis-cache-dir ./.limsync-cache --max-patch-bytes 2097152',
|
|
86
|
+
'<%= config.bin %> xcode build ./MyProject --ignore "\\\\.xcuserdata/"',
|
|
87
|
+
];
|
|
88
|
+
XcodeBuild.args = {
|
|
89
|
+
path: core_1.Args.string({
|
|
90
|
+
description: 'Local project path to sync before building. Defaults to the current working directory.',
|
|
91
|
+
required: false,
|
|
92
|
+
}),
|
|
93
|
+
};
|
|
94
|
+
XcodeBuild.flags = {
|
|
95
|
+
...base_command_1.BaseCommand.baseFlags,
|
|
96
|
+
id: core_1.Flags.string({
|
|
97
|
+
description: 'Xcode instance ID to build on, or an iOS instance ID with `--xcode` enabled. Defaults to the last created Xcode instance.',
|
|
98
|
+
}),
|
|
99
|
+
scheme: core_1.Flags.string({ description: 'Xcode scheme to build, such as MyApp' }),
|
|
100
|
+
workspace: core_1.Flags.string({
|
|
101
|
+
description: 'Workspace file to pass to xcodebuild, such as MyApp.xcworkspace',
|
|
102
|
+
}),
|
|
103
|
+
project: core_1.Flags.string({ description: 'Project file to pass to xcodebuild, such as MyApp.xcodeproj' }),
|
|
104
|
+
upload: core_1.Flags.string({ description: 'Upload the resulting build artifact as an asset with this name' }),
|
|
105
|
+
'basis-cache-dir': core_1.Flags.string({
|
|
106
|
+
description: 'Directory to use for the client-side delta sync cache during the pre-build sync step.',
|
|
107
|
+
}),
|
|
108
|
+
'max-patch-bytes': core_1.Flags.integer({
|
|
109
|
+
description: 'Maximum patch size in bytes before falling back to a full upload during sync.',
|
|
110
|
+
}),
|
|
111
|
+
ignore: core_1.Flags.string({
|
|
112
|
+
description: 'Regular expression to ignore matching relative paths during the pre-build sync. Repeat for multiple patterns.',
|
|
113
|
+
multiple: true,
|
|
114
|
+
}),
|
|
115
|
+
};
|
|
116
|
+
exports.default = XcodeBuild;
|
|
117
|
+
//# sourceMappingURL=build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/commands/xcode/build.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,6 @@ import { BaseCommand } from '../../base-command';
|
|
|
2
2
|
export default class XcodeCreate extends BaseCommand {
|
|
3
3
|
static summary: string;
|
|
4
4
|
static description: string;
|
|
5
|
-
static aliases: string[];
|
|
6
5
|
static examples: string[];
|
|
7
6
|
static flags: {
|
|
8
7
|
rm: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
@@ -14,6 +13,7 @@ export default class XcodeCreate extends BaseCommand {
|
|
|
14
13
|
'reuse-if-exists': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
15
14
|
'api-key': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
16
15
|
json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
16
|
+
quiet: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
17
17
|
};
|
|
18
18
|
run(): Promise<void>;
|
|
19
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/xcode/create.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAKjD,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,WAAW;IAClD,MAAM,CAAC,OAAO,SAAiC;IAC/C,MAAM,CAAC,WAAW,
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/xcode/create.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAKjD,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,WAAW;IAClD,MAAM,CAAC,OAAO,SAAiC;IAC/C,MAAM,CAAC,WAAW,SACoK;IAEtL,MAAM,CAAC,QAAQ,WAIb;IAEF,MAAM,CAAC,KAAK;;;;;;;;;;;MAoBV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA+D3B"}
|
|
@@ -30,25 +30,31 @@ class XcodeCreate extends base_command_1.BaseCommand {
|
|
|
30
30
|
}
|
|
31
31
|
const start = Date.now();
|
|
32
32
|
const instance = await this.client.xcodeInstances.create(params);
|
|
33
|
+
const consoleUrl = this.consoleStreamUrl(instance.metadata.id);
|
|
33
34
|
(0, config_1.saveLastInstanceId)(instance.metadata.id);
|
|
34
|
-
this.
|
|
35
|
-
this.
|
|
36
|
-
this.
|
|
37
|
-
this.
|
|
35
|
+
this.info(`Created a new Xcode instance in ${((Date.now() - start) / 1000).toFixed(1)}s`);
|
|
36
|
+
this.info('Xcode Instance:');
|
|
37
|
+
this.info(` ID: ${instance.metadata.id}`);
|
|
38
|
+
this.info(` Console URL: ${consoleUrl}`);
|
|
39
|
+
this.info(` Region: ${instance.spec.region}`);
|
|
40
|
+
this.info(` State: ${instance.status.state}`);
|
|
38
41
|
if (flags.json) {
|
|
39
42
|
this.outputJson(instance);
|
|
40
43
|
}
|
|
44
|
+
else if (this.isQuietEnabled()) {
|
|
45
|
+
this.output(instance.metadata.id);
|
|
46
|
+
}
|
|
41
47
|
if (flags.rm) {
|
|
42
48
|
const cleanup = async () => {
|
|
43
49
|
try {
|
|
44
50
|
await this.client.xcodeInstances.delete(instance.metadata.id);
|
|
45
|
-
this.
|
|
51
|
+
this.info(`${instance.metadata.id} is deleted`);
|
|
46
52
|
}
|
|
47
53
|
catch (e) {
|
|
48
|
-
this.
|
|
54
|
+
this.info(`Failed to delete instance: ${e}`);
|
|
49
55
|
}
|
|
50
56
|
};
|
|
51
|
-
this.
|
|
57
|
+
this.info('Instance running. Press Ctrl+C to stop and delete.');
|
|
52
58
|
await new Promise((resolve) => {
|
|
53
59
|
const keepAlive = setInterval(() => { }, 1 << 30);
|
|
54
60
|
const shutdown = () => {
|
|
@@ -64,22 +70,30 @@ class XcodeCreate extends base_command_1.BaseCommand {
|
|
|
64
70
|
}
|
|
65
71
|
}
|
|
66
72
|
XcodeCreate.summary = 'Create a new Xcode instance';
|
|
67
|
-
XcodeCreate.description = '
|
|
68
|
-
XcodeCreate.aliases = ['run xcode'];
|
|
73
|
+
XcodeCreate.description = 'Create a new cloud Xcode sandbox for remote sync and build workflows. You can attach labels, choose a region, and optionally delete the sandbox automatically when the CLI exits.';
|
|
69
74
|
XcodeCreate.examples = [
|
|
70
75
|
'<%= config.bin %> xcode create',
|
|
71
76
|
'<%= config.bin %> xcode create --rm --region us-west',
|
|
77
|
+
'<%= config.bin %> xcode create --label env=dev --display-name ci-builder',
|
|
72
78
|
];
|
|
73
79
|
XcodeCreate.flags = {
|
|
74
80
|
...base_command_1.BaseCommand.baseFlags,
|
|
75
|
-
rm: core_1.Flags.boolean({
|
|
76
|
-
|
|
77
|
-
|
|
81
|
+
rm: core_1.Flags.boolean({
|
|
82
|
+
description: 'Delete the instance automatically when this CLI process exits',
|
|
83
|
+
default: false,
|
|
84
|
+
}),
|
|
85
|
+
'display-name': core_1.Flags.string({
|
|
86
|
+
description: 'Human-friendly display name shown in listings and the console',
|
|
87
|
+
}),
|
|
88
|
+
region: core_1.Flags.string({ description: 'Region where the sandbox should be created, such as us-west' }),
|
|
78
89
|
'hard-timeout': core_1.Flags.string({ description: 'Hard timeout (e.g. 1m, 10m, 3h). Default: no timeout' }),
|
|
79
90
|
'inactivity-timeout': core_1.Flags.string({ description: 'Inactivity timeout (e.g. 1m, 10m, 3h). Default: 3m' }),
|
|
80
|
-
label: core_1.Flags.string({
|
|
91
|
+
label: core_1.Flags.string({
|
|
92
|
+
description: 'Metadata label in key=value format. Repeat to attach multiple labels.',
|
|
93
|
+
multiple: true,
|
|
94
|
+
}),
|
|
81
95
|
'reuse-if-exists': core_1.Flags.boolean({
|
|
82
|
-
description: 'Reuse existing instance
|
|
96
|
+
description: 'Reuse an existing matching instance instead of creating a new one',
|
|
83
97
|
default: false,
|
|
84
98
|
}),
|
|
85
99
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/xcode/create.ts"],"names":[],"mappings":";;AAAA,sCAAoC;AACpC,qDAAiD;AACjD,qDAAmD;AACnD,6CAAsD;AAGtD,MAAqB,WAAY,SAAQ,0BAAW;
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/xcode/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { BaseCommand } from '../../base-command';
|
|
2
2
|
export default class XcodeDelete extends BaseCommand {
|
|
3
3
|
static summary: string;
|
|
4
|
-
static
|
|
4
|
+
static description: string;
|
|
5
5
|
static examples: string[];
|
|
6
6
|
static args: {
|
|
7
7
|
id: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
|
|
@@ -9,6 +9,7 @@ export default class XcodeDelete extends BaseCommand {
|
|
|
9
9
|
static flags: {
|
|
10
10
|
'api-key': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
11
11
|
json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
12
|
+
quiet: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
12
13
|
};
|
|
13
14
|
run(): Promise<void>;
|
|
14
15
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/commands/xcode/delete.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,WAAW;IAClD,MAAM,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/commands/xcode/delete.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,WAAW;IAClD,MAAM,CAAC,OAAO,SAA8B;IAC5C,MAAM,CAAC,WAAW,SAAsD;IACxE,MAAM,CAAC,QAAQ,WAA0F;IAEzG,MAAM,CAAC,IAAI;;MAET;IAEF,MAAM,CAAC,KAAK;;;;MAAgC;IAEtC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAS3B"}
|
|
@@ -12,11 +12,11 @@ class XcodeDelete extends base_command_1.BaseCommand {
|
|
|
12
12
|
});
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
|
-
XcodeDelete.summary = 'Delete
|
|
16
|
-
XcodeDelete.
|
|
17
|
-
XcodeDelete.examples = ['<%= config.bin %> xcode delete <ID>'];
|
|
15
|
+
XcodeDelete.summary = 'Delete an Xcode instance';
|
|
16
|
+
XcodeDelete.description = 'Delete an existing Xcode sandbox instance by ID.';
|
|
17
|
+
XcodeDelete.examples = ['<%= config.bin %> xcode delete <ID>', '<%= config.bin %> xcode delete xcode_abc123'];
|
|
18
18
|
XcodeDelete.args = {
|
|
19
|
-
id: core_1.Args.string({ description: '
|
|
19
|
+
id: core_1.Args.string({ description: 'Xcode instance ID to delete', required: true }),
|
|
20
20
|
};
|
|
21
21
|
XcodeDelete.flags = { ...base_command_1.BaseCommand.baseFlags };
|
|
22
22
|
exports.default = XcodeDelete;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/commands/xcode/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,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjD,IAAI,CAAC,GAAG,CAAC,2BAA2B,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACL,CAAC;;AAlBM,mBAAO,GAAG,
|
|
1
|
+
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/commands/xcode/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,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjD,IAAI,CAAC,GAAG,CAAC,2BAA2B,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACL,CAAC;;AAlBM,mBAAO,GAAG,0BAA0B,CAAC;AACrC,uBAAW,GAAG,kDAAkD,CAAC;AACjE,oBAAQ,GAAG,CAAC,qCAAqC,EAAE,6CAA6C,CAAC,CAAC;AAElG,gBAAI,GAAG;IACZ,EAAE,EAAE,WAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,6BAA6B,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;CAChF,CAAC;AAEK,iBAAK,GAAG,EAAE,GAAG,0BAAW,CAAC,SAAS,EAAE,CAAC;kBATzB,WAAW"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { BaseCommand } from '../../base-command';
|
|
2
2
|
export default class XcodeGet extends BaseCommand {
|
|
3
3
|
static summary: string;
|
|
4
|
-
static
|
|
4
|
+
static description: string;
|
|
5
5
|
static examples: string[];
|
|
6
6
|
static args: {
|
|
7
7
|
id: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
|
|
@@ -9,6 +9,7 @@ export default class XcodeGet extends BaseCommand {
|
|
|
9
9
|
static flags: {
|
|
10
10
|
'api-key': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
11
11
|
json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
12
|
+
quiet: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
12
13
|
};
|
|
13
14
|
run(): Promise<void>;
|
|
14
15
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/commands/xcode/get.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,WAAW;IAC/C,MAAM,CAAC,OAAO,SAA+C;IAC7D,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/commands/xcode/get.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,WAAW;IAC/C,MAAM,CAAC,OAAO,SAA+C;IAC7D,MAAM,CAAC,WAAW,SACyI;IAC3J,MAAM,CAAC,QAAQ,WAAmF;IAElG,MAAM,CAAC,IAAI;;MAET;IAEF,MAAM,CAAC,KAAK;;;;MAAgC;IAEtC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAqB3B"}
|
|
@@ -23,10 +23,10 @@ class XcodeGet extends base_command_1.BaseCommand {
|
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
25
|
XcodeGet.summary = 'Get details for a specific Xcode instance';
|
|
26
|
-
XcodeGet.
|
|
27
|
-
XcodeGet.examples = ['<%= config.bin %> xcode get <ID>'];
|
|
26
|
+
XcodeGet.description = 'Fetch detailed metadata for a single Xcode sandbox instance, including region, state, and display name. Use `--json` to inspect the full API response.';
|
|
27
|
+
XcodeGet.examples = ['<%= config.bin %> xcode get <ID>', '<%= config.bin %> xcode get <ID> --json'];
|
|
28
28
|
XcodeGet.args = {
|
|
29
|
-
id: core_1.Args.string({ description: '
|
|
29
|
+
id: core_1.Args.string({ description: 'Xcode instance ID to fetch', required: true }),
|
|
30
30
|
};
|
|
31
31
|
XcodeGet.flags = { ...base_command_1.BaseCommand.baseFlags };
|
|
32
32
|
exports.default = XcodeGet;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/commands/xcode/get.ts"],"names":[],"mappings":";;AAAA,sCAAmC;AACnC,qDAAiD;AAEjD,MAAqB,QAAS,SAAQ,0BAAW;
|
|
1
|
+
{"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/commands/xcode/get.ts"],"names":[],"mappings":";;AAAA,sCAAmC;AACnC,qDAAiD;AAEjD,MAAqB,QAAS,SAAQ,0BAAW;IAY/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,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC/D,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACf,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,WAAW,CACd,CAAC,OAAO,EAAE,OAAO,CAAC,EAClB;oBACE,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC5B,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,WAAW,IAAI,EAAE,CAAC;oBAC7C,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;oBAChC,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;iBACjC,CACF,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;;AA/BM,gBAAO,GAAG,2CAA2C,CAAC;AACtD,oBAAW,GAChB,wJAAwJ,CAAC;AACpJ,iBAAQ,GAAG,CAAC,kCAAkC,EAAE,yCAAyC,CAAC,CAAC;AAE3F,aAAI,GAAG;IACZ,EAAE,EAAE,WAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,4BAA4B,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;CAC/E,CAAC;AAEK,cAAK,GAAG,EAAE,GAAG,0BAAW,CAAC,SAAS,EAAE,CAAC;kBAVzB,QAAQ"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { BaseCommand } from '../../base-command';
|
|
2
2
|
export default class XcodeList extends BaseCommand {
|
|
3
3
|
static summary: string;
|
|
4
|
+
static description: string;
|
|
4
5
|
static examples: string[];
|
|
5
6
|
static args: {};
|
|
6
7
|
static flags: {
|
|
@@ -9,6 +10,7 @@ export default class XcodeList extends BaseCommand {
|
|
|
9
10
|
all: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
10
11
|
'api-key': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
11
12
|
json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
13
|
+
quiet: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
12
14
|
};
|
|
13
15
|
run(): Promise<void>;
|
|
14
16
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/xcode/list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,WAAW;IAChD,MAAM,CAAC,OAAO,SAA0B;IACxC,MAAM,CAAC,QAAQ,
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/xcode/list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,WAAW;IAChD,MAAM,CAAC,OAAO,SAA0B;IACxC,MAAM,CAAC,WAAW,SACuI;IACzJ,MAAM,CAAC,QAAQ,WAIb;IAEF,MAAM,CAAC,IAAI,KAAM;IAEjB,MAAM,CAAC,KAAK;;;;;;;MAYV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA6B3B"}
|
|
@@ -34,13 +34,25 @@ class XcodeList extends base_command_1.BaseCommand {
|
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
36
|
XcodeList.summary = 'List Xcode instances';
|
|
37
|
-
XcodeList.
|
|
37
|
+
XcodeList.description = 'List Xcode sandbox instances in your account. By default only ready sandboxes are shown; use `--all` or `--state` to inspect other lifecycle states.';
|
|
38
|
+
XcodeList.examples = [
|
|
39
|
+
'<%= config.bin %> xcode list',
|
|
40
|
+
'<%= config.bin %> xcode list --all',
|
|
41
|
+
'<%= config.bin %> xcode list --label-selector env=prod',
|
|
42
|
+
];
|
|
38
43
|
XcodeList.args = {};
|
|
39
44
|
XcodeList.flags = {
|
|
40
45
|
...base_command_1.BaseCommand.baseFlags,
|
|
41
|
-
state: core_1.Flags.string({
|
|
42
|
-
|
|
43
|
-
|
|
46
|
+
state: core_1.Flags.string({
|
|
47
|
+
description: 'Lifecycle state to filter by: unknown, creating, ready, or terminated',
|
|
48
|
+
}),
|
|
49
|
+
'label-selector': core_1.Flags.string({
|
|
50
|
+
description: 'Comma-separated label filters, for example env=prod,team=mobile',
|
|
51
|
+
}),
|
|
52
|
+
all: core_1.Flags.boolean({
|
|
53
|
+
description: 'Show all states instead of defaulting to ready instances only',
|
|
54
|
+
default: false,
|
|
55
|
+
}),
|
|
44
56
|
};
|
|
45
57
|
exports.default = XcodeList;
|
|
46
58
|
//# sourceMappingURL=list.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/xcode/list.ts"],"names":[],"mappings":";;AAAA,sCAAoC;AACpC,qDAAiD;AAEjD,MAAqB,SAAU,SAAQ,0BAAW;
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/xcode/list.ts"],"names":[],"mappings":";;AAAA,sCAAoC;AACpC,qDAAiD;AAEjD,MAAqB,SAAU,SAAQ,0BAAW;IA0BhD,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAE3B,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;YAC7B,MAAM,MAAM,GAA4B,EAAE,CAAC;YAC3C,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAChB,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;YAC7B,CAAC;iBAAM,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;gBACtB,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC;YACzB,CAAC;YACD,IAAI,KAAK,CAAC,gBAAgB,CAAC;gBAAE,MAAM,CAAC,aAAa,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAE5E,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,MAAa,CAAC,CAAC;YACvE,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,iBAAiB,EAAE,CAAC;YAC/D,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC;gBACjC,CAAC,CAAC,QAAQ,CAAC,EAAE;gBACb,CAAC,CAAC,QAAQ,CAAC,WAAW,IAAI,EAAE;gBAC5B,CAAC,CAAC,IAAI,CAAC,MAAM;gBACb,CAAC,CAAC,MAAM,CAAC,KAAK;aACf,CAAC,CAAC;YAEH,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACf,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;;AArDM,iBAAO,GAAG,sBAAsB,CAAC;AACjC,qBAAW,GAChB,sJAAsJ,CAAC;AAClJ,kBAAQ,GAAG;IAChB,8BAA8B;IAC9B,oCAAoC;IACpC,wDAAwD;CACzD,CAAC;AAEK,cAAI,GAAG,EAAE,CAAC;AAEV,eAAK,GAAG;IACb,GAAG,0BAAW,CAAC,SAAS;IACxB,KAAK,EAAE,YAAK,CAAC,MAAM,CAAC;QAClB,WAAW,EAAE,uEAAuE;KACrF,CAAC;IACF,gBAAgB,EAAE,YAAK,CAAC,MAAM,CAAC;QAC7B,WAAW,EAAE,iEAAiE;KAC/E,CAAC;IACF,GAAG,EAAE,YAAK,CAAC,OAAO,CAAC;QACjB,WAAW,EAAE,+DAA+D;QAC5E,OAAO,EAAE,KAAK;KACf,CAAC;CACH,CAAC;kBAxBiB,SAAS"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { BaseCommand } from '
|
|
2
|
-
export default class
|
|
1
|
+
import { BaseCommand } from '../../base-command';
|
|
2
|
+
export default class XcodeSync extends BaseCommand {
|
|
3
3
|
static summary: string;
|
|
4
|
-
static aliases: string[];
|
|
5
4
|
static description: string;
|
|
6
5
|
static examples: string[];
|
|
7
6
|
static args: {
|
|
@@ -11,8 +10,12 @@ export default class Sync extends BaseCommand {
|
|
|
11
10
|
id: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
12
11
|
watch: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
13
12
|
install: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
13
|
+
'basis-cache-dir': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
14
|
+
'max-patch-bytes': import("@oclif/core/lib/interfaces").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
15
|
+
ignore: import("@oclif/core/lib/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
14
16
|
'api-key': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
15
17
|
json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
18
|
+
quiet: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
16
19
|
};
|
|
17
20
|
run(): Promise<void>;
|
|
18
21
|
private resolveXcodeClient;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../src/commands/xcode/sync.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAKjD,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,WAAW;IAChD,MAAM,CAAC,OAAO,SAA6D;IAC3E,MAAM,CAAC,WAAW,SAC8Z;IAEhb,MAAM,CAAC,QAAQ,WAMb;IAEF,MAAM,CAAC,IAAI;;MAKT;IAEF,MAAM,CAAC,KAAK;;;;;;;;;;MA2BV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;YAqCZ,kBAAkB;CA8BjC"}
|
|
@@ -0,0 +1,107 @@
|
|
|
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 ignore_patterns_1 = require("../../lib/ignore-patterns");
|
|
6
|
+
const instance_client_factory_1 = require("../../lib/instance-client-factory");
|
|
7
|
+
const config_1 = require("../../lib/config");
|
|
8
|
+
class XcodeSync extends base_command_1.BaseCommand {
|
|
9
|
+
async run() {
|
|
10
|
+
const { args, flags } = await this.parse(XcodeSync);
|
|
11
|
+
this.setParsedFlags(flags);
|
|
12
|
+
await this.withAuth(async () => {
|
|
13
|
+
const id = this.resolveId(flags.id);
|
|
14
|
+
const syncPath = args.path ?? process.cwd();
|
|
15
|
+
const xcodeClient = await this.resolveXcodeClient(id);
|
|
16
|
+
this.info(`Syncing ${syncPath} to instance ${id}...`);
|
|
17
|
+
const result = await xcodeClient.sync(syncPath, {
|
|
18
|
+
watch: flags.watch,
|
|
19
|
+
install: flags.install,
|
|
20
|
+
basisCacheDir: flags['basis-cache-dir'],
|
|
21
|
+
maxPatchBytes: flags['max-patch-bytes'],
|
|
22
|
+
ignore: (0, ignore_patterns_1.compileIgnorePatterns)(flags.ignore),
|
|
23
|
+
});
|
|
24
|
+
this.output('Sync complete.');
|
|
25
|
+
if (flags.watch && result.stopWatching) {
|
|
26
|
+
this.output('Watching for changes. Press Ctrl+C to stop.');
|
|
27
|
+
await new Promise((resolve) => {
|
|
28
|
+
const keepAlive = setInterval(() => { }, 1 << 30);
|
|
29
|
+
const shutdown = () => {
|
|
30
|
+
clearInterval(keepAlive);
|
|
31
|
+
result.stopWatching();
|
|
32
|
+
resolve();
|
|
33
|
+
};
|
|
34
|
+
process.on('SIGINT', shutdown);
|
|
35
|
+
process.on('SIGTERM', shutdown);
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
async resolveXcodeClient(id) {
|
|
41
|
+
const type = (0, instance_client_factory_1.detectInstanceType)(id).toString();
|
|
42
|
+
if (type === 'ios') {
|
|
43
|
+
const instance = await this.client.iosInstances.get(id);
|
|
44
|
+
let sandboxUrl = instance.status.sandbox?.xcode?.url;
|
|
45
|
+
let token = instance.status.token;
|
|
46
|
+
if (!sandboxUrl) {
|
|
47
|
+
const cached = (0, config_1.loadInstanceCache)(id);
|
|
48
|
+
if (cached?.sandboxXcodeUrl) {
|
|
49
|
+
sandboxUrl = cached.sandboxXcodeUrl;
|
|
50
|
+
token = cached.token || token;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
if (!sandboxUrl) {
|
|
54
|
+
this.error(`iOS instance ${id} does not have a Xcode sandbox. Create it with: lim ios create --xcode`);
|
|
55
|
+
}
|
|
56
|
+
return this.client.xcodeInstances.createClient({
|
|
57
|
+
apiUrl: sandboxUrl,
|
|
58
|
+
token,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
const instance = await this.client.xcodeInstances.get(id);
|
|
62
|
+
return this.client.xcodeInstances.createClient({ instance });
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
XcodeSync.summary = 'Continuously sync local source code to an Xcode sandbox';
|
|
66
|
+
XcodeSync.description = 'Push local source code and project files (or the current working directory if omitted) to a remote Xcode sandbox with optional watch mode. This command is mostly useful for continuous sync workflows with `--watch`; for most one-shot builds, use `xcode build`, which already syncs the project path first. This works with standalone Xcode instances and can also target an iOS instance with `--xcode` enabled when you pass `--id`.';
|
|
67
|
+
XcodeSync.examples = [
|
|
68
|
+
'<%= config.bin %> xcode sync --watch',
|
|
69
|
+
'<%= config.bin %> xcode sync ./MyProject --id <ios-instance-ID> --no-install',
|
|
70
|
+
'<%= config.bin %> xcode build ./MyProject --scheme MyApp',
|
|
71
|
+
'<%= config.bin %> xcode sync ./MyProject --basis-cache-dir ./.limsync-cache --max-patch-bytes 2097152',
|
|
72
|
+
'<%= config.bin %> xcode sync ./MyProject --ignore "\\\\.xcuserdata/" --ignore "^DerivedData/"',
|
|
73
|
+
];
|
|
74
|
+
XcodeSync.args = {
|
|
75
|
+
path: core_1.Args.string({
|
|
76
|
+
description: 'Local source code or project path to sync. Defaults to the current working directory.',
|
|
77
|
+
required: false,
|
|
78
|
+
}),
|
|
79
|
+
};
|
|
80
|
+
XcodeSync.flags = {
|
|
81
|
+
...base_command_1.BaseCommand.baseFlags,
|
|
82
|
+
id: core_1.Flags.string({
|
|
83
|
+
description: 'Xcode instance ID to sync to, or an iOS instance ID with `--xcode` enabled. Defaults to the last created Xcode instance.',
|
|
84
|
+
}),
|
|
85
|
+
watch: core_1.Flags.boolean({
|
|
86
|
+
description: 'Keep watching the local source tree and push changes automatically',
|
|
87
|
+
default: false,
|
|
88
|
+
allowNo: true,
|
|
89
|
+
}),
|
|
90
|
+
install: core_1.Flags.boolean({
|
|
91
|
+
description: 'Run install behavior after each sync when the sandbox supports it',
|
|
92
|
+
default: true,
|
|
93
|
+
allowNo: true,
|
|
94
|
+
}),
|
|
95
|
+
'basis-cache-dir': core_1.Flags.string({
|
|
96
|
+
description: 'Directory to use for the client-side delta sync cache.',
|
|
97
|
+
}),
|
|
98
|
+
'max-patch-bytes': core_1.Flags.integer({
|
|
99
|
+
description: 'Maximum patch size in bytes before falling back to a full upload.',
|
|
100
|
+
}),
|
|
101
|
+
ignore: core_1.Flags.string({
|
|
102
|
+
description: 'Regular expression to ignore matching relative paths during sync. Repeat for multiple patterns.',
|
|
103
|
+
multiple: true,
|
|
104
|
+
}),
|
|
105
|
+
};
|
|
106
|
+
exports.default = XcodeSync;
|
|
107
|
+
//# sourceMappingURL=sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../src/commands/xcode/sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { AndroidElementTarget, AndroidSelector } from '@limrun/api';
|
|
2
|
+
type SelectorFlagValues = {
|
|
3
|
+
'resource-id'?: string;
|
|
4
|
+
text?: string;
|
|
5
|
+
'content-desc'?: string;
|
|
6
|
+
'class-name'?: string;
|
|
7
|
+
'package-name'?: string;
|
|
8
|
+
index?: number;
|
|
9
|
+
clickable?: boolean;
|
|
10
|
+
enabled?: boolean;
|
|
11
|
+
focused?: boolean;
|
|
12
|
+
'bounds-contains-x'?: number;
|
|
13
|
+
'bounds-contains-y'?: number;
|
|
14
|
+
};
|
|
15
|
+
type TargetFlagValues = SelectorFlagValues & {
|
|
16
|
+
x?: number;
|
|
17
|
+
y?: number;
|
|
18
|
+
};
|
|
19
|
+
export declare const androidSelectorFlags: {
|
|
20
|
+
'resource-id': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
21
|
+
text: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
22
|
+
'content-desc': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
23
|
+
'class-name': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
24
|
+
'package-name': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
25
|
+
index: import("@oclif/core/lib/interfaces").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
26
|
+
clickable: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
27
|
+
enabled: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
28
|
+
focused: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
29
|
+
'bounds-contains-x': import("@oclif/core/lib/interfaces").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
30
|
+
'bounds-contains-y': import("@oclif/core/lib/interfaces").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
31
|
+
};
|
|
32
|
+
export declare const androidTargetFlags: {
|
|
33
|
+
x: import("@oclif/core/lib/interfaces").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
34
|
+
y: import("@oclif/core/lib/interfaces").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
35
|
+
'resource-id': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
36
|
+
text: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
37
|
+
'content-desc': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
38
|
+
'class-name': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
39
|
+
'package-name': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
40
|
+
index: import("@oclif/core/lib/interfaces").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
41
|
+
clickable: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
42
|
+
enabled: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
43
|
+
focused: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
44
|
+
'bounds-contains-x': import("@oclif/core/lib/interfaces").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
45
|
+
'bounds-contains-y': import("@oclif/core/lib/interfaces").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
46
|
+
};
|
|
47
|
+
export declare function buildAndroidSelector(flags: SelectorFlagValues): AndroidSelector | undefined;
|
|
48
|
+
export declare function buildAndroidTarget(flags: TargetFlagValues): AndroidElementTarget | undefined;
|
|
49
|
+
export {};
|
|
50
|
+
//# sourceMappingURL=android-selector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"android-selector.d.ts","sourceRoot":"","sources":["../../src/lib/android-selector.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEzE,KAAK,kBAAkB,GAAG;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,KAAK,gBAAgB,GAAG,kBAAkB,GAAG;IAC3C,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;CAmChC,CAAC;AAEF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;CAQ9B,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,kBAAkB,GAAG,eAAe,GAAG,SAAS,CA0B3F;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,gBAAgB,GAAG,oBAAoB,GAAG,SAAS,CAmB5F"}
|