@rsdoctor/components 1.3.11-beta.0 → 1.3.12

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.
@@ -1,10 +1,10 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
- import { CloseCircleOutlined, FileSearchOutlined, MenuFoldOutlined, MenuUnfoldOutlined } from "@ant-design/icons";
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 { Button, Card, Col, Row, Space, Table, Typography } from "antd";
5
+ import { Card, Col, Row, Space, Table, Tabs, Typography } from "antd";
6
6
  import { get } from "es-toolkit/compat";
7
- import react, { useMemo, useState } from "react";
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
- const [collapsed, setCollapsed] = useState(false);
17
- return /*#__PURE__*/ jsxs(react.Fragment, {
18
- children: [
19
- /*#__PURE__*/ jsx(Col, {
20
- flex: 1,
21
- children: /*#__PURE__*/ jsx(Card, {
22
- title: "Resolve Diff Viewer",
23
- styles: {
24
- body: {
25
- padding: 0,
26
- overflow: 'hidden'
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
- size: "small",
61
- pagination: false,
62
- bordered: true,
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
- title: 'Duration',
79
- width: 80,
80
- render: (_v, r)=>/*#__PURE__*/ jsx(Typography.Text, {
81
- strong: true,
82
- children: formatCosts(r.costs)
83
- }),
84
- sorter: (a, b)=>a.costs - b.costs,
85
- sortDirections: [
86
- 'descend',
87
- 'ascend'
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
- title: 'Resolve Result',
92
- render: (_v, r)=>{
93
- if (Resolver.isResolveSuccessData(r)) return /*#__PURE__*/ jsx(Typography.Text, {
94
- copyable: true,
95
- children: r.result
96
- });
97
- return /*#__PURE__*/ jsx(CloseCircleOutlined, {
98
- style: {
99
- color: '#f50'
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
- dataSource: resolvers
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.11-beta.0",
3
+ "version": "1.3.12",
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.26",
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.11-beta.0",
78
- "@rsdoctor/types": "1.3.11-beta.0",
79
- "@rsdoctor/utils": "1.3.11-beta.0"
77
+ "@rsdoctor/graph": "1.3.12",
78
+ "@rsdoctor/types": "1.3.12",
79
+ "@rsdoctor/utils": "1.3.12"
80
80
  },
81
81
  "peerDependencies": {
82
82
  "react": ">=18.3.1",