@appium/support 2.57.4 → 2.59.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.
Files changed (68) hide show
  1. package/build/lib/console.d.ts +110 -0
  2. package/build/lib/console.d.ts.map +1 -0
  3. package/build/lib/console.js +113 -0
  4. package/build/lib/env.d.ts.map +1 -1
  5. package/build/lib/env.js +1 -1
  6. package/build/lib/fs.d.ts.map +1 -1
  7. package/build/lib/fs.js +1 -1
  8. package/build/lib/image-util.d.ts.map +1 -1
  9. package/build/lib/image-util.js +1 -1
  10. package/build/lib/index.d.ts +3 -1
  11. package/build/lib/index.js +8 -3
  12. package/build/lib/log-internal.d.ts.map +1 -1
  13. package/build/lib/log-internal.js +1 -1
  14. package/build/lib/logger.d.ts +1 -1
  15. package/build/lib/logger.d.ts.map +1 -1
  16. package/build/lib/logger.js +1 -1
  17. package/build/lib/logging.d.ts +11 -4
  18. package/build/lib/logging.d.ts.map +1 -1
  19. package/build/lib/logging.js +7 -6
  20. package/build/lib/mjpeg.d.ts.map +1 -1
  21. package/build/lib/mjpeg.js +1 -1
  22. package/build/lib/mkdirp.js +1 -1
  23. package/build/lib/net.d.ts +5 -2
  24. package/build/lib/net.d.ts.map +1 -1
  25. package/build/lib/net.js +1 -1
  26. package/build/lib/node.d.ts +14 -0
  27. package/build/lib/node.d.ts.map +1 -1
  28. package/build/lib/node.js +22 -1
  29. package/build/lib/npm.d.ts.map +1 -1
  30. package/build/lib/npm.js +1 -1
  31. package/build/lib/plist.d.ts +1 -1
  32. package/build/lib/plist.d.ts.map +1 -1
  33. package/build/lib/plist.js +1 -1
  34. package/build/lib/process.d.ts.map +1 -1
  35. package/build/lib/process.js +1 -1
  36. package/build/lib/system.js +1 -1
  37. package/build/lib/tempdir.d.ts.map +1 -1
  38. package/build/lib/tempdir.js +1 -1
  39. package/build/lib/timing.d.ts.map +1 -1
  40. package/build/lib/timing.js +1 -1
  41. package/build/lib/util.d.ts +19 -2
  42. package/build/lib/util.d.ts.map +1 -1
  43. package/build/lib/util.js +3 -7
  44. package/build/lib/zip.d.ts +5 -5
  45. package/build/lib/zip.d.ts.map +1 -1
  46. package/build/lib/zip.js +2 -2
  47. package/build/tsconfig.tsbuildinfo +1 -1
  48. package/lib/console.js +173 -0
  49. package/lib/env.js +12 -14
  50. package/lib/fs.js +87 -62
  51. package/lib/image-util.js +50 -32
  52. package/lib/index.js +39 -8
  53. package/lib/log-internal.js +16 -11
  54. package/lib/logger.js +1 -1
  55. package/lib/logging.js +32 -30
  56. package/lib/mjpeg.js +32 -27
  57. package/lib/mkdirp.js +3 -3
  58. package/lib/net.js +60 -52
  59. package/lib/node.js +50 -16
  60. package/lib/npm.js +50 -47
  61. package/lib/plist.js +34 -18
  62. package/lib/process.js +8 -6
  63. package/lib/system.js +8 -8
  64. package/lib/tempdir.js +14 -9
  65. package/lib/timing.js +12 -15
  66. package/lib/util.js +121 -72
  67. package/lib/zip.js +88 -92
  68. package/package.json +11 -16
package/lib/zip.js CHANGED
@@ -2,17 +2,17 @@ import _ from 'lodash';
2
2
  import B from 'bluebird';
3
3
  import yauzl from 'yauzl';
