appium-remote-debugger 9.1.18 → 10.0.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/CHANGELOG.md +0 -7
  2. package/README.md +5 -0
  3. package/atoms/active_element.js +50 -59
  4. package/atoms/clear.js +117 -138
  5. package/atoms/clear_local_storage.js +74 -0
  6. package/atoms/clear_session_storage.js +74 -0
  7. package/atoms/click.js +123 -157
  8. package/atoms/default_content.js +74 -0
  9. package/atoms/execute_async_script.js +9 -15
  10. package/atoms/execute_script.js +7 -14
  11. package/atoms/execute_sql.js +2 -0
  12. package/atoms/find_element.js +90 -99
  13. package/atoms/find_element_fragment.js +116 -0
  14. package/atoms/find_elements.js +92 -99
  15. package/atoms/frame_by_id_or_name.js +92 -100
  16. package/atoms/frame_by_index.js +50 -59
  17. package/atoms/get_appcache_status.js +74 -0
  18. package/atoms/get_attribute.js +89 -0
  19. package/atoms/get_attribute_value.js +67 -69
  20. package/atoms/get_effective_style.js +75 -0
  21. package/atoms/get_element_from_cache.js +3 -6
  22. package/atoms/get_frame_window.js +50 -59
  23. package/atoms/get_local_storage_item.js +74 -0
  24. package/atoms/get_local_storage_key.js +70 -0
  25. package/atoms/get_local_storage_keys.js +74 -0
  26. package/atoms/get_local_storage_size.js +74 -0
  27. package/atoms/get_location.js +3 -0
  28. package/atoms/get_session_storage_item.js +74 -0
  29. package/atoms/get_session_storage_key.js +70 -0
  30. package/atoms/get_session_storage_keys.js +74 -0
  31. package/atoms/get_session_storage_size.js +74 -0
  32. package/atoms/get_size.js +74 -74
  33. package/atoms/get_text.js +97 -98
  34. package/atoms/get_top_left_coordinates.js +88 -91
  35. package/atoms/get_value_of_css_property.js +73 -74
  36. package/atoms/is_displayed.js +91 -92
  37. package/atoms/is_editable.js +69 -0
  38. package/atoms/is_enabled.js +66 -66
  39. package/atoms/is_focusable.js +71 -0
  40. package/atoms/is_interactable.js +95 -0
  41. package/atoms/is_selected.js +66 -69
  42. package/atoms/lastupdate +7 -5
  43. package/atoms/remove_local_storage_item.js +74 -0
  44. package/atoms/remove_session_storage_item.js +74 -0
  45. package/atoms/set_local_storage_item.js +74 -0
  46. package/atoms/set_session_storage_item.js +74 -0
  47. package/atoms/submit.js +115 -136
  48. package/atoms/type.js +115 -136
  49. package/build/lib/atoms.js +9 -3
  50. package/build/lib/atoms.js.map +1 -1
  51. package/build/lib/rpc/rpc-message-handler.js +1 -1
  52. package/build/lib/rpc/rpc-message-handler.js.map +1 -1
  53. package/lib/atoms.js +9 -2
  54. package/lib/rpc/rpc-message-handler.js +1 -2
  55. package/package.json +9 -9
  56. package/scripts/build-atoms.js +2 -3
  57. package/scripts/common.js +67 -107
  58. package/atoms/element_equals_element.js +0 -83
  59. package/atoms/fireEvent.js +0 -84
  60. package/atoms/get_window_size.js +0 -8
  61. package/atoms/move_mouse.js +0 -134
  62. package/atoms/refresh.js +0 -82
  63. package/atoms/tap.js +0 -150
  64. package/atoms/title.js +0 -82
  65. package/scripts/import-atoms.js +0 -3
@@ -14,6 +14,12 @@ var _lodash = _interopRequireDefault(require("lodash"));
14
14
  var _logger = _interopRequireDefault(require("./logger"));
15
15
  var _utils = require("./utils");
16
16
  const ATOMS_CACHE = {};
