diff --git a/frontend/.eslintrc.js b/frontend/.eslintrc.js index a0a2a10d673052886d2120a2d3fe1f112027f799..c6c92f6fbb77b6f017b4081c3d689302ad5aa4d2 100644 --- a/frontend/.eslintrc.js +++ b/frontend/.eslintrc.js @@ -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', diff --git a/frontend/lerna.json b/frontend/lerna.json index 276e3500af59133a4c99ca295b5834b0fc48901e..d786ed5ebddc352a1d53d09916ce036c325e05e8 100644 --- a/frontend/lerna.json +++ b/frontend/lerna.json @@ -2,7 +2,7 @@ "packages": [ "packages/*" ], - "version": "2.0.0-beta.49", + "version": "2.0.0-beta.50", "npmClient": "yarn", "useWorkspaces": true, "command": { diff --git a/frontend/package.json b/frontend/package.json index 9ca0be489cf8c61b9104f1977470958f032354be..7d6de4095d93b7bda8e30d01fd78639d39f9614c 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -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", diff --git a/frontend/packages/cli/index.ts b/frontend/packages/cli/index.ts index 094fcf07b91348e7660c598d0c5e991cf2208688..e34528e88d0b6e9be85a81f6ef1699efb1925ac0 100755 --- a/frontend/packages/cli/index.ts +++ b/frontend/packages/cli/index.ts @@ -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 => { diff --git a/frontend/packages/cli/package.json b/frontend/packages/cli/package.json index b0e384d39f63492756f3b9595e093e9011fcac6c..09bc74bd919165f34388877ef902b9d43419dd9d 100644 --- a/frontend/packages/cli/package.json +++ b/frontend/packages/cli/package.json @@ -1,6 +1,6 @@ { "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", diff --git a/frontend/packages/core/components/RangeSlider.tsx b/frontend/packages/core/components/RangeSlider.tsx index 1922ca9f14e01866254619e9da467395651386e3..6712493170c496da7e271fb8846d1a0dcc62a2e9 100644 --- a/frontend/packages/core/components/RangeSlider.tsx +++ b/frontend/packages/core/components/RangeSlider.tsx @@ -11,8 +11,7 @@ import { primaryFocusedColor, sameBorder, size, - textLighterColor, - transitionProps + textLighterColor } from '~/utils/style'; import styled from 'styled-components'; diff --git a/frontend/packages/core/package.json b/frontend/packages/core/package.json index 4ebcea9a3b8992f684350971c7872cd3882098d0..7797e6ea5bd8dadb86417b21b9225b6610c0f9c5 100644 --- a/frontend/packages/core/package.json +++ b/frontend/packages/core/package.json @@ -1,6 +1,6 @@ { "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", diff --git a/frontend/packages/demo/.gitignore b/frontend/packages/demo/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..1269488f7fb1f4b56a8c0e5eb48cecbfadfa9219 --- /dev/null +++ b/frontend/packages/demo/.gitignore @@ -0,0 +1 @@ +data diff --git a/frontend/packages/demo/builder/audio.ts b/frontend/packages/demo/builder/audio.ts new file mode 100644 index 0000000000000000000000000000000000000000..14aa1b6cd0e04c897b4d94906b6e2ee251f9f7ec --- /dev/null +++ b/frontend/packages/demo/builder/audio.ts @@ -0,0 +1,25 @@ +import type {Worker} from './types'; + +interface Audio { + step: number; + wallTime: number; +} + +const worker: Worker = async io => { + const components = await io.getData('/components'); + if (!components.includes('audio')) { + return; + } + + const tagsMap = await io.save>('/audio/tags'); + for (const [run, tags] of Object.entries(tagsMap)) { + for (const tag of tags) { + const list = await io.save('/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; diff --git a/frontend/packages/demo/builder/common.ts b/frontend/packages/demo/builder/common.ts new file mode 100644 index 0000000000000000000000000000000000000000..087b1ebd101d2c5eb3e9cb430d16ef5bbd34ae8b --- /dev/null +++ b/frontend/packages/demo/builder/common.ts @@ -0,0 +1,8 @@ +import type {Worker} from './types'; + +const worker: Worker = async io => { + await io.save('/components'); + await io.save('/runs'); +}; + +export default worker; diff --git a/frontend/packages/demo/builder/graph.ts b/frontend/packages/demo/builder/graph.ts new file mode 100644 index 0000000000000000000000000000000000000000..fbbfc264f33cb264a49e38f89c34ff6b71088d50 --- /dev/null +++ b/frontend/packages/demo/builder/graph.ts @@ -0,0 +1,7 @@ +import type {Worker} from './types'; + +const worker: Worker = async io => { + await io.saveBinary('/graph/graph'); +}; + +export default worker; diff --git a/frontend/packages/demo/builder/high-dimensional.ts b/frontend/packages/demo/builder/high-dimensional.ts new file mode 100644 index 0000000000000000000000000000000000000000..9cee830ac6d902eec3ba3fd83111094d1ad27a39 --- /dev/null +++ b/frontend/packages/demo/builder/high-dimensional.ts @@ -0,0 +1,12 @@ +import type {Worker} from './types'; + +const worker: Worker = async io => { + const components = await io.getData('/components'); + if (!components.includes('embeddings')) { + return; + } + + // await io.save>('/embedding/embedding'); +}; + +export default worker; diff --git a/frontend/packages/demo/builder/histogram.ts b/frontend/packages/demo/builder/histogram.ts new file mode 100644 index 0000000000000000000000000000000000000000..cc40033458e820e801d252910099bfcead708326 --- /dev/null +++ b/frontend/packages/demo/builder/histogram.ts @@ -0,0 +1,19 @@ +import type {Worker} from './types'; + +const worker: Worker = async io => { + const components = await io.getData('/components'); + if (!components.includes('histogram')) { + return; + } + + const tagsMap = await io.save>('/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; diff --git a/frontend/packages/demo/builder/image.ts b/frontend/packages/demo/builder/image.ts new file mode 100644 index 0000000000000000000000000000000000000000..75b467707940d44a48a74dbd16b538d0aab1cea4 --- /dev/null +++ b/frontend/packages/demo/builder/image.ts @@ -0,0 +1,25 @@ +import type {Worker} from './types'; + +interface Image { + step: number; + wallTime: number; +} + +const worker: Worker = async io => { + const components = await io.getData('/components'); + if (!components.includes('image')) { + return; + } + + const tagsMap = await io.save>('/image/tags'); + for (const [run, tags] of Object.entries(tagsMap)) { + for (const tag of tags) { + const list = await io.save('/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; diff --git a/frontend/packages/demo/builder/index.ts b/frontend/packages/demo/builder/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..0903ad19788cee5a5d97913752f7660130b76f62 --- /dev/null +++ b/frontend/packages/demo/builder/index.ts @@ -0,0 +1,81 @@ +/* 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(); diff --git a/frontend/packages/demo/builder/io.ts b/frontend/packages/demo/builder/io.ts new file mode 100644 index 0000000000000000000000000000000000000000..df1801686c700d1c5da4901c07b471c949cf22b1 --- /dev/null +++ b/frontend/packages/demo/builder/io.ts @@ -0,0 +1,202 @@ +/* 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 | null; + +interface WriteOptions { + type?: 'json' | 'buffer'; +} + +interface MetaData { + uri: string; + query?: Record; + filename: string; + headers: Record; +} + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +interface ResponseData { + status: number; + msg?: string; + data: T; +} + +function isEmpty(obj: Record | 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, url2: Pick) { + 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>((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 | 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(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 | ArrayBuffer; + if (type === 'buffer') { + content = await response.buffer(); + } else { + content = (await response.json()) as ResponseData; + } + 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(uri: string, query?: Query) { + return ((await this.fetchAndWrite(uri, query, 'json')) as ResponseData).data; + } + + async saveBinary(uri: string, query?: Query) { + return (await this.fetchAndWrite(uri, query, 'buffer')) as Buffer; + } + + async getData(uri: string, query?: Query) { + return ((await (await this.fetch(uri, query)).json()) as ResponseData).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); + }); + } +} diff --git a/frontend/packages/demo/builder/pr-curve.ts b/frontend/packages/demo/builder/pr-curve.ts new file mode 100644 index 0000000000000000000000000000000000000000..37dd25ae40bbba5fc342bf9ccd2d5b3363be9552 --- /dev/null +++ b/frontend/packages/demo/builder/pr-curve.ts @@ -0,0 +1,18 @@ +import type {Worker} from './types'; + +const worker: Worker = async io => { + const components = await io.getData('/components'); + if (!components.includes('pr_curve')) { + return; + } + + const tagsMap = await io.save>('/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; diff --git a/frontend/packages/demo/builder/scalar.ts b/frontend/packages/demo/builder/scalar.ts new file mode 100644 index 0000000000000000000000000000000000000000..7db3e49397a12f2a777a8fd70138dea019b9fcaf --- /dev/null +++ b/frontend/packages/demo/builder/scalar.ts @@ -0,0 +1,19 @@ +import type {Worker} from './types'; + +const worker: Worker = async io => { + const components = await io.getData('/components'); + if (!components.includes('scalar')) { + return; + } + + const tagsMap = await io.save>('/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; diff --git a/frontend/packages/demo/builder/types.ts b/frontend/packages/demo/builder/types.ts new file mode 100644 index 0000000000000000000000000000000000000000..9dc6765e76ba19beabd8e8466b23b845f7341cf4 --- /dev/null +++ b/frontend/packages/demo/builder/types.ts @@ -0,0 +1,3 @@ +import type IO from './io'; + +export type Worker = (io: IO) => Promise; diff --git a/frontend/packages/demo/index.ts b/frontend/packages/demo/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..da4eeb495e39de3b32b516d813d888713683790f --- /dev/null +++ b/frontend/packages/demo/index.ts @@ -0,0 +1,32 @@ +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}) + ); + + if (!data) { + return notFound(res); + } + + res.sendFile(path.join(__dirname, 'data/data', data.uri, data.filename), { + headers: data.headers + }); +}; diff --git a/frontend/packages/demo/logs/graph/__model__ b/frontend/packages/demo/logs/graph/__model__ new file mode 100644 index 0000000000000000000000000000000000000000..4aca84a3831e9d66628035387ef8b3f0e3b030ae Binary files /dev/null and b/frontend/packages/demo/logs/graph/__model__ differ diff --git a/frontend/packages/demo/logs/graph/conv1_bn_mean b/frontend/packages/demo/logs/graph/conv1_bn_mean new file mode 100644 index 0000000000000000000000000000000000000000..5f0b72547355b5b115555c4017178f0c849f6fcf Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv1_bn_mean differ diff --git a/frontend/packages/demo/logs/graph/conv1_bn_offset b/frontend/packages/demo/logs/graph/conv1_bn_offset new file mode 100644 index 0000000000000000000000000000000000000000..1aa97c2ff0af67c90ad54b26f8073ceb0c8e2933 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv1_bn_offset differ diff --git a/frontend/packages/demo/logs/graph/conv1_bn_scale b/frontend/packages/demo/logs/graph/conv1_bn_scale new file mode 100644 index 0000000000000000000000000000000000000000..bc4c96c0c5a991ce811ab8f68ca88b986c6b6b9d Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv1_bn_scale differ diff --git a/frontend/packages/demo/logs/graph/conv1_bn_variance b/frontend/packages/demo/logs/graph/conv1_bn_variance new file mode 100644 index 0000000000000000000000000000000000000000..84b3fff45805ae5b61d2c2de8f3d40d72400630e Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv1_bn_variance differ diff --git a/frontend/packages/demo/logs/graph/conv1_weights b/frontend/packages/demo/logs/graph/conv1_weights new file mode 100644 index 0000000000000000000000000000000000000000..51de49e90c03d05681d351463d684f70f0c05192 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv1_weights differ diff --git a/frontend/packages/demo/logs/graph/conv2_1_dw_bn_mean b/frontend/packages/demo/logs/graph/conv2_1_dw_bn_mean new file mode 100644 index 0000000000000000000000000000000000000000..ac33b69081fdaf55adfbe528ea900967864c5e37 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv2_1_dw_bn_mean differ diff --git a/frontend/packages/demo/logs/graph/conv2_1_dw_bn_offset b/frontend/packages/demo/logs/graph/conv2_1_dw_bn_offset new file mode 100644 index 0000000000000000000000000000000000000000..2a3f79f404cf804a0db537a840ad78d03902fa2a Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv2_1_dw_bn_offset differ diff --git a/frontend/packages/demo/logs/graph/conv2_1_dw_bn_scale b/frontend/packages/demo/logs/graph/conv2_1_dw_bn_scale new file mode 100644 index 0000000000000000000000000000000000000000..beb303535164daa4002e9dbf8c84419430c39037 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv2_1_dw_bn_scale differ diff --git a/frontend/packages/demo/logs/graph/conv2_1_dw_bn_variance b/frontend/packages/demo/logs/graph/conv2_1_dw_bn_variance new file mode 100644 index 0000000000000000000000000000000000000000..a4b3a33c2b11900fdb582ace6a8a4745a9b413d8 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv2_1_dw_bn_variance differ diff --git a/frontend/packages/demo/logs/graph/conv2_1_dw_weights b/frontend/packages/demo/logs/graph/conv2_1_dw_weights new file mode 100644 index 0000000000000000000000000000000000000000..7886924897ca9ba614d1d6d9c49db91bf0cd71ab Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv2_1_dw_weights differ diff --git a/frontend/packages/demo/logs/graph/conv2_1_sep_bn_mean b/frontend/packages/demo/logs/graph/conv2_1_sep_bn_mean new file mode 100644 index 0000000000000000000000000000000000000000..d97d59c81c3056f5aec3fcbd1d6fee74d00f596a Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv2_1_sep_bn_mean differ diff --git a/frontend/packages/demo/logs/graph/conv2_1_sep_bn_offset b/frontend/packages/demo/logs/graph/conv2_1_sep_bn_offset new file mode 100644 index 0000000000000000000000000000000000000000..b4683390eaa9627e9693cdecc708c582eed43de2 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv2_1_sep_bn_offset differ diff --git a/frontend/packages/demo/logs/graph/conv2_1_sep_bn_scale b/frontend/packages/demo/logs/graph/conv2_1_sep_bn_scale new file mode 100644 index 0000000000000000000000000000000000000000..a8106ef57099509875d74666037156bff4b8715e Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv2_1_sep_bn_scale differ diff --git a/frontend/packages/demo/logs/graph/conv2_1_sep_bn_variance b/frontend/packages/demo/logs/graph/conv2_1_sep_bn_variance new file mode 100644 index 0000000000000000000000000000000000000000..8a97067c7366481106b6eaa0a41e867d0d8d2751 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv2_1_sep_bn_variance differ diff --git a/frontend/packages/demo/logs/graph/conv2_1_sep_weights b/frontend/packages/demo/logs/graph/conv2_1_sep_weights new file mode 100644 index 0000000000000000000000000000000000000000..37961176512415c167f9be4185e616bde111ebd5 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv2_1_sep_weights differ diff --git a/frontend/packages/demo/logs/graph/conv2_2_dw_bn_mean b/frontend/packages/demo/logs/graph/conv2_2_dw_bn_mean new file mode 100644 index 0000000000000000000000000000000000000000..c3b751903c49c7083b33cb6b1e713564380747b7 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv2_2_dw_bn_mean differ diff --git a/frontend/packages/demo/logs/graph/conv2_2_dw_bn_offset b/frontend/packages/demo/logs/graph/conv2_2_dw_bn_offset new file mode 100644 index 0000000000000000000000000000000000000000..2cb03407698f7d728bad8178946701938404e336 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv2_2_dw_bn_offset differ diff --git a/frontend/packages/demo/logs/graph/conv2_2_dw_bn_scale b/frontend/packages/demo/logs/graph/conv2_2_dw_bn_scale new file mode 100644 index 0000000000000000000000000000000000000000..3676bb4c49ce79d5d985e3959f4c3655ad2dfdcd Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv2_2_dw_bn_scale differ diff --git a/frontend/packages/demo/logs/graph/conv2_2_dw_bn_variance b/frontend/packages/demo/logs/graph/conv2_2_dw_bn_variance new file mode 100644 index 0000000000000000000000000000000000000000..5aa6c98a3e81b3cba9be8e5a92f4b2ae1b20f1c8 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv2_2_dw_bn_variance differ diff --git a/frontend/packages/demo/logs/graph/conv2_2_dw_weights b/frontend/packages/demo/logs/graph/conv2_2_dw_weights new file mode 100644 index 0000000000000000000000000000000000000000..e2ccdda5115e1f915b35700459df4ce64bd477f5 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv2_2_dw_weights differ diff --git a/frontend/packages/demo/logs/graph/conv2_2_sep_bn_mean b/frontend/packages/demo/logs/graph/conv2_2_sep_bn_mean new file mode 100644 index 0000000000000000000000000000000000000000..33d00c41ba6009ebb947c67a325a0d805d64f395 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv2_2_sep_bn_mean differ diff --git a/frontend/packages/demo/logs/graph/conv2_2_sep_bn_offset b/frontend/packages/demo/logs/graph/conv2_2_sep_bn_offset new file mode 100644 index 0000000000000000000000000000000000000000..a1648af7e5b22e42fddffc9798ea8ebffe3c546b Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv2_2_sep_bn_offset differ diff --git a/frontend/packages/demo/logs/graph/conv2_2_sep_bn_scale b/frontend/packages/demo/logs/graph/conv2_2_sep_bn_scale new file mode 100644 index 0000000000000000000000000000000000000000..bfc456aa851c282c4eff3c13be943c243cb8d543 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv2_2_sep_bn_scale differ diff --git a/frontend/packages/demo/logs/graph/conv2_2_sep_bn_variance b/frontend/packages/demo/logs/graph/conv2_2_sep_bn_variance new file mode 100644 index 0000000000000000000000000000000000000000..c4dc887ea753ba7df16ae6c77ee69cb80d27e393 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv2_2_sep_bn_variance differ diff --git a/frontend/packages/demo/logs/graph/conv2_2_sep_weights b/frontend/packages/demo/logs/graph/conv2_2_sep_weights new file mode 100644 index 0000000000000000000000000000000000000000..430839922ad84c83a4a8dc47f5ebf7bd191adec5 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv2_2_sep_weights differ diff --git a/frontend/packages/demo/logs/graph/conv3_1_dw_bn_mean b/frontend/packages/demo/logs/graph/conv3_1_dw_bn_mean new file mode 100644 index 0000000000000000000000000000000000000000..1c16b255fb99508c83b233f3e483cd7f7008f025 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv3_1_dw_bn_mean differ diff --git a/frontend/packages/demo/logs/graph/conv3_1_dw_bn_offset b/frontend/packages/demo/logs/graph/conv3_1_dw_bn_offset new file mode 100644 index 0000000000000000000000000000000000000000..254fc4e09b7d20d71a3f0f106310d60e456e9a22 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv3_1_dw_bn_offset differ diff --git a/frontend/packages/demo/logs/graph/conv3_1_dw_bn_scale b/frontend/packages/demo/logs/graph/conv3_1_dw_bn_scale new file mode 100644 index 0000000000000000000000000000000000000000..825d76b343e5a5d4f1baf4a7dfb0c3d721195f87 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv3_1_dw_bn_scale differ diff --git a/frontend/packages/demo/logs/graph/conv3_1_dw_bn_variance b/frontend/packages/demo/logs/graph/conv3_1_dw_bn_variance new file mode 100644 index 0000000000000000000000000000000000000000..eef3896a630a562d4e17fe68fbc27ab75daef9b3 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv3_1_dw_bn_variance differ diff --git a/frontend/packages/demo/logs/graph/conv3_1_dw_weights b/frontend/packages/demo/logs/graph/conv3_1_dw_weights new file mode 100644 index 0000000000000000000000000000000000000000..972f70ef38b536469973832644aedad1120b86ec Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv3_1_dw_weights differ diff --git a/frontend/packages/demo/logs/graph/conv3_1_sep_bn_mean b/frontend/packages/demo/logs/graph/conv3_1_sep_bn_mean new file mode 100644 index 0000000000000000000000000000000000000000..8841e0de5c5bd67f2f9eabee2f66fe2889a4d947 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv3_1_sep_bn_mean differ diff --git a/frontend/packages/demo/logs/graph/conv3_1_sep_bn_offset b/frontend/packages/demo/logs/graph/conv3_1_sep_bn_offset new file mode 100644 index 0000000000000000000000000000000000000000..d15b6d3ca7746d62b4c28837a5235406481f6280 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv3_1_sep_bn_offset differ diff --git a/frontend/packages/demo/logs/graph/conv3_1_sep_bn_scale b/frontend/packages/demo/logs/graph/conv3_1_sep_bn_scale new file mode 100644 index 0000000000000000000000000000000000000000..fecb7c75f4bd43f4075ab5d2faddfeed09e78927 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv3_1_sep_bn_scale differ diff --git a/frontend/packages/demo/logs/graph/conv3_1_sep_bn_variance b/frontend/packages/demo/logs/graph/conv3_1_sep_bn_variance new file mode 100644 index 0000000000000000000000000000000000000000..bb4b03b09db47569e4e69605e854543d4a59a141 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv3_1_sep_bn_variance differ diff --git a/frontend/packages/demo/logs/graph/conv3_1_sep_weights b/frontend/packages/demo/logs/graph/conv3_1_sep_weights new file mode 100644 index 0000000000000000000000000000000000000000..1621b18a60f6ca121f40771098084fe3bb93b6a1 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv3_1_sep_weights differ diff --git a/frontend/packages/demo/logs/graph/conv3_2_dw_bn_mean b/frontend/packages/demo/logs/graph/conv3_2_dw_bn_mean new file mode 100644 index 0000000000000000000000000000000000000000..44f950a037d952ff77f1dc6ecd8fde736705f4cd Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv3_2_dw_bn_mean differ diff --git a/frontend/packages/demo/logs/graph/conv3_2_dw_bn_offset b/frontend/packages/demo/logs/graph/conv3_2_dw_bn_offset new file mode 100644 index 0000000000000000000000000000000000000000..9e23861743f6627dc4e2bd1ed61f33b507a3cece Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv3_2_dw_bn_offset differ diff --git a/frontend/packages/demo/logs/graph/conv3_2_dw_bn_scale b/frontend/packages/demo/logs/graph/conv3_2_dw_bn_scale new file mode 100644 index 0000000000000000000000000000000000000000..460f83399d22a9d1a60a1dc5f71d04e3d9eb0d40 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv3_2_dw_bn_scale differ diff --git a/frontend/packages/demo/logs/graph/conv3_2_dw_bn_variance b/frontend/packages/demo/logs/graph/conv3_2_dw_bn_variance new file mode 100644 index 0000000000000000000000000000000000000000..9446fe5c1dd8f7232cbd51bdf6c0b43b021f3d7c Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv3_2_dw_bn_variance differ diff --git a/frontend/packages/demo/logs/graph/conv3_2_dw_weights b/frontend/packages/demo/logs/graph/conv3_2_dw_weights new file mode 100644 index 0000000000000000000000000000000000000000..8e803b1f032642b78c4fc04c607f9fa836d3fe04 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv3_2_dw_weights differ diff --git a/frontend/packages/demo/logs/graph/conv3_2_sep_bn_mean b/frontend/packages/demo/logs/graph/conv3_2_sep_bn_mean new file mode 100644 index 0000000000000000000000000000000000000000..390ccb25bf590acfdf51d20795006f445c96f95b Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv3_2_sep_bn_mean differ diff --git a/frontend/packages/demo/logs/graph/conv3_2_sep_bn_offset b/frontend/packages/demo/logs/graph/conv3_2_sep_bn_offset new file mode 100644 index 0000000000000000000000000000000000000000..6aa592a57df92d125a16b123f2511eed9a162652 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv3_2_sep_bn_offset differ diff --git a/frontend/packages/demo/logs/graph/conv3_2_sep_bn_scale b/frontend/packages/demo/logs/graph/conv3_2_sep_bn_scale new file mode 100644 index 0000000000000000000000000000000000000000..5e4abd2ad0806cec579c10c2382d9f359d9916f5 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv3_2_sep_bn_scale differ diff --git a/frontend/packages/demo/logs/graph/conv3_2_sep_bn_variance b/frontend/packages/demo/logs/graph/conv3_2_sep_bn_variance new file mode 100644 index 0000000000000000000000000000000000000000..72a3831d8fc60c7b26640f8208c82bcff98d551e Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv3_2_sep_bn_variance differ diff --git a/frontend/packages/demo/logs/graph/conv3_2_sep_weights b/frontend/packages/demo/logs/graph/conv3_2_sep_weights new file mode 100644 index 0000000000000000000000000000000000000000..802103b5a5a801a5065bc038d2e150b100cfdd99 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv3_2_sep_weights differ diff --git a/frontend/packages/demo/logs/graph/conv4_1_dw_bn_mean b/frontend/packages/demo/logs/graph/conv4_1_dw_bn_mean new file mode 100644 index 0000000000000000000000000000000000000000..3b5e0448fd184fa7047ca2ba146cca87299b574a Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv4_1_dw_bn_mean differ diff --git a/frontend/packages/demo/logs/graph/conv4_1_dw_bn_offset b/frontend/packages/demo/logs/graph/conv4_1_dw_bn_offset new file mode 100644 index 0000000000000000000000000000000000000000..1943e8b6c4a4f58881811eebd20a33ce4b0f1346 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv4_1_dw_bn_offset differ diff --git a/frontend/packages/demo/logs/graph/conv4_1_dw_bn_scale b/frontend/packages/demo/logs/graph/conv4_1_dw_bn_scale new file mode 100644 index 0000000000000000000000000000000000000000..ef8eb06630e593d7046be23dd2e1faf14699440d Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv4_1_dw_bn_scale differ diff --git a/frontend/packages/demo/logs/graph/conv4_1_dw_bn_variance b/frontend/packages/demo/logs/graph/conv4_1_dw_bn_variance new file mode 100644 index 0000000000000000000000000000000000000000..1ace6eb957483e2ccf642d5be93b1b818fccc150 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv4_1_dw_bn_variance differ diff --git a/frontend/packages/demo/logs/graph/conv4_1_dw_weights b/frontend/packages/demo/logs/graph/conv4_1_dw_weights new file mode 100644 index 0000000000000000000000000000000000000000..d549405476a7888a624363822aeed2449660b33f Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv4_1_dw_weights differ diff --git a/frontend/packages/demo/logs/graph/conv4_1_sep_bn_mean b/frontend/packages/demo/logs/graph/conv4_1_sep_bn_mean new file mode 100644 index 0000000000000000000000000000000000000000..2dd46e8e18b48ebbb4e47ae3ddce47a5806b4fee Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv4_1_sep_bn_mean differ diff --git a/frontend/packages/demo/logs/graph/conv4_1_sep_bn_offset b/frontend/packages/demo/logs/graph/conv4_1_sep_bn_offset new file mode 100644 index 0000000000000000000000000000000000000000..dd68e12f5c8b1f9d59a62db863f98e43f9a98af7 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv4_1_sep_bn_offset differ diff --git a/frontend/packages/demo/logs/graph/conv4_1_sep_bn_scale b/frontend/packages/demo/logs/graph/conv4_1_sep_bn_scale new file mode 100644 index 0000000000000000000000000000000000000000..00bb8fb694e78e745da6ea3258a2e0e076ac8c23 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv4_1_sep_bn_scale differ diff --git a/frontend/packages/demo/logs/graph/conv4_1_sep_bn_variance b/frontend/packages/demo/logs/graph/conv4_1_sep_bn_variance new file mode 100644 index 0000000000000000000000000000000000000000..b86bcdda34b45b142824c98be1017f537e9d0f62 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv4_1_sep_bn_variance differ diff --git a/frontend/packages/demo/logs/graph/conv4_1_sep_weights b/frontend/packages/demo/logs/graph/conv4_1_sep_weights new file mode 100644 index 0000000000000000000000000000000000000000..7a63d271d41cb8950de098164d99181f8d98922c Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv4_1_sep_weights differ diff --git a/frontend/packages/demo/logs/graph/conv4_2_dw_bn_mean b/frontend/packages/demo/logs/graph/conv4_2_dw_bn_mean new file mode 100644 index 0000000000000000000000000000000000000000..e022639e7c1b5403193ae0746cc1147186304849 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv4_2_dw_bn_mean differ diff --git a/frontend/packages/demo/logs/graph/conv4_2_dw_bn_offset b/frontend/packages/demo/logs/graph/conv4_2_dw_bn_offset new file mode 100644 index 0000000000000000000000000000000000000000..7faab4c02cb130f656feec3cea204a1e11a5b952 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv4_2_dw_bn_offset differ diff --git a/frontend/packages/demo/logs/graph/conv4_2_dw_bn_scale b/frontend/packages/demo/logs/graph/conv4_2_dw_bn_scale new file mode 100644 index 0000000000000000000000000000000000000000..0956ccf9ee539a5881785f35884396211cdad056 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv4_2_dw_bn_scale differ diff --git a/frontend/packages/demo/logs/graph/conv4_2_dw_bn_variance b/frontend/packages/demo/logs/graph/conv4_2_dw_bn_variance new file mode 100644 index 0000000000000000000000000000000000000000..1d1bb53af7d5a9ef0fa2cfe1301f824ce4fdbc54 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv4_2_dw_bn_variance differ diff --git a/frontend/packages/demo/logs/graph/conv4_2_dw_weights b/frontend/packages/demo/logs/graph/conv4_2_dw_weights new file mode 100644 index 0000000000000000000000000000000000000000..f1f3cba900a742adad2e201270b4dfdc4f6c9daf Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv4_2_dw_weights differ diff --git a/frontend/packages/demo/logs/graph/conv4_2_sep_bn_mean b/frontend/packages/demo/logs/graph/conv4_2_sep_bn_mean new file mode 100644 index 0000000000000000000000000000000000000000..1822e575fbb9bb1197cd4286d54077a074e0b0e1 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv4_2_sep_bn_mean differ diff --git a/frontend/packages/demo/logs/graph/conv4_2_sep_bn_offset b/frontend/packages/demo/logs/graph/conv4_2_sep_bn_offset new file mode 100644 index 0000000000000000000000000000000000000000..dcfae204263def15eb45c55b8733270af4a40f87 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv4_2_sep_bn_offset differ diff --git a/frontend/packages/demo/logs/graph/conv4_2_sep_bn_scale b/frontend/packages/demo/logs/graph/conv4_2_sep_bn_scale new file mode 100644 index 0000000000000000000000000000000000000000..9c636e94eaec7fed5ba9dac56ec389fc87c5e604 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv4_2_sep_bn_scale differ diff --git a/frontend/packages/demo/logs/graph/conv4_2_sep_bn_variance b/frontend/packages/demo/logs/graph/conv4_2_sep_bn_variance new file mode 100644 index 0000000000000000000000000000000000000000..179679f4eaecf01481bbea612278aa6ae88b521a Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv4_2_sep_bn_variance differ diff --git a/frontend/packages/demo/logs/graph/conv4_2_sep_weights b/frontend/packages/demo/logs/graph/conv4_2_sep_weights new file mode 100644 index 0000000000000000000000000000000000000000..ae6d23ac155305fccdf6b7fac74c274fc8d0f3c3 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv4_2_sep_weights differ diff --git a/frontend/packages/demo/logs/graph/conv5_1_dw_bn_mean b/frontend/packages/demo/logs/graph/conv5_1_dw_bn_mean new file mode 100644 index 0000000000000000000000000000000000000000..0c42cacbcdb0f470fb935a6326a893cfab001284 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_1_dw_bn_mean differ diff --git a/frontend/packages/demo/logs/graph/conv5_1_dw_bn_offset b/frontend/packages/demo/logs/graph/conv5_1_dw_bn_offset new file mode 100644 index 0000000000000000000000000000000000000000..df066ff02e7e680301d7dbf8af751d36fe673b77 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_1_dw_bn_offset differ diff --git a/frontend/packages/demo/logs/graph/conv5_1_dw_bn_scale b/frontend/packages/demo/logs/graph/conv5_1_dw_bn_scale new file mode 100644 index 0000000000000000000000000000000000000000..d0801d8fd126db0974772b5142dce3f0f0487b76 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_1_dw_bn_scale differ diff --git a/frontend/packages/demo/logs/graph/conv5_1_dw_bn_variance b/frontend/packages/demo/logs/graph/conv5_1_dw_bn_variance new file mode 100644 index 0000000000000000000000000000000000000000..829bc7e3714ae46e463125186908634f080edf5a Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_1_dw_bn_variance differ diff --git a/frontend/packages/demo/logs/graph/conv5_1_dw_weights b/frontend/packages/demo/logs/graph/conv5_1_dw_weights new file mode 100644 index 0000000000000000000000000000000000000000..b5f43a15234b1be781816bdbe0c7dbc1f3820789 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_1_dw_weights differ diff --git a/frontend/packages/demo/logs/graph/conv5_1_sep_bn_mean b/frontend/packages/demo/logs/graph/conv5_1_sep_bn_mean new file mode 100644 index 0000000000000000000000000000000000000000..e973eac3bf908528fcb5d624764403ba4563ceec Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_1_sep_bn_mean differ diff --git a/frontend/packages/demo/logs/graph/conv5_1_sep_bn_offset b/frontend/packages/demo/logs/graph/conv5_1_sep_bn_offset new file mode 100644 index 0000000000000000000000000000000000000000..6387d00131af9c9e076d8e11cf3ea7f8fc899b73 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_1_sep_bn_offset differ diff --git a/frontend/packages/demo/logs/graph/conv5_1_sep_bn_scale b/frontend/packages/demo/logs/graph/conv5_1_sep_bn_scale new file mode 100644 index 0000000000000000000000000000000000000000..d520622c1f0c1b78a2036ef6a3da3ddcaada193b Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_1_sep_bn_scale differ diff --git a/frontend/packages/demo/logs/graph/conv5_1_sep_bn_variance b/frontend/packages/demo/logs/graph/conv5_1_sep_bn_variance new file mode 100644 index 0000000000000000000000000000000000000000..4f8d0c106c67a5fca6c68ab1a89627ea3d3bcbed Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_1_sep_bn_variance differ diff --git a/frontend/packages/demo/logs/graph/conv5_1_sep_weights b/frontend/packages/demo/logs/graph/conv5_1_sep_weights new file mode 100644 index 0000000000000000000000000000000000000000..fd80626996dfa6d2f5fcadadfe5e25584cc2c03c Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_1_sep_weights differ diff --git a/frontend/packages/demo/logs/graph/conv5_2_dw_bn_mean b/frontend/packages/demo/logs/graph/conv5_2_dw_bn_mean new file mode 100644 index 0000000000000000000000000000000000000000..5b9624c7cff5e9dab3951ed06afda19cab4f67d1 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_2_dw_bn_mean differ diff --git a/frontend/packages/demo/logs/graph/conv5_2_dw_bn_offset b/frontend/packages/demo/logs/graph/conv5_2_dw_bn_offset new file mode 100644 index 0000000000000000000000000000000000000000..82ce0bb4b824e38be50de7c5f78737a702fc64fd Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_2_dw_bn_offset differ diff --git a/frontend/packages/demo/logs/graph/conv5_2_dw_bn_scale b/frontend/packages/demo/logs/graph/conv5_2_dw_bn_scale new file mode 100644 index 0000000000000000000000000000000000000000..edb122374ba3314018a4b8c3d2e03030643e4af9 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_2_dw_bn_scale differ diff --git a/frontend/packages/demo/logs/graph/conv5_2_dw_bn_variance b/frontend/packages/demo/logs/graph/conv5_2_dw_bn_variance new file mode 100644 index 0000000000000000000000000000000000000000..f8fab93287e4354239e87c5cd9ee2af3f35668ae Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_2_dw_bn_variance differ diff --git a/frontend/packages/demo/logs/graph/conv5_2_dw_weights b/frontend/packages/demo/logs/graph/conv5_2_dw_weights new file mode 100644 index 0000000000000000000000000000000000000000..5dbc0d522cac1c627833a6bd0e9524f936bba520 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_2_dw_weights differ diff --git a/frontend/packages/demo/logs/graph/conv5_2_sep_bn_mean b/frontend/packages/demo/logs/graph/conv5_2_sep_bn_mean new file mode 100644 index 0000000000000000000000000000000000000000..3455f198ebd6699a955f0e0267098e3e6c8dd83e Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_2_sep_bn_mean differ diff --git a/frontend/packages/demo/logs/graph/conv5_2_sep_bn_offset b/frontend/packages/demo/logs/graph/conv5_2_sep_bn_offset new file mode 100644 index 0000000000000000000000000000000000000000..ee1f118ff138189321f71b0fb483c19f4fdedec3 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_2_sep_bn_offset differ diff --git a/frontend/packages/demo/logs/graph/conv5_2_sep_bn_scale b/frontend/packages/demo/logs/graph/conv5_2_sep_bn_scale new file mode 100644 index 0000000000000000000000000000000000000000..7bb2757aa8d61d84829c608a1c8a2ca59bb6b990 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_2_sep_bn_scale differ diff --git a/frontend/packages/demo/logs/graph/conv5_2_sep_bn_variance b/frontend/packages/demo/logs/graph/conv5_2_sep_bn_variance new file mode 100644 index 0000000000000000000000000000000000000000..387aaa0336d5099183fb231ca5e18eb330f780a6 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_2_sep_bn_variance differ diff --git a/frontend/packages/demo/logs/graph/conv5_2_sep_weights b/frontend/packages/demo/logs/graph/conv5_2_sep_weights new file mode 100644 index 0000000000000000000000000000000000000000..9a302d3c8c69e60022fb93fe4e9580c06d677548 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_2_sep_weights differ diff --git a/frontend/packages/demo/logs/graph/conv5_3_dw_bn_mean b/frontend/packages/demo/logs/graph/conv5_3_dw_bn_mean new file mode 100644 index 0000000000000000000000000000000000000000..313df9c4af77095f42d3dca5771855f768c6d2ec Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_3_dw_bn_mean differ diff --git a/frontend/packages/demo/logs/graph/conv5_3_dw_bn_offset b/frontend/packages/demo/logs/graph/conv5_3_dw_bn_offset new file mode 100644 index 0000000000000000000000000000000000000000..17558e6e65d2e4f80f2438c4658388f76a663e48 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_3_dw_bn_offset differ diff --git a/frontend/packages/demo/logs/graph/conv5_3_dw_bn_scale b/frontend/packages/demo/logs/graph/conv5_3_dw_bn_scale new file mode 100644 index 0000000000000000000000000000000000000000..63002edc16c51d9e1504536d7ea3c33ab51746a8 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_3_dw_bn_scale differ diff --git a/frontend/packages/demo/logs/graph/conv5_3_dw_bn_variance b/frontend/packages/demo/logs/graph/conv5_3_dw_bn_variance new file mode 100644 index 0000000000000000000000000000000000000000..f9c9ea1d48559c2f65daa4666b150c9fd4f37d21 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_3_dw_bn_variance differ diff --git a/frontend/packages/demo/logs/graph/conv5_3_dw_weights b/frontend/packages/demo/logs/graph/conv5_3_dw_weights new file mode 100644 index 0000000000000000000000000000000000000000..f137b063a803416f20bcea2551c323b158c430bc Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_3_dw_weights differ diff --git a/frontend/packages/demo/logs/graph/conv5_3_sep_bn_mean b/frontend/packages/demo/logs/graph/conv5_3_sep_bn_mean new file mode 100644 index 0000000000000000000000000000000000000000..2e9e35caed0adf7e0cbb84074cff82a0d59a40b3 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_3_sep_bn_mean differ diff --git a/frontend/packages/demo/logs/graph/conv5_3_sep_bn_offset b/frontend/packages/demo/logs/graph/conv5_3_sep_bn_offset new file mode 100644 index 0000000000000000000000000000000000000000..50304314ccd94496bf527e435c7bd8070f0c22c2 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_3_sep_bn_offset differ diff --git a/frontend/packages/demo/logs/graph/conv5_3_sep_bn_scale b/frontend/packages/demo/logs/graph/conv5_3_sep_bn_scale new file mode 100644 index 0000000000000000000000000000000000000000..89ad71a3e14a38757664bde045f46673707951d8 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_3_sep_bn_scale differ diff --git a/frontend/packages/demo/logs/graph/conv5_3_sep_bn_variance b/frontend/packages/demo/logs/graph/conv5_3_sep_bn_variance new file mode 100644 index 0000000000000000000000000000000000000000..bfe7f0f53f9023350efe6d9804eca860a95827be Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_3_sep_bn_variance differ diff --git a/frontend/packages/demo/logs/graph/conv5_3_sep_weights b/frontend/packages/demo/logs/graph/conv5_3_sep_weights new file mode 100644 index 0000000000000000000000000000000000000000..b32750ca0fbda2c84bf0212eb1a533c9ee82a174 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_3_sep_weights differ diff --git a/frontend/packages/demo/logs/graph/conv5_4_dw_bn_mean b/frontend/packages/demo/logs/graph/conv5_4_dw_bn_mean new file mode 100644 index 0000000000000000000000000000000000000000..4dad61ab781b09a78a84ef389620ef8ffa479ce1 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_4_dw_bn_mean differ diff --git a/frontend/packages/demo/logs/graph/conv5_4_dw_bn_offset b/frontend/packages/demo/logs/graph/conv5_4_dw_bn_offset new file mode 100644 index 0000000000000000000000000000000000000000..80b1ff48b05772df65477bd345be946164c937ca Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_4_dw_bn_offset differ diff --git a/frontend/packages/demo/logs/graph/conv5_4_dw_bn_scale b/frontend/packages/demo/logs/graph/conv5_4_dw_bn_scale new file mode 100644 index 0000000000000000000000000000000000000000..9f24d20cbeeb11c72831be16a42617f2b26edc32 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_4_dw_bn_scale differ diff --git a/frontend/packages/demo/logs/graph/conv5_4_dw_bn_variance b/frontend/packages/demo/logs/graph/conv5_4_dw_bn_variance new file mode 100644 index 0000000000000000000000000000000000000000..0a345df8a23df596477cbd20b3e566c67a5a8047 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_4_dw_bn_variance differ diff --git a/frontend/packages/demo/logs/graph/conv5_4_dw_weights b/frontend/packages/demo/logs/graph/conv5_4_dw_weights new file mode 100644 index 0000000000000000000000000000000000000000..d7ef117360e72a040ffb27abb61c9e9486517264 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_4_dw_weights differ diff --git a/frontend/packages/demo/logs/graph/conv5_4_sep_bn_mean b/frontend/packages/demo/logs/graph/conv5_4_sep_bn_mean new file mode 100644 index 0000000000000000000000000000000000000000..8db0cad54b5b27f5922407107c37a5764a3a0e94 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_4_sep_bn_mean differ diff --git a/frontend/packages/demo/logs/graph/conv5_4_sep_bn_offset b/frontend/packages/demo/logs/graph/conv5_4_sep_bn_offset new file mode 100644 index 0000000000000000000000000000000000000000..850834aaf3ffe711950b0d5d816ec59d783c06a7 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_4_sep_bn_offset differ diff --git a/frontend/packages/demo/logs/graph/conv5_4_sep_bn_scale b/frontend/packages/demo/logs/graph/conv5_4_sep_bn_scale new file mode 100644 index 0000000000000000000000000000000000000000..8a447d5622834435a10cb5c7c171d5ca011c84fd Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_4_sep_bn_scale differ diff --git a/frontend/packages/demo/logs/graph/conv5_4_sep_bn_variance b/frontend/packages/demo/logs/graph/conv5_4_sep_bn_variance new file mode 100644 index 0000000000000000000000000000000000000000..335e83e79cd3144c2fcf9ff24d287fb503219cbd Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_4_sep_bn_variance differ diff --git a/frontend/packages/demo/logs/graph/conv5_4_sep_weights b/frontend/packages/demo/logs/graph/conv5_4_sep_weights new file mode 100644 index 0000000000000000000000000000000000000000..f4388963a558251e96986dffbe0a2e8aa7ae8dcb Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_4_sep_weights differ diff --git a/frontend/packages/demo/logs/graph/conv5_5_dw_bn_mean b/frontend/packages/demo/logs/graph/conv5_5_dw_bn_mean new file mode 100644 index 0000000000000000000000000000000000000000..27307e6768f3e3e8a9c940f45ff7f6566c43f810 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_5_dw_bn_mean differ diff --git a/frontend/packages/demo/logs/graph/conv5_5_dw_bn_offset b/frontend/packages/demo/logs/graph/conv5_5_dw_bn_offset new file mode 100644 index 0000000000000000000000000000000000000000..bbe937bcaebfced1a23135dea1fc27af34ce1ec4 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_5_dw_bn_offset differ diff --git a/frontend/packages/demo/logs/graph/conv5_5_dw_bn_scale b/frontend/packages/demo/logs/graph/conv5_5_dw_bn_scale new file mode 100644 index 0000000000000000000000000000000000000000..3afb9e8712c1b41869122c346c3828dba13df8fe Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_5_dw_bn_scale differ diff --git a/frontend/packages/demo/logs/graph/conv5_5_dw_bn_variance b/frontend/packages/demo/logs/graph/conv5_5_dw_bn_variance new file mode 100644 index 0000000000000000000000000000000000000000..3e3e177fedd8a64a359cb6c12c70d9414c47916d Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_5_dw_bn_variance differ diff --git a/frontend/packages/demo/logs/graph/conv5_5_dw_weights b/frontend/packages/demo/logs/graph/conv5_5_dw_weights new file mode 100644 index 0000000000000000000000000000000000000000..d14c6e527610e054889505c9a18c7420d65daddf Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_5_dw_weights differ diff --git a/frontend/packages/demo/logs/graph/conv5_5_sep_bn_mean b/frontend/packages/demo/logs/graph/conv5_5_sep_bn_mean new file mode 100644 index 0000000000000000000000000000000000000000..21d2e95350fcc67c992e464bc56d17ec47122410 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_5_sep_bn_mean differ diff --git a/frontend/packages/demo/logs/graph/conv5_5_sep_bn_offset b/frontend/packages/demo/logs/graph/conv5_5_sep_bn_offset new file mode 100644 index 0000000000000000000000000000000000000000..f2a76fb1167b321175cb8a19df3e6936719fcd32 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_5_sep_bn_offset differ diff --git a/frontend/packages/demo/logs/graph/conv5_5_sep_bn_scale b/frontend/packages/demo/logs/graph/conv5_5_sep_bn_scale new file mode 100644 index 0000000000000000000000000000000000000000..bc1498e2f01652e5a6ea85f4bba6512946e82950 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_5_sep_bn_scale differ diff --git a/frontend/packages/demo/logs/graph/conv5_5_sep_bn_variance b/frontend/packages/demo/logs/graph/conv5_5_sep_bn_variance new file mode 100644 index 0000000000000000000000000000000000000000..2891139ea5cb806c96e754397297557960dcba97 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_5_sep_bn_variance differ diff --git a/frontend/packages/demo/logs/graph/conv5_5_sep_weights b/frontend/packages/demo/logs/graph/conv5_5_sep_weights new file mode 100644 index 0000000000000000000000000000000000000000..eebd73fc81f648b3e952b866f76edd9741966543 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_5_sep_weights differ diff --git a/frontend/packages/demo/logs/graph/conv5_6_dw_bn_mean b/frontend/packages/demo/logs/graph/conv5_6_dw_bn_mean new file mode 100644 index 0000000000000000000000000000000000000000..bb39408c1622804b326a6769d6b9b27cd0e81541 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_6_dw_bn_mean differ diff --git a/frontend/packages/demo/logs/graph/conv5_6_dw_bn_offset b/frontend/packages/demo/logs/graph/conv5_6_dw_bn_offset new file mode 100644 index 0000000000000000000000000000000000000000..84e23fe71cf81d7caec35c27f66a0bd00da194df Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_6_dw_bn_offset differ diff --git a/frontend/packages/demo/logs/graph/conv5_6_dw_bn_scale b/frontend/packages/demo/logs/graph/conv5_6_dw_bn_scale new file mode 100644 index 0000000000000000000000000000000000000000..d29f074eaf3d7db71c0cc85471b5b1afbe9aa126 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_6_dw_bn_scale differ diff --git a/frontend/packages/demo/logs/graph/conv5_6_dw_bn_variance b/frontend/packages/demo/logs/graph/conv5_6_dw_bn_variance new file mode 100644 index 0000000000000000000000000000000000000000..539e3414623fa5fcdd6680956abe450f41c4d3e5 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_6_dw_bn_variance differ diff --git a/frontend/packages/demo/logs/graph/conv5_6_dw_weights b/frontend/packages/demo/logs/graph/conv5_6_dw_weights new file mode 100644 index 0000000000000000000000000000000000000000..b8a0eb172338fcc3d6bddc8934e020438b46e83e Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_6_dw_weights differ diff --git a/frontend/packages/demo/logs/graph/conv5_6_sep_bn_mean b/frontend/packages/demo/logs/graph/conv5_6_sep_bn_mean new file mode 100644 index 0000000000000000000000000000000000000000..1a9fc78136ec01b2f650b565316e9944e3de4363 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_6_sep_bn_mean differ diff --git a/frontend/packages/demo/logs/graph/conv5_6_sep_bn_offset b/frontend/packages/demo/logs/graph/conv5_6_sep_bn_offset new file mode 100644 index 0000000000000000000000000000000000000000..7cb26618de9ffc498e58c956e97cadbb7eab0e98 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_6_sep_bn_offset differ diff --git a/frontend/packages/demo/logs/graph/conv5_6_sep_bn_scale b/frontend/packages/demo/logs/graph/conv5_6_sep_bn_scale new file mode 100644 index 0000000000000000000000000000000000000000..556c8a52ec9a01dd9e9fc2ba3c249a6580d21ec5 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_6_sep_bn_scale differ diff --git a/frontend/packages/demo/logs/graph/conv5_6_sep_bn_variance b/frontend/packages/demo/logs/graph/conv5_6_sep_bn_variance new file mode 100644 index 0000000000000000000000000000000000000000..79e797321024dd35f7264a1c20985f3e099ff1d1 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_6_sep_bn_variance differ diff --git a/frontend/packages/demo/logs/graph/conv5_6_sep_weights b/frontend/packages/demo/logs/graph/conv5_6_sep_weights new file mode 100644 index 0000000000000000000000000000000000000000..7d28f9fb05ef650a2514cdd006edb8de5b521dd2 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv5_6_sep_weights differ diff --git a/frontend/packages/demo/logs/graph/conv6_dw_bn_mean b/frontend/packages/demo/logs/graph/conv6_dw_bn_mean new file mode 100644 index 0000000000000000000000000000000000000000..a65921df8b52fe3471e4ff325f0fa6aefdd0bf2e Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv6_dw_bn_mean differ diff --git a/frontend/packages/demo/logs/graph/conv6_dw_bn_offset b/frontend/packages/demo/logs/graph/conv6_dw_bn_offset new file mode 100644 index 0000000000000000000000000000000000000000..7c284f6ee5ebc2064e910e97fa8a0471f9837412 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv6_dw_bn_offset differ diff --git a/frontend/packages/demo/logs/graph/conv6_dw_bn_scale b/frontend/packages/demo/logs/graph/conv6_dw_bn_scale new file mode 100644 index 0000000000000000000000000000000000000000..842599bbb44cf57ab9f9d120c63ced84d8f55306 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv6_dw_bn_scale differ diff --git a/frontend/packages/demo/logs/graph/conv6_dw_bn_variance b/frontend/packages/demo/logs/graph/conv6_dw_bn_variance new file mode 100644 index 0000000000000000000000000000000000000000..bf6b2171029547f522e420ae07ea23151f841c48 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv6_dw_bn_variance differ diff --git a/frontend/packages/demo/logs/graph/conv6_dw_weights b/frontend/packages/demo/logs/graph/conv6_dw_weights new file mode 100644 index 0000000000000000000000000000000000000000..8571aab77468ca1dd01e75ed9f22994a4c7b5bd1 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv6_dw_weights differ diff --git a/frontend/packages/demo/logs/graph/conv6_sep_bn_mean b/frontend/packages/demo/logs/graph/conv6_sep_bn_mean new file mode 100644 index 0000000000000000000000000000000000000000..ab05060d34ae6746ca75598661d6d938ea8b38fe Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv6_sep_bn_mean differ diff --git a/frontend/packages/demo/logs/graph/conv6_sep_bn_offset b/frontend/packages/demo/logs/graph/conv6_sep_bn_offset new file mode 100644 index 0000000000000000000000000000000000000000..2534b96253a4fbd5b76c1d9cac26a5fda8b4c25c Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv6_sep_bn_offset differ diff --git a/frontend/packages/demo/logs/graph/conv6_sep_bn_scale b/frontend/packages/demo/logs/graph/conv6_sep_bn_scale new file mode 100644 index 0000000000000000000000000000000000000000..c2a05183ffa8a278a2ef4907407e67e2c3f66355 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv6_sep_bn_scale differ diff --git a/frontend/packages/demo/logs/graph/conv6_sep_bn_variance b/frontend/packages/demo/logs/graph/conv6_sep_bn_variance new file mode 100644 index 0000000000000000000000000000000000000000..4ce31db3bc433dd58a1d51ca9c1e60e80eb8a7dc Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv6_sep_bn_variance differ diff --git a/frontend/packages/demo/logs/graph/conv6_sep_weights b/frontend/packages/demo/logs/graph/conv6_sep_weights new file mode 100644 index 0000000000000000000000000000000000000000..6a6a8f0be53907ce8877f198f531a733c69c76e4 Binary files /dev/null and b/frontend/packages/demo/logs/graph/conv6_sep_weights differ diff --git a/frontend/packages/demo/logs/graph/fc7_offset b/frontend/packages/demo/logs/graph/fc7_offset new file mode 100644 index 0000000000000000000000000000000000000000..69dae5d637cfc56144063fe5a147d82623cf9066 Binary files /dev/null and b/frontend/packages/demo/logs/graph/fc7_offset differ diff --git a/frontend/packages/demo/logs/graph/fc7_weights b/frontend/packages/demo/logs/graph/fc7_weights new file mode 100644 index 0000000000000000000000000000000000000000..d5be6faa1401c170e4a6c40b4cc0bcb918f7b7ef Binary files /dev/null and b/frontend/packages/demo/logs/graph/fc7_weights differ diff --git a/frontend/packages/demo/package.json b/frontend/packages/demo/package.json new file mode 100644 index 0000000000000000000000000000000000000000..1484a8c9d87e9afc426ec31c4cd90a680a86a576 --- /dev/null +++ b/frontend/packages/demo/package.json @@ -0,0 +1,63 @@ +{ + "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 (https://github.com/PeterPanZH)", + "contributors": [ + "Niandalu (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" + } + } +} diff --git a/frontend/packages/demo/tsconfig.json b/frontend/packages/demo/tsconfig.json new file mode 100644 index 0000000000000000000000000000000000000000..63d57abdc1e459efe39eb2cd658ad71e6784f4d8 --- /dev/null +++ b/frontend/packages/demo/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": [ + "esnext", + "esnext.asynciterable", + "dom" + ], + "moduleResolution": "node", + "esModuleInterop": true, + "resolveJsonModule": true, + "declaration": true, + "skipLibCheck": true, + "outDir": "dist" + }, + "include": [ + "index.ts", + "builder" + ] +} diff --git a/frontend/packages/i18n/package.json b/frontend/packages/i18n/package.json index 61da21f30de8e322589ee7ba2489963435b19513..7def420805324f36fe5a9d1ec6a9ca8794f0f368 100644 --- a/frontend/packages/i18n/package.json +++ b/frontend/packages/i18n/package.json @@ -1,6 +1,6 @@ { "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" }, diff --git a/frontend/packages/mock/package.json b/frontend/packages/mock/package.json index 90748adc642429419cf532d41cb0811925781345..2104854c8a7710866d3331a691baf41a2793a4fe 100644 --- a/frontend/packages/mock/package.json +++ b/frontend/packages/mock/package.json @@ -1,6 +1,6 @@ { "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" diff --git a/frontend/packages/netron/package.json b/frontend/packages/netron/package.json index 7ce8df9e51d604af51c1471bd301df07216e4dc2..7834b6d3b3e4fc8408ad69e1b9d9370a49c94b1b 100644 --- a/frontend/packages/netron/package.json +++ b/frontend/packages/netron/package.json @@ -1,6 +1,6 @@ { "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": { diff --git a/frontend/packages/netron/webpack.config.js b/frontend/packages/netron/webpack.config.js index 50c8679db421f5ae8fde516cd731263848441d93..8dc8969a0df6c17748f47c145757805f4ce3690b 100644 --- a/frontend/packages/netron/webpack.config.js +++ b/frontend/packages/netron/webpack.config.js @@ -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); diff --git a/frontend/packages/server/index.ts b/frontend/packages/server/index.ts index 81afcfac0cd24831ec6b9f35118654a3afebfc7c..0f5bd7deffacb3d32410f5f00e6f1bc1ea176768 100644 --- a/frontend/packages/server/index.ts +++ b/frontend/packages/server/index.ts @@ -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})); diff --git a/frontend/packages/server/package.json b/frontend/packages/server/package.json index b669d5438e56bcc0e5f28801ce3132aefa147494..0c85e83f03b7e23253acea4fa0ff4d9a39439efe 100644 --- a/frontend/packages/server/package.json +++ b/frontend/packages/server/package.json @@ -1,6 +1,6 @@ { "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", diff --git a/frontend/packages/serverless/package.json b/frontend/packages/serverless/package.json index 2af0149328a8b4b7984c376255bf4c74501a987b..f840d80953241efad069e2523f47a489574e67ab 100644 --- a/frontend/packages/serverless/package.json +++ b/frontend/packages/serverless/package.json @@ -1,6 +1,6 @@ { "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", diff --git a/frontend/packages/wasm/package.json b/frontend/packages/wasm/package.json index d29763bfde63662f56c8ba5eed7f860881317a6d..daa7a9e86bc914174bdfecca9275f671a62ebcd9 100644 --- a/frontend/packages/wasm/package.json +++ b/frontend/packages/wasm/package.json @@ -1,6 +1,6 @@ { "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": [ diff --git a/frontend/yarn.lock b/frontend/yarn.lock index fa1a3d75402e880e36dfdcc2b92e20d56cefcba1..7494773b19e4a8aea038629de50e1a4fe58fcf65 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -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" diff --git a/scripts/build.sh b/scripts/build.sh index 3a2d1418a7527501be2f4f25e005faa771a262ca..3a4faa2de2a25a80fd3ee2aef520fa9cf4069c35 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -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 diff --git a/setup.py b/setup.py index 22f3e30ed5bd07a29d651395b868043da32eeeb5..15056d588f48e282b303eb8f44997f2205fec761 100644 --- a/setup.py +++ b/setup.py @@ -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={ diff --git a/visualdl/server/app.py b/visualdl/server/app.py index 160462d46ecfaf4df7a1f8c197d1b3f4cf40c566..d6e0ce99576da08bd10741a3400ad7dfe6476d6e 100644 --- a/visualdl/server/app.py +++ b/visualdl/server/app.py @@ -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__': diff --git a/visualdl/server/args.py b/visualdl/server/args.py index 59dac44fe54e8b34007f9971dc07ad97adad9e29..114813d8112201726e833122388c938c7469d4a3 100644 --- a/visualdl/server/args.py +++ b/visualdl/server/args.py @@ -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) diff --git a/visualdl/server/log.py b/visualdl/server/log.py index 5ce2f500d087a09b1a2856e4eabf194859340132..55dd93cff4e727d257c508eb474ffe37fb19656b 100644 --- a/visualdl/server/log.py +++ b/visualdl/server/log.py @@ -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)