node-simctl 7.2.1 → 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 +14 -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 +29 -18
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launch.js","
|
|
1
|
+
{"version":3,"file":"launch.js","sourceRoot":"","sources":["../../../lib/subcommands/launch.js"],"names":[],"mappings":";;;;;AAAA,oDAAuB;AACvB,uCAAyC;AAEzC,MAAM,QAAQ,GAAG,EAAE,CAAC;AAEpB;;;;;;;;;;;;;GAaG;AACH,QAAQ,CAAC,SAAS,GAAG,KAAK,UAAU,SAAS,CAAE,QAAQ,EAAE,KAAK,GAAG,CAAC;IAChE,8CAA8C;IAC9C,OAAO,MAAM,IAAA,wBAAa,EAAC,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,EAAC,MAAM,EAAC,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YACzC,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;SAC7C,CAAC,CAAC;QACH,OAAO,gBAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,kBAAe,QAAQ,CAAC"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
export default commands;
|
|
2
|
+
export type DeviceInfo = {
|
|
3
|
+
/**
|
|
4
|
+
* - The device name.
|
|
5
|
+
*/
|
|
6
|
+
name: string;
|
|
7
|
+
/**
|
|
8
|
+
* - The device UDID.
|
|
9
|
+
*/
|
|
10
|
+
udid: string;
|
|
11
|
+
/**
|
|
12
|
+
* - The current Simulator state, for example 'booted' or 'shutdown'.
|
|
13
|
+
*/
|
|
14
|
+
state: string;
|
|
15
|
+
/**
|
|
16
|
+
* - The SDK version, for example '10.3'.
|
|
17
|
+
*/
|
|
18
|
+
sdk: string;
|
|
19
|
+
};
|
|
20
|
+
declare namespace commands {
|
|
21
|
+
/**
|
|
22
|
+
* @typedef {Object} DeviceInfo
|
|
23
|
+
* @property {string} name - The device name.
|
|
24
|
+
* @property {string} udid - The device UDID.
|
|
25
|
+
* @property {string} state - The current Simulator state, for example 'booted' or 'shutdown'.
|
|
26
|
+
* @property {string} sdk - The SDK version, for example '10.3'.
|
|
27
|
+
*/
|
|
28
|
+
/**
|
|
29
|
+
* Parse the list of existing Simulator devices to represent
|
|
30
|
+
* it as convenient mapping.
|
|
31
|
+
*
|
|
32
|
+
* @param {string?} platform - The platform name, for example 'watchOS'.
|
|
33
|
+
* @return {Promise<Record<string, any>>} The resulting mapping. Each key is platform version,
|
|
34
|
+
* for example '10.3' and the corresponding value is an
|
|
35
|
+
* array of the matching {@link DeviceInfo} instances.
|
|
36
|
+
* @throws {Error} If the corresponding simctl subcommand command
|
|
37
|
+
* returns non-zero return code.
|
|
38
|
+
*/
|
|
39
|
+
function getDevicesByParsing(platform: string | null): Promise<Record<string, any>>;
|
|
40
|
+
/**
|
|
41
|
+
* Parse the list of existing Simulator devices to represent
|
|
42
|
+
* it as convenient mapping for the particular platform version.
|
|
43
|
+
*
|
|
44
|
+
* @param {string?} forSdk - The sdk version,
|
|
45
|
+
* for which the devices list should be parsed,
|
|
46
|
+
* for example '10.3'.
|
|
47
|
+
* @param {string?} platform - The platform name, for example 'watchOS'.
|
|
48
|
+
* @return {Promise<Object|DeviceInfo[]>} If _forSdk_ is set then the list
|
|
49
|
+
* of devices for the particular platform version.
|
|
50
|
+
* Otherwise the same result as for {@link getDevicesByParsing}
|
|
51
|
+
* function.
|
|
52
|
+
* @throws {Error} If the corresponding simctl subcommand command
|
|
53
|
+
* returns non-zero return code or if no matching
|
|
54
|
+
* platform version is found in the system.
|
|
55
|
+
*/
|
|
56
|
+
function getDevices(forSdk: string | null, platform: string | null): Promise<any>;
|
|
57
|
+
/**
|
|
58
|
+
* Get the runtime for the particular platform version using --json flag
|
|
59
|
+
*
|
|
60
|
+
* @param {string} platformVersion - The platform version name,
|
|
61
|
+
* for example '10.3'.
|
|
62
|
+
* @param {string} platform - The platform name, for example 'watchOS'.
|
|
63
|
+
* @return {Promise<string>} The corresponding runtime name for the given
|
|
64
|
+
* platform version.
|
|
65
|
+
*/
|
|
66
|
+
function getRuntimeForPlatformVersionViaJson(platformVersion: string, platform?: string): Promise<string>;
|
|
67
|
+
/**
|
|
68
|
+
* Get the runtime for the particular platform version.
|
|
69
|
+
*
|
|
70
|
+
* @param {string} platformVersion - The platform version name,
|
|
71
|
+
* for example '10.3'.
|
|
72
|
+
* @param {string} platform - The platform name, for example 'watchOS'.
|
|
73
|
+
* @return {Promise<string>} The corresponding runtime name for the given
|
|
74
|
+
* platform version.
|
|
75
|
+
*/
|
|
76
|
+
function getRuntimeForPlatformVersion(platformVersion: string, platform?: string): Promise<string>;
|
|
77
|
+
/**
|
|
78
|
+
* Get the list of device types available in the current Xcode installation
|
|
79
|
+
*
|
|
80
|
+
* @return {Promise<string[]>} List of the types of devices available
|
|
81
|
+
* @throws {Error} If the corresponding simctl command fails
|
|
82
|
+
*/
|
|
83
|
+
function getDeviceTypes(): Promise<string[]>;
|
|
84
|
+
/**
|
|
85
|
+
* Get the full list of runtimes, devicetypes, devices and pairs as Object
|
|
86
|
+
*
|
|
87
|
+
* @return {Promise<Object>} Object containing device types, runtimes devices and pairs.
|
|
88
|
+
* The resulting JSON will be like:
|
|
89
|
+
* {
|
|
90
|
+
* "devicetypes" : [
|
|
91
|
+
* {
|
|
92
|
+
* "name" : "iPhone 4s",
|
|
93
|
+
* "identifier" : "com.apple.CoreSimulator.SimDeviceType.iPhone-4s"
|
|
94
|
+
* },
|
|
95
|
+
* ...
|
|
96
|
+
* ],
|
|
97
|
+
* "runtimes" : [
|
|
98
|
+
* {
|
|
99
|
+
* "version" : '13.0',
|
|
100
|
+
* "bundlePath" : '/Applications/Xcode11beta4.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime',
|
|
101
|
+
* "isAvailable" : true,
|
|
102
|
+
* "name" : 'iOS 13.0',
|
|
103
|
+
* "identifier" : 'com.apple.CoreSimulator.SimRuntime.iOS-13-0',
|
|
104
|
+
* "buildversion" : '17A5534d'
|
|
105
|
+
* },
|
|
106
|
+
* ...
|
|
107
|
+
* },
|
|
108
|
+
* "devices" :
|
|
109
|
+
* {
|
|
110
|
+
* 'com.apple.CoreSimulator.SimRuntime.iOS-13-0': [ [Object], [Object] ] },
|
|
111
|
+
* ...
|
|
112
|
+
* },
|
|
113
|
+
* "pairs" : {} }
|
|
114
|
+
*
|
|
115
|
+
* }
|
|
116
|
+
* @throws {Error} If the corresponding simctl command fails
|
|
117
|
+
*/
|
|
118
|
+
function list(): Promise<any>;
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../lib/subcommands/list.js"],"names":[],"mappings":";;;;;UASc,MAAM;;;;UACN,MAAM;;;;WACN,MAAM;;;;SACN,MAAM;;;IALpB;;;;;;OAMG;IAEH;;;;;;;;;;OAUG;IACH,oFA4DC;IAED;;;;;;;;;;;;;;;OAeG;IACH,kFAmEC;IAED;;;;;;;;OAQG;IACH,0GAYC;IAED;;;;;;;;OAQG;IACH,mGAoBC;IAED;;;;;OAKG;IACH,6CAqBC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiCG;IACH,8BASC"}
|
|
@@ -1,157 +1,315 @@
|
|
|
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
|
-
|
|
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
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
30
|
+
const helpers_1 = require("../helpers");
|
|
31
|
+
const logger_1 = __importStar(require("../logger"));
|
|
14
32
|
const commands = {};
|
|
33
|
+
/**
|
|
34
|
+
* @typedef {Object} DeviceInfo
|
|
35
|
+
* @property {string} name - The device name.
|
|
36
|
+
* @property {string} udid - The device UDID.
|
|
37
|
+
* @property {string} state - The current Simulator state, for example 'booted' or 'shutdown'.
|
|
38
|
+
* @property {string} sdk - The SDK version, for example '10.3'.
|
|
39
|
+
*/
|
|
40
|
+
/**
|
|
41
|
+
* Parse the list of existing Simulator devices to represent
|
|
42
|
+
* it as convenient mapping.
|
|
43
|
+
*
|
|
44
|
+
* @param {string?} platform - The platform name, for example 'watchOS'.
|
|
45
|
+
* @return {Promise<Record<string, any>>} The resulting mapping. Each key is platform version,
|
|
46
|
+
* for example '10.3' and the corresponding value is an
|
|
47
|
+
* array of the matching {@link DeviceInfo} instances.
|
|
48
|
+
* @throws {Error} If the corresponding simctl subcommand command
|
|
49
|
+
* returns non-zero return code.
|
|
50
|
+
*/
|
|
15
51
|
commands.getDevicesByParsing = async function getDevicesByParsing(platform) {
|
|
16
|
-
|
|
17
|
-
stdout
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
if (!lineMatch) {
|
|
41
|
-
throw new Error(`Could not match line: ${line}`);
|
|
42
|
-
}
|
|
43
|
-
devices[sdk].push({
|
|
44
|
-
name: lineMatch[1],
|
|
45
|
-
udid: lineMatch[2],
|
|
46
|
-
state: lineMatch[3],
|
|
47
|
-
sdk,
|
|
48
|
-
platform: platform || match[1]
|
|
49
|
-
});
|
|
52
|
+
// get the list of devices
|
|
53
|
+
const { stdout } = await this.exec('list', {
|
|
54
|
+
args: ['devices'],
|
|
55
|
+
});
|
|
56
|
+
// expect to get a listing like
|
|
57
|
+
// -- iOS 8.1 --
|
|
58
|
+
// iPhone 4s (3CA6E7DD-220E-45E5-B716-1E992B3A429C) (Shutdown)
|
|
59
|
+
// ...
|
|
60
|
+
// -- iOS 8.2 --
|
|
61
|
+
// iPhone 4s (A99FFFC3-8E19-4DCF-B585-7D9D46B4C16E) (Shutdown)
|
|
62
|
+
// ...
|
|
63
|
+
// so, get the `-- iOS X.X --` line to find the sdk (X.X)
|
|
64
|
+
// and the rest of the listing in order to later find the devices
|
|
65
|
+
const deviceSectionRe = lodash_1.default.isEmpty(platform) || !platform
|
|
66
|
+
? new RegExp(`\\-\\-\\s+(\\S+)\\s+(\\S+)\\s+\\-\\-(\\n\\s{4}.+)*`, 'mgi')
|
|
67
|
+
: new RegExp(`\\-\\-\\s+${lodash_1.default.escapeRegExp(platform)}\\s+(\\S+)\\s+\\-\\-(\\n\\s{4}.+)*`, 'mgi');
|
|
68
|
+
const matches = [];
|
|
69
|
+
let match;
|
|
70
|
+
// make an entry for each sdk version
|
|
71
|
+
while ((match = deviceSectionRe.exec(stdout))) {
|
|
72
|
+
matches.push(match);
|
|
73
|
+
}
|
|
74
|
+
if (lodash_1.default.isEmpty(matches)) {
|
|
75
|
+
throw new Error('Could not find device section');
|
|
50
76
|
}
|
|
51
|
-
|
|
52
|
-
|
|
77
|
+
const lineRe = /([^\s].+) \((\w+-.+\w+)\) \((\w+\s?\w+)\)/; // https://regex101.com/r/lG7mK6/3
|
|
78
|
+
// get all the devices for each sdk
|
|
79
|
+
const devices = {};
|
|
80
|
+
for (match of matches) {
|
|
81
|
+
const sdk = platform ? match[1] : match[2];
|
|
82
|
+
devices[sdk] = devices[sdk] || [];
|
|
83
|
+
// split the full match into lines and remove the first
|
|
84
|
+
for (const line of match[0].split('\n').slice(1)) {
|
|
85
|
+
if (line.includes('(unavailable, ')) {
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
// a line is something like
|
|
89
|
+
// iPhone 4s (A99FFFC3-8E19-4DCF-B585-7D9D46B4C16E) (Shutdown)
|
|
90
|
+
// retrieve:
|
|
91
|
+
// iPhone 4s
|
|
92
|
+
// A99FFFC3-8E19-4DCF-B585-7D9D46B4C16E
|
|
93
|
+
// Shutdown
|
|
94
|
+
const lineMatch = lineRe.exec(line);
|
|
95
|
+
if (!lineMatch) {
|
|
96
|
+
throw new Error(`Could not match line: ${line}`);
|
|
97
|
+
}
|
|
98
|
+
// save the whole thing as ab object in the list for this sdk
|
|
99
|
+
devices[sdk].push({
|
|
100
|
+
name: lineMatch[1],
|
|
101
|
+
udid: lineMatch[2],
|
|
102
|
+
state: lineMatch[3],
|
|
103
|
+
sdk,
|
|
104
|
+
platform: platform || match[1],
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return devices;
|
|
53
109
|
};
|
|
110
|
+
/**
|
|
111
|
+
* Parse the list of existing Simulator devices to represent
|
|
112
|
+
* it as convenient mapping for the particular platform version.
|
|
113
|
+
*
|
|
114
|
+
* @param {string?} forSdk - The sdk version,
|
|
115
|
+
* for which the devices list should be parsed,
|
|
116
|
+
* for example '10.3'.
|
|
117
|
+
* @param {string?} platform - The platform name, for example 'watchOS'.
|
|
118
|
+
* @return {Promise<Object|DeviceInfo[]>} If _forSdk_ is set then the list
|
|
119
|
+
* of devices for the particular platform version.
|
|
120
|
+
* Otherwise the same result as for {@link getDevicesByParsing}
|
|
121
|
+
* function.
|
|
122
|
+
* @throws {Error} If the corresponding simctl subcommand command
|
|
123
|
+
* returns non-zero return code or if no matching
|
|
124
|
+
* platform version is found in the system.
|
|
125
|
+
*/
|
|
54
126
|
commands.getDevices = async function getDevices(forSdk, platform) {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
127
|
+
let devices = {};
|
|
128
|
+
try {
|
|
129
|
+
const { stdout } = await this.exec('list', {
|
|
130
|
+
args: ['devices', '-j'],
|
|
131
|
+
});
|
|
132
|
+
/* JSON should be
|
|
133
|
+
* {
|
|
134
|
+
* "devices" : {
|
|
135
|
+
* "iOS <sdk>" : [ // or
|
|
136
|
+
* "com.apple.CoreSimulator.SimRuntime.iOS-<sdk> : [
|
|
137
|
+
* {
|
|
138
|
+
* "state" : "Booted",
|
|
139
|
+
* "availability" : "(available)",
|
|
140
|
+
* "isAvailable" : true,
|
|
141
|
+
* "name" : "iPhone 6",
|
|
142
|
+
* "udid" : "75E34140-18E8-4D1A-9F45-AAC735DF75DF"
|
|
143
|
+
* }
|
|
144
|
+
* ]
|
|
145
|
+
* }
|
|
146
|
+
* }
|
|
147
|
+
*/
|
|
148
|
+
const versionMatchRe = lodash_1.default.isEmpty(platform) || !platform
|
|
149
|
+
? new RegExp(`^([^\\s-]+)[\\s-](\\S+)`, 'i')
|
|
150
|
+
: new RegExp(`^${lodash_1.default.escapeRegExp(platform)}[\\s-](\\S+)`, 'i');
|
|
151
|
+
for (let [sdkName, entries] of lodash_1.default.toPairs(JSON.parse(stdout).devices)) {
|
|
152
|
+
// there could be a longer name, so remove it
|
|
153
|
+
sdkName = sdkName.replace(helpers_1.SIM_RUNTIME_NAME, '');
|
|
154
|
+
const versionMatch = versionMatchRe.exec(sdkName);
|
|
155
|
+
if (!versionMatch) {
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
// the sdk can have dashes (`12-2`) or dots (`12.1`)
|
|
159
|
+
const sdk = (platform ? versionMatch[1] : versionMatch[2]).replace('-', '.');
|
|
160
|
+
devices[sdk] = devices[sdk] || [];
|
|
161
|
+
devices[sdk].push(...entries.filter((el) => lodash_1.default.isUndefined(el.isAvailable) || el.isAvailable)
|
|
162
|
+
.map((el) => {
|
|
163
|
+
delete el.availability;
|
|
164
|
+
return {
|
|
165
|
+
sdk,
|
|
166
|
+
...el,
|
|
167
|
+
platform: platform || versionMatch[1],
|
|
168
|
+
};
|
|
169
|
+
}));
|
|
170
|
+
}
|
|
79
171
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
172
|
+
catch (err) {
|
|
173
|
+
logger_1.default.debug(logger_1.LOG_PREFIX, `Unable to get JSON device list: ${err.stack}`);
|
|
174
|
+
logger_1.default.debug(logger_1.LOG_PREFIX, 'Falling back to manual parsing');
|
|
175
|
+
devices = await this.getDevicesByParsing(platform);
|
|
176
|
+
}
|
|
177
|
+
if (!forSdk) {
|
|
178
|
+
return devices;
|
|
179
|
+
}
|
|
180
|
+
// if a `forSdk` was passed in, return only the corresponding list
|
|
181
|
+
if (devices[forSdk]) {
|
|
182
|
+
return devices[forSdk];
|
|
183
|
+
}
|
|
184
|
+
let errMsg = `'${forSdk}' does not exist in the list of simctl SDKs.`;
|
|
185
|
+
const availableSDKs = lodash_1.default.keys(devices);
|
|
186
|
+
errMsg += availableSDKs.length
|
|
187
|
+
? ` Only the following Simulator SDK versions are available on your system: ${availableSDKs.join(', ')}`
|
|
188
|
+
: ` No Simulator SDK versions are available on your system. Please install some via Xcode preferences.`;
|
|
189
|
+
throw new Error(errMsg);
|
|
95
190
|
};
|
|
191
|
+
/**
|
|
192
|
+
* Get the runtime for the particular platform version using --json flag
|
|
193
|
+
*
|
|
194
|
+
* @param {string} platformVersion - The platform version name,
|
|
195
|
+
* for example '10.3'.
|
|
196
|
+
* @param {string} platform - The platform name, for example 'watchOS'.
|
|
197
|
+
* @return {Promise<string>} The corresponding runtime name for the given
|
|
198
|
+
* platform version.
|
|
199
|
+
*/
|
|
96
200
|
commands.getRuntimeForPlatformVersionViaJson = async function getRuntimeForPlatformVersionViaJson(platformVersion, platform = 'iOS') {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
name
|
|
106
|
-
} of JSON.parse(stdout).runtimes) {
|
|
107
|
-
if ((0, _helpers.normalizeVersion)(version) === (0, _helpers.normalizeVersion)(platformVersion) && name.toLowerCase().startsWith(platform.toLowerCase())) {
|
|
108
|
-
return identifier;
|
|
201
|
+
const { stdout } = await this.exec('list', {
|
|
202
|
+
args: ['runtimes', '--json'],
|
|
203
|
+
});
|
|
204
|
+
for (const { version, identifier, name } of JSON.parse(stdout).runtimes) {
|
|
205
|
+
if ((0, helpers_1.normalizeVersion)(version) === (0, helpers_1.normalizeVersion)(platformVersion)
|
|
206
|
+
&& name.toLowerCase().startsWith(platform.toLowerCase())) {
|
|
207
|
+
return identifier;
|
|
208
|
+
}
|
|
109
209
|
}
|
|
110
|
-
|
|
111
|
-
throw new Error(`Could not use --json flag to parse platform version`);
|
|
210
|
+
throw new Error(`Could not use --json flag to parse platform version`);
|
|
112
211
|
};
|
|
212
|
+
/**
|
|
213
|
+
* Get the runtime for the particular platform version.
|
|
214
|
+
*
|
|
215
|
+
* @param {string} platformVersion - The platform version name,
|
|
216
|
+
* for example '10.3'.
|
|
217
|
+
* @param {string} platform - The platform name, for example 'watchOS'.
|
|
218
|
+
* @return {Promise<string>} The corresponding runtime name for the given
|
|
219
|
+
* platform version.
|
|
220
|
+
*/
|
|
113
221
|
commands.getRuntimeForPlatformVersion = async function getRuntimeForPlatformVersion(platformVersion, platform = 'iOS') {
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
222
|
+
// Try with parsing
|
|
223
|
+
try {
|
|
224
|
+
const { stdout } = await this.exec('list', {
|
|
225
|
+
args: ['runtimes'],
|
|
226
|
+
});
|
|
227
|
+
// https://regex101.com/r/UykjQZ/1
|
|
228
|
+
const runtimeRe = new RegExp(`${lodash_1.default.escapeRegExp(platform)}\\s+(\\d+\\.\\d+)\\s+\\((\\d+\\.\\d+\\.*\\d*)`, 'i');
|
|
229
|
+
for (const line of stdout.split('\n')) {
|
|
230
|
+
const match = runtimeRe.exec(line);
|
|
231
|
+
if (match && match[1] === platformVersion) {
|
|
232
|
+
return match[2];
|
|
233
|
+
}
|
|
234
|
+
}
|
|
126
235
|
}
|
|
127
|
-
|
|
128
|
-
|
|
236
|
+
catch (ign) { }
|
|
237
|
+
// if nothing was found, pass platform version back
|
|
238
|
+
return platformVersion;
|
|
129
239
|
};
|
|
240
|
+
/**
|
|
241
|
+
* Get the list of device types available in the current Xcode installation
|
|
242
|
+
*
|
|
243
|
+
* @return {Promise<string[]>} List of the types of devices available
|
|
244
|
+
* @throws {Error} If the corresponding simctl command fails
|
|
245
|
+
*/
|
|
130
246
|
commands.getDeviceTypes = async function getDeviceTypes() {
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
247
|
+
const { stdout } = await this.exec('list', {
|
|
248
|
+
args: ['devicetypes', '-j'],
|
|
249
|
+
});
|
|
250
|
+
/*
|
|
251
|
+
* JSON will be like:
|
|
252
|
+
* {
|
|
253
|
+
* "devicetypes" : [
|
|
254
|
+
* {
|
|
255
|
+
* "name" : "iPhone 4s",
|
|
256
|
+
* "identifier" : "com.apple.CoreSimulator.SimDeviceType.iPhone-4s"
|
|
257
|
+
* },
|
|
258
|
+
* ...
|
|
259
|
+
* }
|
|
260
|
+
*/
|
|
261
|
+
try {
|
|
262
|
+
const deviceTypes = JSON.parse(stdout.trim());
|
|
263
|
+
return deviceTypes.devicetypes.map((type) => type.name);
|
|
264
|
+
}
|
|
265
|
+
catch (err) {
|
|
266
|
+
throw new Error(`Unable to get list of device types: ${err.message}`);
|
|
267
|
+
}
|
|
142
268
|
};
|
|
269
|
+
/**
|
|
270
|
+
* Get the full list of runtimes, devicetypes, devices and pairs as Object
|
|
271
|
+
*
|
|
272
|
+
* @return {Promise<Object>} Object containing device types, runtimes devices and pairs.
|
|
273
|
+
* The resulting JSON will be like:
|
|
274
|
+
* {
|
|
275
|
+
* "devicetypes" : [
|
|
276
|
+
* {
|
|
277
|
+
* "name" : "iPhone 4s",
|
|
278
|
+
* "identifier" : "com.apple.CoreSimulator.SimDeviceType.iPhone-4s"
|
|
279
|
+
* },
|
|
280
|
+
* ...
|
|
281
|
+
* ],
|
|
282
|
+
* "runtimes" : [
|
|
283
|
+
* {
|
|
284
|
+
* "version" : '13.0',
|
|
285
|
+
* "bundlePath" : '/Applications/Xcode11beta4.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime',
|
|
286
|
+
* "isAvailable" : true,
|
|
287
|
+
* "name" : 'iOS 13.0',
|
|
288
|
+
* "identifier" : 'com.apple.CoreSimulator.SimRuntime.iOS-13-0',
|
|
289
|
+
* "buildversion" : '17A5534d'
|
|
290
|
+
* },
|
|
291
|
+
* ...
|
|
292
|
+
* },
|
|
293
|
+
* "devices" :
|
|
294
|
+
* {
|
|
295
|
+
* 'com.apple.CoreSimulator.SimRuntime.iOS-13-0': [ [Object], [Object] ] },
|
|
296
|
+
* ...
|
|
297
|
+
* },
|
|
298
|
+
* "pairs" : {} }
|
|
299
|
+
*
|
|
300
|
+
* }
|
|
301
|
+
* @throws {Error} If the corresponding simctl command fails
|
|
302
|
+
*/
|
|
143
303
|
commands.list = async function list() {
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
}
|
|
304
|
+
const { stdout } = await this.exec('list', {
|
|
305
|
+
args: ['-j'],
|
|
306
|
+
});
|
|
307
|
+
try {
|
|
308
|
+
return JSON.parse(stdout.trim());
|
|
309
|
+
}
|
|
310
|
+
catch (e) {
|
|
311
|
+
throw new Error(`Unable to parse simctl list: ${e.message}`);
|
|
312
|
+
}
|
|
154
313
|
};
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfaGVscGVycyIsIl9sb2dnZXIiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsIm5vZGVJbnRlcm9wIiwiV2Vha01hcCIsImNhY2hlQmFiZWxJbnRlcm9wIiwiY2FjaGVOb2RlSW50ZXJvcCIsIm9iaiIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiY2FjaGUiLCJoYXMiLCJnZXQiLCJuZXdPYmoiLCJoYXNQcm9wZXJ0eURlc2NyaXB0b3IiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImtleSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImRlc2MiLCJzZXQiLCJjb21tYW5kcyIsImdldERldmljZXNCeVBhcnNpbmciLCJwbGF0Zm9ybSIsInN0ZG91dCIsImV4ZWMiLCJhcmdzIiwiZGV2aWNlU2VjdGlvblJlIiwiXyIsImlzRW1wdHkiLCJSZWdFeHAiLCJlc2NhcGVSZWdFeHAiLCJtYXRjaGVzIiwibWF0Y2giLCJwdXNoIiwiRXJyb3IiLCJsaW5lUmUiLCJkZXZpY2VzIiwic2RrIiwibGluZSIsInNwbGl0Iiwic2xpY2UiLCJpbmNsdWRlcyIsImxpbmVNYXRjaCIsIm5hbWUiLCJ1ZGlkIiwic3RhdGUiLCJnZXREZXZpY2VzIiwiZm9yU2RrIiwidmVyc2lvbk1hdGNoUmUiLCJzZGtOYW1lIiwiZW50cmllcyIsInRvUGFpcnMiLCJKU09OIiwicGFyc2UiLCJyZXBsYWNlIiwiU0lNX1JVTlRJTUVfTkFNRSIsInZlcnNpb25NYXRjaCIsImZpbHRlciIsImVsIiwiaXNVbmRlZmluZWQiLCJpc0F2YWlsYWJsZSIsIm1hcCIsImF2YWlsYWJpbGl0eSIsImVyciIsImxvZyIsImRlYnVnIiwiTE9HX1BSRUZJWCIsInN0YWNrIiwiZXJyTXNnIiwiYXZhaWxhYmxlU0RLcyIsImtleXMiLCJsZW5ndGgiLCJqb2luIiwiZ2V0UnVudGltZUZvclBsYXRmb3JtVmVyc2lvblZpYUpzb24iLCJwbGF0Zm9ybVZlcnNpb24iLCJ2ZXJzaW9uIiwiaWRlbnRpZmllciIsInJ1bnRpbWVzIiwibm9ybWFsaXplVmVyc2lvbiIsInRvTG93ZXJDYXNlIiwic3RhcnRzV2l0aCIsImdldFJ1bnRpbWVGb3JQbGF0Zm9ybVZlcnNpb24iLCJydW50aW1lUmUiLCJpZ24iLCJnZXREZXZpY2VUeXBlcyIsImRldmljZVR5cGVzIiwidHJpbSIsImRldmljZXR5cGVzIiwidHlwZSIsIm1lc3NhZ2UiLCJsaXN0IiwiZSIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9zdWJjb21tYW5kcy9saXN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBTSU1fUlVOVElNRV9OQU1FLCBub3JtYWxpemVWZXJzaW9uIH0gZnJvbSAnLi4vaGVscGVycyc7XG5pbXBvcnQgbG9nLCB7IExPR19QUkVGSVggfSBmcm9tICcuLi9sb2dnZXInO1xuXG5cbmNvbnN0IGNvbW1hbmRzID0ge307XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gRGV2aWNlSW5mb1xuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWUgLSBUaGUgZGV2aWNlIG5hbWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdWRpZCAtIFRoZSBkZXZpY2UgVURJRC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzdGF0ZSAtIFRoZSBjdXJyZW50IFNpbXVsYXRvciBzdGF0ZSwgZm9yIGV4YW1wbGUgJ2Jvb3RlZCcgb3IgJ3NodXRkb3duJy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzZGsgLSBUaGUgU0RLIHZlcnNpb24sIGZvciBleGFtcGxlICcxMC4zJy5cbiAqL1xuXG4vKipcbiAqIFBhcnNlIHRoZSBsaXN0IG9mIGV4aXN0aW5nIFNpbXVsYXRvciBkZXZpY2VzIHRvIHJlcHJlc2VudFxuICogaXQgYXMgY29udmVuaWVudCBtYXBwaW5nLlxuICpcbiAqIEBwYXJhbSB7P3N0cmluZ30gcGxhdGZvcm0gLSBUaGUgcGxhdGZvcm0gbmFtZSwgZm9yIGV4YW1wbGUgJ3dhdGNoT1MnLlxuICogQHJldHVybiB7T2JqZWN0fSBUaGUgcmVzdWx0aW5nIG1hcHBpbmcuIEVhY2gga2V5IGlzIHBsYXRmb3JtIHZlcnNpb24sXG4gKiAgICAgICAgICAgICAgICAgIGZvciBleGFtcGxlICcxMC4zJyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgaXMgYW5cbiAqICAgICAgICAgICAgICAgICAgYXJyYXkgb2YgdGhlIG1hdGNoaW5nIHtAbGluayBEZXZpY2VJbmZvfSBpbnN0YW5jZXMuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGNvcnJlc3BvbmRpbmcgc2ltY3RsIHN1YmNvbW1hbmQgY29tbWFuZFxuICogICAgICAgICAgICAgICAgIHJldHVybnMgbm9uLXplcm8gcmV0dXJuIGNvZGUuXG4gKi9cbmNvbW1hbmRzLmdldERldmljZXNCeVBhcnNpbmcgPSBhc3luYyBmdW5jdGlvbiBnZXREZXZpY2VzQnlQYXJzaW5nIChwbGF0Zm9ybSkge1xuICAvLyBnZXQgdGhlIGxpc3Qgb2YgZGV2aWNlc1xuICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IHRoaXMuZXhlYygnbGlzdCcsIHtcbiAgICBhcmdzOiBbJ2RldmljZXMnXSxcbiAgfSk7XG5cbiAgLy8gZXhwZWN0IHRvIGdldCBhIGxpc3RpbmcgbGlrZVxuICAvLyAtLSBpT1MgOC4xIC0tXG4gIC8vICAgICBpUGhvbmUgNHMgKDNDQTZFN0RELTIyMEUtNDVFNS1CNzE2LTFFOTkyQjNBNDI5QykgKFNodXRkb3duKVxuICAvLyAgICAgLi4uXG4gIC8vIC0tIGlPUyA4LjIgLS1cbiAgLy8gICAgIGlQaG9uZSA0cyAoQTk5RkZGQzMtOEUxOS00RENGLUI1ODUtN0Q5RDQ2QjRDMTZFKSAoU2h1dGRvd24pXG4gIC8vICAgICAuLi5cbiAgLy8gc28sIGdldCB0aGUgYC0tIGlPUyBYLlggLS1gIGxpbmUgdG8gZmluZCB0aGUgc2RrIChYLlgpXG4gIC8vIGFuZCB0aGUgcmVzdCBvZiB0aGUgbGlzdGluZyBpbiBvcmRlciB0byBsYXRlciBmaW5kIHRoZSBkZXZpY2VzXG4gIGNvbnN0IGRldmljZVNlY3Rpb25SZSA9IF8uaXNFbXB0eShwbGF0Zm9ybSlcbiAgICA/IG5ldyBSZWdFeHAoYFxcXFwtXFxcXC1cXFxccysoXFxcXFMrKVxcXFxzKyhcXFxcUyspXFxcXHMrXFxcXC1cXFxcLShcXFxcblxcXFxzezR9LispKmAsICdtZ2knKVxuICAgIDogbmV3IFJlZ0V4cChgXFxcXC1cXFxcLVxcXFxzKyR7Xy5lc2NhcGVSZWdFeHAocGxhdGZvcm0pfVxcXFxzKyhcXFxcUyspXFxcXHMrXFxcXC1cXFxcLShcXFxcblxcXFxzezR9LispKmAsICdtZ2knKTtcbiAgY29uc3QgbWF0Y2hlcyA9IFtdO1xuICBsZXQgbWF0Y2g7XG4gIC8vIG1ha2UgYW4gZW50cnkgZm9yIGVhY2ggc2RrIHZlcnNpb25cbiAgd2hpbGUgKChtYXRjaCA9IGRldmljZVNlY3Rpb25SZS5leGVjKHN0ZG91dCkpKSB7XG4gICAgbWF0Y2hlcy5wdXNoKG1hdGNoKTtcbiAgfVxuICBpZiAoXy5pc0VtcHR5KG1hdGNoZXMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCBkZXZpY2Ugc2VjdGlvbicpO1xuICB9XG5cbiAgY29uc3QgbGluZVJlID0gLyhbXlxcc10uKykgXFwoKFxcdystLitcXHcrKVxcKSBcXCgoXFx3K1xccz9cXHcrKVxcKS87IC8vIGh0dHBzOi8vcmVnZXgxMDEuY29tL3IvbEc3bUs2LzNcbiAgLy8gZ2V0IGFsbCB0aGUgZGV2aWNlcyBmb3IgZWFjaCBzZGtcbiAgY29uc3QgZGV2aWNlcyA9IHt9O1xuICBmb3IgKG1hdGNoIG9mIG1hdGNoZXMpIHtcbiAgICBjb25zdCBzZGsgPSBwbGF0Zm9ybSA/IG1hdGNoWzFdIDogbWF0Y2hbMl07XG4gICAgZGV2aWNlc1tzZGtdID0gZGV2aWNlc1tzZGtdIHx8IFtdO1xuICAgIC8vIHNwbGl0IHRoZSBmdWxsIG1hdGNoIGludG8gbGluZXMgYW5kIHJlbW92ZSB0aGUgZmlyc3RcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbWF0Y2hbMF0uc3BsaXQoJ1xcbicpLnNsaWNlKDEpKSB7XG4gICAgICBpZiAobGluZS5pbmNsdWRlcygnKHVuYXZhaWxhYmxlLCAnKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIC8vIGEgbGluZSBpcyBzb21ldGhpbmcgbGlrZVxuICAgICAgLy8gICAgaVBob25lIDRzIChBOTlGRkZDMy04RTE5LTREQ0YtQjU4NS03RDlENDZCNEMxNkUpIChTaHV0ZG93bilcbiAgICAgIC8vIHJldHJpZXZlOlxuICAgICAgLy8gICBpUGhvbmUgNHNcbiAgICAgIC8vICAgQTk5RkZGQzMtOEUxOS00RENGLUI1ODUtN0Q5RDQ2QjRDMTZFXG4gICAgICAvLyAgIFNodXRkb3duXG4gICAgICBjb25zdCBsaW5lTWF0Y2ggPSBsaW5lUmUuZXhlYyhsaW5lKTtcbiAgICAgIGlmICghbGluZU1hdGNoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IG1hdGNoIGxpbmU6ICR7bGluZX1gKTtcbiAgICAgIH1cbiAgICAgIC8vIHNhdmUgdGhlIHdob2xlIHRoaW5nIGFzIGFiIG9iamVjdCBpbiB0aGUgbGlzdCBmb3IgdGhpcyBzZGtcbiAgICAgIGRldmljZXNbc2RrXS5wdXNoKHtcbiAgICAgICAgbmFtZTogbGluZU1hdGNoWzFdLFxuICAgICAgICB1ZGlkOiBsaW5lTWF0Y2hbMl0sXG4gICAgICAgIHN0YXRlOiBsaW5lTWF0Y2hbM10sXG4gICAgICAgIHNkayxcbiAgICAgICAgcGxhdGZvcm06IHBsYXRmb3JtIHx8IG1hdGNoWzFdLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBkZXZpY2VzO1xufTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgbGlzdCBvZiBleGlzdGluZyBTaW11bGF0b3IgZGV2aWNlcyB0byByZXByZXNlbnRcbiAqIGl0IGFzIGNvbnZlbmllbnQgbWFwcGluZyBmb3IgdGhlIHBhcnRpY3VsYXIgcGxhdGZvcm0gdmVyc2lvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZz99IGZvclNkayAtIFRoZSBzZGsgdmVyc2lvbixcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHdoaWNoIHRoZSBkZXZpY2VzIGxpc3Qgc2hvdWxkIGJlIHBhcnNlZCxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGV4YW1wbGUgJzEwLjMnLlxuICogQHBhcmFtIHtzdHJpbmc/fSBwbGF0Zm9ybSAtIFRoZSBwbGF0Zm9ybSBuYW1lLCBmb3IgZXhhbXBsZSAnd2F0Y2hPUycuXG4gKiBAcmV0dXJuIHtQcm9taXNlPE9iamVjdHxEZXZpY2VJbmZvW10+fSBJZiBfZm9yU2RrXyBpcyBzZXQgdGhlbiB0aGUgbGlzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBkZXZpY2VzIGZvciB0aGUgcGFydGljdWxhciBwbGF0Zm9ybSB2ZXJzaW9uLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdGhlcndpc2UgdGhlIHNhbWUgcmVzdWx0IGFzIGZvciB7QGxpbmsgZ2V0RGV2aWNlc0J5UGFyc2luZ31cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24uXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGNvcnJlc3BvbmRpbmcgc2ltY3RsIHN1YmNvbW1hbmQgY29tbWFuZFxuICogICAgICAgICAgICAgICAgIHJldHVybnMgbm9uLXplcm8gcmV0dXJuIGNvZGUgb3IgaWYgbm8gbWF0Y2hpbmdcbiAqICAgICAgICAgICAgICAgICBwbGF0Zm9ybSB2ZXJzaW9uIGlzIGZvdW5kIGluIHRoZSBzeXN0ZW0uXG4gKi9cbmNvbW1hbmRzLmdldERldmljZXMgPSBhc3luYyBmdW5jdGlvbiBnZXREZXZpY2VzIChmb3JTZGssIHBsYXRmb3JtKSB7XG4gIGxldCBkZXZpY2VzID0ge307XG4gIHRyeSB7XG4gICAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCB0aGlzLmV4ZWMoJ2xpc3QnLCB7XG4gICAgICBhcmdzOiBbJ2RldmljZXMnLCAnLWonXSxcbiAgICB9KTtcbiAgICAvKiBKU09OIHNob3VsZCBiZVxuICAgICAqIHtcbiAgICAgKiAgIFwiZGV2aWNlc1wiIDoge1xuICAgICAqICAgICBcImlPUyA8c2RrPlwiIDogWyAvLyBvclxuICAgICAqICAgICBcImNvbS5hcHBsZS5Db3JlU2ltdWxhdG9yLlNpbVJ1bnRpbWUuaU9TLTxzZGs+IDogW1xuICAgICAqICAgICAgIHtcbiAgICAgKiAgICAgICAgIFwic3RhdGVcIiA6IFwiQm9vdGVkXCIsXG4gICAgICogICAgICAgICBcImF2YWlsYWJpbGl0eVwiIDogXCIoYXZhaWxhYmxlKVwiLFxuICAgICAqICAgICAgICAgXCJpc0F2YWlsYWJsZVwiIDogdHJ1ZSxcbiAgICAgKiAgICAgICAgIFwibmFtZVwiIDogXCJpUGhvbmUgNlwiLFxuICAgICAqICAgICAgICAgXCJ1ZGlkXCIgOiBcIjc1RTM0MTQwLTE4RTgtNEQxQS05RjQ1LUFBQzczNURGNzVERlwiXG4gICAgICogICAgICAgfVxuICAgICAqICAgICBdXG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqL1xuICAgIGNvbnN0IHZlcnNpb25NYXRjaFJlID0gXy5pc0VtcHR5KHBsYXRmb3JtKVxuICAgICAgPyBuZXcgUmVnRXhwKGBeKFteXFxcXHMtXSspW1xcXFxzLV0oXFxcXFMrKWAsICdpJylcbiAgICAgIDogbmV3IFJlZ0V4cChgXiR7Xy5lc2NhcGVSZWdFeHAocGxhdGZvcm0pfVtcXFxccy1dKFxcXFxTKylgLCAnaScpO1xuICAgIGZvciAobGV0IFtzZGtOYW1lLCBlbnRyaWVzXSBvZiBfLnRvUGFpcnMoSlNPTi5wYXJzZShzdGRvdXQpLmRldmljZXMpKSB7XG4gICAgICAvLyB0aGVyZSBjb3VsZCBiZSBhIGxvbmdlciBuYW1lLCBzbyByZW1vdmUgaXRcbiAgICAgIHNka05hbWUgPSBzZGtOYW1lLnJlcGxhY2UoU0lNX1JVTlRJTUVfTkFNRSwgJycpO1xuICAgICAgY29uc3QgdmVyc2lvbk1hdGNoID0gdmVyc2lvbk1hdGNoUmUuZXhlYyhzZGtOYW1lKTtcbiAgICAgIGlmICghdmVyc2lvbk1hdGNoKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyB0aGUgc2RrIGNhbiBoYXZlIGRhc2hlcyAoYDEyLTJgKSBvciBkb3RzIChgMTIuMWApXG4gICAgICBjb25zdCBzZGsgPSAocGxhdGZvcm0gPyB2ZXJzaW9uTWF0Y2hbMV0gOiB2ZXJzaW9uTWF0Y2hbMl0pLnJlcGxhY2UoJy0nLCAnLicpO1xuICAgICAgZGV2aWNlc1tzZGtdID0gZGV2aWNlc1tzZGtdIHx8IFtdO1xuICAgICAgZGV2aWNlc1tzZGtdLnB1c2goLi4uZW50cmllcy5maWx0ZXIoKGVsKSA9PiBfLmlzVW5kZWZpbmVkKGVsLmlzQXZhaWxhYmxlKSB8fCBlbC5pc0F2YWlsYWJsZSlcbiAgICAgICAgLm1hcCgoZWwpID0+IHtcbiAgICAgICAgICBkZWxldGUgZWwuYXZhaWxhYmlsaXR5O1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzZGssXG4gICAgICAgICAgICAuLi5lbCxcbiAgICAgICAgICAgIHBsYXRmb3JtOiBwbGF0Zm9ybSB8fCB2ZXJzaW9uTWF0Y2hbMV0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cuZGVidWcoTE9HX1BSRUZJWCwgYFVuYWJsZSB0byBnZXQgSlNPTiBkZXZpY2UgbGlzdDogJHtlcnIuc3RhY2t9YCk7XG4gICAgbG9nLmRlYnVnKExPR19QUkVGSVgsICdGYWxsaW5nIGJhY2sgdG8gbWFudWFsIHBhcnNpbmcnKTtcbiAgICBkZXZpY2VzID0gYXdhaXQgdGhpcy5nZXREZXZpY2VzQnlQYXJzaW5nKHBsYXRmb3JtKTtcbiAgfVxuXG4gIGlmICghZm9yU2RrKSB7XG4gICAgcmV0dXJuIGRldmljZXM7XG4gIH1cbiAgLy8gaWYgYSBgZm9yU2RrYCB3YXMgcGFzc2VkIGluLCByZXR1cm4gb25seSB0aGUgY29ycmVzcG9uZGluZyBsaXN0XG4gIGlmIChkZXZpY2VzW2ZvclNka10pIHtcbiAgICByZXR1cm4gZGV2aWNlc1tmb3JTZGtdO1xuICB9XG5cbiAgbGV0IGVyck1zZyA9IGAnJHtmb3JTZGt9JyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbGlzdCBvZiBzaW1jdGwgU0RLcy5gO1xuICBjb25zdCBhdmFpbGFibGVTREtzID0gXy5rZXlzKGRldmljZXMpO1xuICBlcnJNc2cgKz0gYXZhaWxhYmxlU0RLcy5sZW5ndGhcbiAgICA/IGAgT25seSB0aGUgZm9sbG93aW5nIFNpbXVsYXRvciBTREsgdmVyc2lvbnMgYXJlIGF2YWlsYWJsZSBvbiB5b3VyIHN5c3RlbTogJHthdmFpbGFibGVTREtzLmpvaW4oJywgJyl9YFxuICAgIDogYCBObyBTaW11bGF0b3IgU0RLIHZlcnNpb25zIGFyZSBhdmFpbGFibGUgb24geW91ciBzeXN0ZW0uIFBsZWFzZSBpbnN0YWxsIHNvbWUgdmlhIFhjb2RlIHByZWZlcmVuY2VzLmA7XG4gIHRocm93IG5ldyBFcnJvcihlcnJNc2cpO1xufTtcblxuLyoqXG4gKiBHZXQgdGhlIHJ1bnRpbWUgZm9yIHRoZSBwYXJ0aWN1bGFyIHBsYXRmb3JtIHZlcnNpb24gdXNpbmcgLS1qc29uIGZsYWdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGxhdGZvcm1WZXJzaW9uIC0gVGhlIHBsYXRmb3JtIHZlcnNpb24gbmFtZSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZXhhbXBsZSAnMTAuMycuXG4gKiBAcGFyYW0ge3N0cmluZz99IHBsYXRmb3JtIC0gVGhlIHBsYXRmb3JtIG5hbWUsIGZvciBleGFtcGxlICd3YXRjaE9TJy5cbiAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gVGhlIGNvcnJlc3BvbmRpbmcgcnVudGltZSBuYW1lIGZvciB0aGUgZ2l2ZW5cbiAqICAgICAgICAgICAgICAgICAgcGxhdGZvcm0gdmVyc2lvbi5cbiAqL1xuY29tbWFuZHMuZ2V0UnVudGltZUZvclBsYXRmb3JtVmVyc2lvblZpYUpzb24gPSBhc3luYyBmdW5jdGlvbiBnZXRSdW50aW1lRm9yUGxhdGZvcm1WZXJzaW9uVmlhSnNvbiAoXG4gIHBsYXRmb3JtVmVyc2lvbiwgcGxhdGZvcm0gPSAnaU9TJykge1xuICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IHRoaXMuZXhlYygnbGlzdCcsIHtcbiAgICBhcmdzOiBbJ3J1bnRpbWVzJywgJy0tanNvbiddLFxuICB9KTtcbiAgZm9yIChjb25zdCB7dmVyc2lvbiwgaWRlbnRpZmllciwgbmFtZX0gb2YgSlNPTi5wYXJzZShzdGRvdXQpLnJ1bnRpbWVzKSB7XG4gICAgaWYgKG5vcm1hbGl6ZVZlcnNpb24odmVyc2lvbikgPT09IG5vcm1hbGl6ZVZlcnNpb24ocGxhdGZvcm1WZXJzaW9uKVxuICAgICAgJiYgbmFtZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgocGxhdGZvcm0udG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgIHJldHVybiBpZGVudGlmaWVyO1xuICAgIH1cbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCB1c2UgLS1qc29uIGZsYWcgdG8gcGFyc2UgcGxhdGZvcm0gdmVyc2lvbmApO1xufTtcblxuLyoqXG4gKiBHZXQgdGhlIHJ1bnRpbWUgZm9yIHRoZSBwYXJ0aWN1bGFyIHBsYXRmb3JtIHZlcnNpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBsYXRmb3JtVmVyc2lvbiAtIFRoZSBwbGF0Zm9ybSB2ZXJzaW9uIG5hbWUsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGV4YW1wbGUgJzEwLjMnLlxuICogQHBhcmFtIHtzdHJpbmc/fSBwbGF0Zm9ybSAtIFRoZSBwbGF0Zm9ybSBuYW1lLCBmb3IgZXhhbXBsZSAnd2F0Y2hPUycuXG4gKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IFRoZSBjb3JyZXNwb25kaW5nIHJ1bnRpbWUgbmFtZSBmb3IgdGhlIGdpdmVuXG4gKiAgICAgICAgICAgICAgICAgIHBsYXRmb3JtIHZlcnNpb24uXG4gKi9cbmNvbW1hbmRzLmdldFJ1bnRpbWVGb3JQbGF0Zm9ybVZlcnNpb24gPSBhc3luYyBmdW5jdGlvbiBnZXRSdW50aW1lRm9yUGxhdGZvcm1WZXJzaW9uIChcbiAgcGxhdGZvcm1WZXJzaW9uLCBwbGF0Zm9ybSA9ICdpT1MnKSB7XG4gIC8vIFRyeSB3aXRoIHBhcnNpbmdcbiAgdHJ5IHtcbiAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IHRoaXMuZXhlYygnbGlzdCcsIHtcbiAgICAgIGFyZ3M6IFsncnVudGltZXMnXSxcbiAgICB9KTtcbiAgICAvLyBodHRwczovL3JlZ2V4MTAxLmNvbS9yL1V5a2pRWi8xXG4gICAgY29uc3QgcnVudGltZVJlID1cbiAgICAgIG5ldyBSZWdFeHAoYCR7Xy5lc2NhcGVSZWdFeHAocGxhdGZvcm0pfVxcXFxzKyhcXFxcZCtcXFxcLlxcXFxkKylcXFxccytcXFxcKChcXFxcZCtcXFxcLlxcXFxkK1xcXFwuKlxcXFxkKilgLCAnaScpO1xuICAgIGZvciAoY29uc3QgbGluZSBvZiBzdGRvdXQuc3BsaXQoJ1xcbicpKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IHJ1bnRpbWVSZS5leGVjKGxpbmUpO1xuICAgICAgaWYgKG1hdGNoICYmIG1hdGNoWzFdID09PSBwbGF0Zm9ybVZlcnNpb24pIHtcbiAgICAgICAgcmV0dXJuIG1hdGNoWzJdO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoaWduKSB7fVxuXG4gIC8vIGlmIG5vdGhpbmcgd2FzIGZvdW5kLCBwYXNzIHBsYXRmb3JtIHZlcnNpb24gYmFja1xuICByZXR1cm4gcGxhdGZvcm1WZXJzaW9uO1xufTtcblxuLyoqXG4gKiBHZXQgdGhlIGxpc3Qgb2YgZGV2aWNlIHR5cGVzIGF2YWlsYWJsZSBpbiB0aGUgY3VycmVudCBYY29kZSBpbnN0YWxsYXRpb25cbiAqXG4gKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZ1tdPn0gTGlzdCBvZiB0aGUgdHlwZXMgb2YgZGV2aWNlcyBhdmFpbGFibGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgY29ycmVzcG9uZGluZyBzaW1jdGwgY29tbWFuZCBmYWlsc1xuICovXG5jb21tYW5kcy5nZXREZXZpY2VUeXBlcyA9IGFzeW5jIGZ1bmN0aW9uIGdldERldmljZVR5cGVzICgpIHtcbiAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCB0aGlzLmV4ZWMoJ2xpc3QnLCB7XG4gICAgYXJnczogWydkZXZpY2V0eXBlcycsICctaiddLFxuICB9KTtcbiAgLypcbiAgICogSlNPTiB3aWxsIGJlIGxpa2U6XG4gICAqICAge1xuICAgKiAgICAgXCJkZXZpY2V0eXBlc1wiIDogW1xuICAgKiAgICAgICB7XG4gICAqICAgICAgICAgXCJuYW1lXCIgOiBcImlQaG9uZSA0c1wiLFxuICAgKiAgICAgICAgIFwiaWRlbnRpZmllclwiIDogXCJjb20uYXBwbGUuQ29yZVNpbXVsYXRvci5TaW1EZXZpY2VUeXBlLmlQaG9uZS00c1wiXG4gICAqICAgICAgIH0sXG4gICAqICAgICAgIC4uLlxuICAgKiAgIH1cbiAgICovXG4gIHRyeSB7XG4gICAgY29uc3QgZGV2aWNlVHlwZXMgPSBKU09OLnBhcnNlKHN0ZG91dC50cmltKCkpO1xuICAgIHJldHVybiBkZXZpY2VUeXBlcy5kZXZpY2V0eXBlcy5tYXAoKHR5cGUpID0+IHR5cGUubmFtZSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGdldCBsaXN0IG9mIGRldmljZSB0eXBlczogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuLyoqXG4gKiBHZXQgdGhlIGZ1bGwgbGlzdCBvZiBydW50aW1lcywgZGV2aWNldHlwZXMsIGRldmljZXMgYW5kIHBhaXJzIGFzIE9iamVjdFxuICpcbiAqIEByZXR1cm4ge1Byb21pc2U8T2JqZWN0Pn0gT2JqZWN0IGNvbnRhaW5pbmcgZGV2aWNlIHR5cGVzLCBydW50aW1lcyBkZXZpY2VzIGFuZCBwYWlycy5cbiAqIFRoZSByZXN1bHRpbmcgSlNPTiB3aWxsIGJlIGxpa2U6XG4gKiAgIHtcbiAqICAgICBcImRldmljZXR5cGVzXCIgOiBbXG4gKiAgICAgICB7XG4gKiAgICAgICAgIFwibmFtZVwiIDogXCJpUGhvbmUgNHNcIixcbiAqICAgICAgICAgXCJpZGVudGlmaWVyXCIgOiBcImNvbS5hcHBsZS5Db3JlU2ltdWxhdG9yLlNpbURldmljZVR5cGUuaVBob25lLTRzXCJcbiAqICAgICAgIH0sXG4gKiAgICAgICAuLi5cbiAqICAgICAgXSxcbiAqICAgICBcInJ1bnRpbWVzXCIgOiBbXG4gKiAgICAgICB7XG4gKiAgICAgICAgIFwidmVyc2lvblwiIDogJzEzLjAnLFxuICogICAgICAgICBcImJ1bmRsZVBhdGhcIiA6ICcvQXBwbGljYXRpb25zL1hjb2RlMTFiZXRhNC5hcHAvQ29udGVudHMvRGV2ZWxvcGVyL1BsYXRmb3Jtcy9pUGhvbmVPUy5wbGF0Zm9ybS9MaWJyYXJ5L0RldmVsb3Blci9Db3JlU2ltdWxhdG9yL1Byb2ZpbGVzL1J1bnRpbWVzL2lPUy5zaW1ydW50aW1lJyxcbiAqICAgICAgICAgXCJpc0F2YWlsYWJsZVwiIDogdHJ1ZSxcbiAqICAgICAgICAgXCJuYW1lXCIgOiAnaU9TIDEzLjAnLFxuICogICAgICAgICBcImlkZW50aWZpZXJcIiA6ICdjb20uYXBwbGUuQ29yZVNpbXVsYXRvci5TaW1SdW50aW1lLmlPUy0xMy0wJyxcbiAqICAgICAgICAgXCJidWlsZHZlcnNpb25cIiA6ICcxN0E1NTM0ZCdcbiAqICAgICAgIH0sXG4gKiAgICAgICAuLi5cbiAqICAgICAgfSxcbiAqICAgICBcImRldmljZXNcIiA6XG4gKiAgICAgICB7XG4gKiAgICAgICAgICdjb20uYXBwbGUuQ29yZVNpbXVsYXRvci5TaW1SdW50aW1lLmlPUy0xMy0wJzogWyBbT2JqZWN0XSwgW09iamVjdF0gXSB9LFxuICogICAgICAgICAuLi5cbiAqICAgICAgIH0sXG4gKiAgICAgXCJwYWlyc1wiIDoge30gfVxuICpcbiAqICAgfVxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBjb3JyZXNwb25kaW5nIHNpbWN0bCBjb21tYW5kIGZhaWxzXG4gKi9cbmNvbW1hbmRzLmxpc3QgPSBhc3luYyBmdW5jdGlvbiBsaXN0ICgpIHtcbiAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCB0aGlzLmV4ZWMoJ2xpc3QnLCB7XG4gICAgYXJnczogWyctaiddLFxuICB9KTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShzdGRvdXQudHJpbSgpKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIHBhcnNlIHNpbWN0bCBsaXN0OiAke2UubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsUUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsT0FBQSxHQUFBQyx1QkFBQSxDQUFBSCxPQUFBO0FBQTRDLFNBQUFJLHlCQUFBQyxXQUFBLGVBQUFDLE9BQUEsa0NBQUFDLGlCQUFBLE9BQUFELE9BQUEsUUFBQUUsZ0JBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSxDQUFBQyxXQUFBLFdBQUFBLFdBQUEsR0FBQUcsZ0JBQUEsR0FBQUQsaUJBQUEsS0FBQUYsV0FBQTtBQUFBLFNBQUFGLHdCQUFBTSxHQUFBLEVBQUFKLFdBQUEsU0FBQUEsV0FBQSxJQUFBSSxHQUFBLElBQUFBLEdBQUEsQ0FBQUMsVUFBQSxXQUFBRCxHQUFBLFFBQUFBLEdBQUEsb0JBQUFBLEdBQUEsd0JBQUFBLEdBQUEsNEJBQUFFLE9BQUEsRUFBQUYsR0FBQSxVQUFBRyxL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
|
|
314
|
+
exports.default = commands;
|
|
315
|
+
//# sourceMappingURL=list.js.map
|