17
+ function atomsStringify(obj) {
18
+ if (typeof obj === 'undefined') {
19
+ return 'undefined';
20
+ }
21
+ return JSON.stringify(obj);
22
+ }
17
23
  async function getAtom(atomName) {
18
24
  if (!_lodash.default.has(ATOMS_CACHE, atomName)) {
19
25
  const atomFileName = _path.default.resolve((0, _utils.getModuleRoot)(), 'atoms', `${atomName}.js`);
@@ -28,7 +34,7 @@ async function getAtom(atomName) {
28
34
  async function wrapScriptForFrame(script, frame) {
29
35
  _logger.default.debug(`Wrapping script for frame '${frame}'`);
30
36
  const elFromCache = await getAtom('get_element_from_cache');
31
- return `(function (window) { var document = window.document; ` + `return (${script}); })((${elFromCache.toString('utf8')})(${JSON.stringify(frame)}))`;
37
+ return `(function (window) { var document = window.document; ` + `return (${script}); })((${elFromCache.toString('utf8')})(${atomsStringify(frame)}))`;
32
38
  }
33
39
  async function getScriptForAtom(atom, args, frames = [], asyncCallBack = null) {
34
40
  const atomSrc = await getAtom(atom);
@@ -42,7 +48,7 @@ async function getScriptForAtom(atom, args, frames = [], asyncCallBack = null) {
42
48
  _logger.default.debug(`Executing '${atom}' atom in default context`);
43
49
  script = `(${atomSrc})`;
44
50
  }
45
- args = args.map(JSON.stringify);
51
+ args = args.map(atomsStringify);
46
52
  if (asyncCallBack) {
47
53
  script += `(${args.join(',')}, ${asyncCallBack}, true)`;
48
54
  } else {
@@ -52,4 +58,4 @@ async function getScriptForAtom(atom, args, frames = [], asyncCallBack = null) {
52
58
  }
53
59
  var _default = getAtom;
54
60
  exports.default = _default;
55
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfc3VwcG9ydCIsInJlcXVpcmUiLCJfcGF0aCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfbG9kYXNoIiwiX2xvZ2dlciIsIl91dGlscyIsIkFUT01TX0NBQ0hFIiwiZ2V0QXRvbSIsImF0b21OYW1lIiwiXyIsImhhcyIsImF0b21GaWxlTmFtZSIsInBhdGgiLCJyZXNvbHZlIiwiZ2V0TW9kdWxlUm9vdCIsImZzIiwicmVhZEZpbGUiLCJlIiwiRXJyb3IiLCJ3cmFwU2NyaXB0Rm9yRnJhbWUiLCJzY3JpcHQiLCJmcmFtZSIsImxvZyIsImRlYnVnIiwiZWxGcm9tQ2FjaGUiLCJ0b1N0cmluZyIsIkpTT04iLCJzdHJpbmdpZnkiLCJnZXRTY3JpcHRGb3JBdG9tIiwiYXRvbSIsImFyZ3MiLCJmcmFtZXMiLCJhc3luY0NhbGxCYWNrIiwiYXRvbVNyYyIsImxlbmd0aCIsIm1hcCIsImpvaW4iLCJfZGVmYXVsdCIsImV4cG9ydHMiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2F0b21zLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZzIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgZ2V0TW9kdWxlUm9vdCB9IGZyb20gJy4vdXRpbHMnO1xuXG5jb25zdCBBVE9NU19DQUNIRSA9IHt9O1xuXG5cbmFzeW5jIGZ1bmN0aW9uIGdldEF0b20gKGF0b21OYW1lKSB7XG4gIC8vIGNoZWNrIGlmIHdlIGhhdmUgYWxyZWFkeSBsb2FkZWQgYW5kIGNhY2hlZCB0aGlzIGF0b21cbiAgaWYgKCFfLmhhcyhBVE9NU19DQUNIRSwgYXRvbU5hbWUpKSB7XG4gICAgY29uc3QgYXRvbUZpbGVOYW1lID0gcGF0aC5yZXNvbHZlKGdldE1vZHVsZVJvb3QoKSwgJ2F0b21zJywgYCR7YXRvbU5hbWV9LmpzYCk7XG4gICAgdHJ5IHtcbiAgICAgIEFUT01TX0NBQ0hFW2F0b21OYW1lXSA9IGF3YWl0IGZzLnJlYWRGaWxlKGF0b21GaWxlTmFtZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gbG9hZCBBdG9tICcke2F0b21OYW1lfScgZnJvbSBmaWxlICcke2F0b21GaWxlTmFtZX0nYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIEFUT01TX0NBQ0hFW2F0b21OYW1lXTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JhcFNjcmlwdEZvckZyYW1lIChzY3JpcHQsIGZyYW1lKSB7XG4gIGxvZy5kZWJ1ZyhgV3JhcHBpbmcgc2NyaXB0IGZvciBmcmFtZSAnJHtmcmFtZX0nYCk7XG4gIGNvbnN0IGVsRnJvbUNhY2hlID0gYXdhaXQgZ2V0QXRvbSgnZ2V0X2VsZW1lbnRfZnJvbV9jYWNoZScpO1xuICByZXR1cm4gYChmdW5jdGlvbiAod2luZG93KSB7IHZhciBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDsgYCArXG4gICAgICAgICBgcmV0dXJuICgke3NjcmlwdH0pOyB9KSgoJHtlbEZyb21DYWNoZS50b1N0cmluZygndXRmOCcpfSkoJHtKU09OLnN0cmluZ2lmeShmcmFtZSl9KSlgO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRTY3JpcHRGb3JBdG9tIChhdG9tLCBhcmdzLCBmcmFtZXMgPSBbXSwgYXN5bmNDYWxsQmFjayA9IG51bGwpIHtcbiAgY29uc3QgYXRvbVNyYyA9IGF3YWl0IGdldEF0b20oYXRvbSk7XG4gIGxldCBzY3JpcHQ7XG4gIGlmIChmcmFtZXMubGVuZ3RoID4gMCkge1xuICAgIHNjcmlwdCA9IGF0b21TcmM7XG4gICAgZm9yIChjb25zdCBmcmFtZSBvZiBmcmFtZXMpIHtcbiAgICAgIHNjcmlwdCA9IGF3YWl0IHdyYXBTY3JpcHRGb3JGcmFtZShzY3JpcHQsIGZyYW1lKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbG9nLmRlYnVnKGBFeGVjdXRpbmcgJyR7YXRvbX0nIGF0b20gaW4gZGVmYXVsdCBjb250ZXh0YCk7XG4gICAgc2NyaXB0ID0gYCgke2F0b21TcmN9KWA7XG4gIH1cblxuICAvLyBhZGQgdGhlIGFyZ3VtZW50cywgYXMgc3RyaW5nc1xuICBhcmdzID0gYXJncy5tYXAoSlNPTi5zdHJpbmdpZnkpO1xuICBpZiAoYXN5bmNDYWxsQmFjaykge1xuICAgIHNjcmlwdCArPSBgKCR7YXJncy5qb2luKCcsJyl9LCAke2FzeW5jQ2FsbEJhY2t9LCB0cnVlKWA7XG4gIH0gZWxzZSB7XG4gICAgc2NyaXB0ICs9IGAoJHthcmdzLmpvaW4oJywnKX0pYDtcbiAgfVxuXG4gIHJldHVybiBzY3JpcHQ7XG59XG5cbmV4cG9ydCB7IGdldEF0b20sIGdldFNjcmlwdEZvckF0b20gfTtcbmV4cG9ydCBkZWZhdWx0IGdldEF0b207XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxRQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxLQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxPQUFBLEdBQUFELHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBSSxPQUFBLEdBQUFGLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBSyxNQUFBLEdBQUFMLE9BQUE7QUFFQSxNQUFNTSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBR3RCLGVBQWVDLE9BQU9BLENBQUVDLFFBQVEsRUFBRTtFQUVoQyxJQUFJLENBQUNDLGVBQUMsQ0FBQ0MsR0FBRyxDQUFDSixXQUFXLEVBQUVFLFFBQVEsQ0FBQyxFQUFFO0lBQ2pDLE1BQU1HLFlBQVksR0FBR0MsYUFBSSxDQUFDQyxPQUFPLENBQUMsSUFBQUMsb0JBQWEsRUFBQyxDQUFDLEVBQUUsT0FBTyxFQUFHLEdBQUVOLFFBQVMsS0FBSSxDQUFDO0lBQzdFLElBQUk7TUFDRkYsV0FBVyxDQUFDRSxRQUFRLENBQUMsR0FBRyxNQUFNTyxXQUFFLENBQUNDLFFBQVEsQ0FBQ0wsWUFBWSxDQUFDO0lBQ3pELENBQUMsQ0FBQyxPQUFPTSxDQUFDLEVBQUU7TUFDVixNQUFNLElBQUlDLEtBQUssQ0FBRSx3QkFBdUJWLFFBQVMsZ0JBQWVHLFlBQWEsR0FBRSxDQUFDO0lBQ2xGO0VBQ0Y7RUFFQSxPQUFPTCxXQUFXLENBQUNFLFFBQVEsQ0FBQztBQUM5QjtBQUVBLGVBQWVXLGtCQUFrQkEsQ0FBRUMsTUFBTSxFQUFFQyxLQUFLLEVBQUU7RUFDaERDLGVBQUcsQ0FBQ0MsS0FBSyxDQUFFLDhCQUE2QkYsS0FBTSxHQUFFLENBQUM7RUFDakQsTUFBTUcsV0FBVyxHQUFHLE1BQU1qQixPQUFPLENBQUMsd0JBQXdCLENBQUM7RUFDM0QsT0FBUSx1REFBc0QsR0FDdEQsV0FBVWEsTUFBTyxVQUFTSSxXQUFXLENBQUNDLFFBQVEsQ0FBQyxNQUFNLENBQUUsS0FBSUMsSUFBSSxDQUFDQyxTQUFTLENBQUNOLEtBQUssQ0FBRSxJQUFHO0FBQzlGO0FBRUEsZUFBZU8sZ0JBQWdCQSxDQUFFQyxJQUFJLEVBQUVDLElBQUksRUFBRUMsTUFBTSxHQUFHLEVBQUUsRUFBRUMsYUFBYSxHQUFHLElBQUksRUFBRTtFQUM5RSxNQUFNQyxPQUFPLEdBQUcsTUFBTTFCLE9BQU8sQ0FBQ3NCLElBQUksQ0FBQztFQUNuQyxJQUFJVCxNQUFNO0VBQ1YsSUFBSVcsTUFBTSxDQUFDRyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0lBQ3JCZCxNQUFNLEdBQUdhLE9BQU87SUFDaEIsS0FBSyxNQUFNWixLQUFLLElBQUlVLE1BQU0sRUFBRTtNQUMxQlgsTUFBTSxHQUFHLE1BQU1ELGtCQUFrQixDQUFDQyxNQUFNLEVBQUVDLEtBQUssQ0FBQztJQUNsRDtFQUNGLENBQUMsTUFBTTtJQUNMQyxlQUFHLENBQUNDLEtBQUssQ0FBRSxjQUFhTSxJQUFLLDJCQUEwQixDQUFDO0lBQ3hEVCxNQUFNLEdBQUksSUFBR2EsT0FBUSxHQUFFO0VBQ3pCO0VBR0FILElBQUksR0FBR0EsSUFBSSxDQUFDSyxHQUFHLENBQUNULElBQUksQ0FBQ0MsU0FBUyxDQUFDO0VBQy9CLElBQUlLLGFBQWEsRUFBRTtJQUNqQlosTUFBTSxJQUFLLElBQUdVLElBQUksQ0FBQ00sSUFBSSxDQUFDLEdBQUcsQ0FBRSxLQUFJSixhQUFjLFNBQVE7RUFDekQsQ0FBQyxNQUFNO0lBQ0xaLE1BQU0sSUFBSyxJQUFHVSxJQUFJLENBQUNNLElBQUksQ0FBQyxHQUFHLENBQUUsR0FBRTtFQUNqQztFQUVBLE9BQU9oQixNQUFNO0FBQ2Y7QUFBQyxJQUFBaUIsUUFBQSxHQUdjOUIsT0FBTztBQUFBK0IsT0FBQSxDQUFBQyxPQUFBLEdBQUFGLFFBQUEifQ==
61
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfc3VwcG9ydCIsInJlcXVpcmUiLCJfcGF0aCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfbG9kYXNoIiwiX2xvZ2dlciIsIl91dGlscyIsIkFUT01TX0NBQ0hFIiwiYXRvbXNTdHJpbmdpZnkiLCJvYmoiLCJKU09OIiwic3RyaW5naWZ5IiwiZ2V0QXRvbSIsImF0b21OYW1lIiwiXyIsImhhcyIsImF0b21GaWxlTmFtZSIsInBhdGgiLCJyZXNvbHZlIiwiZ2V0TW9kdWxlUm9vdCIsImZzIiwicmVhZEZpbGUiLCJlIiwiRXJyb3IiLCJ3cmFwU2NyaXB0Rm9yRnJhbWUiLCJzY3JpcHQiLCJmcmFtZSIsImxvZyIsImRlYnVnIiwiZWxGcm9tQ2FjaGUiLCJ0b1N0cmluZyIsImdldFNjcmlwdEZvckF0b20iLCJhdG9tIiwiYXJncyIsImZyYW1lcyIsImFzeW5jQ2FsbEJhY2siLCJhdG9tU3JjIiwibGVuZ3RoIiwibWFwIiwiam9pbiIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi9saWIvYXRvbXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZnMgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBnZXRNb2R1bGVSb290IH0gZnJvbSAnLi91dGlscyc7XG5cbmNvbnN0IEFUT01TX0NBQ0hFID0ge307XG5cbmZ1bmN0aW9uIGF0b21zU3RyaW5naWZ5KG9iaikge1xuICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gJ3VuZGVmaW5lZCc7XG4gIH1cbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaik7XG59XG5cblxuYXN5bmMgZnVuY3Rpb24gZ2V0QXRvbSAoYXRvbU5hbWUpIHtcbiAgLy8gY2hlY2sgaWYgd2UgaGF2ZSBhbHJlYWR5IGxvYWRlZCBhbmQgY2FjaGVkIHRoaXMgYXRvbVxuICBpZiAoIV8uaGFzKEFUT01TX0NBQ0hFLCBhdG9tTmFtZSkpIHtcbiAgICBjb25zdCBhdG9tRmlsZU5hbWUgPSBwYXRoLnJlc29sdmUoZ2V0TW9kdWxlUm9vdCgpLCAnYXRvbXMnLCBgJHthdG9tTmFtZX0uanNgKTtcbiAgICB0cnkge1xuICAgICAgQVRPTVNfQ0FDSEVbYXRvbU5hbWVdID0gYXdhaXQgZnMucmVhZEZpbGUoYXRvbUZpbGVOYW1lKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBsb2FkIEF0b20gJyR7YXRvbU5hbWV9JyBmcm9tIGZpbGUgJyR7YXRvbUZpbGVOYW1lfSdgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gQVRPTVNfQ0FDSEVbYXRvbU5hbWVdO1xufVxuXG5hc3luYyBmdW5jdGlvbiB3cmFwU2NyaXB0Rm9yRnJhbWUgKHNjcmlwdCwgZnJhbWUpIHtcbiAgbG9nLmRlYnVnKGBXcmFwcGluZyBzY3JpcHQgZm9yIGZyYW1lICcke2ZyYW1lfSdgKTtcbiAgY29uc3QgZWxGcm9tQ2FjaGUgPSBhd2FpdCBnZXRBdG9tKCdnZXRfZWxlbWVudF9mcm9tX2NhY2hlJyk7XG4gIHJldHVybiBgKGZ1bmN0aW9uICh3aW5kb3cpIHsgdmFyIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50OyBgICtcbiAgICAgICAgIGByZXR1cm4gKCR7c2NyaXB0fSk7IH0pKCgke2VsRnJvbUNhY2hlLnRvU3RyaW5nKCd1dGY4Jyl9KSgke2F0b21zU3RyaW5naWZ5KGZyYW1lKX0pKWA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFNjcmlwdEZvckF0b20gKGF0b20sIGFyZ3MsIGZyYW1lcyA9IFtdLCBhc3luY0NhbGxCYWNrID0gbnVsbCkge1xuICBjb25zdCBhdG9tU3JjID0gYXdhaXQgZ2V0QXRvbShhdG9tKTtcbiAgbGV0IHNjcmlwdDtcbiAgaWYgKGZyYW1lcy5sZW5ndGggPiAwKSB7XG4gICAgc2NyaXB0ID0gYXRvbVNyYztcbiAgICBmb3IgKGNvbnN0IGZyYW1lIG9mIGZyYW1lcykge1xuICAgICAgc2NyaXB0ID0gYXdhaXQgd3JhcFNjcmlwdEZvckZyYW1lKHNjcmlwdCwgZnJhbWUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsb2cuZGVidWcoYEV4ZWN1dGluZyAnJHthdG9tfScgYXRvbSBpbiBkZWZhdWx0IGNvbnRleHRgKTtcbiAgICBzY3JpcHQgPSBgKCR7YXRvbVNyY30pYDtcbiAgfVxuXG4gIC8vIGFkZCB0aGUgYXJndW1lbnRzLCBhcyBzdHJpbmdzXG4gIGFyZ3MgPSBhcmdzLm1hcChhdG9tc1N0cmluZ2lmeSk7XG4gIGlmIChhc3luY0NhbGxCYWNrKSB7XG4gICAgc2NyaXB0ICs9IGAoJHthcmdzLmpvaW4oJywnKX0sICR7YXN5bmNDYWxsQmFja30sIHRydWUpYDtcbiAgfSBlbHNlIHtcbiAgICBzY3JpcHQgKz0gYCgke2FyZ3Muam9pbignLCcpfSlgO1xuICB9XG5cbiAgcmV0dXJuIHNjcmlwdDtcbn1cblxuZXhwb3J0IHsgZ2V0QXRvbSwgZ2V0U2NyaXB0Rm9yQXRvbSB9O1xuZXhwb3J0IGRlZmF1bHQgZ2V0QXRvbTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLElBQUFBLFFBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLEtBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLE9BQUEsR0FBQUQsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFJLE9BQUEsR0FBQUYsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFLLE1BQUEsR0FBQUwsT0FBQTtBQUVBLE1BQU1NLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFFdEIsU0FBU0MsY0FBY0EsQ0FBQ0MsR0FBRyxFQUFFO0VBQzNCLElBQUksT0FBT0EsR0FBRyxLQUFLLFdBQVcsRUFBRTtJQUM5QixPQUFPLFdBQVc7RUFDcEI7RUFDQSxPQUFPQyxJQUFJLENBQUNDLFNBQVMsQ0FBQ0YsR0FBRyxDQUFDO0FBQzVCO0FBR0EsZUFBZUcsT0FBT0EsQ0FBRUMsUUFBUSxFQUFFO0VBRWhDLElBQUksQ0FBQ0MsZUFBQyxDQUFDQyxHQUFHLENBQUNSLFdBQVcsRUFBRU0sUUFBUSxDQUFDLEVBQUU7SUFDakMsTUFBTUcsWUFBWSxHQUFHQyxhQUFJLENBQUNDLE9BQU8sQ0FBQyxJQUFBQyxvQkFBYSxFQUFDLENBQUMsRUFBRSxPQUFPLEVBQUcsR0FBRU4sUUFBUyxLQUFJLENBQUM7SUFDN0UsSUFBSTtNQUNGTixXQUFXLENBQUNNLFFBQVEsQ0FBQyxHQUFHLE1BQU1PLFdBQUUsQ0FBQ0MsUUFBUSxDQUFDTCxZQUFZLENBQUM7SUFDekQsQ0FBQyxDQUFDLE9BQU9NLENBQUMsRUFBRTtNQUNWLE1BQU0sSUFBSUMsS0FBSyxDQUFFLHdCQUF1QlYsUUFBUyxnQkFBZUcsWUFBYSxHQUFFLENBQUM7SUFDbEY7RUFDRjtFQUVBLE9BQU9ULFdBQVcsQ0FBQ00sUUFBUSxDQUFDO0FBQzlCO0FBRUEsZUFBZVcsa0JBQWtCQSxDQUFFQyxNQUFNLEVBQUVDLEtBQUssRUFBRTtFQUNoREMsZUFBRyxDQUFDQyxLQUFLLENBQUUsOEJBQTZCRixLQUFNLEdBQUUsQ0FBQztFQUNqRCxNQUFNRyxXQUFXLEdBQUcsTUFBTWpCLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQztFQUMzRCxPQUFRLHVEQUFzRCxHQUN0RCxXQUFVYSxNQUFPLFVBQVNJLFdBQVcsQ0FBQ0MsUUFBUSxDQUFDLE1BQU0sQ0FBRSxLQUFJdEIsY0FBYyxDQUFDa0IsS0FBSyxDQUFFLElBQUc7QUFDOUY7QUFFQSxlQUFlSyxnQkFBZ0JBLENBQUVDLElBQUksRUFBRUMsSUFBSSxFQUFFQyxNQUFNLEdBQUcsRUFBRSxFQUFFQyxhQUFhLEdBQUcsSUFBSSxFQUFFO0VBQzlFLE1BQU1DLE9BQU8sR0FBRyxNQUFNeEIsT0FBTyxDQUFDb0IsSUFBSSxDQUFDO0VBQ25DLElBQUlQLE1BQU07RUFDVixJQUFJUyxNQUFNLENBQUNHLE1BQU0sR0FBRyxDQUFDLEVBQUU7SUFDckJaLE1BQU0sR0FBR1csT0FBTztJQUNoQixLQUFLLE1BQU1WLEtBQUssSUFBSVEsTUFBTSxFQUFFO01BQzFCVCxNQUFNLEdBQUcsTUFBTUQsa0JBQWtCLENBQUNDLE1BQU0sRUFBRUMsS0FBSyxDQUFDO0lBQ2xEO0VBQ0YsQ0FBQyxNQUFNO0lBQ0xDLGVBQUcsQ0FBQ0MsS0FBSyxDQUFFLGNBQWFJLElBQUssMkJBQTBCLENBQUM7SUFDeERQLE1BQU0sR0FBSSxJQUFHVyxPQUFRLEdBQUU7RUFDekI7RUFHQUgsSUFBSSxHQUFHQSxJQUFJLENBQUNLLEdBQUcsQ0FBQzlCLGNBQWMsQ0FBQztFQUMvQixJQUFJMkIsYUFBYSxFQUFFO0lBQ2pCVixNQUFNLElBQUssSUFBR1EsSUFBSSxDQUFDTSxJQUFJLENBQUMsR0FBRyxDQUFFLEtBQUlKLGFBQWMsU0FBUTtFQUN6RCxDQUFDLE1BQU07SUFDTFYsTUFBTSxJQUFLLElBQUdRLElBQUksQ0FBQ00sSUFBSSxDQUFDLEdBQUcsQ0FBRSxHQUFFO0VBQ2pDO0VBRUEsT0FBT2QsTUFBTTtBQUNmO0FBQUMsSUFBQWUsUUFBQSxHQUdjNUIsT0FBTztBQUFBNkIsT0FBQSxDQUFBQyxPQUFBLEdBQUFGLFFBQUEifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"atoms.js","names":["_support","require","_path","_interopRequireDefault","_lodash","_logger","_utils","ATOMS_CACHE","getAtom","atomName","_","has","atomFileName","path","resolve","getModuleRoot","fs","readFile","e","Error","wrapScriptForFrame","script","frame","log","debug","elFromCache","toString","JSON","stringify","getScriptForAtom","atom","args","frames","asyncCallBack","atomSrc","length","map","join","_default","exports","default"],"sources":["../../lib/atoms.js"],"sourcesContent":["import { fs } from '@appium/support';\nimport path from 'path';\nimport _ from 'lodash';\nimport log from './logger';\nimport { getModuleRoot } from './utils';\n\nconst ATOMS_CACHE = {};\n\n\nasync function getAtom (atomName) {\n // check if we have already loaded and cached this atom\n if (!_.has(ATOMS_CACHE, atomName)) {\n const atomFileName = path.resolve(getModuleRoot(), 'atoms', `${atomName}.js`);\n try {\n ATOMS_CACHE[atomName] = await fs.readFile(atomFileName);\n } catch (e) {\n throw new Error(`Unable to load Atom '${atomName}' from file '${atomFileName}'`);\n }\n }\n\n return ATOMS_CACHE[atomName];\n}\n\nasync function wrapScriptForFrame (script, frame) {\n log.debug(`Wrapping script for frame '${frame}'`);\n const elFromCache = await getAtom('get_element_from_cache');\n return `(function (window) { var document = window.document; ` +\n `return (${script}); })((${elFromCache.toString('utf8')})(${JSON.stringify(frame)}))`;\n}\n\nasync function getScriptForAtom (atom, args, frames = [], asyncCallBack = null) {\n const atomSrc = await getAtom(atom);\n let script;\n if (frames.length > 0) {\n script = atomSrc;\n for (const frame of frames) {\n script = await wrapScriptForFrame(script, frame);\n }\n } else {\n log.debug(`Executing '${atom}' atom in default context`);\n script = `(${atomSrc})`;\n }\n\n // add the arguments, as strings\n args = args.map(JSON.stringify);\n if (asyncCallBack) {\n script += `(${args.join(',')}, ${asyncCallBack}, true)`;\n } else {\n script += `(${args.join(',')})`;\n }\n\n return script;\n}\n\nexport { getAtom, getScriptForAtom };\nexport default getAtom;\n"],"mappings":";;;;;;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,OAAA,GAAAD,sBAAA,CAAAF,OAAA;AACA,IAAAI,OAAA,GAAAF,sBAAA,CAAAF,OAAA;AACA,IAAAK,MAAA,GAAAL,OAAA;AAEA,MAAMM,WAAW,GAAG,CAAC,CAAC;AAGtB,eAAeC,OAAOA,CAAEC,QAAQ,EAAE;EAEhC,IAAI,CAACC,eAAC,CAACC,GAAG,CAACJ,WAAW,EAAEE,QAAQ,CAAC,EAAE;IACjC,MAAMG,YAAY,GAAGC,aAAI,CAACC,OAAO,CAAC,IAAAC,oBAAa,EAAC,CAAC,EAAE,OAAO,EAAG,GAAEN,QAAS,KAAI,CAAC;IAC7E,IAAI;MACFF,WAAW,CAACE,QAAQ,CAAC,GAAG,MAAMO,WAAE,CAACC,QAAQ,CAACL,YAAY,CAAC;IACzD,CAAC,CAAC,OAAOM,CAAC,EAAE;MACV,MAAM,IAAIC,KAAK,CAAE,wBAAuBV,QAAS,gBAAeG,YAAa,GAAE,CAAC;IAClF;EACF;EAEA,OAAOL,WAAW,CAACE,QAAQ,CAAC;AAC9B;AAEA,eAAeW,kBAAkBA,CAAEC,MAAM,EAAEC,KAAK,EAAE;EAChDC,eAAG,CAACC,KAAK,CAAE,8BAA6BF,KAAM,GAAE,CAAC;EACjD,MAAMG,WAAW,GAAG,MAAMjB,OAAO,CAAC,wBAAwB,CAAC;EAC3D,OAAQ,uDAAsD,GACtD,WAAUa,MAAO,UAASI,WAAW,CAACC,QAAQ,CAAC,MAAM,CAAE,KAAIC,IAAI,CAACC,SAAS,CAACN,KAAK,CAAE,IAAG;AAC9F;AAEA,eAAeO,gBAAgBA,CAAEC,IAAI,EAAEC,IAAI,EAAEC,MAAM,GAAG,EAAE,EAAEC,aAAa,GAAG,IAAI,EAAE;EAC9E,MAAMC,OAAO,GAAG,MAAM1B,OAAO,CAACsB,IAAI,CAAC;EACnC,IAAIT,MAAM;EACV,IAAIW,MAAM,CAACG,MAAM,GAAG,CAAC,EAAE;IACrBd,MAAM,GAAGa,OAAO;IAChB,KAAK,MAAMZ,KAAK,IAAIU,MAAM,EAAE;MAC1BX,MAAM,GAAG,MAAMD,kBAAkB,CAACC,MAAM,EAAEC,KAAK,CAAC;IAClD;EACF,CAAC,MAAM;IACLC,eAAG,CAACC,KAAK,CAAE,cAAaM,IAAK,2BAA0B,CAAC;IACxDT,MAAM,GAAI,IAAGa,OAAQ,GAAE;EACzB;EAGAH,IAAI,GAAGA,IAAI,CAACK,GAAG,CAACT,IAAI,CAACC,SAAS,CAAC;EAC/B,IAAIK,aAAa,EAAE;IACjBZ,MAAM,IAAK,IAAGU,IAAI,CAACM,IAAI,CAAC,GAAG,CAAE,KAAIJ,aAAc,SAAQ;EACzD,CAAC,MAAM;IACLZ,MAAM,IAAK,IAAGU,IAAI,CAACM,IAAI,CAAC,GAAG,CAAE,GAAE;EACjC;EAEA,OAAOhB,MAAM;AACf;AAAC,IAAAiB,QAAA,GAGc9B,OAAO;AAAA+B,OAAA,CAAAC,OAAA,GAAAF,QAAA"}
1
+ {"version":3,"file":"atoms.js","names":["_support","require","_path","_interopRequireDefault","_lodash","_logger","_utils","ATOMS_CACHE","atomsStringify","obj","JSON","stringify","getAtom","atomName","_","has","atomFileName","path","resolve","getModuleRoot","fs","readFile","e","Error","wrapScriptForFrame","script","frame","log","debug","elFromCache","toString","getScriptForAtom","atom","args","frames","asyncCallBack","atomSrc","length","map","join","_default","exports","default"],"sources":["../../lib/atoms.js"],"sourcesContent":["import { fs } from '@appium/support';\nimport path from 'path';\nimport _ from 'lodash';\nimport log from './logger';\nimport { getModuleRoot } from './utils';\n\nconst ATOMS_CACHE = {};\n\nfunction atomsStringify(obj) {\n if (typeof obj === 'undefined') {\n return 'undefined';\n }\n return JSON.stringify(obj);\n}\n\n\nasync function getAtom (atomName) {\n // check if we have already loaded and cached this atom\n if (!_.has(ATOMS_CACHE, atomName)) {\n const atomFileName = path.resolve(getModuleRoot(), 'atoms', `${atomName}.js`);\n try {\n ATOMS_CACHE[atomName] = await fs.readFile(atomFileName);\n } catch (e) {\n throw new Error(`Unable to load Atom '${atomName}' from file '${atomFileName}'`);\n }\n }\n\n return ATOMS_CACHE[atomName];\n}\n\nasync function wrapScriptForFrame (script, frame) {\n log.debug(`Wrapping script for frame '${frame}'`);\n const elFromCache = await getAtom('get_element_from_cache');\n return `(function (window) { var document = window.document; ` +\n `return (${script}); })((${elFromCache.toString('utf8')})(${atomsStringify(frame)}))`;\n}\n\nasync function getScriptForAtom (atom, args, frames = [], asyncCallBack = null) {\n const atomSrc = await getAtom(atom);\n let script;\n if (frames.length > 0) {\n script = atomSrc;\n for (const frame of frames) {\n script = await wrapScriptForFrame(script, frame);\n }\n } else {\n log.debug(`Executing '${atom}' atom in default context`);\n script = `(${atomSrc})`;\n }\n\n // add the arguments, as strings\n args = args.map(atomsStringify);\n if (asyncCallBack) {\n script += `(${args.join(',')}, ${asyncCallBack}, true)`;\n } else {\n script += `(${args.join(',')})`;\n }\n\n return script;\n}\n\nexport { getAtom, getScriptForAtom };\nexport default getAtom;\n"],"mappings":";;;;;;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,OAAA,GAAAD,sBAAA,CAAAF,OAAA;AACA,IAAAI,OAAA,GAAAF,sBAAA,CAAAF,OAAA;AACA,IAAAK,MAAA,GAAAL,OAAA;AAEA,MAAMM,WAAW,GAAG,CAAC,CAAC;AAEtB,SAASC,cAAcA,CAACC,GAAG,EAAE;EAC3B,IAAI,OAAOA,GAAG,KAAK,WAAW,EAAE;IAC9B,OAAO,WAAW;EACpB;EACA,OAAOC,IAAI,CAACC,SAAS,CAACF,GAAG,CAAC;AAC5B;AAGA,eAAeG,OAAOA,CAAEC,QAAQ,EAAE;EAEhC,IAAI,CAACC,eAAC,CAACC,GAAG,CAACR,WAAW,EAAEM,QAAQ,CAAC,EAAE;IACjC,MAAMG,YAAY,GAAGC,aAAI,CAACC,OAAO,CAAC,IAAAC,oBAAa,EAAC,CAAC,EAAE,OAAO,EAAG,GAAEN,QAAS,KAAI,CAAC;IAC7E,IAAI;MACFN,WAAW,CAACM,QAAQ,CAAC,GAAG,MAAMO,WAAE,CAACC,QAAQ,CAACL,YAAY,CAAC;IACzD,CAAC,CAAC,OAAOM,CAAC,EAAE;MACV,MAAM,IAAIC,KAAK,CAAE,wBAAuBV,QAAS,gBAAeG,YAAa,GAAE,CAAC;IAClF;EACF;EAEA,OAAOT,WAAW,CAACM,QAAQ,CAAC;AAC9B;AAEA,eAAeW,kBAAkBA,CAAEC,MAAM,EAAEC,KAAK,EAAE;EAChDC,eAAG,CAACC,KAAK,CAAE,8BAA6BF,KAAM,GAAE,CAAC;EACjD,MAAMG,WAAW,GAAG,MAAMjB,OAAO,CAAC,wBAAwB,CAAC;EAC3D,OAAQ,uDAAsD,GACtD,WAAUa,MAAO,UAASI,WAAW,CAACC,QAAQ,CAAC,MAAM,CAAE,KAAItB,cAAc,CAACkB,KAAK,CAAE,IAAG;AAC9F;AAEA,eAAeK,gBAAgBA,CAAEC,IAAI,EAAEC,IAAI,EAAEC,MAAM,GAAG,EAAE,EAAEC,aAAa,GAAG,IAAI,EAAE;EAC9E,MAAMC,OAAO,GAAG,MAAMxB,OAAO,CAACoB,IAAI,CAAC;EACnC,IAAIP,MAAM;EACV,IAAIS,MAAM,CAACG,MAAM,GAAG,CAAC,EAAE;IACrBZ,MAAM,GAAGW,OAAO;IAChB,KAAK,MAAMV,KAAK,IAAIQ,MAAM,EAAE;MAC1BT,MAAM,GAAG,MAAMD,kBAAkB,CAACC,MAAM,EAAEC,KAAK,CAAC;IAClD;EACF,CAAC,MAAM;IACLC,eAAG,CAACC,KAAK,CAAE,cAAaI,IAAK,2BAA0B,CAAC;IACxDP,MAAM,GAAI,IAAGW,OAAQ,GAAE;EACzB;EAGAH,IAAI,GAAGA,IAAI,CAACK,GAAG,CAAC9B,cAAc,CAAC;EAC/B,IAAI2B,aAAa,EAAE;IACjBV,MAAM,IAAK,IAAGQ,IAAI,CAACM,IAAI,CAAC,GAAG,CAAE,KAAIJ,aAAc,SAAQ;EACzD,CAAC,MAAM;IACLV,MAAM,IAAK,IAAGQ,IAAI,CAACM,IAAI,CAAC,GAAG,CAAE,GAAE;EACjC;EAEA,OAAOd,MAAM;AACf;AAAC,IAAAe,QAAA,GAGc5B,OAAO;AAAA6B,OAAA,CAAAC,OAAA,GAAAF,QAAA"}
@@ -173,4 +173,4 @@ class RpcMessageHandler extends _events.default {
173
173
  }
174
174
  }
175
175
  exports.default = RpcMessageHandler;
176
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9nZ2VyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfbG9kYXNoIiwiX3N1cHBvcnQiLCJfZXZlbnRzIiwiUnBjTWVzc2FnZUhhbmRsZXIiLCJFdmVudEVtaXR0ZXJzIiwiY29uc3RydWN0b3IiLCJpc1RhcmdldEJhc2VkIiwiX2lzVGFyZ2V0QmFzZWQiLCJoYW5kbGVNZXNzYWdlIiwicGxpc3QiLCJzZWxlY3RvciIsIl9fc2VsZWN0b3IiLCJsb2ciLCJkZWJ1ZyIsImFyZ3VtZW50IiwiX19hcmd1bWVudCIsImVtaXQiLCJXSVJTaW11bGF0b3JOYW1lS2V5IiwiV0lSU2ltdWxhdG9yQnVpbGRLZXkiLCJXSVJTaW11bGF0b3JQcm9kdWN0VmVyc2lvbktleSIsIldJUkFwcGxpY2F0aW9uRGljdGlvbmFyeUtleSIsIldJUkFwcGxpY2F0aW9uSWRlbnRpZmllcktleSIsIldJUkxpc3RpbmdLZXkiLCJoYW5kbGVEYXRhTWVzc2FnZSIsInBhcnNlRGF0YUtleSIsIkpTT04iLCJwYXJzZSIsIldJUk1lc3NhZ2VEYXRhS2V5IiwidG9TdHJpbmciLCJlcnIiLCJlcnJvciIsIl8iLCJ0cnVuY2F0ZSIsInN0cmluZ2lmeSIsImxlbmd0aCIsIkVycm9yIiwibWVzc2FnZSIsImRpc3BhdGNoRGF0YU1lc3NhZ2UiLCJtc2dJZCIsIm1ldGhvZCIsInBhcmFtcyIsInJlc3VsdCIsImlzRW1wdHkiLCJsaXN0ZW5lckNvdW50IiwiX3Jlc3VsdCIsImhhcyIsInZhbHVlIiwiZXZlbnROYW1lcyIsImFyZ3MiLCJwdXNoIiwicmVjb3JkIiwiY29udGV4dCIsInN0YXJ0c1dpdGgiLCJuYW1lIiwiX3Jlc3VsdDIiLCJkYXRhS2V5IiwiaWQiLCJhcHAiLCJ0YXJnZXRJbmZvIiwib2xkVGFyZ2V0SWQiLCJuZXdUYXJnZXRJZCIsInRhcmdldElkIiwid2FybiIsInV0aWwiLCJqc29uU3RyaW5naWZ5Iiwid2FzVGhyb3duIiwiX3Jlc3VsdDMiLCJfcmVzdWx0NCIsIl9yZXN1bHQ1IiwiX3Jlc3VsdDYiLCJkZXNjcmlwdGlvbiIsImV4cG9ydHMiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3JwYy9ycGMtbWVzc2FnZS1oYW5kbGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyB1dGlsIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBFdmVudEVtaXR0ZXJzIGZyb20gJ2V2ZW50cyc7XG5cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnBjTWVzc2FnZUhhbmRsZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXJzIHtcbiAgY29uc3RydWN0b3IgKGlzVGFyZ2V0QmFzZWQgPSBmYWxzZSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmlzVGFyZ2V0QmFzZWQgPSBpc1RhcmdldEJhc2VkO1xuICB9XG5cbiAgZ2V0IGlzVGFyZ2V0QmFzZWQgKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1RhcmdldEJhc2VkO1xuICB9XG5cbiAgc2V0IGlzVGFyZ2V0QmFzZWQgKGlzVGFyZ2V0QmFzZWQpIHtcbiAgICB0aGlzLl9pc1RhcmdldEJhc2VkID0gISFpc1RhcmdldEJhc2VkO1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlTWVzc2FnZSAocGxpc3QpIHtcbiAgICBjb25zdCBzZWxlY3RvciA9IHBsaXN0Ll9fc2VsZWN0b3I7XG4gICAgaWYgKCFzZWxlY3Rvcikge1xuICAgICAgbG9nLmRlYnVnKCdHb3QgYW4gaW52YWxpZCBwbGlzdCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGFyZ3VtZW50ID0gcGxpc3QuX19hcmd1bWVudDtcbiAgICBzd2l0Y2ggKHNlbGVjdG9yKSB7XG4gICAgICBjYXNlICdfcnBjX3JlcG9ydFNldHVwOic6XG4gICAgICAgIHRoaXMuZW1pdCgnX3JwY19yZXBvcnRTZXR1cDonLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgYXJndW1lbnQuV0lSU2ltdWxhdG9yTmFtZUtleSxcbiAgICAgICAgICBhcmd1bWVudC5XSVJTaW11bGF0b3JCdWlsZEtleSxcbiAgICAgICAgICBhcmd1bWVudC5XSVJTaW11bGF0b3JQcm9kdWN0VmVyc2lvbktleVxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ19ycGNfcmVwb3J0Q29ubmVjdGVkQXBwbGljYXRpb25MaXN0Oic6XG4gICAgICAgIHRoaXMuZW1pdCgnX3JwY19yZXBvcnRDb25uZWN0ZWRBcHBsaWNhdGlvbkxpc3Q6JyxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIGFyZ3VtZW50LldJUkFwcGxpY2F0aW9uRGljdGlvbmFyeUtleVxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ19ycGNfYXBwbGljYXRpb25TZW50TGlzdGluZzonOlxuICAgICAgICB0aGlzLmVtaXQoJ19ycGNfZm9yd2FyZEdldExpc3Rpbmc6JyxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIGFyZ3VtZW50LldJUkFwcGxpY2F0aW9uSWRlbnRpZmllcktleSxcbiAgICAgICAgICBhcmd1bWVudC5XSVJMaXN0aW5nS2V5XG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnX3JwY19hcHBsaWNhdGlvbkNvbm5lY3RlZDonOlxuICAgICAgICB0aGlzLmVtaXQoJ19ycGNfYXBwbGljYXRpb25Db25uZWN0ZWQ6JywgbnVsbCwgYXJndW1lbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ19ycGNfYXBwbGljYXRpb25EaXNjb25uZWN0ZWQ6JzpcbiAgICAgICAgdGhpcy5lbWl0KCdfcnBjX2FwcGxpY2F0aW9uRGlzY29ubmVjdGVkOicsIG51bGwsIGFyZ3VtZW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdfcnBjX2FwcGxpY2F0aW9uVXBkYXRlZDonOlxuICAgICAgICB0aGlzLmVtaXQoJ19ycGNfYXBwbGljYXRpb25VcGRhdGVkOicsIG51bGwsIGFyZ3VtZW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdfcnBjX3JlcG9ydENvbm5lY3RlZERyaXZlckxpc3Q6JzpcbiAgICAgICAgdGhpcy5lbWl0KCdfcnBjX3JlcG9ydENvbm5lY3RlZERyaXZlckxpc3Q6JywgbnVsbCwgYXJndW1lbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ19ycGNfcmVwb3J0Q3VycmVudFN0YXRlOic6XG4gICAgICAgIHRoaXMuZW1pdCgnX3JwY19yZXBvcnRDdXJyZW50U3RhdGU6JywgbnVsbCwgYXJndW1lbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ19ycGNfYXBwbGljYXRpb25TZW50RGF0YTonOlxuICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZURhdGFNZXNzYWdlKHBsaXN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBsb2cuZGVidWcoYERlYnVnZ2VyIGdvdCBhIG1lc3NhZ2UgZm9yICcke3NlbGVjdG9yfScgYW5kIGhhdmUgbm8gYCArXG4gICAgICAgICAgYGhhbmRsZXIsIGRvaW5nIG5vdGhpbmcuYCk7XG4gICAgfVxuICB9XG5cbiAgcGFyc2VEYXRhS2V5IChwbGlzdCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShwbGlzdC5fX2FyZ3VtZW50LldJUk1lc3NhZ2VEYXRhS2V5LnRvU3RyaW5nKCd1dGY4JykpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLmVycm9yKGBVbnBhcnNlYWJsZSBtZXNzYWdlIGRhdGE6ICR7Xy50cnVuY2F0ZShKU09OLnN0cmluZ2lmeShwbGlzdCksIHtsZW5ndGg6IDEwMH0pfWApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcGFyc2UgbWVzc2FnZSBkYXRhOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRpc3BhdGNoRGF0YU1lc3NhZ2UgKG1zZ0lkLCBtZXRob2QsIHBhcmFtcywgcmVzdWx0LCBlcnJvcikgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXdhaXRcbiAgICBpZiAoIV8uaXNFbXB0eShtc2dJZCkpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgSGFuZGxpbmcgbWVzc2FnZSAoaWQ6ICcke21zZ0lkfScpYCk7XG4gICAgfVxuXG4gICAgaWYgKG1zZ0lkKSB7XG4gICAgICBpZiAodGhpcy5saXN0ZW5lckNvdW50KG1zZ0lkKSkge1xuICAgICAgICBpZiAoXy5oYXMocmVzdWx0Py5yZXN1bHQsICd2YWx1ZScpKSB7XG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnJlc3VsdC52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVtaXQobXNnSWQsIGVycm9yLCByZXN1bHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLmVycm9yKGBXZWIgSW5zcGVjdG9yIHJldHVybmVkIGRhdGEgZm9yIG1lc3NhZ2UgJyR7bXNnSWR9JyBgICtcbiAgICAgICAgICBgYnV0IHdlIHdlcmUgbm90IHdhaXRpbmcgZm9yIHRoYXQgbWVzc2FnZSEgYCArXG4gICAgICAgICAgYHJlc3VsdDogJyR7SlNPTi5zdHJpbmdpZnkocmVzdWx0KX0nOyBgICtcbiAgICAgICAgICBgZXJyb3I6ICcke0pTT04uc3RyaW5naWZ5KGVycm9yKX0nYCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGV2ZW50TmFtZXMgPSBbbWV0aG9kXTtcbiAgICBsZXQgYXJncyA9IFtwYXJhbXNdO1xuXG4gICAgLy8gc29tZSBldmVudHMgaGF2ZSBkaWZmZXJlbnQgbmFtZXMsIG9yIHRoZSBhcmd1bWVudHMgYXJlIG1hcHBlZCBmcm9tIHRoZVxuICAgIC8vIHBhcmFtZXRlcnMgcmVjZWl2ZWRcbiAgICBzd2l0Y2ggKG1ldGhvZCkge1xuICAgICAgY2FzZSAnUGFnZS5mcmFtZVN0b3BwZWRMb2FkaW5nJzpcbiAgICAgICAgZXZlbnROYW1lcy5wdXNoKCdQYWdlLmZyYW1lTmF2aWdhdGVkJyk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZmFsbHRocm91Z2hcbiAgICAgIGNhc2UgJ1BhZ2UuZnJhbWVOYXZpZ2F0ZWQnOlxuICAgICAgICBhcmdzID0gW2AnJHttZXRob2R9JyBldmVudGBdO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1RpbWVsaW5lLmV2ZW50UmVjb3JkZWQnOlxuICAgICAgICBhcmdzID0gW3BhcmFtcyB8fCBwYXJhbXMucmVjb3JkXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdDb25zb2xlLm1lc3NhZ2VBZGRlZCc6XG4gICAgICAgIGFyZ3MgPSBbcGFyYW1zLm1lc3NhZ2VdO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1J1bnRpbWUuZXhlY3V0aW9uQ29udGV4dENyZWF0ZWQnOlxuICAgICAgICBhcmdzID0gW3BhcmFtcy5jb250ZXh0XTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBwYXNzXG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChfLnN0YXJ0c1dpdGgobWV0aG9kLCAnTmV0d29yay4nKSkge1xuICAgICAgLy8gYWdncmVnYXRlIE5ldHdvcmsgZXZlbnRzLCBhbmQgYWRkIG9yaWdpbmFsIG1ldGhvZCBuYW1lIHRvIHRoZSBhcmd1bWVudHNcbiAgICAgIGV2ZW50TmFtZXMucHVzaCgnTmV0d29ya0V2ZW50Jyk7XG4gICAgICBhcmdzLnB1c2gobWV0aG9kKTtcbiAgICB9XG4gICAgaWYgKF8uc3RhcnRzV2l0aChtZXRob2QsICdDb25zb2xlLicpKSB7XG4gICAgICAvLyBhZ2dyZWdhdGUgTmV0d29yayBldmVudHMsIGFuZCBhZGQgb3JpZ2luYWwgbWV0aG9kIG5hbWUgdG8gdGhlIGFyZ3VtZW50c1xuICAgICAgZXZlbnROYW1lcy5wdXNoKCdDb25zb2xlRXZlbnQnKTtcbiAgICAgIGFyZ3MucHVzaChtZXRob2QpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgbmFtZSBvZiBldmVudE5hbWVzKSB7XG4gICAgICB0aGlzLmVtaXQobmFtZSwgZXJyb3IsIC4uLmFyZ3MpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGhhbmRsZURhdGFNZXNzYWdlIChwbGlzdCkge1xuICAgIGNvbnN0IGRhdGFLZXkgPSB0aGlzLnBhcnNlRGF0YUtleShwbGlzdCk7XG4gICAgbGV0IG1zZ0lkID0gKGRhdGFLZXkuaWQgfHwgJycpLnRvU3RyaW5nKCk7XG4gICAgbGV0IHJlc3VsdCA9IGRhdGFLZXkucmVzdWx0O1xuXG4gICAgbGV0IG1ldGhvZCA9IGRhdGFLZXkubWV0aG9kO1xuICAgIGxldCBwYXJhbXM7XG5cbiAgICBpZiAobWV0aG9kID09PSAnVGFyZ2V0LnRhcmdldENyZWF0ZWQnKSB7XG4gICAgICAvLyB0aGlzIGlzIGluIHJlc3BvbnNlIHRvIGEgYF9ycGNfZm9yd2FyZFNvY2tldFNldHVwOmAgY2FsbFxuICAgICAgLy8gdGFyZ2V0SW5mbzogeyB0YXJnZXRJZDogJ3BhZ2UtMScsIHR5cGU6ICdwYWdlJyB9XG4gICAgICBjb25zdCBhcHAgPSBwbGlzdC5fX2FyZ3VtZW50LldJUkFwcGxpY2F0aW9uSWRlbnRpZmllcktleTtcbiAgICAgIGNvbnN0IHRhcmdldEluZm8gPSBkYXRhS2V5LnBhcmFtcy50YXJnZXRJbmZvO1xuICAgICAgdGhpcy5lbWl0KCdUYXJnZXQudGFyZ2V0Q3JlYXRlZCcsIG51bGwsIGFwcCwgdGFyZ2V0SW5mbyk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChtZXRob2QgPT09ICdUYXJnZXQuZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQnKSB7XG4gICAgICBjb25zdCBhcHAgPSBwbGlzdC5fX2FyZ3VtZW50LldJUkFwcGxpY2F0aW9uSWRlbnRpZmllcktleTtcbiAgICAgIGNvbnN0IG9sZFRhcmdldElkID0gZGF0YUtleS5wYXJhbXMub2xkVGFyZ2V0SWQ7XG4gICAgICBjb25zdCBuZXdUYXJnZXRJZCA9IGRhdGFLZXkucGFyYW1zLm5ld1RhcmdldElkO1xuICAgICAgdGhpcy5lbWl0KCdUYXJnZXQuZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQnLCBudWxsLCBhcHAsIG9sZFRhcmdldElkLCBuZXdUYXJnZXRJZCk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChtZXRob2QgPT09ICdUYXJnZXQudGFyZ2V0RGVzdHJveWVkJykge1xuICAgICAgY29uc3QgYXBwID0gcGxpc3QuX19hcmd1bWVudC5XSVJBcHBsaWNhdGlvbklkZW50aWZpZXJLZXk7XG4gICAgICBjb25zdCB0YXJnZXRJbmZvID0gZGF0YUtleS5wYXJhbXMudGFyZ2V0SW5mbyB8fCB7dGFyZ2V0SWQ6IGRhdGFLZXkucGFyYW1zLnRhcmdldElkfTtcbiAgICAgIHRoaXMuZW1pdCgnVGFyZ2V0LnRhcmdldERlc3Ryb3llZCcsIG51bGwsIGFwcCwgdGFyZ2V0SW5mbyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFkYXRhS2V5LmVycm9yICYmIHRoaXMuaXNUYXJnZXRCYXNlZCkge1xuICAgICAgaWYgKGRhdGFLZXkubWV0aG9kICE9PSAnVGFyZ2V0LmRpc3BhdGNoTWVzc2FnZUZyb21UYXJnZXQnKSB7XG4gICAgICAgIC8vIHRoaXMgc29ydCBvZiBtZXNzYWdlLCBhdCB0aGlzIHBvaW50LCBpcyBqdXN0IGFuIGFja25vd2xlZGdlbWVudFxuICAgICAgICAvLyB0aGF0IHRoZSBvcmlnaW5hbCBtZXNzYWdlIHdhcyByZWNlaXZlZFxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIGF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgYSBUYXJnZXQtYmFzZWQgbWVzc2FnZSB3cmFwcGluZyBhIHByb3RvY29sIG1lc3NhZ2VcbiAgICAgIGxldCBtZXNzYWdlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbWVzc2FnZSA9IEpTT04ucGFyc2UoZGF0YUtleS5wYXJhbXMubWVzc2FnZSk7XG4gICAgICAgIG1zZ0lkID0gbWVzc2FnZS5pZDtcbiAgICAgICAgbWV0aG9kID0gbWVzc2FnZS5tZXRob2Q7XG4gICAgICAgIHJlc3VsdCA9IG1lc3NhZ2UucmVzdWx0IHx8IG1lc3NhZ2U7XG4gICAgICAgIHBhcmFtcyA9IHJlc3VsdC5wYXJhbXM7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgLy8gaWYgdGhpcyBoYXBwZW5zIHRoZW4gc29tZSBhc3BlY3Qgb2YgdGhlIHByb3RvY29sIGlzIG1pc3NpbmcgdG8gdXNcbiAgICAgICAgLy8gc28gcHJpbnQgdGhlIGVudGlyZSBtZXNzYWdlIHRvIGdldCB2aXNpYmlpdHkgaW50byB3aGF0IGlzIGdvaW5nIG9uXG4gICAgICAgIGxvZy5lcnJvcihgVW5leHBlY3RlZCBtZXNzYWdlIGZvcm1hdCBmcm9tIFdlYiBJbnNwZWN0b3I6YCk7XG4gICAgICAgIHRoaXMud2Fybih1dGlsLmpzb25TdHJpbmdpZnkocGxpc3QpKTtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJhbXMgPSBkYXRhS2V5LnBhcmFtcztcbiAgICB9XG5cbiAgICAvLyB3ZSBjYW4gZ2V0IGFuIGVycm9yLCBvciB3ZSBjYW4gZ2V0IGEgcmVzcG9uc2UgdGhhdCBpcyBhbiBlcnJvclxuICAgIGxldCBlcnJvciA9IGRhdGFLZXkuZXJyb3IgfHwgbnVsbDtcbiAgICBpZiAocmVzdWx0Py53YXNUaHJvd24pIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSAocmVzdWx0Py5yZXN1bHQ/LnZhbHVlIHx8IHJlc3VsdD8ucmVzdWx0Py5kZXNjcmlwdGlvbilcbiAgICAgICAgPyAocmVzdWx0Py5yZXN1bHQ/LnZhbHVlIHx8IHJlc3VsdD8ucmVzdWx0Py5kZXNjcmlwdGlvbilcbiAgICAgICAgOiAnRXJyb3Igb2NjdXJyZWQgaW4gaGFuZGxpbmcgZGF0YSBtZXNzYWdlJztcbiAgICAgIGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuZGlzcGF0Y2hEYXRhTWVzc2FnZShtc2dJZCwgbWV0aG9kLCBwYXJhbXMsIHJlc3VsdCwgZXJyb3IpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsUUFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsT0FBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBR2UsTUFBTUksaUJBQWlCLFNBQVNDLGVBQWEsQ0FBQztFQUMzREMsV0FBV0EsQ0FBRUMsYUFBYSxHQUFHLEtBQUssRUFBRTtJQUNsQyxLQUFLLENBQUMsQ0FBQztJQUVQLElBQUksQ0FBQ0EsYUFBYSxHQUFHQSxhQUFhO0VBQ3BDO0VBRUEsSUFBSUEsYUFBYUEsQ0FBQSxFQUFJO0lBQ25CLE9BQU8sSUFBSSxDQUFDQyxjQUFjO0VBQzVCO0VBRUEsSUFBSUQsYUFBYUEsQ0FBRUEsYUFBYSxFQUFFO0lBQ2hDLElBQUksQ0FBQ0MsY0FBYyxHQUFHLENBQUMsQ0FBQ0QsYUFBYTtFQUN2QztFQUVBLE1BQU1FLGFBQWFBLENBQUVDLEtBQUssRUFBRTtJQUMxQixNQUFNQyxRQUFRLEdBQUdELEtBQUssQ0FBQ0UsVUFBVTtJQUNqQyxJQUFJLENBQUNELFFBQVEsRUFBRTtNQUNiRSxlQUFHLENBQUNDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQztNQUNqQztJQUNGO0lBRUEsTUFBTUMsUUFBUSxHQUFHTCxLQUFLLENBQUNNLFVBQVU7SUFDakMsUUFBUUwsUUFBUTtNQUNkLEtBQUssbUJBQW1CO1FBQ3RCLElBQUksQ0FBQ00sSUFBSSxDQUFDLG1CQUFtQixFQUMzQixJQUFJLEVBQ0pGLFFBQVEsQ0FBQ0csbUJBQW1CLEVBQzVCSCxRQUFRLENBQUNJLG9CQUFvQixFQUM3QkosUUFBUSxDQUFDSyw2QkFDWCxDQUFDO1FBQ0Q7TUFDRixLQUFLLHNDQUFzQztR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
176
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9nZ2VyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfbG9kYXNoIiwiX3N1cHBvcnQiLCJfZXZlbnRzIiwiUnBjTWVzc2FnZUhhbmRsZXIiLCJFdmVudEVtaXR0ZXJzIiwiY29uc3RydWN0b3IiLCJpc1RhcmdldEJhc2VkIiwiX2lzVGFyZ2V0QmFzZWQiLCJoYW5kbGVNZXNzYWdlIiwicGxpc3QiLCJzZWxlY3RvciIsIl9fc2VsZWN0b3IiLCJsb2ciLCJkZWJ1ZyIsImFyZ3VtZW50IiwiX19hcmd1bWVudCIsImVtaXQiLCJXSVJTaW11bGF0b3JOYW1lS2V5IiwiV0lSU2ltdWxhdG9yQnVpbGRLZXkiLCJXSVJTaW11bGF0b3JQcm9kdWN0VmVyc2lvbktleSIsIldJUkFwcGxpY2F0aW9uRGljdGlvbmFyeUtleSIsIldJUkFwcGxpY2F0aW9uSWRlbnRpZmllcktleSIsIldJUkxpc3RpbmdLZXkiLCJoYW5kbGVEYXRhTWVzc2FnZSIsInBhcnNlRGF0YUtleSIsIkpTT04iLCJwYXJzZSIsIldJUk1lc3NhZ2VEYXRhS2V5IiwidG9TdHJpbmciLCJlcnIiLCJlcnJvciIsIl8iLCJ0cnVuY2F0ZSIsInN0cmluZ2lmeSIsImxlbmd0aCIsIkVycm9yIiwibWVzc2FnZSIsImRpc3BhdGNoRGF0YU1lc3NhZ2UiLCJtc2dJZCIsIm1ldGhvZCIsInBhcmFtcyIsInJlc3VsdCIsImlzRW1wdHkiLCJsaXN0ZW5lckNvdW50IiwiX3Jlc3VsdCIsImhhcyIsInZhbHVlIiwiZXZlbnROYW1lcyIsImFyZ3MiLCJwdXNoIiwicmVjb3JkIiwiY29udGV4dCIsInN0YXJ0c1dpdGgiLCJuYW1lIiwiX3Jlc3VsdDIiLCJkYXRhS2V5IiwiaWQiLCJhcHAiLCJ0YXJnZXRJbmZvIiwib2xkVGFyZ2V0SWQiLCJuZXdUYXJnZXRJZCIsInRhcmdldElkIiwid2FybiIsInV0aWwiLCJqc29uU3RyaW5naWZ5Iiwid2FzVGhyb3duIiwiX3Jlc3VsdDMiLCJfcmVzdWx0NCIsIl9yZXN1bHQ1IiwiX3Jlc3VsdDYiLCJkZXNjcmlwdGlvbiIsImV4cG9ydHMiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3JwYy9ycGMtbWVzc2FnZS1oYW5kbGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyB1dGlsIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBFdmVudEVtaXR0ZXJzIGZyb20gJ2V2ZW50cyc7XG5cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnBjTWVzc2FnZUhhbmRsZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXJzIHtcbiAgY29uc3RydWN0b3IgKGlzVGFyZ2V0QmFzZWQgPSBmYWxzZSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmlzVGFyZ2V0QmFzZWQgPSBpc1RhcmdldEJhc2VkO1xuICB9XG5cbiAgZ2V0IGlzVGFyZ2V0QmFzZWQgKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1RhcmdldEJhc2VkO1xuICB9XG5cbiAgc2V0IGlzVGFyZ2V0QmFzZWQgKGlzVGFyZ2V0QmFzZWQpIHtcbiAgICB0aGlzLl9pc1RhcmdldEJhc2VkID0gISFpc1RhcmdldEJhc2VkO1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlTWVzc2FnZSAocGxpc3QpIHtcbiAgICBjb25zdCBzZWxlY3RvciA9IHBsaXN0Ll9fc2VsZWN0b3I7XG4gICAgaWYgKCFzZWxlY3Rvcikge1xuICAgICAgbG9nLmRlYnVnKCdHb3QgYW4gaW52YWxpZCBwbGlzdCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGFyZ3VtZW50ID0gcGxpc3QuX19hcmd1bWVudDtcbiAgICBzd2l0Y2ggKHNlbGVjdG9yKSB7XG4gICAgICBjYXNlICdfcnBjX3JlcG9ydFNldHVwOic6XG4gICAgICAgIHRoaXMuZW1pdCgnX3JwY19yZXBvcnRTZXR1cDonLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgYXJndW1lbnQuV0lSU2ltdWxhdG9yTmFtZUtleSxcbiAgICAgICAgICBhcmd1bWVudC5XSVJTaW11bGF0b3JCdWlsZEtleSxcbiAgICAgICAgICBhcmd1bWVudC5XSVJTaW11bGF0b3JQcm9kdWN0VmVyc2lvbktleVxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ19ycGNfcmVwb3J0Q29ubmVjdGVkQXBwbGljYXRpb25MaXN0Oic6XG4gICAgICAgIHRoaXMuZW1pdCgnX3JwY19yZXBvcnRDb25uZWN0ZWRBcHBsaWNhdGlvbkxpc3Q6JyxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIGFyZ3VtZW50LldJUkFwcGxpY2F0aW9uRGljdGlvbmFyeUtleVxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ19ycGNfYXBwbGljYXRpb25TZW50TGlzdGluZzonOlxuICAgICAgICB0aGlzLmVtaXQoJ19ycGNfZm9yd2FyZEdldExpc3Rpbmc6JyxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIGFyZ3VtZW50LldJUkFwcGxpY2F0aW9uSWRlbnRpZmllcktleSxcbiAgICAgICAgICBhcmd1bWVudC5XSVJMaXN0aW5nS2V5XG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnX3JwY19hcHBsaWNhdGlvbkNvbm5lY3RlZDonOlxuICAgICAgICB0aGlzLmVtaXQoJ19ycGNfYXBwbGljYXRpb25Db25uZWN0ZWQ6JywgbnVsbCwgYXJndW1lbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ19ycGNfYXBwbGljYXRpb25EaXNjb25uZWN0ZWQ6JzpcbiAgICAgICAgdGhpcy5lbWl0KCdfcnBjX2FwcGxpY2F0aW9uRGlzY29ubmVjdGVkOicsIG51bGwsIGFyZ3VtZW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdfcnBjX2FwcGxpY2F0aW9uVXBkYXRlZDonOlxuICAgICAgICB0aGlzLmVtaXQoJ19ycGNfYXBwbGljYXRpb25VcGRhdGVkOicsIG51bGwsIGFyZ3VtZW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdfcnBjX3JlcG9ydENvbm5lY3RlZERyaXZlckxpc3Q6JzpcbiAgICAgICAgdGhpcy5lbWl0KCdfcnBjX3JlcG9ydENvbm5lY3RlZERyaXZlckxpc3Q6JywgbnVsbCwgYXJndW1lbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ19ycGNfcmVwb3J0Q3VycmVudFN0YXRlOic6XG4gICAgICAgIHRoaXMuZW1pdCgnX3JwY19yZXBvcnRDdXJyZW50U3RhdGU6JywgbnVsbCwgYXJndW1lbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ19ycGNfYXBwbGljYXRpb25TZW50RGF0YTonOlxuICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZURhdGFNZXNzYWdlKHBsaXN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBsb2cuZGVidWcoYERlYnVnZ2VyIGdvdCBhIG1lc3NhZ2UgZm9yICcke3NlbGVjdG9yfScgYW5kIGhhdmUgbm8gYCArXG4gICAgICAgICAgYGhhbmRsZXIsIGRvaW5nIG5vdGhpbmcuYCk7XG4gICAgfVxuICB9XG5cbiAgcGFyc2VEYXRhS2V5IChwbGlzdCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShwbGlzdC5fX2FyZ3VtZW50LldJUk1lc3NhZ2VEYXRhS2V5LnRvU3RyaW5nKCd1dGY4JykpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLmVycm9yKGBVbnBhcnNlYWJsZSBtZXNzYWdlIGRhdGE6ICR7Xy50cnVuY2F0ZShKU09OLnN0cmluZ2lmeShwbGlzdCksIHtsZW5ndGg6IDEwMH0pfWApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcGFyc2UgbWVzc2FnZSBkYXRhOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRpc3BhdGNoRGF0YU1lc3NhZ2UgKG1zZ0lkLCBtZXRob2QsIHBhcmFtcywgcmVzdWx0LCBlcnJvcikgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXdhaXRcbiAgICBpZiAoIV8uaXNFbXB0eShtc2dJZCkpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgSGFuZGxpbmcgbWVzc2FnZSAoaWQ6ICcke21zZ0lkfScpYCk7XG4gICAgfVxuXG4gICAgaWYgKG1zZ0lkKSB7XG4gICAgICBpZiAodGhpcy5saXN0ZW5lckNvdW50KG1zZ0lkKSkge1xuICAgICAgICBpZiAoXy5oYXMocmVzdWx0Py5yZXN1bHQsICd2YWx1ZScpKSB7XG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnJlc3VsdC52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVtaXQobXNnSWQsIGVycm9yLCByZXN1bHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLmVycm9yKGBXZWIgSW5zcGVjdG9yIHJldHVybmVkIGRhdGEgZm9yIG1lc3NhZ2UgJyR7bXNnSWR9JyBgICtcbiAgICAgICAgICBgYnV0IHdlIHdlcmUgbm90IHdhaXRpbmcgZm9yIHRoYXQgbWVzc2FnZSEgYCArXG4gICAgICAgICAgYHJlc3VsdDogJyR7SlNPTi5zdHJpbmdpZnkocmVzdWx0KX0nOyBgICtcbiAgICAgICAgICBgZXJyb3I6ICcke0pTT04uc3RyaW5naWZ5KGVycm9yKX0nYCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGV2ZW50TmFtZXMgPSBbbWV0aG9kXTtcbiAgICBsZXQgYXJncyA9IFtwYXJhbXNdO1xuXG4gICAgLy8gc29tZSBldmVudHMgaGF2ZSBkaWZmZXJlbnQgbmFtZXMsIG9yIHRoZSBhcmd1bWVudHMgYXJlIG1hcHBlZCBmcm9tIHRoZVxuICAgIC8vIHBhcmFtZXRlcnMgcmVjZWl2ZWRcbiAgICBzd2l0Y2ggKG1ldGhvZCkge1xuICAgICAgY2FzZSAnUGFnZS5mcmFtZVN0b3BwZWRMb2FkaW5nJzpcbiAgICAgICAgZXZlbnROYW1lcy5wdXNoKCdQYWdlLmZyYW1lTmF2aWdhdGVkJyk7XG4gICAgICBjYXNlICdQYWdlLmZyYW1lTmF2aWdhdGVkJzogLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1mYWxsdGhyb3VnaFxuICAgICAgICBhcmdzID0gW2AnJHttZXRob2R9JyBldmVudGBdO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1RpbWVsaW5lLmV2ZW50UmVjb3JkZWQnOlxuICAgICAgICBhcmdzID0gW3BhcmFtcyB8fCBwYXJhbXMucmVjb3JkXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdDb25zb2xlLm1lc3NhZ2VBZGRlZCc6XG4gICAgICAgIGFyZ3MgPSBbcGFyYW1zLm1lc3NhZ2VdO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1J1bnRpbWUuZXhlY3V0aW9uQ29udGV4dENyZWF0ZWQnOlxuICAgICAgICBhcmdzID0gW3BhcmFtcy5jb250ZXh0XTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBwYXNzXG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChfLnN0YXJ0c1dpdGgobWV0aG9kLCAnTmV0d29yay4nKSkge1xuICAgICAgLy8gYWdncmVnYXRlIE5ldHdvcmsgZXZlbnRzLCBhbmQgYWRkIG9yaWdpbmFsIG1ldGhvZCBuYW1lIHRvIHRoZSBhcmd1bWVudHNcbiAgICAgIGV2ZW50TmFtZXMucHVzaCgnTmV0d29ya0V2ZW50Jyk7XG4gICAgICBhcmdzLnB1c2gobWV0aG9kKTtcbiAgICB9XG4gICAgaWYgKF8uc3RhcnRzV2l0aChtZXRob2QsICdDb25zb2xlLicpKSB7XG4gICAgICAvLyBhZ2dyZWdhdGUgTmV0d29yayBldmVudHMsIGFuZCBhZGQgb3JpZ2luYWwgbWV0aG9kIG5hbWUgdG8gdGhlIGFyZ3VtZW50c1xuICAgICAgZXZlbnROYW1lcy5wdXNoKCdDb25zb2xlRXZlbnQnKTtcbiAgICAgIGFyZ3MucHVzaChtZXRob2QpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgbmFtZSBvZiBldmVudE5hbWVzKSB7XG4gICAgICB0aGlzLmVtaXQobmFtZSwgZXJyb3IsIC4uLmFyZ3MpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGhhbmRsZURhdGFNZXNzYWdlIChwbGlzdCkge1xuICAgIGNvbnN0IGRhdGFLZXkgPSB0aGlzLnBhcnNlRGF0YUtleShwbGlzdCk7XG4gICAgbGV0IG1zZ0lkID0gKGRhdGFLZXkuaWQgfHwgJycpLnRvU3RyaW5nKCk7XG4gICAgbGV0IHJlc3VsdCA9IGRhdGFLZXkucmVzdWx0O1xuXG4gICAgbGV0IG1ldGhvZCA9IGRhdGFLZXkubWV0aG9kO1xuICAgIGxldCBwYXJhbXM7XG5cbiAgICBpZiAobWV0aG9kID09PSAnVGFyZ2V0LnRhcmdldENyZWF0ZWQnKSB7XG4gICAgICAvLyB0aGlzIGlzIGluIHJlc3BvbnNlIHRvIGEgYF9ycGNfZm9yd2FyZFNvY2tldFNldHVwOmAgY2FsbFxuICAgICAgLy8gdGFyZ2V0SW5mbzogeyB0YXJnZXRJZDogJ3BhZ2UtMScsIHR5cGU6ICdwYWdlJyB9XG4gICAgICBjb25zdCBhcHAgPSBwbGlzdC5fX2FyZ3VtZW50LldJUkFwcGxpY2F0aW9uSWRlbnRpZmllcktleTtcbiAgICAgIGNvbnN0IHRhcmdldEluZm8gPSBkYXRhS2V5LnBhcmFtcy50YXJnZXRJbmZvO1xuICAgICAgdGhpcy5lbWl0KCdUYXJnZXQudGFyZ2V0Q3JlYXRlZCcsIG51bGwsIGFwcCwgdGFyZ2V0SW5mbyk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChtZXRob2QgPT09ICdUYXJnZXQuZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQnKSB7XG4gICAgICBjb25zdCBhcHAgPSBwbGlzdC5fX2FyZ3VtZW50LldJUkFwcGxpY2F0aW9uSWRlbnRpZmllcktleTtcbiAgICAgIGNvbnN0IG9sZFRhcmdldElkID0gZGF0YUtleS5wYXJhbXMub2xkVGFyZ2V0SWQ7XG4gICAgICBjb25zdCBuZXdUYXJnZXRJZCA9IGRhdGFLZXkucGFyYW1zLm5ld1RhcmdldElkO1xuICAgICAgdGhpcy5lbWl0KCdUYXJnZXQuZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQnLCBudWxsLCBhcHAsIG9sZFRhcmdldElkLCBuZXdUYXJnZXRJZCk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChtZXRob2QgPT09ICdUYXJnZXQudGFyZ2V0RGVzdHJveWVkJykge1xuICAgICAgY29uc3QgYXBwID0gcGxpc3QuX19hcmd1bWVudC5XSVJBcHBsaWNhdGlvbklkZW50aWZpZXJLZXk7XG4gICAgICBjb25zdCB0YXJnZXRJbmZvID0gZGF0YUtleS5wYXJhbXMudGFyZ2V0SW5mbyB8fCB7dGFyZ2V0SWQ6IGRhdGFLZXkucGFyYW1zLnRhcmdldElkfTtcbiAgICAgIHRoaXMuZW1pdCgnVGFyZ2V0LnRhcmdldERlc3Ryb3llZCcsIG51bGwsIGFwcCwgdGFyZ2V0SW5mbyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFkYXRhS2V5LmVycm9yICYmIHRoaXMuaXNUYXJnZXRCYXNlZCkge1xuICAgICAgaWYgKGRhdGFLZXkubWV0aG9kICE9PSAnVGFyZ2V0LmRpc3BhdGNoTWVzc2FnZUZyb21UYXJnZXQnKSB7XG4gICAgICAgIC8vIHRoaXMgc29ydCBvZiBtZXNzYWdlLCBhdCB0aGlzIHBvaW50LCBpcyBqdXN0IGFuIGFja25vd2xlZGdlbWVudFxuICAgICAgICAvLyB0aGF0IHRoZSBvcmlnaW5hbCBtZXNzYWdlIHdhcyByZWNlaXZlZFxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIGF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgYSBUYXJnZXQtYmFzZWQgbWVzc2FnZSB3cmFwcGluZyBhIHByb3RvY29sIG1lc3NhZ2VcbiAgICAgIGxldCBtZXNzYWdlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbWVzc2FnZSA9IEpTT04ucGFyc2UoZGF0YUtleS5wYXJhbXMubWVzc2FnZSk7XG4gICAgICAgIG1zZ0lkID0gbWVzc2FnZS5pZDtcbiAgICAgICAgbWV0aG9kID0gbWVzc2FnZS5tZXRob2Q7XG4gICAgICAgIHJlc3VsdCA9IG1lc3NhZ2UucmVzdWx0IHx8IG1lc3NhZ2U7XG4gICAgICAgIHBhcmFtcyA9IHJlc3VsdC5wYXJhbXM7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgLy8gaWYgdGhpcyBoYXBwZW5zIHRoZW4gc29tZSBhc3BlY3Qgb2YgdGhlIHByb3RvY29sIGlzIG1pc3NpbmcgdG8gdXNcbiAgICAgICAgLy8gc28gcHJpbnQgdGhlIGVudGlyZSBtZXNzYWdlIHRvIGdldCB2aXNpYmlpdHkgaW50byB3aGF0IGlzIGdvaW5nIG9uXG4gICAgICAgIGxvZy5lcnJvcihgVW5leHBlY3RlZCBtZXNzYWdlIGZvcm1hdCBmcm9tIFdlYiBJbnNwZWN0b3I6YCk7XG4gICAgICAgIHRoaXMud2Fybih1dGlsLmpzb25TdHJpbmdpZnkocGxpc3QpKTtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJhbXMgPSBkYXRhS2V5LnBhcmFtcztcbiAgICB9XG5cbiAgICAvLyB3ZSBjYW4gZ2V0IGFuIGVycm9yLCBvciB3ZSBjYW4gZ2V0IGEgcmVzcG9uc2UgdGhhdCBpcyBhbiBlcnJvclxuICAgIGxldCBlcnJvciA9IGRhdGFLZXkuZXJyb3IgfHwgbnVsbDtcbiAgICBpZiAocmVzdWx0Py53YXNUaHJvd24pIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSAocmVzdWx0Py5yZXN1bHQ/LnZhbHVlIHx8IHJlc3VsdD8ucmVzdWx0Py5kZXNjcmlwdGlvbilcbiAgICAgICAgPyAocmVzdWx0Py5yZXN1bHQ/LnZhbHVlIHx8IHJlc3VsdD8ucmVzdWx0Py5kZXNjcmlwdGlvbilcbiAgICAgICAgOiAnRXJyb3Igb2NjdXJyZWQgaW4gaGFuZGxpbmcgZGF0YSBtZXNzYWdlJztcbiAgICAgIGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuZGlzcGF0Y2hEYXRhTWVzc2FnZShtc2dJZCwgbWV0aG9kLCBwYXJhbXMsIHJlc3VsdCwgZXJyb3IpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsUUFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsT0FBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBR2UsTUFBTUksaUJBQWlCLFNBQVNDLGVBQWEsQ0FBQztFQUMzREMsV0FBV0EsQ0FBRUMsYUFBYSxHQUFHLEtBQUssRUFBRTtJQUNsQyxLQUFLLENBQUMsQ0FBQztJQUVQLElBQUksQ0FBQ0EsYUFBYSxHQUFHQSxhQUFhO0VBQ3BDO0VBRUEsSUFBSUEsYUFBYUEsQ0FBQSxFQUFJO0lBQ25CLE9BQU8sSUFBSSxDQUFDQyxjQUFjO0VBQzVCO0VBRUEsSUFBSUQsYUFBYUEsQ0FBRUEsYUFBYSxFQUFFO0lBQ2hDLElBQUksQ0FBQ0MsY0FBYyxHQUFHLENBQUMsQ0FBQ0QsYUFBYTtFQUN2QztFQUVBLE1BQU1FLGFBQWFBLENBQUVDLEtBQUssRUFBRTtJQUMxQixNQUFNQyxRQUFRLEdBQUdELEtBQUssQ0FBQ0UsVUFBVTtJQUNqQyxJQUFJLENBQUNELFFBQVEsRUFBRTtNQUNiRSxlQUFHLENBQUNDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQztNQUNqQztJQUNGO0lBRUEsTUFBTUMsUUFBUSxHQUFHTCxLQUFLLENBQUNNLFVBQVU7SUFDakMsUUFBUUwsUUFBUTtNQUNkLEtBQUssbUJBQW1CO1FBQ3RCLElBQUksQ0FBQ00sSUFBSSxDQUFDLG1CQUFtQixFQUMzQixJQUFJLEVBQ0pGLFFBQVEsQ0FBQ0csbUJBQW1CLEVBQzVCSCxRQUFRLENBQUNJLG9CQUFvQixFQUM3QkosUUFBUSxDQUFDSyw2QkFDWCxDQUFDO1FBQ0Q7TUFDRixLQUFLLHNDQUFzQztRQUN6QyxJQUFJ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
@@ -1 +1 @@
1
- {"version":3,"file":"rpc-message-handler.js","names":["_logger","_interopRequireDefault","require","_lodash","_support","_events","RpcMessageHandler","EventEmitters","constructor","isTargetBased","_isTargetBased","handleMessage","plist","selector","__selector","log","debug","argument","__argument","emit","WIRSimulatorNameKey","WIRSimulatorBuildKey","WIRSimulatorProductVersionKey","WIRApplicationDictionaryKey","WIRApplicationIdentifierKey","WIRListingKey","handleDataMessage","parseDataKey","JSON","parse","WIRMessageDataKey","toString","err","error","_","truncate","stringify","length","Error","message","dispatchDataMessage","msgId","method","params","result","isEmpty","listenerCount","_result","has","value","eventNames","args","push","record","context","startsWith","name","_result2","dataKey","id","app","targetInfo","oldTargetId","newTargetId","targetId","warn","util","jsonStringify","wasThrown","_result3","_result4","_result5","_result6","description","exports","default"],"sources":["../../../lib/rpc/rpc-message-handler.js"],"sourcesContent":["import log from '../logger';\nimport _ from 'lodash';\nimport { util } from '@appium/support';\nimport EventEmitters from 'events';\n\n\nexport default class RpcMessageHandler extends EventEmitters {\n constructor (isTargetBased = false) {\n super();\n\n this.isTargetBased = isTargetBased;\n }\n\n get isTargetBased () {\n return this._isTargetBased;\n }\n\n set isTargetBased (isTargetBased) {\n this._isTargetBased = !!isTargetBased;\n }\n\n async handleMessage (plist) {\n const selector = plist.__selector;\n if (!selector) {\n log.debug('Got an invalid plist');\n return;\n }\n\n const argument = plist.__argument;\n switch (selector) {\n case '_rpc_reportSetup:':\n this.emit('_rpc_reportSetup:',\n null,\n argument.WIRSimulatorNameKey,\n argument.WIRSimulatorBuildKey,\n argument.WIRSimulatorProductVersionKey\n );\n break;\n case '_rpc_reportConnectedApplicationList:':\n this.emit('_rpc_reportConnectedApplicationList:',\n null,\n argument.WIRApplicationDictionaryKey\n );\n break;\n case '_rpc_applicationSentListing:':\n this.emit('_rpc_forwardGetListing:',\n null,\n argument.WIRApplicationIdentifierKey,\n argument.WIRListingKey\n );\n break;\n case '_rpc_applicationConnected:':\n this.emit('_rpc_applicationConnected:', null, argument);\n break;\n case '_rpc_applicationDisconnected:':\n this.emit('_rpc_applicationDisconnected:', null, argument);\n break;\n case '_rpc_applicationUpdated:':\n this.emit('_rpc_applicationUpdated:', null, argument);\n break;\n case '_rpc_reportConnectedDriverList:':\n this.emit('_rpc_reportConnectedDriverList:', null, argument);\n break;\n case '_rpc_reportCurrentState:':\n this.emit('_rpc_reportCurrentState:', null, argument);\n break;\n case '_rpc_applicationSentData:':\n await this.handleDataMessage(plist);\n break;\n default:\n log.debug(`Debugger got a message for '${selector}' and have no ` +\n `handler, doing nothing.`);\n }\n }\n\n parseDataKey (plist) {\n try {\n return JSON.parse(plist.__argument.WIRMessageDataKey.toString('utf8'));\n } catch (err) {\n log.error(`Unparseable message data: ${_.truncate(JSON.stringify(plist), {length: 100})}`);\n throw new Error(`Unable to parse message data: ${err.message}`);\n }\n }\n\n async dispatchDataMessage (msgId, method, params, result, error) { // eslint-disable-line require-await\n if (!_.isEmpty(msgId)) {\n log.debug(`Handling message (id: '${msgId}')`);\n }\n\n if (msgId) {\n if (this.listenerCount(msgId)) {\n if (_.has(result?.result, 'value')) {\n result = result.result.value;\n }\n this.emit(msgId, error, result);\n } else {\n log.error(`Web Inspector returned data for message '${msgId}' ` +\n `but we were not waiting for that message! ` +\n `result: '${JSON.stringify(result)}'; ` +\n `error: '${JSON.stringify(error)}'`);\n }\n return;\n }\n\n let eventNames = [method];\n let args = [params];\n\n // some events have different names, or the arguments are mapped from the\n // parameters received\n switch (method) {\n case 'Page.frameStoppedLoading':\n eventNames.push('Page.frameNavigated');\n // eslint-disable-line no-fallthrough\n case 'Page.frameNavigated':\n args = [`'${method}' event`];\n break;\n case 'Timeline.eventRecorded':\n args = [params || params.record];\n break;\n case 'Console.messageAdded':\n args = [params.message];\n break;\n case 'Runtime.executionContextCreated':\n args = [params.context];\n break;\n default:\n // pass\n break;\n }\n\n if (_.startsWith(method, 'Network.')) {\n // aggregate Network events, and add original method name to the arguments\n eventNames.push('NetworkEvent');\n args.push(method);\n }\n if (_.startsWith(method, 'Console.')) {\n // aggregate Network events, and add original method name to the arguments\n eventNames.push('ConsoleEvent');\n args.push(method);\n }\n\n for (const name of eventNames) {\n this.emit(name, error, ...args);\n }\n }\n\n async handleDataMessage (plist) {\n const dataKey = this.parseDataKey(plist);\n let msgId = (dataKey.id || '').toString();\n let result = dataKey.result;\n\n let method = dataKey.method;\n let params;\n\n if (method === 'Target.targetCreated') {\n // this is in response to a `_rpc_forwardSocketSetup:` call\n // targetInfo: { targetId: 'page-1', type: 'page' }\n const app = plist.__argument.WIRApplicationIdentifierKey;\n const targetInfo = dataKey.params.targetInfo;\n this.emit('Target.targetCreated', null, app, targetInfo);\n return;\n } else if (method === 'Target.didCommitProvisionalTarget') {\n const app = plist.__argument.WIRApplicationIdentifierKey;\n const oldTargetId = dataKey.params.oldTargetId;\n const newTargetId = dataKey.params.newTargetId;\n this.emit('Target.didCommitProvisionalTarget', null, app, oldTargetId, newTargetId);\n return;\n } else if (method === 'Target.targetDestroyed') {\n const app = plist.__argument.WIRApplicationIdentifierKey;\n const targetInfo = dataKey.params.targetInfo || {targetId: dataKey.params.targetId};\n this.emit('Target.targetDestroyed', null, app, targetInfo);\n return;\n }\n\n if (!dataKey.error && this.isTargetBased) {\n if (dataKey.method !== 'Target.dispatchMessageFromTarget') {\n // this sort of message, at this point, is just an acknowledgement\n // that the original message was received\n return;\n }\n\n // at this point, we have a Target-based message wrapping a protocol message\n let message;\n try {\n message = JSON.parse(dataKey.params.message);\n msgId = message.id;\n method = message.method;\n result = message.result || message;\n params = result.params;\n } catch (err) {\n // if this happens then some aspect of the protocol is missing to us\n // so print the entire message to get visibiity into what is going on\n log.error(`Unexpected message format from Web Inspector:`);\n this.warn(util.jsonStringify(plist));\n throw err;\n }\n } else {\n params = dataKey.params;\n }\n\n // we can get an error, or we can get a response that is an error\n let error = dataKey.error || null;\n if (result?.wasThrown) {\n const message = (result?.result?.value || result?.result?.description)\n ? (result?.result?.value || result?.result?.description)\n : 'Error occurred in handling data message';\n error = new Error(message);\n }\n\n await this.dispatchDataMessage(msgId, method, params, result, error);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"rpc-message-handler.js","names":["_logger","_interopRequireDefault","require","_lodash","_support","_events","RpcMessageHandler","EventEmitters","constructor","isTargetBased","_isTargetBased","handleMessage","plist","selector","__selector","log","debug","argument","__argument","emit","WIRSimulatorNameKey","WIRSimulatorBuildKey","WIRSimulatorProductVersionKey","WIRApplicationDictionaryKey","WIRApplicationIdentifierKey","WIRListingKey","handleDataMessage","parseDataKey","JSON","parse","WIRMessageDataKey","toString","err","error","_","truncate","stringify","length","Error","message","dispatchDataMessage","msgId","method","params","result","isEmpty","listenerCount","_result","has","value","eventNames","args","push","record","context","startsWith","name","_result2","dataKey","id","app","targetInfo","oldTargetId","newTargetId","targetId","warn","util","jsonStringify","wasThrown","_result3","_result4","_result5","_result6","description","exports","default"],"sources":["../../../lib/rpc/rpc-message-handler.js"],"sourcesContent":["import log from '../logger';\nimport _ from 'lodash';\nimport { util } from '@appium/support';\nimport EventEmitters from 'events';\n\n\nexport default class RpcMessageHandler extends EventEmitters {\n constructor (isTargetBased = false) {\n super();\n\n this.isTargetBased = isTargetBased;\n }\n\n get isTargetBased () {\n return this._isTargetBased;\n }\n\n set isTargetBased (isTargetBased) {\n this._isTargetBased = !!isTargetBased;\n }\n\n async handleMessage (plist) {\n const selector = plist.__selector;\n if (!selector) {\n log.debug('Got an invalid plist');\n return;\n }\n\n const argument = plist.__argument;\n switch (selector) {\n case '_rpc_reportSetup:':\n this.emit('_rpc_reportSetup:',\n null,\n argument.WIRSimulatorNameKey,\n argument.WIRSimulatorBuildKey,\n argument.WIRSimulatorProductVersionKey\n );\n break;\n case '_rpc_reportConnectedApplicationList:':\n this.emit('_rpc_reportConnectedApplicationList:',\n null,\n argument.WIRApplicationDictionaryKey\n );\n break;\n case '_rpc_applicationSentListing:':\n this.emit('_rpc_forwardGetListing:',\n null,\n argument.WIRApplicationIdentifierKey,\n argument.WIRListingKey\n );\n break;\n case '_rpc_applicationConnected:':\n this.emit('_rpc_applicationConnected:', null, argument);\n break;\n case '_rpc_applicationDisconnected:':\n this.emit('_rpc_applicationDisconnected:', null, argument);\n break;\n case '_rpc_applicationUpdated:':\n this.emit('_rpc_applicationUpdated:', null, argument);\n break;\n case '_rpc_reportConnectedDriverList:':\n this.emit('_rpc_reportConnectedDriverList:', null, argument);\n break;\n case '_rpc_reportCurrentState:':\n this.emit('_rpc_reportCurrentState:', null, argument);\n break;\n case '_rpc_applicationSentData:':\n await this.handleDataMessage(plist);\n break;\n default:\n log.debug(`Debugger got a message for '${selector}' and have no ` +\n `handler, doing nothing.`);\n }\n }\n\n parseDataKey (plist) {\n try {\n return JSON.parse(plist.__argument.WIRMessageDataKey.toString('utf8'));\n } catch (err) {\n log.error(`Unparseable message data: ${_.truncate(JSON.stringify(plist), {length: 100})}`);\n throw new Error(`Unable to parse message data: ${err.message}`);\n }\n }\n\n async dispatchDataMessage (msgId, method, params, result, error) { // eslint-disable-line require-await\n if (!_.isEmpty(msgId)) {\n log.debug(`Handling message (id: '${msgId}')`);\n }\n\n if (msgId) {\n if (this.listenerCount(msgId)) {\n if (_.has(result?.result, 'value')) {\n result = result.result.value;\n }\n this.emit(msgId, error, result);\n } else {\n log.error(`Web Inspector returned data for message '${msgId}' ` +\n `but we were not waiting for that message! ` +\n `result: '${JSON.stringify(result)}'; ` +\n `error: '${JSON.stringify(error)}'`);\n }\n return;\n }\n\n let eventNames = [method];\n let args = [params];\n\n // some events have different names, or the arguments are mapped from the\n // parameters received\n switch (method) {\n case 'Page.frameStoppedLoading':\n eventNames.push('Page.frameNavigated');\n case 'Page.frameNavigated': // eslint-disable-line no-fallthrough\n args = [`'${method}' event`];\n break;\n case 'Timeline.eventRecorded':\n args = [params || params.record];\n break;\n case 'Console.messageAdded':\n args = [params.message];\n break;\n case 'Runtime.executionContextCreated':\n args = [params.context];\n break;\n default:\n // pass\n break;\n }\n\n if (_.startsWith(method, 'Network.')) {\n // aggregate Network events, and add original method name to the arguments\n eventNames.push('NetworkEvent');\n args.push(method);\n }\n if (_.startsWith(method, 'Console.')) {\n // aggregate Network events, and add original method name to the arguments\n eventNames.push('ConsoleEvent');\n args.push(method);\n }\n\n for (const name of eventNames) {\n this.emit(name, error, ...args);\n }\n }\n\n async handleDataMessage (plist) {\n const dataKey = this.parseDataKey(plist);\n let msgId = (dataKey.id || '').toString();\n let result = dataKey.result;\n\n let method = dataKey.method;\n let params;\n\n if (method === 'Target.targetCreated') {\n // this is in response to a `_rpc_forwardSocketSetup:` call\n // targetInfo: { targetId: 'page-1', type: 'page' }\n const app = plist.__argument.WIRApplicationIdentifierKey;\n const targetInfo = dataKey.params.targetInfo;\n this.emit('Target.targetCreated', null, app, targetInfo);\n return;\n } else if (method === 'Target.didCommitProvisionalTarget') {\n const app = plist.__argument.WIRApplicationIdentifierKey;\n const oldTargetId = dataKey.params.oldTargetId;\n const newTargetId = dataKey.params.newTargetId;\n this.emit('Target.didCommitProvisionalTarget', null, app, oldTargetId, newTargetId);\n return;\n } else if (method === 'Target.targetDestroyed') {\n const app = plist.__argument.WIRApplicationIdentifierKey;\n const targetInfo = dataKey.params.targetInfo || {targetId: dataKey.params.targetId};\n this.emit('Target.targetDestroyed', null, app, targetInfo);\n return;\n }\n\n if (!dataKey.error && this.isTargetBased) {\n if (dataKey.method !== 'Target.dispatchMessageFromTarget') {\n // this sort of message, at this point, is just an acknowledgement\n // that the original message was received\n return;\n }\n\n // at this point, we have a Target-based message wrapping a protocol message\n let message;\n try {\n message = JSON.parse(dataKey.params.message);\n msgId = message.id;\n method = message.method;\n result = message.result || message;\n params = result.params;\n } catch (err) {\n // if this happens then some aspect of the protocol is missing to us\n // so print the entire message to get visibiity into what is going on\n log.error(`Unexpected message format from Web Inspector:`);\n this.warn(util.jsonStringify(plist));\n throw err;\n }\n } else {\n params = dataKey.params;\n }\n\n // we can get an error, or we can get a response that is an error\n let error = dataKey.error || null;\n if (result?.wasThrown) {\n const message = (result?.result?.value || result?.result?.description)\n ? (result?.result?.value || result?.result?.description)\n : 'Error occurred in handling data message';\n error = new Error(message);\n }\n\n await this.dispatchDataMessage(msgId, method, params, result, error);\n }\n}\n"],"mappings":"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"}
package/lib/atoms.js CHANGED
@@ -6,6 +6,13 @@ import { getModuleRoot } from './utils';
6
6
 
7
7
  const ATOMS_CACHE = {};
8
8
 
9
+ function atomsStringify(obj) {
10
+ if (typeof obj === 'undefined') {
11
+ return 'undefined';
12
+ }
13
+ return JSON.stringify(obj);
14
+ }
15
+
9
16
 
10
17
  async function getAtom (atomName) {
11
18
  // check if we have already loaded and cached this atom
@@ -25,7 +32,7 @@ async function wrapScriptForFrame (script, frame) {
25
32
  log.debug(`Wrapping script for frame '${frame}'`);
26
33
  const elFromCache = await getAtom('get_element_from_cache');
27
34
  return `(function (window) { var document = window.document; ` +
28
- `return (${script}); })((${elFromCache.toString('utf8')})(${JSON.stringify(frame)}))`;
35
+ `return (${script}); })((${elFromCache.toString('utf8')})(${atomsStringify(frame)}))`;
29
36
  }
30
37
 
31
38
  async function getScriptForAtom (atom, args, frames = [], asyncCallBack = null) {
@@ -42,7 +49,7 @@ async function getScriptForAtom (atom, args, frames = [], asyncCallBack = null)
42
49
  }
43
50
 
44
51
  // add the arguments, as strings
45
- args = args.map(JSON.stringify);
52
+ args = args.map(atomsStringify);
46
53
  if (asyncCallBack) {
47
54
  script += `(${args.join(',')}, ${asyncCallBack}, true)`;
48
55
  } else {
@@ -110,8 +110,7 @@ export default class RpcMessageHandler extends EventEmitters {
110
110
  switch (method) {
111
111
  case 'Page.frameStoppedLoading':
112
112
  eventNames.push('Page.frameNavigated');
113
- // eslint-disable-line no-fallthrough
114
- case 'Page.frameNavigated':
113
+ case 'Page.frameNavigated': // eslint-disable-line no-fallthrough
115
114
  args = [`'${method}' event`];
116
115
  break;
117
116
  case 'Timeline.eventRecorded':
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "keywords": [
5
5
  "appium"
6
6
  ],
7
- "version": "9.1.18",
7
+ "version": "10.0.0-beta.2",
8
8
  "author": "Appium Contributors",
9
9
  "license": "Apache-2.0",
10
10
  "repository": {
@@ -41,7 +41,7 @@
41
41
  "asyncbox": "^2.6.0",
42
42
  "bluebird": "^3.4.7",
43
43
  "fancy-log": "^2.0.0",
44
- "glob": "^8.0.3",
44
+ "glob": "^10.3.3",
45
45
  "lodash": "^4.17.11",
46
46
  "source-map-support": "^0.x",
47
47
  "teen_process": "^2.0.0"
@@ -57,8 +57,8 @@
57
57
  "test": "mocha --exit --timeout 1m \"./test/unit/**/*-specs.js\"",
58
58
  "e2e-test": "mocha --exit --timeout 1m \"./test/functional/**/*-specs.js\"",
59
59
  "inspect-safari": "node build/bin/web_inspector_proxy.js",
60
- "build:atoms": "node scripts/build-atoms.js",
61
- "build:atoms:import": "node scripts/import-atoms.js",
60
+ "build:atoms": "npm run build:selenium && npm run build:atoms:import",
61
+ "build:atoms:import": "node scripts/build-atoms.js",
62
62
  "build:selenium": "node scripts/build-selenium.js"
63
63
  },
64
64
  "pre-commit": [
@@ -76,7 +76,7 @@
76
76
  "singleQuote": true
77
77
  },
78
78
  "devDependencies": {
79
- "@appium/eslint-config-appium": "^6.0.0",
79
+ "@appium/eslint-config-appium": "^8.0.4",
80
80
  "@babel/cli": "^7.18.10",
81
81
  "@babel/core": "^7.18.10",
82
82
  "@babel/eslint-parser": "^7.18.9",
@@ -90,13 +90,13 @@
90
90
  "chai": "^4.1.2",
91
91
  "chai-as-promised": "^7.1.1",
92
92
  "conventional-changelog-conventionalcommits": "^6.0.0",
93
- "eslint": "^7.32.0",
93
+ "eslint": "^8.46.0",
94
94
  "eslint-config-prettier": "^8.5.0",
95
95
  "finalhandler": "^1.1.2",
96
96
  "eslint-plugin-import": "^2.26.0",
97
- "eslint-plugin-mocha": "^9.0.0",
97
+ "eslint-plugin-mocha": "^10.1.0",
98
98
  "eslint-plugin-promise": "^6.0.0",
99
- "lint-staged": "^14.0.0",
99
+ "lint-staged": "^13.0.3",
100
100
  "mocha": "^10.0.0",
101
101
  "mocha-junit-reporter": "^2.0.0",
102
102
  "mocha-multi-reporters": "^1.5.1",
@@ -104,7 +104,7 @@
104
104
  "pre-commit": "^1.1.3",
105
105
  "prettier": "^3.0.0",
106
106
  "serve-static": "^1.14.1",
107
- "semantic-release": "^20.0.2",
107
+ "semantic-release": "^21.0.7",
108
108
  "sinon": "^15.0.0"
109
109
  }
110
110
  }
@@ -1,6 +1,5 @@
1
- const { importAtoms, seleniumClone } = require('./common.js');
1
+ const { importAtoms } = require('./common.js');
2
2
 
3
3
  (async () => {
4
- await seleniumClone();
5
- await importAtoms();
4
+ await importAtoms(process.argv.includes('--clean'));
6
5
  })();
package/scripts/common.js CHANGED
@@ -1,45 +1,27 @@
1
1
  const path = require('path');
2
2
  const log = require('fancy-log');
3
3
  const fs = require('fs');
4
- const { exec, SubProcess } = require('teen_process');
5
- const glob = require('glob');
6
- const B = require('bluebird');
4
+ const { exec } = require('teen_process');
5
+ const { glob } = require('glob');
7
6
 
8
- const SELENIUM_BRANCH = 'selenium-3.141.59';
7
+ const SELENIUM_BRANCH = 'selenium-4.11.0';
9
8
  const SELENIUM_GITHUB = 'https://github.com/SeleniumHQ/selenium.git';
10
9
 
10
+ const BAZEL_WD_ATOMS_TARGET = '//javascript/webdriver/atoms/...';
11
+ const BAZEL_WD_ATOMS_INJECT_TARGET = '//javascript/webdriver/atoms/inject/...';
12
+ const BAZEL_ATOMS_TARGET = '//javascript/atoms/...';
13
+
11
14
  const WORKING_ROOT_DIR = path.resolve(__dirname, '..');
12
15
  const TMP_DIRECTORY = path.resolve(WORKING_ROOT_DIR, 'tmp');
13
16
  const SELENIUM_DIRECTORY = path.resolve(TMP_DIRECTORY, 'selenium');
17
+ const BAZEL_OUT_BASEDIR = path.resolve(SELENIUM_DIRECTORY, 'bazel-out');
18
+ const JS_RELATIVE_DIR = path.join('bin', 'javascript');
19
+ const BAZEL_FRAGMENTS_DIR = path.join(JS_RELATIVE_DIR, 'atoms', 'fragments');
20
+ const BAZEL_WD_ATOMS_DIR = path.join(JS_RELATIVE_DIR, 'webdriver', 'atoms');
21
+ const BAZEL_WD_ATOMS_INJECT_DIR = path.join(BAZEL_WD_ATOMS_DIR, 'inject');
14
22
  const ATOMS_DIRECTORY = path.resolve(WORKING_ROOT_DIR, 'atoms');
15
- const ATOMS_BUILD_DIRECTORY = path.resolve(WORKING_ROOT_DIR, 'atoms_build_dir');
16
23
  const LAST_UPDATE_FILE = path.resolve(ATOMS_DIRECTORY, 'lastupdate');
17
24
 
18
- const TEMP_BUILD_DIRECTORY_NAME = 'appium-atoms-driver';
19
-
20
- const ATOMS_BUILD_TARGET = 'build_atoms';
21
-
22
-
23
- async function copyFolderRecursive(src, dest) {
24
- const entries = await fs.promises.readdir(src, { withFileTypes: true });
25
- try {
26
- await fs.promises.access(dest, fs.constants.R_OK);
27
- } catch (err) {
28
- await fs.promises.mkdir(dest, { recursive: true });
29
- }
30
- for (const entry of entries) {
31
- const srcPath = path.join(src, entry.name);
32
- const destPath = path.join(dest, entry.name);
33
- if (entry.isDirectory()) {
34
- await copyFolderRecursive(srcPath, destPath);
35
- } else if (entry.isFile()) {
36
- await fs.promises.copyFile(srcPath, destPath);
37
- } else {
38
- log(`Skip copying ${srcPath}`);
39
- }
40
- }
41
- }
42
-
43
25
  async function rmDir (dir) {
44
26
  try {
45
27
  await fs.promises.access(dir, fs.constants.R_OK);
@@ -92,7 +74,7 @@ async function atomsCleanDir () {
92
74
 
93
75
  async function atomsClean () {
94
76
  log('Building atoms');
95
- await exec('./go', ['clean'], {cwd: SELENIUM_DIRECTORY});
77
+ await exec('bazel', ['clean'], {cwd: SELENIUM_DIRECTORY});
96
78
  }
97
79
 
98
80
  async function atomsMkdir () {
@@ -100,96 +82,74 @@ async function atomsMkdir () {
100
82
  await fs.promises.mkdir(ATOMS_DIRECTORY, { recursive: true });
101
83
  }
102
84
 
103
- async function atomsInject () {
104
- log('Injecting build file into Selenium build');
105
- await copyFolderRecursive(
106
- ATOMS_BUILD_DIRECTORY, path.join(SELENIUM_DIRECTORY, 'javascript', TEMP_BUILD_DIRECTORY_NAME)
107
- );
108
- };
109
-
110
- async function atomsBuildFragments () {
111
- const proc = new SubProcess('./go', [`//javascript/${TEMP_BUILD_DIRECTORY_NAME}:${ATOMS_BUILD_TARGET}`], {
112
- cwd: SELENIUM_DIRECTORY,
113
- });
114
- proc.on('lines-stdout', function linesStdout (lines) {
115
- for (const line of lines) {
116
- // clean up the output, which has long lines
117
- // each 'fragment' of an atom produces two line of output
118
- // Generating export file for webdriver.atoms.inject.action.clear at build/javascript/webdriver/atoms/fragments/inject/clear_exports.js
119
- // Compiling //javascript/webdriver/atoms/fragments/inject:clear as build/javascript/webdriver/atoms/fragments/inject/clear.js
120
- // so split each at either 'at' or 'as'
121
- let buffer = [];
122
- for (const word of line.split(' ')) {
123
- if (['at', 'as'].includes(word)) {
124
- // output the buffer
125
- log(buffer.join(' '));
126
- // clear the buffer, and make the next line indented
127
- buffer = [` `];
128
- }
129
- // add the word to the buffer
130
- buffer.push(word);
131
- }
132
- log(buffer.join(' '));
133
- }
134
- });
135
- proc.on('lines-stderr', function linesStderr (lines) {
136
- for (const line of lines) {
137
- log.error(line);
138
- }
139
- });
140
- await new B((resolve, reject) => {
141
- proc.on('exit', function exit (code, signal) {
142
- log(`Finished with code '${code}' and signal '${signal}'`);
143
- if (code === 0) {
144
- return resolve(code);
145
- } else {
146
- return reject(code);
147
- }
148
- });
149
- proc.start();
150
- });
85
+ async function getBazelOutDir () {
86
+ log(`Finding bazel output dir`);
87
+ const outDirMatch = '*-fastbuild';
88
+ const relativeDir = (await glob(outDirMatch, {cwd: BAZEL_OUT_BASEDIR}))[0];
89
+ if (!relativeDir) {
90
+ throw new Error(`Expected architecture-specific Bazel output directory was not found in ` +
91
+ `'${BAZEL_OUT_BASEDIR}'. We looked for something matching '${outDirMatch}`);
92
+ }
93
+ return path.resolve(BAZEL_OUT_BASEDIR, relativeDir);
151
94
  }
152
95
 
153
- async function atomsCopy () {
154
- const doesPathMatch = (p) => {
155
- const dirname = path.dirname(p);
156
- if (![
157
- 'build/javascript/atoms/fragments',
158
- 'build/javascript/webdriver/atoms/fragments/inject',
159
- 'build/javascript/appium-atoms-driver'
160
- ].some((x) => dirname.endsWith(x))) {
161
- return false;
162
- }
163
- const filename = path.basename(p);
164
- if (['_exports.js', '_ie.js', '_build_atoms.js', 'deps.js'].some((x) => filename.endsWith(x))) {
165
- return false;
166
- }
167
- return true;
168
- };
96
+ async function atomsBuild () {
97
+ for (const target of [
98
+ BAZEL_ATOMS_TARGET,
99
+ BAZEL_WD_ATOMS_TARGET,
100
+ BAZEL_WD_ATOMS_INJECT_TARGET,
101
+ ]) {
102
+ log(`Running bazel build for ${target}`);
103
+ await exec('bazel', ['build', target], {cwd: SELENIUM_DIRECTORY});
104
+ }
105
+ log(`Bazel builds complete`);
106
+ }
169
107
 
170
- const filesToCopy = (await (B.promisify(glob)('**/*.js', {
108
+ async function atomsCopyAtoms (atomsDir, fileFilter = () => true) {
109
+ log(`Copying any atoms found in ${atomsDir} to atoms dir`);
110
+ const filesToCopy = (await glob('**/*-ios.js', {
171
111
  absolute: true,
172
112
  strict: false,
173
- cwd: SELENIUM_DIRECTORY,
174
- }))).filter(doesPathMatch);
175
- if (filesToCopy.length) {
176
- await B.all(filesToCopy.map((p) => fs.promises.copyFile(
177
- p, path.join(ATOMS_DIRECTORY, path.basename(p))
178
- )));
113
+ cwd: atomsDir,
114
+ })).filter(fileFilter);
115
+ for (const file of filesToCopy) {
116
+ // convert - to _ for backwards compatibility with old atoms
117
+ const newFileName = path.basename(file).replace('-ios', '').replace(/-/g, '_');
118
+ const to = path.join(ATOMS_DIRECTORY, newFileName);
119
+ log(`Copying ${file} to ${to}`);
120
+ // delete an existing file if it was put here by an earlier run of the function, to enable
121
+ // overwriting
122
+ try {
123
+ await fs.promises.unlink(to);
124
+ } catch (err) {
125
+ if (!err.message.includes('ENOENT')) {
126
+ throw err;
127
+ }
128
+ }
129
+ await fs.promises.copyFile(file, to);
179
130
  }
180
131
  }
181
132
 
182
133
  async function atomsTimestamp () {
134
+ log(`Adding timestamp to atoms build dir`);
183
135
  const {stdout} = await exec('git', ['log', '-n', '1', '--decorate=full'], {cwd: SELENIUM_DIRECTORY});
184
136
  await fs.promises.writeFile(LAST_UPDATE_FILE, Buffer.from(`${new Date()}\n\n${stdout}`));
185
137
  }
186
138
 
187
- module.exports.importAtoms = async function importAtoms() {
139
+ module.exports.importAtoms = async function importAtoms(shouldClean) {
188
140
  await atomsCleanDir();
189
- await atomsClean();
141
+ if (shouldClean) {
142
+ await atomsClean();
143
+ }
190
144
  await atomsMkdir();
191
- await atomsInject();
192
- await atomsBuildFragments();
193
- await atomsCopy();
145
+ await atomsBuild();
146
+ const bazelOutDir = await getBazelOutDir();
147
+ const atomsDir = path.resolve(bazelOutDir, BAZEL_WD_ATOMS_DIR);
148
+ const atomsInjectDir = path.resolve(bazelOutDir, BAZEL_WD_ATOMS_INJECT_DIR);
149
+ const fragmentsDir = path.resolve(bazelOutDir, BAZEL_FRAGMENTS_DIR);
150
+ await atomsCopyAtoms(fragmentsDir);
151
+ // copy fragments first and atoms later so atoms overwrite fragments
152
+ await atomsCopyAtoms(atomsDir);
153
+ await atomsCopyAtoms(atomsInjectDir);
194
154
  await atomsTimestamp();
195
155
  };