1
0
mirror of https://github.com/verdaccio/verdaccio.git synced 2024-11-08 23:25:51 +01:00

build: collect metrics running some benchmarks (#2272)

This commit is contained in:
Juan Picado 2021-06-05 15:33:17 +02:00 committed by GitHub
parent 8682af5628
commit 3d1d5071ed
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 698 additions and 80 deletions

168
.github/workflows/benckmark.yml vendored Normal file

@ -0,0 +1,168 @@
---
name: ci - benchmark
on:
schedule:
# 3 times day
# collecting enough data to draw some graphics
- cron: '0 0/8 * * *'
# push:
# branches:
# - master
jobs:
prepare:
name: Prepare build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: 14.x
- name: install pnpm
run: sudo npm i pnpm@6.6.1 -g
- name: set store
run: |
mkdir ~/.pnpm-store
pnpm config set store-dir ~/.pnpm-store
- name: setup pnpm config registry
run: pnpm config set registry https://registry.verdaccio.org
- name: install dependencies
run: pnpm install
- name: Cache .pnpm-store
uses: actions/cache@v2
with:
path: ~/.pnpm-store
key: pnpm-${{ hashFiles('pnpm-lock.yaml') }}
restore-keys: |
pnpm-
- name: build
run: pnpm build
- name: tar packages
run: |
tar -czvf ${{ github.workspace }}/pkg.tar.gz -C ${{ github.workspace }}/packages .
- uses: actions/upload-artifact@v2
with:
name: verdaccio-artifact
path: pkg.tar.gz
benchmark-autocannon:
needs: prepare
strategy:
fail-fast: false
matrix:
benchmark:
- info
- tarball
verdaccioVersion:
# - local
- 3.13.1
- 4.12.1
- 5.1.0
name: Benchmark autocannon
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: 14.x
- uses: actions/download-artifact@v2
with:
name: verdaccio-artifact
- name: untar packages
run: tar -xzvf pkg.tar.gz -C ${{ github.workspace }}/packages
- name: install pnpm
# require fixed version
run: sudo npm i pnpm@6.6.1 -g
- uses: actions/cache@v2
with:
path: ~/.pnpm-store
key: pnpm-${{ hashFiles('pnpm-lock.yaml') }}
- name: install dependencies
run: pnpm install
- name: start registry
run: ./scripts/benchmark-prepare.sh ${{matrix.verdaccioVersion}}
- name: benchmark
run: pnpm benchmark:api -- -v ${{matrix.verdaccioVersion}} -f ${{matrix.benchmark}}
shell: bash
env:
DEBUG: metrics*
- uses: actions/upload-artifact@v2
with:
name: verdaccio-metrics
path: ./api-results-${{matrix.verdaccioVersion}}-${{matrix.benchmark}}.json
if-no-files-found: error
retention-days: 10
- name: submit metrics
run: pnpm benchmarka:submit
env:
DEBUG: metrics
METRICS_SOURCE: autocannon
METRICS_URL: ${{ secrets.METRICS_URL }}
METRICS_TOKEN: ${{ secrets.METRICS_TOKEN }}
METRICS_BENCHMARK: ${{matrix.benchmark}}
METRICS_VERSION: ${{matrix.verdaccioVersion}}
METRICS_COMMIT_HASH: ${{ github.sha }}
METRICS_FILE_NAME: 'api-results'
benchmark:
needs: prepare
strategy:
fail-fast: false
matrix:
benchmark:
- info
- tarball
verdaccioVersion:
# future 6.x (wip)
# - local (master branch)
# old versions to compare same test along previous releases
- 3.13.1
- 4.12.1
- 5.1.0
name: Benchmark hyperfine
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: 14.x
- uses: actions/download-artifact@v2
with:
name: verdaccio-artifact
- name: untar packages
run: tar -xzvf pkg.tar.gz -C ${{ github.workspace }}/packages
- name: install pnpm
# require fixed version
run: sudo npm i pnpm@6.6.1 -g
- uses: actions/cache@v2
with:
path: ~/.pnpm-store
key: pnpm-${{ hashFiles('pnpm-lock.yaml') }}
- name: install dependencies
run: pnpm install
- name: install hyperfine
run: |
wget https://github.com/sharkdp/hyperfine/releases/download/v1.11.0/hyperfine_1.11.0_amd64.deb
sudo dpkg -i hyperfine_1.11.0_amd64.deb
- name: start registry
run: ./scripts/benchmark-prepare.sh ${{matrix.verdaccioVersion}}
- name: benchmark
run: ./scripts/benchmark-run.sh ${{matrix.benchmark}}
# https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#using-a-specific-shell
shell: bash
- name: rename
run: mv ./hyper-results.json ./hyper-results-${{matrix.verdaccioVersion}}-${{matrix.benchmark}}.json
- uses: actions/upload-artifact@v2
with:
name: verdaccio-metrics
path: ./hyper-results-${{matrix.verdaccioVersion}}-${{matrix.benchmark}}.json
if-no-files-found: error
retention-days: 10
- name: submit metrics
run: pnpm benchmarka:submit
env:
DEBUG: metrics
METRICS_SOURCE: hyperfine
METRICS_URL: ${{ secrets.METRICS_URL }}
METRICS_TOKEN: ${{ secrets.METRICS_TOKEN }}
METRICS_BENCHMARK: ${{matrix.benchmark}}
METRICS_VERSION: ${{matrix.verdaccioVersion}}
METRICS_COMMIT_HASH: ${{ github.sha }}

24
.gitignore vendored

@ -2,22 +2,17 @@
verdaccio-*.tgz
.DS_Store
build/
dist/
.eslintcache
./dist
### Test
node_modules
### database
.verdaccio-db.json
.sinopia-db.json
###
### test
test-storage*
.verdaccio_test_env
node_modules
package-lock.json
yarn-error.log
yarn.lock
# docker examples
docker-examples/v5/reverse_proxy/nginx/relative_path/storage/*
@ -36,12 +31,15 @@ tsconfig.tsbuildinfo
## bundle files
packages/standalone/dist/
## ui
packages/plugins/ui-theme/static
# website
website/public
website/.cache
# CI Pnpm cache
.pnpm-store/
# benchmark
api-results.json
hyper-results.json
hyper-results*.json
api-results*.json

@ -53,6 +53,7 @@
"@types/lodash": "4.14.167",
"@types/lowdb": "^1.0.9",
"@types/mime": "2.0.2",
"@types/autocannon": "4.1.0",
"@types/minimatch": "3.0.3",
"@types/node": "^14.14.7",
"@types/react": "16.14.2",
@ -71,6 +72,7 @@
"@typescript-eslint/parser": "4.13.0",
"@verdaccio/types": "workspace:*",
"@verdaccio/ui-theme": "workspace:*",
"@verdaccio/benchmark": "workspace:*",
"@verdaccio/eslint-config": "workspace:*",
"babel-core": "7.0.0-bridge.0",
"babel-eslint": "10.1.0",
@ -82,6 +84,7 @@
"core-js": "^3.12.1",
"cross-env": "7.0.3",
"detect-secrets": "1.0.6",
"autocannon": "7.3.0",
"eslint": "7.26.0",
"eslint-config-google": "0.14.0",
"eslint-config-prettier": "8.3.0",
@ -95,6 +98,7 @@
"eslint-plugin-verdaccio": "10.0.0",
"eslint-plugin-prettier": "3.4.0",
"fs-extra": "9.1.0",
"debug": "4.3.1",
"get-stdin": "7.0.0",
"husky": "2.7.0",
"in-publish": "2.0.1",
@ -108,6 +112,7 @@
"lint-staged": "8.2.1",
"nock": "12.0.3",
"nodemon": "^2.0.7",
"node-fetch": "2.6.1",
"npm-run-all": "4.1.5",
"prettier": "2.3.0",
"rimraf": "3.0.2",
@ -116,7 +121,7 @@
"ts-node": "^9.1.1",
"typescript": "^4.2.4",
"update-ts-references": "2.3.0",
"verdaccio": "^5.0.4",
"verdaccio": "5.1.0",
"verdaccio-audit": "workspace:*",
"verdaccio-auth-memory": "workspace:*",
"verdaccio-htpasswd": "workspace:*",
@ -133,6 +138,9 @@
"test:e2e:cli": "pnpm test --filter ...@verdaccio/e2e-cli",
"test:e2e:ui": "pnpm test --filter ...@verdaccio/e2e-ui",
"start": "concurrently --kill-others \"pnpm _start:server\" \"pnpm _start:web\"",
"benchmark:hyper": "verdaccio-benchmark hyper -r ./hyper-results.json",
"benchmark:api": "verdaccio-benchmark api",
"benchmarka:submit": "pnpm ts-node ./scripts/submit-metrics.ts",
"start:watch": "concurrently --kill-others \"pnpm _build:watch\" \"pnpm _start:server\" \"pnpm _debug:reload\"",
"_build:watch": "pnpm run --parallel watch --filter ./packages",
"_start:server": "node packages/verdaccio/debug/bootstrap.js --listen 8000",

@ -0,0 +1,3 @@
{
"extends": "../../../.babelrc"
}

@ -0,0 +1 @@
require('./build/index.js');

@ -0,0 +1,28 @@
{
"name": "@verdaccio/benchmark",
"version": "1.0.0",
"bin": {
"verdaccio-benchmark": "./index.js"
},
"private": "true",
"description": "benchmark",
"main": "./build/index.js",
"scripts": {
"build": "babel src/ --out-dir build/ --copy-files --extensions \".ts,.tsx\" --source-maps",
"run": "ts-node src/init.ts"
},
"keywords": [],
"author": "Juan Picado <juanpicado19@gmail.com>",
"license": "MIT",
"dependencies": {
"clipanion": "3.0.0-rc.12",
"temp-dir": "2.0.0",
"get-port": "5.1.1",
"semver": "7.3.5"
},
"devDependencies": {
"autocannon": "7.3.0",
"node-fetch": "2.6.1",
"ts-node": "10.0.0"
}
}

@ -0,0 +1,26 @@
/* eslint-disable no-console */
import { Command, Option } from 'clipanion';
import runApi from './run';
export class ApiCommand extends Command {
public static paths = [['api']];
private benchmark = Option.String('-f', {
description: 'benchmark to run',
required: true,
});
private version = Option.String('-v', {
description: 'version is running',
required: true,
});
public async execute() {
try {
await runApi(this.benchmark, this.version);
} catch (err) {
console.error(err);
process.exit(1);
}
}
}

@ -0,0 +1,40 @@
import { writeFileSync } from 'fs';
const path = require('path');
const debug = require('debug')('metrics:autocannon');
const autocannon = require('autocannon');
function getURL(benchmark) {
switch (benchmark) {
case 'info':
return 'http://localhost:4873/jquery';
case 'tarball':
return 'http://localhost:4873/jquery/-/jquery-3.6.0.tgz';
default:
throw new TypeError('no benckmark supported');
}
}
export default async function run(benchmark, version) {
try {
debug('api report start');
debug('url', getURL(benchmark));
const result = await autocannon({
url: getURL(benchmark),
connections: 10,
pipelining: 1,
duration: 10,
});
const wrapResults = {
results: [result],
};
const reportPath = path.join(process.cwd(), `./api-results-${version}-${benchmark}.json`);
debug('report path %o', reportPath);
writeFileSync(reportPath, JSON.stringify(wrapResults, null, 2), 'utf-8');
debug('report ends');
} catch (err) {
// eslint-disable-next-line no-console
console.error(`error on process autocannon run`, err);
process.exit(1);
}
}

@ -0,0 +1,25 @@
import { Cli } from 'clipanion';
import { ApiCommand } from './api';
const [node, app, ...args] = process.argv;
// eslint-disable-next-line no-console
console.log('--args', args);
const cli = new Cli({
binaryLabel: `benckmark`,
binaryName: `${node} ${app}`,
binaryVersion: require('../package.json').version,
});
cli.register(ApiCommand);
cli.runExit(args, Cli.defaultContext);
process.on('uncaughtException', function (err) {
// eslint-disable-next-line no-console
console.error(
// eslint-disable-next-line max-len
`uncaught exception, please report (https://github.com/verdaccio/verdaccio/issues) this: \n${err.stack}`
);
process.exit(1);
});

@ -0,0 +1,9 @@
{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"rootDir": "./src",
"outDir": "./build"
},
"include": ["src/**/*"],
"exclude": ["src/**/*.test.ts"]
}

