Add benchmark script
This commit is contained in:
parent
c15d61f5fe
commit
4abbeff575
3 changed files with 408 additions and 7 deletions
|
@ -199,6 +199,7 @@
|
|||
"@types/webtorrent": "^0.109.0",
|
||||
"@types/ws": "^7.2.1",
|
||||
"@typescript-eslint/eslint-plugin": "^4.8.1",
|
||||
"autocannon": "^7.0.4",
|
||||
"chai": "^4.1.1",
|
||||
"chai-json-schema": "^1.5.0",
|
||||
"chai-xml": "^0.4.0",
|
||||
|
|
234
scripts/benchmark.ts
Normal file
234
scripts/benchmark.ts
Normal file
|
@ -0,0 +1,234 @@
|
|||
import { registerTSPaths } from '../server/helpers/register-ts-paths'
|
||||
registerTSPaths()
|
||||
|
||||
import * as autocannon from 'autocannon'
|
||||
import {
|
||||
addVideoCommentReply,
|
||||
addVideoCommentThread,
|
||||
createVideoCaption,
|
||||
flushAndRunServer,
|
||||
getVideosList,
|
||||
killallServers,
|
||||
ServerInfo,
|
||||
setAccessTokensToServers,
|
||||
uploadVideo
|
||||
} from '@shared/extra-utils'
|
||||
import { Video, VideoPrivacy } from '@shared/models'
|
||||
import { writeJson } from 'fs-extra'
|
||||
|
||||
let server: ServerInfo
|
||||
let video: Video
|
||||
let threadId: number
|
||||
|
||||
const outfile = process.argv[2]
|
||||
|
||||
run()
|
||||
.catch(err => console.error(err))
|
||||
.finally(() => {
|
||||
if (server) killallServers([ server ])
|
||||
})
|
||||
|
||||
function buildAuthorizationHeader () {
|
||||
return {
|
||||
Authorization: 'Bearer ' + server.accessToken
|
||||
}
|
||||
}
|
||||
|
||||
async function run () {
|
||||
console.log('Preparing server...')
|
||||
|
||||
await prepare()
|
||||
|
||||
const tests = [
|
||||
{
|
||||
title: 'API - unread notifications',
|
||||
path: '/api/v1/users/me/notifications?start=0&count=0&unread=true',
|
||||
headers: buildAuthorizationHeader(),
|
||||
expecter: (_client, statusCode) => {
|
||||
return statusCode === 200
|
||||
}
|
||||
},
|
||||
{
|
||||
title: 'API - me',
|
||||
path: '/api/v1/users/me',
|
||||
headers: buildAuthorizationHeader(),
|
||||
expecter: (client, statusCode) => {
|
||||
const body = client.resData[0].body
|
||||
|
||||
return statusCode === 200 && body.startsWith('{"id":')
|
||||
}
|
||||
},
|
||||
{
|
||||
title: 'API - videos list',
|
||||
path: '/api/v1/videos',
|
||||
expecter: (client, statusCode) => {
|
||||
const body = client.resData[0].body
|
||||
|
||||
return statusCode === 200 && body.startsWith('{"total":10')
|
||||
}
|
||||
},
|
||||
{
|
||||
title: 'API - video get',
|
||||
path: '/api/v1/videos/' + video.uuid,
|
||||
expecter: (client, statusCode) => {
|
||||
const body = client.resData[0].body
|
||||
|
||||
return statusCode === 200 && body.startsWith('{"id":')
|
||||
}
|
||||
},
|
||||
{
|
||||
title: 'API - video captions',
|
||||
path: '/api/v1/videos/' + video.uuid + '/captions',
|
||||
expecter: (client, statusCode) => {
|
||||
const body = client.resData[0].body
|
||||
|
||||
return statusCode === 200 && body.startsWith('{"total":4')
|
||||
}
|
||||
},
|
||||
{
|
||||
title: 'API - video threads',
|
||||
path: '/api/v1/videos/' + video.uuid + '/comment-threads',
|
||||
expecter: (client, statusCode) => {
|
||||
const body = client.resData[0].body
|
||||
|
||||
return statusCode === 200 && body.startsWith('{"total":10')
|
||||
}
|
||||
},
|
||||
{
|
||||
title: 'API - video replies',
|
||||
path: '/api/v1/videos/' + video.uuid + '/comment-threads/' + threadId,
|
||||
expecter: (client, statusCode) => {
|
||||
const body = client.resData[0].body
|
||||
|
||||
return statusCode === 200 && body.startsWith('{"comment":{')
|
||||
}
|
||||
},
|
||||
{
|
||||
title: 'HTML - video watch',
|
||||
path: '/videos/watch/' + video.uuid,
|
||||
expecter: (client, statusCode) => {
|
||||
const body = client.resData[0].body
|
||||
|
||||
return statusCode === 200 && body.includes('<title>my super')
|
||||
}
|
||||
},
|
||||
{
|
||||
title: 'HTML - homepage',
|
||||
path: '/',
|
||||
expecter: (_client, statusCode) => {
|
||||
return statusCode === 200
|
||||
}
|
||||
},
|
||||
{
|
||||
title: 'API - config',
|
||||
path: '/api/v1/config',
|
||||
expecter: (client, statusCode) => {
|
||||
const body = client.resData[0].body
|
||||
|
||||
return statusCode === 200 && body.startsWith('{"instance":')
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
const finalResult: any[] = []
|
||||
|
||||
for (const test of tests) {
|
||||
console.log('Running against %s.', test.path)
|
||||
const testResult = await runBenchmark(test)
|
||||
|
||||
Object.assign(testResult, { title: test.title, path: test.path })
|
||||
finalResult.push(testResult)
|
||||
|
||||
console.log(autocannon.printResult(testResult))
|
||||
}
|
||||
|
||||
if (outfile) await writeJson(outfile, finalResult)
|
||||
}
|
||||
|
||||
function runBenchmark (options: {
|
||||
path: string
|
||||
headers?: { [ id: string ]: string }
|
||||
expecter: Function
|
||||
}) {
|
||||
const { path, expecter, headers } = options
|
||||
|
||||
return new Promise((res, rej) => {
|
||||
const instance = autocannon({
|
||||
url: server.url + path,
|
||||
connections: 20,
|
||||
headers,
|
||||
pipelining: 1,
|
||||
duration: 10
|
||||
}, (err, result) => {
|
||||
if (err) return rej(err)
|
||||
|
||||
return res(result)
|
||||
})
|
||||
|
||||
instance.on('response', (client, statusCode) => {
|
||||
if (expecter(client, statusCode) !== true) {
|
||||
console.error('Expected result failed.', { data: client.resData })
|
||||
process.exit(-1)
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
async function prepare () {
|
||||
server = await flushAndRunServer(1, {
|
||||
rates_limit: {
|
||||
api: {
|
||||
max: 5_000_000
|
||||
}
|
||||
}
|
||||
})
|
||||
await setAccessTokensToServers([ server ])
|
||||
|
||||
const videoAttributes = {
|
||||
name: 'my super video',
|
||||
category: 2,
|
||||
nsfw: true,
|
||||
licence: 6,
|
||||
language: 'fr',
|
||||
privacy: VideoPrivacy.PUBLIC,
|
||||
support: 'please give me a coffee',
|
||||
description: 'my super description'.repeat(10),
|
||||
tags: [ 'tag1', 'tag2', 'tag3' ]
|
||||
}
|
||||
|
||||
for (let i = 0; i < 10; i++) {
|
||||
Object.assign(videoAttributes, { name: 'my super video ' + i })
|
||||
await uploadVideo(server.url, server.accessToken, videoAttributes)
|
||||
}
|
||||
|
||||
const resVideos = await getVideosList(server.url)
|
||||
video = resVideos.body.data.find(v => v.name === 'my super video 1')
|
||||
|
||||
for (let i = 0; i < 10; i++) {
|
||||
const text = 'my super first comment'
|
||||
const res = await addVideoCommentThread(server.url, server.accessToken, video.id, text)
|
||||
threadId = res.body.comment.id
|
||||
|
||||
const text1 = 'my super answer to thread 1'
|
||||
const childCommentRes = await addVideoCommentReply(server.url, server.accessToken, video.id, threadId, text1)
|
||||
const childCommentId = childCommentRes.body.comment.id
|
||||
|
||||
const text2 = 'my super answer to answer of thread 1'
|
||||
await addVideoCommentReply(server.url, server.accessToken, video.id, childCommentId, text2)
|
||||
|
||||
const text3 = 'my second answer to thread 1'
|
||||
await addVideoCommentReply(server.url, server.accessToken, video.id, threadId, text3)
|
||||
}
|
||||
|
||||
for (const caption of [ 'ar', 'fr', 'en', 'zh' ]) {
|
||||
await createVideoCaption({
|
||||
url: server.url,
|
||||
accessToken: server.accessToken,
|
||||
language: caption,
|
||||
videoId: video.id,
|
||||
fixture: 'subtitle-good2.vtt'
|
||||
})
|
||||
}
|
||||
|
||||
return { server, video, threadId }
|
||||
}
|
180
yarn.lock
180
yarn.lock
|
@ -43,6 +43,11 @@
|
|||
call-me-maybe "^1.0.1"
|
||||
z-schema "^4.2.3"
|
||||
|
||||
"@assemblyscript/loader@^0.10.1":
|
||||
version "0.10.1"
|
||||
resolved "https://registry.yarnpkg.com/@assemblyscript/loader/-/loader-0.10.1.tgz#70e45678f06c72fa2e350e8553ec4a4d72b92e06"
|
||||
integrity sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==
|
||||
|
||||
"@babel/code-frame@^7.0.0":
|
||||
version "7.12.11"
|
||||
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f"
|
||||
|
@ -1284,6 +1289,33 @@ at-least-node@^1.0.0:
|
|||
resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
|
||||
integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==
|
||||
|
||||
autocannon@^7.0.4:
|
||||
version "7.0.4"
|
||||
resolved "https://registry.yarnpkg.com/autocannon/-/autocannon-7.0.4.tgz#c812c11af283254bff4bd75cce8383e79550c882"
|
||||
integrity sha512-+A+kSsVrx9F9fFbPAD7YytGQfCKgkaCIut4KrnYBbY2hmboAT065ClxqBsVqstokvFfdBAfSMPh0VSc6ktiimg==
|
||||
dependencies:
|
||||
chalk "^4.1.0"
|
||||
cli-table3 "^0.6.0"
|
||||
clone "^2.1.2"
|
||||
color-support "^1.1.1"
|
||||
cross-argv "^1.0.0"
|
||||
form-data "^4.0.0"
|
||||
has-async-hooks "^1.0.0"
|
||||
hdr-histogram-js "^2.0.1"
|
||||
hdr-histogram-percentiles-obj "^3.0.0"
|
||||
http-parser-js "^0.5.2"
|
||||
hyperid "^2.0.3"
|
||||
manage-path "^2.0.0"
|
||||
minimist "^1.2.0"
|
||||
on-net-listen "^1.1.1"
|
||||
ora "^5.1.0"
|
||||
pretty-bytes "^5.4.1"
|
||||
progress "^2.0.3"
|
||||
reinterval "^1.1.0"
|
||||
retimer "^2.0.0"
|
||||
semver "^7.3.2"
|
||||
timestring "^6.0.0"
|
||||
|
||||
aws-sign2@~0.7.0:
|
||||
version "0.7.0"
|
||||
resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
|
||||
|
@ -1333,7 +1365,7 @@ base64-arraybuffer@0.1.5:
|
|||
resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8"
|
||||
integrity sha1-c5JncZI7Whl0etZmqlzUv5xunOg=
|
||||
|
||||
base64-js@^1.3.1:
|
||||
base64-js@^1.2.0, base64-js@^1.3.1:
|
||||
version "1.5.1"
|
||||
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
|
||||
integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
|
||||
|
@ -1484,6 +1516,15 @@ bittorrent-tracker@^9.0.0:
|
|||
bufferutil "^4.0.1"
|
||||
utf-8-validate "^5.0.2"
|
||||
|
||||
bl@^4.0.3:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a"
|
||||
integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==
|
||||
dependencies:
|
||||
buffer "^5.5.0"
|
||||
inherits "^2.0.4"
|
||||
readable-stream "^3.4.0"
|
||||
|
||||
blob-to-buffer@^1.2.9:
|
||||
version "1.2.9"
|
||||
resolved "https://registry.yarnpkg.com/blob-to-buffer/-/blob-to-buffer-1.2.9.tgz#a17fd6c1c564011408f8971e451544245daaa84a"
|
||||
|
@ -1619,7 +1660,7 @@ buffer-writer@2.0.0:
|
|||
resolved "https://registry.yarnpkg.com/buffer-writer/-/buffer-writer-2.0.0.tgz#ce7eb81a38f7829db09c873f2fbb792c0c98ec04"
|
||||
integrity sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==
|
||||
|
||||
buffer@^5.2.0:
|
||||
buffer@^5.2.0, buffer@^5.5.0:
|
||||
version "5.7.1"
|
||||
resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
|
||||
integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
|
||||
|
@ -1919,6 +1960,21 @@ cli-cursor@^3.1.0:
|
|||
dependencies:
|
||||
restore-cursor "^3.1.0"
|
||||
|
||||
cli-spinners@^2.5.0:
|
||||
version "2.5.0"
|
||||
resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.5.0.tgz#12763e47251bf951cb75c201dfa58ff1bcb2d047"
|
||||
integrity sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ==
|
||||
|
||||
cli-table3@^0.6.0:
|
||||
version "0.6.0"
|
||||
resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.0.tgz#b7b1bc65ca8e7b5cef9124e13dc2b21e2ce4faee"
|
||||
integrity sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ==
|
||||
dependencies:
|
||||
object-assign "^4.1.0"
|
||||
string-width "^4.2.0"
|
||||
optionalDependencies:
|
||||
colors "^1.1.2"
|
||||
|
||||
cli-width@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6"
|
||||
|
@ -1954,6 +2010,11 @@ clone@^1.0.2:
|
|||
resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
|
||||
integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4=
|
||||
|
||||
clone@^2.1.2:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f"
|
||||
integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=
|
||||
|
||||
cluster-key-slot@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.0.tgz#30474b2a981fb12172695833052bc0d01336d10d"
|
||||
|
@ -2009,6 +2070,11 @@ color-string@^1.5.2:
|
|||
color-name "^1.0.0"
|
||||
simple-swizzle "^0.2.2"
|
||||
|
||||
color-support@^1.1.1:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2"
|
||||
integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==
|
||||
|
||||
color@3.0.x:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/color/-/color-3.0.0.tgz#d920b4328d534a3ac8295d68f7bd4ba6c427be9a"
|
||||
|
@ -2282,6 +2348,11 @@ cron-parser@^2.13.0:
|
|||
is-nan "^1.3.0"
|
||||
moment-timezone "^0.5.31"
|
||||
|
||||
cross-argv@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/cross-argv/-/cross-argv-1.0.0.tgz#e7221e9ff73092a80496c699c8c45efb20f6486c"
|
||||
integrity sha512-uAVe/bgNHlPdP1VE4Sk08u9pAJ7o1x/tVQtX77T5zlhYhuwOWtVkPBEtHdvF5cq48VzeCG5i1zN4dQc8pwLYrw==
|
||||
|
||||
cross-spawn@^7.0.2, cross-spawn@^7.0.3:
|
||||
version "7.0.3"
|
||||
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
|
||||
|
@ -3412,6 +3483,15 @@ form-data@^3.0.0:
|
|||
combined-stream "^1.0.8"
|
||||
mime-types "^2.1.12"
|
||||
|
||||
form-data@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
|
||||
integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
|
||||
dependencies:
|
||||
asynckit "^0.4.0"
|
||||
combined-stream "^1.0.8"
|
||||
mime-types "^2.1.12"
|
||||
|
||||
form-data@~2.3.2:
|
||||
version "2.3.3"
|
||||
resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
|
||||
|
@ -3688,6 +3768,11 @@ har-validator@~5.1.3:
|
|||
ajv "^6.12.3"
|
||||
har-schema "^2.0.0"
|
||||
|
||||
has-async-hooks@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/has-async-hooks/-/has-async-hooks-1.0.0.tgz#3df965ade8cd2d9dbfdacfbca3e0a5152baaf204"
|
||||
integrity sha512-YF0VPGjkxr7AyyQQNykX8zK4PvtEDsUJAPqwu06UFz1lb6EvI53sPh5H1kWxg8NXI5LsfRCZ8uX9NkYDZBb/mw==
|
||||
|
||||
has-binary2@~1.0.2:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d"
|
||||
|
@ -3739,6 +3824,20 @@ hashish@~0.0.4:
|
|||
dependencies:
|
||||
traverse ">=0.2.4"
|
||||
|
||||
hdr-histogram-js@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/hdr-histogram-js/-/hdr-histogram-js-2.0.1.tgz#ecb1ff2bcb6181c3e93ff4af9472c28c7e97284e"
|
||||
integrity sha512-uPZxl1dAFnjUFHWLZmt93vUUvtHeaBay9nVNHu38SdOjMSF/4KqJUqa1Seuj08ptU1rEb6AHvB41X8n/zFZ74Q==
|
||||
dependencies:
|
||||
"@assemblyscript/loader" "^0.10.1"
|
||||
base64-js "^1.2.0"
|
||||
pako "^1.0.3"
|
||||
|
||||
hdr-histogram-percentiles-obj@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz#9409f4de0c2dda78e61de2d9d78b1e9f3cba283c"
|
||||
integrity sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==
|
||||
|
||||
he@1.2.0, he@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
|
||||
|
@ -3832,6 +3931,11 @@ http-parser-js@^0.4.3:
|
|||
resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.13.tgz#3bd6d6fde6e3172c9334c3b33b6c193d80fe1137"
|
||||
integrity sha1-O9bW/ebjFyyTNMOzO2wZPYD+ETc=
|
||||
|
||||
http-parser-js@^0.5.2:
|
||||
version "0.5.3"
|
||||
resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9"
|
||||
integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==
|
||||
|
||||
http-signature@1.3.5, http-signature@~1.2.0:
|
||||
version "1.3.5"
|
||||
resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.3.5.tgz#9f19496ffbf3227298d7b5f156e0e1a948678683"
|
||||
|
@ -3846,6 +3950,14 @@ human-signals@^2.1.0:
|
|||
resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
|
||||
integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
|
||||
|
||||
hyperid@^2.0.3:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/hyperid/-/hyperid-2.1.0.tgz#2f5ed7537e87e8fddd344710a610be501b3d2da6"
|
||||
integrity sha512-cSakhxbUsaIuqjfvvcUuvl/Fl342J65xgLLYrYxSSr9qmJ/EJK+S8crS6mIlQd/a7i+Pe4D0MgSrtZPLze+aCw==
|
||||
dependencies:
|
||||
uuid "^3.4.0"
|
||||
uuid-parse "^1.1.0"
|
||||
|
||||
i18n-locales@^0.0.4:
|
||||
version "0.0.4"
|
||||
resolved "https://registry.yarnpkg.com/i18n-locales/-/i18n-locales-0.0.4.tgz#95d6505f6563f870f68860c23d35f82bd805cbf5"
|
||||
|
@ -4180,6 +4292,11 @@ is-installed-globally@^0.3.1:
|
|||
global-dirs "^2.0.1"
|
||||
is-path-inside "^3.0.1"
|
||||
|
||||
is-interactive@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e"
|
||||
integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==
|
||||
|
||||
is-nan@^1.3.0:
|
||||
version "1.3.2"
|
||||
resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d"
|
||||
|
@ -4673,7 +4790,7 @@ lodash@4.17.20, lodash@>=4.17.13, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17
|
|||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52"
|
||||
integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==
|
||||
|
||||
log-symbols@4.0.0:
|
||||
log-symbols@4.0.0, log-symbols@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920"
|
||||
integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==
|
||||
|
@ -4820,6 +4937,11 @@ make-plural@^6.2.2:
|
|||
resolved "https://registry.yarnpkg.com/make-plural/-/make-plural-6.2.2.tgz#beb5fd751355e72660eeb2218bb98eec92853c6c"
|
||||
integrity sha512-8iTuFioatnTTmb/YJjywkVIHLjcwkFD9Ms0JpxjEm9Mo8eQYkh1z+55dwv4yc1jQ8ftVBxWQbihvZL1DfzGGWA==
|
||||
|
||||
manage-path@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/manage-path/-/manage-path-2.0.0.tgz#f4cf8457b926eeee2a83b173501414bc76eb9597"
|
||||
integrity sha1-9M+EV7km7u4qg7FzUBQUvHbrlZc=
|
||||
|
||||
markdown-it-emoji@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/markdown-it-emoji/-/markdown-it-emoji-2.0.0.tgz#3164ad4c009efd946e98274f7562ad611089a231"
|
||||
|
@ -5518,6 +5640,11 @@ on-headers@~1.0.2:
|
|||
resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f"
|
||||
integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==
|
||||
|
||||
on-net-listen@^1.1.1:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/on-net-listen/-/on-net-listen-1.1.2.tgz#671e55a81c910fa7e5b1e4d506545e9ea0f2e11c"
|
||||
integrity sha512-y1HRYy8s/RlcBvDUwKXSmkODMdx4KSuIvloCnQYJ2LdBBC1asY4HtfhXwe3UWknLakATZDnbzht2Ijw3M1EqFg==
|
||||
|
||||
once@^1.3.0, once@^1.3.1, once@^1.4.0:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
|
||||
|
@ -5566,6 +5693,20 @@ optionator@^0.9.1:
|
|||
type-check "^0.4.0"
|
||||
word-wrap "^1.2.3"
|
||||
|
||||
ora@^5.1.0:
|
||||
version "5.3.0"
|
||||
resolved "https://registry.yarnpkg.com/ora/-/ora-5.3.0.tgz#fb832899d3a1372fe71c8b2c534bbfe74961bb6f"
|
||||
integrity sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==
|
||||
dependencies:
|
||||
bl "^4.0.3"
|
||||
chalk "^4.1.0"
|
||||
cli-cursor "^3.1.0"
|
||||
cli-spinners "^2.5.0"
|
||||
is-interactive "^1.0.0"
|
||||
log-symbols "^4.0.0"
|
||||
strip-ansi "^6.0.0"
|
||||
wcwidth "^1.0.1"
|
||||
|
||||
os-homedir@^1.0.0:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
|
||||
|
@ -5682,7 +5823,7 @@ packet-reader@1.0.0:
|
|||
resolved "https://registry.yarnpkg.com/packet-reader/-/packet-reader-1.0.0.tgz#9238e5480dedabacfe1fe3f2771063f164157d74"
|
||||
integrity sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==
|
||||
|
||||
pako@^1.0.5:
|
||||
pako@^1.0.3, pako@^1.0.5:
|
||||
version "1.0.11"
|
||||
resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
|
||||
integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==
|
||||
|
@ -6020,6 +6161,11 @@ prepend-http@^2.0.0:
|
|||
resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897"
|
||||
integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=
|
||||
|
||||
pretty-bytes@^5.4.1:
|
||||
version "5.5.0"
|
||||
resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.5.0.tgz#0cecda50a74a941589498011cf23275aa82b339e"
|
||||
integrity sha512-p+T744ZyjjiaFlMUZZv6YPC5JrkNj8maRmPaQCWFJFplUAzpIUTRaTcS+7wmZtUoFXHtESJb23ISliaWyz3SHA==
|
||||
|
||||
preview-email@^3.0.3:
|
||||
version "3.0.3"
|
||||
resolved "https://registry.yarnpkg.com/preview-email/-/preview-email-3.0.3.tgz#1dd9b26c9be313ce59aca17db1de33c54b3676cf"
|
||||
|
@ -6043,7 +6189,7 @@ process@^0.11.10:
|
|||
resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
|
||||
integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
|
||||
|
||||
progress@^2.0.0:
|
||||
progress@^2.0.0, progress@^2.0.3:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
|
||||
integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
|
||||
|
@ -6484,6 +6630,11 @@ registry-url@^5.0.0:
|
|||
dependencies:
|
||||
rc "^1.2.8"
|
||||
|
||||
reinterval@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/reinterval/-/reinterval-1.1.0.tgz#3361ecfa3ca6c18283380dd0bb9546f390f5ece7"
|
||||
integrity sha1-M2Hs+jymwYKDOA3Qu5VG85D17Oc=
|
||||
|
||||
render-media@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/render-media/-/render-media-4.1.0.tgz#9188376822653d7e56c2d789d157c81e74fee0cb"
|
||||
|
@ -6576,6 +6727,11 @@ restore-cursor@^3.1.0:
|
|||
onetime "^5.1.0"
|
||||
signal-exit "^3.0.2"
|
||||
|
||||
retimer@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/retimer/-/retimer-2.0.0.tgz#e8bd68c5e5a8ec2f49ccb5c636db84c04063bbca"
|
||||
integrity sha512-KLXY85WkEq2V2bKex/LOO1ViXVn2KGYe4PYysAdYdjmraYIUsVkXu8O4am+8+5UbaaGl1qho4aqAAPHNQ4GSbg==
|
||||
|
||||
retry-as-promised@^3.2.0:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/retry-as-promised/-/retry-as-promised-3.2.0.tgz#769f63d536bec4783549db0777cb56dadd9d8543"
|
||||
|
@ -7437,6 +7593,11 @@ timers-ext@^0.1.7:
|
|||
es5-ext "~0.10.46"
|
||||
next-tick "1"
|
||||
|
||||
timestring@^6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.yarnpkg.com/timestring/-/timestring-6.0.0.tgz#b0c7c331981ecf2066ce88bcfb8ee3ae32e7a0f6"
|
||||
integrity sha512-wMctrWD2HZZLuIlchlkE2dfXJh7J2KDI9Dwl+2abPYg0mswQHfOAyQW3jJg1pY5VfttSINZuKcXoB3FGypVklA==
|
||||
|
||||
timm@^1.6.1:
|
||||
version "1.7.1"
|
||||
resolved "https://registry.yarnpkg.com/timm/-/timm-1.7.1.tgz#96bab60c7d45b5a10a8a4d0f0117c6b7e5aff76f"
|
||||
|
@ -7868,12 +8029,17 @@ uue@^3.1.0:
|
|||
escape-string-regexp "~1.0.5"
|
||||
extend "~3.0.0"
|
||||
|
||||
uuid-parse@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/uuid-parse/-/uuid-parse-1.1.0.tgz#7061c5a1384ae0e1f943c538094597e1b5f3a65b"
|
||||
integrity sha512-OdmXxA8rDsQ7YpNVbKSJkNzTw2I+S5WsbMDnCtIWSQaosNAcWtFuI/YK1TjzUI6nbkgiqEyh8gWngfcv8Asd9A==
|
||||
|
||||
uuid@8.3.2, uuid@^8.1.0, uuid@^8.3.0, uuid@^8.3.1:
|
||||
version "8.3.2"
|
||||
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
|
||||
integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
|
||||
|
||||
uuid@^3.3.2:
|
||||
uuid@^3.3.2, uuid@^3.4.0:
|
||||
version "3.4.0"
|
||||
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
|
||||
integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
|
||||
|
@ -7942,7 +8108,7 @@ void-elements@^3.1.0:
|
|||
resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09"
|
||||
integrity sha1-YU9/v42AHwu18GYfWy9XhXUOTwk=
|
||||
|
||||
wcwidth@>=1.0.1:
|
||||
wcwidth@>=1.0.1, wcwidth@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"
|
||||
integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=
|
||||
|
|
Loading…
Reference in a new issue