diff options
Diffstat (limited to 'server/tools')
-rw-r--r-- | server/tools/cli.ts | 112 | ||||
-rw-r--r-- | server/tools/package.json | 7 | ||||
-rw-r--r-- | server/tools/peertube-auth.ts | 17 | ||||
-rw-r--r-- | server/tools/peertube-import-videos.ts | 111 | ||||
-rw-r--r-- | server/tools/peertube-plugins.ts | 34 | ||||
-rw-r--r-- | server/tools/peertube-redundancy.ts | 197 | ||||
-rw-r--r-- | server/tools/peertube-repl.ts | 45 | ||||
-rw-r--r-- | server/tools/peertube-upload.ts | 21 | ||||
-rw-r--r-- | server/tools/peertube-watch.ts | 17 | ||||
-rw-r--r-- | server/tools/peertube.ts | 24 | ||||
-rw-r--r-- | server/tools/yarn.lock | 587 |
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' | |||
3 | import { join } from 'path' | 3 | import { join } from 'path' |
4 | import { root } from '../../shared/extra-utils/miscs/miscs' | 4 | import { root } from '../../shared/extra-utils/miscs/miscs' |
5 | import { getVideoChannel } from '../../shared/extra-utils/videos/video-channels' | 5 | import { getVideoChannel } from '../../shared/extra-utils/videos/video-channels' |
6 | import { Command } from 'commander' | 6 | import { CommanderStatic } from 'commander' |
7 | import { VideoChannel, VideoPrivacy } from '../../shared/models/videos' | 7 | import { VideoChannel, VideoPrivacy } from '../../shared/models/videos' |
8 | import { createLogger, format, transports } from 'winston' | 8 | import { createLogger, format, transports } from 'winston' |
9 | import { getMyUserInformation } from '@shared/extra-utils/users/users' | ||
10 | import { User, UserRole } from '@shared/models' | ||
11 | import { getAccessToken } from '@shared/extra-utils/users/login' | ||
9 | 12 | ||
10 | let configName = 'PeerTube/CLI' | 13 | let configName = 'PeerTube/CLI' |
11 | if (isTestInstance()) configName += `-${getAppNumber()}` | 14 | if (isTestInstance()) configName += `-${getAppNumber()}` |
@@ -14,24 +17,35 @@ const config = require('application-config')(configName) | |||
14 | 17 | ||
15 | const version = require('../../../package.json').version | 18 | const version = require('../../../package.json').version |
16 | 19 | ||
20 | async 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 | |||
17 | interface Settings { | 33 | interface Settings { |
18 | remotes: any[], | 34 | remotes: any[] |
19 | default: number | 35 | default: number |
20 | } | 36 | } |
21 | 37 | ||
22 | function getSettings () { | 38 | async 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 | ||
37 | async function getNetrc () { | 51 | async function getNetrc () { |
@@ -46,24 +60,12 @@ async function getNetrc () { | |||
46 | return netrc | 60 | return netrc |
47 | } | 61 | } |
48 | 62 | ||
49 | function writeSettings (settings) { | 63 | function 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 | ||
59 | function deleteSettings () { | 67 | function 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 | ||
69 | function getRemoteObjectOrDie ( | 71 | function 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 | ||
105 | function buildCommonVideoOptions (command: Command) { | 107 | function 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 | ||
126 | async function buildVideoAttributesFromCommander (url: string, command: Command, defaultAttributes: any = {}) { | 129 | async 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 | ||
173 | function getServerCredentials (program: any) { | 176 | function 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 | ||
180 | function getLogger (logLevel = 'info') { | 183 | function getLogger (logLevel = 'info') { |
@@ -211,7 +214,6 @@ function getLogger (logLevel = 'info') { | |||
211 | 214 | ||
212 | export { | 215 | export { |
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 | |||
1 | import { registerTSPaths } from '../helpers/register-ts-paths' | 3 | import { registerTSPaths } from '../helpers/register-ts-paths' |
2 | registerTSPaths() | 4 | registerTSPaths() |
3 | 5 | ||
@@ -5,9 +7,8 @@ import * as program from 'commander' | |||
5 | import * as prompt from 'prompt' | 7 | import * as prompt from 'prompt' |
6 | import { getNetrc, getSettings, writeSettings } from './cli' | 8 | import { getNetrc, getSettings, writeSettings } from './cli' |
7 | import { isUserUsernameValid } from '../helpers/custom-validators/users' | 9 | import { isUserUsernameValid } from '../helpers/custom-validators/users' |
8 | import { getAccessToken, login } from '../../shared/extra-utils' | 10 | import { getAccessToken } from '../../shared/extra-utils' |
9 | 11 | import * as CliTable3 from 'cli-table3' | |
10 | const Table = require('cli-table') | ||
11 | 12 | ||
12 | async function delInstance (url: string) { | 13 | async 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 @@ | |||
1 | import { registerTSPaths } from '../helpers/register-ts-paths' | 1 | import { registerTSPaths } from '../helpers/register-ts-paths' |
2 | |||
3 | registerTSPaths() | 2 | registerTSPaths() |
4 | 3 | ||
5 | // FIXME: https://github.com/nodejs/node/pull/16853 | ||
6 | require('tls').DEFAULT_ECDH_CURVE = 'auto' | ||
7 | |||
8 | import * as program from 'commander' | 4 | import * as program from 'commander' |
9 | import { join } from 'path' | 5 | import { join } from 'path' |
10 | import { doRequestAndSaveToFile } from '../helpers/requests' | 6 | import { doRequestAndSaveToFile } from '../helpers/requests' |
@@ -16,7 +12,7 @@ import { accessSync, constants } from 'fs' | |||
16 | import { remove } from 'fs-extra' | 12 | import { remove } from 'fs-extra' |
17 | import { sha256 } from '../helpers/core-utils' | 13 | import { sha256 } from '../helpers/core-utils' |
18 | import { buildOriginallyPublishedAt, safeGetYoutubeDL } from '../helpers/youtube-dl' | 14 | import { buildOriginallyPublishedAt, safeGetYoutubeDL } from '../helpers/youtube-dl' |
19 | import { buildCommonVideoOptions, buildVideoAttributesFromCommander, getServerCredentials, getLogger } from './cli' | 15 | import { buildCommonVideoOptions, buildVideoAttributesFromCommander, getLogger, getServerCredentials } from './cli' |
20 | 16 | ||
21 | type UserInfo = { | 17 | type 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 | ||
47 | let log = getLogger(program[ 'verbose' ]) | 44 | const log = getLogger(program['verbose']) |
48 | 45 | ||
49 | getServerCredentials(command) | 46 | getServerCredentials(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 | ||
72 | async function run (url: string, user: UserInfo) { | 68 | async 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 | ||
112 | function processVideo (parameters: { | 113 | function 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 | ||
180 | async function uploadVideoOnPeerTube (parameters: { | 181 | async 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: { | |||
259 | async function getCategory (categories: string[], url: string) { | 260 | async 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) { | |||
277 | function getLicence (licence: string) { | 278 | function 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 | ||
318 | function buildUrl (info: any) { | 319 | function 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 | ||
390 | function formatDate (date: Date): string { | 391 | function formatDate (date: Date): string { |
391 | return date.toISOString().split('T')[ 0 ] | 392 | return date.toISOString().split('T')[0] |
392 | } | 393 | } |
393 | 394 | ||
394 | function exitError (message: string, ...meta: any[]) { | 395 | function 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 | |||
1 | import { registerTSPaths } from '../helpers/register-ts-paths' | 3 | import { registerTSPaths } from '../helpers/register-ts-paths' |
2 | registerTSPaths() | 4 | registerTSPaths() |
3 | 5 | ||
4 | import * as program from 'commander' | 6 | import * as program from 'commander' |
5 | import { PluginType } from '../../shared/models/plugins/plugin.type' | 7 | import { PluginType } from '../../shared/models/plugins/plugin.type' |
6 | import { getAccessToken } from '../../shared/extra-utils/users/login' | ||
7 | import { getMyUserInformation } from '../../shared/extra-utils/users/users' | ||
8 | import { installPlugin, listPlugins, uninstallPlugin, updatePlugin } from '../../shared/extra-utils/server/plugins' | 8 | import { installPlugin, listPlugins, uninstallPlugin, updatePlugin } from '../../shared/extra-utils/server/plugins' |
9 | import { getServerCredentials } from './cli' | 9 | import { getAdminTokenOrDie, getServerCredentials } from './cli' |
10 | import { User, UserRole } from '../../shared/models/users' | ||
11 | import { PeerTubePlugin } from '../../shared/models/plugins/peertube-plugin.model' | 10 | import { PeerTubePlugin } from '../../shared/models/plugins/peertube-plugin.model' |
12 | import { isAbsolute } from 'path' | 11 | import { isAbsolute } from 'path' |
13 | 12 | import * as CliTable3 from 'cli-table3' | |
14 | const Table = require('cli-table') | ||
15 | 13 | ||
16 | program | 14 | program |
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 | |||
196 | async 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 | |||
3 | import { registerTSPaths } from '../helpers/register-ts-paths' | ||
4 | registerTSPaths() | ||
5 | |||
6 | import * as program from 'commander' | ||
7 | import { getAdminTokenOrDie, getServerCredentials } from './cli' | ||
8 | import { VideoRedundanciesTarget, VideoRedundancy } from '@shared/models' | ||
9 | import { addVideoRedundancy, listVideoRedundancies, removeVideoRedundancy } from '@shared/extra-utils/server/redundancy' | ||
10 | import validator from 'validator' | ||
11 | import * as CliTable3 from 'cli-table3' | ||
12 | import { URL } from 'url' | ||
13 | import { uniq } from 'lodash' | ||
14 | |||
15 | import bytes = require('bytes') | ||
16 | |||
17 | program | ||
18 | .name('plugins') | ||
19 | .usage('[command] [options]') | ||
20 | |||
21 | program | ||
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 | |||
29 | program | ||
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 | |||
37 | program | ||
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 | |||
46 | program | ||
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 | |||
55 | if (!process.argv.slice(2).length) { | ||
56 | program.outputHelp() | ||
57 | } | ||
58 | |||
59 | program.parse(process.argv) | ||
60 | |||
61 | // ---------------------------------------------------------------------------- | ||
62 | |||
63 | async 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 | |||
106 | async 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 | |||
139 | async 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 | |||
186 | async 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() | |||
4 | import * as repl from 'repl' | 4 | import * as repl from 'repl' |
5 | import * as path from 'path' | 5 | import * as path from 'path' |
6 | import * as _ from 'lodash' | 6 | import * as _ from 'lodash' |
7 | import * as uuidv1 from 'uuid/v1' | 7 | import { uuidv1, uuidv3, uuidv4, uuidv5 } from 'uuid' |
8 | import * as uuidv3 from 'uuid/v3' | ||
9 | import * as uuidv4 from 'uuid/v4' | ||
10 | import * as uuidv5 from 'uuid/v5' | ||
11 | import * as Sequelize from 'sequelize' | 8 | import * as Sequelize from 'sequelize' |
12 | import * as YoutubeDL from 'youtube-dl' | 9 | import * as YoutubeDL from 'youtube-dl' |
13 | 10 | import { initDatabaseModels, sequelizeTypescript } from '../initializers/database' | |
14 | import { initDatabaseModels, sequelizeTypescript } from '../initializers' | ||
15 | import * as cli from '../tools/cli' | 11 | import * as cli from '../tools/cli' |
16 | import { logger } from '../helpers/logger' | 12 | import { logger } from '../helpers/logger' |
17 | import * as constants from '../initializers/constants' | 13 | import * 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 | ||
25 | getServerCredentials(command) | 25 | getServerCredentials(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 | ||
45 | async function run (url: string, username: string, password: string) { | 46 | async 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 | ||
41 | async function run (url: string, program: any) { | 35 | function 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 | |||
3 | import { registerTSPaths } from '../helpers/register-ts-paths' | 5 | import { registerTSPaths } from '../helpers/register-ts-paths' |
4 | registerTSPaths() | 6 | registerTSPaths() |
5 | 7 | ||
6 | import * as program from 'commander' | 8 | import * as program from 'commander' |
7 | import { | 9 | import { getSettings, version } from './cli' |
8 | version, | ||
9 | getSettings | ||
10 | } from './cli' | ||
11 | 10 | ||
12 | program | 11 | program |
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 */ |
27 | program | 27 | program |
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 |
38 | if (!process.argv.slice(2).length) { | 39 | if (!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 | ||
68 | abbrev@1: | 89 | abbrev@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 | ||
117 | ansi-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 | |||
122 | ansi-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 | |||
96 | application-config-path@^0.1.0: | 129 | application-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 | ||
101 | application-config@^1.0.1: | 134 | application-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 | ||
109 | aproba@^1.0.3: | 143 | aproba@^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 | ||
122 | async-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 | |||
127 | balanced-match@^1.0.0: | 156 | balanced-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 | ||
183 | bittorrent-tracker@^9.0.0: | 212 | bittorrent-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 | ||
225 | bn.js@^5.0.0: | 253 | bn.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 | ||
230 | brace-expansion@^1.1.7: | 258 | brace-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 | ||
322 | chalk@^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 | |||
294 | charset@^1.0.1: | 331 | charset@^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 | ||
299 | chownr@^1.1.1: | 336 | chownr@^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 | ||
304 | chrome-dgram@^3.0.2: | 341 | chrome-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 | ||
350 | cli-table@^0.3.1: | 387 | cli-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 | ||
357 | clivas@^0.2.0: | 397 | clivas@^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 | ||
367 | colors@1.0.3: | 407 | color-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 | |||
414 | color-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 | |||
419 | colors@^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 | ||
372 | common-tags@^1.8.0: | 424 | common-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 | ||
478 | define-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 | |||
485 | delegates@^1.0.0: | 530 | delegates@^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 | ||
535 | detect-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 | |||
490 | detect-libc@^1.0.2: | 540 | detect-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 | ||
531 | ecstatic@^4.0.0: | 581 | ecstatic@^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 | ||
605 | emoji-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 | |||
610 | end-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 | |||
555 | end-of-stream@^1.1.0: | 617 | end-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 | ||
562 | es-abstract@^1.5.1: | 624 | error-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 | |||
578 | es-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 | ||
587 | escape-html@^1.0.3: | 631 | escape-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 | ||
636 | escape-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 | |||
592 | execa@^0.10.0: | 641 | execa@^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 | ||
648 | function-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 | |||
653 | gauge@~2.7.3: | 697 | gauge@~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 | ||
682 | glob@^7.1.3: | 726 | glob@^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 | ||
694 | has-symbols@^1.0.0: | 738 | graceful-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 | |||
743 | has-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 | ||
699 | has-unicode@^2.0.0: | 748 | has-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 | ||
704 | has@^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 | |||
711 | he@^1.1.1: | 753 | he@^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 | ||
792 | imurmurhash@^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 | |||
750 | inflight@^1.0.4: | 797 | inflight@^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 | ||
832 | is-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 | |||
785 | is-ascii@^1.0.0: | 837 | is-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 | ||
790 | is-callable@^1.1.4: | 842 | is-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 | |||
795 | is-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 | ||
800 | is-file@^1.0.0: | 847 | is-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 | ||
817 | is-regex@^1.0.4: | 864 | is-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" | 869 | is-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 | ||
824 | is-stream@^1.1.0: | 874 | is-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 | ||
829 | is-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 | |||
836 | is-typedarray@^1.0.0: | 879 | is-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 | ||
841 | is-wsl@^2.1.0: | 884 | is-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 | ||
899 | js-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 | |||
904 | json-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 | |||
856 | junk@^3.1.0: | 909 | junk@^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 | ||
945 | lines-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 | |||
892 | load-ip-set@^2.1.0: | 950 | load-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 | ||
961 | load-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 | |||
903 | long@^4.0.0: | 971 | long@^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 | ||
991 | make-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 | |||
923 | mdns-js-packet@~0.2.0: | 998 | mdns-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 | ||
969 | mimic-response@^2.0.0: | 1044 | mimic-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 | ||
974 | minimatch@^3.0.4: | 1049 | minimatch@^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 | ||
981 | minimist@0.0.8: | 1056 | minimist@^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 | |||
986 | minimist@^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 | ||
991 | minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: | 1061 | minipass@^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 | ||
1076 | mkdirp-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 | |||
1006 | mkdirp@^0.5.0, mkdirp@^0.5.1: | 1081 | mkdirp@^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 | ||
1013 | moment@^2.12.0: | 1088 | moment@^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 | ||
1059 | needle@^2.2.1: | 1134 | needle@^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 | ||
1132 | nopt@^4.0.1: | 1207 | nopt@^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 | ||
1140 | npm-bundled@^1.0.1: | 1215 | npm-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 | |||
1222 | npm-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 | ||
1145 | npm-packlist@^1.1.6: | 1227 | npm-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 | ||
1153 | npm-run-path@^2.0.0: | 1236 | npm-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 | ||
1180 | object-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 | |||
1185 | object-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 | |||
1190 | object.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 | |||
1198 | on-finished@^2.3.0: | 1263 | on-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 | ||
1212 | open@^7.0.0: | 1277 | open@^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 | ||
1219 | os-homedir@^1.0.0: | 1285 | os-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 | ||
1315 | parse-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 | |||
1249 | parse-numeric-range@^0.0.2: | 1325 | parse-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 | ||
1254 | parse-torrent@^7.0.0: | 1330 | parse-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 | ||
1267 | path-is-absolute@^1.0.0: | 1342 | path-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 | ||
1305 | protobufjs@^6.8.8: | 1380 | protobufjs@^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 | ||
1342 | random-access-file@^2.0.1: | 1417 | random-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 | ||
1350 | random-access-storage@^1.1.1: | 1425 | random-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 | ||
1391 | readable-stream@^2.0.6, readable-stream@^2.2.2: | 1466 | readable-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 | ||
1404 | readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0: | 1479 | readable-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 | ||
1436 | rimraf@^3.0.0: | 1511 | rimraf@^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 | ||
1568 | semver@^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 | |||
1493 | semver@~5.1.0: | 1573 | semver@~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 | ||
1515 | signal-exit@^3.0.0: | 1595 | signal-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 | ||
1520 | simple-concat@^1.0.0: | 1600 | simple-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 | ||
1543 | simple-peer@^9.0.0: | 1623 | simple-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 | ||
1562 | simple-websocket@^8.0.0: | 1642 | simple-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 | ||
1653 | sort-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 | |||
1572 | speedometer@^1.0.0: | 1660 | speedometer@^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 | ||
1620 | string.prototype.trimleft@^2.1.0: | 1708 | string-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 | |||
1628 | string.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 | ||
1636 | string2compact@^1.1.1, string2compact@^1.2.5: | 1717 | string2compact@^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 | ||
1753 | strip-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 | |||
1760 | strip-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 | |||
1672 | strip-eof@^1.0.0: | 1765 | strip-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 | ||
1775 | supports-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 | |||
1682 | tar@^4: | 1782 | tar@^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 | ||
1735 | typedarray-to-buffer@^3.0.0: | 1835 | type-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 | |||
1840 | typedarray-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 | ||
1819 | util.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 | |||
1827 | videostream@^3.2.0: | 1924 | videostream@^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 | ||
1888 | webtorrent@>=0.107.6: | 1985 | webtorrent@>=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 | ||
2056 | write-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 | |||
2066 | write-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 | |||
1960 | wrtc@^0.4.1: | 2078 | wrtc@^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 | ||
1969 | ws@^7.0.0: | 2087 | ws@^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 | ||
1976 | xml2js@^0.4.8: | 2092 | xml2js@^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 | ||
1985 | xmlbuilder@0.4.x: | 2100 | xmlbuilder@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 | ||
1995 | xmldom@0.1.x: | 2110 | xmldom@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 | ||
2000 | yallist@^3.0.0, yallist@^3.0.3: | 2115 | yallist@^3.0.0, yallist@^3.0.3: |
2001 | version "3.1.1" | 2116 | version "3.1.1" |