appium-remote-debugger 10.0.3 → 10.1.1
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/README.md +0 -2
- package/build/index.js +18 -33
- package/build/lib/atoms.d.ts +17 -0
- package/build/lib/atoms.d.ts.map +1 -0
- package/build/lib/atoms.js +75 -50
- package/build/lib/atoms.js.map +1 -1
- package/build/lib/logger.d.ts +3 -0
- package/build/lib/logger.d.ts.map +1 -0
- package/build/lib/logger.js +5 -11
- package/build/lib/logger.js.map +1 -1
- package/build/lib/mixins/connect.d.ts +125 -0
- package/build/lib/mixins/connect.d.ts.map +1 -0
- package/build/lib/mixins/connect.js +299 -202
- package/build/lib/mixins/connect.js.map +1 -1
- package/build/lib/mixins/events.d.ts +7 -0
- package/build/lib/mixins/events.d.ts.map +1 -0
- package/build/lib/mixins/events.js +7 -12
- package/build/lib/mixins/events.js.map +1 -1
- package/build/lib/mixins/execute.d.ts +38 -0
- package/build/lib/mixins/execute.d.ts.map +1 -0
- package/build/lib/mixins/execute.js +162 -122
- package/build/lib/mixins/execute.js.map +1 -1
- package/build/lib/mixins/index.d.ts +5 -0
- package/build/lib/mixins/index.d.ts.map +1 -0
- package/build/lib/mixins/index.js +14 -23
- package/build/lib/mixins/index.js.map +1 -1
- package/build/lib/mixins/message-handlers.d.ts +92 -0
- package/build/lib/mixins/message-handlers.d.ts.map +1 -0
- package/build/lib/mixins/message-handlers.js +160 -97
- package/build/lib/mixins/message-handlers.js.map +1 -1
- package/build/lib/mixins/navigate.d.ts +92 -0
- package/build/lib/mixins/navigate.d.ts.map +1 -0
- package/build/lib/mixins/navigate.js +199 -141
- package/build/lib/mixins/navigate.js.map +1 -1
- package/build/lib/protocol/index.d.ts +14 -0
- package/build/lib/protocol/index.d.ts.map +1 -0
- package/build/lib/protocol/index.js +192 -118
- package/build/lib/protocol/index.js.map +1 -1
- package/build/lib/remote-debugger-real-device.d.ts +6 -0
- package/build/lib/remote-debugger-real-device.d.ts.map +1 -0
- package/build/lib/remote-debugger-real-device.js +29 -32
- package/build/lib/remote-debugger-real-device.js.map +1 -1
- package/build/lib/remote-debugger.d.ts +119 -0
- package/build/lib/remote-debugger.d.ts.map +1 -0
- package/build/lib/remote-debugger.js +256 -226
- package/build/lib/remote-debugger.js.map +1 -1
- package/build/lib/rpc/index.d.ts +4 -0
- package/build/lib/rpc/index.d.ts.map +1 -0
- package/build/lib/rpc/index.js +10 -21
- package/build/lib/rpc/index.js.map +1 -1
- package/build/lib/rpc/remote-messages.d.ts +51 -0
- package/build/lib/rpc/remote-messages.d.ts.map +1 -0
- package/build/lib/rpc/remote-messages.js +203 -224
- package/build/lib/rpc/remote-messages.js.map +1 -1
- package/build/lib/rpc/rpc-client-real-device.d.ts +6 -0
- package/build/lib/rpc/rpc-client-real-device.d.ts.map +1 -0
- package/build/lib/rpc/rpc-client-real-device.js +43 -49
- package/build/lib/rpc/rpc-client-real-device.js.map +1 -1
- package/build/lib/rpc/rpc-client-simulator.d.ts +15 -0
- package/build/lib/rpc/rpc-client-simulator.d.ts.map +1 -0
- package/build/lib/rpc/rpc-client-simulator.js +138 -125
- package/build/lib/rpc/rpc-client-simulator.js.map +1 -1
- package/build/lib/rpc/rpc-client.d.ts +142 -0
- package/build/lib/rpc/rpc-client.d.ts.map +1 -0
- package/build/lib/rpc/rpc-client.js +559 -418
- package/build/lib/rpc/rpc-client.js.map +1 -1
- package/build/lib/rpc/rpc-message-handler.d.ts +13 -0
- package/build/lib/rpc/rpc-message-handler.d.ts.map +1 -0
- package/build/lib/rpc/rpc-message-handler.js +181 -166
- package/build/lib/rpc/rpc-message-handler.js.map +1 -1
- package/build/lib/utils.d.ts +61 -0
- package/build/lib/utils.d.ts.map +1 -0
- package/build/lib/utils.js +241 -155
- package/build/lib/utils.js.map +1 -1
- package/lib/atoms.js +25 -4
- package/lib/mixins/connect.js +102 -7
- package/lib/mixins/execute.js +46 -13
- package/lib/mixins/message-handlers.js +44 -1
- package/lib/mixins/navigate.js +55 -3
- package/lib/remote-debugger.js +112 -0
- package/lib/rpc/rpc-client-real-device.js +1 -6
- package/lib/rpc/rpc-client-simulator.js +7 -1
- package/lib/rpc/rpc-client.js +106 -6
- package/lib/rpc/rpc-message-handler.js +1 -1
- package/lib/utils.js +31 -1
- package/package.json +25 -15
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
export type DeferredPromise = {
|
|
2
|
+
promise: B<any>;
|
|
3
|
+
resolve: (...args: any[]) => void;
|
|
4
|
+
reject: (err?: Error) => void;
|
|
5
|
+
};
|
|
6
|
+
export type AppInfo = {
|
|
7
|
+
id: string;
|
|
8
|
+
isProxy: boolean;
|
|
9
|
+
name: string;
|
|
10
|
+
bundleId: string;
|
|
11
|
+
hostId: string;
|
|
12
|
+
isActive: boolean;
|
|
13
|
+
isAutomationEnabled: boolean | string;
|
|
14
|
+
pageArray?: any[] | undefined | DeferredPromise;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* @typedef {Object} DeferredPromise
|
|
18
|
+
* @property {B<any>} promise
|
|
19
|
+
* @property {(...args: any[]) => void} resolve
|
|
20
|
+
* @property {(err?: Error) => void} reject
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* @typedef {Object} AppInfo
|
|
24
|
+
* @property {string} id
|
|
25
|
+
* @property {boolean} isProxy
|
|
26
|
+
* @property {string} name
|
|
27
|
+
* @property {string} bundleId
|
|
28
|
+
* @property {string} hostId
|
|
29
|
+
* @property {boolean} isActive
|
|
30
|
+
* @property {boolean|string} isAutomationEnabled
|
|
31
|
+
* @property {any[]|undefined|DeferredPromise} [pageArray]
|
|
32
|
+
*/
|
|
33
|
+
/**
|
|
34
|
+
* Takes a dictionary from the remote debugger and makes a more manageable
|
|
35
|
+
* dictionary whose keys are understandable
|
|
36
|
+
*
|
|
37
|
+
* @param {Record<string, any>} dict
|
|
38
|
+
* @returns {[string, AppInfo]}
|
|
39
|
+
*/
|
|
40
|
+
export function appInfoFromDict(dict: Record<string, any>): [string, AppInfo];
|
|
41
|
+
export function pageArrayFromDict(pageDict: any): any[];
|
|
42
|
+
export function getDebuggerAppKey(bundleId: any, appDict: any): string | undefined;
|
|
43
|
+
export function getPossibleDebuggerAppKeys(bundleIds: any, appDict: any): string[];
|
|
44
|
+
export function checkParams(params: any): void;
|
|
45
|
+
export function simpleStringify(value: any, multiline?: boolean): string;
|
|
46
|
+
/**
|
|
47
|
+
* @returns {DeferredPromise}
|
|
48
|
+
*/
|
|
49
|
+
export function deferredPromise(): DeferredPromise;
|
|
50
|
+
export function convertResult(res: any): any;
|
|
51
|
+
export const RESPONSE_LOG_LENGTH: 100;
|
|
52
|
+
/**
|
|
53
|
+
* Calculates the path to the current module's root folder
|
|
54
|
+
*
|
|
55
|
+
* @returns {string} The full path to module root
|
|
56
|
+
* @throws {Error} If the current module root folder cannot be determined
|
|
57
|
+
*/
|
|
58
|
+
export const getModuleRoot: (() => string) & _.MemoizedFunction;
|
|
59
|
+
import B from 'bluebird';
|
|
60
|
+
import _ from 'lodash';
|
|
61
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../lib/utils.js"],"names":[],"mappings":";aA2Bc,EAAE,GAAG,CAAC;uBACI,GAAG,EAAE,KAAK,IAAI;mBACjB,KAAK,KAAK,IAAI;;;QAKrB,MAAM;aACN,OAAO;UACP,MAAM;cACN,MAAM;YACN,MAAM;cACN,OAAO;yBACP,OAAO,GAAC,MAAM;gBACd,GAAG,EAAE,GAAC,SAAS,GAAC,eAAe;;AAhB7C;;;;;GAKG;AAEH;;;;;;;;;;GAUG;AAEH;;;;;;GAMG;AACH,sCAHW,OAAO,MAAM,EAAE,GAAG,CAAC,GACjB,CAAC,MAAM,EAAE,OAAO,CAAC,CAgC7B;AAMD,wDAkBC;AAMD,mFA2BC;AAmBD,mFA+BC;AAED,+CAQC;AAED,yEAYC;AAED;;GAEG;AACH,mCAFa,eAAe,CAmB3B;AAED,6CA8BC;AAnPD,sCAAgC;AAqPhC;;;;;GAKG;AACH,gEAMG;cAtRW,UAAU;cADV,QAAQ"}
|
package/build/lib/utils.js
CHANGED
|
@@ -1,25 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
exports.getDebuggerAppKey = getDebuggerAppKey;
|
|
13
|
-
exports.getModuleRoot = void 0;
|
|
14
|
-
exports.getPossibleDebuggerAppKeys = getPossibleDebuggerAppKeys;
|
|
15
|
-
exports.pageArrayFromDict = pageArrayFromDict;
|
|
16
|
-
exports.simpleStringify = simpleStringify;
|
|
17
|
-
require("source-map-support/register");
|
|
18
|
-
var _logger = _interopRequireDefault(require("./logger"));
|
|
19
|
-
var _lodash = _interopRequireDefault(require("lodash"));
|
|
20
|
-
var _bluebird = _interopRequireDefault(require("bluebird"));
|
|
21
|
-
var _baseDriver = require("@appium/base-driver");
|
|
22
|
-
var _support = require("@appium/support");
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getModuleRoot = exports.RESPONSE_LOG_LENGTH = exports.convertResult = exports.deferredPromise = exports.simpleStringify = exports.checkParams = exports.getPossibleDebuggerAppKeys = exports.getDebuggerAppKey = exports.pageArrayFromDict = exports.appInfoFromDict = void 0;
|
|
7
|
+
const logger_1 = __importDefault(require("./logger"));
|
|
8
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
9
|
+
const bluebird_1 = __importDefault(require("bluebird"));
|
|
10
|
+
const base_driver_1 = require("@appium/base-driver");
|
|
11
|
+
const support_1 = require("@appium/support");
|
|
23
12
|
const MODULE_NAME = 'appium-remote-debugger';
|
|
24
13
|
const WEB_CONTENT_BUNDLE_ID = 'com.apple.WebKit.WebContent';
|
|
25
14
|
const WEB_CONTENT_PROCESS_BUNDLE_ID = 'process-com.apple.WebKit.WebContent';
|
|
@@ -27,162 +16,259 @@ const SAFARI_VIEW_PROCESS_BUNDLE_ID = 'process-SafariViewService';
|
|
|
27
16
|
const SAFARI_VIEW_BUNDLE_ID = 'com.apple.SafariViewService';
|
|
28
17
|
const WILDCARD_BUNDLE_ID = '*';
|
|
29
18
|
const INACTIVE_APP_CODE = 0;
|
|
30
|
-
|
|
19
|
+
// values for the page `WIRTypeKey` entry
|
|
20
|
+
const ACCEPTED_PAGE_TYPES = [
|
|
21
|
+
'WIRTypeWeb',
|
|
22
|
+
'WIRTypeWebPage',
|
|
23
|
+
'WIRTypePage', // iOS 11.4 webview
|
|
24
|
+
];
|
|
31
25
|
const RESPONSE_LOG_LENGTH = 100;
|
|
32
26
|
exports.RESPONSE_LOG_LENGTH = RESPONSE_LOG_LENGTH;
|
|
27
|
+
/**
|
|
28
|
+
* @typedef {Object} DeferredPromise
|
|
29
|
+
* @property {B<any>} promise
|
|
30
|
+
* @property {(...args: any[]) => void} resolve
|
|
31
|
+
* @property {(err?: Error) => void} reject
|
|
32
|
+
*/
|
|
33
|
+
/**
|
|
34
|
+
* @typedef {Object} AppInfo
|
|
35
|
+
* @property {string} id
|
|
36
|
+
* @property {boolean} isProxy
|
|
37
|
+
* @property {string} name
|
|
38
|
+
* @property {string} bundleId
|
|
39
|
+
* @property {string} hostId
|
|
40
|
+
* @property {boolean} isActive
|
|
41
|
+
* @property {boolean|string} isAutomationEnabled
|
|
42
|
+
* @property {any[]|undefined|DeferredPromise} [pageArray]
|
|
43
|
+
*/
|
|
44
|
+
/**
|
|
45
|
+
* Takes a dictionary from the remote debugger and makes a more manageable
|
|
46
|
+
* dictionary whose keys are understandable
|
|
47
|
+
*
|
|
48
|
+
* @param {Record<string, any>} dict
|
|
49
|
+
* @returns {[string, AppInfo]}
|
|
50
|
+
*/
|
|
33
51
|
function appInfoFromDict(dict) {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
52
|
+
const id = dict.WIRApplicationIdentifierKey;
|
|
53
|
+
const isProxy = lodash_1.default.isString(dict.WIRIsApplicationProxyKey)
|
|
54
|
+
? dict.WIRIsApplicationProxyKey.toLowerCase() === 'true'
|
|
55
|
+
: dict.WIRIsApplicationProxyKey;
|
|
56
|
+
// automation enabled can be either from the keys
|
|
57
|
+
// - WIRRemoteAutomationEnabledKey (boolean)
|
|
58
|
+
// - WIRAutomationAvailabilityKey (string or boolean)
|
|
59
|
+
/** @type {boolean|string} */
|
|
60
|
+
let isAutomationEnabled = !!dict.WIRRemoteAutomationEnabledKey;
|
|
61
|
+
if (lodash_1.default.has(dict, 'WIRAutomationAvailabilityKey')) {
|
|
62
|
+
if (lodash_1.default.isString(dict.WIRAutomationAvailabilityKey)) {
|
|
63
|
+
isAutomationEnabled = dict.WIRAutomationAvailabilityKey === 'WIRAutomationAvailabilityUnknown'
|
|
64
|
+
? 'Unknown'
|
|
65
|
+
: dict.WIRAutomationAvailabilityKey === 'WIRAutomationAvailabilityAvailable';
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
isAutomationEnabled = !!dict.WIRAutomationAvailabilityKey;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
const entry = {
|
|
72
|
+
id,
|
|
73
|
+
isProxy,
|
|
74
|
+
name: dict.WIRApplicationNameKey,
|
|
75
|
+
bundleId: dict.WIRApplicationBundleIdentifierKey,
|
|
76
|
+
hostId: dict.WIRHostApplicationIdentifierKey,
|
|
77
|
+
isActive: dict.WIRIsApplicationActiveKey !== INACTIVE_APP_CODE,
|
|
78
|
+
isAutomationEnabled,
|
|
79
|
+
};
|
|
80
|
+
return [id, entry];
|
|
54
81
|
}
|
|
82
|
+
exports.appInfoFromDict = appInfoFromDict;
|
|
83
|
+
/*
|
|
84
|
+
* Take a dictionary from the remote debugger and makes a more manageable
|
|
85
|
+
* dictionary of pages available.
|
|
86
|
+
*/
|
|
55
87
|
function pageArrayFromDict(pageDict) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
88
|
+
if (pageDict.id) {
|
|
89
|
+
// the page is already translated, so wrap in an array and pass back
|
|
90
|
+
return [pageDict];
|
|
91
|
+
}
|
|
92
|
+
let newPageArray = [];
|
|
93
|
+
for (const dict of lodash_1.default.values(pageDict)) {
|
|
94
|
+
// count only WIRTypeWeb pages and ignore all others (WIRTypeJavaScript etc)
|
|
95
|
+
if (lodash_1.default.isUndefined(dict.WIRTypeKey) || ACCEPTED_PAGE_TYPES.includes(dict.WIRTypeKey)) {
|
|
96
|
+
newPageArray.push({
|
|
97
|
+
id: dict.WIRPageIdentifierKey,
|
|
98
|
+
title: dict.WIRTitleKey,
|
|
99
|
+
url: dict.WIRURLKey,
|
|
100
|
+
isKey: !lodash_1.default.isUndefined(dict.WIRConnectionIdentifierKey),
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return newPageArray;
|
|
71
105
|
}
|
|
106
|
+
exports.pageArrayFromDict = pageArrayFromDict;
|
|
107
|
+
/*
|
|
108
|
+
* Given a bundle id, finds the correct remote debugger app that is
|
|
109
|
+
* connected.
|
|
110
|
+
*/
|
|
72
111
|
function getDebuggerAppKey(bundleId, appDict) {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
112
|
+
let appId;
|
|
113
|
+
for (const [key, data] of lodash_1.default.toPairs(appDict)) {
|
|
114
|
+
if (data.bundleId === bundleId) {
|
|
115
|
+
appId = key;
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// now we need to determine if we should pick a proxy for this instead
|
|
120
|
+
if (appId) {
|
|
121
|
+
logger_1.default.debug(`Found app id key '${appId}' for bundle '${bundleId}'`);
|
|
122
|
+
let proxyAppId;
|
|
123
|
+
for (const [key, data] of lodash_1.default.toPairs(appDict)) {
|
|
124
|
+
if (data.isProxy && data.hostId === appId) {
|
|
125
|
+
logger_1.default.debug(`Found separate bundleId '${data.bundleId}' ` +
|
|
126
|
+
`acting as proxy for '${bundleId}', with app id '${key}'`);
|
|
127
|
+
// set the app id... the last one will be used, so just keep re-assigning
|
|
128
|
+
proxyAppId = key;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
if (proxyAppId) {
|
|
132
|
+
appId = proxyAppId;
|
|
133
|
+
logger_1.default.debug(`Using proxied app id '${appId}'`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return appId;
|
|
95
137
|
}
|
|
138
|
+
exports.getDebuggerAppKey = getDebuggerAppKey;
|
|
96
139
|
function appIdForBundle(bundleId, appDict) {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
140
|
+
let appId;
|
|
141
|
+
for (const [key, data] of lodash_1.default.toPairs(appDict)) {
|
|
142
|
+
if (data.bundleId.endsWith(bundleId)) {
|
|
143
|
+
appId = key;
|
|
144
|
+
break;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
// if nothing is found, try to get the generic app
|
|
148
|
+
if (!appId && bundleId !== WEB_CONTENT_BUNDLE_ID) {
|
|
149
|
+
return appIdForBundle(WEB_CONTENT_BUNDLE_ID, appDict);
|
|
150
|
+
}
|
|
151
|
+
return appId;
|
|
108
152
|
}
|
|
109
153
|
function getPossibleDebuggerAppKeys(bundleIds, appDict) {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
154
|
+
let proxiedAppIds = [];
|
|
155
|
+
// go through the possible bundle identifiers
|
|
156
|
+
const possibleBundleIds = lodash_1.default.uniq([
|
|
157
|
+
WEB_CONTENT_BUNDLE_ID,
|
|
158
|
+
WEB_CONTENT_PROCESS_BUNDLE_ID,
|
|
159
|
+
SAFARI_VIEW_PROCESS_BUNDLE_ID,
|
|
160
|
+
SAFARI_VIEW_BUNDLE_ID,
|
|
161
|
+
WILDCARD_BUNDLE_ID,
|
|
162
|
+
...bundleIds,
|
|
163
|
+
]);
|
|
164
|
+
logger_1.default.debug(`Checking for bundle identifiers: ${possibleBundleIds.join(', ')}`);
|
|
165
|
+
for (const bundleId of possibleBundleIds) {
|
|
166
|
+
const appId = appIdForBundle(bundleId, appDict);
|
|
167
|
+
// now we need to determine if we should pick a proxy for this instead
|
|
168
|
+
if (appId) {
|
|
169
|
+
proxiedAppIds.push(appId);
|
|
170
|
+
logger_1.default.debug(`Found app id key '${appId}' for bundle '${bundleId}'`);
|
|
171
|
+
for (const [key, data] of lodash_1.default.toPairs(appDict)) {
|
|
172
|
+
if (data.isProxy && data.hostId === appId) {
|
|
173
|
+
logger_1.default.debug(`Found separate bundleId '${data.bundleId}' ` +
|
|
174
|
+
`acting as proxy for '${bundleId}', with app id '${key}'`);
|
|
175
|
+
proxiedAppIds.push(key);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
122
178
|
}
|
|
123
|
-
}
|
|
124
179
|
}
|
|
125
|
-
|
|
126
|
-
return _lodash.default.uniq(proxiedAppIds);
|
|
180
|
+
return lodash_1.default.uniq(proxiedAppIds);
|
|
127
181
|
}
|
|
182
|
+
exports.getPossibleDebuggerAppKeys = getPossibleDebuggerAppKeys;
|
|
128
183
|
function checkParams(params) {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
184
|
+
// check if all parameters have a value
|
|
185
|
+
const errors = lodash_1.default.toPairs(params)
|
|
186
|
+
.filter(([, value]) => lodash_1.default.isNil(value))
|
|
187
|
+
.map(([param]) => param);
|
|
188
|
+
if (errors.length) {
|
|
189
|
+
throw new Error(`Missing ${support_1.util.pluralize('parameter', errors.length)}: ${errors.join(', ')}`);
|
|
190
|
+
}
|
|
133
191
|
}
|
|
192
|
+
exports.checkParams = checkParams;
|
|
134
193
|
function simpleStringify(value, multiline = false) {
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
194
|
+
if (!value) {
|
|
195
|
+
return JSON.stringify(value);
|
|
196
|
+
}
|
|
197
|
+
// we get back objects sometimes with string versions of functions
|
|
198
|
+
// which muddy the logs
|
|
199
|
+
let cleanValue = lodash_1.default.clone(value);
|
|
200
|
+
for (const property of ['ceil', 'clone', 'floor', 'round', 'scale', 'toString']) {
|
|
201
|
+
delete cleanValue[property];
|
|
202
|
+
}
|
|
203
|
+
return multiline ? JSON.stringify(cleanValue, null, 2) : JSON.stringify(cleanValue);
|
|
143
204
|
}
|
|
205
|
+
exports.simpleStringify = simpleStringify;
|
|
206
|
+
/**
|
|
207
|
+
* @returns {DeferredPromise}
|
|
208
|
+
*/
|
|
144
209
|
function deferredPromise() {
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
reject
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
210
|
+
// http://bluebirdjs.com/docs/api/deferred-migration.html
|
|
211
|
+
/** @type {(...args: any[]) => void} */
|
|
212
|
+
let resolve;
|
|
213
|
+
/** @type {(err?: Error) => void} */
|
|
214
|
+
let reject;
|
|
215
|
+
const promise = new bluebird_1.default((res, rej) => {
|
|
216
|
+
resolve = res;
|
|
217
|
+
reject = rej;
|
|
218
|
+
});
|
|
219
|
+
return {
|
|
220
|
+
promise,
|
|
221
|
+
// @ts-ignore It will be assigned eventually
|
|
222
|
+
resolve,
|
|
223
|
+
// @ts-ignore It will be assigned eventually
|
|
224
|
+
reject
|
|
225
|
+
};
|
|
156
226
|
}
|
|
227
|
+
exports.deferredPromise = deferredPromise;
|
|
157
228
|
function convertResult(res) {
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
const value = _lodash.default.has(res, 'value') ? res.value : res;
|
|
173
|
-
if (_lodash.default.isObject(value)) {
|
|
174
|
-
for (const property of ['ceil', 'clone', 'floor', 'round', 'scale', 'toString']) {
|
|
175
|
-
delete value[property];
|
|
229
|
+
if (lodash_1.default.isUndefined(res)) {
|
|
230
|
+
throw new Error(`Did not get OK result from remote debugger. Result was: ${lodash_1.default.truncate(simpleStringify(res), { length: RESPONSE_LOG_LENGTH })}`);
|
|
231
|
+
}
|
|
232
|
+
else if (lodash_1.default.isString(res)) {
|
|
233
|
+
try {
|
|
234
|
+
res = JSON.parse(res);
|
|
235
|
+
}
|
|
236
|
+
catch (err) {
|
|
237
|
+
// we might get a serialized object, but we might not
|
|
238
|
+
// if we get here, it is just a value
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
else if (!lodash_1.default.isObject(res)) {
|
|
242
|
+
throw new Error(`Result has unexpected type: (${typeof res}).`);
|
|
176
243
|
}
|
|
177
|
-
|
|
178
|
-
|
|
244
|
+
if (res.status && res.status !== 0) {
|
|
245
|
+
// we got some form of error.
|
|
246
|
+
throw (0, base_driver_1.errorFromMJSONWPStatusCode)(res.status, res.value.message || res.value);
|
|
247
|
+
}
|
|
248
|
+
// with either have an object with a `value` property (even if `null`),
|
|
249
|
+
// or a plain object
|
|
250
|
+
const value = lodash_1.default.has(res, 'value') ? res.value : res;
|
|
251
|
+
// get rid of noisy functions on objects
|
|
252
|
+
if (lodash_1.default.isObject(value)) {
|
|
253
|
+
for (const property of ['ceil', 'clone', 'floor', 'round', 'scale', 'toString']) {
|
|
254
|
+
delete value[property];
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
return value;
|
|
179
258
|
}
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
259
|
+
exports.convertResult = convertResult;
|
|
260
|
+
/**
|
|
261
|
+
* Calculates the path to the current module's root folder
|
|
262
|
+
*
|
|
263
|
+
* @returns {string} The full path to module root
|
|
264
|
+
* @throws {Error} If the current module root folder cannot be determined
|
|
265
|
+
*/
|
|
266
|
+
const getModuleRoot = lodash_1.default.memoize(function getModuleRoot() {
|
|
267
|
+
const root = support_1.node.getModuleRootSync(MODULE_NAME, __filename);
|
|
268
|
+
if (!root) {
|
|
269
|
+
throw new Error(`Cannot find the root folder of the ${MODULE_NAME} Node.js module`);
|
|
270
|
+
}
|
|
271
|
+
return root;
|
|
186
272
|
});
|
|
187
273
|
exports.getModuleRoot = getModuleRoot;
|
|
188
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9nZ2VyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfbG9kYXNoIiwiX2JsdWViaXJkIiwiX2Jhc2VEcml2ZXIiLCJfc3VwcG9ydCIsIk1PRFVMRV9OQU1FIiwiV0VCX0NPTlRFTlRfQlVORExFX0lEIiwiV0VCX0NPTlRFTlRfUFJPQ0VTU19CVU5ETEVfSUQiLCJTQUZBUklfVklFV19QUk9DRVNTX0JVTkRMRV9JRCIsIlNBRkFSSV9WSUVXX0JVTkRMRV9JRCIsIldJTERDQVJEX0JVTkRMRV9JRCIsIklOQUNUSVZFX0FQUF9DT0RFIiwiQUNDRVBURURfUEFHRV9UWVBFUyIsIlJFU1BPTlNFX0xPR19MRU5HVEgiLCJleHBvcnRzIiwiYXBwSW5mb0Zyb21EaWN0IiwiZGljdCIsImlkIiwiV0lSQXBwbGljYXRpb25JZGVudGlmaWVyS2V5IiwiaXNQcm94eSIsIl8iLCJpc1N0cmluZyIsIldJUklzQXBwbGljYXRpb25Qcm94eUtleSIsInRvTG93ZXJDYXNlIiwiaXNBdXRvbWF0aW9uRW5hYmxlZCIsIldJUlJlbW90ZUF1dG9tYXRpb25FbmFibGVkS2V5IiwiaGFzIiwiV0lSQXV0b21hdGlvbkF2YWlsYWJpbGl0eUtleSIsImVudHJ5IiwibmFtZSIsIldJUkFwcGxpY2F0aW9uTmFtZUtleSIsImJ1bmRsZUlkIiwiV0lSQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyS2V5IiwiaG9zdElkIiwiV0lSSG9zdEFwcGxpY2F0aW9uSWRlbnRpZmllcktleSIsImlzQWN0aXZlIiwiV0lSSXNBcHBsaWNhdGlvbkFjdGl2ZUtleSIsInBhZ2VBcnJheUZyb21EaWN0IiwicGFnZURpY3QiLCJuZXdQYWdlQXJyYXkiLCJ2YWx1ZXMiLCJpc1VuZGVmaW5lZCIsIldJUlR5cGVLZXkiLCJpbmNsdWRlcyIsInB1c2giLCJXSVJQYWdlSWRlbnRpZmllcktleSIsInRpdGxlIiwiV0lSVGl0bGVLZXkiLCJ1cmwiLCJXSVJVUkxLZXkiLCJpc0tleSIsIldJUkNvbm5lY3Rpb25JZGVudGlmaWVyS2V5IiwiZ2V0RGVidWdnZXJBcHBLZXkiLCJhcHBEaWN0IiwiYXBwSWQiLCJrZXkiLCJkYXRhIiwidG9QYWlycyIsImxvZyIsImRlYnVnIiwicHJveHlBcHBJZCIsImFwcElkRm9yQnVuZGxlIiwiZW5kc1dpdGgiLCJnZXRQb3NzaWJsZURlYnVnZ2VyQXBwS2V5cyIsImJ1bmRsZUlkcyIsInByb3hpZWRBcHBJZHMiLCJwb3NzaWJsZUJ1bmRsZUlkcyIsInVuaXEiLCJqb2luIiwiY2hlY2tQYXJhbXMiLCJwYXJhbXMiLCJlcnJvcnMiLCJmaWx0ZXIiLCJ2YWx1ZSIsImlzTmlsIiwibWFwIiwicGFyYW0iLCJsZW5ndGgiLCJFcnJvciIsInV0aWwiLCJwbHVyYWxpemUiLCJzaW1wbGVTdHJpbmdpZnkiLCJtdWx0aWxpbmUiLCJKU09OIiwic3RyaW5naWZ5IiwiY2xlYW5WYWx1ZSIsImNsb25lIiwicHJvcGVydHkiLCJkZWZlcnJlZFByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwicHJvbWlzZSIsIkIiLCJyZXMiLCJyZWoiLCJjb252ZXJ0UmVzdWx0IiwidHJ1bmNhdGUiLCJwYXJzZSIsImVyciIsImlzT2JqZWN0Iiwic3RhdHVzIiwiZXJyb3JGcm9tTUpTT05XUFN0YXR1c0NvZGUiLCJtZXNzYWdlIiwiZ2V0TW9kdWxlUm9vdCIsIm1lbW9pemUiLCJyb290Iiwibm9kZSIsImdldE1vZHVsZVJvb3RTeW5jIiwiX19maWxlbmFtZSJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi91dGlscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgeyBlcnJvckZyb21NSlNPTldQU3RhdHVzQ29kZSB9IGZyb20gJ0BhcHBpdW0vYmFzZS1kcml2ZXInO1xuaW1wb3J0IHsgdXRpbCwgbm9kZSB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5cbmNvbnN0IE1PRFVMRV9OQU1FID0gJ2FwcGl1bS1yZW1vdGUtZGVidWdnZXInO1xuXG5jb25zdCBXRUJfQ09OVEVOVF9CVU5ETEVfSUQgPSAnY29tLmFwcGxlLldlYktpdC5XZWJDb250ZW50JztcbmNvbnN0IFdFQl9DT05URU5UX1BST0NFU1NfQlVORExFX0lEID0gJ3Byb2Nlc3MtY29tLmFwcGxlLldlYktpdC5XZWJDb250ZW50JztcbmNvbnN0IFNBRkFSSV9WSUVXX1BST0NFU1NfQlVORExFX0lEID0gJ3Byb2Nlc3MtU2FmYXJpVmlld1NlcnZpY2UnO1xuY29uc3QgU0FGQVJJX1ZJRVdfQlVORExFX0lEID0gJ2NvbS5hcHBsZS5TYWZhcmlWaWV3U2VydmljZSc7XG5jb25zdCBXSUxEQ0FSRF9CVU5ETEVfSUQgPSAnKic7XG5cbmNvbnN0IElOQUNUSVZFX0FQUF9DT0RFID0gMDtcblxuLy8gdmFsdWVzIGZvciB0aGUgcGFnZSBgV0lSVHlwZUtleWAgZW50cnlcbmNvbnN0IEFDQ0VQVEVEX1BBR0VfVFlQRVMgPSBbXG4gICdXSVJUeXBlV2ViJywgLy8gdXAgdG8gaU9TIDExLjNcbiAgJ1dJUlR5cGVXZWJQYWdlJywgLy8gaU9TIDExLjRcbiAgJ1dJUlR5cGVQYWdlJywgLy8gaU9TIDExLjQgd2Vidmlld1xuXTtcblxuY29uc3QgUkVTUE9OU0VfTE9HX0xFTkdUSCA9IDEwMDtcblxuLypcbiAqIFRha2VzIGEgZGljdGlvbmFyeSBmcm9tIHRoZSByZW1vdGUgZGVidWdnZXIgYW5kIG1ha2VzIGEgbW9yZSBtYW5hZ2VhYmxlXG4gKiBkaWN0aW9uYXJ5IHdob3NlIGtleXMgYXJlIHVuZGVyc3RhbmRhYmxlXG4gKi9cbmZ1bmN0aW9uIGFwcEluZm9Gcm9tRGljdCAoZGljdCkge1xuICBjb25zdCBpZCA9IGRpY3QuV0lSQXBwbGljYXRpb25JZGVudGlmaWVyS2V5O1xuICBjb25zdCBpc1Byb3h5ID0gXy5pc1N0cmluZyhkaWN0LldJUklzQXBwbGljYXRpb25Qcm94eUtleSlcbiAgICA/IGRpY3QuV0lSSXNBcHBsaWNhdGlvblByb3h5S2V5LnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJ1xuICAgIDogZGljdC5XSVJJc0FwcGxpY2F0aW9uUHJveHlLZXk7XG4gIC8vIGF1dG9tYXRpb24gZW5hYmxlZCBjYW4gYmUgZWl0aGVyIGZyb20gdGhlIGtleXNcbiAgLy8gICAtIFdJUlJlbW90ZUF1dG9tYXRpb25FbmFibGVkS2V5IChib29sZWFuKVxuICAvLyAgIC0gV0lSQXV0b21hdGlvbkF2YWlsYWJpbGl0eUtleSAoc3RyaW5nIG9yIGJvb2xlYW4pXG4gIGxldCBpc0F1dG9tYXRpb25FbmFibGVkID0gISFkaWN0LldJUlJlbW90ZUF1dG9tYXRpb25FbmFibGVkS2V5O1xuICBpZiAoXy5oYXMoZGljdCwgJ1dJUkF1dG9tYXRpb25BdmFpbGFiaWxpdHlLZXknKSkge1xuICAgIGlmIChfLmlzU3RyaW5nKGRpY3QuV0lSQXV0b21hdGlvbkF2YWlsYWJpbGl0eUtleSkpIHtcbiAgICAgIGlzQXV0b21hdGlvbkVuYWJsZWQgPSBkaWN0LldJUkF1dG9tYXRpb25BdmFpbGFiaWxpdHlLZXkgPT09ICdXSVJBdXRvbWF0aW9uQXZhaWxhYmlsaXR5VW5rbm93bidcbiAgICAgICAgPyAnVW5rbm93bidcbiAgICAgICAgOiBkaWN0LldJUkF1dG9tYXRpb25BdmFpbGFiaWxpdHlLZXkgPT09ICdXSVJBdXRvbWF0aW9uQXZhaWxhYmlsaXR5QXZhaWxhYmxlJztcbiAgICB9IGVsc2Uge1xuICAgICAgaXNBdXRvbWF0aW9uRW5hYmxlZCA9ICEhZGljdC5XSVJBdXRvbWF0aW9uQXZhaWxhYmlsaXR5S2V5O1xuICAgIH1cbiAgfVxuICBjb25zdCBlbnRyeSA9IHtcbiAgICBpZCxcbiAgICBpc1Byb3h5LFxuICAgIG5hbWU6IGRpY3QuV0lSQXBwbGljYXRpb25OYW1lS2V5LFxuICAgIGJ1bmRsZUlkOiBkaWN0LldJUkFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcktleSxcbiAgICBob3N0SWQ6IGRpY3QuV0lSSG9zdEFwcGxpY2F0aW9uSWRlbnRpZmllcktleSxcbiAgICBpc0FjdGl2ZTogZGljdC5XSVJJc0FwcGxpY2F0aW9uQWN0aXZlS2V5ICE9PSBJTkFDVElWRV9BUFBfQ09ERSxcbiAgICBpc0F1dG9tYXRpb25FbmFibGVkLFxuICB9O1xuXG4gIHJldHVybiBbaWQsIGVudHJ5XTtcbn1cblxuLypcbiAqIFRha2UgYSBkaWN0aW9uYXJ5IGZyb20gdGhlIHJlbW90ZSBkZWJ1Z2dlciBhbmQgbWFrZXMgYSBtb3JlIG1hbmFnZWFibGVcbiAqIGRpY3Rpb25hcnkgb2YgcGFnZXMgYXZhaWxhYmxlLlxuICovXG5mdW5jdGlvbiBwYWdlQXJyYXlGcm9tRGljdCAocGFnZURpY3QpIHtcbiAgaWYgKHBhZ2VEaWN0LmlkKSB7XG4gICAgLy8gdGhlIHBhZ2UgaXMgYWxyZWFkeSB0cmFuc2xhdGVkLCBzbyB3cmFwIGluIGFuIGFycmF5IGFuZCBwYXNzIGJhY2tcbiAgICByZXR1cm4gW3BhZ2VEaWN0XTtcbiAgfVxuICBsZXQgbmV3UGFnZUFycmF5ID0gW107XG4gIGZvciAoY29uc3QgZGljdCBvZiBfLnZhbHVlcyhwYWdlRGljdCkpIHtcbiAgICAvLyBjb3VudCBvbmx5IFdJUlR5cGVXZWIgcGFnZXMgYW5kIGlnbm9yZSBhbGwgb3RoZXJzIChXSVJUeXBlSmF2YVNjcmlwdCBldGMpXG4gICAgaWYgKF8uaXNVbmRlZmluZWQoZGljdC5XSVJUeXBlS2V5KSB8fCBBQ0NFUFRFRF9QQUdFX1RZUEVTLmluY2x1ZGVzKGRpY3QuV0lSVHlwZUtleSkpIHtcbiAgICAgIG5ld1BhZ2VBcnJheS5wdXNoKHtcbiAgICAgICAgaWQ6IGRpY3QuV0lSUGFnZUlkZW50aWZpZXJLZXksXG4gICAgICAgIHRpdGxlOiBkaWN0LldJUlRpdGxlS2V5LFxuICAgICAgICB1cmw6IGRpY3QuV0lSVVJMS2V5LFxuICAgICAgICBpc0tleTogIV8uaXNVbmRlZmluZWQoZGljdC5XSVJDb25uZWN0aW9uSWRlbnRpZmllcktleSksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ld1BhZ2VBcnJheTtcbn1cblxuLypcbiAqIEdpdmVuIGEgYnVuZGxlIGlkLCBmaW5kcyB0aGUgY29ycmVjdCByZW1vdGUgZGVidWdnZXIgYXBwIHRoYXQgaXNcbiAqIGNvbm5lY3RlZC5cbiAqL1xuZnVuY3Rpb24gZ2V0RGVidWdnZXJBcHBLZXkgKGJ1bmRsZUlkLCBhcHBEaWN0KSB7XG4gIGxldCBhcHBJZDtcbiAgZm9yIChjb25zdCBba2V5LCBkYXRhXSBvZiBfLnRvUGFpcnMoYXBwRGljdCkpIHtcbiAgICBpZiAoZGF0YS5idW5kbGVJZCA9PT0gYnVuZGxlSWQpIHtcbiAgICAgIGFwcElkID0ga2V5O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIC8vIG5vdyB3ZSBuZWVkIHRvIGRldGVybWluZSBpZiB3ZSBzaG91bGQgcGljayBhIHByb3h5IGZvciB0aGlzIGluc3RlYWRcbiAgaWYgKGFwcElkKSB7XG4gICAgbG9nLmRlYnVnKGBGb3VuZCBhcHAgaWQga2V5ICcke2FwcElkfScgZm9yIGJ1bmRsZSAnJHtidW5kbGVJZH0nYCk7XG4gICAgbGV0IHByb3h5QXBwSWQ7XG4gICAgZm9yIChjb25zdCBba2V5LCBkYXRhXSBvZiBfLnRvUGFpcnMoYXBwRGljdCkpIHtcbiAgICAgIGlmIChkYXRhLmlzUHJveHkgJiYgZGF0YS5ob3N0SWQgPT09IGFwcElkKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgRm91bmQgc2VwYXJhdGUgYnVuZGxlSWQgJyR7ZGF0YS5idW5kbGVJZH0nIGAgK1xuICAgICAgICAgICAgICAgICAgYGFjdGluZyBhcyBwcm94eSBmb3IgJyR7YnVuZGxlSWR9Jywgd2l0aCBhcHAgaWQgJyR7a2V5fSdgKTtcbiAgICAgICAgLy8gc2V0IHRoZSBhcHAgaWQuLi4gdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZCwgc28ganVzdCBrZWVwIHJlLWFzc2lnbmluZ1xuICAgICAgICBwcm94eUFwcElkID0ga2V5O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJveHlBcHBJZCkge1xuICAgICAgYXBwSWQgPSBwcm94eUFwcElkO1xuICAgICAgbG9nLmRlYnVnKGBVc2luZyBwcm94aWVkIGFwcCBpZCAnJHthcHBJZH0nYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFwcElkO1xufVxuXG5mdW5jdGlvbiBhcHBJZEZvckJ1bmRsZSAoYnVuZGxlSWQsIGFwcERpY3QpIHtcbiAgbGV0IGFwcElkO1xuICBmb3IgKGNvbnN0IFtrZXksIGRhdGFdIG9mIF8udG9QYWlycyhhcHBEaWN0KSkge1xuICAgIGlmIChkYXRhLmJ1bmRsZUlkLmVuZHNXaXRoKGJ1bmRsZUlkKSkge1xuICAgICAgYXBwSWQgPSBrZXk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvLyBpZiBub3RoaW5nIGlzIGZvdW5kLCB0cnkgdG8gZ2V0IHRoZSBnZW5lcmljIGFwcFxuICBpZiAoIWFwcElkICYmIGJ1bmRsZUlkICE9PSBXRUJfQ09OVEVOVF9CVU5ETEVfSUQpIHtcbiAgICByZXR1cm4gYXBwSWRGb3JCdW5kbGUoV0VCX0NPTlRFTlRfQlVORExFX0lELCBhcHBEaWN0KTtcbiAgfVxuXG4gIHJldHVybiBhcHBJZDtcbn1cblxuZnVuY3Rpb24gZ2V0UG9zc2libGVEZWJ1Z2dlckFwcEtleXMgKGJ1bmRsZUlkcywgYXBwRGljdCkge1xuICBsZXQgcHJveGllZEFwcElkcyA9IFtdO1xuXG4gIC8vIGdvIHRocm91Z2ggdGhlIHBvc3NpYmxlIGJ1bmRsZSBpZGVudGlmaWVyc1xuICBjb25zdCBwb3NzaWJsZUJ1bmRsZUlkcyA9IF8udW5pcShbXG4gICAgV0VCX0NPTlRFTlRfQlVORExFX0lELFxuICAgIFdFQl9DT05URU5UX1BST0NFU1NfQlVORExFX0lELFxuICAgIFNBRkFSSV9WSUVXX1BST0NFU1NfQlVORExFX0lELFxuICAgIFNBRkFSSV9WSUVXX0JVTkRMRV9JRCxcbiAgICBXSUxEQ0FSRF9CVU5ETEVfSUQsXG4gICAgLi4uYnVuZGxlSWRzLFxuICBdKTtcbiAgbG9nLmRlYnVnKGBDaGVja2luZyBmb3IgYnVuZGxlIGlkZW50aWZpZXJzOiAke3Bvc3NpYmxlQnVuZGxlSWRzLmpvaW4oJywgJyl9YCk7XG4gIGZvciAoY29uc3QgYnVuZGxlSWQgb2YgcG9zc2libGVCdW5kbGVJZHMpIHtcbiAgICBjb25zdCBhcHBJZCA9IGFwcElkRm9yQnVuZGxlKGJ1bmRsZUlkLCBhcHBEaWN0KTtcblxuICAgIC8vIG5vdyB3ZSBuZWVkIHRvIGRldGVybWluZSBpZiB3ZSBzaG91bGQgcGljayBhIHByb3h5IGZvciB0aGlzIGluc3RlYWRcbiAgICBpZiAoYXBwSWQpIHtcbiAgICAgIHByb3hpZWRBcHBJZHMucHVzaChhcHBJZCk7XG4gICAgICBsb2cuZGVidWcoYEZvdW5kIGFwcCBpZCBrZXkgJyR7YXBwSWR9JyBmb3IgYnVuZGxlICcke2J1bmRsZUlkfSdgKTtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgZGF0YV0gb2YgXy50b1BhaXJzKGFwcERpY3QpKSB7XG4gICAgICAgIGlmIChkYXRhLmlzUHJveHkgJiYgZGF0YS5ob3N0SWQgPT09IGFwcElkKSB7XG4gICAgICAgICAgbG9nLmRlYnVnKGBGb3VuZCBzZXBhcmF0ZSBidW5kbGVJZCAnJHtkYXRhLmJ1bmRsZUlkfScgYCArXG4gICAgICAgICAgICAgICAgICAgIGBhY3RpbmcgYXMgcHJveHkgZm9yICcke2J1bmRsZUlkfScsIHdpdGggYXBwIGlkICcke2tleX0nYCk7XG4gICAgICAgICAgcHJveGllZEFwcElkcy5wdXNoKGtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gXy51bmlxKHByb3hpZWRBcHBJZHMpO1xufVxuXG5mdW5jdGlvbiBjaGVja1BhcmFtcyAocGFyYW1zKSB7XG4gIC8vIGNoZWNrIGlmIGFsbCBwYXJhbWV0ZXJzIGhhdmUgYSB2YWx1ZVxuICBjb25zdCBlcnJvcnMgPSBfLnRvUGFpcnMocGFyYW1zKVxuICAgIC5maWx0ZXIoKFssIHZhbHVlXSkgPT4gXy5pc05pbCh2YWx1ZSkpXG4gICAgLm1hcCgoW3BhcmFtXSkgPT4gcGFyYW0pO1xuICBpZiAoZXJyb3JzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyAke3V0aWwucGx1cmFsaXplKCdwYXJhbWV0ZXInLCBlcnJvcnMubGVuZ3RoKX06ICR7ZXJyb3JzLmpvaW4oJywgJyl9YCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2ltcGxlU3RyaW5naWZ5ICh2YWx1ZSwgbXVsdGlsaW5lID0gZmFsc2UpIHtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gIH1cblxuICAvLyB3ZSBnZXQgYmFjayBvYmplY3RzIHNvbWV0aW1lcyB3aXRoIHN0cmluZyB2ZXJzaW9ucyBvZiBmdW5jdGlvbnNcbiAgLy8gd2hpY2ggbXVkZHkgdGhlIGxvZ3NcbiAgbGV0IGNsZWFuVmFsdWUgPSBfLmNsb25lKHZhbHVlKTtcbiAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBbJ2NlaWwnLCAnY2xvbmUnLCAnZmxvb3InLCAncm91bmQnLCAnc2NhbGUnLCAndG9TdHJpbmcnXSkge1xuICAgIGRlbGV0ZSBjbGVhblZhbHVlW3Byb3BlcnR5XTtcbiAgfVxuICByZXR1cm4gbXVsdGlsaW5lID8gSlNPTi5zdHJpbmdpZnkoY2xlYW5WYWx1ZSwgbnVsbCwgMikgOiBKU09OLnN0cmluZ2lmeShjbGVhblZhbHVlKTtcbn1cblxuZnVuY3Rpb24gZGVmZXJyZWRQcm9taXNlICgpIHtcbiAgLy8gaHR0cDovL2JsdWViaXJkanMuY29tL2RvY3MvYXBpL2RlZmVycmVkLW1pZ3JhdGlvbi5odG1sXG4gIGxldCByZXNvbHZlO1xuICBsZXQgcmVqZWN0O1xuICBjb25zdCBwcm9taXNlID0gbmV3IEIoKHJlcywgcmVqKSA9PiB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJvbWlzZS9wYXJhbS1uYW1lc1xuICAgIHJlc29sdmUgPSByZXM7XG4gICAgcmVqZWN0ID0gcmVqO1xuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBwcm9taXNlLFxuICAgIHJlc29sdmUsXG4gICAgcmVqZWN0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRSZXN1bHQgKHJlcykge1xuICBpZiAoXy5pc1VuZGVmaW5lZChyZXMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBEaWQgbm90IGdldCBPSyByZXN1bHQgZnJvbSByZW1vdGUgZGVidWdnZXIuIFJlc3VsdCB3YXM6ICR7Xy50cnVuY2F0ZShzaW1wbGVTdHJpbmdpZnkocmVzKSwge2xlbmd0aDogUkVTUE9OU0VfTE9HX0xFTkdUSH0pfWApO1xuICB9IGVsc2UgaWYgKF8uaXNTdHJpbmcocmVzKSkge1xuICAgIHRyeSB7XG4gICAgICByZXMgPSBKU09OLnBhcnNlKHJlcyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyB3ZSBtaWdodCBnZXQgYSBzZXJpYWxpemVkIG9iamVjdCwgYnV0IHdlIG1pZ2h0IG5vdFxuICAgICAgLy8gaWYgd2UgZ2V0IGhlcmUsIGl0IGlzIGp1c3QgYSB2YWx1ZVxuICAgIH1cbiAgfSBlbHNlIGlmICghXy5pc09iamVjdChyZXMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBSZXN1bHQgaGFzIHVuZXhwZWN0ZWQgdHlwZTogKCR7dHlwZW9mIHJlc30pLmApO1xuICB9XG5cbiAgaWYgKHJlcy5zdGF0dXMgJiYgcmVzLnN0YXR1cyAhPT0gMCkge1xuICAgIC8vIHdlIGdvdCBzb21lIGZvcm0gb2YgZXJyb3IuXG4gICAgdGhyb3cgZXJyb3JGcm9tTUpTT05XUFN0YXR1c0NvZGUocmVzLnN0YXR1cywgcmVzLnZhbHVlLm1lc3NhZ2UgfHwgcmVzLnZhbHVlKTtcbiAgfVxuXG4gIC8vIHdpdGggZWl0aGVyIGhhdmUgYW4gb2JqZWN0IHdpdGggYSBgdmFsdWVgIHByb3BlcnR5IChldmVuIGlmIGBudWxsYCksXG4gIC8vIG9yIGEgcGxhaW4gb2JqZWN0XG4gIGNvbnN0IHZhbHVlID0gXy5oYXMocmVzLCAndmFsdWUnKSA/IHJlcy52YWx1ZSA6IHJlcztcblxuICAvLyBnZXQgcmlkIG9mIG5vaXN5IGZ1bmN0aW9ucyBvbiBvYmplY3RzXG4gIGlmIChfLmlzT2JqZWN0KHZhbHVlKSkge1xuICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgWydjZWlsJywgJ2Nsb25lJywgJ2Zsb29yJywgJ3JvdW5kJywgJ3NjYWxlJywgJ3RvU3RyaW5nJ10pIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZVtwcm9wZXJ0eV07XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBwYXRoIHRvIHRoZSBjdXJyZW50IG1vZHVsZSdzIHJvb3QgZm9sZGVyXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZ1bGwgcGF0aCB0byBtb2R1bGUgcm9vdFxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBjdXJyZW50IG1vZHVsZSByb290IGZvbGRlciBjYW5ub3QgYmUgZGV0ZXJtaW5lZFxuICovXG5jb25zdCBnZXRNb2R1bGVSb290ID0gXy5tZW1vaXplKGZ1bmN0aW9uIGdldE1vZHVsZVJvb3QgKCkge1xuICBjb25zdCByb290ID0gbm9kZS5nZXRNb2R1bGVSb290U3luYyhNT0RVTEVfTkFNRSwgX19maWxlbmFtZSk7XG4gIGlmICghcm9vdCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgdGhlIHJvb3QgZm9sZGVyIG9mIHRoZSAke01PRFVMRV9OQU1FfSBOb2RlLmpzIG1vZHVsZWApO1xuICB9XG4gIHJldHVybiByb290O1xufSk7XG5cbmV4cG9ydCB7XG4gIGFwcEluZm9Gcm9tRGljdCwgcGFnZUFycmF5RnJvbURpY3QsIGdldERlYnVnZ2VyQXBwS2V5LFxuICBnZXRQb3NzaWJsZURlYnVnZ2VyQXBwS2V5cywgY2hlY2tQYXJhbXMsIHNpbXBsZVN0cmluZ2lmeSwgZGVmZXJyZWRQcm9taXNlLFxuICBjb252ZXJ0UmVzdWx0LCBSRVNQT05TRV9MT0dfTEVOR1RILCBnZXRNb2R1bGVSb290LFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxTQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxXQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxRQUFBLEdBQUFKLE9BQUE7QUFFQSxNQUFNSyxXQUFXLEdBQUcsd0JBQXdCO0FBRTVDLE1BQU1DLHFCQUFxQixHQUFHLDZCQUE2QjtBQUMzRCxNQUFNQyw2QkFBNkIsR0FBRyxxQ0FBcUM7QUFDM0UsTUFBTUMsNkJBQTZCLEdBQUcsMkJBQTJCO0FBQ2pFLE1BQU1DLHFCQUFxQixHQUFHLDZCQUE2QjtBQUMzRCxNQUFNQyxrQkFBa0IsR0FBRyxHQUFHO0FBRTlCLE1BQU1DLGlCQUFpQixHQUFHLENBQUM7QUFHM0IsTUFBTUMsbUJBQW1CLEdBQUcsQ0FDMUIsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixhQUFhLENBQ2Q7QUFFRCxNQUFNQyxtQkFBbUIsR0FBRyxHQUFHO0FBQUNDLE9BQUEsQ0FBQUQsbUJBQUEsR0FBQUEsbUJBQUE7QUFNaEMsU0FBU0UsZUFBZUEsQ0FBRUMsSUFBSSxFQUFFO0VBQzlCLE1BQU1DLEVBQUUsR0FBR0QsSUFBSSxDQUFDRSwyQkFBMkI7RUFDM0MsTUFBTUMsT0FBTyxHQUFHQyxlQUFDLENBQUNDLFFBQVEsQ0FBQ0wsSUFBSSxDQUFDTSx3QkFBd0IsQ0FBQyxHQUNyRE4sSUFBSSxDQUFDTSx3QkFBd0IsQ0FBQ0MsV0FBVyxDQUFDLENBQUMsS0FBSyxNQUFNLEdBQ3REUCxJQUFJLENBQUNNLHdCQUF3QjtFQUlqQyxJQUFJRSxtQkFBbUIsR0FBRyxDQUFDLENBQUNSLElBQUksQ0FBQ1MsNkJBQTZCO0VBQzlELElBQUlMLGVBQUMsQ0FBQ00sR0FBRyxDQUFDVixJQUFJLEVBQUUsOEJBQThCLENBQUMsRUFBRTtJQUMvQyxJQUFJSSxlQUFDLENBQUNDLFFBQVEsQ0FBQ0wsSUFBSSxDQUFDVyw0QkFBNEIsQ0FBQyxFQUFFO01BQ2pESCxtQkFBbUIsR0FBR1IsSUFBSSxDQUFDVyw0QkFBNEIsS0FBSyxrQ0FBa0MsR0FDMUYsU0FBUyxHQUNUWCxJQUFJLENBQUNXLDRCQUE0QixLQUFLLG9DQUFvQztJQUNoRixDQUFDLE1BQU07TUFDTEgsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDUixJQUFJLENBQUNXLDRCQUE0QjtJQUMzRDtFQUNGO0VBQ0EsTUFBTUMsS0FBSyxHQUFHO0lBQ1pYLEVBQUU7SUFDRkUsT0FBTztJQUNQVSxJQUFJLEVBQUViLElBQUksQ0FBQ2MscUJBQXFCO0lBQ2hDQyxRQUFRLEVBQUVmLElBQUksQ0FBQ2dCLGlDQUFpQztJQUNoREMsTUFBTSxFQUFFakIsSUFBSSxDQUFDa0IsK0JBQStCO0lBQzVDQyxRQUFRLEVBQUVuQixJQUFJLENBQUNvQix5QkFBeUIsS0FBS3pCLGlCQUFpQjtJQUM5RGE7RUFDRixDQUFDO0VBRUQsT0FBTyxDQUFDUCxFQUFFLEVBQUVXLEtBQUssQ0FBQztBQUNwQjtBQU1BLFNBQVNTLGlCQUFpQkEsQ0FBRUMsUUFBUSxFQUFFO0VBQ3BDLElBQUlBLFFBQVEsQ0FBQ3JCLEVBQUUsRUFBRTtJQUVmLE9BQU8sQ0FBQ3FCLFFBQVEsQ0FBQztFQUNuQjtFQUNBLElBQUlDLFlBQVksR0FBRyxFQUFFO0VBQ3JCLEtBQUssTUFBTXZCLElBQUksSUFBSUksZUFBQyxDQUFDb0IsTUFBTSxDQUFDRixRQUFRLENBQUMsRUFBRTtJQUVyQyxJQUFJbEIsZUFBQyxDQUFDcUIsV0FBVyxDQUFDekIsSUFBSSxDQUFDMEIsVUFBVSxDQUFDLElBQUk5QixtQkFBbUIsQ0FBQytCLFFBQVEsQ0FBQzNCLElBQUksQ0FBQzBCLFVBQVUsQ0FBQyxFQUFFO01BQ25GSCxZQUFZLENBQUNLLElBQUksQ0FBQztRQUNoQjNCLEVBQUUsRUFBRUQsSUFBSSxDQUFDNkIsb0JBQW9CO1FBQzdCQyxLQUFLLEVBQUU5QixJQUFJLENBQUMrQixXQUFXO1FBQ3ZCQyxHQUFHLEVBQUVoQyxJQUFJLENBQUNpQyxTQUFTO1FBQ25CQyxLQUFLLEVBQUUsQ0FBQzlCLGVBQUMsQ0FBQ3FCLFdBQVcsQ0FBQ3pCLElBQUksQ0FBQ21DLDBCQUEwQjtNQUN2RCxDQUFDLENBQUM7SUFDSjtFQUNGO0VBQ0EsT0FBT1osWUFBWTtBQUNyQjtBQU1BLFNBQVNhLGlCQUFpQkEsQ0FBRXJCLFFBQVEsRUFBRXNCLE9BQU8sRUFBRTtFQUM3QyxJQUFJQyxLQUFLO0VBQ1QsS0FBSyxNQUFNLENBQUNDLEdBQUcsRUFBRUMsSUFBSSxDQUFDLElBQUlwQyxlQUFDLENBQUNxQyxPQUFPLENBQUNKLE9BQU8sQ0FBQyxFQUFFO0lBQzVDLElBQUlHLElBQUksQ0FBQ3pCLFFBQVEsS0FBS0EsUUFBUSxFQUFFO01BQzlCdUIsS0FBSyxHQUFHQyxHQUFHO01BQ1g7SUFDRjtFQUNGO0VBRUEsSUFBSUQsS0FBSyxFQUFFO0lBQ1RJLGVBQUcsQ0FBQ0MsS0FBSyxDQUFFLHFCQUFvQkwsS0FBTSxpQkFBZ0J2QixRQUFTLEdBQUUsQ0FBQztJQUNqRSxJQUFJNkIsVUFBVTtJQUNkLEtBQUssTUFBTSxDQUFDTCxHQUFHLEVBQUVDLElBQUksQ0FBQyxJQUFJcEMsZUFBQyxDQUFDcUMsT0FBTyxDQUFDSixPQUFPLENBQUMsRUFBRTtNQUM1QyxJQUFJRyxJQUFJLENBQUNyQyxPQUFPLElBQUlxQyxJQUFJLENBQUN2QixNQUFNLEtBQUtxQixLQUFLLEVBQUU7UUFDekNJLGVBQUcsQ0FBQ0MsS0FBSyxDQUFFLDRCQUEyQkgsSUFBSSxDQUFDekIsUUFBUyxJQUFHLEdBQzVDLHdCQUF1QkEsUUFBUyxtQkFBa0J3QixHQUFJLEdBQUUsQ0FBQztRQUVwRUssVUFBVSxHQUFHTCxHQUFHO01BQ2xCO0lBQ0Y7SUFDQSxJQUFJSyxVQUFVLEVBQUU7TUFDZE4sS0FBSyxHQUFHTSxVQUFVO01BQ2xCRixlQUFHLENBQUNDLEtBQUssQ0FBRSx5QkFBd0JMLEtBQU0sR0FBRSxDQUFDO0lBQzlDO0VBQ0Y7RUFFQSxPQUFPQSxLQUFLO0FBQ2Q7QUFFQSxTQUFTTyxjQUFjQSxDQUFFOUIsUUFBUSxFQUFFc0IsT0FBTyxFQUFFO0VBQzFDLElBQUlDLEtBQUs7RUFDVCxLQUFLLE1BQU0sQ0FBQ0MsR0FBRyxFQUFFQyxJQUFJLENBQUMsSUFBSXBDLGVBQUMsQ0FBQ3FDLE9BQU8sQ0FBQ0osT0FBTyxDQUFDLEVBQUU7SUFDNUMsSUFBSUcsSUFBSSxDQUFDekIsUUFBUSxDQUFDK0IsUUFBUSxDQUFDL0IsUUFBUSxDQUFDLEVBQUU7TUFDcEN1QixLQUFLLEdBQUdDLEdBQUc7TUFDWDtJQUNGO0VBQ0Y7RUFHQSxJQUFJLENBQUNELEtBQUssSUFBSXZCLFFBQVEsS0FBS3pCLHFCQUFxQixFQUFFO0lBQ2hELE9BQU91RCxjQUFjLENBQUN2RCxxQkFBcUIsRUFBRStDLE9BQU8sQ0FBQztFQUN2RDtFQUVBLE9BQU9DLEtBQUs7QUFDZDtBQUVBLFNBQVNTLDBCQUEwQkEsQ0FBRUMsU0FBUyxFQUFFWCxPQUFPLEVBQUU7RUFDdkQsSUFBSVksYUFBYSxHQUFHLEVBQUU7RUFHdEIsTUFBTUMsaUJBQWlCLEdBQUc5QyxlQUFDLENBQUMrQyxJQUFJLENBQUMsQ0FDL0I3RCxxQkFBcUIsRUFDckJDLDZCQUE2QixFQUM3QkMsNkJBQTZCLEVBQzdCQyxxQkFBcUIsRUFDckJDLGtCQUFrQixFQUNsQixHQUFHc0QsU0FBUyxDQUNiLENBQUM7RUFDRk4sZUFBRyxDQUFDQyxLQUFLLENBQUUsb0NBQW1DTyxpQkFBaUIsQ0FBQ0UsSUFBSSxDQUFDLElBQUksQ0FBRSxFQUFDLENBQUM7RUFDN0UsS0FBSyxNQUFNckMsUUFBUSxJQUFJbUMsaUJBQWlCLEVBQUU7SUFDeEMsTUFBTVosS0FBSyxHQUFHTyxjQUFjLENBQUM5QixRQUFRLEVBQUVzQixPQUFPLENBQUM7SUFHL0MsSUFBSUMsS0FBSyxFQUFFO01BQ1RXLGFBQWEsQ0FBQ3JCLElBQUksQ0FBQ1UsS0FBSyxDQUFDO01BQ3pCSSxlQUFHLENBQUNDLEtBQUssQ0FBRSxxQkFBb0JMLEtBQU0saUJBQWdCdkIsUUFBUyxHQUFFLENBQUM7TUFDakUsS0FBSyxNQUFNLENBQUN3QixHQUFHLEVBQUVDLElBQUksQ0FBQyxJQUFJcEMsZUFBQyxDQUFDcUMsT0FBTyxDQUFDSixPQUFPLENBQUMsRUFBRTtRQUM1QyxJQUFJRyxJQUFJLENBQUNyQyxPQUFPLElBQUlxQyxJQUFJLENBQUN2QixNQUFNLEtBQUtxQixLQUFLLEVBQUU7VUFDekNJLGVBQUcsQ0FBQ0MsS0FBSyxDQUFFLDRCQUEyQkgsSUFBSSxDQUFDekIsUUFBUyxJQUFHLEdBQzVDLHdCQUF1QkEsUUFBUyxtQkFBa0J3QixHQUFJLEdBQUUsQ0FBQztVQUNwRVUsYUFBYSxDQUFDckIsSUFBSSxDQUFDVyxHQUFHLENBQUM7UUFDekI7TUFDRjtJQUNGO0VBQ0Y7RUFFQSxPQUFPbkMsZUFBQyxDQUFDK0MsSUFBSSxDQUFDRixhQUFhLENBQUM7QUFDOUI7QUFFQSxTQUFTSSxXQUFXQSxDQUFFQyxNQUFNLEVBQUU7RUFFNUIsTUFBTUMsTUFBTSxHQUFHbkQsZUFBQyxDQUFDcUMsT0FBTyxDQUFDYSxNQUFNLENBQUMsQ0FDN0JFLE1BQU0sQ0FBQyxDQUFDLEdBQUdDLEtBQUssQ0FBQyxLQUFLckQsZUFBQyxDQUFDc0QsS0FBSyxDQUFDRCxLQUFLLENBQUMsQ0FBQyxDQUNyQ0UsR0FBRyxDQUFDLENBQUMsQ0FBQ0MsS0FBSyxDQUFDLEtBQUtBLEtBQUssQ0FBQztFQUMxQixJQUFJTCxNQUFNLENBQUNNLE1BQU0sRUFBRTtJQUNqQixNQUFNLElBQUlDLEtBQUssQ0FBRSxXQUFVQyxhQUFJLENBQUNDLFNBQVMsQ0FBQyxXQUFXLEVBQUVULE1BQU0sQ0FBQ00sTUFBTSxDQUFFLEtBQUlOLE1BQU0sQ0FBQ0gsSUFBSSxDQUFDLElBQUksQ0FBRSxFQUFDLENBQUM7RUFDaEc7QUFDRjtBQUVBLFNBQVNhLGVBQWVBLENBQUVSLEtBQUssRUFBRVMsU0FBUyxHQUFHLEtBQUssRUFBRTtFQUNsRCxJQUFJLENBQUNULEtBQUssRUFBRTtJQUNWLE9BQU9VLElBQUksQ0FBQ0MsU0FBUyxDQUFDWCxLQUFLLENBQUM7RUFDOUI7RUFJQSxJQUFJWSxVQUFVLEdBQUdqRSxlQUFDLENBQUNrRSxLQUFLLENBQUNiLEtBQUssQ0FBQztFQUMvQixLQUFLLE1BQU1jLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDLEVBQUU7SUFDL0UsT0FBT0YsVUFBVSxDQUFDRSxRQUFRLENBQUM7RUFDN0I7RUFDQSxPQUFPTCxTQUFTLEdBQUdDLElBQUksQ0FBQ0MsU0FBUyxDQUFDQyxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHRixJQUFJLENBQUNDLFNBQVMsQ0FBQ0MsVUFBVSxDQUFDO0FBQ3JGO0FBRUEsU0FBU0csZUFBZUEsQ0FBQSxFQUFJO0VBRTFCLElBQUlDLE9BQU87RUFDWCxJQUFJQyxNQUFNO0VBQ1YsTUFBTUMsT0FBTyxHQUFHLElBQUlDLGlCQUFDLENBQUMsQ0FBQ0MsR0FBRyxFQUFFQyxHQUFHLEtBQUs7SUFDbENMLE9BQU8sR0FBR0ksR0FBRztJQUNiSCxNQUFNLEdBQUdJLEdBQUc7RUFDZCxDQUFDLENBQUM7RUFDRixPQUFPO0lBQ0xILE9BQU87SUFDUEYsT0FBTztJQUNQQztFQUNGLENBQUM7QUFDSDtBQUVBLFNBQVNLLGFBQWFBLENBQUVGLEdBQUcsRUFBRTtFQUMzQixJQUFJekUsZUFBQyxDQUFDcUIsV0FBVyxDQUFDb0QsR0FBRyxDQUFDLEVBQUU7SUFDdEIsTUFBTSxJQUFJZixLQUFLLENBQUUsMkRBQTBEMUQsZUFBQyxDQUFDNEUsUUFBUSxDQUFDZixlQUFlLENBQUNZLEdBQUcsQ0FBQyxFQUFFO01BQUNoQixNQUFNLEVBQUVoRTtJQUFtQixDQUFDLENBQUUsRUFBQyxDQUFDO0VBQy9JLENBQUMsTUFBTSxJQUFJTyxlQUFDLENBQUNDLFFBQVEsQ0FBQ3dFLEdBQUcsQ0FBQyxFQUFFO0lBQzFCLElBQUk7TUFDRkEsR0FBRyxHQUFHVixJQUFJLENBQUNjLEtBQUssQ0FBQ0osR0FBRyxDQUFDO0lBQ3ZCLENBQUMsQ0FBQyxPQUFPSyxHQUFHLEVBQUUsQ0FHZDtFQUNGLENBQUMsTUFBTSxJQUFJLENBQUM5RSxlQUFDLENBQUMrRSxRQUFRLENBQUNOLEdBQUcsQ0FBQyxFQUFFO0lBQzNCLE1BQU0sSUFBSWYsS0FBSyxDQUFFLGdDQUErQixPQUFPZSxHQUFJLElBQUcsQ0FBQztFQUNqRTtFQUVBLElBQUlBLEdBQUcsQ0FBQ08sTUFBTSxJQUFJUCxHQUFHLENBQUNPLE1BQU0sS0FBSyxDQUFDLEVBQUU7SUFFbEMsTUFBTSxJQUFBQyxzQ0FBMEIsRUFBQ1IsR0FBRyxDQUFDTyxNQUFNLEVBQUVQLEdBQUcsQ0FBQ3BCLEtBQUssQ0FBQzZCLE9BQU8sSUFBSVQsR0FBRyxDQUFDcEIsS0FBSyxDQUFDO0VBQzlFO0VBSUEsTUFBTUEsS0FBSyxHQUFHckQsZUFBQyxDQUFDTSxHQUFHLENBQUNtRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUdBLEdBQUcsQ0FBQ3BCLEtBQUssR0FBR29CLEdBQUc7RUFHbkQsSUFBSXpFLGVBQUMsQ0FBQytFLFFBQVEsQ0FBQzFCLEtBQUssQ0FBQyxFQUFFO0lBQ3JCLEtBQUssTUFBTWMsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsRUFBRTtNQUMvRSxPQUFPZCxLQUFLLENBQUNjLFFBQVEsQ0FBQztJQUN4QjtFQUNGO0VBQ0EsT0FBT2QsS0FBSztBQUNkO0FBUUEsTUFBTThCLGFBQWEsR0FBR25GLGVBQUMsQ0FBQ29GLE9BQU8sQ0FBQyxTQUFTRCxhQUFhQSxDQUFBLEVBQUk7RUFDeEQsTUFBTUUsSUFBSSxHQUFHQyxhQUFJLENBQUNDLGlCQUFpQixDQUFDdEcsV0FBVyxFQUFFdUcsVUFBVSxDQUFDO0VBQzVELElBQUksQ0FBQ0gsSUFBSSxFQUFFO0lBQ1QsTUFBTSxJQUFJM0IsS0FBSyxDQUFFLHNDQUFxQ3pFLFdBQVksaUJBQWdCLENBQUM7RUFDckY7RUFDQSxPQUFPb0csSUFBSTtBQUNiLENBQUMsQ0FBQztBQUFDM0YsT0FBQSxDQUFBeUYsYUFBQSxHQUFBQSxhQUFBIn0=
|
|
274
|
+
//# sourceMappingURL=utils.js.map
|
package/build/lib/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":["_logger","_interopRequireDefault","require","_lodash","_bluebird","_baseDriver","_support","MODULE_NAME","WEB_CONTENT_BUNDLE_ID","WEB_CONTENT_PROCESS_BUNDLE_ID","SAFARI_VIEW_PROCESS_BUNDLE_ID","SAFARI_VIEW_BUNDLE_ID","WILDCARD_BUNDLE_ID","INACTIVE_APP_CODE","ACCEPTED_PAGE_TYPES","RESPONSE_LOG_LENGTH","exports","appInfoFromDict","dict","id","WIRApplicationIdentifierKey","isProxy","_","isString","WIRIsApplicationProxyKey","toLowerCase","isAutomationEnabled","WIRRemoteAutomationEnabledKey","has","WIRAutomationAvailabilityKey","entry","name","WIRApplicationNameKey","bundleId","WIRApplicationBundleIdentifierKey","hostId","WIRHostApplicationIdentifierKey","isActive","WIRIsApplicationActiveKey","pageArrayFromDict","pageDict","newPageArray","values","isUndefined","WIRTypeKey","includes","push","WIRPageIdentifierKey","title","WIRTitleKey","url","WIRURLKey","isKey","WIRConnectionIdentifierKey","getDebuggerAppKey","appDict","appId","key","data","toPairs","log","debug","proxyAppId","appIdForBundle","endsWith","getPossibleDebuggerAppKeys","bundleIds","proxiedAppIds","possibleBundleIds","uniq","join","checkParams","params","errors","filter","value","isNil","map","param","length","Error","util","pluralize","simpleStringify","multiline","JSON","stringify","cleanValue","clone","property","deferredPromise","resolve","reject","promise","B","res","rej","convertResult","truncate","parse","err","isObject","status","errorFromMJSONWPStatusCode","message","getModuleRoot","memoize","root","node","getModuleRootSync","__filename"],"sources":["../../lib/utils.js"],"sourcesContent":["import log from './logger';\nimport _ from 'lodash';\nimport B from 'bluebird';\nimport { errorFromMJSONWPStatusCode } from '@appium/base-driver';\nimport { util, node } from '@appium/support';\n\nconst MODULE_NAME = 'appium-remote-debugger';\n\nconst WEB_CONTENT_BUNDLE_ID = 'com.apple.WebKit.WebContent';\nconst WEB_CONTENT_PROCESS_BUNDLE_ID = 'process-com.apple.WebKit.WebContent';\nconst SAFARI_VIEW_PROCESS_BUNDLE_ID = 'process-SafariViewService';\nconst SAFARI_VIEW_BUNDLE_ID = 'com.apple.SafariViewService';\nconst WILDCARD_BUNDLE_ID = '*';\n\nconst INACTIVE_APP_CODE = 0;\n\n// values for the page `WIRTypeKey` entry\nconst ACCEPTED_PAGE_TYPES = [\n 'WIRTypeWeb', // up to iOS 11.3\n 'WIRTypeWebPage', // iOS 11.4\n 'WIRTypePage', // iOS 11.4 webview\n];\n\nconst RESPONSE_LOG_LENGTH = 100;\n\n/*\n * Takes a dictionary from the remote debugger and makes a more manageable\n * dictionary whose keys are understandable\n */\nfunction appInfoFromDict (dict) {\n const id = dict.WIRApplicationIdentifierKey;\n const isProxy = _.isString(dict.WIRIsApplicationProxyKey)\n ? dict.WIRIsApplicationProxyKey.toLowerCase() === 'true'\n : dict.WIRIsApplicationProxyKey;\n // automation enabled can be either from the keys\n // - WIRRemoteAutomationEnabledKey (boolean)\n // - WIRAutomationAvailabilityKey (string or boolean)\n let isAutomationEnabled = !!dict.WIRRemoteAutomationEnabledKey;\n if (_.has(dict, 'WIRAutomationAvailabilityKey')) {\n if (_.isString(dict.WIRAutomationAvailabilityKey)) {\n isAutomationEnabled = dict.WIRAutomationAvailabilityKey === 'WIRAutomationAvailabilityUnknown'\n ? 'Unknown'\n : dict.WIRAutomationAvailabilityKey === 'WIRAutomationAvailabilityAvailable';\n } else {\n isAutomationEnabled = !!dict.WIRAutomationAvailabilityKey;\n }\n }\n const entry = {\n id,\n isProxy,\n name: dict.WIRApplicationNameKey,\n bundleId: dict.WIRApplicationBundleIdentifierKey,\n hostId: dict.WIRHostApplicationIdentifierKey,\n isActive: dict.WIRIsApplicationActiveKey !== INACTIVE_APP_CODE,\n isAutomationEnabled,\n };\n\n return [id, entry];\n}\n\n/*\n * Take a dictionary from the remote debugger and makes a more manageable\n * dictionary of pages available.\n */\nfunction pageArrayFromDict (pageDict) {\n if (pageDict.id) {\n // the page is already translated, so wrap in an array and pass back\n return [pageDict];\n }\n let newPageArray = [];\n for (const dict of _.values(pageDict)) {\n // count only WIRTypeWeb pages and ignore all others (WIRTypeJavaScript etc)\n if (_.isUndefined(dict.WIRTypeKey) || ACCEPTED_PAGE_TYPES.includes(dict.WIRTypeKey)) {\n newPageArray.push({\n id: dict.WIRPageIdentifierKey,\n title: dict.WIRTitleKey,\n url: dict.WIRURLKey,\n isKey: !_.isUndefined(dict.WIRConnectionIdentifierKey),\n });\n }\n }\n return newPageArray;\n}\n\n/*\n * Given a bundle id, finds the correct remote debugger app that is\n * connected.\n */\nfunction getDebuggerAppKey (bundleId, appDict) {\n let appId;\n for (const [key, data] of _.toPairs(appDict)) {\n if (data.bundleId === bundleId) {\n appId = key;\n break;\n }\n }\n // now we need to determine if we should pick a proxy for this instead\n if (appId) {\n log.debug(`Found app id key '${appId}' for bundle '${bundleId}'`);\n let proxyAppId;\n for (const [key, data] of _.toPairs(appDict)) {\n if (data.isProxy && data.hostId === appId) {\n log.debug(`Found separate bundleId '${data.bundleId}' ` +\n `acting as proxy for '${bundleId}', with app id '${key}'`);\n // set the app id... the last one will be used, so just keep re-assigning\n proxyAppId = key;\n }\n }\n if (proxyAppId) {\n appId = proxyAppId;\n log.debug(`Using proxied app id '${appId}'`);\n }\n }\n\n return appId;\n}\n\nfunction appIdForBundle (bundleId, appDict) {\n let appId;\n for (const [key, data] of _.toPairs(appDict)) {\n if (data.bundleId.endsWith(bundleId)) {\n appId = key;\n break;\n }\n }\n\n // if nothing is found, try to get the generic app\n if (!appId && bundleId !== WEB_CONTENT_BUNDLE_ID) {\n return appIdForBundle(WEB_CONTENT_BUNDLE_ID, appDict);\n }\n\n return appId;\n}\n\nfunction getPossibleDebuggerAppKeys (bundleIds, appDict) {\n let proxiedAppIds = [];\n\n // go through the possible bundle identifiers\n const possibleBundleIds = _.uniq([\n WEB_CONTENT_BUNDLE_ID,\n WEB_CONTENT_PROCESS_BUNDLE_ID,\n SAFARI_VIEW_PROCESS_BUNDLE_ID,\n SAFARI_VIEW_BUNDLE_ID,\n WILDCARD_BUNDLE_ID,\n ...bundleIds,\n ]);\n log.debug(`Checking for bundle identifiers: ${possibleBundleIds.join(', ')}`);\n for (const bundleId of possibleBundleIds) {\n const appId = appIdForBundle(bundleId, appDict);\n\n // now we need to determine if we should pick a proxy for this instead\n if (appId) {\n proxiedAppIds.push(appId);\n log.debug(`Found app id key '${appId}' for bundle '${bundleId}'`);\n for (const [key, data] of _.toPairs(appDict)) {\n if (data.isProxy && data.hostId === appId) {\n log.debug(`Found separate bundleId '${data.bundleId}' ` +\n `acting as proxy for '${bundleId}', with app id '${key}'`);\n proxiedAppIds.push(key);\n }\n }\n }\n }\n\n return _.uniq(proxiedAppIds);\n}\n\nfunction checkParams (params) {\n // check if all parameters have a value\n const errors = _.toPairs(params)\n .filter(([, value]) => _.isNil(value))\n .map(([param]) => param);\n if (errors.length) {\n throw new Error(`Missing ${util.pluralize('parameter', errors.length)}: ${errors.join(', ')}`);\n }\n}\n\nfunction simpleStringify (value, multiline = false) {\n if (!value) {\n return JSON.stringify(value);\n }\n\n // we get back objects sometimes with string versions of functions\n // which muddy the logs\n let cleanValue = _.clone(value);\n for (const property of ['ceil', 'clone', 'floor', 'round', 'scale', 'toString']) {\n delete cleanValue[property];\n }\n return multiline ? JSON.stringify(cleanValue, null, 2) : JSON.stringify(cleanValue);\n}\n\nfunction deferredPromise () {\n // http://bluebirdjs.com/docs/api/deferred-migration.html\n let resolve;\n let reject;\n const promise = new B((res, rej) => { // eslint-disable-line promise/param-names\n resolve = res;\n reject = rej;\n });\n return {\n promise,\n resolve,\n reject\n };\n}\n\nfunction convertResult (res) {\n if (_.isUndefined(res)) {\n throw new Error(`Did not get OK result from remote debugger. Result was: ${_.truncate(simpleStringify(res), {length: RESPONSE_LOG_LENGTH})}`);\n } else if (_.isString(res)) {\n try {\n res = JSON.parse(res);\n } catch (err) {\n // we might get a serialized object, but we might not\n // if we get here, it is just a value\n }\n } else if (!_.isObject(res)) {\n throw new Error(`Result has unexpected type: (${typeof res}).`);\n }\n\n if (res.status && res.status !== 0) {\n // we got some form of error.\n throw errorFromMJSONWPStatusCode(res.status, res.value.message || res.value);\n }\n\n // with either have an object with a `value` property (even if `null`),\n // or a plain object\n const value = _.has(res, 'value') ? res.value : res;\n\n // get rid of noisy functions on objects\n if (_.isObject(value)) {\n for (const property of ['ceil', 'clone', 'floor', 'round', 'scale', 'toString']) {\n delete value[property];\n }\n }\n return value;\n}\n\n/**\n * Calculates the path to the current module's root folder\n *\n * @returns {string} The full path to module root\n * @throws {Error} If the current module root folder cannot be determined\n */\nconst getModuleRoot = _.memoize(function getModuleRoot () {\n const root = node.getModuleRootSync(MODULE_NAME, __filename);\n if (!root) {\n throw new Error(`Cannot find the root folder of the ${MODULE_NAME} Node.js module`);\n }\n return root;\n});\n\nexport {\n appInfoFromDict, pageArrayFromDict, getDebuggerAppKey,\n getPossibleDebuggerAppKeys, checkParams, simpleStringify, deferredPromise,\n convertResult, RESPONSE_LOG_LENGTH, getModuleRoot,\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../lib/utils.js"],"names":[],"mappings":"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"}
|