未验证 提交 69a77855 编写于 作者: P Peter Pan 提交者: GitHub

Demo (#737)

* rewrite logger

* feat: add demo

* bump frontend 2.0.0-beta.50

* fix: nodejs 12.x compatibility

* chore: update dependencies
上级 85cb577d
......@@ -16,7 +16,13 @@ module.exports = {
},
overrides: [
{
files: ['packages/cli/**/*', 'packages/mock/**/*', 'packages/server/**/*', 'packages/serverless/**/*'],
files: [
'packages/cli/**/*',
'packages/mock/**/*',
'packages/demo/**/*',
'packages/server/**/*',
'packages/serverless/**/*'
],
extends: [
'plugin:@typescript-eslint/recommended',
'prettier/@typescript-eslint',
......
......@@ -2,7 +2,7 @@
"packages": [
"packages/*"
],
"version": "2.0.0-beta.49",
"version": "2.0.0-beta.50",
"npmClient": "yarn",
"useWorkspaces": true,
"command": {
......
......@@ -38,12 +38,12 @@
"version": "yarn format && git add -A"
},
"devDependencies": {
"@typescript-eslint/eslint-plugin": "3.7.1",
"@typescript-eslint/parser": "3.7.1",
"eslint": "7.5.0",
"@typescript-eslint/eslint-plugin": "3.8.0",
"@typescript-eslint/parser": "3.8.0",
"eslint": "7.6.0",
"eslint-config-prettier": "6.11.0",
"eslint-plugin-prettier": "3.1.4",
"eslint-plugin-react": "7.20.4",
"eslint-plugin-react": "7.20.5",
"eslint-plugin-react-hooks": "4.0.8",
"husky": "4.2.5",
"lerna": "3.22.1",
......
......@@ -4,6 +4,7 @@
/* eslint-disable no-console */
import ora, {Ora} from 'ora';
import ecosystem from '@visualdl/server/ecosystem.config';
import pm2 from 'pm2';
......@@ -27,6 +28,8 @@ const argv = require('yargs')
.nargs('b', 1)
.nargs('backend', 1)
.describe('b', 'Backend API address')
.boolean('demo')
.describe('demo', 'Run in demo mode')
.boolean('open')
.describe('open', 'Open browser when server is ready')
.help('h')
......@@ -92,7 +95,8 @@ pm2.connect(err => {
...app.env,
HOST: host,
PORT: port + '',
BACKEND: argv.backend
BACKEND: argv.backend,
DEMO: argv.demo ? '1' : ''
}
},
err => {
......
{
"name": "@visualdl/cli",
"version": "2.0.0-beta.49",
"version": "2.0.0-beta.50",
"description": "A platform to visualize the deep learning process and result.",
"keywords": [
"visualdl",
......@@ -34,14 +34,14 @@
"dist"
],
"dependencies": {
"@visualdl/server": "2.0.0-beta.49",
"@visualdl/server": "2.0.0-beta.50",
"open": "7.1.0",
"ora": "4.0.5",
"pm2": "4.4.0",
"yargs": "15.4.1"
},
"devDependencies": {
"@types/node": "14.0.26",
"@types/node": "14.0.27",
"@types/yargs": "15.0.5",
"cross-env": "7.0.2",
"ts-node": "8.10.2",
......
......@@ -11,8 +11,7 @@ import {
primaryFocusedColor,
sameBorder,
size,
textLighterColor,
transitionProps
textLighterColor
} from '~/utils/style';
import styled from 'styled-components';
......
{
"name": "@visualdl/core",
"version": "2.0.0-beta.49",
"version": "2.0.0-beta.50",
"title": "VisualDL",
"description": "A platform to visualize the deep learning process and result.",
"keywords": [
......@@ -34,9 +34,9 @@
},
"dependencies": {
"@tippyjs/react": "4.1.0",
"@visualdl/i18n": "2.0.0-beta.49",
"@visualdl/netron": "2.0.0-beta.49",
"@visualdl/wasm": "2.0.0-beta.49",
"@visualdl/i18n": "2.0.0-beta.50",
"@visualdl/netron": "2.0.0-beta.50",
"@visualdl/wasm": "2.0.0-beta.50",
"bignumber.js": "9.0.0",
"d3-format": "1.4.4",
"echarts": "4.8.0",
......@@ -61,38 +61,38 @@
"react-toastify": "6.0.8",
"save-svg-as-png": "1.4.17",
"styled-components": "5.1.1",
"swr": "0.2.3",
"tippy.js": "6.2.5"
"swr": "0.3.0",
"tippy.js": "6.2.6"
},
"devDependencies": {
"@babel/core": "7.10.5",
"@babel/core": "7.11.1",
"@types/d3-format": "1.3.1",
"@types/echarts": "4.6.4",
"@types/enzyme": "3.10.5",
"@types/enzyme-adapter-react-16": "1.0.6",
"@types/file-saver": "2.0.1",
"@types/jest": "26.0.7",
"@types/jest": "26.0.8",
"@types/lodash": "4.14.158",
"@types/mime-types": "2.1.0",
"@types/node": "14.0.26",
"@types/node": "14.0.27",
"@types/nprogress": "0.2.0",
"@types/react": "16.9.43",
"@types/react": "16.9.44",
"@types/react-dom": "16.9.8",
"@types/react-rangeslider": "2.2.3",
"@types/styled-components": "5.1.1",
"@visualdl/mock": "2.0.0-beta.49",
"@types/styled-components": "5.1.2",
"@visualdl/mock": "2.0.0-beta.50",
"babel-plugin-emotion": "10.0.33",
"babel-plugin-styled-components": "1.10.7",
"babel-plugin-styled-components": "1.11.1",
"babel-plugin-typescript-to-proptypes": "1.4.0",
"copy-webpack-plugin": "6.0.3",
"core-js": "3.6.5",
"cross-env": "7.0.2",
"css-loader": "4.0.0",
"css-loader": "4.2.0",
"enhanced-resolve": "4.3.0",
"enzyme": "3.11.0",
"enzyme-adapter-react-16": "1.15.2",
"enzyme-to-json": "3.5.0",
"jest": "26.1.0",
"jest": "26.2.2",
"ora": "4.0.5",
"ts-jest": "26.1.4",
"typescript": "3.9.7",
......
import type {Worker} from './types';
interface Audio {
step: number;
wallTime: number;
}
const worker: Worker = async io => {
const components = await io.getData<string[]>('/components');
if (!components.includes('audio')) {
return;
}
const tagsMap = await io.save<Record<string, string[]>>('/audio/tags');
for (const [run, tags] of Object.entries(tagsMap)) {
for (const tag of tags) {
const list = await io.save<Audio[]>('/audio/list', {run, tag});
for (const [index, audio] of Object.entries(list)) {
await io.saveBinary('/audio/audio', {run, tag, index, ts: audio.wallTime});
}
}
}
};
export default worker;
import type {Worker} from './types';
const worker: Worker = async io => {
await io.save<string[]>('/components');
await io.save<string[]>('/runs');
};
export default worker;
import type {Worker} from './types';
const worker: Worker = async io => {
await io.saveBinary('/graph/graph');
};
export default worker;
import type {Worker} from './types';
const worker: Worker = async io => {
const components = await io.getData<string[]>('/components');
if (!components.includes('embeddings')) {
return;
}
// await io.save<Record<string, string[]>>('/embedding/embedding');
};
export default worker;
import type {Worker} from './types';
const worker: Worker = async io => {
const components = await io.getData<string[]>('/components');
if (!components.includes('histogram')) {
return;
}
const tagsMap = await io.save<Record<string, string[]>>('/histogram/tags');
const q = [];
for (const [run, tags] of Object.entries(tagsMap)) {
for (const tag of tags) {
q.push(io.save('/histogram/list', {run, tag}));
}
}
await Promise.all(q);
};
export default worker;
import type {Worker} from './types';
interface Image {
step: number;
wallTime: number;
}
const worker: Worker = async io => {
const components = await io.getData<string[]>('/components');
if (!components.includes('image')) {
return;
}
const tagsMap = await io.save<Record<string, string[]>>('/image/tags');
for (const [run, tags] of Object.entries(tagsMap)) {
for (const tag of tags) {
const list = await io.save<Image[]>('/image/list', {run, tag});
for (const [index, image] of Object.entries(list)) {
await io.saveBinary('/image/image', {run, tag, index, ts: image.wallTime});
}
}
}
};
export default worker;
/* eslint-disable no-console */
import IO from './io';
import {SIGINT} from 'constants';
import type {Worker} from './types';
import getPort from 'get-port';
import mkdirp from 'mkdirp';
import path from 'path';
import rimraf from 'rimraf';
import {spawn} from 'child_process';
const host = '127.0.0.1';
const publicPath = '/visualdl';
const pages = ['common', 'scalar', 'histogram', 'image', 'audio', 'graph', 'pr-curve', 'high-dimensional'];
const dataDir = path.resolve(__dirname, '../data');
async function start() {
rimraf.sync(dataDir);
const port = await getPort({host});
mkdirp.sync(dataDir);
const io = new IO(`http://${host}:${port}${publicPath}`, dataDir);
const p = spawn(
'visualdl',
[
'--logdir',
'.',
'--model',
'./graph/__model__',
'--host',
host,
'--port',
String(port),
'--public-path',
publicPath
],
{
cwd: path.resolve(__dirname, '../logs'),
stdio: ['ignore', 'pipe', 'pipe']
}
);
p.on('error', err => console.error(err));
const stop = () => {
if (!p.killed) {
p.kill(SIGINT);
}
};
const check = async (data: Buffer) => {
const message = data.toString();
if (message.startsWith('Running VisualDL')) {
p.stdout.off('data', check);
p.stderr.off('data', check);
await Promise.all(
pages.map(
page =>
new Promise((resolve, reject) => {
import(`./${page}`)
.then(data => data.default)
.then((worker: Worker) => worker(io).then(resolve))
.catch(reject);
})
)
);
await io.generateMeta();
stop();
}
};
p.stdout.on('data', check);
p.stderr.on('data', check);
process.on('exit', stop);
}
start();
/* eslint-disable no-console */
import crypto, {BinaryLike} from 'crypto';
import fetch from 'node-fetch';
import {promises as fs} from 'fs';
import mime from 'mime-types';
import mkdirp from 'mkdirp';
import path from 'path';
import querystring from 'querystring';
const apiUrl = '/api';
type Query = Record<string, string | number> | null;
interface WriteOptions {
type?: 'json' | 'buffer';
}
interface MetaData {
uri: string;
query?: Record<string, string | string[]>;
filename: string;
headers: Record<string, string>;
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
interface ResponseData<T = any> {
status: number;
msg?: string;
data: T;
}
function isEmpty(obj: Record<string, unknown> | null | undefined) {
if (obj == null) {
return true;
}
return !Object.keys(obj).length;
}
export default class IO {
public static readonly metaFileName = 'meta.json';
public static readonly dataPath = 'data';
public static readonly hashFunction = 'md4';
protected readonly url: string;
protected readonly dataDir: string;
protected metadata: MetaData[] = [];
constructor(url: string, dataDir: string) {
this.url = url;
this.dataDir = dataDir;
}
public static isSameUri(url1: Pick<MetaData, 'uri' | 'query'>, url2: Pick<MetaData, 'uri' | 'query'>) {
if (url1.uri !== url2.uri) {
return false;
}
if (!isEmpty(url2.query)) {
if (isEmpty(url1.query)) {
return false;
}
for (const [key, value] of Object.entries(url2.query)) {
const existValue = url1.query[key];
if (existValue !== value) {
if (Array.isArray(value) && Array.isArray(existValue)) {
const count = value.reduce<Record<string, number>>((m, v) => {
if (m[v] == null) {
m[v] = 1;
} else {
m[v]++;
}
return m;
}, {});
for (const i of existValue) {
if (count[i] == null) {
return false;
}
count[i]--;
}
return Object.values(count).every(c => c === 0);
}
return false;
}
}
return true;
} else {
return isEmpty(url1.query);
}
}
private generateFilename(content: BinaryLike) {
const hash = crypto.createHash(IO.hashFunction);
hash.update(content);
return hash.digest('hex');
}
private addMeta(meta: MetaData) {
const exist = this.metadata.find(data => IO.isSameUri(data, meta));
if (!exist) {
this.metadata.push(meta);
}
}
protected async write(
filePath: string,
// eslint-disable-next-line @typescript-eslint/no-explicit-any
content: Record<string, any> | Buffer,
contentType: string,
options?: WriteOptions | WriteOptions['type']
) {
const type = 'string' === typeof options ? options : options?.type ?? 'json';
const fileDir = path.join(this.dataDir, IO.dataPath, filePath);
await mkdirp(fileDir);
let fileContent: Buffer;
let extname: string;
if (type === 'buffer') {
extname = mime.extension(contentType) || '';
if (extname) {
extname = '.' + extname;
}
fileContent = content as Buffer;
} else {
extname = '.json';
fileContent = Buffer.from(JSON.stringify(content), 'utf-8');
}
const filename = this.generateFilename(fileContent) + extname;
await fs.writeFile(path.join(fileDir, filename), fileContent, {
encoding: null,
flag: 'w'
});
console.log(`write file ${path.join(filePath, filename)}`);
return filename;
}
fetch(uri: string, query?: Query) {
let url = this.url + apiUrl + uri;
if (!isEmpty(query)) {
url += '?' + querystring.stringify(query);
}
try {
return fetch(url);
} catch (e) {
console.error(e);
}
}
protected async fetchAndWrite<T>(uri: string, query?: Query, options?: WriteOptions | WriteOptions['type']) {
const type = 'string' === typeof options ? options : options?.type ?? 'json';
const response = await this.fetch(uri, query);
if (!response.ok) {
throw new Error('not ok');
}
let content: ResponseData<T> | ArrayBuffer;
if (type === 'buffer') {
content = await response.buffer();
} else {
content = (await response.json()) as ResponseData<T>;
}
const filename = await this.write(uri, content, response.headers.get('content-type'), options);
this.addMeta({
uri,
query: isEmpty(query) ? undefined : querystring.parse(querystring.stringify(query)),
filename,
headers: ['Content-Type', 'Content-Disposition'].reduce((m, t) => {
m[t] = response.headers.get(t) || undefined;
return m;
}, {})
});
return content;
}
async save<T>(uri: string, query?: Query) {
return ((await this.fetchAndWrite<T>(uri, query, 'json')) as ResponseData<T>).data;
}
async saveBinary(uri: string, query?: Query) {
return (await this.fetchAndWrite(uri, query, 'buffer')) as Buffer;
}
async getData<T>(uri: string, query?: Query) {
return ((await (await this.fetch(uri, query)).json()) as ResponseData<T>).data;
}
generateMeta() {
return fs.writeFile(path.join(this.dataDir, IO.metaFileName), JSON.stringify(this.metadata), {
encoding: 'utf-8',
flag: 'w'
});
}
sleep(time: number) {
return new Promise(resolve => {
setTimeout(resolve, time);
});
}
}
import type {Worker} from './types';
const worker: Worker = async io => {
const components = await io.getData<string[]>('/components');
if (!components.includes('pr_curve')) {
return;
}
const tagsMap = await io.save<Record<string, string[]>>('/pr-curve/tags');
for (const [run, tags] of Object.entries(tagsMap)) {
await io.save('/pr-curve/steps', {run});
for (const tag of tags) {
await io.save('/pr-curve/list', {run, tag});
}
}
};
export default worker;
import type {Worker} from './types';
const worker: Worker = async io => {
const components = await io.getData<string[]>('/components');
if (!components.includes('scalar')) {
return;
}
const tagsMap = await io.save<Record<string, string[]>>('/scalar/tags');
const q = [];
for (const [run, tags] of Object.entries(tagsMap)) {
for (const tag of tags) {
q.push(io.save('/scalar/list', {run, tag}));
}
}
await Promise.all(q);
};
export default worker;
import type IO from './io';
export type Worker = (io: IO) => Promise<void>;
import {Request, Response} from 'express';
import IO from './builder/io';
import meta from './data/meta.json';
import path from 'path';
function notFound(res: Response) {
res.status(404).send({
status: 1,
msg: 'Not found'
});
}
export default async (req: Request, res: Response) => {
const method = req.path;
if (!method) {
return notFound(res);
}
const data = meta.find(item =>
IO.isSameUri(item, {uri: method, query: req.query as Record<string, string | string[]>})
);
if (!data) {
return notFound(res);
}
res.sendFile(path.join(__dirname, 'data/data', data.uri, data.filename), {
headers: data.headers
});
};
{
"name": "@visualdl/demo",
"version": "2.0.0-beta.50",
"description": "A platform to visualize the deep learning process and result.",
"keywords": [
"visualdl",
"paddlepaddle",
"visualization",
"deep learning"
],
"homepage": "https://github.com/PaddlePaddle/VisualDL",
"bugs": {
"url": "https://github.com/PaddlePaddle/VisualDL/issues"
},
"license": "Apache-2.0",
"author": "PeterPanZH <littlepanzh@gmail.com> (https://github.com/PeterPanZH)",
"contributors": [
"Niandalu <littlepanzh@gmail.com> (https://github.com/Niandalu)"
],
"repository": {
"type": "git",
"url": "https://github.com/PaddlePaddle/VisualDL.git",
"directory": "frontend/packages/demo"
},
"main": "dist/index.js",
"types": "dist/index.d.ts",
"files": [
"dist"
],
"scripts": {
"build": "rimraf dist && ts-node --script-mode builder/index.ts && tsc && cpy data dist/ --parents",
"test": "echo \"Error: no test specified\" && exit 0; #"
},
"devDependencies": {
"@types/express": "4.17.7",
"@types/mkdirp": "1.0.1",
"@types/node": "14.0.27",
"@types/node-fetch": "2.5.7",
"cpy-cli": "3.1.1",
"get-port": "5.1.1",
"mime-types": "2.1.27",
"mkdirp": "1.0.4",
"node-fetch": "2.6.0",
"rimraf": "3.0.2",
"ts-node": "8.10.2",
"typescript": "3.9.7"
},
"peerDependencies": {
"express": "^4.17.1"
},
"engines": {
"node": ">=10",
"npm": ">=6"
},
"publishConfig": {
"access": "public"
},
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
}
}
{
"compilerOptions": {
"target": "es5",
"lib": [
"esnext",
"esnext.asynciterable",
"dom"
],
"moduleResolution": "node",
"esModuleInterop": true,
"resolveJsonModule": true,
"declaration": true,
"skipLibCheck": true,
"outDir": "dist"
},
"include": [
"index.ts",
"builder"
]
}
{
"name": "@visualdl/i18n",
"version": "2.0.0-beta.49",
"version": "2.0.0-beta.50",
"description": "A platform to visualize the deep learning process and result.",
"keywords": [
"visualdl",
......@@ -38,7 +38,7 @@
"detect-node": "2.0.4",
"hoist-non-react-statics": "3.3.2",
"i18next": "19.6.3",
"i18next-browser-languagedetector": "5.0.0",
"i18next-browser-languagedetector": "5.0.1",
"i18next-fs-backend": "1.0.7",
"i18next-http-backend": "1.0.17",
"i18next-http-middleware": "3.0.2",
......@@ -50,8 +50,8 @@
"devDependencies": {
"@types/express": "4.17.7",
"@types/hoist-non-react-statics": "3.3.1",
"@types/node": "14.0.26",
"@types/react": "16.9.43",
"@types/node": "14.0.27",
"@types/react": "16.9.44",
"@types/react-dom": "16.9.8",
"typescript": "3.9.7"
},
......
{
"name": "@visualdl/mock",
"version": "2.0.0-beta.49",
"version": "2.0.0-beta.50",
"description": "A platform to visualize the deep learning process and result.",
"keywords": [
"visualdl",
......@@ -39,7 +39,7 @@
"devDependencies": {
"@types/express": "4.17.7",
"@types/faker": "4.1.12",
"@types/node": "14.0.26",
"@types/node": "14.0.27",
"cpy-cli": "3.1.1",
"rimraf": "3.0.2",
"typescript": "3.9.7"
......
{
"name": "@visualdl/netron",
"version": "2.0.0-beta.49",
"version": "2.0.0-beta.50",
"description": "A platform to visualize the deep learning process and result.",
"keywords": [
"visualdl",
......@@ -40,16 +40,16 @@
"pako": "1.0.11"
},
"devDependencies": {
"autoprefixer": "9.8.5",
"autoprefixer": "9.8.6",
"copy-webpack-plugin": "6.0.3",
"css-loader": "4.0.0",
"css-loader": "4.2.0",
"html-webpack-plugin": "4.3.0",
"mini-css-extract-plugin": "0.9.0",
"postcss-loader": "3.0.0",
"rimraf": "3.0.2",
"sass": "1.26.10",
"sass-loader": "9.0.2",
"terser": "4.8.0",
"sass-loader": "9.0.3",
"terser": "5.0.0",
"webpack": "4.43.0"
},
"engines": {
......
......@@ -64,17 +64,14 @@ module.exports = {
patterns: commons.map(file => ({
from: path.join(netron, file),
to: file,
transform: content => {
transform: async content => {
try {
// It is important to keep class names and function names after compressing
// Netron relies on Class.constructor.name and Function.prototype.name to show attribute's value
const result = Terser.minify(content.toString(), {
const result = await Terser.minify(content.toString(), {
keep_classnames: true,
keep_fnames: true
});
if (result.error) {
throw result.error;
}
return result.code;
} catch (e) {
console.error(e);
......
......@@ -8,6 +8,7 @@ import path from 'path';
import {setConfig} from 'next/config';
const isDev = process.env.NODE_ENV === 'development';
const isDemo = !!process.env.DEMO;
const host = process.env.HOST || 'localhost';
const port = Number.parseInt(process.env.PORT || '', 10) || 8999;
......@@ -46,6 +47,9 @@ async function start() {
changeOrigin: true
})
);
} else if (isDemo) {
const {default: demo} = await import('@visualdl/demo');
server.use(config.env.API_URL, demo);
} else if (isDev) {
const {default: mock} = await import('@visualdl/mock');
server.use(config.env.API_URL, mock({delay: delay ? () => Math.random() * delay : 0}));
......
{
"name": "@visualdl/server",
"version": "2.0.0-beta.49",
"version": "2.0.0-beta.50",
"description": "A platform to visualize the deep learning process and result.",
"keywords": [
"visualdl",
......@@ -24,7 +24,7 @@
},
"scripts": {
"dev": "cross-env NODE_ENV=development nodemon --watch index.ts --watch webpack.config.js --exec \"ts-node index.ts\"",
"build": "cross-env ts-node --script-mode build.ts",
"build": "ts-node --script-mode build.ts",
"build:webpack": "webpack",
"start": "pm2-runtime ecosystem.config.js",
"test": "echo \"Error: no test specified\" && exit 0; #"
......@@ -37,8 +37,9 @@
"ecosystem.config.d.ts"
],
"dependencies": {
"@visualdl/core": "2.0.0-beta.49",
"@visualdl/i18n": "2.0.0-beta.49",
"@visualdl/core": "2.0.0-beta.50",
"@visualdl/demo": "2.0.0-beta.50",
"@visualdl/i18n": "2.0.0-beta.50",
"express": "4.17.1",
"http-proxy-middleware": "1.0.5",
"next": "9.4.4",
......@@ -46,15 +47,15 @@
},
"devDependencies": {
"@types/express": "4.17.7",
"@types/node": "14.0.26",
"@types/node": "14.0.27",
"@types/shelljs": "0.8.8",
"@types/webpack": "4.41.21",
"@types/webpack-dev-middleware": "3.7.1",
"@visualdl/mock": "2.0.0-beta.49",
"@visualdl/mock": "2.0.0-beta.50",
"cross-env": "7.0.2",
"nodemon": "2.0.4",
"shelljs": "0.8.4",
"ts-loader": "8.0.1",
"ts-loader": "8.0.2",
"ts-node": "8.10.2",
"typescript": "3.9.7",
"webpack": "4.43.0",
......
{
"name": "@visualdl/serverless",
"version": "2.0.0-beta.49",
"version": "2.0.0-beta.50",
"description": "A platform to visualize the deep learning process and result.",
"keywords": [
"visualdl",
......@@ -31,9 +31,9 @@
"test": "echo \"Error: no test specified\" && exit 0; #"
},
"devDependencies": {
"@types/node": "14.0.26",
"@types/node": "14.0.27",
"@types/rimraf": "3.0.0",
"@visualdl/core": "2.0.0-beta.49",
"@visualdl/core": "2.0.0-beta.50",
"cross-env": "7.0.2",
"rimraf": "3.0.2",
"ts-node": "8.10.2",
......
{
"name": "@visualdl/wasm",
"version": "2.0.0-beta.49",
"version": "2.0.0-beta.50",
"title": "VisualDL",
"description": "A platform to visualize the deep learning process and result.",
"keywords": [
......
......@@ -70,19 +70,19 @@
invariant "^2.2.4"
semver "^5.5.0"
"@babel/core@7.10.5", "@babel/core@^7.1.0", "@babel/core@^7.7.5":
version "7.10.5"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.10.5.tgz#1f15e2cca8ad9a1d78a38ddba612f5e7cdbbd330"
integrity sha512-O34LQooYVDXPl7QWCdW9p4NR+QlzOr7xShPPJz8GsuCU3/8ua/wqTr7gmnxXv+WBESiGU/G5s16i6tUvHkNb+w==
"@babel/core@7.11.1":
version "7.11.1"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.11.1.tgz#2c55b604e73a40dc21b0e52650b11c65cf276643"
integrity sha512-XqF7F6FWQdKGGWAzGELL+aCO1p+lRY5Tj5/tbT3St1G8NaH70jhhDIKknIZaDans0OQBG5wRAldROLHSt44BgQ==
dependencies:
"@babel/code-frame" "^7.10.4"
"@babel/generator" "^7.10.5"
"@babel/helper-module-transforms" "^7.10.5"
"@babel/generator" "^7.11.0"
"@babel/helper-module-transforms" "^7.11.0"
"@babel/helpers" "^7.10.4"
"@babel/parser" "^7.10.5"
"@babel/parser" "^7.11.1"
"@babel/template" "^7.10.4"
"@babel/traverse" "^7.10.5"
"@babel/types" "^7.10.5"
"@babel/traverse" "^7.11.0"
"@babel/types" "^7.11.0"
convert-source-map "^1.7.0"
debug "^4.1.0"
gensync "^1.0.0-beta.1"
......@@ -112,6 +112,28 @@
semver "^5.4.1"
source-map "^0.5.0"
"@babel/core@^7.1.0", "@babel/core@^7.7.5":
version "7.10.5"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.10.5.tgz#1f15e2cca8ad9a1d78a38ddba612f5e7cdbbd330"
integrity sha512-O34LQooYVDXPl7QWCdW9p4NR+QlzOr7xShPPJz8GsuCU3/8ua/wqTr7gmnxXv+WBESiGU/G5s16i6tUvHkNb+w==
dependencies:
"@babel/code-frame" "^7.10.4"
"@babel/generator" "^7.10.5"
"@babel/helper-module-transforms" "^7.10.5"
"@babel/helpers" "^7.10.4"
"@babel/parser" "^7.10.5"
"@babel/template" "^7.10.4"
"@babel/traverse" "^7.10.5"
"@babel/types" "^7.10.5"
convert-source-map "^1.7.0"
debug "^4.1.0"
gensync "^1.0.0-beta.1"
json5 "^2.1.2"
lodash "^4.17.19"
resolve "^1.3.2"
semver "^5.4.1"
source-map "^0.5.0"
"@babel/generator@^7.10.5", "@babel/generator@^7.7.7":
version "7.10.5"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.10.5.tgz#1b903554bc8c583ee8d25f1e8969732e6b829a69"
......@@ -121,6 +143,15 @@
jsesc "^2.5.1"
source-map "^0.5.0"
"@babel/generator@^7.11.0":
version "7.11.0"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.0.tgz#4b90c78d8c12825024568cbe83ee6c9af193585c"
integrity sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ==
dependencies:
"@babel/types" "^7.11.0"
jsesc "^2.5.1"
source-map "^0.5.0"
"@babel/helper-annotate-as-pure@^7.0.0", "@babel/helper-annotate-as-pure@^7.10.4":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3"
......@@ -252,6 +283,19 @@
"@babel/types" "^7.10.5"
lodash "^4.17.19"
"@babel/helper-module-transforms@^7.11.0":
version "7.11.0"
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz#b16f250229e47211abdd84b34b64737c2ab2d359"
integrity sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg==
dependencies:
"@babel/helper-module-imports" "^7.10.4"
"@babel/helper-replace-supers" "^7.10.4"
"@babel/helper-simple-access" "^7.10.4"
"@babel/helper-split-export-declaration" "^7.11.0"
"@babel/template" "^7.10.4"
"@babel/types" "^7.11.0"
lodash "^4.17.19"
"@babel/helper-optimise-call-expression@^7.10.4":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673"
......@@ -307,6 +351,13 @@
dependencies:
"@babel/types" "^7.10.4"
"@babel/helper-split-export-declaration@^7.11.0":
version "7.11.0"
resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f"
integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==
dependencies:
"@babel/types" "^7.11.0"
"@babel/helper-validator-identifier@^7.10.4", "@babel/helper-validator-identifier@^7.9.5":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2"
......@@ -345,6 +396,11 @@
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.5.tgz#e7c6bf5a7deff957cec9f04b551e2762909d826b"
integrity sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==
"@babel/parser@^7.11.0", "@babel/parser@^7.11.1":
version "7.11.2"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.2.tgz#0882ab8a455df3065ea2dcb4c753b2460a24bead"
integrity sha512-Vuj/+7vLo6l1Vi7uuO+1ngCDNeVmNbTngcJFKCR/oEtz8tKz0CJxZEGmPt9KcIloZhOZ3Zit6xbpXT2MDlS9Vw==
"@babel/plugin-proposal-async-generator-functions@^7.8.3":
version "7.10.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz#3491cabf2f7c179ab820606cec27fed15e0e8558"
......@@ -1014,6 +1070,21 @@
globals "^11.1.0"
lodash "^4.17.19"
"@babel/traverse@^7.11.0":
version "7.11.0"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.0.tgz#9b996ce1b98f53f7c3e4175115605d56ed07dd24"
integrity sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg==
dependencies:
"@babel/code-frame" "^7.10.4"
"@babel/generator" "^7.11.0"
"@babel/helper-function-name" "^7.10.4"
"@babel/helper-split-export-declaration" "^7.11.0"
"@babel/parser" "^7.11.0"
"@babel/types" "^7.11.0"
debug "^4.1.0"
globals "^11.1.0"
lodash "^4.17.19"
"@babel/types@7.8.3":
version "7.8.3"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.8.3.tgz#5a383dffa5416db1b73dedffd311ffd0788fb31c"
......@@ -1041,6 +1112,15 @@
lodash "^4.17.19"
to-fast-properties "^2.0.0"
"@babel/types@^7.11.0":
version "7.11.0"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.0.tgz#2ae6bf1ba9ae8c3c43824e5861269871b206e90d"
integrity sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==
dependencies:
"@babel/helper-validator-identifier" "^7.10.4"
lodash "^4.17.19"
to-fast-properties "^2.0.0"
"@bcoe/v8-coverage@^0.2.3":
version "0.2.3"
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
......@@ -1228,89 +1308,93 @@
resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd"
integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==
"@jest/console@^26.1.0":
version "26.1.0"
resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.1.0.tgz#f67c89e4f4d04dbcf7b052aed5ab9c74f915b954"
integrity sha512-+0lpTHMd/8pJp+Nd4lyip+/Iyf2dZJvcCqrlkeZQoQid+JlThA4M9vxHtheyrQ99jJTMQam+es4BcvZ5W5cC3A==
"@jest/console@^26.2.0":
version "26.2.0"
resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.2.0.tgz#d18f2659b90930e7ec3925fb7209f1ba2cf463f0"
integrity sha512-mXQfx3nSLwiHm1i7jbu+uvi+vvpVjNGzIQYLCfsat9rapC+MJkS4zBseNrgJE0vU921b3P67bQzhduphjY3Tig==
dependencies:
"@jest/types" "^26.1.0"
"@jest/types" "^26.2.0"
"@types/node" "*"
chalk "^4.0.0"
jest-message-util "^26.1.0"
jest-util "^26.1.0"
jest-message-util "^26.2.0"
jest-util "^26.2.0"
slash "^3.0.0"
"@jest/core@^26.1.0":
version "26.1.0"
resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.1.0.tgz#4580555b522de412a7998b3938c851e4f9da1c18"
integrity sha512-zyizYmDJOOVke4OO/De//aiv8b07OwZzL2cfsvWF3q9YssfpcKfcnZAwDY8f+A76xXSMMYe8i/f/LPocLlByfw==
"@jest/core@^26.2.2":
version "26.2.2"
resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.2.2.tgz#63de01ffce967618003dd7a0164b05c8041b81a9"
integrity sha512-UwA8gNI8aeV4FHGfGAUfO/DHjrFVvlBravF1Tm9Kt6qFE+6YHR47kFhgdepOFpADEKstyO+MVdPvkV6/dyt9sA==
dependencies:
"@jest/console" "^26.1.0"
"@jest/reporters" "^26.1.0"
"@jest/test-result" "^26.1.0"
"@jest/transform" "^26.1.0"
"@jest/types" "^26.1.0"
"@jest/console" "^26.2.0"
"@jest/reporters" "^26.2.2"
"@jest/test-result" "^26.2.0"
"@jest/transform" "^26.2.2"
"@jest/types" "^26.2.0"
"@types/node" "*"
ansi-escapes "^4.2.1"
chalk "^4.0.0"
exit "^0.1.2"
graceful-fs "^4.2.4"
jest-changed-files "^26.1.0"
jest-config "^26.1.0"
jest-haste-map "^26.1.0"
jest-message-util "^26.1.0"
jest-changed-files "^26.2.0"
jest-config "^26.2.2"
jest-haste-map "^26.2.2"
jest-message-util "^26.2.0"
jest-regex-util "^26.0.0"
jest-resolve "^26.1.0"
jest-resolve-dependencies "^26.1.0"
jest-runner "^26.1.0"
jest-runtime "^26.1.0"
jest-snapshot "^26.1.0"
jest-util "^26.1.0"
jest-validate "^26.1.0"
jest-watcher "^26.1.0"
jest-resolve "^26.2.2"
jest-resolve-dependencies "^26.2.2"
jest-runner "^26.2.2"
jest-runtime "^26.2.2"
jest-snapshot "^26.2.2"
jest-util "^26.2.0"
jest-validate "^26.2.0"
jest-watcher "^26.2.0"
micromatch "^4.0.2"
p-each-series "^2.1.0"
rimraf "^3.0.0"
slash "^3.0.0"
strip-ansi "^6.0.0"
"@jest/environment@^26.1.0":
version "26.1.0"
resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.1.0.tgz#378853bcdd1c2443b4555ab908cfbabb851e96da"
integrity sha512-86+DNcGongbX7ai/KE/S3/NcUVZfrwvFzOOWX/W+OOTvTds7j07LtC+MgGydH5c8Ri3uIrvdmVgd1xFD5zt/xA==
"@jest/environment@^26.2.0":
version "26.2.0"
resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.2.0.tgz#f6faee1630fcc2fad208953164bccb31dbe0e45f"
integrity sha512-oCgp9NmEiJ5rbq9VI/v/yYLDpladAAVvFxZgNsnJxOETuzPZ0ZcKKHYjKYwCtPOP1WCrM5nmyuOhMStXFGHn+g==
dependencies:
"@jest/fake-timers" "^26.1.0"
"@jest/types" "^26.1.0"
jest-mock "^26.1.0"
"@jest/fake-timers" "^26.2.0"
"@jest/types" "^26.2.0"
"@types/node" "*"
jest-mock "^26.2.0"
"@jest/fake-timers@^26.1.0":
version "26.1.0"
resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.1.0.tgz#9a76b7a94c351cdbc0ad53e5a748789f819a65fe"
integrity sha512-Y5F3kBVWxhau3TJ825iuWy++BAuQzK/xEa+wD9vDH3RytW9f2DbMVodfUQC54rZDX3POqdxCgcKdgcOL0rYUpA==
"@jest/fake-timers@^26.2.0":
version "26.2.0"
resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.2.0.tgz#b485c57dc4c74d61406a339807a9af4bac74b75a"
integrity sha512-45Gfe7YzYTKqTayBrEdAF0qYyAsNRBzfkV0IyVUm3cx7AsCWlnjilBM4T40w7IXT5VspOgMPikQlV0M6gHwy/g==
dependencies:
"@jest/types" "^26.1.0"
"@jest/types" "^26.2.0"
"@sinonjs/fake-timers" "^6.0.1"
jest-message-util "^26.1.0"
jest-mock "^26.1.0"
jest-util "^26.1.0"
"@types/node" "*"
jest-message-util "^26.2.0"
jest-mock "^26.2.0"
jest-util "^26.2.0"
"@jest/globals@^26.1.0":
version "26.1.0"
resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.1.0.tgz#6cc5d7cbb79b76b120f2403d7d755693cf063ab1"
integrity sha512-MKiHPNaT+ZoG85oMaYUmGHEqu98y3WO2yeIDJrs2sJqHhYOy3Z6F7F/luzFomRQ8SQ1wEkmahFAz2291Iv8EAw==
"@jest/globals@^26.2.0":
version "26.2.0"
resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.2.0.tgz#ad78f1104f250c1a4bf5184a2ba51facc59b23f6"
integrity sha512-Hoc6ScEIPaym7RNytIL2ILSUWIGKlwEv+JNFof9dGYOdvPjb2evEURSslvCMkNuNg1ECEClTE8PH7ULlMJntYA==
dependencies:
"@jest/environment" "^26.1.0"
"@jest/types" "^26.1.0"
expect "^26.1.0"
"@jest/environment" "^26.2.0"
"@jest/types" "^26.2.0"
expect "^26.2.0"
"@jest/reporters@^26.1.0":
version "26.1.0"
resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.1.0.tgz#08952e90c90282e14ff49e927bdf1873617dae78"
integrity sha512-SVAysur9FOIojJbF4wLP0TybmqwDkdnFxHSPzHMMIYyBtldCW9gG+Q5xWjpMFyErDiwlRuPyMSJSU64A67Pazg==
"@jest/reporters@^26.2.2":
version "26.2.2"
resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.2.2.tgz#5a8632ab410f4fc57782bc05dcf115e91818e869"
integrity sha512-7854GPbdFTAorWVh+RNHyPO9waRIN6TcvCezKVxI1khvFq9YjINTW7J3WU+tbR038Ynn6WjYred6vtT0YmIWVQ==
dependencies:
"@bcoe/v8-coverage" "^0.2.3"
"@jest/console" "^26.1.0"
"@jest/test-result" "^26.1.0"
"@jest/transform" "^26.1.0"
"@jest/types" "^26.1.0"
"@jest/console" "^26.2.0"
"@jest/test-result" "^26.2.0"
"@jest/transform" "^26.2.2"
"@jest/types" "^26.2.0"
chalk "^4.0.0"
collect-v8-coverage "^1.0.0"
exit "^0.1.2"
......@@ -1321,10 +1405,10 @@
istanbul-lib-report "^3.0.0"
istanbul-lib-source-maps "^4.0.0"
istanbul-reports "^3.0.2"
jest-haste-map "^26.1.0"
jest-resolve "^26.1.0"
jest-util "^26.1.0"
jest-worker "^26.1.0"
jest-haste-map "^26.2.2"
jest-resolve "^26.2.2"
jest-util "^26.2.0"
jest-worker "^26.2.1"
slash "^3.0.0"
source-map "^0.6.0"
string-length "^4.0.1"
......@@ -1342,42 +1426,42 @@
graceful-fs "^4.2.4"
source-map "^0.6.0"
"@jest/test-result@^26.1.0":
version "26.1.0"
resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.1.0.tgz#a93fa15b21ad3c7ceb21c2b4c35be2e407d8e971"
integrity sha512-Xz44mhXph93EYMA8aYDz+75mFbarTV/d/x0yMdI3tfSRs/vh4CqSxgzVmCps1fPkHDCtn0tU8IH9iCKgGeGpfw==
"@jest/test-result@^26.2.0":
version "26.2.0"
resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.2.0.tgz#51c9b165c8851cfcf7a3466019114785e154f76b"
integrity sha512-kgPlmcVafpmfyQEu36HClK+CWI6wIaAWDHNxfQtGuKsgoa2uQAYdlxjMDBEa3CvI40+2U3v36gQF6oZBkoKatw==
dependencies:
"@jest/console" "^26.1.0"
"@jest/types" "^26.1.0"
"@jest/console" "^26.2.0"
"@jest/types" "^26.2.0"
"@types/istanbul-lib-coverage" "^2.0.0"
collect-v8-coverage "^1.0.0"
"@jest/test-sequencer@^26.1.0":
version "26.1.0"
resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.1.0.tgz#41a6fc8b850c3f33f48288ea9ea517c047e7f14e"
integrity sha512-Z/hcK+rTq56E6sBwMoQhSRDVjqrGtj1y14e2bIgcowARaIE1SgOanwx6gvY4Q9gTKMoZQXbXvptji+q5GYxa6Q==
"@jest/test-sequencer@^26.2.2":
version "26.2.2"
resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.2.2.tgz#5e8091f2e6c61fdf242af566cb820a4eadc6c4af"
integrity sha512-SliZWon5LNqV/lVXkeowSU6L8++FGOu3f43T01L1Gv6wnFDP00ER0utV9jyK9dVNdXqfMNCN66sfcyar/o7BNw==
dependencies:
"@jest/test-result" "^26.1.0"
"@jest/test-result" "^26.2.0"
graceful-fs "^4.2.4"
jest-haste-map "^26.1.0"
jest-runner "^26.1.0"
jest-runtime "^26.1.0"
jest-haste-map "^26.2.2"
jest-runner "^26.2.2"
jest-runtime "^26.2.2"
"@jest/transform@^26.1.0":
version "26.1.0"
resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.1.0.tgz#697f48898c2a2787c9b4cb71d09d7e617464e509"
integrity sha512-ICPm6sUXmZJieq45ix28k0s+d/z2E8CHDsq+WwtWI6kW8m7I8kPqarSEcUN86entHQ570ZBRci5OWaKL0wlAWw==
"@jest/transform@^26.2.2":
version "26.2.2"
resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.2.2.tgz#86c005c8d5d749ac54d8df53ea58675fffe7a97e"
integrity sha512-c1snhvi5wRVre1XyoO3Eef5SEWpuBCH/cEbntBUd9tI5sNYiBDmO0My/lc5IuuGYKp/HFIHV1eZpSx5yjdkhKw==
dependencies:
"@babel/core" "^7.1.0"
"@jest/types" "^26.1.0"
"@jest/types" "^26.2.0"
babel-plugin-istanbul "^6.0.0"
chalk "^4.0.0"
convert-source-map "^1.4.0"
fast-json-stable-stringify "^2.0.0"
graceful-fs "^4.2.4"
jest-haste-map "^26.1.0"
jest-haste-map "^26.2.2"
jest-regex-util "^26.0.0"
jest-util "^26.1.0"
jest-util "^26.2.0"
micromatch "^4.0.2"
pirates "^4.0.1"
slash "^3.0.0"
......@@ -1404,6 +1488,17 @@
"@types/yargs" "^15.0.0"
chalk "^4.0.0"
"@jest/types@^26.2.0":
version "26.2.0"
resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.2.0.tgz#b28ca1fb517a4eb48c0addea7fcd9edc4ab45721"
integrity sha512-lvm3rJvctxd7+wxKSxxbzpDbr4FXDLaC57WEKdUIZ2cjTYuxYSc0zlyD7Z4Uqr5VdKxRUrtwIkiqBuvgf8uKJA==
dependencies:
"@types/istanbul-lib-coverage" "^2.0.0"
"@types/istanbul-reports" "^1.1.1"
"@types/node" "*"
"@types/yargs" "^15.0.0"
chalk "^4.0.0"
"@lerna/add@3.21.0":
version "3.21.0"
resolved "https://registry.yarnpkg.com/@lerna/add/-/add-3.21.0.tgz#27007bde71cc7b0a2969ab3c2f0ae41578b4577b"
......@@ -2572,10 +2667,10 @@
"@types/istanbul-lib-coverage" "*"
"@types/istanbul-lib-report" "*"
"@types/jest@26.0.7":
version "26.0.7"
resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.7.tgz#495cb1d1818c1699dbc3b8b046baf1c86ef5e324"
integrity sha512-+x0077/LoN6MjqBcVOe1y9dpryWnfDZ+Xfo3EqGeBcfPRJlQp3Lw62RvNlWxuGv7kOEwlHriAa54updi3Jvvwg==
"@types/jest@26.0.8":
version "26.0.8"
resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.8.tgz#f5c5559cf25911ce227f7ce30f1f160f24966369"
integrity sha512-eo3VX9jGASSuv680D4VQ89UmuLZneNxv2MCZjfwlInav05zXVJTzfc//lavdV0GPwSxsXJTy2jALscB7Acqg0g==
dependencies:
jest-diff "^25.2.1"
pretty-format "^25.2.1"
......@@ -2617,7 +2712,27 @@
resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.0.tgz#69a23a3ad29caf0097f06eda59b361ee2f0639f6"
integrity sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY=
"@types/node@*", "@types/node@14.0.26", "@types/node@>= 8":
"@types/mkdirp@1.0.1":
version "1.0.1"
resolved "https://registry.yarnpkg.com/@types/mkdirp/-/mkdirp-1.0.1.tgz#0930b948914a78587de35458b86c907b6e98bbf6"
integrity sha512-HkGSK7CGAXncr8Qn/0VqNtExEE+PHMWb+qlR1faHMao7ng6P3tAaoWWBMdva0gL5h4zprjIO89GJOLXsMcDm1Q==
dependencies:
"@types/node" "*"
"@types/node-fetch@2.5.7":
version "2.5.7"
resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.7.tgz#20a2afffa882ab04d44ca786449a276f9f6bbf3c"
integrity sha512-o2WVNf5UhWRkxlf6eq+jMZDu7kjgpgJfl4xVNlvryc95O/6F2ld8ztKX+qu+Rjyet93WAWm5LjeX9H5FGkODvw==
dependencies:
"@types/node" "*"
form-data "^3.0.0"
"@types/node@*", "@types/node@14.0.27":
version "14.0.27"
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.27.tgz#a151873af5a5e851b51b3b065c9e63390a9e0eb1"
integrity sha512-kVrqXhbclHNHGu9ztnAwSncIgJv/FaxmzXJvGXNdcCpV1b8u1/Mi6z6m0vwy0LzKeXFTPLH0NzwmoJ3fNCIq0g==
"@types/node@>= 8":
version "14.0.26"
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.26.tgz#22a3b8a46510da8944b67bfc27df02c34a35331c"
integrity sha512-W+fpe5s91FBGE0pEa0lnqGLL4USgpLgs4nokw16SrBBco/gQxuua7KnArSEOd5iaMqbbSHV10vUDkJYJJqpXKA==
......@@ -2683,7 +2798,7 @@
dependencies:
"@types/react" "*"
"@types/react@*", "@types/react@16.9.43":
"@types/react@*":
version "16.9.43"
resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.43.tgz#c287f23f6189666ee3bebc2eb8d0f84bcb6cdb6b"
integrity sha512-PxshAFcnJqIWYpJbLPriClH53Z2WlJcVZE+NP2etUtWQs2s7yIMj3/LDKZT/5CHJ/F62iyjVCDu2H3jHEXIxSg==
......@@ -2691,6 +2806,14 @@
"@types/prop-types" "*"
csstype "^2.2.0"
"@types/react@16.9.44":
version "16.9.44"
resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.44.tgz#da84b179c031aef67dc92c33bd3401f1da2fa3bc"
integrity sha512-BtLoJrXdW8DVZauKP+bY4Kmiq7ubcJq+H/aCpRfvPF7RAT3RwR73Sg8szdc2YasbAlWBDrQ6Q+AFM0KwtQY+WQ==
dependencies:
"@types/prop-types" "*"
csstype "^3.0.2"
"@types/rimraf@3.0.0":
version "3.0.0"
resolved "https://registry.yarnpkg.com/@types/rimraf/-/rimraf-3.0.0.tgz#b9d03f090ece263671898d57bb7bb007023ac19f"
......@@ -2732,15 +2855,15 @@
resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e"
integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==
"@types/styled-components@5.1.1":
version "5.1.1"
resolved "https://registry.yarnpkg.com/@types/styled-components/-/styled-components-5.1.1.tgz#17c3b3a299aa38254189e04a72a8ee009a22e42d"
integrity sha512-fIjKvDU1LJExBZWEQilHqzfpOK4KUwBsj5zC79lxa94ekz8oDQSBNcayMACBImxIuevF+NbBGL9O/2CQ67Zhig==
"@types/styled-components@5.1.2":
version "5.1.2"
resolved "https://registry.yarnpkg.com/@types/styled-components/-/styled-components-5.1.2.tgz#652af475b4af917b355ea1c3068acae63d46455f"
integrity sha512-HNocYLfrsnNNm8NTS/W53OERSjRA8dx5Bn6wBd2rXXwt4Z3s+oqvY6/PbVt3e6sgtzI63GX//WiWiRhWur08qQ==
dependencies:
"@types/hoist-non-react-statics" "*"
"@types/react" "*"
"@types/react-native" "*"
csstype "^2.2.0"
csstype "^3.0.2"
"@types/tapable@*", "@types/tapable@^1.0.5":
version "1.0.6"
......@@ -2802,52 +2925,52 @@
resolved "https://registry.yarnpkg.com/@types/zrender/-/zrender-4.0.0.tgz#a6806f12ec4eccaaebd9b0d816f049aca6188fbd"
integrity sha512-s89GOIeKFiod2KSqHkfd2rzx+T2DVu7ihZCBEBnhFrzvQPUmzvDSBot9Fi1DfMQm9Odg+rTqoMGC38RvrwJK2w==
"@typescript-eslint/eslint-plugin@3.7.1":
version "3.7.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.7.1.tgz#d144c49a9a0ffe8dd704bb179c243df76c111bc9"
integrity sha512-3DB9JDYkMrc8Au00rGFiJLK2Ja9CoMP6Ut0sHsXp3ZtSugjNxvSSHTnKLfo4o+QmjYBJqEznDqsG1zj4F2xnsg==
"@typescript-eslint/eslint-plugin@3.8.0":
version "3.8.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.8.0.tgz#f82947bcdd9a4e42be7ad80dfd61f1dc411dd1df"
integrity sha512-lFb4VCDleFSR+eo4Ew+HvrJ37ZH1Y9ZyE+qyP7EiwBpcCVxwmUc5PAqhShCQ8N8U5vqYydm74nss+a0wrrCErw==
dependencies:
"@typescript-eslint/experimental-utils" "3.7.1"
"@typescript-eslint/experimental-utils" "3.8.0"
debug "^4.1.1"
functional-red-black-tree "^1.0.1"
regexpp "^3.0.0"
semver "^7.3.2"
tsutils "^3.17.1"
"@typescript-eslint/experimental-utils@3.7.1":
version "3.7.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.7.1.tgz#ab036caaed4c870d22531d41f9352f3147364d61"
integrity sha512-TqE97pv7HrqWcGJbLbZt1v59tcqsSVpWTOf1AqrWK7n8nok2sGgVtYRuGXeNeLw3wXlLEbY1MKP3saB2HsO/Ng==
"@typescript-eslint/experimental-utils@3.8.0":
version "3.8.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.8.0.tgz#ac1f7c88322dcfb7635ece6f0441516dd951099a"
integrity sha512-o8T1blo1lAJE0QDsW7nSyvZHbiDzQDjINJKyB44Z3sSL39qBy5L10ScI/XwDtaiunoyKGLiY9bzRk4YjsUZl8w==
dependencies:
"@types/json-schema" "^7.0.3"
"@typescript-eslint/types" "3.7.1"
"@typescript-eslint/typescript-estree" "3.7.1"
"@typescript-eslint/types" "3.8.0"
"@typescript-eslint/typescript-estree" "3.8.0"
eslint-scope "^5.0.0"
eslint-utils "^2.0.0"
"@typescript-eslint/parser@3.7.1":
version "3.7.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-3.7.1.tgz#5d9ccecb116d12d9c6073e9861c57c9b1aa88128"
integrity sha512-W4QV/gXvfIsccN8225784LNOorcm7ch68Fi3V4Wg7gmkWSQRKevO4RrRqWo6N/Z/myK1QAiGgeaXN57m+R/8iQ==
"@typescript-eslint/parser@3.8.0":
version "3.8.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-3.8.0.tgz#8e1dcd404299bf79492409c81c415fa95a7c622b"
integrity sha512-u5vjOBaCsnMVQOvkKCXAmmOhyyMmFFf5dbkM3TIbg3MZ2pyv5peE4gj81UAbTHwTOXEwf7eCQTUMKrDl/+qGnA==
dependencies:
"@types/eslint-visitor-keys" "^1.0.0"
"@typescript-eslint/experimental-utils" "3.7.1"
"@typescript-eslint/types" "3.7.1"
"@typescript-eslint/typescript-estree" "3.7.1"
"@typescript-eslint/experimental-utils" "3.8.0"
"@typescript-eslint/types" "3.8.0"
"@typescript-eslint/typescript-estree" "3.8.0"
eslint-visitor-keys "^1.1.0"
"@typescript-eslint/types@3.7.1":
version "3.7.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.7.1.tgz#90375606b2fd73c1224fe9e397ee151e28fa1e0c"
integrity sha512-PZe8twm5Z4b61jt7GAQDor6KiMhgPgf4XmUb9zdrwTbgtC/Sj29gXP1dws9yEn4+aJeyXrjsD9XN7AWFhmnUfg==
"@typescript-eslint/types@3.8.0":
version "3.8.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.8.0.tgz#58581dd863f86e0cd23353d94362bb90b4bea796"
integrity sha512-8kROmEQkv6ss9kdQ44vCN1dTrgu4Qxrd2kXr10kz2NP5T8/7JnEfYNxCpPkArbLIhhkGLZV3aVMplH1RXQRF7Q==
"@typescript-eslint/typescript-estree@3.7.1":
version "3.7.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.7.1.tgz#ce1ffbd0fa53f34d4ce851a7a364e392432f6eb3"
integrity sha512-m97vNZkI08dunYOr2lVZOHoyfpqRs0KDpd6qkGaIcLGhQ2WPtgHOd/eVbsJZ0VYCQvupKrObAGTOvk3tfpybYA==
"@typescript-eslint/typescript-estree@3.8.0":
version "3.8.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.8.0.tgz#0606d19f629f813dbdd5a34c7a1e895d6191cac6"
integrity sha512-MTv9nPDhlKfclwnplRNDL44mP2SY96YmPGxmMbMy6x12I+pERcxpIUht7DXZaj4mOKKtet53wYYXU0ABaiXrLw==
dependencies:
"@typescript-eslint/types" "3.7.1"
"@typescript-eslint/visitor-keys" "3.7.1"
"@typescript-eslint/types" "3.8.0"
"@typescript-eslint/visitor-keys" "3.8.0"
debug "^4.1.1"
glob "^7.1.6"
is-glob "^4.0.1"
......@@ -2855,10 +2978,10 @@
semver "^7.3.2"
tsutils "^3.17.1"
"@typescript-eslint/visitor-keys@3.7.1":
version "3.7.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.7.1.tgz#b90191e74efdee656be8c5a30f428ed16dda46d1"
integrity sha512-xn22sQbEya+Utj2IqJHGLA3i1jDzR43RzWupxojbSWnj3nnPLavaQmWe5utw03CwYao3r00qzXfgJMGNkrzrAA==
"@typescript-eslint/visitor-keys@3.8.0":
version "3.8.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.8.0.tgz#ad35110249fb3fc30a36bfcbfeea93e710cfaab1"
integrity sha512-gfqQWyVPpT9NpLREXNR820AYwgz+Kr1GuF3nf1wxpHD6hdxI62tq03ToomFnDxY0m3pUB39IF7sil7D5TQexLA==
dependencies:
eslint-visitor-keys "^1.1.0"
......@@ -3145,7 +3268,7 @@ ajv-keywords@^3.1.0, ajv-keywords@^3.4.1:
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.0, ajv@^6.12.2, ajv@^6.5.5:
ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.0, ajv@^6.12.2, ajv@^6.12.3:
version "6.12.3"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706"
integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==
......@@ -3537,14 +3660,14 @@ autobind-decorator@^1.3.4:
resolved "https://registry.yarnpkg.com/autobind-decorator/-/autobind-decorator-1.4.3.tgz#4c96ffa77b10622ede24f110f5dbbf56691417d1"
integrity sha1-TJb/p3sQYi7eJPEQ9du/VmkUF9E=
autoprefixer@9.8.5:
version "9.8.5"
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.5.tgz#2c225de229ddafe1d1424c02791d0c3e10ccccaa"
integrity sha512-C2p5KkumJlsTHoNv9w31NrBRgXhf6eCMteJuHZi2xhkgC+5Vm40MEtCKPhc0qdgAOhox0YPy1SQHTAky05UoKg==
autoprefixer@9.8.6:
version "9.8.6"
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.6.tgz#3b73594ca1bf9266320c5acf1588d74dea74210f"
integrity sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==
dependencies:
browserslist "^4.12.0"
caniuse-lite "^1.0.30001097"
colorette "^1.2.0"
caniuse-lite "^1.0.30001109"
colorette "^1.2.1"
normalize-range "^0.1.2"
num2fraction "^1.2.2"
postcss "^7.0.32"
......@@ -3576,16 +3699,16 @@ babel-code-frame@^6.22.0:
esutils "^2.0.2"
js-tokens "^3.0.2"
babel-jest@^26.1.0:
version "26.1.0"
resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.1.0.tgz#b20751185fc7569a0f135730584044d1cb934328"
integrity sha512-Nkqgtfe7j6PxLO6TnCQQlkMm8wdTdnIF8xrdpooHCuD5hXRzVEPbPneTJKknH5Dsv3L8ip9unHDAp48YQ54Dkg==
babel-jest@^26.2.2:
version "26.2.2"
resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.2.2.tgz#70f618f2d7016ed71b232241199308985462f812"
integrity sha512-JmLuePHgA+DSOdOL8lPxCgD2LhPPm+rdw1vnxR73PpIrnmKCS2/aBhtkAcxQWuUcW2hBrH8MJ3LKXE7aWpNZyA==
dependencies:
"@jest/transform" "^26.1.0"
"@jest/types" "^26.1.0"
"@jest/transform" "^26.2.2"
"@jest/types" "^26.2.0"
"@types/babel__core" "^7.1.7"
babel-plugin-istanbul "^6.0.0"
babel-preset-jest "^26.1.0"
babel-preset-jest "^26.2.0"
chalk "^4.0.0"
graceful-fs "^4.2.4"
slash "^3.0.0"
......@@ -3624,10 +3747,10 @@ babel-plugin-istanbul@^6.0.0:
istanbul-lib-instrument "^4.0.0"
test-exclude "^6.0.0"
babel-plugin-jest-hoist@^26.1.0:
version "26.1.0"
resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.1.0.tgz#c6a774da08247a28285620a64dfadbd05dd5233a"
integrity sha512-qhqLVkkSlqmC83bdMhM8WW4Z9tB+JkjqAqlbbohS9sJLT5Ha2vfzuKqg5yenXrAjOPG2YC0WiXdH3a9PvB+YYw==
babel-plugin-jest-hoist@^26.2.0:
version "26.2.0"
resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.2.0.tgz#bdd0011df0d3d513e5e95f76bd53b51147aca2dd"
integrity sha512-B/hVMRv8Nh1sQ1a3EY8I0n4Y1Wty3NrR5ebOyVT302op+DOAau+xNEImGMsUWOC3++ZlMooCytKz+NgN8aKGbA==
dependencies:
"@babel/template" "^7.3.3"
"@babel/types" "^7.3.3"
......@@ -3643,7 +3766,17 @@ babel-plugin-macros@^2.0.0:
cosmiconfig "^6.0.0"
resolve "^1.12.0"
babel-plugin-styled-components@1.10.7, "babel-plugin-styled-components@>= 1":
babel-plugin-styled-components@1.11.1:
version "1.11.1"
resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-1.11.1.tgz#5296a9e557d736c3186be079fff27c6665d63d76"
integrity sha512-YwrInHyKUk1PU3avIRdiLyCpM++18Rs1NgyMXEAQC33rIXs/vro0A+stf4sT0Gf22Got+xRWB8Cm0tw+qkRzBA==
dependencies:
"@babel/helper-annotate-as-pure" "^7.0.0"
"@babel/helper-module-imports" "^7.0.0"
babel-plugin-syntax-jsx "^6.18.0"
lodash "^4.17.11"
"babel-plugin-styled-components@>= 1":
version "1.10.7"
resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-1.10.7.tgz#3494e77914e9989b33cc2d7b3b29527a949d635c"
integrity sha512-MBMHGcIA22996n9hZRf/UJLVVgkEOITuR2SvjHLb5dSTUyR4ZRGn+ngITapes36FI3WLxZHfRhkA1ffHxihOrg==
......@@ -3698,12 +3831,12 @@ babel-preset-current-node-syntax@^0.1.2:
"@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
"@babel/plugin-syntax-optional-chaining" "^7.8.3"
babel-preset-jest@^26.1.0:
version "26.1.0"
resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.1.0.tgz#612f714e5b457394acfd863793c564cbcdb7d1c1"
integrity sha512-na9qCqFksknlEj5iSdw1ehMVR06LCCTkZLGKeEtxDDdhg8xpUF09m29Kvh1pRbZ07h7AQ5ttLYUwpXL4tO6w7w==
babel-preset-jest@^26.2.0:
version "26.2.0"
resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.2.0.tgz#f198201a4e543a43eb40bc481e19736e095fd3e0"
integrity sha512-R1k8kdP3R9phYQugXeNnK/nvCGlBzG4m3EoIIukC80GXb6wCv2XiwPhK6K9MAkQcMszWBYvl2Wm+yigyXFQqXg==
dependencies:
babel-plugin-jest-hoist "^26.1.0"
babel-plugin-jest-hoist "^26.2.0"
babel-preset-current-node-syntax "^0.1.2"
balanced-match@^1.0.0:
......@@ -4227,11 +4360,16 @@ caniuse-api@^3.0.0:
lodash.memoize "^4.1.2"
lodash.uniq "^4.5.0"
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001043, caniuse-lite@^1.0.30001093, caniuse-lite@^1.0.30001097:
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001043, caniuse-lite@^1.0.30001093:
version "1.0.30001107"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001107.tgz#809360df7a5b3458f627aa46b0f6ed6d5239da9a"
integrity sha512-86rCH+G8onCmdN4VZzJet5uPELII59cUzDphko3thQFgAQG1RNa+sVLDoALIhRYmflo5iSIzWY3vu1XTWtNMQQ==
caniuse-lite@^1.0.30001109:
version "1.0.30001111"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001111.tgz#dd0ce822c70eb6c7c068e4a55c22e19ec1501298"
integrity sha512-xnDje2wchd/8mlJu8sXvWxOGvMgv+uT3iZ3bkIAynKOzToCssWCmkz/ZIkQBs/2pUB4uwnJKVORWQ31UkbVjOg==
capture-exit@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4"
......@@ -4566,7 +4704,7 @@ color@^3.0.0:
color-convert "^1.9.1"
color-string "^1.5.2"
colorette@^1.2.0:
colorette@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b"
integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==
......@@ -4579,7 +4717,7 @@ columnify@^1.5.4:
strip-ansi "^3.0.0"
wcwidth "^1.0.0"
combined-stream@^1.0.6, combined-stream@~1.0.6:
combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6:
version "1.0.8"
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
......@@ -5058,10 +5196,10 @@ css-loader@3.5.3:
schema-utils "^2.6.6"
semver "^6.3.0"
css-loader@4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-4.0.0.tgz#814434d4e1e2d5f430c70e85e78268db7f3cced1"
integrity sha512-/7d5slKnmY2S39FNifJ7JQ8MhcMM/rDIjAZ2Sc/Z8lnOWOmc10hijg28ovBtljY364pQaF01O2nj5AIBDnJ9vQ==
css-loader@4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-4.2.0.tgz#b57efb92ac8f0cd85bf92d89df9634ef1f51b8bf"
integrity sha512-ko7a9b0iFpWtk9eSI/C8IICvZeGtYnjxYjw45rJprokXj/+kBd/siX4vAIBq9Uij8Jubc4jL1EvSnTjCEwaHSw==
dependencies:
camelcase "^6.0.0"
cssesc "^3.0.0"
......@@ -5254,6 +5392,11 @@ csstype@^2.2.0, csstype@^2.5.7, csstype@^2.6.7:
resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.11.tgz#452f4d024149ecf260a852b025e36562a253ffc5"
integrity sha512-l8YyEC9NBkSm783PFTvh0FmJy7s5pFKrDp49ZL7zBGX3fWkO+N4EEyan1qqp8cwPLDcD0OSdyY6hAMoxp34JFw==
csstype@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.2.tgz#ee5ff8f208c8cd613b389f7b222c9801ca62b3f7"
integrity sha512-ofovWglpqoqbfLNOTBNZLSbMuGrblAf1efvvArGKOZMBrIoJeu5UsAipQolkijtyQx5MtAzT/J9IHj/CEY1mJw==
currently-unhandled@^0.4.1:
version "0.4.1"
resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
......@@ -6033,6 +6176,11 @@ emitter-listener@^1.1.1:
dependencies:
shimmer "^1.2.0"
emittery@^0.7.1:
version "0.7.1"
resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.1.tgz#c02375a927a40948c0345cc903072597f5270451"
integrity sha512-d34LN4L6h18Bzz9xpoku2nPwKxCPlPMr3EEKTkoEBi+1/+b0lcRkRJ1UVyyZaKNeqGR3swcGl6s390DNO4YVgQ==
emoji-regex@^7.0.1:
version "7.0.3"
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
......@@ -6330,10 +6478,10 @@ eslint-plugin-react-hooks@4.0.8:
resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.0.8.tgz#a9b1e3d57475ccd18276882eff3d6cba00da7a56"
integrity sha512-6SSb5AiMCPd8FDJrzah+Z4F44P2CdOaK026cXFV+o/xSRzfOiV1FNFeLl2z6xm3yqWOQEZ5OfVgiec90qV2xrQ==
eslint-plugin-react@7.20.4:
version "7.20.4"
resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.20.4.tgz#c14d2631221ec694ddd84557d7152f44b66e4aa0"
integrity sha512-y4DOQ0LrzuDQFEAnYFGjJMRHQQqfTco02qiWI00eGQYikHTzC15S5aRHGWSffnThv8sBpsmFBLky3K5keniAJg==
eslint-plugin-react@7.20.5:
version "7.20.5"
resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.20.5.tgz#29480f3071f64a04b2c3d99d9b460ce0f76fb857"
integrity sha512-ajbJfHuFnpVNJjhyrfq+pH1C0gLc2y94OiCbAXT5O0J0YCKaFEHDV8+3+mDOr+w8WguRX+vSs1bM2BDG0VLvCw==
dependencies:
array-includes "^3.1.1"
array.prototype.flatmap "^1.2.3"
......@@ -6375,10 +6523,10 @@ eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0:
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"
integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
eslint@7.5.0:
version "7.5.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.5.0.tgz#9ecbfad62216d223b82ac9ffea7ef3444671d135"
integrity sha512-vlUP10xse9sWt9SGRtcr1LAC67BENcQMFeV+w5EvLEoFe3xJ8cF1Skd0msziRx/VMC+72B4DxreCE+OR12OA6Q==
eslint@7.6.0:
version "7.6.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.6.0.tgz#522d67cfaea09724d96949c70e7a0550614d64d6"
integrity sha512-QlAManNtqr7sozWm5TF4wIH9gmUm2hE3vNRUvyoYAa4y1l5/jxD/PQStEjBMQtCqZmSep8UxrcecI60hOpe61w==
dependencies:
"@babel/code-frame" "^7.0.0"
ajv "^6.10.0"
......@@ -6566,16 +6714,16 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2:
dependencies:
homedir-polyfill "^1.0.1"
expect@^26.1.0:
version "26.1.0"
resolved "https://registry.yarnpkg.com/expect/-/expect-26.1.0.tgz#8c62e31d0f8d5a8ebb186ee81473d15dd2fbf7c8"
integrity sha512-QbH4LZXDsno9AACrN9eM0zfnby9G+OsdNgZUohjg/P0mLy1O+/bzTAJGT6VSIjVCe8yKM6SzEl/ckEOFBT7Vnw==
expect@^26.2.0:
version "26.2.0"
resolved "https://registry.yarnpkg.com/expect/-/expect-26.2.0.tgz#0140dd9cc7376d7833852e9cda88c05414f1efba"
integrity sha512-8AMBQ9UVcoUXt0B7v+5/U5H6yiUR87L6eKCfjE3spx7Ya5lF+ebUo37MCFBML2OiLfkX1sxmQOZhIDonyVTkcw==
dependencies:
"@jest/types" "^26.1.0"
"@jest/types" "^26.2.0"
ansi-styles "^4.0.0"
jest-get-type "^26.0.0"
jest-matcher-utils "^26.1.0"
jest-message-util "^26.1.0"
jest-matcher-utils "^26.2.0"
jest-message-util "^26.2.0"
jest-regex-util "^26.0.0"
express@4.17.1:
......@@ -6946,6 +7094,15 @@ fork-ts-checker-webpack-plugin@3.1.1:
tapable "^1.0.0"
worker-rpc "^0.1.0"
form-data@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.0.tgz#31b7e39c85f1355b7139ee0c647cf0de7f83c682"
integrity sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==
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"
......@@ -7123,6 +7280,11 @@ get-pkg-repo@^1.0.0:
parse-github-repo-url "^1.3.0"
through2 "^2.0.0"
get-port@5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193"
integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==
get-port@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/get-port/-/get-port-4.2.0.tgz#e37368b1e863b7629c43c5a323625f95cf24b119"
......@@ -7395,11 +7557,11 @@ har-schema@^2.0.0:
integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
har-validator@~5.1.3:
version "5.1.3"
resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080"
integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==
version "5.1.5"
resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd"
integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==
dependencies:
ajv "^6.5.5"
ajv "^6.12.3"
har-schema "^2.0.0"
hard-rejection@^2.1.0:
......@@ -7761,10 +7923,10 @@ husky@4.2.5:
slash "^3.0.0"
which-pm-runs "^1.0.0"
i18next-browser-languagedetector@5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/i18next-browser-languagedetector/-/i18next-browser-languagedetector-5.0.0.tgz#9e946ed2ea5514a636913fe020a32455e82946e3"
integrity sha512-ekeKbRvTOsSOABSEPHFqyb6Q37JagZXjkISgQKHP84t/VZRW/B3FMVz+tBNQDVdZLsEaOe8fuJpeZsw2TvWeVQ==
i18next-browser-languagedetector@5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/i18next-browser-languagedetector/-/i18next-browser-languagedetector-5.0.1.tgz#02a18f57f79b5de06279feb9a84c80ea4dde7da9"
integrity sha512-7K4A6DJ2rNz3Yd835Y493UgkzUxgpGsCeIMKLGkt6Ps0cbgSaJ+LdATFNFA+ujp2brmsUM9BeDThXKhabXUbUw==
dependencies:
"@babel/runtime" "^7.5.5"
......@@ -8457,57 +8619,57 @@ istanbul-reports@^3.0.2:
html-escaper "^2.0.0"
istanbul-lib-report "^3.0.0"
jest-changed-files@^26.1.0:
version "26.1.0"
resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.1.0.tgz#de66b0f30453bca2aff98e9400f75905da495305"
integrity sha512-HS5MIJp3B8t0NRKGMCZkcDUZo36mVRvrDETl81aqljT1S9tqiHRSpyoOvWg9ZilzZG9TDisDNaN1IXm54fLRZw==
jest-changed-files@^26.2.0:
version "26.2.0"
resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.2.0.tgz#b4946201defe0c919a2f3d601e9f98cb21dacc15"
integrity sha512-+RyJb+F1K/XBLIYiL449vo5D+CvlHv29QveJUWNPXuUicyZcq+tf1wNxmmFeRvAU1+TzhwqczSjxnCCFt7+8iA==
dependencies:
"@jest/types" "^26.1.0"
"@jest/types" "^26.2.0"
execa "^4.0.0"
throat "^5.0.0"
jest-cli@^26.1.0:
version "26.1.0"
resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.1.0.tgz#eb9ec8a18cf3b6aa556d9deaa9e24be12b43ad87"
integrity sha512-Imumvjgi3rU7stq6SJ1JUEMaV5aAgJYXIs0jPqdUnF47N/Tk83EXfmtvNKQ+SnFVI6t6mDOvfM3aA9Sg6kQPSw==
jest-cli@^26.2.2:
version "26.2.2"
resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.2.2.tgz#4c273e5474baafac1eb15fd25aaafb4703f5ffbc"
integrity sha512-vVcly0n/ijZvdy6gPQiQt0YANwX2hLTPQZHtW7Vi3gcFdKTtif7YpI85F8R8JYy5DFSWz4x1OW0arnxlziu5Lw==
dependencies:
"@jest/core" "^26.1.0"
"@jest/test-result" "^26.1.0"
"@jest/types" "^26.1.0"
"@jest/core" "^26.2.2"
"@jest/test-result" "^26.2.0"
"@jest/types" "^26.2.0"
chalk "^4.0.0"
exit "^0.1.2"
graceful-fs "^4.2.4"
import-local "^3.0.2"
is-ci "^2.0.0"
jest-config "^26.1.0"
jest-util "^26.1.0"
jest-validate "^26.1.0"
jest-config "^26.2.2"
jest-util "^26.2.0"
jest-validate "^26.2.0"
prompts "^2.0.1"
yargs "^15.3.1"
jest-config@^26.1.0:
version "26.1.0"
resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.1.0.tgz#9074f7539acc185e0113ad6d22ed589c16a37a73"
integrity sha512-ONTGeoMbAwGCdq4WuKkMcdMoyfs5CLzHEkzFOlVvcDXufZSaIWh/OXMLa2fwKXiOaFcqEw8qFr4VOKJQfn4CVw==
jest-config@^26.2.2:
version "26.2.2"
resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.2.2.tgz#f3ebc7e2bc3f49de8ed3f8007152f345bb111917"
integrity sha512-2lhxH0y4YFOijMJ65usuf78m7+9/8+hAb1PZQtdRdgnQpAb4zP6KcVDDktpHEkspBKnc2lmFu+RQdHukUUbiTg==
dependencies:
"@babel/core" "^7.1.0"
"@jest/test-sequencer" "^26.1.0"
"@jest/types" "^26.1.0"
babel-jest "^26.1.0"
"@jest/test-sequencer" "^26.2.2"
"@jest/types" "^26.2.0"
babel-jest "^26.2.2"
chalk "^4.0.0"
deepmerge "^4.2.2"
glob "^7.1.1"
graceful-fs "^4.2.4"
jest-environment-jsdom "^26.1.0"
jest-environment-node "^26.1.0"
jest-environment-jsdom "^26.2.0"
jest-environment-node "^26.2.0"
jest-get-type "^26.0.0"
jest-jasmine2 "^26.1.0"
jest-jasmine2 "^26.2.2"
jest-regex-util "^26.0.0"
jest-resolve "^26.1.0"
jest-util "^26.1.0"
jest-validate "^26.1.0"
jest-resolve "^26.2.2"
jest-util "^26.2.0"
jest-validate "^26.2.0"
micromatch "^4.0.2"
pretty-format "^26.1.0"
pretty-format "^26.2.0"
jest-diff@^25.2.1:
version "25.5.0"
......@@ -8519,15 +8681,15 @@ jest-diff@^25.2.1:
jest-get-type "^25.2.6"
pretty-format "^25.5.0"
jest-diff@^26.1.0:
version "26.1.0"
resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.1.0.tgz#00a549bdc936c9691eb4dc25d1fbd78bf456abb2"
integrity sha512-GZpIcom339y0OXznsEKjtkfKxNdg7bVbEofK8Q6MnevTIiR1jNhDWKhRX6X0SDXJlwn3dy59nZ1z55fLkAqPWg==
jest-diff@^26.2.0:
version "26.2.0"
resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.2.0.tgz#dee62c771adbb23ae585f3f1bd289a6e8ef4f298"
integrity sha512-Wu4Aopi2nzCsHWLBlD48TgRy3Z7OsxlwvHNd1YSnHc7q1NJfrmyCPoUXrTIrydQOG5ApaYpsAsdfnMbJqV1/wQ==
dependencies:
chalk "^4.0.0"
diff-sequences "^26.0.0"
jest-get-type "^26.0.0"
pretty-format "^26.1.0"
pretty-format "^26.2.0"
jest-docblock@^26.0.0:
version "26.0.0"
......@@ -8536,39 +8698,41 @@ jest-docblock@^26.0.0:
dependencies:
detect-newline "^3.0.0"
jest-each@^26.1.0:
version "26.1.0"
resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.1.0.tgz#e35449875009a22d74d1bda183b306db20f286f7"
integrity sha512-lYiSo4Igr81q6QRsVQq9LIkJW0hZcKxkIkHzNeTMPENYYDw/W/Raq28iJ0sLlNFYz2qxxeLnc5K2gQoFYlu2bA==
jest-each@^26.2.0:
version "26.2.0"
resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.2.0.tgz#aec8efa01d072d7982c900e74940863385fa884e"
integrity sha512-gHPCaho1twWHB5bpcfnozlc6mrMi+VAewVPNgmwf81x2Gzr6XO4dl+eOrwPWxbkYlgjgrYjWK2xgKnixbzH3Ew==
dependencies:
"@jest/types" "^26.1.0"
"@jest/types" "^26.2.0"
chalk "^4.0.0"
jest-get-type "^26.0.0"
jest-util "^26.1.0"
pretty-format "^26.1.0"
jest-util "^26.2.0"
pretty-format "^26.2.0"
jest-environment-jsdom@^26.1.0:
version "26.1.0"
resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.1.0.tgz#9dc7313ffe1b59761dad1fedb76e2503e5d37c5b"
integrity sha512-dWfiJ+spunVAwzXbdVqPH1LbuJW/kDL+FyqgA5YzquisHqTi0g9hquKif9xKm7c1bKBj6wbmJuDkeMCnxZEpUw==
jest-environment-jsdom@^26.2.0:
version "26.2.0"
resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.2.0.tgz#6443a6f3569297dcaa4371dddf93acaf167302dc"
integrity sha512-sDG24+5M4NuIGzkI3rJW8XUlrpkvIdE9Zz4jhD8OBnVxAw+Y1jUk9X+lAOD48nlfUTlnt3lbAI3k2Ox+WF3S0g==
dependencies:
"@jest/environment" "^26.1.0"
"@jest/fake-timers" "^26.1.0"
"@jest/types" "^26.1.0"
jest-mock "^26.1.0"
jest-util "^26.1.0"
"@jest/environment" "^26.2.0"
"@jest/fake-timers" "^26.2.0"
"@jest/types" "^26.2.0"
"@types/node" "*"
jest-mock "^26.2.0"
jest-util "^26.2.0"
jsdom "^16.2.2"
jest-environment-node@^26.1.0:
version "26.1.0"
resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.1.0.tgz#8bb387b3eefb132eab7826f9a808e4e05618960b"
integrity sha512-DNm5x1aQH0iRAe9UYAkZenuzuJ69VKzDCAYISFHQ5i9e+2Tbeu2ONGY7YStubCLH8a1wdKBgqScYw85+ySxqxg==
jest-environment-node@^26.2.0:
version "26.2.0"
resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.2.0.tgz#fee89e06bdd4bed3f75ee2978d73ede9bb57a681"
integrity sha512-4M5ExTYkJ19efBzkiXtBi74JqKLDciEk4CEsp5tTjWGYMrlKFQFtwIVG3tW1OGE0AlXhZjuHPwubuRYY4j4uOw==
dependencies:
"@jest/environment" "^26.1.0"
"@jest/fake-timers" "^26.1.0"
"@jest/types" "^26.1.0"
jest-mock "^26.1.0"
jest-util "^26.1.0"
"@jest/environment" "^26.2.0"
"@jest/fake-timers" "^26.2.0"
"@jest/types" "^26.2.0"
"@types/node" "*"
jest-mock "^26.2.0"
jest-util "^26.2.0"
jest-get-type@^25.2.6:
version "25.2.6"
......@@ -8580,74 +8744,76 @@ jest-get-type@^26.0.0:
resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.0.0.tgz#381e986a718998dbfafcd5ec05934be538db4039"
integrity sha512-zRc1OAPnnws1EVfykXOj19zo2EMw5Hi6HLbFCSjpuJiXtOWAYIjNsHVSbpQ8bDX7L5BGYGI8m+HmKdjHYFF0kg==
jest-haste-map@^26.1.0:
version "26.1.0"
resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.1.0.tgz#ef31209be73f09b0d9445e7d213e1b53d0d1476a"
integrity sha512-WeBS54xCIz9twzkEdm6+vJBXgRBQfdbbXD0dk8lJh7gLihopABlJmIQFdWSDDtuDe4PRiObsjZSUjbJ1uhWEpA==
jest-haste-map@^26.2.2:
version "26.2.2"
resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.2.2.tgz#6d4267b1903854bfdf6a871419f35a82f03ae71e"
integrity sha512-3sJlMSt+NHnzCB+0KhJ1Ut4zKJBiJOlbrqEYNdRQGlXTv8kqzZWjUKQRY3pkjmlf+7rYjAV++MQ4D6g4DhAyOg==
dependencies:
"@jest/types" "^26.1.0"
"@jest/types" "^26.2.0"
"@types/graceful-fs" "^4.1.2"
"@types/node" "*"
anymatch "^3.0.3"
fb-watchman "^2.0.0"
graceful-fs "^4.2.4"
jest-serializer "^26.1.0"
jest-util "^26.1.0"
jest-worker "^26.1.0"
jest-regex-util "^26.0.0"
jest-serializer "^26.2.0"
jest-util "^26.2.0"
jest-worker "^26.2.1"
micromatch "^4.0.2"
sane "^4.0.3"
walker "^1.0.7"
which "^2.0.2"
optionalDependencies:
fsevents "^2.1.2"
jest-jasmine2@^26.1.0:
version "26.1.0"
resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.1.0.tgz#4dfe349b2b2d3c6b3a27c024fd4cb57ac0ed4b6f"
integrity sha512-1IPtoDKOAG+MeBrKvvuxxGPJb35MTTRSDglNdWWCndCB3TIVzbLThRBkwH9P081vXLgiJHZY8Bz3yzFS803xqQ==
jest-jasmine2@^26.2.2:
version "26.2.2"
resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.2.2.tgz#d82b1721fac2b153a4f8b3f0c95e81e702812de2"
integrity sha512-Q8AAHpbiZMVMy4Hz9j1j1bg2yUmPa1W9StBvcHqRaKa9PHaDUMwds8LwaDyzP/2fkybcTQE4+pTMDOG9826tEw==
dependencies:
"@babel/traverse" "^7.1.0"
"@jest/environment" "^26.1.0"
"@jest/environment" "^26.2.0"
"@jest/source-map" "^26.1.0"
"@jest/test-result" "^26.1.0"
"@jest/types" "^26.1.0"
"@jest/test-result" "^26.2.0"
"@jest/types" "^26.2.0"
"@types/node" "*"
chalk "^4.0.0"
co "^4.6.0"
expect "^26.1.0"
expect "^26.2.0"
is-generator-fn "^2.0.0"
jest-each "^26.1.0"
jest-matcher-utils "^26.1.0"
jest-message-util "^26.1.0"
jest-runtime "^26.1.0"
jest-snapshot "^26.1.0"
jest-util "^26.1.0"
pretty-format "^26.1.0"
jest-each "^26.2.0"
jest-matcher-utils "^26.2.0"
jest-message-util "^26.2.0"
jest-runtime "^26.2.2"
jest-snapshot "^26.2.2"
jest-util "^26.2.0"
pretty-format "^26.2.0"
throat "^5.0.0"
jest-leak-detector@^26.1.0:
version "26.1.0"
resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.1.0.tgz#039c3a07ebcd8adfa984b6ac015752c35792e0a6"
integrity sha512-dsMnKF+4BVOZwvQDlgn3MG+Ns4JuLv8jNvXH56bgqrrboyCbI1rQg6EI5rs+8IYagVcfVP2yZFKfWNZy0rK0Hw==
jest-leak-detector@^26.2.0:
version "26.2.0"
resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.2.0.tgz#073ee6d8db7a9af043e7ce99d8eea17a4fb0cc50"
integrity sha512-aQdzTX1YiufkXA1teXZu5xXOJgy7wZQw6OJ0iH5CtQlOETe6gTSocaYKUNui1SzQ91xmqEUZ/WRavg9FD82rtQ==
dependencies:
jest-get-type "^26.0.0"
pretty-format "^26.1.0"
pretty-format "^26.2.0"
jest-matcher-utils@^26.1.0:
version "26.1.0"
resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.1.0.tgz#cf75a41bd413dda784f022de5a65a2a5c73a5c92"
integrity sha512-PW9JtItbYvES/xLn5mYxjMd+Rk+/kIt88EfH3N7w9KeOrHWaHrdYPnVHndGbsFGRJ2d5gKtwggCvkqbFDoouQA==
jest-matcher-utils@^26.2.0:
version "26.2.0"
resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.2.0.tgz#b107af98c2b8c557ffd46c1adf06f794aa52d622"
integrity sha512-2cf/LW2VFb3ayPHrH36ZDjp9+CAeAe/pWBAwsV8t3dKcrINzXPVxq8qMWOxwt5BaeBCx4ZupVGH7VIgB8v66vQ==
dependencies:
chalk "^4.0.0"
jest-diff "^26.1.0"
jest-diff "^26.2.0"
jest-get-type "^26.0.0"
pretty-format "^26.1.0"
pretty-format "^26.2.0"
jest-message-util@^26.1.0:
version "26.1.0"
resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.1.0.tgz#52573fbb8f5cea443c4d1747804d7a238a3e233c"
integrity sha512-dY0+UlldiAJwNDJ08SF0HdF32g9PkbF2NRK/+2iMPU40O6q+iSn1lgog/u0UH8ksWoPv0+gNq8cjhYO2MFtT0g==
jest-message-util@^26.2.0:
version "26.2.0"
resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.2.0.tgz#757fbc1323992297092bb9016a71a2eb12fd22ea"
integrity sha512-g362RhZaJuqeqG108n1sthz5vNpzTNy926eNDszo4ncRbmmcMRIUAZibnd6s5v2XSBCChAxQtCoN25gnzp7JbQ==
dependencies:
"@babel/code-frame" "^7.0.0"
"@jest/types" "^26.1.0"
"@jest/types" "^26.2.0"
"@types/stack-utils" "^1.0.1"
chalk "^4.0.0"
graceful-fs "^4.2.4"
......@@ -8655,14 +8821,15 @@ jest-message-util@^26.1.0:
slash "^3.0.0"
stack-utils "^2.0.2"
jest-mock@^26.1.0:
version "26.1.0"
resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.1.0.tgz#80d8286da1f05a345fbad1bfd6fa49a899465d3d"
integrity sha512-1Rm8EIJ3ZFA8yCIie92UbxZWj9SuVmUGcyhLHyAhY6WI3NIct38nVcfOPWhJteqSn8V8e3xOMha9Ojfazfpovw==
jest-mock@^26.2.0:
version "26.2.0"
resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.2.0.tgz#a1b3303ab38c34aa1dbbc16ab57cdc1a59ed50d1"
integrity sha512-XeC7yWtWmWByoyVOHSsE7NYsbXJLtJNgmhD7z4MKumKm6ET0si81bsSLbQ64L5saK3TgsHo2B/UqG5KNZ1Sp/Q==
dependencies:
"@jest/types" "^26.1.0"
"@jest/types" "^26.2.0"
"@types/node" "*"
jest-pnp-resolver@^1.2.1:
jest-pnp-resolver@^1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c"
integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==
......@@ -8672,115 +8839,117 @@ jest-regex-util@^26.0.0:
resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28"
integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==
jest-resolve-dependencies@^26.1.0:
version "26.1.0"
resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.1.0.tgz#1ce36472f864a5dadf7dc82fa158e1c77955691b"
integrity sha512-fQVEPHHQ1JjHRDxzlLU/buuQ9om+hqW6Vo928aa4b4yvq4ZHBtRSDsLdKQLuCqn5CkTVpYZ7ARh2fbA8WkRE6g==
jest-resolve-dependencies@^26.2.2:
version "26.2.2"
resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.2.2.tgz#2ad3cd9281730e9a5c487cd846984c5324e47929"
integrity sha512-S5vufDmVbQXnpP7435gr710xeBGUFcKNpNswke7RmFvDQtmqPjPVU/rCeMlEU0p6vfpnjhwMYeaVjKZAy5QYJA==
dependencies:
"@jest/types" "^26.1.0"
"@jest/types" "^26.2.0"
jest-regex-util "^26.0.0"
jest-snapshot "^26.1.0"
jest-snapshot "^26.2.2"
jest-resolve@^26.1.0:
version "26.1.0"
resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.1.0.tgz#a530eaa302b1f6fa0479079d1561dd69abc00e68"
integrity sha512-KsY1JV9FeVgEmwIISbZZN83RNGJ1CC+XUCikf/ZWJBX/tO4a4NvA21YixokhdR9UnmPKKAC4LafVixJBrwlmfg==
jest-resolve@^26.2.2:
version "26.2.2"
resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.2.2.tgz#324a20a516148d61bffa0058ed0c77c510ecfd3e"
integrity sha512-ye9Tj/ILn/0OgFPE/3dGpQPUqt4dHwIocxt5qSBkyzxQD8PbL0bVxBogX2FHxsd3zJA7V2H/cHXnBnNyyT9YoQ==
dependencies:
"@jest/types" "^26.1.0"
"@jest/types" "^26.2.0"
chalk "^4.0.0"
graceful-fs "^4.2.4"
jest-pnp-resolver "^1.2.1"
jest-util "^26.1.0"
jest-pnp-resolver "^1.2.2"
jest-util "^26.2.0"
read-pkg-up "^7.0.1"
resolve "^1.17.0"
slash "^3.0.0"
jest-runner@^26.1.0:
version "26.1.0"
resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.1.0.tgz#457f7fc522afe46ca6db1dccf19f87f500b3288d"
integrity sha512-elvP7y0fVDREnfqit0zAxiXkDRSw6dgCkzPCf1XvIMnSDZ8yogmSKJf192dpOgnUVykmQXwYYJnCx641uLTgcw==
jest-runner@^26.2.2:
version "26.2.2"
resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.2.2.tgz#6d03d057886e9c782e10b2cf37443f902fe0e39e"
integrity sha512-/qb6ptgX+KQ+aNMohJf1We695kaAfuu3u3ouh66TWfhTpLd9WbqcF6163d/tMoEY8GqPztXPLuyG0rHRVDLxCA==
dependencies:
"@jest/console" "^26.1.0"
"@jest/environment" "^26.1.0"
"@jest/test-result" "^26.1.0"
"@jest/types" "^26.1.0"
"@jest/console" "^26.2.0"
"@jest/environment" "^26.2.0"
"@jest/test-result" "^26.2.0"
"@jest/types" "^26.2.0"
"@types/node" "*"
chalk "^4.0.0"
emittery "^0.7.1"
exit "^0.1.2"
graceful-fs "^4.2.4"
jest-config "^26.1.0"
jest-config "^26.2.2"
jest-docblock "^26.0.0"
jest-haste-map "^26.1.0"
jest-jasmine2 "^26.1.0"
jest-leak-detector "^26.1.0"
jest-message-util "^26.1.0"
jest-resolve "^26.1.0"
jest-runtime "^26.1.0"
jest-util "^26.1.0"
jest-worker "^26.1.0"
jest-haste-map "^26.2.2"
jest-leak-detector "^26.2.0"
jest-message-util "^26.2.0"
jest-resolve "^26.2.2"
jest-runtime "^26.2.2"
jest-util "^26.2.0"
jest-worker "^26.2.1"
source-map-support "^0.5.6"
throat "^5.0.0"
jest-runtime@^26.1.0:
version "26.1.0"
resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.1.0.tgz#45a37af42115f123ed5c51f126c05502da2469cb"
integrity sha512-1qiYN+EZLmG1QV2wdEBRf+Ci8i3VSfIYLF02U18PiUDrMbhfpN/EAMMkJtT02jgJUoaEOpHAIXG6zS3QRMzRmA==
jest-runtime@^26.2.2:
version "26.2.2"
resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.2.2.tgz#2480ff79320680a643031dd21998d7c63d83ab68"
integrity sha512-a8VXM3DxCDnCIdl9+QucWFfQ28KdqmyVFqeKLigHdErtsx56O2ZIdQkhFSuP1XtVrG9nTNHbKxjh5XL1UaFDVQ==
dependencies:
"@jest/console" "^26.1.0"
"@jest/environment" "^26.1.0"
"@jest/fake-timers" "^26.1.0"
"@jest/globals" "^26.1.0"
"@jest/console" "^26.2.0"
"@jest/environment" "^26.2.0"
"@jest/fake-timers" "^26.2.0"
"@jest/globals" "^26.2.0"
"@jest/source-map" "^26.1.0"
"@jest/test-result" "^26.1.0"
"@jest/transform" "^26.1.0"
"@jest/types" "^26.1.0"
"@jest/test-result" "^26.2.0"
"@jest/transform" "^26.2.2"
"@jest/types" "^26.2.0"
"@types/yargs" "^15.0.0"
chalk "^4.0.0"
collect-v8-coverage "^1.0.0"
exit "^0.1.2"
glob "^7.1.3"
graceful-fs "^4.2.4"
jest-config "^26.1.0"
jest-haste-map "^26.1.0"
jest-message-util "^26.1.0"
jest-mock "^26.1.0"
jest-config "^26.2.2"
jest-haste-map "^26.2.2"
jest-message-util "^26.2.0"
jest-mock "^26.2.0"
jest-regex-util "^26.0.0"
jest-resolve "^26.1.0"
jest-snapshot "^26.1.0"
jest-util "^26.1.0"
jest-validate "^26.1.0"
jest-resolve "^26.2.2"
jest-snapshot "^26.2.2"
jest-util "^26.2.0"
jest-validate "^26.2.0"
slash "^3.0.0"
strip-bom "^4.0.0"
yargs "^15.3.1"
jest-serializer@^26.1.0:
version "26.1.0"
resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.1.0.tgz#72a394531fc9b08e173dc7d297440ac610d95022"
integrity sha512-eqZOQG/0+MHmr25b2Z86g7+Kzd5dG9dhCiUoyUNJPgiqi38DqbDEOlHcNijyfZoj74soGBohKBZuJFS18YTJ5w==
jest-serializer@^26.2.0:
version "26.2.0"
resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.2.0.tgz#92dcae5666322410f4bf50211dd749274959ddac"
integrity sha512-V7snZI9IVmyJEu0Qy0inmuXgnMWDtrsbV2p9CRAcmlmPVwpC2ZM8wXyYpiugDQnwLHx0V4+Pnog9Exb3UO8M6Q==
dependencies:
"@types/node" "*"
graceful-fs "^4.2.4"
jest-snapshot@^26.1.0:
version "26.1.0"
resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.1.0.tgz#c36ed1e0334bd7bd2fe5ad07e93a364ead7e1349"
integrity sha512-YhSbU7eMTVQO/iRbNs8j0mKRxGp4plo7sJ3GzOQ0IYjvsBiwg0T1o0zGQAYepza7lYHuPTrG5J2yDd0CE2YxSw==
jest-snapshot@^26.2.2:
version "26.2.2"
resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.2.2.tgz#9d2eda083a4a1017b157e351868749bd63211799"
integrity sha512-NdjD8aJS7ePu268Wy/n/aR1TUisG0BOY+QOW4f6h46UHEKOgYmmkvJhh2BqdVZQ0BHSxTMt04WpCf9njzx8KtA==
dependencies:
"@babel/types" "^7.0.0"
"@jest/types" "^26.1.0"
"@jest/types" "^26.2.0"
"@types/prettier" "^2.0.0"
chalk "^4.0.0"
expect "^26.1.0"
expect "^26.2.0"
graceful-fs "^4.2.4"
jest-diff "^26.1.0"
jest-diff "^26.2.0"
jest-get-type "^26.0.0"
jest-haste-map "^26.1.0"
jest-matcher-utils "^26.1.0"
jest-message-util "^26.1.0"
jest-resolve "^26.1.0"
jest-haste-map "^26.2.2"
jest-matcher-utils "^26.2.0"
jest-message-util "^26.2.0"
jest-resolve "^26.2.2"
natural-compare "^1.4.0"
pretty-format "^26.1.0"
pretty-format "^26.2.0"
semver "^7.3.2"
jest-util@26.x, jest-util@^26.1.0:
jest-util@26.x:
version "26.1.0"
resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.1.0.tgz#80e85d4ba820decacf41a691c2042d5276e5d8d8"
integrity sha512-rNMOwFQevljfNGvbzNQAxdmXQ+NawW/J72dmddsK0E8vgxXCMtwQ/EH0BiWEIxh0hhMcTsxwAxINt7Lh46Uzbg==
......@@ -8791,28 +8960,41 @@ jest-util@26.x, jest-util@^26.1.0:
is-ci "^2.0.0"
micromatch "^4.0.2"
jest-validate@^26.1.0:
version "26.1.0"
resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.1.0.tgz#942c85ad3d60f78250c488a7f85d8f11a29788e7"
integrity sha512-WPApOOnXsiwhZtmkDsxnpye+XLb/tUISP+H6cHjfUIXvlG+eKwP+isnivsxlHCPaO9Q5wvbhloIBkdF3qUn+Nw==
jest-util@^26.2.0:
version "26.2.0"
resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.2.0.tgz#0597d2a27c559340957609f106c408c17c1d88ac"
integrity sha512-YmDwJxLZ1kFxpxPfhSJ0rIkiZOM0PQbRcfH0TzJOhqCisCAsI1WcmoQqO83My9xeVA2k4n+rzg2UuexVKzPpig==
dependencies:
"@jest/types" "^26.1.0"
"@jest/types" "^26.2.0"
"@types/node" "*"
chalk "^4.0.0"
graceful-fs "^4.2.4"
is-ci "^2.0.0"
micromatch "^4.0.2"
jest-validate@^26.2.0:
version "26.2.0"
resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.2.0.tgz#97fedf3e7984b7608854cbf925b9ca6ebcbdb78a"
integrity sha512-8XKn3hM6VIVmLNuyzYLCPsRCT83o8jMZYhbieh4dAyKLc4Ypr36rVKC+c8WMpWkfHHpGnEkvWUjjIAyobEIY/Q==
dependencies:
"@jest/types" "^26.2.0"
camelcase "^6.0.0"
chalk "^4.0.0"
jest-get-type "^26.0.0"
leven "^3.1.0"
pretty-format "^26.1.0"
pretty-format "^26.2.0"
jest-watcher@^26.1.0:
version "26.1.0"
resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.1.0.tgz#99812a0cd931f0cb3d153180426135ab83e4d8f2"
integrity sha512-ffEOhJl2EvAIki613oPsSG11usqnGUzIiK7MMX6hE4422aXOcVEG3ySCTDFLn1+LZNXGPE8tuJxhp8OBJ1pgzQ==
jest-watcher@^26.2.0:
version "26.2.0"
resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.2.0.tgz#45bdf2fecadd19c0a501f3b071a474dca636825b"
integrity sha512-674Boco4Joe0CzgKPL6K4Z9LgyLx+ZvW2GilbpYb8rFEUkmDGgsZdv1Hv5rxsRpb1HLgKUOL/JfbttRCuFdZXQ==
dependencies:
"@jest/test-result" "^26.1.0"
"@jest/types" "^26.1.0"
"@jest/test-result" "^26.2.0"
"@jest/types" "^26.2.0"
"@types/node" "*"
ansi-escapes "^4.2.1"
chalk "^4.0.0"
jest-util "^26.1.0"
jest-util "^26.2.0"
string-length "^4.0.1"
jest-worker@24.9.0:
......@@ -8823,22 +9005,23 @@ jest-worker@24.9.0:
merge-stream "^2.0.0"
supports-color "^6.1.0"
jest-worker@^26.1.0:
version "26.1.0"
resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.1.0.tgz#65d5641af74e08ccd561c240e7db61284f82f33d"
integrity sha512-Z9P5pZ6UC+kakMbNJn+tA2RdVdNX5WH1x+5UCBZ9MxIK24pjYtFt96fK+UwBTrjLYm232g1xz0L3eTh51OW+yQ==
jest-worker@^26.2.1:
version "26.2.1"
resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.2.1.tgz#5d630ab93f666b53f911615bc13e662b382bd513"
integrity sha512-+XcGMMJDTeEGncRb5M5Zq9P7K4sQ1sirhjdOxsN1462h6lFo9w59bl2LVQmdGEEeU3m+maZCkS2Tcc9SfCHO4A==
dependencies:
"@types/node" "*"
merge-stream "^2.0.0"
supports-color "^7.0.0"
jest@26.1.0:
version "26.1.0"
resolved "https://registry.yarnpkg.com/jest/-/jest-26.1.0.tgz#2f3aa7bcffb9bfd025473f83bbbf46a3af026263"
integrity sha512-LIti8jppw5BcQvmNJe4w2g1N/3V68HUfAv9zDVm7v+VAtQulGhH0LnmmiVkbNE4M4I43Bj2fXPiBGKt26k9tHw==
jest@26.2.2:
version "26.2.2"
resolved "https://registry.yarnpkg.com/jest/-/jest-26.2.2.tgz#a022303887b145147204c5f66e6a5c832333c7e7"
integrity sha512-EkJNyHiAG1+A8pqSz7cXttoVa34hOEzN/MrnJhYnfp5VHxflVcf2pu3oJSrhiy6LfIutLdWo+n6q63tjcoIeig==
dependencies:
"@jest/core" "^26.1.0"
"@jest/core" "^26.2.2"
import-local "^3.0.2"
jest-cli "^26.1.0"
jest-cli "^26.2.2"
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
version "4.0.0"
......@@ -9029,7 +9212,7 @@ kleur@^3.0.3:
resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==
klona@^1.1.1:
klona@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/klona/-/klona-1.1.2.tgz#a79e292518a5a5412ec8d097964bff1571a64db0"
integrity sha512-xf88rTeHiXk+XE2Vhi6yj8Wm3gMZrygGdKjJqN8HkV+PwF/t50/LdAKHoHpPcxFAlmQszTZ1CugrK25S7qDRLA==
......@@ -9994,7 +10177,7 @@ neo-async@2.6.1:
resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c"
integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==
neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1:
neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1, neo-async@^2.6.2:
version "2.6.2"
resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
......@@ -11583,12 +11766,12 @@ pretty-format@^25.2.1, pretty-format@^25.5.0:
ansi-styles "^4.0.0"
react-is "^16.12.0"
pretty-format@^26.1.0:
version "26.1.0"
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.1.0.tgz#272b9cd1f1a924ab5d443dc224899d7a65cb96ec"
integrity sha512-GmeO1PEYdM+non4BKCj+XsPJjFOJIPnsLewqhDVoqY1xo0yNmDas7tC2XwpMrRAHR3MaE2hPo37deX5OisJ2Wg==
pretty-format@^26.2.0:
version "26.2.0"
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.2.0.tgz#83ecc8d7de676ff224225055e72bd64821cec4f1"
integrity sha512-qi/8IuBu2clY9G7qCXgCdD1Bf9w+sXakdHTRToknzMtVy0g7c4MBWaZy7MfB7ndKZovRO6XRwJiAYqq+MC7SDA==
dependencies:
"@jest/types" "^26.1.0"
"@jest/types" "^26.2.0"
ansi-regex "^5.0.0"
ansi-styles "^4.0.0"
react-is "^16.12.0"
......@@ -12624,14 +12807,14 @@ sass-loader@8.0.2:
schema-utils "^2.6.1"
semver "^6.3.0"
sass-loader@9.0.2:
version "9.0.2"
resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-9.0.2.tgz#847c9b4c95328ddc8c7d35cf28c9d6e54e59a90b"
integrity sha512-nphcum3jNI442njnrZ5wJgSNX5lfEOHOKHCLf+PrTIaleploKqAMUuT9CVKjf+lyi6c2MCGPHh1vb9nGsjnZJA==
sass-loader@9.0.3:
version "9.0.3"
resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-9.0.3.tgz#086adcf0bfdcc9d920413e2cdc3ba3321373d547"
integrity sha512-fOwsP98ac1VMme+V3+o0HaaMHp8Q/C9P+MUazLFVi3Jl7ORGHQXL1XeRZt3zLSGZQQPC8xE42Y2WptItvGjDQg==
dependencies:
klona "^1.1.1"
klona "^1.1.2"
loader-utils "^2.0.0"
neo-async "^2.6.1"
neo-async "^2.6.2"
schema-utils "^2.7.0"
semver "^7.3.2"
......@@ -13561,10 +13744,10 @@ svgo@^1.0.0:
unquote "~1.1.1"
util.promisify "~1.0.0"
swr@0.2.3:
version "0.2.3"
resolved "https://registry.yarnpkg.com/swr/-/swr-0.2.3.tgz#e0fb260d27f12fafa2388312083368f45127480d"
integrity sha512-JhuuD5ojqgjAQpZAhoPBd8Di0Mr1+ykByVKuRJdtKaxkUX/y8kMACWKkLgLQc8pcDOKEAnbIreNjU7HfqI9nHQ==
swr@0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/swr/-/swr-0.3.0.tgz#69602953dd50ab07fe60c920fd63199256645675"
integrity sha512-3p0p5TWH0qiaKAph5wBkMwqe2WjNseITfjmdVoNzjqRZGn/gnpRi6whMDjhMVb/vp/yyDtKWPlyjid8QZH+UhA==
dependencies:
fast-deep-equal "2.0.1"
......@@ -13684,7 +13867,16 @@ terser@4.6.13:
source-map "~0.6.1"
source-map-support "~0.5.12"
terser@4.8.0, terser@^4.1.2, terser@^4.6.3:
terser@5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/terser/-/terser-5.0.0.tgz#269640e4e92f15d628de1e5f01c4c61e1ba3d765"
integrity sha512-olH2DwGINoSuEpSGd+BsPuAQaA3OrHnHnFL/rDB2TVNc3srUbz/rq/j2BlF4zDXI+JqAvGr86bIm1R2cJgZ3FA==
dependencies:
commander "^2.20.0"
source-map "~0.6.1"
source-map-support "~0.5.12"
terser@^4.1.2, terser@^4.6.3:
version "4.8.0"
resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17"
integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==
......@@ -13769,7 +13961,14 @@ timsort@^0.3.0:
resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4"
integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=
tippy.js@6.2.5, tippy.js@^6.2.0:
tippy.js@6.2.6:
version "6.2.6"
resolved "https://registry.yarnpkg.com/tippy.js/-/tippy.js-6.2.6.tgz#4991bbe8f75e741fb92b5ccfeebcd072d71f8345"
integrity sha512-0tTL3WQNT0nWmpslhDryRahoBm6PT9fh1xXyDfOsvZpDzq52by2rF2nvsW0WX2j9nUZP/jSGDqfKJGjCtoGFKg==
dependencies:
"@popperjs/core" "^2.4.4"
tippy.js@^6.2.0:
version "6.2.5"
resolved "https://registry.yarnpkg.com/tippy.js/-/tippy.js-6.2.5.tgz#5335e28228af5e22c524fe5e8a94654514f34b92"
integrity sha512-UIf8G99PMXGmdWPrr36s/DjQBdfxMPwzvPUXsxs3tDFDTZ1SgvKG+Jvt6RJ+aBqYL0oe/STxh3MNkCV3IWAKmw==
......@@ -13919,10 +14118,10 @@ ts-jest@26.1.4:
semver "7.x"
yargs-parser "18.x"
ts-loader@8.0.1:
version "8.0.1"
resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-8.0.1.tgz#9670dcbce2a8c8506d01a37fee042350d02c8c21"
integrity sha512-I9Nmly0ufJoZRMuAT9d5ijsC2B7oSPvUnOJt/GhgoATlPGYfa17VicDKPcqwUCrHpOkCxr/ybLYwbnS4cOxmvQ==
ts-loader@8.0.2:
version "8.0.2"
resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-8.0.2.tgz#ee73ca9350f745799396fff8578ba29b1e95616b"
integrity sha512-oYT7wOTUawYXQ8XIDsRhziyW0KUEV38jISYlE+9adP6tDtG+O5GkRe4QKQXrHVH4mJJ88DysvEtvGP65wMLlhg==
dependencies:
chalk "^2.3.0"
enhanced-resolve "^4.0.0"
......
......@@ -4,43 +4,35 @@ set -e
TOP_DIR=$(pwd)
FRONTEND_DIR=${TOP_DIR}/frontend
BUILD_DIR=${TOP_DIR}/build
FRONTEND_DIST="$BUILD_DIR/package/dist"
mkdir -p "$BUILD_DIR"
build_frontend_fake() {
mkdir -p "$BUILD_DIR/package/dist"
}
build_frontend() {
mkdir -p "$BUILD_DIR/package/dist"
rm -rf "$FRONTEND_DIST"
mkdir -p "$FRONTEND_DIST"
cd "$FRONTEND_DIR"
. ./scripts/install.sh
SCOPE="serverless" PUBLIC_PATH="/{{PUBLIC_PATH}}" API_URL="/{{PUBLIC_PATH}}/api" API_TOKEN_KEY="{{API_TOKEN_KEY}}" PATH="$PATH" ./scripts/build.sh
# extract
tar zxf "$FRONTEND_DIR/output/serverless.tar.gz" -C "$BUILD_DIR/package/dist"
tar zxf "$FRONTEND_DIR/output/serverless.tar.gz" -C "$FRONTEND_DIST"
}
clean_env() {
rm -rf "$TOP_DIR/visualdl/server/dist"
rm -rf "$BUILD_DIR/bdist*"
rm -rf "$BUILD_DIR/lib*"
rm -rf "$BUILD_DIR/package"
}
package() {
cp -rf "$BUILD_DIR/package/dist" "$TOP_DIR/visualdl/server/"
}
ARG=$1
echo "ARG: ${ARG}"
clean_env
if [[ "$ARG" = "travis-CI" ]]; then
build_frontend_fake
else
if [ -z "$USE_CACHED_FRONTEND" ] || [ ! -d "$FRONTEND_DIST" ]; then
build_frontend
fi
......
......@@ -28,9 +28,7 @@ from visualdl import __version__
import subprocess
TOP_DIR = os.path.realpath(os.path.dirname(__file__))
PYTHON_SDK_DIR = os.path.join(TOP_DIR, 'visualdl/python')
BUILD_DIR = os.path.join(TOP_DIR, 'build')
MODE = os.environ.get('VS_BUILD_MODE', 'RELEASE')
def read(name):
......@@ -41,50 +39,22 @@ def readlines(name):
return read(name).split('\n')
README = read('README.md')
LICENSE = readlines('LICENSE')[0].strip()
# use memcache to reduce disk read frequency.
REQUIRED_PACKAGES = read("requirements.txt")
execute_requires = ['npm', 'node', 'bash', 'cmake', 'unzip']
if platform == "win32":
execute_requires = ['node', 'powershell', 'cmake']
def die(msg):
log.error(msg)
sys.exit(1)
def CHECK(cond, msg):
if not cond:
die(msg)
REQUIRED_PACKAGES = read('requirements.txt')
execute_requires = ['npm', 'node', 'powershell' if platform == 'win32' else 'bash']
for exe in execute_requires:
CHECK(find_executable(exe), "{} should be installed.".format(exe))
class BaseCommand(setuptools.Command):
user_options = []
def initialize_options(self):
pass
def finalize_options(self):
pass
if not find_executable(exe):
log.error('%s should be installed.', exe)
sys.exit(1)
class build_py(setuptools.command.build_py.build_py):
def run(self):
cmd = ['bash', 'scripts/build.sh']
if platform == "win32":
cmd = ['powershell', '-NoProfile', './scripts/build.ps1']
cmd = ['powershell', '-NoProfile', './scripts/build.ps1'] if platform == 'win32' else ['bash',
'scripts/build.sh']
env = dict(os.environ)
if MODE == "travis-CI":
cmd.append('travis-CI')
if sys.version_info[0] >= 3:
env["WITH_PYTHON3"] = "ON"
subprocess.check_call(cmd, env=env)
return setuptools.command.build_py.build_py.run(self)
......@@ -100,7 +70,7 @@ setup(
description="Visualize Deep Learning",
license=LICENSE,
keywords="visualization deeplearning",
long_description=read('README.md'),
long_description=README,
long_description_content_type='text/markdown',
install_requires=REQUIRED_PACKAGES,
package_data={
......
......@@ -24,6 +24,7 @@ import re
import webbrowser
import requests
from visualdl import __version__
from visualdl.utils import update_util
from flask import (Flask, Response, redirect, request, send_file, make_response)
......@@ -32,7 +33,7 @@ from flask_babel import Babel
import visualdl.server
from visualdl.server.api import create_api_call
from visualdl.server.args import (ParseArgs, parse_args)
from visualdl.server.log import logger
from visualdl.server.log import info
from visualdl.server.template import Template
SERVER_DIR = os.path.join(visualdl.ROOT, 'server')
......@@ -44,9 +45,17 @@ server_path = os.path.abspath(os.path.dirname(sys.argv[0]))
template_file_path = os.path.join(SERVER_DIR, "./dist")
mock_data_path = os.path.join(SERVER_DIR, "./mock_data/")
check_live_path = '/alive'
def create_app(args):
# disable warning from flask
cli = sys.modules['flask.cli']
cli.show_server_banner = lambda *x: None
app = Flask('visualdl', static_folder=None)
app.logger.disabled = True
# set static expires in a short time to reduce browser's memory usage.
app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 30
......@@ -59,9 +68,6 @@ def create_app(args):
public_path = args.public_path
api_path = public_path + '/api'
if args.api_only:
logger.info('Running in API mode, only {}/* will be served.'.format(api_path))
@babel.localeselector
def get_locale():
lang = args.language
......@@ -104,6 +110,11 @@ def create_app(args):
def serve_api(method):
data, mimetype, headers = api_call(method, request.args)
return make_response(Response(data, mimetype=mimetype, headers=headers))
@app.route(check_live_path)
def check_live():
return '', 204
return app
......@@ -118,33 +129,47 @@ def _open_browser(app, index_url):
webbrowser.open(index_url)
def _run(**kwargs):
args = ParseArgs(**kwargs)
logger.info(' port=' + str(args.port))
def wait_until_live(args: ParseArgs):
url = 'http://{host}:{port}'.format(host=args.host, port=args.port)
while True:
try:
requests.get(url + check_live_path)
info('Running VisualDL at http://%s:%s/ (Press CTRL+C to quit)', args.host, args.port)
if args.host == 'localhost':
info('Serving VisualDL on localhost; to expose to the network, use a proxy or pass --host 0.0.0.0')
if args.api_only:
info('Running in API mode, only %s/* will be served.', args.public_path + '/api')
break
except Exception:
time.sleep(0.5)
if not args.api_only and args.open_browser:
webbrowser.open(url + args.public_path)
def _run(args):
args = ParseArgs(**args)
info('\033[1;33mVisualDL %s\033[0m', __version__)
app = create_app(args)
if not args.api_only:
index_url = 'http://' + args.host + ':' + str(args.port) + args.public_path
if kwargs.get('open_browser', False):
threading.Thread(
target=_open_browser, kwargs={'app': app, 'index_url': index_url}).start()
threading.Thread(target=wait_until_live, args=(args,)).start()
app.run(debug=False, host=args.host, port=args.port, threaded=False)
def run(logdir=None, **options):
kwargs = {
args = {
'logdir': logdir
}
kwargs.update(options)
p = multiprocessing.Process(target=_run, kwargs=kwargs)
args.update(options)
p = multiprocessing.Process(target=_run, args=(args,))
p.start()
return p.pid
def main():
args = parse_args()
logger.info(' port=' + str(args.port))
app = create_app(args)
app.run(debug=False, host=args.host, port=args.port, threaded=False)
_run(args)
if __name__ == '__main__':
......
......@@ -17,12 +17,12 @@ import sys
import socket
from argparse import ArgumentParser
from visualdl.server.log import logger
from visualdl import __version__
from visualdl.server.log import (init_logger, logger)
default_host = None
default_port = 8040
default_cache_timeout = 20
default_public_path = '/app'
......@@ -39,6 +39,16 @@ class DefaultArgs(object):
self.model = args.get('model', '')
def get_host(host=default_host, port=default_port):
if not host:
host = socket.getfqdn()
try:
socket.create_connection((host, port), timeout=1)
except socket.error:
host = 'localhost'
return host
def validate_args(args):
# if not in API mode, public path cannot be set to root path
if not args.api_only and args.public_path == '/':
......@@ -51,19 +61,7 @@ def validate_args(args):
sys.exit(-1)
def get_host(host=None, port=default_port):
if not host:
host = socket.getfqdn()
try:
socket.create_connection((host, port), timeout=1)
except socket.error:
host = 'localhost'
return host
def format_args(args):
validate_args(args)
# set default public path according to API mode option
if args.public_path is None:
args.public_path = '' if args.api_only else default_public_path
......@@ -74,6 +72,7 @@ def format_args(args):
if args.api_only:
args.open_browser = False
# set host to localhost if host is not set
if not args.host:
args.host = get_host(args.host, args.port)
......@@ -82,7 +81,9 @@ def format_args(args):
class ParseArgs(object):
def __init__(self, **kwargs):
args = format_args(DefaultArgs(kwargs))
args = DefaultArgs(kwargs)
validate_args(args)
args = format_args(args)
self.logdir = args.logdir
self.host = args.host
......@@ -99,11 +100,15 @@ def parse_args():
"""
:return:
"""
parser = ArgumentParser(description="VisualDL, a tool to visualize deep learning.")
parser = ArgumentParser(
prog="VisualDL",
description="VisualDL, a tool to visualize deep learning.",
epilog="For more information: https://github.com/PaddlePaddle/VisualDL"
)
parser.add_argument(
"--logdir",
action="store",
dest="logdir",
nargs="+",
help="log file directory")
parser.add_argument(
......@@ -112,52 +117,64 @@ def parse_args():
type=int,
default=default_port,
action="store",
dest="port",
help="api service port")
help="port of %(prog)s board")
parser.add_argument(
"-t",
"--host",
type=str,
default=default_host,
action="store",
help="api service ip")
help="bind %(prog)s board to ip/host")
parser.add_argument(
"--model",
type=str,
action="store",
dest="model",
default="",
help="model file path")
parser.add_argument(
"--cache_timeout",
"--cache-timeout",
action="store",
dest="cache_timeout",
type=float,
default=default_cache_timeout,
help="memory cache timeout duration in seconds, default 20", )
help="memory cache timeout duration in seconds (default: %(default)s)", )
parser.add_argument(
"-L",
"--language",
type=str,
action="store",
default=None,
help="set the default language")
help="specify the default language")
parser.add_argument(
"-P",
"--public-path",
type=str,
action="store",
dest="public_path",
default=None,
help="set public path"
)
parser.add_argument(
"-A",
"--api-only",
action="store_true",
dest="api_only",
default=False,
help="serve api only"
)
parser.add_argument(
"--verbose",
"-v",
action="count",
default=0,
help="set log level, use -vvv... to get more information"
)
parser.add_argument(
"--version",
action="version",
version="%(prog)s {}".format(__version__)
)
args = parser.parse_args()
return format_args(args)
init_logger(args.verbose)
return vars(args)
......@@ -15,8 +15,23 @@
import logging
logger = logging
logger.basicConfig(
format='[%(levelname)s %(asctime)s %(filename)s:%(lineno)s] %(message)s')
logger.getLogger().setLevel(logging.INFO)
logger = logging.getLogger()
handler = logging.StreamHandler()
handler.setFormatter(logging.Formatter('[%(levelname)s %(asctime)s %(filename)s:%(lineno)s] %(message)s'))
logger.addHandler(handler)
info_logger = logging.getLogger('visualdl.info')
info_logger.setLevel(logging.INFO)
info_handler = logging.StreamHandler()
info_handler.setFormatter(logging.Formatter('%(message)s'))
info_logger.addHandler(info_handler)
info_logger.propagate = False
info = info_logger.info
def init_logger(verbose):
level = max(logging.ERROR - verbose * 10, logging.NOTSET)
logger.setLevel(level)
logging.getLogger('werkzeug').setLevel(level)
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册