@appium/support 2.55.4 → 2.57.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/build/lib/env.d.ts +54 -0
  2. package/build/lib/env.d.ts.map +1 -0
  3. package/build/lib/env.js +102 -0
  4. package/build/lib/fs.d.ts +221 -0
  5. package/build/lib/fs.d.ts.map +1 -0
  6. package/build/lib/fs.js +74 -56
  7. package/build/lib/image-util.d.ts +56 -0
  8. package/build/lib/image-util.d.ts.map +1 -0
  9. package/build/lib/image-util.js +3 -6
  10. package/build/lib/index.d.ts +38 -0
  11. package/build/lib/index.d.ts.map +1 -0
  12. package/build/lib/index.js +36 -18
  13. package/build/lib/log-internal.d.ts +74 -0
  14. package/build/lib/log-internal.d.ts.map +1 -0
  15. package/build/lib/log-internal.js +11 -21
  16. package/build/lib/logger.d.ts +3 -0
  17. package/build/lib/logger.d.ts.map +1 -0
  18. package/build/lib/logger.js +2 -4
  19. package/build/lib/logging.d.ts +45 -0
  20. package/build/lib/logging.d.ts.map +1 -0
  21. package/build/lib/logging.js +12 -16
  22. package/build/lib/mjpeg.d.ts +65 -0
  23. package/build/lib/mjpeg.d.ts.map +1 -0
  24. package/build/lib/mjpeg.js +12 -7
  25. package/build/lib/mkdirp.d.ts +3 -0
  26. package/build/lib/mkdirp.d.ts.map +1 -0
  27. package/build/lib/mkdirp.js +7 -11
  28. package/build/lib/net.d.ts +95 -0
  29. package/build/lib/net.d.ts.map +1 -0
  30. package/build/lib/net.js +42 -26
  31. package/build/lib/node.d.ts +26 -0
  32. package/build/lib/node.d.ts.map +1 -0
  33. package/build/lib/node.js +102 -3
  34. package/build/lib/npm.d.ts +123 -0
  35. package/build/lib/npm.d.ts.map +1 -0
  36. package/build/lib/npm.js +217 -0
  37. package/build/lib/plist.d.ts +43 -0
  38. package/build/lib/plist.d.ts.map +1 -0
  39. package/build/lib/plist.js +2 -4
  40. package/build/lib/process.d.ts +3 -0
  41. package/build/lib/process.d.ts.map +1 -0
  42. package/build/lib/process.js +2 -4
  43. package/build/lib/system.d.ts +7 -0
  44. package/build/lib/system.d.ts.map +1 -0
  45. package/build/lib/system.js +2 -4
  46. package/build/lib/tempdir.d.ts +63 -0
  47. package/build/lib/tempdir.d.ts.map +1 -0
  48. package/build/lib/tempdir.js +4 -9
  49. package/build/lib/timing.d.ts +46 -0
  50. package/build/lib/timing.d.ts.map +1 -0
  51. package/build/lib/timing.js +2 -4
  52. package/build/lib/util.d.ts +183 -0
  53. package/build/lib/util.d.ts.map +1 -0
  54. package/build/lib/util.js +9 -15
  55. package/build/lib/zip.d.ts +180 -0
  56. package/build/lib/zip.d.ts.map +1 -0
  57. package/build/lib/zip.js +9 -9
  58. package/build/tsconfig.tsbuildinfo +1 -0
  59. package/lib/env.js +162 -0
  60. package/lib/fs.js +198 -69
  61. package/lib/image-util.js +23 -7
  62. package/lib/index.js +6 -6
  63. package/lib/log-internal.js +31 -38
  64. package/lib/logging.js +41 -17
  65. package/lib/mjpeg.js +14 -5
  66. package/lib/mkdirp.js +3 -6
  67. package/lib/net.js +116 -60
  68. package/lib/node.js +107 -4
  69. package/lib/npm.js +278 -0
  70. package/lib/plist.js +3 -1
  71. package/lib/tempdir.js +14 -13
  72. package/lib/util.js +36 -33
  73. package/lib/zip.js +31 -21
  74. package/package.json +31 -13
  75. package/build/test/assets/sample_binary.plist +0 -0
  76. package/build/test/assets/sample_text.plist +0 -28
  77. package/build/test/fs-specs.js +0 -264
  78. package/build/test/helpers.js +0 -35
  79. package/build/test/image-util-e2e-specs.js +0 -78
  80. package/build/test/index-specs.js +0 -49
  81. package/build/test/log-internals-specs.js +0 -97
  82. package/build/test/logger/helpers.js +0 -71
  83. package/build/test/logger/logger-force-specs.js +0 -41
  84. package/build/test/logger/logger-normal-specs.js +0 -113
  85. package/build/test/logger/logger-test-specs.js +0 -40
  86. package/build/test/mjpeg-e2e-specs.js +0 -96
  87. package/build/test/net-e2e-specs.js +0 -32
  88. package/build/test/node-e2e-specs.js +0 -22
  89. package/build/test/plist-specs.js +0 -54
  90. package/build/test/process-specs.js +0 -104
  91. package/build/test/system-specs.js +0 -136
  92. package/build/test/tempdir-specs.js +0 -86
  93. package/build/test/timing-specs.js +0 -125
  94. package/build/test/util-e2e-specs.js +0 -136
  95. package/build/test/util-specs.js +0 -537
  96. package/build/test/zip-e2e-specs.js +0 -233
package/build/lib/fs.js CHANGED
@@ -9,48 +9,48 @@ exports.fs = exports.default = void 0;
9
9
 
10
10
  require("source-map-support/register");
11
11
 
12
- var _lodash = _interopRequireDefault(require("lodash"));
12
+ var _bluebird = _interopRequireDefault(require("bluebird"));
13
13
 
14
- var _path = _interopRequireDefault(require("path"));
14
+ var _crypto = _interopRequireDefault(require("crypto"));
15
15
 
16
- var _fs2 = _interopRequireDefault(require("fs"));
16
+ var _fs = require("fs");
17
17
 
18
- var _rimraf = _interopRequireDefault(require("rimraf"));
18
+ var _glob = _interopRequireDefault(require("glob"));
19
19
 
20
- var _ncp = _interopRequireDefault(require("ncp"));
20
+ var _klaw = _interopRequireDefault(require("klaw"));
21
21
 
22
- var _bluebird = _interopRequireDefault(require("bluebird"));
22
+ var _lodash = _interopRequireDefault(require("lodash"));
23
23
 
24
24
  var _mv = _interopRequireDefault(require("mv"));
25
25
 
26
- var _which = _interopRequireDefault(require("which"));
26
+ var _ncp = _interopRequireDefault(require("ncp"));
27
27
 
28
- var _glob = _interopRequireDefault(require("glob"));
28
+ var _path = _interopRequireDefault(require("path"));
29
29
 
30
- var _crypto = _interopRequireDefault(require("crypto"));
30
+ var _pkgDir = _interopRequireDefault(require("pkg-dir"));
31
31
 
32
- var _klaw = _interopRequireDefault(require("klaw"));
32
+ var _readPkg = _interopRequireDefault(require("read-pkg"));
33
33
 
34
- var _sanitizeFilename = _interopRequireDefault(require("sanitize-filename"));
34
+ var _rimraf = _interopRequireDefault(require("rimraf"));
35
35
 
36
- var _findRoot = _interopRequireDefault(require("find-root"));
36
+ var _sanitizeFilename = _interopRequireDefault(require("sanitize-filename"));
37
37
 
38
- var _util = require("./util");
38
+ var _which = _interopRequireDefault(require("which"));
39
39
 
40
40
  var _logger = _interopRequireDefault(require("./logger"));
41
41
 
42
42
  var _timing = _interopRequireDefault(require("./timing"));
43
43
 
44
- const mkdirAsync = _bluebird.default.promisify(_fs2.default.mkdir);
44
+ var _util = require("./util");
45
45
 
46
46
  const ncpAsync = _bluebird.default.promisify(_ncp.default);
47
47
 
48
- const findRootCached = _lodash.default.memoize(_findRoot.default);
48
+ const findRootCached = _lodash.default.memoize(_pkgDir.default.sync);
49
49
 
