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.
Files changed (87) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +0 -2
  3. package/build/index.js +18 -33
  4. package/build/lib/atoms.d.ts +17 -0
  5. package/build/lib/atoms.d.ts.map +1 -0
  6. package/build/lib/atoms.js +75 -50
  7. package/build/lib/atoms.js.map +1 -1
  8. package/build/lib/logger.d.ts +3 -0
  9. package/build/lib/logger.d.ts.map +1 -0
  10. package/build/lib/logger.js +5 -11
  11. package/build/lib/logger.js.map +1 -1
  12. package/build/lib/mixins/connect.d.ts +125 -0
  13. package/build/lib/mixins/connect.d.ts.map +1 -0
  14. package/build/lib/mixins/connect.js +299 -202
  15. package/build/lib/mixins/connect.js.map +1 -1
  16. package/build/lib/mixins/events.d.ts +7 -0
  17. package/build/lib/mixins/events.d.ts.map +1 -0
  18. package/build/lib/mixins/events.js +7 -12
  19. package/build/lib/mixins/events.js.map +1 -1
  20. package/build/lib/mixins/execute.d.ts +38 -0
  21. package/build/lib/mixins/execute.d.ts.map +1 -0
  22. package/build/lib/mixins/execute.js +162 -122
  23. package/build/lib/mixins/execute.js.map +1 -1
  24. package/build/lib/mixins/index.d.ts +5 -0
  25. package/build/lib/mixins/index.d.ts.map +1 -0
  26. package/build/lib/mixins/index.js +14 -23
  27. package/build/lib/mixins/index.js.map +1 -1
  28. package/build/lib/mixins/message-handlers.d.ts +92 -0
  29. package/build/lib/mixins/message-handlers.d.ts.map +1 -0
  30. package/build/lib/mixins/message-handlers.js +160 -97
  31. package/build/lib/mixins/message-handlers.js.map +1 -1
  32. package/build/lib/mixins/navigate.d.ts +92 -0
  33. package/build/lib/mixins/navigate.d.ts.map +1 -0
  34. package/build/lib/mixins/navigate.js +199 -141
  35. package/build/lib/mixins/navigate.js.map +1 -1
  36. package/build/lib/protocol/index.d.ts +14 -0
  37. package/build/lib/protocol/index.d.ts.map +1 -0
  38. package/build/lib/protocol/index.js +192 -118
  39. package/build/lib/protocol/index.js.map +1 -1
  40. package/build/lib/remote-debugger-real-device.d.ts +6 -0
  41. package/build/lib/remote-debugger-real-device.d.ts.map +1 -0
  42. package/build/lib/remote-debugger-real-device.js +29 -32
  43. package/build/lib/remote-debugger-real-device.js.map +1 -1
  44. package/build/lib/remote-debugger.d.ts +119 -0
  45. package/build/lib/remote-debugger.d.ts.map +1 -0
  46. package/build/lib/remote-debugger.js +256 -226
  47. package/build/lib/remote-debugger.js.map +1 -1
  48. package/build/lib/rpc/index.d.ts +4 -0
  49. package/build/lib/rpc/index.d.ts.map +1 -0
  50. package/build/lib/rpc/index.js +10 -21
  51. package/build/lib/rpc/index.js.map +1 -1
  52. package/build/lib/rpc/remote-messages.d.ts +51 -0
  53. package/build/lib/rpc/remote-messages.d.ts.map +1 -0
  54. package/build/lib/rpc/remote-messages.js +203 -224
  55. package/build/lib/rpc/remote-messages.js.map +1 -1
  56. package/build/lib/rpc/rpc-client-real-device.d.ts +6 -0
  57. package/build/lib/rpc/rpc-client-real-device.d.ts.map +1 -0
  58. package/build/lib/rpc/rpc-client-real-device.js +43 -49
  59. package/build/lib/rpc/rpc-client-real-device.js.map +1 -1
  60. package/build/lib/rpc/rpc-client-simulator.d.ts +15 -0
  61. package/build/lib/rpc/rpc-client-simulator.d.ts.map +1 -0
  62. package/build/lib/rpc/rpc-client-simulator.js +138 -125
  63. package/build/lib/rpc/rpc-client-simulator.js.map +1 -1
  64. package/build/lib/rpc/rpc-client.d.ts +142 -0
  65. package/build/lib/rpc/rpc-client.d.ts.map +1 -0
  66. package/build/lib/rpc/rpc-client.js +559 -418
  67. package/build/lib/rpc/rpc-client.js.map +1 -1
  68. package/build/lib/rpc/rpc-message-handler.d.ts +13 -0
  69. package/build/lib/rpc/rpc-message-handler.d.ts.map +1 -0
  70. package/build/lib/rpc/rpc-message-handler.js +181 -166
  71. package/build/lib/rpc/rpc-message-handler.js.map +1 -1
  72. package/build/lib/utils.d.ts +61 -0
  73. package/build/lib/utils.d.ts.map +1 -0
  74. package/build/lib/utils.js +241 -155
  75. package/build/lib/utils.js.map +1 -1
  76. package/lib/atoms.js +25 -4
  77. package/lib/mixins/connect.js +102 -7
  78. package/lib/mixins/execute.js +46 -13
  79. package/lib/mixins/message-handlers.js +44 -1
  80. package/lib/mixins/navigate.js +55 -3
  81. package/lib/remote-debugger.js +112 -0
  82. package/lib/rpc/rpc-client-real-device.js +1 -6
  83. package/lib/rpc/rpc-client-simulator.js +7 -1
  84. package/lib/rpc/rpc-client.js +106 -6
  85. package/lib/rpc/rpc-message-handler.js +1 -1
  86. package/lib/utils.js +31 -1
  87. 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"}