@ -0,0 +1,9 @@
{
"extends": "../../tsconfig.reference.json",
"compilerOptions": {
"rootDir": "./src",
"outDir": "./build"
},
"include": ["src/**/*"],
"exclude": ["src/**/*.test.ts"]
}

323
pnpm-lock.yaml generated

@ -35,6 +35,7 @@ importers:
'@commitlint/config-conventional': 8.2.0
'@octokit/rest': 17.0.0
'@types/async': 3.2.5
'@types/autocannon': 4.1.0
'@types/autosuggest-highlight': 3.1.1
'@types/express': 4.17.6
'@types/http-errors': 1.8.0
@ -59,9 +60,11 @@ importers:
'@types/webpack-env': 1.16.0
'@typescript-eslint/eslint-plugin': 4.13.0
'@typescript-eslint/parser': 4.13.0
'@verdaccio/benchmark': workspace:*
'@verdaccio/eslint-config': workspace:*
'@verdaccio/types': workspace:*
'@verdaccio/ui-theme': workspace:*
autocannon: 7.3.0
babel-core: 7.0.0-bridge.0
babel-eslint: 10.1.0
babel-jest: 26.6.3
@ -71,6 +74,7 @@ importers:
concurrently: ^5.3.0
core-js: ^3.12.1
cross-env: 7.0.3
debug: 4.3.1
detect-secrets: 1.0.6
eslint: 7.26.0
eslint-config-google: 0.14.0
@ -97,6 +101,7 @@ importers:
kleur: 4.1.4
lint-staged: 8.2.1
nock: 12.0.3
node-fetch: 2.6.1
nodemon: ^2.0.7
npm-run-all: 4.1.5
prettier: 2.3.0
@ -106,7 +111,7 @@ importers:
ts-node: ^9.1.1
typescript: ^4.2.4
update-ts-references: 2.3.0
verdaccio: ^5.0.4
verdaccio: 5.1.0
verdaccio-audit: workspace:*
verdaccio-auth-memory: workspace:*
verdaccio-htpasswd: workspace:*
@ -143,6 +148,7 @@ importers:
'@commitlint/config-conventional': 8.2.0
'@octokit/rest': 17.0.0
'@types/async': 3.2.5
'@types/autocannon': 4.1.0
'@types/autosuggest-highlight': 3.1.1
'@types/express': 4.17.6
'@types/http-errors': 1.8.0
@ -167,9 +173,11 @@ importers:
'@types/webpack-env': 1.16.0
'@typescript-eslint/eslint-plugin': 4.13.0_82a146d320a394c7e8b76cadf227b197
'@typescript-eslint/parser': 4.13.0_eslint@7.26.0+typescript@4.2.4
'@verdaccio/benchmark': link:packages/tools/benchmark
'@verdaccio/eslint-config': link:packages/tools/eslint
'@verdaccio/types': link:packages/core/types
'@verdaccio/ui-theme': link:packages/plugins/ui-theme
autocannon: 7.3.0
babel-core: 7.0.0-bridge.0_@babel+core@7.13.15
babel-eslint: 10.1.0_eslint@7.26.0
babel-jest: 26.6.3_@babel+core@7.13.15
@ -179,6 +187,7 @@ importers:
concurrently: 5.3.0
core-js: 3.12.1
cross-env: 7.0.3
debug: 4.3.1
detect-secrets: 1.0.6
eslint: 7.26.0
eslint-config-google: 0.14.0_eslint@7.26.0
@ -205,6 +214,7 @@ importers:
kleur: 4.1.4
lint-staged: 8.2.1
nock: 12.0.3
node-fetch: 2.6.1
nodemon: 2.0.7
npm-run-all: 4.1.5
prettier: 2.3.0
@ -214,7 +224,7 @@ importers:
ts-node: 9.1.1_typescript@4.2.4
typescript: 4.2.4
update-ts-references: 2.3.0_typescript@4.2.4
verdaccio: 5.0.4
verdaccio: 5.1.0
verdaccio-audit: link:packages/plugins/audit
verdaccio-auth-memory: link:packages/plugins/auth-memory
verdaccio-htpasswd: link:packages/core/htpasswd
@ -1021,6 +1031,25 @@ importers:
'@verdaccio/mock': link:../mock
'@verdaccio/types': link:../core/types
packages/tools/benchmark:
specifiers:
autocannon: 7.3.0
clipanion: 3.0.0-rc.12
get-port: 5.1.1
node-fetch: 2.6.1
semver: 7.3.5
temp-dir: 2.0.0
ts-node: 10.0.0
dependencies:
clipanion: 3.0.0-rc.12
get-port: 5.1.1
semver: 7.3.5
temp-dir: 2.0.0
devDependencies:
autocannon: 7.3.0
node-fetch: 2.6.1
ts-node: 10.0.0
packages/tools/eslint:
specifiers: {}
@ -1162,6 +1191,10 @@ importers:
packages:
/@assemblyscript/loader/0.10.1:
resolution: {integrity: sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==}
dev: true
/@babel/cli/7.13.14_@babel+core@7.13.15:
resolution: {integrity: sha512-zmEFV8WBRsW+mPQumO1/4b34QNALBVReaiHJOkxhUsdo/AvYM62c+SKSuLi2aZ42t3ocK6OI0uwUXRvrIbREZw==}
hasBin: true
@ -4225,6 +4258,22 @@ packages:
resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==}
engines: {node: '>= 6'}
/@tsconfig/node10/1.0.7:
resolution: {integrity: sha512-aBvUmXLQbayM4w3A8TrjwrXs4DZ8iduJnuJLLRGdkWlyakCf1q6uHZJBzXoRA/huAEknG5tcUyQxN3A+In5euQ==}
dev: true
/@tsconfig/node12/1.0.7:
resolution: {integrity: sha512-dgasobK/Y0wVMswcipr3k0HpevxFJLijN03A8mYfEPvWvOs14v0ZlYTR4kIgMx8g4+fTyTFv8/jLCIfRqLDJ4A==}
dev: true
/@tsconfig/node14/1.0.0:
resolution: {integrity: sha512-RKkL8eTdPv6t5EHgFKIVQgsDapugbuOptNd9OOunN/HAkzmmTnZELx1kNCK0rSdUYGmiFMM3rRQMAWiyp023LQ==}
dev: true
/@tsconfig/node16/1.0.1:
resolution: {integrity: sha512-FTgBI767POY/lKNDNbIzgAX6miIDBs6NTCbdlDb8TrWovHsSvaVIZDlTqym29C6UqhzwcJx4CYr+AlrMywA0cA==}
dev: true
/@types/activedirectory2/1.2.2:
resolution: {integrity: sha512-YVvlqf7hemxSS7D+sG8FZO1ClrSScniOtwLoyA+sR8193U9PCBTlpo1JUZEcgHNA+rrIHMrsBHP3rbH3gtV0pg==}
dependencies:
@ -4243,6 +4292,12 @@ packages:
resolution: {integrity: sha512-fdtHUdfIxSfU6crUgUOEb6vxdquAOa75bh1sQVL/ePkmQDNo8Aj1056eGGI9cPls5tLRhnAyfoXljEk+hmhbxg==}
dev: true
/@types/autocannon/4.1.0:
resolution: {integrity: sha512-SrG28f0RENabY2jCrz/xfkKqpaxorBSi8EcVxiFrGtvzlWNqOFAw35ASqEclLqkQXwyldmJLXqxebeFa1479vA==}
dependencies:
'@types/node': 14.14.41
dev: true
/@types/autosuggest-highlight/3.1.1:
resolution: {integrity: sha512-onPUHT+32TyI7ctiG7G/JtWlVkEBH2bw1onOWaea0L0dZmKNhP+KIOcrh7gnr2LTzD9/cjQlC7zJdv259dg0lg==}
dev: true
@ -4921,8 +4976,8 @@ packages:
lockfile: 1.0.4
dev: true
/@verdaccio/local-storage/10.0.1:
resolution: {integrity: sha512-dnrBZeuftSFjtQhp7Y+abbWPtM1luxEhP5+6152d8dMnNmomTMZWJcr/eUwKkw6o9d39d4NA4Pimm9bXEBGrdA==}
/@verdaccio/local-storage/10.0.6:
resolution: {integrity: sha512-YEImOMUL56lziS/N3o1YzoOcVGZXpyZclGSonw7XQ1lKQEvEhU06V2+tIdjPgtqIOuH9ZKdPeBsBuN7ILa2qzQ==}
engines: {node: '>=8'}
dependencies:
'@verdaccio/commons-api': 10.0.0
@ -4940,9 +4995,9 @@ packages:
/@verdaccio/readme/10.0.0:
resolution: {integrity: sha512-OD3dMnRC8SvhgytEzczMBleN+K/3lMqyWw/epeXvolCpCd7mW/Dl5zSR25GiHh/2h3eTKP/HMs4km8gS1MMLgA==}
dependencies:
dompurify: 2.2.7
dompurify: 2.2.9
jsdom: 15.2.1
marked: 2.0.1
marked: 2.0.5
transitivePeerDependencies:
- bufferutil
- canvas
@ -5830,6 +5885,33 @@ packages:
resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==}
engines: {node: '>=8.0.0'}
/autocannon/7.3.0:
resolution: {integrity: sha512-RuyTU8fQE1FC6BDgslofLCeI4y9y9RRnnZtvoQ+onwQl+B2rsiGpcCi84/Si0rq3VRkkMFnmPulY3z59zYhX9g==}
hasBin: true
dependencies:
chalk: 4.1.1
char-spinner: 1.0.1
cli-table3: 0.6.0
clone: 2.1.2
color-support: 1.1.3
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.1.0
manage-path: 2.0.0
on-net-listen: 1.1.2
pretty-bytes: 5.6.0
progress: 2.0.3
reinterval: 1.1.0
retimer: 3.0.0
semver: 7.3.5
subarg: 1.0.0
timestring: 6.0.0
dev: true
/autoprefixer/9.8.6:
resolution: {integrity: sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==}
hasBin: true
@ -5881,10 +5963,6 @@ packages:
/aws4/1.10.1:
resolution: {integrity: sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA==}
/aws4/1.11.0:
resolution: {integrity: sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==}
dev: true
/axe-core/4.1.1:
resolution: {integrity: sha512-5Kgy8Cz6LPC9DJcNb3yjAXTu3XihQgEdnIg50c//zOC/MyLP0Clg+Y8Sh9ZjjnvBrDZU4DgXS9C3T9r4/scGZQ==}
engines: {node: '>=4'}
@ -6701,6 +6779,10 @@ packages:
engines: {node: '>=10'}
dev: true
/char-spinner/1.0.1:
resolution: {integrity: sha1-5upnvSR+EHESmDt6sEee02KAAIE=}
dev: true
/character-entities-legacy/1.1.4:
resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==}
dev: true
@ -6828,6 +6910,16 @@ packages:
engines: {node: '>=6'}
dev: true
/cli-table3/0.6.0:
resolution: {integrity: sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ==}
engines: {node: 10.* || >= 12.*}
dependencies:
object-assign: 4.1.1
string-width: 4.2.2
optionalDependencies:
colors: 1.4.0
dev: true
/cli-truncate/0.2.1:
resolution: {integrity: sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=}
engines: {node: '>=0.10.0'}
@ -6840,6 +6932,12 @@ packages:
resolution: {integrity: sha512-e0GyZXjprnxRuls/pHH0cqAgKtpiceQy8PztEZP9fdnkMxuo05D5en9fx60Iiqqjge8pmrMfsiglueS8SWmlgg==}
dependencies:
typanion: 3.3.0
dev: false
/clipanion/3.0.0-rc.12:
resolution: {integrity: sha512-eCixNguza61+8MXXTu6sYzpA8gPZHZzvay4lpFFpr4KSy+43wsugdiKMNejLS9PVcnSuGf0fy9kYs5R2c7Ejmw==}
dependencies:
typanion: 3.3.1
/cliui/5.0.0:
resolution: {integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==}
@ -6883,6 +6981,11 @@ packages:
engines: {node: '>=0.8'}
dev: true
/clone/2.1.2:
resolution: {integrity: sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=}
engines: {node: '>=0.8'}
dev: true
/clsx/1.1.1:
resolution: {integrity: sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==}
engines: {node: '>=6'}
@ -6958,6 +7061,11 @@ packages:
simple-swizzle: 0.2.2
dev: true
/color-support/1.1.3:
resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==}
hasBin: true
dev: true
/color/3.1.2:
resolution: {integrity: sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==}
dependencies:
@ -6973,6 +7081,12 @@ packages:
resolution: {integrity: sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==}
dev: true
/colors/1.4.0:
resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==}
engines: {node: '>=0.1.90'}
dev: true
optional: true
/combined-stream/1.0.8:
resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
engines: {node: '>= 0.8'}
@ -7409,6 +7523,10 @@ packages:
resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
dev: true
/cross-argv/1.0.0:
resolution: {integrity: sha512-uAVe/bgNHlPdP1VE4Sk08u9pAJ7o1x/tVQtX77T5zlhYhuwOWtVkPBEtHdvF5cq48VzeCG5i1zN4dQc8pwLYrw==}
dev: true
/cross-env/7.0.3:
resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==}
engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'}
@ -8152,8 +8270,8 @@ packages:
resolution: {integrity: sha512-vIOSyOXkMx81ghEalh4MLBtDHMx1bhKlaqHDMqM2yeitJ996SLOk5mGdDpI9ifJAgokred8Rmu219fX4OltqXw==}
dev: false
/dompurify/2.2.7:
resolution: {integrity: sha512-jdtDffdGNY+C76jvodNTu9jt5yYj59vuTUyx+wXdzcSwAGTYZDAQkQ7Iwx9zcGrA4ixC1syU4H3RZROqRxokxg==}
/dompurify/2.2.9:
resolution: {integrity: sha512-+9MqacuigMIZ+1+EwoEltogyWGFTJZWU3258Rupxs+2CGs4H914G9er6pZbsme/bvb5L67o2rade9n21e4RW/w==}
dev: true
/domutils/1.5.1:
@ -8384,8 +8502,8 @@ packages:
hasBin: true
dev: true
/envinfo/7.7.4:
resolution: {integrity: sha512-TQXTYFVVwwluWSFis6K2XKxgrD22jEv0FTuLCQI+OjH7rn93+iY0fSSFM5lrSxFY+H1+B0/cvvlamr3UsBivdQ==}
/envinfo/7.8.1:
resolution: {integrity: sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==}
engines: {node: '>=4'}
hasBin: true
dev: true
@ -9518,6 +9636,15 @@ packages:
mime-types: 2.1.28
dev: true
/form-data/4.0.0:
resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
engines: {node: '>= 6'}
dependencies:
asynckit: 0.4.0
combined-stream: 1.0.8
mime-types: 2.1.30
dev: true
/formidable/1.2.2:
resolution: {integrity: sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q==}
@ -9755,7 +9882,6 @@ packages:
/get-port/5.1.1:
resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==}
engines: {node: '>=8'}
dev: true
/get-stdin/4.0.1:
resolution: {integrity: sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=}
@ -10185,7 +10311,7 @@ packages:
source-map: 0.6.1
wordwrap: 1.0.0
optionalDependencies:
uglify-js: 3.13.3
uglify-js: 3.12.4
dev: true
/har-schema/2.0.0:
@ -10223,6 +10349,10 @@ packages:
ansi-regex: 2.1.1
dev: true
/has-async-hooks/1.0.0:
resolution: {integrity: sha512-YF0VPGjkxr7AyyQQNykX8zK4PvtEDsUJAPqwu06UFz1lb6EvI53sPh5H1kWxg8NXI5LsfRCZ8uX9NkYDZBb/mw==}
dev: true
/has-bigints/1.0.1:
resolution: {integrity: sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==}
dev: true
@ -10307,6 +10437,18 @@ packages:
resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==}
dev: true
/hdr-histogram-js/2.0.1:
resolution: {integrity: sha512-uPZxl1dAFnjUFHWLZmt93vUUvtHeaBay9nVNHu38SdOjMSF/4KqJUqa1Seuj08ptU1rEb6AHvB41X8n/zFZ74Q==}
dependencies:
'@assemblyscript/loader': 0.10.1
base64-js: 1.5.1
pako: 1.0.11
dev: true
/hdr-histogram-percentiles-obj/3.0.0:
resolution: {integrity: sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==}
dev: true
/he/1.2.0:
resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
hasBin: true
@ -10591,6 +10733,13 @@ packages:
slash: 3.0.0
dev: true
/hyperid/2.1.0:
resolution: {integrity: sha512-cSakhxbUsaIuqjfvvcUuvl/Fl342J65xgLLYrYxSSr9qmJ/EJK+S8crS6mIlQd/a7i+Pe4D0MgSrtZPLze+aCw==}
dependencies:
uuid: 3.4.0
uuid-parse: 1.1.0
dev: true
/hyphenate-style-name/1.0.4:
resolution: {integrity: sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==}
dev: true
@ -11913,13 +12062,6 @@ packages:
esprima: 4.0.1
dev: true
/js-yaml/4.0.0:
resolution: {integrity: sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==}
hasBin: true
dependencies:
argparse: 2.0.1
dev: true
/js-yaml/4.1.0:
resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
hasBin: true
@ -12862,6 +13004,10 @@ packages:
tmpl: 1.0.4
dev: true
/manage-path/2.0.0:
resolution: {integrity: sha1-9M+EV7km7u4qg7FzUBQUvHbrlZc=}
dev: true
/map-cache/0.2.2:
resolution: {integrity: sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=}
engines: {node: '>=0.10.0'}
@ -12895,8 +13041,8 @@ packages:
hasBin: true
dev: false
/marked/2.0.1:
resolution: {integrity: sha512-5+/fKgMv2hARmMW7DOpykr2iLhl0NgjyELk5yn92iE7z8Se1IS9n3UsFm86hFXIkvMBmVxki8+ckcpjBeyo/hw==}
/marked/2.0.5:
resolution: {integrity: sha512-yfCEUXmKhBPLOzEC7c+tc4XZdIeTdGoRCZakFMkCxodr7wDXqoapIME4wjcpBPJLNyUnKJ3e8rb8wlAgnLnaDw==}
engines: {node: '>= 8.16.2'}
hasBin: true
dev: true
@ -13982,6 +14128,11 @@ packages:
resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==}
engines: {node: '>= 0.8'}
/on-net-listen/1.1.2:
resolution: {integrity: sha512-y1HRYy8s/RlcBvDUwKXSmkODMdx4KSuIvloCnQYJ2LdBBC1asY4HtfhXwe3UWknLakATZDnbzht2Ijw3M1EqFg==}
engines: {node: '>=9.4.0 || ^8.9.4'}
dev: true
/once/1.4.0:
resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=}
dependencies:
@ -14212,6 +14363,10 @@ packages:
semver: 6.3.0
dev: true
/pako/1.0.11:
resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==}
dev: true
/param-case/3.0.4:
resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==}
dependencies:
@ -14446,6 +14601,19 @@ packages:
pino-std-serializers: 3.2.0
quick-format-unescaped: 4.0.1
sonic-boom: 1.4.1
dev: false
/pino/6.11.3:
resolution: {integrity: sha512-drPtqkkSf0ufx2gaea3TryFiBHdNIdXKf5LN0hTM82SXI4xVIve2wLwNg92e1MT6m3jASLu6VO7eGY6+mmGeyw==}
hasBin: true
dependencies:
fast-redact: 3.0.0
fast-safe-stringify: 2.0.7
flatstr: 1.0.12
pino-std-serializers: 3.2.0
quick-format-unescaped: 4.0.3
sonic-boom: 1.4.1
dev: true
/pino/6.2.1:
resolution: {integrity: sha512-5F5A+G25Ex2rMOBEe3XYGyLSF4dikQZsFvPojwsqnDBX+rfg7+kw9s5i7pHuVAJImekjwb+MR9jQyHWPLENlvQ==}
@ -15115,6 +15283,11 @@ packages:
hasBin: true
dev: true
/pretty-bytes/5.6.0:
resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==}
engines: {node: '>=6'}
dev: true
/pretty-error/2.1.1:
resolution: {integrity: sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=}
dependencies:
@ -15321,6 +15494,10 @@ packages:
/quick-format-unescaped/4.0.1:
resolution: {integrity: sha512-RyYpQ6Q5/drsJyOhrWHYMWTedvjTIat+FTwv0K4yoUxzvekw2aRHMQJLlnvt8UantkZg2++bEzD9EdxXqkWf4A==}
/quick-format-unescaped/4.0.3:
resolution: {integrity: sha512-MaL/oqh02mhEo5m5J2rwsVL23Iw2PEaGVHgT2vFt8AAsr0lfvQA5dpXo9TPu0rz7tSBdUPgkbam0j/fj5ZM8yg==}
dev: true
/quick-lru/1.1.0:
resolution: {integrity: sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=}
engines: {node: '>=4'}
@ -15777,6 +15954,10 @@ packages:
jsesc: 0.5.0
dev: true
/reinterval/1.1.0:
resolution: {integrity: sha1-M2Hs+jymwYKDOA3Qu5VG85D17Oc=}
dev: true
/relateurl/0.2.7:
resolution: {integrity: sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=}
engines: {node: '>= 0.10'}
@ -15893,7 +16074,7 @@ packages:
engines: {node: '>= 4'}
dependencies:
aws-sign2: 0.7.0
aws4: 1.11.0
aws4: 1.10.1
caseless: 0.12.0
combined-stream: 1.0.8
extend: 3.0.2
@ -16082,6 +16263,10 @@ packages:
engines: {node: '>=4'}
dev: false
/retimer/3.0.0:
resolution: {integrity: sha512-WKE0j11Pa0ZJI5YIk0nflGI7SQsfl2ljihVy7ogh7DeQSeYAUi0ubZ/yEueGtDfUPk6GH5LRw1hBdLq4IwUBWA==}
dev: true
/retry-request/4.1.3:
resolution: {integrity: sha512-QnRZUpuPNgX0+D1xVxul6DbJ9slvo4Rm6iV/dn63e048MvGbUZiKySVt6Tenp04JqmchxjiLltGerOJys7kJYQ==}
engines: {node: '>=8.10.0'}
@ -16358,7 +16543,6 @@ packages:
hasBin: true
dependencies:
lru-cache: 6.0.0
dev: true
/send/0.17.1:
resolution: {integrity: sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==}
@ -17254,6 +17438,12 @@ packages:
resolution: {integrity: sha512-1igcUEmYFBEO14uQHAJhCUelTR5jPztfdVKrYxRnDa5D5Dn3w0NxXupJNPr/VV/yRfZYEAco8sTIRZzH3sRYKg==}
dev: true
/subarg/1.0.0:
resolution: {integrity: sha1-9izxdYHplrSPyWVpn1TAauJouNI=}
dependencies:
minimist: 1.2.5
dev: true
/sugarss/2.0.0:
resolution: {integrity: sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==}
dependencies:
@ -17493,6 +17683,11 @@ packages:
- supports-color
dev: false
/temp-dir/2.0.0:
resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==}
engines: {node: '>=8'}
dev: false
/term-size/1.2.0:
resolution: {integrity: sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=}
engines: {node: '>=4'}
@ -17628,6 +17823,11 @@ packages:
next-tick: 1.1.0
dev: true
/timestring/6.0.0:
resolution: {integrity: sha512-wMctrWD2HZZLuIlchlkE2dfXJh7J2KDI9Dwl+2abPYg0mswQHfOAyQW3jJg1pY5VfttSINZuKcXoB3FGypVklA==}
engines: {node: '>=8'}
dev: true
/timsort/0.3.0:
resolution: {integrity: sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=}
dev: true
@ -17786,6 +17986,33 @@ packages:
resolution: {integrity: sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==}
dev: true
/ts-node/10.0.0:
resolution: {integrity: sha512-ROWeOIUvfFbPZkoDis0L/55Fk+6gFQNZwwKPLinacRl6tsxstTF1DbAcLKkovwnpKMVvOMHP1TIbnwXwtLg1gg==}
engines: {node: '>=12.0.0'}
hasBin: true
peerDependencies:
'@swc/core': '>=1.2.45'
'@swc/wasm': '>=1.2.45'
'@types/node': '*'
typescript: '>=2.7'
peerDependenciesMeta:
'@swc/core':
optional: true
'@swc/wasm':
optional: true
dependencies:
'@tsconfig/node10': 1.0.7
'@tsconfig/node12': 1.0.7
'@tsconfig/node14': 1.0.0
'@tsconfig/node16': 1.0.1
arg: 4.1.3
create-require: 1.1.1
diff: 4.0.2
make-error: 1.3.6
source-map-support: 0.5.19
yn: 3.1.1
dev: true
/ts-node/9.1.1:
resolution: {integrity: sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==}
engines: {node: '>=10.0.0'}
@ -17889,6 +18116,10 @@ packages:
/typanion/3.3.0:
resolution: {integrity: sha512-e+54C4+ozFsTorFe50JNQlXlt4HVGQUvqul7VS0GbDfKlxh3aXbJY87Yu9IdtzvJWCyTgDX7q1PeMd3FH9zZqA==}
dev: false
/typanion/3.3.1:
resolution: {integrity: sha512-VogBiMj3ZQuWaHkbhXwSgd9jXE4s7EMaaV7VSEiKTNYnKJs/bPjvcOGbD7rTM9aPqTABvgLVEZ+iFP6ab12HtQ==}
/type-check/0.3.2:
resolution: {integrity: sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=}
@ -17976,13 +18207,6 @@ packages:
dev: true
optional: true
/uglify-js/3.13.3:
resolution: {integrity: sha512-otIc7O9LyxpUcQoXzj2hL4LPWKklO6LJWoJUzNa8A17Xgi4fOeDC8FBDOLHnC/Slo1CQgsZMcM6as0M76BZaig==}
engines: {node: '>=0.8.0'}
hasBin: true
dev: true
optional: true
/unbox-primitive/1.0.1:
resolution: {integrity: sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==}
dependencies:
@ -18261,6 +18485,10 @@ packages:
resolution: {integrity: sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=}
engines: {node: '>= 0.4.0'}
/uuid-parse/1.1.0:
resolution: {integrity: sha512-OdmXxA8rDsQ7YpNVbKSJkNzTw2I+S5WsbMDnCtIWSQaosNAcWtFuI/YK1TjzUI6nbkgiqEyh8gWngfcv8Asd9A==}
dev: true
/uuid/3.3.2:
resolution: {integrity: sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==}
hasBin: true
@ -18317,6 +18545,12 @@ packages:
/validator/13.5.2:
resolution: {integrity: sha512-mD45p0rvHVBlY2Zuy3F3ESIe1h5X58GPfAtslBjY7EtTqGquZTj+VX/J4RnHWN8FKq0C9WRVt1oWAcytWRuYLQ==}
engines: {node: '>= 0.10'}
dev: false
/validator/13.6.0:
resolution: {integrity: sha512-gVgKbdbHgtxpRyR8K0O6oFZPhhB5tT1jeEHZR0Znr9Svg03U0+r9DXWMrnRAB+HtCStDQKlaIZm42tVsVjqtjg==}
engines: {node: '>= 0.10'}
dev: true
/value-equal/1.0.1:
resolution: {integrity: sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==}
@ -18356,49 +18590,50 @@ packages:
unix-crypt-td-js: 1.1.4
dev: true
/verdaccio/5.0.4:
resolution: {integrity: sha512-Bp3QXbpCLpIohVSQonPA7Dwejv/czt7HmE3fhKR/aSKxopX+4fAn1MPb8AQPElcBMrFOT9riwnOhwhxYh+sNRA==}
/verdaccio/5.1.0:
resolution: {integrity: sha512-NydMLcy4rjnrZdKWtlCspahCIKOUlTRwF484EeweVYAwyh/5K5ph8E8lteDPnOD1UxfRZ+tx/BkQfqHp1udgXg==}
engines: {node: '>=12', npm: '>=6'}
hasBin: true
dependencies:
'@verdaccio/commons-api': 10.0.0
'@verdaccio/local-storage': 10.0.1
'@verdaccio/local-storage': 10.0.6
'@verdaccio/readme': 10.0.0
'@verdaccio/streams': 10.0.0
'@verdaccio/ui-theme': 3.1.0
async: 3.2.0
body-parser: 1.19.0
clipanion: 3.0.0-rc.11
clipanion: 3.0.0-rc.12
compression: 1.7.4
cookies: 0.8.0
cors: 2.8.5
dayjs: 1.10.4
debug: 4.3.1
envinfo: 7.7.4
envinfo: 7.8.1
eslint-import-resolver-node: 0.3.4
express: 4.17.1
fast-safe-stringify: 2.0.7
handlebars: 4.7.7
http-errors: 1.8.0
js-yaml: 4.0.0
js-yaml: 4.1.0
JSONStream: 1.3.5
jsonwebtoken: 8.5.1
kleur: 4.1.4
lodash: 4.17.21
lru-cache: 6.0.0
lunr-mutable-indexes: 2.3.2
marked: 2.0.1
marked: 2.0.5
memoizee: 0.4.15
mime: 2.5.2
minimatch: 3.0.4
mkdirp: 1.0.4
mv: 2.1.1
pino: 6.11.2
pino: 6.11.3
pkginfo: 0.4.1
prettier-bytes: 1.0.4
pretty-ms: 5.1.0
request: 2.88.0
semver: 7.3.4
validator: 13.5.2
semver: 7.3.5
validator: 13.6.0
verdaccio-audit: 10.0.0
verdaccio-htpasswd: 10.0.0
transitivePeerDependencies:

14
scripts/benchmark-prepare.sh Executable file

@ -0,0 +1,14 @@
#!/usr/bin/env bash
set -e
VERSION=$1
tmp_registry_log=`mktemp`
npm i -g verdaccio@$VERSION
# start in the background the registry
nohup verdaccio &>$tmp_registry_log &
# wait until has started (using stdout)
grep -q 'http address' <(tail -f $tmp_registry_log)
npm set registry http://localhost:4873

20
scripts/benchmark-run.sh Executable file

@ -0,0 +1,20 @@
#!/usr/bin/env bash
set -e
FIXTURE=$1
case $FIXTURE in
info)
FIXTURE='npm info jquery'
;;
tarball)
FIXTURE='npm install jquery'
;;
*)
echo "no command found"
return 1;;
esac
hyperfine --ignore-failure --warmup 1 --min-runs=10 --show-output --export-json './hyper-results.json' "$FIXTURE"

@ -1,7 +1,11 @@
#!/usr/bin/env bash
# this file is used by e2e-xx-cli-workflow.yml files
set -e
# create a temporary folder
HERE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
TEMP_DIR="$(mktemp -d)"
@ -10,5 +14,6 @@ cd "${TEMP_DIR}"
echo $TEMP_DIR
echo $HERE_DIR
git config --global user.email "you@example.com"
git config --global user.name "John Doe"
# set basic git config
git config --global user.email "jota@verdaccio.org"
git config --global user.name "Juan Picado"

