node-simctl 7.2.2 → 7.3.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/CHANGELOG.md +7 -0
- package/build/index.js +9 -17
- package/build/lib/helpers.d.ts +13 -0
- package/build/lib/helpers.d.ts.map +1 -0
- package/build/lib/helpers.js +22 -16
- package/build/lib/helpers.js.map +1 -1
- package/build/lib/logger.d.ts +4 -0
- package/build/lib/logger.d.ts.map +1 -0
- package/build/lib/logger.js +13 -19
- package/build/lib/logger.js.map +1 -1
- package/build/lib/simctl.d.ts +131 -0
- package/build/lib/simctl.d.ts.map +1 -0
- package/build/lib/simctl.js +170 -94
- package/build/lib/simctl.js.map +1 -1
- package/build/lib/subcommands/addmedia.d.ts +16 -0
- package/build/lib/subcommands/addmedia.d.ts.map +1 -0
- package/build/lib/subcommands/addmedia.js +17 -12
- package/build/lib/subcommands/addmedia.js.map +1 -1
- package/build/lib/subcommands/appinfo.d.ts +45 -0
- package/build/lib/subcommands/appinfo.d.ts.map +1 -0
- package/build/lib/subcommands/appinfo.js +47 -15
- package/build/lib/subcommands/appinfo.js.map +1 -1
- package/build/lib/subcommands/boot.d.ts +12 -0
- package/build/lib/subcommands/boot.d.ts.map +1 -0
- package/build/lib/subcommands/boot.js +47 -22
- package/build/lib/subcommands/boot.js.map +1 -1
- package/build/lib/subcommands/bootstatus.d.ts +56 -0
- package/build/lib/subcommands/bootstatus.d.ts.map +1 -0
- package/build/lib/subcommands/bootstatus.js +102 -87
- package/build/lib/subcommands/bootstatus.js.map +1 -1
- package/build/lib/subcommands/create.d.ts +34 -0
- package/build/lib/subcommands/create.d.ts.map +1 -0
- package/build/lib/subcommands/create.js +115 -65
- package/build/lib/subcommands/create.js.map +1 -1
- package/build/lib/subcommands/delete.d.ts +12 -0
- package/build/lib/subcommands/delete.d.ts.map +1 -0
- package/build/lib/subcommands/delete.js +13 -12
- package/build/lib/subcommands/delete.js.map +1 -1
- package/build/lib/subcommands/erase.d.ts +15 -0
- package/build/lib/subcommands/erase.d.ts.map +1 -0
- package/build/lib/subcommands/erase.js +19 -14
- package/build/lib/subcommands/erase.js.map +1 -1
- package/build/lib/subcommands/get_app_container.d.ts +22 -0
- package/build/lib/subcommands/get_app_container.d.ts.map +1 -0
- package/build/lib/subcommands/get_app_container.js +26 -19
- package/build/lib/subcommands/get_app_container.js.map +1 -1
- package/build/lib/subcommands/getenv.d.ts +14 -0
- package/build/lib/subcommands/getenv.d.ts.map +1 -0
- package/build/lib/subcommands/getenv.js +17 -17
- package/build/lib/subcommands/getenv.js.map +1 -1
- package/build/lib/subcommands/index.d.ts +3 -0
- package/build/lib/subcommands/index.d.ts.map +1 -0
- package/build/lib/subcommands/index.js +33 -36
- package/build/lib/subcommands/index.js.map +1 -1
- package/build/lib/subcommands/install.d.ts +15 -0
- package/build/lib/subcommands/install.d.ts.map +1 -0
- package/build/lib/subcommands/install.js +16 -12
- package/build/lib/subcommands/install.js.map +1 -1
- package/build/lib/subcommands/io.d.ts +15 -0
- package/build/lib/subcommands/io.d.ts.map +1 -0
- package/build/lib/subcommands/io.js +32 -25
- package/build/lib/subcommands/io.js.map +1 -1
- package/build/lib/subcommands/keychain.d.ts +53 -0
- package/build/lib/subcommands/keychain.d.ts.map +1 -0
- package/build/lib/subcommands/keychain.js +85 -51
- package/build/lib/subcommands/keychain.js.map +1 -1
- package/build/lib/subcommands/launch.d.ts +19 -0
- package/build/lib/subcommands/launch.d.ts.map +1 -0
- package/build/lib/subcommands/launch.js +28 -19
- package/build/lib/subcommands/launch.js.map +1 -1
- package/build/lib/subcommands/list.d.ts +120 -0
- package/build/lib/subcommands/list.d.ts.map +1 -0
- package/build/lib/subcommands/list.js +296 -138
- package/build/lib/subcommands/list.js.map +1 -1
- package/build/lib/subcommands/location.d.ts +20 -0
- package/build/lib/subcommands/location.d.ts.map +1 -0
- package/build/lib/subcommands/location.js +37 -22
- package/build/lib/subcommands/location.js.map +1 -1
- package/build/lib/subcommands/openurl.d.ts +17 -0
- package/build/lib/subcommands/openurl.d.ts.map +1 -0
- package/build/lib/subcommands/openurl.js +18 -12
- package/build/lib/subcommands/openurl.js.map +1 -1
- package/build/lib/subcommands/pbcopy.d.ts +17 -0
- package/build/lib/subcommands/pbcopy.d.ts.map +1 -0
- package/build/lib/subcommands/pbcopy.js +26 -20
- package/build/lib/subcommands/pbcopy.js.map +1 -1
- package/build/lib/subcommands/pbpaste.d.ts +17 -0
- package/build/lib/subcommands/pbpaste.d.ts.map +1 -0
- package/build/lib/subcommands/pbpaste.js +20 -16
- package/build/lib/subcommands/pbpaste.js.map +1 -1
- package/build/lib/subcommands/privacy.d.ts +55 -0
- package/build/lib/subcommands/privacy.d.ts.map +1 -0
- package/build/lib/subcommands/privacy.js +60 -18
- package/build/lib/subcommands/privacy.js.map +1 -1
- package/build/lib/subcommands/push.d.ts +25 -0
- package/build/lib/subcommands/push.d.ts.map +1 -0
- package/build/lib/subcommands/push.js +41 -24
- package/build/lib/subcommands/push.js.map +1 -1
- package/build/lib/subcommands/shutdown.d.ts +12 -0
- package/build/lib/subcommands/shutdown.d.ts.map +1 -0
- package/build/lib/subcommands/shutdown.js +47 -22
- package/build/lib/subcommands/shutdown.js.map +1 -1
- package/build/lib/subcommands/spawn.d.ts +26 -0
- package/build/lib/subcommands/spawn.d.ts.map +1 -0
- package/build/lib/subcommands/spawn.js +42 -26
- package/build/lib/subcommands/spawn.js.map +1 -1
- package/build/lib/subcommands/terminate.d.ts +15 -0
- package/build/lib/subcommands/terminate.d.ts.map +1 -0
- package/build/lib/subcommands/terminate.js +16 -12
- package/build/lib/subcommands/terminate.js.map +1 -1
- package/build/lib/subcommands/ui.d.ts +24 -0
- package/build/lib/subcommands/ui.d.ts.map +1 -0
- package/build/lib/subcommands/ui.js +32 -20
- package/build/lib/subcommands/ui.js.map +1 -1
- package/build/lib/subcommands/uninstall.d.ts +16 -0
- package/build/lib/subcommands/uninstall.d.ts.map +1 -0
- package/build/lib/subcommands/uninstall.js +17 -12
- package/build/lib/subcommands/uninstall.js.map +1 -1
- package/lib/simctl.js +13 -3
- package/lib/subcommands/addmedia.js +1 -1
- package/lib/subcommands/bootstatus.js +2 -2
- package/lib/subcommands/create.js +2 -2
- package/lib/subcommands/erase.js +1 -1
- package/lib/subcommands/keychain.js +2 -2
- package/lib/subcommands/launch.js +1 -0
- package/lib/subcommands/list.js +6 -6
- package/lib/subcommands/location.js +1 -1
- package/lib/subcommands/openurl.js +1 -1
- package/lib/subcommands/spawn.js +2 -2
- package/package.json +28 -17
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
## [7.3.0](https://github.com/appium/node-simctl/compare/v7.2.2...v7.3.0) (2023-08-18)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* Switch from babel to typescript ([#190](https://github.com/appium/node-simctl/issues/190)) ([bed549f](https://github.com/appium/node-simctl/commit/bed549f4be5c0261ebc2e479fdbed68db963fc15))
|
|
7
|
+
|
|
1
8
|
## [7.2.2](https://github.com/appium/node-simctl/compare/v7.2.1...v7.2.2) (2023-08-14)
|
|
2
9
|
|
|
3
10
|
|
package/build/index.js
CHANGED
|
@@ -1,18 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}
|
|
12
|
-
});
|
|
13
|
-
exports.default = void 0;
|
|
14
|
-
require("source-map-support/register");
|
|
15
|
-
var _simctl = _interopRequireDefault(require("./lib/simctl"));
|
|
16
|
-
var _default = _simctl.default;
|
|
17
|
-
exports.default = _default;
|
|
18
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfc2ltY3RsIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfZGVmYXVsdCIsIlNpbWN0bCIsImV4cG9ydHMiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFNpbWN0bCBmcm9tICcuL2xpYi9zaW1jdGwnO1xuXG5leHBvcnQgeyBTaW1jdGwgfTtcbmV4cG9ydCBkZWZhdWx0IFNpbWN0bDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFBa0MsSUFBQUMsUUFBQSxHQUduQkMsZUFBTTtBQUFBQyxPQUFBLENBQUFDLE9BQUEsR0FBQUgsUUFBQSJ9
|
|
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.Simctl = void 0;
|
|
7
|
+
const simctl_1 = __importDefault(require("./lib/simctl"));
|
|
8
|
+
exports.Simctl = simctl_1.default;
|
|
9
|
+
exports.default = simctl_1.default;
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export function getXcrunBinary(): string;
|
|
2
|
+
export const DEFAULT_EXEC_TIMEOUT: number;
|
|
3
|
+
export const SIM_RUNTIME_NAME: "com.apple.CoreSimulator.SimRuntime.";
|
|
4
|
+
/**
|
|
5
|
+
* "Normalize" the version, since iOS uses 'major.minor' but the runtimes can
|
|
6
|
+
* be 'major.minor.patch'
|
|
7
|
+
*
|
|
8
|
+
* @param {string} version - the string version
|
|
9
|
+
* @return {string} The version in 'major.minor' form
|
|
10
|
+
* @throws {Error} If the version not parseable by the `semver` package
|
|
11
|
+
*/
|
|
12
|
+
export function normalizeVersion(version: string): string;
|
|
13
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../lib/helpers.js"],"names":[],"mappings":"AA0BO,yCAAgE;AAxBvE,0CAA4C;AAC5C,qEAA+D;AAE/D;;;;;;;GAOG;AACH,0CAJW,MAAM,GACL,MAAM,CASjB"}
|
package/build/lib/helpers.js
CHANGED
|
@@ -1,24 +1,30 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
require("source-map-support/register");
|
|
10
|
-
var _semver = _interopRequireDefault(require("semver"));
|
|
11
|
-
const DEFAULT_EXEC_TIMEOUT = 10 * 60 * 1000;
|
|
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.getXcrunBinary = exports.normalizeVersion = exports.SIM_RUNTIME_NAME = exports.DEFAULT_EXEC_TIMEOUT = void 0;
|
|
7
|
+
const semver_1 = __importDefault(require("semver"));
|
|
8
|
+
const DEFAULT_EXEC_TIMEOUT = 10 * 60 * 1000; // ms
|
|
12
9
|
exports.DEFAULT_EXEC_TIMEOUT = DEFAULT_EXEC_TIMEOUT;
|
|
13
10
|
const SIM_RUNTIME_NAME = 'com.apple.CoreSimulator.SimRuntime.';
|
|
14
11
|
exports.SIM_RUNTIME_NAME = SIM_RUNTIME_NAME;
|
|
12
|
+
/**
|
|
13
|
+
* "Normalize" the version, since iOS uses 'major.minor' but the runtimes can
|
|
14
|
+
* be 'major.minor.patch'
|
|
15
|
+
*
|
|
16
|
+
* @param {string} version - the string version
|
|
17
|
+
* @return {string} The version in 'major.minor' form
|
|
18
|
+
* @throws {Error} If the version not parseable by the `semver` package
|
|
19
|
+
*/
|
|
15
20
|
function normalizeVersion(version) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
+
const semverVersion = semver_1.default.coerce(version);
|
|
22
|
+
if (!semverVersion) {
|
|
23
|
+
throw new Error(`Unable to parse version '${version}'`);
|
|
24
|
+
}
|
|
25
|
+
return `${semverVersion.major}.${semverVersion.minor}`;
|
|
21
26
|
}
|
|
27
|
+
exports.normalizeVersion = normalizeVersion;
|
|
22
28
|
const getXcrunBinary = () => process.env.XCRUN_BINARY || 'xcrun';
|
|
23
29
|
exports.getXcrunBinary = getXcrunBinary;
|
|
24
|
-
//# sourceMappingURL=
|
|
30
|
+
//# sourceMappingURL=helpers.js.map
|
package/build/lib/helpers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../lib/helpers.js"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAE5B,MAAM,oBAAoB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,KAAK;AAoBhD,oDAAoB;AAnBtB,MAAM,gBAAgB,GAAG,qCAAqC,CAAC;AAmBvC,4CAAgB;AAjBxC;;;;;;;GAOG;AACH,SAAS,gBAAgB,CAAE,OAAO;IAChC,MAAM,aAAa,GAAG,gBAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7C,IAAI,CAAC,aAAa,EAAE;QAClB,MAAM,IAAI,KAAK,CAAC,4BAA4B,OAAO,GAAG,CAAC,CAAC;KACzD;IACD,OAAO,GAAG,aAAa,CAAC,KAAK,IAAI,aAAa,CAAC,KAAK,EAAE,CAAC;AACzD,CAAC;AAIC,4CAAgB;AAGX,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,OAAO,CAAC;AAA3D,QAAA,cAAc,kBAA6C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../lib/logger.js"],"names":[],"mappings":";AAGA,kCAA4B;AAU5B,uBAAwB"}
|
package/build/lib/logger.js
CHANGED
|
@@ -1,25 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
require("source-map-support/register");
|
|
9
|
-
var _npmlog = _interopRequireDefault(require("npmlog"));
|
|
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.LOG_PREFIX = void 0;
|
|
7
|
+
const npmlog_1 = __importDefault(require("npmlog"));
|
|
10
8
|
const LOG_PREFIX = 'simctl';
|
|
11
9
|
exports.LOG_PREFIX = LOG_PREFIX;
|
|
12
10
|
function getLogger() {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
}, 'dbug');
|
|
19
|
-
}
|
|
20
|
-
return logger;
|
|
11
|
+
const logger = global._global_npmlog || npmlog_1.default;
|
|
12
|
+
if (!logger.debug) {
|
|
13
|
+
logger.addLevel('debug', 1000, { fg: 'blue', bg: 'black' }, 'dbug');
|
|
14
|
+
}
|
|
15
|
+
return logger;
|
|
21
16
|
}
|
|
22
17
|
const log = getLogger();
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbnBtbG9nIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJMT0dfUFJFRklYIiwiZXhwb3J0cyIsImdldExvZ2dlciIsImxvZ2dlciIsImdsb2JhbCIsIl9nbG9iYWxfbnBtbG9nIiwibnBtbG9nIiwiZGVidWciLCJhZGRMZXZlbCIsImZnIiwiYmciLCJsb2ciLCJfZGVmYXVsdCIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi9saWIvbG9nZ2VyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBucG1sb2cgZnJvbSAnbnBtbG9nJztcblxuXG5jb25zdCBMT0dfUFJFRklYID0gJ3NpbWN0bCc7XG5cbmZ1bmN0aW9uIGdldExvZ2dlciAoKSB7XG4gIGNvbnN0IGxvZ2dlciA9IGdsb2JhbC5fZ2xvYmFsX25wbWxvZyB8fCBucG1sb2c7XG4gIGlmICghbG9nZ2VyLmRlYnVnKSB7XG4gICAgbG9nZ2VyLmFkZExldmVsKCdkZWJ1ZycsIDEwMDAsIHsgZmc6ICdibHVlJywgYmc6ICdibGFjaycgfSwgJ2RidWcnKTtcbiAgfVxuICByZXR1cm4gbG9nZ2VyO1xufVxuXG5jb25zdCBsb2cgPSBnZXRMb2dnZXIoKTtcblxuZXhwb3J0IHsgTE9HX1BSRUZJWCB9O1xuZXhwb3J0IGRlZmF1bHQgbG9nO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUdBLE1BQU1DLFVBQVUsR0FBRyxRQUFRO0FBQUNDLE9BQUEsQ0FBQUQsVUFBQSxHQUFBQSxVQUFBO0FBRTVCLFNBQVNFLFNBQVNBLENBQUEsRUFBSTtFQUNwQixNQUFNQyxNQUFNLEdBQUdDLE1BQU0sQ0FBQ0MsY0FBYyxJQUFJQyxlQUFNO0VBQzlDLElBQUksQ0FBQ0gsTUFBTSxDQUFDSSxLQUFLLEVBQUU7SUFDakJKLE1BQU0sQ0FBQ0ssUUFBUSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUU7TUFBRUMsRUFBRSxFQUFFLE1BQU07TUFBRUMsRUFBRSxFQUFFO0lBQVEsQ0FBQyxFQUFFLE1BQU0sQ0FBQztFQUNyRTtFQUNBLE9BQU9QLE1BQU07QUFDZjtBQUVBLE1BQU1RLEdBQUcsR0FBR1QsU0FBUyxDQUFDLENBQUM7QUFBQyxJQUFBVSxRQUFBLEdBR1RELEdBQUc7QUFBQVYsT0FBQSxDQUFBWSxPQUFBLEdBQUFELFFBQUEifQ==
|
|
18
|
+
exports.default = log;
|
|
19
|
+
//# sourceMappingURL=logger.js.map
|
package/build/lib/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../lib/logger.js"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAG5B,MAAM,UAAU,GAAG,QAAQ,CAAC;AAYnB,gCAAU;AAVnB,SAAS,SAAS;IAChB,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,IAAI,gBAAM,CAAC;IAC/C,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;QACjB,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC;KACrE;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;AAGxB,kBAAe,GAAG,CAAC"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
export default Simctl;
|
|
2
|
+
export type ExecOpts = {
|
|
3
|
+
/**
|
|
4
|
+
* [[]] - The list of additional subcommand arguments.
|
|
5
|
+
* It's empty by default.
|
|
6
|
+
*/
|
|
7
|
+
args: string[];
|
|
8
|
+
/**
|
|
9
|
+
* [{}] - Environment variables mapping. All these variables
|
|
10
|
+
* will be passed Simulator and used in the executing function.
|
|
11
|
+
*/
|
|
12
|
+
env: any;
|
|
13
|
+
/**
|
|
14
|
+
* [true] - Set it to _false_ to throw execution errors
|
|
15
|
+
* immediately without logging any additional information.
|
|
16
|
+
*/
|
|
17
|
+
logErrors: boolean;
|
|
18
|
+
/**
|
|
19
|
+
* [false] - Whether to execute the given command
|
|
20
|
+
* 'synchronously' or 'asynchronously'. Affects the returned result of the function.
|
|
21
|
+
*/
|
|
22
|
+
asynchronous: boolean;
|
|
23
|
+
/**
|
|
24
|
+
* - Explicitly sets streams encoding for the executed
|
|
25
|
+
* command input and outputs.
|
|
26
|
+
*/
|
|
27
|
+
encoding: string | null;
|
|
28
|
+
/**
|
|
29
|
+
* - One or more architecture names to be enforced while
|
|
30
|
+
* executing xcrun. See https://github.com/appium/appium/issues/18966 for more details.
|
|
31
|
+
*/
|
|
32
|
+
architectures: string | string[];
|
|
33
|
+
};
|
|
34
|
+
export type SimctlOpts = {
|
|
35
|
+
/**
|
|
36
|
+
* - The xcrun properties. Currently only one property
|
|
37
|
+
* is supported, which is `path` and it by default contains `null`, which enforces
|
|
38
|
+
* the instance to automatically detect the full path to `xcrun` tool and to throw
|
|
39
|
+
* an exception if it cannot be detected. If the path is set upon instance creation
|
|
40
|
+
* then it is going to be used by `exec` and no autodetection will happen.
|
|
41
|
+
*/
|
|
42
|
+
xcrun: any | null;
|
|
43
|
+
/**
|
|
44
|
+
* [600000] - The maximum number of milliseconds
|
|
45
|
+
* to wait for single synchronous xcrun command.
|
|
46
|
+
*/
|
|
47
|
+
execTimeout: number;
|
|
48
|
+
/**
|
|
49
|
+
* [true] - Whether to wire xcrun error messages
|
|
50
|
+
* into debug log before throwing them.
|
|
51
|
+
*/
|
|
52
|
+
logErrors: boolean;
|
|
53
|
+
/**
|
|
54
|
+
* - The unique identifier of the current device, which is
|
|
55
|
+
* going to be implicitly passed to all methods, which require it. It can either be set
|
|
56
|
+
* upon instance creation if it is already known in advance or later when/if needed via the
|
|
57
|
+
* corresponding instance setter.
|
|
58
|
+
*/
|
|
59
|
+
udid: string | null;
|
|
60
|
+
/**
|
|
61
|
+
* - Full path to the set of devices that you want to manage.
|
|
62
|
+
* By default this path usually equals to ~/Library/Developer/CoreSimulator/Devices
|
|
63
|
+
*/
|
|
64
|
+
devicesSetPath: string | null;
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* @typedef {Object} ExecOpts
|
|
68
|
+
* @property {string[]} args [[]] - The list of additional subcommand arguments.
|
|
69
|
+
* It's empty by default.
|
|
70
|
+
* @property {Object} env [{}] - Environment variables mapping. All these variables
|
|
71
|
+
* will be passed Simulator and used in the executing function.
|
|
72
|
+
* @property {boolean} logErrors [true] - Set it to _false_ to throw execution errors
|
|
73
|
+
* immediately without logging any additional information.
|
|
74
|
+
* @property {boolean} asynchronous [false] - Whether to execute the given command
|
|
75
|
+
* 'synchronously' or 'asynchronously'. Affects the returned result of the function.
|
|
76
|
+
* @property {string?} encoding - Explicitly sets streams encoding for the executed
|
|
77
|
+
* command input and outputs.
|
|
78
|
+
* @property {string|string[]} architectures - One or more architecture names to be enforced while
|
|
79
|
+
* executing xcrun. See https://github.com/appium/appium/issues/18966 for more details.
|
|
80
|
+
*/
|
|
81
|
+
/**
|
|
82
|
+
* @typedef {Object} SimctlOpts
|
|
83
|
+
* @property {Object?} xcrun - The xcrun properties. Currently only one property
|
|
84
|
+
* is supported, which is `path` and it by default contains `null`, which enforces
|
|
85
|
+
* the instance to automatically detect the full path to `xcrun` tool and to throw
|
|
86
|
+
* an exception if it cannot be detected. If the path is set upon instance creation
|
|
87
|
+
* then it is going to be used by `exec` and no autodetection will happen.
|
|
88
|
+
* @property {number} execTimeout [600000] - The maximum number of milliseconds
|
|
89
|
+
* to wait for single synchronous xcrun command.
|
|
90
|
+
* @property {boolean} logErrors [true] - Whether to wire xcrun error messages
|
|
91
|
+
* into debug log before throwing them.
|
|
92
|
+
* @property {string?} udid - The unique identifier of the current device, which is
|
|
93
|
+
* going to be implicitly passed to all methods, which require it. It can either be set
|
|
94
|
+
* upon instance creation if it is already known in advance or later when/if needed via the
|
|
95
|
+
* corresponding instance setter.
|
|
96
|
+
* @property {string?} devicesSetPath - Full path to the set of devices that you want to manage.
|
|
97
|
+
* By default this path usually equals to ~/Library/Developer/CoreSimulator/Devices
|
|
98
|
+
*/
|
|
99
|
+
export class Simctl {
|
|
100
|
+
/**
|
|
101
|
+
* @param {Partial<SimctlOpts>} opts
|
|
102
|
+
*/
|
|
103
|
+
constructor(opts?: Partial<SimctlOpts>);
|
|
104
|
+
/** @type {any?} */
|
|
105
|
+
xcrun: any | null;
|
|
106
|
+
/** @type {number} */
|
|
107
|
+
execTimeout: number;
|
|
108
|
+
/** @type {boolean} */
|
|
109
|
+
logErrors: boolean;
|
|
110
|
+
_udid: string | null;
|
|
111
|
+
_devicesSetPath: string | null;
|
|
112
|
+
set udid(arg: string | null);
|
|
113
|
+
get udid(): string | null;
|
|
114
|
+
set devicesSetPath(arg: string | null);
|
|
115
|
+
get devicesSetPath(): string | null;
|
|
116
|
+
requireUdid(commandName?: null): string;
|
|
117
|
+
requireXcrun(): Promise<any>;
|
|
118
|
+
/**
|
|
119
|
+
* Execute the particular simctl command.
|
|
120
|
+
*
|
|
121
|
+
* @param {string} subcommand - One of available simctl subcommands.
|
|
122
|
+
* Execute `xcrun simctl` in Terminal to see the full list
|
|
123
|
+
* of available subcommands.
|
|
124
|
+
* @param {Partial<ExecOpts>} opts
|
|
125
|
+
* @return {Promise<import('teen_process').TeenProcessExecResult|import('teen_process').SubProcess>} Either the result of teen process's `exec` or
|
|
126
|
+
* `SubProcess` instance depending of `opts.asynchronous` value.
|
|
127
|
+
* @throws {Error} If the simctl subcommand command returns non-zero return code.
|
|
128
|
+
*/
|
|
129
|
+
exec(subcommand: string, opts?: Partial<ExecOpts>): Promise<import("teen_process").TeenProcessExecResult<any> | import('teen_process').SubProcess>;
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=simctl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simctl.d.ts","sourceRoot":"","sources":["../../lib/simctl.js"],"names":[],"mappings":";;;;;;UAoBc,MAAM,EAAE;;;;;;;;;;eAIR,OAAO;;;;;kBAEP,OAAO;;;;;cAEP,MAAM;;;;;mBAEN,MAAM,GAAC,MAAM,EAAE;;;;;;;;;;;;;;;iBAYf,MAAM;;;;;eAEN,OAAO;;;;;;;UAEP,MAAM;;;;;oBAIN,MAAM;;AAhCpB;;;;;;;;;;;;;;GAcG;AAGH;;;;;;;;;;;;;;;;;GAiBG;AAGH;IAUE;;OAEG;IACH,mBAFW,QAAQ,UAAU,CAAC,EAU7B;IApBD,mBAAmB;IACnB,OADW,GAAG,QACR;IAEN,qBAAqB;IACrB,aADW,MAAM,CACL;IAEZ,sBAAsB;IACtB,WADW,OAAO,CACR;IAWR,qBAAkD;IAClD,+BAAgF;IAGlF,6BAEC;IAED,0BAEC;IAED,uCAEC;IAED,oCAEC;IAED,wCAMC;IAED,6BAYC;IAED;;;;;;;;;;OAUG;IACH,iBARW,MAAM,SAGN,QAAQ,QAAQ,CAAC,GAChB,QAAQ,oDAA6C,OAAO,cAAc,EAAE,UAAU,CAAC,CAyDlG;CACF"}
|
package/build/lib/simctl.js
CHANGED
|
@@ -1,108 +1,184 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
Object.
|
|
5
|
-
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
6
17
|
});
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
var
|
|
10
|
-
var
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
var
|
|
15
|
-
|
|
16
|
-
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.Simctl = void 0;
|
|
30
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
31
|
+
const index_js_1 = __importDefault(require("./subcommands/index.js"));
|
|
32
|
+
const which_1 = __importDefault(require("which"));
|
|
33
|
+
const logger_1 = __importStar(require("./logger"));
|
|
34
|
+
const helpers_1 = require("./helpers");
|
|
35
|
+
const teen_process_1 = require("teen_process");
|
|
17
36
|
const SIMCTL_ENV_PREFIX = 'SIMCTL_CHILD_';
|
|
18
37
|
const DEFAULT_OPTS = {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
38
|
+
xcrun: {
|
|
39
|
+
path: null,
|
|
40
|
+
},
|
|
41
|
+
execTimeout: helpers_1.DEFAULT_EXEC_TIMEOUT,
|
|
42
|
+
logErrors: true,
|
|
24
43
|
};
|
|
44
|
+
/**
|
|
45
|
+
* @typedef {Object} ExecOpts
|
|
46
|
+
* @property {string[]} args [[]] - The list of additional subcommand arguments.
|
|
47
|
+
* It's empty by default.
|
|
48
|
+
* @property {Object} env [{}] - Environment variables mapping. All these variables
|
|
49
|
+
* will be passed Simulator and used in the executing function.
|
|
50
|
+
* @property {boolean} logErrors [true] - Set it to _false_ to throw execution errors
|
|
51
|
+
* immediately without logging any additional information.
|
|
52
|
+
* @property {boolean} asynchronous [false] - Whether to execute the given command
|
|
53
|
+
* 'synchronously' or 'asynchronously'. Affects the returned result of the function.
|
|
54
|
+
* @property {string?} encoding - Explicitly sets streams encoding for the executed
|
|
55
|
+
* command input and outputs.
|
|
56
|
+
* @property {string|string[]} architectures - One or more architecture names to be enforced while
|
|
57
|
+
* executing xcrun. See https://github.com/appium/appium/issues/18966 for more details.
|
|
58
|
+
*/
|
|
59
|
+
/**
|
|
60
|
+
* @typedef {Object} SimctlOpts
|
|
61
|
+
* @property {Object?} xcrun - The xcrun properties. Currently only one property
|
|
62
|
+
* is supported, which is `path` and it by default contains `null`, which enforces
|
|
63
|
+
* the instance to automatically detect the full path to `xcrun` tool and to throw
|
|
64
|
+
* an exception if it cannot be detected. If the path is set upon instance creation
|
|
65
|
+
* then it is going to be used by `exec` and no autodetection will happen.
|
|
66
|
+
* @property {number} execTimeout [600000] - The maximum number of milliseconds
|
|
67
|
+
* to wait for single synchronous xcrun command.
|
|
68
|
+
* @property {boolean} logErrors [true] - Whether to wire xcrun error messages
|
|
69
|
+
* into debug log before throwing them.
|
|
70
|
+
* @property {string?} udid - The unique identifier of the current device, which is
|
|
71
|
+
* going to be implicitly passed to all methods, which require it. It can either be set
|
|
72
|
+
* upon instance creation if it is already known in advance or later when/if needed via the
|
|
73
|
+
* corresponding instance setter.
|
|
74
|
+
* @property {string?} devicesSetPath - Full path to the set of devices that you want to manage.
|
|
75
|
+
* By default this path usually equals to ~/Library/Developer/CoreSimulator/Devices
|
|
76
|
+
*/
|
|
25
77
|
class Simctl {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
78
|
+
/**
|
|
79
|
+
* @param {Partial<SimctlOpts>} opts
|
|
80
|
+
*/
|
|
81
|
+
constructor(opts = {}) {
|
|
82
|
+
opts = lodash_1.default.cloneDeep(opts);
|
|
83
|
+
lodash_1.default.defaultsDeep(opts, DEFAULT_OPTS);
|
|
84
|
+
for (const key of lodash_1.default.keys(DEFAULT_OPTS)) {
|
|
85
|
+
this[key] = opts[key];
|
|
86
|
+
}
|
|
87
|
+
this._udid = lodash_1.default.isNil(opts.udid) ? null : opts.udid;
|
|
88
|
+
this._devicesSetPath = lodash_1.default.isNil(opts.devicesSetPath) ? null : opts.devicesSetPath;
|
|
89
|
+
}
|
|
90
|
+
set udid(value) {
|
|
91
|
+
this._udid = value;
|
|
92
|
+
}
|
|
93
|
+
get udid() {
|
|
94
|
+
return this._udid;
|
|
95
|
+
}
|
|
96
|
+
set devicesSetPath(value) {
|
|
97
|
+
this._devicesSetPath = value;
|
|
31
98
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
}
|
|
35
|
-
set udid(value) {
|
|
36
|
-
this._udid = value;
|
|
37
|
-
}
|
|
38
|
-
get udid() {
|
|
39
|
-
return this._udid;
|
|
40
|
-
}
|
|
41
|
-
set devicesSetPath(value) {
|
|
42
|
-
this._devicesSetPath = value;
|
|
43
|
-
}
|
|
44
|
-
get devicesSetPath() {
|
|
45
|
-
return this._devicesSetPath;
|
|
46
|
-
}
|
|
47
|
-
requireUdid(commandName = null) {
|
|
48
|
-
if (!this.udid) {
|
|
49
|
-
throw new Error(`udid is required to be set for ` + (commandName ? `the '${commandName}' command` : 'this simctl command'));
|
|
99
|
+
get devicesSetPath() {
|
|
100
|
+
return this._devicesSetPath;
|
|
50
101
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
this.xcrun.path = await (0, _which.default)(xcrunBinary);
|
|
58
|
-
} catch (e) {
|
|
59
|
-
throw new Error(`${xcrunBinary} tool has not been found in PATH. ` + `Are Xcode developers tools installed?`);
|
|
60
|
-
}
|
|
102
|
+
requireUdid(commandName = null) {
|
|
103
|
+
if (!this.udid) {
|
|
104
|
+
throw new Error(`udid is required to be set for ` +
|
|
105
|
+
(commandName ? `the '${commandName}' command` : 'this simctl command'));
|
|
106
|
+
}
|
|
107
|
+
return this.udid;
|
|
61
108
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
env = _lodash.default.defaults(_lodash.default.mapKeys(env, (value, key) => _lodash.default.startsWith(key, SIMCTL_ENV_PREFIX) ? key : `${SIMCTL_ENV_PREFIX}${key}`), process.env);
|
|
75
|
-
const execOpts = {
|
|
76
|
-
env,
|
|
77
|
-
encoding
|
|
78
|
-
};
|
|
79
|
-
if (!asynchronous) {
|
|
80
|
-
execOpts.timeout = this.execTimeout;
|
|
109
|
+
async requireXcrun() {
|
|
110
|
+
const xcrunBinary = (0, helpers_1.getXcrunBinary)();
|
|
111
|
+
if (!this.xcrun.path) {
|
|
112
|
+
try {
|
|
113
|
+
this.xcrun.path = await (0, which_1.default)(xcrunBinary);
|
|
114
|
+
}
|
|
115
|
+
catch (e) {
|
|
116
|
+
throw new Error(`${xcrunBinary} tool has not been found in PATH. ` +
|
|
117
|
+
`Are Xcode developers tools installed?`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return this.xcrun.path;
|
|
81
121
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
122
|
+
/**
|
|
123
|
+
* Execute the particular simctl command.
|
|
124
|
+
*
|
|
125
|
+
* @param {string} subcommand - One of available simctl subcommands.
|
|
126
|
+
* Execute `xcrun simctl` in Terminal to see the full list
|
|
127
|
+
* of available subcommands.
|
|
128
|
+
* @param {Partial<ExecOpts>} opts
|
|
129
|
+
* @return {Promise<import('teen_process').TeenProcessExecResult|import('teen_process').SubProcess>} Either the result of teen process's `exec` or
|
|
130
|
+
* `SubProcess` instance depending of `opts.asynchronous` value.
|
|
131
|
+
* @throws {Error} If the simctl subcommand command returns non-zero return code.
|
|
132
|
+
*/
|
|
133
|
+
async exec(subcommand, opts = {}) {
|
|
134
|
+
let { args = [], env = {}, asynchronous = false, encoding, logErrors = true, architectures, } = opts;
|
|
135
|
+
// run a particular simctl command
|
|
136
|
+
args = ['simctl',
|
|
137
|
+
...(this.devicesSetPath ? ['--set', this.devicesSetPath] : []),
|
|
138
|
+
subcommand,
|
|
139
|
+
...args
|
|
140
|
+
];
|
|
141
|
+
// Prefix all passed in environment variables with 'SIMCTL_CHILD_', simctl
|
|
142
|
+
// will then pass these to the child (spawned) process.
|
|
143
|
+
env = lodash_1.default.defaults(lodash_1.default.mapKeys(env, (value, key) => lodash_1.default.startsWith(key, SIMCTL_ENV_PREFIX) ? key : `${SIMCTL_ENV_PREFIX}${key}`), process.env);
|
|
144
|
+
const execOpts = {
|
|
145
|
+
env,
|
|
146
|
+
encoding,
|
|
147
|
+
};
|
|
148
|
+
if (!asynchronous) {
|
|
149
|
+
execOpts.timeout = this.execTimeout;
|
|
150
|
+
}
|
|
151
|
+
const xcrun = await this.requireXcrun();
|
|
152
|
+
try {
|
|
153
|
+
let execArgs = [xcrun, args, execOpts];
|
|
154
|
+
if (!lodash_1.default.isEmpty(architectures)) {
|
|
155
|
+
const archArgs = lodash_1.default.flatMap((lodash_1.default.isArray(architectures) ? architectures : [architectures]).map((arch) => ['-arch', arch]));
|
|
156
|
+
execArgs = ['arch', [...archArgs, xcrun, ...args], execOpts];
|
|
157
|
+
}
|
|
158
|
+
// @ts-ignore We know what we are doing here
|
|
159
|
+
return asynchronous ? new teen_process_1.SubProcess(...execArgs) : await (0, teen_process_1.exec)(...execArgs);
|
|
160
|
+
}
|
|
161
|
+
catch (e) {
|
|
162
|
+
if (!this.logErrors || !logErrors) {
|
|
163
|
+
// if we don't want to see the errors, just throw and allow the calling
|
|
164
|
+
// code do what it wants
|
|
165
|
+
}
|
|
166
|
+
else if (e.stderr) {
|
|
167
|
+
const msg = `Error running '${subcommand}': ${e.stderr.trim()}`;
|
|
168
|
+
logger_1.default.debug(logger_1.LOG_PREFIX, msg);
|
|
169
|
+
e.message = msg;
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
logger_1.default.debug(logger_1.LOG_PREFIX, e.message);
|
|
173
|
+
}
|
|
174
|
+
throw e;
|
|
175
|
+
}
|
|
99
176
|
}
|
|
100
|
-
}
|
|
101
177
|
}
|
|
102
178
|
exports.Simctl = Simctl;
|
|
103
|
-
|
|
104
|
-
|
|
179
|
+
// add all the subcommands to the Simctl prototype
|
|
180
|
+
for (const [fnName, fn] of lodash_1.default.toPairs(index_js_1.default)) {
|
|
181
|
+
Simctl.prototype[fnName] = fn;
|
|
105
182
|
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfaW5kZXgiLCJfd2hpY2giLCJfbG9nZ2VyIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfaGVscGVycyIsIl90ZWVuX3Byb2Nlc3MiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJub2RlSW50ZXJvcCIsIldlYWtNYXAiLCJjYWNoZUJhYmVsSW50ZXJvcCIsImNhY2hlTm9kZUludGVyb3AiLCJvYmoiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImNhY2hlIiwiaGFzIiwiZ2V0IiwibmV3T2JqIiwiaGFzUHJvcGVydHlEZXNjcmlwdG9yIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJkZXNjIiwic2V0IiwiU0lNQ1RMX0VOVl9QUkVGSVgiLCJERUZBVUxUX09QVFMiLCJ4Y3J1biIsInBhdGgiLCJleGVjVGltZW91dCIsIkRFRkFVTFRfRVhFQ19USU1FT1VUIiwibG9nRXJyb3JzIiwiU2ltY3RsIiwiY29uc3RydWN0b3IiLCJvcHRzIiwiXyIsImNsb25lRGVlcCIsImRlZmF1bHRzRGVlcCIsImtleXMiLCJfdWRpZCIsImlzTmlsIiwidWRpZCIsIl9kZXZpY2VzU2V0UGF0aCIsImRldmljZXNTZXRQYXRoIiwidmFsdWUiLCJyZXF1aXJlVWRpZCIsImNvbW1hbmROYW1lIiwiRXJyb3IiLCJyZXF1aXJlWGNydW4iLCJ4Y3J1bkJpbmFyeSIsImdldFhjcnVuQmluYXJ5Iiwid2hpY2giLCJlIiwiZXhlYyIsInN1YmNvbW1hbmQiLCJhcmdzIiwiZW52IiwiYXN5bmNocm9ub3VzIiwiZW5jb2RpbmciLCJhcmNoaXRlY3R1cmVzIiwiZGVmYXVsdHMiLCJtYXBLZXlzIiwic3RhcnRzV2l0aCIsInByb2Nlc3MiLCJleGVjT3B0cyIsInRpbWVvdXQiLCJleGVjQXJncyIsImlzRW1wdHkiLCJhcmNoQXJncyIsImZsYXRNYXAiLCJpc0FycmF5IiwibWFwIiwiYXJjaCIsIlN1YlByb2Nlc3MiLCJ0cEV4ZWMiLCJzdGRlcnIiLCJtc2ciLCJ0cmltIiwibG9nIiwiZGVidWciLCJMT0dfUFJFRklYIiwibWVzc2FnZSIsImV4cG9ydHMiLCJmbk5hbWUiLCJmbiIsInRvUGFpcnMiLCJzdWJjb21tYW5kcyIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vbGliL3NpbWN0bC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHN1YmNvbW1hbmRzIGZyb20gJy4vc3ViY29tbWFuZHMvaW5kZXguanMnO1xuaW1wb3J0IHdoaWNoIGZyb20gJ3doaWNoJztcbmltcG9ydCBsb2csIHsgTE9HX1BSRUZJWCB9IGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7XG4gIERFRkFVTFRfRVhFQ19USU1FT1VULCBnZXRYY3J1bkJpbmFyeSxcbn0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IGV4ZWMgYXMgdHBFeGVjLCBTdWJQcm9jZXNzIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcblxuY29uc3QgU0lNQ1RMX0VOVl9QUkVGSVggPSAnU0lNQ1RMX0NISUxEXyc7XG5jb25zdCBERUZBVUxUX09QVFMgPSB7XG4gIHhjcnVuOiB7XG4gICAgcGF0aDogbnVsbCxcbiAgfSxcbiAgZXhlY1RpbWVvdXQ6IERFRkFVTFRfRVhFQ19USU1FT1VULFxuICBsb2dFcnJvcnM6IHRydWUsXG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEV4ZWNPcHRzXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBhcmdzIFtbXV0gLSBUaGUgbGlzdCBvZiBhZGRpdGlvbmFsIHN1YmNvbW1hbmQgYXJndW1lbnRzLlxuICogSXQncyBlbXB0eSBieSBkZWZhdWx0LlxuICogQHByb3BlcnR5IHtPYmplY3R9IGVudiBbe31dIC0gRW52aXJvbm1lbnQgdmFyaWFibGVzIG1hcHBpbmcuIEFsbCB0aGVzZSB2YXJpYWJsZXNcbiAqIHdpbGwgYmUgcGFzc2VkIFNpbXVsYXRvciBhbmQgdXNlZCBpbiB0aGUgZXhlY3V0aW5nIGZ1bmN0aW9uLlxuICogQHByb3BlcnR5IHtib29sZWFufSBsb2dFcnJvcnMgW3RydWVdIC0gU2V0IGl0IHRvIF9mYWxzZV8gdG8gdGhyb3cgZXhlY3V0aW9uIGVycm9yc1xuICogaW1tZWRpYXRlbHkgd2l0aG91dCBsb2dnaW5nIGFueSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLlxuICogQHByb3BlcnR5IHtib29sZWFufSBhc3luY2hyb25vdXMgW2ZhbHNlXSAtIFdoZXRoZXIgdG8gZXhlY3V0ZSB0aGUgZ2l2ZW4gY29tbWFuZFxuICogJ3N5bmNocm9ub3VzbHknIG9yICdhc3luY2hyb25vdXNseScuIEFmZmVjdHMgdGhlIHJldHVybmVkIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb24uXG4gKiBAcHJvcGVydHkge3N0cmluZz99IGVuY29kaW5nIC0gRXhwbGljaXRseSBzZXRzIHN0cmVhbXMgZW5jb2RpbmcgZm9yIHRoZSBleGVjdXRlZFxuICogY29tbWFuZCBpbnB1dCBhbmQgb3V0cHV0cy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfHN0cmluZ1tdfSBhcmNoaXRlY3R1cmVzIC0gT25lIG9yIG1vcmUgYXJjaGl0ZWN0dXJlIG5hbWVzIHRvIGJlIGVuZm9yY2VkIHdoaWxlXG4gKiBleGVjdXRpbmcgeGNydW4uIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9pc3N1ZXMvMTg5NjYgZm9yIG1vcmUgZGV0YWlscy5cbiAqL1xuXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU2ltY3RsT3B0c1xuICogQHByb3BlcnR5IHtPYmplY3Q/fSB4Y3J1biAtIFRoZSB4Y3J1biBwcm9wZXJ0aWVzLiBDdXJyZW50bHkgb25seSBvbmUgcHJvcGVydHlcbiAqIGlzIHN1cHBvcnRlZCwgd2hpY2ggaXMgYHBhdGhgIGFuZCBpdCBieSBkZWZhdWx0IGNvbnRhaW5zIGBudWxsYCwgd2hpY2ggZW5mb3JjZXNcbiAqIHRoZSBpbnN0YW5jZSB0byBhdXRvbWF0aWNhbGx5IGRldGVjdCB0aGUgZnVsbCBwYXRoIHRvIGB4Y3J1bmAgdG9vbCBhbmQgdG8gdGhyb3dcbiAqIGFuIGV4Y2VwdGlvbiBpZiBpdCBjYW5ub3QgYmUgZGV0ZWN0ZWQuIElmIHRoZSBwYXRoIGlzIHNldCB1cG9uIGluc3RhbmNlIGNyZWF0aW9uXG4gKiB0aGVuIGl0IGlzIGdvaW5nIHRvIGJlIHVzZWQgYnkgYGV4ZWNgIGFuZCBubyBhdXRvZGV0ZWN0aW9uIHdpbGwgaGFwcGVuLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGV4ZWNUaW1lb3V0IFs2MDAwMDBdIC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIG1pbGxpc2Vjb25kc1xuICogdG8gd2FpdCBmb3Igc2luZ2xlIHN5bmNocm9ub3VzIHhjcnVuIGNvbW1hbmQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGxvZ0Vycm9ycyBbdHJ1ZV0gLSBXaGV0aGVyIHRvIHdpcmUgeGNydW4gZXJyb3IgbWVzc2FnZXNcbiAqIGludG8gZGVidWcgbG9nIGJlZm9yZSB0aHJvd2luZyB0aGVtLlxuICogQHByb3BlcnR5IHtzdHJpbmc/fSB1ZGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBjdXJyZW50IGRldmljZSwgd2hpY2ggaXNcbiAqIGdvaW5nIHRvIGJlIGltcGxpY2l0bHkgcGFzc2VkIHRvIGFsbCBtZXRob2RzLCB3aGljaCByZXF1aXJlIGl0LiBJdCBjYW4gZWl0aGVyIGJlIHNldFxuICogdXBvbiBpbnN0YW5jZSBjcmVhdGlvbiBpZiBpdCBpcyBhbHJlYWR5IGtub3duIGluIGFkdmFuY2Ugb3IgbGF0ZXIgd2hlbi9pZiBuZWVkZWQgdmlhIHRoZVxuICogY29ycmVzcG9uZGluZyBpbnN0YW5jZSBzZXR0ZXIuXG4gKiBAcHJvcGVydHkge3N0cmluZz99IGRldmljZXNTZXRQYXRoIC0gRnVsbCBwYXRoIHRvIHRoZSBzZXQgb2YgZGV2aWNlcyB0aGF0IHlvdSB3YW50IHRvIG1hbmFnZS5cbiAqIEJ5IGRlZmF1bHQgdGhpcyBwYXRoIHVzdWFsbHkgZXF1YWxzIHRvIH4vTGlicmFyeS9EZXZlbG9wZXIvQ29yZVNpbXVsYXRvci9EZXZpY2VzXG4gKi9cblxuXG5jbGFzcyBTaW1jdGwge1xuICAvKipcbiAgICogQHBhcmFtIHtTaW1jdGxPcHRzfSBvcHRzXG4gICAqL1xuICBjb25zdHJ1Y3RvciAob3B0cyA9IHt9KSB7XG4gICAgb3B0cyA9IF8uY2xvbmVEZWVwKG9wdHMpO1xuICAgIF8uZGVmYXVsdHNEZWVwKG9wdHMsIERFRkFVTFRfT1BUUyk7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgXy5rZXlzKERFRkFVTFRfT1BUUykpIHtcbiAgICAgIHRoaXNba2V5XSA9IG9wdHNba2V5XTtcbiAgICB9XG4gICAgdGhpcy5fdWRpZCA9IF8uaXNOaWwob3B0cy51ZGlkKSA/IG51bGwgOiBvcHRzLnVkaWQ7XG4gICAgdGhpcy5fZGV2aWNlc1NldFBhdGggPSBfLmlzTmlsKG9wdHMuZGV2aWNlc1NldFBhdGgpID8gbnVsbCA6IG9wdHMuZGV2aWNlc1NldFBhdGg7XG4gIH1cblxuICBzZXQgdWRpZCAodmFsdWUpIHtcbiAgICB0aGlzLl91ZGlkID0gdmFsdWU7XG4gIH1cblxuICBnZXQgdWRpZCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3VkaWQ7XG4gIH1cblxuICBzZXQgZGV2aWNlc1NldFBhdGggKHZhbHVlKSB7XG4gICAgdGhpcy5fZGV2aWNlc1NldFBhdGggPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBkZXZpY2VzU2V0UGF0aCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RldmljZXNTZXRQYXRoO1xuICB9XG5cbiAgcmVxdWlyZVVkaWQgKGNvbW1hbmROYW1lID0gbnVsbCkge1xuICAgIGlmICghdGhpcy51ZGlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVkaWQgaXMgcmVxdWlyZWQgdG8gYmUgc2V0IGZvciBgICtcbiAgICAgICAgKGNvbW1hbmROYW1lID8gYHRoZSAnJHtjb21tYW5kTmFtZX0nIGNvbW1hbmRgIDogJ3RoaXMgc2ltY3RsIGNvbW1hbmQnKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnVkaWQ7XG4gIH1cblxuICBhc3luYyByZXF1aXJlWGNydW4gKCkge1xuICAgIGNvbnN0IHhjcnVuQmluYXJ5ID0gZ2V0WGNydW5CaW5hcnkoKTtcblxuICAgIGlmICghdGhpcy54Y3J1bi5wYXRoKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnhjcnVuLnBhdGggPSBhd2FpdCB3aGljaCh4Y3J1bkJpbmFyeSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt4Y3J1bkJpbmFyeX0gdG9vbCBoYXMgbm90IGJlZW4gZm91bmQgaW4gUEFUSC4gYCArXG4gICAgICAgICAgYEFyZSBYY29kZSBkZXZlbG9wZXJzIHRvb2xzIGluc3RhbGxlZD9gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMueGNydW4ucGF0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIHRoZSBwYXJ0aWN1bGFyIHNpbWN0bCBjb21tYW5kLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3ViY29tbWFuZCAtIE9uZSBvZiBhdmFpbGFibGUgc2ltY3RsIHN1YmNvbW1hbmRzLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4ZWN1dGUgYHhjcnVuIHNpbWN0bGAgaW4gVGVybWluYWwgdG8gc2VlIHRoZSBmdWxsIGxpc3RcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBhdmFpbGFibGUgc3ViY29tbWFuZHMuXG4gICAqIEBwYXJhbSB7RXhlY09wdHM/fSBvcHRzXG4gICAqIEByZXR1cm4ge1Byb21pc2U8RXhlY1Jlc3VsdHxTdWJQcm9jZXNzPn0gRWl0aGVyIHRoZSByZXN1bHQgb2YgdGVlbiBwcm9jZXNzJ3MgYGV4ZWNgIG9yXG4gICAqIGBTdWJQcm9jZXNzYCBpbnN0YW5jZSBkZXBlbmRpbmcgb2YgYG9wdHMuYXN5bmNocm9ub3VzYCB2YWx1ZS5cbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBzaW1jdGwgc3ViY29tbWFuZCBjb21tYW5kIHJldHVybnMgbm9uLXplcm8gcmV0dXJuIGNvZGUuXG4gICAqL1xuICBhc3luYyBleGVjIChzdWJjb21tYW5kLCBvcHRzID0ge30pIHtcbiAgICBsZXQge1xuICAgICAgYXJncyA9IFtdLFxuICAgICAgZW52ID0ge30sXG4gICAgICBhc3luY2hyb25vdXMgPSBmYWxzZSxcbiAgICAgIGVuY29kaW5nLFxuICAgICAgbG9nRXJyb3JzID0gdHJ1ZSxcbiAgICAgIGFyY2hpdGVjdHVyZXMsXG4gICAgfSA9IG9wdHM7XG4gICAgLy8gcnVuIGEgcGFydGljdWxhciBzaW1jdGwgY29tbWFuZFxuICAgIGFyZ3MgPSBbJ3NpbWN0bCcsXG4gICAgICAuLi4odGhpcy5kZXZpY2VzU2V0UGF0aCA/IFsnLS1zZXQnLCB0aGlzLmRldmljZXNTZXRQYXRoXSA6IFtdKSxcbiAgICAgIHN1YmNvbW1hbmQsXG4gICAgICAuLi5hcmdzXG4gICAgXTtcbiAgICAvLyBQcmVmaXggYWxsIHBhc3NlZCBpbiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2l0aCAnU0lNQ1RMX0NISUxEXycsIHNpbWN0bFxuICAgIC8vIHdpbGwgdGhlbiBwYXNzIHRoZXNlIHRvIHRoZSBjaGlsZCAoc3Bhd25lZCkgcHJvY2Vzcy5cbiAgICBlbnYgPSBfLmRlZmF1bHRzKFxuICAgICAgXy5tYXBLZXlzKGVudixcbiAgICAgICAgKHZhbHVlLCBrZXkpID0+IF8uc3RhcnRzV2l0aChrZXksIFNJTUNUTF9FTlZfUFJFRklYKSA/IGtleSA6IGAke1NJTUNUTF9FTlZfUFJFRklYfSR7a2V5fWApLFxuICAgICAgcHJvY2Vzcy5lbnYpO1xuXG4gICAgY29uc3QgZXhlY09wdHMgPSB7XG4gICAgICBlbnYsXG4gICAgICBlbmNvZGluZyxcbiAgICB9O1xuICAgIGlmICghYXN5bmNocm9ub3VzKSB7XG4gICAgICBleGVjT3B0cy50aW1lb3V0ID0gdGhpcy5leGVjVGltZW91dDtcbiAgICB9XG4gICAgY29uc3QgeGNydW4gPSBhd2FpdCB0aGlzLnJlcXVpcmVYY3J1bigpO1xuICAgIHRyeSB7XG4gICAgICBsZXQgZXhlY0FyZ3MgPSBbeGNydW4sIGFyZ3MsIGV4ZWNPcHRzXTtcbiAgICAgIGlmICghXy5pc0VtcHR5KGFyY2hpdGVjdHVyZXMpKSB7XG4gICAgICAgIGNvbnN0IGFyY2hBcmdzID0gXy5mbGF0TWFwKFxuICAgICAgICAgIChfLmlzQXJyYXkoYXJjaGl0ZWN0dXJlcykgPyBhcmNoaXRlY3R1cmVzIDogW2FyY2hpdGVjdHVyZXNdKS5tYXAoKGFyY2gpID0+IFsnLWFyY2gnLCBhcmNoXSlcbiAgICAgICAgKTtcbiAgICAgICAgZXhlY0FyZ3MgPSBbJ2FyY2gnLCBbLi4uYXJjaEFyZ3MsIHhjcnVuLCAuLi5hcmdzXSwgZXhlY09wdHNdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFzeW5jaHJvbm91cyA/IG5ldyBTdWJQcm9jZXNzKC4uLmV4ZWNBcmdzKSA6IGF3YWl0IHRwRXhlYyguLi5leGVjQXJncyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKCF0aGlzLmxvZ0Vycm9ycyB8fCAhbG9nRXJyb3JzKSB7XG4gICAgICAgIC8vIGlmIHdlIGRvbid0IHdhbnQgdG8gc2VlIHRoZSBlcnJvcnMsIGp1c3QgdGhyb3cgYW5kIGFsbG93IHRoZSBjYWxsaW5nXG4gICAgICAgIC8vIGNvZGUgZG8gd2hhdCBpdCB3YW50c1xuICAgICAgfSBlbHNlIGlmIChlLnN0ZGVycikge1xuICAgICAgICBjb25zdCBtc2cgPSBgRXJyb3IgcnVubmluZyAnJHtzdWJjb21tYW5kfSc6ICR7ZS5zdGRlcnIudHJpbSgpfWA7XG4gICAgICAgIGxvZy5kZWJ1ZyhMT0dfUFJFRklYLCBtc2cpO1xuICAgICAgICBlLm1lc3NhZ2UgPSBtc2c7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cuZGVidWcoTE9HX1BSRUZJWCwgZS5tZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG59XG5cblxuLy8gYWRkIGFsbCB0aGUgc3ViY29tbWFuZHMgdG8gdGhlIFNpbWN0bCBwcm90b3R5cGVcbmZvciAoY29uc3QgW2ZuTmFtZSwgZm5dIG9mIF8udG9QYWlycyhzdWJjb21tYW5kcykpIHtcbiAgU2ltY3RsLnByb3RvdHlwZVtmbk5hbWVdID0gZm47XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNpbWN0bDtcbmV4cG9ydCB7IFNpbWN0bCB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE1BQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLE1BQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLE9BQUEsR0FBQUMsdUJBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFLLFFBQUEsR0FBQUwsT0FBQTtBQUdBLElBQUFNLGFBQUEsR0FBQU4sT0FBQTtBQUEwRCxTQUFBTyx5QkFBQUMsV0FBQSxlQUFBQyxPQUFBLGtDQUFBQyxpQkFBQSxPQUFBRCxPQUFBLFFBQUFFLGdCQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEsQ0FBQUMsV0FBQSxXQUFBQSxXQUFBLEdBQUFHLGdCQUFBLEdBQUFELGlCQUFBLEtBQUFGLFdBQUE7QUFBQSxTQUFBSix3QkFBQVEsR0FBQSxFQUFBSixXQUFBLFNBQUFBLFdBQUEsSUFBQUksR0FBQSxJQUFBQSxHQUFBLENBQUFDLFVBQUEsV0FBQUQsR0FBQSxRQUFBQSxHQUFBLG9CQUFBQSxHQUFBLHdCQUFBQSxHQUFBLDRCQUFBRSxPQUFBLEVBQUFGLEdBQUEsVUFBQUcsS0FBQSxHQUFBUix3QkFBQSxDQUFBQyxXQUFBLE9BQUFPLEtBQUEsSUFBQUEsS0FBQSxDQUFBQyxHQUFBLENBQUFKLEdBQUEsWUFBQUcsS0FBQSxDQUFBRSxHQUFBLENBQUFMLEdBQUEs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
|
|
183
|
+
exports.default = Simctl;
|
|
184
|
+
//# sourceMappingURL=simctl.js.map
|