@appium/support 2.61.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/build/lib/console.d.ts +1 -1
  2. package/build/lib/console.js +169 -105
  3. package/build/lib/console.js.map +1 -1
  4. package/build/lib/env.js +142 -117
  5. package/build/lib/env.js.map +1 -1
  6. package/build/lib/fs.d.ts +9 -2
  7. package/build/lib/fs.d.ts.map +1 -1
  8. package/build/lib/fs.js +358 -246
  9. package/build/lib/fs.js.map +1 -1
  10. package/build/lib/image-util.js +139 -124
  11. package/build/lib/image-util.js.map +1 -1
  12. package/build/lib/index.js +64 -103
  13. package/build/lib/index.js.map +1 -1
  14. package/build/lib/log-internal.d.ts +4 -27
  15. package/build/lib/log-internal.d.ts.map +1 -1
  16. package/build/lib/log-internal.js +141 -123
  17. package/build/lib/log-internal.js.map +1 -1
  18. package/build/lib/logger.d.ts +1 -1
  19. package/build/lib/logger.d.ts.map +1 -1
  20. package/build/lib/logger.js +5 -14
  21. package/build/lib/logger.js.map +1 -1
  22. package/build/lib/logging.d.ts +3 -4
  23. package/build/lib/logging.d.ts.map +1 -1
  24. package/build/lib/logging.js +139 -110
  25. package/build/lib/logging.js.map +1 -1
  26. package/build/lib/mjpeg.js +169 -141
  27. package/build/lib/mjpeg.js.map +1 -1
  28. package/build/lib/mkdirp.js +7 -13
  29. package/build/lib/mkdirp.js.map +1 -1
  30. package/build/lib/net.d.ts.map +1 -1
  31. package/build/lib/net.js +278 -254
  32. package/build/lib/net.js.map +1 -1
  33. package/build/lib/node.js +203 -192
  34. package/build/lib/node.js.map +1 -1
  35. package/build/lib/npm.d.ts +19 -4
  36. package/build/lib/npm.d.ts.map +1 -1
  37. package/build/lib/npm.js +277 -228
  38. package/build/lib/npm.js.map +1 -1
  39. package/build/lib/plist.js +145 -136
  40. package/build/lib/plist.js.map +1 -1
  41. package/build/lib/process.js +41 -42
  42. package/build/lib/process.js.map +1 -1
  43. package/build/lib/system.js +39 -56
  44. package/build/lib/system.js.map +1 -1
  45. package/build/lib/tempdir.js +112 -73
  46. package/build/lib/tempdir.js.map +1 -1
  47. package/build/lib/timing.js +99 -84
  48. package/build/lib/timing.js.map +1 -1
  49. package/build/lib/util.js +454 -356
  50. package/build/lib/util.js.map +1 -1
  51. package/build/lib/zip.js +469 -423
  52. package/build/lib/zip.js.map +1 -1
  53. package/build/tsconfig.tsbuildinfo +1 -1
  54. package/lib/fs.js +15 -1
  55. package/lib/log-internal.js +12 -16
  56. package/lib/logging.js +2 -3
  57. package/lib/net.js +15 -6
  58. package/lib/npm.js +28 -18
  59. package/package.json +20 -19
@@ -1,154 +1,182 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.MJpegStream = void 0;
7
-
8
- require("source-map-support/register");
9
-
10
- var _lodash = _interopRequireDefault(require("lodash"));
11
-
12
- var _logger = _interopRequireDefault(require("./logger"));
13
-
14
- var _bluebird = _interopRequireDefault(require("bluebird"));
15
-
16
- var _imageUtil = require("./image-util");
17
-
18
- var _stream = require("stream");
19
-
20
- var _node = require("./node");
21
-
22
- var _axios = _interopRequireDefault(require("axios"));
23
-
24
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
-
7
+ const lodash_1 = __importDefault(require("lodash"));
8
+ const logger_1 = __importDefault(require("./logger"));
9
+ const bluebird_1 = __importDefault(require("bluebird"));
10
+ const image_util_1 = require("./image-util");
11
+ const stream_1 = require("stream");
12
+ const node_1 = require("./node");
13
+ const axios_1 = __importDefault(require("axios"));
14
+ // lazy load this, as it might not be available
26
15
  let MJpegConsumer = null;
