未验证 提交 211b2b59 编写于 作者: P Peter Pan 提交者: GitHub

feat: subgraph support for graph page (#787)

上级 88719ad8
...@@ -108,7 +108,6 @@ VisualDL supports the latest version of [Google Chrome](https://www.google.com/c ...@@ -108,7 +108,6 @@ VisualDL supports the latest version of [Google Chrome](https://www.google.com/c
This project is based on following projects: This project is based on following projects:
- [Next.js](https://nextjs.org/)
- [React](https://reactjs.org/) - [React](https://reactjs.org/)
- [ECharts](https://echarts.apache.org/) - [ECharts](https://echarts.apache.org/)
- [wasm-pack](https://rustwasm.github.io/wasm-pack/) - [wasm-pack](https://rustwasm.github.io/wasm-pack/)
......
...@@ -108,7 +108,6 @@ VisualDL 支持最新版本的 [Google Chrome](https://www.google.com/chrome/) ...@@ -108,7 +108,6 @@ VisualDL 支持最新版本的 [Google Chrome](https://www.google.com/chrome/)
本项目基于以下项目: 本项目基于以下项目:
- [Next.js](https://nextjs.org/)
- [React](https://reactjs.org/) - [React](https://reactjs.org/)
- [ECharts](https://echarts.apache.org/) - [ECharts](https://echarts.apache.org/)
- [wasm-pack](https://rustwasm.github.io/wasm-pack/) - [wasm-pack](https://rustwasm.github.io/wasm-pack/)
......
...@@ -47,7 +47,7 @@ ...@@ -47,7 +47,7 @@
"eslint-plugin-react-hooks": "4.1.0", "eslint-plugin-react-hooks": "4.1.0",
"husky": "4.2.5", "husky": "4.2.5",
"lerna": "3.22.1", "lerna": "3.22.1",
"lint-staged": "10.2.13", "lint-staged": "10.3.0",
"prettier": "2.1.1", "prettier": "2.1.1",
"rimraf": "3.0.2", "rimraf": "3.0.2",
"typescript": "4.0.2", "typescript": "4.0.2",
......
...@@ -41,7 +41,7 @@ ...@@ -41,7 +41,7 @@
"yargs": "15.4.1" "yargs": "15.4.1"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "14.6.3", "@types/node": "14.6.4",
"@types/yargs": "15.0.5", "@types/yargs": "15.0.5",
"cross-env": "7.0.2", "cross-env": "7.0.2",
"ts-node": "9.0.0", "ts-node": "9.0.0",
......
...@@ -66,14 +66,14 @@ ...@@ -66,14 +66,14 @@
"tippy.js": "6.2.6" "tippy.js": "6.2.6"
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "7.11.5", "@babel/core": "7.11.6",
"@babel/preset-react": "7.10.4", "@babel/preset-react": "7.10.4",
"@snowpack/app-scripts-react": "1.10.0", "@snowpack/app-scripts-react": "1.10.0",
"@snowpack/plugin-dotenv": "2.0.1", "@snowpack/plugin-dotenv": "2.0.1",
"@snowpack/plugin-run-script": "2.1.1", "@snowpack/plugin-run-script": "2.1.1",
"@svgr/core": "5.4.0", "@svgr/core": "5.4.0",
"@testing-library/jest-dom": "5.11.4", "@testing-library/jest-dom": "5.11.4",
"@testing-library/react": "10.4.9", "@testing-library/react": "11.0.2",
"@types/d3-format": "1.3.1", "@types/d3-format": "1.3.1",
"@types/echarts": "4.6.5", "@types/echarts": "4.6.5",
"@types/file-saver": "2.0.1", "@types/file-saver": "2.0.1",
......
...@@ -37,6 +37,7 @@ ...@@ -37,6 +37,7 @@
"producer": "Producer", "producer": "Producer",
"runtime": "Runtime", "runtime": "Runtime",
"source": "Source", "source": "Source",
"subgraph": "Subgraph",
"tags": "Tags", "tags": "Tags",
"type": "Type", "type": "Type",
"version": "Version" "version": "Version"
...@@ -45,6 +46,7 @@ ...@@ -45,6 +46,7 @@
"show-attributes": "Show Attributes", "show-attributes": "Show Attributes",
"show-initializers": "Show Initializers", "show-initializers": "Show Initializers",
"show-node-names": "Show Node Names", "show-node-names": "Show Node Names",
"subgraph": "Select Subgraph",
"supported-model": "Supported models: ", "supported-model": "Supported models: ",
"supported-model-list": "PaddlePaddle, ONNX, Keras, Core ML, Caffe, Caffe2, Darknet, MXNet, ncnn, TensorFlow Lite", "supported-model-list": "PaddlePaddle, ONNX, Keras, Core ML, Caffe, Caffe2, Darknet, MXNet, ncnn, TensorFlow Lite",
"upload-model": "Upload Model", "upload-model": "Upload Model",
......
...@@ -37,6 +37,7 @@ ...@@ -37,6 +37,7 @@
"producer": "框架", "producer": "框架",
"runtime": "运行时", "runtime": "运行时",
"source": "源", "source": "源",
"subgraph": "子图",
"tags": "标签", "tags": "标签",
"type": "类型", "type": "类型",
"version": "版本" "version": "版本"
...@@ -45,6 +46,7 @@ ...@@ -45,6 +46,7 @@
"show-attributes": "显示参数", "show-attributes": "显示参数",
"show-initializers": "显示初始化参数", "show-initializers": "显示初始化参数",
"show-node-names": "显示节点名称", "show-node-names": "显示节点名称",
"subgraph": "选择子图",
"supported-model": "VisualDL支持:", "supported-model": "VisualDL支持:",
"supported-model-list": "PaddlePaddle、ONNX、Keras、Core ML、Caffe、Caffe2、Darknet、MXNet、ncnn、TensorFlow Lite", "supported-model-list": "PaddlePaddle、ONNX、Keras、Core ML、Caffe、Caffe2、Darknet、MXNet、ncnn、TensorFlow Lite",
"upload-model": "上传模型", "upload-model": "上传模型",
......
import type {Documentation, Properties, SearchItem, SearchResult} from '~/resource/graph/types'; import type {Documentation, OpenedResult, Properties, SearchItem, SearchResult} from '~/resource/graph/types';
import React, {useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState} from 'react'; import React, {useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState} from 'react';
import {backgroundColor, borderColor, contentHeight, position, primaryColor, rem, size} from '~/utils/style'; import {backgroundColor, borderColor, contentHeight, position, primaryColor, rem, size} from '~/utils/style';
...@@ -77,10 +77,11 @@ const Loading = styled.div` ...@@ -77,10 +77,11 @@ const Loading = styled.div`
export type GraphRef = { export type GraphRef = {
export(type: 'svg' | 'png'): void; export(type: 'svg' | 'png'): void;
changeGraph(name: string): void;
search(value: string): void; search(value: string): void;
select(item: SearchItem): void; select(item: SearchItem): void;
showModelProperties(): void; showModelProperties(): void;
showNodeDocumentation: (data: Properties) => void; showNodeDocumentation(data: Properties): void;
}; };
type GraphProps = { type GraphProps = {
...@@ -91,6 +92,7 @@ type GraphProps = { ...@@ -91,6 +92,7 @@ type GraphProps = {
showNames: boolean; showNames: boolean;
horizontal: boolean; horizontal: boolean;
onRendered?: () => unknown; onRendered?: () => unknown;
onOpened?: (data: OpenedResult) => unknown;
onSearch?: (data: SearchResult) => unknown; onSearch?: (data: SearchResult) => unknown;
onShowModelProperties?: (data: Properties) => unknown; onShowModelProperties?: (data: Properties) => unknown;
onShowNodeProperties?: (data: Properties) => unknown; onShowNodeProperties?: (data: Properties) => unknown;
...@@ -107,6 +109,7 @@ const Graph = React.forwardRef<GraphRef, GraphProps>( ...@@ -107,6 +109,7 @@ const Graph = React.forwardRef<GraphRef, GraphProps>(
showNames, showNames,
horizontal, horizontal,
onRendered, onRendered,
onOpened,
onSearch, onSearch,
onShowModelProperties, onShowModelProperties,
onShowNodeProperties, onShowNodeProperties,
...@@ -139,6 +142,8 @@ const Graph = React.forwardRef<GraphRef, GraphProps>( ...@@ -139,6 +142,8 @@ const Graph = React.forwardRef<GraphRef, GraphProps>(
return; return;
} }
return; return;
case 'opened':
return onOpened?.(data);
case 'search': case 'search':
return onSearch?.(data); return onSearch?.(data);
case 'cancel': case 'cancel':
...@@ -156,7 +161,7 @@ const Graph = React.forwardRef<GraphRef, GraphProps>( ...@@ -156,7 +161,7 @@ const Graph = React.forwardRef<GraphRef, GraphProps>(
} }
} }
}, },
[onRendered, onSearch, onShowModelProperties, onShowNodeProperties, onShowNodeDocumentation] [onRendered, onOpened, onSearch, onShowModelProperties, onShowNodeProperties, onShowNodeDocumentation]
); );
const dispatch = useCallback((type: string, data?: unknown) => { const dispatch = useCallback((type: string, data?: unknown) => {
iframe.current?.contentWindow?.postMessage( iframe.current?.contentWindow?.postMessage(
...@@ -197,6 +202,9 @@ const Graph = React.forwardRef<GraphRef, GraphProps>( ...@@ -197,6 +202,9 @@ const Graph = React.forwardRef<GraphRef, GraphProps>(
export(type) { export(type) {
dispatch('export', type); dispatch('export', type);
}, },
changeGraph(name) {
dispatch('change-graph', name);
},
search(value) { search(value) {
dispatch('search', value); dispatch('search', value);
}, },
......
import React, {FunctionComponent, Suspense, useMemo} from 'react'; import React, {FunctionComponent, Suspense, useMemo} from 'react';
import type {WithStyled} from '~/utils/style'; import type {WithStyled} from '~/utils/style';
import styled from 'styled-components';
const PUBLIC_PATH: string = import.meta.env.SNOWPACK_PUBLIC_PATH; const PUBLIC_PATH: string = import.meta.env.SNOWPACK_PUBLIC_PATH;
const Wrapper = styled.i`
speak: none;
font-style: normal;
font-weight: normal;
font-variant: normal;
text-transform: none;
line-height: 1;
`;
export type Icons = string; export type Icons = string;
type IconProps = { type IconProps = {
...@@ -15,11 +25,11 @@ const Icon: FunctionComponent<IconProps & WithStyled> = ({type, onClick, classNa ...@@ -15,11 +25,11 @@ const Icon: FunctionComponent<IconProps & WithStyled> = ({type, onClick, classNa
const Svg = useMemo(() => React.lazy(() => import(`${PUBLIC_PATH}/icons/${type}.js`)), [type]); const Svg = useMemo(() => React.lazy(() => import(`${PUBLIC_PATH}/icons/${type}.js`)), [type]);
return ( return (
<i className={`vdl-icon icon-${type} ${className ?? ''}`} onClick={() => onClick?.()}> <Wrapper className={`vdl-icon icon-${type} ${className ?? ''}`} onClick={() => onClick?.()}>
<Suspense fallback=""> <Suspense fallback="">
<Svg /> <Svg />
</Suspense> </Suspense>
</i> </Wrapper>
); );
}; };
......
import Aside, {AsideSection} from '~/components/Aside'; import Aside, {AsideSection} from '~/components/Aside';
import {BlobResponse, blobFetcher} from '~/utils/fetch'; import {BlobResponse, blobFetcher} from '~/utils/fetch';
import type {Documentation, Properties, SearchItem, SearchResult} from '~/resource/graph/types'; import type {Documentation, OpenedResult, Properties, SearchItem, SearchResult} from '~/resource/graph/types';
import GraphComponent, {GraphRef} from '~/components/GraphPage/Graph'; import GraphComponent, {GraphRef} from '~/components/GraphPage/Graph';
import React, {FunctionComponent, useCallback, useEffect, useMemo, useRef, useState} from 'react'; import React, {FunctionComponent, useCallback, useEffect, useMemo, useRef, useState} from 'react';
import Select, {SelectProps} from '~/components/Select';
import {primaryColor, rem, size} from '~/utils/style'; import {primaryColor, rem, size} from '~/utils/style';
import Button from '~/components/Button'; import Button from '~/components/Button';
...@@ -26,6 +27,10 @@ const FullWidthButton = styled(Button)` ...@@ -26,6 +27,10 @@ const FullWidthButton = styled(Button)`
width: 100%; width: 100%;
`; `;
const FullWidthSelect = styled<React.FunctionComponent<SelectProps<NonNullable<OpenedResult['selected']>>>>(Select)`
width: 100%;
`;
const ExportButtonWrapper = styled.div` const ExportButtonWrapper = styled.div`
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
...@@ -88,6 +93,17 @@ const Graph: FunctionComponent = () => { ...@@ -88,6 +93,17 @@ const Graph: FunctionComponent = () => {
} }
}, [data]); }, [data]);
const [modelGraphs, setModelGraphs] = useState<OpenedResult['graphs']>([]);
const [selectedGraph, setSelectedGraph] = useState<NonNullable<OpenedResult['selected']>>('');
const setOpenedModel = useCallback((data: OpenedResult) => {
setModelGraphs(data.graphs);
setSelectedGraph(data.selected || '');
}, []);
const changeGraph = useCallback((name: string) => {
setSelectedGraph(name);
graph.current?.changeGraph(name);
}, []);
const [search, setSearch] = useState(''); const [search, setSearch] = useState('');
const [searching, setSearching] = useState(false); const [searching, setSearching] = useState(false);
const [searchResult, setSearchResult] = useState<SearchResult>({text: '', result: []}); const [searchResult, setSearchResult] = useState<SearchResult>({text: '', result: []});
...@@ -167,6 +183,13 @@ const Graph: FunctionComponent = () => { ...@@ -167,6 +183,13 @@ const Graph: FunctionComponent = () => {
{t('graph:model-properties')} {t('graph:model-properties')}
</FullWidthButton> </FullWidthButton>
</AsideSection> </AsideSection>
{modelGraphs.length > 1 && (
<AsideSection>
<Field label={t('graph:subgraph')}>
<FullWidthSelect list={modelGraphs} value={selectedGraph} onChange={changeGraph} />
</Field>
</AsideSection>
)}
<AsideSection> <AsideSection>
<Field label={t('graph:display-data')}> <Field label={t('graph:display-data')}>
<div> <div>
...@@ -216,6 +239,9 @@ const Graph: FunctionComponent = () => { ...@@ -216,6 +239,9 @@ const Graph: FunctionComponent = () => {
search, search,
searching, searching,
searchResult, searchResult,
modelGraphs,
selectedGraph,
changeGraph,
onSearch, onSearch,
onSelect, onSelect,
showAttributes, showAttributes,
...@@ -249,6 +275,7 @@ const Graph: FunctionComponent = () => { ...@@ -249,6 +275,7 @@ const Graph: FunctionComponent = () => {
showNames={showNames} showNames={showNames}
horizontal={horizontal} horizontal={horizontal}
onRendered={() => setRendered(true)} onRendered={() => setRendered(true)}
onOpened={setOpenedModel}
onSearch={data => setSearchResult(data)} onSearch={data => setSearchResult(data)}
onShowModelProperties={data => setModelData(data)} onShowModelProperties={data => setModelData(data)}
onShowNodeProperties={data => { onShowNodeProperties={data => {
......
...@@ -33,6 +33,11 @@ export type SearchItem = { ...@@ -33,6 +33,11 @@ export type SearchItem = {
id: string; id: string;
}; };
export type OpenedResult = {
graphs: string[];
selected: string | null;
};
export type SearchResult = { export type SearchResult = {
text: string; text: string;
result: SearchItem[]; result: SearchItem[];
......
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
"devDependencies": { "devDependencies": {
"@types/express": "4.17.8", "@types/express": "4.17.8",
"@types/mkdirp": "1.0.1", "@types/mkdirp": "1.0.1",
"@types/node": "14.6.3", "@types/node": "14.6.4",
"@types/node-fetch": "2.5.7", "@types/node-fetch": "2.5.7",
"@types/rimraf": "3.0.0", "@types/rimraf": "3.0.0",
"cpy-cli": "3.1.1", "cpy-cli": "3.1.1",
......
...@@ -42,7 +42,7 @@ ...@@ -42,7 +42,7 @@
"devDependencies": { "devDependencies": {
"@types/express": "4.17.8", "@types/express": "4.17.8",
"@types/faker": "4.1.12", "@types/faker": "4.1.12",
"@types/node": "14.6.3", "@types/node": "14.6.4",
"cpy-cli": "3.1.1", "cpy-cli": "3.1.1",
"rimraf": "3.0.2", "rimraf": "3.0.2",
"ts-node": "9.0.0", "ts-node": "9.0.0",
......
...@@ -48,8 +48,8 @@ ...@@ -48,8 +48,8 @@
"postcss-loader": "3.0.0", "postcss-loader": "3.0.0",
"rimraf": "3.0.2", "rimraf": "3.0.2",
"sass": "1.26.10", "sass": "1.26.10",
"sass-loader": "10.0.1", "sass-loader": "10.0.2",
"terser": "5.2.1", "terser": "5.3.0",
"webpack": "4.44.1", "webpack": "4.44.1",
"webpack-cli": "3.3.12" "webpack-cli": "3.3.12"
}, },
......
...@@ -64,6 +64,8 @@ host.BrowserHost = class { ...@@ -64,6 +64,8 @@ host.BrowserHost = class {
return this._view.toggleDirection(data); return this._view.toggleDirection(data);
case 'export': case 'export':
return this._view.export(`${document.title}.${data}`); return this._view.export(`${document.title}.${data}`);
case 'change-graph':
return this._view.changeGraph(data);
case 'search': case 'search':
return this._view.find(data); return this._view.find(data);
case 'select': case 'select':
......
...@@ -531,18 +531,17 @@ sidebar.ModelSidebar = class { ...@@ -531,18 +531,17 @@ sidebar.ModelSidebar = class {
} }
} }
// TODO: graph select if (this._model._graphs.length > 1) {
// if (this._model._graphs.length > 1) { // let graphSelector = new sidebar.SelectView(
// let graphSelector = new sidebar.SelectView( // this._host,
// this._host, // this._model.graphs.map(g => g.name),
// this._model.graphs.map(g => g.name), // graph.name
// graph.name // );
// ); // graphSelector.on('change', (sender, data) => {
// graphSelector.on('change', (sender, data) => { // this._raise('update-active-graph', data);
// this._raise('update-active-graph', data); // });
// }); this._addProperty('subgraph', new sidebar.ValueTextView(this._host, graph.name));
// this._addProperty('subgraph', graphSelector); }
// }
if (graph) { if (graph) {
if (graph.version) { if (graph.version) {
......
...@@ -190,12 +190,20 @@ view.View = class { ...@@ -190,12 +190,20 @@ view.View = class {
return this._modelFactoryService.open(context).then(model => { return this._modelFactoryService.open(context).then(model => {
return this._timeout(20).then(() => { return this._timeout(20).then(() => {
const graph = model.graphs.length > 0 ? model.graphs[0] : null; const graph = model.graphs.length > 0 ? model.graphs[0] : null;
this._host.message('opened', {
graphs: model.graphs.map(g => g.name || ''),
selected: graph && (graph.name || '')
});
return this._updateGraph(model, graph); return this._updateGraph(model, graph);
}); });
}); });
}); });
} }
changeGraph(name) {
this._updateActiveGraph(name);
}
_updateActiveGraph(name) { _updateActiveGraph(name) {
if (this._model) { if (this._model) {
const model = this._model; const model = this._model;
......
...@@ -47,7 +47,7 @@ ...@@ -47,7 +47,7 @@
"devDependencies": { "devDependencies": {
"@types/enhanced-resolve": "3.0.6", "@types/enhanced-resolve": "3.0.6",
"@types/express": "4.17.8", "@types/express": "4.17.8",
"@types/node": "14.6.3", "@types/node": "14.6.4",
"@visualdl/mock": "2.0.0", "@visualdl/mock": "2.0.0",
"cross-env": "7.0.2", "cross-env": "7.0.2",
"nodemon": "2.0.4", "nodemon": "2.0.4",
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
"skipLibCheck": true, "skipLibCheck": true,
"esModuleInterop": true, "esModuleInterop": true,
"declaration": true, "declaration": true,
"resolveJsonModule": true,
"outDir": "dist" "outDir": "dist"
}, },
"files": [ "files": [
......
...@@ -18,13 +18,13 @@ ...@@ -18,13 +18,13 @@
invariant "^2.2.4" invariant "^2.2.4"
semver "^5.5.0" semver "^5.5.0"
"@babel/core@7.11.5", "@babel/core@^7.1.0", "@babel/core@^7.10.5", "@babel/core@^7.7.5": "@babel/core@7.11.6":
version "7.11.5" version "7.11.6"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.11.5.tgz#6ad96e2f71899ea3f9b651f0a911e85205d1ff6d" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.11.6.tgz#3a9455dc7387ff1bac45770650bc13ba04a15651"
integrity sha512-fsEANVOcZHzrsV6dMVWqpSeXClq3lNbYrfFGme6DE25FQWe7pyeYpXyx9guqUnpy466JLzZ8z4uwSr2iv60V5Q== integrity sha512-Wpcv03AGnmkgm6uS6k8iwhIwTrcP0m17TL1n1sy7qD0qelDu4XNeW0dN0mHfa+Gei211yDaLoEe/VlbXQzM4Bg==
dependencies: dependencies:
"@babel/code-frame" "^7.10.4" "@babel/code-frame" "^7.10.4"
"@babel/generator" "^7.11.5" "@babel/generator" "^7.11.6"
"@babel/helper-module-transforms" "^7.11.0" "@babel/helper-module-transforms" "^7.11.0"
"@babel/helpers" "^7.10.4" "@babel/helpers" "^7.10.4"
"@babel/parser" "^7.11.5" "@babel/parser" "^7.11.5"
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
lodash "^4.17.19" lodash "^4.17.19"
resolve "^1.3.2" resolve "^1.3.2"
semver "^5.4.1" semver "^5.4.1"
source-map "^0.6.1" source-map "^0.5.0"
"@babel/core@7.9.0": "@babel/core@7.9.0":
version "7.9.0" version "7.9.0"
...@@ -62,6 +62,28 @@ ...@@ -62,6 +62,28 @@
semver "^5.4.1" semver "^5.4.1"
source-map "^0.5.0" source-map "^0.5.0"
"@babel/core@^7.1.0", "@babel/core@^7.10.5", "@babel/core@^7.7.5":
version "7.11.5"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.11.5.tgz#6ad96e2f71899ea3f9b651f0a911e85205d1ff6d"
integrity sha512-fsEANVOcZHzrsV6dMVWqpSeXClq3lNbYrfFGme6DE25FQWe7pyeYpXyx9guqUnpy466JLzZ8z4uwSr2iv60V5Q==
dependencies:
"@babel/code-frame" "^7.10.4"
"@babel/generator" "^7.11.5"
"@babel/helper-module-transforms" "^7.11.0"
"@babel/helpers" "^7.10.4"
"@babel/parser" "^7.11.5"
"@babel/template" "^7.10.4"
"@babel/traverse" "^7.11.5"
"@babel/types" "^7.11.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.6.1"
"@babel/generator@^7.11.5", "@babel/generator@^7.9.0": "@babel/generator@^7.11.5", "@babel/generator@^7.9.0":
version "7.11.5" version "7.11.5"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.5.tgz#a5582773425a468e4ba269d9a1f701fbca6a7a82" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.5.tgz#a5582773425a468e4ba269d9a1f701fbca6a7a82"
...@@ -71,6 +93,15 @@ ...@@ -71,6 +93,15 @@
jsesc "^2.5.1" jsesc "^2.5.1"
source-map "^0.6.1" source-map "^0.6.1"
"@babel/generator@^7.11.6":
version "7.11.6"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.6.tgz#b868900f81b163b4d464ea24545c61cbac4dc620"
integrity sha512-DWtQ1PV3r+cLbySoHrwn9RWEgKMBLLma4OBQloPRyDYvc5msJM9kvTLo1YnlJd1P/ZuKbdli3ijr5q3FvAF3uA==
dependencies:
"@babel/types" "^7.11.5"
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": "@babel/helper-annotate-as-pure@^7.0.0", "@babel/helper-annotate-as-pure@^7.10.4":
version "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" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3"
...@@ -996,7 +1027,7 @@ ...@@ -996,7 +1027,7 @@
dependencies: dependencies:
regenerator-runtime "^0.13.4" regenerator-runtime "^0.13.4"
"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.1", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.1", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.11.2", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2":
version "7.11.2" version "7.11.2"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736"
integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw== integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==
...@@ -2583,10 +2614,10 @@ ...@@ -2583,10 +2614,10 @@
dependencies: dependencies:
defer-to-connect "^2.0.0" defer-to-connect "^2.0.0"
"@testing-library/dom@^7.22.3": "@testing-library/dom@^7.23.0":
version "7.24.0" version "7.24.1"
resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.24.0.tgz#b50066100947e4d1bd0f2f6855c7ff3f2a8770e2" resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.24.1.tgz#0e8acd042070f2c1b183fbfe5c0d38b3194ad3c0"
integrity sha512-Q83bQctoBse3NbHrUHlLypSp+cIchmpLCtVTG2rgVL2RhzgNOjlYgqH/gmwg3ztHVPADSD3PwtoXRhgU6dfTxQ== integrity sha512-TemHWY59gvzcScGiE5eooZpzYk9GaED0TuuK4WefbIc/DQg0L5wOpnj7MIEeAGF3B7Ekf1kvmVnQ97vwz4Lmhg==
dependencies: dependencies:
"@babel/code-frame" "^7.10.4" "@babel/code-frame" "^7.10.4"
"@babel/runtime" "^7.10.3" "@babel/runtime" "^7.10.3"
...@@ -2610,13 +2641,13 @@ ...@@ -2610,13 +2641,13 @@
lodash "^4.17.15" lodash "^4.17.15"
redent "^3.0.0" redent "^3.0.0"
"@testing-library/react@10.4.9": "@testing-library/react@11.0.2":
version "10.4.9" version "11.0.2"
resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-10.4.9.tgz#9faa29c6a1a217bf8bbb96a28bd29d7a847ca150" resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-11.0.2.tgz#4588cc537085907bd1d98b531eb247dbbf57b1cc"
integrity sha512-pHZKkqUy0tmiD81afs8xfiuseXfU/N7rAX3iKjeZYje86t9VaB0LrxYVa+OOsvkrveX5jCK3IjajVn2MbePvqA== integrity sha512-iOuNNHt4ZgMH5trSKC4kaWDcKzUOf7e7KQIcu7xvGCd68/w1EegbW89F9T5sZ4IjS0gAXdvOfZbG9ESZ7YjOug==
dependencies: dependencies:
"@babel/runtime" "^7.10.3" "@babel/runtime" "^7.11.2"
"@testing-library/dom" "^7.22.3" "@testing-library/dom" "^7.23.0"
"@tippyjs/react@4.1.0": "@tippyjs/react@4.1.0":
version "4.1.0" version "4.1.0"
...@@ -2896,11 +2927,16 @@ ...@@ -2896,11 +2927,16 @@
"@types/node" "*" "@types/node" "*"
form-data "^3.0.0" form-data "^3.0.0"
"@types/node@*", "@types/node@14.6.3", "@types/node@>= 8": "@types/node@*", "@types/node@>= 8":
version "14.6.3" version "14.6.3"
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.6.3.tgz#cc4f979548ca4d8e7b90bc0180052ab99ee64224" resolved "https://registry.yarnpkg.com/@types/node/-/node-14.6.3.tgz#cc4f979548ca4d8e7b90bc0180052ab99ee64224"
integrity sha512-pC/hkcREG6YfDfui1FBmj8e20jFU5Exjw4NYDm8kEdrW+mOh0T1Zve8DWKnS7ZIZvgncrctcNCXF4Q2I+loyww== integrity sha512-pC/hkcREG6YfDfui1FBmj8e20jFU5Exjw4NYDm8kEdrW+mOh0T1Zve8DWKnS7ZIZvgncrctcNCXF4Q2I+loyww==
"@types/node@14.6.4":
version "14.6.4"
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.6.4.tgz#a145cc0bb14ef9c4777361b7bbafa5cf8e3acb5a"
integrity sha512-Wk7nG1JSaMfMpoMJDKUsWYugliB2Vy55pdjLpmLixeyMi7HizW2I/9QoxsPCkXl3dO+ZOVqPumKaDUv5zJu2uQ==
"@types/normalize-package-data@^2.4.0": "@types/normalize-package-data@^2.4.0":
version "2.4.0" version "2.4.0"
resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e"
...@@ -9075,10 +9111,10 @@ lines-and-columns@^1.1.6: ...@@ -9075,10 +9111,10 @@ lines-and-columns@^1.1.6:
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=
lint-staged@10.2.13: lint-staged@10.3.0:
version "10.2.13" version "10.3.0"
resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-10.2.13.tgz#b9c504683470edfc464b7d3fe3845a5a1efcd814" resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-10.3.0.tgz#388c3d440590c45c339e7163f669ea69ae90b1e0"
integrity sha512-conwlukNV6aL9SiMWjFtDp5exeDnTMekdNPDZsKGnpfQuHcO0E3L3Bbf58lcR+M7vk6LpCilxDAVks/DDVBYlA== integrity sha512-an3VgjHqmJk0TORB/sdQl0CTkRg4E5ybYCXTTCSJ5h9jFwZbcgKIx5oVma5e7wp/uKt17s1QYFmYqT9MGVosGw==
dependencies: dependencies:
chalk "^4.1.0" chalk "^4.1.0"
cli-truncate "^2.1.0" cli-truncate "^2.1.0"
...@@ -9895,7 +9931,7 @@ netmask@^1.0.6: ...@@ -9895,7 +9931,7 @@ netmask@^1.0.6:
netron@PeterPanZH/netron: netron@PeterPanZH/netron:
version "4.4.2" version "4.4.2"
resolved "https://codeload.github.com/PeterPanZH/netron/tar.gz/9ed207c03a4d4137f6ee0a66655665d249a6cb2a" resolved "https://codeload.github.com/PeterPanZH/netron/tar.gz/b2068aa97dd79c4d60b9a3a1a1d2e5aa8b06eae4"
dependencies: dependencies:
d3 "5.16.0" d3 "5.16.0"
dagre "0.8.5" dagre "0.8.5"
...@@ -12180,15 +12216,15 @@ sane@^4.0.3: ...@@ -12180,15 +12216,15 @@ sane@^4.0.3:
minimist "^1.1.1" minimist "^1.1.1"
walker "~1.0.5" walker "~1.0.5"
sass-loader@10.0.1: sass-loader@10.0.2:
version "10.0.1" version "10.0.2"
resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.0.1.tgz#10c0364d8034f22fee25ddcc9eded20f99bbe3b4" resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.0.2.tgz#c7b73010848b264792dd45372eea0b87cba4401e"
integrity sha512-b2PSldKVTS3JcFPHSrEXh3BeAfR7XknGiGCAO5aHruR3Pf3kqLP3Gb2ypXLglRrAzgZkloNxLZ7GXEGDX0hBUQ== integrity sha512-wV6NDUVB8/iEYMalV/+139+vl2LaRFlZGEd5/xmdcdzQcgmis+npyco6NsDTVOlNA3y2NV9Gcz+vHyFMIT+ffg==
dependencies: dependencies:
klona "^2.0.3" klona "^2.0.3"
loader-utils "^2.0.0" loader-utils "^2.0.0"
neo-async "^2.6.2" neo-async "^2.6.2"
schema-utils "^2.7.0" schema-utils "^2.7.1"
semver "^7.3.2" semver "^7.3.2"
sass@1.26.10: sass@1.26.10:
...@@ -13168,10 +13204,10 @@ terser-webpack-plugin@^1.4.3: ...@@ -13168,10 +13204,10 @@ terser-webpack-plugin@^1.4.3:
webpack-sources "^1.4.0" webpack-sources "^1.4.0"
worker-farm "^1.7.0" worker-farm "^1.7.0"
terser@5.2.1: terser@5.3.0:
version "5.2.1" version "5.3.0"
resolved "https://registry.yarnpkg.com/terser/-/terser-5.2.1.tgz#40b971b8d28b4fe98c9e8c0d073ab48e7bb96cd8" resolved "https://registry.yarnpkg.com/terser/-/terser-5.3.0.tgz#c481f4afecdcc182d5e2bdd2ff2dc61555161e81"
integrity sha512-/AOtjRtAMNGO0fIF6m8HfcvXTw/2AKpsOzDn36tA5RfhRdeXyb4RvHxJ5Pah7iL6dFkLk+gOnCaNHGwJPl6TrQ== integrity sha512-XTT3D3AwxC54KywJijmY2mxZ8nJiEjBHVYzq8l9OaYuRFWeQNBwvipuzzYEP4e+/AVcd1hqG/CqgsdIRyT45Fg==
dependencies: dependencies:
commander "^2.20.0" commander "^2.20.0"
source-map "~0.6.1" source-map "~0.6.1"
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册