@rsdoctor/components 1.3.11 → 1.3.13-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Charts/TreeMap.d.ts +5 -1
- package/dist/components/Charts/TreeMap.mjs +518 -202
- package/dist/components/Charts/TreeMap.mjs.map +1 -1
- package/dist/components/Charts/constants.d.ts +6 -5
- package/dist/components/Charts/constants.mjs +47 -43
- package/dist/components/Charts/constants.mjs.map +1 -1
- package/dist/components/Charts/treemap.module.mjs +32 -4
- package/dist/components/Charts/treemap.module.mjs.map +1 -1
- package/dist/components/Charts/treemap_module.css +193 -39
- package/dist/components/Charts/treemap_module.css.map +1 -1
- package/dist/components/Resolver/analysis.mjs +87 -94
- package/dist/components/Resolver/analysis.mjs.map +1 -1
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack://./src/components/Charts/treemap.module.scss"],"names":[],"mappings":"AADA;EAEE,sBAAsB;EACtB,
|
|
1
|
+
{"version":3,"sources":["webpack://./src/components/Charts/treemap.module.scss"],"names":[],"mappings":"AADA;EAEE,sBAAsB;EACtB,yBAAyB;EACzB,mBAAmB;EACnB,2BAA2B;EAC3B,aAAa;EACb,kBAAkB;EAClB,gBAAgB;AAClB;;AAEA;EACE,yBAAyB;EACzB,iBAAiB;EACjB,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,YAAY;EACZ,YAAY;EACZ,aAAa;AACf;;AAEA;EACE,YAAY;EACZ,YAAY;EACZ,aAAa;AACf;;AAEA;EACE,YAAY;EACZ,YAAY;EACZ,aAAa;AACf;;AAEA;EACE,YAAY;EACZ,YAAY;EACZ,aAAa;AACf;;AAEA;EACE,WAAW;EACX,yBAAyB;EACzB,+BAA+B;EAC/B,sBAAsB;EACtB,YAAY;EACZ,gBAAgB;EAChB,YAAY;EACZ,yBAAyB;EACzB,aAAa;EACb,kBAAkB;EAClB,iBAAiB;AACnB;;AAEA;EACE,kBAAkB;EAClB,OAAO;EACP,4BAA4B;AAC9B;;AAEA;EACE,sBAAsB;EACtB,OAAO;EACP,SAAS;EACT,aAAa;EACb,aAAa;EACb,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,gBAAgB;EAChB,eAAe;EACf,iBAAiB;AACnB;;AAEA;EACE,WAAW;EACX,eAAe;EACf,gBAAgB;EAChB,sBAAsB;EACtB,kBAAkB;EAClB,YAAY;EACZ,qBAAqB;EACrB,kBAAkB;EAClB,SAAS;EACT,WAAW;AACb;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,OAAO;EACP,WAAW;EACX,YAAY;EACZ,kBAAkB;EAClB,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,YAAY;EACZ,kBAAkB;AACpB;;AAEA;EACE,YAAY;EACZ,eAAe;EACf,WAAW;EACX,qBAAqB;EACrB,yBAAyB;EACzB,kBAAkB;EAClB,uBAAuB;EACvB,mBAAmB;EACnB,iBAAiB;EACjB,eAAe;EACf,mBAAmB;EACnB,aAAa;EACb,kBAAkB;EAClB,SAAS;EACT,WAAW;EACX,+BAA+B;AACjC;;AAEA;EACE,cAAc;EACd,gBAAgB;EAChB,qBAAqB;EACrB,4BAA4B;AAC9B;;AAEA;EACE,qBAAqB;AACvB;;AAEA;EACE,sBAAsB;EACtB,QAAQ;EACR,aAAa;AACf;;AAEA;EACE,8BAA8B;EAC9B,mBAAmB;EACnB,eAAe;EACf,aAAa;AACf;;AAEA;EACE,uBAAuB;EACvB,mBAAmB;EACnB,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,mBAAmB;EACnB,gBAAgB;EAChB,eAAe;AACjB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,8BAA8B;EAC9B,eAAe;EACf,eAAe;EACf,aAAa;AACf;;AAEA;EACE,WAAW;EACX,kBAAkB;EAClB,iBAAiB;AACnB;;AAEA;EACE,sBAAsB;EACtB,yBAAyB;EACzB,kBAAkB;EAClB,iBAAiB;EACjB,gBAAgB;EAChB,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,yBAAyB;EACzB,gCAAgC;EAChC,iBAAiB;EACjB,eAAe;EACf,iBAAiB;AACnB;;AAEA;EACE,iBAAiB;EACjB,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,eAAe;EACf,qBAAqB;EACrB,gCAAgC;EAChC,iBAAiB;EACjB,eAAe;EACf,gCAAgC;AAClC;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,WAAW;EACX,kBAAkB;EAClB,gBAAgB;EAChB,iBAAiB;EACjB,eAAe;AACjB;;AAEA;EACE,kBAAkB;AACpB","sourcesContent":[".treemap{display:flex;flex-direction:row;height:calc(100vh - 100px);position:relative;overflow:hidden;border:2px solid #e8e8e8;background-color:#fff}.treemap :global .ant-checkbox-wrapper{font-weight:400;font-size:12px;user-select:none}.treemap:fullscreen,.treemap:-webkit-full-screen,.treemap:-moz-full-screen,.treemap:-ms-fullscreen{height:100vh;width:100vw;border:none}.sidebar{width:300px;min-width:300px;background-color:#f6f6f6;border-right:1px solid #e8e8e8;display:flex;flex-direction:column;transition:transform .3s ease;z-index:10;height:100%;position:relative;overflow:visible}.sidebar.collapsed{transform:translateX(-100%);position:absolute;left:0}.sidebar-content{padding:15px;overflow-y:auto;flex:1;display:flex;flex-direction:column;gap:20px}.sidebar-content h4{margin:0 0 10px 0;font-size:14px;font-weight:bold;color:#333}.sidebar-toggle{position:absolute;top:10px;right:10px;z-index:20;background:#fff;border:1px solid #ccc;border-radius:4px;padding:5px;cursor:pointer;transition:right .3s ease}.sidebar-toggle.collapsed{right:-40px}.chart-wrapper{flex:1;position:relative;height:100%;width:100%;overflow:hidden}.chart-container{position:relative;width:100%;height:100%}.fullscreen-button{position:absolute;top:10px;right:10px;z-index:100;background:hsla(0,0%,100%,.9);border:1px solid #d9d9d9;border-radius:4px;padding:8px 12px;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:16px;color:#333;box-shadow:0 2px 8px rgba(0,0,0,.15);transition:all .3s ease}.fullscreen-button:hover{background:#fff;border-color:#40a9ff;color:#40a9ff;box-shadow:0 4px 12px rgba(0,0,0,.2)}.fullscreen-button:active{transform:scale(0.95)}.chunk-list{display:flex;flex-direction:column;gap:6px}.chunk-item{display:flex;justify-content:space-between;align-items:center;font-size:12px}.chunk-item :global .ant-checkbox-wrapper{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.size-tag{color:#999;font-size:11px;margin-left:8px;white-space:nowrap}.search-box{margin-bottom:10px}.tooltip-row{font-size:12px;display:flex;justify-content:space-between;margin-top:4px}.tooltip-label{font-weight:bold;margin-right:10px;color:#333}.search-results{margin-top:10px;max-height:300px;overflow-y:auto;border:1px solid #e8e8e8;border-radius:4px;background-color:#fff}.search-results-header{padding:8px 12px;font-size:12px;font-weight:bold;color:#666;background-color:#f5f5f5;border-bottom:1px solid #e8e8e8}.search-results-list{max-height:250px;overflow-y:auto}.search-result-item{padding:8px 12px;font-size:12px;color:#333;cursor:pointer;border-bottom:1px solid #f0f0f0;word-break:break-all;transition:background-color .2s}.search-result-item:hover{background-color:#e6f7ff}.search-result-item:last-child{border-bottom:none}.search-results-empty{margin-top:10px;padding:8px 12px;font-size:12px;color:#999;text-align:center}.all-none-checkbox{margin-bottom:6px}"],"sourceRoot":""}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { CloseCircleOutlined, FileSearchOutlined
|
|
2
|
+
import { CloseCircleOutlined, FileSearchOutlined } from "@ant-design/icons";
|
|
3
3
|
import { SDK } from "@rsdoctor/types";
|
|
4
4
|
import { Resolver } from "@rsdoctor/utils/common";
|
|
5
|
-
import {
|
|
5
|
+
import { Card, Col, Row, Space, Table, Tabs, Typography } from "antd";
|
|
6
6
|
import { get } from "es-toolkit/compat";
|
|
7
|
-
import
|
|
7
|
+
import { useMemo, useState } from "react";
|
|
8
8
|
import { Size } from "../../constants.mjs";
|
|
9
9
|
import { createFileStructures, formatCosts, mapFileKey } from "../../utils/index.mjs";
|
|
10
10
|
import { FileTree } from "../FileTree/index.mjs";
|
|
@@ -12,103 +12,96 @@ import { KeywordInput } from "../Form/keyword.mjs";
|
|
|
12
12
|
import { ServerAPIProvider, withServerAPI } from "../Manifest/index.mjs";
|
|
13
13
|
import { DiffViewer } from "../base/index.mjs";
|
|
14
14
|
const height = 735;
|
|
15
|
-
const ResolverDetailsPanel = ({ filepath, before, after, resolvers })
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
children: /*#__PURE__*/ jsx(DiffViewer, {
|
|
30
|
-
style: {
|
|
31
|
-
height: height + 50
|
|
32
|
-
},
|
|
33
|
-
isEmbed: true,
|
|
34
|
-
originalFilePath: filepath,
|
|
35
|
-
modifiedFilePath: filepath,
|
|
36
|
-
original: before,
|
|
37
|
-
modified: after
|
|
38
|
-
})
|
|
39
|
-
})
|
|
40
|
-
}),
|
|
41
|
-
/*#__PURE__*/ jsx(Col, {
|
|
42
|
-
span: collapsed ? 2 : 7,
|
|
43
|
-
children: /*#__PURE__*/ jsx(Card, {
|
|
44
|
-
title: collapsed ? '...' : 'Resolve Details',
|
|
45
|
-
extra: /*#__PURE__*/ jsx(Button, {
|
|
46
|
-
onClick: ()=>setCollapsed(!collapsed),
|
|
47
|
-
size: "small",
|
|
48
|
-
icon: collapsed ? /*#__PURE__*/ jsx(MenuFoldOutlined, {}) : /*#__PURE__*/ jsx(MenuUnfoldOutlined, {})
|
|
49
|
-
}),
|
|
50
|
-
style: collapsed ? {
|
|
51
|
-
width: 80
|
|
52
|
-
} : void 0,
|
|
53
|
-
children: collapsed ? null : /*#__PURE__*/ jsx(Table, {
|
|
54
|
-
style: {
|
|
55
|
-
width: '100%',
|
|
56
|
-
height,
|
|
57
|
-
overflowY: 'scroll',
|
|
58
|
-
wordBreak: 'break-all'
|
|
15
|
+
const ResolverDetailsPanel = ({ filepath, before, after, resolvers })=>/*#__PURE__*/ jsx(Col, {
|
|
16
|
+
flex: 1,
|
|
17
|
+
children: /*#__PURE__*/ jsx(Tabs, {
|
|
18
|
+
defaultActiveKey: "diff",
|
|
19
|
+
items: [
|
|
20
|
+
{
|
|
21
|
+
key: 'diff',
|
|
22
|
+
label: 'Resolve Diff Viewer',
|
|
23
|
+
children: /*#__PURE__*/ jsx(Card, {
|
|
24
|
+
styles: {
|
|
25
|
+
body: {
|
|
26
|
+
padding: 0,
|
|
27
|
+
overflow: 'hidden'
|
|
28
|
+
}
|
|
59
29
|
},
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
rowKey: (e)=>e.request,
|
|
64
|
-
columns: [
|
|
65
|
-
{
|
|
66
|
-
title: 'Source Code',
|
|
67
|
-
width: 200,
|
|
68
|
-
render: (_v, r)=>/*#__PURE__*/ jsx(Typography.Text, {
|
|
69
|
-
copyable: true,
|
|
70
|
-
children: /*#__PURE__*/ jsx(Typography.Text, {
|
|
71
|
-
code: true,
|
|
72
|
-
strong: true,
|
|
73
|
-
children: r.request
|
|
74
|
-
})
|
|
75
|
-
})
|
|
30
|
+
children: /*#__PURE__*/ jsx(DiffViewer, {
|
|
31
|
+
style: {
|
|
32
|
+
height: height + 50
|
|
76
33
|
},
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
34
|
+
isEmbed: true,
|
|
35
|
+
originalFilePath: filepath,
|
|
36
|
+
modifiedFilePath: filepath,
|
|
37
|
+
original: before,
|
|
38
|
+
modified: after
|
|
39
|
+
})
|
|
40
|
+
})
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
key: 'details',
|
|
44
|
+
label: 'Resolve Details',
|
|
45
|
+
children: /*#__PURE__*/ jsx(Card, {
|
|
46
|
+
children: /*#__PURE__*/ jsx(Table, {
|
|
47
|
+
style: {
|
|
48
|
+
width: '100%',
|
|
49
|
+
height,
|
|
50
|
+
overflowY: 'scroll',
|
|
51
|
+
wordBreak: 'break-all'
|
|
89
52
|
},
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
53
|
+
size: "small",
|
|
54
|
+
pagination: false,
|
|
55
|
+
bordered: true,
|
|
56
|
+
rowKey: (e)=>e.request,
|
|
57
|
+
columns: [
|
|
58
|
+
{
|
|
59
|
+
title: 'Source Code',
|
|
60
|
+
width: 200,
|
|
61
|
+
render: (_v, r)=>/*#__PURE__*/ jsx(Typography.Text, {
|
|
62
|
+
copyable: true,
|
|
63
|
+
children: /*#__PURE__*/ jsx(Typography.Text, {
|
|
64
|
+
code: true,
|
|
65
|
+
strong: true,
|
|
66
|
+
children: r.request
|
|
67
|
+
})
|
|
68
|
+
})
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
title: 'Duration',
|
|
72
|
+
width: 80,
|
|
73
|
+
render: (_v, r)=>/*#__PURE__*/ jsx(Typography.Text, {
|
|
74
|
+
strong: true,
|
|
75
|
+
children: formatCosts(r.costs)
|
|
76
|
+
}),
|
|
77
|
+
sorter: (a, b)=>a.costs - b.costs,
|
|
78
|
+
sortDirections: [
|
|
79
|
+
'descend',
|
|
80
|
+
'ascend'
|
|
81
|
+
]
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
title: 'Resolve Result',
|
|
85
|
+
render: (_v, r)=>{
|
|
86
|
+
if (Resolver.isResolveSuccessData(r)) return /*#__PURE__*/ jsx(Typography.Text, {
|
|
87
|
+
copyable: true,
|
|
88
|
+
children: r.result
|
|
89
|
+
});
|
|
90
|
+
return /*#__PURE__*/ jsx(CloseCircleOutlined, {
|
|
91
|
+
style: {
|
|
92
|
+
color: '#f50'
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
}
|
|
102
96
|
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
97
|
+
],
|
|
98
|
+
dataSource: resolvers
|
|
99
|
+
})
|
|
106
100
|
})
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
|
|
101
|
+
}
|
|
102
|
+
]
|
|
103
|
+
})
|
|
110
104
|
});
|
|
111
|
-
};
|
|
112
105
|
const ResolverFiles = (props)=>{
|
|
113
106
|
const { resolver, cwd } = props;
|
|
114
107
|
const [filepath, setFilepath] = useState('');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components/Resolver/analysis.mjs","sources":["../../../src/components/Resolver/analysis.tsx"],"sourcesContent":["/* eslint-disable react/no-unescaped-entities */\nimport {\n CloseCircleOutlined,\n FileSearchOutlined,\n MenuFoldOutlined,\n MenuUnfoldOutlined,\n} from '@ant-design/icons';\nimport { SDK } from '@rsdoctor/types';\nimport { Resolver } from '@rsdoctor/utils/common';\nimport { Button, Card, Col, Row, Space, Table, Typography } from 'antd';\nimport { get } from 'es-toolkit/compat';\nimport React, { useMemo, useState } from 'react';\nimport { Size } from '../../constants';\nimport { createFileStructures, formatCosts, mapFileKey } from '../../utils';\nimport { FileTree } from '../FileTree';\nimport { KeywordInput } from '../Form/keyword';\nimport { ServerAPIProvider, withServerAPI } from '../Manifest';\nimport { DiffViewer } from '../base';\n\nconst height = 735;\n\nconst ResolverDetailsPanel: React.FC<\n SDK.ServerAPI.InferResponseType<SDK.ServerAPI.API.GetResolverFileDetails>\n> = ({ filepath, before, after, resolvers }) => {\n const [collapsed, setCollapsed] = useState(false);\n\n return (\n <React.Fragment>\n <Col flex={1}>\n <Card\n title=\"Resolve Diff Viewer\"\n styles={{ body: { padding: 0, overflow: 'hidden' } }}\n >\n <DiffViewer\n style={{\n height: height + 50,\n }}\n isEmbed\n originalFilePath={filepath}\n modifiedFilePath={filepath}\n original={before}\n modified={after}\n />\n </Card>\n </Col>\n <Col span={collapsed ? 2 : 7}>\n <Card\n title={collapsed ? '...' : 'Resolve Details'}\n extra={\n <Button\n onClick={() => setCollapsed(!collapsed)}\n size=\"small\"\n icon={collapsed ? <MenuFoldOutlined /> : <MenuUnfoldOutlined />}\n ></Button>\n }\n style={collapsed ? { width: 80 } : undefined}\n >\n {collapsed ? null : (\n <Table\n style={{\n width: '100%',\n height,\n overflowY: 'scroll',\n wordBreak: 'break-all',\n }}\n size=\"small\"\n pagination={false}\n bordered\n rowKey={(e) => e.request}\n columns={[\n {\n title: 'Source Code',\n width: 200,\n render: (_v, r) => (\n <Typography.Text copyable>\n <Typography.Text code strong>\n {r.request}\n </Typography.Text>\n </Typography.Text>\n ),\n },\n {\n title: 'Duration',\n width: 80,\n render: (_v, r) => (\n <Typography.Text strong>\n {formatCosts(r.costs)}\n </Typography.Text>\n ),\n sorter: (a, b) => a.costs - b.costs,\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Resolve Result',\n render: (_v, r) => {\n if (Resolver.isResolveSuccessData(r))\n return (\n <Typography.Text copyable>{r.result}</Typography.Text>\n );\n return <CloseCircleOutlined style={{ color: '#f50' }} />;\n },\n },\n ]}\n dataSource={resolvers}\n />\n )}\n </Card>\n </Col>\n </React.Fragment>\n );\n};\n\nexport const ResolverFiles: React.FC<{\n filename: string;\n cwd: string;\n resolver: SDK.ServerAPI.InferResponseType<SDK.ServerAPI.API.GetResolverFileTree>;\n}> = (props) => {\n const { resolver, cwd } = props;\n\n const [filepath, setFilepath] = useState('');\n\n const inlinedResourcePathKey = '__RESOURCEPATH__';\n const n = '/node_modules/';\n\n const paths = useMemo(() => {\n return resolver.map((e) => e.issuerPath).filter(Boolean);\n }, [resolver]);\n\n const filterPaths = useMemo(() => {\n return paths.filter((e) =>\n props.filename ? e.indexOf(props.filename) > -1 : true,\n );\n }, [props.filename, paths]);\n\n const allNodeModules =\n filterPaths.length && filterPaths.every((e) => e.indexOf(n) > -1);\n\n const files = useMemo(() => {\n return createFileStructures({\n files: filterPaths.length ? filterPaths : paths,\n cwd,\n fileTitle(file, basename) {\n return <div onClick={() => setFilepath(file)}>{basename}</div>;\n },\n });\n }, [props.filename]);\n\n return (\n <Row justify=\"start\" align=\"top\" wrap={false} gutter={Size.BasePadding}>\n <Col span={7}>\n <Card title=\"Files\">\n <FileTree\n style={{ width: '100%', height, overflow: 'scroll' }}\n treeData={files}\n defaultExpandedKeys={mapFileKey(\n files,\n allNodeModules ? 1 : 4,\n allNodeModules\n ? undefined\n : (node) => {\n const resourcePath: string = get(\n node,\n inlinedResourcePathKey,\n )!;\n const isNodeModules = resourcePath.indexOf(n) > -1;\n\n if (\n filterPaths.length &&\n filterPaths.every((e) => e.indexOf(n) > -1)\n ) {\n return true;\n }\n\n return !isNodeModules;\n },\n )}\n key={`tree_${props.filename}`}\n />\n </Card>\n </Col>\n {filepath && (\n <ServerAPIProvider\n api={SDK.ServerAPI.API.GetResolverFileDetails}\n body={{ filepath }}\n >\n {(resolvers) => <ResolverDetailsPanel {...resolvers} />}\n </ServerAPIProvider>\n )}\n </Row>\n );\n};\n\nexport const ResolverAnalysisBase: React.FC<{\n project: SDK.ServerAPI.InferResponseType<SDK.ServerAPI.API.GetProjectInfo>;\n}> = ({ project }) => {\n const { root: cwd } = project;\n const [filename, setFilename] = useState('');\n\n return (\n <div style={{ width: '100%' }}>\n <Space\n style={{ marginTop: Size.BasePadding, marginBottom: Size.BasePadding }}\n >\n <KeywordInput\n icon={<FileSearchOutlined />}\n label=\"Filename\"\n placeholder=\"search filename by keyword\"\n onChange={(e) => setFilename(e)}\n />\n </Space>\n <ServerAPIProvider api={SDK.ServerAPI.API.GetResolverFileTree}>\n {(resolver) => (\n <ResolverFiles filename={filename} resolver={resolver} cwd={cwd} />\n )}\n </ServerAPIProvider>\n </div>\n );\n};\n\nexport const ResolverAnalysis = withServerAPI({\n api: SDK.ServerAPI.API.GetProjectInfo,\n responsePropName: 'project',\n Component: ResolverAnalysisBase,\n});\n"],"names":["height","ResolverDetailsPanel","filepath","before","after","resolvers","collapsed","setCollapsed","useState","React","Col","Card","DiffViewer","Button","MenuFoldOutlined","MenuUnfoldOutlined","undefined","Table","e","_v","r","Typography","formatCosts","a","b","Resolver","CloseCircleOutlined","ResolverFiles","props","resolver","cwd","setFilepath","inlinedResourcePathKey","n","paths","useMemo","Boolean","filterPaths","allNodeModules","files","createFileStructures","file","basename","Row","Size","FileTree","mapFileKey","node","resourcePath","get","isNodeModules","ServerAPIProvider","SDK","ResolverAnalysisBase","project","filename","setFilename","Space","KeywordInput","FileSearchOutlined","ResolverAnalysis","withServerAPI"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"components/Resolver/analysis.mjs","sources":["../../../src/components/Resolver/analysis.tsx"],"sourcesContent":["/* eslint-disable react/no-unescaped-entities */\nimport { CloseCircleOutlined, FileSearchOutlined } from '@ant-design/icons';\nimport { SDK } from '@rsdoctor/types';\nimport { Resolver } from '@rsdoctor/utils/common';\nimport { Card, Col, Row, Space, Table, Tabs, Typography } from 'antd';\nimport { get } from 'es-toolkit/compat';\nimport React, { useMemo, useState } from 'react';\nimport { Size } from '../../constants';\nimport { createFileStructures, formatCosts, mapFileKey } from '../../utils';\nimport { FileTree } from '../FileTree';\nimport { KeywordInput } from '../Form/keyword';\nimport { ServerAPIProvider, withServerAPI } from '../Manifest';\nimport { DiffViewer } from '../base';\n\nconst height = 735;\n\nconst ResolverDetailsPanel: React.FC<\n SDK.ServerAPI.InferResponseType<SDK.ServerAPI.API.GetResolverFileDetails>\n> = ({ filepath, before, after, resolvers }) => {\n return (\n <Col flex={1}>\n <Tabs\n defaultActiveKey=\"diff\"\n items={[\n {\n key: 'diff',\n label: 'Resolve Diff Viewer',\n children: (\n <Card styles={{ body: { padding: 0, overflow: 'hidden' } }}>\n <DiffViewer\n style={{\n height: height + 50,\n }}\n isEmbed\n originalFilePath={filepath}\n modifiedFilePath={filepath}\n original={before}\n modified={after}\n />\n </Card>\n ),\n },\n {\n key: 'details',\n label: 'Resolve Details',\n children: (\n <Card>\n <Table\n style={{\n width: '100%',\n height,\n overflowY: 'scroll',\n wordBreak: 'break-all',\n }}\n size=\"small\"\n pagination={false}\n bordered\n rowKey={(e) => e.request}\n columns={[\n {\n title: 'Source Code',\n width: 200,\n render: (_v, r) => (\n <Typography.Text copyable>\n <Typography.Text code strong>\n {r.request}\n </Typography.Text>\n </Typography.Text>\n ),\n },\n {\n title: 'Duration',\n width: 80,\n render: (_v, r) => (\n <Typography.Text strong>\n {formatCosts(r.costs)}\n </Typography.Text>\n ),\n sorter: (a, b) => a.costs - b.costs,\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Resolve Result',\n render: (_v, r) => {\n if (Resolver.isResolveSuccessData(r))\n return (\n <Typography.Text copyable>\n {r.result}\n </Typography.Text>\n );\n return (\n <CloseCircleOutlined style={{ color: '#f50' }} />\n );\n },\n },\n ]}\n dataSource={resolvers}\n />\n </Card>\n ),\n },\n ]}\n />\n </Col>\n );\n};\n\nexport const ResolverFiles: React.FC<{\n filename: string;\n cwd: string;\n resolver: SDK.ServerAPI.InferResponseType<SDK.ServerAPI.API.GetResolverFileTree>;\n}> = (props) => {\n const { resolver, cwd } = props;\n\n const [filepath, setFilepath] = useState('');\n\n const inlinedResourcePathKey = '__RESOURCEPATH__';\n const n = '/node_modules/';\n\n const paths = useMemo(() => {\n return resolver.map((e) => e.issuerPath).filter(Boolean);\n }, [resolver]);\n\n const filterPaths = useMemo(() => {\n return paths.filter((e) =>\n props.filename ? e.indexOf(props.filename) > -1 : true,\n );\n }, [props.filename, paths]);\n\n const allNodeModules =\n filterPaths.length && filterPaths.every((e) => e.indexOf(n) > -1);\n\n const files = useMemo(() => {\n return createFileStructures({\n files: filterPaths.length ? filterPaths : paths,\n cwd,\n fileTitle(file, basename) {\n return <div onClick={() => setFilepath(file)}>{basename}</div>;\n },\n });\n }, [props.filename]);\n\n return (\n <Row justify=\"start\" align=\"top\" wrap={false} gutter={Size.BasePadding}>\n <Col span={7}>\n <Card title=\"Files\">\n <FileTree\n style={{ width: '100%', height, overflow: 'scroll' }}\n treeData={files}\n defaultExpandedKeys={mapFileKey(\n files,\n allNodeModules ? 1 : 4,\n allNodeModules\n ? undefined\n : (node) => {\n const resourcePath: string = get(\n node,\n inlinedResourcePathKey,\n )!;\n const isNodeModules = resourcePath.indexOf(n) > -1;\n\n if (\n filterPaths.length &&\n filterPaths.every((e) => e.indexOf(n) > -1)\n ) {\n return true;\n }\n\n return !isNodeModules;\n },\n )}\n key={`tree_${props.filename}`}\n />\n </Card>\n </Col>\n {filepath && (\n <ServerAPIProvider\n api={SDK.ServerAPI.API.GetResolverFileDetails}\n body={{ filepath }}\n >\n {(resolvers) => <ResolverDetailsPanel {...resolvers} />}\n </ServerAPIProvider>\n )}\n </Row>\n );\n};\n\nexport const ResolverAnalysisBase: React.FC<{\n project: SDK.ServerAPI.InferResponseType<SDK.ServerAPI.API.GetProjectInfo>;\n}> = ({ project }) => {\n const { root: cwd } = project;\n const [filename, setFilename] = useState('');\n\n return (\n <div style={{ width: '100%' }}>\n <Space\n style={{ marginTop: Size.BasePadding, marginBottom: Size.BasePadding }}\n >\n <KeywordInput\n icon={<FileSearchOutlined />}\n label=\"Filename\"\n placeholder=\"search filename by keyword\"\n onChange={(e) => setFilename(e)}\n />\n </Space>\n <ServerAPIProvider api={SDK.ServerAPI.API.GetResolverFileTree}>\n {(resolver) => (\n <ResolverFiles filename={filename} resolver={resolver} cwd={cwd} />\n )}\n </ServerAPIProvider>\n </div>\n );\n};\n\nexport const ResolverAnalysis = withServerAPI({\n api: SDK.ServerAPI.API.GetProjectInfo,\n responsePropName: 'project',\n Component: ResolverAnalysisBase,\n});\n"],"names":["height","ResolverDetailsPanel","filepath","before","after","resolvers","Col","Tabs","Card","DiffViewer","Table","e","_v","r","Typography","formatCosts","a","b","Resolver","CloseCircleOutlined","ResolverFiles","props","resolver","cwd","setFilepath","useState","inlinedResourcePathKey","n","paths","useMemo","Boolean","filterPaths","allNodeModules","files","createFileStructures","file","basename","Row","Size","FileTree","mapFileKey","undefined","node","resourcePath","get","isNodeModules","ServerAPIProvider","SDK","ResolverAnalysisBase","project","filename","setFilename","Space","KeywordInput","FileSearchOutlined","ResolverAnalysis","withServerAPI"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rsdoctor/components",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.13-beta.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"repository": {
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"@rsbuild/plugin-svgr": "^1.2.2",
|
|
45
45
|
"@types/node": "^22.8.1",
|
|
46
46
|
"@types/path-browserify": "1.0.3",
|
|
47
|
-
"@types/react": "^18.3.
|
|
47
|
+
"@types/react": "^18.3.27",
|
|
48
48
|
"@types/react-highlight-words": "^0.20.0",
|
|
49
49
|
"@types/url-parse": "1.4.11",
|
|
50
50
|
"react": "18.3.1",
|
|
@@ -74,9 +74,9 @@
|
|
|
74
74
|
"react-router-dom": "6.4.3",
|
|
75
75
|
"socket.io-client": "4.8.1",
|
|
76
76
|
"url-parse": "1.5.10",
|
|
77
|
-
"@rsdoctor/graph": "1.3.
|
|
78
|
-
"@rsdoctor/
|
|
79
|
-
"@rsdoctor/
|
|
77
|
+
"@rsdoctor/graph": "1.3.13-beta.0",
|
|
78
|
+
"@rsdoctor/utils": "1.3.13-beta.0",
|
|
79
|
+
"@rsdoctor/types": "1.3.13-beta.0"
|
|
80
80
|
},
|
|
81
81
|
"peerDependencies": {
|
|
82
82
|
"react": ">=18.3.1",
|