@ -1,14 +0,0 @@
#!/bin/bash
# Install latest chrome dev package and fonts to support major charsets (Chinese, Japanese, Arabic, Hebrew, Thai and a few others)
# Note: this installs the necessary libs to make the bundled version of Chromium that Puppeteer
# installs, work. https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md#running-puppeteer-in-docker
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
&& sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' \
&& apt-get update \
&& apt-get install -y google-chrome-unstable fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst ttf-freefont \
--no-install-recommends \
&& rm -rf /var/lib/apt/lists/* \
&& rm -rf /src/*.deb \
&& yarn run test:all

49
scripts/submit-metrics.ts Normal file

@ -0,0 +1,49 @@
/**
* CI - Script used on automation GitHub Actions to
* submit metrics to a third party database.
*/
const url = process.env.METRICS_URL;
const token = process.env.METRICS_TOKEN;
const version = process.env.METRICS_VERSION;
const benchmark = process.env.METRICS_BENCHMARK;
const source = process.env.METRICS_SOURCE;
const commit = process.env.METRICS_COMMIT_HASH;
const file = process.env.METRICS_FILE_NAME ?? 'hyper-results';
if (!url || !token || !version || !benchmark || !commit || !file) {
throw new TypeError('required missing params, check parameters are available');
}
const fs = require('fs');
const path = require('path');
const debug = require('debug')('metrics');
const nodeFetch = require('node-fetch');
const fileMetrics = `${file}-${version}-${benchmark}.json`;
// file should be avilable on the root of the project
const filePath = path.join(__dirname, '../', fileMetrics);
debug('file path %o', filePath);
try {
const fileContent = JSON.parse(fs.readFileSync(filePath, 'utf-8'));
debug('body %o', fileContent.results[0]);
nodeFetch(url, {
method: 'POST',
body: JSON.stringify(fileContent.results[0]),
headers: {
Authorization: `Bearer ${token}`,
'content-type': 'application/json',
'x-metrics-version': version,
'x-metrics-source': source,
'x-metrics-benchmark': benchmark,
'x-metrics-commit-hash': commit,
},
})
.then((res) => res.text()) // expecting a json response
.then((json) => {
debug('response %o', json);
});
} catch (error) {
// eslint-disable-next-line no-console
console.error('error on process metrics', error);
process.exit(1);
}

@ -1,9 +1,3 @@
/**
* @prettier
*/
'use strict';
const [, , /* node */ /* file */ tag] = process.argv;
const getStdin = require('get-stdin');