lim 0.1.4 → 0.9.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 +836 -0
- package/bin/dev.js +16 -0
- package/bin/run.js +63 -0
- package/dist/base-command.d.ts +51 -0
- package/dist/base-command.d.ts.map +1 -0
- package/dist/base-command.js +441 -0
- package/dist/base-command.js.map +1 -0
- package/dist/commands/android/connect.d.ts +17 -0
- package/dist/commands/android/connect.d.ts.map +1 -0
- package/dist/commands/android/connect.js +50 -0
- package/dist/commands/android/connect.js.map +1 -0
- package/dist/commands/android/create.d.ts +25 -0
- package/dist/commands/android/create.d.ts.map +1 -0
- package/dist/commands/android/create.js +202 -0
- package/dist/commands/android/create.js.map +1 -0
- package/dist/commands/android/delete.d.ts +17 -0
- package/dist/commands/android/delete.d.ts.map +1 -0
- package/dist/commands/android/delete.js +44 -0
- package/dist/commands/android/delete.js.map +1 -0
- package/dist/commands/android/element-tree.d.ts +16 -0
- package/dist/commands/android/element-tree.d.ts.map +1 -0
- package/dist/commands/android/element-tree.js +60 -0
- package/dist/commands/android/element-tree.js.map +1 -0
- package/dist/commands/android/find-element.d.ts +28 -0
- package/dist/commands/android/find-element.d.ts.map +1 -0
- package/dist/commands/android/find-element.js +70 -0
- package/dist/commands/android/find-element.js.map +1 -0
- package/dist/commands/android/get.d.ts +17 -0
- package/dist/commands/android/get.d.ts.map +1 -0
- package/dist/commands/android/get.js +43 -0
- package/dist/commands/android/get.js.map +1 -0
- package/dist/commands/android/install-app.d.ts +18 -0
- package/dist/commands/android/install-app.d.ts.map +1 -0
- package/dist/commands/android/install-app.js +70 -0
- package/dist/commands/android/install-app.js.map +1 -0
- package/dist/commands/android/list.d.ts +19 -0
- package/dist/commands/android/list.d.ts.map +1 -0
- package/dist/commands/android/list.js +61 -0
- package/dist/commands/android/list.js.map +1 -0
- package/dist/commands/android/open-url.d.ts +18 -0
- package/dist/commands/android/open-url.d.ts.map +1 -0
- package/dist/commands/android/open-url.js +51 -0
- package/dist/commands/android/open-url.js.map +1 -0
- package/dist/commands/android/press-key.d.ts +19 -0
- package/dist/commands/android/press-key.d.ts.map +1 -0
- package/dist/commands/android/press-key.js +52 -0
- package/dist/commands/android/press-key.js.map +1 -0
- package/dist/commands/android/record.d.ts +22 -0
- package/dist/commands/android/record.d.ts.map +1 -0
- package/dist/commands/android/record.js +100 -0
- package/dist/commands/android/record.js.map +1 -0
- package/dist/commands/android/screenshot.d.ts +18 -0
- package/dist/commands/android/screenshot.d.ts.map +1 -0
- package/dist/commands/android/screenshot.js +66 -0
- package/dist/commands/android/screenshot.js.map +1 -0
- package/dist/commands/android/scroll.d.ts +32 -0
- package/dist/commands/android/scroll.d.ts.map +1 -0
- package/dist/commands/android/scroll.js +72 -0
- package/dist/commands/android/scroll.js.map +1 -0
- package/dist/commands/android/tap-element.d.ts +27 -0
- package/dist/commands/android/tap-element.d.ts.map +1 -0
- package/dist/commands/android/tap-element.js +60 -0
- package/dist/commands/android/tap-element.js.map +1 -0
- package/dist/commands/android/tap.d.ts +25 -0
- package/dist/commands/android/tap.d.ts.map +1 -0
- package/dist/commands/android/tap.js +55 -0
- package/dist/commands/android/tap.js.map +1 -0
- package/dist/commands/android/type.d.ts +31 -0
- package/dist/commands/android/type.d.ts.map +1 -0
- package/dist/commands/android/type.js +53 -0
- package/dist/commands/android/type.js.map +1 -0
- package/dist/commands/asset/delete.d.ts +17 -0
- package/dist/commands/asset/delete.d.ts.map +1 -0
- package/dist/commands/asset/delete.js +23 -0
- package/dist/commands/asset/delete.js.map +1 -0
- package/dist/commands/asset/list.d.ts +22 -0
- package/dist/commands/asset/list.d.ts.map +1 -0
- package/dist/commands/asset/list.js +97 -0
- package/dist/commands/asset/list.js.map +1 -0
- package/dist/commands/asset/pull.d.ts +19 -0
- package/dist/commands/asset/pull.d.ts.map +1 -0
- package/dist/commands/asset/pull.js +84 -0
- package/dist/commands/asset/pull.js.map +1 -0
- package/dist/commands/asset/push.d.ts +18 -0
- package/dist/commands/asset/push.d.ts.map +1 -0
- package/dist/commands/asset/push.js +43 -0
- package/dist/commands/asset/push.js.map +1 -0
- package/dist/commands/ios/app-log.d.ts +20 -0
- package/dist/commands/ios/app-log.d.ts.map +1 -0
- package/dist/commands/ios/app-log.js +86 -0
- package/dist/commands/ios/app-log.js.map +1 -0
- package/dist/commands/ios/cp.d.ts +19 -0
- package/dist/commands/ios/cp.d.ts.map +1 -0
- package/dist/commands/ios/cp.js +64 -0
- package/dist/commands/ios/cp.js.map +1 -0
- package/dist/commands/ios/create.d.ts +25 -0
- package/dist/commands/ios/create.d.ts.map +1 -0
- package/dist/commands/ios/create.js +165 -0
- package/dist/commands/ios/create.js.map +1 -0
- package/dist/commands/ios/delete.d.ts +17 -0
- package/dist/commands/ios/delete.d.ts.map +1 -0
- package/dist/commands/ios/delete.js +44 -0
- package/dist/commands/ios/delete.js.map +1 -0
- package/dist/commands/ios/element-tree.d.ts +16 -0
- package/dist/commands/ios/element-tree.d.ts.map +1 -0
- package/dist/commands/ios/element-tree.js +57 -0
- package/dist/commands/ios/element-tree.js.map +1 -0
- package/dist/commands/ios/get.d.ts +17 -0
- package/dist/commands/ios/get.d.ts.map +1 -0
- package/dist/commands/ios/get.js +44 -0
- package/dist/commands/ios/get.js.map +1 -0
- package/dist/commands/ios/info.d.ts +16 -0
- package/dist/commands/ios/info.d.ts.map +1 -0
- package/dist/commands/ios/info.js +55 -0
- package/dist/commands/ios/info.js.map +1 -0
- package/dist/commands/ios/install-app.d.ts +20 -0
- package/dist/commands/ios/install-app.d.ts.map +1 -0
- package/dist/commands/ios/install-app.js +97 -0
- package/dist/commands/ios/install-app.js.map +1 -0
- package/dist/commands/ios/launch-app.d.ts +23 -0
- package/dist/commands/ios/launch-app.d.ts.map +1 -0
- package/dist/commands/ios/launch-app.js +74 -0
- package/dist/commands/ios/launch-app.js.map +1 -0
- package/dist/commands/ios/list-apps.d.ts +16 -0
- package/dist/commands/ios/list-apps.d.ts.map +1 -0
- package/dist/commands/ios/list-apps.js +51 -0
- package/dist/commands/ios/list-apps.js.map +1 -0
- package/dist/commands/ios/list.d.ts +19 -0
- package/dist/commands/ios/list.d.ts.map +1 -0
- package/dist/commands/ios/list.js +61 -0
- package/dist/commands/ios/list.js.map +1 -0
- package/dist/commands/ios/lsof.d.ts +16 -0
- package/dist/commands/ios/lsof.d.ts.map +1 -0
- package/dist/commands/ios/lsof.js +47 -0
- package/dist/commands/ios/lsof.js.map +1 -0
- package/dist/commands/ios/open-url.d.ts +18 -0
- package/dist/commands/ios/open-url.d.ts.map +1 -0
- package/dist/commands/ios/open-url.js +51 -0
- package/dist/commands/ios/open-url.js.map +1 -0
- package/dist/commands/ios/perform.d.ts +18 -0
- package/dist/commands/ios/perform.d.ts.map +1 -0
- package/dist/commands/ios/perform.js +228 -0
- package/dist/commands/ios/perform.js.map +1 -0
- package/dist/commands/ios/press-key.d.ts +19 -0
- package/dist/commands/ios/press-key.d.ts.map +1 -0
- package/dist/commands/ios/press-key.js +52 -0
- package/dist/commands/ios/press-key.js.map +1 -0
- package/dist/commands/ios/record.d.ts +22 -0
- package/dist/commands/ios/record.d.ts.map +1 -0
- package/dist/commands/ios/record.js +101 -0
- package/dist/commands/ios/record.js.map +1 -0
- package/dist/commands/ios/reverse.d.ts +19 -0
- package/dist/commands/ios/reverse.d.ts.map +1 -0
- package/dist/commands/ios/reverse.js +97 -0
- package/dist/commands/ios/reverse.js.map +1 -0
- package/dist/commands/ios/screenshot.d.ts +18 -0
- package/dist/commands/ios/screenshot.d.ts.map +1 -0
- package/dist/commands/ios/screenshot.js +65 -0
- package/dist/commands/ios/screenshot.js.map +1 -0
- package/dist/commands/ios/scroll.d.ts +19 -0
- package/dist/commands/ios/scroll.d.ts.map +1 -0
- package/dist/commands/ios/scroll.js +57 -0
- package/dist/commands/ios/scroll.js.map +1 -0
- package/dist/commands/ios/simctl.d.ts +17 -0
- package/dist/commands/ios/simctl.d.ts.map +1 -0
- package/dist/commands/ios/simctl.js +72 -0
- package/dist/commands/ios/simctl.js.map +1 -0
- package/dist/commands/ios/sync.d.ts +23 -0
- package/dist/commands/ios/sync.d.ts.map +1 -0
- package/dist/commands/ios/sync.js +90 -0
- package/dist/commands/ios/sync.js.map +1 -0
- package/dist/commands/ios/syslog.d.ts +16 -0
- package/dist/commands/ios/syslog.d.ts.map +1 -0
- package/dist/commands/ios/syslog.js +62 -0
- package/dist/commands/ios/syslog.js.map +1 -0
- package/dist/commands/ios/tap-element.d.ts +23 -0
- package/dist/commands/ios/tap-element.d.ts.map +1 -0
- package/dist/commands/ios/tap-element.js +92 -0
- package/dist/commands/ios/tap-element.js.map +1 -0
- package/dist/commands/ios/tap.d.ts +25 -0
- package/dist/commands/ios/tap.d.ts.map +1 -0
- package/dist/commands/ios/tap.js +55 -0
- package/dist/commands/ios/tap.js.map +1 -0
- package/dist/commands/ios/terminate-app.d.ts +18 -0
- package/dist/commands/ios/terminate-app.d.ts.map +1 -0
- package/dist/commands/ios/terminate-app.js +49 -0
- package/dist/commands/ios/terminate-app.js.map +1 -0
- package/dist/commands/ios/toggle-keyboard.d.ts +15 -0
- package/dist/commands/ios/toggle-keyboard.d.ts.map +1 -0
- package/dist/commands/ios/toggle-keyboard.js +45 -0
- package/dist/commands/ios/toggle-keyboard.js.map +1 -0
- package/dist/commands/ios/type.d.ts +19 -0
- package/dist/commands/ios/type.d.ts.map +1 -0
- package/dist/commands/ios/type.js +53 -0
- package/dist/commands/ios/type.js.map +1 -0
- package/dist/commands/ios/xcodebuild.d.ts +17 -0
- package/dist/commands/ios/xcodebuild.d.ts.map +1 -0
- package/dist/commands/ios/xcodebuild.js +59 -0
- package/dist/commands/ios/xcodebuild.js.map +1 -0
- package/dist/commands/ios/xcrun.d.ts +17 -0
- package/dist/commands/ios/xcrun.d.ts.map +1 -0
- package/dist/commands/ios/xcrun.js +60 -0
- package/dist/commands/ios/xcrun.js.map +1 -0
- package/dist/commands/login.d.ts +14 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +22 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +14 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +18 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/session/start.d.ts +16 -0
- package/dist/commands/session/start.d.ts.map +1 -0
- package/dist/commands/session/start.js +129 -0
- package/dist/commands/session/start.js.map +1 -0
- package/dist/commands/session/status.d.ts +14 -0
- package/dist/commands/session/status.d.ts.map +1 -0
- package/dist/commands/session/status.js +65 -0
- package/dist/commands/session/status.js.map +1 -0
- package/dist/commands/session/stop.d.ts +18 -0
- package/dist/commands/session/stop.d.ts.map +1 -0
- package/dist/commands/session/stop.js +76 -0
- package/dist/commands/session/stop.js.map +1 -0
- package/dist/commands/skills/install.d.ts +18 -0
- package/dist/commands/skills/install.d.ts.map +1 -0
- package/dist/commands/skills/install.js +473 -0
- package/dist/commands/skills/install.js.map +1 -0
- package/dist/commands/xcode/attach-simulator.d.ts +18 -0
- package/dist/commands/xcode/attach-simulator.d.ts.map +1 -0
- package/dist/commands/xcode/attach-simulator.js +55 -0
- package/dist/commands/xcode/attach-simulator.js.map +1 -0
- package/dist/commands/xcode/build.d.ts +35 -0
- package/dist/commands/xcode/build.d.ts.map +1 -0
- package/dist/commands/xcode/build.js +192 -0
- package/dist/commands/xcode/build.js.map +1 -0
- package/dist/commands/xcode/create.d.ts +22 -0
- package/dist/commands/xcode/create.d.ts.map +1 -0
- package/dist/commands/xcode/create.js +189 -0
- package/dist/commands/xcode/create.js.map +1 -0
- package/dist/commands/xcode/delete.d.ts +17 -0
- package/dist/commands/xcode/delete.d.ts.map +1 -0
- package/dist/commands/xcode/delete.js +44 -0
- package/dist/commands/xcode/delete.js.map +1 -0
- package/dist/commands/xcode/get.d.ts +17 -0
- package/dist/commands/xcode/get.d.ts.map +1 -0
- package/dist/commands/xcode/get.js +59 -0
- package/dist/commands/xcode/get.js.map +1 -0
- package/dist/commands/xcode/list.d.ts +18 -0
- package/dist/commands/xcode/list.d.ts.map +1 -0
- package/dist/commands/xcode/list.js +58 -0
- package/dist/commands/xcode/list.js.map +1 -0
- package/dist/commands/xcode/sync.d.ts +24 -0
- package/dist/commands/xcode/sync.d.ts.map +1 -0
- package/dist/commands/xcode/sync.js +93 -0
- package/dist/commands/xcode/sync.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/additional-files.d.ts +6 -0
- package/dist/lib/additional-files.d.ts.map +1 -0
- package/dist/lib/additional-files.js +19 -0
- package/dist/lib/additional-files.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/auth.d.ts +2 -0
- package/dist/lib/auth.d.ts.map +1 -0
- package/dist/lib/auth.js +60 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/config.d.ts +65 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +290 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/daemon-client.d.ts +9 -0
- package/dist/lib/daemon-client.d.ts.map +1 -0
- package/dist/lib/daemon-client.js +81 -0
- package/dist/lib/daemon-client.js.map +1 -0
- package/dist/lib/daemon.d.ts +41 -0
- package/dist/lib/daemon.d.ts.map +1 -0
- package/dist/lib/daemon.js +511 -0
- package/dist/lib/daemon.js.map +1 -0
- package/dist/lib/detox-version.d.ts +12 -0
- package/dist/lib/detox-version.d.ts.map +1 -0
- package/dist/lib/detox-version.js +30 -0
- package/dist/lib/detox-version.js.map +1 -0
- package/dist/lib/duration.d.ts +2 -0
- package/dist/lib/duration.d.ts.map +1 -0
- package/dist/lib/duration.js +37 -0
- package/dist/lib/duration.js.map +1 -0
- package/dist/lib/formatting.d.ts +3 -0
- package/dist/lib/formatting.d.ts.map +1 -0
- package/dist/lib/formatting.js +31 -0
- package/dist/lib/formatting.js.map +1 -0
- 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 +29 -0
- package/dist/lib/instance-client-factory.d.ts.map +1 -0
- package/dist/lib/instance-client-factory.js +87 -0
- package/dist/lib/instance-client-factory.js.map +1 -0
- package/dist/lib/launch-app-runtime.d.ts +23 -0
- package/dist/lib/launch-app-runtime.d.ts.map +1 -0
- package/dist/lib/launch-app-runtime.js +58 -0
- package/dist/lib/launch-app-runtime.js.map +1 -0
- package/dist/lib/remote-skills.d.ts +47 -0
- package/dist/lib/remote-skills.d.ts.map +1 -0
- package/dist/lib/remote-skills.js +241 -0
- package/dist/lib/remote-skills.js.map +1 -0
- package/dist/lib/reverse-port-mapping.d.ts +6 -0
- package/dist/lib/reverse-port-mapping.d.ts.map +1 -0
- package/dist/lib/reverse-port-mapping.js +24 -0
- package/dist/lib/reverse-port-mapping.js.map +1 -0
- package/dist/lib/skills.d.ts +17 -0
- package/dist/lib/skills.d.ts.map +1 -0
- package/dist/lib/skills.js +153 -0
- package/dist/lib/skills.js.map +1 -0
- package/package.json +69 -13
- package/.npmignore +0 -2
- package/build/lib/index.js +0 -1498
- package/build/lib/index.map +0 -1
- package/build/lib/utils/courier.js +0 -98
- package/build/lib/utils/courier.map +0 -1
- package/build/lib/utils/polyfill.js +0 -146
- package/build/lib/utils/polyfill.map +0 -1
- package/build.sh +0 -9
- package/index.js +0 -2
- package/lib/index.js +0 -284
- package/lib/utils/courier.js +0 -108
- package/lib/utils/polyfill.js +0 -36
- package/native.js +0 -2
|
@@ -0,0 +1,31 @@
|
|
|
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
|
+
exports.renderTable = renderTable;
|
|
7
|
+
exports.parseLabels = parseLabels;
|
|
8
|
+
const cli_table3_1 = __importDefault(require("cli-table3"));
|
|
9
|
+
function renderTable(headers, rows) {
|
|
10
|
+
const table = new cli_table3_1.default({
|
|
11
|
+
head: headers,
|
|
12
|
+
style: { head: ['cyan'] },
|
|
13
|
+
});
|
|
14
|
+
for (const row of rows) {
|
|
15
|
+
table.push(row);
|
|
16
|
+
}
|
|
17
|
+
return table.toString();
|
|
18
|
+
}
|
|
19
|
+
function parseLabels(labels) {
|
|
20
|
+
if (!labels || labels.length === 0)
|
|
21
|
+
return undefined;
|
|
22
|
+
const result = {};
|
|
23
|
+
for (const l of labels) {
|
|
24
|
+
const eqIdx = l.indexOf('=');
|
|
25
|
+
if (eqIdx > 0) {
|
|
26
|
+
result[l.slice(0, eqIdx)] = l.slice(eqIdx + 1);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return Object.keys(result).length > 0 ? result : undefined;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=formatting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatting.js","sourceRoot":"","sources":["../../src/lib/formatting.ts"],"names":[],"mappings":";;;;;AAEA,kCASC;AAED,kCAUC;AAvBD,4DAA+B;AAE/B,SAAgB,WAAW,CAAC,OAAiB,EAAE,IAAgB;IAC7D,MAAM,KAAK,GAAG,IAAI,oBAAK,CAAC;QACtB,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE;KAC1B,CAAC,CAAC;IACH,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;AAC1B,CAAC;AAED,SAAgB,WAAW,CAAC,MAA4B;IACtD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACrD,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ignore-patterns.d.ts","sourceRoot":"","sources":["../../src/lib/ignore-patterns.ts"],"names":[],"mappings":"AAAA,wBAAgB,qBAAqB,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,SAAS,CAc1G"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.compileIgnorePatterns = compileIgnorePatterns;
|
|
4
|
+
function compileIgnorePatterns(patterns) {
|
|
5
|
+
if (!patterns || patterns.length === 0) {
|
|
6
|
+
return undefined;
|
|
7
|
+
}
|
|
8
|
+
const regexes = patterns.map((pattern, index) => {
|
|
9
|
+
try {
|
|
10
|
+
return new RegExp(pattern);
|
|
11
|
+
}
|
|
12
|
+
catch (error) {
|
|
13
|
+
throw new Error(`Invalid ignore regex at index ${index + 1} (${pattern}): ${error.message}`);
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
return (relativePath) => regexes.some((regex) => regex.test(relativePath));
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=ignore-patterns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ignore-patterns.js","sourceRoot":"","sources":["../../src/lib/ignore-patterns.ts"],"names":[],"mappings":";;AAAA,sDAcC;AAdD,SAAgB,qBAAqB,CAAC,QAAmB;IACvD,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;QAC9C,IAAI,CAAC;YACH,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,iCAAiC,KAAK,GAAG,CAAC,KAAK,OAAO,MAAO,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1G,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,YAAoB,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AACrF,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import Limrun, { Ios, type InstanceClient } from '@limrun/api';
|
|
2
|
+
import { type LastAndroidInstance, type LastIosInstance } from './config';
|
|
3
|
+
export type InstanceType = 'android' | 'ios' | 'xcode';
|
|
4
|
+
export interface ResolvedAndroidInstanceClient {
|
|
5
|
+
type: 'android';
|
|
6
|
+
client: InstanceClient;
|
|
7
|
+
disconnect: () => void;
|
|
8
|
+
/** True if the client is backed by a daemon session (don't disconnect). */
|
|
9
|
+
isSession: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface ResolvedIosInstanceClient {
|
|
12
|
+
type: 'ios';
|
|
13
|
+
client: Ios.InstanceClient;
|
|
14
|
+
disconnect: () => void;
|
|
15
|
+
/** True if the client is backed by a daemon session (don't disconnect). */
|
|
16
|
+
isSession: boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare function detectInstanceType(id: string): InstanceType;
|
|
19
|
+
/**
|
|
20
|
+
* Check if a daemon session is active for the given instance ID.
|
|
21
|
+
*/
|
|
22
|
+
export declare function hasActiveSession(id: string): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Send a command via the daemon session for the given instance ID.
|
|
25
|
+
*/
|
|
26
|
+
export declare function sendSessionCommand(instanceId: string, command: string, args?: unknown[], timeoutMs?: number): Promise<unknown>;
|
|
27
|
+
export declare function getAndroidInstanceClient(lim: Limrun, target: LastAndroidInstance): Promise<ResolvedAndroidInstanceClient>;
|
|
28
|
+
export declare function getIosInstanceClient(lim: Limrun, target: LastIosInstance): Promise<ResolvedIosInstanceClient>;
|
|
29
|
+
//# sourceMappingURL=instance-client-factory.d.ts.map
|
|
@@ -0,0 +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,GAC1B,OAAO,CAAC,6BAA6B,CAAC,CA+BxC;AAED,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,yBAAyB,CAAC,CAuBpC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.detectInstanceType = detectInstanceType;
|
|
4
|
+
exports.hasActiveSession = hasActiveSession;
|
|
5
|
+
exports.sendSessionCommand = sendSessionCommand;
|
|
6
|
+
exports.getAndroidInstanceClient = getAndroidInstanceClient;
|
|
7
|
+
exports.getIosInstanceClient = getIosInstanceClient;
|
|
8
|
+
const api_1 = require("@limrun/api");
|
|
9
|
+
const daemon_client_1 = require("./daemon-client");
|
|
10
|
+
const config_1 = require("./config");
|
|
11
|
+
function detectInstanceType(id) {
|
|
12
|
+
const prefix = id.split('_')[0];
|
|
13
|
+
if (prefix === 'android')
|
|
14
|
+
return 'android';
|
|
15
|
+
if (prefix === 'ios')
|
|
16
|
+
return 'ios';
|
|
17
|
+
if (prefix === 'xcode' || prefix === 'sandbox')
|
|
18
|
+
return 'xcode';
|
|
19
|
+
throw new Error(`Cannot detect instance type from ID "${id}". Expected prefix "android_", "ios_", "xcode_", or "sandbox_".`);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Check if a daemon session is active for the given instance ID.
|
|
23
|
+
*/
|
|
24
|
+
function hasActiveSession(id) {
|
|
25
|
+
return (0, daemon_client_1.isSessionActive)(id);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Send a command via the daemon session for the given instance ID.
|
|
29
|
+
*/
|
|
30
|
+
function sendSessionCommand(instanceId, command, args = [], timeoutMs) {
|
|
31
|
+
return (0, daemon_client_1.sendCommand)(instanceId, command, args, timeoutMs);
|
|
32
|
+
}
|
|
33
|
+
async function getAndroidInstanceClient(lim, target) {
|
|
34
|
+
if (target.apiUrl && target.token) {
|
|
35
|
+
const client = await (0, api_1.createInstanceClient)({
|
|
36
|
+
apiUrl: target.apiUrl,
|
|
37
|
+
adbUrl: target.adbWebSocketUrl,
|
|
38
|
+
token: target.token,
|
|
39
|
+
});
|
|
40
|
+
return { type: 'android', client, disconnect: () => client.disconnect(), isSession: false };
|
|
41
|
+
}
|
|
42
|
+
const instance = await lim.androidInstances.get(target.id);
|
|
43
|
+
const apiUrl = instance.status.apiUrl;
|
|
44
|
+
const token = instance.status.token;
|
|
45
|
+
if (!apiUrl) {
|
|
46
|
+
throw new Error(`Android instance ${target.id} does not have an apiUrl. Is it ready?`);
|
|
47
|
+
}
|
|
48
|
+
(0, config_1.saveInstanceCache)(instance.metadata.id, {
|
|
49
|
+
apiUrl,
|
|
50
|
+
adbWebSocketUrl: instance.status.adbWebSocketUrl,
|
|
51
|
+
token,
|
|
52
|
+
endpointWebSocketUrl: instance.status.endpointWebSocketUrl,
|
|
53
|
+
mcpUrl: instance.status.mcpUrl,
|
|
54
|
+
signedStreamUrl: instance.status.signedStreamUrl,
|
|
55
|
+
targetHttpPortUrlPrefix: instance.status.targetHttpPortUrlPrefix,
|
|
56
|
+
});
|
|
57
|
+
const client = await (0, api_1.createInstanceClient)({
|
|
58
|
+
apiUrl,
|
|
59
|
+
adbUrl: instance.status.adbWebSocketUrl,
|
|
60
|
+
token,
|
|
61
|
+
});
|
|
62
|
+
return { type: 'android', client, disconnect: () => client.disconnect(), isSession: false };
|
|
63
|
+
}
|
|
64
|
+
async function getIosInstanceClient(lim, target) {
|
|
65
|
+
if (target.apiUrl && target.token) {
|
|
66
|
+
const client = await api_1.Ios.createInstanceClient({ apiUrl: target.apiUrl, token: target.token });
|
|
67
|
+
return { type: 'ios', client, disconnect: () => client.disconnect(), isSession: false };
|
|
68
|
+
}
|
|
69
|
+
const instance = await lim.iosInstances.get(target.id);
|
|
70
|
+
const apiUrl = instance.status.apiUrl;
|
|
71
|
+
const token = instance.status.token;
|
|
72
|
+
if (!apiUrl) {
|
|
73
|
+
throw new Error(`iOS instance ${target.id} does not have an apiUrl. Is it ready?`);
|
|
74
|
+
}
|
|
75
|
+
(0, config_1.saveInstanceCache)(instance.metadata.id, {
|
|
76
|
+
apiUrl,
|
|
77
|
+
token,
|
|
78
|
+
endpointWebSocketUrl: instance.status.endpointWebSocketUrl,
|
|
79
|
+
mcpUrl: instance.status.mcpUrl,
|
|
80
|
+
signedStreamUrl: instance.status.signedStreamUrl,
|
|
81
|
+
targetHttpPortUrlPrefix: instance.status.targetHttpPortUrlPrefix,
|
|
82
|
+
sandboxXcodeUrl: instance.status.sandbox?.xcode?.url,
|
|
83
|
+
});
|
|
84
|
+
const client = await api_1.Ios.createInstanceClient({ apiUrl, token });
|
|
85
|
+
return { type: 'ios', client, disconnect: () => client.disconnect(), isSession: false };
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=instance-client-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance-client-factory.js","sourceRoot":"","sources":["../../src/lib/instance-client-factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export type LaunchAppMode = 'ForegroundIfRunning' | 'RelaunchIfRunning';
|
|
2
|
+
export type LaunchAppRuntime = {
|
|
3
|
+
kind: 'detox';
|
|
4
|
+
serverUrl: string;
|
|
5
|
+
sessionId: string;
|
|
6
|
+
version: string;
|
|
7
|
+
};
|
|
8
|
+
export type LaunchAppArgument = LaunchAppMode | {
|
|
9
|
+
mode: 'RelaunchIfRunning';
|
|
10
|
+
runtime: LaunchAppRuntime;
|
|
11
|
+
};
|
|
12
|
+
export type LaunchAppFlagValues = {
|
|
13
|
+
mode?: LaunchAppMode;
|
|
14
|
+
runtime?: string;
|
|
15
|
+
'detox-server-url'?: string;
|
|
16
|
+
'detox-session-id'?: string;
|
|
17
|
+
'detox-version'?: string;
|
|
18
|
+
};
|
|
19
|
+
export declare function buildLaunchAppArgument(flags: LaunchAppFlagValues, options: {
|
|
20
|
+
modeExplicitlyProvided: boolean;
|
|
21
|
+
cwd?: string;
|
|
22
|
+
}): LaunchAppArgument;
|
|
23
|
+
//# sourceMappingURL=launch-app-runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launch-app-runtime.d.ts","sourceRoot":"","sources":["../../src/lib/launch-app-runtime.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,aAAa,GAAG,qBAAqB,GAAG,mBAAmB,CAAC;AACxE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AACF,MAAM,MAAM,iBAAiB,GACzB,aAAa,GACb;IACE,IAAI,EAAE,mBAAmB,CAAC;IAC1B,OAAO,EAAE,gBAAgB,CAAC;CAC3B,CAAC;AAEN,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAqBF,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,mBAAmB,EAC1B,OAAO,EAAE;IAAE,sBAAsB,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GACzD,iBAAiB,CA2CnB"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildLaunchAppArgument = buildLaunchAppArgument;
|
|
4
|
+
const detox_version_1 = require("./detox-version");
|
|
5
|
+
const DETOX_FLAG_NAMES = ['--detox-server-url', '--detox-session-id', '--detox-version'];
|
|
6
|
+
function validateDetoxServerUrl(serverUrl) {
|
|
7
|
+
let url;
|
|
8
|
+
try {
|
|
9
|
+
url = new URL(serverUrl);
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
throw new Error(`--detox-server-url must be a valid ws:// or wss:// URL, got: ${serverUrl}`);
|
|
13
|
+
}
|
|
14
|
+
if ((url.protocol !== 'ws:' && url.protocol !== 'wss:') || !url.hostname) {
|
|
15
|
+
throw new Error(`--detox-server-url must be a valid ws:// or wss:// URL, got: ${serverUrl}`);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function nonEmpty(value) {
|
|
19
|
+
return value !== undefined && value.trim() !== '';
|
|
20
|
+
}
|
|
21
|
+
function buildLaunchAppArgument(flags, options) {
|
|
22
|
+
const hasDetoxFlag = flags['detox-server-url'] !== undefined ||
|
|
23
|
+
flags['detox-session-id'] !== undefined ||
|
|
24
|
+
flags['detox-version'] !== undefined;
|
|
25
|
+
if (!flags.runtime) {
|
|
26
|
+
if (hasDetoxFlag) {
|
|
27
|
+
throw new Error(`${DETOX_FLAG_NAMES.join(', ')} require --runtime detox.`);
|
|
28
|
+
}
|
|
29
|
+
return flags.mode ?? 'ForegroundIfRunning';
|
|
30
|
+
}
|
|
31
|
+
if (flags.runtime !== 'detox') {
|
|
32
|
+
throw new Error(`Unsupported runtime: ${flags.runtime}`);
|
|
33
|
+
}
|
|
34
|
+
if (options.modeExplicitlyProvided && flags.mode === 'ForegroundIfRunning') {
|
|
35
|
+
throw new Error('Detox runtime launches require RelaunchIfRunning so runtime injection is applied.');
|
|
36
|
+
}
|
|
37
|
+
const serverUrl = flags['detox-server-url'];
|
|
38
|
+
const sessionId = flags['detox-session-id'];
|
|
39
|
+
if (!nonEmpty(serverUrl)) {
|
|
40
|
+
throw new Error('--runtime detox requires --detox-server-url.');
|
|
41
|
+
}
|
|
42
|
+
if (!nonEmpty(sessionId)) {
|
|
43
|
+
throw new Error('--runtime detox requires --detox-session-id.');
|
|
44
|
+
}
|
|
45
|
+
validateDetoxServerUrl(serverUrl);
|
|
46
|
+
const providedVersion = flags['detox-version'];
|
|
47
|
+
const version = nonEmpty(providedVersion) ? providedVersion : (0, detox_version_1.resolveLocalDetoxVersion)(options.cwd);
|
|
48
|
+
return {
|
|
49
|
+
mode: 'RelaunchIfRunning',
|
|
50
|
+
runtime: {
|
|
51
|
+
kind: 'detox',
|
|
52
|
+
serverUrl,
|
|
53
|
+
sessionId,
|
|
54
|
+
version,
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=launch-app-runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launch-app-runtime.js","sourceRoot":"","sources":["../../src/lib/launch-app-runtime.ts"],"names":[],"mappings":";;AA2CA,wDA8CC;AAzFD,mDAA2D;AAwB3D,MAAM,gBAAgB,GAAG,CAAC,oBAAoB,EAAE,oBAAoB,EAAE,iBAAiB,CAAU,CAAC;AAElG,SAAS,sBAAsB,CAAC,SAAiB;IAC/C,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,gEAAgE,SAAS,EAAE,CAAC,CAAC;IAC/F,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,QAAQ,KAAK,KAAK,IAAI,GAAG,CAAC,QAAQ,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QACzE,MAAM,IAAI,KAAK,CAAC,gEAAgE,SAAS,EAAE,CAAC,CAAC;IAC/F,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,KAAyB;IACzC,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;AACpD,CAAC;AAED,SAAgB,sBAAsB,CACpC,KAA0B,EAC1B,OAA0D;IAE1D,MAAM,YAAY,GAChB,KAAK,CAAC,kBAAkB,CAAC,KAAK,SAAS;QACvC,KAAK,CAAC,kBAAkB,CAAC,KAAK,SAAS;QACvC,KAAK,CAAC,eAAe,CAAC,KAAK,SAAS,CAAC;IAEvC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACnB,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAC7E,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,IAAI,qBAAqB,CAAC;IAC7C,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,wBAAwB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,OAAO,CAAC,sBAAsB,IAAI,KAAK,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;QAC3E,MAAM,IAAI,KAAK,CAAC,mFAAmF,CAAC,CAAC;IACvG,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAC5C,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IAED,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAClC,MAAM,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAA,wCAAwB,EAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAEpG,OAAO;QACL,IAAI,EAAE,mBAAmB;QACzB,OAAO,EAAE;YACP,IAAI,EAAE,OAAO;YACb,SAAS;YACT,SAAS;YACT,OAAO;SACR;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export declare const DEFAULT_SKILLS_OWNER = "limrun-inc";
|
|
2
|
+
export declare const DEFAULT_SKILLS_REPO = "skills";
|
|
3
|
+
export declare const DEFAULT_SKILLS_REF = "main";
|
|
4
|
+
export interface RemoteSkill {
|
|
5
|
+
name: string;
|
|
6
|
+
description: string;
|
|
7
|
+
defaultSelected: boolean;
|
|
8
|
+
sourceDir: string;
|
|
9
|
+
}
|
|
10
|
+
export interface LoadedRemoteSkills {
|
|
11
|
+
owner: string;
|
|
12
|
+
repo: string;
|
|
13
|
+
ref: string;
|
|
14
|
+
commit: string;
|
|
15
|
+
rootDir: string;
|
|
16
|
+
skillsRoot: string;
|
|
17
|
+
skills: RemoteSkill[];
|
|
18
|
+
cleanup(): void;
|
|
19
|
+
}
|
|
20
|
+
export interface LoadRemoteSkillsOptions {
|
|
21
|
+
owner?: string;
|
|
22
|
+
repo?: string;
|
|
23
|
+
ref?: string;
|
|
24
|
+
cloneImpl?: (owner: string, repo: string, ref: string) => Promise<ClonedSkillsRepo>;
|
|
25
|
+
}
|
|
26
|
+
export declare class RemoteSkillsError extends Error {
|
|
27
|
+
constructor(message: string);
|
|
28
|
+
}
|
|
29
|
+
export interface ClonedSkillsRepo {
|
|
30
|
+
rootDir: string;
|
|
31
|
+
commit: string;
|
|
32
|
+
}
|
|
33
|
+
declare function cleanupSkillsTempDir(rootDir: string): void;
|
|
34
|
+
declare function loadSkillsFromCheckout(params: {
|
|
35
|
+
owner: string;
|
|
36
|
+
repo: string;
|
|
37
|
+
ref: string;
|
|
38
|
+
commit: string;
|
|
39
|
+
rootDir: string;
|
|
40
|
+
}): LoadedRemoteSkills;
|
|
41
|
+
export declare function loadRemoteSkills(options?: LoadRemoteSkillsOptions): Promise<LoadedRemoteSkills>;
|
|
42
|
+
export declare const __remoteSkillsTestUtils: {
|
|
43
|
+
cleanupSkillsTempDir: typeof cleanupSkillsTempDir;
|
|
44
|
+
loadSkillsFromCheckout: typeof loadSkillsFromCheckout;
|
|
45
|
+
};
|
|
46
|
+
export {};
|
|
47
|
+
//# sourceMappingURL=remote-skills.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-skills.d.ts","sourceRoot":"","sources":["../../src/lib/remote-skills.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,oBAAoB,eAAe,CAAC;AACjD,eAAO,MAAM,mBAAmB,WAAW,CAAC;AAC5C,eAAO,MAAM,kBAAkB,SAAS,CAAC;AAkBzC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACrF;AAED,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,OAAO,EAAE,MAAM;CAI5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAoBD,iBAAS,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAOnD;AA0ID,iBAAS,sBAAsB,CAAC,MAAM,EAAE;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,kBAAkB,CA+CrB;AAED,wBAAsB,gBAAgB,CAAC,OAAO,GAAE,uBAA4B,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAkBzG;AAED,eAAO,MAAM,uBAAuB;;;CAGnC,CAAC"}
|
|
@@ -0,0 +1,241 @@
|
|
|
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
|
+
exports.__remoteSkillsTestUtils = exports.RemoteSkillsError = exports.DEFAULT_SKILLS_REF = exports.DEFAULT_SKILLS_REPO = exports.DEFAULT_SKILLS_OWNER = void 0;
|
|
7
|
+
exports.loadRemoteSkills = loadRemoteSkills;
|
|
8
|
+
const fs_1 = __importDefault(require("fs"));
|
|
9
|
+
const os_1 = __importDefault(require("os"));
|
|
10
|
+
const path_1 = __importDefault(require("path"));
|
|
11
|
+
const child_process_1 = require("child_process");
|
|
12
|
+
const util_1 = require("util");
|
|
13
|
+
const yaml = require('js-yaml');
|
|
14
|
+
exports.DEFAULT_SKILLS_OWNER = 'limrun-inc';
|
|
15
|
+
exports.DEFAULT_SKILLS_REPO = 'skills';
|
|
16
|
+
exports.DEFAULT_SKILLS_REF = 'main';
|
|
17
|
+
const DEFAULT_CLONE_TIMEOUT_MS = 300000;
|
|
18
|
+
const CLONE_TIMEOUT_MS = (() => {
|
|
19
|
+
const raw = process.env['LIM_SKILLS_CLONE_TIMEOUT_MS'];
|
|
20
|
+
if (!raw)
|
|
21
|
+
return DEFAULT_CLONE_TIMEOUT_MS;
|
|
22
|
+
const parsed = Number.parseInt(raw, 10);
|
|
23
|
+
return Number.isFinite(parsed) && parsed > 0 ? parsed : DEFAULT_CLONE_TIMEOUT_MS;
|
|
24
|
+
})();
|
|
25
|
+
const execFileAsync = (0, util_1.promisify)(child_process_1.execFile);
|
|
26
|
+
class RemoteSkillsError extends Error {
|
|
27
|
+
constructor(message) {
|
|
28
|
+
super(message);
|
|
29
|
+
this.name = 'RemoteSkillsError';
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
exports.RemoteSkillsError = RemoteSkillsError;
|
|
33
|
+
function assertString(value, label) {
|
|
34
|
+
if (typeof value !== 'string' || value.trim() === '') {
|
|
35
|
+
throw new RemoteSkillsError(`${label} must be a non-empty string`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function isPathInside(basePath, targetPath) {
|
|
39
|
+
const normalizedBase = path_1.default.normalize(path_1.default.resolve(basePath));
|
|
40
|
+
const normalizedTarget = path_1.default.normalize(path_1.default.resolve(targetPath));
|
|
41
|
+
return normalizedTarget === normalizedBase || normalizedTarget.startsWith(normalizedBase + path_1.default.sep);
|
|
42
|
+
}
|
|
43
|
+
function assertSafeSkillName(value, label) {
|
|
44
|
+
if (!/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(value)) {
|
|
45
|
+
throw new RemoteSkillsError(`${label} must be a lowercase hyphenated skill name`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
function cleanupSkillsTempDir(rootDir) {
|
|
49
|
+
const tmpRoot = os_1.default.tmpdir();
|
|
50
|
+
if (!isPathInside(tmpRoot, rootDir) || path_1.default.resolve(rootDir) === path_1.default.resolve(tmpRoot)) {
|
|
51
|
+
throw new RemoteSkillsError(`Refusing to clean up non-temporary skills directory: ${rootDir}`);
|
|
52
|
+
}
|
|
53
|
+
fs_1.default.rmSync(rootDir, { recursive: true, force: true });
|
|
54
|
+
}
|
|
55
|
+
function parseCatalog(text) {
|
|
56
|
+
let catalog;
|
|
57
|
+
try {
|
|
58
|
+
catalog = JSON.parse(text);
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
throw new RemoteSkillsError(`catalog.json is invalid JSON: ${err instanceof Error ? err.message : String(err)}`);
|
|
62
|
+
}
|
|
63
|
+
if (!catalog || typeof catalog !== 'object' || Array.isArray(catalog)) {
|
|
64
|
+
throw new RemoteSkillsError('catalog.json must be an object');
|
|
65
|
+
}
|
|
66
|
+
const parsed = catalog;
|
|
67
|
+
if (parsed.schemaVersion !== 1) {
|
|
68
|
+
throw new RemoteSkillsError('catalog.json schemaVersion must be 1');
|
|
69
|
+
}
|
|
70
|
+
if (!Array.isArray(parsed.skills)) {
|
|
71
|
+
throw new RemoteSkillsError('catalog.json skills must be an array');
|
|
72
|
+
}
|
|
73
|
+
for (const [index, skill] of parsed.skills.entries()) {
|
|
74
|
+
if (!skill || typeof skill !== 'object' || Array.isArray(skill)) {
|
|
75
|
+
throw new RemoteSkillsError(`catalog.json skills[${index}] must be an object`);
|
|
76
|
+
}
|
|
77
|
+
assertString(skill.name, `catalog.json skills[${index}].name`);
|
|
78
|
+
assertSafeSkillName(skill.name, `catalog.json skills[${index}].name`);
|
|
79
|
+
if (typeof skill.defaultSelected !== 'boolean') {
|
|
80
|
+
throw new RemoteSkillsError(`catalog.json skills[${index}].defaultSelected must be a boolean`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return parsed;
|
|
84
|
+
}
|
|
85
|
+
function parseSkillFrontmatter(skillName, text) {
|
|
86
|
+
const match = text.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n/);
|
|
87
|
+
if (!match) {
|
|
88
|
+
throw new RemoteSkillsError(`skills/${skillName}/SKILL.md is missing YAML frontmatter`);
|
|
89
|
+
}
|
|
90
|
+
const frontmatterText = match[1];
|
|
91
|
+
if (frontmatterText === undefined) {
|
|
92
|
+
throw new RemoteSkillsError(`skills/${skillName}/SKILL.md is missing YAML frontmatter`);
|
|
93
|
+
}
|
|
94
|
+
let frontmatter;
|
|
95
|
+
try {
|
|
96
|
+
frontmatter = yaml.load(frontmatterText);
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
throw new RemoteSkillsError(`skills/${skillName}/SKILL.md has invalid YAML frontmatter: ${err instanceof Error ? err.message : String(err)}`);
|
|
100
|
+
}
|
|
101
|
+
if (!frontmatter || typeof frontmatter !== 'object' || Array.isArray(frontmatter)) {
|
|
102
|
+
throw new RemoteSkillsError(`skills/${skillName}/SKILL.md frontmatter must be an object`);
|
|
103
|
+
}
|
|
104
|
+
const parsed = frontmatter;
|
|
105
|
+
assertString(parsed.name, `skills/${skillName}/SKILL.md frontmatter name`);
|
|
106
|
+
assertSafeSkillName(parsed.name, `skills/${skillName}/SKILL.md frontmatter name`);
|
|
107
|
+
assertString(parsed.description, `skills/${skillName}/SKILL.md frontmatter description`);
|
|
108
|
+
if (parsed.name !== skillName) {
|
|
109
|
+
throw new RemoteSkillsError(`skills/${skillName}/SKILL.md frontmatter name must match directory name`);
|
|
110
|
+
}
|
|
111
|
+
return { name: parsed.name, description: parsed.description };
|
|
112
|
+
}
|
|
113
|
+
function readJsonFile(filePath) {
|
|
114
|
+
try {
|
|
115
|
+
return fs_1.default.readFileSync(filePath, 'utf8');
|
|
116
|
+
}
|
|
117
|
+
catch (err) {
|
|
118
|
+
throw new RemoteSkillsError(`Failed to read ${path_1.default.basename(filePath)}: ${err instanceof Error ? err.message : String(err)}`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
async function cloneSkillsRepo(owner, repo, ref) {
|
|
122
|
+
const rootDir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'limrun-skills-'));
|
|
123
|
+
const repoUrl = `https://github.com/${owner}/${repo}.git`;
|
|
124
|
+
const cloneArgs = [
|
|
125
|
+
'-c',
|
|
126
|
+
'filter.lfs.required=false',
|
|
127
|
+
'-c',
|
|
128
|
+
'filter.lfs.smudge=',
|
|
129
|
+
'-c',
|
|
130
|
+
'filter.lfs.clean=',
|
|
131
|
+
'-c',
|
|
132
|
+
'filter.lfs.process=',
|
|
133
|
+
'clone',
|
|
134
|
+
'--depth',
|
|
135
|
+
'1',
|
|
136
|
+
'--branch',
|
|
137
|
+
ref,
|
|
138
|
+
repoUrl,
|
|
139
|
+
rootDir,
|
|
140
|
+
];
|
|
141
|
+
const env = {
|
|
142
|
+
...process.env,
|
|
143
|
+
GIT_TERMINAL_PROMPT: '0',
|
|
144
|
+
GIT_LFS_SKIP_SMUDGE: '1',
|
|
145
|
+
};
|
|
146
|
+
try {
|
|
147
|
+
await execFileAsync('git', cloneArgs, { env, timeout: CLONE_TIMEOUT_MS });
|
|
148
|
+
const { stdout } = await execFileAsync('git', ['-C', rootDir, 'rev-parse', 'HEAD'], {
|
|
149
|
+
env,
|
|
150
|
+
timeout: 30000,
|
|
151
|
+
});
|
|
152
|
+
return { rootDir, commit: stdout.trim() };
|
|
153
|
+
}
|
|
154
|
+
catch (err) {
|
|
155
|
+
cleanupSkillsTempDir(rootDir);
|
|
156
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
157
|
+
const code = typeof err === 'object' && err && 'code' in err ? String(err.code) : '';
|
|
158
|
+
if (code === 'ENOENT') {
|
|
159
|
+
throw new RemoteSkillsError('Failed to clone Limrun skills: git executable was not found');
|
|
160
|
+
}
|
|
161
|
+
if (message.includes('timed out') || message.includes('ETIMEDOUT')) {
|
|
162
|
+
throw new RemoteSkillsError(`Failed to clone Limrun skills: clone timed out after ${Math.round(CLONE_TIMEOUT_MS / 1000)}s`);
|
|
163
|
+
}
|
|
164
|
+
if (message.includes('Authentication failed') ||
|
|
165
|
+
message.includes('could not read Username') ||
|
|
166
|
+
message.includes('Permission denied') ||
|
|
167
|
+
message.includes('Repository not found')) {
|
|
168
|
+
throw new RemoteSkillsError(`Failed to clone Limrun skills: authentication failed for ${repoUrl}`);
|
|
169
|
+
}
|
|
170
|
+
throw new RemoteSkillsError(`Failed to clone Limrun skills: ${message}`);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
function loadSkillsFromCheckout(params) {
|
|
174
|
+
const { owner, repo, ref, commit, rootDir } = params;
|
|
175
|
+
const skillsRoot = path_1.default.join(rootDir, 'skills');
|
|
176
|
+
const catalogPath = path_1.default.join(rootDir, 'catalog.json');
|
|
177
|
+
const catalog = parseCatalog(readJsonFile(catalogPath));
|
|
178
|
+
const catalogNames = catalog.skills.map((skill) => skill.name);
|
|
179
|
+
const duplicateCatalogNames = catalogNames.filter((name, index) => catalogNames.indexOf(name) !== index);
|
|
180
|
+
if (duplicateCatalogNames.length > 0) {
|
|
181
|
+
throw new RemoteSkillsError(`catalog.json has duplicate skill names: ${[...new Set(duplicateCatalogNames)].join(', ')}`);
|
|
182
|
+
}
|
|
183
|
+
if (!catalog.skills.some((skill) => skill.defaultSelected)) {
|
|
184
|
+
throw new RemoteSkillsError('catalog.json must mark at least one skill as defaultSelected');
|
|
185
|
+
}
|
|
186
|
+
const skills = catalog.skills.map((catalogSkill) => {
|
|
187
|
+
const sourceDir = path_1.default.join(skillsRoot, catalogSkill.name);
|
|
188
|
+
if (!isPathInside(skillsRoot, sourceDir)) {
|
|
189
|
+
throw new RemoteSkillsError(`catalog.json skill escapes skills directory: ${catalogSkill.name}`);
|
|
190
|
+
}
|
|
191
|
+
if (!fs_1.default.existsSync(sourceDir) || !fs_1.default.statSync(sourceDir).isDirectory()) {
|
|
192
|
+
throw new RemoteSkillsError(`catalog.json entries missing from skills/: ${catalogSkill.name}`);
|
|
193
|
+
}
|
|
194
|
+
const skillMdPath = path_1.default.join(sourceDir, 'SKILL.md');
|
|
195
|
+
if (!fs_1.default.existsSync(skillMdPath)) {
|
|
196
|
+
throw new RemoteSkillsError(`Downloaded skill is missing skills/${catalogSkill.name}/SKILL.md`);
|
|
197
|
+
}
|
|
198
|
+
const frontmatter = parseSkillFrontmatter(catalogSkill.name, fs_1.default.readFileSync(skillMdPath, 'utf8'));
|
|
199
|
+
return {
|
|
200
|
+
name: frontmatter.name,
|
|
201
|
+
description: frontmatter.description,
|
|
202
|
+
defaultSelected: catalogSkill.defaultSelected,
|
|
203
|
+
sourceDir,
|
|
204
|
+
};
|
|
205
|
+
});
|
|
206
|
+
return {
|
|
207
|
+
owner,
|
|
208
|
+
repo,
|
|
209
|
+
ref,
|
|
210
|
+
commit,
|
|
211
|
+
rootDir,
|
|
212
|
+
skillsRoot,
|
|
213
|
+
skills,
|
|
214
|
+
cleanup: () => cleanupSkillsTempDir(rootDir),
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
async function loadRemoteSkills(options = {}) {
|
|
218
|
+
const owner = options.owner ?? exports.DEFAULT_SKILLS_OWNER;
|
|
219
|
+
const repo = options.repo ?? exports.DEFAULT_SKILLS_REPO;
|
|
220
|
+
const ref = options.ref ?? exports.DEFAULT_SKILLS_REF;
|
|
221
|
+
const cloneImpl = options.cloneImpl ?? cloneSkillsRepo;
|
|
222
|
+
const cloned = await cloneImpl(owner, repo, ref);
|
|
223
|
+
try {
|
|
224
|
+
return loadSkillsFromCheckout({
|
|
225
|
+
owner,
|
|
226
|
+
repo,
|
|
227
|
+
ref,
|
|
228
|
+
commit: cloned.commit,
|
|
229
|
+
rootDir: cloned.rootDir,
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
catch (err) {
|
|
233
|
+
cleanupSkillsTempDir(cloned.rootDir);
|
|
234
|
+
throw err;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
exports.__remoteSkillsTestUtils = {
|
|
238
|
+
cleanupSkillsTempDir,
|
|
239
|
+
loadSkillsFromCheckout,
|
|
240
|
+
};
|
|
241
|
+
//# sourceMappingURL=remote-skills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-skills.js","sourceRoot":"","sources":["../../src/lib/remote-skills.ts"],"names":[],"mappings":";;;;;;AA2RA,4CAkBC;AA7SD,4CAAoB;AACpB,4CAAoB;AACpB,gDAAwB;AACxB,iDAAyC;AACzC,+BAAiC;AAEjC,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAqC,CAAC;AAEvD,QAAA,oBAAoB,GAAG,YAAY,CAAC;AACpC,QAAA,mBAAmB,GAAG,QAAQ,CAAC;AAC/B,QAAA,kBAAkB,GAAG,MAAM,CAAC;AACzC,MAAM,wBAAwB,GAAG,MAAO,CAAC;AACzC,MAAM,gBAAgB,GAAG,CAAC,GAAG,EAAE;IAC7B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IACvD,IAAI,CAAC,GAAG;QAAE,OAAO,wBAAwB,CAAC;IAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACxC,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,wBAAwB,CAAC;AACnF,CAAC,CAAC,EAAE,CAAC;AACL,MAAM,aAAa,GAAG,IAAA,gBAAS,EAAC,wBAAQ,CAAC,CAAC;AAmC1C,MAAa,iBAAkB,SAAQ,KAAK;IAC1C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AALD,8CAKC;AAOD,SAAS,YAAY,CAAC,KAAc,EAAE,KAAa;IACjD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACrD,MAAM,IAAI,iBAAiB,CAAC,GAAG,KAAK,6BAA6B,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,QAAgB,EAAE,UAAkB;IACxD,MAAM,cAAc,GAAG,cAAI,CAAC,SAAS,CAAC,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC9D,MAAM,gBAAgB,GAAG,cAAI,CAAC,SAAS,CAAC,cAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IAClE,OAAO,gBAAgB,KAAK,cAAc,IAAI,gBAAgB,CAAC,UAAU,CAAC,cAAc,GAAG,cAAI,CAAC,GAAG,CAAC,CAAC;AACvG,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa,EAAE,KAAa;IACvD,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,iBAAiB,CAAC,GAAG,KAAK,4CAA4C,CAAC,CAAC;IACpF,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAe;IAC3C,MAAM,OAAO,GAAG,YAAE,CAAC,MAAM,EAAE,CAAC;IAC5B,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACvF,MAAM,IAAI,iBAAiB,CAAC,wDAAwD,OAAO,EAAE,CAAC,CAAC;IACjG,CAAC;IAED,YAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,IAAI,OAAgB,CAAC;IACrB,IAAI,CAAC;QACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,iBAAiB,CACzB,iCAAiC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACpF,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACtE,MAAM,IAAI,iBAAiB,CAAC,gCAAgC,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,MAAM,GAAG,OAA+B,CAAC;IAC/C,IAAI,MAAM,CAAC,aAAa,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,iBAAiB,CAAC,sCAAsC,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,iBAAiB,CAAC,sCAAsC,CAAC,CAAC;IACtE,CAAC;IACD,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QACrD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAChE,MAAM,IAAI,iBAAiB,CAAC,uBAAuB,KAAK,qBAAqB,CAAC,CAAC;QACjF,CAAC;QACD,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,uBAAuB,KAAK,QAAQ,CAAC,CAAC;QAC/D,mBAAmB,CAAC,KAAK,CAAC,IAAI,EAAE,uBAAuB,KAAK,QAAQ,CAAC,CAAC;QACtE,IAAI,OAAO,KAAK,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;YAC/C,MAAM,IAAI,iBAAiB,CAAC,uBAAuB,KAAK,qCAAqC,CAAC,CAAC;QACjG,CAAC;IACH,CAAC;IACD,OAAO,MAAqB,CAAC;AAC/B,CAAC;AAED,SAAS,qBAAqB,CAAC,SAAiB,EAAE,IAAY;IAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAC7D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,iBAAiB,CAAC,UAAU,SAAS,uCAAuC,CAAC,CAAC;IAC1F,CAAC;IACD,MAAM,eAAe,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,IAAI,iBAAiB,CAAC,UAAU,SAAS,uCAAuC,CAAC,CAAC;IAC1F,CAAC;IAED,IAAI,WAAoB,CAAC;IACzB,IAAI,CAAC;QACH,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,iBAAiB,CACzB,UAAU,SAAS,2CACjB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CACjD,EAAE,CACH,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAClF,MAAM,IAAI,iBAAiB,CAAC,UAAU,SAAS,yCAAyC,CAAC,CAAC;IAC5F,CAAC;IAED,MAAM,MAAM,GAAG,WAAwD,CAAC;IACxE,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,SAAS,4BAA4B,CAAC,CAAC;IAC3E,mBAAmB,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,SAAS,4BAA4B,CAAC,CAAC;IAClF,YAAY,CAAC,MAAM,CAAC,WAAW,EAAE,UAAU,SAAS,mCAAmC,CAAC,CAAC;IACzF,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,IAAI,iBAAiB,CAAC,UAAU,SAAS,sDAAsD,CAAC,CAAC;IACzG,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC;AAChE,CAAC;AAED,SAAS,YAAY,CAAC,QAAgB;IACpC,IAAI,CAAC;QACH,OAAO,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,iBAAiB,CACzB,kBAAkB,cAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACjG,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,KAAa,EAAE,IAAY,EAAE,GAAW;IACrE,MAAM,OAAO,GAAG,YAAE,CAAC,WAAW,CAAC,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;IACzE,MAAM,OAAO,GAAG,sBAAsB,KAAK,IAAI,IAAI,MAAM,CAAC;IAC1D,MAAM,SAAS,GAAG;QAChB,IAAI;QACJ,2BAA2B;QAC3B,IAAI;QACJ,oBAAoB;QACpB,IAAI;QACJ,mBAAmB;QACnB,IAAI;QACJ,qBAAqB;QACrB,OAAO;QACP,SAAS;QACT,GAAG;QACH,UAAU;QACV,GAAG;QACH,OAAO;QACP,OAAO;KACR,CAAC;IACF,MAAM,GAAG,GAAG;QACV,GAAG,OAAO,CAAC,GAAG;QACd,mBAAmB,EAAE,GAAG;QACxB,mBAAmB,EAAE,GAAG;KACzB,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAC1E,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE;YAClF,GAAG;YACH,OAAO,EAAE,KAAM;SAChB,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;IAC5C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC9B,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,MAAM,IAAI,GAAG,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACrF,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,MAAM,IAAI,iBAAiB,CAAC,6DAA6D,CAAC,CAAC;QAC7F,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACnE,MAAM,IAAI,iBAAiB,CACzB,wDAAwD,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAC/F,CAAC;QACJ,CAAC;QACD,IACE,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC;YACzC,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAC;YAC3C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC;YACrC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EACxC,CAAC;YACD,MAAM,IAAI,iBAAiB,CAAC,4DAA4D,OAAO,EAAE,CAAC,CAAC;QACrG,CAAC;QACD,MAAM,IAAI,iBAAiB,CAAC,kCAAkC,OAAO,EAAE,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,MAM/B;IACC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IACrD,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAChD,MAAM,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,YAAY,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC;IACxD,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/D,MAAM,qBAAqB,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC;IACzG,IAAI,qBAAqB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,iBAAiB,CACzB,2CAA2C,CAAC,GAAG,IAAI,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC5F,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC;QAC3D,MAAM,IAAI,iBAAiB,CAAC,8DAA8D,CAAC,CAAC;IAC9F,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE;QACjD,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;QAC3D,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,iBAAiB,CAAC,gDAAgD,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;QACnG,CAAC;QACD,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,YAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YACvE,MAAM,IAAI,iBAAiB,CAAC,8CAA8C,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;QACjG,CAAC;QACD,MAAM,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACrD,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,iBAAiB,CAAC,sCAAsC,YAAY,CAAC,IAAI,WAAW,CAAC,CAAC;QAClG,CAAC;QACD,MAAM,WAAW,GAAG,qBAAqB,CAAC,YAAY,CAAC,IAAI,EAAE,YAAE,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;QACnG,OAAO;YACL,IAAI,EAAE,WAAW,CAAC,IAAI;YACtB,WAAW,EAAE,WAAW,CAAC,WAAW;YACpC,eAAe,EAAE,YAAY,CAAC,eAAe;YAC7C,SAAS;SACV,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,KAAK;QACL,IAAI;QACJ,GAAG;QACH,MAAM;QACN,OAAO;QACP,UAAU;QACV,MAAM;QACN,OAAO,EAAE,GAAG,EAAE,CAAC,oBAAoB,CAAC,OAAO,CAAC;KAC7C,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,gBAAgB,CAAC,UAAmC,EAAE;IAC1E,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,4BAAoB,CAAC;IACpD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,2BAAmB,CAAC;IACjD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,0BAAkB,CAAC;IAC9C,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,eAAe,CAAC;IACvD,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IACjD,IAAI,CAAC;QACH,OAAO,sBAAsB,CAAC;YAC5B,KAAK;YACL,IAAI;YACJ,GAAG;YACH,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,oBAAoB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAEY,QAAA,uBAAuB,GAAG;IACrC,oBAAoB;IACpB,sBAAsB;CACvB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reverse-port-mapping.d.ts","sourceRoot":"","sources":["../../src/lib/reverse-port-mapping.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAaF,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,kBAAkB,CAe3E"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseReversePortMapping = parseReversePortMapping;
|
|
4
|
+
const api_1 = require("@limrun/api");
|
|
5
|
+
function parsePort(value, name, min, max) {
|
|
6
|
+
if (!/^\d+$/.test(value)) {
|
|
7
|
+
throw new Error(`${name} must be a number`);
|
|
8
|
+
}
|
|
9
|
+
const port = Number(value);
|
|
10
|
+
if (!Number.isInteger(port) || port < min || port > max) {
|
|
11
|
+
throw new Error(`${name} must be between ${min} and ${max}`);
|
|
12
|
+
}
|
|
13
|
+
return port;
|
|
14
|
+
}
|
|
15
|
+
function parseReversePortMapping(mapping) {
|
|
16
|
+
const parts = mapping.split(':');
|
|
17
|
+
if (parts.length < 1 || parts.length > 2 || parts.some((part) => part.length === 0)) {
|
|
18
|
+
throw new Error('Mapping must be <remotePort> or <remotePort>:<localPort>');
|
|
19
|
+
}
|
|
20
|
+
const remotePort = parsePort(parts[0], 'remotePort', api_1.Ios.REVERSE_TUNNEL_REMOTE_PORT_MIN, api_1.Ios.REVERSE_TUNNEL_REMOTE_PORT_MAX);
|
|
21
|
+
const localPort = parts[1] ? parsePort(parts[1], 'localPort', 1, 65535) : remotePort;
|
|
22
|
+
return { remotePort, localPort };
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=reverse-port-mapping.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reverse-port-mapping.js","sourceRoot":"","sources":["../../src/lib/reverse-port-mapping.ts"],"names":[],"mappings":";;AAkBA,0DAeC;AAjCD,qCAAkC;AAOlC,SAAS,SAAS,CAAC,KAAa,EAAE,IAAY,EAAE,GAAW,EAAE,GAAW;IACtE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,mBAAmB,CAAC,CAAC;IAC9C,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,oBAAoB,GAAG,QAAQ,GAAG,EAAE,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,uBAAuB,CAAC,OAAe;IACrD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;QACpF,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;IAED,MAAM,UAAU,GAAG,SAAS,CAC1B,KAAK,CAAC,CAAC,CAAE,EACT,YAAY,EACZ,SAAG,CAAC,8BAA8B,EAClC,SAAG,CAAC,8BAA8B,CACnC,CAAC;IACF,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IAErF,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;AACnC,CAAC"}
|