appium-xcuitest-driver 4.12.1 → 4.12.2
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 +1 -0
- package/README.md +1 -1
- package/build/index.js +1 -4
- package/build/lib/app-utils.js +1 -56
- package/build/lib/app-utils.js.map +1 -1
- package/build/lib/build-wda.js +1 -9
- package/build/lib/build-wda.js.map +1 -1
- package/build/lib/cert-utils.js +1 -7
- package/build/lib/cert-utils.js.map +1 -1
- package/build/lib/commands/activeAppInfo.js +3 -6
- package/build/lib/commands/activeAppInfo.js.map +1 -1
- package/build/lib/commands/alert.js +1 -16
- package/build/lib/commands/alert.js.map +1 -1
- package/build/lib/commands/app-management.js +3 -32
- package/build/lib/commands/app-management.js.map +1 -1
- package/build/lib/commands/appearance.js +2 -16
- package/build/lib/commands/appearance.js.map +1 -1
- package/build/lib/commands/battery.js +3 -5
- package/build/lib/commands/battery.js.map +1 -1
- package/build/lib/commands/biometric.js +3 -7
- package/build/lib/commands/biometric.js.map +1 -1
- package/build/lib/commands/certificate.js +2 -57
- package/build/lib/commands/certificate.js.map +1 -1
- package/build/lib/commands/clipboard.js +3 -6
- package/build/lib/commands/clipboard.js.map +1 -1
- package/build/lib/commands/condition.js +1 -20
- package/build/lib/commands/condition.js.map +1 -1
- package/build/lib/commands/context.js +8 -104
- package/build/lib/commands/context.js.map +1 -1
- package/build/lib/commands/cookies.js +5 -19
- package/build/lib/commands/cookies.js.map +1 -1
- package/build/lib/commands/deviceInfo.js +5 -10
- package/build/lib/commands/deviceInfo.js.map +1 -1
- package/build/lib/commands/element.js +4 -71
- package/build/lib/commands/element.js.map +1 -1
- package/build/lib/commands/execute.js +2 -19
- package/build/lib/commands/execute.js.map +1 -1
- package/build/lib/commands/file-movement.js +1 -66
- package/build/lib/commands/file-movement.js.map +1 -1
- package/build/lib/commands/find.js +5 -36
- package/build/lib/commands/find.js.map +1 -1
- package/build/lib/commands/general.js +4 -61
- package/build/lib/commands/general.js.map +1 -1
- package/build/lib/commands/gesture.js +7 -92
- package/build/lib/commands/gesture.js.map +1 -1
- package/build/lib/commands/index.js +1 -42
- package/build/lib/commands/index.js.map +1 -1
- package/build/lib/commands/iohid.js +2 -11
- package/build/lib/commands/iohid.js.map +1 -1
- package/build/lib/commands/keychains.js +3 -7
- package/build/lib/commands/keychains.js.map +1 -1
- package/build/lib/commands/localization.js +2 -5
- package/build/lib/commands/localization.js.map +1 -1
- package/build/lib/commands/location.js +2 -15
- package/build/lib/commands/location.js.map +1 -1
- package/build/lib/commands/lock.js +1 -13
- package/build/lib/commands/lock.js.map +1 -1
- package/build/lib/commands/log.js +1 -44
- package/build/lib/commands/log.js.map +1 -1
- package/build/lib/commands/navigation.js +4 -20
- package/build/lib/commands/navigation.js.map +1 -1
- package/build/lib/commands/notifications.js +3 -13
- package/build/lib/commands/notifications.js.map +1 -1
- package/build/lib/commands/pasteboard.js +1 -10
- package/build/lib/commands/pasteboard.js.map +1 -1
- package/build/lib/commands/pcap.js +1 -34
- package/build/lib/commands/pcap.js.map +1 -1
- package/build/lib/commands/performance.js +5 -78
- package/build/lib/commands/performance.js.map +1 -1
- package/build/lib/commands/permissions.js +4 -20
- package/build/lib/commands/permissions.js.map +1 -1
- package/build/lib/commands/proxy-helper.js +2 -21
- package/build/lib/commands/proxy-helper.js.map +1 -1
- package/build/lib/commands/record-audio.js +1 -37
- package/build/lib/commands/record-audio.js.map +1 -1
- package/build/lib/commands/recordscreen.js +3 -58
- package/build/lib/commands/recordscreen.js.map +1 -1
- package/build/lib/commands/screenshots.js +1 -21
- package/build/lib/commands/screenshots.js.map +1 -1
- package/build/lib/commands/source.js +3 -25
- package/build/lib/commands/source.js.map +1 -1
- package/build/lib/commands/timeouts.js +4 -14
- package/build/lib/commands/timeouts.js.map +1 -1
- package/build/lib/commands/web.js +18 -138
- package/build/lib/commands/web.js.map +1 -1
- package/build/lib/commands/xctest.js +2 -38
- package/build/lib/commands/xctest.js.map +1 -1
- package/build/lib/cookies.js +3 -10
- package/build/lib/cookies.js.map +1 -1
- package/build/lib/css-converter.js +1 -46
- package/build/lib/css-converter.js.map +1 -1
- package/build/lib/desired-caps.js +7 -6
- package/build/lib/desired-caps.js.map +1 -1
- package/build/lib/device-connections-factory.js +1 -64
- package/build/lib/device-connections-factory.js.map +1 -1
- package/build/lib/device-log/ios-crash-log.js +3 -39
- package/build/lib/device-log/ios-crash-log.js.map +1 -1
- package/build/lib/device-log/ios-device-log.js +1 -16
- package/build/lib/device-log/ios-device-log.js.map +1 -1
- package/build/lib/device-log/ios-log.js +1 -18
- package/build/lib/device-log/ios-log.js.map +1 -1
- package/build/lib/device-log/ios-performance-log.js +2 -15
- package/build/lib/device-log/ios-performance-log.js.map +1 -1
- package/build/lib/device-log/ios-simulator-log.js +1 -36
- package/build/lib/device-log/ios-simulator-log.js.map +1 -1
- package/build/lib/device-log/rotating-log.js +1 -19
- package/build/lib/device-log/rotating-log.js.map +1 -1
- package/build/lib/device-log/safari-console-log.js +2 -15
- package/build/lib/device-log/safari-console-log.js.map +1 -1
- package/build/lib/device-log/safari-network-log.js +2 -36
- package/build/lib/device-log/safari-network-log.js.map +1 -1
- package/build/lib/driver.js +15 -236
- package/build/lib/driver.js.map +1 -1
- package/build/lib/ios-deploy.js +1 -54
- package/build/lib/ios-deploy.js.map +1 -1
- package/build/lib/ios-fs-helpers.js +1 -52
- package/build/lib/ios-fs-helpers.js.map +1 -1
- package/build/lib/ios-generic-simulators.js +1 -3
- package/build/lib/ios-generic-simulators.js.map +1 -1
- package/build/lib/logger.js +1 -5
- package/build/lib/logger.js.map +1 -1
- package/build/lib/py-ios-device-client.js +1 -30
- package/build/lib/py-ios-device-client.js.map +1 -1
- package/build/lib/real-device-management.js +1 -34
- package/build/lib/real-device-management.js.map +1 -1
- package/build/lib/simulator-management.js +2 -96
- package/build/lib/simulator-management.js.map +1 -1
- package/build/lib/utils.js +2 -100
- package/build/lib/utils.js.map +1 -1
- package/npm-shrinkwrap.json +309 -350
- package/package.json +4 -2
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
## [4.12.2](https://github.com/appium/appium-xcuitest-driver/compare/v4.12.1...v4.12.2) (2022-11-06)
|
package/README.md
CHANGED
|
@@ -25,7 +25,7 @@ On top of standard Appium requirements XCUITest driver also expects the followin
|
|
|
25
25
|
- Only macOS is supported as the host platform
|
|
26
26
|
- Xcode and developer tools must be installed. Note, that usually some time is needed for the Appium team to pick up with the support of the most recent Xcode versions, especially beta ones (check [Xcode version support](#xcode-version-support) section below).
|
|
27
27
|
- Connected real devices must be trusted, added to your developer profile and configured properly along with WebDriverAgent signing. Read [Real devices](#real-devices) section _carefully_ to set them up properly before running your tests.
|
|
28
|
-
|
|
28
|
+
- iOS/iPadOS 16 real devices require enabling developer mode. Please read [Enabling Developer Mode on a device](https://developer.apple.com/documentation/xcode/enabling-developer-mode-on-a-device) for more details. `devmodectl streaming` CLI on macOS 13+ and installing development signed apps also help enabling the mode.
|
|
29
29
|
- Consider using earlier releases of the driver (check [Xcode version support](#xcode-version-support) section below) if it is necessary to test iOS versions older than the current iOS major version minus one on real devices. Also, it is highly recommended to always use the same major version of Xcode SDK, which was used to build the particular iOS/tvOS version on your real device under test (for example Xcode 11 for iOS 13, Xcode 12 for iOS 14, etc).
|
|
30
30
|
- Web views must be debuggable in order to test them. If it is not possible to connect to your web view(s) using [Safari remote debugger](https://appletoolbox.com/use-web-inspector-debug-mobile-safari/) then XCUITest won't be able to connect to them as well.
|
|
31
31
|
- Since version 3.33.0 (included into Appium 1.20.0+) of XCUITest driver the [Carthage](https://github.com/Carthage/Carthage) dependency *is not needed anymore*. Prior to that version it was required and could be installed using [brew](https://brew.sh/): `brew install carthage`.
|
package/build/index.js
CHANGED
|
@@ -10,11 +10,8 @@ Object.defineProperty(exports, "XCUITestDriver", {
|
|
|
10
10
|
}
|
|
11
11
|
});
|
|
12
12
|
exports.default = void 0;
|
|
13
|
-
|
|
14
13
|
require("source-map-support/register");
|
|
15
|
-
|
|
16
14
|
var _driver = require("./lib/driver");
|
|
17
|
-
|
|
18
15
|
var _default = _driver.XCUITestDriver;
|
|
19
16
|
exports.default = _default;
|
|
20
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJYQ1VJVGVzdERyaXZlciJdLCJzb3VyY2VzIjpbIi4uL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIHRyYW5zcGlsZTptYWluXG5pbXBvcnQgeyBYQ1VJVGVzdERyaXZlciB9IGZyb20gJy4vbGliL2RyaXZlcic7XG5cbmV4cG9ydCB7IFhDVUlUZXN0RHJpdmVyIH07XG5leHBvcnQgZGVmYXVsdCBYQ1VJVGVzdERyaXZlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUNBO0FBQThDLGVBRy9CQSxzQkFBYztBQUFBIn0=
|
package/build/lib/app-utils.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
@@ -13,17 +12,11 @@ exports.isAppBundle = isAppBundle;
|
|
|
13
12
|
exports.isolateAppBundle = isolateAppBundle;
|
|
14
13
|
exports.parseLocalizableStrings = parseLocalizableStrings;
|
|
15
14
|
exports.verifyApplicationPlatform = verifyApplicationPlatform;
|
|
16
|
-
|
|
17
15
|
require("source-map-support/register");
|
|
18
|
-
|
|
19
16
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
20
|
-
|
|
21
17
|
var _path = _interopRequireDefault(require("path"));
|
|
22
|
-
|
|
23
18
|
var _support = require("appium/support");
|
|
24
|
-
|
|
25
19
|
var _logger = _interopRequireDefault(require("./logger.js"));
|
|
26
|
-
|
|
27
20
|
const STRINGSDICT_RESOURCE = '.stringsdict';
|
|
28
21
|
const STRINGS_RESOURCE = '.strings';
|
|
29
22
|
const SAFARI_BUNDLE_ID = 'com.apple.mobilesafari';
|
|
@@ -32,50 +25,37 @@ const APP_EXT = '.app';
|
|
|
32
25
|
exports.APP_EXT = APP_EXT;
|
|
33
26
|
const IPA_EXT = '.ipa';
|
|
34
27
|
exports.IPA_EXT = IPA_EXT;
|
|
35
|
-
|
|
36
28
|
async function extractPlistEntry(app, entryName) {
|
|
37
29
|
const plistPath = _path.default.resolve(app, 'Info.plist');
|
|
38
|
-
|
|
39
30
|
try {
|
|
40
31
|
return (await _support.plist.parsePlistFile(plistPath))[entryName];
|
|
41
32
|
} catch (err) {
|
|
42
33
|
throw new Error(`Could not extract Info.plist from '${_path.default.basename(app)}': ${err.message}`);
|
|
43
34
|
}
|
|
44
35
|
}
|
|
45
|
-
|
|
46
36
|
async function extractBundleId(app) {
|
|
47
37
|
const bundleId = await extractPlistEntry(app, 'CFBundleIdentifier');
|
|
48
|
-
|
|
49
38
|
_logger.default.debug(`Getting bundle ID from app '${app}': '${bundleId}'`);
|
|
50
|
-
|
|
51
39
|
return bundleId;
|
|
52
40
|
}
|
|
53
|
-
|
|
54
41
|
async function fetchSupportedAppPlatforms(app) {
|
|
55
42
|
try {
|
|
56
43
|
const result = await extractPlistEntry(app, 'CFBundleSupportedPlatforms');
|
|
57
|
-
|
|
58
44
|
if (!_lodash.default.isArray(result)) {
|
|
59
45
|
_logger.default.warn(`${_path.default.basename(app)}': CFBundleSupportedPlatforms is not a valid list`);
|
|
60
|
-
|
|
61
46
|
return [];
|
|
62
47
|
}
|
|
63
|
-
|
|
64
48
|
return result;
|
|
65
49
|
} catch (err) {
|
|
66
50
|
_logger.default.warn(`Cannot extract the list of supported platforms from '${_path.default.basename(app)}': ${err.message}`);
|
|
67
|
-
|
|
68
51
|
return [];
|
|
69
52
|
}
|
|
70
53
|
}
|
|
71
54
|
|
|
72
55
|
async function verifyApplicationPlatform(app, expectedPlatform) {
|
|
73
56
|
_logger.default.debug('Verifying application platform');
|
|
74
|
-
|
|
75
57
|
const supportedPlatforms = await fetchSupportedAppPlatforms(app);
|
|
76
|
-
|
|
77
58
|
_logger.default.debug(`CFBundleSupportedPlatforms: ${JSON.stringify(supportedPlatforms)}`);
|
|
78
|
-
|
|
79
59
|
const {
|
|
80
60
|
isSimulator,
|
|
81
61
|
isTvOS
|
|
@@ -83,23 +63,18 @@ async function verifyApplicationPlatform(app, expectedPlatform) {
|
|
|
83
63
|
const prefix = isTvOS ? 'AppleTV' : 'iPhone';
|
|
84
64
|
const suffix = isSimulator ? 'Simulator' : 'OS';
|
|
85
65
|
const dstPlatform = `${prefix}${suffix}`;
|
|
86
|
-
|
|
87
66
|
if (!supportedPlatforms.includes(dstPlatform)) {
|
|
88
67
|
throw new Error(`${isSimulator ? 'Simulator' : 'Real device'} architecture is unsupported by the '${app}' application. ` + `Make sure the correct deployment target has been selected for its compilation in Xcode.`);
|
|
89
68
|
}
|
|
90
69
|
}
|
|
91
|
-
|
|
92
70
|
async function readResource(resourcePath) {
|
|
93
71
|
const data = await _support.plist.parsePlistFile(resourcePath);
|
|
94
72
|
const result = {};
|
|
95
|
-
|
|
96
73
|
for (const [key, value] of _lodash.default.toPairs(data)) {
|
|
97
74
|
result[key] = _lodash.default.isString(value) ? value : JSON.stringify(value);
|
|
98
75
|
}
|
|
99
|
-
|
|
100
76
|
return result;
|
|
101
77
|
}
|
|
102
|
-
|
|
103
78
|
async function parseLocalizableStrings(opts) {
|
|
104
79
|
const {
|
|
105
80
|
app,
|
|
@@ -108,94 +83,66 @@ async function parseLocalizableStrings(opts) {
|
|
|
108
83
|
stringFile,
|
|
109
84
|
strictMode
|
|
110
85
|
} = opts;
|
|
111
|
-
|
|
112
86
|
if (!app) {
|
|
113
87
|
const message = `Strings extraction is not supported if 'app' capability is not set`;
|
|
114
|
-
|
|
115
88
|
if (strictMode) {
|
|
116
89
|
throw new Error(message);
|
|
117
90
|
}
|
|
118
|
-
|
|
119
91
|
_logger.default.info(message);
|
|
120
|
-
|
|
121
92
|
return {};
|
|
122
93
|
}
|
|
123
|
-
|
|
124
94
|
let lprojRoot;
|
|
125
|
-
|
|
126
95
|
for (const subfolder of [`${language}.lproj`, localizableStringsDir, '']) {
|
|
127
96
|
lprojRoot = _path.default.resolve(app, subfolder);
|
|
128
|
-
|
|
129
97
|
if (await _support.fs.exists(lprojRoot)) {
|
|
130
98
|
break;
|
|
131
99
|
}
|
|
132
|
-
|
|
133
100
|
const message = `No '${lprojRoot}' resources folder has been found`;
|
|
134
|
-
|
|
135
101
|
if (strictMode) {
|
|
136
102
|
throw new Error(message);
|
|
137
103
|
}
|
|
138
|
-
|
|
139
104
|
_logger.default.debug(message);
|
|
140
105
|
}
|
|
141
|
-
|
|
142
106
|
_logger.default.info(`Will extract resource strings from '${lprojRoot}'`);
|
|
143
|
-
|
|
144
107
|
const resourcePaths = [];
|
|
145
|
-
|
|
146
108
|
if (stringFile) {
|
|
147
109
|
const dstPath = _path.default.resolve(lprojRoot, stringFile);
|
|
148
|
-
|
|
149
110
|
if (await _support.fs.exists(dstPath)) {
|
|
150
111
|
resourcePaths.push(dstPath);
|
|
151
112
|
} else {
|
|
152
113
|
const message = `No '${dstPath}' resource file has been found for '${app}'`;
|
|
153
|
-
|
|
154
114
|
if (strictMode) {
|
|
155
115
|
throw new Error(message);
|
|
156
116
|
}
|
|
157
|
-
|
|
158
117
|
_logger.default.info(message);
|
|
159
|
-
|
|
160
118
|
_logger.default.info(`Getting all the available strings from '${lprojRoot}'`);
|
|
161
119
|
}
|
|
162
120
|
}
|
|
163
|
-
|
|
164
121
|
if (_lodash.default.isEmpty(resourcePaths) && (await _support.fs.exists(lprojRoot))) {
|
|
165
122
|
const resourceFiles = (await _support.fs.readdir(lprojRoot)).filter(name => _lodash.default.some([STRINGS_RESOURCE, STRINGSDICT_RESOURCE], x => name.endsWith(x))).map(name => _path.default.resolve(lprojRoot, name));
|
|
166
123
|
resourcePaths.push(...resourceFiles);
|
|
167
124
|
}
|
|
168
|
-
|
|
169
125
|
_logger.default.info(`Got ${resourcePaths.length} resource file(s) in '${lprojRoot}'`);
|
|
170
|
-
|
|
171
126
|
if (_lodash.default.isEmpty(resourcePaths)) {
|
|
172
127
|
return {};
|
|
173
128
|
}
|
|
174
|
-
|
|
175
129
|
const resultStrings = {};
|
|
176
|
-
|
|
177
130
|
const toAbsolutePath = function (p) {
|
|
178
131
|
return _path.default.isAbsolute(p) ? p : _path.default.resolve(process.cwd(), p);
|
|
179
132
|
};
|
|
180
|
-
|
|
181
133
|
for (const resourcePath of resourcePaths) {
|
|
182
134
|
if (!_support.util.isSubPath(toAbsolutePath(resourcePath), toAbsolutePath(app))) {
|
|
183
135
|
throw new Error(`'${resourcePath}' is expected to be located under '${app}'`);
|
|
184
136
|
}
|
|
185
|
-
|
|
186
137
|
try {
|
|
187
138
|
const data = await readResource(resourcePath);
|
|
188
|
-
|
|
189
139
|
_logger.default.debug(`Parsed ${_lodash.default.keys(data).length} string(s) from '${resourcePath}'`);
|
|
190
|
-
|
|
191
140
|
_lodash.default.merge(resultStrings, data);
|
|
192
141
|
} catch (e) {
|
|
193
142
|
_logger.default.warn(`Cannot parse '${resourcePath}' resource. Original error: ${e.message}`);
|
|
194
143
|
}
|
|
195
144
|
}
|
|
196
|
-
|
|
197
145
|
_logger.default.info(`Got ${_lodash.default.keys(resultStrings).length} string(s) from '${lprojRoot}'`);
|
|
198
|
-
|
|
199
146
|
return resultStrings;
|
|
200
147
|
}
|
|
201
148
|
|
|
@@ -220,12 +167,10 @@ async function findApps(archivePath, appExtensions) {
|
|
|
220
167
|
|
|
221
168
|
async function isolateAppBundle(appRoot) {
|
|
222
169
|
const tmpRoot = await _support.tempDir.openDir();
|
|
223
|
-
|
|
224
170
|
const dstRoot = _path.default.join(tmpRoot, _path.default.basename(appRoot));
|
|
225
|
-
|
|
226
171
|
await _support.fs.mv(appRoot, dstRoot, {
|
|
227
172
|
mkdirp: true
|
|
228
173
|
});
|
|
229
174
|
return dstRoot;
|
|
230
175
|
}
|
|
231
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTVFJJTkdTRElDVF9SRVNPVVJDRSIsIlNUUklOR1NfUkVTT1VSQ0UiLCJTQUZBUklfQlVORExFX0lEIiwiQVBQX0VYVCIsIklQQV9FWFQiLCJleHRyYWN0UGxpc3RFbnRyeSIsImFwcCIsImVudHJ5TmFtZSIsInBsaXN0UGF0aCIsInBhdGgiLCJyZXNvbHZlIiwicGxpc3QiLCJwYXJzZVBsaXN0RmlsZSIsImVyciIsIkVycm9yIiwiYmFzZW5hbWUiLCJtZXNzYWdlIiwiZXh0cmFjdEJ1bmRsZUlkIiwiYnVuZGxlSWQiLCJsb2ciLCJkZWJ1ZyIsImZldGNoU3VwcG9ydGVkQXBwUGxhdGZvcm1zIiwicmVzdWx0IiwiXyIsImlzQXJyYXkiLCJ3YXJuIiwidmVyaWZ5QXBwbGljYXRpb25QbGF0Zm9ybSIsImV4cGVjdGVkUGxhdGZvcm0iLCJzdXBwb3J0ZWRQbGF0Zm9ybXMiLCJKU09OIiwic3RyaW5naWZ5IiwiaXNTaW11bGF0b3IiLCJpc1R2T1MiLCJwcmVmaXgiLCJzdWZmaXgiLCJkc3RQbGF0Zm9ybSIsImluY2x1ZGVzIiwicmVhZFJlc291cmNlIiwicmVzb3VyY2VQYXRoIiwiZGF0YSIsImtleSIsInZhbHVlIiwidG9QYWlycyIsImlzU3RyaW5nIiwicGFyc2VMb2NhbGl6YWJsZVN0cmluZ3MiLCJvcHRzIiwibGFuZ3VhZ2UiLCJsb2NhbGl6YWJsZVN0cmluZ3NEaXIiLCJzdHJpbmdGaWxlIiwic3RyaWN0TW9kZSIsImluZm8iLCJscHJvalJvb3QiLCJzdWJmb2xkZXIiLCJmcyIsImV4aXN0cyIsInJlc291cmNlUGF0aHMiLCJkc3RQYXRoIiwicHVzaCIsImlzRW1wdHkiLCJyZXNvdXJjZUZpbGVzIiwicmVhZGRpciIsImZpbHRlciIsIm5hbWUiLCJzb21lIiwieCIsImVuZHNXaXRoIiwibWFwIiwibGVuZ3RoIiwicmVzdWx0U3RyaW5ncyIsInRvQWJzb2x1dGVQYXRoIiwicCIsImlzQWJzb2x1dGUiLCJwcm9jZXNzIiwiY3dkIiwidXRpbCIsImlzU3ViUGF0aCIsImtleXMiLCJtZXJnZSIsImUiLCJpc0FwcEJ1bmRsZSIsImFwcFBhdGgiLCJ0b0xvd2VyIiwic3RhdCIsImlzRGlyZWN0b3J5Iiwiam9pbiIsImZpbmRBcHBzIiwiYXJjaGl2ZVBhdGgiLCJhcHBFeHRlbnNpb25zIiwidXNlU3lzdGVtVW56aXBFbnYiLCJlbnYiLCJBUFBJVU1fUFJFRkVSX1NZU1RFTV9VTlpJUCIsInVzZVN5c3RlbVVuemlwIiwidG1wUm9vdCIsInRlbXBEaXIiLCJvcGVuRGlyIiwiemlwIiwiZXh0cmFjdEFsbFRvIiwiZ2xvYlBhdHRlcm4iLCJleHQiLCJyZXBsYWNlIiwic29ydGVkQnVuZGxlSXRlbXMiLCJnbG9iIiwic3RyaWN0Iiwic29ydCIsImEiLCJiIiwic3BsaXQiLCJzZXAiLCJpc29sYXRlQXBwQnVuZGxlIiwiYXBwUm9vdCIsImRzdFJvb3QiLCJtdiIsIm1rZGlycCJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9hcHAtdXRpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgcGxpc3QsIGZzLCB1dGlsLCB0ZW1wRGlyLCB6aXAgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyLmpzJztcblxuY29uc3QgU1RSSU5HU0RJQ1RfUkVTT1VSQ0UgPSAnLnN0cmluZ3NkaWN0JztcbmNvbnN0IFNUUklOR1NfUkVTT1VSQ0UgPSAnLnN0cmluZ3MnO1xuY29uc3QgU0FGQVJJX0JVTkRMRV9JRCA9ICdjb20uYXBwbGUubW9iaWxlc2FmYXJpJztcbmNvbnN0IEFQUF9FWFQgPSAnLmFwcCc7XG5jb25zdCBJUEFfRVhUID0gJy5pcGEnO1xuXG5hc3luYyBmdW5jdGlvbiBleHRyYWN0UGxpc3RFbnRyeSAoYXBwLCBlbnRyeU5hbWUpIHtcbiAgY29uc3QgcGxpc3RQYXRoID0gcGF0aC5yZXNvbHZlKGFwcCwgJ0luZm8ucGxpc3QnKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gKGF3YWl0IHBsaXN0LnBhcnNlUGxpc3RGaWxlKHBsaXN0UGF0aCkpW2VudHJ5TmFtZV07XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGV4dHJhY3QgSW5mby5wbGlzdCBmcm9tICcke3BhdGguYmFzZW5hbWUoYXBwKX0nOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4dHJhY3RCdW5kbGVJZCAoYXBwKSB7XG4gIGNvbnN0IGJ1bmRsZUlkID0gYXdhaXQgZXh0cmFjdFBsaXN0RW50cnkoYXBwLCAnQ0ZCdW5kbGVJZGVudGlmaWVyJyk7XG4gIGxvZy5kZWJ1ZyhgR2V0dGluZyBidW5kbGUgSUQgZnJvbSBhcHAgJyR7YXBwfSc6ICcke2J1bmRsZUlkfSdgKTtcbiAgcmV0dXJuIGJ1bmRsZUlkO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaFN1cHBvcnRlZEFwcFBsYXRmb3JtcyAoYXBwKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXh0cmFjdFBsaXN0RW50cnkoYXBwLCAnQ0ZCdW5kbGVTdXBwb3J0ZWRQbGF0Zm9ybXMnKTtcbiAgICBpZiAoIV8uaXNBcnJheShyZXN1bHQpKSB7XG4gICAgICBsb2cud2FybihgJHtwYXRoLmJhc2VuYW1lKGFwcCl9JzogQ0ZCdW5kbGVTdXBwb3J0ZWRQbGF0Zm9ybXMgaXMgbm90IGEgdmFsaWQgbGlzdGApO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cud2FybihcbiAgICAgIGBDYW5ub3QgZXh0cmFjdCB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgcGxhdGZvcm1zIGZyb20gJyR7cGF0aC5iYXNlbmFtZShhcHApfSc6ICR7ZXJyLm1lc3NhZ2V9YFxuICAgICk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUGxhdGZvcm1PcHRzXG4gKlxuICogQHByb3BlcnR5IHtib29sZWFufSBpc1NpbXVsYXRvciAtIFdoZXRoZXIgdGhlIGRlc3RpbmF0aW9uIHBsYXRmb3JtIGlzIGEgU2ltdWxhdG9yXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGlzVHZPUyAtIFdoZXRoZXIgdGhlIGRlc3RpbmF0aW9uIHBsYXRmb3JtIGlzIGEgU2ltdWxhdG9yXG4gKi9cblxuLyoqXG4gKiBWZXJpZnkgd2hldGhlciB0aGUgZ2l2ZW4gYXBwbGljYXRpb24gaXMgY29tcGF0aWJsZSB0byB0aGVcbiAqIHBsYXRmb3JtIHdoZXJlIGl0IGlzIGdvaW5nIHRvIGJlIGluc3RhbGxlZCBhbmQgdGVzdGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHAgLSBUaGUgYWN0dWFsIHBhdGggdG8gdGhlIGFwcGxpY2F0aW9uIGJ1bmRsZVxuICogQHBhcmFtIHtQbGF0Zm9ybU9wdHN9IGV4cGVjdGVkUGxhdGZvcm1cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBidW5kbGUgYXJjaGl0ZWN0dXJlIGRvZXMgbm90IG1hdGNoIHRoZSBleHBlY3RlZCBkZXZpY2UgYXJjaGl0ZWN0dXJlLlxuICovXG5hc3luYyBmdW5jdGlvbiB2ZXJpZnlBcHBsaWNhdGlvblBsYXRmb3JtIChhcHAsIGV4cGVjdGVkUGxhdGZvcm0pIHtcbiAgbG9nLmRlYnVnKCdWZXJpZnlpbmcgYXBwbGljYXRpb24gcGxhdGZvcm0nKTtcblxuICBjb25zdCBzdXBwb3J0ZWRQbGF0Zm9ybXMgPSBhd2FpdCBmZXRjaFN1cHBvcnRlZEFwcFBsYXRmb3JtcyhhcHApO1xuICBsb2cuZGVidWcoYENGQnVuZGxlU3VwcG9ydGVkUGxhdGZvcm1zOiAke0pTT04uc3RyaW5naWZ5KHN1cHBvcnRlZFBsYXRmb3Jtcyl9YCk7XG5cbiAgY29uc3Qge1xuICAgIGlzU2ltdWxhdG9yLFxuICAgIGlzVHZPUyxcbiAgfSA9IGV4cGVjdGVkUGxhdGZvcm07XG4gIGNvbnN0IHByZWZpeCA9IGlzVHZPUyA/ICdBcHBsZVRWJyA6ICdpUGhvbmUnO1xuICBjb25zdCBzdWZmaXggPSBpc1NpbXVsYXRvciA/ICdTaW11bGF0b3InIDogJ09TJztcbiAgY29uc3QgZHN0UGxhdGZvcm0gPSBgJHtwcmVmaXh9JHtzdWZmaXh9YDtcbiAgaWYgKCFzdXBwb3J0ZWRQbGF0Zm9ybXMuaW5jbHVkZXMoZHN0UGxhdGZvcm0pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke2lzU2ltdWxhdG9yID8gJ1NpbXVsYXRvcicgOiAnUmVhbCBkZXZpY2UnfSBhcmNoaXRlY3R1cmUgaXMgdW5zdXBwb3J0ZWQgYnkgdGhlICcke2FwcH0nIGFwcGxpY2F0aW9uLiBgICtcbiAgICAgIGBNYWtlIHN1cmUgdGhlIGNvcnJlY3QgZGVwbG95bWVudCB0YXJnZXQgaGFzIGJlZW4gc2VsZWN0ZWQgZm9yIGl0cyBjb21waWxhdGlvbiBpbiBYY29kZS5gKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiByZWFkUmVzb3VyY2UgKHJlc291cmNlUGF0aCkge1xuICBjb25zdCBkYXRhID0gYXdhaXQgcGxpc3QucGFyc2VQbGlzdEZpbGUocmVzb3VyY2VQYXRoKTtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIF8udG9QYWlycyhkYXRhKSkge1xuICAgIHJlc3VsdFtrZXldID0gXy5pc1N0cmluZyh2YWx1ZSkgPyB2YWx1ZSA6IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5hc3luYyBmdW5jdGlvbiBwYXJzZUxvY2FsaXphYmxlU3RyaW5ncyAob3B0cykge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGxhbmd1YWdlID0gJ2VuJyxcbiAgICBsb2NhbGl6YWJsZVN0cmluZ3NEaXIsXG4gICAgc3RyaW5nRmlsZSxcbiAgICBzdHJpY3RNb2RlLFxuICB9ID0gb3B0cztcblxuICBpZiAoIWFwcCkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBgU3RyaW5ncyBleHRyYWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgaWYgJ2FwcCcgY2FwYWJpbGl0eSBpcyBub3Qgc2V0YDtcbiAgICBpZiAoc3RyaWN0TW9kZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICBsb2cuaW5mbyhtZXNzYWdlKTtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBsZXQgbHByb2pSb290O1xuICBmb3IgKGNvbnN0IHN1YmZvbGRlciBvZiBbYCR7bGFuZ3VhZ2V9Lmxwcm9qYCwgbG9jYWxpemFibGVTdHJpbmdzRGlyLCAnJ10pIHtcbiAgICBscHJvalJvb3QgPSBwYXRoLnJlc29sdmUoYXBwLCBzdWJmb2xkZXIpO1xuICAgIGlmIChhd2FpdCBmcy5leGlzdHMobHByb2pSb290KSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNvbnN0IG1lc3NhZ2UgPSBgTm8gJyR7bHByb2pSb290fScgcmVzb3VyY2VzIGZvbGRlciBoYXMgYmVlbiBmb3VuZGA7XG4gICAgaWYgKHN0cmljdE1vZGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgbG9nLmRlYnVnKG1lc3NhZ2UpO1xuICB9XG4gIGxvZy5pbmZvKGBXaWxsIGV4dHJhY3QgcmVzb3VyY2Ugc3RyaW5ncyBmcm9tICcke2xwcm9qUm9vdH0nYCk7XG5cbiAgY29uc3QgcmVzb3VyY2VQYXRocyA9IFtdO1xuICBpZiAoc3RyaW5nRmlsZSkge1xuICAgIGNvbnN0IGRzdFBhdGggPSBwYXRoLnJlc29sdmUobHByb2pSb290LCBzdHJpbmdGaWxlKTtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKGRzdFBhdGgpKSB7XG4gICAgICByZXNvdXJjZVBhdGhzLnB1c2goZHN0UGF0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgTm8gJyR7ZHN0UGF0aH0nIHJlc291cmNlIGZpbGUgaGFzIGJlZW4gZm91bmQgZm9yICcke2FwcH0nYDtcbiAgICAgIGlmIChzdHJpY3RNb2RlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIGxvZy5pbmZvKG1lc3NhZ2UpO1xuICAgICAgbG9nLmluZm8oYEdldHRpbmcgYWxsIHRoZSBhdmFpbGFibGUgc3RyaW5ncyBmcm9tICcke2xwcm9qUm9vdH0nYCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKF8uaXNFbXB0eShyZXNvdXJjZVBhdGhzKSAmJiBhd2FpdCBmcy5leGlzdHMobHByb2pSb290KSkge1xuICAgIGNvbnN0IHJlc291cmNlRmlsZXMgPSAoYXdhaXQgZnMucmVhZGRpcihscHJvalJvb3QpKVxuICAgICAgLmZpbHRlcigobmFtZSkgPT4gXy5zb21lKFtTVFJJTkdTX1JFU09VUkNFLCBTVFJJTkdTRElDVF9SRVNPVVJDRV0sICh4KSA9PiBuYW1lLmVuZHNXaXRoKHgpKSlcbiAgICAgIC5tYXAoKG5hbWUpID0+IHBhdGgucmVzb2x2ZShscHJvalJvb3QsIG5hbWUpKTtcbiAgICByZXNvdXJjZVBhdGhzLnB1c2goLi4ucmVzb3VyY2VGaWxlcyk7XG4gIH1cbiAgbG9nLmluZm8oYEdvdCAke3Jlc291cmNlUGF0aHMubGVuZ3RofSByZXNvdXJjZSBmaWxlKHMpIGluICcke2xwcm9qUm9vdH0nYCk7XG5cbiAgaWYgKF8uaXNFbXB0eShyZXNvdXJjZVBhdGhzKSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdFN0cmluZ3MgPSB7fTtcbiAgY29uc3QgdG9BYnNvbHV0ZVBhdGggPSBmdW5jdGlvbiAocCkge1xuICAgIHJldHVybiBwYXRoLmlzQWJzb2x1dGUocCkgPyBwIDogcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIHApO1xuICB9O1xuICBmb3IgKGNvbnN0IHJlc291cmNlUGF0aCBvZiByZXNvdXJjZVBhdGhzKSB7XG4gICAgaWYgKCF1dGlsLmlzU3ViUGF0aCh0b0Fic29sdXRlUGF0aChyZXNvdXJjZVBhdGgpLCB0b0Fic29sdXRlUGF0aChhcHApKSkge1xuICAgICAgLy8gc2VjdXJpdHkgcHJlY2F1dGlvblxuICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtyZXNvdXJjZVBhdGh9JyBpcyBleHBlY3RlZCB0byBiZSBsb2NhdGVkIHVuZGVyICcke2FwcH0nYCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVhZFJlc291cmNlKHJlc291cmNlUGF0aCk7XG4gICAgICBsb2cuZGVidWcoYFBhcnNlZCAke18ua2V5cyhkYXRhKS5sZW5ndGh9IHN0cmluZyhzKSBmcm9tICcke3Jlc291cmNlUGF0aH0nYCk7XG4gICAgICBfLm1lcmdlKHJlc3VsdFN0cmluZ3MsIGRhdGEpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy53YXJuKGBDYW5ub3QgcGFyc2UgJyR7cmVzb3VyY2VQYXRofScgcmVzb3VyY2UuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICBsb2cuaW5mbyhgR290ICR7Xy5rZXlzKHJlc3VsdFN0cmluZ3MpLmxlbmd0aH0gc3RyaW5nKHMpIGZyb20gJyR7bHByb2pSb290fSdgKTtcbiAgcmV0dXJuIHJlc3VsdFN0cmluZ3M7XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gcGF0aCBvbiB0aGUgZmlsZSBzeXN0ZW0gcG9pbnRzIHRvIHRoZSAuYXBwIGJ1bmRsZSByb290XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcFBhdGggUG9zc2libGUgLmFwcCBidW5kbGUgcm9vdFxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGdpdmVuIHBhdGggcG9pbnRzIHRvIGFuIC5hcHAgYnVuZGxlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGlzQXBwQnVuZGxlIChhcHBQYXRoKSB7XG4gIHJldHVybiBfLmVuZHNXaXRoKF8udG9Mb3dlcihhcHBQYXRoKSwgQVBQX0VYVClcbiAgICAmJiAoYXdhaXQgZnMuc3RhdChhcHBQYXRoKSkuaXNEaXJlY3RvcnkoKVxuICAgICYmIGF3YWl0IGZzLmV4aXN0cyhwYXRoLmpvaW4oYXBwUGF0aCwgJ0luZm8ucGxpc3QnKSk7XG59XG5cbi8qKlxuICogRXh0cmFjdCB0aGUgZ2l2ZW4gYXJjaGl2ZSBhbmQgbG9va3MgZm9yIGl0ZW1zIHdpdGggZ2l2ZW4gZXh0ZW5zaW9ucyBpbiBpdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmNoaXZlUGF0aCBGdWxsIHBhdGggdG8gYSAuemlwIGFyY2hpdmVcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gYXBwRXh0ZW5zaW9ucyBMaXN0IG9mIG1hdGNoaW5nIGl0ZW0gZXh0ZW5zaW9uc1xuICogQHJldHVybnMge1tzdHJpbmcsIEFycmF5PFN0cmluZz5dfSBUdXBsZSwgd2hlcmUgdGhlIGZpcnN0IGVsZW1lbnQgcG9pbnRzIHRvXG4gKiBhIHRlbXBvcmFyeSBmb2xkZXIgcm9vdCB3aGVyZSB0aGUgYXJjaGl2ZSBoYXMgYmVlbiBleHRyYWN0ZWQgYW5kIHRoZSBzZWNvbmQgaXRlbVxuICogY29udGFpbnMgYSBsaXN0IG9mIHJlbGF0aXZlIHBhdGhzIHRvIG1hdGNoZWQgaXRlbXNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZmluZEFwcHMgKGFyY2hpdmVQYXRoLCBhcHBFeHRlbnNpb25zKSB7XG4gIGNvbnN0IHVzZVN5c3RlbVVuemlwRW52ID0gcHJvY2Vzcy5lbnYuQVBQSVVNX1BSRUZFUl9TWVNURU1fVU5aSVA7XG4gIGNvbnN0IHVzZVN5c3RlbVVuemlwID0gXy5pc0VtcHR5KHVzZVN5c3RlbVVuemlwRW52KVxuICAgIHx8ICFbJzAnLCAnZmFsc2UnXS5pbmNsdWRlcyhfLnRvTG93ZXIodXNlU3lzdGVtVW56aXBFbnYpKTtcbiAgY29uc3QgdG1wUm9vdCA9IGF3YWl0IHRlbXBEaXIub3BlbkRpcigpO1xuICBhd2FpdCB6aXAuZXh0cmFjdEFsbFRvKGFyY2hpdmVQYXRoLCB0bXBSb290LCB7dXNlU3lzdGVtVW56aXB9KTtcbiAgY29uc3QgZ2xvYlBhdHRlcm4gPSBgKiovKi4rKCR7YXBwRXh0ZW5zaW9ucy5tYXAoKGV4dCkgPT4gZXh0LnJlcGxhY2UoL15cXC4vLCAnJykpLmpvaW4oJ3wnKX0pYDtcbiAgY29uc3Qgc29ydGVkQnVuZGxlSXRlbXMgPSAoYXdhaXQgZnMuZ2xvYihnbG9iUGF0dGVybiwge1xuICAgIGN3ZDogdG1wUm9vdCxcbiAgICBzdHJpY3Q6IGZhbHNlLFxuICB9KSkuc29ydCgoYSwgYikgPT4gYS5zcGxpdChwYXRoLnNlcCkubGVuZ3RoIC0gYi5zcGxpdChwYXRoLnNlcCkubGVuZ3RoKTtcbiAgcmV0dXJuIFt0bXBSb290LCBzb3J0ZWRCdW5kbGVJdGVtc107XG59XG5cbi8qKlxuICogTW92ZXMgdGhlIGFwcGxpY2F0aW9uIGJ1bmRsZSB0byBhIG5ld2x5IGNyZWF0ZWQgdGVtcG9yYXJ5IGZvbGRlclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHBSb290IEZ1bGwgcGF0aCB0byB0aGUgLmFwcCBidW5kbGVcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBuZXcgcGF0aCB0byB0aGUgYXBwIGJ1bmRsZS5cbiAqIFRoZSBuYW1lIG9mIHRoZSBhcHAgYnVuZGxlIHJlbWFpbnMgdGhvdWdoXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGlzb2xhdGVBcHBCdW5kbGUgKGFwcFJvb3QpIHtcbiAgY29uc3QgdG1wUm9vdCA9IGF3YWl0IHRlbXBEaXIub3BlbkRpcigpO1xuICBjb25zdCBkc3RSb290ID0gcGF0aC5qb2luKHRtcFJvb3QsIHBhdGguYmFzZW5hbWUoYXBwUm9vdCkpO1xuICBhd2FpdCBmcy5tdihhcHBSb290LCBkc3RSb290LCB7bWtkaXJwOiB0cnVlfSk7XG4gIHJldHVybiBkc3RSb290O1xufVxuXG5leHBvcnQge1xuICBleHRyYWN0QnVuZGxlSWQsIHZlcmlmeUFwcGxpY2F0aW9uUGxhdGZvcm0sIHBhcnNlTG9jYWxpemFibGVTdHJpbmdzLFxuICBTQUZBUklfQlVORExFX0lELCBmZXRjaFN1cHBvcnRlZEFwcFBsYXRmb3JtcywgQVBQX0VYVCwgSVBBX0VY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
|
|
176
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTVFJJTkdTRElDVF9SRVNPVVJDRSIsIlNUUklOR1NfUkVTT1VSQ0UiLCJTQUZBUklfQlVORExFX0lEIiwiQVBQX0VYVCIsIklQQV9FWFQiLCJleHRyYWN0UGxpc3RFbnRyeSIsImFwcCIsImVudHJ5TmFtZSIsInBsaXN0UGF0aCIsInBhdGgiLCJyZXNvbHZlIiwicGxpc3QiLCJwYXJzZVBsaXN0RmlsZSIsImVyciIsIkVycm9yIiwiYmFzZW5hbWUiLCJtZXNzYWdlIiwiZXh0cmFjdEJ1bmRsZUlkIiwiYnVuZGxlSWQiLCJsb2ciLCJkZWJ1ZyIsImZldGNoU3VwcG9ydGVkQXBwUGxhdGZvcm1zIiwicmVzdWx0IiwiXyIsImlzQXJyYXkiLCJ3YXJuIiwidmVyaWZ5QXBwbGljYXRpb25QbGF0Zm9ybSIsImV4cGVjdGVkUGxhdGZvcm0iLCJzdXBwb3J0ZWRQbGF0Zm9ybXMiLCJKU09OIiwic3RyaW5naWZ5IiwiaXNTaW11bGF0b3IiLCJpc1R2T1MiLCJwcmVmaXgiLCJzdWZmaXgiLCJkc3RQbGF0Zm9ybSIsImluY2x1ZGVzIiwicmVhZFJlc291cmNlIiwicmVzb3VyY2VQYXRoIiwiZGF0YSIsImtleSIsInZhbHVlIiwidG9QYWlycyIsImlzU3RyaW5nIiwicGFyc2VMb2NhbGl6YWJsZVN0cmluZ3MiLCJvcHRzIiwibGFuZ3VhZ2UiLCJsb2NhbGl6YWJsZVN0cmluZ3NEaXIiLCJzdHJpbmdGaWxlIiwic3RyaWN0TW9kZSIsImluZm8iLCJscHJvalJvb3QiLCJzdWJmb2xkZXIiLCJmcyIsImV4aXN0cyIsInJlc291cmNlUGF0aHMiLCJkc3RQYXRoIiwicHVzaCIsImlzRW1wdHkiLCJyZXNvdXJjZUZpbGVzIiwicmVhZGRpciIsImZpbHRlciIsIm5hbWUiLCJzb21lIiwieCIsImVuZHNXaXRoIiwibWFwIiwibGVuZ3RoIiwicmVzdWx0U3RyaW5ncyIsInRvQWJzb2x1dGVQYXRoIiwicCIsImlzQWJzb2x1dGUiLCJwcm9jZXNzIiwiY3dkIiwidXRpbCIsImlzU3ViUGF0aCIsImtleXMiLCJtZXJnZSIsImUiLCJpc0FwcEJ1bmRsZSIsImFwcFBhdGgiLCJ0b0xvd2VyIiwic3RhdCIsImlzRGlyZWN0b3J5Iiwiam9pbiIsImZpbmRBcHBzIiwiYXJjaGl2ZVBhdGgiLCJhcHBFeHRlbnNpb25zIiwidXNlU3lzdGVtVW56aXBFbnYiLCJlbnYiLCJBUFBJVU1fUFJFRkVSX1NZU1RFTV9VTlpJUCIsInVzZVN5c3RlbVVuemlwIiwidG1wUm9vdCIsInRlbXBEaXIiLCJvcGVuRGlyIiwiemlwIiwiZXh0cmFjdEFsbFRvIiwiZ2xvYlBhdHRlcm4iLCJleHQiLCJyZXBsYWNlIiwic29ydGVkQnVuZGxlSXRlbXMiLCJnbG9iIiwic3RyaWN0Iiwic29ydCIsImEiLCJiIiwic3BsaXQiLCJzZXAiLCJpc29sYXRlQXBwQnVuZGxlIiwiYXBwUm9vdCIsImRzdFJvb3QiLCJtdiIsIm1rZGlycCJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9hcHAtdXRpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgcGxpc3QsIGZzLCB1dGlsLCB0ZW1wRGlyLCB6aXAgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyLmpzJztcblxuY29uc3QgU1RSSU5HU0RJQ1RfUkVTT1VSQ0UgPSAnLnN0cmluZ3NkaWN0JztcbmNvbnN0IFNUUklOR1NfUkVTT1VSQ0UgPSAnLnN0cmluZ3MnO1xuY29uc3QgU0FGQVJJX0JVTkRMRV9JRCA9ICdjb20uYXBwbGUubW9iaWxlc2FmYXJpJztcbmNvbnN0IEFQUF9FWFQgPSAnLmFwcCc7XG5jb25zdCBJUEFfRVhUID0gJy5pcGEnO1xuXG5hc3luYyBmdW5jdGlvbiBleHRyYWN0UGxpc3RFbnRyeSAoYXBwLCBlbnRyeU5hbWUpIHtcbiAgY29uc3QgcGxpc3RQYXRoID0gcGF0aC5yZXNvbHZlKGFwcCwgJ0luZm8ucGxpc3QnKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gKGF3YWl0IHBsaXN0LnBhcnNlUGxpc3RGaWxlKHBsaXN0UGF0aCkpW2VudHJ5TmFtZV07XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGV4dHJhY3QgSW5mby5wbGlzdCBmcm9tICcke3BhdGguYmFzZW5hbWUoYXBwKX0nOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4dHJhY3RCdW5kbGVJZCAoYXBwKSB7XG4gIGNvbnN0IGJ1bmRsZUlkID0gYXdhaXQgZXh0cmFjdFBsaXN0RW50cnkoYXBwLCAnQ0ZCdW5kbGVJZGVudGlmaWVyJyk7XG4gIGxvZy5kZWJ1ZyhgR2V0dGluZyBidW5kbGUgSUQgZnJvbSBhcHAgJyR7YXBwfSc6ICcke2J1bmRsZUlkfSdgKTtcbiAgcmV0dXJuIGJ1bmRsZUlkO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaFN1cHBvcnRlZEFwcFBsYXRmb3JtcyAoYXBwKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXh0cmFjdFBsaXN0RW50cnkoYXBwLCAnQ0ZCdW5kbGVTdXBwb3J0ZWRQbGF0Zm9ybXMnKTtcbiAgICBpZiAoIV8uaXNBcnJheShyZXN1bHQpKSB7XG4gICAgICBsb2cud2FybihgJHtwYXRoLmJhc2VuYW1lKGFwcCl9JzogQ0ZCdW5kbGVTdXBwb3J0ZWRQbGF0Zm9ybXMgaXMgbm90IGEgdmFsaWQgbGlzdGApO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cud2FybihcbiAgICAgIGBDYW5ub3QgZXh0cmFjdCB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgcGxhdGZvcm1zIGZyb20gJyR7cGF0aC5iYXNlbmFtZShhcHApfSc6ICR7ZXJyLm1lc3NhZ2V9YFxuICAgICk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUGxhdGZvcm1PcHRzXG4gKlxuICogQHByb3BlcnR5IHtib29sZWFufSBpc1NpbXVsYXRvciAtIFdoZXRoZXIgdGhlIGRlc3RpbmF0aW9uIHBsYXRmb3JtIGlzIGEgU2ltdWxhdG9yXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGlzVHZPUyAtIFdoZXRoZXIgdGhlIGRlc3RpbmF0aW9uIHBsYXRmb3JtIGlzIGEgU2ltdWxhdG9yXG4gKi9cblxuLyoqXG4gKiBWZXJpZnkgd2hldGhlciB0aGUgZ2l2ZW4gYXBwbGljYXRpb24gaXMgY29tcGF0aWJsZSB0byB0aGVcbiAqIHBsYXRmb3JtIHdoZXJlIGl0IGlzIGdvaW5nIHRvIGJlIGluc3RhbGxlZCBhbmQgdGVzdGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHAgLSBUaGUgYWN0dWFsIHBhdGggdG8gdGhlIGFwcGxpY2F0aW9uIGJ1bmRsZVxuICogQHBhcmFtIHtQbGF0Zm9ybU9wdHN9IGV4cGVjdGVkUGxhdGZvcm1cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBidW5kbGUgYXJjaGl0ZWN0dXJlIGRvZXMgbm90IG1hdGNoIHRoZSBleHBlY3RlZCBkZXZpY2UgYXJjaGl0ZWN0dXJlLlxuICovXG5hc3luYyBmdW5jdGlvbiB2ZXJpZnlBcHBsaWNhdGlvblBsYXRmb3JtIChhcHAsIGV4cGVjdGVkUGxhdGZvcm0pIHtcbiAgbG9nLmRlYnVnKCdWZXJpZnlpbmcgYXBwbGljYXRpb24gcGxhdGZvcm0nKTtcblxuICBjb25zdCBzdXBwb3J0ZWRQbGF0Zm9ybXMgPSBhd2FpdCBmZXRjaFN1cHBvcnRlZEFwcFBsYXRmb3JtcyhhcHApO1xuICBsb2cuZGVidWcoYENGQnVuZGxlU3VwcG9ydGVkUGxhdGZvcm1zOiAke0pTT04uc3RyaW5naWZ5KHN1cHBvcnRlZFBsYXRmb3Jtcyl9YCk7XG5cbiAgY29uc3Qge1xuICAgIGlzU2ltdWxhdG9yLFxuICAgIGlzVHZPUyxcbiAgfSA9IGV4cGVjdGVkUGxhdGZvcm07XG4gIGNvbnN0IHByZWZpeCA9IGlzVHZPUyA/ICdBcHBsZVRWJyA6ICdpUGhvbmUnO1xuICBjb25zdCBzdWZmaXggPSBpc1NpbXVsYXRvciA/ICdTaW11bGF0b3InIDogJ09TJztcbiAgY29uc3QgZHN0UGxhdGZvcm0gPSBgJHtwcmVmaXh9JHtzdWZmaXh9YDtcbiAgaWYgKCFzdXBwb3J0ZWRQbGF0Zm9ybXMuaW5jbHVkZXMoZHN0UGxhdGZvcm0pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke2lzU2ltdWxhdG9yID8gJ1NpbXVsYXRvcicgOiAnUmVhbCBkZXZpY2UnfSBhcmNoaXRlY3R1cmUgaXMgdW5zdXBwb3J0ZWQgYnkgdGhlICcke2FwcH0nIGFwcGxpY2F0aW9uLiBgICtcbiAgICAgIGBNYWtlIHN1cmUgdGhlIGNvcnJlY3QgZGVwbG95bWVudCB0YXJnZXQgaGFzIGJlZW4gc2VsZWN0ZWQgZm9yIGl0cyBjb21waWxhdGlvbiBpbiBYY29kZS5gKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiByZWFkUmVzb3VyY2UgKHJlc291cmNlUGF0aCkge1xuICBjb25zdCBkYXRhID0gYXdhaXQgcGxpc3QucGFyc2VQbGlzdEZpbGUocmVzb3VyY2VQYXRoKTtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIF8udG9QYWlycyhkYXRhKSkge1xuICAgIHJlc3VsdFtrZXldID0gXy5pc1N0cmluZyh2YWx1ZSkgPyB2YWx1ZSA6IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5hc3luYyBmdW5jdGlvbiBwYXJzZUxvY2FsaXphYmxlU3RyaW5ncyAob3B0cykge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGxhbmd1YWdlID0gJ2VuJyxcbiAgICBsb2NhbGl6YWJsZVN0cmluZ3NEaXIsXG4gICAgc3RyaW5nRmlsZSxcbiAgICBzdHJpY3RNb2RlLFxuICB9ID0gb3B0cztcblxuICBpZiAoIWFwcCkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBgU3RyaW5ncyBleHRyYWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgaWYgJ2FwcCcgY2FwYWJpbGl0eSBpcyBub3Qgc2V0YDtcbiAgICBpZiAoc3RyaWN0TW9kZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICBsb2cuaW5mbyhtZXNzYWdlKTtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBsZXQgbHByb2pSb290O1xuICBmb3IgKGNvbnN0IHN1YmZvbGRlciBvZiBbYCR7bGFuZ3VhZ2V9Lmxwcm9qYCwgbG9jYWxpemFibGVTdHJpbmdzRGlyLCAnJ10pIHtcbiAgICBscHJvalJvb3QgPSBwYXRoLnJlc29sdmUoYXBwLCBzdWJmb2xkZXIpO1xuICAgIGlmIChhd2FpdCBmcy5leGlzdHMobHByb2pSb290KSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNvbnN0IG1lc3NhZ2UgPSBgTm8gJyR7bHByb2pSb290fScgcmVzb3VyY2VzIGZvbGRlciBoYXMgYmVlbiBmb3VuZGA7XG4gICAgaWYgKHN0cmljdE1vZGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgbG9nLmRlYnVnKG1lc3NhZ2UpO1xuICB9XG4gIGxvZy5pbmZvKGBXaWxsIGV4dHJhY3QgcmVzb3VyY2Ugc3RyaW5ncyBmcm9tICcke2xwcm9qUm9vdH0nYCk7XG5cbiAgY29uc3QgcmVzb3VyY2VQYXRocyA9IFtdO1xuICBpZiAoc3RyaW5nRmlsZSkge1xuICAgIGNvbnN0IGRzdFBhdGggPSBwYXRoLnJlc29sdmUobHByb2pSb290LCBzdHJpbmdGaWxlKTtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKGRzdFBhdGgpKSB7XG4gICAgICByZXNvdXJjZVBhdGhzLnB1c2goZHN0UGF0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgTm8gJyR7ZHN0UGF0aH0nIHJlc291cmNlIGZpbGUgaGFzIGJlZW4gZm91bmQgZm9yICcke2FwcH0nYDtcbiAgICAgIGlmIChzdHJpY3RNb2RlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIGxvZy5pbmZvKG1lc3NhZ2UpO1xuICAgICAgbG9nLmluZm8oYEdldHRpbmcgYWxsIHRoZSBhdmFpbGFibGUgc3RyaW5ncyBmcm9tICcke2xwcm9qUm9vdH0nYCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKF8uaXNFbXB0eShyZXNvdXJjZVBhdGhzKSAmJiBhd2FpdCBmcy5leGlzdHMobHByb2pSb290KSkge1xuICAgIGNvbnN0IHJlc291cmNlRmlsZXMgPSAoYXdhaXQgZnMucmVhZGRpcihscHJvalJvb3QpKVxuICAgICAgLmZpbHRlcigobmFtZSkgPT4gXy5zb21lKFtTVFJJTkdTX1JFU09VUkNFLCBTVFJJTkdTRElDVF9SRVNPVVJDRV0sICh4KSA9PiBuYW1lLmVuZHNXaXRoKHgpKSlcbiAgICAgIC5tYXAoKG5hbWUpID0+IHBhdGgucmVzb2x2ZShscHJvalJvb3QsIG5hbWUpKTtcbiAgICByZXNvdXJjZVBhdGhzLnB1c2goLi4ucmVzb3VyY2VGaWxlcyk7XG4gIH1cbiAgbG9nLmluZm8oYEdvdCAke3Jlc291cmNlUGF0aHMubGVuZ3RofSByZXNvdXJjZSBmaWxlKHMpIGluICcke2xwcm9qUm9vdH0nYCk7XG5cbiAgaWYgKF8uaXNFbXB0eShyZXNvdXJjZVBhdGhzKSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdFN0cmluZ3MgPSB7fTtcbiAgY29uc3QgdG9BYnNvbHV0ZVBhdGggPSBmdW5jdGlvbiAocCkge1xuICAgIHJldHVybiBwYXRoLmlzQWJzb2x1dGUocCkgPyBwIDogcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIHApO1xuICB9O1xuICBmb3IgKGNvbnN0IHJlc291cmNlUGF0aCBvZiByZXNvdXJjZVBhdGhzKSB7XG4gICAgaWYgKCF1dGlsLmlzU3ViUGF0aCh0b0Fic29sdXRlUGF0aChyZXNvdXJjZVBhdGgpLCB0b0Fic29sdXRlUGF0aChhcHApKSkge1xuICAgICAgLy8gc2VjdXJpdHkgcHJlY2F1dGlvblxuICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtyZXNvdXJjZVBhdGh9JyBpcyBleHBlY3RlZCB0byBiZSBsb2NhdGVkIHVuZGVyICcke2FwcH0nYCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVhZFJlc291cmNlKHJlc291cmNlUGF0aCk7XG4gICAgICBsb2cuZGVidWcoYFBhcnNlZCAke18ua2V5cyhkYXRhKS5sZW5ndGh9IHN0cmluZyhzKSBmcm9tICcke3Jlc291cmNlUGF0aH0nYCk7XG4gICAgICBfLm1lcmdlKHJlc3VsdFN0cmluZ3MsIGRhdGEpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy53YXJuKGBDYW5ub3QgcGFyc2UgJyR7cmVzb3VyY2VQYXRofScgcmVzb3VyY2UuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICBsb2cuaW5mbyhgR290ICR7Xy5rZXlzKHJlc3VsdFN0cmluZ3MpLmxlbmd0aH0gc3RyaW5nKHMpIGZyb20gJyR7bHByb2pSb290fSdgKTtcbiAgcmV0dXJuIHJlc3VsdFN0cmluZ3M7XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gcGF0aCBvbiB0aGUgZmlsZSBzeXN0ZW0gcG9pbnRzIHRvIHRoZSAuYXBwIGJ1bmRsZSByb290XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcFBhdGggUG9zc2libGUgLmFwcCBidW5kbGUgcm9vdFxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGdpdmVuIHBhdGggcG9pbnRzIHRvIGFuIC5hcHAgYnVuZGxlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGlzQXBwQnVuZGxlIChhcHBQYXRoKSB7XG4gIHJldHVybiBfLmVuZHNXaXRoKF8udG9Mb3dlcihhcHBQYXRoKSwgQVBQX0VYVClcbiAgICAmJiAoYXdhaXQgZnMuc3RhdChhcHBQYXRoKSkuaXNEaXJlY3RvcnkoKVxuICAgICYmIGF3YWl0IGZzLmV4aXN0cyhwYXRoLmpvaW4oYXBwUGF0aCwgJ0luZm8ucGxpc3QnKSk7XG59XG5cbi8qKlxuICogRXh0cmFjdCB0aGUgZ2l2ZW4gYXJjaGl2ZSBhbmQgbG9va3MgZm9yIGl0ZW1zIHdpdGggZ2l2ZW4gZXh0ZW5zaW9ucyBpbiBpdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmNoaXZlUGF0aCBGdWxsIHBhdGggdG8gYSAuemlwIGFyY2hpdmVcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gYXBwRXh0ZW5zaW9ucyBMaXN0IG9mIG1hdGNoaW5nIGl0ZW0gZXh0ZW5zaW9uc1xuICogQHJldHVybnMge1tzdHJpbmcsIEFycmF5PFN0cmluZz5dfSBUdXBsZSwgd2hlcmUgdGhlIGZpcnN0IGVsZW1lbnQgcG9pbnRzIHRvXG4gKiBhIHRlbXBvcmFyeSBmb2xkZXIgcm9vdCB3aGVyZSB0aGUgYXJjaGl2ZSBoYXMgYmVlbiBleHRyYWN0ZWQgYW5kIHRoZSBzZWNvbmQgaXRlbVxuICogY29udGFpbnMgYSBsaXN0IG9mIHJlbGF0aXZlIHBhdGhzIHRvIG1hdGNoZWQgaXRlbXNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZmluZEFwcHMgKGFyY2hpdmVQYXRoLCBhcHBFeHRlbnNpb25zKSB7XG4gIGNvbnN0IHVzZVN5c3RlbVVuemlwRW52ID0gcHJvY2Vzcy5lbnYuQVBQSVVNX1BSRUZFUl9TWVNURU1fVU5aSVA7XG4gIGNvbnN0IHVzZVN5c3RlbVVuemlwID0gXy5pc0VtcHR5KHVzZVN5c3RlbVVuemlwRW52KVxuICAgIHx8ICFbJzAnLCAnZmFsc2UnXS5pbmNsdWRlcyhfLnRvTG93ZXIodXNlU3lzdGVtVW56aXBFbnYpKTtcbiAgY29uc3QgdG1wUm9vdCA9IGF3YWl0IHRlbXBEaXIub3BlbkRpcigpO1xuICBhd2FpdCB6aXAuZXh0cmFjdEFsbFRvKGFyY2hpdmVQYXRoLCB0bXBSb290LCB7dXNlU3lzdGVtVW56aXB9KTtcbiAgY29uc3QgZ2xvYlBhdHRlcm4gPSBgKiovKi4rKCR7YXBwRXh0ZW5zaW9ucy5tYXAoKGV4dCkgPT4gZXh0LnJlcGxhY2UoL15cXC4vLCAnJykpLmpvaW4oJ3wnKX0pYDtcbiAgY29uc3Qgc29ydGVkQnVuZGxlSXRlbXMgPSAoYXdhaXQgZnMuZ2xvYihnbG9iUGF0dGVybiwge1xuICAgIGN3ZDogdG1wUm9vdCxcbiAgICBzdHJpY3Q6IGZhbHNlLFxuICB9KSkuc29ydCgoYSwgYikgPT4gYS5zcGxpdChwYXRoLnNlcCkubGVuZ3RoIC0gYi5zcGxpdChwYXRoLnNlcCkubGVuZ3RoKTtcbiAgcmV0dXJuIFt0bXBSb290LCBzb3J0ZWRCdW5kbGVJdGVtc107XG59XG5cbi8qKlxuICogTW92ZXMgdGhlIGFwcGxpY2F0aW9uIGJ1bmRsZSB0byBhIG5ld2x5IGNyZWF0ZWQgdGVtcG9yYXJ5IGZvbGRlclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHBSb290IEZ1bGwgcGF0aCB0byB0aGUgLmFwcCBidW5kbGVcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBuZXcgcGF0aCB0byB0aGUgYXBwIGJ1bmRsZS5cbiAqIFRoZSBuYW1lIG9mIHRoZSBhcHAgYnVuZGxlIHJlbWFpbnMgdGhvdWdoXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGlzb2xhdGVBcHBCdW5kbGUgKGFwcFJvb3QpIHtcbiAgY29uc3QgdG1wUm9vdCA9IGF3YWl0IHRlbXBEaXIub3BlbkRpcigpO1xuICBjb25zdCBkc3RSb290ID0gcGF0aC5qb2luKHRtcFJvb3QsIHBhdGguYmFzZW5hbWUoYXBwUm9vdCkpO1xuICBhd2FpdCBmcy5tdihhcHBSb290LCBkc3RSb290LCB7bWtkaXJwOiB0cnVlfSk7XG4gIHJldHVybiBkc3RSb290O1xufVxuXG5leHBvcnQge1xuICBleHRyYWN0QnVuZGxlSWQsIHZlcmlmeUFwcGxpY2F0aW9uUGxhdGZvcm0sIHBhcnNlTG9jYWxpemFibGVTdHJpbmdzLFxuICBTQUZBUklfQlVORExFX0lELCBmZXRjaFN1cHBvcnRlZEFwcFBsYXRmb3JtcywgQVBQX0VYVCwgSVBBX0VY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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-utils.js","names":["STRINGSDICT_RESOURCE","STRINGS_RESOURCE","SAFARI_BUNDLE_ID","APP_EXT","IPA_EXT","extractPlistEntry","app","entryName","plistPath","path","resolve","plist","parsePlistFile","err","Error","basename","message","extractBundleId","bundleId","log","debug","fetchSupportedAppPlatforms","result","_","isArray","warn","verifyApplicationPlatform","expectedPlatform","supportedPlatforms","JSON","stringify","isSimulator","isTvOS","prefix","suffix","dstPlatform","includes","readResource","resourcePath","data","key","value","toPairs","isString","parseLocalizableStrings","opts","language","localizableStringsDir","stringFile","strictMode","info","lprojRoot","subfolder","fs","exists","resourcePaths","dstPath","push","isEmpty","resourceFiles","readdir","filter","name","some","x","endsWith","map","length","resultStrings","toAbsolutePath","p","isAbsolute","process","cwd","util","isSubPath","keys","merge","e","isAppBundle","appPath","toLower","stat","isDirectory","join","findApps","archivePath","appExtensions","useSystemUnzipEnv","env","APPIUM_PREFER_SYSTEM_UNZIP","useSystemUnzip","tmpRoot","tempDir","openDir","zip","extractAllTo","globPattern","ext","replace","sortedBundleItems","glob","strict","sort","a","b","split","sep","isolateAppBundle","appRoot","dstRoot","mv","mkdirp"],"sources":["../../lib/app-utils.js"],"sourcesContent":["import _ from 'lodash';\nimport path from 'path';\nimport { plist, fs, util, tempDir, zip } from 'appium/support';\nimport log from './logger.js';\n\nconst STRINGSDICT_RESOURCE = '.stringsdict';\nconst STRINGS_RESOURCE = '.strings';\nconst SAFARI_BUNDLE_ID = 'com.apple.mobilesafari';\nconst APP_EXT = '.app';\nconst IPA_EXT = '.ipa';\n\nasync function extractPlistEntry (app, entryName) {\n const plistPath = path.resolve(app, 'Info.plist');\n try {\n return (await plist.parsePlistFile(plistPath))[entryName];\n } catch (err) {\n throw new Error(`Could not extract Info.plist from '${path.basename(app)}': ${err.message}`);\n }\n}\n\nasync function extractBundleId (app) {\n const bundleId = await extractPlistEntry(app, 'CFBundleIdentifier');\n log.debug(`Getting bundle ID from app '${app}': '${bundleId}'`);\n return bundleId;\n}\n\nasync function fetchSupportedAppPlatforms (app) {\n try {\n const result = await extractPlistEntry(app, 'CFBundleSupportedPlatforms');\n if (!_.isArray(result)) {\n log.warn(`${path.basename(app)}': CFBundleSupportedPlatforms is not a valid list`);\n return [];\n }\n return result;\n } catch (err) {\n log.warn(\n `Cannot extract the list of supported platforms from '${path.basename(app)}': ${err.message}`\n );\n return [];\n }\n}\n\n/**\n * @typedef {Object} PlatformOpts\n *\n * @property {boolean} isSimulator - Whether the destination platform is a Simulator\n * @property {boolean} isTvOS - Whether the destination platform is a Simulator\n */\n\n/**\n * Verify whether the given application is compatible to the\n * platform where it is going to be installed and tested.\n *\n * @param {string} app - The actual path to the application bundle\n * @param {PlatformOpts} expectedPlatform\n * @throws {Error} If bundle architecture does not match the expected device architecture.\n */\nasync function verifyApplicationPlatform (app, expectedPlatform) {\n log.debug('Verifying application platform');\n\n const supportedPlatforms = await fetchSupportedAppPlatforms(app);\n log.debug(`CFBundleSupportedPlatforms: ${JSON.stringify(supportedPlatforms)}`);\n\n const {\n isSimulator,\n isTvOS,\n } = expectedPlatform;\n const prefix = isTvOS ? 'AppleTV' : 'iPhone';\n const suffix = isSimulator ? 'Simulator' : 'OS';\n const dstPlatform = `${prefix}${suffix}`;\n if (!supportedPlatforms.includes(dstPlatform)) {\n throw new Error(`${isSimulator ? 'Simulator' : 'Real device'} architecture is unsupported by the '${app}' application. ` +\n `Make sure the correct deployment target has been selected for its compilation in Xcode.`);\n }\n}\n\nasync function readResource (resourcePath) {\n const data = await plist.parsePlistFile(resourcePath);\n const result = {};\n for (const [key, value] of _.toPairs(data)) {\n result[key] = _.isString(value) ? value : JSON.stringify(value);\n }\n return result;\n}\n\nasync function parseLocalizableStrings (opts) {\n const {\n app,\n language = 'en',\n localizableStringsDir,\n stringFile,\n strictMode,\n } = opts;\n\n if (!app) {\n const message = `Strings extraction is not supported if 'app' capability is not set`;\n if (strictMode) {\n throw new Error(message);\n }\n log.info(message);\n return {};\n }\n\n let lprojRoot;\n for (const subfolder of [`${language}.lproj`, localizableStringsDir, '']) {\n lprojRoot = path.resolve(app, subfolder);\n if (await fs.exists(lprojRoot)) {\n break;\n }\n const message = `No '${lprojRoot}' resources folder has been found`;\n if (strictMode) {\n throw new Error(message);\n }\n log.debug(message);\n }\n log.info(`Will extract resource strings from '${lprojRoot}'`);\n\n const resourcePaths = [];\n if (stringFile) {\n const dstPath = path.resolve(lprojRoot, stringFile);\n if (await fs.exists(dstPath)) {\n resourcePaths.push(dstPath);\n } else {\n const message = `No '${dstPath}' resource file has been found for '${app}'`;\n if (strictMode) {\n throw new Error(message);\n }\n log.info(message);\n log.info(`Getting all the available strings from '${lprojRoot}'`);\n }\n }\n\n if (_.isEmpty(resourcePaths) && await fs.exists(lprojRoot)) {\n const resourceFiles = (await fs.readdir(lprojRoot))\n .filter((name) => _.some([STRINGS_RESOURCE, STRINGSDICT_RESOURCE], (x) => name.endsWith(x)))\n .map((name) => path.resolve(lprojRoot, name));\n resourcePaths.push(...resourceFiles);\n }\n log.info(`Got ${resourcePaths.length} resource file(s) in '${lprojRoot}'`);\n\n if (_.isEmpty(resourcePaths)) {\n return {};\n }\n\n const resultStrings = {};\n const toAbsolutePath = function (p) {\n return path.isAbsolute(p) ? p : path.resolve(process.cwd(), p);\n };\n for (const resourcePath of resourcePaths) {\n if (!util.isSubPath(toAbsolutePath(resourcePath), toAbsolutePath(app))) {\n // security precaution\n throw new Error(`'${resourcePath}' is expected to be located under '${app}'`);\n }\n try {\n const data = await readResource(resourcePath);\n log.debug(`Parsed ${_.keys(data).length} string(s) from '${resourcePath}'`);\n _.merge(resultStrings, data);\n } catch (e) {\n log.warn(`Cannot parse '${resourcePath}' resource. Original error: ${e.message}`);\n }\n }\n\n log.info(`Got ${_.keys(resultStrings).length} string(s) from '${lprojRoot}'`);\n return resultStrings;\n}\n\n/**\n * Check whether the given path on the file system points to the .app bundle root\n *\n * @param {string} appPath Possible .app bundle root\n * @returns {boolean} Whether the given path points to an .app bundle\n */\nasync function isAppBundle (appPath) {\n return _.endsWith(_.toLower(appPath), APP_EXT)\n && (await fs.stat(appPath)).isDirectory()\n && await fs.exists(path.join(appPath, 'Info.plist'));\n}\n\n/**\n * Extract the given archive and looks for items with given extensions in it\n *\n * @param {string} archivePath Full path to a .zip archive\n * @param {Array<string>} appExtensions List of matching item extensions\n * @returns {[string, Array<String>]} Tuple, where the first element points to\n * a temporary folder root where the archive has been extracted and the second item\n * contains a list of relative paths to matched items\n */\nasync function findApps (archivePath, appExtensions) {\n const useSystemUnzipEnv = process.env.APPIUM_PREFER_SYSTEM_UNZIP;\n const useSystemUnzip = _.isEmpty(useSystemUnzipEnv)\n || !['0', 'false'].includes(_.toLower(useSystemUnzipEnv));\n const tmpRoot = await tempDir.openDir();\n await zip.extractAllTo(archivePath, tmpRoot, {useSystemUnzip});\n const globPattern = `**/*.+(${appExtensions.map((ext) => ext.replace(/^\\./, '')).join('|')})`;\n const sortedBundleItems = (await fs.glob(globPattern, {\n cwd: tmpRoot,\n strict: false,\n })).sort((a, b) => a.split(path.sep).length - b.split(path.sep).length);\n return [tmpRoot, sortedBundleItems];\n}\n\n/**\n * Moves the application bundle to a newly created temporary folder\n *\n * @param {string} appRoot Full path to the .app bundle\n * @returns {string} The new path to the app bundle.\n * The name of the app bundle remains though\n */\nasync function isolateAppBundle (appRoot) {\n const tmpRoot = await tempDir.openDir();\n const dstRoot = path.join(tmpRoot, path.basename(appRoot));\n await fs.mv(appRoot, dstRoot, {mkdirp: true});\n return dstRoot;\n}\n\nexport {\n extractBundleId, verifyApplicationPlatform, parseLocalizableStrings,\n SAFARI_BUNDLE_ID, fetchSupportedAppPlatforms, APP_EXT, IPA_EXT,\n isAppBundle, findApps, isolateAppBundle,\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AAEA,MAAMA,oBAAoB,GAAG,cAA7B;AACA,MAAMC,gBAAgB,GAAG,UAAzB;AACA,MAAMC,gBAAgB,GAAG,wBAAzB;;AACA,MAAMC,OAAO,GAAG,MAAhB;;AACA,MAAMC,OAAO,GAAG,MAAhB;;;AAEA,eAAeC,iBAAf,CAAkCC,GAAlC,EAAuCC,SAAvC,EAAkD;EAChD,MAAMC,SAAS,GAAGC,aAAA,CAAKC,OAAL,CAAaJ,GAAb,EAAkB,YAAlB,CAAlB;;EACA,IAAI;IACF,OAAO,CAAC,MAAMK,cAAA,CAAMC,cAAN,CAAqBJ,SAArB,CAAP,EAAwCD,SAAxC,CAAP;EACD,CAFD,CAEE,OAAOM,GAAP,EAAY;IACZ,MAAM,IAAIC,KAAJ,CAAW,sCAAqCL,aAAA,CAAKM,QAAL,CAAcT,GAAd,CAAmB,MAAKO,GAAG,CAACG,OAAQ,EAApF,CAAN;EACD;AACF;;AAED,eAAeC,eAAf,CAAgCX,GAAhC,EAAqC;EACnC,MAAMY,QAAQ,GAAG,MAAMb,iBAAiB,CAACC,GAAD,EAAM,oBAAN,CAAxC;;EACAa,eAAA,CAAIC,KAAJ,CAAW,+BAA8Bd,GAAI,OAAMY,QAAS,GAA5D;;EACA,OAAOA,QAAP;AACD;;AAED,eAAeG,0BAAf,CAA2Cf,GAA3C,EAAgD;EAC9C,IAAI;IACF,MAAMgB,MAAM,GAAG,MAAMjB,iBAAiB,CAACC,GAAD,EAAM,4BAAN,CAAtC;;IACA,IAAI,CAACiB,eAAA,CAAEC,OAAF,CAAUF,MAAV,CAAL,EAAwB;MACtBH,eAAA,CAAIM,IAAJ,CAAU,GAAEhB,aAAA,CAAKM,QAAL,CAAcT,GAAd,CAAmB,mDAA/B;;MACA,OAAO,EAAP;IACD;;IACD,OAAOgB,MAAP;EACD,CAPD,CAOE,OAAOT,GAAP,EAAY;IACZM,eAAA,CAAIM,IAAJ,CACG,wDAAuDhB,aAAA,CAAKM,QAAL,CAAcT,GAAd,CAAmB,MAAKO,GAAG,CAACG,OAAQ,EAD9F;;IAGA,OAAO,EAAP;EACD;AACF;;AAiBD,eAAeU,yBAAf,CAA0CpB,GAA1C,EAA+CqB,gBAA/C,EAAiE;EAC/DR,eAAA,CAAIC,KAAJ,CAAU,gCAAV;;EAEA,MAAMQ,kBAAkB,GAAG,MAAMP,0BAA0B,CAACf,GAAD,CAA3D;;EACAa,eAAA,CAAIC,KAAJ,CAAW,+BAA8BS,IAAI,CAACC,SAAL,CAAeF,kBAAf,CAAmC,EAA5E;;EAEA,MAAM;IACJG,WADI;IAEJC;EAFI,IAGFL,gBAHJ;EAIA,MAAMM,MAAM,GAAGD,MAAM,GAAG,SAAH,GAAe,QAApC;EACA,MAAME,MAAM,GAAGH,WAAW,GAAG,WAAH,GAAiB,IAA3C;EACA,MAAMI,WAAW,GAAI,GAAEF,MAAO,GAAEC,MAAO,EAAvC;;EACA,IAAI,CAACN,kBAAkB,CAACQ,QAAnB,CAA4BD,WAA5B,CAAL,EAA+C;IAC7C,MAAM,IAAIrB,KAAJ,CAAW,GAAEiB,WAAW,GAAG,WAAH,GAAiB,aAAc,wCAAuCzB,GAAI,iBAAxF,GACb,yFADG,CAAN;EAED;AACF;;AAED,eAAe+B,YAAf,CAA6BC,YAA7B,EAA2C;EACzC,MAAMC,IAAI,GAAG,MAAM5B,cAAA,CAAMC,cAAN,CAAqB0B,YAArB,CAAnB;EACA,MAAMhB,MAAM,GAAG,EAAf;;EACA,KAAK,MAAM,CAACkB,GAAD,EAAMC,KAAN,CAAX,IAA2BlB,eAAA,CAAEmB,OAAF,CAAUH,IAAV,CAA3B,EAA4C;IAC1CjB,MAAM,CAACkB,GAAD,CAAN,GAAcjB,eAAA,CAAEoB,QAAF,CAAWF,KAAX,IAAoBA,KAApB,GAA4BZ,IAAI,CAACC,SAAL,CAAeW,KAAf,CAA1C;EACD;;EACD,OAAOnB,MAAP;AACD;;AAED,eAAesB,uBAAf,CAAwCC,IAAxC,EAA8C;EAC5C,MAAM;IACJvC,GADI;IAEJwC,QAAQ,GAAG,IAFP;IAGJC,qBAHI;IAIJC,UAJI;IAKJC;EALI,IAMFJ,IANJ;;EAQA,IAAI,CAACvC,GAAL,EAAU;IACR,MAAMU,OAAO,GAAI,oEAAjB;;IACA,IAAIiC,UAAJ,EAAgB;MACd,MAAM,IAAInC,KAAJ,CAAUE,OAAV,CAAN;IACD;;IACDG,eAAA,CAAI+B,IAAJ,CAASlC,OAAT;;IACA,OAAO,EAAP;EACD;;EAED,IAAImC,SAAJ;;EACA,KAAK,MAAMC,SAAX,IAAwB,CAAE,GAAEN,QAAS,QAAb,EAAsBC,qBAAtB,EAA6C,EAA7C,CAAxB,EAA0E;IACxEI,SAAS,GAAG1C,aAAA,CAAKC,OAAL,CAAaJ,GAAb,EAAkB8C,SAAlB,CAAZ;;IACA,IAAI,MAAMC,WAAA,CAAGC,MAAH,CAAUH,SAAV,CAAV,EAAgC;MAC9B;IACD;;IACD,MAAMnC,OAAO,GAAI,OAAMmC,SAAU,mCAAjC;;IACA,IAAIF,UAAJ,EAAgB;MACd,MAAM,IAAInC,KAAJ,CAAUE,OAAV,CAAN;IACD;;IACDG,eAAA,CAAIC,KAAJ,CAAUJ,OAAV;EACD;;EACDG,eAAA,CAAI+B,IAAJ,CAAU,uCAAsCC,SAAU,GAA1D;;EAEA,MAAMI,aAAa,GAAG,EAAtB;;EACA,IAAIP,UAAJ,EAAgB;IACd,MAAMQ,OAAO,GAAG/C,aAAA,CAAKC,OAAL,CAAayC,SAAb,EAAwBH,UAAxB,CAAhB;;IACA,IAAI,MAAMK,WAAA,CAAGC,MAAH,CAAUE,OAAV,CAAV,EAA8B;MAC5BD,aAAa,CAACE,IAAd,CAAmBD,OAAnB;IACD,CAFD,MAEO;MACL,MAAMxC,OAAO,GAAI,OAAMwC,OAAQ,uCAAsClD,GAAI,GAAzE;;MACA,IAAI2C,UAAJ,EAAgB;QACd,MAAM,IAAInC,KAAJ,CAAUE,OAAV,CAAN;MACD;;MACDG,eAAA,CAAI+B,IAAJ,CAASlC,OAAT;;MACAG,eAAA,CAAI+B,IAAJ,CAAU,2CAA0CC,SAAU,GAA9D;IACD;EACF;;EAED,IAAI5B,eAAA,CAAEmC,OAAF,CAAUH,aAAV,MAA4B,MAAMF,WAAA,CAAGC,MAAH,CAAUH,SAAV,CAAlC,CAAJ,EAA4D;IAC1D,MAAMQ,aAAa,GAAG,CAAC,MAAMN,WAAA,CAAGO,OAAH,CAAWT,SAAX,CAAP,EACnBU,MADmB,CACXC,IAAD,IAAUvC,eAAA,CAAEwC,IAAF,CAAO,CAAC9D,gBAAD,EAAmBD,oBAAnB,CAAP,EAAkDgE,CAAD,IAAOF,IAAI,CAACG,QAAL,CAAcD,CAAd,CAAxD,CADE,EAEnBE,GAFmB,CAEdJ,IAAD,IAAUrD,aAAA,CAAKC,OAAL,CAAayC,SAAb,EAAwBW,IAAxB,CAFK,CAAtB;IAGAP,aAAa,CAACE,IAAd,CAAmB,GAAGE,aAAtB;EACD;;EACDxC,eAAA,CAAI+B,IAAJ,CAAU,OAAMK,aAAa,CAACY,MAAO,yBAAwBhB,SAAU,GAAvE;;EAEA,IAAI5B,eAAA,CAAEmC,OAAF,CAAUH,aAAV,CAAJ,EAA8B;IAC5B,OAAO,EAAP;EACD;;EAED,MAAMa,aAAa,GAAG,EAAtB;;EACA,MAAMC,cAAc,GAAG,UAAUC,CAAV,EAAa;IAClC,OAAO7D,aAAA,CAAK8D,UAAL,CAAgBD,CAAhB,IAAqBA,CAArB,GAAyB7D,aAAA,CAAKC,OAAL,CAAa8D,OAAO,CAACC,GAAR,EAAb,EAA4BH,CAA5B,CAAhC;EACD,CAFD;;EAGA,KAAK,MAAMhC,YAAX,IAA2BiB,aAA3B,EAA0C;IACxC,IAAI,CAACmB,aAAA,CAAKC,SAAL,CAAeN,cAAc,CAAC/B,YAAD,CAA7B,EAA6C+B,cAAc,CAAC/D,GAAD,CAA3D,CAAL,EAAwE;MAEtE,MAAM,IAAIQ,KAAJ,CAAW,IAAGwB,YAAa,sCAAqChC,GAAI,GAApE,CAAN;IACD;;IACD,IAAI;MACF,MAAMiC,IAAI,GAAG,MAAMF,YAAY,CAACC,YAAD,CAA/B;;MACAnB,eAAA,CAAIC,KAAJ,CAAW,UAASG,eAAA,CAAEqD,IAAF,CAAOrC,IAAP,EAAa4B,MAAO,oBAAmB7B,YAAa,GAAxE;;MACAf,eAAA,CAAEsD,KAAF,CAAQT,aAAR,EAAuB7B,IAAvB;IACD,CAJD,CAIE,OAAOuC,CAAP,EAAU;MACV3D,eAAA,CAAIM,IAAJ,CAAU,iBAAgBa,YAAa,+BAA8BwC,CAAC,CAAC9D,OAAQ,EAA/E;IACD;EACF;;EAEDG,eAAA,CAAI+B,IAAJ,CAAU,OAAM3B,eAAA,CAAEqD,IAAF,CAAOR,aAAP,EAAsBD,MAAO,oBAAmBhB,SAAU,GAA1E;;EACA,OAAOiB,aAAP;AACD;;AAQD,eAAeW,WAAf,CAA4BC,OAA5B,EAAqC;EACnC,OAAOzD,eAAA,CAAE0C,QAAF,CAAW1C,eAAA,CAAE0D,OAAF,CAAUD,OAAV,CAAX,EAA+B7E,OAA/B,KACF,CAAC,MAAMkD,WAAA,CAAG6B,IAAH,CAAQF,OAAR,CAAP,EAAyBG,WAAzB,EADE,KAEF,MAAM9B,WAAA,CAAGC,MAAH,CAAU7C,aAAA,CAAK2E,IAAL,CAAUJ,OAAV,EAAmB,YAAnB,CAAV,CAFJ,CAAP;AAGD;;AAWD,eAAeK,QAAf,CAAyBC,WAAzB,EAAsCC,aAAtC,EAAqD;EACnD,MAAMC,iBAAiB,GAAGhB,OAAO,CAACiB,GAAR,CAAYC,0BAAtC;EACA,MAAMC,cAAc,GAAGpE,eAAA,CAAEmC,OAAF,CAAU8B,iBAAV,KAClB,CAAC,CAAC,GAAD,EAAM,OAAN,EAAepD,QAAf,CAAwBb,eAAA,CAAE0D,OAAF,CAAUO,iBAAV,CAAxB,CADN;EAEA,MAAMI,OAAO,GAAG,MAAMC,gBAAA,CAAQC,OAAR,EAAtB;EACA,MAAMC,YAAA,CAAIC,YAAJ,CAAiBV,WAAjB,EAA8BM,OAA9B,EAAuC;IAACD;EAAD,CAAvC,CAAN;EACA,MAAMM,WAAW,GAAI,UAASV,aAAa,CAACrB,GAAd,CAAmBgC,GAAD,IAASA,GAAG,CAACC,OAAJ,CAAY,KAAZ,EAAmB,EAAnB,CAA3B,EAAmDf,IAAnD,CAAwD,GAAxD,CAA6D,GAA3F;EACA,MAAMgB,iBAAiB,GAAG,CAAC,MAAM/C,WAAA,CAAGgD,IAAH,CAAQJ,WAAR,EAAqB;IACpDxB,GAAG,EAAEmB,OAD+C;IAEpDU,MAAM,EAAE;EAF4C,CAArB,CAAP,EAGtBC,IAHsB,CAGjB,CAACC,CAAD,EAAIC,CAAJ,KAAUD,CAAC,CAACE,KAAF,CAAQjG,aAAA,CAAKkG,GAAb,EAAkBxC,MAAlB,GAA2BsC,CAAC,CAACC,KAAF,CAAQjG,aAAA,CAAKkG,GAAb,EAAkBxC,MAHtC,CAA1B;EAIA,OAAO,CAACyB,OAAD,EAAUQ,iBAAV,CAAP;AACD;;AASD,eAAeQ,gBAAf,CAAiCC,OAAjC,EAA0C;EACxC,MAAMjB,OAAO,GAAG,MAAMC,gBAAA,CAAQC,OAAR,EAAtB;;EACA,MAAMgB,OAAO,GAAGrG,aAAA,CAAK2E,IAAL,CAAUQ,OAAV,EAAmBnF,aAAA,CAAKM,QAAL,CAAc8F,OAAd,CAAnB,CAAhB;;EACA,MAAMxD,WAAA,CAAG0D,EAAH,CAAMF,OAAN,EAAeC,OAAf,EAAwB;IAACE,MAAM,EAAE;EAAT,CAAxB,CAAN;EACA,OAAOF,OAAP;AACD"}
|
|
1
|
+
{"version":3,"file":"app-utils.js","names":["STRINGSDICT_RESOURCE","STRINGS_RESOURCE","SAFARI_BUNDLE_ID","APP_EXT","IPA_EXT","extractPlistEntry","app","entryName","plistPath","path","resolve","plist","parsePlistFile","err","Error","basename","message","extractBundleId","bundleId","log","debug","fetchSupportedAppPlatforms","result","_","isArray","warn","verifyApplicationPlatform","expectedPlatform","supportedPlatforms","JSON","stringify","isSimulator","isTvOS","prefix","suffix","dstPlatform","includes","readResource","resourcePath","data","key","value","toPairs","isString","parseLocalizableStrings","opts","language","localizableStringsDir","stringFile","strictMode","info","lprojRoot","subfolder","fs","exists","resourcePaths","dstPath","push","isEmpty","resourceFiles","readdir","filter","name","some","x","endsWith","map","length","resultStrings","toAbsolutePath","p","isAbsolute","process","cwd","util","isSubPath","keys","merge","e","isAppBundle","appPath","toLower","stat","isDirectory","join","findApps","archivePath","appExtensions","useSystemUnzipEnv","env","APPIUM_PREFER_SYSTEM_UNZIP","useSystemUnzip","tmpRoot","tempDir","openDir","zip","extractAllTo","globPattern","ext","replace","sortedBundleItems","glob","strict","sort","a","b","split","sep","isolateAppBundle","appRoot","dstRoot","mv","mkdirp"],"sources":["../../lib/app-utils.js"],"sourcesContent":["import _ from 'lodash';\nimport path from 'path';\nimport { plist, fs, util, tempDir, zip } from 'appium/support';\nimport log from './logger.js';\n\nconst STRINGSDICT_RESOURCE = '.stringsdict';\nconst STRINGS_RESOURCE = '.strings';\nconst SAFARI_BUNDLE_ID = 'com.apple.mobilesafari';\nconst APP_EXT = '.app';\nconst IPA_EXT = '.ipa';\n\nasync function extractPlistEntry (app, entryName) {\n const plistPath = path.resolve(app, 'Info.plist');\n try {\n return (await plist.parsePlistFile(plistPath))[entryName];\n } catch (err) {\n throw new Error(`Could not extract Info.plist from '${path.basename(app)}': ${err.message}`);\n }\n}\n\nasync function extractBundleId (app) {\n const bundleId = await extractPlistEntry(app, 'CFBundleIdentifier');\n log.debug(`Getting bundle ID from app '${app}': '${bundleId}'`);\n return bundleId;\n}\n\nasync function fetchSupportedAppPlatforms (app) {\n try {\n const result = await extractPlistEntry(app, 'CFBundleSupportedPlatforms');\n if (!_.isArray(result)) {\n log.warn(`${path.basename(app)}': CFBundleSupportedPlatforms is not a valid list`);\n return [];\n }\n return result;\n } catch (err) {\n log.warn(\n `Cannot extract the list of supported platforms from '${path.basename(app)}': ${err.message}`\n );\n return [];\n }\n}\n\n/**\n * @typedef {Object} PlatformOpts\n *\n * @property {boolean} isSimulator - Whether the destination platform is a Simulator\n * @property {boolean} isTvOS - Whether the destination platform is a Simulator\n */\n\n/**\n * Verify whether the given application is compatible to the\n * platform where it is going to be installed and tested.\n *\n * @param {string} app - The actual path to the application bundle\n * @param {PlatformOpts} expectedPlatform\n * @throws {Error} If bundle architecture does not match the expected device architecture.\n */\nasync function verifyApplicationPlatform (app, expectedPlatform) {\n log.debug('Verifying application platform');\n\n const supportedPlatforms = await fetchSupportedAppPlatforms(app);\n log.debug(`CFBundleSupportedPlatforms: ${JSON.stringify(supportedPlatforms)}`);\n\n const {\n isSimulator,\n isTvOS,\n } = expectedPlatform;\n const prefix = isTvOS ? 'AppleTV' : 'iPhone';\n const suffix = isSimulator ? 'Simulator' : 'OS';\n const dstPlatform = `${prefix}${suffix}`;\n if (!supportedPlatforms.includes(dstPlatform)) {\n throw new Error(`${isSimulator ? 'Simulator' : 'Real device'} architecture is unsupported by the '${app}' application. ` +\n `Make sure the correct deployment target has been selected for its compilation in Xcode.`);\n }\n}\n\nasync function readResource (resourcePath) {\n const data = await plist.parsePlistFile(resourcePath);\n const result = {};\n for (const [key, value] of _.toPairs(data)) {\n result[key] = _.isString(value) ? value : JSON.stringify(value);\n }\n return result;\n}\n\nasync function parseLocalizableStrings (opts) {\n const {\n app,\n language = 'en',\n localizableStringsDir,\n stringFile,\n strictMode,\n } = opts;\n\n if (!app) {\n const message = `Strings extraction is not supported if 'app' capability is not set`;\n if (strictMode) {\n throw new Error(message);\n }\n log.info(message);\n return {};\n }\n\n let lprojRoot;\n for (const subfolder of [`${language}.lproj`, localizableStringsDir, '']) {\n lprojRoot = path.resolve(app, subfolder);\n if (await fs.exists(lprojRoot)) {\n break;\n }\n const message = `No '${lprojRoot}' resources folder has been found`;\n if (strictMode) {\n throw new Error(message);\n }\n log.debug(message);\n }\n log.info(`Will extract resource strings from '${lprojRoot}'`);\n\n const resourcePaths = [];\n if (stringFile) {\n const dstPath = path.resolve(lprojRoot, stringFile);\n if (await fs.exists(dstPath)) {\n resourcePaths.push(dstPath);\n } else {\n const message = `No '${dstPath}' resource file has been found for '${app}'`;\n if (strictMode) {\n throw new Error(message);\n }\n log.info(message);\n log.info(`Getting all the available strings from '${lprojRoot}'`);\n }\n }\n\n if (_.isEmpty(resourcePaths) && await fs.exists(lprojRoot)) {\n const resourceFiles = (await fs.readdir(lprojRoot))\n .filter((name) => _.some([STRINGS_RESOURCE, STRINGSDICT_RESOURCE], (x) => name.endsWith(x)))\n .map((name) => path.resolve(lprojRoot, name));\n resourcePaths.push(...resourceFiles);\n }\n log.info(`Got ${resourcePaths.length} resource file(s) in '${lprojRoot}'`);\n\n if (_.isEmpty(resourcePaths)) {\n return {};\n }\n\n const resultStrings = {};\n const toAbsolutePath = function (p) {\n return path.isAbsolute(p) ? p : path.resolve(process.cwd(), p);\n };\n for (const resourcePath of resourcePaths) {\n if (!util.isSubPath(toAbsolutePath(resourcePath), toAbsolutePath(app))) {\n // security precaution\n throw new Error(`'${resourcePath}' is expected to be located under '${app}'`);\n }\n try {\n const data = await readResource(resourcePath);\n log.debug(`Parsed ${_.keys(data).length} string(s) from '${resourcePath}'`);\n _.merge(resultStrings, data);\n } catch (e) {\n log.warn(`Cannot parse '${resourcePath}' resource. Original error: ${e.message}`);\n }\n }\n\n log.info(`Got ${_.keys(resultStrings).length} string(s) from '${lprojRoot}'`);\n return resultStrings;\n}\n\n/**\n * Check whether the given path on the file system points to the .app bundle root\n *\n * @param {string} appPath Possible .app bundle root\n * @returns {boolean} Whether the given path points to an .app bundle\n */\nasync function isAppBundle (appPath) {\n return _.endsWith(_.toLower(appPath), APP_EXT)\n && (await fs.stat(appPath)).isDirectory()\n && await fs.exists(path.join(appPath, 'Info.plist'));\n}\n\n/**\n * Extract the given archive and looks for items with given extensions in it\n *\n * @param {string} archivePath Full path to a .zip archive\n * @param {Array<string>} appExtensions List of matching item extensions\n * @returns {[string, Array<String>]} Tuple, where the first element points to\n * a temporary folder root where the archive has been extracted and the second item\n * contains a list of relative paths to matched items\n */\nasync function findApps (archivePath, appExtensions) {\n const useSystemUnzipEnv = process.env.APPIUM_PREFER_SYSTEM_UNZIP;\n const useSystemUnzip = _.isEmpty(useSystemUnzipEnv)\n || !['0', 'false'].includes(_.toLower(useSystemUnzipEnv));\n const tmpRoot = await tempDir.openDir();\n await zip.extractAllTo(archivePath, tmpRoot, {useSystemUnzip});\n const globPattern = `**/*.+(${appExtensions.map((ext) => ext.replace(/^\\./, '')).join('|')})`;\n const sortedBundleItems = (await fs.glob(globPattern, {\n cwd: tmpRoot,\n strict: false,\n })).sort((a, b) => a.split(path.sep).length - b.split(path.sep).length);\n return [tmpRoot, sortedBundleItems];\n}\n\n/**\n * Moves the application bundle to a newly created temporary folder\n *\n * @param {string} appRoot Full path to the .app bundle\n * @returns {string} The new path to the app bundle.\n * The name of the app bundle remains though\n */\nasync function isolateAppBundle (appRoot) {\n const tmpRoot = await tempDir.openDir();\n const dstRoot = path.join(tmpRoot, path.basename(appRoot));\n await fs.mv(appRoot, dstRoot, {mkdirp: true});\n return dstRoot;\n}\n\nexport {\n extractBundleId, verifyApplicationPlatform, parseLocalizableStrings,\n SAFARI_BUNDLE_ID, fetchSupportedAppPlatforms, APP_EXT, IPA_EXT,\n isAppBundle, findApps, isolateAppBundle,\n};\n"],"mappings":"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"}
|
package/build/lib/build-wda.js
CHANGED
|
@@ -4,17 +4,11 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
require("source-map-support/register");
|
|
9
|
-
|
|
10
8
|
var _appiumWebdriveragent = require("appium-webdriveragent");
|
|
11
|
-
|
|
12
9
|
var _utils = require("./utils");
|
|
13
|
-
|
|
14
10
|
var _simulatorManagement = require("./simulator-management");
|
|
15
|
-
|
|
16
11
|
var _asyncbox = require("asyncbox");
|
|
17
|
-
|
|
18
12
|
const DEFAULT_SIM_NAME = 'iPhone 12';
|
|
19
13
|
|
|
20
14
|
async function build() {
|
|
@@ -33,11 +27,9 @@ async function build() {
|
|
|
33
27
|
});
|
|
34
28
|
await wda.xcodebuild.start(true);
|
|
35
29
|
}
|
|
36
|
-
|
|
37
30
|
if (require.main === module) {
|
|
38
31
|
(0, _asyncbox.asyncify)(build);
|
|
39
32
|
}
|
|
40
|
-
|
|
41
33
|
var _default = build;
|
|
42
34
|
exports.default = _default;
|
|
43
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
35
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJERUZBVUxUX1NJTV9OQU1FIiwiYnVpbGQiLCJ4Y29kZVZlcnNpb24iLCJnZXRBbmRDaGVja1hjb2RlVmVyc2lvbiIsImlvc1ZlcnNpb24iLCJnZXRBbmRDaGVja0lvc1Nka1ZlcnNpb24iLCJkZXZpY2VOYW1lIiwidHJhbnNsYXRlRGV2aWNlTmFtZSIsImRldmljZSIsImdldEV4aXN0aW5nU2ltIiwicGxhdGZvcm1WZXJzaW9uIiwid2RhIiwiV2ViRHJpdmVyQWdlbnQiLCJpb3NTZGtWZXJzaW9uIiwic2hvd1hjb2RlTG9nIiwieGNvZGVidWlsZCIsInN0YXJ0IiwicmVxdWlyZSIsIm1haW4iLCJtb2R1bGUiLCJhc3luY2lmeSJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9idWlsZC13ZGEuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV2ViRHJpdmVyQWdlbnQgfSBmcm9tICdhcHBpdW0td2ViZHJpdmVyYWdlbnQnO1xuaW1wb3J0IHsgdHJhbnNsYXRlRGV2aWNlTmFtZSwgZ2V0QW5kQ2hlY2tYY29kZVZlcnNpb24sIGdldEFuZENoZWNrSW9zU2RrVmVyc2lvbiB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgZ2V0RXhpc3RpbmdTaW0gfSBmcm9tICcuL3NpbXVsYXRvci1tYW5hZ2VtZW50JztcbmltcG9ydCB7IGFzeW5jaWZ5IH0gZnJvbSAnYXN5bmNib3gnO1xuXG5jb25zdCBERUZBVUxUX1NJTV9OQU1FID0gJ2lQaG9uZSAxMic7XG5cbi8vIFRPRE86IGFsbG93IHBhc3NpbmcgaW4gYWxsIHRoZSB2YXJpb3VzIGJ1aWxkIHBhcmFtcyBhcyBDTEkgYXJnc1xuYXN5bmMgZnVuY3Rpb24gYnVpbGQgKCkge1xuICBjb25zdCB4Y29kZVZlcnNpb24gPSBhd2FpdCBnZXRBbmRDaGVja1hjb2RlVmVyc2lvbigpO1xuICBjb25zdCBpb3NWZXJzaW9uID0gYXdhaXQgZ2V0QW5kQ2hlY2tJb3NTZGtWZXJzaW9uKCk7XG4gIGNvbnN0IGRldmljZU5hbWUgPSB0cmFuc2xhdGVEZXZpY2VOYW1lKGlvc1ZlcnNpb24sIERFRkFVTFRfU0lNX05BTUUpO1xuICBjb25zdCBkZXZpY2UgPSBhd2FpdCBnZXRFeGlzdGluZ1NpbSh7XG4gICAgcGxhdGZvcm1WZXJzaW9uOiBpb3NWZXJzaW9uLFxuICAgIGRldmljZU5hbWVcbiAgfSk7XG4gIGNvbnN0IHdkYSA9IG5ldyBXZWJEcml2ZXJBZ2VudCh4Y29kZVZlcnNpb24sIHtcbiAgICBpb3NTZGtWZXJzaW9uOiBpb3NWZXJzaW9uLFxuICAgIHBsYXRmb3JtVmVyc2lvbjogaW9zVmVyc2lvbixcbiAgICBzaG93WGNvZGVMb2c6IHRydWUsXG4gICAgZGV2aWNlLFxuICB9KTtcbiAgYXdhaXQgd2RhLnhjb2RlYnVpbGQuc3RhcnQodHJ1ZSk7XG59XG5cbmlmIChyZXF1aXJlLm1haW4gPT09IG1vZHVsZSkge1xuICBhc3luY2lmeShidWlsZCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJ1aWxkO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQSxNQUFNQSxnQkFBZ0IsR0FBRyxXQUFXOztBQUdwQyxlQUFlQyxLQUFLLEdBQUk7RUFDdEIsTUFBTUMsWUFBWSxHQUFHLE1BQU0sSUFBQUMsOEJBQXVCLEdBQUU7RUFDcEQsTUFBTUMsVUFBVSxHQUFHLE1BQU0sSUFBQUMsK0JBQXdCLEdBQUU7RUFDbkQsTUFBTUMsVUFBVSxHQUFHLElBQUFDLDBCQUFtQixFQUFDSCxVQUFVLEVBQUVKLGdCQUFnQixDQUFDO0VBQ3BFLE1BQU1RLE1BQU0sR0FBRyxNQUFNLElBQUFDLG1DQUFjLEVBQUM7SUFDbENDLGVBQWUsRUFBRU4sVUFBVTtJQUMzQkU7RUFDRixDQUFDLENBQUM7RUFDRixNQUFNSyxHQUFHLEdBQUcsSUFBSUMsb0NBQWMsQ0FBQ1YsWUFBWSxFQUFFO0lBQzNDVyxhQUFhLEVBQUVULFVBQVU7SUFDekJNLGVBQWUsRUFBRU4sVUFBVTtJQUMzQlUsWUFBWSxFQUFFLElBQUk7SUFDbEJOO0VBQ0YsQ0FBQyxDQUFDO0VBQ0YsTUFBTUcsR0FBRyxDQUFDSSxVQUFVLENBQUNDLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDbEM7QUFFQSxJQUFJQyxPQUFPLENBQUNDLElBQUksS0FBS0MsTUFBTSxFQUFFO0VBQzNCLElBQUFDLGtCQUFRLEVBQUNuQixLQUFLLENBQUM7QUFDakI7QUFBQyxlQUVjQSxLQUFLO0FBQUEifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-wda.js","names":["DEFAULT_SIM_NAME","build","xcodeVersion","getAndCheckXcodeVersion","iosVersion","getAndCheckIosSdkVersion","deviceName","translateDeviceName","device","getExistingSim","platformVersion","wda","WebDriverAgent","iosSdkVersion","showXcodeLog","xcodebuild","start","require","main","module","asyncify"],"sources":["../../lib/build-wda.js"],"sourcesContent":["import { WebDriverAgent } from 'appium-webdriveragent';\nimport { translateDeviceName, getAndCheckXcodeVersion, getAndCheckIosSdkVersion } from './utils';\nimport { getExistingSim } from './simulator-management';\nimport { asyncify } from 'asyncbox';\n\nconst DEFAULT_SIM_NAME = 'iPhone 12';\n\n// TODO: allow passing in all the various build params as CLI args\nasync function build () {\n const xcodeVersion = await getAndCheckXcodeVersion();\n const iosVersion = await getAndCheckIosSdkVersion();\n const deviceName = translateDeviceName(iosVersion, DEFAULT_SIM_NAME);\n const device = await getExistingSim({\n platformVersion: iosVersion,\n deviceName\n });\n const wda = new WebDriverAgent(xcodeVersion, {\n iosSdkVersion: iosVersion,\n platformVersion: iosVersion,\n showXcodeLog: true,\n device,\n });\n await wda.xcodebuild.start(true);\n}\n\nif (require.main === module) {\n asyncify(build);\n}\n\nexport default build;\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"build-wda.js","names":["DEFAULT_SIM_NAME","build","xcodeVersion","getAndCheckXcodeVersion","iosVersion","getAndCheckIosSdkVersion","deviceName","translateDeviceName","device","getExistingSim","platformVersion","wda","WebDriverAgent","iosSdkVersion","showXcodeLog","xcodebuild","start","require","main","module","asyncify"],"sources":["../../lib/build-wda.js"],"sourcesContent":["import { WebDriverAgent } from 'appium-webdriveragent';\nimport { translateDeviceName, getAndCheckXcodeVersion, getAndCheckIosSdkVersion } from './utils';\nimport { getExistingSim } from './simulator-management';\nimport { asyncify } from 'asyncbox';\n\nconst DEFAULT_SIM_NAME = 'iPhone 12';\n\n// TODO: allow passing in all the various build params as CLI args\nasync function build () {\n const xcodeVersion = await getAndCheckXcodeVersion();\n const iosVersion = await getAndCheckIosSdkVersion();\n const deviceName = translateDeviceName(iosVersion, DEFAULT_SIM_NAME);\n const device = await getExistingSim({\n platformVersion: iosVersion,\n deviceName\n });\n const wda = new WebDriverAgent(xcodeVersion, {\n iosSdkVersion: iosVersion,\n platformVersion: iosVersion,\n showXcodeLog: true,\n device,\n });\n await wda.xcodebuild.start(true);\n}\n\nif (require.main === module) {\n asyncify(build);\n}\n\nexport default build;\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AAEA,MAAMA,gBAAgB,GAAG,WAAW;;AAGpC,eAAeC,KAAK,GAAI;EACtB,MAAMC,YAAY,GAAG,MAAM,IAAAC,8BAAuB,GAAE;EACpD,MAAMC,UAAU,GAAG,MAAM,IAAAC,+BAAwB,GAAE;EACnD,MAAMC,UAAU,GAAG,IAAAC,0BAAmB,EAACH,UAAU,EAAEJ,gBAAgB,CAAC;EACpE,MAAMQ,MAAM,GAAG,MAAM,IAAAC,mCAAc,EAAC;IAClCC,eAAe,EAAEN,UAAU;IAC3BE;EACF,CAAC,CAAC;EACF,MAAMK,GAAG,GAAG,IAAIC,oCAAc,CAACV,YAAY,EAAE;IAC3CW,aAAa,EAAET,UAAU;IACzBM,eAAe,EAAEN,UAAU;IAC3BU,YAAY,EAAE,IAAI;IAClBN;EACF,CAAC,CAAC;EACF,MAAMG,GAAG,CAACI,UAAU,CAACC,KAAK,CAAC,IAAI,CAAC;AAClC;AAEA,IAAIC,OAAO,CAACC,IAAI,KAAKC,MAAM,EAAE;EAC3B,IAAAC,kBAAQ,EAACnB,KAAK,CAAC;AACjB;AAAC,eAEcA,KAAK;AAAA"}
|
package/build/lib/cert-utils.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
@@ -9,13 +8,9 @@ exports.doesSupportKeychainApi = void 0;
|
|
|
9
8
|
exports.hasCertificateLegacy = hasCertificateLegacy;
|
|
10
9
|
exports.installCertificate = installCertificate;
|
|
11
10
|
exports.installCertificateLegacy = installCertificateLegacy;
|
|
12
|
-
|
|
13
11
|
require("source-map-support/register");
|
|
14
|
-
|
|
15
12
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
16
|
-
|
|
17
13
|
var _appiumIosSimulator = require("appium-ios-simulator");
|
|
18
|
-
|
|
19
14
|
const doesSupportKeychainApi = _lodash.default.memoize(async function doesSupportKeychainApi(device) {
|
|
20
15
|
try {
|
|
21
16
|
await device.simctl.exec('help', {
|
|
@@ -28,7 +23,6 @@ const doesSupportKeychainApi = _lodash.default.memoize(async function doesSuppor
|
|
|
28
23
|
});
|
|
29
24
|
|
|
30
25
|
exports.doesSupportKeychainApi = doesSupportKeychainApi;
|
|
31
|
-
|
|
32
26
|
async function installCertificate(device, payload) {
|
|
33
27
|
await device.simctl.addRootCertificate(payload, {
|
|
34
28
|
raw: true
|
|
@@ -42,4 +36,4 @@ async function hasCertificateLegacy(device, payload) {
|
|
|
42
36
|
async function installCertificateLegacy(device, payload) {
|
|
43
37
|
await (0, _appiumIosSimulator.installSSLCert)(payload, device.udid);
|
|
44
38
|
}
|
|
45
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
39
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkb2VzU3VwcG9ydEtleWNoYWluQXBpIiwiXyIsIm1lbW9pemUiLCJkZXZpY2UiLCJzaW1jdGwiLCJleGVjIiwiYXJncyIsImUiLCJpbnN0YWxsQ2VydGlmaWNhdGUiLCJwYXlsb2FkIiwiYWRkUm9vdENlcnRpZmljYXRlIiwicmF3IiwiaGFzQ2VydGlmaWNhdGVMZWdhY3kiLCJoYXNTU0xDZXJ0IiwidWRpZCIsImluc3RhbGxDZXJ0aWZpY2F0ZUxlZ2FjeSIsImluc3RhbGxTU0xDZXJ0Il0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2NlcnQtdXRpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGluc3RhbGxTU0xDZXJ0LCBoYXNTU0xDZXJ0IH0gZnJvbSAnYXBwaXVtLWlvcy1zaW11bGF0b3InO1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIFNpbXVsYXRvciBkZXZpY2Ugc3VwcG9ydHMgc2ltY3RsIGtleWNoYWluIEFQSS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZGV2aWNlIFNpbXVsYXRvciBpbnN0YW5jZSBjcmVhdGVkIGJ5IGFwcGl1bS1pb3Mtc2ltdWxhdG9yIG1vZHVsZVxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgY3VycmVudCBTaW11bGF0b3IgU0RLIHN1cHBvcnRzIGtleWNoYWluIGNvbW1hbmRzLlxuICovXG5jb25zdCBkb2VzU3VwcG9ydEtleWNoYWluQXBpID0gXy5tZW1vaXplKGFzeW5jIGZ1bmN0aW9uIGRvZXNTdXBwb3J0S2V5Y2hhaW5BcGkgKGRldmljZSkge1xuICB0cnkge1xuICAgIGF3YWl0IGRldmljZS5zaW1jdGwuZXhlYygnaGVscCcsIHtcbiAgICAgIGFyZ3M6IFsna2V5Y2hhaW4nXVxuICAgIH0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59KTtcblxuLyoqXG4gKiBBZGRzIGEgY2VydGlmaWNhdGUgdG8gdGhlIHRydXN0ZWQgcm9vdCBzdG9yZS5cbiAqIFNpbXVsYXRvciBtdXN0IGJlIGluIEJPT1RFRCBzdGF0ZSBmb3IgdGhpcyBBUEkgdG8gd29yay5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZGV2aWNlIFNpbXVsYXRvciBpbnN0YW5jZSBjcmVhdGVkIGJ5IGFwcGl1bS1pb3Mtc2ltdWxhdG9yIG1vZHVsZVxuICogQHBhcmFtIHtzdHJpbmd9IHBheWxvYWQgQ2VydGlmaWNhdGUgcGF5bG9hZFxuICovXG5hc3luYyBmdW5jdGlvbiBpbnN0YWxsQ2VydGlmaWNhdGUgKGRldmljZSwgcGF5bG9hZCkge1xuICBhd2FpdCBkZXZpY2Uuc2ltY3RsLmFkZFJvb3RDZXJ0aWZpY2F0ZShwYXlsb2FkLCB7cmF3OiB0cnVlfSk7XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gY2VydGlmaWNhdGUgaXMgYWxyZWFkeSBpbnN0YWxsZWQuXG4gKiBUaGUgZnVuY3Rpb24gaXMgdXNpbmcgaGFja3kgY2FsbHMgdG8gbWFrZSBjZXJ0aWZpY2F0ZSBzdHVmZiB3b3JraW5nIGZvciBvbGRlciBTREtzLlxuICogU2ltdWxhdG9yIG11c3QgYmUgaW4gU0hVVERPV04gc3RhdGUgZm9yIHRoaXMgQVBJIHRvIHdvcmsuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGRldmljZSBTaW11bGF0b3IgaW5zdGFuY2UgY3JlYXRlZCBieSBhcHBpdW0taW9zLXNpbXVsYXRvciBtb2R1bGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXlsb2FkIENlcnRpZmljYXRlIHBheWxvYWRcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGNlcnRpZmljYXRlIGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgcm9vdCBzdG9yZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaGFzQ2VydGlmaWNhdGVMZWdhY3kgKGRldmljZSwgcGF5bG9hZCkge1xuICByZXR1cm4gYXdhaXQgaGFzU1NMQ2VydChwYXlsb2FkLCBkZXZpY2UudWRpZCk7XG59XG5cbi8qKlxuICogQWRkcyBhIGNlcnRpZmljYXRlIHRvIHRoZSB0cnVzdGVkIHJvb3Qgc3RvcmUuXG4gKiBUaGUgZnVuY3Rpb24gaXMgdXNpbmcgaGFja3kgY2FsbHMgdG8gbWFrZSBjZXJ0aWZpY2F0ZSBzdHVmZiB3b3JraW5nIGZvciBvbGRlciBTREtzLlxuICogU2ltdWxhdG9yIG11c3QgYmUgaW4gU0hVVERPV04gc3RhdGUgZm9yIHRoaXMgQVBJIHRvIHdvcmsuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGRldmljZSBTaW11bGF0b3IgaW5zdGFuY2UgY3JlYXRlZCBieSBhcHBpdW0taW9zLXNpbXVsYXRvciBtb2R1bGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXlsb2FkIENlcnRpZmljYXRlIHBheWxvYWRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gaW5zdGFsbENlcnRpZmljYXRlTGVnYWN5IChkZXZpY2UsIHBheWxvYWQpIHtcbiAgYXdhaXQgaW5zdGFsbFNTTENlcnQocGF5bG9hZCwgZGV2aWNlLnVkaWQpO1xufVxuXG5cbmV4cG9ydCB7XG4gIGRvZXNTdXBwb3J0S2V5Y2hhaW5BcGksIGluc3RhbGxDZXJ0aWZpY2F0ZSwgaW5zdGFsbENlcnRpZmljYXRlTGVnYWN5LFxuICBoYXNDZXJ0aWZpY2F0ZUxlZ2FjeVxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBUUEsTUFBTUEsc0JBQXNCLEdBQUdDLGVBQUMsQ0FBQ0MsT0FBTyxDQUFDLGVBQWVGLHNCQUFzQixDQUFFRyxNQUFNLEVBQUU7RUFDdEYsSUFBSTtJQUNGLE1BQU1BLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDQyxJQUFJLENBQUMsTUFBTSxFQUFFO01BQy9CQyxJQUFJLEVBQUUsQ0FBQyxVQUFVO0lBQ25CLENBQUMsQ0FBQztJQUNGLE9BQU8sSUFBSTtFQUNiLENBQUMsQ0FBQyxPQUFPQyxDQUFDLEVBQUU7SUFDVixPQUFPLEtBQUs7RUFDZDtBQUNGLENBQUMsQ0FBQzs7QUFBQztBQVNILGVBQWVDLGtCQUFrQixDQUFFTCxNQUFNLEVBQUVNLE9BQU8sRUFBRTtFQUNsRCxNQUFNTixNQUFNLENBQUNDLE1BQU0sQ0FBQ00sa0JBQWtCLENBQUNELE9BQU8sRUFBRTtJQUFDRSxHQUFHLEVBQUU7RUFBSSxDQUFDLENBQUM7QUFDOUQ7O0FBV0EsZUFBZUMsb0JBQW9CLENBQUVULE1BQU0sRUFBRU0sT0FBTyxFQUFFO0VBQ3BELE9BQU8sTUFBTSxJQUFBSSw4QkFBVSxFQUFDSixPQUFPLEVBQUVOLE1BQU0sQ0FBQ1csSUFBSSxDQUFDO0FBQy9DOztBQVVBLGVBQWVDLHdCQUF3QixDQUFFWixNQUFNLEVBQUVNLE9BQU8sRUFBRTtFQUN4RCxNQUFNLElBQUFPLGtDQUFjLEVBQUNQLE9BQU8sRUFBRU4sTUFBTSxDQUFDVyxJQUFJLENBQUM7QUFDNUMifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cert-utils.js","names":["doesSupportKeychainApi","_","memoize","device","simctl","exec","args","e","installCertificate","payload","addRootCertificate","raw","hasCertificateLegacy","hasSSLCert","udid","installCertificateLegacy","installSSLCert"],"sources":["../../lib/cert-utils.js"],"sourcesContent":["import _ from 'lodash';\nimport { installSSLCert, hasSSLCert } from 'appium-ios-simulator';\n\n/**\n * Check whether the given Simulator device supports simctl keychain API.\n *\n * @param {object} device Simulator instance created by appium-ios-simulator module\n * @returns {boolean} `true` if the current Simulator SDK supports keychain commands.\n */\nconst doesSupportKeychainApi = _.memoize(async function doesSupportKeychainApi (device) {\n try {\n await device.simctl.exec('help', {\n args: ['keychain']\n });\n return true;\n } catch (e) {\n return false;\n }\n});\n\n/**\n * Adds a certificate to the trusted root store.\n * Simulator must be in BOOTED state for this API to work.\n *\n * @param {object} device Simulator instance created by appium-ios-simulator module\n * @param {string} payload Certificate payload\n */\nasync function installCertificate (device, payload) {\n await device.simctl.addRootCertificate(payload, {raw: true});\n}\n\n/**\n * Check whether the given certificate is already installed.\n * The function is using hacky calls to make certificate stuff working for older SDKs.\n * Simulator must be in SHUTDOWN state for this API to work.\n *\n * @param {object} device Simulator instance created by appium-ios-simulator module\n * @param {string} payload Certificate payload\n * @returns {boolean} `true` if the certificate is already present in the root store.\n */\nasync function hasCertificateLegacy (device, payload) {\n return await hasSSLCert(payload, device.udid);\n}\n\n/**\n * Adds a certificate to the trusted root store.\n * The function is using hacky calls to make certificate stuff working for older SDKs.\n * Simulator must be in SHUTDOWN state for this API to work.\n *\n * @param {object} device Simulator instance created by appium-ios-simulator module\n * @param {string} payload Certificate payload\n */\nasync function installCertificateLegacy (device, payload) {\n await installSSLCert(payload, device.udid);\n}\n\n\nexport {\n doesSupportKeychainApi, installCertificate, installCertificateLegacy,\n hasCertificateLegacy\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"cert-utils.js","names":["doesSupportKeychainApi","_","memoize","device","simctl","exec","args","e","installCertificate","payload","addRootCertificate","raw","hasCertificateLegacy","hasSSLCert","udid","installCertificateLegacy","installSSLCert"],"sources":["../../lib/cert-utils.js"],"sourcesContent":["import _ from 'lodash';\nimport { installSSLCert, hasSSLCert } from 'appium-ios-simulator';\n\n/**\n * Check whether the given Simulator device supports simctl keychain API.\n *\n * @param {object} device Simulator instance created by appium-ios-simulator module\n * @returns {boolean} `true` if the current Simulator SDK supports keychain commands.\n */\nconst doesSupportKeychainApi = _.memoize(async function doesSupportKeychainApi (device) {\n try {\n await device.simctl.exec('help', {\n args: ['keychain']\n });\n return true;\n } catch (e) {\n return false;\n }\n});\n\n/**\n * Adds a certificate to the trusted root store.\n * Simulator must be in BOOTED state for this API to work.\n *\n * @param {object} device Simulator instance created by appium-ios-simulator module\n * @param {string} payload Certificate payload\n */\nasync function installCertificate (device, payload) {\n await device.simctl.addRootCertificate(payload, {raw: true});\n}\n\n/**\n * Check whether the given certificate is already installed.\n * The function is using hacky calls to make certificate stuff working for older SDKs.\n * Simulator must be in SHUTDOWN state for this API to work.\n *\n * @param {object} device Simulator instance created by appium-ios-simulator module\n * @param {string} payload Certificate payload\n * @returns {boolean} `true` if the certificate is already present in the root store.\n */\nasync function hasCertificateLegacy (device, payload) {\n return await hasSSLCert(payload, device.udid);\n}\n\n/**\n * Adds a certificate to the trusted root store.\n * The function is using hacky calls to make certificate stuff working for older SDKs.\n * Simulator must be in SHUTDOWN state for this API to work.\n *\n * @param {object} device Simulator instance created by appium-ios-simulator module\n * @param {string} payload Certificate payload\n */\nasync function installCertificateLegacy (device, payload) {\n await installSSLCert(payload, device.udid);\n}\n\n\nexport {\n doesSupportKeychainApi, installCertificate, installCertificateLegacy,\n hasCertificateLegacy\n};\n"],"mappings":";;;;;;;;;;;AAAA;AACA;AAQA,MAAMA,sBAAsB,GAAGC,eAAC,CAACC,OAAO,CAAC,eAAeF,sBAAsB,CAAEG,MAAM,EAAE;EACtF,IAAI;IACF,MAAMA,MAAM,CAACC,MAAM,CAACC,IAAI,CAAC,MAAM,EAAE;MAC/BC,IAAI,EAAE,CAAC,UAAU;IACnB,CAAC,CAAC;IACF,OAAO,IAAI;EACb,CAAC,CAAC,OAAOC,CAAC,EAAE;IACV,OAAO,KAAK;EACd;AACF,CAAC,CAAC;;AAAC;AASH,eAAeC,kBAAkB,CAAEL,MAAM,EAAEM,OAAO,EAAE;EAClD,MAAMN,MAAM,CAACC,MAAM,CAACM,kBAAkB,CAACD,OAAO,EAAE;IAACE,GAAG,EAAE;EAAI,CAAC,CAAC;AAC9D;;AAWA,eAAeC,oBAAoB,CAAET,MAAM,EAAEM,OAAO,EAAE;EACpD,OAAO,MAAM,IAAAI,8BAAU,EAACJ,OAAO,EAAEN,MAAM,CAACW,IAAI,CAAC;AAC/C;;AAUA,eAAeC,wBAAwB,CAAEZ,MAAM,EAAEM,OAAO,EAAE;EACxD,MAAM,IAAAO,kCAAc,EAACP,OAAO,EAAEN,MAAM,CAACW,IAAI,CAAC;AAC5C"}
|
|
@@ -4,18 +4,15 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = exports.commands = void 0;
|
|
7
|
-
|
|
8
7
|
require("source-map-support/register");
|
|
9
|
-
|
|
10
8
|
const extensions = {},
|
|
11
|
-
|
|
12
|
-
exports.commands = commands;
|
|
9
|
+
commands = {};
|
|
13
10
|
|
|
11
|
+
exports.commands = commands;
|
|
14
12
|
commands.mobileGetActiveAppInfo = async function mobileGetActiveAppInfo() {
|
|
15
13
|
return await this.proxyCommand('/wda/activeAppInfo', 'GET');
|
|
16
14
|
};
|
|
17
|
-
|
|
18
15
|
Object.assign(extensions, commands);
|
|
19
16
|
var _default = extensions;
|
|
20
17
|
exports.default = _default;
|
|
21
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
18
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHRlbnNpb25zIiwiY29tbWFuZHMiLCJtb2JpbGVHZXRBY3RpdmVBcHBJbmZvIiwicHJveHlDb21tYW5kIiwiT2JqZWN0IiwiYXNzaWduIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2FjdGl2ZUFwcEluZm8uanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgZXh0ZW5zaW9ucyA9IHt9LCBjb21tYW5kcyA9IHt9O1xuXG4vKipcbiAqIFJldHVybnMgQWN0aXZlQXBwIGluZm8uXG4gKlxuICogQHJldHVybnMge09iamVjdH0gVGhlIHJlc3BvbnNlIG9mIGAvd2RhL2FjdGl2ZUFwcEluZm8nYFxuICogQHRocm93cyB7RXJyb3J9IGlmIGFuIGVycm9yIHJhaXNlZCBieSBjb21tYW5kXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUdldEFjdGl2ZUFwcEluZm8gPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVHZXRBY3RpdmVBcHBJbmZvICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvd2RhL2FjdGl2ZUFwcEluZm8nLCAnR0VUJyk7XG59O1xuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGNvbW1hbmRzKTtcbmV4cG9ydCB7IGNvbW1hbmRzIH07XG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsTUFBTUEsVUFBVSxHQUFHLENBQUMsQ0FBQztFQUFFQyxRQUFRLEdBQUcsQ0FBQyxDQUFDOztBQUFDO0FBUXJDQSxRQUFRLENBQUNDLHNCQUFzQixHQUFHLGVBQWVBLHNCQUFzQixHQUFJO0VBQ3pFLE9BQU8sTUFBTSxJQUFJLENBQUNDLFlBQVksQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLENBQUM7QUFDN0QsQ0FBQztBQUVEQyxNQUFNLENBQUNDLE1BQU0sQ0FBQ0wsVUFBVSxFQUFFQyxRQUFRLENBQUM7QUFBQyxlQUVyQkQsVUFBVTtBQUFBIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activeAppInfo.js","names":["extensions","commands","mobileGetActiveAppInfo","proxyCommand","Object","assign"],"sources":["../../../lib/commands/activeAppInfo.js"],"sourcesContent":["const extensions = {}, commands = {};\n\n/**\n * Returns ActiveApp info.\n *\n * @returns {Object} The response of `/wda/activeAppInfo'`\n * @throws {Error} if an error raised by command\n */\ncommands.mobileGetActiveAppInfo = async function mobileGetActiveAppInfo () {\n return await this.proxyCommand('/wda/activeAppInfo', 'GET');\n};\n\nObject.assign(extensions, commands);\nexport { commands };\nexport default extensions;\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"activeAppInfo.js","names":["extensions","commands","mobileGetActiveAppInfo","proxyCommand","Object","assign"],"sources":["../../../lib/commands/activeAppInfo.js"],"sourcesContent":["const extensions = {}, commands = {};\n\n/**\n * Returns ActiveApp info.\n *\n * @returns {Object} The response of `/wda/activeAppInfo'`\n * @throws {Error} if an error raised by command\n */\ncommands.mobileGetActiveAppInfo = async function mobileGetActiveAppInfo () {\n return await this.proxyCommand('/wda/activeAppInfo', 'GET');\n};\n\nObject.assign(extensions, commands);\nexport { commands };\nexport default extensions;\n"],"mappings":";;;;;;;AAAA,MAAMA,UAAU,GAAG,CAAC,CAAC;EAAEC,QAAQ,GAAG,CAAC,CAAC;;AAAC;AAQrCA,QAAQ,CAACC,sBAAsB,GAAG,eAAeA,sBAAsB,GAAI;EACzE,OAAO,MAAM,IAAI,CAACC,YAAY,CAAC,oBAAoB,EAAE,KAAK,CAAC;AAC7D,CAAC;AAEDC,MAAM,CAACC,MAAM,CAACL,UAAU,EAAEC,QAAQ,CAAC;AAAC,eAErBD,UAAU;AAAA"}
|