@appium/support 3.1.11 → 4.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +132 -83
- package/build/lib/fs.d.ts +14 -3
- package/build/lib/fs.d.ts.map +1 -1
- package/build/lib/fs.js +13 -6
- package/build/lib/fs.js.map +1 -1
- package/build/lib/image-util.d.ts +5 -50
- package/build/lib/image-util.d.ts.map +1 -1
- package/build/lib/image-util.js +7 -146
- package/build/lib/image-util.js.map +1 -1
- package/build/lib/mjpeg.d.ts.map +1 -1
- package/build/lib/mjpeg.js +2 -3
- package/build/lib/mjpeg.js.map +1 -1
- package/lib/fs.js +14 -8
- package/lib/image-util.js +7 -171
- package/lib/mjpeg.js +2 -3
- package/package.json +9 -12
package/README.md
CHANGED
|
@@ -1,62 +1,112 @@
|
|
|
1
1
|
# appium-support
|
|
2
2
|
|
|
3
|
-
Utility functions used to support
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
3
|
+
Utility functions used to support Appium drivers and plugins.
|
|
4
|
+
|
|
5
|
+
# Usage in drivers and plugins
|
|
6
|
+
|
|
7
|
+
It is recommended to have Appium as a peer dependency in driver and plugin packages.
|
|
8
|
+
Add the following line to `peerDependencies` section of your module's `package.json`:
|
|
9
|
+
|
|
10
|
+
```js
|
|
11
|
+
"peerDependencies": {
|
|
12
|
+
"appium": "^<minimum_server_version>"
|
|
13
|
+
}
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Afterwards import it in your code similarly to the below example:
|
|
17
|
+
|
|
18
|
+
```js
|
|
19
|
+
import {timing, util} from 'appium/support';
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
# Usage in helper modules
|
|
23
|
+
|
|
24
|
+
If you want to use this module in a helper library, which is not a driver or a plugin,
|
|
25
|
+
then add the following line to `dependencies` section of your module's `package.json`:
|
|
26
|
+
|
|
27
|
+
```js
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"@appium/support": "<module_version>"
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Afterwards import it in your code similarly to the below example:
|
|
34
|
+
|
|
35
|
+
```js
|
|
36
|
+
import {timing, util} from '@appium/support';
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Categories
|
|
40
|
+
|
|
41
|
+
All utility functions are split into a bunch of different categories. Each category has its own file under the `lib` folder. All utility functions in these files are documented.
|
|
42
|
+
|
|
43
|
+
#### fs
|
|
44
|
+
|
|
45
|
+
Most of the functions there are just thin wrappers over utility functions available in [Promises API](https://nodejs.org/api/fs.html#promises-api).
|
|
46
|
+
|
|
47
|
+
#### env
|
|
48
|
+
|
|
49
|
+
Several helpers needed by the server to cope with internal dependencies and manifests.
|
|
50
|
+
|
|
51
|
+
#### console
|
|
52
|
+
|
|
53
|
+
Wrappers for the command line interface abstraction used by the Appium server.
|
|
54
|
+
|
|
55
|
+
#### image-util
|
|
56
|
+
|
|
57
|
+
Utilities to work with images. Use [sharp](https://github.com/lovell/sharp) under the hood.
|
|
58
|
+
|
|
59
|
+
#### log-internal
|
|
60
|
+
|
|
61
|
+
Utilities needed for internal Appium log config assistance.
|
|
62
|
+
|
|
63
|
+
#### logging
|
|
64
|
+
|
|
65
|
+
See [below](#logger)
|
|
66
|
+
|
|
67
|
+
#### mjpeg
|
|
68
|
+
|
|
69
|
+
Helpers needed to implement [MJPEG streaming](https://en.wikipedia.org/wiki/Motion_JPEG#Video_streaming).
|
|
70
|
+
|
|
71
|
+
#### net
|
|
72
|
+
|
|
73
|
+
Helpers needed for network interactions, for example, upload and download of files.
|
|
74
|
+
|
|
75
|
+
#### node
|
|
76
|
+
|
|
77
|
+
Set of Node.js-specific utility functions needed, for example, to ensure objects immutability or to calculate their sizes.
|
|
78
|
+
|
|
79
|
+
#### npm
|
|
80
|
+
|
|
81
|
+
Set of [npm](https://en.wikipedia.org/wiki/Npm_(software))-related helpers.
|
|
82
|
+
|
|
83
|
+
#### plist
|
|
84
|
+
|
|
85
|
+
Set of utilities used to read and write data from [plist](https://en.wikipedia.org/wiki/Property_List) files in javascript.
|
|
86
|
+
|
|
87
|
+
#### process
|
|
88
|
+
|
|
89
|
+
Helpers for interactions with system processes. These APIs don't support Windows.
|
|
90
|
+
|
|
91
|
+
#### system
|
|
92
|
+
|
|
93
|
+
Set of helper functions needed to determine properties of the current operating system.
|
|
94
|
+
|
|
95
|
+
#### tempdir
|
|
96
|
+
|
|
97
|
+
Set of helpers that allow interactions with temporary folders.
|
|
98
|
+
|
|
99
|
+
#### timing
|
|
100
|
+
|
|
101
|
+
Helpers that allow to measure execution time.
|
|
102
|
+
|
|
103
|
+
#### util
|
|
104
|
+
|
|
105
|
+
Miscellaneous utilities.
|
|
106
|
+
|
|
107
|
+
#### zip
|
|
108
|
+
|
|
109
|
+
Helpers that allow to work with archives in .ZIP format.
|
|
60
110
|
|
|
61
111
|
|
|
62
112
|
## logger
|
|
@@ -85,10 +135,9 @@ Will produce
|
|
|
85
135
|
warn mymodule a warning
|
|
86
136
|
```
|
|
87
137
|
|
|
88
|
-
|
|
89
138
|
### Environment variables
|
|
90
139
|
|
|
91
|
-
There are two environment variable flags that affect the way `
|
|
140
|
+
There are two environment variable flags that affect the way `logger` works.
|
|
92
141
|
|
|
93
142
|
`_TESTING`
|
|
94
143
|
|
|
@@ -108,43 +157,43 @@ There are two environment variable flags that affect the way `appium-base-driver
|
|
|
108
157
|
`log[level](message)`
|
|
109
158
|
|
|
110
159
|
- logs to `level`
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
160
|
+
```js
|
|
161
|
+
import { logger } from 'appium-support';
|
|
162
|
+
let log = logger.getLogger('mymodule');
|
|
114
163
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
164
|
+
log.info('hi!');
|
|
165
|
+
// => info mymodule hi!
|
|
166
|
+
```
|
|
118
167
|
|
|
119
168
|
`log.unwrap()`
|
|
120
169
|
|
|
121
170
|
- retrieves the underlying [npmlog](https://github.com/npm/npmlog) object, in order to manage how logging is done at a low level (e.g., changing output streams, retrieving an array of messages, adding log levels, etc.).
|
|
122
171
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
172
|
+
```js
|
|
173
|
+
import { getLogger } from 'appium-base-driver';
|
|
174
|
+
let log = getLogger('mymodule');
|
|
126
175
|
|
|
127
|
-
|
|
176
|
+
log.info('hi!');
|
|
128
177
|
|
|
129
|
-
|
|
178
|
+
let npmlogger = log.unwrap();
|
|
130
179
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
180
|
+
// any `npmlog` methods
|
|
181
|
+
let logs = npmlogger.record;
|
|
182
|
+
// logs === [ { id: 0, level: 'info', prefix: 'mymodule', message: 'hi!', messageRaw: [ 'hi!' ] }]
|
|
183
|
+
```
|
|
135
184
|
|
|
136
185
|
`log.errorAndThrow(error)`
|
|
137
186
|
|
|
138
187
|
- logs the error passed in, at `error` level, and then throws the error. If the error passed in is not an instance of [Error](https://nodejs.org/api/errors.html#errors_class_error) (either directly, or a subclass of `Error`) it will be wrapped in a generic `Error` object.
|
|
139
188
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
189
|
+
```js
|
|
190
|
+
import { getLogger } from 'appium-base-driver';
|
|
191
|
+
let log = getLogger('mymodule');
|
|
143
192
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
193
|
+
// previously there would be two lines
|
|
194
|
+
log.error('This is an error');
|
|
195
|
+
throw new Error('This is an error');
|
|
147
196
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
197
|
+
// now is compacted
|
|
198
|
+
log.errorAndThrow('This is an error');
|
|
199
|
+
```
|
package/build/lib/fs.d.ts
CHANGED
|
@@ -37,8 +37,20 @@ export namespace fs {
|
|
|
37
37
|
* @param {PathLike} path
|
|
38
38
|
*/
|
|
39
39
|
export function exists(path: import("fs").PathLike): Promise<boolean>;
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
/**
|
|
41
|
+
* Remove a directory and all its contents, recursively
|
|
42
|
+
* @param {PathLike} filepath
|
|
43
|
+
* @returns Promise<void>
|
|
44
|
+
* @see https://nodejs.org/api/fs.html#fspromisesrmpath-options
|
|
45
|
+
*/
|
|
46
|
+
export function rimraf(filepath: import("fs").PathLike): Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* Remove a directory and all its contents, recursively in sync
|
|
49
|
+
* @param {PathLike} filepath
|
|
50
|
+
* @returns undefined
|
|
51
|
+
* @see https://nodejs.org/api/fs.html#fsrmsyncpath-options
|
|
52
|
+
*/
|
|
53
|
+
export function rimrafSync(filepath: import("fs").PathLike): void;
|
|
42
54
|
/**
|
|
43
55
|
* Like Node.js' `fsPromises.mkdir()`, but will _not_ reject if the directory already exists.
|
|
44
56
|
*
|
|
@@ -148,7 +160,6 @@ export namespace fs {
|
|
|
148
160
|
import glob from "glob";
|
|
149
161
|
import mv from "mv";
|
|
150
162
|
import B from "bluebird";
|
|
151
|
-
import rimrafIdx from "rimraf";
|
|
152
163
|
import ncp from "ncp";
|
|
153
164
|
import which from "which";
|
|
154
165
|
import sanitize from "sanitize-filename";
|
package/build/lib/fs.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../lib/fs.js"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../lib/fs.js"],"names":[],"mappings":";;;;;yCAyYW,MAAM,eACN,OAAO,KACN,OAAO,GAAC,IAAI;;;uBAMX,OAAO,IAAI,EAAE,QAAQ;kEAMvB,MAAM,UACN,OAAO,GAAC,OAAO,SAAS,EAAE,gBAAgB,CAAC,OAAO,CAAC,qGAIjD,EAAE;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAC,CAAC;;IAvXlD;;;;;;;;OAQG;IACH,yEAOC;IAED;;;;;;;;OAQG;IACH,4EAUC;IAED;;;OAGG;IACH,sEAEC;IAED;;;;;OAKG;IACH,uEAEC;IAED;;;;;OAKG;IACH,kEAEC;IAED;;;;;;;OAOG;IACH,0IAQC;IACD;;;;;;;OAOG;IACH,6GAKC;IAED;;;;OAIG;IACH,sEAEC;IAKc,uFAAwD;;;IAYtD,uFAAsD;;;IAQvE;;;;;OAKG;IACH,uGAcC;IAED;;;;;;;OAOG;IACH,gFAEC;IAED;;;;OAIG;IACH,gFAEC;IAED;;;;;;;OAOG;IAEH,4GAwEC;IACD;;;;;;OAMG;IACH,oHAUC;IACD;;;;;;OAMG;IACH,8CASC;;;;;;;;;;;;IA+EA;;;OAOF"}
|
package/build/lib/fs.js
CHANGED
|
@@ -16,7 +16,6 @@ const ncp_1 = __importDefault(require("ncp"));
|
|
|
16
16
|
const path_1 = __importDefault(require("path"));
|
|
17
17
|
const pkg_dir_1 = __importDefault(require("pkg-dir"));
|
|
18
18
|
const read_pkg_1 = __importDefault(require("read-pkg"));
|
|
19
|
-
const rimraf_1 = __importDefault(require("rimraf"));
|
|
20
19
|
const sanitize_filename_1 = __importDefault(require("sanitize-filename"));
|
|
21
20
|
const which_1 = __importDefault(require("which"));
|
|
22
21
|
const logger_1 = __importDefault(require("./logger"));
|
|
@@ -75,14 +74,22 @@ const fs = {
|
|
|
75
74
|
},
|
|
76
75
|
/**
|
|
77
76
|
* Remove a directory and all its contents, recursively
|
|
78
|
-
* @
|
|
77
|
+
* @param {PathLike} filepath
|
|
78
|
+
* @returns Promise<void>
|
|
79
|
+
* @see https://nodejs.org/api/fs.html#fspromisesrmpath-options
|
|
79
80
|
*/
|
|
80
|
-
rimraf
|
|
81
|
+
async rimraf(filepath) {
|
|
82
|
+
return await fs_1.promises.rm(filepath, { recursive: true, force: true });
|
|
83
|
+
},
|
|
81
84
|
/**
|
|
82
|
-
*
|
|
83
|
-
* @
|
|
85
|
+
* Remove a directory and all its contents, recursively in sync
|
|
86
|
+
* @param {PathLike} filepath
|
|
87
|
+
* @returns undefined
|
|
88
|
+
* @see https://nodejs.org/api/fs.html#fsrmsyncpath-options
|
|
84
89
|
*/
|
|
85
|
-
rimrafSync
|
|
90
|
+
rimrafSync(filepath) {
|
|
91
|
+
return (0, fs_1.rmSync)(filepath, { recursive: true, force: true });
|
|
92
|
+
},
|
|
86
93
|
/**
|
|
87
94
|
* Like Node.js' `fsPromises.mkdir()`, but will _not_ reject if the directory already exists.
|
|
88
95
|
*
|
package/build/lib/fs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../lib/fs.js"],"names":[],"mappings":";AAAA,YAAY;;;;;;AAEZ,wDAAyB;AACzB,oDAA4B;AAC5B,
|
|
1
|
+
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../lib/fs.js"],"names":[],"mappings":"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"}
|
|
@@ -1,56 +1,11 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
export type AppiumJimp = Omit<Jimp, 'getBuffer'> & {
|
|
3
|
-
getBuffer: Jimp['getBufferAsync'];
|
|
4
|
-
};
|
|
5
|
-
export type Region = {
|
|
6
|
-
left: number;
|
|
7
|
-
top: number;
|
|
8
|
-
width: number;
|
|
9
|
-
height: number;
|
|
10
|
-
};
|
|
11
1
|
/**
|
|
12
2
|
* Crop the image by given rectangle (use base64 string as input and output)
|
|
13
3
|
*
|
|
14
|
-
* @param {string} base64Image The string with base64 encoded image
|
|
15
|
-
*
|
|
4
|
+
* @param {string} base64Image The string with base64 encoded image.
|
|
5
|
+
* Supports all image formats natively supported by Sharp library.
|
|
6
|
+
* @param {sharp.Region} rect The selected region of image
|
|
16
7
|
* @return {Promise<string>} base64 encoded string of cropped image
|
|
17
8
|
*/
|
|
18
|
-
export function cropBase64Image(base64Image: string, rect: Region): Promise<string>;
|
|
19
|
-
|
|
20
|
-
* Create a pngjs image from given base64 image
|
|
21
|
-
*
|
|
22
|
-
* @param {string} base64Image The string with base64 encoded image
|
|
23
|
-
* @return {Promise<PNG>} The image object
|
|
24
|
-
*/
|
|
25
|
-
export function base64ToImage(base64Image: string): Promise<PNG>;
|
|
26
|
-
/**
|
|
27
|
-
* Create a base64 string for given image object
|
|
28
|
-
*
|
|
29
|
-
* @param {PNG} image The image object
|
|
30
|
-
* @return {Promise<string>} The string with base64 encoded image
|
|
31
|
-
*/
|
|
32
|
-
export function imageToBase64(image: PNG): Promise<string>;
|
|
33
|
-
/**
|
|
34
|
-
* Crop the image by given rectangle
|
|
35
|
-
*
|
|
36
|
-
* @param {PNG} image The image to mutate by cropping
|
|
37
|
-
* @param {Region} rect The selected region of image
|
|
38
|
-
*/
|
|
39
|
-
export function cropImage(image: PNG, rect: Region): PNG;
|
|
40
|
-
/**
|
|
41
|
-
* Utility function to get a Jimp image object from buffer or base64 data. Jimp
|
|
42
|
-
* is a great library however it does IO in the constructor so it's not
|
|
43
|
-
* convenient for our async/await model.
|
|
44
|
-
*
|
|
45
|
-
* @param {Buffer|string} data - binary image buffer or base64-encoded image
|
|
46
|
-
* string
|
|
47
|
-
* @returns {Promise<AppiumJimp>} - the jimp image object
|
|
48
|
-
*/
|
|
49
|
-
export function getJimpImage(data: Buffer | string): Promise<AppiumJimp>;
|
|
50
|
-
export const MIME_JPEG: "image/jpeg";
|
|
51
|
-
export const MIME_PNG: "image/png";
|
|
52
|
-
export const MIME_BMP: "image/bmp";
|
|
53
|
-
import Jimp from "jimp";
|
|
54
|
-
import { PNG } from "pngjs";
|
|
55
|
-
import { Buffer } from "buffer";
|
|
9
|
+
export function cropBase64Image(base64Image: string, rect: sharp.Region): Promise<string>;
|
|
10
|
+
import sharp from "sharp";
|
|
56
11
|
//# sourceMappingURL=image-util.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image-util.d.ts","sourceRoot":"","sources":["../../lib/image-util.js"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"image-util.d.ts","sourceRoot":"","sources":["../../lib/image-util.js"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,6CALW,MAAM,QAEN,MAAM,MAAM,GACX,QAAQ,MAAM,CAAC,CAK1B"}
|
package/build/lib/image-util.js
CHANGED
|
@@ -3,158 +3,19 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
7
|
-
const
|
|
8
|
-
const jimp_1 = __importDefault(require("jimp"));
|
|
9
|
-
const buffer_1 = require("buffer");
|
|
10
|
-
const pngjs_1 = require("pngjs");
|
|
11
|
-
const bluebird_1 = __importDefault(require("bluebird"));
|
|
12
|
-
const BYTES_IN_PIXEL_BLOCK = 4;
|
|
13
|
-
const SCANLINE_FILTER_METHOD = 4;
|
|
14
|
-
const { MIME_JPEG, MIME_PNG, MIME_BMP } = jimp_1.default;
|
|
15
|
-
exports.MIME_JPEG = MIME_JPEG;
|
|
16
|
-
exports.MIME_PNG = MIME_PNG;
|
|
17
|
-
exports.MIME_BMP = MIME_BMP;
|
|
18
|
-
/**
|
|
19
|
-
* Utility function to get a Jimp image object from buffer or base64 data. Jimp
|
|
20
|
-
* is a great library however it does IO in the constructor so it's not
|
|
21
|
-
* convenient for our async/await model.
|
|
22
|
-
*
|
|
23
|
-
* @param {Buffer|string} data - binary image buffer or base64-encoded image
|
|
24
|
-
* string
|
|
25
|
-
* @returns {Promise<AppiumJimp>} - the jimp image object
|
|
26
|
-
*/
|
|
27
|
-
async function getJimpImage(data) {
|
|
28
|
-
return await new bluebird_1.default((resolve, reject) => {
|
|
29
|
-
if (!lodash_1.default.isString(data) && !buffer_1.Buffer.isBuffer(data)) {
|
|
30
|
-
return reject(new Error('Must initialize jimp object with string or buffer'));
|
|
31
|
-
}
|
|
32
|
-
const truncatedData = lodash_1.default.truncate(buffer_1.Buffer.isBuffer(data) ? data.toString('utf8') : data, { length: 50 });
|
|
33
|
-
new jimp_1.default(
|
|
34
|
-
// if data is a string, assume it is a base64-encoded image
|
|
35
|
-
buffer_1.Buffer.isBuffer(data) ? data : buffer_1.Buffer.from(String(data), 'base64'),
|
|
36
|
-
/**
|
|
37
|
-
* @param {Error?} err
|
|
38
|
-
* @param {AppiumJimp} imgObj
|
|
39
|
-
*/
|
|
40
|
-
(err, imgObj) => {
|
|
41
|
-
if (err) {
|
|
42
|
-
err.message = `The argument must be a valid base64-encoded image payload. ` +
|
|
43
|
-
`'${truncatedData}' was passed instead. Original error: ${err.message}`;
|
|
44
|
-
return reject(err);
|
|
45
|
-
}
|
|
46
|
-
if (!imgObj) {
|
|
47
|
-
return reject(new Error('Could not create jimp image from that data'));
|
|
48
|
-
}
|
|
49
|
-
imgObj.getBuffer = bluebird_1.default.promisify(imgObj.getBuffer.bind(imgObj), {
|
|
50
|
-
context: imgObj,
|
|
51
|
-
});
|
|
52
|
-
resolve(imgObj);
|
|
53
|
-
});
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
exports.getJimpImage = getJimpImage;
|
|
6
|
+
exports.cropBase64Image = void 0;
|
|
7
|
+
const sharp_1 = __importDefault(require("sharp"));
|
|
57
8
|
/**
|
|
58
9
|
* Crop the image by given rectangle (use base64 string as input and output)
|
|
59
10
|
*
|
|
60
|
-
* @param {string} base64Image The string with base64 encoded image
|
|
61
|
-
*
|
|
11
|
+
* @param {string} base64Image The string with base64 encoded image.
|
|
12
|
+
* Supports all image formats natively supported by Sharp library.
|
|
13
|
+
* @param {sharp.Region} rect The selected region of image
|
|
62
14
|
* @return {Promise<string>} base64 encoded string of cropped image
|
|
63
15
|
*/
|
|
64
16
|
async function cropBase64Image(base64Image, rect) {
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
return await imageToBase64(image);
|
|
17
|
+
const buf = await (0, sharp_1.default)(Buffer.from(base64Image, 'base64')).extract(rect).toBuffer();
|
|
18
|
+
return buf.toString('base64');
|
|
68
19
|
}
|
|
69
20
|
exports.cropBase64Image = cropBase64Image;
|
|
70
|
-
/**
|
|
71
|
-
* Create a pngjs image from given base64 image
|
|
72
|
-
*
|
|
73
|
-
* @param {string} base64Image The string with base64 encoded image
|
|
74
|
-
* @return {Promise<PNG>} The image object
|
|
75
|
-
*/
|
|
76
|
-
async function base64ToImage(base64Image) {
|
|
77
|
-
const imageBuffer = buffer_1.Buffer.from(base64Image, 'base64');
|
|
78
|
-
return await new bluebird_1.default((resolve, reject) => {
|
|
79
|
-
const image = new pngjs_1.PNG({ filterType: SCANLINE_FILTER_METHOD });
|
|
80
|
-
image.parse(imageBuffer, (err, image) => {
|
|
81
|
-
// eslint-disable-line promise/prefer-await-to-callbacks
|
|
82
|
-
if (err) {
|
|
83
|
-
return reject(err);
|
|
84
|
-
}
|
|
85
|
-
resolve(image);
|
|
86
|
-
});
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
exports.base64ToImage = base64ToImage;
|
|
90
|
-
/**
|
|
91
|
-
* Create a base64 string for given image object
|
|
92
|
-
*
|
|
93
|
-
* @param {PNG} image The image object
|
|
94
|
-
* @return {Promise<string>} The string with base64 encoded image
|
|
95
|
-
*/
|
|
96
|
-
async function imageToBase64(image) {
|
|
97
|
-
return await new bluebird_1.default((resolve, reject) => {
|
|
98
|
-
const chunks = [];
|
|
99
|
-
image
|
|
100
|
-
.pack()
|
|
101
|
-
.on('data', (chunk) => chunks.push(chunk))
|
|
102
|
-
.on('end', () => {
|
|
103
|
-
resolve(buffer_1.Buffer.concat(chunks).toString('base64'));
|
|
104
|
-
})
|
|
105
|
-
.on('error', (err) => {
|
|
106
|
-
// eslint-disable-line promise/prefer-await-to-callbacks
|
|
107
|
-
reject(err);
|
|
108
|
-
});
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
exports.imageToBase64 = imageToBase64;
|
|
112
|
-
/**
|
|
113
|
-
* Crop the image by given rectangle
|
|
114
|
-
*
|
|
115
|
-
* @param {PNG} image The image to mutate by cropping
|
|
116
|
-
* @param {Region} rect The selected region of image
|
|
117
|
-
*/
|
|
118
|
-
function cropImage(image, rect) {
|
|
119
|
-
const imageRect = { width: image.width, height: image.height };
|
|
120
|
-
const interRect = getRectIntersection(rect, imageRect);
|
|
121
|
-
if (interRect.width < rect.width || interRect.height < rect.height) {
|
|
122
|
-
throw new Error(`Cannot crop ${JSON.stringify(rect)} from ${JSON.stringify(imageRect)} because the intersection between them was not the size of the rect`);
|
|
123
|
-
}
|
|
124
|
-
const firstVerticalPixel = interRect.top;
|
|
125
|
-
const lastVerticalPixel = interRect.top + interRect.height;
|
|
126
|
-
const firstHorizontalPixel = interRect.left;
|
|
127
|
-
const lastHorizontalPixel = interRect.left + interRect.width;
|
|
128
|
-
const croppedArray = [];
|
|
129
|
-
for (let y = firstVerticalPixel; y < lastVerticalPixel; y++) {
|
|
130
|
-
for (let x = firstHorizontalPixel; x < lastHorizontalPixel; x++) {
|
|
131
|
-
const firstByteIdxInPixelBlock = (imageRect.width * y + x) << 2;
|
|
132
|
-
for (let byteIdx = 0; byteIdx < BYTES_IN_PIXEL_BLOCK; byteIdx++) {
|
|
133
|
-
croppedArray.push(image.data[firstByteIdxInPixelBlock + byteIdx]);
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
image.data = buffer_1.Buffer.from(croppedArray);
|
|
138
|
-
image.width = interRect.width;
|
|
139
|
-
image.height = interRect.height;
|
|
140
|
-
return image;
|
|
141
|
-
}
|
|
142
|
-
exports.cropImage = cropImage;
|
|
143
|
-
function getRectIntersection(rect, imageSize) {
|
|
144
|
-
const left = rect.left >= imageSize.width ? imageSize.width : rect.left;
|
|
145
|
-
const top = rect.top >= imageSize.height ? imageSize.height : rect.top;
|
|
146
|
-
const width = imageSize.width >= left + rect.width ? rect.width : imageSize.width - left;
|
|
147
|
-
const height = imageSize.height >= top + rect.height ? rect.height : imageSize.height - top;
|
|
148
|
-
return { left, top, width, height };
|
|
149
|
-
}
|
|
150
|
-
/**
|
|
151
|
-
* @typedef {Omit<Jimp,'getBuffer'> & {getBuffer: Jimp['getBufferAsync']}} AppiumJimp
|
|
152
|
-
*/
|
|
153
|
-
/**
|
|
154
|
-
* @typedef Region
|
|
155
|
-
* @property {number} left
|
|
156
|
-
* @property {number} top
|
|
157
|
-
* @property {number} width
|
|
158
|
-
* @property {number} height
|
|
159
|
-
*/
|
|
160
21
|
//# sourceMappingURL=image-util.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image-util.js","sourceRoot":"","sources":["../../lib/image-util.js"],"names":[],"mappings":";;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"image-util.js","sourceRoot":"","sources":["../../lib/image-util.js"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAE1B;;;;;;;GAOG;AACI,KAAK,UAAU,eAAe,CAAC,WAAW,EAAE,IAAI;IACrD,MAAM,GAAG,GAAG,MAAM,IAAA,eAAK,EAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;IACrF,OAAO,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC;AAHD,0CAGC"}
|
package/build/lib/mjpeg.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mjpeg.d.ts","sourceRoot":"","sources":["../../lib/mjpeg.js"],"names":[],"mappings":"AA+BA,+DAA+D;AAC/D;IAME;;;;;;OAMG;IACH,sBALW,MAAM,iDAGN,MAAM,EAQhB;IAlBD;;OAEG;IACH,aAFU,MAAM,CAEA;IAYd,uBAAgC;IAChC,YAAmB;IAIrB;;;;;OAKG;IACH,qCAKC;IAED;;;;;OAKG;IACH,gBAHa,QAAQ,MAAM,QAAE,
|
|
1
|
+
{"version":3,"file":"mjpeg.d.ts","sourceRoot":"","sources":["../../lib/mjpeg.js"],"names":[],"mappings":"AA+BA,+DAA+D;AAC/D;IAME;;;;;;OAMG;IACH,sBALW,MAAM,iDAGN,MAAM,EAQhB;IAlBD;;OAEG;IACH,aAFU,MAAM,CAEA;IAYd,uBAAgC;IAChC,YAAmB;IAIrB;;;;;OAKG;IACH,qCAKC;IAED;;;;;OAKG;IACH,gBAHa,QAAQ,MAAM,QAAE,CAc5B;IAED;;;;;OAKG;IACH,sBAHa,QAAQ,MAAM,QAAE,CAM5B;IAED;;OAEG;IACH,cAOC;IANC,4EAAgC;IAChC,iEAAgC;IAChC,oBAA0B;IAC1B,cAAoB;IACpB,qCAAqB;IAIvB;;OAEG;IACH,6CAwDC;IAED;;;OAGG;IACH,aASC;IAED;;;;;OAKG;IACH,qBAFW,MAAM,WAYhB;CACF"}
|
package/build/lib/mjpeg.js
CHANGED
|
@@ -7,7 +7,7 @@ exports.MJpegStream = void 0;
|
|
|
7
7
|
const lodash_1 = __importDefault(require("lodash"));
|
|
8
8
|
const logger_1 = __importDefault(require("./logger"));
|
|
9
9
|
const bluebird_1 = __importDefault(require("bluebird"));
|
|
10
|
-
const
|
|
10
|
+
const sharp_1 = __importDefault(require("sharp"));
|
|
11
11
|
const stream_1 = require("stream");
|
|
12
12
|
const node_1 = require("./node");
|
|
13
13
|
const axios_1 = __importDefault(require("axios"));
|
|
@@ -73,8 +73,7 @@ class MJpegStream extends stream_1.Writable {
|
|
|
73
73
|
return null;
|
|
74
74
|
}
|
|
75
75
|
try {
|
|
76
|
-
|
|
77
|
-
return await jpg.getBuffer(image_util_1.MIME_PNG);
|
|
76
|
+
return await (0, sharp_1.default)(lastChunk).png().toBuffer();
|
|
78
77
|
}
|
|
79
78
|
catch (e) {
|
|
80
79
|
return null;
|
package/build/lib/mjpeg.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mjpeg.js","sourceRoot":"","sources":["../../lib/mjpeg.js"],"names":[],"mappings":";;;;;;AAAA,oDAAuB;AACvB,sDAA2B;AAC3B,wDAAyB;AACzB,
|
|
1
|
+
{"version":3,"file":"mjpeg.js","sourceRoot":"","sources":["../../lib/mjpeg.js"],"names":[],"mappings":"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"}
|
package/lib/fs.js
CHANGED
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
promises as fsPromises,
|
|
11
11
|
read,
|
|
12
12
|
write,
|
|
13
|
+
rmSync,
|
|
13
14
|
open,
|
|
14
15
|
} from 'fs';
|
|
15
16
|
import glob from 'glob';
|
|
@@ -20,7 +21,6 @@ import ncp from 'ncp';
|
|
|
20
21
|
import path from 'path';
|
|
21
22
|
import pkgDir from 'pkg-dir';
|
|
22
23
|
import readPkg from 'read-pkg';
|
|
23
|
-
import rimrafIdx from 'rimraf';
|
|
24
24
|
import sanitize from 'sanitize-filename';
|
|
25
25
|
import which from 'which';
|
|
26
26
|
import log from './logger';
|
|
@@ -84,17 +84,23 @@ const fs = {
|
|
|
84
84
|
|
|
85
85
|
/**
|
|
86
86
|
* Remove a directory and all its contents, recursively
|
|
87
|
-
* @
|
|
87
|
+
* @param {PathLike} filepath
|
|
88
|
+
* @returns Promise<void>
|
|
89
|
+
* @see https://nodejs.org/api/fs.html#fspromisesrmpath-options
|
|
88
90
|
*/
|
|
89
|
-
rimraf
|
|
90
|
-
|
|
91
|
-
|
|
91
|
+
async rimraf(filepath) {
|
|
92
|
+
return await fsPromises.rm(filepath, {recursive: true, force: true});
|
|
93
|
+
},
|
|
92
94
|
|
|
93
95
|
/**
|
|
94
|
-
*
|
|
95
|
-
* @
|
|
96
|
+
* Remove a directory and all its contents, recursively in sync
|
|
97
|
+
* @param {PathLike} filepath
|
|
98
|
+
* @returns undefined
|
|
99
|
+
* @see https://nodejs.org/api/fs.html#fsrmsyncpath-options
|
|
96
100
|
*/
|
|
97
|
-
rimrafSync
|
|
101
|
+
rimrafSync(filepath) {
|
|
102
|
+
return rmSync(filepath, {recursive: true, force: true});
|
|
103
|
+
},
|
|
98
104
|
|
|
99
105
|
/**
|
|
100
106
|
* Like Node.js' `fsPromises.mkdir()`, but will _not_ reject if the directory already exists.
|
package/lib/image-util.js
CHANGED
|
@@ -1,178 +1,14 @@
|
|
|
1
|
-
import
|
|
2
|
-
import Jimp from 'jimp';
|
|
3
|
-
import {Buffer} from 'buffer';
|
|
4
|
-
import {PNG} from 'pngjs';
|
|
5
|
-
import B from 'bluebird';
|
|
6
|
-
|
|
7
|
-
const BYTES_IN_PIXEL_BLOCK = 4;
|
|
8
|
-
const SCANLINE_FILTER_METHOD = 4;
|
|
9
|
-
const {MIME_JPEG, MIME_PNG, MIME_BMP} = Jimp;
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Utility function to get a Jimp image object from buffer or base64 data. Jimp
|
|
13
|
-
* is a great library however it does IO in the constructor so it's not
|
|
14
|
-
* convenient for our async/await model.
|
|
15
|
-
*
|
|
16
|
-
* @param {Buffer|string} data - binary image buffer or base64-encoded image
|
|
17
|
-
* string
|
|
18
|
-
* @returns {Promise<AppiumJimp>} - the jimp image object
|
|
19
|
-
*/
|
|
20
|
-
async function getJimpImage(data) {
|
|
21
|
-
return await new B((resolve, reject) => {
|
|
22
|
-
if (!_.isString(data) && !Buffer.isBuffer(data)) {
|
|
23
|
-
return reject(new Error('Must initialize jimp object with string or buffer'));
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
const truncatedData = _.truncate(
|
|
27
|
-
Buffer.isBuffer(data) ? data.toString('utf8') : data,
|
|
28
|
-
{length: 50}
|
|
29
|
-
);
|
|
30
|
-
new Jimp(
|
|
31
|
-
// if data is a string, assume it is a base64-encoded image
|
|
32
|
-
Buffer.isBuffer(data) ? data : Buffer.from(String(data), 'base64'),
|
|
33
|
-
/**
|
|
34
|
-
* @param {Error?} err
|
|
35
|
-
* @param {AppiumJimp} imgObj
|
|
36
|
-
*/
|
|
37
|
-
(err, imgObj) => {
|
|
38
|
-
if (err) {
|
|
39
|
-
err.message = `The argument must be a valid base64-encoded image payload. ` +
|
|
40
|
-
`'${truncatedData}' was passed instead. Original error: ${err.message}`;
|
|
41
|
-
return reject(err);
|
|
42
|
-
}
|
|
43
|
-
if (!imgObj) {
|
|
44
|
-
return reject(new Error('Could not create jimp image from that data'));
|
|
45
|
-
}
|
|
46
|
-
imgObj.getBuffer = B.promisify(imgObj.getBuffer.bind(imgObj), {
|
|
47
|
-
context: imgObj,
|
|
48
|
-
});
|
|
49
|
-
resolve(imgObj);
|
|
50
|
-
}
|
|
51
|
-
);
|
|
52
|
-
});
|
|
53
|
-
}
|
|
1
|
+
import sharp from 'sharp';
|
|
54
2
|
|
|
55
3
|
/**
|
|
56
4
|
* Crop the image by given rectangle (use base64 string as input and output)
|
|
57
5
|
*
|
|
58
|
-
* @param {string} base64Image The string with base64 encoded image
|
|
59
|
-
*
|
|
6
|
+
* @param {string} base64Image The string with base64 encoded image.
|
|
7
|
+
* Supports all image formats natively supported by Sharp library.
|
|
8
|
+
* @param {sharp.Region} rect The selected region of image
|
|
60
9
|
* @return {Promise<string>} base64 encoded string of cropped image
|
|
61
10
|
*/
|
|
62
|
-
async function cropBase64Image(base64Image, rect) {
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
return await imageToBase64(image);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Create a pngjs image from given base64 image
|
|
70
|
-
*
|
|
71
|
-
* @param {string} base64Image The string with base64 encoded image
|
|
72
|
-
* @return {Promise<PNG>} The image object
|
|
73
|
-
*/
|
|
74
|
-
async function base64ToImage(base64Image) {
|
|
75
|
-
const imageBuffer = Buffer.from(base64Image, 'base64');
|
|
76
|
-
return await new B((resolve, reject) => {
|
|
77
|
-
const image = new PNG({filterType: SCANLINE_FILTER_METHOD});
|
|
78
|
-
image.parse(imageBuffer, (err, image) => {
|
|
79
|
-
// eslint-disable-line promise/prefer-await-to-callbacks
|
|
80
|
-
if (err) {
|
|
81
|
-
return reject(err);
|
|
82
|
-
}
|
|
83
|
-
resolve(image);
|
|
84
|
-
});
|
|
85
|
-
});
|
|
11
|
+
export async function cropBase64Image(base64Image, rect) {
|
|
12
|
+
const buf = await sharp(Buffer.from(base64Image, 'base64')).extract(rect).toBuffer();
|
|
13
|
+
return buf.toString('base64');
|
|
86
14
|
}
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Create a base64 string for given image object
|
|
90
|
-
*
|
|
91
|
-
* @param {PNG} image The image object
|
|
92
|
-
* @return {Promise<string>} The string with base64 encoded image
|
|
93
|
-
*/
|
|
94
|
-
async function imageToBase64(image) {
|
|
95
|
-
return await new B((resolve, reject) => {
|
|
96
|
-
const chunks = [];
|
|
97
|
-
image
|
|
98
|
-
.pack()
|
|
99
|
-
.on('data', (chunk) => chunks.push(chunk))
|
|
100
|
-
.on('end', () => {
|
|
101
|
-
resolve(Buffer.concat(chunks).toString('base64'));
|
|
102
|
-
})
|
|
103
|
-
.on('error', (err) => {
|
|
104
|
-
// eslint-disable-line promise/prefer-await-to-callbacks
|
|
105
|
-
reject(err);
|
|
106
|
-
});
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
/**
|
|
111
|
-
* Crop the image by given rectangle
|
|
112
|
-
*
|
|
113
|
-
* @param {PNG} image The image to mutate by cropping
|
|
114
|
-
* @param {Region} rect The selected region of image
|
|
115
|
-
*/
|
|
116
|
-
function cropImage(image, rect) {
|
|
117
|
-
const imageRect = {width: image.width, height: image.height};
|
|
118
|
-
const interRect = getRectIntersection(rect, imageRect);
|
|
119
|
-
if (interRect.width < rect.width || interRect.height < rect.height) {
|
|
120
|
-
throw new Error(
|
|
121
|
-
`Cannot crop ${JSON.stringify(rect)} from ${JSON.stringify(
|
|
122
|
-
imageRect
|
|
123
|
-
)} because the intersection between them was not the size of the rect`
|
|
124
|
-
);
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
const firstVerticalPixel = interRect.top;
|
|
128
|
-
const lastVerticalPixel = interRect.top + interRect.height;
|
|
129
|
-
|
|
130
|
-
const firstHorizontalPixel = interRect.left;
|
|
131
|
-
const lastHorizontalPixel = interRect.left + interRect.width;
|
|
132
|
-
|
|
133
|
-
const croppedArray = [];
|
|
134
|
-
for (let y = firstVerticalPixel; y < lastVerticalPixel; y++) {
|
|
135
|
-
for (let x = firstHorizontalPixel; x < lastHorizontalPixel; x++) {
|
|
136
|
-
const firstByteIdxInPixelBlock = (imageRect.width * y + x) << 2;
|
|
137
|
-
for (let byteIdx = 0; byteIdx < BYTES_IN_PIXEL_BLOCK; byteIdx++) {
|
|
138
|
-
croppedArray.push(image.data[firstByteIdxInPixelBlock + byteIdx]);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
image.data = Buffer.from(croppedArray);
|
|
144
|
-
image.width = interRect.width;
|
|
145
|
-
image.height = interRect.height;
|
|
146
|
-
return image;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
function getRectIntersection(rect, imageSize) {
|
|
150
|
-
const left = rect.left >= imageSize.width ? imageSize.width : rect.left;
|
|
151
|
-
const top = rect.top >= imageSize.height ? imageSize.height : rect.top;
|
|
152
|
-
const width = imageSize.width >= left + rect.width ? rect.width : imageSize.width - left;
|
|
153
|
-
const height = imageSize.height >= top + rect.height ? rect.height : imageSize.height - top;
|
|
154
|
-
return {left, top, width, height};
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
export {
|
|
158
|
-
cropBase64Image,
|
|
159
|
-
base64ToImage,
|
|
160
|
-
imageToBase64,
|
|
161
|
-
cropImage,
|
|
162
|
-
getJimpImage,
|
|
163
|
-
MIME_JPEG,
|
|
164
|
-
MIME_PNG,
|
|
165
|
-
MIME_BMP,
|
|
166
|
-
};
|
|
167
|
-
|
|
168
|
-
/**
|
|
169
|
-
* @typedef {Omit<Jimp,'getBuffer'> & {getBuffer: Jimp['getBufferAsync']}} AppiumJimp
|
|
170
|
-
*/
|
|
171
|
-
|
|
172
|
-
/**
|
|
173
|
-
* @typedef Region
|
|
174
|
-
* @property {number} left
|
|
175
|
-
* @property {number} top
|
|
176
|
-
* @property {number} width
|
|
177
|
-
* @property {number} height
|
|
178
|
-
*/
|
package/lib/mjpeg.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import _ from 'lodash';
|
|
2
2
|
import log from './logger';
|
|
3
3
|
import B from 'bluebird';
|
|
4
|
-
import
|
|
4
|
+
import sharp from 'sharp';
|
|
5
5
|
import {Writable} from 'stream';
|
|
6
6
|
import {requirePackage} from './node';
|
|
7
7
|
import axios from 'axios';
|
|
@@ -77,8 +77,7 @@ class MJpegStream extends Writable {
|
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
try {
|
|
80
|
-
|
|
81
|
-
return await jpg.getBuffer(MIME_PNG);
|
|
80
|
+
return await sharp(lastChunk).png().toBuffer();
|
|
82
81
|
} catch (e) {
|
|
83
82
|
return null;
|
|
84
83
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@appium/support",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.1",
|
|
4
4
|
"description": "Support libs used across appium packages",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"automation",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
44
|
"@appium/tsconfig": "^0.3.0",
|
|
45
|
-
"@appium/types": "^0.11.
|
|
45
|
+
"@appium/types": "^0.11.1",
|
|
46
46
|
"@colors/colors": "1.5.0",
|
|
47
47
|
"@types/archiver": "5.3.2",
|
|
48
48
|
"@types/base64-stream": "1.0.2",
|
|
@@ -55,15 +55,14 @@
|
|
|
55
55
|
"@types/ncp": "2.0.5",
|
|
56
56
|
"@types/npmlog": "4.1.4",
|
|
57
57
|
"@types/pluralize": "0.0.29",
|
|
58
|
-
"@types/pngjs": "6.0.1",
|
|
59
|
-
"@types/rimraf": "3.0.2",
|
|
60
58
|
"@types/semver": "7.3.13",
|
|
61
59
|
"@types/shell-quote": "1.7.1",
|
|
62
60
|
"@types/supports-color": "8.1.1",
|
|
63
61
|
"@types/teen_process": "2.0.0",
|
|
64
62
|
"@types/uuid": "9.0.1",
|
|
63
|
+
"@types/which": "3.0.0",
|
|
65
64
|
"archiver": "5.3.1",
|
|
66
|
-
"axios": "1.
|
|
65
|
+
"axios": "1.4.0",
|
|
67
66
|
"base64-stream": "1.0.0",
|
|
68
67
|
"bluebird": "3.7.2",
|
|
69
68
|
"bplist-creator": "0.1.1",
|
|
@@ -71,7 +70,6 @@
|
|
|
71
70
|
"form-data": "4.0.0",
|
|
72
71
|
"get-stream": "6.0.1",
|
|
73
72
|
"glob": "8.1.0",
|
|
74
|
-
"jimp": "0.22.7",
|
|
75
73
|
"jsftp": "2.1.3",
|
|
76
74
|
"klaw": "4.1.0",
|
|
77
75
|
"lockfile": "1.0.4",
|
|
@@ -85,19 +83,18 @@
|
|
|
85
83
|
"pkg-dir": "5.0.0",
|
|
86
84
|
"plist": "3.0.6",
|
|
87
85
|
"pluralize": "8.0.0",
|
|
88
|
-
"pngjs": "7.0.0",
|
|
89
86
|
"read-pkg": "5.2.0",
|
|
90
87
|
"resolve-from": "5.0.0",
|
|
91
|
-
"rimraf": "3.0.2",
|
|
92
88
|
"sanitize-filename": "1.6.3",
|
|
93
|
-
"semver": "7.
|
|
89
|
+
"semver": "7.5.0",
|
|
90
|
+
"sharp": "0.32.1",
|
|
94
91
|
"shell-quote": "1.8.1",
|
|
95
92
|
"source-map-support": "0.5.21",
|
|
96
93
|
"supports-color": "8.1.1",
|
|
97
94
|
"teen_process": "2.0.2",
|
|
98
|
-
"type-fest": "3.
|
|
95
|
+
"type-fest": "3.10.0",
|
|
99
96
|
"uuid": "9.0.0",
|
|
100
|
-
"which": "3.0.
|
|
97
|
+
"which": "3.0.1",
|
|
101
98
|
"yauzl": "2.10.0"
|
|
102
99
|
},
|
|
103
100
|
"engines": {
|
|
@@ -107,7 +104,7 @@
|
|
|
107
104
|
"publishConfig": {
|
|
108
105
|
"access": "public"
|
|
109
106
|
},
|
|
110
|
-
"gitHead": "
|
|
107
|
+
"gitHead": "ee365ad1687d3b4e13a43a737e45110c74e59235",
|
|
111
108
|
"typedoc": {
|
|
112
109
|
"entryPoint": "./lib/index.js"
|
|
113
110
|
}
|