@rsdoctor/components 1.3.1 → 1.3.3

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.
@@ -170,7 +170,7 @@ const PackageRelationAlert = ({ data, getPackageRelationContentComponent })=>{
170
170
  style: {
171
171
  marginLeft: 4
172
172
  },
173
- children: "\u2514"
173
+ children: ""
174
174
  }),
175
175
  /*#__PURE__*/ jsx(Badge, {
176
176
  label: el.name,
@@ -104,7 +104,7 @@ const BundleAlert = ({ title, dataSource, extraData })=>{
104
104
  break;
105
105
  case 'E1004':
106
106
  description = /*#__PURE__*/ jsx("span", {
107
- children: "No ECMA Version Check Rules were found. Please refer to \u300Chttps://rsdoctor.rs/guide/usage/rule-config\u300D."
107
+ children: "No ECMA Version Check Rules were found. Please refer to 「https://rsdoctor.rs/guide/usage/rule-config」."
108
108
  });
109
109
  children = /*#__PURE__*/ jsx(ECMAVersionCheck, {
110
110
  data: td.data
@@ -227,23 +227,23 @@ const AssetTreemapWithFilter = ({ treeData, onChartClick, bundledSize = false })
227
227
  color: 'white',
228
228
  title: /*#__PURE__*/ jsxs("span", {
229
229
  children: [
230
- "\u2728 In Rspack, TreeMap proportions are always based on Bundled Size by default.",
230
+ " In Rspack, TreeMap proportions are always based on Bundled Size by default.",
231
231
  /*#__PURE__*/ jsx("br", {}),
232
- "\u2728 In Webpack, TreeMap proportions are based on Bundled Size only when SourceMap is enabled.",
232
+ " In Webpack, TreeMap proportions are based on Bundled Size only when SourceMap is enabled.",
233
233
  /*#__PURE__*/ jsx("br", {}),
234
- "\u2728 ",
234
+ " ",
235
235
  /*#__PURE__*/ jsx("b", {
236
236
  children: "Bundled Size"
237
237
  }),
238
238
  ": The size of a module after bundling and minification.",
239
239
  /*#__PURE__*/ jsx("br", {}),
240
- "\u2728 ",
240
+ " ",
241
241
  /*#__PURE__*/ jsx("b", {
242
242
  children: "Source Size"
243
243
  }),
244
244
  ": The size of a module after compilation (e.g., TypeScript/JSX to JS), but before bundling and minification.",
245
245
  /*#__PURE__*/ jsx("br", {}),
246
- "\u2728 ",
246
+ " ",
247
247
  /*#__PURE__*/ jsx("b", {
248
248
  children: "Gzipped Size"
249
249
  }),
@@ -26,7 +26,7 @@ const Header = ({ enableRoutes })=>{
26
26
  const languages = [
27
27
  {
28
28
  value: Language.Cn,
29
- label: "\u4E2D\u6587"
29
+ label: '中文'
30
30
  },
31
31
  {
32
32
  value: Language.En,
@@ -357,7 +357,7 @@ const LoaderExecutions = ({ data, cwd, index })=>{
357
357
  margin: '0 2px'
358
358
  }
359
359
  }),
360
- "Input \u27F7",
360
+ "Input ",
361
361
  /*#__PURE__*/ jsx(output, {
362
362
  style: {
363
363
  verticalAlign: 'middle',
@@ -20,15 +20,15 @@ function getDataProtocolFormat(content) {
20
20
  return '';
21
21
  }
22
22
  } catch (error) {
23
- console.error("\u89E3\u6790 data \u534F\u8BAE\u6587\u4EF6\u683C\u5F0F\u5931\u8D25:", error);
23
+ console.error('解析 data 协议文件格式失败:', error);
24
24
  return '';
25
25
  }
26
26
  }
27
27
  function parseDataUrl(dataUrl) {
28
- if (!dataUrl.startsWith('data:')) throw new Error("\u8F93\u5165\u4E0D\u662F\u6709\u6548\u7684 Data URL");
28
+ if (!dataUrl.startsWith('data:')) throw new Error('输入不是有效的 Data URL');
29
29
  const content = dataUrl.substring(5);
30
30
  const commaIndex = content.indexOf(',');
31
- if (-1 === commaIndex) throw new Error("\u65E0\u6548\u7684 Data URL \u683C\u5F0F: \u7F3A\u5C11\u6570\u636E\u5206\u9694\u7B26");
31
+ if (-1 === commaIndex) throw new Error('无效的 Data URL 格式: 缺少数据分隔符');
32
32
  const metadataPart = content.substring(0, commaIndex);
33
33
  const dataPart = content.substring(commaIndex + 1);
34
34
  let mimeType = '';
@@ -1 +1 @@
1
- {"version":3,"file":"components/base/CodeViewer/utils.mjs","sources":["webpack://@rsdoctor/components/./src/components/base/CodeViewer/utils.ts"],"sourcesContent":["import { Monaco } from '@monaco-editor/react';\nimport { SDK } from '@rsdoctor/types';\nimport type { Range as RangeClass } from 'monaco-editor';\nimport { editor } from 'monaco-editor';\nimport { extname } from 'path';\n\n/**\n * 判断 data 协议文件格式 `data:[<mediatype>][;base64],<data>`\n * 完整协议: https://www.rfc-editor.org/rfc/rfc2397.html\n * @param {string} content 文件内容\n * @returns {string} 文件格式类型\n */\nfunction getDataProtocolFormat(content: string): string {\n // 如果内容为空返回空\n if (!content) {\n return '';\n }\n\n try {\n const prefix = 'data:';\n // 检查是否以 data: 开头\n if (!content.startsWith(prefix)) {\n return '';\n }\n\n const { mimeType } = parseDataUrl(content);\n\n // 根据 MIME 类型返回对应的格式\n switch (mimeType) {\n case 'text/javascript':\n return 'javascript';\n case 'text/html':\n return 'html';\n case 'text/css':\n return 'css';\n case 'text/plain':\n return 'text';\n case 'application/json':\n return 'json';\n // 可以根据需要添加更多类型\n default:\n return '';\n }\n } catch (error) {\n console.error('解析 data 协议文件格式失败:', error);\n return '';\n }\n}\n\n/**\n * 解析 Data URL 并提取 MIME 类型\n * @param {string} dataUrl - 要解析的 Data URL 字符串\n * @returns {Object} 包含解析结果的对象\n */\nfunction parseDataUrl(dataUrl: string) {\n // 检查是否是 Data URL\n if (!dataUrl.startsWith('data:')) {\n throw new Error('输入不是有效的 Data URL');\n }\n\n // 提取内容部分 (去掉 \"data:\" 前缀)\n const content = dataUrl.substring(5);\n\n // 查找分隔数据和元数据的逗号\n const commaIndex = content.indexOf(',');\n\n if (commaIndex === -1) {\n throw new Error('无效的 Data URL 格式: 缺少数据分隔符');\n }\n\n // 提取元数据部分\n const metadataPart = content.substring(0, commaIndex);\n\n // 提取数据部分\n const dataPart = content.substring(commaIndex + 1);\n\n // 解析元数据\n let mimeType = '';\n let charset = '';\n let isBase64 = false;\n\n // 分割元数据部分\n const metadataSegments = metadataPart.split(';');\n\n // 第一部分通常是 MIME 类型\n if (metadataSegments.length > 0) {\n mimeType = metadataSegments[0] || 'text/plain'; // 默认为 text/plain\n }\n\n // 检查其他元数据参数\n for (let i = 1; i < metadataSegments.length; i++) {\n const segment = metadataSegments[i];\n\n if (segment === 'base64') {\n isBase64 = true;\n } else if (segment.startsWith('charset=')) {\n charset = segment.substring(8);\n }\n }\n\n // 返回解析结果\n return {\n mimeType,\n charset,\n isBase64,\n data: dataPart,\n };\n}\n\nexport function getFilePathFormat(filePath: string): string {\n if (!filePath) return '';\n\n const i = getDataProtocolFormat(filePath);\n\n if (i) {\n return i;\n }\n\n try {\n const ext = extname(filePath).slice(1);\n switch (ext) {\n case 'js':\n case 'cjs':\n case 'mjs':\n case 'jsx':\n return 'javascript';\n case 'ts':\n case 'tsx':\n return 'typescript';\n case 'md':\n return 'markdown';\n default:\n return ext;\n }\n } catch (e) {\n return '';\n }\n}\n\n/**\n * 默认编辑器样式, 适合预览代码\n */\nexport const DefaultEditorConfig: editor.IStandaloneEditorConstructionOptions =\n {\n // 设置编辑器为只读模式\n readOnly: true,\n // 设置 DOM 元素为只读模式\n domReadOnly: true,\n // 设置字体大小为 14px\n fontSize: 14,\n // 设置制表符宽度为 2 个空格\n tabSize: 2,\n // 设置行高为 24px\n lineHeight: 24,\n // 关闭验证装饰器的渲染(如错误、警告标记等)\n renderValidationDecorations: 'off',\n // 在概览标尺中隐藏光标\n hideCursorInOverviewRuler: true,\n // 启用平滑滚动\n smoothScrolling: true,\n // 设置文本换行方式\n wordWrap: 'on',\n // 启用颜色装饰器(如显示颜色预览)\n colorDecorators: true,\n // 禁用代码镜头功能(如显示引用次数等)\n codeLens: false,\n // 设置光标宽度为 0(隐藏光标)\n cursorWidth: 0,\n // 禁用右侧的小地图预览\n minimap: {\n enabled: false,\n },\n\n /** 禁用编辑器内置的右键菜单 */\n contextmenu: false,\n /** 禁用定义跳转功能 */\n gotoLocation: {\n multiple: 'goto',\n multipleDefinitions: 'goto',\n multipleTypeDefinitions: 'goto',\n multipleDeclarations: 'goto',\n multipleImplementations: 'goto',\n multipleReferences: 'goto',\n },\n /** 禁用悬停提示功能 */\n hover: { enabled: false },\n // 禁用链接功能 - 会禁用 Command/Ctrl + 点击\n links: false,\n };\n\n/**\n * get monaco options, it'll combine default config\n * @param options\n * @returns target options\n */\nexport function defineMonacoOptions(\n options?: editor.IStandaloneEditorConstructionOptions,\n): editor.IStandaloneEditorConstructionOptions {\n return {\n ...structuredClone(DefaultEditorConfig),\n ...options,\n };\n}\n\nexport function getFileName(filePath: string): string {\n // 如果内容为空返回空\n if (!filePath) {\n return '';\n }\n\n const prefix = 'data:';\n // 检查是否以 data: 开头\n if (filePath.startsWith(prefix)) {\n return 'data';\n }\n\n return filePath.split('/').at(-1) || '';\n}\n\nexport function getSelectionRange(\n source: SDK.SourceRange,\n Range: typeof RangeClass,\n) {\n const { start, end } = source;\n const { line = 1, column = 0 } = start;\n return new Range(\n line,\n column + 1,\n end?.line ?? line,\n (end?.column ?? 9999) + 1,\n );\n}\n\nexport function editorShowRange(\n editor: editor.IStandaloneCodeEditor,\n monaco: Monaco,\n ranges?: SDK.SourceRange[],\n) {\n if (!ranges || ranges.length === 0) return;\n\n const decorations = ranges.map((range) => ({\n range: getSelectionRange(range, monaco.Range),\n options: {\n inlineClassName: 'file-inline-decoration',\n },\n }));\n editor.deltaDecorations([], decorations);\n\n setTimeout(() => {\n editor.revealLine(decorations[0].range.startLineNumber);\n });\n}\n"],"names":["getDataProtocolFormat","content","prefix","mimeType","parseDataUrl","error","console","dataUrl","Error","commaIndex","metadataPart","dataPart","charset","isBase64","metadataSegments","i","segment","getFilePathFormat","filePath","ext","extname","e","DefaultEditorConfig","defineMonacoOptions","options","structuredClone","getFileName","getSelectionRange","source","Range","start","end","line","column","editorShowRange","editor","monaco","ranges","decorations","range","setTimeout"],"mappings":"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"}
1
+ {"version":3,"file":"components/base/CodeViewer/utils.mjs","sources":["webpack://@rsdoctor/components/./src/components/base/CodeViewer/utils.ts"],"sourcesContent":["import { Monaco } from '@monaco-editor/react';\nimport { SDK } from '@rsdoctor/types';\nimport type { Range as RangeClass } from 'monaco-editor';\nimport { editor } from 'monaco-editor';\nimport { extname } from 'path';\n\n/**\n * 判断 data 协议文件格式 `data:[<mediatype>][;base64],<data>`\n * 完整协议: https://www.rfc-editor.org/rfc/rfc2397.html\n * @param {string} content 文件内容\n * @returns {string} 文件格式类型\n */\nfunction getDataProtocolFormat(content: string): string {\n // 如果内容为空返回空\n if (!content) {\n return '';\n }\n\n try {\n const prefix = 'data:';\n // 检查是否以 data: 开头\n if (!content.startsWith(prefix)) {\n return '';\n }\n\n const { mimeType } = parseDataUrl(content);\n\n // 根据 MIME 类型返回对应的格式\n switch (mimeType) {\n case 'text/javascript':\n return 'javascript';\n case 'text/html':\n return 'html';\n case 'text/css':\n return 'css';\n case 'text/plain':\n return 'text';\n case 'application/json':\n return 'json';\n // 可以根据需要添加更多类型\n default:\n return '';\n }\n } catch (error) {\n console.error('解析 data 协议文件格式失败:', error);\n return '';\n }\n}\n\n/**\n * 解析 Data URL 并提取 MIME 类型\n * @param {string} dataUrl - 要解析的 Data URL 字符串\n * @returns {Object} 包含解析结果的对象\n */\nfunction parseDataUrl(dataUrl: string) {\n // 检查是否是 Data URL\n if (!dataUrl.startsWith('data:')) {\n throw new Error('输入不是有效的 Data URL');\n }\n\n // 提取内容部分 (去掉 \"data:\" 前缀)\n const content = dataUrl.substring(5);\n\n // 查找分隔数据和元数据的逗号\n const commaIndex = content.indexOf(',');\n\n if (commaIndex === -1) {\n throw new Error('无效的 Data URL 格式: 缺少数据分隔符');\n }\n\n // 提取元数据部分\n const metadataPart = content.substring(0, commaIndex);\n\n // 提取数据部分\n const dataPart = content.substring(commaIndex + 1);\n\n // 解析元数据\n let mimeType = '';\n let charset = '';\n let isBase64 = false;\n\n // 分割元数据部分\n const metadataSegments = metadataPart.split(';');\n\n // 第一部分通常是 MIME 类型\n if (metadataSegments.length > 0) {\n mimeType = metadataSegments[0] || 'text/plain'; // 默认为 text/plain\n }\n\n // 检查其他元数据参数\n for (let i = 1; i < metadataSegments.length; i++) {\n const segment = metadataSegments[i];\n\n if (segment === 'base64') {\n isBase64 = true;\n } else if (segment.startsWith('charset=')) {\n charset = segment.substring(8);\n }\n }\n\n // 返回解析结果\n return {\n mimeType,\n charset,\n isBase64,\n data: dataPart,\n };\n}\n\nexport function getFilePathFormat(filePath: string): string {\n if (!filePath) return '';\n\n const i = getDataProtocolFormat(filePath);\n\n if (i) {\n return i;\n }\n\n try {\n const ext = extname(filePath).slice(1);\n switch (ext) {\n case 'js':\n case 'cjs':\n case 'mjs':\n case 'jsx':\n return 'javascript';\n case 'ts':\n case 'tsx':\n return 'typescript';\n case 'md':\n return 'markdown';\n default:\n return ext;\n }\n } catch (e) {\n return '';\n }\n}\n\n/**\n * 默认编辑器样式, 适合预览代码\n */\nexport const DefaultEditorConfig: editor.IStandaloneEditorConstructionOptions =\n {\n // 设置编辑器为只读模式\n readOnly: true,\n // 设置 DOM 元素为只读模式\n domReadOnly: true,\n // 设置字体大小为 14px\n fontSize: 14,\n // 设置制表符宽度为 2 个空格\n tabSize: 2,\n // 设置行高为 24px\n lineHeight: 24,\n // 关闭验证装饰器的渲染(如错误、警告标记等)\n renderValidationDecorations: 'off',\n // 在概览标尺中隐藏光标\n hideCursorInOverviewRuler: true,\n // 启用平滑滚动\n smoothScrolling: true,\n // 设置文本换行方式\n wordWrap: 'on',\n // 启用颜色装饰器(如显示颜色预览)\n colorDecorators: true,\n // 禁用代码镜头功能(如显示引用次数等)\n codeLens: false,\n // 设置光标宽度为 0(隐藏光标)\n cursorWidth: 0,\n // 禁用右侧的小地图预览\n minimap: {\n enabled: false,\n },\n\n /** 禁用编辑器内置的右键菜单 */\n contextmenu: false,\n /** 禁用定义跳转功能 */\n gotoLocation: {\n multiple: 'goto',\n multipleDefinitions: 'goto',\n multipleTypeDefinitions: 'goto',\n multipleDeclarations: 'goto',\n multipleImplementations: 'goto',\n multipleReferences: 'goto',\n },\n /** 禁用悬停提示功能 */\n hover: { enabled: false },\n // 禁用链接功能 - 会禁用 Command/Ctrl + 点击\n links: false,\n };\n\n/**\n * get monaco options, it'll combine default config\n * @param options\n * @returns target options\n */\nexport function defineMonacoOptions(\n options?: editor.IStandaloneEditorConstructionOptions,\n): editor.IStandaloneEditorConstructionOptions {\n return {\n ...structuredClone(DefaultEditorConfig),\n ...options,\n };\n}\n\nexport function getFileName(filePath: string): string {\n // 如果内容为空返回空\n if (!filePath) {\n return '';\n }\n\n const prefix = 'data:';\n // 检查是否以 data: 开头\n if (filePath.startsWith(prefix)) {\n return 'data';\n }\n\n return filePath.split('/').at(-1) || '';\n}\n\nexport function getSelectionRange(\n source: SDK.SourceRange,\n Range: typeof RangeClass,\n) {\n const { start, end } = source;\n const { line = 1, column = 0 } = start;\n return new Range(\n line,\n column + 1,\n end?.line ?? line,\n (end?.column ?? 9999) + 1,\n );\n}\n\nexport function editorShowRange(\n editor: editor.IStandaloneCodeEditor,\n monaco: Monaco,\n ranges?: SDK.SourceRange[],\n) {\n if (!ranges || ranges.length === 0) return;\n\n const decorations = ranges.map((range) => ({\n range: getSelectionRange(range, monaco.Range),\n options: {\n inlineClassName: 'file-inline-decoration',\n },\n }));\n editor.deltaDecorations([], decorations);\n\n setTimeout(() => {\n editor.revealLine(decorations[0].range.startLineNumber);\n });\n}\n"],"names":["getDataProtocolFormat","content","prefix","mimeType","parseDataUrl","error","console","dataUrl","Error","commaIndex","metadataPart","dataPart","charset","isBase64","metadataSegments","i","segment","getFilePathFormat","filePath","ext","extname","e","DefaultEditorConfig","defineMonacoOptions","options","structuredClone","getFileName","getSelectionRange","source","Range","start","end","line","column","editorShowRange","editor","monaco","ranges","decorations","range","setTimeout"],"mappings":"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"}
@@ -444,7 +444,7 @@ const AssetDetail = ({ asset, chunks: includeChunks, modules: includeModules, mo
444
444
  className: index_module["bundle-tree"],
445
445
  children: [
446
446
  /*#__PURE__*/ jsx(Popover, {
447
- content: `Open the ${basename}\u{2019}s module reasons tree.`,
447
+ content: `Open the ${basename}s module reasons tree.`,
448
448
  placement: "bottom",
449
449
  children: /*#__PURE__*/ jsxs("div", {
450
450
  className: index_module.box,
@@ -1 +1 @@
1
- {"version":3,"file":"pages/BundleSize/components/asset.mjs","sources":["webpack://@rsdoctor/components/./src/pages/BundleSize/components/asset.tsx"],"sourcesContent":["import {\n CodepenCircleOutlined,\n ColumnHeightOutlined,\n InfoCircleOutlined,\n} from '@ant-design/icons';\nimport { SDK } from '@rsdoctor/types';\nimport {\n Button,\n Card,\n Col,\n Divider,\n Empty,\n Popover,\n Row,\n Space,\n Tag,\n Tooltip,\n Tree,\n Typography,\n} from 'antd';\nimport { DataNode as AntdDataNode } from 'antd/es/tree';\nimport { omitBy, sumBy } from 'lodash-es';\nimport { dirname, relative } from 'path';\nimport React, { useEffect, useMemo, useState } from 'react';\nimport { CodeViewer } from 'src/components/base';\nimport { Badge as Bdg } from '../../../components/Badge';\nimport { KeywordInput } from '../../../components/Form/keyword';\nimport { Keyword } from '../../../components/Keyword';\nimport { ServerAPIProvider } from '../../../components/Manifest';\nimport { TextDrawer } from '../../../components/TextDrawer';\nimport { Size } from '../../../constants';\nimport {\n DataNode,\n createFileStructures,\n formatSize,\n isJsDataUrl,\n useI18n,\n} from '../../../utils';\nimport { ModuleAnalyzeComponent } from '../../ModuleAnalyze';\nimport { ModuleGraphListContext } from '../config';\nimport styles from './index.module.scss';\n\nconst { DirectoryTree } = Tree;\n\nlet expandedModulesKeys: React.Key[] = [];\nconst TAB_MAP = {\n source: 'source code',\n transformed: 'Transformed Code (After compile)',\n parsedSource: 'Bundled Code (After bundle and tree-shaking)',\n};\n\nconst tagStyle = {\n margin: 'none',\n marginInlineEnd: 0,\n};\n\nconst EmptyCodeItem = () => (\n <Empty\n description={`Do not have the module code.\n (1) If you use the brief mode, there will not have any codes to show.\n (2) If you use lite mode, there will not have source codes.`}\n />\n);\n\nexport const ModuleCodeViewer: React.FC<{ data: SDK.ModuleData }> = ({\n data,\n}) => {\n const [tab, setTab] = useState('');\n const { t } = useI18n();\n\n const TAB_LAB_MAP: Record<string, string> = {\n source: 'Source Code',\n transformed: `Transformed Code(${t('After Compile')})`,\n parsedSource: `Bundled Code(${t('After Bundled')})`,\n };\n if (!data) return null;\n\n const { path } = data;\n\n return (\n <TextDrawer\n text=\"\"\n buttonProps={{\n size: 'small',\n icon: (\n <Popover content=\"Open the Codes Box\">\n <CodepenCircleOutlined />\n </Popover>\n ),\n type: 'default',\n }}\n buttonStyle={{ padding: `0 4px` }}\n drawerProps={{\n destroyOnClose: true,\n title: `Code of \"${path}\"`,\n }}\n >\n <ServerAPIProvider\n api={SDK.ServerAPI.API.GetModuleCodeByModuleId}\n body={{ moduleId: data.id }}\n >\n {(source) => {\n return (\n <>\n {!source['source'] &&\n !source['parsedSource'] &&\n !source['transformed'] ? (\n <EmptyCodeItem />\n ) : (\n <Card\n className=\"code-size-card\"\n style={{ width: '100%' }}\n tabList={Object.keys(omitBy(source, (s) => !s))\n .map((k) => ({ tab: k }))\n .map((e) => ({\n ...e,\n tab: TAB_LAB_MAP[e.tab],\n key: e.tab,\n }))}\n defaultActiveTabKey={\n source['parsedSource'] ? 'parsedSource' : 'source'\n }\n onTabChange={(v) => setTab(v)}\n tabBarExtraContent={\n <Popover\n placement=\"bottom\"\n title={\n <Typography.Title level={5}>Explain</Typography.Title>\n }\n content={\n <>\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n marginBottom: 30,\n }}\n >\n <div>\n <Typography.Text strong>Source: </Typography.Text>\n <Typography.Text>\n {TAB_MAP.source}\n </Typography.Text>\n </div>\n <div>\n <Typography.Text strong>\n Transformed:\n </Typography.Text>\n <Typography.Text>\n {TAB_MAP.transformed}\n </Typography.Text>\n </div>\n <div>\n <Typography.Text strong>\n Bundled Source:\n </Typography.Text>\n <Typography.Text>\n {TAB_MAP.parsedSource}\n </Typography.Text>\n </div>\n <br />\n <Typography.Text strong>{'More'}</Typography.Text>\n <Typography.Text>\n {t('CodeModeExplain')}\n </Typography.Text>\n </div>\n </>\n }\n trigger={'hover'}\n >\n <a href=\"#\">Explain</a>\n </Popover>\n }\n styles={{ body: { padding: 0, overflow: 'hidden' } }}\n >\n {source['parsedSource'] ||\n source['source'] ||\n source['transformed'] ? (\n <CodeViewer\n isEmbed\n code={\n tab\n ? source[tab as keyof SDK.ModuleSource]\n : source['parsedSource']\n ? source['parsedSource']\n : source['source']\n }\n filePath={path}\n />\n ) : (\n <EmptyCodeItem />\n )}\n </Card>\n )}\n </>\n );\n }}\n </ServerAPIProvider>\n </TextDrawer>\n );\n};\n\nexport const ModuleGraphViewer: React.FC<{\n id: number | string;\n show: boolean;\n setShow: (_show: boolean) => void;\n cwd: string;\n}> = ({ id, show, setShow, cwd }) => {\n if (!id) return null;\n\n return (\n <ServerAPIProvider api={SDK.ServerAPI.API.GetAllModuleGraph} body={{}}>\n {(modules) => (\n <ModuleAnalyzeComponent\n cwd={cwd}\n moduleId={id}\n modules={modules}\n show={show}\n setShow={setShow}\n />\n )}\n </ServerAPIProvider>\n );\n};\n\nconst inlinedResourcePathKey = '__RESOURCEPATH__';\n\nexport function getChildrenModule(node: DataNode, mods: string[]) {\n node.children &&\n node.children.forEach((n: DataNode) => {\n if (n.isLeaf) {\n mods.push(n[inlinedResourcePathKey]);\n } else {\n getChildrenModule(n, mods);\n }\n });\n\n return mods;\n}\n\nexport const ModulesStatistics: React.FC<{\n modules: SDK.ModuleData[];\n chunks: SDK.ChunkData[];\n filteredModules: SDK.ModuleData[];\n}> = ({ modules, chunks, filteredModules }) => {\n const { sourceSize, parsedSize, filteredParsedSize, filteredSourceSize } =\n useMemo(() => {\n return {\n sourceSize: sumBy(modules, (e) => e.size.sourceSize),\n parsedSize: sumBy(modules, (e) => e.size.parsedSize),\n filteredSourceSize: sumBy(filteredModules, (e) => e.size.sourceSize),\n filteredParsedSize: sumBy(filteredModules, (e) => e.size.parsedSize),\n };\n }, [modules, filteredModules]);\n\n return (\n <Space>\n <Tooltip\n title={`total modules count is ${modules.length}, the filtered modules count is ${filteredModules.length}`}\n >\n <Space>\n <Typography.Text\n type=\"secondary\"\n style={{ fontSize: 12, fontWeight: 400 }}\n >\n Modules: {filteredModules.length} / {modules.length}\n </Typography.Text>\n <InfoCircleOutlined />\n </Space>\n </Tooltip>\n <Divider type=\"vertical\" />\n <Tooltip\n title={\n <Space direction=\"vertical\">\n <Typography.Text style={{ color: 'inherit' }}>\n Total modules bundled size: {formatSize(parsedSize)}\n </Typography.Text>\n <Typography.Text style={{ color: 'inherit' }}>\n Total modules source size: {formatSize(sourceSize)}\n </Typography.Text>\n <Typography.Text style={{ color: 'inherit' }}>\n Filtered modules bundled size: {formatSize(filteredParsedSize)}\n </Typography.Text>\n <Typography.Text style={{ color: 'inherit' }}>\n Filtered modules source size: {formatSize(filteredSourceSize)}\n </Typography.Text>\n </Space>\n }\n >\n <Space>\n <Typography.Text\n type=\"secondary\"\n style={{ fontSize: 12, fontWeight: 400 }}\n >\n Modules Size:\n {filteredParsedSize === parsedSize\n ? formatSize(parsedSize)\n : `${formatSize(filteredParsedSize)} / ${formatSize(parsedSize)}`}\n </Typography.Text>\n <InfoCircleOutlined />\n </Space>\n </Tooltip>\n <Divider type=\"vertical\" />\n <Tooltip\n title={\n <Space direction=\"vertical\">\n <Typography.Text style={{ color: 'inherit' }}>\n this asset includes {chunks.length} chunks:\n </Typography.Text>\n {chunks.map((e) => (\n <Bdg label=\"chunk\" value={e.name} key={e.name} />\n ))}\n </Space>\n }\n >\n <Space>\n <Typography.Text\n type=\"secondary\"\n style={{ fontSize: 12, fontWeight: 400 }}\n >\n Chunks: {chunks.length}\n </Typography.Text>\n <InfoCircleOutlined />\n </Space>\n </Tooltip>\n </Space>\n );\n};\n\nconst ConcatenatedTag = ({ moduleCount }: { moduleCount: number }) => {\n return (\n <Tooltip\n title={\n <Space>\n <Typography.Text style={{ color: 'inherit' }}>\n This is a concatenated container module that includes {moduleCount}{' '}\n modules\n </Typography.Text>\n </Space>\n }\n >\n <Tag color=\"blue\" style={tagStyle}>\n concatenated container\n </Tag>\n </Tooltip>\n );\n};\n\nconst TotalBundledSizeTag = ({ size }: { size: number }) => {\n return (\n <Tooltip\n title={\n <Space>\n <Typography.Text style={{ color: 'inherit' }}>\n The total output size of all the files in this folder. If you\n enabled minification, this value shows the minified size.\n </Typography.Text>\n </Space>\n }\n >\n <Tag style={tagStyle} color={'geekblue'}>\n {`bundled size: ${formatSize(size)}`}\n </Tag>\n </Tooltip>\n );\n};\n\nconst BundledSizeTag = ({ size }: { size: number }) => {\n return (\n <Tooltip\n title={\n <Space>\n <Typography.Text style={{ color: 'inherit' }}>\n The final output size of this file. If you enabled minification,\n this value shows the minified size.\n </Typography.Text>\n </Space>\n }\n >\n <Tag color={'geekblue'}>{`bundled size: ${formatSize(size)}`}</Tag>\n </Tooltip>\n );\n};\n\nconst GzippedSizeTag = ({ size }: { size: number }) => {\n return (\n <Tooltip\n title={\n <Space>\n <Typography.Text style={{ color: 'inherit' }}>\n The compressed file size that users actually download, as most web\n servers use gzip compression.\n </Typography.Text>\n </Space>\n }\n >\n <Tag color={'orange'}>{`gzipped: ${formatSize(size)}`}</Tag>\n </Tooltip>\n );\n};\n\nconst TotalSourceSizeTag = ({ size }: { size: number }) => {\n return (\n <Tooltip\n title={\n <Space>\n <Typography.Text style={{ color: 'inherit' }}>\n The total original size of all the files in this folder, before any\n transformations and minification.\n </Typography.Text>\n </Space>\n }\n >\n <Tag\n style={tagStyle}\n color={'cyan'}\n >{`source size: ${formatSize(size)}`}</Tag>\n </Tooltip>\n );\n};\n\nconst SourceSizeTag = ({ size }: { size: number }) => {\n return (\n <Tooltip\n title={\n <Space>\n <Typography.Text style={{ color: 'inherit' }}>\n The original size of this file, before any transformations and\n minification.\n </Typography.Text>\n </Space>\n }\n >\n <Tag color={'cyan'}>{`source size: ${formatSize(size)}`}</Tag>\n </Tooltip>\n );\n};\n\nexport const AssetDetail: React.FC<{\n asset: SDK.AssetData;\n chunks: SDK.ChunkData[];\n modules: SDK.ModuleData[];\n moduleSizeLimit?: number;\n height?: number;\n root: string;\n}> = ({\n asset,\n chunks: includeChunks,\n modules: includeModules,\n moduleSizeLimit,\n height,\n root,\n}) => {\n const [moduleKeyword, setModuleKeyword] = useState('');\n const [defaultExpandAll, setDefaultExpandAll] = useState(false);\n const [moduleJumpList, setModuleJumpList] = useState([] as number[]);\n const [show, setShow] = useState(false);\n\n const filteredModules = useMemo(() => {\n let res = includeModules.slice();\n if (moduleKeyword) {\n const regexp = new RegExp(moduleKeyword, 'i');\n res = res.filter((e) => regexp.test(e.path));\n }\n\n if (moduleSizeLimit) {\n res = res.filter((e) => e.size.parsedSize >= moduleSizeLimit);\n }\n\n return res;\n }, [includeModules, moduleKeyword, moduleSizeLimit]);\n\n const fileStructures = useMemo(() => {\n const res = createFileStructures({\n files: filteredModules.map((e) => e.path).filter(Boolean),\n inlinedResourcePathKey,\n fileTitle(file, basename) {\n const mod = filteredModules.find((e) => e.path === file)!;\n\n if (!mod) return basename;\n\n const { parsedSize = 0, sourceSize = 0, gzipSize = 0 } = mod.size;\n const isConcatenation = mod.kind === SDK.ModuleKind.Concatenation;\n\n const containedOtherModules =\n !isConcatenation &&\n parsedSize === 0 &&\n includeModules.filter(\n (e) => e !== mod && e.modules && e.modules.indexOf(mod.id) > -1,\n );\n\n return (\n <div className={styles['bundle-tree']}>\n <Popover\n content={`Open the ${basename}’s module reasons tree.`}\n placement=\"bottom\"\n >\n <div\n className={styles.box}\n onClick={() => {\n setModuleJumpList([mod.id]);\n setShow(true);\n }}\n >\n <div className={styles.keywords}>\n <Keyword ellipsis text={basename} keyword={''} />\n </div>\n <div className={styles.dividerDiv}>\n <Divider className={styles.divider} dashed />\n </div>\n </div>\n </Popover>\n <Space>\n {parsedSize !== 0 ? (\n <>\n {typeof gzipSize === 'number' ? (\n <Popover\n placement=\"bottom\"\n content={<SourceSizeTag size={sourceSize} />}\n >\n <Space direction=\"horizontal\">\n <BundledSizeTag size={parsedSize} />\n <GzippedSizeTag size={gzipSize} />\n </Space>\n </Popover>\n ) : (\n <Space direction=\"horizontal\">\n <BundledSizeTag size={parsedSize} />\n <SourceSizeTag size={sourceSize} />\n </Space>\n )}\n </>\n ) : sourceSize !== 0 ? (\n // fallback to display tag for source size\n <SourceSizeTag size={sourceSize} />\n ) : null}\n {isConcatenation ? (\n <ConcatenatedTag moduleCount={mod.modules?.length || 0} />\n ) : null}\n {containedOtherModules && containedOtherModules.length ? (\n <Tooltip\n title={\n <Space direction=\"vertical\">\n <Typography.Text style={{ color: 'inherit' }}>\n This module is concatenated into another container\n module:\n </Typography.Text>\n {containedOtherModules.map(({ id, path }) => {\n if (isJsDataUrl(path)) {\n return (\n <Typography.Paragraph\n ellipsis={{ rows: 4 }}\n key={id}\n style={{ color: 'inherit', maxWidth: '100%' }}\n code\n >\n {path}\n </Typography.Paragraph>\n );\n }\n\n const p = relative(dirname(mod.path), path);\n if (p.startsWith('javascript;charset=utf-8;base64,')) {\n return (\n <Typography.Text\n key={id}\n style={{ color: 'inherit', maxWidth: '100%' }}\n code\n >\n {p[0] === '.' ? p : `./${p}`}\n </Typography.Text>\n );\n }\n\n return (\n <Typography.Text\n key={id}\n style={{ color: 'inherit' }}\n code\n >\n {p[0] === '.' ? p : `./${p}`}\n </Typography.Text>\n );\n })}\n </Space>\n }\n >\n <Tag color=\"green\">concatenated</Tag>\n </Tooltip>\n ) : null}\n\n <ModuleCodeViewer data={mod} />\n </Space>\n </div>\n );\n },\n dirTitle(dir, defaultTitle) {\n const mods: string[] = [];\n const paths = getChildrenModule(dir, mods);\n if (paths.length) {\n const mods = paths.map(\n (e) => includeModules.find((m) => m.path === e)!,\n );\n\n const parsedSize = sumBy(mods, (e) => e.size?.parsedSize || 0);\n const sourceSize = sumBy(mods, (e) => e.size?.sourceSize || 0);\n return (\n <div className={styles['bundle-tree']}>\n <div className={styles.box}>\n <div className={styles.keywords}>\n <Keyword ellipsis text={defaultTitle} keyword={''} />\n </div>\n <div className={styles.dividerDiv}>\n <Divider className={styles.divider} dashed />\n </div>\n </div>\n <Space>\n {parsedSize > 0 ? (\n <>\n <TotalBundledSizeTag size={parsedSize} />\n <TotalSourceSizeTag size={sourceSize} />\n </>\n ) : (\n <TotalSourceSizeTag size={sourceSize} />\n )}\n </Space>\n </div>\n );\n }\n\n return defaultTitle;\n },\n page: 'bundle',\n });\n return res;\n }, [filteredModules]);\n\n const onSearch = (value: string) => setModuleKeyword(value);\n\n useEffect(() => {\n setModuleKeyword('');\n setDefaultExpandAll(false);\n }, [asset]);\n\n useEffect(() => {\n setDefaultExpandAll(false);\n }, [moduleKeyword]);\n\n return (\n <ModuleGraphListContext.Provider\n value={{ moduleJumpList, setModuleJumpList }}\n >\n <Card\n className={styles.bundle}\n title={`Modules of \"${asset.path}\"`}\n bodyStyle={{ minHeight: height }}\n size=\"small\"\n >\n {includeModules.length ? (\n <Row>\n <Col span={24}>\n <ModulesStatistics\n modules={includeModules}\n chunks={includeChunks}\n filteredModules={filteredModules}\n />\n </Col>\n <Col span={24}>\n <Space>\n <KeywordInput\n placeholder=\"search module by keyword\"\n onChange={onSearch}\n key={asset.path}\n />\n <Button\n onClick={() => setDefaultExpandAll(true)}\n size=\"small\"\n icon={<ColumnHeightOutlined />}\n />\n </Space>\n </Col>\n <Col span={24} style={{ marginTop: Size.BasePadding }}>\n {filteredModules.length ? (\n <DirectoryTree\n key={`tree_${moduleKeyword}_${defaultExpandAll}_${asset.path}`}\n selectable={false}\n defaultExpandAll={\n defaultExpandAll || filteredModules.length <= 20\n }\n onExpand={(expandedKeys) => {\n expandedModulesKeys = expandedKeys;\n }}\n defaultExpandParent\n // @ts-ignore\n defaultExpandedKeys={\n expandedModulesKeys?.length\n ? expandedModulesKeys\n : fileStructures.length === 1\n ? [fileStructures[0].key]\n : []\n }\n treeData={fileStructures as AntdDataNode[]}\n rootStyle={{\n maxHeight: '500px',\n overflow: 'auto',\n border: '1px solid rgba(235, 237, 241)',\n padding: '14px 20px',\n }}\n />\n ) : (\n <Empty\n description={\n <Typography.Text\n strong\n >{`\"${moduleKeyword}\" can't match any modules`}</Typography.Text>\n }\n />\n )}\n </Col>\n </Row>\n ) : (\n <Empty\n description={\n <Typography.Text\n strong\n >{`\"${asset.path}\" doesn't have any modules`}</Typography.Text>\n }\n />\n )}\n\n <ModuleGraphViewer\n id={\n moduleJumpList?.length\n ? moduleJumpList[moduleJumpList.length - 1]\n : ''\n }\n show={show}\n setShow={setShow}\n cwd={root}\n />\n </Card>\n </ModuleGraphListContext.Provider>\n );\n};\n"],"names":["DirectoryTree","Tree","expandedModulesKeys","TAB_MAP","tagStyle","EmptyCodeItem","Empty","ModuleCodeViewer","data","tab","setTab","useState","t","useI18n","TAB_LAB_MAP","path","TextDrawer","Popover","CodepenCircleOutlined","ServerAPIProvider","SDK","source","Card","Object","omitBy","s","k","e","v","Typography","CodeViewer","ModuleGraphViewer","id","show","setShow","cwd","modules","ModuleAnalyzeComponent","inlinedResourcePathKey","getChildrenModule","node","mods","n","ModulesStatistics","chunks","filteredModules","sourceSize","parsedSize","filteredParsedSize","filteredSourceSize","useMemo","sumBy","Space","Tooltip","InfoCircleOutlined","Divider","formatSize","Bdg","ConcatenatedTag","moduleCount","Tag","TotalBundledSizeTag","size","BundledSizeTag","GzippedSizeTag","TotalSourceSizeTag","SourceSizeTag","AssetDetail","asset","includeChunks","includeModules","moduleSizeLimit","height","root","moduleKeyword","setModuleKeyword","defaultExpandAll","setDefaultExpandAll","moduleJumpList","setModuleJumpList","res","regexp","RegExp","fileStructures","createFileStructures","Boolean","file","basename","_mod_modules","mod","gzipSize","isConcatenation","containedOtherModules","styles","Keyword","isJsDataUrl","p","relative","dirname","dir","defaultTitle","paths","m","_e_size","onSearch","value","useEffect","ModuleGraphListContext","Row","Col","KeywordInput","Button","ColumnHeightOutlined","Size","expandedKeys"],"mappings":"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"}
1
+ {"version":3,"file":"pages/BundleSize/components/asset.mjs","sources":["webpack://@rsdoctor/components/./src/pages/BundleSize/components/asset.tsx"],"sourcesContent":["import {\n CodepenCircleOutlined,\n ColumnHeightOutlined,\n InfoCircleOutlined,\n} from '@ant-design/icons';\nimport { SDK } from '@rsdoctor/types';\nimport {\n Button,\n Card,\n Col,\n Divider,\n Empty,\n Popover,\n Row,\n Space,\n Tag,\n Tooltip,\n Tree,\n Typography,\n} from 'antd';\nimport { DataNode as AntdDataNode } from 'antd/es/tree';\nimport { omitBy, sumBy } from 'lodash-es';\nimport { dirname, relative } from 'path';\nimport React, { useEffect, useMemo, useState } from 'react';\nimport { CodeViewer } from 'src/components/base';\nimport { Badge as Bdg } from '../../../components/Badge';\nimport { KeywordInput } from '../../../components/Form/keyword';\nimport { Keyword } from '../../../components/Keyword';\nimport { ServerAPIProvider } from '../../../components/Manifest';\nimport { TextDrawer } from '../../../components/TextDrawer';\nimport { Size } from '../../../constants';\nimport {\n DataNode,\n createFileStructures,\n formatSize,\n isJsDataUrl,\n useI18n,\n} from '../../../utils';\nimport { ModuleAnalyzeComponent } from '../../ModuleAnalyze';\nimport { ModuleGraphListContext } from '../config';\nimport styles from './index.module.scss';\n\nconst { DirectoryTree } = Tree;\n\nlet expandedModulesKeys: React.Key[] = [];\nconst TAB_MAP = {\n source: 'source code',\n transformed: 'Transformed Code (After compile)',\n parsedSource: 'Bundled Code (After bundle and tree-shaking)',\n};\n\nconst tagStyle = {\n margin: 'none',\n marginInlineEnd: 0,\n};\n\nconst EmptyCodeItem = () => (\n <Empty\n description={`Do not have the module code.\n (1) If you use the brief mode, there will not have any codes to show.\n (2) If you use lite mode, there will not have source codes.`}\n />\n);\n\nexport const ModuleCodeViewer: React.FC<{ data: SDK.ModuleData }> = ({\n data,\n}) => {\n const [tab, setTab] = useState('');\n const { t } = useI18n();\n\n const TAB_LAB_MAP: Record<string, string> = {\n source: 'Source Code',\n transformed: `Transformed Code(${t('After Compile')})`,\n parsedSource: `Bundled Code(${t('After Bundled')})`,\n };\n if (!data) return null;\n\n const { path } = data;\n\n return (\n <TextDrawer\n text=\"\"\n buttonProps={{\n size: 'small',\n icon: (\n <Popover content=\"Open the Codes Box\">\n <CodepenCircleOutlined />\n </Popover>\n ),\n type: 'default',\n }}\n buttonStyle={{ padding: `0 4px` }}\n drawerProps={{\n destroyOnClose: true,\n title: `Code of \"${path}\"`,\n }}\n >\n <ServerAPIProvider\n api={SDK.ServerAPI.API.GetModuleCodeByModuleId}\n body={{ moduleId: data.id }}\n >\n {(source) => {\n return (\n <>\n {!source['source'] &&\n !source['parsedSource'] &&\n !source['transformed'] ? (\n <EmptyCodeItem />\n ) : (\n <Card\n className=\"code-size-card\"\n style={{ width: '100%' }}\n tabList={Object.keys(omitBy(source, (s) => !s))\n .map((k) => ({ tab: k }))\n .map((e) => ({\n ...e,\n tab: TAB_LAB_MAP[e.tab],\n key: e.tab,\n }))}\n defaultActiveTabKey={\n source['parsedSource'] ? 'parsedSource' : 'source'\n }\n onTabChange={(v) => setTab(v)}\n tabBarExtraContent={\n <Popover\n placement=\"bottom\"\n title={\n <Typography.Title level={5}>Explain</Typography.Title>\n }\n content={\n <>\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n marginBottom: 30,\n }}\n >\n <div>\n <Typography.Text strong>Source: </Typography.Text>\n <Typography.Text>\n {TAB_MAP.source}\n </Typography.Text>\n </div>\n <div>\n <Typography.Text strong>\n Transformed:\n </Typography.Text>\n <Typography.Text>\n {TAB_MAP.transformed}\n </Typography.Text>\n </div>\n <div>\n <Typography.Text strong>\n Bundled Source:\n </Typography.Text>\n <Typography.Text>\n {TAB_MAP.parsedSource}\n </Typography.Text>\n </div>\n <br />\n <Typography.Text strong>{'More'}</Typography.Text>\n <Typography.Text>\n {t('CodeModeExplain')}\n </Typography.Text>\n </div>\n </>\n }\n trigger={'hover'}\n >\n <a href=\"#\">Explain</a>\n </Popover>\n }\n styles={{ body: { padding: 0, overflow: 'hidden' } }}\n >\n {source['parsedSource'] ||\n source['source'] ||\n source['transformed'] ? (\n <CodeViewer\n isEmbed\n code={\n tab\n ? source[tab as keyof SDK.ModuleSource]\n : source['parsedSource']\n ? source['parsedSource']\n : source['source']\n }\n filePath={path}\n />\n ) : (\n <EmptyCodeItem />\n )}\n </Card>\n )}\n </>\n );\n }}\n </ServerAPIProvider>\n </TextDrawer>\n );\n};\n\nexport const ModuleGraphViewer: React.FC<{\n id: number | string;\n show: boolean;\n setShow: (_show: boolean) => void;\n cwd: string;\n}> = ({ id, show, setShow, cwd }) => {\n if (!id) return null;\n\n return (\n <ServerAPIProvider api={SDK.ServerAPI.API.GetAllModuleGraph} body={{}}>\n {(modules) => (\n <ModuleAnalyzeComponent\n cwd={cwd}\n moduleId={id}\n modules={modules}\n show={show}\n setShow={setShow}\n />\n )}\n </ServerAPIProvider>\n );\n};\n\nconst inlinedResourcePathKey = '__RESOURCEPATH__';\n\nexport function getChildrenModule(node: DataNode, mods: string[]) {\n node.children &&\n node.children.forEach((n: DataNode) => {\n if (n.isLeaf) {\n mods.push(n[inlinedResourcePathKey]);\n } else {\n getChildrenModule(n, mods);\n }\n });\n\n return mods;\n}\n\nexport const ModulesStatistics: React.FC<{\n modules: SDK.ModuleData[];\n chunks: SDK.ChunkData[];\n filteredModules: SDK.ModuleData[];\n}> = ({ modules, chunks, filteredModules }) => {\n const { sourceSize, parsedSize, filteredParsedSize, filteredSourceSize } =\n useMemo(() => {\n return {\n sourceSize: sumBy(modules, (e) => e.size.sourceSize),\n parsedSize: sumBy(modules, (e) => e.size.parsedSize),\n filteredSourceSize: sumBy(filteredModules, (e) => e.size.sourceSize),\n filteredParsedSize: sumBy(filteredModules, (e) => e.size.parsedSize),\n };\n }, [modules, filteredModules]);\n\n return (\n <Space>\n <Tooltip\n title={`total modules count is ${modules.length}, the filtered modules count is ${filteredModules.length}`}\n >\n <Space>\n <Typography.Text\n type=\"secondary\"\n style={{ fontSize: 12, fontWeight: 400 }}\n >\n Modules: {filteredModules.length} / {modules.length}\n </Typography.Text>\n <InfoCircleOutlined />\n </Space>\n </Tooltip>\n <Divider type=\"vertical\" />\n <Tooltip\n title={\n <Space direction=\"vertical\">\n <Typography.Text style={{ color: 'inherit' }}>\n Total modules bundled size: {formatSize(parsedSize)}\n </Typography.Text>\n <Typography.Text style={{ color: 'inherit' }}>\n Total modules source size: {formatSize(sourceSize)}\n </Typography.Text>\n <Typography.Text style={{ color: 'inherit' }}>\n Filtered modules bundled size: {formatSize(filteredParsedSize)}\n </Typography.Text>\n <Typography.Text style={{ color: 'inherit' }}>\n Filtered modules source size: {formatSize(filteredSourceSize)}\n </Typography.Text>\n </Space>\n }\n >\n <Space>\n <Typography.Text\n type=\"secondary\"\n style={{ fontSize: 12, fontWeight: 400 }}\n >\n Modules Size:\n {filteredParsedSize === parsedSize\n ? formatSize(parsedSize)\n : `${formatSize(filteredParsedSize)} / ${formatSize(parsedSize)}`}\n </Typography.Text>\n <InfoCircleOutlined />\n </Space>\n </Tooltip>\n <Divider type=\"vertical\" />\n <Tooltip\n title={\n <Space direction=\"vertical\">\n <Typography.Text style={{ color: 'inherit' }}>\n this asset includes {chunks.length} chunks:\n </Typography.Text>\n {chunks.map((e) => (\n <Bdg label=\"chunk\" value={e.name} key={e.name} />\n ))}\n </Space>\n }\n >\n <Space>\n <Typography.Text\n type=\"secondary\"\n style={{ fontSize: 12, fontWeight: 400 }}\n >\n Chunks: {chunks.length}\n </Typography.Text>\n <InfoCircleOutlined />\n </Space>\n </Tooltip>\n </Space>\n );\n};\n\nconst ConcatenatedTag = ({ moduleCount }: { moduleCount: number }) => {\n return (\n <Tooltip\n title={\n <Space>\n <Typography.Text style={{ color: 'inherit' }}>\n This is a concatenated container module that includes {moduleCount}{' '}\n modules\n </Typography.Text>\n </Space>\n }\n >\n <Tag color=\"blue\" style={tagStyle}>\n concatenated container\n </Tag>\n </Tooltip>\n );\n};\n\nconst TotalBundledSizeTag = ({ size }: { size: number }) => {\n return (\n <Tooltip\n title={\n <Space>\n <Typography.Text style={{ color: 'inherit' }}>\n The total output size of all the files in this folder. If you\n enabled minification, this value shows the minified size.\n </Typography.Text>\n </Space>\n }\n >\n <Tag style={tagStyle} color={'geekblue'}>\n {`bundled size: ${formatSize(size)}`}\n </Tag>\n </Tooltip>\n );\n};\n\nconst BundledSizeTag = ({ size }: { size: number }) => {\n return (\n <Tooltip\n title={\n <Space>\n <Typography.Text style={{ color: 'inherit' }}>\n The final output size of this file. If you enabled minification,\n this value shows the minified size.\n </Typography.Text>\n </Space>\n }\n >\n <Tag color={'geekblue'}>{`bundled size: ${formatSize(size)}`}</Tag>\n </Tooltip>\n );\n};\n\nconst GzippedSizeTag = ({ size }: { size: number }) => {\n return (\n <Tooltip\n title={\n <Space>\n <Typography.Text style={{ color: 'inherit' }}>\n The compressed file size that users actually download, as most web\n servers use gzip compression.\n </Typography.Text>\n </Space>\n }\n >\n <Tag color={'orange'}>{`gzipped: ${formatSize(size)}`}</Tag>\n </Tooltip>\n );\n};\n\nconst TotalSourceSizeTag = ({ size }: { size: number }) => {\n return (\n <Tooltip\n title={\n <Space>\n <Typography.Text style={{ color: 'inherit' }}>\n The total original size of all the files in this folder, before any\n transformations and minification.\n </Typography.Text>\n </Space>\n }\n >\n <Tag\n style={tagStyle}\n color={'cyan'}\n >{`source size: ${formatSize(size)}`}</Tag>\n </Tooltip>\n );\n};\n\nconst SourceSizeTag = ({ size }: { size: number }) => {\n return (\n <Tooltip\n title={\n <Space>\n <Typography.Text style={{ color: 'inherit' }}>\n The original size of this file, before any transformations and\n minification.\n </Typography.Text>\n </Space>\n }\n >\n <Tag color={'cyan'}>{`source size: ${formatSize(size)}`}</Tag>\n </Tooltip>\n );\n};\n\nexport const AssetDetail: React.FC<{\n asset: SDK.AssetData;\n chunks: SDK.ChunkData[];\n modules: SDK.ModuleData[];\n moduleSizeLimit?: number;\n height?: number;\n root: string;\n}> = ({\n asset,\n chunks: includeChunks,\n modules: includeModules,\n moduleSizeLimit,\n height,\n root,\n}) => {\n const [moduleKeyword, setModuleKeyword] = useState('');\n const [defaultExpandAll, setDefaultExpandAll] = useState(false);\n const [moduleJumpList, setModuleJumpList] = useState([] as number[]);\n const [show, setShow] = useState(false);\n\n const filteredModules = useMemo(() => {\n let res = includeModules.slice();\n if (moduleKeyword) {\n const regexp = new RegExp(moduleKeyword, 'i');\n res = res.filter((e) => regexp.test(e.path));\n }\n\n if (moduleSizeLimit) {\n res = res.filter((e) => e.size.parsedSize >= moduleSizeLimit);\n }\n\n return res;\n }, [includeModules, moduleKeyword, moduleSizeLimit]);\n\n const fileStructures = useMemo(() => {\n const res = createFileStructures({\n files: filteredModules.map((e) => e.path).filter(Boolean),\n inlinedResourcePathKey,\n fileTitle(file, basename) {\n const mod = filteredModules.find((e) => e.path === file)!;\n\n if (!mod) return basename;\n\n const { parsedSize = 0, sourceSize = 0, gzipSize = 0 } = mod.size;\n const isConcatenation = mod.kind === SDK.ModuleKind.Concatenation;\n\n const containedOtherModules =\n !isConcatenation &&\n parsedSize === 0 &&\n includeModules.filter(\n (e) => e !== mod && e.modules && e.modules.indexOf(mod.id) > -1,\n );\n\n return (\n <div className={styles['bundle-tree']}>\n <Popover\n content={`Open the ${basename}’s module reasons tree.`}\n placement=\"bottom\"\n >\n <div\n className={styles.box}\n onClick={() => {\n setModuleJumpList([mod.id]);\n setShow(true);\n }}\n >\n <div className={styles.keywords}>\n <Keyword ellipsis text={basename} keyword={''} />\n </div>\n <div className={styles.dividerDiv}>\n <Divider className={styles.divider} dashed />\n </div>\n </div>\n </Popover>\n <Space>\n {parsedSize !== 0 ? (\n <>\n {typeof gzipSize === 'number' ? (\n <Popover\n placement=\"bottom\"\n content={<SourceSizeTag size={sourceSize} />}\n >\n <Space direction=\"horizontal\">\n <BundledSizeTag size={parsedSize} />\n <GzippedSizeTag size={gzipSize} />\n </Space>\n </Popover>\n ) : (\n <Space direction=\"horizontal\">\n <BundledSizeTag size={parsedSize} />\n <SourceSizeTag size={sourceSize} />\n </Space>\n )}\n </>\n ) : sourceSize !== 0 ? (\n // fallback to display tag for source size\n <SourceSizeTag size={sourceSize} />\n ) : null}\n {isConcatenation ? (\n <ConcatenatedTag moduleCount={mod.modules?.length || 0} />\n ) : null}\n {containedOtherModules && containedOtherModules.length ? (\n <Tooltip\n title={\n <Space direction=\"vertical\">\n <Typography.Text style={{ color: 'inherit' }}>\n This module is concatenated into another container\n module:\n </Typography.Text>\n {containedOtherModules.map(({ id, path }) => {\n if (isJsDataUrl(path)) {\n return (\n <Typography.Paragraph\n ellipsis={{ rows: 4 }}\n key={id}\n style={{ color: 'inherit', maxWidth: '100%' }}\n code\n >\n {path}\n </Typography.Paragraph>\n );\n }\n\n const p = relative(dirname(mod.path), path);\n if (p.startsWith('javascript;charset=utf-8;base64,')) {\n return (\n <Typography.Text\n key={id}\n style={{ color: 'inherit', maxWidth: '100%' }}\n code\n >\n {p[0] === '.' ? p : `./${p}`}\n </Typography.Text>\n );\n }\n\n return (\n <Typography.Text\n key={id}\n style={{ color: 'inherit' }}\n code\n >\n {p[0] === '.' ? p : `./${p}`}\n </Typography.Text>\n );\n })}\n </Space>\n }\n >\n <Tag color=\"green\">concatenated</Tag>\n </Tooltip>\n ) : null}\n\n <ModuleCodeViewer data={mod} />\n </Space>\n </div>\n );\n },\n dirTitle(dir, defaultTitle) {\n const mods: string[] = [];\n const paths = getChildrenModule(dir, mods);\n if (paths.length) {\n const mods = paths.map(\n (e) => includeModules.find((m) => m.path === e)!,\n );\n\n const parsedSize = sumBy(mods, (e) => e.size?.parsedSize || 0);\n const sourceSize = sumBy(mods, (e) => e.size?.sourceSize || 0);\n return (\n <div className={styles['bundle-tree']}>\n <div className={styles.box}>\n <div className={styles.keywords}>\n <Keyword ellipsis text={defaultTitle} keyword={''} />\n </div>\n <div className={styles.dividerDiv}>\n <Divider className={styles.divider} dashed />\n </div>\n </div>\n <Space>\n {parsedSize > 0 ? (\n <>\n <TotalBundledSizeTag size={parsedSize} />\n <TotalSourceSizeTag size={sourceSize} />\n </>\n ) : (\n <TotalSourceSizeTag size={sourceSize} />\n )}\n </Space>\n </div>\n );\n }\n\n return defaultTitle;\n },\n page: 'bundle',\n });\n return res;\n }, [filteredModules]);\n\n const onSearch = (value: string) => setModuleKeyword(value);\n\n useEffect(() => {\n setModuleKeyword('');\n setDefaultExpandAll(false);\n }, [asset]);\n\n useEffect(() => {\n setDefaultExpandAll(false);\n }, [moduleKeyword]);\n\n return (\n <ModuleGraphListContext.Provider\n value={{ moduleJumpList, setModuleJumpList }}\n >\n <Card\n className={styles.bundle}\n title={`Modules of \"${asset.path}\"`}\n bodyStyle={{ minHeight: height }}\n size=\"small\"\n >\n {includeModules.length ? (\n <Row>\n <Col span={24}>\n <ModulesStatistics\n modules={includeModules}\n chunks={includeChunks}\n filteredModules={filteredModules}\n />\n </Col>\n <Col span={24}>\n <Space>\n <KeywordInput\n placeholder=\"search module by keyword\"\n onChange={onSearch}\n key={asset.path}\n />\n <Button\n onClick={() => setDefaultExpandAll(true)}\n size=\"small\"\n icon={<ColumnHeightOutlined />}\n />\n </Space>\n </Col>\n <Col span={24} style={{ marginTop: Size.BasePadding }}>\n {filteredModules.length ? (\n <DirectoryTree\n key={`tree_${moduleKeyword}_${defaultExpandAll}_${asset.path}`}\n selectable={false}\n defaultExpandAll={\n defaultExpandAll || filteredModules.length <= 20\n }\n onExpand={(expandedKeys) => {\n expandedModulesKeys = expandedKeys;\n }}\n defaultExpandParent\n // @ts-ignore\n defaultExpandedKeys={\n expandedModulesKeys?.length\n ? expandedModulesKeys\n : fileStructures.length === 1\n ? [fileStructures[0].key]\n : []\n }\n treeData={fileStructures as AntdDataNode[]}\n rootStyle={{\n maxHeight: '500px',\n overflow: 'auto',\n border: '1px solid rgba(235, 237, 241)',\n padding: '14px 20px',\n }}\n />\n ) : (\n <Empty\n description={\n <Typography.Text\n strong\n >{`\"${moduleKeyword}\" can't match any modules`}</Typography.Text>\n }\n />\n )}\n </Col>\n </Row>\n ) : (\n <Empty\n description={\n <Typography.Text\n strong\n >{`\"${asset.path}\" doesn't have any modules`}</Typography.Text>\n }\n />\n )}\n\n <ModuleGraphViewer\n id={\n moduleJumpList?.length\n ? moduleJumpList[moduleJumpList.length - 1]\n : ''\n }\n show={show}\n setShow={setShow}\n cwd={root}\n />\n </Card>\n </ModuleGraphListContext.Provider>\n );\n};\n"],"names":["DirectoryTree","Tree","expandedModulesKeys","TAB_MAP","tagStyle","EmptyCodeItem","Empty","ModuleCodeViewer","data","tab","setTab","useState","t","useI18n","TAB_LAB_MAP","path","TextDrawer","Popover","CodepenCircleOutlined","ServerAPIProvider","SDK","source","Card","Object","omitBy","s","k","e","v","Typography","CodeViewer","ModuleGraphViewer","id","show","setShow","cwd","modules","ModuleAnalyzeComponent","inlinedResourcePathKey","getChildrenModule","node","mods","n","ModulesStatistics","chunks","filteredModules","sourceSize","parsedSize","filteredParsedSize","filteredSourceSize","useMemo","sumBy","Space","Tooltip","InfoCircleOutlined","Divider","formatSize","Bdg","ConcatenatedTag","moduleCount","Tag","TotalBundledSizeTag","size","BundledSizeTag","GzippedSizeTag","TotalSourceSizeTag","SourceSizeTag","AssetDetail","asset","includeChunks","includeModules","moduleSizeLimit","height","root","moduleKeyword","setModuleKeyword","defaultExpandAll","setDefaultExpandAll","moduleJumpList","setModuleJumpList","res","regexp","RegExp","fileStructures","createFileStructures","Boolean","file","basename","_mod_modules","mod","gzipSize","isConcatenation","containedOtherModules","styles","Keyword","isJsDataUrl","p","relative","dirname","dir","defaultTitle","paths","m","_e_size","onSearch","value","useEffect","ModuleGraphListContext","Row","Col","KeywordInput","Button","ColumnHeightOutlined","Size","expandedKeys"],"mappings":"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"}
@@ -12,17 +12,17 @@ const columns = [
12
12
  key: 'name'
13
13
  },
14
14
  {
15
- title: "size | \u5927\u5C0F",
15
+ title: 'size | 大小',
16
16
  dataIndex: 'size',
17
17
  key: 'size'
18
18
  },
19
19
  {
20
- title: "assets | \u8D44\u6E90",
20
+ title: 'assets | 资源',
21
21
  dataIndex: 'assets',
22
22
  key: 'assets'
23
23
  },
24
24
  {
25
- title: "Entry or Not | \u662F\u5426\u662F\u5165\u53E3",
25
+ title: 'Entry or Not | 是否是入口',
26
26
  dataIndex: 'entry',
27
27
  key: 'entry'
28
28
  }
@@ -40,7 +40,7 @@ const ChunksTable = ({ chunks })=>{
40
40
  children: formatSize(chunk.parsedSize)
41
41
  }),
42
42
  entry: /*#__PURE__*/ jsx(Tag, {
43
- children: chunk.entry ? "\u662F | Yes" : "\u5426 | No"
43
+ children: chunk.entry ? '是 | Yes' : '否 | No'
44
44
  }),
45
45
  assets: chunk.assets.map((asset)=>/*#__PURE__*/ jsx("p", {
46
46
  children: /*#__PURE__*/ jsx(Tag, {
@@ -1 +1 @@
1
- {"version":3,"file":"pages/ModuleAnalyze/chunks.mjs","sources":["webpack://@rsdoctor/components/./src/pages/ModuleAnalyze/chunks.tsx"],"sourcesContent":["import { SDK } from '@rsdoctor/types';\nimport { Empty, Table, Tag } from 'antd';\nimport { orderBy } from 'lodash-es';\nimport React, { useMemo } from 'react';\nimport { formatSize } from 'src/utils';\nimport './index.sass';\nimport { Lodash } from '@rsdoctor/utils/common';\n\ntype ChunksDataType = {\n key: string | number;\n name: JSX.Element;\n size: JSX.Element;\n entry: JSX.Element;\n assets: JSX.Element[];\n};\n\nconst columns = [\n {\n title: 'Chunk Name',\n dataIndex: 'name',\n key: 'name',\n },\n {\n title: 'size | 大小',\n dataIndex: 'size',\n key: 'size',\n },\n {\n title: 'assets | 资源',\n dataIndex: 'assets',\n key: 'assets',\n },\n {\n title: 'Entry or Not | 是否是入口',\n dataIndex: 'entry',\n key: 'entry',\n },\n];\n\nexport const ChunksTable: React.FC<{\n chunks: SDK.ChunkData[];\n}> = ({ chunks }) => {\n const chunksData = useMemo(() => {\n const _chunksData: (ChunksDataType | undefined)[] = chunks.map((chunk) => {\n if (!chunk) return undefined;\n return {\n key: chunk.id,\n name: <Tag>{chunk.name}</Tag>,\n size: <Tag>{formatSize(chunk.parsedSize)}</Tag>,\n entry: <Tag>{chunk.entry ? '是 | Yes' : '否 | No'}</Tag>,\n assets: chunk.assets.map((asset) => (\n <p key={asset}>\n <Tag key={asset}>{asset}</Tag>\n </p>\n )),\n };\n });\n return orderBy(Lodash.compact(_chunksData), ['size'], ['desc']);\n }, [chunks]);\n\n return (\n <>\n {chunksData?.length ? (\n <Table\n bordered\n pagination={false}\n dataSource={chunksData}\n columns={columns}\n />\n ) : (\n <Empty />\n )}\n </>\n );\n};\n"],"names":["columns","ChunksTable","chunks","chunksData","useMemo","_chunksData","chunk","Tag","formatSize","asset","orderBy","Lodash","Table","Empty"],"mappings":";;;;;;;AAgBA,MAAMA,UAAU;IACd;QACE,OAAO;QACP,WAAW;QACX,KAAK;IACP;IACA;QACE,OAAO;QACP,WAAW;QACX,KAAK;IACP;IACA;QACE,OAAO;QACP,WAAW;QACX,KAAK;IACP;IACA;QACE,OAAO;QACP,WAAW;QACX,KAAK;IACP;CACD;AAEM,MAAMC,cAER,CAAC,EAAEC,MAAM,EAAE;IACd,MAAMC,aAAaC,QAAQ;QACzB,MAAMC,cAA8CH,OAAO,GAAG,CAAC,CAACI;YAC9D,IAAI,CAACA,OAAO;YACZ,OAAO;gBACL,KAAKA,MAAM,EAAE;gBACb,MAAM,WAAN,GAAM,IAACC,KAAGA;8BAAED,MAAM,IAAI;;gBACtB,MAAM,WAAN,GAAM,IAACC,KAAGA;8BAAEC,WAAWF,MAAM,UAAU;;gBACvC,OAAO,WAAP,GAAO,IAACC,KAAGA;8BAAED,MAAM,KAAK,GAAG,iBAAY;;gBACvC,QAAQA,MAAM,MAAM,CAAC,GAAG,CAAC,CAACG,QAAAA,WAAAA,GACxB,IAAC;kCACC,kBAACF,KAAGA;sCAAcE;2BAARA;uBADJA;YAIZ;QACF;QACA,OAAOC,QAAQC,OAAO,OAAO,CAACN,cAAc;YAAC;SAAO,EAAE;YAAC;SAAO;IAChE,GAAG;QAACH;KAAO;IAEX,OAAO,WAAP,GACE;kBACGC,AAAAA,CAAAA,QAAAA,aAAAA,KAAAA,IAAAA,WAAY,MAAM,AAAD,IAAC,cACjB,IAACS,OAAKA;YACJ,UAAQ;YACR,YAAY;YACZ,YAAYT;YACZ,SAASH;2BAGX,IAACa,OAAKA,CAAAA;;AAId"}
1
+ {"version":3,"file":"pages/ModuleAnalyze/chunks.mjs","sources":["webpack://@rsdoctor/components/./src/pages/ModuleAnalyze/chunks.tsx"],"sourcesContent":["import { SDK } from '@rsdoctor/types';\nimport { Empty, Table, Tag } from 'antd';\nimport { orderBy } from 'lodash-es';\nimport React, { useMemo } from 'react';\nimport { formatSize } from 'src/utils';\nimport './index.sass';\nimport { Lodash } from '@rsdoctor/utils/common';\n\ntype ChunksDataType = {\n key: string | number;\n name: JSX.Element;\n size: JSX.Element;\n entry: JSX.Element;\n assets: JSX.Element[];\n};\n\nconst columns = [\n {\n title: 'Chunk Name',\n dataIndex: 'name',\n key: 'name',\n },\n {\n title: 'size | 大小',\n dataIndex: 'size',\n key: 'size',\n },\n {\n title: 'assets | 资源',\n dataIndex: 'assets',\n key: 'assets',\n },\n {\n title: 'Entry or Not | 是否是入口',\n dataIndex: 'entry',\n key: 'entry',\n },\n];\n\nexport const ChunksTable: React.FC<{\n chunks: SDK.ChunkData[];\n}> = ({ chunks }) => {\n const chunksData = useMemo(() => {\n const _chunksData: (ChunksDataType | undefined)[] = chunks.map((chunk) => {\n if (!chunk) return undefined;\n return {\n key: chunk.id,\n name: <Tag>{chunk.name}</Tag>,\n size: <Tag>{formatSize(chunk.parsedSize)}</Tag>,\n entry: <Tag>{chunk.entry ? '是 | Yes' : '否 | No'}</Tag>,\n assets: chunk.assets.map((asset) => (\n <p key={asset}>\n <Tag key={asset}>{asset}</Tag>\n </p>\n )),\n };\n });\n return orderBy(Lodash.compact(_chunksData), ['size'], ['desc']);\n }, [chunks]);\n\n return (\n <>\n {chunksData?.length ? (\n <Table\n bordered\n pagination={false}\n dataSource={chunksData}\n columns={columns}\n />\n ) : (\n <Empty />\n )}\n </>\n );\n};\n"],"names":["columns","ChunksTable","chunks","chunksData","useMemo","_chunksData","chunk","Tag","formatSize","asset","orderBy","Lodash","Table","Empty"],"mappings":";;;;;;;AAgBA,MAAMA,UAAU;IACd;QACE,OAAO;QACP,WAAW;QACX,KAAK;IACP;IACA;QACE,OAAO;QACP,WAAW;QACX,KAAK;IACP;IACA;QACE,OAAO;QACP,WAAW;QACX,KAAK;IACP;IACA;QACE,OAAO;QACP,WAAW;QACX,KAAK;IACP;CACD;AAEM,MAAMC,cAER,CAAC,EAAEC,MAAM,EAAE;IACd,MAAMC,aAAaC,QAAQ;QACzB,MAAMC,cAA8CH,OAAO,GAAG,CAAC,CAACI;YAC9D,IAAI,CAACA,OAAO;YACZ,OAAO;gBACL,KAAKA,MAAM,EAAE;gBACb,MAAM,WAAN,GAAM,IAACC,KAAGA;8BAAED,MAAM,IAAI;;gBACtB,MAAM,WAAN,GAAM,IAACC,KAAGA;8BAAEC,WAAWF,MAAM,UAAU;;gBACvC,OAAO,WAAP,GAAO,IAACC,KAAGA;8BAAED,MAAM,KAAK,GAAG,YAAY;;gBACvC,QAAQA,MAAM,MAAM,CAAC,GAAG,CAAC,CAACG,QAAAA,WAAAA,GACxB,IAAC;kCACC,kBAACF,KAAGA;sCAAcE;2BAARA;uBADJA;YAIZ;QACF;QACA,OAAOC,QAAQC,OAAO,OAAO,CAACN,cAAc;YAAC;SAAO,EAAE;YAAC;SAAO;IAChE,GAAG;QAACH;KAAO;IAEX,OAAO,WAAP,GACE;kBACGC,AAAAA,CAAAA,QAAAA,aAAAA,KAAAA,IAAAA,WAAY,MAAM,AAAD,IAAC,cACjB,IAACS,OAAKA;YACJ,UAAQ;YACR,YAAY;YACZ,YAAYT;YACZ,SAASH;2BAGX,IAACa,OAAKA,CAAAA;;AAId"}
@@ -35,7 +35,7 @@ const ViewChangesContent = ({ file, data })=>{
35
35
  strong: true,
36
36
  children: [
37
37
  match.baselineTitle || 'Baseline',
38
- " \u27F7",
38
+ " ",
39
39
  ' ',
40
40
  match.currentTitle || 'Current'
41
41
  ]
@@ -71,7 +71,7 @@ function CodeEditor(props) {
71
71
  };
72
72
  }, []);
73
73
  if (!module) return /*#__PURE__*/ jsx("div", {
74
- children: "\u8BF7\u9009\u62E9\u8981\u67E5\u770B\u7684\u6A21\u5757"
74
+ children: "请选择要查看的模块"
75
75
  });
76
76
  const handleEditorDidMount = (editor)=>{
77
77
  editorRef.current = editor;
@@ -1,40 +1,40 @@
1
1
  const cn = {
2
- Overall: "\u6982\u89C8",
3
- 'Compile Analysis': "\u7F16\u8BD1\u5206\u6790",
4
- 'Bundle Alerts': "\u7F16\u8BD1\u9884\u8B66",
5
- 'Help Center': "\u5E2E\u52A9\u4E2D\u5FC3",
6
- 'Rsdoctor Introduction': "Rsdoctor \u4ECB\u7ECD",
7
- 'Compilation Alerts': "\u7F16\u8BD1\u9884\u8B66",
8
- 'Plugins Analysis': "Plugins \u5206\u6790",
9
- LoadersAnalysis: "Loaders \u5206\u6790",
10
- 'Loaders Timeline': "Loaders \u6982\u89C8",
11
- 'Loaders Analysis': "Loaders \u5206\u6790",
12
- PluginsAnalysis: "Plugins \u5206\u6790",
13
- ModuleResolve: "Module Resolve \u5206\u6790",
14
- 'Bundle Analysis': "\u4EA7\u7269\u5206\u6790",
15
- BundleSize: "\u4EA7\u7269\u4F53\u79EF\u5206\u6790",
16
- ViewBundleSize: "\u67E5\u770B\u5305\u5927\u5C0F",
2
+ Overall: '概览',
3
+ 'Compile Analysis': '编译分析',
4
+ 'Bundle Alerts': '编译预警',
5
+ 'Help Center': '帮助中心',
6
+ 'Rsdoctor Introduction': 'Rsdoctor 介绍',
7
+ 'Compilation Alerts': '编译预警',
8
+ 'Plugins Analysis': 'Plugins 分析',
9
+ LoadersAnalysis: 'Loaders 分析',
10
+ 'Loaders Timeline': 'Loaders 概览',
11
+ 'Loaders Analysis': 'Loaders 分析',
12
+ PluginsAnalysis: 'Plugins 分析',
13
+ ModuleResolve: 'Module Resolve 分析',
14
+ 'Bundle Analysis': '产物分析',
15
+ BundleSize: '产物体积分析',
16
+ ViewBundleSize: '查看包大小',
17
17
  'Module Graph': 'Module Graph',
18
18
  TreeShaking: 'Tree Shaking',
19
- 'Rule Index': "\u9519\u8BEF\u7D22\u5F15\u4FE1\u606F",
20
- Resources: "\u8D44\u6E90",
21
- 'Project Overall': "\u9879\u76EE\u4FE1\u606F\u6982\u89C8",
22
- 'Compile Overall': "\u7F16\u8BD1\u6570\u636E\u6982\u89C8",
23
- 'Bundle Overall': "\u4EA7\u7269\u6570\u636E\u6982\u89C8",
24
- 'Expand Omitted': " reasons \u6811\u4F1A\u9ED8\u8BA4\u6298\u53E0\u4E2D\u95F4\u7684\u7B2C\u4E09\u65B9\u5F15\u5165\u7684\u6A21\u5757\uFF0C\u70B9\u51FB\u8FD9\u4E2A\u56FE\u6807\u53EF\u4EE5\u67E5\u770B\u5B8C\u6574\u6811\u56FE",
25
- 'Concatenated Tag': "\u4E32\u8054\u6A21\u5757\uFF0Chover \u4E0A\u53BB\u53EF\u4EE5\u663E\u793A\u805A\u5408\u6210\u7684\u4E3B\u6A21\u5757\u540D\u79F0\u3002\u6CE8\uFF1A\u805A\u5408\u6A21\u5757 bundled size \u4E3A\u96F6\uFF0C\u6709\u53EF\u80FD\u662F\u56E0\u4E3A\u88AB\u805A\u5408\u5230\u4E86\u4E3B\u6A21\u5757\u4E2D\u3002",
26
- 'the file content not changed after transpiled by this loader': "\u8BE5\u6587\u4EF6\u5185\u5BB9\u5728 loader \u5904\u7406\u524D\u540E\u6CA1\u6709\u53D1\u751F\u53D8\u5316",
27
- 'Output Assets List': "\u4EA7\u7269\u6587\u4EF6\u5217\u8868",
28
- 'filter the output assets which size is greater than the input value': "\u7B5B\u9009\u5927\u5C0F\u5927\u4E8E\u8F93\u5165\u503C\u7684\u4EA7\u7269\u6587\u4EF6",
29
- 'filter the modules which size is greater than the input value': "\u7B5B\u9009\u5927\u5C0F\u5927\u4E8E\u8F93\u5165\u503C\u7684\u6A21\u5757",
30
- 'After Compile': "\u7F16\u8BD1\u540E",
31
- 'After Bundle': "\u6253\u5305\u540E",
32
- CodeModeExplain: "Lite \u6A21\u5F0F\u4E0B\u6216\u7EAF stats.json \u4E0A\u4F20\u7684\u60C5\u51B5\u4E0B\u53EA\u6709 source code.",
33
- DuplicatePakCodeExplain: "\u7EAF stats.json \u8F93\u5165\u7684\u60C5\u51B5\u4E0B\u6CA1\u6709\u4EE3\u7801\uFF0C\u53EF\u4F7F\u7528 Rsdoctor \u63D2\u4EF6\u53C2\u4E0E\u6784\u5EFA\u4F1A\u6709\u5BF9\u5E94\u4EE3\u7801\u3002",
34
- AsyncLoaderInfo: "\u5BF9\u4E8E\u5F02\u6B65 loader\uFF0C\u5355\u4E2A loader \u7684\u8017\u65F6\u53EF\u80FD\u4E0D\u51C6\u786E\u3002\u4F8B\u5982\uFF1Amini-css-extract-plugin \u7684 loader\u3002",
35
- Details: "\u8BE6\u60C5",
36
- Expand: "\u5C55\u5F00",
37
- Collapse: "\u6536\u8D77"
19
+ 'Rule Index': '错误索引信息',
20
+ Resources: '资源',
21
+ 'Project Overall': '项目信息概览',
22
+ 'Compile Overall': '编译数据概览',
23
+ 'Bundle Overall': '产物数据概览',
24
+ 'Expand Omitted': ' reasons 树会默认折叠中间的第三方引入的模块,点击这个图标可以查看完整树图',
25
+ 'Concatenated Tag': '串联模块,hover 上去可以显示聚合成的主模块名称。注:聚合模块 bundled size 为零,有可能是因为被聚合到了主模块中。',
26
+ 'the file content not changed after transpiled by this loader': '该文件内容在 loader 处理前后没有发生变化',
27
+ 'Output Assets List': '产物文件列表',
28
+ 'filter the output assets which size is greater than the input value': '筛选大小大于输入值的产物文件',
29
+ 'filter the modules which size is greater than the input value': '筛选大小大于输入值的模块',
30
+ 'After Compile': '编译后',
31
+ 'After Bundle': '打包后',
32
+ CodeModeExplain: 'Lite 模式下或纯 stats.json 上传的情况下只有 source code.',
33
+ DuplicatePakCodeExplain: '纯 stats.json 输入的情况下没有代码,可使用 Rsdoctor 插件参与构建会有对应代码。',
34
+ AsyncLoaderInfo: '对于异步 loader,单个 loader 的耗时可能不准确。例如:mini-css-extract-plugin loader。',
35
+ Details: '详情',
36
+ Expand: '展开',
37
+ Collapse: '收起'
38
38
  };
39
39
  const i18n_cn = cn;
40
40
  export { i18n_cn as default };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rsdoctor/components",
3
- "version": "1.3.1",
3
+ "version": "1.3.3",
4
4
  "license": "MIT",
5
5
  "types": "dist/index.d.ts",
6
6
  "repository": {
@@ -39,13 +39,13 @@
39
39
  },
40
40
  "devDependencies": {
41
41
  "@rsbuild/plugin-check-syntax": "1.4.0",
42
- "@rsbuild/plugin-react": "^1.4.0",
42
+ "@rsbuild/plugin-react": "^1.4.1",
43
43
  "@rsbuild/plugin-sass": "^1.4.0",
44
- "@rsbuild/plugin-svgr": "^1.2.1",
44
+ "@rsbuild/plugin-svgr": "^1.2.2",
45
45
  "@types/lodash-es": "^4.17.12",
46
46
  "@types/node": "^22.8.1",
47
47
  "@types/path-browserify": "1.0.3",
48
- "@types/react": "^18.3.24",
48
+ "@types/react": "^18.3.26",
49
49
  "@types/react-highlight-words": "^0.20.0",
50
50
  "@types/url-parse": "1.4.11",
51
51
  "react": "18.3.1",
@@ -56,7 +56,7 @@
56
56
  "@monaco-editor/react": "4.7.0",
57
57
  "ansi-to-react": "6.1.6",
58
58
  "antd": "5.19.1",
59
- "axios": "^1.12.0",
59
+ "axios": "^1.12.2",
60
60
  "clsx": "^2.1.1",
61
61
  "dayjs": "1.11.18",
62
62
  "echarts": "^5.6.0",
@@ -75,9 +75,9 @@
75
75
  "react-router-dom": "6.4.3",
76
76
  "socket.io-client": "4.8.1",
77
77
  "url-parse": "1.5.10",
78
- "@rsdoctor/graph": "1.3.1",
79
- "@rsdoctor/utils": "1.3.1",
80
- "@rsdoctor/types": "1.3.1"
78
+ "@rsdoctor/types": "1.3.3",
79
+ "@rsdoctor/utils": "1.3.3",
80
+ "@rsdoctor/graph": "1.3.3"
81
81
  },
82
82
  "peerDependencies": {
83
83
  "react": ">=18.3.1",