aboutsummaryrefslogtreecommitdiffhomepage
path: root/server/tools
diff options
context:
space:
mode:
Diffstat (limited to 'server/tools')
-rw-r--r--server/tools/cli.ts112
-rw-r--r--server/tools/package.json7
-rw-r--r--server/tools/peertube-auth.ts17
-rw-r--r--server/tools/peertube-import-videos.ts111
-rw-r--r--server/tools/peertube-plugins.ts34
-rw-r--r--server/tools/peertube-redundancy.ts197
-rw-r--r--server/tools/peertube-repl.ts45
-rw-r--r--server/tools/peertube-upload.ts21
-rw-r--r--server/tools/peertube-watch.ts17
-rw-r--r--server/tools/peertube.ts24
-rw-r--r--server/tools/yarn.lock587
11 files changed, 744 insertions, 428 deletions
diff --git a/server/tools/cli.ts b/server/tools/cli.ts
index 58e2445ac..d5416fc38 100644
--- a/server/tools/cli.ts
+++ b/server/tools/cli.ts
@@ -3,9 +3,12 @@ import { getAppNumber, isTestInstance } from '../helpers/core-utils'
3import { join } from 'path' 3import { join } from 'path'
4import { root } from '../../shared/extra-utils/miscs/miscs' 4import { root } from '../../shared/extra-utils/miscs/miscs'
5import { getVideoChannel } from '../../shared/extra-utils/videos/video-channels' 5import { getVideoChannel } from '../../shared/extra-utils/videos/video-channels'
6import { Command } from 'commander' 6import { CommanderStatic } from 'commander'
7import { VideoChannel, VideoPrivacy } from '../../shared/models/videos' 7import { VideoChannel, VideoPrivacy } from '../../shared/models/videos'
8import { createLogger, format, transports } from 'winston' 8import { createLogger, format, transports } from 'winston'
9import { getMyUserInformation } from '@shared/extra-utils/users/users'
10import { User, UserRole } from '@shared/models'
11import { getAccessToken } from '@shared/extra-utils/users/login'
9 12
10let configName = 'PeerTube/CLI' 13let configName = 'PeerTube/CLI'
11if (isTestInstance()) configName += `-${getAppNumber()}` 14if (isTestInstance()) configName += `-${getAppNumber()}`
@@ -14,24 +17,35 @@ const config = require('application-config')(configName)
14 17
15const version = require('../../../package.json').version 18const version = require('../../../package.json').version
16 19
20async function getAdminTokenOrDie (url: string, username: string, password: string) {
21 const accessToken = await getAccessToken(url, username, password)
22 const resMe = await getMyUserInformation(url, accessToken)
23 const me: User = resMe.body
24
25 if (me.role !== UserRole.ADMINISTRATOR) {
26 console.error('You must be an administrator.')
27 process.exit(-1)
28 }
29
30 return accessToken
31}
32
17interface Settings { 33interface Settings {
18 remotes: any[], 34 remotes: any[]
19 default: number 35 default: number
20} 36}
21 37
22function getSettings () { 38async function getSettings (): Promise<Settings> {
23 return new Promise<Settings>((res, rej) => { 39 const defaultSettings = {
24 const defaultSettings = { 40 remotes: [],
25 remotes: [], 41 default: -1
26 default: -1 42 }
27 }
28 43
29 config.read((err, data) => { 44 const data = await config.read()
30 if (err) return rej(err)
31 45
32 return res(Object.keys(data).length === 0 ? defaultSettings : data) 46 return Object.keys(data).length === 0
33 }) 47 ? defaultSettings
34 }) 48 : data
35} 49}
36 50
37async function getNetrc () { 51async function getNetrc () {
@@ -46,24 +60,12 @@ async function getNetrc () {
46 return netrc 60 return netrc
47} 61}
48 62
49function writeSettings (settings) { 63function writeSettings (settings: Settings) {
50 return new Promise((res, rej) => { 64 return config.write(settings)
51 config.write(settings, err => {
52 if (err) return rej(err)
53
54 return res()
55 })
56 })
57} 65}
58 66
59function deleteSettings () { 67function deleteSettings () {
60 return new Promise((res, rej) => { 68 return config.trash()
61 config.trash((err) => {
62 if (err) return rej(err)
63
64 return res()
65 })
66 })
67} 69}
68 70
69function getRemoteObjectOrDie ( 71function getRemoteObjectOrDie (
@@ -74,9 +76,9 @@ function getRemoteObjectOrDie (
74 if (!program['url'] || !program['username'] || !program['password']) { 76 if (!program['url'] || !program['username'] || !program['password']) {
75 // No remote and we don't have program parameters: quit 77 // No remote and we don't have program parameters: quit
76 if (settings.remotes.length === 0 || Object.keys(netrc.machines).length === 0) { 78 if (settings.remotes.length === 0 || Object.keys(netrc.machines).length === 0) {
77 if (!program[ 'url' ]) console.error('--url field is required.') 79 if (!program['url']) console.error('--url field is required.')
78 if (!program[ 'username' ]) console.error('--username field is required.') 80 if (!program['username']) console.error('--username field is required.')
79 if (!program[ 'password' ]) console.error('--password field is required.') 81 if (!program['password']) console.error('--password field is required.')
80 82
81 return process.exit(-1) 83 return process.exit(-1)
82 } 84 }
@@ -96,13 +98,13 @@ function getRemoteObjectOrDie (
96 } 98 }
97 99
98 return { 100 return {
99 url: program[ 'url' ], 101 url: program['url'],
100 username: program[ 'username' ], 102 username: program['username'],
101 password: program[ 'password' ] 103 password: program['password']
102 } 104 }
103} 105}
104 106
105function buildCommonVideoOptions (command: Command) { 107function buildCommonVideoOptions (command: CommanderStatic) {
106 function list (val) { 108 function list (val) {
107 return val.split(',') 109 return val.split(',')
108 } 110 }
@@ -117,13 +119,14 @@ function buildCommonVideoOptions (command: Command) {
117 .option('-d, --video-description <description>', 'Video description') 119 .option('-d, --video-description <description>', 'Video description')
118 .option('-P, --privacy <privacy_number>', 'Privacy') 120 .option('-P, --privacy <privacy_number>', 'Privacy')
119 .option('-C, --channel-name <channel_name>', 'Channel name') 121 .option('-C, --channel-name <channel_name>', 'Channel name')
120 .option('-m, --comments-enabled', 'Enable comments') 122 .option('--no-comments-enabled', 'Disable video comments')
121 .option('-s, --support <support>', 'Video support text') 123 .option('-s, --support <support>', 'Video support text')
122 .option('-w, --wait-transcoding', 'Wait transcoding before publishing the video') 124 .option('--no-wait-transcoding', 'Do not wait transcoding before publishing the video')
125 .option('--no-download-enabled', 'Disable video download')
123 .option('-v, --verbose <verbose>', 'Verbosity, from 0/\'error\' to 4/\'debug\'', 'info') 126 .option('-v, --verbose <verbose>', 'Verbosity, from 0/\'error\' to 4/\'debug\'', 'info')
124} 127}
125 128
126async function buildVideoAttributesFromCommander (url: string, command: Command, defaultAttributes: any = {}) { 129async function buildVideoAttributesFromCommander (url: string, command: CommanderStatic, defaultAttributes: any = {}) {
127 const defaultBooleanAttributes = { 130 const defaultBooleanAttributes = {
128 nsfw: false, 131 nsfw: false,
129 commentsEnabled: true, 132 commentsEnabled: true,
@@ -134,8 +137,8 @@ async function buildVideoAttributesFromCommander (url: string, command: Command,
134 const booleanAttributes: { [id in keyof typeof defaultBooleanAttributes]: boolean } | {} = {} 137 const booleanAttributes: { [id in keyof typeof defaultBooleanAttributes]: boolean } | {} = {}
135 138
136 for (const key of Object.keys(defaultBooleanAttributes)) { 139 for (const key of Object.keys(defaultBooleanAttributes)) {
137 if (command[ key ] !== undefined) { 140 if (command[key] !== undefined) {
138 booleanAttributes[key] = command[ key ] 141 booleanAttributes[key] = command[key]
139 } else if (defaultAttributes[key] !== undefined) { 142 } else if (defaultAttributes[key] !== undefined) {
140 booleanAttributes[key] = defaultAttributes[key] 143 booleanAttributes[key] = defaultAttributes[key]
141 } else { 144 } else {
@@ -144,19 +147,19 @@ async function buildVideoAttributesFromCommander (url: string, command: Command,
144 } 147 }
145 148
146 const videoAttributes = { 149 const videoAttributes = {
147 name: command[ 'videoName' ] || defaultAttributes.name, 150 name: command['videoName'] || defaultAttributes.name,
148 category: command[ 'category' ] || defaultAttributes.category || undefined, 151 category: command['category'] || defaultAttributes.category || undefined,
149 licence: command[ 'licence' ] || defaultAttributes.licence || undefined, 152 licence: command['licence'] || defaultAttributes.licence || undefined,
150 language: command[ 'language' ] || defaultAttributes.language || undefined, 153 language: command['language'] || defaultAttributes.language || undefined,
151 privacy: command[ 'privacy' ] || defaultAttributes.privacy || VideoPrivacy.PUBLIC, 154 privacy: command['privacy'] || defaultAttributes.privacy || VideoPrivacy.PUBLIC,
152 support: command[ 'support' ] || defaultAttributes.support || undefined, 155 support: command['support'] || defaultAttributes.support || undefined,
153 description: command[ 'videoDescription' ] || defaultAttributes.description || undefined, 156 description: command['videoDescription'] || defaultAttributes.description || undefined,
154 tags: command[ 'tags' ] || defaultAttributes.tags || undefined 157 tags: command['tags'] || defaultAttributes.tags || undefined
155 } 158 }
156 159
157 Object.assign(videoAttributes, booleanAttributes) 160 Object.assign(videoAttributes, booleanAttributes)
158 161
159 if (command[ 'channelName' ]) { 162 if (command['channelName']) {
160 const res = await getVideoChannel(url, command['channelName']) 163 const res = await getVideoChannel(url, command['channelName'])
161 const videoChannel: VideoChannel = res.body 164 const videoChannel: VideoChannel = res.body
162 165
@@ -172,9 +175,9 @@ async function buildVideoAttributesFromCommander (url: string, command: Command,
172 175
173function getServerCredentials (program: any) { 176function getServerCredentials (program: any) {
174 return Promise.all([ getSettings(), getNetrc() ]) 177 return Promise.all([ getSettings(), getNetrc() ])
175 .then(([ settings, netrc ]) => { 178 .then(([ settings, netrc ]) => {
176 return getRemoteObjectOrDie(program, settings, netrc) 179 return getRemoteObjectOrDie(program, settings, netrc)
177 }) 180 })
178} 181}
179 182
180function getLogger (logLevel = 'info') { 183function getLogger (logLevel = 'info') {
@@ -211,7 +214,6 @@ function getLogger (logLevel = 'info') {
211 214
212export { 215export {
213 version, 216 version,
214 config,
215 getLogger, 217 getLogger,
216 getSettings, 218 getSettings,
217 getNetrc, 219 getNetrc,
@@ -222,5 +224,7 @@ export {
222 getServerCredentials, 224 getServerCredentials,
223 225
224 buildCommonVideoOptions, 226 buildCommonVideoOptions,
225 buildVideoAttributesFromCommander 227 buildVideoAttributesFromCommander,
228
229 getAdminTokenOrDie
226} 230}
diff --git a/server/tools/package.json b/server/tools/package.json
index 40959d76e..3821850c0 100644
--- a/server/tools/package.json
+++ b/server/tools/package.json
@@ -3,12 +3,13 @@
3 "version": "1.0.0", 3 "version": "1.0.0",
4 "private": true, 4 "private": true,
5 "dependencies": { 5 "dependencies": {
6 "application-config": "^1.0.1", 6 "application-config": "^2.0.0",
7 "cli-table": "^0.3.1", 7 "cli-table3": "^0.6.0",
8 "netrc-parser": "^3.1.6", 8 "netrc-parser": "^3.1.6",
9 "webtorrent-hybrid": "^4.0.1" 9 "webtorrent-hybrid": "^4.0.1"
10 }, 10 },
11 "summon": { 11 "summon": {
12 "silent": true 12 "silent": true
13 } 13 },
14 "devDependencies": {}
14} 15}
diff --git a/server/tools/peertube-auth.ts b/server/tools/peertube-auth.ts
index 6597a5c36..c1a804f83 100644
--- a/server/tools/peertube-auth.ts
+++ b/server/tools/peertube-auth.ts
@@ -1,3 +1,5 @@
1// eslint-disable @typescript-eslint/no-unnecessary-type-assertion
2
1import { registerTSPaths } from '../helpers/register-ts-paths' 3import { registerTSPaths } from '../helpers/register-ts-paths'
2registerTSPaths() 4registerTSPaths()
3 5
@@ -5,9 +7,8 @@ import * as program from 'commander'
5import * as prompt from 'prompt' 7import * as prompt from 'prompt'
6import { getNetrc, getSettings, writeSettings } from './cli' 8import { getNetrc, getSettings, writeSettings } from './cli'
7import { isUserUsernameValid } from '../helpers/custom-validators/users' 9import { isUserUsernameValid } from '../helpers/custom-validators/users'
8import { getAccessToken, login } from '../../shared/extra-utils' 10import { getAccessToken } from '../../shared/extra-utils'
9 11import * as CliTable3 from 'cli-table3'
10const Table = require('cli-table')
11 12
12async function delInstance (url: string) { 13async function delInstance (url: string) {
13 const [ settings, netrc ] = await Promise.all([ getSettings(), getNetrc() ]) 14 const [ settings, netrc ] = await Promise.all([ getSettings(), getNetrc() ])
@@ -108,10 +109,10 @@ program
108 .action(async () => { 109 .action(async () => {
109 const [ settings, netrc ] = await Promise.all([ getSettings(), getNetrc() ]) 110 const [ settings, netrc ] = await Promise.all([ getSettings(), getNetrc() ])
110 111
111 const table = new Table({ 112 const table = new CliTable3({
112 head: ['instance', 'login'], 113 head: [ 'instance', 'login' ],
113 colWidths: [30, 30] 114 colWidths: [ 30, 30 ]
114 }) 115 }) as any
115 116
116 settings.remotes.forEach(element => { 117 settings.remotes.forEach(element => {
117 if (!netrc.machines[element]) return 118 if (!netrc.machines[element]) return
@@ -132,7 +133,7 @@ program
132 .description('set an existing entry as default') 133 .description('set an existing entry as default')
133 .action(async url => { 134 .action(async url => {
134 const settings = await getSettings() 135 const settings = await getSettings()
135 const instanceExists = settings.remotes.indexOf(url) !== -1 136 const instanceExists = settings.remotes.includes(url)
136 137
137 if (instanceExists) { 138 if (instanceExists) {
138 settings.default = settings.remotes.indexOf(url) 139 settings.default = settings.remotes.indexOf(url)
diff --git a/server/tools/peertube-import-videos.ts b/server/tools/peertube-import-videos.ts
index eaa792763..2c9eabe98 100644
--- a/server/tools/peertube-import-videos.ts
+++ b/server/tools/peertube-import-videos.ts
@@ -1,10 +1,6 @@
1import { registerTSPaths } from '../helpers/register-ts-paths' 1import { registerTSPaths } from '../helpers/register-ts-paths'
2
3registerTSPaths() 2registerTSPaths()
4 3
5// FIXME: https://github.com/nodejs/node/pull/16853
6require('tls').DEFAULT_ECDH_CURVE = 'auto'
7
8import * as program from 'commander' 4import * as program from 'commander'
9import { join } from 'path' 5import { join } from 'path'
10import { doRequestAndSaveToFile } from '../helpers/requests' 6import { doRequestAndSaveToFile } from '../helpers/requests'
@@ -16,7 +12,7 @@ import { accessSync, constants } from 'fs'
16import { remove } from 'fs-extra' 12import { remove } from 'fs-extra'
17import { sha256 } from '../helpers/core-utils' 13import { sha256 } from '../helpers/core-utils'
18import { buildOriginallyPublishedAt, safeGetYoutubeDL } from '../helpers/youtube-dl' 14import { buildOriginallyPublishedAt, safeGetYoutubeDL } from '../helpers/youtube-dl'
19import { buildCommonVideoOptions, buildVideoAttributesFromCommander, getServerCredentials, getLogger } from './cli' 15import { buildCommonVideoOptions, buildVideoAttributesFromCommander, getLogger, getServerCredentials } from './cli'
20 16
21type UserInfo = { 17type UserInfo = {
22 username: string 18 username: string
@@ -42,32 +38,32 @@ command
42 .option('--first <first>', 'Process first n elements of returned playlist') 38 .option('--first <first>', 'Process first n elements of returned playlist')
43 .option('--last <last>', 'Process last n elements of returned playlist') 39 .option('--last <last>', 'Process last n elements of returned playlist')
44 .option('-T, --tmpdir <tmpdir>', 'Working directory', __dirname) 40 .option('-T, --tmpdir <tmpdir>', 'Working directory', __dirname)
41 .usage("[global options] [ -- youtube-dl options]")
45 .parse(process.argv) 42 .parse(process.argv)
46 43
47let log = getLogger(program[ 'verbose' ]) 44const log = getLogger(program['verbose'])
48 45
49getServerCredentials(command) 46getServerCredentials(command)
50 .then(({ url, username, password }) => { 47 .then(({ url, username, password }) => {
51 if (!program[ 'targetUrl' ]) { 48 if (!program['targetUrl']) {
52 exitError('--target-url field is required.') 49 exitError('--target-url field is required.')
53 } 50 }
54 51
55 try { 52 try {
56 accessSync(program[ 'tmpdir' ], constants.R_OK | constants.W_OK) 53 accessSync(program['tmpdir'], constants.R_OK | constants.W_OK)
57 } catch (e) { 54 } catch (e) {
58 exitError('--tmpdir %s: directory does not exist or is not accessible', program[ 'tmpdir' ]) 55 exitError('--tmpdir %s: directory does not exist or is not accessible', program['tmpdir'])
59 } 56 }
60 57
61 url = normalizeTargetUrl(url) 58 url = normalizeTargetUrl(url)
62 program[ 'targetUrl' ] = normalizeTargetUrl(program[ 'targetUrl' ]) 59 program['targetUrl'] = normalizeTargetUrl(program['targetUrl'])
63 60
64 const user = { username, password } 61 const user = { username, password }
65 62
66 run(url, user) 63 run(url, user)
67 .catch(err => { 64 .catch(err => exitError(err))
68 exitError(err)
69 })
70 }) 65 })
66 .catch(err => console.error(err))
71 67
72async function run (url: string, user: UserInfo) { 68async function run (url: string, user: UserInfo) {
73 if (!user.password) { 69 if (!user.password) {
@@ -76,43 +72,48 @@ async function run (url: string, user: UserInfo) {
76 72
77 const youtubeDL = await safeGetYoutubeDL() 73 const youtubeDL = await safeGetYoutubeDL()
78 74
79 const options = [ '-j', '--flat-playlist', '--playlist-reverse' ] 75 const options = [ '-j', '--flat-playlist', '--playlist-reverse', ...command.args ]
80 youtubeDL.getInfo(program[ 'targetUrl' ], options, processOptions, async (err, info) => { 76
77 youtubeDL.getInfo(program['targetUrl'], options, processOptions, async (err, info) => {
81 if (err) { 78 if (err) {
82 exitError(err.message) 79 exitError(err.stderr + ' ' + err.message)
83 } 80 }
84 81
85 let infoArray: any[] 82 let infoArray: any[]
86 83
87 // Normalize utf8 fields 84 // Normalize utf8 fields
88 infoArray = [].concat(info) 85 infoArray = [].concat(info)
89 if (program[ 'first' ]) { 86 if (program['first']) {
90 infoArray = infoArray.slice(0, program[ 'first' ]) 87 infoArray = infoArray.slice(0, program['first'])
91 } else if (program[ 'last' ]) { 88 } else if (program['last']) {
92 infoArray = infoArray.slice(-program[ 'last' ]) 89 infoArray = infoArray.slice(-program['last'])
93 } 90 }
94 infoArray = infoArray.map(i => normalizeObject(i)) 91 infoArray = infoArray.map(i => normalizeObject(i))
95 92
96 log.info('Will download and upload %d videos.\n', infoArray.length) 93 log.info('Will download and upload %d videos.\n', infoArray.length)
97 94
98 for (const info of infoArray) { 95 for (const info of infoArray) {
99 await processVideo({ 96 try {
100 cwd: program[ 'tmpdir' ], 97 await processVideo({
101 url, 98 cwd: program['tmpdir'],
102 user, 99 url,
103 youtubeInfo: info 100 user,
104 }) 101 youtubeInfo: info
102 })
103 } catch (err) {
104 console.error('Cannot process video.', { info, url })
105 }
105 } 106 }
106 107
107 log.info('Video/s for user %s imported: %s', user.username, program[ 'targetUrl' ]) 108 log.info('Video/s for user %s imported: %s', user.username, program['targetUrl'])
108 process.exit(0) 109 process.exit(0)
109 }) 110 })
110} 111}
111 112
112function processVideo (parameters: { 113function processVideo (parameters: {
113 cwd: string, 114 cwd: string
114 url: string, 115 url: string
115 user: { username: string, password: string }, 116 user: { username: string, password: string }
116 youtubeInfo: any 117 youtubeInfo: any
117}) { 118}) {
118 const { youtubeInfo, cwd, url, user } = parameters 119 const { youtubeInfo, cwd, url, user } = parameters
@@ -123,17 +124,17 @@ function processVideo (parameters: {
123 const videoInfo = await fetchObject(youtubeInfo) 124 const videoInfo = await fetchObject(youtubeInfo)
124 log.debug('Fetched object.', videoInfo) 125 log.debug('Fetched object.', videoInfo)
125 126
126 if (program[ 'since' ]) { 127 if (program['since']) {
127 if (buildOriginallyPublishedAt(videoInfo).getTime() < program[ 'since' ].getTime()) { 128 if (buildOriginallyPublishedAt(videoInfo).getTime() < program['since'].getTime()) {
128 log.info('Video "%s" has been published before "%s", don\'t upload it.\n', 129 log.info('Video "%s" has been published before "%s", don\'t upload it.\n',
129 videoInfo.title, formatDate(program[ 'since' ])) 130 videoInfo.title, formatDate(program['since']))
130 return res() 131 return res()
131 } 132 }
132 } 133 }
133 if (program[ 'until' ]) { 134 if (program['until']) {
134 if (buildOriginallyPublishedAt(videoInfo).getTime() > program[ 'until' ].getTime()) { 135 if (buildOriginallyPublishedAt(videoInfo).getTime() > program['until'].getTime()) {
135 log.info('Video "%s" has been published after "%s", don\'t upload it.\n', 136 log.info('Video "%s" has been published after "%s", don\'t upload it.\n',
136 videoInfo.title, formatDate(program[ 'until' ])) 137 videoInfo.title, formatDate(program['until']))
137 return res() 138 return res()
138 } 139 }
139 } 140 }
@@ -151,7 +152,7 @@ function processVideo (parameters: {
151 152
152 log.info('Downloading video "%s"...', videoInfo.title) 153 log.info('Downloading video "%s"...', videoInfo.title)
153 154
154 const options = [ '-f', 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best', '-o', path ] 155 const options = [ '-f', 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best', ...command.args, '-o', path ]
155 try { 156 try {
156 const youtubeDL = await safeGetYoutubeDL() 157 const youtubeDL = await safeGetYoutubeDL()
157 youtubeDL.exec(videoInfo.url, options, processOptions, async (err, output) => { 158 youtubeDL.exec(videoInfo.url, options, processOptions, async (err, output) => {
@@ -178,11 +179,11 @@ function processVideo (parameters: {
178} 179}
179 180
180async function uploadVideoOnPeerTube (parameters: { 181async function uploadVideoOnPeerTube (parameters: {
181 videoInfo: any, 182 videoInfo: any
182 videoPath: string, 183 videoPath: string
183 cwd: string, 184 cwd: string
184 url: string, 185 url: string
185 user: { username: string; password: string } 186 user: { username: string, password: string }
186}) { 187}) {
187 const { videoInfo, videoPath, cwd, url, user } = parameters 188 const { videoInfo, videoPath, cwd, url, user } = parameters
188 189
@@ -210,9 +211,9 @@ async function uploadVideoOnPeerTube (parameters: {
210 211
211 const defaultAttributes = { 212 const defaultAttributes = {
212 name: truncate(videoInfo.title, { 213 name: truncate(videoInfo.title, {
213 'length': CONSTRAINTS_FIELDS.VIDEOS.NAME.max, 214 length: CONSTRAINTS_FIELDS.VIDEOS.NAME.max,
214 'separator': /,? +/, 215 separator: /,? +/,
215 'omission': ' […]' 216 omission: ' […]'
216 }), 217 }),
217 category, 218 category,
218 licence, 219 licence,
@@ -259,7 +260,7 @@ async function uploadVideoOnPeerTube (parameters: {
259async function getCategory (categories: string[], url: string) { 260async function getCategory (categories: string[], url: string) {
260 if (!categories) return undefined 261 if (!categories) return undefined
261 262
262 const categoryString = categories[ 0 ] 263 const categoryString = categories[0]
263 264
264 if (categoryString === 'News & Politics') return 11 265 if (categoryString === 'News & Politics') return 11
265 266
@@ -267,7 +268,7 @@ async function getCategory (categories: string[], url: string) {
267 const categoriesServer = res.body 268 const categoriesServer = res.body
268 269
269 for (const key of Object.keys(categoriesServer)) { 270 for (const key of Object.keys(categoriesServer)) {
270 const categoryServer = categoriesServer[ key ] 271 const categoryServer = categoriesServer[key]
271 if (categoryString.toLowerCase() === categoryServer.toLowerCase()) return parseInt(key, 10) 272 if (categoryString.toLowerCase() === categoryServer.toLowerCase()) return parseInt(key, 10)
272 } 273 }
273 274
@@ -277,7 +278,7 @@ async function getCategory (categories: string[], url: string) {
277function getLicence (licence: string) { 278function getLicence (licence: string) {
278 if (!licence) return undefined 279 if (!licence) return undefined
279 280
280 if (licence.indexOf('Creative Commons Attribution licence') !== -1) return 1 281 if (licence.includes('Creative Commons Attribution licence')) return 1
281 282
282 return undefined 283 return undefined
283} 284}
@@ -289,12 +290,12 @@ function normalizeObject (obj: any) {
289 // Deprecated key 290 // Deprecated key
290 if (key === 'resolution') continue 291 if (key === 'resolution') continue
291 292
292 const value = obj[ key ] 293 const value = obj[key]
293 294
294 if (typeof value === 'string') { 295 if (typeof value === 'string') {
295 newObj[ key ] = value.normalize() 296 newObj[key] = value.normalize()
296 } else { 297 } else {
297 newObj[ key ] = value 298 newObj[key] = value
298 } 299 }
299 } 300 }
300 301
@@ -306,7 +307,7 @@ function fetchObject (info: any) {
306 307
307 return new Promise<any>(async (res, rej) => { 308 return new Promise<any>(async (res, rej) => {
308 const youtubeDL = await safeGetYoutubeDL() 309 const youtubeDL = await safeGetYoutubeDL()
309 youtubeDL.getInfo(url, undefined, processOptions, async (err, videoInfo) => { 310 youtubeDL.getInfo(url, undefined, processOptions, (err, videoInfo) => {
310 if (err) return rej(err) 311 if (err) return rej(err)
311 312
312 const videoInfoWithUrl = Object.assign(videoInfo, { url }) 313 const videoInfoWithUrl = Object.assign(videoInfo, { url })
@@ -317,10 +318,10 @@ function fetchObject (info: any) {
317 318
318function buildUrl (info: any) { 319function buildUrl (info: any) {
319 const webpageUrl = info.webpage_url as string 320 const webpageUrl = info.webpage_url as string
320 if (webpageUrl && webpageUrl.match(/^https?:\/\//)) return webpageUrl 321 if (webpageUrl?.match(/^https?:\/\//)) return webpageUrl
321 322
322 const url = info.url as string 323 const url = info.url as string
323 if (url && url.match(/^https?:\/\//)) return url 324 if (url?.match(/^https?:\/\//)) return url
324 325
325 // It seems youtube-dl does not return the video url 326 // It seems youtube-dl does not return the video url
326 return 'https://www.youtube.com/watch?v=' + info.id 327 return 'https://www.youtube.com/watch?v=' + info.id
@@ -388,7 +389,7 @@ function parseDate (dateAsStr: string): Date {
388} 389}
389 390
390function formatDate (date: Date): string { 391function formatDate (date: Date): string {
391 return date.toISOString().split('T')[ 0 ] 392 return date.toISOString().split('T')[0]
392} 393}
393 394
394function exitError (message: string, ...meta: any[]) { 395function exitError (message: string, ...meta: any[]) {
diff --git a/server/tools/peertube-plugins.ts b/server/tools/peertube-plugins.ts
index e40606107..05b75fab2 100644
--- a/server/tools/peertube-plugins.ts
+++ b/server/tools/peertube-plugins.ts
@@ -1,17 +1,15 @@
1// eslint-disable @typescript-eslint/no-unnecessary-type-assertion
2
1import { registerTSPaths } from '../helpers/register-ts-paths' 3import { registerTSPaths } from '../helpers/register-ts-paths'
2registerTSPaths() 4registerTSPaths()
3 5
4import * as program from 'commander' 6import * as program from 'commander'
5import { PluginType } from '../../shared/models/plugins/plugin.type' 7import { PluginType } from '../../shared/models/plugins/plugin.type'
6import { getAccessToken } from '../../shared/extra-utils/users/login'
7import { getMyUserInformation } from '../../shared/extra-utils/users/users'
8import { installPlugin, listPlugins, uninstallPlugin, updatePlugin } from '../../shared/extra-utils/server/plugins' 8import { installPlugin, listPlugins, uninstallPlugin, updatePlugin } from '../../shared/extra-utils/server/plugins'
9import { getServerCredentials } from './cli' 9import { getAdminTokenOrDie, getServerCredentials } from './cli'
10import { User, UserRole } from '../../shared/models/users'
11import { PeerTubePlugin } from '../../shared/models/plugins/peertube-plugin.model' 10import { PeerTubePlugin } from '../../shared/models/plugins/peertube-plugin.model'
12import { isAbsolute } from 'path' 11import { isAbsolute } from 'path'
13 12import * as CliTable3 from 'cli-table3'
14const Table = require('cli-table')
15 13
16program 14program
17 .name('plugins') 15 .name('plugins')
@@ -82,10 +80,10 @@ async function pluginsListCLI () {
82 }) 80 })
83 const plugins: PeerTubePlugin[] = res.body.data 81 const plugins: PeerTubePlugin[] = res.body.data
84 82
85 const table = new Table({ 83 const table = new CliTable3({
86 head: ['name', 'version', 'homepage'], 84 head: [ 'name', 'version', 'homepage' ],
87 colWidths: [ 50, 10, 50 ] 85 colWidths: [ 50, 10, 50 ]
88 }) 86 }) as any
89 87
90 for (const plugin of plugins) { 88 for (const plugin of plugins) {
91 const npmName = plugin.type === PluginType.PLUGIN 89 const npmName = plugin.type === PluginType.PLUGIN
@@ -128,7 +126,6 @@ async function installPluginCLI (options: any) {
128 } catch (err) { 126 } catch (err) {
129 console.error('Cannot install plugin.', err) 127 console.error('Cannot install plugin.', err)
130 process.exit(-1) 128 process.exit(-1)
131 return
132 } 129 }
133 130
134 console.log('Plugin installed.') 131 console.log('Plugin installed.')
@@ -160,7 +157,6 @@ async function updatePluginCLI (options: any) {
160 } catch (err) { 157 } catch (err) {
161 console.error('Cannot update plugin.', err) 158 console.error('Cannot update plugin.', err)
162 process.exit(-1) 159 process.exit(-1)
163 return
164 } 160 }
165 161
166 console.log('Plugin updated.') 162 console.log('Plugin updated.')
@@ -181,27 +177,13 @@ async function uninstallPluginCLI (options: any) {
181 await uninstallPlugin({ 177 await uninstallPlugin({
182 url, 178 url,
183 accessToken, 179 accessToken,
184 npmName: options[ 'npmName' ] 180 npmName: options['npmName']
185 }) 181 })
186 } catch (err) { 182 } catch (err) {
187 console.error('Cannot uninstall plugin.', err) 183 console.error('Cannot uninstall plugin.', err)
188 process.exit(-1) 184 process.exit(-1)
189 return
190 } 185 }
191 186
192 console.log('Plugin uninstalled.') 187 console.log('Plugin uninstalled.')
193 process.exit(0) 188 process.exit(0)
194} 189}
195
196async function getAdminTokenOrDie (url: string, username: string, password: string) {
197 const accessToken = await getAccessToken(url, username, password)
198 const resMe = await getMyUserInformation(url, accessToken)
199 const me: User = resMe.body
200
201 if (me.role !== UserRole.ADMINISTRATOR) {
202 console.error('Cannot list plugins if you are not administrator.')
203 process.exit(-1)
204 }
205
206 return accessToken
207}
diff --git a/server/tools/peertube-redundancy.ts b/server/tools/peertube-redundancy.ts
new file mode 100644
index 000000000..1ab58a438
--- /dev/null
+++ b/server/tools/peertube-redundancy.ts
@@ -0,0 +1,197 @@
1// eslint-disable @typescript-eslint/no-unnecessary-type-assertion
2
3import { registerTSPaths } from '../helpers/register-ts-paths'
4registerTSPaths()
5
6import * as program from 'commander'
7import { getAdminTokenOrDie, getServerCredentials } from './cli'
8import { VideoRedundanciesTarget, VideoRedundancy } from '@shared/models'
9import { addVideoRedundancy, listVideoRedundancies, removeVideoRedundancy } from '@shared/extra-utils/server/redundancy'
10import validator from 'validator'
11import * as CliTable3 from 'cli-table3'
12import { URL } from 'url'
13import { uniq } from 'lodash'
14
15import bytes = require('bytes')
16
17program
18 .name('plugins')
19 .usage('[command] [options]')
20
21program
22 .command('list-remote-redundancies')
23 .description('List remote redundancies on your videos')
24 .option('-u, --url <url>', 'Server url')
25 .option('-U, --username <username>', 'Username')
26 .option('-p, --password <token>', 'Password')
27 .action(() => listRedundanciesCLI('my-videos'))
28
29program
30 .command('list-my-redundancies')
31 .description('List your redundancies of remote videos')
32 .option('-u, --url <url>', 'Server url')
33 .option('-U, --username <username>', 'Username')
34 .option('-p, --password <token>', 'Password')
35 .action(() => listRedundanciesCLI('remote-videos'))
36
37program
38 .command('add')
39 .description('Duplicate a video in your redundancy system')
40 .option('-u, --url <url>', 'Server url')
41 .option('-U, --username <username>', 'Username')
42 .option('-p, --password <token>', 'Password')
43 .option('-v, --video <videoId>', 'Video id to duplicate')
44 .action((options) => addRedundancyCLI(options))
45
46program
47 .command('remove')
48 .description('Remove a video from your redundancies')
49 .option('-u, --url <url>', 'Server url')
50 .option('-U, --username <username>', 'Username')
51 .option('-p, --password <token>', 'Password')
52 .option('-v, --video <videoId>', 'Video id to remove from redundancies')
53 .action((options) => removeRedundancyCLI(options))
54
55if (!process.argv.slice(2).length) {
56 program.outputHelp()
57}
58
59program.parse(process.argv)
60
61// ----------------------------------------------------------------------------
62
63async function listRedundanciesCLI (target: VideoRedundanciesTarget) {
64 const { url, username, password } = await getServerCredentials(program)
65 const accessToken = await getAdminTokenOrDie(url, username, password)
66
67 const redundancies = await listVideoRedundanciesData(url, accessToken, target)
68
69 const table = new CliTable3({
70 head: [ 'video id', 'video name', 'video url', 'files', 'playlists', 'by instances', 'total size' ]
71 }) as any
72
73 for (const redundancy of redundancies) {
74 const webtorrentFiles = redundancy.redundancies.files
75 const streamingPlaylists = redundancy.redundancies.streamingPlaylists
76
77 let totalSize = ''
78 if (target === 'remote-videos') {
79 const tmp = webtorrentFiles.concat(streamingPlaylists)
80 .reduce((a, b) => a + b.size, 0)
81
82 totalSize = bytes(tmp)
83 }
84
85 const instances = uniq(
86 webtorrentFiles.concat(streamingPlaylists)
87 .map(r => r.fileUrl)
88 .map(u => new URL(u).host)
89 )
90
91 table.push([
92 redundancy.id.toString(),
93 redundancy.name,
94 redundancy.url,
95 webtorrentFiles.length,
96 streamingPlaylists.length,
97 instances.join('\n'),
98 totalSize
99 ])
100 }
101
102 console.log(table.toString())
103 process.exit(0)
104}
105
106async function addRedundancyCLI (options: { videoId: number }) {
107 const { url, username, password } = await getServerCredentials(program)
108 const accessToken = await getAdminTokenOrDie(url, username, password)
109
110 if (!options['video'] || validator.isInt('' + options['video']) === false) {
111 console.error('You need to specify the video id to duplicate and it should be a number.\n')
112 program.outputHelp()
113 process.exit(-1)
114 }
115
116 try {
117 await addVideoRedundancy({
118 url,
119 accessToken,
120 videoId: options['video']
121 })
122
123 console.log('Video will be duplicated by your instance!')
124
125 process.exit(0)
126 } catch (err) {
127 if (err.message.includes(409)) {
128 console.error('This video is already duplicated by your instance.')
129 } else if (err.message.includes(404)) {
130 console.error('This video id does not exist.')
131 } else {
132 console.error(err)
133 }
134
135 process.exit(-1)
136 }
137}
138
139async function removeRedundancyCLI (options: { videoId: number }) {
140 const { url, username, password } = await getServerCredentials(program)
141 const accessToken = await getAdminTokenOrDie(url, username, password)
142
143 if (!options['video'] || validator.isInt('' + options['video']) === false) {
144 console.error('You need to specify the video id to remove from your redundancies.\n')
145 program.outputHelp()
146 process.exit(-1)
147 }
148
149 const videoId = parseInt(options['video'] + '', 10)
150
151 let redundancies = await listVideoRedundanciesData(url, accessToken, 'my-videos')
152 let videoRedundancy = redundancies.find(r => videoId === r.id)
153
154 if (!videoRedundancy) {
155 redundancies = await listVideoRedundanciesData(url, accessToken, 'remote-videos')
156 videoRedundancy = redundancies.find(r => videoId === r.id)
157 }
158
159 if (!videoRedundancy) {
160 console.error('Video redundancy not found.')
161 process.exit(-1)
162 }
163
164 try {
165 const ids = videoRedundancy.redundancies.files
166 .concat(videoRedundancy.redundancies.streamingPlaylists)
167 .map(r => r.id)
168
169 for (const id of ids) {
170 await removeVideoRedundancy({
171 url,
172 accessToken,
173 redundancyId: id
174 })
175 }
176
177 console.log('Video redundancy removed!')
178
179 process.exit(0)
180 } catch (err) {
181 console.error(err)
182 process.exit(-1)
183 }
184}
185
186async function listVideoRedundanciesData (url: string, accessToken: string, target: VideoRedundanciesTarget) {
187 const res = await listVideoRedundancies({
188 url,
189 accessToken,
190 start: 0,
191 count: 100,
192 sort: 'name',
193 target
194 })
195
196 return res.body.data as VideoRedundancy[]
197}
diff --git a/server/tools/peertube-repl.ts b/server/tools/peertube-repl.ts
index ab6e215d9..a5c35e9ea 100644
--- a/server/tools/peertube-repl.ts
+++ b/server/tools/peertube-repl.ts
@@ -4,14 +4,10 @@ registerTSPaths()
4import * as repl from 'repl' 4import * as repl from 'repl'
5import * as path from 'path' 5import * as path from 'path'
6import * as _ from 'lodash' 6import * as _ from 'lodash'
7import * as uuidv1 from 'uuid/v1' 7import { uuidv1, uuidv3, uuidv4, uuidv5 } from 'uuid'
8import * as uuidv3 from 'uuid/v3'
9import * as uuidv4 from 'uuid/v4'
10import * as uuidv5 from 'uuid/v5'
11import * as Sequelize from 'sequelize' 8import * as Sequelize from 'sequelize'
12import * as YoutubeDL from 'youtube-dl' 9import * as YoutubeDL from 'youtube-dl'
13 10import { initDatabaseModels, sequelizeTypescript } from '../initializers/database'
14import { initDatabaseModels, sequelizeTypescript } from '../initializers'
15import * as cli from '../tools/cli' 11import * as cli from '../tools/cli'
16import { logger } from '../helpers/logger' 12import { logger } from '../helpers/logger'
17import * as constants from '../initializers/constants' 13import * as constants from '../initializers/constants'
@@ -31,22 +27,39 @@ const start = async () => {
31 const initContext = (replServer) => { 27 const initContext = (replServer) => {
32 return (context) => { 28 return (context) => {
33 const properties = { 29 const properties = {
34 context, repl: replServer, env: process.env, 30 context,
35 lodash: _, path, 31 repl: replServer,
36 uuidv1, uuidv3, uuidv4, uuidv5, 32 env: process.env,
37 cli, logger, constants, 33 lodash: _,
38 Sequelize, sequelizeTypescript, modelsUtils, 34 path,
39 models: sequelizeTypescript.models, transaction: sequelizeTypescript.transaction, 35 uuidv1,
40 query: sequelizeTypescript.query, queryInterface: sequelizeTypescript.getQueryInterface(), 36 uuidv3,
37 uuidv4,
38 uuidv5,
39 cli,
40 logger,
41 constants,
42 Sequelize,
43 sequelizeTypescript,
44 modelsUtils,
45 models: sequelizeTypescript.models,
46 transaction: sequelizeTypescript.transaction,
47 query: sequelizeTypescript.query,
48 queryInterface: sequelizeTypescript.getQueryInterface(),
41 YoutubeDL, 49 YoutubeDL,
42 coreUtils, ffmpegUtils, peertubeCryptoUtils, signupUtils, utils, YoutubeDLUtils 50 coreUtils,
51 ffmpegUtils,
52 peertubeCryptoUtils,
53 signupUtils,
54 utils,
55 YoutubeDLUtils
43 } 56 }
44 57
45 for (let prop in properties) { 58 for (const prop in properties) {
46 Object.defineProperty(context, prop, { 59 Object.defineProperty(context, prop, {
47 configurable: false, 60 configurable: false,
48 enumerable: true, 61 enumerable: true,
49 value: properties[ prop ] 62 value: properties[prop]
50 }) 63 })
51 } 64 }
52 } 65 }
diff --git a/server/tools/peertube-upload.ts b/server/tools/peertube-upload.ts
index f604c9bee..8de952e7b 100644
--- a/server/tools/peertube-upload.ts
+++ b/server/tools/peertube-upload.ts
@@ -24,14 +24,14 @@ command
24 24
25getServerCredentials(command) 25getServerCredentials(command)
26 .then(({ url, username, password }) => { 26 .then(({ url, username, password }) => {
27 if (!program[ 'videoName' ] || !program[ 'file' ]) { 27 if (!program['videoName'] || !program['file']) {
28 if (!program[ 'videoName' ]) console.error('--video-name is required.') 28 if (!program['videoName']) console.error('--video-name is required.')
29 if (!program[ 'file' ]) console.error('--file is required.') 29 if (!program['file']) console.error('--file is required.')
30 30
31 process.exit(-1) 31 process.exit(-1)
32 } 32 }
33 33
34 if (isAbsolute(program[ 'file' ]) === false) { 34 if (isAbsolute(program['file']) === false) {
35 console.error('File path should be absolute.') 35 console.error('File path should be absolute.')
36 process.exit(-1) 36 process.exit(-1)
37 } 37 }
@@ -41,25 +41,26 @@ getServerCredentials(command)
41 process.exit(-1) 41 process.exit(-1)
42 }) 42 })
43 }) 43 })
44 .catch(err => console.error(err))
44 45
45async function run (url: string, username: string, password: string) { 46async function run (url: string, username: string, password: string) {
46 const accessToken = await getAccessToken(url, username, password) 47 const accessToken = await getAccessToken(url, username, password)
47 48
48 await access(program[ 'file' ], constants.F_OK) 49 await access(program['file'], constants.F_OK)
49 50
50 console.log('Uploading %s video...', program[ 'videoName' ]) 51 console.log('Uploading %s video...', program['videoName'])
51 52
52 const videoAttributes = await buildVideoAttributesFromCommander(url, program) 53 const videoAttributes = await buildVideoAttributesFromCommander(url, program)
53 54
54 Object.assign(videoAttributes, { 55 Object.assign(videoAttributes, {
55 fixture: program[ 'file' ], 56 fixture: program['file'],
56 thumbnailfile: program[ 'thumbnail' ], 57 thumbnailfile: program['thumbnail'],
57 previewfile: program[ 'preview' ] 58 previewfile: program['preview']
58 }) 59 })
59 60
60 try { 61 try {
61 await uploadVideo(url, accessToken, videoAttributes) 62 await uploadVideo(url, accessToken, videoAttributes)
62 console.log(`Video ${program[ 'videoName' ]} uploaded.`) 63 console.log(`Video ${program['videoName']} uploaded.`)
63 process.exit(0) 64 process.exit(0)
64 } catch (err) { 65 } catch (err) {
65 console.error(require('util').inspect(err)) 66 console.error(require('util').inspect(err))
diff --git a/server/tools/peertube-watch.ts b/server/tools/peertube-watch.ts
index 9ac1d05f9..b8e750a37 100644
--- a/server/tools/peertube-watch.ts
+++ b/server/tools/peertube-watch.ts
@@ -29,16 +29,10 @@ program
29 console.log(' $ peertube watch https://peertube.cpy.re/videos/watch/e8a1af4e-414a-4d58-bfe6-2146eed06d10') 29 console.log(' $ peertube watch https://peertube.cpy.re/videos/watch/e8a1af4e-414a-4d58-bfe6-2146eed06d10')
30 console.log() 30 console.log()
31 }) 31 })
32 .action((url, cmd) => { 32 .action((url, cmd) => run(url, cmd))
33 run(url, cmd)
34 .catch(err => {
35 console.error(err)
36 process.exit(-1)
37 })
38 })
39 .parse(process.argv) 33 .parse(process.argv)
40 34
41async function run (url: string, program: any) { 35function run (url: string, program: any) {
42 if (!url) { 36 if (!url) {
43 console.error('<url> positional argument is required.') 37 console.error('<url> positional argument is required.')
44 process.exit(-1) 38 process.exit(-1)
@@ -49,5 +43,10 @@ async function run (url: string, program: any) {
49 url.replace('videos/watch', 'download/torrents') + 43 url.replace('videos/watch', 'download/torrents') +
50 `-${program.resolution}.torrent` 44 `-${program.resolution}.torrent`
51 45
52 execSync(cmd + args) 46 try {
47 execSync(cmd + args)
48 } catch (err) {
49 console.error('Cannto exec command.', err)
50 process.exit(-1)
51 }
53} 52}
diff --git a/server/tools/peertube.ts b/server/tools/peertube.ts
index fc85c4210..88dd5f7f6 100644
--- a/server/tools/peertube.ts
+++ b/server/tools/peertube.ts
@@ -1,13 +1,12 @@
1#!/usr/bin/env node 1#!/usr/bin/env node
2 2
3/* eslint-disable no-useless-escape */
4
3import { registerTSPaths } from '../helpers/register-ts-paths' 5import { registerTSPaths } from '../helpers/register-ts-paths'
4registerTSPaths() 6registerTSPaths()
5 7
6import * as program from 'commander' 8import * as program from 'commander'
7import { 9import { getSettings, version } from './cli'
8 version,
9 getSettings
10} from './cli'
11 10
12program 11program
13 .version(version, '-v, --version') 12 .version(version, '-v, --version')
@@ -22,17 +21,19 @@ program
22 .command('watch', 'watch a video in the terminal ✩°。⋆').alias('w') 21 .command('watch', 'watch a video in the terminal ✩°。⋆').alias('w')
23 .command('repl', 'initiate a REPL to access internals') 22 .command('repl', 'initiate a REPL to access internals')
24 .command('plugins [action]', 'manage instance plugins/themes').alias('p') 23 .command('plugins [action]', 'manage instance plugins/themes').alias('p')
24 .command('redundancy [action]', 'manage instance redundancies').alias('r')
25 25
26/* Not Yet Implemented */ 26/* Not Yet Implemented */
27program 27program
28 .command('diagnostic [action]', 28 .command(
29 'like couple therapy, but for your instance', 29 'diagnostic [action]',
30 { noHelp: true } as program.CommandOptions 30 'like couple therapy, but for your instance',
31 ).alias('d') 31 { noHelp: true } as program.CommandOptions
32 ).alias('d')
32 .command('admin', 33 .command('admin',
33 'manage an instance where you have elevated rights', 34 'manage an instance where you have elevated rights',
34 { noHelp: true } as program.CommandOptions 35 { noHelp: true } as program.CommandOptions
35 ).alias('a') 36 ).alias('a')
36 37
37// help on no command 38// help on no command
38if (!process.argv.slice(2).length) { 39if (!process.argv.slice(2).length) {
@@ -81,3 +82,4 @@ getSettings()
81 }) 82 })
82 .parse(process.argv) 83 .parse(process.argv)
83 }) 84 })
85 .catch(err => console.error(err))
diff --git a/server/tools/yarn.lock b/server/tools/yarn.lock
index 28756cbc2..7faa26eaa 100644
--- a/server/tools/yarn.lock
+++ b/server/tools/yarn.lock
@@ -2,6 +2,27 @@
2# yarn lockfile v1 2# yarn lockfile v1
3 3
4 4
5"@babel/code-frame@^7.0.0":
6 version "7.8.3"
7 resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e"
8 integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==
9 dependencies:
10 "@babel/highlight" "^7.8.3"
11
12"@babel/helper-validator-identifier@^7.9.0":
13 version "7.9.0"
14 resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.0.tgz#ad53562a7fc29b3b9a91bbf7d10397fd146346ed"
15 integrity sha512-6G8bQKjOh+of4PV/ThDm/rRqlU7+IGoJuofpagU5GlEl29Vv0RGqqt86ZGRV8ZuSOY3o+8yXl5y782SMcG7SHw==
16
17"@babel/highlight@^7.8.3":
18 version "7.9.0"
19 resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.9.0.tgz#4e9b45ccb82b79607271b2979ad82c7b68163079"
20 integrity sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==
21 dependencies:
22 "@babel/helper-validator-identifier" "^7.9.0"
23 chalk "^2.0.0"
24 js-tokens "^4.0.0"
25
5"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": 26"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2":
6 version "1.1.2" 27 version "1.1.2"
7 resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" 28 resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf"
@@ -56,14 +77,14 @@
56 integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA= 77 integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=
57 78
58"@types/long@^4.0.0": 79"@types/long@^4.0.0":
59 version "4.0.0" 80 version "4.0.1"
60 resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.0.tgz#719551d2352d301ac8b81db732acb6bdc28dbdef" 81 resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.1.tgz#459c65fa1867dafe6a8f322c4c51695663cc55e9"
61 integrity sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q== 82 integrity sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==
62 83
63"@types/node@^10.1.0": 84"@types/node@^10.1.0":
64 version "10.14.22" 85 version "10.17.18"
65 resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.22.tgz#34bcdf6b6cb5fc0db33d24816ad9d3ece22feea4" 86 resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.18.tgz#ae364d97382aacdebf583fa4e7132af2dfe56a0c"
66 integrity sha512-9taxKC944BqoTVjE+UT3pQH0nHZlTvITwfsOZqyc+R3sfJuxaTtxWjfn1K2UlxyPcKHf0rnaXcVFrS9F9vf0bw== 87 integrity sha512-DQ2hl/Jl3g33KuAUOcMrcAOtsbzb+y/ufakzAdeK9z/H/xsvkpbETZZbPNMIiQuk24f5ZRMCcZIViAwyFIiKmg==
67 88
68abbrev@1: 89abbrev@1:
69 version "1.1.1" 90 version "1.1.1"
@@ -93,18 +114,31 @@ ansi-regex@^3.0.0:
93 resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 114 resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
94 integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= 115 integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
95 116
117ansi-regex@^5.0.0:
118 version "5.0.0"
119 resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
120 integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
121
122ansi-styles@^3.2.1:
123 version "3.2.1"
124 resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
125 integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
126 dependencies:
127 color-convert "^1.9.0"
128
96application-config-path@^0.1.0: 129application-config-path@^0.1.0:
97 version "0.1.0" 130 version "0.1.0"
98 resolved "https://registry.yarnpkg.com/application-config-path/-/application-config-path-0.1.0.tgz#193c5f0a86541a4c66fba1e2dc38583362ea5e8f" 131 resolved "https://registry.yarnpkg.com/application-config-path/-/application-config-path-0.1.0.tgz#193c5f0a86541a4c66fba1e2dc38583362ea5e8f"
99 integrity sha1-GTxfCoZUGkxm+6Hi3DhYM2LqXo8= 132 integrity sha1-GTxfCoZUGkxm+6Hi3DhYM2LqXo8=
100 133
101application-config@^1.0.1: 134application-config@^2.0.0:
102 version "1.0.1" 135 version "2.0.0"
103 resolved "https://registry.yarnpkg.com/application-config/-/application-config-1.0.1.tgz#5aa2e2a5ed6abd2e5d1d473d3596f574044fe9e7" 136 resolved "https://registry.yarnpkg.com/application-config/-/application-config-2.0.0.tgz#15b4d54d61c0c082f9802227e3e85de876b47747"
104 integrity sha1-WqLipe1qvS5dHUc9NZb1dARP6ec= 137 integrity sha512-NC5/0guSZK3/UgUDfCk/riByXzqz0owL1L3r63JPSBzYk5QALrp3bLxbsR7qeSfvYfFmAhnp3dbqYsW3U9MpZQ==
105 dependencies: 138 dependencies:
106 application-config-path "^0.1.0" 139 application-config-path "^0.1.0"
107 mkdirp "^0.5.1" 140 load-json-file "^6.2.0"
141 write-json-file "^4.2.0"
108 142
109aproba@^1.0.3: 143aproba@^1.0.3:
110 version "1.2.0" 144 version "1.2.0"
@@ -119,11 +153,6 @@ are-we-there-yet@~1.1.2:
119 delegates "^1.0.0" 153 delegates "^1.0.0"
120 readable-stream "^2.0.6" 154 readable-stream "^2.0.6"
121 155
122async-limiter@^1.0.0:
123 version "1.0.1"
124 resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd"
125 integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==
126
127balanced-match@^1.0.0: 156balanced-match@^1.0.0:
128 version "1.0.0" 157 version "1.0.0"
129 resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 158 resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
@@ -181,9 +210,9 @@ bittorrent-protocol@^3.0.0:
181 unordered-array-remove "^1.0.2" 210 unordered-array-remove "^1.0.2"
182 211
183bittorrent-tracker@^9.0.0: 212bittorrent-tracker@^9.0.0:
184 version "9.14.4" 213 version "9.14.5"
185 resolved "https://registry.yarnpkg.com/bittorrent-tracker/-/bittorrent-tracker-9.14.4.tgz#0d9661560e6fec37689dfc5045142772eac05536" 214 resolved "https://registry.yarnpkg.com/bittorrent-tracker/-/bittorrent-tracker-9.14.5.tgz#aa5573ba91c003581cb337c2889226137f65f32a"
186 integrity sha512-2Y/MNRjYhysD6t4r38z7l1WTT7g23IAqRWZRsj7xnnpciFn4xE4qiKmyFwA4gtbFGAZ14K3DdaqZbiQsC3PEfQ== 215 integrity sha512-Y1ng5r2qGCgDldjd9eYL8Mv1DjCo6eljqC+T6IMcwmYx0h20KNPKTxJkyNT5gaeJkAhM+p+jmhlV7/ty535Txg==
187 dependencies: 216 dependencies:
188 bencode "^2.0.0" 217 bencode "^2.0.0"
189 bittorrent-peerid "^1.0.2" 218 bittorrent-peerid "^1.0.2"
@@ -203,7 +232,6 @@ bittorrent-tracker@^9.0.0:
203 simple-peer "^9.0.0" 232 simple-peer "^9.0.0"
204 simple-websocket "^8.0.0" 233 simple-websocket "^8.0.0"
205 string2compact "^1.1.1" 234 string2compact "^1.1.1"
206 uniq "^1.0.1"
207 unordered-array-remove "^1.0.2" 235 unordered-array-remove "^1.0.2"
208 ws "^7.0.0" 236 ws "^7.0.0"
209 optionalDependencies: 237 optionalDependencies:
@@ -223,9 +251,9 @@ block-stream2@^2.0.0:
223 readable-stream "^3.4.0" 251 readable-stream "^3.4.0"
224 252
225bn.js@^5.0.0: 253bn.js@^5.0.0:
226 version "5.0.0" 254 version "5.1.1"
227 resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.0.0.tgz#5c3d398021b3ddb548c1296a16f857e908f35c70" 255 resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.1.tgz#48efc4031a9c4041b9c99c6941d903463ab62eb5"
228 integrity sha512-bVwDX8AF+72fIUNuARelKAlQUNtPOfG2fRxorbVvFk4zpHbqLrPdOGfVg5vrKwVzLLePqPBiATaOZNELQzmS0A== 256 integrity sha512-IUTD/REb78Z2eodka1QZyyEk66pciRcP6Sroka0aI3tG/iwIdYLrBD62RsubR7vqdt3WyX8p4jxeatzmRSphtA==
229 257
230brace-expansion@^1.1.7: 258brace-expansion@^1.1.7:
231 version "1.1.11" 259 version "1.1.11"
@@ -291,15 +319,24 @@ castv2@~0.1.4:
291 debug "^4.1.1" 319 debug "^4.1.1"
292 protobufjs "^6.8.8" 320 protobufjs "^6.8.8"
293 321
322chalk@^2.0.0:
323 version "2.4.2"
324 resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
325 integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
326 dependencies:
327 ansi-styles "^3.2.1"
328 escape-string-regexp "^1.0.5"
329 supports-color "^5.3.0"
330
294charset@^1.0.1: 331charset@^1.0.1:
295 version "1.0.1" 332 version "1.0.1"
296 resolved "https://registry.yarnpkg.com/charset/-/charset-1.0.1.tgz#8d59546c355be61049a8fa9164747793319852bd" 333 resolved "https://registry.yarnpkg.com/charset/-/charset-1.0.1.tgz#8d59546c355be61049a8fa9164747793319852bd"
297 integrity sha512-6dVyOOYjpfFcL1Y4qChrAoQLRHvj2ziyhcm0QJlhOcAhykL/k1kTUPbeo+87MNRTRdk2OIIsIXbuF3x2wi5EXg== 334 integrity sha512-6dVyOOYjpfFcL1Y4qChrAoQLRHvj2ziyhcm0QJlhOcAhykL/k1kTUPbeo+87MNRTRdk2OIIsIXbuF3x2wi5EXg==
298 335
299chownr@^1.1.1: 336chownr@^1.1.1:
300 version "1.1.3" 337 version "1.1.4"
301 resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" 338 resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
302 integrity sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw== 339 integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
303 340
304chrome-dgram@^3.0.2: 341chrome-dgram@^3.0.2:
305 version "3.0.4" 342 version "3.0.4"
@@ -347,12 +384,15 @@ chunk-store-stream@^4.0.0:
347 block-stream2 "^2.0.0" 384 block-stream2 "^2.0.0"
348 readable-stream "^3.4.0" 385 readable-stream "^3.4.0"
349 386
350cli-table@^0.3.1: 387cli-table3@^0.6.0:
351 version "0.3.1" 388 version "0.6.0"
352 resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23" 389 resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.0.tgz#b7b1bc65ca8e7b5cef9124e13dc2b21e2ce4faee"
353 integrity sha1-9TsFJmqLGguTSz0IIebi3FkUriM= 390 integrity sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ==
354 dependencies: 391 dependencies:
355 colors "1.0.3" 392 object-assign "^4.1.0"
393 string-width "^4.2.0"
394 optionalDependencies:
395 colors "^1.1.2"
356 396
357clivas@^0.2.0: 397clivas@^0.2.0:
358 version "0.2.0" 398 version "0.2.0"
@@ -364,10 +404,22 @@ code-point-at@^1.0.0:
364 resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 404 resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
365 integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= 405 integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
366 406
367colors@1.0.3: 407color-convert@^1.9.0:
368 version "1.0.3" 408 version "1.9.3"
369 resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" 409 resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
370 integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs= 410 integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
411 dependencies:
412 color-name "1.1.3"
413
414color-name@1.1.3:
415 version "1.1.3"
416 resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
417 integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
418
419colors@^1.1.2:
420 version "1.4.0"
421 resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78"
422 integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==
371 423
372common-tags@^1.8.0: 424common-tags@^1.8.0:
373 version "1.8.0" 425 version "1.8.0"
@@ -475,18 +527,16 @@ deep-extend@^0.6.0:
475 resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" 527 resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
476 integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== 528 integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
477 529
478define-properties@^1.1.2, define-properties@^1.1.3:
479 version "1.1.3"
480 resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
481 integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
482 dependencies:
483 object-keys "^1.0.12"
484
485delegates@^1.0.0: 530delegates@^1.0.0:
486 version "1.0.0" 531 version "1.0.0"
487 resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" 532 resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
488 integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= 533 integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
489 534
535detect-indent@^6.0.0:
536 version "6.0.0"
537 resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.0.0.tgz#0abd0f549f69fc6659a254fe96786186b6f528fd"
538 integrity sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA==
539
490detect-libc@^1.0.2: 540detect-libc@^1.0.2:
491 version "1.0.3" 541 version "1.0.3"
492 resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" 542 resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
@@ -529,9 +579,9 @@ domexception@^1.0.1:
529 webidl-conversions "^4.0.2" 579 webidl-conversions "^4.0.2"
530 580
531ecstatic@^4.0.0: 581ecstatic@^4.0.0:
532 version "4.1.2" 582 version "4.1.4"
533 resolved "https://registry.yarnpkg.com/ecstatic/-/ecstatic-4.1.2.tgz#3afbe29849b32bc2a1f8a90f67e01dc048c7ad40" 583 resolved "https://registry.yarnpkg.com/ecstatic/-/ecstatic-4.1.4.tgz#86bf340dabe56c4d0c93d406ac36c040f68e1d79"
534 integrity sha512-lnrAOpU2f7Ra8dm1pW0D1ucyUxQIEk8RjFrvROg1YqCV0ueVu9hzgiSEbSyROqXDDiHREdqC4w3AwOTb23P4UQ== 584 integrity sha512-8E4ZLK4uRuB9pwywGpy/B9vcz4gCp6IY7u4cMbeCINr/fjb1v+0wf0Ae2XlfSnG8xZYnE4uaJBjFkYI0bqcIdw==
535 dependencies: 585 dependencies:
536 charset "^1.0.1" 586 charset "^1.0.1"
537 he "^1.1.1" 587 he "^1.1.1"
@@ -552,6 +602,18 @@ elementtree@^0.1.6, elementtree@~0.1.6:
552 dependencies: 602 dependencies:
553 sax "1.1.4" 603 sax "1.1.4"
554 604
605emoji-regex@^8.0.0:
606 version "8.0.0"
607 resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
608 integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
609
610end-of-stream@1.4.1:
611 version "1.4.1"
612 resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43"
613 integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==
614 dependencies:
615 once "^1.4.0"
616
555end-of-stream@^1.1.0: 617end-of-stream@^1.1.0:
556 version "1.4.4" 618 version "1.4.4"
557 resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" 619 resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
@@ -559,36 +621,23 @@ end-of-stream@^1.1.0:
559 dependencies: 621 dependencies:
560 once "^1.4.0" 622 once "^1.4.0"
561 623
562es-abstract@^1.5.1: 624error-ex@^1.3.1:
563 version "1.16.0" 625 version "1.3.2"
564 resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.16.0.tgz#d3a26dc9c3283ac9750dca569586e976d9dcc06d" 626 resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
565 integrity sha512-xdQnfykZ9JMEiasTAJZJdMWCQ1Vm00NBw79/AWi7ELfZuuPCSOMDZbT9mkOfSctVtfhb+sAAzrm+j//GjjLHLg== 627 integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
566 dependencies:
567 es-to-primitive "^1.2.0"
568 function-bind "^1.1.1"
569 has "^1.0.3"
570 has-symbols "^1.0.0"
571 is-callable "^1.1.4"
572 is-regex "^1.0.4"
573 object-inspect "^1.6.0"
574 object-keys "^1.1.1"
575 string.prototype.trimleft "^2.1.0"
576 string.prototype.trimright "^2.1.0"
577
578es-to-primitive@^1.2.0:
579 version "1.2.0"
580 resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377"
581 integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==
582 dependencies: 628 dependencies:
583 is-callable "^1.1.4" 629 is-arrayish "^0.2.1"
584 is-date-object "^1.0.1"
585 is-symbol "^1.0.2"
586 630
587escape-html@^1.0.3: 631escape-html@^1.0.3:
588 version "1.0.3" 632 version "1.0.3"
589 resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 633 resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
590 integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= 634 integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
591 635
636escape-string-regexp@^1.0.5:
637 version "1.0.5"
638 resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
639 integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
640
592execa@^0.10.0: 641execa@^0.10.0:
593 version "0.10.0" 642 version "0.10.0"
594 resolved "https://registry.yarnpkg.com/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50" 643 resolved "https://registry.yarnpkg.com/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50"
@@ -645,11 +694,6 @@ fs.realpath@^1.0.0:
645 resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 694 resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
646 integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 695 integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
647 696
648function-bind@^1.1.1:
649 version "1.1.1"
650 resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
651 integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
652
653gauge@~2.7.3: 697gauge@~2.7.3:
654 version "2.7.4" 698 version "2.7.4"
655 resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" 699 resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
@@ -680,9 +724,9 @@ get-stream@^3.0.0:
680 integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= 724 integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=
681 725
682glob@^7.1.3: 726glob@^7.1.3:
683 version "7.1.4" 727 version "7.1.6"
684 resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" 728 resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
685 integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== 729 integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
686 dependencies: 730 dependencies:
687 fs.realpath "^1.0.0" 731 fs.realpath "^1.0.0"
688 inflight "^1.0.4" 732 inflight "^1.0.4"
@@ -691,23 +735,21 @@ glob@^7.1.3:
691 once "^1.3.0" 735 once "^1.3.0"
692 path-is-absolute "^1.0.0" 736 path-is-absolute "^1.0.0"
693 737
694has-symbols@^1.0.0: 738graceful-fs@^4.1.15:
695 version "1.0.0" 739 version "4.2.3"
696 resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" 740 resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423"
697 integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= 741 integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==
742
743has-flag@^3.0.0:
744 version "3.0.0"
745 resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
746 integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
698 747
699has-unicode@^2.0.0: 748has-unicode@^2.0.0:
700 version "2.0.1" 749 version "2.0.1"
701 resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" 750 resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
702 integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= 751 integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
703 752
704has@^1.0.1, has@^1.0.3:
705 version "1.0.3"
706 resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
707 integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
708 dependencies:
709 function-bind "^1.1.1"
710
711he@^1.1.1: 753he@^1.1.1:
712 version "1.2.0" 754 version "1.2.0"
713 resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" 755 resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
@@ -747,6 +789,11 @@ immediate-chunk-store@^2.0.0:
747 dependencies: 789 dependencies:
748 queue-microtask "^1.1.2" 790 queue-microtask "^1.1.2"
749 791
792imurmurhash@^0.1.4:
793 version "0.1.4"
794 resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
795 integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
796
750inflight@^1.0.4: 797inflight@^1.0.4:
751 version "1.0.6" 798 version "1.0.6"
752 resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 799 resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
@@ -782,20 +829,20 @@ ip@^1.0.1, ip@^1.1.0, ip@^1.1.3:
782 resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" 829 resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
783 integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== 830 integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
784 831
832is-arrayish@^0.2.1:
833 version "0.2.1"
834 resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
835 integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
836
785is-ascii@^1.0.0: 837is-ascii@^1.0.0:
786 version "1.0.0" 838 version "1.0.0"
787 resolved "https://registry.yarnpkg.com/is-ascii/-/is-ascii-1.0.0.tgz#f02ad0259a0921cd199ff21ce1b09e0f6b4e3929" 839 resolved "https://registry.yarnpkg.com/is-ascii/-/is-ascii-1.0.0.tgz#f02ad0259a0921cd199ff21ce1b09e0f6b4e3929"
788 integrity sha1-8CrQJZoJIc0Zn/Ic4bCeD2tOOSk= 840 integrity sha1-8CrQJZoJIc0Zn/Ic4bCeD2tOOSk=
789 841
790is-callable@^1.1.4: 842is-docker@^2.0.0:
791 version "1.1.4" 843 version "2.0.0"
792 resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" 844 resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.0.0.tgz#2cb0df0e75e2d064fe1864c37cdeacb7b2dcf25b"
793 integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== 845 integrity sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ==
794
795is-date-object@^1.0.1:
796 version "1.0.1"
797 resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
798 integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=
799 846
800is-file@^1.0.0: 847is-file@^1.0.0:
801 version "1.0.0" 848 version "1.0.0"
@@ -814,31 +861,27 @@ is-fullwidth-code-point@^2.0.0:
814 resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 861 resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
815 integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 862 integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
816 863
817is-regex@^1.0.4: 864is-fullwidth-code-point@^3.0.0:
818 version "1.0.4" 865 version "3.0.0"
819 resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" 866 resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
820 integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= 867 integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
821 dependencies: 868
822 has "^1.0.1" 869is-plain-obj@^2.0.0:
870 version "2.1.0"
871 resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287"
872 integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==
823 873
824is-stream@^1.1.0: 874is-stream@^1.1.0:
825 version "1.1.0" 875 version "1.1.0"
826 resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 876 resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
827 integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= 877 integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
828 878
829is-symbol@^1.0.2:
830 version "1.0.2"
831 resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38"
832 integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==
833 dependencies:
834 has-symbols "^1.0.0"
835
836is-typedarray@^1.0.0: 879is-typedarray@^1.0.0:
837 version "1.0.0" 880 version "1.0.0"
838 resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 881 resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
839 integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= 882 integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
840 883
841is-wsl@^2.1.0: 884is-wsl@^2.1.1:
842 version "2.1.1" 885 version "2.1.1"
843 resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.1.1.tgz#4a1c152d429df3d441669498e2486d3596ebaf1d" 886 resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.1.1.tgz#4a1c152d429df3d441669498e2486d3596ebaf1d"
844 integrity sha512-umZHcSrwlDHo2TGMXv0DZ8dIUGunZ2Iv68YZnrmCiBPkZ4aaOhtv7pXJKeki9k3qJ3RJr0cDyitcl5wEH3AYog== 887 integrity sha512-umZHcSrwlDHo2TGMXv0DZ8dIUGunZ2Iv68YZnrmCiBPkZ4aaOhtv7pXJKeki9k3qJ3RJr0cDyitcl5wEH3AYog==
@@ -853,6 +896,16 @@ isexe@^2.0.0:
853 resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 896 resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
854 integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 897 integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
855 898
899js-tokens@^4.0.0:
900 version "4.0.0"
901 resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
902 integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
903
904json-parse-better-errors@^1.0.1:
905 version "1.0.2"
906 resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
907 integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
908
856junk@^3.1.0: 909junk@^3.1.0:
857 version "3.1.0" 910 version "3.1.0"
858 resolved "https://registry.yarnpkg.com/junk/-/junk-3.1.0.tgz#31499098d902b7e98c5d9b9c80f43457a88abfa1" 911 resolved "https://registry.yarnpkg.com/junk/-/junk-3.1.0.tgz#31499098d902b7e98c5d9b9c80f43457a88abfa1"
@@ -889,6 +942,11 @@ last-one-wins@^1.0.4:
889 resolved "https://registry.yarnpkg.com/last-one-wins/-/last-one-wins-1.0.4.tgz#c1bfd0cbcb46790ec9156b8d1aee8fcb86cda22a" 942 resolved "https://registry.yarnpkg.com/last-one-wins/-/last-one-wins-1.0.4.tgz#c1bfd0cbcb46790ec9156b8d1aee8fcb86cda22a"
890 integrity sha1-wb/Qy8tGeQ7JFWuNGu6Py4bNoio= 943 integrity sha1-wb/Qy8tGeQ7JFWuNGu6Py4bNoio=
891 944
945lines-and-columns@^1.1.6:
946 version "1.1.6"
947 resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
948 integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=
949
892load-ip-set@^2.1.0: 950load-ip-set@^2.1.0:
893 version "2.1.0" 951 version "2.1.0"
894 resolved "https://registry.yarnpkg.com/load-ip-set/-/load-ip-set-2.1.0.tgz#2d50b737cae41de4e413d213991d4083a3e1784b" 952 resolved "https://registry.yarnpkg.com/load-ip-set/-/load-ip-set-2.1.0.tgz#2d50b737cae41de4e413d213991d4083a3e1784b"
@@ -900,6 +958,16 @@ load-ip-set@^2.1.0:
900 simple-get "^3.0.0" 958 simple-get "^3.0.0"
901 split "^1.0.0" 959 split "^1.0.0"
902 960
961load-json-file@^6.2.0:
962 version "6.2.0"
963 resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-6.2.0.tgz#5c7770b42cafa97074ca2848707c61662f4251a1"
964 integrity sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==
965 dependencies:
966 graceful-fs "^4.1.15"
967 parse-json "^5.0.0"
968 strip-bom "^4.0.0"
969 type-fest "^0.6.0"
970
903long@^4.0.0: 971long@^4.0.0:
904 version "4.0.0" 972 version "4.0.0"
905 resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" 973 resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28"
@@ -920,6 +988,13 @@ magnet-uri@^5.1.3:
920 thirty-two "^1.0.1" 988 thirty-two "^1.0.1"
921 uniq "^1.0.1" 989 uniq "^1.0.1"
922 990
991make-dir@^3.0.0:
992 version "3.0.2"
993 resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.2.tgz#04a1acbf22221e1d6ef43559f43e05a90dbb4392"
994 integrity sha512-rYKABKutXa6vXTXhoV18cBE7PaewPXHe/Bdq4v+ZLMhxbWApkFFplT0LcbMW+6BbjnQXzZ/sAvSE/JdguApG5w==
995 dependencies:
996 semver "^6.0.0"
997
923mdns-js-packet@~0.2.0: 998mdns-js-packet@~0.2.0:
924 version "0.2.0" 999 version "0.2.0"
925 resolved "https://registry.yarnpkg.com/mdns-js-packet/-/mdns-js-packet-0.2.0.tgz#642409e8183c7561cc60615bbd1420ec2fad7616" 1000 resolved "https://registry.yarnpkg.com/mdns-js-packet/-/mdns-js-packet-0.2.0.tgz#642409e8183c7561cc60615bbd1420ec2fad7616"
@@ -967,9 +1042,9 @@ mimic-response@^1.0.0:
967 integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== 1042 integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==
968 1043
969mimic-response@^2.0.0: 1044mimic-response@^2.0.0:
970 version "2.0.0" 1045 version "2.1.0"
971 resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.0.0.tgz#996a51c60adf12cb8a87d7fb8ef24c2f3d5ebb46" 1046 resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43"
972 integrity sha512-8ilDoEapqA4uQ3TwS0jakGONKXVJqpy+RpM+3b7pLdOjghCrEiGp9SRkFbUHAmZW9vdnrENWHjaweIoTIJExSQ== 1047 integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==
973 1048
974minimatch@^3.0.4: 1049minimatch@^3.0.4:
975 version "3.0.4" 1050 version "3.0.4"
@@ -978,15 +1053,10 @@ minimatch@^3.0.4:
978 dependencies: 1053 dependencies:
979 brace-expansion "^1.1.7" 1054 brace-expansion "^1.1.7"
980 1055
981minimist@0.0.8: 1056minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5:
982 version "0.0.8" 1057 version "1.2.5"
983 resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 1058 resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
984 integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= 1059 integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
985
986minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0:
987 version "1.2.0"
988 resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
989 integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
990 1060
991minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: 1061minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0:
992 version "2.9.0" 1062 version "2.9.0"
@@ -1003,12 +1073,17 @@ minizlib@^1.2.1:
1003 dependencies: 1073 dependencies:
1004 minipass "^2.9.0" 1074 minipass "^2.9.0"
1005 1075
1076mkdirp-classic@^0.5.2:
1077 version "0.5.2"
1078 resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.2.tgz#54c441ce4c96cd7790e10b41a87aa51068ecab2b"
1079 integrity sha512-ejdnDQcR75gwknmMw/tx02AuRs8jCtqFoFqDZMjiNxsu85sRIJVXDKHuLYvUUPRBUtV2FpSZa9bL1BUa3BdR2g==
1080
1006mkdirp@^0.5.0, mkdirp@^0.5.1: 1081mkdirp@^0.5.0, mkdirp@^0.5.1:
1007 version "0.5.1" 1082 version "0.5.4"
1008 resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 1083 resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.4.tgz#fd01504a6797ec5c9be81ff43d204961ed64a512"
1009 integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= 1084 integrity sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==
1010 dependencies: 1085 dependencies:
1011 minimist "0.0.8" 1086 minimist "^1.2.5"
1012 1087
1013moment@^2.12.0: 1088moment@^2.12.0:
1014 version "2.24.0" 1089 version "2.24.0"
@@ -1057,9 +1132,9 @@ multistream@^4.0.0:
1057 readable-stream "^3.4.0" 1132 readable-stream "^3.4.0"
1058 1133
1059needle@^2.2.1: 1134needle@^2.2.1:
1060 version "2.4.0" 1135 version "2.3.3"
1061 resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" 1136 resolved "https://registry.yarnpkg.com/needle/-/needle-2.3.3.tgz#a041ad1d04a871b0ebb666f40baaf1fb47867117"
1062 integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== 1137 integrity sha512-EkY0GeSq87rWp1hoq/sH/wnTWgFVhYlnIkbJ0YJFfRgEFlz2RraCjBpFQ+vrEgEdp0ThfyHADmkChEhcb7PKyw==
1063 dependencies: 1138 dependencies:
1064 debug "^3.2.6" 1139 debug "^3.2.6"
1065 iconv-lite "^0.4.4" 1140 iconv-lite "^0.4.4"
@@ -1130,25 +1205,33 @@ nodebmc@0.0.7:
1130 mdns-js "0.5.0" 1205 mdns-js "0.5.0"
1131 1206
1132nopt@^4.0.1: 1207nopt@^4.0.1:
1133 version "4.0.1" 1208 version "4.0.3"
1134 resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" 1209 resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48"
1135 integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= 1210 integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==
1136 dependencies: 1211 dependencies:
1137 abbrev "1" 1212 abbrev "1"
1138 osenv "^0.1.4" 1213 osenv "^0.1.4"
1139 1214
1140npm-bundled@^1.0.1: 1215npm-bundled@^1.0.1:
1141 version "1.0.6" 1216 version "1.1.1"
1142 resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" 1217 resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b"
1143 integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== 1218 integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==
1219 dependencies:
1220 npm-normalize-package-bin "^1.0.1"
1221
1222npm-normalize-package-bin@^1.0.1:
1223 version "1.0.1"
1224 resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2"
1225 integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==
1144 1226
1145npm-packlist@^1.1.6: 1227npm-packlist@^1.1.6:
1146 version "1.4.6" 1228 version "1.4.8"
1147 resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.6.tgz#53ba3ed11f8523079f1457376dd379ee4ea42ff4" 1229 resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e"
1148 integrity sha512-u65uQdb+qwtGvEJh/DgQgW1Xg7sqeNbmxYyrvlNznaVTjV3E5P6F/EFjM+BVHXl7JJlsdG8A64M0XI8FI/IOlg== 1230 integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==
1149 dependencies: 1231 dependencies:
1150 ignore-walk "^3.0.1" 1232 ignore-walk "^3.0.1"
1151 npm-bundled "^1.0.1" 1233 npm-bundled "^1.0.1"
1234 npm-normalize-package-bin "^1.0.1"
1152 1235
1153npm-run-path@^2.0.0: 1236npm-run-path@^2.0.0:
1154 version "2.0.2" 1237 version "2.0.2"
@@ -1177,24 +1260,6 @@ object-assign@^4.1.0:
1177 resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1260 resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
1178 integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 1261 integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
1179 1262
1180object-inspect@^1.6.0:
1181 version "1.6.0"
1182 resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b"
1183 integrity sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==
1184
1185object-keys@^1.0.12, object-keys@^1.1.1:
1186 version "1.1.1"
1187 resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
1188 integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
1189
1190object.getownpropertydescriptors@^2.0.3:
1191 version "2.0.3"
1192 resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16"
1193 integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=
1194 dependencies:
1195 define-properties "^1.1.2"
1196 es-abstract "^1.5.1"
1197
1198on-finished@^2.3.0: 1263on-finished@^2.3.0:
1199 version "2.3.0" 1264 version "2.3.0"
1200 resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 1265 resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
@@ -1210,11 +1275,12 @@ once@^1.3.0, once@^1.3.1, once@^1.3.3, once@^1.4.0:
1210 wrappy "1" 1275 wrappy "1"
1211 1276
1212open@^7.0.0: 1277open@^7.0.0:
1213 version "7.0.0" 1278 version "7.0.3"
1214 resolved "https://registry.yarnpkg.com/open/-/open-7.0.0.tgz#7e52999b14eb73f90f0f0807fe93897c4ae73ec9" 1279 resolved "https://registry.yarnpkg.com/open/-/open-7.0.3.tgz#db551a1af9c7ab4c7af664139930826138531c48"
1215 integrity sha512-K6EKzYqnwQzk+/dzJAQSBORub3xlBTxMz+ntpZpH/LyCa1o6KjXhuN+2npAaI9jaSmU3R1Q8NWf4KUWcyytGsQ== 1280 integrity sha512-sP2ru2v0P290WFfv49Ap8MF6PkzGNnGlAwHweB4WR4mr5d2d0woiCluUeJ218w7/+PmoBy9JmYgD5A4mLcWOFA==
1216 dependencies: 1281 dependencies:
1217 is-wsl "^2.1.0" 1282 is-docker "^2.0.0"
1283 is-wsl "^2.1.1"
1218 1284
1219os-homedir@^1.0.0: 1285os-homedir@^1.0.0:
1220 version "1.0.2" 1286 version "1.0.2"
@@ -1246,15 +1312,25 @@ package-json-versionify@^1.0.2:
1246 dependencies: 1312 dependencies:
1247 browserify-package-json "^1.0.0" 1313 browserify-package-json "^1.0.0"
1248 1314
1315parse-json@^5.0.0:
1316 version "5.0.0"
1317 resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.0.0.tgz#73e5114c986d143efa3712d4ea24db9a4266f60f"
1318 integrity sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==
1319 dependencies:
1320 "@babel/code-frame" "^7.0.0"
1321 error-ex "^1.3.1"
1322 json-parse-better-errors "^1.0.1"
1323 lines-and-columns "^1.1.6"
1324
1249parse-numeric-range@^0.0.2: 1325parse-numeric-range@^0.0.2:
1250 version "0.0.2" 1326 version "0.0.2"
1251 resolved "https://registry.yarnpkg.com/parse-numeric-range/-/parse-numeric-range-0.0.2.tgz#b4f09d413c7adbcd987f6e9233c7b4b210c938e4" 1327 resolved "https://registry.yarnpkg.com/parse-numeric-range/-/parse-numeric-range-0.0.2.tgz#b4f09d413c7adbcd987f6e9233c7b4b210c938e4"
1252 integrity sha1-tPCdQTx6282Yf26SM8e0shDJOOQ= 1328 integrity sha1-tPCdQTx6282Yf26SM8e0shDJOOQ=
1253 1329
1254parse-torrent@^7.0.0: 1330parse-torrent@^7.0.0:
1255 version "7.0.1" 1331 version "7.1.2"
1256 resolved "https://registry.yarnpkg.com/parse-torrent/-/parse-torrent-7.0.1.tgz#669c51a95363550055c7de0957741d6a05575daf" 1332 resolved "https://registry.yarnpkg.com/parse-torrent/-/parse-torrent-7.1.2.tgz#4ecde4b3be2729ba2b6f336040910d6fe4649d19"
1257 integrity sha512-FdF1kBImRLt+ICV4NTz8L+sI2hFlPXAq1tXuw21gKz8EuThyVUFJ/wPfBEyYQrvnBpmGf7cM/LVSOhMRe8MrKw== 1333 integrity sha512-1boHRA+aV7aeZBIg0rMBYhtfizAd/BXCXOCh/klYrgVnSpUAuJUIzQrIGkCsb93U1KOVN6C3NZOgpNy8htmqgw==
1258 dependencies: 1334 dependencies:
1259 bencode "^2.0.0" 1335 bencode "^2.0.0"
1260 blob-to-buffer "^1.2.6" 1336 blob-to-buffer "^1.2.6"
@@ -1262,7 +1338,6 @@ parse-torrent@^7.0.0:
1262 magnet-uri "^5.1.3" 1338 magnet-uri "^5.1.3"
1263 simple-get "^3.0.1" 1339 simple-get "^3.0.1"
1264 simple-sha1 "^3.0.0" 1340 simple-sha1 "^3.0.0"
1265 uniq "^1.0.1"
1266 1341
1267path-is-absolute@^1.0.0: 1342path-is-absolute@^1.0.0:
1268 version "1.0.1" 1343 version "1.0.1"
@@ -1303,9 +1378,9 @@ process-nextick-args@~2.0.0:
1303 integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== 1378 integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
1304 1379
1305protobufjs@^6.8.8: 1380protobufjs@^6.8.8:
1306 version "6.8.8" 1381 version "6.8.9"
1307 resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.8.8.tgz#c8b4f1282fd7a90e6f5b109ed11c84af82908e7c" 1382 resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.8.9.tgz#0b1adbcdaa983d369c3d9108a97c814edc030754"
1308 integrity sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw== 1383 integrity sha512-j2JlRdUeL/f4Z6x4aU4gj9I2LECglC+5qR2TrWb193Tla1qfdaNQTZ8I27Pt7K0Ajmvjjpft7O3KWTGciz4gpw==
1309 dependencies: 1384 dependencies:
1310 "@protobufjs/aspromise" "^1.1.2" 1385 "@protobufjs/aspromise" "^1.1.2"
1311 "@protobufjs/base64" "^1.1.2" 1386 "@protobufjs/base64" "^1.1.2"
@@ -1340,17 +1415,17 @@ queue-microtask@^1.1.0, queue-microtask@^1.1.2:
1340 integrity sha512-F9wwNePtXrzZenAB3ax0Y8TSKGvuB7Qw16J30hspEUTbfUM+H827XyN3rlpwhVmtm5wuZtbKIHjOnwDn7MUxWQ== 1415 integrity sha512-F9wwNePtXrzZenAB3ax0Y8TSKGvuB7Qw16J30hspEUTbfUM+H827XyN3rlpwhVmtm5wuZtbKIHjOnwDn7MUxWQ==
1341 1416
1342random-access-file@^2.0.1: 1417random-access-file@^2.0.1:
1343 version "2.1.3" 1418 version "2.1.4"
1344 resolved "https://registry.yarnpkg.com/random-access-file/-/random-access-file-2.1.3.tgz#642c4b29e39c7dd91609a2e912f174d70fd4f82a" 1419 resolved "https://registry.yarnpkg.com/random-access-file/-/random-access-file-2.1.4.tgz#d783e9082d08094c08c6f3dd481f37b2079709dc"
1345 integrity sha512-AE0Z1ywR5gIkzACMC1lCsR6LP8g4ynNm7oYWYdKPSSU6Y3H+mGDJxBqfcV9B9KstfHNemhfX3nYmx99ZC9f/yg== 1420 integrity sha512-WAcBP5iLhg1pbjZA40WyMenjK7c5gJUY6Pi5HJ3fLJCeVFNSZv3juf20yFMKxBdvcX5GKbX/HZSfFzlLBdGTdQ==
1346 dependencies: 1421 dependencies:
1347 mkdirp "^0.5.1" 1422 mkdirp-classic "^0.5.2"
1348 random-access-storage "^1.1.1" 1423 random-access-storage "^1.1.1"
1349 1424
1350random-access-storage@^1.1.1: 1425random-access-storage@^1.1.1:
1351 version "1.4.0" 1426 version "1.4.1"
1352 resolved "https://registry.yarnpkg.com/random-access-storage/-/random-access-storage-1.4.0.tgz#cbe5b5ccfb38680aac7b78a050d9f0a5ef36841f" 1427 resolved "https://registry.yarnpkg.com/random-access-storage/-/random-access-storage-1.4.1.tgz#39a524dd428ade9161ce61a8ae677766e6117ffb"
1353 integrity sha512-7oszloM/+PdqWp/oFGyL6SeI14liqo8AAisHAZQGkWdHISyAnngKjNPL0JYIazeLxbHPY6oed2yUffowdq/o6A== 1428 integrity sha512-DbCc2TIzOxPaHF6KCbr8zLtiYOJQQQCBHUVNHV/SckUQobCBB2YkDtbLdxGnPwPNpJfEyMWxDAm36A2xkbxxtw==
1354 dependencies: 1429 dependencies:
1355 inherits "^2.0.3" 1430 inherits "^2.0.3"
1356 1431
@@ -1389,9 +1464,9 @@ rc@^1.2.7:
1389 strip-json-comments "~2.0.1" 1464 strip-json-comments "~2.0.1"
1390 1465
1391readable-stream@^2.0.6, readable-stream@^2.2.2: 1466readable-stream@^2.0.6, readable-stream@^2.2.2:
1392 version "2.3.6" 1467 version "2.3.7"
1393 resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" 1468 resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
1394 integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== 1469 integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
1395 dependencies: 1470 dependencies:
1396 core-util-is "~1.0.0" 1471 core-util-is "~1.0.0"
1397 inherits "~2.0.3" 1472 inherits "~2.0.3"
@@ -1402,9 +1477,9 @@ readable-stream@^2.0.6, readable-stream@^2.2.2:
1402 util-deprecate "~1.0.1" 1477 util-deprecate "~1.0.1"
1403 1478
1404readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0: 1479readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0:
1405 version "3.4.0" 1480 version "3.6.0"
1406 resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" 1481 resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
1407 integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ== 1482 integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
1408 dependencies: 1483 dependencies:
1409 inherits "^2.0.3" 1484 inherits "^2.0.3"
1410 string_decoder "^1.1.1" 1485 string_decoder "^1.1.1"
@@ -1434,9 +1509,9 @@ rimraf@^2.6.1:
1434 glob "^7.1.3" 1509 glob "^7.1.3"
1435 1510
1436rimraf@^3.0.0: 1511rimraf@^3.0.0:
1437 version "3.0.0" 1512 version "3.0.2"
1438 resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.0.tgz#614176d4b3010b75e5c390eb0ee96f6dc0cebb9b" 1513 resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
1439 integrity sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg== 1514 integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
1440 dependencies: 1515 dependencies:
1441 glob "^7.1.3" 1516 glob "^7.1.3"
1442 1517
@@ -1490,6 +1565,11 @@ semver@^5.3.0, semver@^5.5.0:
1490 resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 1565 resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
1491 integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 1566 integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
1492 1567
1568semver@^6.0.0:
1569 version "6.3.0"
1570 resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
1571 integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
1572
1493semver@~5.1.0: 1573semver@~5.1.0:
1494 version "5.1.1" 1574 version "5.1.1"
1495 resolved "https://registry.yarnpkg.com/semver/-/semver-5.1.1.tgz#a3292a373e6f3e0798da0b20641b9a9c5bc47e19" 1575 resolved "https://registry.yarnpkg.com/semver/-/semver-5.1.1.tgz#a3292a373e6f3e0798da0b20641b9a9c5bc47e19"
@@ -1512,10 +1592,10 @@ shebang-regex@^1.0.0:
1512 resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 1592 resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
1513 integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= 1593 integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
1514 1594
1515signal-exit@^3.0.0: 1595signal-exit@^3.0.0, signal-exit@^3.0.2:
1516 version "3.0.2" 1596 version "3.0.3"
1517 resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 1597 resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
1518 integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= 1598 integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==
1519 1599
1520simple-concat@^1.0.0: 1600simple-concat@^1.0.0:
1521 version "1.0.0" 1601 version "1.0.0"
@@ -1541,9 +1621,9 @@ simple-get@^3.0.0, simple-get@^3.0.1:
1541 simple-concat "^1.0.0" 1621 simple-concat "^1.0.0"
1542 1622
1543simple-peer@^9.0.0: 1623simple-peer@^9.0.0:
1544 version "9.6.0" 1624 version "9.6.2"
1545 resolved "https://registry.yarnpkg.com/simple-peer/-/simple-peer-9.6.0.tgz#1560653c2f5360c122f7912cfdb32e8124f5e2c4" 1625 resolved "https://registry.yarnpkg.com/simple-peer/-/simple-peer-9.6.2.tgz#42418e77cf8f9184e4fa22ef1017b195c2bf84d7"
1546 integrity sha512-NYqSKPu75xhkZYKGJhCbLCG5kfBtDHf8U9ddk4EKFfYNU7XgIisov+V8wMbVVgyMCfn8pm8uOqQQmE50FPDFWA== 1626 integrity sha512-EOKoImCaqtNvXIntxT1CBBK/3pVi7tMAoJ3shdyd9qk3zLm3QPiRLb/sPC1G2xvKJkJc5fkQjCXqRZ0AknwTig==
1547 dependencies: 1627 dependencies:
1548 debug "^4.0.1" 1628 debug "^4.0.1"
1549 get-browser-rtc "^1.0.0" 1629 get-browser-rtc "^1.0.0"
@@ -1560,15 +1640,23 @@ simple-sha1@^3.0.0, simple-sha1@^3.0.1:
1560 rusha "^0.8.1" 1640 rusha "^0.8.1"
1561 1641
1562simple-websocket@^8.0.0: 1642simple-websocket@^8.0.0:
1563 version "8.0.1" 1643 version "8.1.1"
1564 resolved "https://registry.yarnpkg.com/simple-websocket/-/simple-websocket-8.0.1.tgz#c28af779034b329d0cf1448a45fdd311d21fa289" 1644 resolved "https://registry.yarnpkg.com/simple-websocket/-/simple-websocket-8.1.1.tgz#4fd68cb1301c1253b2607cfe0950a8be37e6116a"
1565 integrity sha512-2QKSRjf+tqFXLVmOQjf95gHeKhuyx2k1ouDjtnE0uKCYw84HfN85HsXo+GmPH+2PIh5BQql++g2AIbHgGAZU4w== 1645 integrity sha512-06I3cwOD5Q3LdVd6qfyDGp1U9eau9x9qniSL3b/aDgM5bsJX4nZfCuii2UCFcTfrDq0jCXF4NQ/38qeC8CJZTg==
1566 dependencies: 1646 dependencies:
1567 debug "^4.1.1" 1647 debug "^4.1.1"
1648 queue-microtask "^1.1.0"
1568 randombytes "^2.0.3" 1649 randombytes "^2.0.3"
1569 readable-stream "^3.1.1" 1650 readable-stream "^3.1.1"
1570 ws "^7.0.0" 1651 ws "^7.0.0"
1571 1652
1653sort-keys@^4.0.0:
1654 version "4.0.0"
1655 resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-4.0.0.tgz#56dc5e256637bfe3fec8db0dc57c08b1a2be22d6"
1656 integrity sha512-hlJLzrn/VN49uyNkZ8+9b+0q9DjmmYcYOnbMQtpkLrYpPwRApDPZfmqbUfJnAA3sb/nRib+nDot7Zi/1ER1fuA==
1657 dependencies:
1658 is-plain-obj "^2.0.0"
1659
1572speedometer@^1.0.0: 1660speedometer@^1.0.0:
1573 version "1.1.0" 1661 version "1.1.0"
1574 resolved "https://registry.yarnpkg.com/speedometer/-/speedometer-1.1.0.tgz#a30b13abda45687a1a76977012c060f2ac8a7934" 1662 resolved "https://registry.yarnpkg.com/speedometer/-/speedometer-1.1.0.tgz#a30b13abda45687a1a76977012c060f2ac8a7934"
@@ -1617,21 +1705,14 @@ string-width@^1.0.1:
1617 is-fullwidth-code-point "^2.0.0" 1705 is-fullwidth-code-point "^2.0.0"
1618 strip-ansi "^4.0.0" 1706 strip-ansi "^4.0.0"
1619 1707
1620string.prototype.trimleft@^2.1.0: 1708string-width@^4.2.0:
1621 version "2.1.0" 1709 version "4.2.0"
1622 resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz#6cc47f0d7eb8d62b0f3701611715a3954591d634" 1710 resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5"
1623 integrity sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw== 1711 integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==
1624 dependencies:
1625 define-properties "^1.1.3"
1626 function-bind "^1.1.1"
1627
1628string.prototype.trimright@^2.1.0:
1629 version "2.1.0"
1630 resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz#669d164be9df9b6f7559fa8e89945b168a5a6c58"
1631 integrity sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==
1632 dependencies: 1712 dependencies:
1633 define-properties "^1.1.3" 1713 emoji-regex "^8.0.0"
1634 function-bind "^1.1.1" 1714 is-fullwidth-code-point "^3.0.0"
1715 strip-ansi "^6.0.0"
1635 1716
1636string2compact@^1.1.1, string2compact@^1.2.5: 1717string2compact@^1.1.1, string2compact@^1.2.5:
1637 version "1.3.0" 1718 version "1.3.0"
@@ -1669,6 +1750,18 @@ strip-ansi@^4.0.0:
1669 dependencies: 1750 dependencies:
1670 ansi-regex "^3.0.0" 1751 ansi-regex "^3.0.0"
1671 1752
1753strip-ansi@^6.0.0:
1754 version "6.0.0"
1755 resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
1756 integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==
1757 dependencies:
1758 ansi-regex "^5.0.0"
1759
1760strip-bom@^4.0.0:
1761 version "4.0.0"
1762 resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878"
1763 integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==
1764
1672strip-eof@^1.0.0: 1765strip-eof@^1.0.0:
1673 version "1.0.0" 1766 version "1.0.0"
1674 resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" 1767 resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
@@ -1679,6 +1772,13 @@ strip-json-comments@~2.0.1:
1679 resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 1772 resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
1680 integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= 1773 integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
1681 1774
1775supports-color@^5.3.0:
1776 version "5.5.0"
1777 resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
1778 integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
1779 dependencies:
1780 has-flag "^3.0.0"
1781
1682tar@^4: 1782tar@^4:
1683 version "4.4.13" 1783 version "4.4.13"
1684 resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" 1784 resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525"
@@ -1732,7 +1832,12 @@ torrent-piece@^2.0.0:
1732 resolved "https://registry.yarnpkg.com/torrent-piece/-/torrent-piece-2.0.0.tgz#6598ae67d93699e887f178db267ba16d89d7ec9b" 1832 resolved "https://registry.yarnpkg.com/torrent-piece/-/torrent-piece-2.0.0.tgz#6598ae67d93699e887f178db267ba16d89d7ec9b"
1733 integrity sha512-H/Z/yCuvZJj1vl1IQHI8dvF2QrUuXRJoptT5DW5967/dsLpXlCg+uyhFR5lfNj5mNaYePUbKtnL+qKWZGXv4Nw== 1833 integrity sha512-H/Z/yCuvZJj1vl1IQHI8dvF2QrUuXRJoptT5DW5967/dsLpXlCg+uyhFR5lfNj5mNaYePUbKtnL+qKWZGXv4Nw==
1734 1834
1735typedarray-to-buffer@^3.0.0: 1835type-fest@^0.6.0:
1836 version "0.6.0"
1837 resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b"
1838 integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==
1839
1840typedarray-to-buffer@^3.0.0, typedarray-to-buffer@^3.1.5:
1736 version "3.1.5" 1841 version "3.1.5"
1737 resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" 1842 resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
1738 integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== 1843 integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==
@@ -1816,14 +1921,6 @@ util-deprecate@^1.0.1, util-deprecate@~1.0.1:
1816 resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 1921 resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
1817 integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 1922 integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
1818 1923
1819util.promisify@~1.0.0:
1820 version "1.0.0"
1821 resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030"
1822 integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==
1823 dependencies:
1824 define-properties "^1.1.2"
1825 object.getownpropertydescriptors "^2.0.3"
1826
1827videostream@^3.2.0: 1924videostream@^3.2.0:
1828 version "3.2.1" 1925 version "3.2.1"
1829 resolved "https://registry.yarnpkg.com/videostream/-/videostream-3.2.1.tgz#643688ad4bfbf37570d421e3196b7e0ad38eeebc" 1926 resolved "https://registry.yarnpkg.com/videostream/-/videostream-3.2.1.tgz#643688ad4bfbf37570d421e3196b7e0ad38eeebc"
@@ -1886,9 +1983,9 @@ webtorrent-hybrid@^4.0.1:
1886 wrtc "^0.4.1" 1983 wrtc "^0.4.1"
1887 1984
1888webtorrent@>=0.107.6: 1985webtorrent@>=0.107.6:
1889 version "0.107.16" 1986 version "0.108.1"
1890 resolved "https://registry.yarnpkg.com/webtorrent/-/webtorrent-0.107.16.tgz#cf2231f87b3f4334f8eb56ba5aae80df8cd8521c" 1987 resolved "https://registry.yarnpkg.com/webtorrent/-/webtorrent-0.108.1.tgz#c5d8ebc538eff85a86deec327b74508ebcf4a371"
1891 integrity sha512-5fdPZFiZPxwbigAHtMVQ7ZCXbZSQlxgB6JPD77itpc9DdKYPpliFwCLsNiQpj1jmpo91HlHUJk+Xp3ks1fLUQg== 1988 integrity sha512-+w6JaqGKZBZHVrYLmG2VDuRLZlUhQrkLXw0/nw3VKV4aloICWGwBKzjLclXmexUhnqeVzZjCRIQgSZ8+YmgJUQ==
1892 dependencies: 1989 dependencies:
1893 addr-to-ip-port "^1.4.2" 1990 addr-to-ip-port "^1.4.2"
1894 bitfield "^3.0.0" 1991 bitfield "^3.0.0"
@@ -1898,7 +1995,7 @@ webtorrent@>=0.107.6:
1898 chunk-store-stream "^4.0.0" 1995 chunk-store-stream "^4.0.0"
1899 create-torrent "^4.0.0" 1996 create-torrent "^4.0.0"
1900 debug "^4.1.0" 1997 debug "^4.1.0"
1901 end-of-stream "^1.1.0" 1998 end-of-stream "1.4.1"
1902 escape-html "^1.0.3" 1999 escape-html "^1.0.3"
1903 fs-chunk-store "^2.0.0" 2000 fs-chunk-store "^2.0.0"
1904 http-node "github:feross/http-node#webtorrent" 2001 http-node "github:feross/http-node#webtorrent"
@@ -1928,7 +2025,6 @@ webtorrent@>=0.107.6:
1928 stream-with-known-length-to-buffer "^1.0.0" 2025 stream-with-known-length-to-buffer "^1.0.0"
1929 torrent-discovery "^9.1.1" 2026 torrent-discovery "^9.1.1"
1930 torrent-piece "^2.0.0" 2027 torrent-piece "^2.0.0"
1931 uniq "^1.0.1"
1932 unordered-array-remove "^1.0.2" 2028 unordered-array-remove "^1.0.2"
1933 ut_metadata "^3.3.0" 2029 ut_metadata "^3.3.0"
1934 ut_pex "^2.0.0" 2030 ut_pex "^2.0.0"
@@ -1957,29 +2053,48 @@ wrappy@1:
1957 resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2053 resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
1958 integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 2054 integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
1959 2055
2056write-file-atomic@^3.0.0:
2057 version "3.0.3"
2058 resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8"
2059 integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==
2060 dependencies:
2061 imurmurhash "^0.1.4"
2062 is-typedarray "^1.0.0"
2063 signal-exit "^3.0.2"
2064 typedarray-to-buffer "^3.1.5"
2065
2066write-json-file@^4.2.0:
2067 version "4.3.0"
2068 resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-4.3.0.tgz#908493d6fd23225344af324016e4ca8f702dd12d"
2069 integrity sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ==
2070 dependencies:
2071 detect-indent "^6.0.0"
2072 graceful-fs "^4.1.15"
2073 is-plain-obj "^2.0.0"
2074 make-dir "^3.0.0"
2075 sort-keys "^4.0.0"
2076 write-file-atomic "^3.0.0"
2077
1960wrtc@^0.4.1: 2078wrtc@^0.4.1:
1961 version "0.4.2" 2079 version "0.4.4"
1962 resolved "https://registry.yarnpkg.com/wrtc/-/wrtc-0.4.2.tgz#feeb829709dac17139b49f7a18f57f4e98300a6f" 2080 resolved "https://registry.yarnpkg.com/wrtc/-/wrtc-0.4.4.tgz#523bcec18ea91de5d8ee1ef11e5cbe4fcf7daf3d"
1963 integrity sha512-IaXogllhkd3dHKrZxzQKXmKjqsR35X9XIjp1ElimieZuaPgDCPEbIg/DOwzGTT4bdKqmB8FjPgau2RNMFTGvHQ== 2081 integrity sha512-ithsvEKqS6pIbzPiXgJXU4SjQHR7fSszDgGMOREW8j2S4N+ay05r4aYpUZJnsa1fr6o5efeQ/ikFiDXDl5YqeQ==
1964 dependencies: 2082 dependencies:
1965 node-pre-gyp "^0.13.0" 2083 node-pre-gyp "^0.13.0"
1966 optionalDependencies: 2084 optionalDependencies:
1967 domexception "^1.0.1" 2085 domexception "^1.0.1"
1968 2086
1969ws@^7.0.0: 2087ws@^7.0.0:
1970 version "7.2.0" 2088 version "7.2.3"
1971 resolved "https://registry.yarnpkg.com/ws/-/ws-7.2.0.tgz#422eda8c02a4b5dba7744ba66eebbd84bcef0ec7" 2089 resolved "https://registry.yarnpkg.com/ws/-/ws-7.2.3.tgz#a5411e1fb04d5ed0efee76d26d5c46d830c39b46"
1972 integrity sha512-+SqNqFbwTm/0DC18KYzIsMTnEWpLwJsiasW/O17la4iDRRIO9uaHbvKiAS3AHgTiuuWerK/brj4O6MYZkei9xg== 2090 integrity sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ==
1973 dependencies:
1974 async-limiter "^1.0.0"
1975 2091
1976xml2js@^0.4.8: 2092xml2js@^0.4.8:
1977 version "0.4.22" 2093 version "0.4.23"
1978 resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.22.tgz#4fa2d846ec803237de86f30aa9b5f70b6600de02" 2094 resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66"
1979 integrity sha512-MWTbxAQqclRSTnehWWe5nMKzI3VmJ8ltiJEco8akcC6j3miOhjjfzKum5sId+CWhfxdOs/1xauYr8/ZDBtQiRw== 2095 integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==
1980 dependencies: 2096 dependencies:
1981 sax ">=0.6.0" 2097 sax ">=0.6.0"
1982 util.promisify "~1.0.0"
1983 xmlbuilder "~11.0.0" 2098 xmlbuilder "~11.0.0"
1984 2099
1985xmlbuilder@0.4.x: 2100xmlbuilder@0.4.x:
@@ -1993,9 +2108,9 @@ xmlbuilder@~11.0.0:
1993 integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== 2108 integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==
1994 2109
1995xmldom@0.1.x: 2110xmldom@0.1.x:
1996 version "0.1.27" 2111 version "0.1.31"
1997 resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.27.tgz#d501f97b3bdb403af8ef9ecc20573187aadac0e9" 2112 resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.31.tgz#b76c9a1bd9f0a9737e5a72dc37231cf38375e2ff"
1998 integrity sha1-1QH5ezvbQDr4757MIFcxh6rawOk= 2113 integrity sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ==
1999 2114
2000yallist@^3.0.0, yallist@^3.0.3: 2115yallist@^3.0.0, yallist@^3.0.3:
2001 version "3.1.1" 2116 version "3.1.1"