27
-
16
+ /**
17
+ * @throws {Error} If `mjpeg-consumer` module is not installed or cannot be loaded
18
+ */
28
19
  async function initMJpegConsumer() {
29
- if (!MJpegConsumer) {
30
- try {
31
- MJpegConsumer = await (0, _node.requirePackage)('mjpeg-consumer');
32
- } catch (ign) {}
33
- }
34
-
35
- if (!MJpegConsumer) {
36
- throw new Error('mjpeg-consumer module is required to use MJPEG-over-HTTP features. ' + 'Please install it first (npm i -g mjpeg-consumer) and restart Appium.');
37
- }
20
+ if (!MJpegConsumer) {
21
+ try {
22
+ MJpegConsumer = await (0, node_1.requirePackage)('mjpeg-consumer');
23
+ }
24
+ catch (ign) { }
25
+ }
26
+ if (!MJpegConsumer) {
27
+ throw new Error('mjpeg-consumer module is required to use MJPEG-over-HTTP features. ' +
28
+ 'Please install it first (npm i -g mjpeg-consumer) and restart Appium.');
29
+ }
38
30
  }
39
-
31
+ // amount of time to wait for the first image in the stream
40
32
  const MJPEG_SERVER_TIMEOUT_MS = 10000;
41
-
42
- class MJpegStream extends _stream.Writable {
43
- updateCount = 0;
44
-
45
- constructor(mJpegUrl, errorHandler = _lodash.default.noop, options = {}) {
46
- super(options);
47
- this.errorHandler = errorHandler;
48
- this.url = mJpegUrl;
49
- this.clear();
50
- }
51
-
52
- get lastChunkBase64() {
53
- const lastChunk = this.lastChunk;
54
- return !_lodash.default.isEmpty(this.lastChunk) && _lodash.default.isBuffer(this.lastChunk) ? lastChunk.toString('base64') : null;
55
- }
56
-
57
- async lastChunkPNG() {
58
- const lastChunk = this.lastChunk;
59
-
60
- if (_lodash.default.isEmpty(lastChunk) || !_lodash.default.isBuffer(lastChunk)) {
61
- return null;
33
+ /** Class which stores the last bit of data streamed into it */
34
+ class MJpegStream extends stream_1.Writable {
35
+ /**
36
+ * Create an MJpegStream
37
+ * @param {string} mJpegUrl - URL of MJPEG-over-HTTP stream
38
+ * @param {function} [errorHandler=noop] - additional function that will be
39
+ * called in the case of any errors.
40
+ * @param {object} [options={}] - Options to pass to the Writable constructor
41
+ */
42
+ constructor(mJpegUrl, errorHandler = lodash_1.default.noop, options = {}) {
43
+ super(options);
44
+ /**
45
+ * @type {number}
46
+ */
47
+ this.updateCount = 0;
48
+ this.errorHandler = errorHandler;
49
+ this.url = mJpegUrl;
50
+ this.clear();
51
+ }
52
+ /**
53
+ * Get the base64-encoded version of the JPEG
54
+ *
55
+ * @returns {?string} base64-encoded JPEG image data
56
+ * or `null` if no image can be parsed
57
+ */
58
+ get lastChunkBase64() {
59
+ const lastChunk = /** @type {Buffer} */ (this.lastChunk);
60
+ return !lodash_1.default.isEmpty(this.lastChunk) && lodash_1.default.isBuffer(this.lastChunk)
61
+ ? lastChunk.toString('base64')
62
+ : null;
63
+ }
64
+ /**
65
+ * Get the PNG version of the JPEG buffer
66
+ *
67
+ * @returns {Promise<Buffer?>} PNG image data or `null` if no PNG
68
+ * image can be parsed
69
+ */
70
+ async lastChunkPNG() {
71
+ const lastChunk = /** @type {Buffer} */ (this.lastChunk);
72
+ if (lodash_1.default.isEmpty(lastChunk) || !lodash_1.default.isBuffer(lastChunk)) {
73
+ return null;
74
+ }
75
+ try {
76
+ const jpg = await (0, image_util_1.getJimpImage)(lastChunk);
77
+ return await jpg.getBuffer(image_util_1.MIME_PNG);
78
+ }
79
+ catch (e) {
80
+ return null;
81
+ }
82
+ }
83
+ /**
84
+ * Get the base64-encoded version of the PNG
85
+ *
86
+ * @returns {Promise<string?>} base64-encoded PNG image data
87
+ * or `null` if no image can be parsed
88
+ */
89
+ async lastChunkPNGBase64() {
90
+ const png = await this.lastChunkPNG();
91
+ return png ? png.toString('base64') : null;
62
92
  }
63
-
64
- try {
65
- const jpg = await (0, _imageUtil.getJimpImage)(lastChunk);
66
- return await jpg.getBuffer(_imageUtil.MIME_PNG);
67
- } catch (e) {
68
- return null;
93
+ /**
94
+ * Reset internal state
95
+ */
96
+ clear() {
97
+ this.registerStartSuccess = null;
98
+ this.registerStartFailure = null;
99
+ this.responseStream = null;
100
+ this.consumer = null;
101
+ this.lastChunk = null;
102
+ this.updateCount = 0;
69
103
  }
70
- }
71
-
72
- async lastChunkPNGBase64() {
73
- const png = await this.lastChunkPNG();
74
- return png ? png.toString('base64') : null;
75
- }
76
-
77
- clear() {
78
- this.registerStartSuccess = null;
79
- this.registerStartFailure = null;
80
- this.responseStream = null;
81
- this.consumer = null;
82
- this.lastChunk = null;
83
- this.updateCount = 0;
84
- }
85
-
86
- async start(serverTimeout = MJPEG_SERVER_TIMEOUT_MS) {
87
- this.stop();
88
- await initMJpegConsumer();
89
- this.consumer = new MJpegConsumer();
90
- const startPromise = new _bluebird.default((res, rej) => {
91
- this.registerStartSuccess = res;
92
- this.registerStartFailure = rej;
93
- }).timeout(serverTimeout, `Waited ${serverTimeout}ms but the MJPEG server never sent any images`);
94
- const url = this.url;
95
-
96
- const onErr = err => {
97
- this.lastChunk = null;
98
-
99
- _logger.default.error(`Error getting MJpeg screenshot chunk: ${err.message}`);
100
-
101
- this.errorHandler(err);
102
-
103
- if (this.registerStartFailure) {
104
- this.registerStartFailure(err);
105
- }
106
- };
107
-
108
- const onClose = () => {
109
- _logger.default.debug(`The connection to MJPEG server at ${url} has been closed`);
110
-
111
- this.lastChunk = null;
112
- };
113
-
114
- try {
115
- this.responseStream = (await (0, _axios.default)({
116
- url,
117
- responseType: 'stream',
118
- timeout: serverTimeout
119
- })).data;
120
- } catch (e) {
121
- return onErr(e);
104
+ /**
105
+ * Start reading the MJpeg stream and storing the last image
106
+ */
107
+ async start(serverTimeout = MJPEG_SERVER_TIMEOUT_MS) {
108
+ // ensure we're not started already
109
+ this.stop();
110
+ await initMJpegConsumer();
111
+ this.consumer = new MJpegConsumer();
112
+ // use the deferred pattern so we can wait for the start of the stream
113
+ // based on what comes in from an external pipe
114
+ const startPromise = new bluebird_1.default((res, rej) => {
115
+ this.registerStartSuccess = res;
116
+ this.registerStartFailure = rej;
117
+ })
118
+ // start a timeout so that if the server does not return data, we don't
119
+ // block forever.
120
+ .timeout(serverTimeout, `Waited ${serverTimeout}ms but the MJPEG server never sent any images`);
121
+ const url = this.url;
122
+ const onErr = (err) => {
123
+ // Make sure we don't get an outdated screenshot if there was an error
124
+ this.lastChunk = null;
125
+ logger_1.default.error(`Error getting MJpeg screenshot chunk: ${err.message}`);
126
+ this.errorHandler(err);
127
+ if (this.registerStartFailure) {
128
+ this.registerStartFailure(err);
129
+ }
130
+ };
131
+ const onClose = () => {
132
+ logger_1.default.debug(`The connection to MJPEG server at ${url} has been closed`);
133
+ this.lastChunk = null;
134
+ };
135
+ try {
136
+ this.responseStream = (await (0, axios_1.default)({
137
+ url,
138
+ responseType: 'stream',
139
+ timeout: serverTimeout,
140
+ })).data;
141
+ }
142
+ catch (e) {
143
+ return onErr(e);
144
+ }
145
+ this.responseStream
146
+ .once('close', onClose)
147
+ .on('error', onErr) // ensure we do something with errors
148
+ .pipe(this.consumer) // allow chunking and transforming of jpeg data
149
+ .pipe(this); // send the actual jpegs to ourself
150
+ await startPromise;
122
151
  }
123
-
124
- this.responseStream.once('close', onClose).on('error', onErr).pipe(this.consumer).pipe(this);
125
- await startPromise;
126
- }
127
-
128
- stop() {
129
- if (!this.consumer) {
130
- return;
152
+ /**
153
+ * Stop reading the MJpeg stream. Ensure we disconnect all the pipes and stop
154
+ * the HTTP request itself. Then reset the state.
155
+ */
156
+ stop() {
157
+ if (!this.consumer) {
158
+ return;
159
+ }
160
+ this.responseStream.unpipe(this.consumer);
161
+ this.consumer.unpipe(this);
162
+ this.responseStream.destroy();
163
+ this.clear();
131
164
  }
132
-
133
- this.responseStream.unpipe(this.consumer);
134
- this.consumer.unpipe(this);
135
- this.responseStream.destroy();
136
- this.clear();
137
- }
138
-
139
- write(data) {
140
- this.lastChunk = data;
141
- this.updateCount++;
142
-
143
- if (this.registerStartSuccess) {
144
- this.registerStartSuccess();
145
- this.registerStartSuccess = null;
165
+ /**
166
+ * Override the Writable write() method in order to save the last image and
167
+ * log the number of images we have received
168
+ * @override
169
+ * @param {Buffer} data - binary data streamed from the MJpeg consumer
170
+ */
171
+ write(data) {
172
+ this.lastChunk = data;
173
+ this.updateCount++;
174
+ if (this.registerStartSuccess) {
175
+ this.registerStartSuccess();
176
+ this.registerStartSuccess = null;
177
+ }
178
+ return true;
146
179
  }
147
-
148
- return true;
149
- }
150
-
151
180
  }
152
-
153
181
  exports.MJpegStream = MJpegStream;
154
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNSnBlZ0NvbnN1bWVyIiwiaW5pdE1KcGVnQ29uc3VtZXIiLCJyZXF1aXJlUGFja2FnZSIsImlnbiIsIkVycm9yIiwiTUpQRUdfU0VSVkVSX1RJTUVPVVRfTVMiLCJNSnBlZ1N0cmVhbSIsIldyaXRhYmxlIiwidXBkYXRlQ291bnQiLCJjb25zdHJ1Y3RvciIsIm1KcGVnVXJsIiwiZXJyb3JIYW5kbGVyIiwiXyIsIm5vb3AiLCJvcHRpb25zIiwidXJsIiwiY2xlYXIiLCJsYXN0Q2h1bmtCYXNlNjQiLCJsYXN0Q2h1bmsiLCJpc0VtcHR5IiwiaXNCdWZmZXIiLCJ0b1N0cmluZyIsImxhc3RDaHVua1BORyIsImpwZyIsImdldEppbXBJbWFnZSIsImdldEJ1ZmZlciIsIk1JTUVfUE5HIiwiZSIsImxhc3RDaHVua1BOR0Jhc2U2NCIsInBuZyIsInJlZ2lzdGVyU3RhcnRTdWNjZXNzIiwicmVnaXN0ZXJTdGFydEZhaWx1cmUiLCJyZXNwb25zZVN0cmVhbSIsImNvbnN1bWVyIiwic3RhcnQiLCJzZXJ2ZXJUaW1lb3V0Iiwic3RvcCIsInN0YXJ0UHJvbWlzZSIsIkIiLCJyZXMiLCJyZWoiLCJ0aW1lb3V0Iiwib25FcnIiLCJlcnIiLCJsb2ciLCJlcnJvciIsIm1lc3NhZ2UiLCJvbkNsb3NlIiwiZGVidWciLCJheGlvcyIsInJlc3BvbnNlVHlwZSIsImRhdGEiLCJvbmNlIiwib24iLCJwaXBlIiwidW5waXBlIiwiZGVzdHJveSIsIndyaXRlIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL21qcGVnLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7Z2V0SmltcEltYWdlLCBNSU1FX1BOR30gZnJvbSAnLi9pbWFnZS11dGlsJztcbmltcG9ydCB7V3JpdGFibGV9IGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQge3JlcXVpcmVQYWNrYWdlfSBmcm9tICcuL25vZGUnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcblxuLy8gbGF6eSBsb2FkIHRoaXMsIGFzIGl0IG1pZ2h0IG5vdCBiZSBhdmFpbGFibGVcbmxldCBNSnBlZ0NvbnN1bWVyID0gbnVsbDtcblxuLyoqXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgYG1qcGVnLWNvbnN1bWVyYCBtb2R1bGUgaXMgbm90IGluc3RhbGxlZCBvciBjYW5ub3QgYmUgbG9hZGVkXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGluaXRNSnBlZ0NvbnN1bWVyKCkge1xuICBpZiAoIU1KcGVnQ29uc3VtZXIpIHtcbiAgICB0cnkge1xuICAgICAgTUpwZWdDb25zdW1lciA9IGF3YWl0IHJlcXVpcmVQYWNrYWdlKCdtanBlZy1jb25zdW1lcicpO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgfVxuICBpZiAoIU1KcGVnQ29uc3VtZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnbWpwZWctY29uc3VtZXIgbW9kdWxlIGlzIHJlcXVpcmVkIHRvIHVzZSBNSlBFRy1vdmVyLUhUVFAgZmVhdHVyZXMuICcgK1xuICAgICAgICAnUGxlYXNlIGluc3RhbGwgaXQgZmlyc3QgKG5wbSBpIC1nIG1qcGVnLWNvbnN1bWVyKSBhbmQgcmVzdGFydCBBcHBpdW0uJ1xuICAgICk7XG4gIH1cbn1cblxuLy8gYW1vdW50IG9mIHRpbWUgdG8gd2FpdCBmb3IgdGhlIGZpcnN0IGltYWdlIGluIHRoZSBzdHJlYW1cbmNvbnN0IE1KUEVHX1NFUlZFUl9USU1FT1VUX01TID0gMTAwMDA7XG5cbi8qKiBDbGFzcyB3aGljaCBzdG9yZXMgdGhlIGxhc3QgYml0IG9mIGRhdGEgc3RyZWFtZWQgaW50byBpdCAqL1xuY2xhc3MgTUpwZWdTdHJlYW0gZXh0ZW5kcyBXcml0YWJsZSB7XG4gIC8qKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgdXBkYXRlQ291bnQgPSAwO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gTUpwZWdTdHJlYW1cbiAgICogQHBhcmFtIHtzdHJpbmd9IG1KcGVnVXJsIC0gVVJMIG9mIE1KUEVHLW92ZXItSFRUUCBzdHJlYW1cbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gW2Vycm9ySGFuZGxlcj1ub29wXSAtIGFkZGl0aW9uYWwgZnVuY3Rpb24gdGhhdCB3aWxsIGJlXG4gICAqIGNhbGxlZCBpbiB0aGUgY2FzZSBvZiBhbnkgZXJyb3JzLlxuICAgKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnM9e31dIC0gT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBXcml0YWJsZSBjb25zdHJ1Y3RvclxuICAgKi9cbiAgY29uc3RydWN0b3IobUpwZWdVcmwsIGVycm9ySGFuZGxlciA9IF8ubm9vcCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG5cbiAgICB0aGlzLmVycm9ySGFuZGxlciA9IGVycm9ySGFuZGxlcjtcbiAgICB0aGlzLnVybCA9IG1KcGVnVXJsO1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGJhc2U2NC1lbmNvZGVkIHZlcnNpb24gb2YgdGhlIEpQRUdcbiAgICpcbiAgICogQHJldHVybnMgez9zdHJpbmd9IGJhc2U2NC1lbmNvZGVkIEpQRUcgaW1hZ2UgZGF0YVxuICAgKiBvciBgbnVsbGAgaWYgbm8gaW1hZ2UgY2FuIGJlIHBhcnNlZFxuICAgKi9cbiAgZ2V0IGxhc3RDaHVua0Jhc2U2NCgpIHtcbiAgICBjb25zdCBsYXN0Q2h1bmsgPSAvKiogQHR5cGUge0J1ZmZlcn0gKi8gKHRoaXMubGFzdENodW5rKTtcbiAgICByZXR1cm4gIV8uaXNFbXB0eSh0aGlzLmxhc3RDaHVuaykgJiYgXy5pc0J1ZmZlcih0aGlzLmxhc3RDaHVuaylcbiAgICAgID8gbGFzdENodW5rLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgICAgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgUE5HIHZlcnNpb24gb2YgdGhlIEpQRUcgYnVmZmVyXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEJ1ZmZlcj8+fSBQTkcgaW1hZ2UgZGF0YSBvciBgbnVsbGAgaWYgbm8gUE5HXG4gICAqIGltYWdlIGNhbiBiZSBwYXJzZWRcbiAgICovXG4gIGFzeW5jIGxhc3RDaHVua1BORygpIHtcbiAgICBjb25zdCBsYXN0Q2h1bmsgPSAvKiogQHR5cGUge0J1ZmZlcn0gKi8gKHRoaXMubGFzdENodW5rKTtcbiAgICBpZiAoXy5pc0VtcHR5KGxhc3RDaHVuaykgfHwgIV8uaXNCdWZmZXIobGFzdENodW5rKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGpwZyA9IGF3YWl0IGdldEppbXBJbWFnZShsYXN0Q2h1bmspO1xuICAgICAgcmV0dXJuIGF3YWl0IGpwZy5nZXRCdWZmZXIoTUlNRV9QTkcpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGJhc2U2NC1lbmNvZGVkIHZlcnNpb24gb2YgdGhlIFBOR1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc/Pn0gYmFzZTY0LWVuY29kZWQgUE5HIGltYWdlIGRhdGFcbiAgICogb3IgYG51bGxgIGlmIG5vIGltYWdlIGNhbiBiZSBwYXJzZWRcbiAgICovXG4gIGFzeW5jIGxhc3RDaHVua1BOR0Jhc2U2NCgpIHtcbiAgICBjb25zdCBwbmcgPSBhd2FpdCB0aGlzLmxhc3RDaHVua1BORygpO1xuICAgIHJldHVybiBwbmcgPyBwbmcudG9TdHJpbmcoJ2Jhc2U2NCcpIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCBpbnRlcm5hbCBzdGF0ZVxuICAgKi9cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy5yZWdpc3RlclN0YXJ0U3VjY2VzcyA9IG51bGw7XG4gICAgdGhpcy5yZWdpc3RlclN0YXJ0RmFpbHVyZSA9IG51bGw7XG4gICAgdGhpcy5yZXNwb25zZVN0cmVhbSA9IG51bGw7XG4gICAgdGhpcy5jb25zdW1lciA9IG51bGw7XG4gICAgdGhpcy5sYXN0Q2h1bmsgPSBudWxsO1xuICAgIHRoaXMudXBkYXRlQ291bnQgPSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHJlYWRpbmcgdGhlIE1KcGVnIHN0cmVhbSBhbmQgc3RvcmluZyB0aGUgbGFzdCBpbWFnZVxuICAgKi9cbiAgYXN5bmMgc3RhcnQoc2VydmVyVGltZW91dCA9IE1KUEVHX1NFUlZFUl9USU1FT1VUX01TKSB7XG4gICAgLy8gZW5zdXJlIHdlJ3JlIG5vdCBzdGFydGVkIGFscmVhZHlcbiAgICB0aGlzLnN0b3AoKTtcblxuICAgIGF3YWl0IGluaXRNSnBlZ0NvbnN1bWVyKCk7XG5cbiAgICB0aGlzLmNvbnN1bWVyID0gbmV3IE1KcGVnQ29uc3VtZXIoKTtcblxuICAgIC8vIHVzZSB0aGUgZGVmZXJyZWQgcGF0dGVybiBzbyB3ZSBjYW4gd2FpdCBmb3IgdGhlIHN0YXJ0IG9mIHRoZSBzdHJlYW1cbiAgICAvLyBiYXNlZCBvbiB3aGF0IGNvbWVzIGluIGZyb20gYW4gZXh0ZXJuYWwgcGlwZVxuICAgIGNvbnN0IHN0YXJ0UHJvbWlzZSA9IG5ldyBCKChyZXMsIHJlaikgPT4ge1xuICAgICAgdGhpcy5yZWdpc3RlclN0YXJ0U3VjY2VzcyA9IHJlcztcbiAgICAgIHRoaXMucmVnaXN0ZXJTdGFydEZhaWx1cmUgPSByZWo7XG4gICAgfSlcbiAgICAgIC8vIHN0YXJ0IGEgdGltZW91dCBzbyB0aGF0IGlmIHRoZSBzZXJ2ZXIgZG9lcyBub3QgcmV0dXJuIGRhdGEsIHdlIGRvbid0XG4gICAgICAvLyBibG9jayBmb3JldmVyLlxuICAgICAgLnRpbWVvdXQoXG4gICAgICAgIHNlcnZlclRpbWVvdXQsXG4gICAgICAgIGBXYWl0ZWQgJHtzZXJ2ZXJUaW1lb3V0fW1zIGJ1dCB0aGUgTUpQRUcgc2VydmVyIG5ldmVyIHNlbnQgYW55IGltYWdlc2BcbiAgICAgICk7XG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLnVybDtcbiAgICBjb25zdCBvbkVyciA9IChlcnIpID0+IHtcbiAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBnZXQgYW4gb3V0ZGF0ZWQgc2NyZWVuc2hvdCBpZiB0aGVyZSB3YXMgYW4gZXJyb3JcbiAgICAgIHRoaXMubGFzdENodW5rID0gbnVsbDtcblxuICAgICAgbG9nLmVycm9yKGBFcnJvciBnZXR0aW5nIE1KcGVnIHNjcmVlbnNob3QgY2h1bms6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICB0aGlzLmVycm9ySGFuZGxlcihlcnIpO1xuICAgICAgaWYgKHRoaXMucmVnaXN0ZXJTdGFydEZhaWx1cmUpIHtcbiAgICAgICAgdGhpcy5yZWdpc3RlclN0YXJ0RmFpbHVyZShlcnIpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgb25DbG9zZSA9ICgpID0+IHtcbiAgICAgIGxvZy5kZWJ1ZyhgVGhlIGNvbm5lY3Rpb24gdG8gTUpQRUcgc2VydmVyIGF0ICR7dXJsfSBoYXMgYmVlbiBjbG9zZWRgKTtcbiAgICAgIHRoaXMubGFzdENodW5rID0gbnVsbDtcbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMucmVzcG9uc2VTdHJlYW0gPSAoXG4gICAgICAgIGF3YWl0IGF4aW9zKHtcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgcmVzcG9uc2VUeXBlOiAnc3RyZWFtJyxcbiAgICAgICAgICB0aW1lb3V0OiBzZXJ2ZXJUaW1lb3V0LFxuICAgICAgICB9KVxuICAgICAgKS5kYXRhO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBvbkVycihlKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc3BvbnNlU3RyZWFtXG4gICAgICAub25jZSgnY2xvc2UnLCBvbkNsb3NlKVxuICAgICAgLm9uKCdlcnJvcicsIG9uRXJyKSAvLyBlbnN1cmUgd2UgZG8gc29tZXRoaW5nIHdpdGggZXJyb3JzXG4gICAgICAucGlwZSh0aGlzLmNvbnN1bWVyKSAvLyBhbGxvdyBjaHVua2luZyBhbmQgdHJhbnNmb3JtaW5nIG9mIGpwZWcgZGF0YVxuICAgICAgLnBpcGUodGhpcyk7IC8vIHNlbmQgdGhlIGFjdHVhbCBqcGVncyB0byBvdXJzZWxmXG5cbiAgICBhd2FpdCBzdGFydFByb21pc2U7XG4gIH1cblxuICAvKipcbiAgICogU3RvcCByZWFkaW5nIHRoZSBNSnBlZyBzdHJlYW0uIEVuc3VyZSB3ZSBkaXNjb25uZWN0IGFsbCB0aGUgcGlwZXMgYW5kIHN0b3BcbiAgICogdGhlIEhUVFAgcmVxdWVzdCBpdHNlbGYuIFRoZW4gcmVzZXQgdGhlIHN0YXRlLlxuICAgKi9cbiAgc3RvcCgpIHtcbiAgICBpZiAoIXRoaXMuY29uc3VtZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlc3BvbnNlU3RyZWFtLnVucGlwZSh0aGlzLmNvbnN1bWVyKTtcbiAgICB0aGlzLmNvbnN1bWVyLnVucGlwZSh0aGlzKTtcbiAgICB0aGlzLnJlc3BvbnNlU3RyZWFtLmRlc3Ryb3koKTtcbiAgICB0aGlzLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGUgdGhlIFdyaXRhYmxlIHdyaXRlKCkgbWV0aG9kIGluIG9yZGVyIHRvIHNhdmUgdGhlIGxhc3QgaW1hZ2UgYW5kXG4gICAqIGxvZyB0aGUgbnVtYmVyIG9mIGltYWdlcyB3ZSBoYXZlIHJlY2VpdmVkXG4gICAqIEBvdmVycmlkZVxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gZGF0YSAtIGJpbmFyeSBkYXRhIHN0cmVhbWVkIGZyb20gdGhlIE1KcGVnIGNvbnN1bWVyXG4gICAqL1xuICB3cml0ZShkYXRhKSB7XG4gICAgdGhpcy5sYXN0Q2h1bmsgPSBkYXRhO1xuICAgIHRoaXMudXBkYXRlQ291bnQrKztcblxuICAgIGlmICh0aGlzLnJlZ2lzdGVyU3RhcnRTdWNjZXNzKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVyU3RhcnRTdWNjZXNzKCk7XG4gICAgICB0aGlzLnJlZ2lzdGVyU3RhcnRTdWNjZXNzID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1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
182
+ //# sourceMappingURL=mjpeg.js.map
@@ -1 +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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"}
1
+ {"version":3,"file":"mjpeg.js","sourceRoot":"","sources":["../../lib/mjpeg.js"],"names":[],"mappings":"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"}
@@ -1,16 +1,10 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
2
+ Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.mkdirp = void 0;
7
-
8
- require("source-map-support/register");
9
-
10
- var _fs = require("./fs");
11
-
12
- const {
13
- mkdirp
14
- } = _fs.fs;
4
+ const fs_1 = require("./fs");
5
+ /**
6
+ * @deprecated Use `fs.mkdirp` instead.
7
+ */
8
+ const { mkdirp } = fs_1.fs;
15
9
  exports.mkdirp = mkdirp;
16
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJta2RpcnAiLCJmcyJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9ta2RpcnAuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtmc30gZnJvbSAnLi9mcyc7XG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBgZnMubWtkaXJwYCBpbnN0ZWFkLlxuICovXG5jb25zdCB7bWtkaXJwfSA9IGZzO1xuZXhwb3J0IHtta2RpcnB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFJQSxNQUFNO0VBQUNBO0FBQUQsSUFBV0MsTUFBakIifQ==
10
+ //# sourceMappingURL=mkdirp.js.map
@@ -1 +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"}
1
+ {"version":3,"file":"mkdirp.js","sourceRoot":"","sources":["../../lib/mkdirp.js"],"names":[],"mappings":";;;AAAA,6BAAwB;AACxB;;GAEG;AACH,MAAM,EAAC,MAAM,EAAC,GAAG,OAAE,CAAC;AACZ,wBAAM"}
@@ -1 +1 @@
1
- {"version":3,"file":"net.d.ts","sourceRoot":"","sources":["../../lib/net.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UA6Sc,MAAM;;;;UACN,MAAM;;;;;;aAMN,KAAK;YACL,KAAK;aACL,KAAK;mBACL,KAAK;gBACL,KAAK;;;;;;;;;aAML,OAAO,MAAM,EAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;AA/JhC;;;;;;;;GAQG;AACH,sCALW,MAAM,aACN,MAAM,0FAEJ,QAAQ,IAAI,CAAC,CAyCzB;AAED;;;;;;;GAOG;AACH,wCALW,MAAM,WACN,MAAM,+EAkEhB"}
1
+ {"version":3,"file":"net.d.ts","sourceRoot":"","sources":["../../lib/net.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAsTc,MAAM;;;;UACN,MAAM;;;;;;aAMN,KAAK;YACL,KAAK;aACL,KAAK;mBACL,KAAK;gBACL,KAAK;;;;;;;;;aAML,OAAO,MAAM,EAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;AA/JhC;;;;;;;;GAQG;AACH,sCALW,MAAM,aACN,MAAM,0FAEJ,QAAQ,IAAI,CAAC,CAyCzB;AAED;;;;;;;GAOG;AACH,wCALW,MAAM,WACN,MAAM,+EAkEhB"}