50
50
  const fs = {
51
51
  async hasAccess(path) {
52
52
  try {
53
- await this.access(path, _fs2.default.R_OK);
53
+ await _fs.promises.access(path, _fs.constants.R_OK);
54
54
  } catch (err) {
55
55
  return false;
56
56
  }
@@ -58,37 +58,37 @@ const fs = {
58
58
  return true;
59
59
  },
60
60
 
61
- exists(path) {
62
- return this.hasAccess(path);
61
+ async exists(path) {
62
+ return await fs.hasAccess(path);
63
63
  },
64
64
 
65
65
  rimraf: _bluebird.default.promisify(_rimraf.default),
66
- rimrafSync: _rimraf.default.sync.bind(_rimraf.default),
66
+ rimrafSync: _rimraf.default.sync,
67
67
 
68
- async mkdir(...args) {
68
+ async mkdir(filepath, opts = {}) {
69
69
  try {
70
- return await mkdirAsync(...args);
70
+ return await _fs.promises.mkdir(filepath, opts);
71
71
  } catch (err) {
72
- if (err && err.code !== 'EEXIST') {
72
+ if ((err === null || err === void 0 ? void 0 : err.code) !== 'EEXIST') {
73
73
  throw err;
74
74
  }
75
75
  }
76
76
  },
77
77
 
78
- async copyFile(source, destination, ...otherArgs) {
79
- if (!(await this.hasAccess(source))) {
78
+ async copyFile(source, destination, opts = {}) {
79
+ if (!(await fs.hasAccess(source))) {
80
80
  throw new Error(`The file at '${source}' does not exist or is not accessible`);
81
81
  }
82
82
 
83
- return await ncpAsync(source, destination, ...otherArgs);
83
+ return await ncpAsync(source, destination, opts);
84
84
  },
85
85
 
86
86
  async md5(filePath) {
87
- return await this.hash(filePath, 'md5');
87
+ return await fs.hash(filePath, 'md5');
88
88
  },
89
89
 
90
90
  mv: _bluebird.default.promisify(_mv.default),
91
- which: _bluebird.default.promisify(_which.default),
91
+ which: _which.default,
92
92
  glob: _bluebird.default.promisify(_glob.default),
93
93
  sanitizeName: _sanitizeFilename.default,
94
94
 
@@ -96,14 +96,23 @@ const fs = {
96
96
  return await new _bluebird.default((resolve, reject) => {
97
97
  const fileHash = _crypto.default.createHash(algorithm);
98
98
 
99
- const readStream = _fs2.default.createReadStream(filePath);
100
-
99
+ const readStream = (0, _fs.createReadStream)(filePath);
101
100
  readStream.on('error', e => reject(new Error(`Cannot calculate ${algorithm} hash for '${filePath}'. Original error: ${e.message}`)));
102
101
  readStream.on('data', chunk => fileHash.update(chunk));
103
102
  readStream.on('end', () => resolve(fileHash.digest('hex')));
104
103
  });
105
104
  },
106
105
 
106
+ walk(dir, opts) {
107
+ return (0, _klaw.default)(dir, opts);
108
+ },
109
+
110
+ async mkdirp(dir) {
111
+ return await fs.mkdir(dir, {
112
+ recursive: true
113
+ });
114
+ },
115
+
107
116
  async walkDir(dir, recursive, callback) {
108
117
  let isValidRoot = false;
109
118
  let errMsg = null;
@@ -153,7 +162,9 @@ const fs = {
153
162
  reject(err);
154
163
  }
155
164
  }).on('end', function () {
156
- lastFileProcessed.then(resolve).catch(function (err) {
165
+ lastFileProcessed.then(file => {
166
+ resolve(file !== null && file !== void 0 ? file : null);
167
+ }).catch(function (err) {
157
168
  _logger.default.warn(`Unexpected error: ${err.message}`);
158
169
 
159
170
  reject(err);
@@ -168,11 +179,13 @@ const fs = {
168
179
  });
169
180
  },
170
181
 
171
- readPackageJsonFrom(dir) {
172
- const root = fs.findRoot(dir);
182
+ readPackageJsonFrom(dir, opts = {}) {
183
+ const cwd = fs.findRoot(dir);
173
184
 
174
185
  try {
175
- return JSON.parse(_fs2.default.readFileSync(_path.default.join(root, 'package.json'), 'utf8'));
186
+ return _readPkg.default.sync({ ...opts,
187
+ cwd
188
+ });
176
189
  } catch (err) {
177
190
  err.message = `Failed to read a \`package.json\` from dir \`${dir}\`:\n\n${err.message}`;
178
191
  throw err;
@@ -191,30 +204,35 @@ const fs = {
191
204
  }
192
205
 
193
206
  return result;
194
- }
207
+ },
195
208
 
209
+ access: _fs.promises.access,
210
+ appendFile: _fs.promises.appendFile,
211
+ chmod: _fs.promises.chmod,
212
+ close: _bluebird.default.promisify(_fs.close),
213
+ constants: _fs.constants,
214
+ createWriteStream: _fs.createWriteStream,
215
+ createReadStream: _fs.createReadStream,
216
+ lstat: _fs.promises.lstat,
217
+ open: _bluebird.default.promisify(_fs.open),
218
+ openFile: _fs.promises.open,
219
+ readdir: _fs.promises.readdir,
220
+ read: _bluebird.default.promisify(_fs.read),
221
+ readFile: _fs.promises.readFile,
222
+ readlink: _fs.promises.readlink,
223
+ realpath: _fs.promises.realpath,
224
+ rename: _fs.promises.rename,
225
+ stat: _fs.promises.stat,
226
+ symlink: _fs.promises.symlink,
227
+ unlink: _fs.promises.unlink,
228
+ write: _bluebird.default.promisify(_fs.write),
229
+ writeFile: _fs.promises.writeFile,
230
+ F_OK: _fs.constants.F_OK,
231
+ R_OK: _fs.constants.R_OK,
232
+ W_OK: _fs.constants.W_OK,
233
+ X_OK: _fs.constants.X_OK
196
234
  };
197
235
  exports.fs = fs;
198
- const simples = ['open', 'close', 'access', 'readFile', 'writeFile', 'write', 'read', 'readlink', 'chmod', 'unlink', 'readdir', 'stat', 'rename', 'lstat', 'appendFile', 'realpath', 'symlink'];
199
-
200
- for (const s of simples) {
201
- fs[s] = _bluebird.default.promisify(_fs2.default[s]);
202
- }
203
-
204
- const syncFunctions = ['createReadStream', 'createWriteStream'];
205
-
206
- for (const s of syncFunctions) {
207
- fs[s] = _fs2.default[s];
208
- }
209
-
210
- const constants = ['F_OK', 'R_OK', 'W_OK', 'X_OK', 'constants'];
211
-
212
- for (const c of constants) {
213
- fs[c] = _fs2.default[c];
214
- }
215
-
216
236
  var _default = fs;
217
- exports.default = _default;require('source-map-support').install();
218
-
219
-
220
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9mcy5qcyJdLCJuYW1lcyI6WyJta2RpckFzeW5jIiwiQiIsInByb21pc2lmeSIsIl9mcyIsIm1rZGlyIiwibmNwQXN5bmMiLCJuY3AiLCJmaW5kUm9vdENhY2hlZCIsIl8iLCJtZW1vaXplIiwiZmluZFJvb3QiLCJmcyIsImhhc0FjY2VzcyIsInBhdGgiLCJhY2Nlc3MiLCJSX09LIiwiZXJyIiwiZXhpc3RzIiwicmltcmFmIiwicmltcmFmU3luYyIsInN5bmMiLCJiaW5kIiwiYXJncyIsImNvZGUiLCJjb3B5RmlsZSIsInNvdXJjZSIsImRlc3RpbmF0aW9uIiwib3RoZXJBcmdzIiwiRXJyb3IiLCJtZDUiLCJmaWxlUGF0aCIsImhhc2giLCJtdiIsIndoaWNoIiwiZ2xvYiIsInNhbml0aXplTmFtZSIsInNhbml0aXplIiwiYWxnb3JpdGhtIiwicmVzb2x2ZSIsInJlamVjdCIsImZpbGVIYXNoIiwiY3J5cHRvIiwiY3JlYXRlSGFzaCIsInJlYWRTdHJlYW0iLCJjcmVhdGVSZWFkU3RyZWFtIiwib24iLCJlIiwibWVzc2FnZSIsImNodW5rIiwidXBkYXRlIiwiZGlnZXN0Iiwid2Fsa0RpciIsImRpciIsInJlY3Vyc2l2ZSIsImNhbGxiYWNrIiwiaXNWYWxpZFJvb3QiLCJlcnJNc2ciLCJzdGF0IiwiaXNEaXJlY3RvcnkiLCJ3YWxrZXIiLCJmaWxlQ291bnQiLCJkaXJlY3RvcnlDb3VudCIsInRpbWVyIiwiVGltZXIiLCJzdGFydCIsImxhc3RGaWxlUHJvY2Vzc2VkIiwiZGVwdGhMaW1pdCIsIml0ZW0iLCJwYXVzZSIsInN0YXRzIiwidHJ5IiwidGhlbiIsImRvbmUiLCJyZXN1bWUiLCJjYXRjaCIsImxvZyIsIndhcm4iLCJmaW5hbGx5IiwiZGVidWciLCJnZXREdXJhdGlvbiIsImFzTWlsbGlTZWNvbmRzIiwidG9GaXhlZCIsImRlc3Ryb3kiLCJyZWFkUGFja2FnZUpzb25Gcm9tIiwicm9vdCIsIkpTT04iLCJwYXJzZSIsInJlYWRGaWxlU3luYyIsImpvaW4iLCJpc0Fic29sdXRlIiwiVHlwZUVycm9yIiwicmVzdWx0Iiwic2ltcGxlcyIsInMiLCJzeW5jRnVuY3Rpb25zIiwiY29uc3RhbnRzIiwiYyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxVQUFVLEdBQUdDLGtCQUFFQyxTQUFGLENBQVlDLGFBQUlDLEtBQWhCLENBQW5COztBQUNBLE1BQU1DLFFBQVEsR0FBR0osa0JBQUVDLFNBQUYsQ0FBWUksWUFBWixDQUFqQjs7QUFDQSxNQUFNQyxjQUFjLEdBQUdDLGdCQUFFQyxPQUFGLENBQVVDLGlCQUFWLENBQXZCOztBQUVBLE1BQU1DLEVBQUUsR0FBRztBQUNULFFBQU1DLFNBQU4sQ0FBaUJDLElBQWpCLEVBQXVCO0FBQ3JCLFFBQUk7QUFDRixZQUFNLEtBQUtDLE1BQUwsQ0FBWUQsSUFBWixFQUFrQlYsYUFBSVksSUFBdEIsQ0FBTjtBQUNELEtBRkQsQ0FFRSxPQUFPQyxHQUFQLEVBQVk7QUFDWixhQUFPLEtBQVA7QUFDRDs7QUFDRCxXQUFPLElBQVA7QUFDRCxHQVJROztBQVNUQyxFQUFBQSxNQUFNLENBQUVKLElBQUYsRUFBUTtBQUFFLFdBQU8sS0FBS0QsU0FBTCxDQUFlQyxJQUFmLENBQVA7QUFBOEIsR0FUckM7O0FBVVRLLEVBQUFBLE1BQU0sRUFBRWpCLGtCQUFFQyxTQUFGLENBQVlnQixlQUFaLENBVkM7QUFXVEMsRUFBQUEsVUFBVSxFQUFFRCxnQkFBT0UsSUFBUCxDQUFZQyxJQUFaLENBQWlCSCxlQUFqQixDQVhIOztBQVlULFFBQU1kLEtBQU4sQ0FBYSxHQUFHa0IsSUFBaEIsRUFBc0I7QUFDcEIsUUFBSTtBQUNGLGFBQU8sTUFBTXRCLFVBQVUsQ0FBQyxHQUFHc0IsSUFBSixDQUF2QjtBQUNELEtBRkQsQ0FFRSxPQUFPTixHQUFQLEVBQVk7QUFD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QStCO0FBQzdCbkYsRUFBQUEsRUFBRSxDQUFDa0YsQ0FBRCxDQUFGLEdBQVExRixhQUFJMEYsQ0FBSixDQUFSO0FBQ0Q7O0FBR0QsTUFBTUUsU0FBUyxHQUFHLENBQ2hCLE1BRGdCLEVBQ1IsTUFEUSxFQUNBLE1BREEsRUFDUSxNQURSLEVBQ2dCLFdBRGhCLENBQWxCOztBQUdBLEtBQUssTUFBTUMsQ0FBWCxJQUFnQkQsU0FBaEIsRUFBMkI7QUFDekJwRixFQUFBQSxFQUFFLENBQUNxRixDQUFELENBQUYsR0FBUTdGLGFBQUk2RixDQUFKLENBQVI7QUFDRDs7ZUFHY3JGLEUiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBqc2hpbnQgaWdub3JlOiBzdGFydFxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IF9mcyBmcm9tICdmcyc7XG5pbXBvcnQgcmltcmFmIGZyb20gJ3JpbXJhZic7XG5pbXBvcnQgbmNwIGZyb20gJ25jcCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgbXYgZnJvbSAnbXYnO1xuaW1wb3J0IHdoaWNoIGZyb20gJ3doaWNoJztcbmltcG9ydCBnbG9iIGZyb20gJ2dsb2InO1xuaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IGtsYXcgZnJvbSAna2xhdyc7XG5pbXBvcnQgc2FuaXRpemUgZnJvbSAnc2FuaXRpemUtZmlsZW5hbWUnO1xuaW1wb3J0IGZpbmRSb290IGZyb20gJ2ZpbmQtcm9vdCc7XG5pbXBvcnQgeyBwbHVyYWxpemUgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgVGltZXIgZnJvbSAnLi90aW1pbmcnO1xuXG5jb25zdCBta2RpckFzeW5jID0gQi5wcm9taXNpZnkoX2ZzLm1rZGlyKTtcbmNvbnN0IG5jcEFzeW5jID0gQi5wcm9taXNpZnkobmNwKTtcbmNvbnN0IGZpbmRSb290Q2FjaGVkID0gXy5tZW1vaXplKGZpbmRSb290KTtcblxuY29uc3QgZnMgPSB7XG4gIGFzeW5jIGhhc0FjY2VzcyAocGF0aCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmFjY2VzcyhwYXRoLCBfZnMuUl9PSyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICBleGlzdHMgKHBhdGgpIHsgcmV0dXJuIHRoaXMuaGFzQWNjZXNzKHBhdGgpOyB9LFxuICByaW1yYWY6IEIucHJvbWlzaWZ5KHJpbXJhZiksXG4gIHJpbXJhZlN5bmM6IHJpbXJhZi5zeW5jLmJpbmQocmltcmFmKSxcbiAgYXN5bmMgbWtkaXIgKC4uLmFyZ3MpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IG1rZGlyQXN5bmMoLi4uYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyICYmIGVyci5jb2RlICE9PSAnRUVYSVNUJykge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBhc3luYyBjb3B5RmlsZSAoc291cmNlLCBkZXN0aW5hdGlvbiwgLi4ub3RoZXJBcmdzKSB7XG4gICAgaWYgKCFhd2FpdCB0aGlzLmhhc0FjY2Vzcyhzb3VyY2UpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBmaWxlIGF0ICcke3NvdXJjZX0nIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBhY2Nlc3NpYmxlYCk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCBuY3BBc3luYyhzb3VyY2UsIGRlc3RpbmF0aW9uLCAuLi5vdGhlckFyZ3MpO1xuICB9LFxuICBhc3luYyBtZDUgKGZpbGVQYXRoKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuaGFzaChmaWxlUGF0aCwgJ21kNScpO1xuICB9LFxuICBtdjogQi5wcm9taXNpZnkobXYpLFxuICB3aGljaDogQi5wcm9taXNpZnkod2hpY2gpLFxuICBnbG9iOiBCLnByb21pc2lmeShnbG9iKSxcbiAgc2FuaXRpemVOYW1lOiBzYW5pdGl6ZSxcbiAgYXN5bmMgaGFzaCAoZmlsZVBhdGgsIGFsZ29yaXRobSA9ICdzaGExJykge1xuICAgIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBmaWxlSGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKGFsZ29yaXRobSk7XG4gICAgICBjb25zdCByZWFkU3RyZWFtID0gX2ZzLmNyZWF0ZVJlYWRTdHJlYW0oZmlsZVBhdGgpO1xuICAgICAgcmVhZFN0cmVhbS5vbignZXJyb3InLCAoZSkgPT4gcmVqZWN0KFxuICAgICAgICBuZXcgRXJyb3IoYENhbm5vdCBjYWxjdWxhdGUgJHthbGdvcml0aG19IGhhc2ggZm9yICcke2ZpbGVQYXRofScuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKSkpO1xuICAgICAgcmVhZFN0cmVhbS5vbignZGF0YScsIChjaHVuaykgPT4gZmlsZUhhc2gudXBkYXRlKGNodW5rKSk7XG4gICAgICByZWFkU3RyZWFtLm9uKCdlbmQnLCAoKSA9PiByZXNvbHZlKGZpbGVIYXNoLmRpZ2VzdCgnaGV4JykpKTtcbiAgICB9KTtcbiAgfSxcbiAgLyoqIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aGljaCB3aWxsIGJlIGNhbGxlZCBkdXJpbmcgdGhlIGRpcmVjdG9yeSB3YWxraW5nXG4gICAqIEBuYW1lIFdhbGtEaXJDYWxsYmFja1xuICAgKiBAZnVuY3Rpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IGl0ZW1QYXRoIFRoZSBwYXRoIG9mIHRoZSBmaWxlIG9yIGZvbGRlclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzRGlyZWN0b3J5IFNob3dzIGlmIGl0IGlzIGEgZGlyZWN0b3J5IG9yIGEgZmlsZVxuICAgKiBAcmV0dXJuIHtib29sZWFufSByZXR1cm4gdHJ1ZSBpZiB5b3Ugd2FudCB0byBzdG9wIHdhbGtpbmdcbiAgKi9cblxuICAvKipcbiAgICogV2Fsa3MgYSBkaXJlY3RvcnkgZ2l2ZW4gYWNjb3JkaW5nIHRvIHRoZSBwYXJhbWV0ZXJzIGdpdmVuLiBUaGUgY2FsbGJhY2sgd2lsbCBiZSBpbnZva2VkIHdpdGggYSBwYXRoIGpvaW5lZCB3aXRoIHRoZSBkaXIgcGFyYW1ldGVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkaXIgRGlyZWN0b3J5IHBhdGggd2hlcmUgd2Ugd2lsbCBzdGFydCB3YWxraW5nXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gcmVjdXJzaXZlIFNldCBpdCB0byB0cnVlIGlmIHlvdSB3YW50IHRvIGNvbnRpbnVlIHdhbGtpbmcgc3ViIGRpcmVjdG9yaWVzXG4gICAqIEBwYXJhbSB7V2Fsa0RpckNhbGxiYWNrfSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIHdoZW4gYSBuZXcgcGF0aCBpcyBmb3VuZFxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGBkaXJgIHBhcmFtZXRlciBjb250YWlucyBhIHBhdGggdG8gYW4gaW52YWxpZCBmb2xkZXJcbiAgICogQHJldHVybiB7P3N0cmluZ30gcmV0dXJucyB0aGUgZm91bmQgcGF0aCBvciBudWxsIGlmIHRoZSBpdGVtIHdhcyBub3QgZm91bmRcbiAgICovXG4gIGFzeW5jIHdhbGtEaXIgKGRpciwgcmVjdXJzaXZlLCBjYWxsYmFjaykgeyAvL2VzbGludC1kaXNhYmxlLWxpbmUgcHJvbWlzZS9wcmVmZXItYXdhaXQtdG8tY2FsbGJhY2tzXG4gICAgbGV0IGlzVmFsaWRSb290ID0gZmFsc2U7XG4gICAgbGV0IGVyck1zZyA9IG51bGw7XG4gICAgdHJ5IHtcbiAgICAgIGlzVmFsaWRSb290ID0gKGF3YWl0IGZzLnN0YXQoZGlyKSkuaXNEaXJlY3RvcnkoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJNc2cgPSBlLm1lc3NhZ2U7XG4gICAgfVxuICAgIGlmICghaXNWYWxpZFJvb3QpIHtcbiAgICAgIHRocm93IEVycm9yKGAnJHtkaXJ9JyBpcyBub3QgYSB2YWxpZCByb290IGRpcmVjdG9yeWAgKyAoZXJyTXNnID8gYC4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyTXNnfWAgOiAnJykpO1xuICAgIH1cblxuICAgIGxldCB3YWxrZXI7XG4gICAgbGV0IGZpbGVDb3VudCA9IDA7XG4gICAgbGV0IGRpcmVjdG9yeUNvdW50ID0gMDtcbiAgICBjb25zdCB0aW1lciA9IG5ldyBUaW1lcigpLnN0YXJ0KCk7XG4gICAgcmV0dXJuIGF3YWl0IG5ldyBCKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGxldCBsYXN0RmlsZVByb2Nlc3NlZCA9IEIucmVzb2x2ZSgpO1xuICAgICAgd2Fsa2VyID0ga2xhdyhkaXIsIHtcbiAgICAgICAgZGVwdGhMaW1pdDogcmVjdXJzaXZlID8gLTEgOiAwLFxuICAgICAgfSk7XG4gICAgICB3YWxrZXIub24oJ2RhdGEnLCBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICB3YWxrZXIucGF1c2UoKTtcblxuICAgICAgICBpZiAoIWl0ZW0uc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgIGZpbGVDb3VudCsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRpcmVjdG9yeUNvdW50Kys7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJvbWlzZS9wcmVmZXItYXdhaXQtdG8tY2FsbGJhY2tzXG4gICAgICAgIGxhc3RGaWxlUHJvY2Vzc2VkID0gQi50cnkoYXN5bmMgKCkgPT4gYXdhaXQgY2FsbGJhY2soaXRlbS5wYXRoLCBpdGVtLnN0YXRzLmlzRGlyZWN0b3J5KCkpKVxuICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChkb25lID0gZmFsc2UpIHtcbiAgICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICAgIHJlc29sdmUoaXRlbS5wYXRoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHdhbGtlci5yZXN1bWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChyZWplY3QpO1xuICAgICAgfSlcbiAgICAgIC5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyLCBpdGVtKSB7XG4gICAgICAgIGxvZy53YXJuKGBHb3QgYW4gZXJyb3Igd2hpbGUgd2Fsa2luZyAnJHtpdGVtLnBhdGh9JzogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgLy8ga2xhdyBjYW5ub3QgZ2V0IGJhY2sgZnJvbSBhbiBFTk9FTlQgZXJyb3JcbiAgICAgICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAgIGxvZy53YXJuKCdBbGwgZmlsZXMgbWF5IG5vdCBoYXZlIGJlZW4gYWNjZXNzZWQnKTtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBsYXN0RmlsZVByb2Nlc3NlZFxuICAgICAgICAgIC50aGVuKHJlc29sdmUpXG4gICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGxvZy53YXJuKGBVbmV4cGVjdGVkIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KS5maW5hbGx5KGZ1bmN0aW9uICgpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgVHJhdmVyc2VkICR7cGx1cmFsaXplKCdkaXJlY3RvcnknLCBkaXJlY3RvcnlDb3VudCwgdHJ1ZSl9IGAgK1xuICAgICAgICBgYW5kICR7cGx1cmFsaXplKCdmaWxlJywgZmlsZUNvdW50LCB0cnVlKX0gYCArXG4gICAgICAgIGBpbiAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2ApO1xuICAgICAgaWYgKHdhbGtlcikge1xuICAgICAgICB3YWxrZXIuZGVzdHJveSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LFxuICAvKipcbiAgICogUmVhZHMgdGhlIGNsb3Nlc3QgYHBhY2thZ2UuanNvbmAgZmlsZSBmcm9tIGFic29sdXRlIHBhdGggYGRpcmAuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkaXIgLSBEaXJlY3RvcnkgdG8gc2VhcmNoIGZyb21cbiAgICogQHRocm93cyB7VHlwZUVycm9yfSBJZiBgZGlyYCBpcyBub3QgYSBub25lbXB0eSBzdHJpbmcgb3IgcmVsYXRpdmUgcGF0aFxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2VyZSBwcm9ibGVtcyBmaW5kaW5nIG9yIHJlYWRpbmcgYSBgcGFja2FnZS5qc29uYCBmaWxlXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IEEgcGFyc2VkIGBwYWNrYWdlLmpzb25gXG4gICAqL1xuICByZWFkUGFja2FnZUpzb25Gcm9tIChkaXIpIHtcbiAgICBjb25zdCByb290ID0gZnMuZmluZFJvb3QoZGlyKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UoX2ZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4ocm9vdCwgJ3BhY2thZ2UuanNvbicpLCAndXRmOCcpKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVyci5tZXNzYWdlID0gYEZhaWxlZCB0byByZWFkIGEgXFxgcGFja2FnZS5qc29uXFxgIGZyb20gZGlyIFxcYCR7ZGlyfVxcYDpcXG5cXG4ke2Vyci5tZXNzYWdlfWA7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9LFxuICAvKipcbiAgICogRmluZHMgdGhlIHByb2plY3Qgcm9vdCBkaXJlY3RvcnkgZnJvbSBgZGlyYC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGRpciAtIERpcmVjdG9yeSB0byBzZWFyY2ggZnJvbVxuICAgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIGBkaXJgIGlzIG5vdCBhIG5vbmVtcHR5IHN0cmluZyBvciByZWxhdGl2ZSBwYXRoXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3ZXJlIHByb2JsZW1zIGZpbmRpbmcgdGhlIHByb2plY3Qgcm9vdFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY2xvc2VzZXQgcGFyZW50IGRpciBjb250YWluaW5nIGBwYWNrYWdlLmpzb25gXG4gICAqL1xuICBmaW5kUm9vdCAoZGlyKSB7XG4gICAgaWYgKCFkaXIgfHwgIXBhdGguaXNBYnNvbHV0ZShkaXIpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdgZmluZFJvb3QoKWAgbXVzdCBiZSBwcm92aWRlZCBhIG5vbi1lbXB0eSwgYWJzb2x1dGUgcGF0aCcpO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSBmaW5kUm9vdENhY2hlZChkaXIpO1xuICAgIGlmICghcmVzdWx0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFxcYGZpbmRSb290KClcXGAgY291bGQgbm90IGZpbmQgXFxgcGFja2FnZS5qc29uXFxgIGZyb20gJHtkaXJ9YCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn07XG5cbi8vIGFkZCB0aGUgc3VwcG9ydGVkIGBmc2AgZnVuY3Rpb25zXG5jb25zdCBzaW1wbGVzID0gW1xuICAnb3BlbicsICdjbG9zZScsICdhY2Nlc3MnLCAncmVhZEZpbGUnLCAnd3JpdGVGaWxlJywgJ3dyaXRlJywgJ3JlYWQnLFxuICAncmVhZGxpbmsnLCAnY2htb2QnLCAndW5saW5rJywgJ3JlYWRkaXInLCAnc3RhdCcsICdyZW5hbWUnLCAnbHN0YXQnLFxuICAnYXBwZW5kRmlsZScsICdyZWFscGF0aCcsICdzeW1saW5rJyxcbl07XG5mb3IgKGNvbnN0IHMgb2Ygc2ltcGxlcykge1xuICBmc1tzXSA9IEIucHJvbWlzaWZ5KF9mc1tzXSk7XG59XG5cbmNvbnN0IHN5bmNGdW5jdGlvbnMgPSBbXG4gICdjcmVhdGVSZWFkU3RyZWFtJyxcbiAgJ2NyZWF0ZVdyaXRlU3RyZWFtJyxcbl07XG5mb3IgKGNvbnN0IHMgb2Ygc3luY0Z1bmN0aW9ucykge1xuICBmc1tzXSA9IF9mc1tzXTtcbn1cblxuLy8gYWRkIHRoZSBjb25zdGFudHMgZnJvbSBgZnNgXG5jb25zdCBjb25zdGFudHMgPSBbXG4gICdGX09LJywgJ1JfT0snLCAnV19PSycsICdYX09LJywgJ2NvbnN0YW50cycsXG5dO1xuZm9yIChjb25zdCBjIG9mIGNvbnN0YW50cykge1xuICBmc1tjXSA9IF9mc1tjXTtcbn1cblxuZXhwb3J0IHsgZnMgfTtcbmV4cG9ydCBkZWZhdWx0IGZzO1xuIl0sImZpbGUiOiJsaWIvZnMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
237
+ exports.default = _default;
238
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9mcy5qcyJdLCJuYW1lcyI6WyJuY3BBc3luYyIsIkIiLCJwcm9taXNpZnkiLCJuY3AiLCJmaW5kUm9vdENhY2hlZCIsIl8iLCJtZW1vaXplIiwicGtnRGlyIiwic3luYyIsImZzIiwiaGFzQWNjZXNzIiwicGF0aCIsImZzUHJvbWlzZXMiLCJhY2Nlc3MiLCJjb25zdGFudHMiLCJSX09LIiwiZXJyIiwiZXhpc3RzIiwicmltcmFmIiwicmltcmFmSWR4IiwicmltcmFmU3luYyIsIm1rZGlyIiwiZmlsZXBhdGgiLCJvcHRzIiwiY29kZSIsImNvcHlGaWxlIiwic291cmNlIiwiZGVzdGluYXRpb24iLCJFcnJvciIsIm1kNSIsImZpbGVQYXRoIiwiaGFzaCIsIm12Iiwid2hpY2giLCJnbG9iIiwic2FuaXRpemVOYW1lIiwic2FuaXRpemUiLCJhbGdvcml0aG0iLCJyZXNvbHZlIiwicmVqZWN0IiwiZmlsZUhhc2giLCJjcnlwdG8iLCJjcmVhdGVIYXNoIiwicmVhZFN0cmVhbSIsIm9uIiwiZSIsIm1lc3NhZ2UiLCJjaHVuayIsInVwZGF0ZSIsImRpZ2VzdCIsIndhbGsiLCJkaXIiLCJta2RpcnAiLCJyZWN1cnNpdmUiLCJ3YWxrRGlyIiwiY2FsbGJhY2siLCJpc1ZhbGlkUm9vdCIsImVyck1zZyIsInN0YXQiLCJpc0RpcmVjdG9yeSIsIndhbGtlciIsImZpbGVDb3VudCIsImRpcmVjdG9yeUNvdW50IiwidGltZXIiLCJUaW1lciIsInN0YXJ0IiwibGFzdEZpbGVQcm9jZXNzZWQiLCJkZXB0aExpbWl0IiwiaXRlbSIsInBhdXNlIiwic3RhdHMiLCJ0cnkiLCJ0aGVuIiwiZG9uZSIsInJlc3VtZSIsImNhdGNoIiwibG9nIiwid2FybiIsImZpbGUiLCJmaW5hbGx5IiwiZGVidWciLCJnZXREdXJhdGlvbiIsImFzTWlsbGlTZWNvbmRzIiwidG9GaXhlZCIsImRlc3Ryb3kiLCJyZWFkUGFja2FnZUpzb25Gcm9tIiwiY3dkIiwiZmluZFJvb3QiLCJyZWFkUGtnIiwiaXNBYnNvbHV0ZSIsIlR5cGVFcnJvciIsInJlc3VsdCIsImFwcGVuZEZpbGUiLCJjaG1vZCIsImNsb3NlIiwiY3JlYXRlV3JpdGVTdHJlYW0iLCJjcmVhdGVSZWFkU3RyZWFtIiwibHN0YXQiLCJvcGVuIiwib3BlbkZpbGUiLCJyZWFkZGlyIiwicmVhZCIsInJlYWRGaWxlIiwicmVhZGxpbmsiLCJyZWFscGF0aCIsInJlbmFtZSIsInN5bWxpbmsiLCJ1bmxpbmsiLCJ3cml0ZSIsIndyaXRlRmlsZSIsIkZfT0siLCJXX09LIiwiWF9PSyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxRQUFRLEdBQXlGQyxrQkFBRUMsU0FBRixDQUFZQyxZQUFaLENBQXZHOztBQUNBLE1BQU1DLGNBQWMsR0FBR0MsZ0JBQUVDLE9BQUYsQ0FBVUMsZ0JBQU9DLElBQWpCLENBQXZCOztBQUVBLE1BQU1DLEVBQUUsR0FBRztBQU1ULFFBQU1DLFNBQU4sQ0FBaUJDLElBQWpCLEVBQXVCO0FBQ3JCLFFBQUk7QUFDRixZQUFNQyxhQUFXQyxNQUFYLENBQWtCRixJQUFsQixFQUF3QkcsY0FBVUMsSUFBbEMsQ0FBTjtBQUNELEtBRkQsQ0FFRSxPQUFPQyxHQUFQLEVBQVk7QUFDWixhQUFPLEtBQVA7QUFDRDs7QUFDRCxXQUFPLElBQVA7QUFDRCxHQWJROztBQW1CVCxRQUFNQyxNQUFOLENBQWNOLElBQWQsRUFBb0I7QUFDbEIsV0FBTyxNQUFNRixFQUFFLENBQUNDLFNBQUgsQ0FBYUMsSUFBYixDQUFiO0FBQ0QsR0FyQlE7O0FBMkJUTyxFQUFBQSxNQUFNLEVBQXFGakIsa0JBQUVDLFNBQUYsQ0FBWWlCLGVBQVosQ0EzQmxGO0FBaUNUQyxFQUFBQSxVQUFVLEVBQUVELGdCQUFVWCxJQWpDYjs7QUEyQ1QsUUFBTWEsS0FB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LElBelJQO0FBK1JUL0YsRUFBQUEsSUFBSSxFQUFFRCxjQUFVQyxJQS9SUDtBQXFTVGdHLEVBQUFBLElBQUksRUFBRWpHLGNBQVVpRyxJQXJTUDtBQTJTVEMsRUFBQUEsSUFBSSxFQUFFbEcsY0FBVWtHO0FBM1NQLENBQVg7O2VBK1NldkcsRSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgeyBjbG9zZSwgY29uc3RhbnRzLCBjcmVhdGVSZWFkU3RyZWFtLCBjcmVhdGVXcml0ZVN0cmVhbSwgcHJvbWlzZXMgYXMgZnNQcm9taXNlcywgcmVhZCwgd3JpdGUsIG9wZW4gfSBmcm9tICdmcyc7XG5pbXBvcnQgZ2xvYiBmcm9tICdnbG9iJztcbmltcG9ydCBrbGF3IGZyb20gJ2tsYXcnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBtdiBmcm9tICdtdic7XG5pbXBvcnQgbmNwIGZyb20gJ25jcCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBwa2dEaXIgZnJvbSAncGtnLWRpcic7XG5pbXBvcnQgcmVhZFBrZyBmcm9tICdyZWFkLXBrZyc7XG5pbXBvcnQgcmltcmFmSWR4IGZyb20gJ3JpbXJhZic7XG5pbXBvcnQgc2FuaXRpemUgZnJvbSAnc2FuaXRpemUtZmlsZW5hbWUnO1xuaW1wb3J0IHdoaWNoIGZyb20gJ3doaWNoJztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IFRpbWVyIGZyb20gJy4vdGltaW5nJztcbmltcG9ydCB7IHBsdXJhbGl6ZSB9IGZyb20gJy4vdXRpbCc7XG5cbmNvbnN0IG5jcEFzeW5jID0gLyoqIEB0eXBlIHsoc291cmNlOiBzdHJpbmcsIGRlc3Q6IHN0cmluZywgb3B0czogbmNwLk9wdGlvbnN8dW5kZWZpbmVkKSA9PiBCPHZvaWQ+fSAqLyhCLnByb21pc2lmeShuY3ApKTtcbmNvbnN0IGZpbmRSb290Q2FjaGVkID0gXy5tZW1vaXplKHBrZ0Rpci5zeW5jKTtcblxuY29uc3QgZnMgPSB7XG4gIC8qKlxuICAgKiBSZXNvbHZlcyBgdHJ1ZWAgaWYgYHBhdGhgIGlzIF9yZWFkYWJsZV8sIHdoaWNoIGRpZmZlcnMgZnJvbSBOb2RlLmpzJyBkZWZhdWx0IGJlaGF2aW9yIG9mIFwiY2FuIHdlIHNlZSBpdD9cIlxuICAgKiBAcGFyYW0ge2ltcG9ydCgnZnMnKS5QYXRoTGlrZX0gcGF0aFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn1cbiAgICovXG4gIGFzeW5jIGhhc0FjY2VzcyAocGF0aCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmc1Byb21pc2VzLmFjY2VzcyhwYXRoLCBjb25zdGFudHMuUl9PSyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBBbGlhcyBmb3Ige0BsaW5rY29kZSBmcy5oYXNBY2Nlc3N9XG4gICAqIEBwYXJhbSB7aW1wb3J0KCdmcycpLlBhdGhMaWtlfSBwYXRoXG4gICAqL1xuICBhc3luYyBleGlzdHMgKHBhdGgpIHtcbiAgICByZXR1cm4gYXdhaXQgZnMuaGFzQWNjZXNzKHBhdGgpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYSBkaXJlY3RvcnkgYW5kIGFsbCBpdHMgY29udGVudHMsIHJlY3Vyc2l2ZWx5XG4gICAqIEB0b2RvIFJlcGxhY2Ugd2l0aCBgcm0oKWAgZnJvbSBgZnMucHJvbWlzZXNgIHdoZW4gTm9kZS5qcyB2MTIgc3VwcG9ydCBpcyBkcm9wcGVkLlxuICAgKi9cbiAgcmltcmFmOiAvKiogQHR5cGUgeyhkaXJwYXRoOiBzdHJpbmcsIG9wdHM/OiBpbXBvcnQoJ3JpbXJhZicpLk9wdGlvbnMpID0+IFByb21pc2U8dm9pZD59ICovKEIucHJvbWlzaWZ5KHJpbXJhZklkeCkpLFxuXG4gIC8qKlxuICAgKiBBbGlhcyBvZiB7QGxpbmtjb2RlIHJpbXJhZklkeC5zeW5jfVxuICAgKiBAdG9kbyBSZXBsYWNlIHdpdGggYHJtU3luYygpYCBmcm9tIGBmc2Agd2hlbiBOb2RlLmpzIHYxMiBzdXBwb3J0IGlzIGRyb3BwZWQuXG4gICAqL1xuICByaW1yYWZTeW5jOiByaW1yYWZJZHguc3luYyxcblxuICAvKipcbiAgICogTGlrZSBOb2RlLmpzJyBgZnNQcm9taXNlcy5ta2RpcigpYCwgYnV0IHdpbGwgX25vdF8gcmVqZWN0IGlmIHRoZSBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfEJ1ZmZlcnxVUkx9IGZpbGVwYXRoXG4gICAqIEBwYXJhbSB7aW1wb3J0KCdmcycpLk1ha2VEaXJlY3RvcnlPcHRpb25zfSBbb3B0c11cbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nfHVuZGVmaW5lZD59XG4gICAqIEBzZWUgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9mcy5odG1sI2ZzcHJvbWlzZXNta2RpcnBhdGgtb3B0aW9uc1xuICAgKi9cbiAgYXN5bmMgbWtkaXIgKGZpbGVwYXRoLCBvcHRzID0ge30pIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGZzUHJvbWlzZXMubWtkaXIoZmlsZXBhdGgsIG9wdHMpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVycj8uY29kZSAhPT0gJ0VFWElTVCcpIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgLyoqXG4gICAqIENvcGllcyBmaWxlcyBfYW5kIGVudGlyZSBkaXJlY3Rvcmllc19cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIFNvdXJjZSB0byBjb3B5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkZXN0aW5hdGlvbiAtIERlc3RpbmF0aW9uIHRvIGNvcHkgdG9cbiAgICogQHBhcmFtIHtuY3AuT3B0aW9uc30gW29wdHNdIC0gQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0byBgbmNwYFxuICAgKiBAc2VlIGh0dHBzOi8vbnBtLmltL25jcFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIGNvcHlGaWxlIChzb3VyY2UsIGRlc3RpbmF0aW9uLCBvcHRzID0ge30pIHtcbiAgICBpZiAoIWF3YWl0IGZzLmhhc0FjY2Vzcyhzb3VyY2UpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBmaWxlIGF0ICcke3NvdXJjZX0nIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBhY2Nlc3NpYmxlYCk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCBuY3BBc3luYyhzb3VyY2UsIGRlc3RpbmF0aW9uLCBvcHRzKTtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYXRlIGFuIE1ENSBoYXNoIG9mIGEgZmlsZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoJ2ZzJykuUGF0aExpa2V9IGZpbGVQYXRoXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZz59XG4gICAqL1xuICBhc3luYyBtZDUgKGZpbGVQYXRoKSB7XG4gICAgcmV0dXJuIGF3YWl0IGZzLmhhc2goZmlsZVBhdGgsICdtZDUnKTtcbiAgfSxcblxuICAvKipcbiAgICogTW92ZSBhIGZpbGVcbiAgICovXG4gIG12OiAvKiogQHR5cGUgeyhmcm9tOiBzdHJpbmcsIHRvOiBzdHJpbmcsIG9wdHM/OiBtdi5PcHRpb25zKSA9PiBCPHZvaWQ+fSAqLyhCLnByb21pc2lmeShtdikpLFxuXG4gIC8qKlxuICAgKiBGaW5kIHBhdGggdG8gYW4gZXhlY3V0YWJsZSBpbiBzeXN0ZW0gYFBBVEhgXG4gICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL25wbS9ub2RlLXdoaWNoXG4gICAqL1xuICB3aGljaCxcblxuICAvKipcbiAgICogR2l2ZW4gYSBnbG9iIHBhdHRlcm4sIHJlc29sdmUgd2l0aCBsaXN0IG9mIGZpbGVzIG1hdGNoaW5nIHRoYXQgcGF0dGVyblxuICAgKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9pc2FhY3Mvbm9kZS1nbG9iXG4gICAqL1xuICBnbG9iOiAvKiogQHR5cGUgeyhwYXR0ZXJuOiBzdHJpbmcsIG9wdHM/OiBnbG9iLklPcHRpb25zKSA9PiBCPHN0cmluZ1tdPn0gKi8oQi5wcm9taXNpZnkoZ2xvYikpLFxuXG4gIC8qKlxuICAgKiBTYW5pdGl6ZSBhIGZpbGVuYW1lXG4gICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3BhcnNoYXAvbm9kZS1zYW5pdGl6ZS1maWxlbmFtZVxuICAgKi9cbiAgc2FuaXRpemVOYW1lOiBzYW5pdGl6ZSxcblxuICAvKipcbiAgICogQ3JlYXRlIGEgaGV4IGRpZ2VzdCBvZiBzb21lIGZpbGUgYXQgYGZpbGVQYXRoYFxuICAgKiBAcGFyYW0ge2ltcG9ydCgnZnMnKS5QYXRoTGlrZX0gZmlsZVBhdGhcbiAgICogQHBhcmFtIHtzdHJpbmd9IFthbGdvcml0aG1dXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZz59XG4gICAqL1xuICBhc3luYyBoYXNoIChmaWxlUGF0aCwgYWxnb3JpdGhtID0gJ3NoYTEnKSB7XG4gICAgcmV0dXJuIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGZpbGVIYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goYWxnb3JpdGhtKTtcbiAgICAgIGNvbnN0IHJlYWRTdHJlYW0gPSBjcmVhdGVSZWFkU3RyZWFtKGZpbGVQYXRoKTtcbiAgICAgIHJlYWRTdHJlYW0ub24oJ2Vycm9yJywgKGUpID0+IHJlamVjdChcbiAgICAgICAgbmV3IEVycm9yKGBDYW5ub3QgY2FsY3VsYXRlICR7YWxnb3JpdGhtfSBoYXNoIGZvciAnJHtmaWxlUGF0aH0nLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCkpKTtcbiAgICAgIHJlYWRTdHJlYW0ub24oJ2RhdGEnLCAoY2h1bmspID0+IGZpbGVIYXNoLnVwZGF0ZShjaHVuaykpO1xuICAgICAgcmVhZFN0cmVhbS5vbignZW5kJywgKCkgPT4gcmVzb2x2ZShmaWxlSGFzaC5kaWdlc3QoJ2hleCcpKSk7XG4gICAgfSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gYFdhbGtlcmAgaW5zdGFuY2UsIHdoaWNoIGlzIGEgcmVhZGFibGUgc3RyZWFtIChhbmQgdGh1c2x5IGFuIGFzeW5jIGl0ZXJhdG9yKS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRpciAtIERpciB0byBzdGFydCB3YWxraW5nIGF0XG4gICAqIEBwYXJhbSB7aW1wb3J0KCdrbGF3JykuT3B0aW9uc30gW29wdHNdXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoJ2tsYXcnKS5XYWxrZXJ9XG4gICAqIEBzZWUgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2Uva2xhd1xuICAgKi9cbiAgd2FsayAoZGlyLCBvcHRzKSB7XG4gICAgcmV0dXJuIGtsYXcoZGlyLCBvcHRzKTtcbiAgfSxcblxuICAvKipcbiAgICogUmVjdXJzaXZlbHkgY3JlYXRlIGEgZGlyZWN0b3J5LlxuICAgKiBAcGFyYW0ge2ltcG9ydCgnZnMnKS5QYXRoTGlrZX0gZGlyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZ3x1bmRlZmluZWQ+fVxuICAgKi9cbiAgYXN5bmMgbWtkaXJwIChkaXIpIHtcbiAgICByZXR1cm4gYXdhaXQgZnMubWtkaXIoZGlyLCB7cmVjdXJzaXZlOiB0cnVlfSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFdhbGtzIGEgZGlyZWN0b3J5IGdpdmVuIGFjY29yZGluZyB0byB0aGUgcGFyYW1ldGVycyBnaXZlbi4gVGhlIGNhbGxiYWNrIHdpbGwgYmUgaW52b2tlZCB3aXRoIGEgcGF0aCBqb2luZWQgd2l0aCB0aGUgZGlyIHBhcmFtZXRlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGlyIERpcmVjdG9yeSBwYXRoIHdoZXJlIHdlIHdpbGwgc3RhcnQgd2Fsa2luZ1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJlY3Vyc2l2ZSBTZXQgaXQgdG8gdHJ1ZSBpZiB5b3Ugd2FudCB0byBjb250aW51ZSB3YWxraW5nIHN1YiBkaXJlY3Rvcmllc1xuICAgKiBAcGFyYW0ge1dhbGtEaXJDYWxsYmFja30gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCB3aGVuIGEgbmV3IHBhdGggaXMgZm91bmRcbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBgZGlyYCBwYXJhbWV0ZXIgY29udGFpbnMgYSBwYXRoIHRvIGFuIGludmFsaWQgZm9sZGVyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZz8+fSByZXR1cm5zIHRoZSBmb3VuZCBwYXRoIG9yIG51bGwgaWYgdGhlIGl0ZW0gd2FzIG5vdCBmb3VuZFxuICAgKi9cbiAgYXN5bmMgd2Fsa0RpciAoZGlyLCByZWN1cnNpdmUsIGNhbGxiYWNrKSB7IC8vZXNsaW50LWRpc2FibGUtbGluZSBwcm9taXNlL3ByZWZlci1hd2FpdC10by1jYWxsYmFja3NcbiAgICBsZXQgaXNWYWxpZFJvb3QgPSBmYWxzZTtcbiAgICBsZXQgZXJyTXNnID0gbnVsbDtcbiAgICB0cnkge1xuICAgICAgaXNWYWxpZFJvb3QgPSAoYXdhaXQgZnMuc3RhdChkaXIpKS5pc0RpcmVjdG9yeSgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGVyck1zZyA9IGUubWVzc2FnZTtcbiAgICB9XG4gICAgaWYgKCFpc1ZhbGlkUm9vdCkge1xuICAgICAgdGhyb3cgRXJyb3IoYCcke2Rpcn0nIGlzIG5vdCBhIHZhbGlkIHJvb3QgZGlyZWN0b3J5YCArIChlcnJNc2cgPyBgLiBPcmlnaW5hbCBlcnJvcjogJHtlcnJNc2d9YCA6ICcnKSk7XG4gICAgfVxuXG4gICAgbGV0IHdhbGtlcjtcbiAgICBsZXQgZmlsZUNvdW50ID0gMDtcbiAgICBsZXQgZGlyZWN0b3J5Q291bnQgPSAwO1xuICAgIGNvbnN0IHRpbWVyID0gbmV3IFRpbWVyKCkuc3RhcnQoKTtcbiAgICByZXR1cm4gYXdhaXQgbmV3IEIoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgbGV0IGxhc3RGaWxlUHJvY2Vzc2VkID0gQi5yZXNvbHZlKCk7XG4gICAgICB3YWxrZXIgPSBrbGF3KGRpciwge1xuICAgICAgICBkZXB0aExpbWl0OiByZWN1cnNpdmUgPyAtMSA6IDAsXG4gICAgICB9KTtcbiAgICAgIHdhbGtlci5vbignZGF0YScsIGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHdhbGtlci5wYXVzZSgpO1xuXG4gICAgICAgIGlmICghaXRlbS5zdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgZmlsZUNvdW50Kys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGlyZWN0b3J5Q291bnQrKztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9taXNlL3ByZWZlci1hd2FpdC10by1jYWxsYmFja3NcbiAgICAgICAgbGFzdEZpbGVQcm9jZXNzZWQgPSBCLnRyeShhc3luYyAoKSA9PiBhd2FpdCBjYWxsYmFjayhpdGVtLnBhdGgsIGl0ZW0uc3RhdHMuaXNEaXJlY3RvcnkoKSkpXG4gICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGRvbmUgPSBmYWxzZSkge1xuICAgICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgICAgcmVzb2x2ZShpdGVtLnBhdGgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgd2Fsa2VyLnJlc3VtZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKHJlamVjdCk7XG4gICAgICB9KVxuICAgICAgLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIsIGl0ZW0pIHtcbiAgICAgICAgbG9nLndhcm4oYEdvdCBhbiBlcnJvciB3aGlsZSB3YWxraW5nICcke2l0ZW0ucGF0aH0nOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICAvLyBrbGF3IGNhbm5vdCBnZXQgYmFjayBmcm9tIGFuIEVOT0VOVCBlcnJvclxuICAgICAgICBpZiAoZXJyLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgICAgbG9nLndhcm4oJ0FsbCBmaWxlcyBtYXkgbm90IGhhdmUgYmVlbiBhY2Nlc3NlZCcpO1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxhc3RGaWxlUHJvY2Vzc2VkXG4gICAgICAgICAgLnRoZW4oKGZpbGUpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoLyoqIEB0eXBlIHtzdHJpbmd8dW5kZWZpbmVkfSAqLyhmaWxlKSA/PyBudWxsKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBsb2cud2FybihgVW5leHBlY3RlZCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSkuZmluYWxseShmdW5jdGlvbiAoKSB7XG4gICAgICBsb2cuZGVidWcoYFRyYXZlcnNlZCAke3BsdXJhbGl6ZSgnZGlyZWN0b3J5JywgZGlyZWN0b3J5Q291bnQsIHRydWUpfSBgICtcbiAgICAgICAgYGFuZCAke3BsdXJhbGl6ZSgnZmlsZScsIGZpbGVDb3VudCwgdHJ1ZSl9IGAgK1xuICAgICAgICBgaW4gJHt0aW1lci5nZXREdXJhdGlvbigpLmFzTWlsbGlTZWNvbmRzLnRvRml4ZWQoMCl9bXNgKTtcbiAgICAgIGlmICh3YWxrZXIpIHtcbiAgICAgICAgd2Fsa2VyLmRlc3Ryb3koKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSxcbiAgLyoqXG4gICAqIFJlYWRzIHRoZSBjbG9zZXN0IGBwYWNrYWdlLmpzb25gIGZpbGUgZnJvbSBhYnNvbHV0ZSBwYXRoIGBkaXJgLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGlyIC0gRGlyZWN0b3J5IHRvIHNlYXJjaCBmcm9tXG4gICAqIEBwYXJhbSB7aW1wb3J0KCdyZWFkLXBrZycpLk9wdGlvbnN9IFtvcHRzXSAtIEFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgYHJlYWQtcGtnYFxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2VyZSBwcm9ibGVtcyBmaW5kaW5nIG9yIHJlYWRpbmcgYSBgcGFja2FnZS5qc29uYCBmaWxlXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IEEgcGFyc2VkIGBwYWNrYWdlLmpzb25gXG4gICAqL1xuICByZWFkUGFja2FnZUpzb25Gcm9tIChkaXIsIG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IGN3ZCA9IGZzLmZpbmRSb290KGRpcik7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiByZWFkUGtnLnN5bmMoey4uLm9wdHMsIGN3ZH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyLm1lc3NhZ2UgPSBgRmFpbGVkIHRvIHJlYWQgYSBcXGBwYWNrYWdlLmpzb25cXGAgZnJvbSBkaXIgXFxgJHtkaXJ9XFxgOlxcblxcbiR7ZXJyLm1lc3NhZ2V9YDtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH0sXG4gIC8qKlxuICAgKiBGaW5kcyB0aGUgcHJvamVjdCByb290IGRpcmVjdG9yeSBmcm9tIGBkaXJgLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGlyIC0gRGlyZWN0b3J5IHRvIHNlYXJjaCBmcm9tXG4gICAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gSWYgYGRpcmAgaXMgbm90IGEgbm9uZW1wdHkgc3RyaW5nIG9yIHJlbGF0aXZlIHBhdGhcbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdlcmUgcHJvYmxlbXMgZmluZGluZyB0aGUgcHJvamVjdCByb290XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjbG9zZXNldCBwYXJlbnQgZGlyIGNvbnRhaW5pbmcgYHBhY2thZ2UuanNvbmBcbiAgICovXG4gIGZpbmRSb290IChkaXIpIHtcbiAgICBpZiAoIWRpciB8fCAhcGF0aC5pc0Fic29sdXRlKGRpcikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2BmaW5kUm9vdCgpYCBtdXN0IGJlIHByb3ZpZGVkIGEgbm9uLWVtcHR5LCBhYnNvbHV0ZSBwYXRoJyk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IGZpbmRSb290Q2FjaGVkKGRpcik7XG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgXFxgZmluZFJvb3QoKVxcYCBjb3VsZCBub3QgZmluZCBcXGBwYWNrYWdlLmpzb25cXGAgZnJvbSAke2Rpcn1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSxcblxuICAvLyBhZGQgdGhlIHN1cHBvcnRlZCBgZnNgIGZ1bmN0aW9uc1xuICBhY2Nlc3M6IGZzUHJvbWlzZXMuYWNjZXNzLFxuICBhcHBlbmRGaWxlOiBmc1Byb21pc2VzLmFwcGVuZEZpbGUsXG4gIGNobW9kOiBmc1Byb21pc2VzLmNobW9kLFxuICBjbG9zZTogQi5wcm9taXNpZnkoY2xvc2UpLFxuICBjb25zdGFudHMsXG4gIGNyZWF0ZVdyaXRlU3RyZWFtLFxuICBjcmVhdGVSZWFkU3RyZWFtLFxuICBsc3RhdDogZnNQcm9taXNlcy5sc3RhdCxcbiAgLyoqXG4gICAqIFdhcm5pbmc6IHRoaXMgaXMgYSBwcm9taXNpZmllZCB7QGxpbmtjb2RlIG9wZW4gZnMub3Blbn0uXG4gICAqIEl0IHJlc29sdmVzIHcvYSBmaWxlIGRlc2NyaXB0b3IgaW5zdGVhZCBvZiBhIHtAbGlua2NvZGUgZnNQcm9taXNlcy5GaWxlSGFuZGxlIEZpbGVIYW5kbGV9IG9iamVjdCwgYXMge0BsaW5rY29kZSBmc1Byb21pc2VzLm9wZW59IGRvZXMuIFVzZSB7QGxpbmtjb2RlIGZzLm9wZW5GaWxlfSBpZiB5b3Ugd2FudCBhIGBGaWxlSGFuZGxlYC5cbiAgICogQHR5cGUgeyhwYXRoOiBpbXBvcnQoJ2ZzJykuUGF0aExpa2UsIGZsYWdzOiBpbXBvcnQoJ2ZzJykuT3Blbk1vZGUsIG1vZGU/OiBpbXBvcnQoJ2ZzJykuTW9kZSkgPT4gUHJvbWlzZTxudW1iZXI+fVxuICAgKi9cbiAgb3BlbjogQi5wcm9taXNpZnkob3BlbiksXG4gIG9wZW5GaWxlOiBmc1Byb21pc2VzLm9wZW4sXG4gIHJlYWRkaXI6IGZzUHJvbWlzZXMucmVhZGRpcixcbiAgcmVhZDogQi5wcm9taXNpZnkocmVhZCksXG4gIHJlYWRGaWxlOiBmc1Byb21pc2VzLnJlYWRGaWxlLFxuICByZWFkbGluazogZnNQcm9taXNlcy5yZWFkbGluayxcbiAgcmVhbHBhdGg6IGZzUHJvbWlzZXMucmVhbHBhdGgsXG4gIHJlbmFtZTogZnNQcm9taXNlcy5yZW5hbWUsXG4gIHN0YXQ6IGZzUHJvbWlzZXMuc3RhdCxcbiAgc3ltbGluazogZnNQcm9taXNlcy5zeW1saW5rLFxuICB1bmxpbms6IGZzUHJvbWlzZXMudW5saW5rLFxuICB3cml0ZTogQi5wcm9taXNpZnkod3JpdGUpLFxuICB3cml0ZUZpbGU6IGZzUHJvbWlzZXMud3JpdGVGaWxlLFxuXG4gIC8vIGRlcHJlY2F0ZWQgcHJvcHNcblxuICAvKipcbiAgICogVXNlIGBjb25zdGFudHMuRl9PS2AgaW5zdGVhZC5cbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIEZfT0s6IGNvbnN0YW50cy5GX09LLFxuXG4gIC8qKlxuICAgKiBVc2UgYGNvbnN0YW50cy5SX09LYCBpbnN0ZWFkLlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgUl9PSzogY29uc3RhbnRzLlJfT0ssXG5cbiAgLyoqXG4gICAqIFVzZSBgY29uc3RhbnRzLldfT0tgIGluc3RlYWQuXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBXX09LOiBjb25zdGFudHMuV19PSyxcblxuICAvKipcbiAgICogVXNlIGBjb25zdGFudHMuWF9PS2AgaW5zdGVhZC5cbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIFhfT0s6IGNvbnN0YW50cy5YX09LXG59O1xuXG5leHBvcnQgeyBmcyB9O1xuZXhwb3J0IGRlZmF1bHQgZnM7XG5cbi8qKlxuICogVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdoaWNoIHdpbGwgYmUgY2FsbGVkIGR1cmluZyB0aGUgZGlyZWN0b3J5IHdhbGtpbmdcbiAqIEBjYWxsYmFjayBXYWxrRGlyQ2FsbGJhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBpdGVtUGF0aCBUaGUgcGF0aCBvZiB0aGUgZmlsZSBvciBmb2xkZXJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNEaXJlY3RvcnkgU2hvd3MgaWYgaXQgaXMgYSBkaXJlY3Rvcnkgb3IgYSBmaWxlXG4gKiBAcmV0dXJuIHtib29sZWFufSByZXR1cm4gdHJ1ZSBpZiB5b3Ugd2FudCB0byBzdG9wIHdhbGtpbmdcbiovXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnZ2xvYicpfSBnbG9iXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtdicpfSBtdlxuICovXG4iXX0=
@@ -0,0 +1,56 @@
1
+ /// <reference types="node" />
2
+ export type AppiumJimp = Omit<Jimp, 'getBuffer'> & {
3
+ getBuffer: Jimp['getBufferAsync'];
4
+ };
5
+ export type Region = {
6
+ left: number;
7
+ top: number;
8
+ width: number;
9
+ height: number;
10
+ };
11
+ /**
12
+ * Crop the image by given rectangle (use base64 string as input and output)
13
+ *
14
+ * @param {string} base64Image The string with base64 encoded image
15
+ * @param {Region} rect The selected region of image
16
+ * @return {Promise<string>} base64 encoded string of cropped image
17
+ */
18
+ export function cropBase64Image(base64Image: string, rect: Region): Promise<string>;
19
+ /**
20
+ * Create a pngjs image from given base64 image
21
+ *
22
+ * @param {string} base64Image The string with base64 encoded image
23
+ * @return {Promise<PNG>} The image object
24
+ */
25
+ export function base64ToImage(base64Image: string): Promise<PNG>;
26
+ /**
27
+ * Create a base64 string for given image object
28
+ *
29
+ * @param {PNG} image The image object
30
+ * @return {Promise<string>} The string with base64 encoded image
31
+ */
32
+ export function imageToBase64(image: PNG): Promise<string>;
33
+ /**
34
+ * Crop the image by given rectangle
35
+ *
36
+ * @param {PNG} image The image to mutate by cropping
37
+ * @param {Region} rect The selected region of image
38
+ */
39
+ export function cropImage(image: PNG, rect: Region): PNG;
40
+ /**
41
+ * Utility function to get a Jimp image object from buffer or base64 data. Jimp
42
+ * is a great library however it does IO in the constructor so it's not
43
+ * convenient for our async/await model.
44
+ *
45
+ * @param {Buffer|string} data - binary image buffer or base64-encoded image
46
+ * string
47
+ * @returns {Promise<AppiumJimp>} - the jimp image object
48
+ */
49
+ export function getJimpImage(data: Buffer | string): Promise<AppiumJimp>;
50
+ export const MIME_JPEG: "image/jpeg";
51
+ export const MIME_PNG: "image/png";
52
+ export const MIME_BMP: "image/bmp";
53
+ import Jimp from "jimp";
54
+ import { PNG } from "pngjs";
55
+ import { Buffer } from "buffer";
56
+ //# sourceMappingURL=image-util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-util.d.ts","sourceRoot":"","sources":["../../lib/image-util.js"],"names":[],"mappings":";yBAkJa,KAAK,IAAI,EAAC,WAAW,CAAC,GAAG;IAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;CAAC;;UAK3D,MAAM;SACN,MAAM;WACN,MAAM;YACN,MAAM;;AA5GpB;;;;;;GAMG;AACH,6CAJW,MAAM,QACN,MAAM,GACL,QAAQ,MAAM,CAAC,CAM1B;AAED;;;;;GAKG;AACH,2CAHW,MAAM,GACL,QAAQ,GAAG,CAAC,CAavB;AAED;;;;;GAKG;AACH,qCAHW,GAAG,GACF,QAAQ,MAAM,CAAC,CAa1B;AAED;;;;;GAKG;AACH,iCAHW,GAAG,QACH,MAAM,OA6BhB;AAxHD;;;;;;;;GAQG;AACH,mCAJW,MAAM,GAAC,MAAM,GAEX,QAAQ,UAAU,CAAC,CA2B/B"}
@@ -54,8 +54,7 @@ async function getJimpImage(data) {
54
54
  return reject(new Error('Could not create jimp image from that data'));
55
55
  }
56
56
 
57
- imgObj._getBuffer = imgObj.getBuffer.bind(imgObj);
58
- imgObj.getBuffer = _bluebird.default.promisify(imgObj._getBuffer, {
57
+ imgObj.getBuffer = _bluebird.default.promisify(imgObj.getBuffer.bind(imgObj), {
59
58
  context: imgObj
60
59
  });
61
60
  resolve(imgObj);
@@ -141,7 +140,5 @@ function getRectIntersection(rect, imageSize) {
141
140
  width,
142
141
  height
143
142
  };
144
- }require('source-map-support').install();
145
-
146
-
147
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9pbWFnZS11dGlsLmpzIl0sIm5hbWVzIjpbIkJZVEVTX0lOX1BJWEVMX0JMT0NLIiwiU0NBTkxJTkVfRklMVEVSX01FVEhPRCIsIk1JTUVfSlBFRyIsIk1JTUVfUE5HIiwiTUlNRV9CTVAiLCJKaW1wIiwiZ2V0SmltcEltYWdlIiwiZGF0YSIsIkIiLCJyZXNvbHZlIiwicmVqZWN0IiwiXyIsImlzU3RyaW5nIiwiaXNCdWZmZXIiLCJFcnJvciIsIkJ1ZmZlciIsImZyb20iLCJlcnIiLCJpbWdPYmoiLCJfZ2V0QnVmZmVyIiwiZ2V0QnVmZmVyIiwiYmluZCIsInByb21pc2lmeSIsImNvbnRleHQiLCJjcm9wQmFzZTY0SW1hZ2UiLCJiYXNlNjRJbWFnZSIsInJlY3QiLCJpbWFnZSIsImJhc2U2NFRvSW1hZ2UiLCJjcm9wSW1hZ2UiLCJpbWFnZVRvQmFzZTY0IiwiaW1hZ2VCdWZmZXIiLCJQTkciLCJmaWx0ZXJUeXBlIiwicGFyc2UiLCJjaHVua3MiLCJwYWNrIiwib24iLCJjaHVuayIsInB1c2giLCJjb25jYXQiLCJ0b1N0cmluZyIsImltYWdlUmVjdCIsIndpZHRoIiwiaGVpZ2h0IiwiaW50ZXJSZWN0IiwiZ2V0UmVjdEludGVyc2VjdGlvbiIsIkpTT04iLCJzdHJpbmdpZnkiLCJmaXJzdFZlcnRpY2FsUGl4ZWwiLCJ0b3AiLCJsYXN0VmVydGljYWxQaXhlbCIsImZpcnN0SG9yaXpvbnRhbFBpeGVsIiwibGVmdCIsImxhc3RIb3Jpem9udGFsUGl4ZWwiLCJjcm9wcGVkQXJyYXkiLCJ5IiwieCIsImZpcnN0Qnl0ZUlkeEluUGl4ZWxCbG9jayIsImJ5dGVJZHgiLCJpbWFnZVNpemUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxvQkFBb0IsR0FBRyxDQUE3QjtBQUNBLE1BQU1DLHNCQUFzQixHQUFHLENBQS9CO0FBQ0EsTUFBTTtBQUFFQyxFQUFBQSxTQUFGO0FBQWFDLEVB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SUFBb0JVLElBQUksR0FBRzNCLElBQUksQ0FBQ2lCLEtBQWhDLEdBQXlDakIsSUFBSSxDQUFDaUIsS0FBOUMsR0FBdURpQixTQUFTLENBQUNqQixLQUFWLEdBQWtCVSxJQUF2RjtBQUNBLFFBQU1ULE1BQU0sR0FBR2dCLFNBQVMsQ0FBQ2hCLE1BQVYsSUFBcUJNLEdBQUcsR0FBR3hCLElBQUksQ0FBQ2tCLE1BQWhDLEdBQTBDbEIsSUFBSSxDQUFDa0IsTUFBL0MsR0FBeURnQixTQUFTLENBQUNoQixNQUFWLEdBQW1CTSxHQUEzRjtBQUNBLFNBQU87QUFBQ0csSUFBQUEsSUFBRDtBQUFPSCxJQUFBQSxHQUFQO0FBQVlQLElBQUFBLEtBQVo7QUFBbUJDLElBQUFBO0FBQW5CLEdBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgSmltcCBmcm9tICdqaW1wJztcbmltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ2J1ZmZlcic7XG5pbXBvcnQgeyBQTkcgfSBmcm9tICdwbmdqcyc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5cbmNvbnN0IEJZVEVTX0lOX1BJWEVMX0JMT0NLID0gNDtcbmNvbnN0IFNDQU5MSU5FX0ZJTFRFUl9NRVRIT0QgPSA0O1xuY29uc3QgeyBNSU1FX0pQRUcsIE1JTUVfUE5HLCBNSU1FX0JNUCB9ID0gSmltcDtcblxuLyoqXG4gKiBVdGlsaXR5IGZ1bmN0aW9uIHRvIGdldCBhIEppbXAgaW1hZ2Ugb2JqZWN0IGZyb20gYnVmZmVyIG9yIGJhc2U2NCBkYXRhLiBKaW1wXG4gKiBpcyBhIGdyZWF0IGxpYnJhcnkgaG93ZXZlciBpdCBkb2VzIElPIGluIHRoZSBjb25zdHJ1Y3RvciBzbyBpdCdzIG5vdFxuICogY29udmVuaWVudCBmb3Igb3VyIGFzeW5jL2F3YWl0IG1vZGVsLlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfHN0cmluZ30gZGF0YSAtIGJpbmFyeSBpbWFnZSBidWZmZXIgb3IgYmFzZTY0LWVuY29kZWQgaW1hZ2VcbiAqIHN0cmluZ1xuICogQHJldHVybnMge0ppbXB9IC0gdGhlIGppbXAgaW1hZ2Ugb2JqZWN0XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEppbXBJbWFnZSAoZGF0YSkge1xuICByZXR1cm4gYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGlmICghXy5pc1N0cmluZyhkYXRhKSAmJiAhXy5pc0J1ZmZlcihkYXRhKSkge1xuICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoJ011c3QgaW5pdGlhbGl6ZSBqaW1wIG9iamVjdCB3aXRoIHN0cmluZyBvciBidWZmZXInKSk7XG4gICAgfVxuICAgIC8vIGlmIGRhdGEgaXMgYSBzdHJpbmcsIGFzc3VtZSBpdCBpcyBhIGJhc2U2NC1lbmNvZGVkIGltYWdlXG4gICAgaWYgKF8uaXNTdHJpbmcoZGF0YSkpIHtcbiAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShkYXRhLCAnYmFzZTY0Jyk7XG4gICAgfVxuICAgIG5ldyBKaW1wKGRhdGEsIChlcnIsIGltZ09iaikgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICB9XG4gICAgICBpZiAoIWltZ09iaikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcignQ291bGQgbm90IGNyZWF0ZSBqaW1wIGltYWdlIGZyb20gdGhhdCBkYXRhJykpO1xuICAgICAgfVxuICAgICAgaW1nT2JqLl9nZXRCdWZmZXIgPSBpbWdPYmouZ2V0QnVmZmVyLmJpbmQoaW1nT2JqKTtcbiAgICAgIGltZ09iai5nZXRCdWZmZXIgPSBCLnByb21pc2lmeShpbWdPYmouX2dldEJ1ZmZlciwge2NvbnRleHQ6IGltZ09ian0pO1xuICAgICAgcmVzb2x2ZShpbWdPYmopO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDcm9wIHRoZSBpbWFnZSBieSBnaXZlbiByZWN0YW5nbGUgKHVzZSBiYXNlNjQgc3RyaW5nIGFzIGlucHV0IGFuZCBvdXRwdXQpXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2U2NEltYWdlIFRoZSBzdHJpbmcgd2l0aCBiYXNlNjQgZW5jb2RlZCBpbWFnZVxuICogQHBhcmFtIHtSZWdpb259IHJlY3QgVGhlIHNlbGVjdGVkIHJlZ2lvbiBvZiBpbWFnZVxuICogQHJldHVybiB7c3RyaW5nfSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgY3JvcHBlZCBpbWFnZVxuICovXG5hc3luYyBmdW5jdGlvbiBjcm9wQmFzZTY0SW1hZ2UgKGJhc2U2NEltYWdlLCByZWN0KSB7XG4gIGNvbnN0IGltYWdlID0gYXdhaXQgYmFzZTY0VG9JbWFnZShiYXNlNjRJbWFnZSk7XG4gIGNyb3BJbWFnZShpbWFnZSwgcmVjdCk7XG4gIHJldHVybiBhd2FpdCBpbWFnZVRvQmFzZTY0KGltYWdlKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBwbmdqcyBpbWFnZSBmcm9tIGdpdmVuIGJhc2U2NCBpbWFnZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlNjRJbWFnZSBUaGUgc3RyaW5nIHdpdGggYmFzZTY0IGVuY29kZWQgaW1hZ2VcbiAqIEByZXR1cm4ge1BOR30gVGhlIGltYWdlIG9iamVjdFxuICovXG5hc3luYyBmdW5jdGlvbiBiYXNlNjRUb0ltYWdlIChiYXNlNjRJbWFnZSkge1xuICBjb25zdCBpbWFnZUJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGJhc2U2NEltYWdlLCAnYmFzZTY0Jyk7XG4gIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgaW1hZ2UgPSBuZXcgUE5HKHtmaWx0ZXJUeXBlOiBTQ0FOTElORV9GSUxURVJfTUVUSE9EfSk7XG4gICAgaW1hZ2UucGFyc2UoaW1hZ2VCdWZmZXIsIChlcnIsIGltYWdlKSA9PiB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJvbWlzZS9wcmVmZXItYXdhaXQtdG8tY2FsbGJhY2tzXG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgIH1cbiAgICAgIHJlc29sdmUoaW1hZ2UpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBiYXNlNjQgc3RyaW5nIGZvciBnaXZlbiBpbWFnZSBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge1BOR30gaW1hZ2UgVGhlIGltYWdlIG9iamVjdFxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgc3RyaW5nIHdpdGggYmFzZTY0IGVuY29kZWQgaW1hZ2VcbiAqL1xuYXN5bmMgZnVuY3Rpb24gaW1hZ2VUb0Jhc2U2NCAoaW1hZ2UpIHtcbiAgcmV0dXJuIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBjaHVua3MgPSBbXTtcbiAgICBpbWFnZS5wYWNrKClcbiAgICAub24oJ2RhdGEnLCAoY2h1bmspID0+IGNodW5rcy5wdXNoKGNodW5rKSkub24oJ2VuZCcsICgpID0+IHtcbiAgICAgIHJlc29sdmUoQnVmZmVyLmNvbmNhdChjaHVua3MpLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG4gICAgfSlcbiAgICAub24oJ2Vycm9yJywgKGVycikgPT4geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByb21pc2UvcHJlZmVyLWF3YWl0LXRvLWNhbGxiYWNrc1xuICAgICAgcmVqZWN0KGVycik7XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIENyb3AgdGhlIGltYWdlIGJ5IGdpdmVuIHJlY3RhbmdsZVxuICpcbiAqIEBwYXJhbSB7UE5HfSBpbWFnZSBUaGUgaW1hZ2UgdG8gbXV0YXRlIGJ5IGNyb3BwaW5nXG4gKiBAcGFyYW0ge1JlZ2lvbn0gcmVjdCBUaGUgc2VsZWN0ZWQgcmVnaW9uIG9mIGltYWdlXG4gKi9cbmZ1bmN0aW9uIGNyb3BJbWFnZSAoaW1hZ2UsIHJlY3QpIHtcbiAgY29uc3QgaW1hZ2VSZWN0ID0ge3dpZHRoOiBpbWFnZS53aWR0aCwgaGVpZ2h0OiBpbWFnZS5oZWlnaHR9O1xuICBjb25zdCBpbnRlclJlY3QgPSBnZXRSZWN0SW50ZXJzZWN0aW9uKHJlY3QsIGltYWdlUmVjdCk7XG4gIGlmIChpbnRlclJlY3Qud2lkdGggPCByZWN0LndpZHRoIHx8IGludGVyUmVjdC5oZWlnaHQgPCByZWN0LmhlaWdodCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNyb3AgJHtKU09OLnN0cmluZ2lmeShyZWN0KX0gZnJvbSAke0pTT04uc3RyaW5naWZ5KGltYWdlUmVjdCl9IGJlY2F1c2UgdGhlIGludGVyc2VjdGlvbiBiZXR3ZWVuIHRoZW0gd2FzIG5vdCB0aGUgc2l6ZSBvZiB0aGUgcmVjdGApO1xuICB9XG5cbiAgY29uc3QgZmlyc3RWZXJ0aWNhbFBpeGVsID0gaW50ZXJSZWN0LnRvcDtcbiAgY29uc3QgbGFzdFZlcnRpY2FsUGl4ZWwgPSBpbnRlclJlY3QudG9wICsgaW50ZXJSZWN0LmhlaWdodDtcblxuICBjb25zdCBmaXJzdEhvcml6b250YWxQaXhlbCA9IGludGVyUmVjdC5sZWZ0O1xuICBjb25zdCBsYXN0SG9yaXpvbnRhbFBpeGVsID0gaW50ZXJSZWN0LmxlZnQgKyBpbnRlclJlY3Qud2lkdGg7XG5cbiAgY29uc3QgY3JvcHBlZEFycmF5ID0gW107XG4gIGZvciAobGV0IHkgPSBmaXJzdFZlcnRpY2FsUGl4ZWw7IHkgPCBsYXN0VmVydGljYWxQaXhlbDsgeSsrKSB7XG4gICAgZm9yIChsZXQgeCA9IGZpcnN0SG9yaXpvbnRhbFBpeGVsOyB4IDwgbGFzdEhvcml6b250YWxQaXhlbDsgeCsrKSB7XG4gICAgICBjb25zdCBmaXJzdEJ5dGVJZHhJblBpeGVsQmxvY2sgPSAoaW1hZ2VSZWN0LndpZHRoICogeSArIHgpIDw8IDI7XG4gICAgICBmb3IgKGxldCBieXRlSWR4ID0gMDsgYnl0ZUlkeCA8IEJZVEVTX0lOX1BJWEVMX0JMT0NLOyBieXRlSWR4KyspIHtcbiAgICAgICAgY3JvcHBlZEFycmF5LnB1c2goaW1hZ2UuZGF0YVtmaXJzdEJ5dGVJZHhJblBpeGVsQmxvY2sgKyBieXRlSWR4XSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaW1hZ2UuZGF0YSA9IEJ1ZmZlci5mcm9tKGNyb3BwZWRBcnJheSk7XG4gIGltYWdlLndpZHRoID0gaW50ZXJSZWN0LndpZHRoO1xuICBpbWFnZS5oZWlnaHQgPSBpbnRlclJlY3QuaGVpZ2h0O1xuICByZXR1cm4gaW1hZ2U7XG59XG5cbmZ1bmN0aW9uIGdldFJlY3RJbnRlcnNlY3Rpb24gKHJlY3QsIGltYWdlU2l6ZSkge1xuICBjb25zdCBsZWZ0ID0gcmVjdC5sZWZ0ID49IGltYWdlU2l6ZS53aWR0aCA/IGltYWdlU2l6ZS53aWR0aCA6IHJlY3QubGVmdDtcbiAgY29uc3QgdG9wID0gcmVjdC50b3AgPj0gaW1hZ2VTaXplLmhlaWdodCA/IGltYWdlU2l6ZS5oZWlnaHQgOiByZWN0LnRvcDtcbiAgY29uc3Qgd2lkdGggPSBpbWFnZVNpemUud2lkdGggPj0gKGxlZnQgKyByZWN0LndpZHRoKSA/IHJlY3Qud2lkdGggOiAoaW1hZ2VTaXplLndpZHRoIC0gbGVmdCk7XG4gIGNvbnN0IGhlaWdodCA9IGltYWdlU2l6ZS5oZWlnaHQgPj0gKHRvcCArIHJlY3QuaGVpZ2h0KSA/IHJlY3QuaGVpZ2h0IDogKGltYWdlU2l6ZS5oZWlnaHQgLSB0b3ApO1xuICByZXR1cm4ge2xlZnQsIHRvcCwgd2lkdGgsIGhlaWdodH07XG59XG5cbmV4cG9ydCB7XG4gIGNyb3BCYXNlNjRJbWFnZSwgYmFzZTY0VG9JbWFnZSwgaW1hZ2VUb0Jhc2U2NCwgY3JvcEltYWdlLFxuICBnZXRKaW1wSW1hZ2UsIE1JTUVfSlBFRywgTUlNRV9QTkcsIE1JTUVfQk1QXG59O1xuIl0sImZpbGUiOiJsaWIvaW1hZ2UtdXRpbC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
143
+ }
144
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9pbWFnZS11dGlsLmpzIl0sIm5hbWVzIjpbIkJZVEVTX0lOX1BJWEVMX0JMT0NLIiwiU0NBTkxJTkVfRklMVEVSX01FVEhPRCIsIk1JTUVfSlBFRyIsIk1JTUVfUE5HIiwiTUlNRV9CTVAiLCJKaW1wIiwiZ2V0SmltcEltYWdlIiwiZGF0YSIsIkIiLCJyZXNvbHZlIiwicmVqZWN0IiwiXyIsImlzU3RyaW5nIiwiaXNCdWZmZXIiLCJFcnJvciIsIkJ1ZmZlciIsImZyb20iLCJlcnIiLCJpbWdPYmoiLCJnZXRCdWZmZXIiLCJwcm9taXNpZnkiLCJiaW5kIiwiY29udGV4dCIsImNyb3BCYXNlNjRJbWFnZSIsImJhc2U2NEltYWdlIiwicmVjdCIsImltYWdlIiwiYmFzZTY0VG9JbWFnZSIsImNyb3BJbWFnZSIsImltYWdlVG9CYXNlNjQiLCJpbWFnZUJ1ZmZlciIsIlBORyIsImZpbHRlclR5cGUiLCJwYXJzZSIsImNodW5rcyIsInBhY2siLCJvbiIsImNodW5rIiwicHVzaCIsImNvbmNhdCIsInRvU3RyaW5nIiwiaW1hZ2VSZWN0Iiwid2lkdGgiLCJoZWlnaHQiLCJpbnRlclJlY3QiLCJnZXRSZWN0SW50ZXJzZWN0aW9uIiwiSlNPTiIsInN0cmluZ2lmeSIsImZpcnN0VmVydGljYWxQaXhlbCIsInRvcCIsImxhc3RWZXJ0aWNhbFBpeGVsIiwiZmlyc3RIb3Jpem9udGFsUGl4ZWwiLCJsZWZ0IiwibGFzdEhvcml6b250YWxQaXhlbCIsImNyb3BwZWRBcnJheSIsInkiLCJ4IiwiZmlyc3RCeXRlSWR4SW5QaXhlbEJsb2NrIiwiYnl0ZUlkeCIsImltYWdlU2l6ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLG9CQUFvQixHQUFHLENBQTdCO0FBQ0EsTUFBTUMsc0JBQXNCLEdBQUcsQ0FBL0I7QUFDQSxNQUFNO0FBQUVDLEVBQUFBLFNBQUY7QUFBYUMsRUFBQUEsUUFB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LEdBQXVEaUIsU0FBUyxDQUFDakIsS0FBVixHQUFrQlUsSUFBdkY7QUFDQSxRQUFNVCxNQUFNLEdBQUdnQixTQUFTLENBQUNoQixNQUFWLElBQXFCTSxHQUFHLEdBQUd4QixJQUFJLENBQUNrQixNQUFoQyxHQUEwQ2xCLElBQUksQ0FBQ2tCLE1BQS9DLEdBQXlEZ0IsU0FBUyxDQUFDaEIsTUFBVixHQUFtQk0sR0FBM0Y7QUFDQSxTQUFPO0FBQUNHLElBQUFBLElBQUQ7QUFBT0gsSUFBQUEsR0FBUDtBQUFZUCxJQUFBQSxLQUFaO0FBQW1CQyxJQUFBQTtBQUFuQixHQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IEppbXAgZnJvbSAnamltcCc7XG5pbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdidWZmZXInO1xuaW1wb3J0IHsgUE5HIH0gZnJvbSAncG5nanMnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuXG5jb25zdCBCWVRFU19JTl9QSVhFTF9CTE9DSyA9IDQ7XG5jb25zdCBTQ0FOTElORV9GSUxURVJfTUVUSE9EID0gNDtcbmNvbnN0IHsgTUlNRV9KUEVHLCBNSU1FX1BORywgTUlNRV9CTVAgfSA9IEppbXA7XG5cbi8qKlxuICogVXRpbGl0eSBmdW5jdGlvbiB0byBnZXQgYSBKaW1wIGltYWdlIG9iamVjdCBmcm9tIGJ1ZmZlciBvciBiYXNlNjQgZGF0YS4gSmltcFxuICogaXMgYSBncmVhdCBsaWJyYXJ5IGhvd2V2ZXIgaXQgZG9lcyBJTyBpbiB0aGUgY29uc3RydWN0b3Igc28gaXQncyBub3RcbiAqIGNvbnZlbmllbnQgZm9yIG91ciBhc3luYy9hd2FpdCBtb2RlbC5cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlcnxzdHJpbmd9IGRhdGEgLSBiaW5hcnkgaW1hZ2UgYnVmZmVyIG9yIGJhc2U2NC1lbmNvZGVkIGltYWdlXG4gKiBzdHJpbmdcbiAqIEByZXR1cm5zIHtQcm9taXNlPEFwcGl1bUppbXA+fSAtIHRoZSBqaW1wIGltYWdlIG9iamVjdFxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRKaW1wSW1hZ2UgKGRhdGEpIHtcbiAgcmV0dXJuIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBpZiAoIV8uaXNTdHJpbmcoZGF0YSkgJiYgIV8uaXNCdWZmZXIoZGF0YSkpIHtcbiAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKCdNdXN0IGluaXRpYWxpemUgamltcCBvYmplY3Qgd2l0aCBzdHJpbmcgb3IgYnVmZmVyJykpO1xuICAgIH1cbiAgICAvLyBpZiBkYXRhIGlzIGEgc3RyaW5nLCBhc3N1bWUgaXQgaXMgYSBiYXNlNjQtZW5jb2RlZCBpbWFnZVxuICAgIGlmIChfLmlzU3RyaW5nKGRhdGEpKSB7XG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSwgJ2Jhc2U2NCcpO1xuICAgIH1cbiAgICBuZXcgSmltcChkYXRhLFxuICAgICAgLyoqXG4gICAgICAgKiBAcGFyYW0ge0Vycm9yP30gZXJyXG4gICAgICAgKiBAcGFyYW0ge0FwcGl1bUppbXB9IGltZ09ialxuICAgICAgICovXG4gICAgKGVyciwgaW1nT2JqKSA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgIH1cbiAgICAgIGlmICghaW1nT2JqKSB7XG4gICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKCdDb3VsZCBub3QgY3JlYXRlIGppbXAgaW1hZ2UgZnJvbSB0aGF0IGRhdGEnKSk7XG4gICAgICB9XG4gICAgICBpbWdPYmouZ2V0QnVmZmVyID0gQi5wcm9taXNpZnkoaW1nT2JqLmdldEJ1ZmZlci5iaW5kKGltZ09iaiksIHtjb250ZXh0OiBpbWdPYmp9KTtcbiAgICAgIHJlc29sdmUoaW1nT2JqKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ3JvcCB0aGUgaW1hZ2UgYnkgZ2l2ZW4gcmVjdGFuZ2xlICh1c2UgYmFzZTY0IHN0cmluZyBhcyBpbnB1dCBhbmQgb3V0cHV0KVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlNjRJbWFnZSBUaGUgc3RyaW5nIHdpdGggYmFzZTY0IGVuY29kZWQgaW1hZ2VcbiAqIEBwYXJhbSB7UmVnaW9ufSByZWN0IFRoZSBzZWxlY3RlZCByZWdpb24gb2YgaW1hZ2VcbiAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gYmFzZTY0IGVuY29kZWQgc3RyaW5nIG9mIGNyb3BwZWQgaW1hZ2VcbiAqL1xuYXN5bmMgZnVuY3Rpb24gY3JvcEJhc2U2NEltYWdlIChiYXNlNjRJbWFnZSwgcmVjdCkge1xuICBjb25zdCBpbWFnZSA9IGF3YWl0IGJhc2U2NFRvSW1hZ2UoYmFzZTY0SW1hZ2UpO1xuICBjcm9wSW1hZ2UoaW1hZ2UsIHJlY3QpO1xuICByZXR1cm4gYXdhaXQgaW1hZ2VUb0Jhc2U2NChpbWFnZSk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgcG5nanMgaW1hZ2UgZnJvbSBnaXZlbiBiYXNlNjQgaW1hZ2VcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZTY0SW1hZ2UgVGhlIHN0cmluZyB3aXRoIGJhc2U2NCBlbmNvZGVkIGltYWdlXG4gKiBAcmV0dXJuIHtQcm9taXNlPFBORz59IFRoZSBpbWFnZSBvYmplY3RcbiAqL1xuYXN5bmMgZnVuY3Rpb24gYmFzZTY0VG9JbWFnZSAoYmFzZTY0SW1hZ2UpIHtcbiAgY29uc3QgaW1hZ2VCdWZmZXIgPSBCdWZmZXIuZnJvbShiYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpO1xuICByZXR1cm4gYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IGltYWdlID0gbmV3IFBORyh7ZmlsdGVyVHlwZTogU0NBTkxJTkVfRklMVEVSX01FVEhPRH0pO1xuICAgIGltYWdlLnBhcnNlKGltYWdlQnVmZmVyLCAoZXJyLCBpbWFnZSkgPT4geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByb21pc2UvcHJlZmVyLWF3YWl0LXRvLWNhbGxiYWNrc1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICB9XG4gICAgICByZXNvbHZlKGltYWdlKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgYmFzZTY0IHN0cmluZyBmb3IgZ2l2ZW4gaW1hZ2Ugb2JqZWN0XG4gKlxuICogQHBhcmFtIHtQTkd9IGltYWdlIFRoZSBpbWFnZSBvYmplY3RcbiAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gVGhlIHN0cmluZyB3aXRoIGJhc2U2NCBlbmNvZGVkIGltYWdlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGltYWdlVG9CYXNlNjQgKGltYWdlKSB7XG4gIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgY2h1bmtzID0gW107XG4gICAgaW1hZ2UucGFjaygpXG4gICAgLm9uKCdkYXRhJywgKGNodW5rKSA9PiBjaHVua3MucHVzaChjaHVuaykpLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICByZXNvbHZlKEJ1ZmZlci5jb25jYXQoY2h1bmtzKS50b1N0cmluZygnYmFzZTY0JykpO1xuICAgIH0pXG4gICAgLm9uKCdlcnJvcicsIChlcnIpID0+IHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBwcm9taXNlL3ByZWZlci1hd2FpdC10by1jYWxsYmFja3NcbiAgICAgIHJlamVjdChlcnIpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDcm9wIHRoZSBpbWFnZSBieSBnaXZlbiByZWN0YW5nbGVcbiAqXG4gKiBAcGFyYW0ge1BOR30gaW1hZ2UgVGhlIGltYWdlIHRvIG11dGF0ZSBieSBjcm9wcGluZ1xuICogQHBhcmFtIHtSZWdpb259IHJlY3QgVGhlIHNlbGVjdGVkIHJlZ2lvbiBvZiBpbWFnZVxuICovXG5mdW5jdGlvbiBjcm9wSW1hZ2UgKGltYWdlLCByZWN0KSB7XG4gIGNvbnN0IGltYWdlUmVjdCA9IHt3aWR0aDogaW1hZ2Uud2lkdGgsIGhlaWdodDogaW1hZ2UuaGVpZ2h0fTtcbiAgY29uc3QgaW50ZXJSZWN0ID0gZ2V0UmVjdEludGVyc2VjdGlvbihyZWN0LCBpbWFnZVJlY3QpO1xuICBpZiAoaW50ZXJSZWN0LndpZHRoIDwgcmVjdC53aWR0aCB8fCBpbnRlclJlY3QuaGVpZ2h0IDwgcmVjdC5oZWlnaHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjcm9wICR7SlNPTi5zdHJpbmdpZnkocmVjdCl9IGZyb20gJHtKU09OLnN0cmluZ2lmeShpbWFnZVJlY3QpfSBiZWNhdXNlIHRoZSBpbnRlcnNlY3Rpb24gYmV0d2VlbiB0aGVtIHdhcyBub3QgdGhlIHNpemUgb2YgdGhlIHJlY3RgKTtcbiAgfVxuXG4gIGNvbnN0IGZpcnN0VmVydGljYWxQaXhlbCA9IGludGVyUmVjdC50b3A7XG4gIGNvbnN0IGxhc3RWZXJ0aWNhbFBpeGVsID0gaW50ZXJSZWN0LnRvcCArIGludGVyUmVjdC5oZWlnaHQ7XG5cbiAgY29uc3QgZmlyc3RIb3Jpem9udGFsUGl4ZWwgPSBpbnRlclJlY3QubGVmdDtcbiAgY29uc3QgbGFzdEhvcml6b250YWxQaXhlbCA9IGludGVyUmVjdC5sZWZ0ICsgaW50ZXJSZWN0LndpZHRoO1xuXG4gIGNvbnN0IGNyb3BwZWRBcnJheSA9IFtdO1xuICBmb3IgKGxldCB5ID0gZmlyc3RWZXJ0aWNhbFBpeGVsOyB5IDwgbGFzdFZlcnRpY2FsUGl4ZWw7IHkrKykge1xuICAgIGZvciAobGV0IHggPSBmaXJzdEhvcml6b250YWxQaXhlbDsgeCA8IGxhc3RIb3Jpem9udGFsUGl4ZWw7IHgrKykge1xuICAgICAgY29uc3QgZmlyc3RCeXRlSWR4SW5QaXhlbEJsb2NrID0gKGltYWdlUmVjdC53aWR0aCAqIHkgKyB4KSA8PCAyO1xuICAgICAgZm9yIChsZXQgYnl0ZUlkeCA9IDA7IGJ5dGVJZHggPCBCWVRFU19JTl9QSVhFTF9CTE9DSzsgYnl0ZUlkeCsrKSB7XG4gICAgICAgIGNyb3BwZWRBcnJheS5wdXNoKGltYWdlLmRhdGFbZmlyc3RCeXRlSWR4SW5QaXhlbEJsb2NrICsgYnl0ZUlkeF0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGltYWdlLmRhdGEgPSBCdWZmZXIuZnJvbShjcm9wcGVkQXJyYXkpO1xuICBpbWFnZS53aWR0aCA9IGludGVyUmVjdC53aWR0aDtcbiAgaW1hZ2UuaGVpZ2h0ID0gaW50ZXJSZWN0LmhlaWdodDtcbiAgcmV0dXJuIGltYWdlO1xufVxuXG5mdW5jdGlvbiBnZXRSZWN0SW50ZXJzZWN0aW9uIChyZWN0LCBpbWFnZVNpemUpIHtcbiAgY29uc3QgbGVmdCA9IHJlY3QubGVmdCA+PSBpbWFnZVNpemUud2lkdGggPyBpbWFnZVNpemUud2lkdGggOiByZWN0LmxlZnQ7XG4gIGNvbnN0IHRvcCA9IHJlY3QudG9wID49IGltYWdlU2l6ZS5oZWlnaHQgPyBpbWFnZVNpemUuaGVpZ2h0IDogcmVjdC50b3A7XG4gIGNvbnN0IHdpZHRoID0gaW1hZ2VTaXplLndpZHRoID49IChsZWZ0ICsgcmVjdC53aWR0aCkgPyByZWN0LndpZHRoIDogKGltYWdlU2l6ZS53aWR0aCAtIGxlZnQpO1xuICBjb25zdCBoZWlnaHQgPSBpbWFnZVNpemUuaGVpZ2h0ID49ICh0b3AgKyByZWN0LmhlaWdodCkgPyByZWN0LmhlaWdodCA6IChpbWFnZVNpemUuaGVpZ2h0IC0gdG9wKTtcbiAgcmV0dXJuIHtsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHR9O1xufVxuXG5leHBvcnQge1xuICBjcm9wQmFzZTY0SW1hZ2UsIGJhc2U2NFRvSW1hZ2UsIGltYWdlVG9CYXNlNjQsIGNyb3BJbWFnZSxcbiAgZ2V0SmltcEltYWdlLCBNSU1FX0pQRUcsIE1JTUVfUE5HLCBNSU1FX0JNUFxufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T21pdDxKaW1wLCdnZXRCdWZmZXInPiAmIHtnZXRCdWZmZXI6IEppbXBbJ2dldEJ1ZmZlckFzeW5jJ119fSBBcHBpdW1KaW1wXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBSZWdpb25cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsZWZ0XG4gKiBAcHJvcGVydHkge251bWJlcn0gdG9wXG4gKiBAcHJvcGVydHkge251bWJlcn0gd2lkdGhcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBoZWlnaHRcbiAqL1xuIl19
@@ -0,0 +1,38 @@
1
+ export { npm } from "./npm";
2
+ declare namespace _default {
3
+ export { tempDir };
4
+ export { system };
5
+ export { util };
6
+ export { fs };
7
+ export { cancellableDelay };
8
+ export { plist };
9
+ export { mkdirp };
10
+ export { logger };
11
+ export { process };
12
+ export { zip };
13
+ export { imageUtil };
14
+ export { net };
15
+ export { mjpeg };
16
+ export { node };
17
+ export { timing };
18
+ export { env };
19
+ }
20
+ export default _default;
21
+ import * as tempDir from "./tempdir";
22
+ import * as system from "./system";
23
+ import * as util from "./util";
24
+ import { fs } from "./fs";
25
+ export const cancellableDelay: typeof util.cancellableDelay;
26
+ import * as plist from "./plist";
27
+ import { mkdirp } from "./mkdirp";
28
+ import * as logger from "./logging";
29
+ import * as process from "./process";
30
+ import * as zip from "./zip";
31
+ import * as imageUtil from "./image-util";
32
+ import * as net from "./net";
33
+ import * as mjpeg from "./mjpeg";
34
+ import * as node from "./node";
35
+ import * as timing from "./timing";
36
+ import * as env from "./env";
37
+ export { tempDir, system, util, fs, plist, mkdirp, logger, process, zip, imageUtil, net, mjpeg, node, timing, env };
38
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/index.js"],"names":[],"mappings":""}
@@ -3,7 +3,28 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.zip = exports.util = exports.timing = exports.tempDir = exports.system = exports.process = exports.plist = exports.node = exports.net = exports.mkdirp = exports.mjpeg = exports.logger = exports.imageUtil = exports.fs = exports.default = exports.cancellableDelay = void 0;
6
+ exports.env = exports.default = exports.cancellableDelay = void 0;
7
+ Object.defineProperty(exports, "fs", {
8
+ enumerable: true,
9
+ get: function () {
10
+ return _fs.fs;
11
+ }
12
+ });
13
+ exports.mjpeg = exports.logger = exports.imageUtil = void 0;
14
+ Object.defineProperty(exports, "mkdirp", {
15
+ enumerable: true,
16
+ get: function () {
17
+ return _mkdirp.mkdirp;
18
+ }
19
+ });
20
+ exports.node = exports.net = void 0;
21
+ Object.defineProperty(exports, "npm", {
22
+ enumerable: true,
23
+ get: function () {
24
+ return _npm.npm;
25
+ }
26
+ });
27
+ exports.zip = exports.util = exports.timing = exports.tempDir = exports.system = exports.process = exports.plist = void 0;
7
28
 
8
29
  require("source-map-support/register");
9
30
 
@@ -19,7 +40,7 @@ var util = _interopRequireWildcard(require("./util"));
19
40
 
20
41
  exports.util = util;
21
42
 
22
- var fsIndex = _interopRequireWildcard(require("./fs"));
43
+ var _fs = require("./fs");
23
44
 
24
45
  var net = _interopRequireWildcard(require("./net"));
25
46
 
@@ -29,7 +50,7 @@ var plist = _interopRequireWildcard(require("./plist"));
29
50
 
30
51
  exports.plist = plist;
31
52
 
32
- var mkdirpIndex = _interopRequireWildcard(require("./mkdirp"));
53
+ var _mkdirp = require("./mkdirp");
33
54
 
34
55
  var logger = _interopRequireWildcard(require("./logging"));
35
56
 
@@ -59,30 +80,28 @@ var timing = _interopRequireWildcard(require("./timing"));
59
80
 
60
81
  exports.timing = timing;
61
82
 
83
+ var env = _interopRequireWildcard(require("./env"));
84
+
85
+ exports.env = env;
86
+
87
+ var _npm = require("./npm");
88
+
62
89
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
63
90
 
64
91
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
65
92
 
66
- const {
67
- fs
68
- } = fsIndex;
69
- exports.fs = fs;
70
93
  const {
71
94
  cancellableDelay
72
95
  } = util;
73
96
  exports.cancellableDelay = cancellableDelay;
74
- const {
75
- mkdirp
76
- } = mkdirpIndex;
77
- exports.mkdirp = mkdirp;
78
97
  var _default = {
79
98
  tempDir,
80
99
  system,
81
100
  util,
82
- fs,
101
+ fs: _fs.fs,
83
102
  cancellableDelay,
84
103
  plist,
85
- mkdirp,
104
+ mkdirp: _mkdirp.mkdirp,
86
105
  logger,
87
106
  process,
88
107
  zip,
@@ -90,9 +109,8 @@ var _default = {
90
109
  net,
91
110
  mjpeg,
92
111
  node,
93
- timing
112
+ timing,
113
+ env
94
114
  };
95
- exports.default = _default;require('source-map-support').install();
96
-
97
-
98
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9pbmRleC5qcyJdLCJuYW1lcyI6WyJmcyIsImZzSW5kZXgiLCJjYW5jZWxsYWJsZURlbGF5IiwidXRpbCIsIm1rZGlycCIsIm1rZGlycEluZGV4IiwidGVtcERpciIsInN5c3RlbSIsInBsaXN0IiwibG9nZ2VyIiwicHJvY2VzcyIsInppcCIsImltYWdlVXRpbCIsIm5ldCIsIm1qcGVnIiwibm9kZSIsInRpbWluZyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7Ozs7OztBQUdBLE1BQU07QUFBRUEsRUFBQUE7QUFBRixJQUFTQyxPQUFmOztBQUNBLE1BQU07QUFBRUMsRUFBQUE7QUFBRixJQUF1QkMsSUFBN0I7O0FBQ0EsTUFBTTtBQUFFQyxFQUFBQTtBQUFGLElBQWFDLFdBQW5COztlQU1lO0FBQ2JDLEVBQUFBLE9BRGE7QUFDSkMsRUFBQUEsTUFESTtBQUNJSixFQUFBQSxJQURKO0FBQ1VILEVBQUFBLEVBRFY7QUFDY0UsRUFBQUEsZ0JBRGQ7QUFDZ0NNLEVBQUFBLEtBRGhDO0FBQ3VDSixFQUFBQSxNQUR2QztBQUMrQ0ssRUFBQUEsTUFEL0M7QUFDdURDLEVBQUFBLE9BRHZEO0FBRWJDLEVBQUFBLEdBRmE7QUFFUkMsRUFBQUEsU0FGUTtBQUVHQyxFQUFBQSxHQUZIO0FBRVFDLEVBQUFBLEtBRlI7QUFFZUMsRUFBQUEsSUFGZjtBQUVxQkMsRUFBQUE7QUFGckIsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHRlbXBEaXIgZnJvbSAnLi90ZW1wZGlyJztcbmltcG9ydCAqIGFzIHN5c3RlbSBmcm9tICcuL3N5c3RlbSc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgKiBhcyBmc0luZGV4IGZyb20gJy4vZnMnO1xuaW1wb3J0ICogYXMgbmV0IGZyb20gJy4vbmV0JztcbmltcG9ydCAqIGFzIHBsaXN0IGZyb20gJy4vcGxpc3QnO1xuaW1wb3J0ICogYXMgbWtkaXJwSW5kZXggZnJvbSAnLi9ta2RpcnAnO1xuaW1wb3J0ICogYXMgbG9nZ2VyIGZyb20gJy4vbG9nZ2luZyc7XG5pbXBvcnQgKiBhcyBwcm9jZXNzIGZyb20gJy4vcHJvY2Vzcyc7XG5pbXBvcnQgKiBhcyB6aXAgZnJvbSAnLi96aXAnO1xuaW1wb3J0ICogYXMgaW1hZ2VVdGlsIGZyb20gJy4vaW1hZ2UtdXRpbCc7XG5pbXBvcnQgKiBhcyBtanBlZyBmcm9tICcuL21qcGVnJztcbmltcG9ydCAqIGFzIG5vZGUgZnJvbSAnLi9ub2RlJztcbmltcG9ydCAqIGFzIHRpbWluZyBmcm9tICcuL3RpbWluZyc7XG5cblxuY29uc3QgeyBmcyB9ID0gZnNJbmRleDtcbmNvbnN0IHsgY2FuY2VsbGFibGVEZWxheSB9ID0gdXRpbDtcbmNvbnN0IHsgbWtkaXJwIH0gPSBta2RpcnBJbmRleDtcblxuZXhwb3J0IHtcbiAgdGVtcERpciwgc3lzdGVtLCB1dGlsLCBmcywgY2FuY2VsbGFibGVEZWxheSwgcGxpc3QsIG1rZGlycCwgbG9nZ2VyLCBwcm9jZXNzLFxuICB6aXAsIGltYWdlVXRpbCwgbmV0LCBtanBlZywgbm9kZSwgdGltaW5nLFxufTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgdGVtcERpciwgc3lzdGVtLCB1dGlsLCBmcywgY2FuY2VsbGFibGVEZWxheSwgcGxpc3QsIG1rZGlycCwgbG9nZ2VyLCBwcm9jZXNzLFxuICB6aXAsIGltYWdlVXRpbCwgbmV0LCBtanBlZywgbm9kZSwgdGltaW5nLFxufTtcbiJdLCJmaWxlIjoibGliL2luZGV4LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
115
+ exports.default = _default;
116
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9pbmRleC5qcyJdLCJuYW1lcyI6WyJjYW5jZWxsYWJsZURlbGF5IiwidXRpbCIsInRlbXBEaXIiLCJzeXN0ZW0iLCJmcyIsInBsaXN0IiwibWtkaXJwIiwibG9nZ2VyIiwicHJvY2VzcyIsInppcCIsImltYWdlVXRpbCIsIm5ldCIsIm1qcGVnIiwibm9kZSIsInRpbWluZyIsImVudiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFFQTs7Ozs7O0FBRUEsTUFBTTtBQUFFQSxFQUFBQTtBQUFGLElBQXVCQyxJQUE3Qjs7ZUFNZTtBQUNiQyxFQUFBQSxPQURhO0FBQ0pDLEVBQUFBLE1BREk7QUFDSUYsRUFBQUEsSUFESjtBQUNVRyxFQUFBQSxFQUFFLEVBQUZBLE1BRFY7QUFDY0osRUFBQUEsZ0JBRGQ7QUFDZ0NLLEVBQUFBLEtBRGhDO0FBQ3VDQyxFQUFBQSxNQUFNLEVBQU5BLGNBRHZDO0FBQytDQyxFQUFBQSxNQUQvQztBQUN1REMsRUFBQUEsT0FEdkQ7QUFFYkMsRUFBQUEsR0FGYTtBQUVSQyxFQUFBQSxTQUZRO0FBRUdDLEVBQUFBLEdBRkg7QUFFUUMsRUFBQUEsS0FGUjtBQUVlQyxFQUFBQSxJQUZmO0FBRXFCQyxFQUFBQSxNQUZyQjtBQUU2QkMsRUFBQUE7QUFGN0IsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHRlbXBEaXIgZnJvbSAnLi90ZW1wZGlyJztcbmltcG9ydCAqIGFzIHN5c3RlbSBmcm9tICcuL3N5c3RlbSc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgeyBmcyB9IGZyb20gJy4vZnMnO1xuaW1wb3J0ICogYXMgbmV0IGZyb20gJy4vbmV0JztcbmltcG9ydCAqIGFzIHBsaXN0IGZyb20gJy4vcGxpc3QnO1xuaW1wb3J0IHsgbWtkaXJwIH0gZnJvbSAnLi9ta2RpcnAnO1xuaW1wb3J0ICogYXMgbG9nZ2VyIGZyb20gJy4vbG9nZ2luZyc7XG5pbXBvcnQgKiBhcyBwcm9jZXNzIGZyb20gJy4vcHJvY2Vzcyc7XG5pbXBvcnQgKiBhcyB6aXAgZnJvbSAnLi96aXAnO1xuaW1wb3J0ICogYXMgaW1hZ2VVdGlsIGZyb20gJy4vaW1hZ2UtdXRpbCc7XG5pbXBvcnQgKiBhcyBtanBlZyBmcm9tICcuL21qcGVnJztcbmltcG9ydCAqIGFzIG5vZGUgZnJvbSAnLi9ub2RlJztcbmltcG9ydCAqIGFzIHRpbWluZyBmcm9tICcuL3RpbWluZyc7XG5pbXBvcnQgKiBhcyBlbnYgZnJvbSAnLi9lbnYnO1xuXG5leHBvcnQgeyBucG0gfSBmcm9tICcuL25wbSc7XG5cbmNvbnN0IHsgY2FuY2VsbGFibGVEZWxheSB9ID0gdXRpbDtcblxuZXhwb3J0IHtcbiAgdGVtcERpciwgc3lzdGVtLCB1dGlsLCBmcywgY2FuY2VsbGFibGVEZWxheSwgcGxpc3QsIG1rZGlycCwgbG9nZ2VyLCBwcm9jZXNzLFxuICB6aXAsIGltYWdlVXRpbCwgbmV0LCBtanBlZywgbm9kZSwgdGltaW5nLCBlbnZcbn07XG5leHBvcnQgZGVmYXVsdCB7XG4gIHRlbXBEaXIsIHN5c3RlbSwgdXRpbCwgZnMsIGNhbmNlbGxhYmxlRGVsYXksIHBsaXN0LCBta2RpcnAsIGxvZ2dlciwgcHJvY2VzcyxcbiAgemlwLCBpbWFnZVV0aWwsIG5ldCwgbWpwZWcsIG5vZGUsIHRpbWluZywgZW52XG59O1xuIl19