From f96c7d401b7540e5402c7faf36a40b2b73501a47 Mon Sep 17 00:00:00 2001
From: Miao Zhuang <1060950782@163.com>
Date: Mon, 13 Nov 2023 19:09:50 +0800
Subject: [PATCH] feat: add studio explain graph (#667)
---
NOTICE.md | 4 -
app/config/locale/en-US.ts | 2 +-
app/config/locale/zh-CN.ts | 2 +-
.../OutputBox/Graphviz/index.module.less | 8 -
.../Console/OutputBox/Graphviz/index.tsx | 32 --
app/pages/Console/OutputBox/index.module.less | 382 ++++++++++--------
app/pages/Console/OutputBox/index.tsx | 39 +-
.../Plugins/SketchShapes/index.module.less | 50 +--
app/pages/SketchModeling/index.module.less | 77 +++-
package-lock.json | 309 +++-----------
package.json | 6 +-
public/graphvizlib.wasm | Bin 926921 -> 0 bytes
12 files changed, 375 insertions(+), 536 deletions(-)
delete mode 100644 NOTICE.md
delete mode 100644 app/pages/Console/OutputBox/Graphviz/index.module.less
delete mode 100644 app/pages/Console/OutputBox/Graphviz/index.tsx
delete mode 100644 public/graphvizlib.wasm
diff --git a/NOTICE.md b/NOTICE.md
deleted file mode 100644
index 003f5aab..00000000
--- a/NOTICE.md
+++ /dev/null
@@ -1,4 +0,0 @@
-Please be noted that:
-
-- This project side-by-side includes [hpcc-js-wasm](https://github.com/hpcc-systems/hpcc-js-wasm) in its released package, hpcc-js-wasm is [licensed](https://github.com/hpcc-systems/hpcc-js-wasm/blob/trunk/LICENSE) under Apache-v2.0 and you could find its source code from https://github.com/hpcc-systems/hpcc-js-wasm.
- - [hpcc-js-wasm](https://github.com/hpcc-systems/hpcc-js-wasm) side-by-side includes [graphviz](https://gitlab.com/graphviz/graphviz) as a `wasm` binary. Graphviz is [licensed](https://gitlab.com/graphviz/graphviz/-/blob/main/LICENSE) under EPL-v1.0 and you could find its source coude from https://gitlab.com/graphviz/graphviz.
diff --git a/app/config/locale/en-US.ts b/app/config/locale/en-US.ts
index 8647446c..eef4b240 100644
--- a/app/config/locale/en-US.ts
+++ b/app/config/locale/en-US.ts
@@ -160,8 +160,8 @@ export default {
addToFavorites: 'Add to favorites',
unfavorite: 'Unfavorite',
clearFavorites: 'Clear Favorites',
- graphviz: 'Graphviz',
selectSpace: 'Please select Graph Space',
+ planTree: 'Plan',
},
explore: {
vertexStyle: 'Vertex Color',
diff --git a/app/config/locale/zh-CN.ts b/app/config/locale/zh-CN.ts
index f0e3335d..eda96a3d 100644
--- a/app/config/locale/zh-CN.ts
+++ b/app/config/locale/zh-CN.ts
@@ -154,8 +154,8 @@ export default {
addToFavorites: '添加到收藏夹',
unfavorite: '取消收藏',
clearFavorites: '清空收藏夹',
- graphviz: 'Graphviz',
selectSpace: '请选择图空间',
+ planTree: '执行计划',
},
explore: {
vertexStyle: '节点颜色',
diff --git a/app/pages/Console/OutputBox/Graphviz/index.module.less b/app/pages/Console/OutputBox/Graphviz/index.module.less
deleted file mode 100644
index 8b08020e..00000000
--- a/app/pages/Console/OutputBox/Graphviz/index.module.less
+++ /dev/null
@@ -1,8 +0,0 @@
-.graphvizBox {
- background-color: #fff;
- width: 1100px;
- svg {
- overflow: auto;
- height: auto;
- }
-}
\ No newline at end of file
diff --git a/app/pages/Console/OutputBox/Graphviz/index.tsx b/app/pages/Console/OutputBox/Graphviz/index.tsx
deleted file mode 100644
index e1eb2c70..00000000
--- a/app/pages/Console/OutputBox/Graphviz/index.tsx
+++ /dev/null
@@ -1,32 +0,0 @@
-import { GraphvizOptions, graphviz } from 'd3-graphviz';
-import { useEffect, useRef } from 'react';
-import cls from 'classnames';
-import styles from './index.module.less';
-
-interface IProps {
- graph: string;
- index: number;
-}
-
-const Graphviz = (props: IProps) => {
- const domRef = useRef(null);
- const { graph, index } = props;
- const renderFlowChart = () => {
- const defaultOptions: GraphvizOptions = {
- width: 1100,
- height: 400,
- fit: true,
- };
- graphviz(`.box-${index}`, {
- ...defaultOptions,
- })
- .renderDot(graph);
- };
- useEffect(() => {
- if(graph)
- renderFlowChart();
- }, [graph]);
- return
;
-};
-
-export default Graphviz;
diff --git a/app/pages/Console/OutputBox/index.module.less b/app/pages/Console/OutputBox/index.module.less
index 821865da..ec934bf8 100644
--- a/app/pages/Console/OutputBox/index.module.less
+++ b/app/pages/Console/OutputBox/index.module.less
@@ -1,187 +1,215 @@
@import '@app/common.less';
+
.outputBox {
- overflow: hidden;
- background: #fff;
- position: relative;
- display: flex;
- flex-direction: column;
- margin: 20px 0;
- box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);
- border-radius: 6px;
- .outputHeader {
- padding: 12px 15px;
- display: flex;
- align-items: center;
- justify-content: space-between;
- .gql {
- flex: 1;
- display: inline-block;
- margin: 0;
- background-color: #DFFFDA;
- border-radius: 6px;
- padding: 11px 14px;
- cursor: pointer;
- font-family: Roboto-Regular, sans-serif;
- font-weight: 500;
- font-size: 18px;
- color: #27AE60;
- }
- .gqlValue {
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: pre-wrap;
- display: -webkit-box;
- -webkit-line-clamp: 3;
- -webkit-box-orient: vertical;
- word-break: break-all;
- }
- .errorInfo {
- background-color: #fff2f0;
- color: #ff4d4f;
- }
- .outputOperations {
- display: flex;
- align-items: center;
- margin-left: 22px;
- > :global(span.anticon) {
- svg {
- color: @darkBlue;
- width: 22px;
- height: 22px;
- }
- &:not(:last-child) {
- margin-right: 22px;
- }
- &.btnYellow svg {
- color: #F2C94C;
- }
- }
- .btnExport {
- cursor: pointer;
- }
- }
- }
-
- :global(.ant-table) {
- overflow: auto;
- }
-
- .tabContainer {
- position: relative;
- border-top: 1px solid #E0E0E0;
- flex: 1;
- white-space: pre;
- .outputTab {
- min-height: 300px;
- max-height: 720px;
- & > :global(.ant-tabs-nav) {
- width: 80px;
- :global {
- .ant-tabs-tab {
- padding: 0;
- height: 80px;
- display: flex;
- align-items: center;
- justify-content: center;
- margin-top: 0;
- .ant-tabs-tab-btn {
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- color: @darkGray;
- .anticon {
- margin-right: 0;
- svg {
- width: 22px;
- height: 22px;
- }
- }
- }
- &.ant-tabs-tab-active {
- background: @lightBlue;
- .ant-tabs-tab-btn {
- color: @blue;
- }
- }
- }
- }
-
- }
- & > :global(.ant-tabs-content-holder) {
- position: relative;
- background-color: @lightBlue;
- overflow: auto;
- max-height: 700px;
- :global {
- .ant-tabs-content {
- .ant-table, .ant-pagination {
- margin: 20px;
- }
- .ant-tabs-tabpane {
- padding-left: 0;
- }
- }
- }
- }
-
- .errContainer {
- padding: 20px;
- }
- }
- table {
- background: #f8f8fa;
- width: 100%;
-
- thead > tr > th {
- background:@lightGray;
- font-weight: 500;
- }
- }
- }
-
- .outputFooter {
- display: flex;
- align-items: center;
- justify-content: space-between;
- padding: 15px 18px;
- width: 100%;
- height: 65px;
- border-top: 1px solid #E0E0E0;
- font-family: Roboto-Regular, sans-serif;
- font-size: 16px;
- color: @darkBlue;
- letter-spacing: 1.48px;
- .btns {
- display: flex;
- align-items: center;
- svg {
- width: 24px;
- height: 24px;
- margin-right: 16px;
- }
- button:not(:last-child) {
- margin-right: 10px;
- }
- }
- }
+ overflow: hidden;
+ background: #fff;
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ margin: 20px 0;
+ box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);
+ border-radius: 6px;
+
+ .outputHeader {
+ padding: 12px 15px;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+
+ .gql {
+ flex: 1;
+ display: inline-block;
+ margin: 0;
+ background-color: #DFFFDA;
+ border-radius: 6px;
+ padding: 11px 14px;
+ cursor: pointer;
+ font-family: Roboto-Regular, sans-serif;
+ font-weight: 500;
+ font-size: 18px;
+ color: #27AE60;
+ }
+
+ .gqlValue {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: pre-wrap;
+ display: -webkit-box;
+ -webkit-line-clamp: 3;
+ -webkit-box-orient: vertical;
+ word-break: break-all;
+ }
+
+ .errorInfo {
+ background-color: #fff2f0;
+ color: #ff4d4f;
+ }
+
+ .outputOperations {
+ display: flex;
+ align-items: center;
+ margin-left: 22px;
+
+ > :global(span.anticon) {
+ svg {
+ color: @darkBlue;
+ width: 22px;
+ height: 22px;
+ }
+
+ &:not(:last-child) {
+ margin-right: 22px;
+ }
+
+ &.btnYellow svg {
+ color: #F2C94C;
+ }
+ }
+
+ .btnExport {
+ cursor: pointer;
+ }
+ }
+ }
+
+ :global(.ant-table) {
+ overflow: auto;
+ }
+
+ .tabContainer {
+ position: relative;
+ border-top: 1px solid #E0E0E0;
+ flex: 1;
+ white-space: pre;
+
+ .outputTab {
+ min-height: 300px;
+ max-height: 720px;
+
+ &> :global(.ant-tabs-nav) {
+ width: 80px;
+
+ :global {
+ .ant-tabs-tab {
+ padding: 0;
+ height: 80px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ margin-top: 0;
+
+ .ant-tabs-tab-btn {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ color: @darkGray;
+
+ .anticon {
+ margin-right: 0;
+
+ svg {
+ width: 22px;
+ height: 22px;
+ }
+ }
+ }
+
+ &.ant-tabs-tab-active {
+ background: @lightBlue;
+
+ .ant-tabs-tab-btn {
+ color: @blue;
+ }
+ }
+ }
+ }
+
+ }
+
+ &> :global(.ant-tabs-content-holder) {
+ :global {
+ .ant-tabs-content {
+
+ .ant-table,
+ .ant-pagination {
+ margin: 20px;
+ }
+
+ .ant-tabs-tabpane {
+ padding-left: 0;
+ position: relative;
+ background-color: @lightBlue;
+ max-height: 700px;
+ overflow: auto;
+ }
+ }
+ }
+ }
+
+ .errContainer {
+ padding: 20px;
+ }
+ }
+
+ table {
+ background: #f8f8fa;
+ width: 100%;
+
+ thead>tr>th {
+ background: @lightGray;
+ font-weight: 500;
+ }
+ }
+ }
+
+ .outputFooter {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ padding: 15px 18px;
+ width: 100%;
+ height: 65px;
+ border-top: 1px solid #E0E0E0;
+ font-family: Roboto-Regular, sans-serif;
+ font-size: 16px;
+ color: @darkBlue;
+ letter-spacing: 1.48px;
+
+ .btns {
+ display: flex;
+ align-items: center;
+
+ svg {
+ width: 24px;
+ height: 24px;
+ margin-right: 16px;
+ }
+
+ button:not(:last-child) {
+ margin-right: 10px;
+ }
+ }
+ }
}
.exportPopover {
- :global(.ant-popover-inner-content) {
- padding: 0;
- border-radius: 3px;
- }
- .downloadItem {
- padding: 10px 20px;
- display: flex;
+ :global(.ant-popover-inner-content) {
+ padding: 0;
+ border-radius: 3px;
+ }
+
+ .downloadItem {
+ padding: 10px 20px;
+ display: flex;
align-items: center;
justify-content: center;
color: black;
font-weight: 400;
- font-size: 12px;
- &[disabled] {
- color: rgba(0, 0, 0, 0.25);
- }
- }
+ font-size: 12px;
+
+ &[disabled] {
+ color: rgba(0, 0, 0, 0.25);
+ }
+ }
}
\ No newline at end of file
diff --git a/app/pages/Console/OutputBox/index.tsx b/app/pages/Console/OutputBox/index.tsx
index c08df7e1..b5c664a6 100644
--- a/app/pages/Console/OutputBox/index.tsx
+++ b/app/pages/Console/OutputBox/index.tsx
@@ -11,7 +11,8 @@ import cls from 'classnames';
import { GraphStore } from '@app/stores/graph';
import { useI18n } from '@vesoft-inc/i18n';
import type { HistoryResult } from '@app/stores/console';
-import Graphviz from './Graphviz';
+import Explain, { convertExplainData } from '@vesoft-inc/nebula-explain-graph';
+import '@vesoft-inc/nebula-explain-graph/dist/Explain.css';
import ForceGraph from './ForceGraph';
import styles from './index.module.less';
@@ -212,6 +213,22 @@ const OutputBox = (props: IProps) => {
});
};
const resultSuccess = useMemo(() => code === 0, [code]);
+ const isDot = data.headers[0] === 'format';
+ const isExplainRaw =
+ gql
+ ?.trim()
+ .toLowerCase()
+ .match(/^explain(\s+|\{)/) &&
+ dataSource.length &&
+ !isDot;
+ const isProfileRaw =
+ gql
+ ?.trim()
+ .toLowerCase()
+ .match(/^profile(\s+|\{)/) &&
+ dataSource.length &&
+ !isDot;
+
const items = [
resultSuccess && {
key: 'table',
@@ -234,15 +251,27 @@ const OutputBox = (props: IProps) => {
),
},
resultSuccess &&
- data.headers[0] === 'format' && {
- key: 'graphViz',
+ isExplainRaw && {
+ key: 'explain',
+ label: (
+ <>
+
+ {intl.get('console.planTree')}
+ >
+ ),
+ children: convertExplainData(item))} />,
+ },
+
+ resultSuccess &&
+ isProfileRaw && {
+ key: 'profile',
label: (
<>
- {intl.get('console.graphviz')}
+ {intl.get('console.planTree')}
>
),
- children: ,
+ children: convertExplainData(item))} />,
},
showGraph && {
key: 'graph',
diff --git a/app/pages/SketchModeling/Plugins/SketchShapes/index.module.less b/app/pages/SketchModeling/Plugins/SketchShapes/index.module.less
index dbf0d338..ef379ac5 100644
--- a/app/pages/SketchModeling/Plugins/SketchShapes/index.module.less
+++ b/app/pages/SketchModeling/Plugins/SketchShapes/index.module.less
@@ -1,12 +1,14 @@
@import '@app/common.less';
@shadowBlue: rgba(0, 194, 255, 0.6) !important;
@pathBlue: rgba(0, 145, 255, 0.7);
+
.labelContainer {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
+
.label {
text-align: center;
text-overflow: ellipsis;
@@ -16,10 +18,12 @@
user-select: none;
}
}
+
.activeNode {
opacity: 0;
fill: transparent;
}
+
.edgeLabel {
display: flex;
justify-content: center;
@@ -27,6 +31,7 @@
max-height: 100%;
font-size: 12px;
height: 100%;
+
>span {
height: 100%;
position: relative;
@@ -38,6 +43,7 @@
padding: 0 3px;
background-color: @lightWhite;
}
+
.invalid {
width: 10px;
height: 10px;
@@ -47,12 +53,14 @@
background-image: url('@app/static/images/invalid.svg');
}
}
+
:global(.ve-node.active) {
.activeNode {
opacity: 1;
fill: rgba(0, 145, 255, 0.8);
}
}
+
.arrow {
stroke: rgba(99, 111, 129, 0.8);
stroke-width: 1.6px;
@@ -60,6 +68,7 @@
stroke-linejoin: round;
fill: transparent !important;
}
+
.arrowShadow {
stroke: transparent;
stroke-width: 3.6px;
@@ -67,9 +76,12 @@
stroke-linejoin: round;
fill: transparent !important;
}
-:global(.ve-line.active), :global(.ve-line:hover) {
+
+:global(.ve-line.active),
+:global(.ve-line:hover) {
.edgeLabel {
color: @blue;
+
span {
background-color: @lightWhite;
}
@@ -84,47 +96,13 @@
}
}
-:global {
- .ve-line-label {
- rect {
- fill: transparent;
- }
- text {
- font-size: 14px;
- font-weight: 600;
- }
- }
- .ve-line.active,.ve-line:hover{
- .ve-line-shape{
- opacity: 1 !important;
- }
- .ve-line-path{
- stroke:@pathBlue !important;
- }
- .ve-shdow-path{
- stroke-width: 4.5px !important;
- stroke:@shadowBlue;
- filter: drop-shadow(0px 0px 3px rgba(0, 194, 255, 1));
- }
- .ve-line-label {
- text {
- fill: @blue;
- }
- }
- // .ve-line-arrow{
- // fill:transparent!important;
- // opacity: 1 !important;
- // stroke: rgba(0, 145, 255, 0.5) !important;
- // filter: drop-shadow(0px 0px 5px rgba(0, 194, 255, 1));
- // }
- }
-}
.tooltipContainer {
:global {
.ant-tooltip-arrow {
display: none;
}
+
.ant-tooltip-inner {
padding: 0;
background-color: transparent;
diff --git a/app/pages/SketchModeling/index.module.less b/app/pages/SketchModeling/index.module.less
index aff5311e..2f0edc44 100644
--- a/app/pages/SketchModeling/index.module.less
+++ b/app/pages/SketchModeling/index.module.less
@@ -1,17 +1,23 @@
@import '@app/common.less';
+@shadowBlue: rgba(0, 194, 255, 0.6) !important;
+@pathBlue: rgba(0, 145, 255, 0.7);
+
@keyframes panelOut {
- 0%{
+ 0% {
left: calc(100% - 92px);
}
- 100%{
+
+ 100% {
left: max(calc(50% + 150px), calc(100% - 430px));
}
}
+
@keyframes tagPanelOut {
- 0%{
+ 0% {
right: 50%;
}
- 100%{
+
+ 100% {
right: min(calc(100% - 320px), calc(50% + 350px));
}
}
@@ -19,24 +25,71 @@
.sketchModeling {
display: flex;
height: 100%;
+
.sketchCanvas {
position: relative;
display: flex;
flex-direction: column;
height: 100%;
flex: 1;
+
+ :global {
+ .ve-line-label {
+ rect {
+ fill: transparent;
+ }
+
+ text {
+ font-size: 14px;
+ font-weight: 600;
+ }
+ }
+
+ .ve-line.active,
+ .ve-line:hover {
+ .ve-line-shape {
+ opacity: 1 !important;
+ }
+
+ .ve-line-path {
+ stroke: @pathBlue !important;
+ }
+
+ .ve-shdow-path {
+ stroke-width: 4.5px !important;
+ stroke: @shadowBlue;
+ filter: drop-shadow(0px 0px 3px rgba(0, 194, 255, 1));
+ }
+
+ .ve-line-label {
+ text {
+ fill: @blue;
+ }
+ }
+
+ // .ve-line-arrow{
+ // fill:transparent!important;
+ // opacity: 1 !important;
+ // stroke: rgba(0, 145, 255, 0.5) !important;
+ // filter: drop-shadow(0px 0px 5px rgba(0, 194, 255, 1));
+ // }
+ }
+ }
}
+
.content {
flex: 1;
position: relative;
}
}
+
.tagBar {
position: absolute;
bottom: 33px;
right: 50%;
transform: translateX(50%);
height: 86px;
+
.tags {
display: flex;
align-items: center;
@@ -46,28 +99,33 @@
background: #FFFFFF;
box-shadow: 0px 2px 6px rgba(0, 0, 0, 0.25);
border-radius: 6px;
+
.tagLabel {
user-select: none;
font-weight: 500;
font-size: 18px;
margin-right: 20px;
}
+
.tagList {
display: flex;
align-items: center;
}
}
+
.tip {
position: absolute;
right: 4px;
top: 4px;
color: @darkGray;
+
svg {
width: 16px;
height: 16px;
}
}
}
+
.tagItem {
width: 48px;
height: 48px;
@@ -76,17 +134,20 @@
padding: 0 2px;
user-select: none;
cursor: move;
+
&:not(:last-child) {
margin-right: 15px;
}
}
+
.shadowItem {
opacity: 0.5;
position: fixed;
z-index: 9999;
pointer-events: none;
- margin:0;
+ margin: 0;
}
+
.scaleBtns {
position: absolute;
width: 42px;
@@ -100,11 +161,13 @@
box-shadow: 0px 2px 6px rgba(0, 0, 0, 0.25);
border-radius: 6px;
height: 86px;
+
.btn {
svg {
width: 38px;
height: 38px;
}
+
padding: 0 2px;
user-select: none;
cursor: pointer;
@@ -127,17 +190,19 @@
flex-direction: column;
align-items: center;
justify-content: center;
+
img {
width: 140px;
height: 140px;
}
+
.emptyText {
font-weight: 500;
font-size: 18px;
line-height: 25px;
margin: 20px 0 15px;
}
-
+
.emptyTips {
font-weight: 400;
font-size: 12px;
diff --git a/package-lock.json b/package-lock.json
index 1e975b74..fe76f7a5 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -14,7 +14,8 @@
"@ant-design/pro-layout": "^7.13.5",
"@vesoft-inc/force-graph": "2.0.7",
"@vesoft-inc/i18n": "^1.0.1",
- "@vesoft-inc/veditor": "4.4.2",
+ "@vesoft-inc/nebula-explain-graph": "^1.0.2-beta.1",
+ "@vesoft-inc/veditor": "^4.4.8",
"antd": "^5.8.4",
"axios": "^0.23.0",
"bezier-js": "^4.1.1",
@@ -23,7 +24,6 @@
"codemirror": "^5.65.0",
"core-js": "^3.21.1",
"d3-force-3d": "^3.0.2",
- "d3-graphviz": "^4.1.1",
"d3-selection": "2",
"dayjs": "^1.10.7",
"dom-to-image": "^2.6.0",
@@ -2055,10 +2055,22 @@
"node": ">=12"
}
},
+ "node_modules/@vesoft-inc/nebula-explain-graph": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@vesoft-inc/nebula-explain-graph/-/nebula-explain-graph-1.0.2.tgz",
+ "integrity": "sha512-BJLY8ZFegjfAYfMlb2xhcF2kYQkXDKa5YLs4Q+Mb01baVSucaeHp62RhvfonZ5nf6bcJKQUjrskSR88mNJQh6Q==",
+ "peerDependencies": {
+ "@vesoft-inc/veditor": "^4.4.8",
+ "antd": "^4||^5",
+ "copy-to-clipboard": "^3.3.3",
+ "react": "^17||^18",
+ "react-dom": "^17||^18"
+ }
+ },
"node_modules/@vesoft-inc/veditor": {
- "version": "4.4.2",
- "resolved": "https://registry.npmmirror.com/@vesoft-inc/veditor/-/veditor-4.4.2.tgz",
- "integrity": "sha512-YUKRW7HwoUDDO2ICa5suGUeKM8YDKjc0T90IQSXUuPwgEygv5ECUgPnQJaj0/+a5SkTiPIiQ1I/6LqFQ8++RHQ==",
+ "version": "4.4.8",
+ "resolved": "https://registry.npmjs.org/@vesoft-inc/veditor/-/veditor-4.4.8.tgz",
+ "integrity": "sha512-gOz76k81jVDsVx6p9yqIpEw9Ta5UgcNoI6nx5grGdWH/YrAUZm0Gypz8pq4myRuti7xTHMloPFvDRtefW70bxw==",
"dependencies": {
"canvg": "^4.0.0",
"dagre": "^0.8.4",
@@ -2303,6 +2315,7 @@
"version": "5.0.1",
"resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz",
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
"engines": {
"node": ">=8"
}
@@ -2670,19 +2683,6 @@
"resolved": "https://registry.npmmirror.com/classnames/-/classnames-2.3.2.tgz",
"integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw=="
},
- "node_modules/cliui": {
- "version": "8.0.1",
- "resolved": "https://registry.npmmirror.com/cliui/-/cliui-8.0.1.tgz",
- "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.1",
- "wrap-ansi": "^7.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
"node_modules/codemirror": {
"version": "5.65.2",
"resolved": "https://registry.npmmirror.com/codemirror/-/codemirror-5.65.2.tgz",
@@ -2744,9 +2744,9 @@
}
},
"node_modules/copy-to-clipboard": {
- "version": "3.3.1",
- "resolved": "https://registry.npmmirror.com/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz",
- "integrity": "sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==",
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz",
+ "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==",
"dependencies": {
"toggle-selection": "^1.0.6"
}
@@ -2928,35 +2928,6 @@
"resolved": "https://registry.npmmirror.com/d3-format/-/d3-format-2.0.0.tgz",
"integrity": "sha512-Ab3S6XuE/Q+flY96HXT0jOXcM4EAClYFnRGY5zsjRGNy6qCYrQsMffs7cV5Q9xejb35zxW5hf/guKw34kvIKsA=="
},
- "node_modules/d3-graphviz": {
- "version": "4.1.1",
- "resolved": "https://registry.npmmirror.com/d3-graphviz/-/d3-graphviz-4.1.1.tgz",
- "integrity": "sha512-s0IVbKf8rs4eJI2xo5Umr7nXDX/LEZw/x2WtKxmlyQxR0qUY49UiLhBNOX7VDHZywMle43NKEXnU6fn22fpJvQ==",
- "dependencies": {
- "@hpcc-js/wasm": "1.12.8",
- "d3-dispatch": "^2.0.0",
- "d3-format": "^2.0.0",
- "d3-interpolate": "^2.0.1",
- "d3-path": "^2.0.0",
- "d3-timer": "^2.0.0",
- "d3-transition": "^2.0.0",
- "d3-zoom": "^2.0.0"
- },
- "peerDependencies": {
- "d3-selection": "^2.0.0"
- }
- },
- "node_modules/d3-graphviz/node_modules/@hpcc-js/wasm": {
- "version": "1.12.8",
- "resolved": "https://registry.npmmirror.com/@hpcc-js/wasm/-/wasm-1.12.8.tgz",
- "integrity": "sha512-n4q9ARKco2hpCLsuVaW6Az3cDVaua7B3DSONHkc49WtEzgY/btvcDG5Zr1P6PZDv0sQ7oPnAi9Y+W2DI++MgcQ==",
- "dependencies": {
- "yargs": "^17.3.1"
- },
- "bin": {
- "dot-wasm": "bin/cli.js"
- }
- },
"node_modules/d3-interpolate": {
"version": "2.0.1",
"resolved": "https://registry.npmmirror.com/d3-interpolate/-/d3-interpolate-2.0.1.tgz",
@@ -2970,11 +2941,6 @@
"resolved": "https://registry.npmmirror.com/d3-octree/-/d3-octree-0.2.2.tgz",
"integrity": "sha512-ysk9uSPAhZVb0Gq4GXzghl/Yqxu80dHrq55I53qaIMdGB65+0UfO84sr4Fci2JHumcgh6H4WE0r8LwxPagkE+g=="
},
- "node_modules/d3-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmmirror.com/d3-path/-/d3-path-2.0.0.tgz",
- "integrity": "sha512-ZwZQxKhBnv9yHaiWd6ZU4x5BtCQ7pXszEV9CU6kRgwIQVQGLMv1oiL4M+MK/n79sYzsj+gcgpPQSctJUsLN7fA=="
- },
"node_modules/d3-quadtree": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/d3-quadtree/-/d3-quadtree-2.0.0.tgz",
@@ -3266,7 +3232,8 @@
"node_modules/emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
},
"node_modules/emojis-list": {
"version": "3.0.0",
@@ -4218,14 +4185,6 @@
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
"dev": true
},
- "node_modules/get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "engines": {
- "node": "6.* || 8.* || >= 10.*"
- }
- },
"node_modules/gl-matrix": {
"version": "3.4.3",
"resolved": "https://registry.npmmirror.com/gl-matrix/-/gl-matrix-3.4.3.tgz",
@@ -4643,6 +4602,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
"engines": {
"node": ">=8"
}
@@ -7436,14 +7396,6 @@
"node": "*"
}
},
- "node_modules/require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/require-from-string": {
"version": "2.0.2",
"resolved": "https://registry.npmmirror.com/require-from-string/-/require-from-string-2.0.2.tgz",
@@ -7775,6 +7727,7 @@
"version": "4.2.3",
"resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz",
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
@@ -7788,6 +7741,7 @@
"version": "6.0.1",
"resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz",
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
"dependencies": {
"ansi-regex": "^5.0.1"
},
@@ -8585,46 +8539,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/wrap-ansi/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/wrap-ansi/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/wrap-ansi/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
- },
"node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz",
@@ -8653,14 +8567,6 @@
"node": ">=14"
}
},
- "node_modules/y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz",
@@ -8676,23 +8582,6 @@
"node": ">= 6"
}
},
- "node_modules/yargs": {
- "version": "17.6.0",
- "resolved": "https://registry.npmmirror.com/yargs/-/yargs-17.6.0.tgz",
- "integrity": "sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g==",
- "dependencies": {
- "cliui": "^8.0.1",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.3",
- "y18n": "^5.0.5",
- "yargs-parser": "^21.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
"node_modules/yargs-parser": {
"version": "20.2.9",
"resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.9.tgz",
@@ -8702,14 +8591,6 @@
"node": ">=10"
}
},
- "node_modules/yargs/node_modules/yargs-parser": {
- "version": "21.0.1",
- "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-21.0.1.tgz",
- "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==",
- "engines": {
- "node": ">=12"
- }
- },
"node_modules/yocto-queue": {
"version": "0.1.0",
"resolved": "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-0.1.0.tgz",
@@ -10014,10 +9895,16 @@
}
}
},
+ "@vesoft-inc/nebula-explain-graph": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@vesoft-inc/nebula-explain-graph/-/nebula-explain-graph-1.0.2.tgz",
+ "integrity": "sha512-BJLY8ZFegjfAYfMlb2xhcF2kYQkXDKa5YLs4Q+Mb01baVSucaeHp62RhvfonZ5nf6bcJKQUjrskSR88mNJQh6Q==",
+ "requires": {}
+ },
"@vesoft-inc/veditor": {
- "version": "4.4.2",
- "resolved": "https://registry.npmmirror.com/@vesoft-inc/veditor/-/veditor-4.4.2.tgz",
- "integrity": "sha512-YUKRW7HwoUDDO2ICa5suGUeKM8YDKjc0T90IQSXUuPwgEygv5ECUgPnQJaj0/+a5SkTiPIiQ1I/6LqFQ8++RHQ==",
+ "version": "4.4.8",
+ "resolved": "https://registry.npmjs.org/@vesoft-inc/veditor/-/veditor-4.4.8.tgz",
+ "integrity": "sha512-gOz76k81jVDsVx6p9yqIpEw9Ta5UgcNoI6nx5grGdWH/YrAUZm0Gypz8pq4myRuti7xTHMloPFvDRtefW70bxw==",
"requires": {
"canvg": "^4.0.0",
"dagre": "^0.8.4",
@@ -10243,7 +10130,8 @@
"ansi-regex": {
"version": "5.0.1",
"resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true
},
"ansi-styles": {
"version": "3.2.1",
@@ -10536,16 +10424,6 @@
"resolved": "https://registry.npmmirror.com/classnames/-/classnames-2.3.2.tgz",
"integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw=="
},
- "cliui": {
- "version": "8.0.1",
- "resolved": "https://registry.npmmirror.com/cliui/-/cliui-8.0.1.tgz",
- "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
- "requires": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.1",
- "wrap-ansi": "^7.0.0"
- }
- },
"codemirror": {
"version": "5.65.2",
"resolved": "https://registry.npmmirror.com/codemirror/-/codemirror-5.65.2.tgz",
@@ -10604,9 +10482,9 @@
}
},
"copy-to-clipboard": {
- "version": "3.3.1",
- "resolved": "https://registry.npmmirror.com/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz",
- "integrity": "sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==",
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz",
+ "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==",
"requires": {
"toggle-selection": "^1.0.6"
}
@@ -10749,31 +10627,6 @@
"resolved": "https://registry.npmmirror.com/d3-format/-/d3-format-2.0.0.tgz",
"integrity": "sha512-Ab3S6XuE/Q+flY96HXT0jOXcM4EAClYFnRGY5zsjRGNy6qCYrQsMffs7cV5Q9xejb35zxW5hf/guKw34kvIKsA=="
},
- "d3-graphviz": {
- "version": "4.1.1",
- "resolved": "https://registry.npmmirror.com/d3-graphviz/-/d3-graphviz-4.1.1.tgz",
- "integrity": "sha512-s0IVbKf8rs4eJI2xo5Umr7nXDX/LEZw/x2WtKxmlyQxR0qUY49UiLhBNOX7VDHZywMle43NKEXnU6fn22fpJvQ==",
- "requires": {
- "@hpcc-js/wasm": "1.12.8",
- "d3-dispatch": "^2.0.0",
- "d3-format": "^2.0.0",
- "d3-interpolate": "^2.0.1",
- "d3-path": "^2.0.0",
- "d3-timer": "^2.0.0",
- "d3-transition": "^2.0.0",
- "d3-zoom": "^2.0.0"
- },
- "dependencies": {
- "@hpcc-js/wasm": {
- "version": "1.12.8",
- "resolved": "https://registry.npmmirror.com/@hpcc-js/wasm/-/wasm-1.12.8.tgz",
- "integrity": "sha512-n4q9ARKco2hpCLsuVaW6Az3cDVaua7B3DSONHkc49WtEzgY/btvcDG5Zr1P6PZDv0sQ7oPnAi9Y+W2DI++MgcQ==",
- "requires": {
- "yargs": "^17.3.1"
- }
- }
- }
- },
"d3-interpolate": {
"version": "2.0.1",
"resolved": "https://registry.npmmirror.com/d3-interpolate/-/d3-interpolate-2.0.1.tgz",
@@ -10787,11 +10640,6 @@
"resolved": "https://registry.npmmirror.com/d3-octree/-/d3-octree-0.2.2.tgz",
"integrity": "sha512-ysk9uSPAhZVb0Gq4GXzghl/Yqxu80dHrq55I53qaIMdGB65+0UfO84sr4Fci2JHumcgh6H4WE0r8LwxPagkE+g=="
},
- "d3-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmmirror.com/d3-path/-/d3-path-2.0.0.tgz",
- "integrity": "sha512-ZwZQxKhBnv9yHaiWd6ZU4x5BtCQ7pXszEV9CU6kRgwIQVQGLMv1oiL4M+MK/n79sYzsj+gcgpPQSctJUsLN7fA=="
- },
"d3-quadtree": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/d3-quadtree/-/d3-quadtree-2.0.0.tgz",
@@ -11029,7 +10877,8 @@
"emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
},
"emojis-list": {
"version": "3.0.0",
@@ -11751,11 +11600,6 @@
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
"dev": true
},
- "get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
- },
"gl-matrix": {
"version": "3.4.3",
"resolved": "https://registry.npmmirror.com/gl-matrix/-/gl-matrix-3.4.3.tgz",
@@ -12094,7 +11938,8 @@
"is-fullwidth-code-point": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true
},
"is-glob": {
"version": "4.0.3",
@@ -14194,11 +14039,6 @@
"resolved": "https://registry.npmmirror.com/remedial/-/remedial-1.0.8.tgz",
"integrity": "sha512-/62tYiOe6DzS5BqVsNpH/nkGlX45C/Sp6V+NtiN6JQNS1Viay7cWkazmRkrQrdFj2eshDe96SIQNIoMxqhzBOg=="
},
- "require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="
- },
"require-from-string": {
"version": "2.0.2",
"resolved": "https://registry.npmmirror.com/require-from-string/-/require-from-string-2.0.2.tgz",
@@ -14472,6 +14312,7 @@
"version": "4.2.3",
"resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz",
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
"requires": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
@@ -14482,6 +14323,7 @@
"version": "6.0.1",
"resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz",
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
"requires": {
"ansi-regex": "^5.0.1"
}
@@ -15069,39 +14911,6 @@
"integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
"dev": true
},
- "wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
- }
- }
- },
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz",
@@ -15126,11 +14935,6 @@
}
}
},
- "y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="
- },
"yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz",
@@ -15143,27 +14947,6 @@
"integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
"dev": true
},
- "yargs": {
- "version": "17.6.0",
- "resolved": "https://registry.npmmirror.com/yargs/-/yargs-17.6.0.tgz",
- "integrity": "sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g==",
- "requires": {
- "cliui": "^8.0.1",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.3",
- "y18n": "^5.0.5",
- "yargs-parser": "^21.0.0"
- },
- "dependencies": {
- "yargs-parser": {
- "version": "21.0.1",
- "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-21.0.1.tgz",
- "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg=="
- }
- }
- },
"yargs-parser": {
"version": "20.2.9",
"resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.9.tgz",
diff --git a/package.json b/package.json
index 5c7f9cc4..1f0e8c64 100644
--- a/package.json
+++ b/package.json
@@ -20,7 +20,8 @@
"@ant-design/pro-layout": "^7.13.5",
"@vesoft-inc/force-graph": "2.0.7",
"@vesoft-inc/i18n": "^1.0.1",
- "@vesoft-inc/veditor": "4.4.2",
+ "@vesoft-inc/nebula-explain-graph": "^1.0.2-beta.1",
+ "@vesoft-inc/veditor": "^4.4.8",
"antd": "^5.8.4",
"axios": "^0.23.0",
"bezier-js": "^4.1.1",
@@ -29,7 +30,6 @@
"codemirror": "^5.65.0",
"core-js": "^3.21.1",
"d3-force-3d": "^3.0.2",
- "d3-graphviz": "^4.1.1",
"d3-selection": "2",
"dayjs": "^1.10.7",
"dom-to-image": "^2.6.0",
@@ -105,4 +105,4 @@
"ci": {
"version": "8"
}
-}
+}
\ No newline at end of file
diff --git a/public/graphvizlib.wasm b/public/graphvizlib.wasm
deleted file mode 100644
index 374f5a25177fbddf518c999de8064d56dcc67991..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 926921
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