get most of bash script into node

This commit is contained in:
Mikah Chapman
2021-03-01 16:54:03 -07:00
parent b44ad9c362
commit 87e2f87302
3 changed files with 810 additions and 18 deletions

112
index.js
View File

@@ -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<Buffer>
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<Buffer>
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))

712
package-lock.json generated
View File

@@ -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"
}
}
}
}

View File

@@ -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"
}
}