@appium/support 2.60.0 → 2.61.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.
- package/build/lib/console.d.ts +1 -1
- package/build/lib/console.js +3 -3
- package/build/lib/console.js.map +1 -0
- package/build/lib/env.d.ts +8 -18
- package/build/lib/env.d.ts.map +1 -1
- package/build/lib/env.js +57 -36
- package/build/lib/env.js.map +1 -0
- package/build/lib/fs.d.ts +39 -10
- package/build/lib/fs.d.ts.map +1 -1
- package/build/lib/fs.js +20 -4
- package/build/lib/fs.js.map +1 -0
- package/build/lib/image-util.js +3 -3
- package/build/lib/image-util.js.map +1 -0
- package/build/lib/index.js.map +1 -0
- package/build/lib/log-internal.js +3 -3
- package/build/lib/log-internal.js.map +1 -0
- package/build/lib/logger.js.map +1 -0
- package/build/lib/logging.js +3 -3
- package/build/lib/logging.js.map +1 -0
- package/build/lib/mjpeg.js +3 -3
- package/build/lib/mjpeg.js.map +1 -0
- package/build/lib/mkdirp.js.map +1 -0
- package/build/lib/net.js +3 -3
- package/build/lib/net.js.map +1 -0
- package/build/lib/node.js +3 -3
- package/build/lib/node.js.map +1 -0
- package/build/lib/npm.js +3 -3
- package/build/lib/npm.js.map +1 -0
- package/build/lib/plist.js +3 -3
- package/build/lib/plist.js.map +1 -0
- package/build/lib/process.js.map +1 -0
- package/build/lib/system.js +3 -3
- package/build/lib/system.js.map +1 -0
- package/build/lib/tempdir.js +3 -3
- package/build/lib/tempdir.js.map +1 -0
- package/build/lib/timing.js +3 -3
- package/build/lib/timing.js.map +1 -0
- package/build/lib/util.js +3 -3
- package/build/lib/util.js.map +1 -0
- package/build/lib/zip.js +3 -3
- package/build/lib/zip.js.map +1 -0
- package/build/tsconfig.tsbuildinfo +1 -1
- package/lib/env.js +63 -74
- package/lib/fs.js +34 -7
- package/package.json +8 -9
package/build/lib/mjpeg.js
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
3
|
Object.defineProperty(exports, "__esModule", {
|
|
6
4
|
value: true
|
|
7
5
|
});
|
|
@@ -23,6 +21,8 @@ var _node = require("./node");
|
|
|
23
21
|
|
|
24
22
|
var _axios = _interopRequireDefault(require("axios"));
|
|
25
23
|
|
|
24
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
25
|
+
|
|
26
26
|
let MJpegConsumer = null;
|
|
27
27
|
|
|
28
28
|
async function initMJpegConsumer() {
|
|
@@ -151,4 +151,4 @@ class MJpegStream extends _stream.Writable {
|
|
|
151
151
|
}
|
|
152
152
|
|
|
153
153
|
exports.MJpegStream = MJpegStream;
|
|
154
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNSnBlZ0NvbnN1bWVyIiwiaW5pdE1KcGVnQ29uc3VtZXIiLCJyZXF1aXJlUGFja2FnZSIsImlnbiIsIkVycm9yIiwiTUpQRUdfU0VSVkVSX1RJTUVPVVRfTVMiLCJNSnBlZ1N0cmVhbSIsIldyaXRhYmxlIiwidXBkYXRlQ291bnQiLCJjb25zdHJ1Y3RvciIsIm1KcGVnVXJsIiwiZXJyb3JIYW5kbGVyIiwiXyIsIm5vb3AiLCJvcHRpb25zIiwidXJsIiwiY2xlYXIiLCJsYXN0Q2h1bmtCYXNlNjQiLCJsYXN0Q2h1bmsiLCJpc0VtcHR5IiwiaXNCdWZmZXIiLCJ0b1N0cmluZyIsImxhc3RDaHVua1BORyIsImpwZyIsImdldEppbXBJbWFnZSIsImdldEJ1ZmZlciIsIk1JTUVfUE5HIiwiZSIsImxhc3RDaHVua1BOR0Jhc2U2NCIsInBuZyIsInJlZ2lzdGVyU3RhcnRTdWNjZXNzIiwicmVnaXN0ZXJTdGFydEZhaWx1cmUiLCJyZXNwb25zZVN0cmVhbSIsImNvbnN1bWVyIiwic3RhcnQiLCJzZXJ2ZXJUaW1lb3V0Iiwic3RvcCIsInN0YXJ0UHJvbWlzZSIsIkIiLCJyZXMiLCJyZWoiLCJ0aW1lb3V0Iiwib25FcnIiLCJlcnIiLCJsb2ciLCJlcnJvciIsIm1lc3NhZ2UiLCJvbkNsb3NlIiwiZGVidWciLCJheGlvcyIsInJlc3BvbnNlVHlwZSIsImRhdGEiLCJvbmNlIiwib24iLCJwaXBlIiwidW5waXBlIiwiZGVzdHJveSIsIndyaXRlIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL21qcGVnLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7Z2V0SmltcEltYWdlLCBNSU1FX1BOR30gZnJvbSAnLi9pbWFnZS11dGlsJztcbmltcG9ydCB7V3JpdGFibGV9IGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQge3JlcXVpcmVQYWNrYWdlfSBmcm9tICcuL25vZGUnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcblxuLy8gbGF6eSBsb2FkIHRoaXMsIGFzIGl0IG1pZ2h0IG5vdCBiZSBhdmFpbGFibGVcbmxldCBNSnBlZ0NvbnN1bWVyID0gbnVsbDtcblxuLyoqXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgYG1qcGVnLWNvbnN1bWVyYCBtb2R1bGUgaXMgbm90IGluc3RhbGxlZCBvciBjYW5ub3QgYmUgbG9hZGVkXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGluaXRNSnBlZ0NvbnN1bWVyKCkge1xuICBpZiAoIU1KcGVnQ29uc3VtZXIpIHtcbiAgICB0cnkge1xuICAgICAgTUpwZWdDb25zdW1lciA9IGF3YWl0IHJlcXVpcmVQYWNrYWdlKCdtanBlZy1jb25zdW1lcicpO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgfVxuICBpZiAoIU1KcGVnQ29uc3VtZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnbWpwZWctY29uc3VtZXIgbW9kdWxlIGlzIHJlcXVpcmVkIHRvIHVzZSBNSlBFRy1vdmVyLUhUVFAgZmVhdHVyZXMuICcgK1xuICAgICAgICAnUGxlYXNlIGluc3RhbGwgaXQgZmlyc3QgKG5wbSBpIC1nIG1qcGVnLWNvbnN1bWVyKSBhbmQgcmVzdGFydCBBcHBpdW0uJ1xuICAgICk7XG4gIH1cbn1cblxuLy8gYW1vdW50IG9mIHRpbWUgdG8gd2FpdCBmb3IgdGhlIGZpcnN0IGltYWdlIGluIHRoZSBzdHJlYW1cbmNvbnN0IE1KUEVHX1NFUlZFUl9USU1FT1VUX01TID0gMTAwMDA7XG5cbi8qKiBDbGFzcyB3aGljaCBzdG9yZXMgdGhlIGxhc3QgYml0IG9mIGRhdGEgc3RyZWFtZWQgaW50byBpdCAqL1xuY2xhc3MgTUpwZWdTdHJlYW0gZXh0ZW5kcyBXcml0YWJsZSB7XG4gIC8qKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgdXBkYXRlQ291bnQgPSAwO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gTUpwZWdTdHJlYW1cbiAgICogQHBhcmFtIHtzdHJpbmd9IG1KcGVnVXJsIC0gVVJMIG9mIE1KUEVHLW92ZXItSFRUUCBzdHJlYW1cbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gW2Vycm9ySGFuZGxlcj1ub29wXSAtIGFkZGl0aW9uYWwgZnVuY3Rpb24gdGhhdCB3aWxsIGJlXG4gICAqIGNhbGxlZCBpbiB0aGUgY2FzZSBvZiBhbnkgZXJyb3JzLlxuICAgKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnM9e31dIC0gT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBXcml0YWJsZSBjb25zdHJ1Y3RvclxuICAgKi9cbiAgY29uc3RydWN0b3IobUpwZWdVcmwsIGVycm9ySGFuZGxlciA9IF8ubm9vcCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG5cbiAgICB0aGlzLmVycm9ySGFuZGxlciA9IGVycm9ySGFuZGxlcjtcbiAgICB0aGlzLnVybCA9IG1KcGVnVXJsO1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGJhc2U2NC1lbmNvZGVkIHZlcnNpb24gb2YgdGhlIEpQRUdcbiAgICpcbiAgICogQHJldHVybnMgez9zdHJpbmd9IGJhc2U2NC1lbmNvZGVkIEpQRUcgaW1hZ2UgZGF0YVxuICAgKiBvciBgbnVsbGAgaWYgbm8gaW1hZ2UgY2FuIGJlIHBhcnNlZFxuICAgKi9cbiAgZ2V0IGxhc3RDaHVua0Jhc2U2NCgpIHtcbiAgICBjb25zdCBsYXN0Q2h1bmsgPSAvKiogQHR5cGUge0J1ZmZlcn0gKi8gKHRoaXMubGFzdENodW5rKTtcbiAgICByZXR1cm4gIV8uaXNFbXB0eSh0aGlzLmxhc3RDaHVuaykgJiYgXy5pc0J1ZmZlcih0aGlzLmxhc3RDaHVuaylcbiAgICAgID8gbGFzdENodW5rLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgICAgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgUE5HIHZlcnNpb24gb2YgdGhlIEpQRUcgYnVmZmVyXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEJ1ZmZlcj8+fSBQTkcgaW1hZ2UgZGF0YSBvciBgbnVsbGAgaWYgbm8gUE5HXG4gICAqIGltYWdlIGNhbiBiZSBwYXJzZWRcbiAgICovXG4gIGFzeW5jIGxhc3RDaHVua1BORygpIHtcbiAgICBjb25zdCBsYXN0Q2h1bmsgPSAvKiogQHR5cGUge0J1ZmZlcn0gKi8gKHRoaXMubGFzdENodW5rKTtcbiAgICBpZiAoXy5pc0VtcHR5KGxhc3RDaHVuaykgfHwgIV8uaXNCdWZmZXIobGFzdENodW5rKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGpwZyA9IGF3YWl0IGdldEppbXBJbWFnZShsYXN0Q2h1bmspO1xuICAgICAgcmV0dXJuIGF3YWl0IGpwZy5nZXRCdWZmZXIoTUlNRV9QTkcpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGJhc2U2NC1lbmNvZGVkIHZlcnNpb24gb2YgdGhlIFBOR1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc/Pn0gYmFzZTY0LWVuY29kZWQgUE5HIGltYWdlIGRhdGFcbiAgICogb3IgYG51bGxgIGlmIG5vIGltYWdlIGNhbiBiZSBwYXJzZWRcbiAgICovXG4gIGFzeW5jIGxhc3RDaHVua1BOR0Jhc2U2NCgpIHtcbiAgICBjb25zdCBwbmcgPSBhd2FpdCB0aGlzLmxhc3RDaHVua1BORygpO1xuICAgIHJldHVybiBwbmcgPyBwbmcudG9TdHJpbmcoJ2Jhc2U2NCcpIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCBpbnRlcm5hbCBzdGF0ZVxuICAgKi9cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy5yZWdpc3RlclN0YXJ0U3VjY2VzcyA9IG51bGw7XG4gICAgdGhpcy5yZWdpc3RlclN0YXJ0RmFpbHVyZSA9IG51bGw7XG4gICAgdGhpcy5yZXNwb25zZVN0cmVhbSA9IG51bGw7XG4gICAgdGhpcy5jb25zdW1lciA9IG51bGw7XG4gICAgdGhpcy5sYXN0Q2h1bmsgPSBudWxsO1xuICAgIHRoaXMudXBkYXRlQ291bnQgPSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHJlYWRpbmcgdGhlIE1KcGVnIHN0cmVhbSBhbmQgc3RvcmluZyB0aGUgbGFzdCBpbWFnZVxuICAgKi9cbiAgYXN5bmMgc3RhcnQoc2VydmVyVGltZW91dCA9IE1KUEVHX1NFUlZFUl9USU1FT1VUX01TKSB7XG4gICAgLy8gZW5zdXJlIHdlJ3JlIG5vdCBzdGFydGVkIGFscmVhZHlcbiAgICB0aGlzLnN0b3AoKTtcblxuICAgIGF3YWl0IGluaXRNSnBlZ0NvbnN1bWVyKCk7XG5cbiAgICB0aGlzLmNvbnN1bWVyID0gbmV3IE1KcGVnQ29uc3VtZXIoKTtcblxuICAgIC8vIHVzZSB0aGUgZGVmZXJyZWQgcGF0dGVybiBzbyB3ZSBjYW4gd2FpdCBmb3IgdGhlIHN0YXJ0IG9mIHRoZSBzdHJlYW1cbiAgICAvLyBiYXNlZCBvbiB3aGF0IGNvbWVzIGluIGZyb20gYW4gZXh0ZXJuYWwgcGlwZVxuICAgIGNvbnN0IHN0YXJ0UHJvbWlzZSA9IG5ldyBCKChyZXMsIHJlaikgPT4ge1xuICAgICAgdGhpcy5yZWdpc3RlclN0YXJ0U3VjY2VzcyA9IHJlcztcbiAgICAgIHRoaXMucmVnaXN0ZXJTdGFydEZhaWx1cmUgPSByZWo7XG4gICAgfSlcbiAgICAgIC8vIHN0YXJ0IGEgdGltZW91dCBzbyB0aGF0IGlmIHRoZSBzZXJ2ZXIgZG9lcyBub3QgcmV0dXJuIGRhdGEsIHdlIGRvbid0XG4gICAgICAvLyBibG9jayBmb3JldmVyLlxuICAgICAgLnRpbWVvdXQoXG4gICAgICAgIHNlcnZlclRpbWVvdXQsXG4gICAgICAgIGBXYWl0ZWQgJHtzZXJ2ZXJUaW1lb3V0fW1zIGJ1dCB0aGUgTUpQRUcgc2VydmVyIG5ldmVyIHNlbnQgYW55IGltYWdlc2BcbiAgICAgICk7XG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLnVybDtcbiAgICBjb25zdCBvbkVyciA9IChlcnIpID0+IHtcbiAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBnZXQgYW4gb3V0ZGF0ZWQgc2NyZWVuc2hvdCBpZiB0aGVyZSB3YXMgYW4gZXJyb3JcbiAgICAgIHRoaXMubGFzdENodW5rID0gbnVsbDtcblxuICAgICAgbG9nLmVycm9yKGBFcnJvciBnZXR0aW5nIE1KcGVnIHNjcmVlbnNob3QgY2h1bms6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICB0aGlzLmVycm9ySGFuZGxlcihlcnIpO1xuICAgICAgaWYgKHRoaXMucmVnaXN0ZXJTdGFydEZhaWx1cmUpIHtcbiAgICAgICAgdGhpcy5yZWdpc3RlclN0YXJ0RmFpbHVyZShlcnIpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgb25DbG9zZSA9ICgpID0+IHtcbiAgICAgIGxvZy5kZWJ1ZyhgVGhlIGNvbm5lY3Rpb24gdG8gTUpQRUcgc2VydmVyIGF0ICR7dXJsfSBoYXMgYmVlbiBjbG9zZWRgKTtcbiAgICAgIHRoaXMubGFzdENodW5rID0gbnVsbDtcbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMucmVzcG9uc2VTdHJlYW0gPSAoXG4gICAgICAgIGF3YWl0IGF4aW9zKHtcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgcmVzcG9uc2VUeXBlOiAnc3RyZWFtJyxcbiAgICAgICAgICB0aW1lb3V0OiBzZXJ2ZXJUaW1lb3V0LFxuICAgICAgICB9KVxuICAgICAgKS5kYXRhO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBvbkVycihlKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc3BvbnNlU3RyZWFtXG4gICAgICAub25jZSgnY2xvc2UnLCBvbkNsb3NlKVxuICAgICAgLm9uKCdlcnJvcicsIG9uRXJyKSAvLyBlbnN1cmUgd2UgZG8gc29tZXRoaW5nIHdpdGggZXJyb3JzXG4gICAgICAucGlwZSh0aGlzLmNvbnN1bWVyKSAvLyBhbGxvdyBjaHVua2luZyBhbmQgdHJhbnNmb3JtaW5nIG9mIGpwZWcgZGF0YVxuICAgICAgLnBpcGUodGhpcyk7IC8vIHNlbmQgdGhlIGFjdHVhbCBqcGVncyB0byBvdXJzZWxmXG5cbiAgICBhd2FpdCBzdGFydFByb21pc2U7XG4gIH1cblxuICAvKipcbiAgICogU3RvcCByZWFkaW5nIHRoZSBNSnBlZyBzdHJlYW0uIEVuc3VyZSB3ZSBkaXNjb25uZWN0IGFsbCB0aGUgcGlwZXMgYW5kIHN0b3BcbiAgICogdGhlIEhUVFAgcmVxdWVzdCBpdHNlbGYuIFRoZW4gcmVzZXQgdGhlIHN0YXRlLlxuICAgKi9cbiAgc3RvcCgpIHtcbiAgICBpZiAoIXRoaXMuY29uc3VtZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlc3BvbnNlU3RyZWFtLnVucGlwZSh0aGlzLmNvbnN1bWVyKTtcbiAgICB0aGlzLmNvbnN1bWVyLnVucGlwZSh0aGlzKTtcbiAgICB0aGlzLnJlc3BvbnNlU3RyZWFtLmRlc3Ryb3koKTtcbiAgICB0aGlzLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGUgdGhlIFdyaXRhYmxlIHdyaXRlKCkgbWV0aG9kIGluIG9yZGVyIHRvIHNhdmUgdGhlIGxhc3QgaW1hZ2UgYW5kXG4gICAqIGxvZyB0aGUgbnVtYmVyIG9mIGltYWdlcyB3ZSBoYXZlIHJlY2VpdmVkXG4gICAqIEBvdmVycmlkZVxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gZGF0YSAtIGJpbmFyeSBkYXRhIHN0cmVhbWVkIGZyb20gdGhlIE1KcGVnIGNvbnN1bWVyXG4gICAqL1xuICB3cml0ZShkYXRhKSB7XG4gICAgdGhpcy5sYXN0Q2h1bmsgPSBkYXRhO1xuICAgIHRoaXMudXBkYXRlQ291bnQrKztcblxuICAgIGlmICh0aGlzLnJlZ2lzdGVyU3RhcnRTdWNjZXNzKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVyU3RhcnRTdWNjZXNzKCk7XG4gICAgICB0aGlzLnJlZ2lzdGVyU3RhcnRTdWNjZXNzID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1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
|
|
154
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNSnBlZ0NvbnN1bWVyIiwiaW5pdE1KcGVnQ29uc3VtZXIiLCJyZXF1aXJlUGFja2FnZSIsImlnbiIsIkVycm9yIiwiTUpQRUdfU0VSVkVSX1RJTUVPVVRfTVMiLCJNSnBlZ1N0cmVhbSIsIldyaXRhYmxlIiwidXBkYXRlQ291bnQiLCJjb25zdHJ1Y3RvciIsIm1KcGVnVXJsIiwiZXJyb3JIYW5kbGVyIiwiXyIsIm5vb3AiLCJvcHRpb25zIiwidXJsIiwiY2xlYXIiLCJsYXN0Q2h1bmtCYXNlNjQiLCJsYXN0Q2h1bmsiLCJpc0VtcHR5IiwiaXNCdWZmZXIiLCJ0b1N0cmluZyIsImxhc3RDaHVua1BORyIsImpwZyIsImdldEppbXBJbWFnZSIsImdldEJ1ZmZlciIsIk1JTUVfUE5HIiwiZSIsImxhc3RDaHVua1BOR0Jhc2U2NCIsInBuZyIsInJlZ2lzdGVyU3RhcnRTdWNjZXNzIiwicmVnaXN0ZXJTdGFydEZhaWx1cmUiLCJyZXNwb25zZVN0cmVhbSIsImNvbnN1bWVyIiwic3RhcnQiLCJzZXJ2ZXJUaW1lb3V0Iiwic3RvcCIsInN0YXJ0UHJvbWlzZSIsIkIiLCJyZXMiLCJyZWoiLCJ0aW1lb3V0Iiwib25FcnIiLCJlcnIiLCJsb2ciLCJlcnJvciIsIm1lc3NhZ2UiLCJvbkNsb3NlIiwiZGVidWciLCJheGlvcyIsInJlc3BvbnNlVHlwZSIsImRhdGEiLCJvbmNlIiwib24iLCJwaXBlIiwidW5waXBlIiwiZGVzdHJveSIsIndyaXRlIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL21qcGVnLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7Z2V0SmltcEltYWdlLCBNSU1FX1BOR30gZnJvbSAnLi9pbWFnZS11dGlsJztcbmltcG9ydCB7V3JpdGFibGV9IGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQge3JlcXVpcmVQYWNrYWdlfSBmcm9tICcuL25vZGUnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcblxuLy8gbGF6eSBsb2FkIHRoaXMsIGFzIGl0IG1pZ2h0IG5vdCBiZSBhdmFpbGFibGVcbmxldCBNSnBlZ0NvbnN1bWVyID0gbnVsbDtcblxuLyoqXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgYG1qcGVnLWNvbnN1bWVyYCBtb2R1bGUgaXMgbm90IGluc3RhbGxlZCBvciBjYW5ub3QgYmUgbG9hZGVkXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGluaXRNSnBlZ0NvbnN1bWVyKCkge1xuICBpZiAoIU1KcGVnQ29uc3VtZXIpIHtcbiAgICB0cnkge1xuICAgICAgTUpwZWdDb25zdW1lciA9IGF3YWl0IHJlcXVpcmVQYWNrYWdlKCdtanBlZy1jb25zdW1lcicpO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgfVxuICBpZiAoIU1KcGVnQ29uc3VtZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnbWpwZWctY29uc3VtZXIgbW9kdWxlIGlzIHJlcXVpcmVkIHRvIHVzZSBNSlBFRy1vdmVyLUhUVFAgZmVhdHVyZXMuICcgK1xuICAgICAgICAnUGxlYXNlIGluc3RhbGwgaXQgZmlyc3QgKG5wbSBpIC1nIG1qcGVnLWNvbnN1bWVyKSBhbmQgcmVzdGFydCBBcHBpdW0uJ1xuICAgICk7XG4gIH1cbn1cblxuLy8gYW1vdW50IG9mIHRpbWUgdG8gd2FpdCBmb3IgdGhlIGZpcnN0IGltYWdlIGluIHRoZSBzdHJlYW1cbmNvbnN0IE1KUEVHX1NFUlZFUl9USU1FT1VUX01TID0gMTAwMDA7XG5cbi8qKiBDbGFzcyB3aGljaCBzdG9yZXMgdGhlIGxhc3QgYml0IG9mIGRhdGEgc3RyZWFtZWQgaW50byBpdCAqL1xuY2xhc3MgTUpwZWdTdHJlYW0gZXh0ZW5kcyBXcml0YWJsZSB7XG4gIC8qKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgdXBkYXRlQ291bnQgPSAwO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gTUpwZWdTdHJlYW1cbiAgICogQHBhcmFtIHtzdHJpbmd9IG1KcGVnVXJsIC0gVVJMIG9mIE1KUEVHLW92ZXItSFRUUCBzdHJlYW1cbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gW2Vycm9ySGFuZGxlcj1ub29wXSAtIGFkZGl0aW9uYWwgZnVuY3Rpb24gdGhhdCB3aWxsIGJlXG4gICAqIGNhbGxlZCBpbiB0aGUgY2FzZSBvZiBhbnkgZXJyb3JzLlxuICAgKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnM9e31dIC0gT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBXcml0YWJsZSBjb25zdHJ1Y3RvclxuICAgKi9cbiAgY29uc3RydWN0b3IobUpwZWdVcmwsIGVycm9ySGFuZGxlciA9IF8ubm9vcCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG5cbiAgICB0aGlzLmVycm9ySGFuZGxlciA9IGVycm9ySGFuZGxlcjtcbiAgICB0aGlzLnVybCA9IG1KcGVnVXJsO1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGJhc2U2NC1lbmNvZGVkIHZlcnNpb24gb2YgdGhlIEpQRUdcbiAgICpcbiAgICogQHJldHVybnMgez9zdHJpbmd9IGJhc2U2NC1lbmNvZGVkIEpQRUcgaW1hZ2UgZGF0YVxuICAgKiBvciBgbnVsbGAgaWYgbm8gaW1hZ2UgY2FuIGJlIHBhcnNlZFxuICAgKi9cbiAgZ2V0IGxhc3RDaHVua0Jhc2U2NCgpIHtcbiAgICBjb25zdCBsYXN0Q2h1bmsgPSAvKiogQHR5cGUge0J1ZmZlcn0gKi8gKHRoaXMubGFzdENodW5rKTtcbiAgICByZXR1cm4gIV8uaXNFbXB0eSh0aGlzLmxhc3RDaHVuaykgJiYgXy5pc0J1ZmZlcih0aGlzLmxhc3RDaHVuaylcbiAgICAgID8gbGFzdENodW5rLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgICAgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgUE5HIHZlcnNpb24gb2YgdGhlIEpQRUcgYnVmZmVyXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEJ1ZmZlcj8+fSBQTkcgaW1hZ2UgZGF0YSBvciBgbnVsbGAgaWYgbm8gUE5HXG4gICAqIGltYWdlIGNhbiBiZSBwYXJzZWRcbiAgICovXG4gIGFzeW5jIGxhc3RDaHVua1BORygpIHtcbiAgICBjb25zdCBsYXN0Q2h1bmsgPSAvKiogQHR5cGUge0J1ZmZlcn0gKi8gKHRoaXMubGFzdENodW5rKTtcbiAgICBpZiAoXy5pc0VtcHR5KGxhc3RDaHVuaykgfHwgIV8uaXNCdWZmZXIobGFzdENodW5rKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGpwZyA9IGF3YWl0IGdldEppbXBJbWFnZShsYXN0Q2h1bmspO1xuICAgICAgcmV0dXJuIGF3YWl0IGpwZy5nZXRCdWZmZXIoTUlNRV9QTkcpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGJhc2U2NC1lbmNvZGVkIHZlcnNpb24gb2YgdGhlIFBOR1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc/Pn0gYmFzZTY0LWVuY29kZWQgUE5HIGltYWdlIGRhdGFcbiAgICogb3IgYG51bGxgIGlmIG5vIGltYWdlIGNhbiBiZSBwYXJzZWRcbiAgICovXG4gIGFzeW5jIGxhc3RDaHVua1BOR0Jhc2U2NCgpIHtcbiAgICBjb25zdCBwbmcgPSBhd2FpdCB0aGlzLmxhc3RDaHVua1BORygpO1xuICAgIHJldHVybiBwbmcgPyBwbmcudG9TdHJpbmcoJ2Jhc2U2NCcpIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCBpbnRlcm5hbCBzdGF0ZVxuICAgKi9cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy5yZWdpc3RlclN0YXJ0U3VjY2VzcyA9IG51bGw7XG4gICAgdGhpcy5yZWdpc3RlclN0YXJ0RmFpbHVyZSA9IG51bGw7XG4gICAgdGhpcy5yZXNwb25zZVN0cmVhbSA9IG51bGw7XG4gICAgdGhpcy5jb25zdW1lciA9IG51bGw7XG4gICAgdGhpcy5sYXN0Q2h1bmsgPSBudWxsO1xuICAgIHRoaXMudXBkYXRlQ291bnQgPSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHJlYWRpbmcgdGhlIE1KcGVnIHN0cmVhbSBhbmQgc3RvcmluZyB0aGUgbGFzdCBpbWFnZVxuICAgKi9cbiAgYXN5bmMgc3RhcnQoc2VydmVyVGltZW91dCA9IE1KUEVHX1NFUlZFUl9USU1FT1VUX01TKSB7XG4gICAgLy8gZW5zdXJlIHdlJ3JlIG5vdCBzdGFydGVkIGFscmVhZHlcbiAgICB0aGlzLnN0b3AoKTtcblxuICAgIGF3YWl0IGluaXRNSnBlZ0NvbnN1bWVyKCk7XG5cbiAgICB0aGlzLmNvbnN1bWVyID0gbmV3IE1KcGVnQ29uc3VtZXIoKTtcblxuICAgIC8vIHVzZSB0aGUgZGVmZXJyZWQgcGF0dGVybiBzbyB3ZSBjYW4gd2FpdCBmb3IgdGhlIHN0YXJ0IG9mIHRoZSBzdHJlYW1cbiAgICAvLyBiYXNlZCBvbiB3aGF0IGNvbWVzIGluIGZyb20gYW4gZXh0ZXJuYWwgcGlwZVxuICAgIGNvbnN0IHN0YXJ0UHJvbWlzZSA9IG5ldyBCKChyZXMsIHJlaikgPT4ge1xuICAgICAgdGhpcy5yZWdpc3RlclN0YXJ0U3VjY2VzcyA9IHJlcztcbiAgICAgIHRoaXMucmVnaXN0ZXJTdGFydEZhaWx1cmUgPSByZWo7XG4gICAgfSlcbiAgICAgIC8vIHN0YXJ0IGEgdGltZW91dCBzbyB0aGF0IGlmIHRoZSBzZXJ2ZXIgZG9lcyBub3QgcmV0dXJuIGRhdGEsIHdlIGRvbid0XG4gICAgICAvLyBibG9jayBmb3JldmVyLlxuICAgICAgLnRpbWVvdXQoXG4gICAgICAgIHNlcnZlclRpbWVvdXQsXG4gICAgICAgIGBXYWl0ZWQgJHtzZXJ2ZXJUaW1lb3V0fW1zIGJ1dCB0aGUgTUpQRUcgc2VydmVyIG5ldmVyIHNlbnQgYW55IGltYWdlc2BcbiAgICAgICk7XG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLnVybDtcbiAgICBjb25zdCBvbkVyciA9IChlcnIpID0+IHtcbiAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBnZXQgYW4gb3V0ZGF0ZWQgc2NyZWVuc2hvdCBpZiB0aGVyZSB3YXMgYW4gZXJyb3JcbiAgICAgIHRoaXMubGFzdENodW5rID0gbnVsbDtcblxuICAgICAgbG9nLmVycm9yKGBFcnJvciBnZXR0aW5nIE1KcGVnIHNjcmVlbnNob3QgY2h1bms6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICB0aGlzLmVycm9ySGFuZGxlcihlcnIpO1xuICAgICAgaWYgKHRoaXMucmVnaXN0ZXJTdGFydEZhaWx1cmUpIHtcbiAgICAgICAgdGhpcy5yZWdpc3RlclN0YXJ0RmFpbHVyZShlcnIpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgb25DbG9zZSA9ICgpID0+IHtcbiAgICAgIGxvZy5kZWJ1ZyhgVGhlIGNvbm5lY3Rpb24gdG8gTUpQRUcgc2VydmVyIGF0ICR7dXJsfSBoYXMgYmVlbiBjbG9zZWRgKTtcbiAgICAgIHRoaXMubGFzdENodW5rID0gbnVsbDtcbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMucmVzcG9uc2VTdHJlYW0gPSAoXG4gICAgICAgIGF3YWl0IGF4aW9zKHtcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgcmVzcG9uc2VUeXBlOiAnc3RyZWFtJyxcbiAgICAgICAgICB0aW1lb3V0OiBzZXJ2ZXJUaW1lb3V0LFxuICAgICAgICB9KVxuICAgICAgKS5kYXRhO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBvbkVycihlKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc3BvbnNlU3RyZWFtXG4gICAgICAub25jZSgnY2xvc2UnLCBvbkNsb3NlKVxuICAgICAgLm9uKCdlcnJvcicsIG9uRXJyKSAvLyBlbnN1cmUgd2UgZG8gc29tZXRoaW5nIHdpdGggZXJyb3JzXG4gICAgICAucGlwZSh0aGlzLmNvbnN1bWVyKSAvLyBhbGxvdyBjaHVua2luZyBhbmQgdHJhbnNmb3JtaW5nIG9mIGpwZWcgZGF0YVxuICAgICAgLnBpcGUodGhpcyk7IC8vIHNlbmQgdGhlIGFjdHVhbCBqcGVncyB0byBvdXJzZWxmXG5cbiAgICBhd2FpdCBzdGFydFByb21pc2U7XG4gIH1cblxuICAvKipcbiAgICogU3RvcCByZWFkaW5nIHRoZSBNSnBlZyBzdHJlYW0uIEVuc3VyZSB3ZSBkaXNjb25uZWN0IGFsbCB0aGUgcGlwZXMgYW5kIHN0b3BcbiAgICogdGhlIEhUVFAgcmVxdWVzdCBpdHNlbGYuIFRoZW4gcmVzZXQgdGhlIHN0YXRlLlxuICAgKi9cbiAgc3RvcCgpIHtcbiAgICBpZiAoIXRoaXMuY29uc3VtZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlc3BvbnNlU3RyZWFtLnVucGlwZSh0aGlzLmNvbnN1bWVyKTtcbiAgICB0aGlzLmNvbnN1bWVyLnVucGlwZSh0aGlzKTtcbiAgICB0aGlzLnJlc3BvbnNlU3RyZWFtLmRlc3Ryb3koKTtcbiAgICB0aGlzLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGUgdGhlIFdyaXRhYmxlIHdyaXRlKCkgbWV0aG9kIGluIG9yZGVyIHRvIHNhdmUgdGhlIGxhc3QgaW1hZ2UgYW5kXG4gICAqIGxvZyB0aGUgbnVtYmVyIG9mIGltYWdlcyB3ZSBoYXZlIHJlY2VpdmVkXG4gICAqIEBvdmVycmlkZVxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gZGF0YSAtIGJpbmFyeSBkYXRhIHN0cmVhbWVkIGZyb20gdGhlIE1KcGVnIGNvbnN1bWVyXG4gICAqL1xuICB3cml0ZShkYXRhKSB7XG4gICAgdGhpcy5sYXN0Q2h1bmsgPSBkYXRhO1xuICAgIHRoaXMudXBkYXRlQ291bnQrKztcblxuICAgIGlmICh0aGlzLnJlZ2lzdGVyU3RhcnRTdWNjZXNzKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVyU3RhcnRTdWNjZXNzKCk7XG4gICAgICB0aGlzLnJlZ2lzdGVyU3RhcnRTdWNjZXNzID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mjpeg.js","names":["MJpegConsumer","initMJpegConsumer","requirePackage","ign","Error","MJPEG_SERVER_TIMEOUT_MS","MJpegStream","Writable","updateCount","constructor","mJpegUrl","errorHandler","_","noop","options","url","clear","lastChunkBase64","lastChunk","isEmpty","isBuffer","toString","lastChunkPNG","jpg","getJimpImage","getBuffer","MIME_PNG","e","lastChunkPNGBase64","png","registerStartSuccess","registerStartFailure","responseStream","consumer","start","serverTimeout","stop","startPromise","B","res","rej","timeout","onErr","err","log","error","message","onClose","debug","axios","responseType","data","once","on","pipe","unpipe","destroy","write"],"sources":["../../lib/mjpeg.js"],"sourcesContent":["import _ from 'lodash';\nimport log from './logger';\nimport B from 'bluebird';\nimport {getJimpImage, MIME_PNG} from './image-util';\nimport {Writable} from 'stream';\nimport {requirePackage} from './node';\nimport axios from 'axios';\n\n// lazy load this, as it might not be available\nlet MJpegConsumer = null;\n\n/**\n * @throws {Error} If `mjpeg-consumer` module is not installed or cannot be loaded\n */\nasync function initMJpegConsumer() {\n if (!MJpegConsumer) {\n try {\n MJpegConsumer = await requirePackage('mjpeg-consumer');\n } catch (ign) {}\n }\n if (!MJpegConsumer) {\n throw new Error(\n 'mjpeg-consumer module is required to use MJPEG-over-HTTP features. ' +\n 'Please install it first (npm i -g mjpeg-consumer) and restart Appium.'\n );\n }\n}\n\n// amount of time to wait for the first image in the stream\nconst MJPEG_SERVER_TIMEOUT_MS = 10000;\n\n/** Class which stores the last bit of data streamed into it */\nclass MJpegStream extends Writable {\n /**\n * @type {number}\n */\n updateCount = 0;\n\n /**\n * Create an MJpegStream\n * @param {string} mJpegUrl - URL of MJPEG-over-HTTP stream\n * @param {function} [errorHandler=noop] - additional function that will be\n * called in the case of any errors.\n * @param {object} [options={}] - Options to pass to the Writable constructor\n */\n constructor(mJpegUrl, errorHandler = _.noop, options = {}) {\n super(options);\n\n this.errorHandler = errorHandler;\n this.url = mJpegUrl;\n this.clear();\n }\n\n /**\n * Get the base64-encoded version of the JPEG\n *\n * @returns {?string} base64-encoded JPEG image data\n * or `null` if no image can be parsed\n */\n get lastChunkBase64() {\n const lastChunk = /** @type {Buffer} */ (this.lastChunk);\n return !_.isEmpty(this.lastChunk) && _.isBuffer(this.lastChunk)\n ? lastChunk.toString('base64')\n : null;\n }\n\n /**\n * Get the PNG version of the JPEG buffer\n *\n * @returns {Promise<Buffer?>} PNG image data or `null` if no PNG\n * image can be parsed\n */\n async lastChunkPNG() {\n const lastChunk = /** @type {Buffer} */ (this.lastChunk);\n if (_.isEmpty(lastChunk) || !_.isBuffer(lastChunk)) {\n return null;\n }\n\n try {\n const jpg = await getJimpImage(lastChunk);\n return await jpg.getBuffer(MIME_PNG);\n } catch (e) {\n return null;\n }\n }\n\n /**\n * Get the base64-encoded version of the PNG\n *\n * @returns {Promise<string?>} base64-encoded PNG image data\n * or `null` if no image can be parsed\n */\n async lastChunkPNGBase64() {\n const png = await this.lastChunkPNG();\n return png ? png.toString('base64') : null;\n }\n\n /**\n * Reset internal state\n */\n clear() {\n this.registerStartSuccess = null;\n this.registerStartFailure = null;\n this.responseStream = null;\n this.consumer = null;\n this.lastChunk = null;\n this.updateCount = 0;\n }\n\n /**\n * Start reading the MJpeg stream and storing the last image\n */\n async start(serverTimeout = MJPEG_SERVER_TIMEOUT_MS) {\n // ensure we're not started already\n this.stop();\n\n await initMJpegConsumer();\n\n this.consumer = new MJpegConsumer();\n\n // use the deferred pattern so we can wait for the start of the stream\n // based on what comes in from an external pipe\n const startPromise = new B((res, rej) => {\n this.registerStartSuccess = res;\n this.registerStartFailure = rej;\n })\n // start a timeout so that if the server does not return data, we don't\n // block forever.\n .timeout(\n serverTimeout,\n `Waited ${serverTimeout}ms but the MJPEG server never sent any images`\n );\n\n const url = this.url;\n const onErr = (err) => {\n // Make sure we don't get an outdated screenshot if there was an error\n this.lastChunk = null;\n\n log.error(`Error getting MJpeg screenshot chunk: ${err.message}`);\n this.errorHandler(err);\n if (this.registerStartFailure) {\n this.registerStartFailure(err);\n }\n };\n const onClose = () => {\n log.debug(`The connection to MJPEG server at ${url} has been closed`);\n this.lastChunk = null;\n };\n\n try {\n this.responseStream = (\n await axios({\n url,\n responseType: 'stream',\n timeout: serverTimeout,\n })\n ).data;\n } catch (e) {\n return onErr(e);\n }\n\n this.responseStream\n .once('close', onClose)\n .on('error', onErr) // ensure we do something with errors\n .pipe(this.consumer) // allow chunking and transforming of jpeg data\n .pipe(this); // send the actual jpegs to ourself\n\n await startPromise;\n }\n\n /**\n * Stop reading the MJpeg stream. Ensure we disconnect all the pipes and stop\n * the HTTP request itself. Then reset the state.\n */\n stop() {\n if (!this.consumer) {\n return;\n }\n\n this.responseStream.unpipe(this.consumer);\n this.consumer.unpipe(this);\n this.responseStream.destroy();\n this.clear();\n }\n\n /**\n * Override the Writable write() method in order to save the last image and\n * log the number of images we have received\n * @override\n * @param {Buffer} data - binary data streamed from the MJpeg consumer\n */\n write(data) {\n this.lastChunk = data;\n this.updateCount++;\n\n if (this.registerStartSuccess) {\n this.registerStartSuccess();\n this.registerStartSuccess = null;\n }\n\n return true;\n }\n}\n\nexport {MJpegStream};\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mkdirp.js","names":["mkdirp","fs"],"sources":["../../lib/mkdirp.js"],"sourcesContent":["import {fs} from './fs';\n/**\n * @deprecated Use `fs.mkdirp` instead.\n */\nconst {mkdirp} = fs;\nexport {mkdirp};\n"],"mappings":";;;;;;;;;AAAA;;AAIA,MAAM;EAACA;AAAD,IAAWC,MAAjB"}
|
package/build/lib/net.js
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
3
|
Object.defineProperty(exports, "__esModule", {
|
|
6
4
|
value: true
|
|
7
5
|
});
|
|
@@ -28,6 +26,8 @@ var _axios = _interopRequireDefault(require("axios"));
|
|
|
28
26
|
|
|
29
27
|
var _formData = _interopRequireDefault(require("form-data"));
|
|
30
28
|
|
|
29
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
30
|
+
|
|
31
31
|
const DEFAULT_TIMEOUT_MS = 4 * 60 * 1000;
|
|
32
32
|
|
|
33
33
|
function toAxiosAuth(auth) {
|
|
@@ -269,4 +269,4 @@ async function downloadFile(remoteUrl, dstPath, downloadOptions = {}) {
|
|
|
269
269
|
}
|
|
270
270
|
}
|
|
271
271
|
}
|
|
272
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJERUZBVUxUX1RJTUVPVVRfTVMiLCJ0b0F4aW9zQXV0aCIsImF1dGgiLCJfIiwiaXNQbGFpbk9iamVjdCIsImF4aW9zQXV0aCIsInVzZXJuYW1lIiwiZ2V0IiwicGFzc3dvcmQiLCJ1cGxvYWRGaWxlVG9IdHRwIiwibG9jYWxGaWxlU3RyZWFtIiwicGFyc2VkVXJpIiwidXBsb2FkT3B0aW9ucyIsIm1ldGhvZCIsInRpbWVvdXQiLCJoZWFkZXJzIiwiZmlsZUZpZWxkTmFtZSIsImZvcm1GaWVsZHMiLCJocmVmIiwicmVxdWVzdE9wdHMiLCJ1cmwiLCJtYXhDb250ZW50TGVuZ3RoIiwiSW5maW5pdHkiLCJtYXhCb2R5TGVuZ3RoIiwiZm9ybSIsIkZvcm1EYXRhIiwiYXBwZW5kIiwicGFpcnMiLCJpc0FycmF5IiwidG9QYWlycyIsImtleSIsInZhbHVlIiwidG9Mb3dlciIsImdldEhlYWRlcnMiLCJkYXRhIiwibG9nIiwiZGVidWciLCJKU09OIiwic3RyaW5naWZ5Iiwib21pdCIsInN0YXR1cyIsInN0YXR1c1RleHQiLCJheGlvcyIsImluZm8iLCJ1cGxvYWRGaWxlVG9GdHAiLCJob3N0bmFtZSIsInBvcnQiLCJwcm90b2NvbCIsInBhdGhuYW1lIiwiZnRwT3B0cyIsImhvc3QiLCJpc1VuZGVmaW5lZCIsInBhcnNlSW50IiwidXNlciIsInBhc3MiLCJCIiwicmVzb2x2ZSIsInJlamVjdCIsIkZ0cCIsInB1dCIsImVyciIsImlzSHR0cFVwbG9hZE9wdGlvbnMiLCJvcHRzIiwiVVJMIiwiaXNOb3RIdHRwVXBsb2FkT3B0aW9ucyIsInVwbG9hZEZpbGUiLCJsb2NhbFBhdGgiLCJyZW1vdGVVcmkiLCJmcyIsImV4aXN0cyIsIkVycm9yIiwiaXNNZXRlcmVkIiwic2l6ZSIsInN0YXQiLCJ0b1JlYWRhYmxlU2l6ZVN0cmluZyIsInRpbWVyIiwiVGltZXIiLCJzdGFydCIsImNyZWF0ZVJlYWRTdHJlYW0iLCJnZXREdXJhdGlvbiIsImFzU2Vjb25kcyIsInRvRml4ZWQiLCJkb3dubG9hZEZpbGUiLCJyZW1vdGVVcmwiLCJkc3RQYXRoIiwiZG93bmxvYWRPcHRpb25zIiwicmVzcG9uc2VUeXBlIiwicmVzcG9uc2VMZW5ndGgiLCJ3cml0ZXIiLCJjcmVhdGVXcml0ZVN0cmVhbSIsInJlc3BvbnNlU3RyZWFtIiwicmVzcG9uc2VIZWFkZXJzIiwicGlwZSIsIm9uY2UiLCJlIiwidW5waXBlIiwibWVzc2FnZSIsInJpbXJhZiIsInNlY29uZHNFbGFwc2VkIiwiYnl0ZXNQZXJTZWMiLCJNYXRoIiwiZmxvb3IiXSwic291cmNlcyI6WyIuLi8uLi9saWIvbmV0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgZnMgZnJvbSAnLi9mcyc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQge3RvUmVhZGFibGVTaXplU3RyaW5nfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgRnRwIGZyb20gJ2pzZnRwJztcbmltcG9ydCBUaW1lciBmcm9tICcuL3RpbWluZyc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IEZvcm1EYXRhIGZyb20gJ2Zvcm0tZGF0YSc7XG5cbmNvbnN0IERFRkFVTFRfVElNRU9VVF9NUyA9IDQgKiA2MCAqIDEwMDA7XG5cbi8qKlxuICogQ29udmVydHMge0BsaW5rY29kZSBBdXRoQ3JlZGVudGlhbHN9IHRvIGNyZWRlbnRpYWxzIHVuZGVyc3Rvb2QgYnkge0BsaW5rY29kZSBheGlvc30uXG4gKiBAcGFyYW0ge0F1dGhDcmVkZW50aWFscyB8IGltcG9ydCgnYXhpb3MnKS5BeGlvc0Jhc2ljQ3JlZGVudGlhbHN9IFthdXRoXVxuICogQHJldHVybnMge2ltcG9ydCgnYXhpb3MnKS5BeGlvc0Jhc2ljQ3JlZGVudGlhbHM/fVxuICovXG5mdW5jdGlvbiB0b0F4aW9zQXV0aChhdXRoKSB7XG4gIGlmICghXy5pc1BsYWluT2JqZWN0KGF1dGgpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBheGlvc0F1dGggPSB7XG4gICAgdXNlcm5hbWU6IF8uZ2V0KGF1dGgsICd1c2VybmFtZScsIF8uZ2V0KGF1dGgsICd1c2VyJykpLFxuICAgIHBhc3N3b3JkOiBfLmdldChhdXRoLCAncGFzc3dvcmQnLCBfLmdldChhdXRoLCAncGFzcycpKSxcbiAgfTtcbiAgcmV0dXJuIGF4aW9zQXV0aC51c2VybmFtZSAmJiBheGlvc0F1dGgucGFzc3dvcmQgPyBheGlvc0F1dGggOiBudWxsO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Tm9kZUpTLlJlYWRhYmxlU3RyZWFtfSBsb2NhbEZpbGVTdHJlYW1cbiAqIEBwYXJhbSB7VVJMfSBwYXJzZWRVcmlcbiAqIEBwYXJhbSB7SHR0cFVwbG9hZE9wdGlvbnMgJiBOZXRPcHRpb25zfSBbdXBsb2FkT3B0aW9uc11cbiAqL1xuYXN5bmMgZnVuY3Rpb24gdXBsb2FkRmlsZVRvSHR0cChcbiAgbG9jYWxGaWxlU3RyZWFtLFxuICBwYXJzZWRVcmksXG4gIHVwbG9hZE9wdGlvbnMgPSAvKiogQHR5cGUge0h0dHBVcGxvYWRPcHRpb25zICYgTmV0T3B0aW9uc30gKi8gKHt9KVxuKSB7XG4gIGNvbnN0IHtcbiAgICBtZXRob2QgPSAnUE9TVCcsXG4gICAgdGltZW91dCA9IERFRkFVTFRfVElNRU9VVF9NUyxcbiAgICBoZWFkZXJzLFxuICAgIGF1dGgsXG4gICAgZmlsZUZpZWxkTmFtZSA9ICdmaWxlJyxcbiAgICBmb3JtRmllbGRzLFxuICB9ID0gdXBsb2FkT3B0aW9ucztcbiAgY29uc3Qge2hyZWZ9ID0gcGFyc2VkVXJpO1xuXG4gIC8qKiBAdHlwZSB7aW1wb3J0KCdheGlvcycpLkF4aW9zUmVxdWVzdENvbmZpZ30gKi9cbiAgY29uc3QgcmVxdWVzdE9wdHMgPSB7XG4gICAgdXJsOiBocmVmLFxuICAgIG1ldGhvZCxcbiAgICB0aW1lb3V0LFxuICAgIG1heENvbnRlbnRMZW5ndGg6IEluZmluaXR5LFxuICAgIG1heEJvZHlMZW5ndGg6IEluZmluaXR5LFxuICB9O1xuICBjb25zdCBheGlvc0F1dGggPSB0b0F4aW9zQXV0aChhdXRoKTtcbiAgaWYgKGF4aW9zQXV0aCkge1xuICAgIHJlcXVlc3RPcHRzLmF1dGggPSBheGlvc0F1dGg7XG4gIH1cbiAgaWYgKGZpbGVGaWVsZE5hbWUpIHtcbiAgICBjb25zdCBmb3JtID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgZm9ybS5hcHBlbmQoZmlsZUZpZWxkTmFtZSwgbG9jYWxGaWxlU3RyZWFtKTtcbiAgICBpZiAoZm9ybUZpZWxkcykge1xuICAgICAgbGV0IHBhaXJzID0gW107XG4gICAgICBpZiAoXy5pc0FycmF5KGZvcm1GaWVsZHMpKSB7XG4gICAgICAgIHBhaXJzID0gZm9ybUZpZWxkcztcbiAgICAgIH0gZWxzZSBpZiAoXy5pc1BsYWluT2JqZWN0KGZvcm1GaWVsZHMpKSB7XG4gICAgICAgIHBhaXJzID0gXy50b1BhaXJzKGZvcm1GaWVsZHMpO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgcGFpcnMpIHtcbiAgICAgICAgaWYgKF8udG9Mb3dlcihrZXkpICE9PSBfLnRvTG93ZXIoZmlsZUZpZWxkTmFtZSkpIHtcbiAgICAgICAgICBmb3JtLmFwcGVuZChrZXksIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXF1ZXN0T3B0cy5oZWFkZXJzID0ge1xuICAgICAgLi4uKF8uaXNQbGFpbk9iamVjdChoZWFkZXJzKSA/IGhlYWRlcnMgOiB7fSksXG4gICAgICAuLi5mb3JtLmdldEhlYWRlcnMoKSxcbiAgICB9O1xuICAgIHJlcXVlc3RPcHRzLmRhdGEgPSBmb3JtO1xuICB9IGVsc2Uge1xuICAgIGlmIChfLmlzUGxhaW5PYmplY3QoaGVhZGVycykpIHtcbiAgICAgIHJlcXVlc3RPcHRzLmhlYWRlcnMgPSBoZWFkZXJzO1xuICAgIH1cbiAgICByZXF1ZXN0T3B0cy5kYXRhID0gbG9jYWxGaWxlU3RyZWFtO1xuICB9XG4gIGxvZy5kZWJ1ZyhcbiAgICBgUGVyZm9ybWluZyAke21ldGhvZH0gdG8gJHtocmVmfSB3aXRoIG9wdGlvbnMgKGV4Y2x1ZGluZyBkYXRhKTogYCArXG4gICAgICBKU09OLnN0cmluZ2lmeShfLm9taXQocmVxdWVzdE9wdHMsIFsnZGF0YSddKSlcbiAgKTtcblxuICBjb25zdCB7c3RhdHVzLCBzdGF0dXNUZXh0fSA9IGF3YWl0IGF4aW9zKHJlcXVlc3RPcHRzKTtcbiAgbG9nLmluZm8oYFNlcnZlciByZXNwb25zZTogJHtzdGF0dXN9ICR7c3RhdHVzVGV4dH1gKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZyB8IEJ1ZmZlciB8IE5vZGVKUy5SZWFkYWJsZVN0cmVhbX0gbG9jYWxGaWxlU3RyZWFtXG4gKiBAcGFyYW0ge1VSTH0gcGFyc2VkVXJpXG4gKiBAcGFyYW0ge05vdEh0dHBVcGxvYWRPcHRpb25zICYgTmV0T3B0aW9uc30gW3VwbG9hZE9wdGlvbnNdXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHVwbG9hZEZpbGVUb0Z0cChcbiAgbG9jYWxGaWxlU3RyZWFtLFxuICBwYXJzZWRVcmksXG4gIHVwbG9hZE9wdGlvbnMgPSAvKiogQHR5cGUge05vdEh0dHBVcGxvYWRPcHRpb25zICYgTmV0T3B0aW9uc30gKi8gKHt9KVxuKSB7XG4gIGNvbnN0IHthdXRofSA9IHVwbG9hZE9wdGlvbnM7XG4gIGNvbnN0IHtob3N0bmFtZSwgcG9ydCwgcHJvdG9jb2wsIHBhdGhuYW1lfSA9IHBhcnNlZFVyaTtcblxuICBjb25zdCBmdHBPcHRzID0ge1xuICAgIGhvc3Q6IGhvc3RuYW1lLFxuICAgIHBvcnQ6ICFfLmlzVW5kZWZpbmVkKHBvcnQpID8gXy5wYXJzZUludChwb3J0KSA6IDIxLFxuICB9O1xuICBpZiAoYXV0aD8udXNlciAmJiBhdXRoPy5wYXNzKSB7XG4gICAgZnRwT3B0cy51c2VyID0gYXV0aC51c2VyO1xuICAgIGZ0cE9wdHMucGFzcyA9IGF1dGgucGFzcztcbiAgfVxuICBsb2cuZGVidWcoYCR7cHJvdG9jb2x9IHVwbG9hZCBvcHRpb25zOiAke0pTT04uc3RyaW5naWZ5KGZ0cE9wdHMpfWApO1xuICByZXR1cm4gYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIG5ldyBGdHAoZnRwT3B0cykucHV0KGxvY2FsRmlsZVN0cmVhbSwgcGF0aG5hbWUsIChlcnIpID0+IHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJldHVybnMgYHRydWVgIGlmIHBhcmFtcyBhcmUgdmFsaWQgZm9yIHtAbGlua2NvZGUgdXBsb2FkRmlsZVRvSHR0cH0uXG4gKiBAcGFyYW0ge2FueX0gb3B0c1xuICogQHBhcmFtIHtVUkx9IHVybFxuICogQHJldHVybnMge29wdHMgaXMgSHR0cFVwbG9hZE9wdGlvbnMgJiBOZXRPcHRpb25zfVxuICovXG5mdW5jdGlvbiBpc0h0dHBVcGxvYWRPcHRpb25zKG9wdHMsIHVybCkge1xuICB0cnkge1xuICAgIGNvbnN0IHtwcm90b2NvbH0gPSBuZXcgVVJMKHVybCk7XG4gICAgcmV0dXJuIHByb3RvY29sID09PSAnaHR0cDonIHx8IHByb3RvY29sID09PSAnaHR0cHM6JztcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyBgdHJ1ZWAgaWYgcGFyYW1zIGFyZSB2YWxpZCBmb3Ige0BsaW5rY29kZSB1cGxvYWRGaWxlVG9GdHB9LlxuICogQHBhcmFtIHthbnl9IG9wdHNcbiAqIEBwYXJhbSB7VVJMfSB1cmxcbiAqIEByZXR1cm5zIHtvcHRzIGlzIE5vdEh0dHBVcGxvYWRPcHRpb25zICYgTmV0T3B0aW9uc31cbiAqL1xuZnVuY3Rpb24gaXNOb3RIdHRwVXBsb2FkT3B0aW9ucyhvcHRzLCB1cmwpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCB7cHJvdG9jb2x9ID0gbmV3IFVSTCh1cmwpO1xuICAgIHJldHVybiBwcm90b2NvbCA9PT0gJ2Z0cDonO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbi8qKlxuICogVXBsb2FkcyB0aGUgZ2l2ZW4gZmlsZSB0byBhIHJlbW90ZSBsb2NhdGlvbi4gSFRUUChTKSBhbmQgRlRQXG4gKiBwcm90b2NvbHMgYXJlIHN1cHBvcnRlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbG9jYWxQYXRoIC0gVGhlIHBhdGggdG8gYSBmaWxlIG9uIHRoZSBsb2NhbCBzdG9yYWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IHJlbW90ZVVyaSAtIFRoZSByZW1vdGUgVVJJIHRvIHVwbG9hZCB0aGUgZmlsZSB0by5cbiAqIEBwYXJhbSB7KEh0dHBVcGxvYWRPcHRpb25zfE5vdEh0dHBVcGxvYWRPcHRpb25zKSAmIE5ldE9wdGlvbnN9IFt1cGxvYWRPcHRpb25zXVxuICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHVwbG9hZEZpbGUoXG4gIGxvY2FsUGF0aCxcbiAgcmVtb3RlVXJpLFxuICB1cGxvYWRPcHRpb25zID0gLyoqIEB0eXBlIHsoSHR0cFVwbG9hZE9wdGlvbnN8Tm90SHR0cFVwbG9hZE9wdGlvbnMpICYgTmV0T3B0aW9uc30gKi8gKHt9KVxuKSB7XG4gIGlmICghKGF3YWl0IGZzLmV4aXN0cyhsb2NhbFBhdGgpKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJyR7bG9jYWxQYXRofScgZG9lcyBub3QgZXhpc3RzIG9yIGlzIG5vdCBhY2Nlc3NpYmxlYCk7XG4gIH1cblxuICBjb25zdCB7aXNNZXRlcmVkID0gdHJ1ZX0gPSB1cGxvYWRPcHRpb25zO1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKHJlbW90ZVVyaSk7XG4gIGNvbnN0IHtzaXplfSA9IGF3YWl0IGZzLnN0YXQobG9jYWxQYXRoKTtcbiAgaWYgKGlzTWV0ZXJlZCkge1xuICAgIGxvZy5pbmZvKGBVcGxvYWRpbmcgJyR7bG9jYWxQYXRofScgb2YgJHt0b1JlYWRhYmxlU2l6ZVN0cmluZyhzaXplKX0gc2l6ZSB0byAnJHtyZW1vdGVVcml9J2ApO1xuICB9XG4gIGNvbnN0IHRpbWVyID0gbmV3IFRpbWVyKCkuc3RhcnQoKTtcbiAgaWYgKGlzSHR0cFVwbG9hZE9wdGlvbnModXBsb2FkT3B0aW9ucywgdXJsKSkge1xuICAgIGlmICghdXBsb2FkT3B0aW9ucy5maWxlRmllbGROYW1lKSB7XG4gICAgICB1cGxvYWRPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgIC4uLihfLmlzUGxhaW5PYmplY3QodXBsb2FkT3B0aW9ucy5oZWFkZXJzKSA/IHVwbG9hZE9wdGlvbnMuaGVhZGVycyA6IHt9KSxcbiAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogc2l6ZSxcbiAgICAgIH07XG4gICAgfVxuICAgIGF3YWl0IHVwbG9hZEZpbGVUb0h0dHAoZnMuY3JlYXRlUmVhZFN0cmVhbShsb2NhbFBhdGgpLCB1cmwsIHVwbG9hZE9wdGlvbnMpO1xuICB9IGVsc2UgaWYgKGlzTm90SHR0cFVwbG9hZE9wdGlvbnModXBsb2FkT3B0aW9ucywgdXJsKSkge1xuICAgIGF3YWl0IHVwbG9hZEZpbGVUb0Z0cChmcy5jcmVhdGVSZWFkU3RyZWFtKGxvY2FsUGF0aCksIHVybCwgdXBsb2FkT3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYENhbm5vdCB1cGxvYWQgdGhlIGZpbGUgYXQgJyR7bG9jYWxQYXRofScgdG8gJyR7cmVtb3RlVXJpfScuIGAgK1xuICAgICAgICBgVW5zdXBwb3J0ZWQgcmVtb3RlIHByb3RvY29sICcke3VybC5wcm90b2NvbH0nLiBgICtcbiAgICAgICAgYE9ubHkgaHR0cC9odHRwcyBhbmQgZnRwL2Z0cHMgcHJvdG9jb2xzIGFyZSBzdXBwb3J0ZWQuYFxuICAgICk7XG4gIH1cbiAgaWYgKGlzTWV0ZXJlZCkge1xuICAgIGxvZy5pbmZvKFxuICAgICAgYFVwbG9hZGVkICcke2xvY2FsUGF0aH0nIG9mICR7dG9SZWFkYWJsZVNpemVTdHJpbmcoc2l6ZSl9IHNpemUgaW4gYCArXG4gICAgICAgIGAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNTZWNvbmRzLnRvRml4ZWQoMyl9c2BcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogRG93bmxvYWRzIHRoZSBnaXZlbiBmaWxlIHZpYSBIVFRQKFMpXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlbW90ZVVybCAtIFRoZSByZW1vdGUgdXJsXG4gKiBAcGFyYW0ge3N0cmluZ30gZHN0UGF0aCAtIFRoZSBsb2NhbCBwYXRoIHRvIGRvd25sb2FkIHRoZSBmaWxlIHRvXG4gKiBAcGFyYW0ge0Rvd25sb2FkT3B0aW9ucyAmIE5ldE9wdGlvbnN9IFtkb3dubG9hZE9wdGlvbnNdXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgZG93bmxvYWQgb3BlcmF0aW9uIGZhaWxzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRvd25sb2FkRmlsZShcbiAgcmVtb3RlVXJsLFxuICBkc3RQYXRoLFxuICBkb3dubG9hZE9wdGlvbnMgPSAvKiogQHR5cGUge0Rvd25sb2FkT3B0aW9ucyAmIE5ldE9wdGlvbnN9ICovICh7fSlcbikge1xuICBjb25zdCB7aXNNZXRlcmVkID0gdHJ1ZSwgYXV0aCwgdGltZW91dCA9IERFRkFVTFRfVElNRU9VVF9NUywgaGVhZGVyc30gPSBkb3dubG9hZE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtpbXBvcnQoJ2F4aW9zJykuQXhpb3NSZXF1ZXN0Q29uZmlnfVxuICAgKi9cbiAgY29uc3QgcmVxdWVzdE9wdHMgPSB7XG4gICAgdXJsOiByZW1vdGVVcmwsXG4gICAgcmVzcG9uc2VUeXBlOiAnc3RyZWFtJyxcbiAgICB0aW1lb3V0LFxuICB9O1xuICBjb25zdCBheGlvc0F1dGggPSB0b0F4aW9zQXV0aChhdXRoKTtcbiAgaWYgKGF4aW9zQXV0aCkge1xuICAgIHJlcXVlc3RPcHRzLmF1dGggPSBheGlvc0F1dGg7XG4gIH1cbiAgaWYgKF8uaXNQbGFpbk9iamVjdChoZWFkZXJzKSkge1xuICAgIHJlcXVlc3RPcHRzLmhlYWRlcnMgPSBoZWFkZXJzO1xuICB9XG5cbiAgY29uc3QgdGltZXIgPSBuZXcgVGltZXIoKS5zdGFydCgpO1xuICBsZXQgcmVzcG9uc2VMZW5ndGg7XG4gIHRyeSB7XG4gICAgY29uc3Qgd3JpdGVyID0gZnMuY3JlYXRlV3JpdGVTdHJlYW0oZHN0UGF0aCk7XG4gICAgY29uc3Qge2RhdGE6IHJlc3BvbnNlU3RyZWFtLCBoZWFkZXJzOiByZXNwb25zZUhlYWRlcnN9ID0gYXdhaXQgYXhpb3MocmVxdWVzdE9wdHMpO1xuICAgIHJlc3BvbnNlTGVuZ3RoID0gcGFyc2VJbnQocmVzcG9uc2VIZWFkZXJzWydjb250ZW50LWxlbmd0aCddLCAxMCk7XG4gICAgcmVzcG9uc2VTdHJlYW0ucGlwZSh3cml0ZXIpO1xuXG4gICAgYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgcmVzcG9uc2VTdHJlYW0ub25jZSgnZXJyb3InLCByZWplY3QpO1xuICAgICAgd3JpdGVyLm9uY2UoJ2ZpbmlzaCcsIHJlc29sdmUpO1xuICAgICAgd3JpdGVyLm9uY2UoJ2Vycm9yJywgKGUpID0+IHtcbiAgICAgICAgcmVzcG9uc2VTdHJlYW0udW5waXBlKHdyaXRlcik7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBkb3dubG9hZCB0aGUgZmlsZSBmcm9tICR7cmVtb3RlVXJsfTogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxuXG4gIGNvbnN0IHtzaXplfSA9IGF3YWl0IGZzLnN0YXQoZHN0UGF0aCk7XG4gIGlmIChyZXNwb25zZUxlbmd0aCAmJiBzaXplICE9PSByZXNwb25zZUxlbmd0aCkge1xuICAgIGF3YWl0IGZzLnJpbXJhZihkc3RQYXRoKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVGhlIHNpemUgb2YgdGhlIGZpbGUgZG93bmxvYWRlZCBmcm9tICR7cmVtb3RlVXJsfSAoJHtzaXplfSBieXRlcykgYCArXG4gICAgICAgIGBkaWZmZXJzIGZyb20gdGhlIG9uZSBpbiBDb250ZW50LUxlbmd0aCByZXNwb25zZSBoZWFkZXIgKCR7cmVzcG9uc2VMZW5ndGh9IGJ5dGVzKWBcbiAgICApO1xuICB9XG4gIGlmIChpc01ldGVyZWQpIHtcbiAgICBjb25zdCBzZWNvbmRzRWxhcHNlZCA9IHRpbWVyLmdldER1cmF0aW9uKCkuYXNTZWNvbmRzO1xuICAgIGxvZy5kZWJ1ZyhcbiAgICAgIGAke3JlbW90ZVVybH0gKCR7dG9SZWFkYWJsZVNpemVTdHJpbmcoc2l6ZSl9KSBgICtcbiAgICAgICAgYGhhcyBiZWVuIGRvd25sb2FkZWQgdG8gJyR7ZHN0UGF0aH0nIGluICR7c2Vjb25kc0VsYXBzZWQudG9GaXhlZCgzKX1zYFxuICAgICk7XG4gICAgaWYgKHNlY29uZHNFbGFwc2VkID49IDIpIHtcbiAgICAgIGNvbnN0IGJ5dGVzUGVyU2VjID0gTWF0aC5mbG9vcihzaXplIC8gc2Vjb25kc0VsYXBzZWQpO1xuICAgICAgbG9nLmRlYnVnKGBBcHByb3hpbWF0ZSBkb3dubG9hZCBzcGVlZDogJHt0b1JlYWRhYmxlU2l6ZVN0cmluZyhieXRlc1BlclNlYyl9L3NgKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHt1cGxvYWRGaWxlLCBkb3dubG9hZEZpbGV9O1xuXG4vKipcbiAqIENvbW1vbiBvcHRpb25zIGZvciB7QGxpbmtjb2RlIHVwbG9hZEZpbGV9IGFuZCB7QGxpbmtjb2RlIGRvd25sb2FkRmlsZX0uXG4gKiBAdHlwZWRlZiBOZXRPcHRpb25zXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtpc01ldGVyZWQ9dHJ1ZV0gLSBXaGV0aGVyIHRvIGxvZyB0aGUgYWN0dWFsIGRvd25sb2FkIHBlcmZvcm1hbmNlXG4gKiAoZS5nLiB0aW1pbmdzIGFuZCBzcGVlZClcbiAqIEBwcm9wZXJ0eSB7QXV0aENyZWRlbnRpYWxzfSBbYXV0aF0gLSBBdXRoZW50aWNhdGlvbiBjcmVkZW50aWFsc1xuICovXG5cbi8qKlxuICogU3BlY2lmaWMgb3B0aW9ucyBmb3Ige0BsaW5rY29kZSBkb3dubG9hZEZpbGV9LlxuICogQHR5cGVkZWYgRG93bmxvYWRPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3RpbWVvdXRdIC0gVGhlIGFjdHVhbCByZXF1ZXN0IHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzOyBkZWZhdWx0cyB0byB7QGxpbmtjb2RlIERFRkFVTFRfVElNRU9VVF9NU31cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZyxhbnk+fSBbaGVhZGVyc10gLSBSZXF1ZXN0IGhlYWRlcnMgbWFwcGluZ1xuICovXG5cbi8qKlxuICogQmFzaWMgYXV0aCBjcmVkZW50aWFsczsgdXNlZCBieSB7QGxpbmtjb2RlIE5ldE9wdGlvbnN9LlxuICogQHR5cGVkZWYgQXV0aENyZWRlbnRpYWxzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdXNlciAtIE5vbi1lbXB0eSB1c2VyIG5hbWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXNzIC0gTm9uLWVtcHR5IHBhc3N3b3JkXG4gKi9cblxuLyoqXG4gKiBUaGlzIHR5cGUgaXMgdXNlZCBpbiB7QGxpbmtjb2RlIHVwbG9hZEZpbGV9IGlmIHRoZSByZW1vdGUgbG9jYXRpb24gdXNlcyB0aGUgYGZ0cGAgcHJvdG9jb2wsIGFuZCBkaXN0aW5ndWlzaGVzIHRoZSB0eXBlIGZyb20ge0BsaW5rY29kZSBIdHRwVXBsb2FkT3B0aW9uc30uXG4gKiBAdHlwZWRlZiBOb3RIdHRwVXBsb2FkT3B0aW9uc1xuICogQHByb3BlcnR5IHtuZXZlcn0gaGVhZGVyc1xuICogQHByb3BlcnR5IHtuZXZlcn0gbWV0aG9kXG4gKiBAcHJvcGVydHkge25ldmVyfSB0aW1lb3V0XG4gKiBAcHJvcGVydHkge25ldmVyfSBmaWxlRmllbGROYW1lXG4gKiBAcHJvcGVydHkge25ldmVyfSBmb3JtRmllbGRzXG4gKi9cblxuLyoqXG4gKiBTcGVjaWZpYyBvcHRpb25zIGZvciB7QGxpbmtjb2RlIHVwbG9hZEZpbGV9IGlmIHRoZSByZW1vdGUgbG9jYXRpb24gdXNlcyB0aGUgYGh0dHAocylgIHByb3RvY29sXG4gKiBAdHlwZWRlZiBIdHRwVXBsb2FkT3B0aW9uc1xuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLGFueT59IGhlYWRlcnMgLSBBZGRpdGlvbmFsIHJlcXVlc3QgaGVhZGVycyBtYXBwaW5nXG4gKiBAcHJvcGVydHkge2ltcG9ydCgnYXhpb3MnKS5NZXRob2R9IFttZXRob2Q9J1BPU1QnXSAtIFRoZSBIVFRQIG1ldGhvZCB1c2VkIGZvciBmaWxlIHVwbG9hZFxuICogQHByb3BlcnR5IHtudW1iZXJ9IFt0aW1lb3V0XSAtIFRoZSBhY3R1YWwgcmVxdWVzdCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kczsgZGVmYXVsdHMgdG8ge0BsaW5rY29kZSBERUZBVUxUX1RJTUVPVVRfTVN9XG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2ZpbGVGaWVsZE5hbWU9J2ZpbGUnXSAtIFRoZSBuYW1lIG9mIHRoZSBmb3JtIGZpZWxkIGNvbnRhaW5pbmcgdGhlIGZpbGVcbiAqIGNvbnRlbnQgdG8gYmUgdXBsb2FkZWQuIEFueSBmYWxzeSB2YWx1ZSBtYWtlIHRoZSByZXF1ZXN0IHRvIHVzZSBub24tbXVsdGlwYXJ0IHVwbG9hZFxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLGFueT59IFtmb3JtRmllbGRzXSAtIFRoZSBhZGRpdGlvbmFsIGZvcm0gZmllbGRzXG4gKiB0byBiZSBpbmNsdWRlZCBpbnRvIHRoZSB1cGxvYWQgcmVxdWVzdC4gVGhpcyBwcm9wZXJ0eSBpcyBvbmx5IGNvbnNpZGVyZWQgaWZcbiAqIGBmaWxlRmllbGROYW1lYCBpcyBzZXRcbiAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxrQkFBa0IsR0FBRyxJQUFJLEVB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
|
|
272
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJERUZBVUxUX1RJTUVPVVRfTVMiLCJ0b0F4aW9zQXV0aCIsImF1dGgiLCJfIiwiaXNQbGFpbk9iamVjdCIsImF4aW9zQXV0aCIsInVzZXJuYW1lIiwiZ2V0IiwicGFzc3dvcmQiLCJ1cGxvYWRGaWxlVG9IdHRwIiwibG9jYWxGaWxlU3RyZWFtIiwicGFyc2VkVXJpIiwidXBsb2FkT3B0aW9ucyIsIm1ldGhvZCIsInRpbWVvdXQiLCJoZWFkZXJzIiwiZmlsZUZpZWxkTmFtZSIsImZvcm1GaWVsZHMiLCJocmVmIiwicmVxdWVzdE9wdHMiLCJ1cmwiLCJtYXhDb250ZW50TGVuZ3RoIiwiSW5maW5pdHkiLCJtYXhCb2R5TGVuZ3RoIiwiZm9ybSIsIkZvcm1EYXRhIiwiYXBwZW5kIiwicGFpcnMiLCJpc0FycmF5IiwidG9QYWlycyIsImtleSIsInZhbHVlIiwidG9Mb3dlciIsImdldEhlYWRlcnMiLCJkYXRhIiwibG9nIiwiZGVidWciLCJKU09OIiwic3RyaW5naWZ5Iiwib21pdCIsInN0YXR1cyIsInN0YXR1c1RleHQiLCJheGlvcyIsImluZm8iLCJ1cGxvYWRGaWxlVG9GdHAiLCJob3N0bmFtZSIsInBvcnQiLCJwcm90b2NvbCIsInBhdGhuYW1lIiwiZnRwT3B0cyIsImhvc3QiLCJpc1VuZGVmaW5lZCIsInBhcnNlSW50IiwidXNlciIsInBhc3MiLCJCIiwicmVzb2x2ZSIsInJlamVjdCIsIkZ0cCIsInB1dCIsImVyciIsImlzSHR0cFVwbG9hZE9wdGlvbnMiLCJvcHRzIiwiVVJMIiwiaXNOb3RIdHRwVXBsb2FkT3B0aW9ucyIsInVwbG9hZEZpbGUiLCJsb2NhbFBhdGgiLCJyZW1vdGVVcmkiLCJmcyIsImV4aXN0cyIsIkVycm9yIiwiaXNNZXRlcmVkIiwic2l6ZSIsInN0YXQiLCJ0b1JlYWRhYmxlU2l6ZVN0cmluZyIsInRpbWVyIiwiVGltZXIiLCJzdGFydCIsImNyZWF0ZVJlYWRTdHJlYW0iLCJnZXREdXJhdGlvbiIsImFzU2Vjb25kcyIsInRvRml4ZWQiLCJkb3dubG9hZEZpbGUiLCJyZW1vdGVVcmwiLCJkc3RQYXRoIiwiZG93bmxvYWRPcHRpb25zIiwicmVzcG9uc2VUeXBlIiwicmVzcG9uc2VMZW5ndGgiLCJ3cml0ZXIiLCJjcmVhdGVXcml0ZVN0cmVhbSIsInJlc3BvbnNlU3RyZWFtIiwicmVzcG9uc2VIZWFkZXJzIiwicGlwZSIsIm9uY2UiLCJlIiwidW5waXBlIiwibWVzc2FnZSIsInJpbXJhZiIsInNlY29uZHNFbGFwc2VkIiwiYnl0ZXNQZXJTZWMiLCJNYXRoIiwiZmxvb3IiXSwic291cmNlcyI6WyIuLi8uLi9saWIvbmV0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgZnMgZnJvbSAnLi9mcyc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQge3RvUmVhZGFibGVTaXplU3RyaW5nfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgRnRwIGZyb20gJ2pzZnRwJztcbmltcG9ydCBUaW1lciBmcm9tICcuL3RpbWluZyc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IEZvcm1EYXRhIGZyb20gJ2Zvcm0tZGF0YSc7XG5cbmNvbnN0IERFRkFVTFRfVElNRU9VVF9NUyA9IDQgKiA2MCAqIDEwMDA7XG5cbi8qKlxuICogQ29udmVydHMge0BsaW5rY29kZSBBdXRoQ3JlZGVudGlhbHN9IHRvIGNyZWRlbnRpYWxzIHVuZGVyc3Rvb2QgYnkge0BsaW5rY29kZSBheGlvc30uXG4gKiBAcGFyYW0ge0F1dGhDcmVkZW50aWFscyB8IGltcG9ydCgnYXhpb3MnKS5BeGlvc0Jhc2ljQ3JlZGVudGlhbHN9IFthdXRoXVxuICogQHJldHVybnMge2ltcG9ydCgnYXhpb3MnKS5BeGlvc0Jhc2ljQ3JlZGVudGlhbHM/fVxuICovXG5mdW5jdGlvbiB0b0F4aW9zQXV0aChhdXRoKSB7XG4gIGlmICghXy5pc1BsYWluT2JqZWN0KGF1dGgpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBheGlvc0F1dGggPSB7XG4gICAgdXNlcm5hbWU6IF8uZ2V0KGF1dGgsICd1c2VybmFtZScsIF8uZ2V0KGF1dGgsICd1c2VyJykpLFxuICAgIHBhc3N3b3JkOiBfLmdldChhdXRoLCAncGFzc3dvcmQnLCBfLmdldChhdXRoLCAncGFzcycpKSxcbiAgfTtcbiAgcmV0dXJuIGF4aW9zQXV0aC51c2VybmFtZSAmJiBheGlvc0F1dGgucGFzc3dvcmQgPyBheGlvc0F1dGggOiBudWxsO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Tm9kZUpTLlJlYWRhYmxlU3RyZWFtfSBsb2NhbEZpbGVTdHJlYW1cbiAqIEBwYXJhbSB7VVJMfSBwYXJzZWRVcmlcbiAqIEBwYXJhbSB7SHR0cFVwbG9hZE9wdGlvbnMgJiBOZXRPcHRpb25zfSBbdXBsb2FkT3B0aW9uc11cbiAqL1xuYXN5bmMgZnVuY3Rpb24gdXBsb2FkRmlsZVRvSHR0cChcbiAgbG9jYWxGaWxlU3RyZWFtLFxuICBwYXJzZWRVcmksXG4gIHVwbG9hZE9wdGlvbnMgPSAvKiogQHR5cGUge0h0dHBVcGxvYWRPcHRpb25zICYgTmV0T3B0aW9uc30gKi8gKHt9KVxuKSB7XG4gIGNvbnN0IHtcbiAgICBtZXRob2QgPSAnUE9TVCcsXG4gICAgdGltZW91dCA9IERFRkFVTFRfVElNRU9VVF9NUyxcbiAgICBoZWFkZXJzLFxuICAgIGF1dGgsXG4gICAgZmlsZUZpZWxkTmFtZSA9ICdmaWxlJyxcbiAgICBmb3JtRmllbGRzLFxuICB9ID0gdXBsb2FkT3B0aW9ucztcbiAgY29uc3Qge2hyZWZ9ID0gcGFyc2VkVXJpO1xuXG4gIC8qKiBAdHlwZSB7aW1wb3J0KCdheGlvcycpLkF4aW9zUmVxdWVzdENvbmZpZ30gKi9cbiAgY29uc3QgcmVxdWVzdE9wdHMgPSB7XG4gICAgdXJsOiBocmVmLFxuICAgIG1ldGhvZCxcbiAgICB0aW1lb3V0LFxuICAgIG1heENvbnRlbnRMZW5ndGg6IEluZmluaXR5LFxuICAgIG1heEJvZHlMZW5ndGg6IEluZmluaXR5LFxuICB9O1xuICBjb25zdCBheGlvc0F1dGggPSB0b0F4aW9zQXV0aChhdXRoKTtcbiAgaWYgKGF4aW9zQXV0aCkge1xuICAgIHJlcXVlc3RPcHRzLmF1dGggPSBheGlvc0F1dGg7XG4gIH1cbiAgaWYgKGZpbGVGaWVsZE5hbWUpIHtcbiAgICBjb25zdCBmb3JtID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgZm9ybS5hcHBlbmQoZmlsZUZpZWxkTmFtZSwgbG9jYWxGaWxlU3RyZWFtKTtcbiAgICBpZiAoZm9ybUZpZWxkcykge1xuICAgICAgbGV0IHBhaXJzID0gW107XG4gICAgICBpZiAoXy5pc0FycmF5KGZvcm1GaWVsZHMpKSB7XG4gICAgICAgIHBhaXJzID0gZm9ybUZpZWxkcztcbiAgICAgIH0gZWxzZSBpZiAoXy5pc1BsYWluT2JqZWN0KGZvcm1GaWVsZHMpKSB7XG4gICAgICAgIHBhaXJzID0gXy50b1BhaXJzKGZvcm1GaWVsZHMpO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgcGFpcnMpIHtcbiAgICAgICAgaWYgKF8udG9Mb3dlcihrZXkpICE9PSBfLnRvTG93ZXIoZmlsZUZpZWxkTmFtZSkpIHtcbiAgICAgICAgICBmb3JtLmFwcGVuZChrZXksIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXF1ZXN0T3B0cy5oZWFkZXJzID0ge1xuICAgICAgLi4uKF8uaXNQbGFpbk9iamVjdChoZWFkZXJzKSA/IGhlYWRlcnMgOiB7fSksXG4gICAgICAuLi5mb3JtLmdldEhlYWRlcnMoKSxcbiAgICB9O1xuICAgIHJlcXVlc3RPcHRzLmRhdGEgPSBmb3JtO1xuICB9IGVsc2Uge1xuICAgIGlmIChfLmlzUGxhaW5PYmplY3QoaGVhZGVycykpIHtcbiAgICAgIHJlcXVlc3RPcHRzLmhlYWRlcnMgPSBoZWFkZXJzO1xuICAgIH1cbiAgICByZXF1ZXN0T3B0cy5kYXRhID0gbG9jYWxGaWxlU3RyZWFtO1xuICB9XG4gIGxvZy5kZWJ1ZyhcbiAgICBgUGVyZm9ybWluZyAke21ldGhvZH0gdG8gJHtocmVmfSB3aXRoIG9wdGlvbnMgKGV4Y2x1ZGluZyBkYXRhKTogYCArXG4gICAgICBKU09OLnN0cmluZ2lmeShfLm9taXQocmVxdWVzdE9wdHMsIFsnZGF0YSddKSlcbiAgKTtcblxuICBjb25zdCB7c3RhdHVzLCBzdGF0dXNUZXh0fSA9IGF3YWl0IGF4aW9zKHJlcXVlc3RPcHRzKTtcbiAgbG9nLmluZm8oYFNlcnZlciByZXNwb25zZTogJHtzdGF0dXN9ICR7c3RhdHVzVGV4dH1gKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZyB8IEJ1ZmZlciB8IE5vZGVKUy5SZWFkYWJsZVN0cmVhbX0gbG9jYWxGaWxlU3RyZWFtXG4gKiBAcGFyYW0ge1VSTH0gcGFyc2VkVXJpXG4gKiBAcGFyYW0ge05vdEh0dHBVcGxvYWRPcHRpb25zICYgTmV0T3B0aW9uc30gW3VwbG9hZE9wdGlvbnNdXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHVwbG9hZEZpbGVUb0Z0cChcbiAgbG9jYWxGaWxlU3RyZWFtLFxuICBwYXJzZWRVcmksXG4gIHVwbG9hZE9wdGlvbnMgPSAvKiogQHR5cGUge05vdEh0dHBVcGxvYWRPcHRpb25zICYgTmV0T3B0aW9uc30gKi8gKHt9KVxuKSB7XG4gIGNvbnN0IHthdXRofSA9IHVwbG9hZE9wdGlvbnM7XG4gIGNvbnN0IHtob3N0bmFtZSwgcG9ydCwgcHJvdG9jb2wsIHBhdGhuYW1lfSA9IHBhcnNlZFVyaTtcblxuICBjb25zdCBmdHBPcHRzID0ge1xuICAgIGhvc3Q6IGhvc3RuYW1lLFxuICAgIHBvcnQ6ICFfLmlzVW5kZWZpbmVkKHBvcnQpID8gXy5wYXJzZUludChwb3J0KSA6IDIxLFxuICB9O1xuICBpZiAoYXV0aD8udXNlciAmJiBhdXRoPy5wYXNzKSB7XG4gICAgZnRwT3B0cy51c2VyID0gYXV0aC51c2VyO1xuICAgIGZ0cE9wdHMucGFzcyA9IGF1dGgucGFzcztcbiAgfVxuICBsb2cuZGVidWcoYCR7cHJvdG9jb2x9IHVwbG9hZCBvcHRpb25zOiAke0pTT04uc3RyaW5naWZ5KGZ0cE9wdHMpfWApO1xuICByZXR1cm4gYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIG5ldyBGdHAoZnRwT3B0cykucHV0KGxvY2FsRmlsZVN0cmVhbSwgcGF0aG5hbWUsIChlcnIpID0+IHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJldHVybnMgYHRydWVgIGlmIHBhcmFtcyBhcmUgdmFsaWQgZm9yIHtAbGlua2NvZGUgdXBsb2FkRmlsZVRvSHR0cH0uXG4gKiBAcGFyYW0ge2FueX0gb3B0c1xuICogQHBhcmFtIHtVUkx9IHVybFxuICogQHJldHVybnMge29wdHMgaXMgSHR0cFVwbG9hZE9wdGlvbnMgJiBOZXRPcHRpb25zfVxuICovXG5mdW5jdGlvbiBpc0h0dHBVcGxvYWRPcHRpb25zKG9wdHMsIHVybCkge1xuICB0cnkge1xuICAgIGNvbnN0IHtwcm90b2NvbH0gPSBuZXcgVVJMKHVybCk7XG4gICAgcmV0dXJuIHByb3RvY29sID09PSAnaHR0cDonIHx8IHByb3RvY29sID09PSAnaHR0cHM6JztcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyBgdHJ1ZWAgaWYgcGFyYW1zIGFyZSB2YWxpZCBmb3Ige0BsaW5rY29kZSB1cGxvYWRGaWxlVG9GdHB9LlxuICogQHBhcmFtIHthbnl9IG9wdHNcbiAqIEBwYXJhbSB7VVJMfSB1cmxcbiAqIEByZXR1cm5zIHtvcHRzIGlzIE5vdEh0dHBVcGxvYWRPcHRpb25zICYgTmV0T3B0aW9uc31cbiAqL1xuZnVuY3Rpb24gaXNOb3RIdHRwVXBsb2FkT3B0aW9ucyhvcHRzLCB1cmwpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCB7cHJvdG9jb2x9ID0gbmV3IFVSTCh1cmwpO1xuICAgIHJldHVybiBwcm90b2NvbCA9PT0gJ2Z0cDonO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbi8qKlxuICogVXBsb2FkcyB0aGUgZ2l2ZW4gZmlsZSB0byBhIHJlbW90ZSBsb2NhdGlvbi4gSFRUUChTKSBhbmQgRlRQXG4gKiBwcm90b2NvbHMgYXJlIHN1cHBvcnRlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbG9jYWxQYXRoIC0gVGhlIHBhdGggdG8gYSBmaWxlIG9uIHRoZSBsb2NhbCBzdG9yYWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IHJlbW90ZVVyaSAtIFRoZSByZW1vdGUgVVJJIHRvIHVwbG9hZCB0aGUgZmlsZSB0by5cbiAqIEBwYXJhbSB7KEh0dHBVcGxvYWRPcHRpb25zfE5vdEh0dHBVcGxvYWRPcHRpb25zKSAmIE5ldE9wdGlvbnN9IFt1cGxvYWRPcHRpb25zXVxuICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHVwbG9hZEZpbGUoXG4gIGxvY2FsUGF0aCxcbiAgcmVtb3RlVXJpLFxuICB1cGxvYWRPcHRpb25zID0gLyoqIEB0eXBlIHsoSHR0cFVwbG9hZE9wdGlvbnN8Tm90SHR0cFVwbG9hZE9wdGlvbnMpICYgTmV0T3B0aW9uc30gKi8gKHt9KVxuKSB7XG4gIGlmICghKGF3YWl0IGZzLmV4aXN0cyhsb2NhbFBhdGgpKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJyR7bG9jYWxQYXRofScgZG9lcyBub3QgZXhpc3RzIG9yIGlzIG5vdCBhY2Nlc3NpYmxlYCk7XG4gIH1cblxuICBjb25zdCB7aXNNZXRlcmVkID0gdHJ1ZX0gPSB1cGxvYWRPcHRpb25zO1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKHJlbW90ZVVyaSk7XG4gIGNvbnN0IHtzaXplfSA9IGF3YWl0IGZzLnN0YXQobG9jYWxQYXRoKTtcbiAgaWYgKGlzTWV0ZXJlZCkge1xuICAgIGxvZy5pbmZvKGBVcGxvYWRpbmcgJyR7bG9jYWxQYXRofScgb2YgJHt0b1JlYWRhYmxlU2l6ZVN0cmluZyhzaXplKX0gc2l6ZSB0byAnJHtyZW1vdGVVcml9J2ApO1xuICB9XG4gIGNvbnN0IHRpbWVyID0gbmV3IFRpbWVyKCkuc3RhcnQoKTtcbiAgaWYgKGlzSHR0cFVwbG9hZE9wdGlvbnModXBsb2FkT3B0aW9ucywgdXJsKSkge1xuICAgIGlmICghdXBsb2FkT3B0aW9ucy5maWxlRmllbGROYW1lKSB7XG4gICAgICB1cGxvYWRPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgIC4uLihfLmlzUGxhaW5PYmplY3QodXBsb2FkT3B0aW9ucy5oZWFkZXJzKSA/IHVwbG9hZE9wdGlvbnMuaGVhZGVycyA6IHt9KSxcbiAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogc2l6ZSxcbiAgICAgIH07XG4gICAgfVxuICAgIGF3YWl0IHVwbG9hZEZpbGVUb0h0dHAoZnMuY3JlYXRlUmVhZFN0cmVhbShsb2NhbFBhdGgpLCB1cmwsIHVwbG9hZE9wdGlvbnMpO1xuICB9IGVsc2UgaWYgKGlzTm90SHR0cFVwbG9hZE9wdGlvbnModXBsb2FkT3B0aW9ucywgdXJsKSkge1xuICAgIGF3YWl0IHVwbG9hZEZpbGVUb0Z0cChmcy5jcmVhdGVSZWFkU3RyZWFtKGxvY2FsUGF0aCksIHVybCwgdXBsb2FkT3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYENhbm5vdCB1cGxvYWQgdGhlIGZpbGUgYXQgJyR7bG9jYWxQYXRofScgdG8gJyR7cmVtb3RlVXJpfScuIGAgK1xuICAgICAgICBgVW5zdXBwb3J0ZWQgcmVtb3RlIHByb3RvY29sICcke3VybC5wcm90b2NvbH0nLiBgICtcbiAgICAgICAgYE9ubHkgaHR0cC9odHRwcyBhbmQgZnRwL2Z0cHMgcHJvdG9jb2xzIGFyZSBzdXBwb3J0ZWQuYFxuICAgICk7XG4gIH1cbiAgaWYgKGlzTWV0ZXJlZCkge1xuICAgIGxvZy5pbmZvKFxuICAgICAgYFVwbG9hZGVkICcke2xvY2FsUGF0aH0nIG9mICR7dG9SZWFkYWJsZVNpemVTdHJpbmcoc2l6ZSl9IHNpemUgaW4gYCArXG4gICAgICAgIGAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNTZWNvbmRzLnRvRml4ZWQoMyl9c2BcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogRG93bmxvYWRzIHRoZSBnaXZlbiBmaWxlIHZpYSBIVFRQKFMpXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlbW90ZVVybCAtIFRoZSByZW1vdGUgdXJsXG4gKiBAcGFyYW0ge3N0cmluZ30gZHN0UGF0aCAtIFRoZSBsb2NhbCBwYXRoIHRvIGRvd25sb2FkIHRoZSBmaWxlIHRvXG4gKiBAcGFyYW0ge0Rvd25sb2FkT3B0aW9ucyAmIE5ldE9wdGlvbnN9IFtkb3dubG9hZE9wdGlvbnNdXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgZG93bmxvYWQgb3BlcmF0aW9uIGZhaWxzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRvd25sb2FkRmlsZShcbiAgcmVtb3RlVXJsLFxuICBkc3RQYXRoLFxuICBkb3dubG9hZE9wdGlvbnMgPSAvKiogQHR5cGUge0Rvd25sb2FkT3B0aW9ucyAmIE5ldE9wdGlvbnN9ICovICh7fSlcbikge1xuICBjb25zdCB7aXNNZXRlcmVkID0gdHJ1ZSwgYXV0aCwgdGltZW91dCA9IERFRkFVTFRfVElNRU9VVF9NUywgaGVhZGVyc30gPSBkb3dubG9hZE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtpbXBvcnQoJ2F4aW9zJykuQXhpb3NSZXF1ZXN0Q29uZmlnfVxuICAgKi9cbiAgY29uc3QgcmVxdWVzdE9wdHMgPSB7XG4gICAgdXJsOiByZW1vdGVVcmwsXG4gICAgcmVzcG9uc2VUeXBlOiAnc3RyZWFtJyxcbiAgICB0aW1lb3V0LFxuICB9O1xuICBjb25zdCBheGlvc0F1dGggPSB0b0F4aW9zQXV0aChhdXRoKTtcbiAgaWYgKGF4aW9zQXV0aCkge1xuICAgIHJlcXVlc3RPcHRzLmF1dGggPSBheGlvc0F1dGg7XG4gIH1cbiAgaWYgKF8uaXNQbGFpbk9iamVjdChoZWFkZXJzKSkge1xuICAgIHJlcXVlc3RPcHRzLmhlYWRlcnMgPSBoZWFkZXJzO1xuICB9XG5cbiAgY29uc3QgdGltZXIgPSBuZXcgVGltZXIoKS5zdGFydCgpO1xuICBsZXQgcmVzcG9uc2VMZW5ndGg7XG4gIHRyeSB7XG4gICAgY29uc3Qgd3JpdGVyID0gZnMuY3JlYXRlV3JpdGVTdHJlYW0oZHN0UGF0aCk7XG4gICAgY29uc3Qge2RhdGE6IHJlc3BvbnNlU3RyZWFtLCBoZWFkZXJzOiByZXNwb25zZUhlYWRlcnN9ID0gYXdhaXQgYXhpb3MocmVxdWVzdE9wdHMpO1xuICAgIHJlc3BvbnNlTGVuZ3RoID0gcGFyc2VJbnQocmVzcG9uc2VIZWFkZXJzWydjb250ZW50LWxlbmd0aCddLCAxMCk7XG4gICAgcmVzcG9uc2VTdHJlYW0ucGlwZSh3cml0ZXIpO1xuXG4gICAgYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgcmVzcG9uc2VTdHJlYW0ub25jZSgnZXJyb3InLCByZWplY3QpO1xuICAgICAgd3JpdGVyLm9uY2UoJ2ZpbmlzaCcsIHJlc29sdmUpO1xuICAgICAgd3JpdGVyLm9uY2UoJ2Vycm9yJywgKGUpID0+IHtcbiAgICAgICAgcmVzcG9uc2VTdHJlYW0udW5waXBlKHdyaXRlcik7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBkb3dubG9hZCB0aGUgZmlsZSBmcm9tICR7cmVtb3RlVXJsfTogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxuXG4gIGNvbnN0IHtzaXplfSA9IGF3YWl0IGZzLnN0YXQoZHN0UGF0aCk7XG4gIGlmIChyZXNwb25zZUxlbmd0aCAmJiBzaXplICE9PSByZXNwb25zZUxlbmd0aCkge1xuICAgIGF3YWl0IGZzLnJpbXJhZihkc3RQYXRoKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVGhlIHNpemUgb2YgdGhlIGZpbGUgZG93bmxvYWRlZCBmcm9tICR7cmVtb3RlVXJsfSAoJHtzaXplfSBieXRlcykgYCArXG4gICAgICAgIGBkaWZmZXJzIGZyb20gdGhlIG9uZSBpbiBDb250ZW50LUxlbmd0aCByZXNwb25zZSBoZWFkZXIgKCR7cmVzcG9uc2VMZW5ndGh9IGJ5dGVzKWBcbiAgICApO1xuICB9XG4gIGlmIChpc01ldGVyZWQpIHtcbiAgICBjb25zdCBzZWNvbmRzRWxhcHNlZCA9IHRpbWVyLmdldER1cmF0aW9uKCkuYXNTZWNvbmRzO1xuICAgIGxvZy5kZWJ1ZyhcbiAgICAgIGAke3JlbW90ZVVybH0gKCR7dG9SZWFkYWJsZVNpemVTdHJpbmcoc2l6ZSl9KSBgICtcbiAgICAgICAgYGhhcyBiZWVuIGRvd25sb2FkZWQgdG8gJyR7ZHN0UGF0aH0nIGluICR7c2Vjb25kc0VsYXBzZWQudG9GaXhlZCgzKX1zYFxuICAgICk7XG4gICAgaWYgKHNlY29uZHNFbGFwc2VkID49IDIpIHtcbiAgICAgIGNvbnN0IGJ5dGVzUGVyU2VjID0gTWF0aC5mbG9vcihzaXplIC8gc2Vjb25kc0VsYXBzZWQpO1xuICAgICAgbG9nLmRlYnVnKGBBcHByb3hpbWF0ZSBkb3dubG9hZCBzcGVlZDogJHt0b1JlYWRhYmxlU2l6ZVN0cmluZyhieXRlc1BlclNlYyl9L3NgKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHt1cGxvYWRGaWxlLCBkb3dubG9hZEZpbGV9O1xuXG4vKipcbiAqIENvbW1vbiBvcHRpb25zIGZvciB7QGxpbmtjb2RlIHVwbG9hZEZpbGV9IGFuZCB7QGxpbmtjb2RlIGRvd25sb2FkRmlsZX0uXG4gKiBAdHlwZWRlZiBOZXRPcHRpb25zXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtpc01ldGVyZWQ9dHJ1ZV0gLSBXaGV0aGVyIHRvIGxvZyB0aGUgYWN0dWFsIGRvd25sb2FkIHBlcmZvcm1hbmNlXG4gKiAoZS5nLiB0aW1pbmdzIGFuZCBzcGVlZClcbiAqIEBwcm9wZXJ0eSB7QXV0aENyZWRlbnRpYWxzfSBbYXV0aF0gLSBBdXRoZW50aWNhdGlvbiBjcmVkZW50aWFsc1xuICovXG5cbi8qKlxuICogU3BlY2lmaWMgb3B0aW9ucyBmb3Ige0BsaW5rY29kZSBkb3dubG9hZEZpbGV9LlxuICogQHR5cGVkZWYgRG93bmxvYWRPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3RpbWVvdXRdIC0gVGhlIGFjdHVhbCByZXF1ZXN0IHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzOyBkZWZhdWx0cyB0byB7QGxpbmtjb2RlIERFRkFVTFRfVElNRU9VVF9NU31cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZyxhbnk+fSBbaGVhZGVyc10gLSBSZXF1ZXN0IGhlYWRlcnMgbWFwcGluZ1xuICovXG5cbi8qKlxuICogQmFzaWMgYXV0aCBjcmVkZW50aWFsczsgdXNlZCBieSB7QGxpbmtjb2RlIE5ldE9wdGlvbnN9LlxuICogQHR5cGVkZWYgQXV0aENyZWRlbnRpYWxzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdXNlciAtIE5vbi1lbXB0eSB1c2VyIG5hbWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXNzIC0gTm9uLWVtcHR5IHBhc3N3b3JkXG4gKi9cblxuLyoqXG4gKiBUaGlzIHR5cGUgaXMgdXNlZCBpbiB7QGxpbmtjb2RlIHVwbG9hZEZpbGV9IGlmIHRoZSByZW1vdGUgbG9jYXRpb24gdXNlcyB0aGUgYGZ0cGAgcHJvdG9jb2wsIGFuZCBkaXN0aW5ndWlzaGVzIHRoZSB0eXBlIGZyb20ge0BsaW5rY29kZSBIdHRwVXBsb2FkT3B0aW9uc30uXG4gKiBAdHlwZWRlZiBOb3RIdHRwVXBsb2FkT3B0aW9uc1xuICogQHByb3BlcnR5IHtuZXZlcn0gaGVhZGVyc1xuICogQHByb3BlcnR5IHtuZXZlcn0gbWV0aG9kXG4gKiBAcHJvcGVydHkge25ldmVyfSB0aW1lb3V0XG4gKiBAcHJvcGVydHkge25ldmVyfSBmaWxlRmllbGROYW1lXG4gKiBAcHJvcGVydHkge25ldmVyfSBmb3JtRmllbGRzXG4gKi9cblxuLyoqXG4gKiBTcGVjaWZpYyBvcHRpb25zIGZvciB7QGxpbmtjb2RlIHVwbG9hZEZpbGV9IGlmIHRoZSByZW1vdGUgbG9jYXRpb24gdXNlcyB0aGUgYGh0dHAocylgIHByb3RvY29sXG4gKiBAdHlwZWRlZiBIdHRwVXBsb2FkT3B0aW9uc1xuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLGFueT59IGhlYWRlcnMgLSBBZGRpdGlvbmFsIHJlcXVlc3QgaGVhZGVycyBtYXBwaW5nXG4gKiBAcHJvcGVydHkge2ltcG9ydCgnYXhpb3MnKS5NZXRob2R9IFttZXRob2Q9J1BPU1QnXSAtIFRoZSBIVFRQIG1ldGhvZCB1c2VkIGZvciBmaWxlIHVwbG9hZFxuICogQHByb3BlcnR5IHtudW1iZXJ9IFt0aW1lb3V0XSAtIFRoZSBhY3R1YWwgcmVxdWVzdCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kczsgZGVmYXVsdHMgdG8ge0BsaW5rY29kZSBERUZBVUxUX1RJTUVPVVRfTVN9XG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2ZpbGVGaWVsZE5hbWU9J2ZpbGUnXSAtIFRoZSBuYW1lIG9mIHRoZSBmb3JtIGZpZWxkIGNvbnRhaW5pbmcgdGhlIGZpbGVcbiAqIGNvbnRlbnQgdG8gYmUgdXBsb2FkZWQuIEFueSBmYWxzeSB2YWx1ZSBtYWtlIHRoZSByZXF1ZXN0IHRvIHVzZSBub24tbXVsdGlwYXJ0IHVwbG9hZFxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLGFueT59IFtmb3JtRmllbGRzXSAtIFRoZSBhZGRpdGlvbmFsIGZvcm0gZmllbGRzXG4gKiB0byBiZSBpbmNsdWRlZCBpbnRvIHRoZSB1cGxvYWQgcmVxdWVzdC4gVGhpcyBwcm9wZXJ0eSBpcyBvbmx5IGNvbnNpZGVyZWQgaWZcbiAqIGBmaWxlRmllbGROYW1lYCBpcyBzZXRcbiAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFFQSxNQUFNQSxrQkFBa0IsR0FBRyxJQUFJLEVB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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"net.js","names":["DEFAULT_TIMEOUT_MS","toAxiosAuth","auth","_","isPlainObject","axiosAuth","username","get","password","uploadFileToHttp","localFileStream","parsedUri","uploadOptions","method","timeout","headers","fileFieldName","formFields","href","requestOpts","url","maxContentLength","Infinity","maxBodyLength","form","FormData","append","pairs","isArray","toPairs","key","value","toLower","getHeaders","data","log","debug","JSON","stringify","omit","status","statusText","axios","info","uploadFileToFtp","hostname","port","protocol","pathname","ftpOpts","host","isUndefined","parseInt","user","pass","B","resolve","reject","Ftp","put","err","isHttpUploadOptions","opts","URL","isNotHttpUploadOptions","uploadFile","localPath","remoteUri","fs","exists","Error","isMetered","size","stat","toReadableSizeString","timer","Timer","start","createReadStream","getDuration","asSeconds","toFixed","downloadFile","remoteUrl","dstPath","downloadOptions","responseType","responseLength","writer","createWriteStream","responseStream","responseHeaders","pipe","once","e","unpipe","message","rimraf","secondsElapsed","bytesPerSec","Math","floor"],"sources":["../../lib/net.js"],"sourcesContent":["import _ from 'lodash';\nimport fs from './fs';\nimport B from 'bluebird';\nimport {toReadableSizeString} from './util';\nimport log from './logger';\nimport Ftp from 'jsftp';\nimport Timer from './timing';\nimport axios from 'axios';\nimport FormData from 'form-data';\n\nconst DEFAULT_TIMEOUT_MS = 4 * 60 * 1000;\n\n/**\n * Converts {@linkcode AuthCredentials} to credentials understood by {@linkcode axios}.\n * @param {AuthCredentials | import('axios').AxiosBasicCredentials} [auth]\n * @returns {import('axios').AxiosBasicCredentials?}\n */\nfunction toAxiosAuth(auth) {\n if (!_.isPlainObject(auth)) {\n return null;\n }\n\n const axiosAuth = {\n username: _.get(auth, 'username', _.get(auth, 'user')),\n password: _.get(auth, 'password', _.get(auth, 'pass')),\n };\n return axiosAuth.username && axiosAuth.password ? axiosAuth : null;\n}\n\n/**\n * @param {NodeJS.ReadableStream} localFileStream\n * @param {URL} parsedUri\n * @param {HttpUploadOptions & NetOptions} [uploadOptions]\n */\nasync function uploadFileToHttp(\n localFileStream,\n parsedUri,\n uploadOptions = /** @type {HttpUploadOptions & NetOptions} */ ({})\n) {\n const {\n method = 'POST',\n timeout = DEFAULT_TIMEOUT_MS,\n headers,\n auth,\n fileFieldName = 'file',\n formFields,\n } = uploadOptions;\n const {href} = parsedUri;\n\n /** @type {import('axios').AxiosRequestConfig} */\n const requestOpts = {\n url: href,\n method,\n timeout,\n maxContentLength: Infinity,\n maxBodyLength: Infinity,\n };\n const axiosAuth = toAxiosAuth(auth);\n if (axiosAuth) {\n requestOpts.auth = axiosAuth;\n }\n if (fileFieldName) {\n const form = new FormData();\n form.append(fileFieldName, localFileStream);\n if (formFields) {\n let pairs = [];\n if (_.isArray(formFields)) {\n pairs = formFields;\n } else if (_.isPlainObject(formFields)) {\n pairs = _.toPairs(formFields);\n }\n for (const [key, value] of pairs) {\n if (_.toLower(key) !== _.toLower(fileFieldName)) {\n form.append(key, value);\n }\n }\n }\n requestOpts.headers = {\n ...(_.isPlainObject(headers) ? headers : {}),\n ...form.getHeaders(),\n };\n requestOpts.data = form;\n } else {\n if (_.isPlainObject(headers)) {\n requestOpts.headers = headers;\n }\n requestOpts.data = localFileStream;\n }\n log.debug(\n `Performing ${method} to ${href} with options (excluding data): ` +\n JSON.stringify(_.omit(requestOpts, ['data']))\n );\n\n const {status, statusText} = await axios(requestOpts);\n log.info(`Server response: ${status} ${statusText}`);\n}\n\n/**\n * @param {string | Buffer | NodeJS.ReadableStream} localFileStream\n * @param {URL} parsedUri\n * @param {NotHttpUploadOptions & NetOptions} [uploadOptions]\n */\nasync function uploadFileToFtp(\n localFileStream,\n parsedUri,\n uploadOptions = /** @type {NotHttpUploadOptions & NetOptions} */ ({})\n) {\n const {auth} = uploadOptions;\n const {hostname, port, protocol, pathname} = parsedUri;\n\n const ftpOpts = {\n host: hostname,\n port: !_.isUndefined(port) ? _.parseInt(port) : 21,\n };\n if (auth?.user && auth?.pass) {\n ftpOpts.user = auth.user;\n ftpOpts.pass = auth.pass;\n }\n log.debug(`${protocol} upload options: ${JSON.stringify(ftpOpts)}`);\n return await new B((resolve, reject) => {\n new Ftp(ftpOpts).put(localFileStream, pathname, (err) => {\n if (err) {\n reject(err);\n } else {\n resolve();\n }\n });\n });\n}\n\n/**\n * Returns `true` if params are valid for {@linkcode uploadFileToHttp}.\n * @param {any} opts\n * @param {URL} url\n * @returns {opts is HttpUploadOptions & NetOptions}\n */\nfunction isHttpUploadOptions(opts, url) {\n try {\n const {protocol} = new URL(url);\n return protocol === 'http:' || protocol === 'https:';\n } catch {\n return false;\n }\n}\n\n/**\n * Returns `true` if params are valid for {@linkcode uploadFileToFtp}.\n * @param {any} opts\n * @param {URL} url\n * @returns {opts is NotHttpUploadOptions & NetOptions}\n */\nfunction isNotHttpUploadOptions(opts, url) {\n try {\n const {protocol} = new URL(url);\n return protocol === 'ftp:';\n } catch {\n return false;\n }\n}\n/**\n * Uploads the given file to a remote location. HTTP(S) and FTP\n * protocols are supported.\n *\n * @param {string} localPath - The path to a file on the local storage.\n * @param {string} remoteUri - The remote URI to upload the file to.\n * @param {(HttpUploadOptions|NotHttpUploadOptions) & NetOptions} [uploadOptions]\n * @returns {Promise<void>}\n */\nasync function uploadFile(\n localPath,\n remoteUri,\n uploadOptions = /** @type {(HttpUploadOptions|NotHttpUploadOptions) & NetOptions} */ ({})\n) {\n if (!(await fs.exists(localPath))) {\n throw new Error(`'${localPath}' does not exists or is not accessible`);\n }\n\n const {isMetered = true} = uploadOptions;\n const url = new URL(remoteUri);\n const {size} = await fs.stat(localPath);\n if (isMetered) {\n log.info(`Uploading '${localPath}' of ${toReadableSizeString(size)} size to '${remoteUri}'`);\n }\n const timer = new Timer().start();\n if (isHttpUploadOptions(uploadOptions, url)) {\n if (!uploadOptions.fileFieldName) {\n uploadOptions.headers = {\n ...(_.isPlainObject(uploadOptions.headers) ? uploadOptions.headers : {}),\n 'Content-Length': size,\n };\n }\n await uploadFileToHttp(fs.createReadStream(localPath), url, uploadOptions);\n } else if (isNotHttpUploadOptions(uploadOptions, url)) {\n await uploadFileToFtp(fs.createReadStream(localPath), url, uploadOptions);\n } else {\n throw new Error(\n `Cannot upload the file at '${localPath}' to '${remoteUri}'. ` +\n `Unsupported remote protocol '${url.protocol}'. ` +\n `Only http/https and ftp/ftps protocols are supported.`\n );\n }\n if (isMetered) {\n log.info(\n `Uploaded '${localPath}' of ${toReadableSizeString(size)} size in ` +\n `${timer.getDuration().asSeconds.toFixed(3)}s`\n );\n }\n}\n\n/**\n * Downloads the given file via HTTP(S)\n *\n * @param {string} remoteUrl - The remote url\n * @param {string} dstPath - The local path to download the file to\n * @param {DownloadOptions & NetOptions} [downloadOptions]\n * @throws {Error} If download operation fails\n */\nasync function downloadFile(\n remoteUrl,\n dstPath,\n downloadOptions = /** @type {DownloadOptions & NetOptions} */ ({})\n) {\n const {isMetered = true, auth, timeout = DEFAULT_TIMEOUT_MS, headers} = downloadOptions;\n\n /**\n * @type {import('axios').AxiosRequestConfig}\n */\n const requestOpts = {\n url: remoteUrl,\n responseType: 'stream',\n timeout,\n };\n const axiosAuth = toAxiosAuth(auth);\n if (axiosAuth) {\n requestOpts.auth = axiosAuth;\n }\n if (_.isPlainObject(headers)) {\n requestOpts.headers = headers;\n }\n\n const timer = new Timer().start();\n let responseLength;\n try {\n const writer = fs.createWriteStream(dstPath);\n const {data: responseStream, headers: responseHeaders} = await axios(requestOpts);\n responseLength = parseInt(responseHeaders['content-length'], 10);\n responseStream.pipe(writer);\n\n await new B((resolve, reject) => {\n responseStream.once('error', reject);\n writer.once('finish', resolve);\n writer.once('error', (e) => {\n responseStream.unpipe(writer);\n reject(e);\n });\n });\n } catch (err) {\n throw new Error(`Cannot download the file from ${remoteUrl}: ${err.message}`);\n }\n\n const {size} = await fs.stat(dstPath);\n if (responseLength && size !== responseLength) {\n await fs.rimraf(dstPath);\n throw new Error(\n `The size of the file downloaded from ${remoteUrl} (${size} bytes) ` +\n `differs from the one in Content-Length response header (${responseLength} bytes)`\n );\n }\n if (isMetered) {\n const secondsElapsed = timer.getDuration().asSeconds;\n log.debug(\n `${remoteUrl} (${toReadableSizeString(size)}) ` +\n `has been downloaded to '${dstPath}' in ${secondsElapsed.toFixed(3)}s`\n );\n if (secondsElapsed >= 2) {\n const bytesPerSec = Math.floor(size / secondsElapsed);\n log.debug(`Approximate download speed: ${toReadableSizeString(bytesPerSec)}/s`);\n }\n }\n}\n\nexport {uploadFile, downloadFile};\n\n/**\n * Common options for {@linkcode uploadFile} and {@linkcode downloadFile}.\n * @typedef NetOptions\n * @property {boolean} [isMetered=true] - Whether to log the actual download performance\n * (e.g. timings and speed)\n * @property {AuthCredentials} [auth] - Authentication credentials\n */\n\n/**\n * Specific options for {@linkcode downloadFile}.\n * @typedef DownloadOptions\n * @property {number} [timeout] - The actual request timeout in milliseconds; defaults to {@linkcode DEFAULT_TIMEOUT_MS}\n * @property {Record<string,any>} [headers] - Request headers mapping\n */\n\n/**\n * Basic auth credentials; used by {@linkcode NetOptions}.\n * @typedef AuthCredentials\n * @property {string} user - Non-empty user name\n * @property {string} pass - Non-empty password\n */\n\n/**\n * This type is used in {@linkcode uploadFile} if the remote location uses the `ftp` protocol, and distinguishes the type from {@linkcode HttpUploadOptions}.\n * @typedef NotHttpUploadOptions\n * @property {never} headers\n * @property {never} method\n * @property {never} timeout\n * @property {never} fileFieldName\n * @property {never} formFields\n */\n\n/**\n * Specific options for {@linkcode uploadFile} if the remote location uses the `http(s)` protocol\n * @typedef HttpUploadOptions\n * @property {Record<string,any>} headers - Additional request headers mapping\n * @property {import('axios').Method} [method='POST'] - The HTTP method used for file upload\n * @property {number} [timeout] - The actual request timeout in milliseconds; defaults to {@linkcode DEFAULT_TIMEOUT_MS}\n * @property {string} [fileFieldName='file'] - The name of the form field containing the file\n * content to be uploaded. Any falsy value make the request to use non-multipart upload\n * @property {Record<string,any>} [formFields] - The additional form fields\n * to be included into the upload request. This property is only considered if\n * `fileFieldName` is set\n */\n"],"mappings":"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"}
|
package/build/lib/node.js
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
3
|
Object.defineProperty(exports, "__esModule", {
|
|
6
4
|
value: true
|
|
7
5
|
});
|
|
@@ -27,6 +25,8 @@ var _fs2 = _interopRequireDefault(require("fs"));
|
|
|
27
25
|
|
|
28
26
|
var _uuid = require("uuid");
|
|
29
27
|
|
|
28
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
29
|
+
|
|
30
30
|
const ECMA_SIZES = Object.freeze({
|
|
31
31
|
STRING: 2,
|
|
32
32
|
BOOLEAN: 4,
|
|
@@ -211,4 +211,4 @@ function getModuleRootSync(moduleName, filePath) {
|
|
|
211
211
|
|
|
212
212
|
return null;
|
|
213
213
|
}
|
|
214
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFQ01BX1NJWkVTIiwiT2JqZWN0IiwiZnJlZXplIiwiU1RSSU5HIiwiQk9PTEVBTiIsIk5VTUJFUiIsImxpbmtHbG9iYWxQYWNrYWdlIiwicGFja2FnZU5hbWUiLCJsb2ciLCJkZWJ1ZyIsImNtZCIsImlzV2luZG93cyIsImV4ZWMiLCJ0aW1lb3V0IiwiZXJyIiwibXNnIiwibWVzc2FnZSIsInN0ZGVyciIsIkVycm9yIiwicmVxdWlyZVBhY2thZ2UiLCJyZXF1aXJlIiwiZ2xvYmFsUGFja2FnZU5hbWUiLCJwYXRoIiwicmVzb2x2ZSIsInByb2Nlc3MiLCJlbnYiLCJucG1fY29uZmlnX3ByZWZpeCIsImVycm9yQW5kVGhyb3ciLCJleHRyYWN0QWxsUHJvcGVydGllcyIsIm9iaiIsInN0cmluZ1Byb3BlcnRpZXMiLCJwcm9wIiwicHVzaCIsIl8iLCJpc0Z1bmN0aW9uIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiX2dldFNpemVPZk9iamVjdCIsInNlZW4iLCJvYmplY3QiLCJpc05pbCIsImJ5dGVzIiwicHJvcGVydGllcyIsImtleSIsImhhcyIsImFkZCIsImdldENhbGN1bGF0b3IiLCJleCIsIlJhbmdlRXJyb3IiLCJjYWxjdWxhdG9yIiwiaXNCdWZmZXIiLCJsZW5ndGgiLCJTeW1ib2wiLCJrZXlGb3IiLCJ0b1N0cmluZyIsImlzQXJyYXkiLCJtYXAiLCJyZWR1Y2UiLCJhY2MiLCJjdXJyIiwiZ2V0T2JqZWN0U2l6ZSIsIldlYWtTZXQiLCJPQkpFQ1RTX01BUFBJTkciLCJXZWFrTWFwIiwiZ2V0T2JqZWN0SWQiLCJzZXQiLCJ1dWlkVjQiLCJnZXQiLCJkZWVwRnJlZXplIiwicHJvcE5hbWVzIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImlnbiIsIm5hbWUiLCJ2YWx1ZSIsImdldE1vZHVsZVJvb3RTeW5jIiwibW9kdWxlTmFtZSIsImZpbGVQYXRoIiwiY3VycmVudERpciIsImRpcm5hbWUiLCJpc0F0RnNSb290IiwibWFuaWZlc3RQYXRoIiwiam9pbiIsIl9mcyIsImV4aXN0c1N5bmMiLCJKU09OIiwicGFyc2UiLCJyZWFkRmlsZVN5bmMiXSwic291cmNlcyI6WyIuLi8uLi9saWIvbm9kZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2lzV2luZG93c30gZnJvbSAnLi9zeXN0ZW0nO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtleGVjfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgX2ZzIGZyb20gJ2ZzJztcbmltcG9ydCB7djQgYXMgdXVpZFY0fSBmcm9tICd1dWlkJztcblxuY29uc3QgRUNNQV9TSVpFUyA9IE9iamVjdC5mcmVlemUoe1xuICBTVFJJTkc6IDIsXG4gIEJPT0xFQU46IDQsXG4gIE5VTUJFUjogOCxcbn0pO1xuXG4vKipcbiAqIEludGVybmFsIHV0aWxpdHkgdG8gbGluayBnbG9iYWwgcGFja2FnZSB0byBsb2NhbCBjb250ZXh0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhY2thZ2VOYW1lIC0gbmFtZSBvZiB0aGUgcGFja2FnZSB0byBsaW5rXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGNvbW1hbmQgZmFpbHNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gbGlua0dsb2JhbFBhY2thZ2UocGFja2FnZU5hbWUpIHtcbiAgdHJ5IHtcbiAgICBsb2cuZGVidWcoYExpbmtpbmcgcGFja2FnZSAnJHtwYWNrYWdlTmFtZX0nYCk7XG4gICAgY29uc3QgY21kID0gaXNXaW5kb3dzKCkgPyAnbnBtLmNtZCcgOiAnbnBtJztcbiAgICBhd2FpdCBleGVjKGNtZCwgWydsaW5rJywgcGFja2FnZU5hbWVdLCB7dGltZW91dDogMjAwMDB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3QgbXNnID0gYFVuYWJsZSB0byBsb2FkIHBhY2thZ2UgJyR7cGFja2FnZU5hbWV9JywgbGlua2luZyBmYWlsZWQ6ICR7ZXJyLm1lc3NhZ2V9YDtcbiAgICBsb2cuZGVidWcobXNnKTtcbiAgICBpZiAoZXJyLnN0ZGVycikge1xuICAgICAgLy8gbG9nIHRoZSBzdGRlcnIgaWYgdGhlcmUsIGJ1dCBkbyBub3QgYWRkIHRvIHRocm93biBlcnJvciBhcyBpdCBpc1xuICAgICAgLy8gX3ZlcnlfIHZlcmJvc2VcbiAgICAgIGxvZy5kZWJ1ZyhlcnIuc3RkZXJyKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gIH1cbn1cblxuLyoqXG4gKiBVdGlsaXR5IGZ1bmN0aW9uIHRvIGV4dGVuZCBub2RlIGZ1bmN0aW9uYWxpdHksIGFsbG93aW5nIHVzIHRvIHJlcXVpcmVcbiAqIG1vZHVsZXMgdGhhdCBhcmUgaW5zdGFsbGVkIGdsb2JhbGx5LiBJZiB0aGUgcGFja2FnZSBjYW5ub3QgYmUgcmVxdWlyZWQsXG4gKiB0aGlzIHdpbGwgYXR0ZW1wdCB0byBsaW5rIHRoZSBwYWNrYWdlIGFuZCB0aGVuIHJlLXJlcXVpcmUgaXRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGFja2FnZU5hbWUgLSB0aGUgbmFtZSBvZiB0aGUgcGFja2FnZSB0byBiZSByZXF1aXJlZFxuICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bj59IC0gdGhlIHBhY2thZ2Ugb2JqZWN0XG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBhY2thZ2UgaXMgbm90IGZvdW5kIGxvY2FsbHkgb3IgZ2xvYmFsbHlcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVxdWlyZVBhY2thZ2UocGFja2FnZU5hbWUpIHtcbiAgLy8gZmlyc3QsIGdldCBpdCBpbiB0aGUgbm9ybWFsIHdheSAoc2VlIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvbW9kdWxlcy5odG1sI21vZHVsZXNfYWxsX3RvZ2V0aGVyKVxuICB0cnkge1xuICAgIGxvZy5kZWJ1ZyhgTG9hZGluZyBsb2NhbCBwYWNrYWdlICcke3BhY2thZ2VOYW1lfSdgKTtcbiAgICByZXR1cm4gcmVxdWlyZShwYWNrYWdlTmFtZSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy5kZWJ1ZyhgRmFpbGVkIHRvIGxvYWQgbG9jYWwgcGFja2FnZSAnJHtwYWNrYWdlTmFtZX0nOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG5cbiAgLy8gc2Vjb25kLCBnZXQgaXQgZnJvbSB3aGVyZSBpdCBvdWdodCB0byBiZSBpbiB0aGUgZ2xvYmFsIG5vZGVfbW9kdWxlc1xuICB0cnkge1xuICAgIGNvbnN0IGdsb2JhbFBhY2thZ2VOYW1lID0gcGF0aC5yZXNvbHZlKFxuICAgICAgcHJvY2Vzcy5lbnYubnBtX2NvbmZpZ19wcmVmaXggPz8gJycsXG4gICAgICAnbGliJyxcbiAgICAgICdub2RlX21vZHVsZXMnLFxuICAgICAgcGFja2FnZU5hbWVcbiAgICApO1xuICAgIGxvZy5kZWJ1ZyhgTG9hZGluZyBnbG9iYWwgcGFja2FnZSAnJHtnbG9iYWxQYWNrYWdlTmFtZX0nYCk7XG4gICAgcmV0dXJuIHJlcXVpcmUoZ2xvYmFsUGFja2FnZU5hbWUpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cuZGVidWcoYEZhaWxlZCB0byBsb2FkIGdsb2JhbCBwYWNrYWdlICcke3BhY2thZ2VOYW1lfSc6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cblxuICAvLyB0aGlyZCwgbGluayB0aGUgZmlsZSBhbmQgZ2V0IGxvY2FsbHlcbiAgdHJ5IHtcbiAgICBhd2FpdCBsaW5rR2xvYmFsUGFja2FnZShwYWNrYWdlTmFtZSk7XG4gICAgbG9nLmRlYnVnKGBSZXRyeWluZyBsb2FkIG9mIGxpbmtlZCBwYWNrYWdlICcke3BhY2thZ2VOYW1lfSdgKTtcbiAgICByZXR1cm4gcmVxdWlyZShwYWNrYWdlTmFtZSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy5lcnJvckFuZFRocm93KGBVbmFibGUgdG8gbG9hZCBwYWNrYWdlICcke3BhY2thZ2VOYW1lfSc6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZXh0cmFjdEFsbFByb3BlcnRpZXMob2JqKSB7XG4gIGNvbnN0IHN0cmluZ1Byb3BlcnRpZXMgPSBbXTtcbiAgZm9yIChjb25zdCBwcm9wIGluIG9iaikge1xuICAgIHN0cmluZ1Byb3BlcnRpZXMucHVzaChwcm9wKTtcbiAgfVxuICBpZiAoXy5pc0Z1bmN0aW9uKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpKSB7XG4gICAgc3RyaW5nUHJvcGVydGllcy5wdXNoKC4uLk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKSk7XG4gIH1cbiAgcmV0dXJuIHN0cmluZ1Byb3BlcnRpZXM7XG59XG5cbmZ1bmN0aW9uIF9nZXRTaXplT2ZPYmplY3Qoc2Vlbiwgb2JqZWN0KSB7XG4gIGlmIChfLmlzTmlsKG9iamVjdCkpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGxldCBieXRlcyA9IDA7XG4gIGNvbnN0IHByb3BlcnRpZXMgPSBleHRyYWN0QWxsUHJvcGVydGllcyhvYmplY3QpO1xuICBmb3IgKGNvbnN0IGtleSBvZiBwcm9wZXJ0aWVzKSB7XG4gICAgLy8gRG8gbm90IHJlY2FsY3VsYXRlIGNpcmN1bGFyIHJlZmVyZW5jZXNcbiAgICBpZiAodHlwZW9mIG9iamVjdFtrZXldID09PSAnb2JqZWN0JyAmJiAhXy5pc05pbChvYmplY3Rba2V5XSkpIHtcbiAgICAgIGlmIChzZWVuLmhhcyhvYmplY3Rba2V5XSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBzZWVuLmFkZChvYmplY3Rba2V5XSk7XG4gICAgfVxuXG4gICAgYnl0ZXMgKz0gZ2V0Q2FsY3VsYXRvcihzZWVuKShrZXkpO1xuICAgIHRyeSB7XG4gICAgICBieXRlcyArPSBnZXRDYWxjdWxhdG9yKHNlZW4pKG9iamVjdFtrZXldKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgaWYgKGV4IGluc3RhbmNlb2YgUmFuZ2VFcnJvcikge1xuICAgICAgICAvLyBjaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQsIGZpbmFsIHJlc3VsdCBtaWdodCBiZSBpbmNvcnJlY3RcbiAgICAgICAgLy8gbGV0J3MgYmUgbmljZSBhbmQgbm90IHRocm93IGFuIGV4Y2VwdGlvblxuICAgICAgICBieXRlcyA9IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVzO1xufVxuXG5mdW5jdGlvbiBnZXRDYWxjdWxhdG9yKHNlZW4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGNhbGN1bGF0b3Iob2JqKSB7XG4gICAgaWYgKF8uaXNCdWZmZXIob2JqKSkge1xuICAgICAgcmV0dXJuIG9iai5sZW5ndGg7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0eXBlb2Ygb2JqKSB7XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICByZXR1cm4gb2JqLmxlbmd0aCAqIEVDTUFfU0laRVMuU1RSSU5HO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHJldHVybiBFQ01BX1NJWkVTLkJPT0xFQU47XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICByZXR1cm4gRUNNQV9TSVpFUy5OVU1CRVI7XG4gICAgICBjYXNlICdzeW1ib2wnOlxuICAgICAgICByZXR1cm4gXy5pc0Z1bmN0aW9uKFN5bWJvbC5rZXlGb3IpICYmIFN5bWJvbC5rZXlGb3Iob2JqKVxuICAgICAgICAgID8gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChTeW1ib2wua2V5Rm9yKG9iaikpLmxlbmd0aCAqIEVDTUFfU0laRVMuU1RSSU5HXG4gICAgICAgICAgOiAob2JqLnRvU3RyaW5nKCkubGVuZ3RoIC0gOCkgKiBFQ01BX1NJWkVTLlNUUklORztcbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHJldHVybiBfLmlzQXJyYXkob2JqKVxuICAgICAgICAgID8gb2JqLm1hcChnZXRDYWxjdWxhdG9yKHNlZW4pKS5yZWR1Y2UoKGFjYywgY3VycikgPT4gYWNjICsgY3VyciwgMClcbiAgICAgICAgICA6IF9nZXRTaXplT2ZPYmplY3Qoc2Vlbiwgb2JqKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIGluLWRlcHRoIHNpemUgaW4gbWVtb3J5IG9mIHRoZSBwcm92aWRlZCBvYmplY3QuXG4gKiBUaGUgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24gaXMgYm9ycm93ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbWlrdGFtL3NpemVvZi5cbiAqXG4gKiBAcGFyYW0geyp9IG9iaiBBbiBvYmplY3Qgd2hvc2Ugc2l6ZSBzaG91bGQgYmUgY2FsY3VsYXRlZFxuICogQHJldHVybnMge251bWJlcn0gT2JqZWN0IHNpemUgaW4gYnl0ZXMuXG4gKi9cbmZ1bmN0aW9uIGdldE9iamVjdFNpemUob2JqKSB7XG4gIHJldHVybiBnZXRDYWxjdWxhdG9yKG5ldyBXZWFrU2V0KCkpKG9iaik7XG59XG5cbmNvbnN0IE9CSkVDVFNfTUFQUElORyA9IG5ldyBXZWFrTWFwKCk7XG5cbi8qKlxuICogQ2FsY3VsYXRlcyBhIHVuaXF1ZSBvYmplY3QgaWRlbnRpZmllclxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3QgQW55IHZhbGlkIEVDTUEgb2JqZWN0XG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIHV1aWRWNCBzdHJpbmcgdGhhdCB1bmlxdWVseSBpZGVudGlmaWVzIGdpdmVuIG9iamVjdFxuICovXG5mdW5jdGlvbiBnZXRPYmplY3RJZChvYmplY3QpIHtcbiAgaWYgKCFPQkpFQ1RTX01BUFBJTkcuaGFzKG9iamVjdCkpIHtcbiAgICBPQkpFQ1RTX01BUFBJTkcuc2V0KG9iamVjdCwgdXVpZFY0KCkpO1xuICB9XG4gIHJldHVybiBPQkpFQ1RTX01BUFBJTkcuZ2V0KG9iamVjdCk7XG59XG5cbi8qKlxuICogUGVyZm9ybSBkZWVwIGZyZWV6ZSBvZiB0aGUgZ2l2ZW4gb2JqZWN0IChlLiBnLlxuICogYWxsIG5lc3RlZCBvYmplY3RzIGFsc28gYmVjb21lIGltbXV0YWJsZSkuXG4gKiBJZiB0aGUgcGFzc2VkIG9iamVjdCBpcyBvZiBhIHBsYWluIHR5cGVcbiAqIHRoZW4gbm8gY2hhbmdlIGlzIGRvbmUgYW5kIHRoZSBzYW1lIG9iamVjdFxuICogaXMgcmV0dXJuZWQuXG4gKiAhIFRoaXMgZnVuY3Rpb24gY2hhbmdlcyB0aGUgZ2l2ZW4gb2JqZWN0LFxuICogc28gaXQgYmVjb21lcyBpbW11dGFibGUuXG4gKlxuICogQHBhcmFtIHsqfSBvYmplY3QgQW55IHZhbGlkIEVDTUEgb2JqZWN0XG4gKiBAcmV0dXJucyB7Kn0gVGhlIHNhbWUgb2JqZWN0IHRoYXQgd2FzIHBhc3NlZCB0byB0aGVcbiAqIGZ1bmN0aW9uIGFmdGVyIGl0IHdhcyBtYWRlIGltbXV0YWJsZS5cbiAqL1xuZnVuY3Rpb24gZGVlcEZyZWV6ZShvYmplY3QpIHtcbiAgbGV0IHByb3BOYW1lcztcbiAgdHJ5IHtcbiAgICBwcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QpO1xuICB9IGNhdGNoIChpZ24pIHtcbiAgICByZXR1cm4gb2JqZWN0O1xuICB9XG4gIGZvciAoY29uc3QgbmFtZSBvZiBwcm9wTmFtZXMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IG9iamVjdFtuYW1lXTtcbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgZGVlcEZyZWV6ZSh2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBPYmplY3QuZnJlZXplKG9iamVjdCk7XG59XG5cbi8qKlxuICogVHJpZXMgdG8gc3luY2hyb25vdXNseSBkZXRlY3QgdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGZvbGRlclxuICogd2hlcmUgdGhlIGdpdmVuIGBtb2R1bGVOYW1lYCBpcyBsb2NhdGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2R1bGVOYW1lIFRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgYXMgaXQgaXMgd3JpdHRlbiBpbiBwYWNrYWdlLmpzb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aCBGdWxsIHBhdGggdG8gYW55IG9mIGZpbGVzIHRoYXQgYG1vZHVsZU5hbWVgIGNvbnRhaW5zLiBVc2VcbiAqIGBfX2ZpbGVuYW1lYCB0byBmaW5kIHRoZSByb290IG9mIHRoZSBtb2R1bGUgd2hlcmUgdGhpcyBoZWxwZXIgaXMgY2FsbGVkLlxuICogQHJldHVybnMge3N0cmluZz99IEZ1bGwgcGF0aCB0byB0aGUgbW9kdWxlIHJvb3RcbiAqL1xuZnVuY3Rpb24gZ2V0TW9kdWxlUm9vdFN5bmMgKG1vZHVsZU5hbWUsIGZpbGVQYXRoKSB7XG4gIGxldCBjdXJyZW50RGlyID0gcGF0aC5kaXJuYW1lKHBhdGgucmVzb2x2ZShmaWxlUGF0aCkpO1xuICBsZXQgaXNBdEZzUm9vdCA9IGZhbHNlO1xuICB3aGlsZSAoIWlzQXRGc1Jvb3QpIHtcbiAgICBjb25zdCBtYW5pZmVzdFBhdGggPSBwYXRoLmpvaW4oY3VycmVudERpciwgJ3BhY2thZ2UuanNvbicpO1xuICAgIHRyeSB7XG4gICAgICBpZiAoX2ZzLmV4aXN0c1N5bmMobWFuaWZlc3RQYXRoKSAmJlxuICAgICAgICAgIEpTT04ucGFyc2UoX2ZzLnJlYWRGaWxlU3luYyhtYW5pZmVzdFBhdGgsICd1dGY4JykpLm5hbWUgPT09IG1vZHVsZU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnREaXI7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICAgIGN1cnJlbnREaXIgPSBwYXRoLmRpcm5hbWUoY3VycmVudERpcik7XG4gICAgaXNBdEZzUm9vdCA9IGN1cnJlbnREaXIubGVuZ3RoIDw9IHBhdGguZGlybmFtZShjdXJyZW50RGlyKS5sZW5ndGg7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCB7cmVxdWlyZVBhY2thZ2UsIGdldE9iamVjdFNpemUsIGdldE9iamVjdElkLCBkZWVwRnJlZXplLCBnZXRNb2R1bGVSb290U3luY307XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNB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
|
|
214
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFQ01BX1NJWkVTIiwiT2JqZWN0IiwiZnJlZXplIiwiU1RSSU5HIiwiQk9PTEVBTiIsIk5VTUJFUiIsImxpbmtHbG9iYWxQYWNrYWdlIiwicGFja2FnZU5hbWUiLCJsb2ciLCJkZWJ1ZyIsImNtZCIsImlzV2luZG93cyIsImV4ZWMiLCJ0aW1lb3V0IiwiZXJyIiwibXNnIiwibWVzc2FnZSIsInN0ZGVyciIsIkVycm9yIiwicmVxdWlyZVBhY2thZ2UiLCJyZXF1aXJlIiwiZ2xvYmFsUGFja2FnZU5hbWUiLCJwYXRoIiwicmVzb2x2ZSIsInByb2Nlc3MiLCJlbnYiLCJucG1fY29uZmlnX3ByZWZpeCIsImVycm9yQW5kVGhyb3ciLCJleHRyYWN0QWxsUHJvcGVydGllcyIsIm9iaiIsInN0cmluZ1Byb3BlcnRpZXMiLCJwcm9wIiwicHVzaCIsIl8iLCJpc0Z1bmN0aW9uIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiX2dldFNpemVPZk9iamVjdCIsInNlZW4iLCJvYmplY3QiLCJpc05pbCIsImJ5dGVzIiwicHJvcGVydGllcyIsImtleSIsImhhcyIsImFkZCIsImdldENhbGN1bGF0b3IiLCJleCIsIlJhbmdlRXJyb3IiLCJjYWxjdWxhdG9yIiwiaXNCdWZmZXIiLCJsZW5ndGgiLCJTeW1ib2wiLCJrZXlGb3IiLCJ0b1N0cmluZyIsImlzQXJyYXkiLCJtYXAiLCJyZWR1Y2UiLCJhY2MiLCJjdXJyIiwiZ2V0T2JqZWN0U2l6ZSIsIldlYWtTZXQiLCJPQkpFQ1RTX01BUFBJTkciLCJXZWFrTWFwIiwiZ2V0T2JqZWN0SWQiLCJzZXQiLCJ1dWlkVjQiLCJnZXQiLCJkZWVwRnJlZXplIiwicHJvcE5hbWVzIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImlnbiIsIm5hbWUiLCJ2YWx1ZSIsImdldE1vZHVsZVJvb3RTeW5jIiwibW9kdWxlTmFtZSIsImZpbGVQYXRoIiwiY3VycmVudERpciIsImRpcm5hbWUiLCJpc0F0RnNSb290IiwibWFuaWZlc3RQYXRoIiwiam9pbiIsIl9mcyIsImV4aXN0c1N5bmMiLCJKU09OIiwicGFyc2UiLCJyZWFkRmlsZVN5bmMiXSwic291cmNlcyI6WyIuLi8uLi9saWIvbm9kZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2lzV2luZG93c30gZnJvbSAnLi9zeXN0ZW0nO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtleGVjfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgX2ZzIGZyb20gJ2ZzJztcbmltcG9ydCB7djQgYXMgdXVpZFY0fSBmcm9tICd1dWlkJztcblxuY29uc3QgRUNNQV9TSVpFUyA9IE9iamVjdC5mcmVlemUoe1xuICBTVFJJTkc6IDIsXG4gIEJPT0xFQU46IDQsXG4gIE5VTUJFUjogOCxcbn0pO1xuXG4vKipcbiAqIEludGVybmFsIHV0aWxpdHkgdG8gbGluayBnbG9iYWwgcGFja2FnZSB0byBsb2NhbCBjb250ZXh0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhY2thZ2VOYW1lIC0gbmFtZSBvZiB0aGUgcGFja2FnZSB0byBsaW5rXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGNvbW1hbmQgZmFpbHNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gbGlua0dsb2JhbFBhY2thZ2UocGFja2FnZU5hbWUpIHtcbiAgdHJ5IHtcbiAgICBsb2cuZGVidWcoYExpbmtpbmcgcGFja2FnZSAnJHtwYWNrYWdlTmFtZX0nYCk7XG4gICAgY29uc3QgY21kID0gaXNXaW5kb3dzKCkgPyAnbnBtLmNtZCcgOiAnbnBtJztcbiAgICBhd2FpdCBleGVjKGNtZCwgWydsaW5rJywgcGFja2FnZU5hbWVdLCB7dGltZW91dDogMjAwMDB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3QgbXNnID0gYFVuYWJsZSB0byBsb2FkIHBhY2thZ2UgJyR7cGFja2FnZU5hbWV9JywgbGlua2luZyBmYWlsZWQ6ICR7ZXJyLm1lc3NhZ2V9YDtcbiAgICBsb2cuZGVidWcobXNnKTtcbiAgICBpZiAoZXJyLnN0ZGVycikge1xuICAgICAgLy8gbG9nIHRoZSBzdGRlcnIgaWYgdGhlcmUsIGJ1dCBkbyBub3QgYWRkIHRvIHRocm93biBlcnJvciBhcyBpdCBpc1xuICAgICAgLy8gX3ZlcnlfIHZlcmJvc2VcbiAgICAgIGxvZy5kZWJ1ZyhlcnIuc3RkZXJyKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gIH1cbn1cblxuLyoqXG4gKiBVdGlsaXR5IGZ1bmN0aW9uIHRvIGV4dGVuZCBub2RlIGZ1bmN0aW9uYWxpdHksIGFsbG93aW5nIHVzIHRvIHJlcXVpcmVcbiAqIG1vZHVsZXMgdGhhdCBhcmUgaW5zdGFsbGVkIGdsb2JhbGx5LiBJZiB0aGUgcGFja2FnZSBjYW5ub3QgYmUgcmVxdWlyZWQsXG4gKiB0aGlzIHdpbGwgYXR0ZW1wdCB0byBsaW5rIHRoZSBwYWNrYWdlIGFuZCB0aGVuIHJlLXJlcXVpcmUgaXRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGFja2FnZU5hbWUgLSB0aGUgbmFtZSBvZiB0aGUgcGFja2FnZSB0byBiZSByZXF1aXJlZFxuICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bj59IC0gdGhlIHBhY2thZ2Ugb2JqZWN0XG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBhY2thZ2UgaXMgbm90IGZvdW5kIGxvY2FsbHkgb3IgZ2xvYmFsbHlcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVxdWlyZVBhY2thZ2UocGFja2FnZU5hbWUpIHtcbiAgLy8gZmlyc3QsIGdldCBpdCBpbiB0aGUgbm9ybWFsIHdheSAoc2VlIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvbW9kdWxlcy5odG1sI21vZHVsZXNfYWxsX3RvZ2V0aGVyKVxuICB0cnkge1xuICAgIGxvZy5kZWJ1ZyhgTG9hZGluZyBsb2NhbCBwYWNrYWdlICcke3BhY2thZ2VOYW1lfSdgKTtcbiAgICByZXR1cm4gcmVxdWlyZShwYWNrYWdlTmFtZSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy5kZWJ1ZyhgRmFpbGVkIHRvIGxvYWQgbG9jYWwgcGFja2FnZSAnJHtwYWNrYWdlTmFtZX0nOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG5cbiAgLy8gc2Vjb25kLCBnZXQgaXQgZnJvbSB3aGVyZSBpdCBvdWdodCB0byBiZSBpbiB0aGUgZ2xvYmFsIG5vZGVfbW9kdWxlc1xuICB0cnkge1xuICAgIGNvbnN0IGdsb2JhbFBhY2thZ2VOYW1lID0gcGF0aC5yZXNvbHZlKFxuICAgICAgcHJvY2Vzcy5lbnYubnBtX2NvbmZpZ19wcmVmaXggPz8gJycsXG4gICAgICAnbGliJyxcbiAgICAgICdub2RlX21vZHVsZXMnLFxuICAgICAgcGFja2FnZU5hbWVcbiAgICApO1xuICAgIGxvZy5kZWJ1ZyhgTG9hZGluZyBnbG9iYWwgcGFja2FnZSAnJHtnbG9iYWxQYWNrYWdlTmFtZX0nYCk7XG4gICAgcmV0dXJuIHJlcXVpcmUoZ2xvYmFsUGFja2FnZU5hbWUpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cuZGVidWcoYEZhaWxlZCB0byBsb2FkIGdsb2JhbCBwYWNrYWdlICcke3BhY2thZ2VOYW1lfSc6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cblxuICAvLyB0aGlyZCwgbGluayB0aGUgZmlsZSBhbmQgZ2V0IGxvY2FsbHlcbiAgdHJ5IHtcbiAgICBhd2FpdCBsaW5rR2xvYmFsUGFja2FnZShwYWNrYWdlTmFtZSk7XG4gICAgbG9nLmRlYnVnKGBSZXRyeWluZyBsb2FkIG9mIGxpbmtlZCBwYWNrYWdlICcke3BhY2thZ2VOYW1lfSdgKTtcbiAgICByZXR1cm4gcmVxdWlyZShwYWNrYWdlTmFtZSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy5lcnJvckFuZFRocm93KGBVbmFibGUgdG8gbG9hZCBwYWNrYWdlICcke3BhY2thZ2VOYW1lfSc6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZXh0cmFjdEFsbFByb3BlcnRpZXMob2JqKSB7XG4gIGNvbnN0IHN0cmluZ1Byb3BlcnRpZXMgPSBbXTtcbiAgZm9yIChjb25zdCBwcm9wIGluIG9iaikge1xuICAgIHN0cmluZ1Byb3BlcnRpZXMucHVzaChwcm9wKTtcbiAgfVxuICBpZiAoXy5pc0Z1bmN0aW9uKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpKSB7XG4gICAgc3RyaW5nUHJvcGVydGllcy5wdXNoKC4uLk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKSk7XG4gIH1cbiAgcmV0dXJuIHN0cmluZ1Byb3BlcnRpZXM7XG59XG5cbmZ1bmN0aW9uIF9nZXRTaXplT2ZPYmplY3Qoc2Vlbiwgb2JqZWN0KSB7XG4gIGlmIChfLmlzTmlsKG9iamVjdCkpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGxldCBieXRlcyA9IDA7XG4gIGNvbnN0IHByb3BlcnRpZXMgPSBleHRyYWN0QWxsUHJvcGVydGllcyhvYmplY3QpO1xuICBmb3IgKGNvbnN0IGtleSBvZiBwcm9wZXJ0aWVzKSB7XG4gICAgLy8gRG8gbm90IHJlY2FsY3VsYXRlIGNpcmN1bGFyIHJlZmVyZW5jZXNcbiAgICBpZiAodHlwZW9mIG9iamVjdFtrZXldID09PSAnb2JqZWN0JyAmJiAhXy5pc05pbChvYmplY3Rba2V5XSkpIHtcbiAgICAgIGlmIChzZWVuLmhhcyhvYmplY3Rba2V5XSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBzZWVuLmFkZChvYmplY3Rba2V5XSk7XG4gICAgfVxuXG4gICAgYnl0ZXMgKz0gZ2V0Q2FsY3VsYXRvcihzZWVuKShrZXkpO1xuICAgIHRyeSB7XG4gICAgICBieXRlcyArPSBnZXRDYWxjdWxhdG9yKHNlZW4pKG9iamVjdFtrZXldKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgaWYgKGV4IGluc3RhbmNlb2YgUmFuZ2VFcnJvcikge1xuICAgICAgICAvLyBjaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQsIGZpbmFsIHJlc3VsdCBtaWdodCBiZSBpbmNvcnJlY3RcbiAgICAgICAgLy8gbGV0J3MgYmUgbmljZSBhbmQgbm90IHRocm93IGFuIGV4Y2VwdGlvblxuICAgICAgICBieXRlcyA9IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVzO1xufVxuXG5mdW5jdGlvbiBnZXRDYWxjdWxhdG9yKHNlZW4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGNhbGN1bGF0b3Iob2JqKSB7XG4gICAgaWYgKF8uaXNCdWZmZXIob2JqKSkge1xuICAgICAgcmV0dXJuIG9iai5sZW5ndGg7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0eXBlb2Ygb2JqKSB7XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICByZXR1cm4gb2JqLmxlbmd0aCAqIEVDTUFfU0laRVMuU1RSSU5HO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHJldHVybiBFQ01BX1NJWkVTLkJPT0xFQU47XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICByZXR1cm4gRUNNQV9TSVpFUy5OVU1CRVI7XG4gICAgICBjYXNlICdzeW1ib2wnOlxuICAgICAgICByZXR1cm4gXy5pc0Z1bmN0aW9uKFN5bWJvbC5rZXlGb3IpICYmIFN5bWJvbC5rZXlGb3Iob2JqKVxuICAgICAgICAgID8gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChTeW1ib2wua2V5Rm9yKG9iaikpLmxlbmd0aCAqIEVDTUFfU0laRVMuU1RSSU5HXG4gICAgICAgICAgOiAob2JqLnRvU3RyaW5nKCkubGVuZ3RoIC0gOCkgKiBFQ01BX1NJWkVTLlNUUklORztcbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHJldHVybiBfLmlzQXJyYXkob2JqKVxuICAgICAgICAgID8gb2JqLm1hcChnZXRDYWxjdWxhdG9yKHNlZW4pKS5yZWR1Y2UoKGFjYywgY3VycikgPT4gYWNjICsgY3VyciwgMClcbiAgICAgICAgICA6IF9nZXRTaXplT2ZPYmplY3Qoc2Vlbiwgb2JqKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIGluLWRlcHRoIHNpemUgaW4gbWVtb3J5IG9mIHRoZSBwcm92aWRlZCBvYmplY3QuXG4gKiBUaGUgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24gaXMgYm9ycm93ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbWlrdGFtL3NpemVvZi5cbiAqXG4gKiBAcGFyYW0geyp9IG9iaiBBbiBvYmplY3Qgd2hvc2Ugc2l6ZSBzaG91bGQgYmUgY2FsY3VsYXRlZFxuICogQHJldHVybnMge251bWJlcn0gT2JqZWN0IHNpemUgaW4gYnl0ZXMuXG4gKi9cbmZ1bmN0aW9uIGdldE9iamVjdFNpemUob2JqKSB7XG4gIHJldHVybiBnZXRDYWxjdWxhdG9yKG5ldyBXZWFrU2V0KCkpKG9iaik7XG59XG5cbmNvbnN0IE9CSkVDVFNfTUFQUElORyA9IG5ldyBXZWFrTWFwKCk7XG5cbi8qKlxuICogQ2FsY3VsYXRlcyBhIHVuaXF1ZSBvYmplY3QgaWRlbnRpZmllclxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3QgQW55IHZhbGlkIEVDTUEgb2JqZWN0XG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIHV1aWRWNCBzdHJpbmcgdGhhdCB1bmlxdWVseSBpZGVudGlmaWVzIGdpdmVuIG9iamVjdFxuICovXG5mdW5jdGlvbiBnZXRPYmplY3RJZChvYmplY3QpIHtcbiAgaWYgKCFPQkpFQ1RTX01BUFBJTkcuaGFzKG9iamVjdCkpIHtcbiAgICBPQkpFQ1RTX01BUFBJTkcuc2V0KG9iamVjdCwgdXVpZFY0KCkpO1xuICB9XG4gIHJldHVybiBPQkpFQ1RTX01BUFBJTkcuZ2V0KG9iamVjdCk7XG59XG5cbi8qKlxuICogUGVyZm9ybSBkZWVwIGZyZWV6ZSBvZiB0aGUgZ2l2ZW4gb2JqZWN0IChlLiBnLlxuICogYWxsIG5lc3RlZCBvYmplY3RzIGFsc28gYmVjb21lIGltbXV0YWJsZSkuXG4gKiBJZiB0aGUgcGFzc2VkIG9iamVjdCBpcyBvZiBhIHBsYWluIHR5cGVcbiAqIHRoZW4gbm8gY2hhbmdlIGlzIGRvbmUgYW5kIHRoZSBzYW1lIG9iamVjdFxuICogaXMgcmV0dXJuZWQuXG4gKiAhIFRoaXMgZnVuY3Rpb24gY2hhbmdlcyB0aGUgZ2l2ZW4gb2JqZWN0LFxuICogc28gaXQgYmVjb21lcyBpbW11dGFibGUuXG4gKlxuICogQHBhcmFtIHsqfSBvYmplY3QgQW55IHZhbGlkIEVDTUEgb2JqZWN0XG4gKiBAcmV0dXJucyB7Kn0gVGhlIHNhbWUgb2JqZWN0IHRoYXQgd2FzIHBhc3NlZCB0byB0aGVcbiAqIGZ1bmN0aW9uIGFmdGVyIGl0IHdhcyBtYWRlIGltbXV0YWJsZS5cbiAqL1xuZnVuY3Rpb24gZGVlcEZyZWV6ZShvYmplY3QpIHtcbiAgbGV0IHByb3BOYW1lcztcbiAgdHJ5IHtcbiAgICBwcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QpO1xuICB9IGNhdGNoIChpZ24pIHtcbiAgICByZXR1cm4gb2JqZWN0O1xuICB9XG4gIGZvciAoY29uc3QgbmFtZSBvZiBwcm9wTmFtZXMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IG9iamVjdFtuYW1lXTtcbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgZGVlcEZyZWV6ZSh2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBPYmplY3QuZnJlZXplKG9iamVjdCk7XG59XG5cbi8qKlxuICogVHJpZXMgdG8gc3luY2hyb25vdXNseSBkZXRlY3QgdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGZvbGRlclxuICogd2hlcmUgdGhlIGdpdmVuIGBtb2R1bGVOYW1lYCBpcyBsb2NhdGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2R1bGVOYW1lIFRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgYXMgaXQgaXMgd3JpdHRlbiBpbiBwYWNrYWdlLmpzb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aCBGdWxsIHBhdGggdG8gYW55IG9mIGZpbGVzIHRoYXQgYG1vZHVsZU5hbWVgIGNvbnRhaW5zLiBVc2VcbiAqIGBfX2ZpbGVuYW1lYCB0byBmaW5kIHRoZSByb290IG9mIHRoZSBtb2R1bGUgd2hlcmUgdGhpcyBoZWxwZXIgaXMgY2FsbGVkLlxuICogQHJldHVybnMge3N0cmluZz99IEZ1bGwgcGF0aCB0byB0aGUgbW9kdWxlIHJvb3RcbiAqL1xuZnVuY3Rpb24gZ2V0TW9kdWxlUm9vdFN5bmMgKG1vZHVsZU5hbWUsIGZpbGVQYXRoKSB7XG4gIGxldCBjdXJyZW50RGlyID0gcGF0aC5kaXJuYW1lKHBhdGgucmVzb2x2ZShmaWxlUGF0aCkpO1xuICBsZXQgaXNBdEZzUm9vdCA9IGZhbHNlO1xuICB3aGlsZSAoIWlzQXRGc1Jvb3QpIHtcbiAgICBjb25zdCBtYW5pZmVzdFBhdGggPSBwYXRoLmpvaW4oY3VycmVudERpciwgJ3BhY2thZ2UuanNvbicpO1xuICAgIHRyeSB7XG4gICAgICBpZiAoX2ZzLmV4aXN0c1N5bmMobWFuaWZlc3RQYXRoKSAmJlxuICAgICAgICAgIEpTT04ucGFyc2UoX2ZzLnJlYWRGaWxlU3luYyhtYW5pZmVzdFBhdGgsICd1dGY4JykpLm5hbWUgPT09IG1vZHVsZU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnREaXI7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICAgIGN1cnJlbnREaXIgPSBwYXRoLmRpcm5hbWUoY3VycmVudERpcik7XG4gICAgaXNBdEZzUm9vdCA9IGN1cnJlbnREaXIubGVuZ3RoIDw9IHBhdGguZGlybmFtZShjdXJyZW50RGlyKS5sZW5ndGg7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCB7cmVxdWlyZVBhY2thZ2UsIGdldE9iamVjdFNpemUsIGdldE9iamVjdElkLCBkZWVwRnJlZXplLCBnZXRNb2R1bGVSb290U3luY307XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.js","names":["ECMA_SIZES","Object","freeze","STRING","BOOLEAN","NUMBER","linkGlobalPackage","packageName","log","debug","cmd","isWindows","exec","timeout","err","msg","message","stderr","Error","requirePackage","require","globalPackageName","path","resolve","process","env","npm_config_prefix","errorAndThrow","extractAllProperties","obj","stringProperties","prop","push","_","isFunction","getOwnPropertySymbols","_getSizeOfObject","seen","object","isNil","bytes","properties","key","has","add","getCalculator","ex","RangeError","calculator","isBuffer","length","Symbol","keyFor","toString","isArray","map","reduce","acc","curr","getObjectSize","WeakSet","OBJECTS_MAPPING","WeakMap","getObjectId","set","uuidV4","get","deepFreeze","propNames","getOwnPropertyNames","ign","name","value","getModuleRootSync","moduleName","filePath","currentDir","dirname","isAtFsRoot","manifestPath","join","_fs","existsSync","JSON","parse","readFileSync"],"sources":["../../lib/node.js"],"sourcesContent":["import {isWindows} from './system';\nimport log from './logger';\nimport _ from 'lodash';\nimport {exec} from 'teen_process';\nimport path from 'path';\nimport _fs from 'fs';\nimport {v4 as uuidV4} from 'uuid';\n\nconst ECMA_SIZES = Object.freeze({\n STRING: 2,\n BOOLEAN: 4,\n NUMBER: 8,\n});\n\n/**\n * Internal utility to link global package to local context\n *\n * @param {string} packageName - name of the package to link\n * @throws {Error} If the command fails\n */\nasync function linkGlobalPackage(packageName) {\n try {\n log.debug(`Linking package '${packageName}'`);\n const cmd = isWindows() ? 'npm.cmd' : 'npm';\n await exec(cmd, ['link', packageName], {timeout: 20000});\n } catch (err) {\n const msg = `Unable to load package '${packageName}', linking failed: ${err.message}`;\n log.debug(msg);\n if (err.stderr) {\n // log the stderr if there, but do not add to thrown error as it is\n // _very_ verbose\n log.debug(err.stderr);\n }\n throw new Error(msg);\n }\n}\n\n/**\n * Utility function to extend node functionality, allowing us to require\n * modules that are installed globally. If the package cannot be required,\n * this will attempt to link the package and then re-require it\n *\n * @param {string} packageName - the name of the package to be required\n * @returns {Promise<unknown>} - the package object\n * @throws {Error} If the package is not found locally or globally\n */\nasync function requirePackage(packageName) {\n // first, get it in the normal way (see https://nodejs.org/api/modules.html#modules_all_together)\n try {\n log.debug(`Loading local package '${packageName}'`);\n return require(packageName);\n } catch (err) {\n log.debug(`Failed to load local package '${packageName}': ${err.message}`);\n }\n\n // second, get it from where it ought to be in the global node_modules\n try {\n const globalPackageName = path.resolve(\n process.env.npm_config_prefix ?? '',\n 'lib',\n 'node_modules',\n packageName\n );\n log.debug(`Loading global package '${globalPackageName}'`);\n return require(globalPackageName);\n } catch (err) {\n log.debug(`Failed to load global package '${packageName}': ${err.message}`);\n }\n\n // third, link the file and get locally\n try {\n await linkGlobalPackage(packageName);\n log.debug(`Retrying load of linked package '${packageName}'`);\n return require(packageName);\n } catch (err) {\n log.errorAndThrow(`Unable to load package '${packageName}': ${err.message}`);\n }\n}\n\nfunction extractAllProperties(obj) {\n const stringProperties = [];\n for (const prop in obj) {\n stringProperties.push(prop);\n }\n if (_.isFunction(Object.getOwnPropertySymbols)) {\n stringProperties.push(...Object.getOwnPropertySymbols(obj));\n }\n return stringProperties;\n}\n\nfunction _getSizeOfObject(seen, object) {\n if (_.isNil(object)) {\n return 0;\n }\n\n let bytes = 0;\n const properties = extractAllProperties(object);\n for (const key of properties) {\n // Do not recalculate circular references\n if (typeof object[key] === 'object' && !_.isNil(object[key])) {\n if (seen.has(object[key])) {\n continue;\n }\n seen.add(object[key]);\n }\n\n bytes += getCalculator(seen)(key);\n try {\n bytes += getCalculator(seen)(object[key]);\n } catch (ex) {\n if (ex instanceof RangeError) {\n // circular reference detected, final result might be incorrect\n // let's be nice and not throw an exception\n bytes = 0;\n }\n }\n }\n\n return bytes;\n}\n\nfunction getCalculator(seen) {\n return function calculator(obj) {\n if (_.isBuffer(obj)) {\n return obj.length;\n }\n\n switch (typeof obj) {\n case 'string':\n return obj.length * ECMA_SIZES.STRING;\n case 'boolean':\n return ECMA_SIZES.BOOLEAN;\n case 'number':\n return ECMA_SIZES.NUMBER;\n case 'symbol':\n return _.isFunction(Symbol.keyFor) && Symbol.keyFor(obj)\n ? /** @type {string} */ (Symbol.keyFor(obj)).length * ECMA_SIZES.STRING\n : (obj.toString().length - 8) * ECMA_SIZES.STRING;\n case 'object':\n return _.isArray(obj)\n ? obj.map(getCalculator(seen)).reduce((acc, curr) => acc + curr, 0)\n : _getSizeOfObject(seen, obj);\n default:\n return 0;\n }\n };\n}\n\n/**\n * Calculate the in-depth size in memory of the provided object.\n * The original implementation is borrowed from https://github.com/miktam/sizeof.\n *\n * @param {*} obj An object whose size should be calculated\n * @returns {number} Object size in bytes.\n */\nfunction getObjectSize(obj) {\n return getCalculator(new WeakSet())(obj);\n}\n\nconst OBJECTS_MAPPING = new WeakMap();\n\n/**\n * Calculates a unique object identifier\n *\n * @param {object} object Any valid ECMA object\n * @returns {string} A uuidV4 string that uniquely identifies given object\n */\nfunction getObjectId(object) {\n if (!OBJECTS_MAPPING.has(object)) {\n OBJECTS_MAPPING.set(object, uuidV4());\n }\n return OBJECTS_MAPPING.get(object);\n}\n\n/**\n * Perform deep freeze of the given object (e. g.\n * all nested objects also become immutable).\n * If the passed object is of a plain type\n * then no change is done and the same object\n * is returned.\n * ! This function changes the given object,\n * so it becomes immutable.\n *\n * @param {*} object Any valid ECMA object\n * @returns {*} The same object that was passed to the\n * function after it was made immutable.\n */\nfunction deepFreeze(object) {\n let propNames;\n try {\n propNames = Object.getOwnPropertyNames(object);\n } catch (ign) {\n return object;\n }\n for (const name of propNames) {\n const value = object[name];\n if (value && typeof value === 'object') {\n deepFreeze(value);\n }\n }\n return Object.freeze(object);\n}\n\n/**\n * Tries to synchronously detect the absolute path to the folder\n * where the given `moduleName` is located.\n *\n * @param {string} moduleName The name of the module as it is written in package.json\n * @param {string} filePath Full path to any of files that `moduleName` contains. Use\n * `__filename` to find the root of the module where this helper is called.\n * @returns {string?} Full path to the module root\n */\nfunction getModuleRootSync (moduleName, filePath) {\n let currentDir = path.dirname(path.resolve(filePath));\n let isAtFsRoot = false;\n while (!isAtFsRoot) {\n const manifestPath = path.join(currentDir, 'package.json');\n try {\n if (_fs.existsSync(manifestPath) &&\n JSON.parse(_fs.readFileSync(manifestPath, 'utf8')).name === moduleName) {\n return currentDir;\n }\n } catch (ign) {}\n currentDir = path.dirname(currentDir);\n isAtFsRoot = currentDir.length <= path.dirname(currentDir).length;\n }\n return null;\n}\n\nexport {requirePackage, getObjectSize, getObjectId, deepFreeze, getModuleRootSync};\n"],"mappings":"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"}
|
package/build/lib/npm.js
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
3
|
Object.defineProperty(exports, "__esModule", {
|
|
6
4
|
value: true
|
|
7
5
|
});
|
|
@@ -29,6 +27,8 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
|
|
|
29
27
|
|
|
30
28
|
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; }
|
|
31
29
|
|
|
30
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
31
|
+
|
|
32
32
|
const CACHE_DIR_RELATIVE_PATH = _path.default.join('node_modules', '.cache', 'appium');
|
|
33
33
|
|
|
34
34
|
exports.CACHE_DIR_RELATIVE_PATH = CACHE_DIR_RELATIVE_PATH;
|
|
@@ -239,4 +239,4 @@ class NPM {
|
|
|
239
239
|
exports.NPM = NPM;
|
|
240
240
|
const npm = new NPM();
|
|
241
241
|
exports.npm = npm;
|
|
242
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDQUNIRV9ESVJfUkVMQVRJVkVfUEFUSCIsInBhdGgiLCJqb2luIiwiSU5TVEFMTF9MT0NLRklMRV9SRUxBVElWRV9QQVRIIiwiTlBNIiwiX2dldEluc3RhbGxMb2NrZmlsZVBhdGgiLCJjd2QiLCJleGVjIiwiY21kIiwiYXJncyIsIm9wdHMiLCJleGVjT3B0cyIsImpzb24iLCJsb2NrRmlsZSIsInRlZW5Qcm9jZXNzRXhlY09wdHMiLCJ1bnNoaWZ0IiwicHVzaCIsIm5wbUNtZCIsInN5c3RlbSIsImlzV2luZG93cyIsInJ1bm5lciIsImFjcXVpcmVMb2NrIiwidXRpbCIsImdldExvY2tGaWxlR3VhcmQiLCJfcnVubmVyIiwicmV0Iiwic3Rkb3V0Iiwic3RkZXJyIiwiY29kZSIsIkpTT04iLCJwYXJzZSIsImlnbiIsImUiLCJlcnIiLCJFcnJvciIsInRyaW0iLCJnZXRMYXRlc3RWZXJzaW9uIiwicGtnIiwibGF0ZXN0IiwibWVzc2FnZSIsImluY2x1ZGVzIiwiZ2V0TGF0ZXN0U2FmZVVwZ3JhZGVWZXJzaW9uIiwiY3VyVmVyc2lvbiIsImFsbFZlcnNpb25zIiwiZ2V0TGF0ZXN0U2FmZVVwZ3JhZGVGcm9tVmVyc2lvbnMiLCJsaXN0Iiwic2FmZVVwZ3JhZGVWZXIiLCJjdXJTZW12ZXIiLCJzZW12ZXIiLCJ0ZXN0VmVyIiwidGVzdFNlbXZlciIsInByZXJlbGVhc2UiLCJsZW5ndGgiLCJjb21wYXJlIiwibWFqb3IiLCJmb3JtYXQiLCJpbnN0YWxsUGFja2FnZSIsInBrZ05hbWUiLCJwa2dWZXIiLCJkdW1teVBrZ0pzb24iLCJkdW1teVBrZ1BhdGgiLCJmcyIsInJlYWRGaWxlIiwid3JpdGVGaWxlIiwic3RyaW5naWZ5IiwiaW5zdGFsbE9wdHMiLCJoYXNBcHBpdW1EZXBlbmRlbmN5IiwicHJvY2VzcyIsImVudiIsIkFQUElVTV9PTUlUX1BFRVJfREVQUyIsInJlcyIsImVycm9yIiwicGtnSnNvblBhdGgiLCJyZXNvbHZlRnJvbSIsInJlcXVpcmUiLCJ1bmluc3RhbGxQYWNrYWdlIiwibnBtIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL25wbS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgc2VtdmVyIGZyb20gJ3NlbXZlcic7XG5pbXBvcnQge2hhc0FwcGl1bURlcGVuZGVuY3l9IGZyb20gJy4vZW52JztcbmltcG9ydCB7ZXhlY30gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCB7ZnN9IGZyb20gJy4vZnMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuL3V0aWwnO1xuaW1wb3J0ICogYXMgc3lzdGVtIGZyb20gJy4vc3lzdGVtJztcbmltcG9ydCByZXNvbHZlRnJvbSBmcm9tICdyZXNvbHZlLWZyb20nO1xuXG4vKipcbiAqIFJlbGF0aXZlIHBhdGggdG8gZGlyZWN0b3J5IGNvbnRhaW5pbmcgYW55IEFwcGl1bSBpbnRlcm5hbCBmaWxlc1xuICogWFhYOiB0aGlzIGlzIGR1cGxpY2F0ZWQgaW4gYGFwcGl1bS9saWIvY29uc3RhbnRzLmpzYC5cbiAqL1xuZXhwb3J0IGNvbnN0IENBQ0hFX0RJUl9SRUxBVElWRV9QQVRIID0gcGF0aC5qb2luKCdub2RlX21vZHVsZXMnLCAnLmNhY2hlJywgJ2FwcGl1bScpO1xuXG4vKipcbiAqIFJlbGF0aXZlIHBhdGggdG8gbG9ja2ZpbGUgdXNlZCB3aGVuIGluc3RhbGxpbmcgYW4gZXh0ZW5zaW9uIHZpYSBgYXBwaXVtYFxuICovXG5leHBvcnQgY29uc3QgSU5TVEFMTF9MT0NLRklMRV9SRUxBVElWRV9QQVRIID0gcGF0aC5qb2luKENBQ0hFX0RJUl9SRUxBVElWRV9QQVRILCAnLmluc3RhbGwubG9jaycpO1xuXG4vKipcbiAqIFhYWDogVGhpcyBzaG91bGQgcHJvYmFibHkgYmUgYSBzaW5nbGV0b24sIGJ1dCBpdCBpc24ndC4gIE1heWJlIHRoaXMgbW9kdWxlIHNob3VsZCBqdXN0IGV4cG9ydCBmdW5jdGlvbnM/XG4gKi9cbmV4cG9ydCBjbGFzcyBOUE0ge1xuICAvKipcbiAgICogUmV0dXJucyBwYXRoIHRvIFwiaW5zdGFsbFwiIGxvY2tmaWxlXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjd2RcbiAgICovXG4gIF9nZXRJbnN0YWxsTG9ja2ZpbGVQYXRoKGN3ZCkge1xuICAgIHJldHVybiBwYXRoLmpvaW4oY3dkLCBJTlNUQUxMX0xPQ0tGSUxFX1JFTEFUSVZFX1BBVEgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgYG5wbWAgd2l0aCBnaXZlbiBhcmdzLlxuICAgKlxuICAgKiBJZiB0aGUgcHJvY2VzcyBleGl0cyB3aXRoIGEgbm9uemVybyBjb2RlLCB0aGUgY29udGVudHMgb2YgYFNURE9VVGAgYW5kIGBTVERFUlJgIHdpbGwgYmUgaW4gdGhlXG4gICAqIGBtZXNzYWdlYCBvZiBhbnkgcmVqZWN0ZWQgZXJyb3IuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbWRcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gYXJnc1xuICAgKiBAcGFyYW0ge0V4ZWNPcHRzfSBvcHRzXG4gICAqIEBwYXJhbSB7T21pdDxpbXBvcnQoJ3RlZW5fcHJvY2VzcycpLkV4ZWNPcHRpb25zLCAnY3dkJz59IFtleGVjT3B0c11cbiAgICovXG4gIGFzeW5jIGV4ZWMoY21kLCBhcmdzLCBvcHRzLCBleGVjT3B0cyA9IHt9KSB7XG4gICAgbGV0IHtjd2QsIGpzb24sIGxvY2tGaWxlfSA9IG9wdHM7XG5cbiAgICAvLyBtYWtlIHN1cmUgd2UgcGVyZm9ybSB0aGUgY3VycmVudCBvcGVyYXRpb24gaW4gY3dkXG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoJ3RlZW5fcHJvY2VzcycpLkV4ZWNPcHRpb25zfSAqL1xuICAgIGNvbnN0IHRlZW5Qcm9jZXNzRXhlY09wdHMgPSB7Li4uZXhlY09wdHMsIGN3ZH07XG5cbiAgICBhcmdzLnVuc2hpZnQoY21kKTtcbiAgICBpZiAoanNvbikge1xuICAgICAgYXJncy5wdXNoKCctLWpzb24nKTtcbiAgICB9XG4gICAgY29uc3QgbnBtQ21kID0gc3lzdGVtLmlzV2luZG93cygpID8gJ25wbS5jbWQnIDogJ25wbSc7XG4gICAgbGV0IHJ1bm5lciA9IGFzeW5jICgpID0+IGF3YWl0IGV4ZWMobnBtQ21kLCBhcmdzLCB0ZWVuUHJvY2Vzc0V4ZWNPcHRzKTtcbiAgICBpZiAobG9ja0ZpbGUpIHtcbiAgICAgIGNvbnN0IGFjcXVpcmVMb2NrID0gdXRpbC5nZXRMb2NrRmlsZUd1YXJkKGxvY2tGaWxlKTtcbiAgICAgIGNvbnN0IF9ydW5uZXIgPSBydW5uZXI7XG4gICAgICBydW5uZXIgPSBhc3luYyAoKSA9PiBhd2FpdCBhY3F1aXJlTG9jayhfcnVubmVyKTtcbiAgICB9XG5cbiAgICAvKiogQHR5cGUge2ltcG9ydCgndGVlbl9wcm9jZXNzJykuRXhlY1Jlc3VsdDxzdHJpbmc+ICYge2pzb24/OiBhbnl9fSAqL1xuICAgIGxldCByZXQ7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHtzdGRvdXQsIHN0ZGVyciwgY29kZX0gPSBhd2FpdCBydW5uZXIoKTtcbiAgICAgIHJldCA9IHtzdGRvdXQsIHN0ZGVyciwgY29kZX07XG4gICAgICAvLyBpZiBwb3NzaWJsZSwgcGFyc2UgTlBNJ3MganNvbiBvdXRwdXQuIER1cmluZyBOUE0gaW5zdGFsbCAzcmQtcGFydHlcbiAgICAgIC8vIHBhY2thZ2VzIGNhbiB3cml0ZSB0byBzdGRvdXQsIHNvIHNvbWV0aW1lcyB0aGUganNvbiBvdXRwdXQgY2FuJ3QgYmVcbiAgICAgIC8vIGd1YXJhbnRlZWQgdG8gYmUgcGFyc2VhYmxlXG4gICAgICB0cnkge1xuICAgICAgICByZXQuanNvbiA9IEpTT04ucGFyc2Uoc3Rkb3V0KTtcbiAgICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHN0ZG91dCA9ICcnLFxuICAgICAgICBzdGRlcnIgPSAnJyxcbiAgICAgICAgY29kZSA9IG51bGwsXG4gICAgICB9ID0gLyoqIEB0eXBlIHtpbXBvcnQoJ3RlZW5fcHJvY2VzcycpLkV4ZWNFcnJvcn0gKi8gKGUpO1xuICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKFxuICAgICAgICBgbnBtIGNvbW1hbmQgJyR7YXJncy5qb2luKFxuICAgICAgICAgICcgJ1xuICAgICAgICApfScgZmFpbGVkIHdpdGggY29kZSAke2NvZGV9LlxcblxcblNURE9VVDpcXG4ke3N0ZG91dC50cmltKCl9XFxuXFxuU1RERVJSOlxcbiR7c3RkZXJyLnRyaW0oKX1gXG4gICAgICApO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjd2RcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBrZ1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc/Pn1cbiAgICovXG4gIGFzeW5jIGdldExhdGVzdFZlcnNpb24oY3dkLCBwa2cpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKFxuICAgICAgICAgIGF3YWl0IHRoaXMuZXhlYygndmlldycsIFtwa2csICdkaXN0LXRhZ3MnXSwge1xuICAgICAgICAgICAganNvbjogdHJ1ZSxcbiAgICAgICAgICAgIGN3ZCxcbiAgICAgICAgICB9KVxuICAgICAgICApLmpzb24/LmxhdGVzdCA/PyBudWxsXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKCFlcnI/Lm1lc3NhZ2UuaW5jbHVkZXMoJ0U0MDQnKSkge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGN3ZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGtnXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjdXJWZXJzaW9uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZz8+fVxuICAgKi9cbiAgYXN5bmMgZ2V0TGF0ZXN0U2FmZVVwZ3JhZGVWZXJzaW9uKGN3ZCwgcGtnLCBjdXJWZXJzaW9uKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGFsbFZlcnNpb25zID0gKFxuICAgICAgICBhd2FpdCB0aGlzLmV4ZWMoJ3ZpZXcnLCBbcGtnLCAndmVyc2lvbnMnXSwge1xuICAgICAgICAgIGpzb246IHRydWUsXG4gICAgICAgICAgY3dkLFxuICAgICAgICB9KVxuICAgICAgKS5qc29uO1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TGF0ZXN0U2FmZVVwZ3JhZGVGcm9tVmVyc2lvbnMoY3VyVmVyc2lvbiwgYWxsVmVyc2lvbnMpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKCFlcnI/Lm1lc3NhZ2UuaW5jbHVkZXMoJ0U0MDQnKSkge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVucyBgbnBtIGxzYCwgb3B0aW9uYWxseSBmb3IgYSBwYXJ0aWN1bGFyIHBhY2thZ2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjd2RcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwa2ddXG4gICAqL1xuICBhc3luYyBsaXN0KGN3ZCwgcGtnKSB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmV4ZWMoJ2xpc3QnLCBwa2cgPyBbcGtnXSA6IFtdLCB7Y3dkLCBqc29uOiB0cnVlfSkpLmpzb247XG4gIH1cblxuICAvKipcbiAgICogR2l2ZW4gYSBjdXJyZW50IHZlcnNpb24gYW5kIGEgbGlzdCBvZiBhbGwgdmVyc2lvbnMgZm9yIGEgcGFja2FnZSwgcmV0dXJuIHRoZSB2ZXJzaW9uIHdoaWNoIGlzXG4gICAqIHRoZSBoaWdoZXN0IHNhZmVseS11cGdyYWRhYmxlIHZlcnNpb24gKG1lYW5pbmcgbm90IGNyb3NzaW5nIGFueSBtYWpvciByZXZpc2lvbiBib3VuZGFyaWVzLCBhbmRcbiAgICogbm90IGluY2x1ZGluZyBhbnkgYWxwaGEvYmV0YS9yYyB2ZXJzaW9ucylcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGN1clZlcnNpb24gLSB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIGEgcGFja2FnZVxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGFsbFZlcnNpb25zIC0gYSBsaXN0IG9mIHZlcnNpb24gc3RyaW5nc1xuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd8bnVsbH0gLSB0aGUgaGlnaGVzdCBzYWZlbHktdXBncmFkYWJsZSB2ZXJzaW9uLCBvciBudWxsIGlmIHRoZXJlIGlzbid0IG9uZVxuICAgKi9cbiAgZ2V0TGF0ZXN0U2FmZVVwZ3JhZGVGcm9tVmVyc2lvbnMoY3VyVmVyc2lvbiwgYWxsVmVyc2lvbnMpIHtcbiAgICBsZXQgc2FmZVVwZ3JhZGVWZXIgPSBudWxsO1xuICAgIGNvbnN0IGN1clNlbXZlciA9IHNlbXZlci5wYXJzZShjdXJWZXJzaW9uKTtcbiAgICBpZiAoY3VyU2VtdmVyID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBwYXJzZSBjdXJyZW50IHZlcnNpb24gJyR7Y3VyVmVyc2lvbn0nYCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdGVzdFZlciBvZiBhbGxWZXJzaW9ucykge1xuICAgICAgY29uc3QgdGVzdFNlbXZlciA9IHNlbXZlci5wYXJzZSh0ZXN0VmVyKTtcbiAgICAgIGlmICh0ZXN0U2VtdmVyID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IHBhcnNlIHZlcnNpb24gdG8gdGVzdCBhZ2FpbnN0OiAnJHt0ZXN0VmVyfSdgKTtcbiAgICAgIH1cbiAgICAgIC8vIGlmIHRoZSB0ZXN0IHZlcnNpb24gaXMgYSBwcmVyZWxlYXNlLCBpZ25vcmUgaXRcbiAgICAgIGlmICh0ZXN0U2VtdmVyLnByZXJlbGVhc2UubGVuZ3RoID4gMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIC8vIGlmIHRoZSBjdXJyZW50IHZlcnNpb24gaXMgbGF0ZXIgdGhhbiB0aGUgdGVzdCB2ZXJzaW9uLCBza2lwIHRoaXMgdGVzdCB2ZXJzaW9uXG4gICAgICBpZiAoY3VyU2VtdmVyLmNvbXBhcmUodGVzdFNlbXZlcikgPT09IDEpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyBpZiB0aGUgdGVzdCB2ZXJzaW9uIGlzIG5ld2VyLCBidXQgY3Jvc3NlcyBhIG1ham9yIHJldmlzaW9uIGJvdW5kYXJ5LCBhbHNvIHNraXAgaXRcbiAgICAgIGlmICh0ZXN0U2VtdmVyLm1ham9yID4gY3VyU2VtdmVyLm1ham9yKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gb3RoZXJ3aXNlIHRoaXMgdmVyc2lvbiBpcyBzYWZlIHRvIHVwZ3JhZGUgdG8uIEJ1dCB0aGVyZSBtaWdodCBiZSBtdWx0aXBsZSBvbmVzIG9mIHRoaXNcbiAgICAgIC8vIGtpbmQsIHNvIGtlZXAgaXRlcmF0aW5nIGFuZCBrZWVwaW5nIHRoZSBoaWdoZXN0XG4gICAgICBpZiAoc2FmZVVwZ3JhZGVWZXIgPT09IG51bGwgfHwgdGVzdFNlbXZlci5jb21wYXJlKHNhZmVVcGdyYWRlVmVyKSA9PT0gMSkge1xuICAgICAgICBzYWZlVXBncmFkZVZlciA9IHRlc3RTZW12ZXI7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzYWZlVXBncmFkZVZlcikge1xuICAgICAgc2FmZVVwZ3JhZGVWZXIgPSBzYWZlVXBncmFkZVZlci5mb3JtYXQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHNhZmVVcGdyYWRlVmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEluc3RhbGxzIGEgcGFja2FnZSB3LyBgbnBtYFxuICAgKiBAcGFyYW0ge3N0cmluZ30gY3dkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwa2dOYW1lXG4gICAqIEBwYXJhbSB7SW5zdGFsbFBhY2thZ2VPcHRzfSBbb3B0c11cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KCd0eXBlLWZlc3QnKS5QYWNrYWdlSnNvbj59XG4gICAqL1xuICBhc3luYyBpbnN0YWxsUGFja2FnZShjd2QsIHBrZ05hbWUsIHtwa2dWZXJ9ID0ge30pIHtcbiAgICAvKiogQHR5cGUge2FueX0gKi9cbiAgICBsZXQgZHVtbXlQa2dKc29uO1xuICAgIGNvbnN0IGR1bW15UGtnUGF0aCA9IHBhdGguam9pbihjd2QsICdwYWNrYWdlLmpzb24nKTtcbiAgICB0cnkge1xuICAgICAgZHVtbXlQa2dKc29uID0gSlNPTi5wYXJzZShhd2FpdCBmcy5yZWFkRmlsZShkdW1teVBrZ1BhdGgsICd1dGY4JykpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICBkdW1teVBrZ0pzb24gPSB7fTtcbiAgICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKGR1bW15UGtnUGF0aCwgSlNPTi5zdHJpbmdpZnkoZHVtbXlQa2dKc29uLCBudWxsLCAyKSwgJ3V0ZjgnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBpbnN0YWxsT3B0cyA9IFsnLS1zYXZlLWRldiddO1xuICAgIGlmICghKGF3YWl0IGhhc0FwcGl1bURlcGVuZGVuY3koY3dkKSkpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5BUFBJVU1fT01JVF9QRUVSX0RFUFMpIHtcbiAgICAgICAgaW5zdGFsbE9wdHMucHVzaCgnLS1vbWl0PXBlZXInKTtcbiAgICAgIH1cbiAgICAgIGluc3RhbGxPcHRzLnB1c2goJy0tc2F2ZS1leGFjdCcsICctLWdsb2JhbC1zdHlsZScsICctLW5vLXBhY2thZ2UtbG9jaycpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZXhlYyhcbiAgICAgICdpbnN0YWxsJyxcbiAgICAgIFsuLi5pbnN0YWxsT3B0cywgcGtnVmVyID8gYCR7cGtnTmFtZX1AJHtwa2dWZXJ9YCA6IHBrZ05hbWVdLFxuICAgICAge1xuICAgICAgICBjd2QsXG4gICAgICAgIGpzb246IHRydWUsXG4gICAgICAgIGxvY2tGaWxlOiB0aGlzLl9nZXRJbnN0YWxsTG9ja2ZpbGVQYXRoKGN3ZCksXG4gICAgICB9XG4gICAgKTtcblxuICAgIGlmIChyZXMuanNvbikge1xuICAgICAgLy8gd2UgcGFyc2VkIGEgdmFsaWQganNvbiByZXNwb25zZSwgc28gaWYgd2UgZ290IGFuIGVycm9yIGhlcmUsIHJldHVybiB0aGF0XG4gICAgICAvLyBtZXNzYWdlIHN0cmFpZ2h0YXdheVxuICAgICAgaWYgKHJlcy5qc29uLmVycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihyZXMuanNvbi5lcnJvcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTm93IHJlYWQgcGFja2FnZSBkYXRhIGZyb20gdGhlIGluc3RhbGxlZCBwYWNrYWdlIHRvIHJldHVybiwgYW5kIG1ha2Ugc3VyZVxuICAgIC8vIGV2ZXJ5dGhpbmcgZ290IGluc3RhbGxlZCBvay4gUmVtZW1iZXIsIHBrZ05hbWUgbWlnaHQgZW5kIHVwIHdpdGggYSAvIGluIGl0IGR1ZSB0byBhbiBucG1cbiAgICAvLyBvcmcsIHNvIGlmIHNvLCB0aGF0IHdpbGwgZ2V0IGNvcnJlY3RseSBleHBsb2RlZCBpbnRvIG11bHRpcGxlIGRpcmVjdG9yaWVzLCBieSBwYXRoLnJlc29sdmUgaGVyZVxuICAgIC8vIChldmVuIG9uIFdpbmRvd3MhKVxuICAgIGNvbnN0IHBrZ0pzb25QYXRoID0gcmVzb2x2ZUZyb20oY3dkLCBgJHtwa2dOYW1lfS9wYWNrYWdlLmpzb25gKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHJlcXVpcmUocGtnSnNvblBhdGgpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnVGhlIHBhY2thZ2Ugd2FzIG5vdCBkb3dubG9hZGVkIGNvcnJlY3RseTsgaXRzIHBhY2thZ2UuanNvbiAnICtcbiAgICAgICAgICAnZGlkIG5vdCBleGlzdCBvciB3YXMgdW5yZWFkYWJsZS4gV2UgbG9va2VkIGZvciBpdCBhdCAnICtcbiAgICAgICAgICBwa2dKc29uUGF0aFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGN3ZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGtnXG4gICAqL1xuICBhc3luYyB1bmluc3RhbGxQYWNrYWdlKGN3ZCwgcGtnKSB7XG4gICAgYXdhaXQgdGhpcy5leGVjKCd1bmluc3RhbGwnLCBbcGtnXSwge1xuICAgICAgY3dkLFxuICAgICAgbG9ja0ZpbGU6IHRoaXMuX2dldEluc3RhbGxMb2NrZmlsZVBhdGgoY3dkKSxcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgbnBtID0gbmV3IE5QTSgpO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBOUE0uaW5zdGFsbFBhY2thZ2V9XG4gKiBAdHlwZWRlZiBJbnN0YWxsUGFja2FnZU9wdHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcGtnVmVyXSAtIHRoZSB2ZXJzaW9uIG9mIHRoZSBwYWNrYWdlIHRvIGluc3RhbGxcbiAqL1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBOUE0uZXhlY31cbiAqIEB0eXBlZGVmIEV4ZWNPcHRzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY3dkIC0gQ3VycmVudCB3b3JraW5nIGRpcmVjdG9yeVxuICogQHByb3BlcnR5IHtib29sZWFufSBbanNvbl0gLSBJZiBgdHJ1ZWAsIHN1cHBseSBgLS1qc29uYCBmbGFnIHRvIG5wbSBhbmQgcmVzb2x2ZSB3LyBwYXJzZWQgSlNPTlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtsb2NrRmlsZV0gLSBQYXRoIHRvIGxvY2tmaWxlIHRvIHVzZVxuICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7OztBQU1PLE1BQU1BLHVCQUF1QixHQUFHQyxhQUFBLENBQUtDLElBQUwsQ0FBVSxjQUFW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
|
|
242
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDQUNIRV9ESVJfUkVMQVRJVkVfUEFUSCIsInBhdGgiLCJqb2luIiwiSU5TVEFMTF9MT0NLRklMRV9SRUxBVElWRV9QQVRIIiwiTlBNIiwiX2dldEluc3RhbGxMb2NrZmlsZVBhdGgiLCJjd2QiLCJleGVjIiwiY21kIiwiYXJncyIsIm9wdHMiLCJleGVjT3B0cyIsImpzb24iLCJsb2NrRmlsZSIsInRlZW5Qcm9jZXNzRXhlY09wdHMiLCJ1bnNoaWZ0IiwicHVzaCIsIm5wbUNtZCIsInN5c3RlbSIsImlzV2luZG93cyIsInJ1bm5lciIsImFjcXVpcmVMb2NrIiwidXRpbCIsImdldExvY2tGaWxlR3VhcmQiLCJfcnVubmVyIiwicmV0Iiwic3Rkb3V0Iiwic3RkZXJyIiwiY29kZSIsIkpTT04iLCJwYXJzZSIsImlnbiIsImUiLCJlcnIiLCJFcnJvciIsInRyaW0iLCJnZXRMYXRlc3RWZXJzaW9uIiwicGtnIiwibGF0ZXN0IiwibWVzc2FnZSIsImluY2x1ZGVzIiwiZ2V0TGF0ZXN0U2FmZVVwZ3JhZGVWZXJzaW9uIiwiY3VyVmVyc2lvbiIsImFsbFZlcnNpb25zIiwiZ2V0TGF0ZXN0U2FmZVVwZ3JhZGVGcm9tVmVyc2lvbnMiLCJsaXN0Iiwic2FmZVVwZ3JhZGVWZXIiLCJjdXJTZW12ZXIiLCJzZW12ZXIiLCJ0ZXN0VmVyIiwidGVzdFNlbXZlciIsInByZXJlbGVhc2UiLCJsZW5ndGgiLCJjb21wYXJlIiwibWFqb3IiLCJmb3JtYXQiLCJpbnN0YWxsUGFja2FnZSIsInBrZ05hbWUiLCJwa2dWZXIiLCJkdW1teVBrZ0pzb24iLCJkdW1teVBrZ1BhdGgiLCJmcyIsInJlYWRGaWxlIiwid3JpdGVGaWxlIiwic3RyaW5naWZ5IiwiaW5zdGFsbE9wdHMiLCJoYXNBcHBpdW1EZXBlbmRlbmN5IiwicHJvY2VzcyIsImVudiIsIkFQUElVTV9PTUlUX1BFRVJfREVQUyIsInJlcyIsImVycm9yIiwicGtnSnNvblBhdGgiLCJyZXNvbHZlRnJvbSIsInJlcXVpcmUiLCJ1bmluc3RhbGxQYWNrYWdlIiwibnBtIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL25wbS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgc2VtdmVyIGZyb20gJ3NlbXZlcic7XG5pbXBvcnQge2hhc0FwcGl1bURlcGVuZGVuY3l9IGZyb20gJy4vZW52JztcbmltcG9ydCB7ZXhlY30gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCB7ZnN9IGZyb20gJy4vZnMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuL3V0aWwnO1xuaW1wb3J0ICogYXMgc3lzdGVtIGZyb20gJy4vc3lzdGVtJztcbmltcG9ydCByZXNvbHZlRnJvbSBmcm9tICdyZXNvbHZlLWZyb20nO1xuXG4vKipcbiAqIFJlbGF0aXZlIHBhdGggdG8gZGlyZWN0b3J5IGNvbnRhaW5pbmcgYW55IEFwcGl1bSBpbnRlcm5hbCBmaWxlc1xuICogWFhYOiB0aGlzIGlzIGR1cGxpY2F0ZWQgaW4gYGFwcGl1bS9saWIvY29uc3RhbnRzLmpzYC5cbiAqL1xuZXhwb3J0IGNvbnN0IENBQ0hFX0RJUl9SRUxBVElWRV9QQVRIID0gcGF0aC5qb2luKCdub2RlX21vZHVsZXMnLCAnLmNhY2hlJywgJ2FwcGl1bScpO1xuXG4vKipcbiAqIFJlbGF0aXZlIHBhdGggdG8gbG9ja2ZpbGUgdXNlZCB3aGVuIGluc3RhbGxpbmcgYW4gZXh0ZW5zaW9uIHZpYSBgYXBwaXVtYFxuICovXG5leHBvcnQgY29uc3QgSU5TVEFMTF9MT0NLRklMRV9SRUxBVElWRV9QQVRIID0gcGF0aC5qb2luKENBQ0hFX0RJUl9SRUxBVElWRV9QQVRILCAnLmluc3RhbGwubG9jaycpO1xuXG4vKipcbiAqIFhYWDogVGhpcyBzaG91bGQgcHJvYmFibHkgYmUgYSBzaW5nbGV0b24sIGJ1dCBpdCBpc24ndC4gIE1heWJlIHRoaXMgbW9kdWxlIHNob3VsZCBqdXN0IGV4cG9ydCBmdW5jdGlvbnM/XG4gKi9cbmV4cG9ydCBjbGFzcyBOUE0ge1xuICAvKipcbiAgICogUmV0dXJucyBwYXRoIHRvIFwiaW5zdGFsbFwiIGxvY2tmaWxlXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjd2RcbiAgICovXG4gIF9nZXRJbnN0YWxsTG9ja2ZpbGVQYXRoKGN3ZCkge1xuICAgIHJldHVybiBwYXRoLmpvaW4oY3dkLCBJTlNUQUxMX0xPQ0tGSUxFX1JFTEFUSVZFX1BBVEgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgYG5wbWAgd2l0aCBnaXZlbiBhcmdzLlxuICAgKlxuICAgKiBJZiB0aGUgcHJvY2VzcyBleGl0cyB3aXRoIGEgbm9uemVybyBjb2RlLCB0aGUgY29udGVudHMgb2YgYFNURE9VVGAgYW5kIGBTVERFUlJgIHdpbGwgYmUgaW4gdGhlXG4gICAqIGBtZXNzYWdlYCBvZiBhbnkgcmVqZWN0ZWQgZXJyb3IuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbWRcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gYXJnc1xuICAgKiBAcGFyYW0ge0V4ZWNPcHRzfSBvcHRzXG4gICAqIEBwYXJhbSB7T21pdDxpbXBvcnQoJ3RlZW5fcHJvY2VzcycpLkV4ZWNPcHRpb25zLCAnY3dkJz59IFtleGVjT3B0c11cbiAgICovXG4gIGFzeW5jIGV4ZWMoY21kLCBhcmdzLCBvcHRzLCBleGVjT3B0cyA9IHt9KSB7XG4gICAgbGV0IHtjd2QsIGpzb24sIGxvY2tGaWxlfSA9IG9wdHM7XG5cbiAgICAvLyBtYWtlIHN1cmUgd2UgcGVyZm9ybSB0aGUgY3VycmVudCBvcGVyYXRpb24gaW4gY3dkXG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoJ3RlZW5fcHJvY2VzcycpLkV4ZWNPcHRpb25zfSAqL1xuICAgIGNvbnN0IHRlZW5Qcm9jZXNzRXhlY09wdHMgPSB7Li4uZXhlY09wdHMsIGN3ZH07XG5cbiAgICBhcmdzLnVuc2hpZnQoY21kKTtcbiAgICBpZiAoanNvbikge1xuICAgICAgYXJncy5wdXNoKCctLWpzb24nKTtcbiAgICB9XG4gICAgY29uc3QgbnBtQ21kID0gc3lzdGVtLmlzV2luZG93cygpID8gJ25wbS5jbWQnIDogJ25wbSc7XG4gICAgbGV0IHJ1bm5lciA9IGFzeW5jICgpID0+IGF3YWl0IGV4ZWMobnBtQ21kLCBhcmdzLCB0ZWVuUHJvY2Vzc0V4ZWNPcHRzKTtcbiAgICBpZiAobG9ja0ZpbGUpIHtcbiAgICAgIGNvbnN0IGFjcXVpcmVMb2NrID0gdXRpbC5nZXRMb2NrRmlsZUd1YXJkKGxvY2tGaWxlKTtcbiAgICAgIGNvbnN0IF9ydW5uZXIgPSBydW5uZXI7XG4gICAgICBydW5uZXIgPSBhc3luYyAoKSA9PiBhd2FpdCBhY3F1aXJlTG9jayhfcnVubmVyKTtcbiAgICB9XG5cbiAgICAvKiogQHR5cGUge2ltcG9ydCgndGVlbl9wcm9jZXNzJykuRXhlY1Jlc3VsdDxzdHJpbmc+ICYge2pzb24/OiBhbnl9fSAqL1xuICAgIGxldCByZXQ7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHtzdGRvdXQsIHN0ZGVyciwgY29kZX0gPSBhd2FpdCBydW5uZXIoKTtcbiAgICAgIHJldCA9IHtzdGRvdXQsIHN0ZGVyciwgY29kZX07XG4gICAgICAvLyBpZiBwb3NzaWJsZSwgcGFyc2UgTlBNJ3MganNvbiBvdXRwdXQuIER1cmluZyBOUE0gaW5zdGFsbCAzcmQtcGFydHlcbiAgICAgIC8vIHBhY2thZ2VzIGNhbiB3cml0ZSB0byBzdGRvdXQsIHNvIHNvbWV0aW1lcyB0aGUganNvbiBvdXRwdXQgY2FuJ3QgYmVcbiAgICAgIC8vIGd1YXJhbnRlZWQgdG8gYmUgcGFyc2VhYmxlXG4gICAgICB0cnkge1xuICAgICAgICByZXQuanNvbiA9IEpTT04ucGFyc2Uoc3Rkb3V0KTtcbiAgICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHN0ZG91dCA9ICcnLFxuICAgICAgICBzdGRlcnIgPSAnJyxcbiAgICAgICAgY29kZSA9IG51bGwsXG4gICAgICB9ID0gLyoqIEB0eXBlIHtpbXBvcnQoJ3RlZW5fcHJvY2VzcycpLkV4ZWNFcnJvcn0gKi8gKGUpO1xuICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKFxuICAgICAgICBgbnBtIGNvbW1hbmQgJyR7YXJncy5qb2luKFxuICAgICAgICAgICcgJ1xuICAgICAgICApfScgZmFpbGVkIHdpdGggY29kZSAke2NvZGV9LlxcblxcblNURE9VVDpcXG4ke3N0ZG91dC50cmltKCl9XFxuXFxuU1RERVJSOlxcbiR7c3RkZXJyLnRyaW0oKX1gXG4gICAgICApO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjd2RcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBrZ1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc/Pn1cbiAgICovXG4gIGFzeW5jIGdldExhdGVzdFZlcnNpb24oY3dkLCBwa2cpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKFxuICAgICAgICAgIGF3YWl0IHRoaXMuZXhlYygndmlldycsIFtwa2csICdkaXN0LXRhZ3MnXSwge1xuICAgICAgICAgICAganNvbjogdHJ1ZSxcbiAgICAgICAgICAgIGN3ZCxcbiAgICAgICAgICB9KVxuICAgICAgICApLmpzb24/LmxhdGVzdCA/PyBudWxsXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKCFlcnI/Lm1lc3NhZ2UuaW5jbHVkZXMoJ0U0MDQnKSkge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGN3ZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGtnXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjdXJWZXJzaW9uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZz8+fVxuICAgKi9cbiAgYXN5bmMgZ2V0TGF0ZXN0U2FmZVVwZ3JhZGVWZXJzaW9uKGN3ZCwgcGtnLCBjdXJWZXJzaW9uKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGFsbFZlcnNpb25zID0gKFxuICAgICAgICBhd2FpdCB0aGlzLmV4ZWMoJ3ZpZXcnLCBbcGtnLCAndmVyc2lvbnMnXSwge1xuICAgICAgICAgIGpzb246IHRydWUsXG4gICAgICAgICAgY3dkLFxuICAgICAgICB9KVxuICAgICAgKS5qc29uO1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TGF0ZXN0U2FmZVVwZ3JhZGVGcm9tVmVyc2lvbnMoY3VyVmVyc2lvbiwgYWxsVmVyc2lvbnMpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKCFlcnI/Lm1lc3NhZ2UuaW5jbHVkZXMoJ0U0MDQnKSkge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVucyBgbnBtIGxzYCwgb3B0aW9uYWxseSBmb3IgYSBwYXJ0aWN1bGFyIHBhY2thZ2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjd2RcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwa2ddXG4gICAqL1xuICBhc3luYyBsaXN0KGN3ZCwgcGtnKSB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmV4ZWMoJ2xpc3QnLCBwa2cgPyBbcGtnXSA6IFtdLCB7Y3dkLCBqc29uOiB0cnVlfSkpLmpzb247XG4gIH1cblxuICAvKipcbiAgICogR2l2ZW4gYSBjdXJyZW50IHZlcnNpb24gYW5kIGEgbGlzdCBvZiBhbGwgdmVyc2lvbnMgZm9yIGEgcGFja2FnZSwgcmV0dXJuIHRoZSB2ZXJzaW9uIHdoaWNoIGlzXG4gICAqIHRoZSBoaWdoZXN0IHNhZmVseS11cGdyYWRhYmxlIHZlcnNpb24gKG1lYW5pbmcgbm90IGNyb3NzaW5nIGFueSBtYWpvciByZXZpc2lvbiBib3VuZGFyaWVzLCBhbmRcbiAgICogbm90IGluY2x1ZGluZyBhbnkgYWxwaGEvYmV0YS9yYyB2ZXJzaW9ucylcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGN1clZlcnNpb24gLSB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIGEgcGFja2FnZVxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGFsbFZlcnNpb25zIC0gYSBsaXN0IG9mIHZlcnNpb24gc3RyaW5nc1xuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd8bnVsbH0gLSB0aGUgaGlnaGVzdCBzYWZlbHktdXBncmFkYWJsZSB2ZXJzaW9uLCBvciBudWxsIGlmIHRoZXJlIGlzbid0IG9uZVxuICAgKi9cbiAgZ2V0TGF0ZXN0U2FmZVVwZ3JhZGVGcm9tVmVyc2lvbnMoY3VyVmVyc2lvbiwgYWxsVmVyc2lvbnMpIHtcbiAgICBsZXQgc2FmZVVwZ3JhZGVWZXIgPSBudWxsO1xuICAgIGNvbnN0IGN1clNlbXZlciA9IHNlbXZlci5wYXJzZShjdXJWZXJzaW9uKTtcbiAgICBpZiAoY3VyU2VtdmVyID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBwYXJzZSBjdXJyZW50IHZlcnNpb24gJyR7Y3VyVmVyc2lvbn0nYCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdGVzdFZlciBvZiBhbGxWZXJzaW9ucykge1xuICAgICAgY29uc3QgdGVzdFNlbXZlciA9IHNlbXZlci5wYXJzZSh0ZXN0VmVyKTtcbiAgICAgIGlmICh0ZXN0U2VtdmVyID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IHBhcnNlIHZlcnNpb24gdG8gdGVzdCBhZ2FpbnN0OiAnJHt0ZXN0VmVyfSdgKTtcbiAgICAgIH1cbiAgICAgIC8vIGlmIHRoZSB0ZXN0IHZlcnNpb24gaXMgYSBwcmVyZWxlYXNlLCBpZ25vcmUgaXRcbiAgICAgIGlmICh0ZXN0U2VtdmVyLnByZXJlbGVhc2UubGVuZ3RoID4gMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIC8vIGlmIHRoZSBjdXJyZW50IHZlcnNpb24gaXMgbGF0ZXIgdGhhbiB0aGUgdGVzdCB2ZXJzaW9uLCBza2lwIHRoaXMgdGVzdCB2ZXJzaW9uXG4gICAgICBpZiAoY3VyU2VtdmVyLmNvbXBhcmUodGVzdFNlbXZlcikgPT09IDEpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyBpZiB0aGUgdGVzdCB2ZXJzaW9uIGlzIG5ld2VyLCBidXQgY3Jvc3NlcyBhIG1ham9yIHJldmlzaW9uIGJvdW5kYXJ5LCBhbHNvIHNraXAgaXRcbiAgICAgIGlmICh0ZXN0U2VtdmVyLm1ham9yID4gY3VyU2VtdmVyLm1ham9yKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gb3RoZXJ3aXNlIHRoaXMgdmVyc2lvbiBpcyBzYWZlIHRvIHVwZ3JhZGUgdG8uIEJ1dCB0aGVyZSBtaWdodCBiZSBtdWx0aXBsZSBvbmVzIG9mIHRoaXNcbiAgICAgIC8vIGtpbmQsIHNvIGtlZXAgaXRlcmF0aW5nIGFuZCBrZWVwaW5nIHRoZSBoaWdoZXN0XG4gICAgICBpZiAoc2FmZVVwZ3JhZGVWZXIgPT09IG51bGwgfHwgdGVzdFNlbXZlci5jb21wYXJlKHNhZmVVcGdyYWRlVmVyKSA9PT0gMSkge1xuICAgICAgICBzYWZlVXBncmFkZVZlciA9IHRlc3RTZW12ZXI7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzYWZlVXBncmFkZVZlcikge1xuICAgICAgc2FmZVVwZ3JhZGVWZXIgPSBzYWZlVXBncmFkZVZlci5mb3JtYXQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHNhZmVVcGdyYWRlVmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEluc3RhbGxzIGEgcGFja2FnZSB3LyBgbnBtYFxuICAgKiBAcGFyYW0ge3N0cmluZ30gY3dkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwa2dOYW1lXG4gICAqIEBwYXJhbSB7SW5zdGFsbFBhY2thZ2VPcHRzfSBbb3B0c11cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KCd0eXBlLWZlc3QnKS5QYWNrYWdlSnNvbj59XG4gICAqL1xuICBhc3luYyBpbnN0YWxsUGFja2FnZShjd2QsIHBrZ05hbWUsIHtwa2dWZXJ9ID0ge30pIHtcbiAgICAvKiogQHR5cGUge2FueX0gKi9cbiAgICBsZXQgZHVtbXlQa2dKc29uO1xuICAgIGNvbnN0IGR1bW15UGtnUGF0aCA9IHBhdGguam9pbihjd2QsICdwYWNrYWdlLmpzb24nKTtcbiAgICB0cnkge1xuICAgICAgZHVtbXlQa2dKc29uID0gSlNPTi5wYXJzZShhd2FpdCBmcy5yZWFkRmlsZShkdW1teVBrZ1BhdGgsICd1dGY4JykpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICBkdW1teVBrZ0pzb24gPSB7fTtcbiAgICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKGR1bW15UGtnUGF0aCwgSlNPTi5zdHJpbmdpZnkoZHVtbXlQa2dKc29uLCBudWxsLCAyKSwgJ3V0ZjgnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBpbnN0YWxsT3B0cyA9IFsnLS1zYXZlLWRldiddO1xuICAgIGlmICghKGF3YWl0IGhhc0FwcGl1bURlcGVuZGVuY3koY3dkKSkpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5BUFBJVU1fT01JVF9QRUVSX0RFUFMpIHtcbiAgICAgICAgaW5zdGFsbE9wdHMucHVzaCgnLS1vbWl0PXBlZXInKTtcbiAgICAgIH1cbiAgICAgIGluc3RhbGxPcHRzLnB1c2goJy0tc2F2ZS1leGFjdCcsICctLWdsb2JhbC1zdHlsZScsICctLW5vLXBhY2thZ2UtbG9jaycpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZXhlYyhcbiAgICAgICdpbnN0YWxsJyxcbiAgICAgIFsuLi5pbnN0YWxsT3B0cywgcGtnVmVyID8gYCR7cGtnTmFtZX1AJHtwa2dWZXJ9YCA6IHBrZ05hbWVdLFxuICAgICAge1xuICAgICAgICBjd2QsXG4gICAgICAgIGpzb246IHRydWUsXG4gICAgICAgIGxvY2tGaWxlOiB0aGlzLl9nZXRJbnN0YWxsTG9ja2ZpbGVQYXRoKGN3ZCksXG4gICAgICB9XG4gICAgKTtcblxuICAgIGlmIChyZXMuanNvbikge1xuICAgICAgLy8gd2UgcGFyc2VkIGEgdmFsaWQganNvbiByZXNwb25zZSwgc28gaWYgd2UgZ290IGFuIGVycm9yIGhlcmUsIHJldHVybiB0aGF0XG4gICAgICAvLyBtZXNzYWdlIHN0cmFpZ2h0YXdheVxuICAgICAgaWYgKHJlcy5qc29uLmVycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihyZXMuanNvbi5lcnJvcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTm93IHJlYWQgcGFja2FnZSBkYXRhIGZyb20gdGhlIGluc3RhbGxlZCBwYWNrYWdlIHRvIHJldHVybiwgYW5kIG1ha2Ugc3VyZVxuICAgIC8vIGV2ZXJ5dGhpbmcgZ290IGluc3RhbGxlZCBvay4gUmVtZW1iZXIsIHBrZ05hbWUgbWlnaHQgZW5kIHVwIHdpdGggYSAvIGluIGl0IGR1ZSB0byBhbiBucG1cbiAgICAvLyBvcmcsIHNvIGlmIHNvLCB0aGF0IHdpbGwgZ2V0IGNvcnJlY3RseSBleHBsb2RlZCBpbnRvIG11bHRpcGxlIGRpcmVjdG9yaWVzLCBieSBwYXRoLnJlc29sdmUgaGVyZVxuICAgIC8vIChldmVuIG9uIFdpbmRvd3MhKVxuICAgIGNvbnN0IHBrZ0pzb25QYXRoID0gcmVzb2x2ZUZyb20oY3dkLCBgJHtwa2dOYW1lfS9wYWNrYWdlLmpzb25gKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHJlcXVpcmUocGtnSnNvblBhdGgpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnVGhlIHBhY2thZ2Ugd2FzIG5vdCBkb3dubG9hZGVkIGNvcnJlY3RseTsgaXRzIHBhY2thZ2UuanNvbiAnICtcbiAgICAgICAgICAnZGlkIG5vdCBleGlzdCBvciB3YXMgdW5yZWFkYWJsZS4gV2UgbG9va2VkIGZvciBpdCBhdCAnICtcbiAgICAgICAgICBwa2dKc29uUGF0aFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGN3ZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGtnXG4gICAqL1xuICBhc3luYyB1bmluc3RhbGxQYWNrYWdlKGN3ZCwgcGtnKSB7XG4gICAgYXdhaXQgdGhpcy5leGVjKCd1bmluc3RhbGwnLCBbcGtnXSwge1xuICAgICAgY3dkLFxuICAgICAgbG9ja0ZpbGU6IHRoaXMuX2dldEluc3RhbGxMb2NrZmlsZVBhdGgoY3dkKSxcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgbnBtID0gbmV3IE5QTSgpO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBOUE0uaW5zdGFsbFBhY2thZ2V9XG4gKiBAdHlwZWRlZiBJbnN0YWxsUGFja2FnZU9wdHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcGtnVmVyXSAtIHRoZSB2ZXJzaW9uIG9mIHRoZSBwYWNrYWdlIHRvIGluc3RhbGxcbiAqL1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBOUE0uZXhlY31cbiAqIEB0eXBlZGVmIEV4ZWNPcHRzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY3dkIC0gQ3VycmVudCB3b3JraW5nIGRpcmVjdG9yeVxuICogQHByb3BlcnR5IHtib29sZWFufSBbanNvbl0gLSBJZiBgdHJ1ZWAsIHN1cHBseSBgLS1qc29uYCBmbGFnIHRvIG5wbSBhbmQgcmVzb2x2ZSB3LyBwYXJzZWQgSlNPTlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtsb2NrRmlsZV0gLSBQYXRoIHRvIGxvY2tmaWxlIHRvIHVzZVxuICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7OztBQU1PLE1BQU1BLHVCQUF1QixHQUFHQyxhQUFBLENBQUtDLElBQUwsQ0FBVSxjQUFW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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"npm.js","names":["CACHE_DIR_RELATIVE_PATH","path","join","INSTALL_LOCKFILE_RELATIVE_PATH","NPM","_getInstallLockfilePath","cwd","exec","cmd","args","opts","execOpts","json","lockFile","teenProcessExecOpts","unshift","push","npmCmd","system","isWindows","runner","acquireLock","util","getLockFileGuard","_runner","ret","stdout","stderr","code","JSON","parse","ign","e","err","Error","trim","getLatestVersion","pkg","latest","message","includes","getLatestSafeUpgradeVersion","curVersion","allVersions","getLatestSafeUpgradeFromVersions","list","safeUpgradeVer","curSemver","semver","testVer","testSemver","prerelease","length","compare","major","format","installPackage","pkgName","pkgVer","dummyPkgJson","dummyPkgPath","fs","readFile","writeFile","stringify","installOpts","hasAppiumDependency","process","env","APPIUM_OMIT_PEER_DEPS","res","error","pkgJsonPath","resolveFrom","require","uninstallPackage","npm"],"sources":["../../lib/npm.js"],"sourcesContent":["// @ts-check\n\nimport path from 'path';\nimport semver from 'semver';\nimport {hasAppiumDependency} from './env';\nimport {exec} from 'teen_process';\nimport {fs} from './fs';\nimport * as util from './util';\nimport * as system from './system';\nimport resolveFrom from 'resolve-from';\n\n/**\n * Relative path to directory containing any Appium internal files\n * XXX: this is duplicated in `appium/lib/constants.js`.\n */\nexport const CACHE_DIR_RELATIVE_PATH = path.join('node_modules', '.cache', 'appium');\n\n/**\n * Relative path to lockfile used when installing an extension via `appium`\n */\nexport const INSTALL_LOCKFILE_RELATIVE_PATH = path.join(CACHE_DIR_RELATIVE_PATH, '.install.lock');\n\n/**\n * XXX: This should probably be a singleton, but it isn't. Maybe this module should just export functions?\n */\nexport class NPM {\n /**\n * Returns path to \"install\" lockfile\n * @private\n * @param {string} cwd\n */\n _getInstallLockfilePath(cwd) {\n return path.join(cwd, INSTALL_LOCKFILE_RELATIVE_PATH);\n }\n\n /**\n * Execute `npm` with given args.\n *\n * If the process exits with a nonzero code, the contents of `STDOUT` and `STDERR` will be in the\n * `message` of any rejected error.\n * @param {string} cmd\n * @param {string[]} args\n * @param {ExecOpts} opts\n * @param {Omit<import('teen_process').ExecOptions, 'cwd'>} [execOpts]\n */\n async exec(cmd, args, opts, execOpts = {}) {\n let {cwd, json, lockFile} = opts;\n\n // make sure we perform the current operation in cwd\n /** @type {import('teen_process').ExecOptions} */\n const teenProcessExecOpts = {...execOpts, cwd};\n\n args.unshift(cmd);\n if (json) {\n args.push('--json');\n }\n const npmCmd = system.isWindows() ? 'npm.cmd' : 'npm';\n let runner = async () => await exec(npmCmd, args, teenProcessExecOpts);\n if (lockFile) {\n const acquireLock = util.getLockFileGuard(lockFile);\n const _runner = runner;\n runner = async () => await acquireLock(_runner);\n }\n\n /** @type {import('teen_process').ExecResult<string> & {json?: any}} */\n let ret;\n try {\n const {stdout, stderr, code} = await runner();\n ret = {stdout, stderr, code};\n // if possible, parse NPM's json output. During NPM install 3rd-party\n // packages can write to stdout, so sometimes the json output can't be\n // guaranteed to be parseable\n try {\n ret.json = JSON.parse(stdout);\n } catch (ign) {}\n } catch (e) {\n const {\n stdout = '',\n stderr = '',\n code = null,\n } = /** @type {import('teen_process').ExecError} */ (e);\n const err = new Error(\n `npm command '${args.join(\n ' '\n )}' failed with code ${code}.\\n\\nSTDOUT:\\n${stdout.trim()}\\n\\nSTDERR:\\n${stderr.trim()}`\n );\n throw err;\n }\n return ret;\n }\n\n /**\n * @param {string} cwd\n * @param {string} pkg\n * @returns {Promise<string?>}\n */\n async getLatestVersion(cwd, pkg) {\n try {\n return (\n (\n await this.exec('view', [pkg, 'dist-tags'], {\n json: true,\n cwd,\n })\n ).json?.latest ?? null\n );\n } catch (err) {\n if (!err?.message.includes('E404')) {\n throw err;\n }\n return null;\n }\n }\n\n /**\n * @param {string} cwd\n * @param {string} pkg\n * @param {string} curVersion\n * @returns {Promise<string?>}\n */\n async getLatestSafeUpgradeVersion(cwd, pkg, curVersion) {\n try {\n const allVersions = (\n await this.exec('view', [pkg, 'versions'], {\n json: true,\n cwd,\n })\n ).json;\n return this.getLatestSafeUpgradeFromVersions(curVersion, allVersions);\n } catch (err) {\n if (!err?.message.includes('E404')) {\n throw err;\n }\n return null;\n }\n }\n\n /**\n * Runs `npm ls`, optionally for a particular package.\n * @param {string} cwd\n * @param {string} [pkg]\n */\n async list(cwd, pkg) {\n return (await this.exec('list', pkg ? [pkg] : [], {cwd, json: true})).json;\n }\n\n /**\n * Given a current version and a list of all versions for a package, return the version which is\n * the highest safely-upgradable version (meaning not crossing any major revision boundaries, and\n * not including any alpha/beta/rc versions)\n *\n * @param {string} curVersion - the current version of a package\n * @param {Array<string>} allVersions - a list of version strings\n *\n * @return {string|null} - the highest safely-upgradable version, or null if there isn't one\n */\n getLatestSafeUpgradeFromVersions(curVersion, allVersions) {\n let safeUpgradeVer = null;\n const curSemver = semver.parse(curVersion);\n if (curSemver === null) {\n throw new Error(`Could not parse current version '${curVersion}'`);\n }\n for (const testVer of allVersions) {\n const testSemver = semver.parse(testVer);\n if (testSemver === null) {\n throw new Error(`Could not parse version to test against: '${testVer}'`);\n }\n // if the test version is a prerelease, ignore it\n if (testSemver.prerelease.length > 0) {\n continue;\n }\n // if the current version is later than the test version, skip this test version\n if (curSemver.compare(testSemver) === 1) {\n continue;\n }\n // if the test version is newer, but crosses a major revision boundary, also skip it\n if (testSemver.major > curSemver.major) {\n continue;\n }\n // otherwise this version is safe to upgrade to. But there might be multiple ones of this\n // kind, so keep iterating and keeping the highest\n if (safeUpgradeVer === null || testSemver.compare(safeUpgradeVer) === 1) {\n safeUpgradeVer = testSemver;\n }\n }\n if (safeUpgradeVer) {\n safeUpgradeVer = safeUpgradeVer.format();\n }\n return safeUpgradeVer;\n }\n\n /**\n * Installs a package w/ `npm`\n * @param {string} cwd\n * @param {string} pkgName\n * @param {InstallPackageOpts} [opts]\n * @returns {Promise<import('type-fest').PackageJson>}\n */\n async installPackage(cwd, pkgName, {pkgVer} = {}) {\n /** @type {any} */\n let dummyPkgJson;\n const dummyPkgPath = path.join(cwd, 'package.json');\n try {\n dummyPkgJson = JSON.parse(await fs.readFile(dummyPkgPath, 'utf8'));\n } catch (err) {\n if (err.code === 'ENOENT') {\n dummyPkgJson = {};\n await fs.writeFile(dummyPkgPath, JSON.stringify(dummyPkgJson, null, 2), 'utf8');\n } else {\n throw err;\n }\n }\n\n const installOpts = ['--save-dev'];\n if (!(await hasAppiumDependency(cwd))) {\n if (process.env.APPIUM_OMIT_PEER_DEPS) {\n installOpts.push('--omit=peer');\n }\n installOpts.push('--save-exact', '--global-style', '--no-package-lock');\n }\n\n const res = await this.exec(\n 'install',\n [...installOpts, pkgVer ? `${pkgName}@${pkgVer}` : pkgName],\n {\n cwd,\n json: true,\n lockFile: this._getInstallLockfilePath(cwd),\n }\n );\n\n if (res.json) {\n // we parsed a valid json response, so if we got an error here, return that\n // message straightaway\n if (res.json.error) {\n throw new Error(res.json.error);\n }\n }\n\n // Now read package data from the installed package to return, and make sure\n // everything got installed ok. Remember, pkgName might end up with a / in it due to an npm\n // org, so if so, that will get correctly exploded into multiple directories, by path.resolve here\n // (even on Windows!)\n const pkgJsonPath = resolveFrom(cwd, `${pkgName}/package.json`);\n try {\n return require(pkgJsonPath);\n } catch {\n throw new Error(\n 'The package was not downloaded correctly; its package.json ' +\n 'did not exist or was unreadable. We looked for it at ' +\n pkgJsonPath\n );\n }\n }\n\n /**\n * @param {string} cwd\n * @param {string} pkg\n */\n async uninstallPackage(cwd, pkg) {\n await this.exec('uninstall', [pkg], {\n cwd,\n lockFile: this._getInstallLockfilePath(cwd),\n });\n }\n}\n\nexport const npm = new NPM();\n\n/**\n * Options for {@link NPM.installPackage}\n * @typedef InstallPackageOpts\n * @property {string} [pkgVer] - the version of the package to install\n */\n\n/**\n * Options for {@link NPM.exec}\n * @typedef ExecOpts\n * @property {string} cwd - Current working directory\n * @property {boolean} [json] - If `true`, supply `--json` flag to npm and resolve w/ parsed JSON\n * @property {string} [lockFile] - Path to lockfile to use\n */\n"],"mappings":"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"}
|