From 87e2f87302c98ad64eddaf3739c5ccb0b19bbe8e Mon Sep 17 00:00:00 2001 From: Mikah Chapman Date: Mon, 1 Mar 2021 16:54:03 -0700 Subject: [PATCH] get most of bash script into node --- index.js | 112 ++++++-- package-lock.json | 712 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 4 +- 3 files changed, 810 insertions(+), 18 deletions(-) diff --git a/index.js b/index.js index bb99ad7..a0beaae 100644 --- a/index.js +++ b/index.js @@ -1,22 +1,100 @@ -const spawn = require('child_process').spawn; +const spawn = require('child_process').spawn +const fs = require('fs') +const youtubedl = require('youtube-dl-exec') +const tmp = require('tmp') -function readFromRegion(frame: Buffer, x: int, y: int, width: int, height: int) { - const convert = spawn('convert', ['-', '-negate', '-crop', `${width}x${height}+${x}+${y}`, '-']) - const result = new Buffer(512 * 1024) - let resultSize = 0 +const STREAM_URL = "https://www.youtube.com/henrikomagnifico/live" - convert.stdout.on('data', (data) => { - if (data.length + resultSize > result.length) { - // Buffer not big enough - } else { - resultSize += data.length - data.copy(result) - } - }); +function readText(tmpfile, charWhitelist) { + return new Promise((resolve, reject) => { + const tesseract = charWhitelist ? spawn('tesseract', [tmpfile.name, '-', '-c', `tessedit_char_whitelist="${charWhitelist}`]) : spawn('tesseract', [tmpfile.name, '-']) + let recognizedString = '' - convert.on('exit', (code) => { + tesseract.stdout.on('data', (data) => { + recognizedString += data; + }) - }); - - convert.stdin.write(frame) + tesseract.on('exit', (code) => { + tmpfile.removeCallback() + if (code !== 0) { + reject() + } else { + resolve(recognizedString) + } + }) + }) } + +function thresholdImage(image, threshold) { + +} + +function getRegion(frame, x, y, width, height) { // Returns Promise + console.log("retrieving region") + const threshold = "15%" + return new Promise(function (resolve, reject) { + const tmpFile = tmp.fileSync() + const convert = spawn('convert', [`png:${frame.name}`, '-negate', '-crop', `${width}x${height}+${x}+${y}`, '-white-threshold', threshold, `png:${tmpFile.name}`]) + + convert.stderr.on('data', data => console.error(data.toString())) + + convert.on('exit', (code) => { + if (code !== 0) { + reject() + } else { + console.log("got region", tmpFile.name) + resolve(tmpFile); + } + }); + }); +} + +function getFrame(url) { + return new Promise((resolve, reject) => { // Returns Promise + const frameFile = tmp.fileSync() + const ffmpeg = spawn('ffmpeg', ['-i', url, '-y', '-f', 'image2', '-c:v', 'png', '-frames:v', '1', frameFile.name]) + + ffmpeg.stderr.on('data', data => console.error(data.toString())) + + ffmpeg.on('exit', (code) => { + if (code !== 0) { + reject() + } else { + console.log("got frame", frameFile.name) + resolve(frameFile) + } + }) + }); +} + +function getYoutubeStream() { + return new Promise((resolve, reject) => { + youtubedl(STREAM_URL, { + dumpJson: true, + format: "best" + }).then(output => resolve(output.url)) + .catch(err => reject(err)) + }) +} + +getYoutubeStream() + .then(url => getFrame(url)) + .then(frame => { + let title = '', + album = '', + duration = '' + + const titlePromise = getRegion(frame, 432, 906, 1487, 54).then(titleRegion => readText(titleRegion)) + const albumPromise = getRegion(frame, 440, 957, 1487, 32).then(albumRegion => readText(albumRegion)) + const durationPromise = getRegion(frame, 0, 1028, 235, 34).then(durationRegion => readText(durationRegion, "1234567890:/")) + + console.log("waiting for processors") + Promise.all([titlePromise, albumPromise, durationPromise]).then(values => { + frame.removeCallback() + title = values[0].trim() + album = values[1].trim() + duration = values[2].trim() + + console.log(`${album}: ${title} (${duration})`) + }).catch(err => console.error(err)) + }).catch(err => console.error(err)) diff --git a/package-lock.json b/package-lock.json index 50344cb..0709edf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -63,11 +63,79 @@ "negotiator": "0.6.2" } }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" + }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, + "arrify": { + "version": "1.0.1", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "bin-version": { + "version": "3.1.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/bin-version/-/bin-version-3.1.0.tgz", + "integrity": "sha1-WwnrKAdSsb0o8MnbP5by9DtsCDk=", + "requires": { + "execa": "^1.0.0", + "find-versions": "^3.0.0" + }, + "dependencies": { + "execa": { + "version": "1.0.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/execa/-/execa-1.0.0.tgz", + "integrity": "sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg=", + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha1-wbJVV189wh1Zv8ec09K0axw6VLU=", + "requires": { + "pump": "^3.0.0" + } + } + } + }, + "bin-version-check": { + "version": "4.0.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/bin-version-check/-/bin-version-check-4.0.0.tgz", + "integrity": "sha1-fYGcYklpkfgNiT5uAqMDI2Fgj3E=", + "requires": { + "bin-version": "^3.0.0", + "semver": "^5.6.0", + "semver-truncate": "^1.1.2" + } + }, + "bin-version-check-cli": { + "version": "2.0.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/bin-version-check-cli/-/bin-version-check-cli-2.0.0.tgz", + "integrity": "sha1-fUWiPcVQJLv3QbjmbcXAr7rH1zg=", + "requires": { + "arrify": "^1.0.1", + "bin-version-check": "^4.0.0", + "meow": "^5.0.0" + } + }, "body-parser": { "version": "1.19.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", @@ -90,6 +158,15 @@ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "bytes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", @@ -114,6 +191,28 @@ "responselike": "^2.0.0" } }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + }, + "camelcase-keys": { + "version": "4.2.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/camelcase-keys/-/camelcase-keys-4.2.0.tgz", + "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", + "requires": { + "camelcase": "^4.1.0", + "map-obj": "^2.0.0", + "quick-lru": "^1.0.0" + }, + "dependencies": { + "quick-lru": { + "version": "1.1.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/quick-lru/-/quick-lru-1.1.0.tgz", + "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=" + } + } + }, "cheerio": { "version": "1.0.0-rc.5", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.5.tgz", @@ -148,6 +247,11 @@ "mimic-response": "^1.0.0" } }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, "content-disposition": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", @@ -171,6 +275,18 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q=", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, "css-select": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/css-select/-/css-select-3.1.2.tgz", @@ -188,6 +304,19 @@ "resolved": "https://registry.npmjs.org/css-what/-/css-what-4.0.0.tgz", "integrity": "sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A==" }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "requires": { + "array-find-index": "^1.0.1" + } + }, + "dargs": { + "version": "7.0.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/dargs/-/dargs-7.0.0.tgz", + "integrity": "sha1-BAFcQd4Ly2nshAUPPZvgyvjW1cw=" + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -196,6 +325,27 @@ "ms": "2.0.0" } }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "map-obj": { + "version": "1.0.1", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" + } + } + }, "decompress-response": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", @@ -282,6 +432,14 @@ "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==" }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=", + "requires": { + "is-arrayish": "^0.2.1" + } + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -292,6 +450,78 @@ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, + "execa": { + "version": "5.0.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/execa/-/execa-5.0.0.tgz", + "integrity": "sha1-QCmwAHmYqEH70QMuX03oajweM3Y=", + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha1-9zqFudXUHQRVUcF34ogtSshXKKY=", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "get-stream": { + "version": "6.0.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/get-stream/-/get-stream-6.0.0.tgz", + "integrity": "sha1-PgASy2gnMZ2icG5gGhWD6GKaZxg=" + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha1-venDJoDW+uBBKdasnZIc54FfeOM=" + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha1-t+zR5e1T2o43pV4cImnguX7XSOo=", + "requires": { + "path-key": "^3.0.0" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U=" + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo=", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI=" + }, + "which": { + "version": "2.0.2", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/which/-/which-2.0.2.tgz", + "integrity": "sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=", + "requires": { + "isexe": "^2.0.0" + } + } + } + }, "express": { "version": "4.17.1", "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", @@ -343,6 +573,22 @@ "unpipe": "~1.0.0" } }, + "find-up": { + "version": "2.1.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "requires": { + "locate-path": "^2.0.0" + } + }, + "find-versions": { + "version": "3.2.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/find-versions/-/find-versions-3.2.0.tgz", + "integrity": "sha1-ECl/mAMKeGgpaBaQVF72We0dJU4=", + "requires": { + "semver-regex": "^2.0.0" + } + }, "forwarded": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", @@ -353,6 +599,16 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=" + }, "fuse.js": { "version": "6.4.6", "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-6.4.6.tgz", @@ -366,6 +622,19 @@ "pump": "^3.0.0" } }, + "glob": { + "version": "7.1.6", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/glob/-/glob-7.1.6.tgz", + "integrity": "sha1-FB8zuBp8JJLhJVlDB0gMRmeSeKY=", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, "got": { "version": "11.8.1", "resolved": "https://registry.npmjs.org/got/-/got-11.8.1.tgz", @@ -384,6 +653,24 @@ "responselike": "^2.0.0" } }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha1-/wQLKwhTsjw9MQJ1I3BvGIXXa+4=" + }, + "has": { + "version": "1.0.3", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/has/-/has-1.0.3.tgz", + "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=", + "requires": { + "function-bind": "^1.1.1" + } + }, + "hosted-git-info": { + "version": "2.8.8", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha1-dTm9S8Hg4KiVgVouAmJCCxKFhIg=" + }, "htmlparser2": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.0.0.tgz", @@ -421,6 +708,11 @@ "resolve-alpn": "^1.0.0" } }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha1-3JH8ukLk0G5Kuu0zs+ejwC9RTqA=" + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -429,6 +721,20 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "indent-string": { + "version": "3.2.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", @@ -439,11 +745,49 @@ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "is-core-module": { + "version": "2.2.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha1-lwN+89UiJNhRY/VZeytj2a/tmBo=", + "requires": { + "has": "^1.0.3" + } + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-unix": { + "version": "1.0.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/is-unix/-/is-unix-1.0.0.tgz", + "integrity": "sha1-YUdtuMGVR4esXzJvOMY7zZ0d+9U=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, "json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk=" + }, "keyv": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.3.tgz", @@ -452,21 +796,76 @@ "json-buffer": "3.0.1" } }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, "lowercase-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" }, + "map-obj": { + "version": "2.0.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/map-obj/-/map-obj-2.0.0.tgz", + "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=" + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, + "meow": { + "version": "5.0.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/meow/-/meow-5.0.0.tgz", + "integrity": "sha1-38c9Y6mvxxSl43F2DrXIi5EHiqQ=", + "requires": { + "camelcase-keys": "^4.0.0", + "decamelize-keys": "^1.0.0", + "loud-rejection": "^1.0.0", + "minimist-options": "^3.0.1", + "normalize-package-data": "^2.3.4", + "read-pkg-up": "^3.0.0", + "redent": "^2.0.0", + "trim-newlines": "^2.0.0", + "yargs-parser": "^10.0.0" + } + }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha1-UoI2KaFN0AyXcPtq1H3GMQ8sH2A=" + }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -490,11 +889,38 @@ "mime-db": "1.46.0" } }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs=" + }, "mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist-options": { + "version": "3.0.2", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/minimist-options/-/minimist-options-3.0.2.tgz", + "integrity": "sha1-+6TIGRM54T7PTWG+sD8HAQPz2VQ=", + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha1-PrXtYmInVteaXw4qIh3+utdcL34=" + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -505,11 +931,35 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y=" + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha1-5m2xg4sgDB38IzIl0SyzZSDiNKg=", + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, "normalize-url": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==" }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "requires": { + "path-key": "^2.0.0" + } + }, "nth-check": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", @@ -534,11 +984,59 @@ "wrappy": "1" } }, + "onetime": { + "version": "5.1.2", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha1-0Oluu1awdHbfHdnEgG5SN5hcpF4=", + "requires": { + "mimic-fn": "^2.1.0" + } + }, "p-cancelable": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.0.0.tgz", "integrity": "sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg==" }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg=", + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-reflect": { + "version": "2.1.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/p-reflect/-/p-reflect-2.1.0.tgz", + "integrity": "sha1-XWfHs8V3xOeAuUUfyRKWdb2Z/mc=" + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, "parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", @@ -557,11 +1055,44 @@ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha1-1i27VnlAXXLEc37FhgDp3c8G0kw=" + }, "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, + "path-type": { + "version": "3.0.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha1-zvMdyOCho7sNEFwM2Xzzv0f0428=", + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + }, "proxy-addr": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", @@ -606,6 +1137,43 @@ "unpipe": "1.0.0" } }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "read-pkg-up": { + "version": "3.0.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + } + }, + "redent": { + "version": "2.0.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/redent/-/redent-2.0.0.tgz", + "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", + "requires": { + "indent-string": "^3.0.0", + "strip-indent": "^2.0.0" + } + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha1-YpoBP7P3B1XW8LeTXMHCxTeLGXU=", + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, "resolve-alpn": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.0.0.tgz", @@ -619,6 +1187,14 @@ "lowercase-keys": "^2.0.0" } }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha1-8aVAK6YiCtUswSgrrBrjqkn9Bho=", + "requires": { + "glob": "^7.1.3" + } + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -629,6 +1205,24 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "semver": { + "version": "5.7.1", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/semver/-/semver-5.7.1.tgz", + "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=" + }, + "semver-regex": { + "version": "2.0.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/semver-regex/-/semver-regex-2.0.0.tgz", + "integrity": "sha1-qTwsWERTmncCMzeRB7OMe0rJ0zg=" + }, + "semver-truncate": { + "version": "1.1.2", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/semver-truncate/-/semver-truncate-1.1.2.tgz", + "integrity": "sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g=", + "requires": { + "semver": "^5.3.0" + } + }, "send": { "version": "0.17.1", "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", @@ -672,16 +1266,95 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha1-oUEMLt2PB3sItOJTyOrPyvBXRhw=" + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha1-3s6BrJweZxPl99G28X1Gj6U9iak=", + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha1-PyjOGnegA3JoPq3kpDMYNSeiFj0=" + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha1-z3D1BILu/cmOPOCmgz5KU87rpnk=", + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.7", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha1-6cGKQQ5e1+EkQqVJ+9ivp2cDjWU=" + }, "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha1-ibhS+y/L6Tb29LMYevsKEsGrWK0=" + }, + "strip-indent": { + "version": "2.0.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=" + }, + "tmp": { + "version": "0.2.1", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha1-hFf8MDfc9HGcJRNnoa9lAO4czxQ=", + "requires": { + "rimraf": "^3.0.0" + } + }, "toidentifier": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" }, + "trim-newlines": { + "version": "2.0.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/trim-newlines/-/trim-newlines-2.0.0.tgz", + "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=" + }, "type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -701,15 +1374,54 @@ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha1-/JH2uce6FchX9MssXe/uw51PQQo=", + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, + "which": { + "version": "1.3.1", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/which/-/which-1.3.1.tgz", + "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=", + "requires": { + "isexe": "^2.0.0" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "yargs-parser": { + "version": "10.1.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha1-cgImW4n36eny5XZeD+c1qQXtuqg=", + "requires": { + "camelcase": "^4.1.0" + } + }, + "youtube-dl-exec": { + "version": "1.0.0", + "resolved": "https://artifactory.cwantools.io/api/npm/npm-group/youtube-dl-exec/-/youtube-dl-exec-1.0.0.tgz", + "integrity": "sha1-pby6UjVKdaZv+HlvmRzl/op8DB4=", + "requires": { + "bin-version-check-cli": "~2.0.0", + "dargs": "~7.0.0", + "execa": "~5.0.0", + "got": "~11.8.1", + "is-unix": "~1.0.0", + "mkdirp": "~1.0.4", + "p-reflect": "~2.1.0" + } } } } diff --git a/package.json b/package.json index 85a3cb0..086cac6 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,8 @@ "cheerio": "^1.0.0-rc.5", "express": "^4.17.1", "fuse.js": "^6.4.6", - "got": "^11.8.1" + "got": "^11.8.1", + "tmp": "^0.2.1", + "youtube-dl-exec": "^1.0.0" } }