4
4
  import archiver from 'archiver';
5
- import { createWriteStream } from 'fs';
5
+ import {createWriteStream} from 'fs';
6
6
  import path from 'path';
7
7
  import stream from 'stream';
8
8
  import fs from './fs';
9
- import { isWindows } from './system';
10
- import { Base64Encode } from 'base64-stream';
11
- import { toReadableSizeString, GiB } from './util';
9
+ import {isWindows} from './system';
10
+ import {Base64Encode} from 'base64-stream';
11
+ import {toReadableSizeString, GiB} from './util';
12
12
  import Timer from './timing';
13
13
  import log from './logger';
14
14
  import getStream from 'get-stream';
15
- import { exec } from 'teen_process';
15
+ import {exec} from 'teen_process';
16
16
 
17
17
  /**
18
18
  * @type {(path: string, options?: yauzl.Options) => Promise<yauzl.ZipFile>}
@@ -32,21 +32,20 @@ class ZipExtractor {
32
32
  /** @type {yauzl.ZipFile} */
33
33
  zipfile;
34
34
 
35
- constructor (sourcePath, opts = {}) {
35
+ constructor(sourcePath, opts = {}) {
36
36
  this.zipPath = sourcePath;
37
37
  this.opts = opts;
38
38
  this.canceled = false;
39
39
  }
40
40
 
41
- extractFileName (entry) {
42
- return _.isBuffer(entry.fileName) ? entry.fileName.toString(this.opts.fileNamesEncoding) : entry.fileName;
41
+ extractFileName(entry) {
42
+ return _.isBuffer(entry.fileName)
43
+ ? entry.fileName.toString(this.opts.fileNamesEncoding)
44
+ : entry.fileName;
43
45
  }
44
46
 
45
- async extract () {
46
- const {
47
- dir,
48
- fileNamesEncoding,
49
- } = this.opts;
47
+ async extract() {
48
+ const {dir, fileNamesEncoding} = this.opts;
50
49
  this.zipfile = await openZip(this.zipPath, {
51
50
  lazyEntries: true,
52
51
  // https://github.com/thejoshwolfe/yauzl/commit/cc7455ac789ba84973184e5ebde0581cdc4c3b39#diff-04c6e90faac2675aa89e2176d2eec7d8R95
@@ -86,7 +85,9 @@ class ZipExtractor {
86
85
  const relativeDestDir = path.relative(dir, canonicalDestDir);
87
86
 
88
87
  if (relativeDestDir.split(path.sep).includes('..')) {
89
- new Error(`Out of bound path "${canonicalDestDir}" found while processing file ${fileName}`);
88
+ new Error(
89
+ `Out of bound path "${canonicalDestDir}" found while processing file ${fileName}`
90
+ );
90
91
  }
91
92
 
92
93
  await this.extractEntry(entry);
@@ -100,32 +101,31 @@ class ZipExtractor {
100
101
  });
101
102
  }
102
103
 
103
- async extractEntry (entry) {
104
+ async extractEntry(entry) {
104
105
  if (this.canceled) {
105
106
  return;
106
107
  }
107
108
 
108
- const {
109
- dir,
110
- } = this.opts;
109
+ const {dir} = this.opts;
111
110
 
112
111
  const fileName = this.extractFileName(entry);
113
112
  const dest = path.join(dir, fileName);
114
113
 
115
114
  // convert external file attr int into a fs stat mode int
116
- const mode = (entry.externalFileAttributes >> 16) & 0xFFFF;
115
+ const mode = (entry.externalFileAttributes >> 16) & 0xffff;
117
116
  // check if it's a symlink or dir (using stat mode constants)
118
117
  const isSymlink = (mode & IFMT) === IFLNK;
119
- const isDir = (mode & IFMT) === IFDIR
118
+ const isDir =
119
+ (mode & IFMT) === IFDIR ||
120
120
  // Failsafe, borrowed from jsZip
121
- || fileName.endsWith('/')
121
+ fileName.endsWith('/') ||
122
122
  // check for windows weird way of specifying a directory
123
123
  // https://github.com/maxogden/extract-zip/issues/13#issuecomment-154494566
124
- || (entry.versionMadeBy >> 8 === 0 && entry.externalFileAttributes === 16);
124
+ (entry.versionMadeBy >> 8 === 0 && entry.externalFileAttributes === 16);
125
125
  const procMode = this.getExtractedMode(mode, isDir) & 0o777;
126
126
  // always ensure folders are created
127
127
  const destDir = isDir ? dest : path.dirname(dest);
128
- const mkdirOptions = { recursive: true };
128
+ const mkdirOptions = {recursive: true};
129
129
  if (isDir) {
130
130
  mkdirOptions.mode = procMode;
131
131
  }
@@ -141,15 +141,12 @@ class ZipExtractor {
141
141
  const link = await getStream(readStream);
142
142
  await fs.symlink(link, dest);
143
143
  } else {
144
- await pipeline(readStream, fs.createWriteStream(dest, { mode: procMode }));
144
+ await pipeline(readStream, fs.createWriteStream(dest, {mode: procMode}));
145
145
  }
146
146
  }
147
147
 
148
- getExtractedMode (entryMode, isDir) {
149
- const {
150
- defaultDirMode,
151
- defaultFileMode,
152
- } = this.opts;
148
+ getExtractedMode(entryMode, isDir) {
149
+ const {defaultDirMode, defaultFileMode} = this.opts;
153
150
 
154
151
  let mode = entryMode;
155
152
  // Set defaults, if necessary
@@ -177,15 +174,14 @@ class ZipExtractor {
177
174
  }
178
175
  }
179
176
 
180
-
181
177
  /**
182
178
  * @typedef ExtractAllOptions
183
- * @property {?string} fileNamesEncoding The encoding to use for extracted file names.
179
+ * @property {string} [fileNamesEncoding] The encoding to use for extracted file names.
184
180
  * For ZIP archives created on MacOS it is usually expected to be `utf8`.
185
181
  * By default it is autodetected based on the entry metadata and is only needed to be set explicitly
186
182
  * if the particular archive does not comply to the standards, which leads to corrupted file names
187
183
  * after extraction. Only applicable if system unzip binary is NOT being used.
188
- * @property {?boolean} useSystemUnzip [false] If true, attempt to use system unzip; if this fails,
184
+ * @property {boolean} [useSystemUnzip] If true, attempt to use system unzip; if this fails,
189
185
  * fallback to the JS unzip implementation.
190
186
  */
191
187
 
@@ -196,7 +192,7 @@ class ZipExtractor {
196
192
  * @param {string} destDir The full path to the destination folder
197
193
  * @param {ExtractAllOptions} [opts]
198
194
  */
199
- async function extractAllTo (zipFilePath, destDir, opts = /** @type {ExtractAllOptions} */({})) {
195
+ async function extractAllTo(zipFilePath, destDir, opts = /** @type {ExtractAllOptions} */ ({})) {
200
196
  if (!path.isAbsolute(destDir)) {
201
197
  throw new Error(`Target path '${destDir}' is expected to be absolute`);
202
198
  }
@@ -227,13 +223,11 @@ async function extractAllTo (zipFilePath, destDir, opts = /** @type {ExtractAllO
227
223
  * @param {string} destDir The full path to the destination folder.
228
224
  * This folder is expected to already exist before extracting the archive.
229
225
  */
230
- async function extractWithSystemUnzip (zipFilePath, destDir) {
226
+ async function extractWithSystemUnzip(zipFilePath, destDir) {
231
227
  const isWindowsHost = isWindows();
232
228
  let executablePath;
233
229
  try {
234
- executablePath = await getExecutablePath(
235
- isWindowsHost ? 'powershell.exe' : 'unzip'
236
- );
230
+ executablePath = await getExecutablePath(isWindowsHost ? 'powershell.exe' : 'unzip');
237
231
  } catch (e) {
238
232
  throw new Error('Could not find system unzip');
239
233
  }
@@ -241,20 +235,19 @@ async function extractWithSystemUnzip (zipFilePath, destDir) {
241
235
  if (isWindowsHost) {
242
236
  // on Windows we use PowerShell to unzip files
243
237
  await exec(executablePath, [
244
- '-command', 'Expand-Archive',
245
- '-LiteralPath', zipFilePath,
246
- '-DestinationPath', destDir,
247
- '-Force'
238
+ '-command',
239
+ 'Expand-Archive',
240
+ '-LiteralPath',
241
+ zipFilePath,
242
+ '-DestinationPath',
243
+ destDir,
244
+ '-Force',
248
245
  ]);
249
246
  } else {
250
247
  // -q means quiet (no stdout)
251
248
  // -o means overwrite
252
249
  // -d is the dest dir
253
- await exec(executablePath, [
254
- '-q',
255
- '-o', zipFilePath,
256
- '-d', destDir
257
- ]);
250
+ await exec(executablePath, ['-q', '-o', zipFilePath, '-d', destDir]);
258
251
  }
259
252
  }
260
253
 
@@ -265,16 +258,16 @@ async function extractWithSystemUnzip (zipFilePath, destDir) {
265
258
  * @param {yauzl.Entry} entry The entry instance
266
259
  * @param {string} destDir The full path to the destination folder
267
260
  */
268
- async function _extractEntryTo (zipFile, entry, destDir) {
261
+ async function _extractEntryTo(zipFile, entry, destDir) {
269
262
  const dstPath = path.resolve(destDir, entry.fileName);
270
263
 
271
264
  // Create dest directory if doesn't exist already
272
265
  if (/\/$/.test(entry.fileName)) {
273
- if (!await fs.exists(dstPath)) {
266
+ if (!(await fs.exists(dstPath))) {
274
267
  await fs.mkdirp(dstPath);
275
268
  }
276
269
  return;
277
- } else if (!await fs.exists(path.dirname(dstPath))) {
270
+ } else if (!(await fs.exists(path.dirname(dstPath)))) {
278
271
  await fs.mkdirp(path.dirname(dstPath));
279
272
  }
280
273
 
@@ -288,7 +281,7 @@ async function _extractEntryTo (zipFile, entry, destDir) {
288
281
  // Create zipReadStream and pipe data to the write stream
289
282
  // (for some odd reason B.promisify doesn't work on zipfile.openReadStream, it causes an error 'closed')
290
283
  const zipReadStream = await new B((resolve, reject) => {
291
- zipFile.openReadStream(entry, (err, readStream) => err ? reject(err) : resolve(readStream));
284
+ zipFile.openReadStream(entry, (err, readStream) => (err ? reject(err) : resolve(readStream)));
292
285
  });
293
286
  const zipReadStreamPromise = new B((resolve, reject) => {
294
287
  zipReadStream.once('end', resolve);
@@ -297,10 +290,7 @@ async function _extractEntryTo (zipFile, entry, destDir) {
297
290
  zipReadStream.pipe(writeStream);
298
291
 
299
292
  // Wait for the zipReadStream and writeStream to end before returning
300
- return await B.all([
301
- zipReadStreamPromise,
302
- writeStreamPromise,
303
- ]);
293
+ return await B.all([zipReadStreamPromise, writeStreamPromise]);
304
294
  }
305
295
 
306
296
  /**
@@ -319,7 +309,7 @@ async function _extractEntryTo (zipFile, entry, destDir) {
319
309
  * The iteration through the source zip file will bi terminated as soon as
320
310
  * the result of this function equals to `false`.
321
311
  */
322
- async function readEntries (zipFilePath, onEntry) {
312
+ async function readEntries(zipFilePath, onEntry) {
323
313
  // Open a zip file and start reading entries
324
314
  const zipfile = await openZip(zipFilePath, {lazyEntries: true});
325
315
  const zipReadStreamPromise = new B((resolve, reject) => {
@@ -330,7 +320,7 @@ async function readEntries (zipFilePath, onEntry) {
330
320
  zipfile.on('entry', async (entry) => {
331
321
  const res = await onEntry({
332
322
  entry,
333
- extractEntryTo: async (destDir) => await _extractEntryTo(zipfile, entry, destDir)
323
+ extractEntryTo: async (destDir) => await _extractEntryTo(zipfile, entry, destDir),
334
324
  });
335
325
  if (res === false) {
336
326
  return zipfile.emit('end');
@@ -370,17 +360,12 @@ async function readEntries (zipFilePath, onEntry) {
370
360
  * @throws {Error} if there was an error while reading the source
371
361
  * or the source is too big
372
362
  */
373
- async function toInMemoryZip (srcPath, opts = /** @type {ZipOptions} */({})) {
374
- if (!await fs.exists(srcPath)) {
363
+ async function toInMemoryZip(srcPath, opts = /** @type {ZipOptions} */ ({})) {
364
+ if (!(await fs.exists(srcPath))) {
375
365
  throw new Error(`No such file or folder: ${srcPath}`);
376
366
  }
377
367
 
378
- const {
379
- isMetered = true,
380
- encodeToBase64 = false,
381
- maxSize = 1 * GiB,
382
- level = 9,
383
- } = opts;
368
+ const {isMetered = true, encodeToBase64 = false, maxSize = 1 * GiB, level = 9} = opts;
384
369
  const resultBuffers = [];
385
370
  let resultBuffersSize = 0;
386
371
  // Create a writable stream that zip buffers will be streamed to
@@ -389,8 +374,13 @@ async function toInMemoryZip (srcPath, opts = /** @type {ZipOptions} */({})) {
389
374
  resultBuffers.push(buffer);
390
375
  resultBuffersSize += buffer.length;
391
376
  if (maxSize > 0 && resultBuffersSize > maxSize) {
392
- resultWriteStream.emit('error', new Error(`The size of the resulting ` +
393
- `archive must not be greater than ${toReadableSizeString(maxSize)}`));
377
+ resultWriteStream.emit(
378
+ 'error',
379
+ new Error(
380
+ `The size of the resulting ` +
381
+ `archive must not be greater than ${toReadableSizeString(maxSize)}`
382
+ )
383
+ );
394
384
  }
395
385
  next();
396
386
  },
@@ -398,7 +388,7 @@ async function toInMemoryZip (srcPath, opts = /** @type {ZipOptions} */({})) {
398
388
 
399
389
  // Zip 'srcDir' and stream it to the above writable stream
400
390
  const archive = archiver('zip', {
401
- zlib: {level}
391
+ zlib: {level},
402
392
  });
403
393
  let srcSize = null;
404
394
  const base64EncoderStream = encodeToBase64 ? new Base64Encode() : null;
@@ -421,8 +411,7 @@ async function toInMemoryZip (srcPath, opts = /** @type {ZipOptions} */({})) {
421
411
  });
422
412
  const archiveStreamPromise = new B((resolve, reject) => {
423
413
  archive.once('finish', resolve);
424
- archive.once('error', (e) => reject(
425
- new Error(`Failed to archive '${srcPath}': ${e.message}`)));
414
+ archive.once('error', (e) => reject(new Error(`Failed to archive '${srcPath}': ${e.message}`)));
426
415
  });
427
416
  const timer = isMetered ? new Timer().start() : null;
428
417
  if ((await fs.stat(srcPath)).isDirectory()) {
@@ -444,11 +433,13 @@ async function toInMemoryZip (srcPath, opts = /** @type {ZipOptions} */({})) {
444
433
  await B.all([archiveStreamPromise, resultWriteStreamPromise]);
445
434
 
446
435
  if (timer) {
447
- log.debug(`Zipped ${encodeToBase64 ? 'and base64-encoded ' : ''}` +
448
- `'${path.basename(srcPath)}' ` +
449
- (srcSize ? `(${toReadableSizeString(srcSize)}) ` : '') +
450
- `in ${timer.getDuration().asSeconds.toFixed(3)}s ` +
451
- `(compression level: ${level})`);
436
+ log.debug(
437
+ `Zipped ${encodeToBase64 ? 'and base64-encoded ' : ''}` +
438
+ `'${path.basename(srcPath)}' ` +
439
+ (srcSize ? `(${toReadableSizeString(srcSize)}) ` : '') +
440
+ `in ${timer.getDuration().asSeconds.toFixed(3)}s ` +
441
+ `(compression level: ${level})`
442
+ );
452
443
  }
453
444
  // Return the array of zip buffers concatenated into one buffer
454
445
  return Buffer.concat(resultBuffers);
@@ -460,8 +451,8 @@ async function toInMemoryZip (srcPath, opts = /** @type {ZipOptions} */({})) {
460
451
  * @param {string} filePath - Full path to the file
461
452
  * @throws {Error} If the file does not exist or is not a valid ZIP archive
462
453
  */
463
- async function assertValidZip (filePath) {
464
- if (!await fs.exists(filePath)) {
454
+ async function assertValidZip(filePath) {
455
+ if (!(await fs.exists(filePath))) {
465
456
  throw new Error(`The file at '${filePath}' does not exist`);
466
457
  }
467
458
 
@@ -475,8 +466,10 @@ async function assertValidZip (filePath) {
475
466
  await fs.read(fd, buffer, 0, ZIP_MAGIC.length, 0);
476
467
  const signature = buffer.toString('ascii');
477
468
  if (signature !== ZIP_MAGIC) {
478
- throw new Error(`The file signature '${signature}' of '${filePath}' ` +
479
- `is not equal to the expected ZIP archive signature '${ZIP_MAGIC}'`);
469
+ throw new Error(
470
+ `The file signature '${signature}' of '${filePath}' ` +
471
+ `is not equal to the expected ZIP archive signature '${ZIP_MAGIC}'`
472
+ );
480
473
  }
481
474
  return true;
482
475
  } finally {
@@ -506,16 +499,14 @@ async function assertValidZip (filePath) {
506
499
  * @param {ZipCompressionOptions} opts - Compression options
507
500
  * @throws {Error} If there was an error while creating the archive
508
501
  */
509
- async function toArchive (dstPath, src = /** @type {ZipSourceOptions} */({}), opts = /** @type {ZipCompressionOptions} */({})) {
510
- const {
511
- level = 9,
512
- } = opts;
513
- const {
514
- pattern = '**/*',
515
- cwd = path.dirname(dstPath),
516
- ignore = [],
517
- } = src;
518
- const archive = archiver('zip', { zlib: { level }});
502
+ async function toArchive(
503
+ dstPath,
504
+ src = /** @type {ZipSourceOptions} */ ({}),
505
+ opts = /** @type {ZipCompressionOptions} */ ({})
506
+ ) {
507
+ const {level = 9} = opts;
508
+ const {pattern = '**/*', cwd = path.dirname(dstPath), ignore = []} = src;
509
+ const archive = archiver('zip', {zlib: {level}});
519
510
  const stream = fs.createWriteStream(dstPath);
520
511
  return await new B((resolve, reject) => {
521
512
  archive
@@ -545,13 +536,18 @@ const getExecutablePath = _.memoize(
545
536
  /**
546
537
  * @returns {Promise<string>} Full Path to the executable
547
538
  */
548
- async function getExecutablePath (binaryName) {
539
+ async function getExecutablePath(binaryName) {
549
540
  const fullPath = await fs.which(binaryName);
550
541
  log.debug(`Found '%s' at '%s'`, binaryName, fullPath);
551
542
  return fullPath;
552
543
  }
553
544
  );
554
545
 
555
- export { extractAllTo, readEntries, toInMemoryZip, _extractEntryTo,
556
- assertValidZip, toArchive };
557
- export default { extractAllTo, readEntries, toInMemoryZip, assertValidZip, toArchive };
546
+ export {extractAllTo, readEntries, toInMemoryZip, _extractEntryTo, assertValidZip, toArchive};
547
+ export default {
548
+ extractAllTo,
549
+ readEntries,
550
+ toInMemoryZip,
551
+ assertValidZip,
552
+ toArchive,
553
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@appium/support",
3
- "version": "2.57.4",
3
+ "version": "2.59.1",
4
4
  "description": "Support libs used across appium packages",
5
5
  "keywords": [
6
6
  "automation",
@@ -23,6 +23,7 @@
23
23
  },
24
24
  "license": "Apache-2.0",
25
25
  "author": "https://github.com/appium",
26
+ "types": "./build/lib/index.d.ts",
26
27
  "directories": {
27
28
  "lib": "lib"
28
29
  },
@@ -36,21 +37,22 @@
36
37
  "dev": "npm run build -- --watch",
37
38
  "fix": "npm run lint -- --fix",
38
39
  "lint": "eslint -c ../../.eslintrc --ignore-path ../../.eslintignore .",
40
+ "prepare": "npm run build",
39
41
  "test": "npm run test:unit",
40
42
  "test:e2e": "mocha --timeout 20s --slow 10s \"./test/e2e/**/*.spec.js\"",
41
43
  "test:unit": "mocha \"./test/unit/**/*.spec.js\""
42
44
  },
43
45
  "dependencies": {
44
- "@babel/runtime": "7.17.9",
46
+ "@babel/runtime": "7.18.3",
45
47
  "archiver": "5.3.1",
46
- "axios": "0.26.1",
48
+ "axios": "0.27.2",
47
49
  "base64-stream": "1.0.0",
48
50
  "bluebird": "3.7.2",
49
- "bplist-creator": "0.1.0",
50
- "bplist-parser": "0.3.1",
51
+ "bplist-creator": "0.1.1",
52
+ "bplist-parser": "0.3.2",
51
53
  "form-data": "4.0.0",
52
54
  "get-stream": "6.0.1",
53
- "glob": "8.0.1",
55
+ "glob": "8.0.3",
54
56
  "jimp": "0.16.1",
55
57
  "jsftp": "2.1.3",
56
58
  "klaw": "3.0.0",
@@ -59,7 +61,7 @@
59
61
  "moment": "2.29.3",
60
62
  "mv": "2.1.1",
61
63
  "ncp": "2.0.0",
62
- "npmlog": "6.0.1",
64
+ "npmlog": "6.0.2",
63
65
  "opencv-bindings": "4.5.5",
64
66
  "pkg-dir": "5.0.0",
65
67
  "plist": "3.0.5",
@@ -78,18 +80,11 @@
78
80
  "yauzl": "2.10.0"
79
81
  },
80
82
  "engines": {
81
- "node": ">=12",
83
+ "node": ">=14",
82
84
  "npm": ">=6"
83
85
  },
84
86
  "publishConfig": {
85
87
  "access": "public"
86
88
  },
87
- "types": "./build/lib/index.d.ts",
88
- "devDependencies": {
89
- "type-fest": "2.12.2"
90
- },
91
- "overrides": {
92
- "type-fest": "$type-fest"
93
- },
94
- "gitHead": "f15f11bc14d777185ed908a7840657b089cb1049"
89
+ "gitHead": "62b97417fcb7b0c0e2d6bab30bf9406e09bfb2ed"
95
90
  }