@@ -1,25 +1,14 @@
1
1
  "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.RESPONSE_LOG_LENGTH = void 0;
8
- exports.appInfoFromDict = appInfoFromDict;
9
- exports.checkParams = checkParams;
10
- exports.convertResult = convertResult;
11
- exports.deferredPromise = deferredPromise;
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
- const ACCEPTED_PAGE_TYPES = ['WIRTypeWeb', 'WIRTypeWebPage', 'WIRTypePage'];
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
- const id = dict.WIRApplicationIdentifierKey;
35
- const isProxy = _lodash.default.isString(dict.WIRIsApplicationProxyKey) ? dict.WIRIsApplicationProxyKey.toLowerCase() === 'true' : dict.WIRIsApplicationProxyKey;
36
- let isAutomationEnabled = !!dict.WIRRemoteAutomationEnabledKey;
37
- if (_lodash.default.has(dict, 'WIRAutomationAvailabilityKey')) {
38
- if (_lodash.default.isString(dict.WIRAutomationAvailabilityKey)) {
39
- isAutomationEnabled = dict.WIRAutomationAvailabilityKey === 'WIRAutomationAvailabilityUnknown' ? 'Unknown' : dict.WIRAutomationAvailabilityKey === 'WIRAutomationAvailabilityAvailable';
40
- } else {
41
- isAutomationEnabled = !!dict.WIRAutomationAvailabilityKey;
42
- }
43
- }
44
- const entry = {
45
- id,
46
- isProxy,
47
- name: dict.WIRApplicationNameKey,
48
- bundleId: dict.WIRApplicationBundleIdentifierKey,
49
- hostId: dict.WIRHostApplicationIdentifierKey,
50
- isActive: dict.WIRIsApplicationActiveKey !== INACTIVE_APP_CODE,
51
- isAutomationEnabled
52
- };
53
- return [id, entry];
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
- if (pageDict.id) {
57
- return [pageDict];
58
- }
59
- let newPageArray = [];
60
- for (const dict of _lodash.default.values(pageDict)) {
61
- if (_lodash.default.isUndefined(dict.WIRTypeKey) || ACCEPTED_PAGE_TYPES.includes(dict.WIRTypeKey)) {
62
- newPageArray.push({
63
- id: dict.WIRPageIdentifierKey,
64
- title: dict.WIRTitleKey,
65
- url: dict.WIRURLKey,
66
- isKey: !_lodash.default.isUndefined(dict.WIRConnectionIdentifierKey)
67
- });
68
- }
69
- }
70
- return newPageArray;
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
- let appId;
74
- for (const [key, data] of _lodash.default.toPairs(appDict)) {
75
- if (data.bundleId === bundleId) {
76
- appId = key;
77
- break;
78
- }
79
- }
80
- if (appId) {
81
- _logger.default.debug(`Found app id key '${appId}' for bundle '${bundleId}'`);
82
- let proxyAppId;
83
- for (const [key, data] of _lodash.default.toPairs(appDict)) {
84
- if (data.isProxy && data.hostId === appId) {
85
- _logger.default.debug(`Found separate bundleId '${data.bundleId}' ` + `acting as proxy for '${bundleId}', with app id '${key}'`);
86
- proxyAppId = key;
87
- }
88
- }
89
- if (proxyAppId) {
90
- appId = proxyAppId;
91
- _logger.default.debug(`Using proxied app id '${appId}'`);
92
- }
93
- }
94
- return appId;
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
- let appId;
98
- for (const [key, data] of _lodash.default.toPairs(appDict)) {
99
- if (data.bundleId.endsWith(bundleId)) {
100
- appId = key;
101
- break;
102
- }
103
- }
104
- if (!appId && bundleId !== WEB_CONTENT_BUNDLE_ID) {
105
- return appIdForBundle(WEB_CONTENT_BUNDLE_ID, appDict);
106
- }
107
- return appId;
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
- let proxiedAppIds = [];
111
- const possibleBundleIds = _lodash.default.uniq([WEB_CONTENT_BUNDLE_ID, WEB_CONTENT_PROCESS_BUNDLE_ID, SAFARI_VIEW_PROCESS_BUNDLE_ID, SAFARI_VIEW_BUNDLE_ID, WILDCARD_BUNDLE_ID, ...bundleIds]);
112
- _logger.default.debug(`Checking for bundle identifiers: ${possibleBundleIds.join(', ')}`);
113
- for (const bundleId of possibleBundleIds) {
114
- const appId = appIdForBundle(bundleId, appDict);
115
- if (appId) {
116
- proxiedAppIds.push(appId);
117
- _logger.default.debug(`Found app id key '${appId}' for bundle '${bundleId}'`);
118
- for (const [key, data] of _lodash.default.toPairs(appDict)) {
119
- if (data.isProxy && data.hostId === appId) {
120
- _logger.default.debug(`Found separate bundleId '${data.bundleId}' ` + `acting as proxy for '${bundleId}', with app id '${key}'`);
121
- proxiedAppIds.push(key);
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
- const errors = _lodash.default.toPairs(params).filter(([, value]) => _lodash.default.isNil(value)).map(([param]) => param);
130
- if (errors.length) {
131
- throw new Error(`Missing ${_support.util.pluralize('parameter', errors.length)}: ${errors.join(', ')}`);
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
- if (!value) {
136
- return JSON.stringify(value);
137
- }
138
- let cleanValue = _lodash.default.clone(value);
139
- for (const property of ['ceil', 'clone', 'floor', 'round', 'scale', 'toString']) {
140
- delete cleanValue[property];
141
- }
142
- return multiline ? JSON.stringify(cleanValue, null, 2) : JSON.stringify(cleanValue);
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
- let resolve;
146
- let reject;
147
- const promise = new _bluebird.default((res, rej) => {
148
- resolve = res;
149
- reject = rej;
150
- });
151
- return {
152
- promise,
153
- resolve,
154
- reject
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
- if (_lodash.default.isUndefined(res)) {
159
- throw new Error(`Did not get OK result from remote debugger. Result was: ${_lodash.default.truncate(simpleStringify(res), {
160
- length: RESPONSE_LOG_LENGTH
161
- })}`);
162
- } else if (_lodash.default.isString(res)) {
163
- try {
164
- res = JSON.parse(res);
165
- } catch (err) {}
166
- } else if (!_lodash.default.isObject(res)) {
167
- throw new Error(`Result has unexpected type: (${typeof res}).`);
168
- }
169
- if (res.status && res.status !== 0) {
170
- throw (0, _baseDriver.errorFromMJSONWPStatusCode)(res.status, res.value.message || res.value);
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
- return value;
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
- const getModuleRoot = _lodash.default.memoize(function getModuleRoot() {
181
- const root = _support.node.getModuleRootSync(MODULE_NAME, __filename);
182
- if (!root) {
183
- throw new Error(`Cannot find the root folder of the ${MODULE_NAME} Node.js module`);
184
- }
185
- return root;
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/IHJlcy52YWx1ZSA6IHJlcztcblxuICAvLyBnZXQgcmlkIG9mIG5vaXN5IGZ1bmN0aW9ucyBvbiBvYmplY3RzXG4gIGlmIChfLmlzT2JqZWN0KHZhbHVlKSkge1xuICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgWydjZWlsJywgJ2Nsb25lJywgJ2Zsb29yJywgJ3JvdW5kJywgJ3NjYWxlJywgJ3RvU3RyaW5nJ10pIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZVtwcm9wZXJ0eV07XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBwYXRoIHRvIHRoZSBjdXJyZW50IG1vZHVsZSdzIHJvb3QgZm9sZGVyXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZ1bGwgcGF0aCB0byBtb2R1bGUgcm9vdFxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBjdXJyZW50IG1vZHVsZSByb290IGZvbGRlciBjYW5ub3QgYmUgZGV0ZXJtaW5lZFxuICovXG5jb25zdCBnZXRNb2R1bGVSb290ID0gXy5tZW1vaXplKGZ1bmN0aW9uIGdldE1vZHVsZVJvb3QgKCkge1xuICBjb25zdCByb290ID0gbm9kZS5nZXRNb2R1bGVSb290U3luYyhNT0RVTEVfTkFNRSwgX19maWxlbmFtZSk7XG4gIGlmICghcm9vdCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgdGhlIHJvb3QgZm9sZGVyIG9mIHRoZSAke01PRFVMRV9OQU1FfSBOb2RlLmpzIG1vZHVsZWApO1xuICB9XG4gIHJldHVybiByb290O1xufSk7XG5cbmV4cG9ydCB7XG4gIGFwcEluZm9Gcm9tRGljdCwgcGFnZUFycmF5RnJvbURpY3QsIGdldERlYnVnZ2VyQXBwS2V5LFxuICBnZXRQb3NzaWJsZURlYnVnZ2VyQXBwS2V5cywgY2hlY2tQYXJhbXMsIHNpbXBsZVN0cmluZ2lmeSwgZGVmZXJyZWRQcm9taXNlLFxuICBjb252ZXJ0UmVzdWx0LCBSRVNQT05TRV9MT0dfTEVOR1RILCBnZXRNb2R1bGVSb290LFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7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
274
+ //# sourceMappingURL=utils.js.map
@@ -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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"}