@rsdoctor/components 1.1.3 → 1.1.5
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 +21 -0
- package/dist/components/Charts/TreeMap.js +284 -0
- package/dist/components/Charts/TreeMap.js.map +1 -0
- package/dist/components/Charts/constants.d.ts +10 -0
- package/dist/components/Charts/constants.js +62 -0
- package/dist/components/Charts/constants.js.map +1 -1
- package/dist/pages/BundleSize/components/asset.js +87 -34
- package/dist/pages/BundleSize/components/asset.js.map +1 -1
- package/dist/pages/BundleSize/components/index.js +26 -33
- package/dist/pages/BundleSize/components/index.js.map +1 -1
- package/dist/pages/BundleSize/components/index_module.css +4 -0
- package/dist/pages/BundleSize/components/search-modal.d.ts +7 -1
- package/dist/pages/BundleSize/components/search-modal.js +61 -30
- package/dist/pages/BundleSize/components/search-modal.js.map +1 -1
- package/dist/pages/ModuleAnalyze/fileTree.js +3 -3
- package/dist/pages/ModuleAnalyze/fileTree.js.map +1 -1
- package/dist/pages/ModuleAnalyze/index.d.ts +2 -1
- package/dist/pages/ModuleAnalyze/index.js +5 -0
- package/dist/pages/ModuleAnalyze/index.js.map +1 -1
- package/dist/pages/WebpackLoaders/Analysis/index.js +26 -3
- package/dist/pages/WebpackLoaders/Analysis/index.js.map +1 -1
- package/dist/pages/WebpackLoaders/Overall/index.js +27 -2
- package/dist/pages/WebpackLoaders/Overall/index.js.map +1 -1
- package/dist/utils/file.d.ts +13 -1
- package/dist/utils/file.js +78 -0
- package/dist/utils/file.js.map +1 -1
- package/dist/utils/i18n/cn.js +5 -1
- package/dist/utils/i18n/cn.js.map +1 -1
- package/dist/utils/i18n/en.d.ts +4 -0
- package/dist/utils/i18n/en.js +5 -1
- package/dist/utils/i18n/en.js.map +1 -1
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"mappings":"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","names":["mods"],"ignoreList":[],"sources":["../../../../src/pages/BundleSize/components/asset.tsx"],"sourcesContent":["import {\n CodepenCircleOutlined,\n ColumnHeightOutlined,\n DeploymentUnitOutlined,\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 '../../../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';\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};\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\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 } = 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 <div className={styles.box}>\n <div className={styles.keywords}>\n <Keyword ellipsis text={basename} keyword={''} />\n </div>\n\n <div className={styles.dividerDiv}>\n <Divider className={styles.divider} dashed />\n </div>\n </div>\n <Space>\n {parsedSize !== 0 ? (\n <Tooltip\n title={\n <Space direction=\"vertical\">\n <Tag color={'orange'}>\n {`Bundled Size: ${formatSize(parsedSize)}`}\n </Tag>\n <Tag color={'volcano'}>\n {`Source Size: ${formatSize(sourceSize)}`}\n </Tag>\n </Space>\n }\n color={'white'}\n >\n <Tag color={'purple'} style={tagStyle}>\n {`Bundled Size: ${formatSize(parsedSize)}`}\n </Tag>\n </Tooltip>\n ) : sourceSize !== 0 ? (\n // fallback to display tag for source size\n <Tag color={'geekblue'}>\n {`Source Size: ${formatSize(sourceSize)}`}\n </Tag>\n ) : null}\n {isConcatenation ? (\n <Tooltip\n title={\n <Space>\n <Typography.Text style={{ color: 'inherit' }}>\n this is a concatenated module, it contains{' '}\n {mod.modules?.length} modules\n </Typography.Text>\n </Space>\n }\n >\n <Tag color=\"green\" style={tagStyle}>\n concatenated\n </Tag>\n </Tooltip>\n ) : null}\n {containedOtherModules && containedOtherModules.length ? (\n <Tooltip\n title={\n <Space direction=\"vertical\">\n <Typography.Text style={{ color: 'inherit' }}>\n this is a concatenated module, it is be contained in\n these modules below:\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 <Popover content=\"Open the Module Graph Box\">\n <DeploymentUnitOutlined\n onClick={() => {\n setModuleJumpList([mod.id]);\n setShow(true);\n }}\n />\n </Popover>\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 <Tag style={tagStyle} color={'orange'}>\n {`Bundled: ${formatSize(parsedSize)}`}\n </Tag>\n <Tag style={tagStyle} color={'lime'}>\n {`Source: ${formatSize(sourceSize)}`}\n </Tag>\n </>\n ) : (\n <Tag style={tagStyle} color={'lime'}>\n {`Source: ${formatSize(sourceSize)}`}\n </Tag>\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 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//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IiIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOltdLCJzb3VyY2VzQ29udGVudCI6W119"]}
|
|
1
|
+
{"version":3,"mappings":"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","names":["mods"],"ignoreList":[],"sources":["../../../../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 '../../../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';\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 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 } = 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 <Tooltip\n title={\n <Space direction=\"vertical\">\n <BundledSizeTag size={parsedSize} />\n <SourceSizeTag size={sourceSize} />\n </Space>\n }\n color={'white'}\n >\n <BundledSizeTag size={parsedSize} />\n </Tooltip>\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//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IiIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOltdLCJzb3VyY2VzQ29udGVudCI6W119"]}
|
|
@@ -29,15 +29,22 @@ import { KeywordInput } from "../../../components/Form/keyword";
|
|
|
29
29
|
import { Keyword } from "../../../components/Keyword";
|
|
30
30
|
import { ServerAPIProvider, withServerAPI } from "../../../components/Manifest";
|
|
31
31
|
import { Size } from "../../../constants";
|
|
32
|
-
import {
|
|
32
|
+
import {
|
|
33
|
+
createFileStructures,
|
|
34
|
+
flattenTreemapData,
|
|
35
|
+
formatSize,
|
|
36
|
+
useI18n
|
|
37
|
+
} from "../../../utils";
|
|
33
38
|
import { AssetDetail } from "./asset";
|
|
34
39
|
import { BundleCards } from "./cards";
|
|
35
40
|
import styles from "./index.module";
|
|
36
41
|
import "./index.css";
|
|
37
42
|
import { SearchModal } from "./search-modal";
|
|
43
|
+
import {
|
|
44
|
+
AssetTreemapWithFilter
|
|
45
|
+
} from "../../../components/Charts/TreeMap";
|
|
38
46
|
const { Option } = Select;
|
|
39
47
|
const cardBodyHeight = 600;
|
|
40
|
-
const largeCardBodyHeight = 800;
|
|
41
48
|
const tabList = [
|
|
42
49
|
{
|
|
43
50
|
key: "tree",
|
|
@@ -225,7 +232,7 @@ const WebpackModulesOverallBase = ({ errors, cwd, summary, entryPoints }) => {
|
|
|
225
232
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
226
233
|
/* @__PURE__ */ jsxs("div", { className: "bundle-size-card", children: [
|
|
227
234
|
/* @__PURE__ */ jsx(BundleCards, { cwd, errors, summary }),
|
|
228
|
-
/* @__PURE__ */
|
|
235
|
+
/* @__PURE__ */ jsx(
|
|
229
236
|
Card,
|
|
230
237
|
{
|
|
231
238
|
className: "bundle-size=card",
|
|
@@ -236,39 +243,25 @@ const WebpackModulesOverallBase = ({ errors, cwd, summary, entryPoints }) => {
|
|
|
236
243
|
tabProps: {
|
|
237
244
|
size: "middle"
|
|
238
245
|
},
|
|
239
|
-
children:
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
246
|
+
children: /* @__PURE__ */ jsx(ServerAPIProvider, { api: SDK.ServerAPI.API.GetSummaryBundles, children: (data) => {
|
|
247
|
+
const computedTreeData = data.map((item) => {
|
|
248
|
+
const moduleTree = flattenTreemapData(item.modules);
|
|
249
|
+
return {
|
|
250
|
+
name: item.asset.path,
|
|
251
|
+
value: item.asset.size,
|
|
252
|
+
children: moduleTree.children
|
|
253
|
+
};
|
|
254
|
+
});
|
|
255
|
+
return /* @__PURE__ */ jsx(
|
|
256
|
+
AssetTreemapWithFilter,
|
|
243
257
|
{
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
if (data && graphType === "tile") {
|
|
248
|
-
return /* @__PURE__ */ jsx(
|
|
249
|
-
"iframe",
|
|
250
|
-
{
|
|
251
|
-
srcDoc: data,
|
|
252
|
-
width: "100%",
|
|
253
|
-
height: largeCardBodyHeight,
|
|
254
|
-
style: { border: "none" }
|
|
255
|
-
}
|
|
256
|
-
);
|
|
257
|
-
}
|
|
258
|
-
return /* @__PURE__ */ jsx(
|
|
259
|
-
Empty,
|
|
260
|
-
{
|
|
261
|
-
description: /* @__PURE__ */ jsxs("div", { children: [
|
|
262
|
-
"Tile graph is disabled,",
|
|
263
|
-
" ",
|
|
264
|
-
/* @__PURE__ */ jsx("a", { href: "https://rsdoctor.rs/config/options/options#generatetilegraph", children: "see the documentation to learn how to enable." })
|
|
265
|
-
] })
|
|
266
|
-
}
|
|
267
|
-
);
|
|
258
|
+
treeData: computedTreeData,
|
|
259
|
+
onChartClick: (i) => {
|
|
260
|
+
console.log("onChartClick", i);
|
|
268
261
|
}
|
|
269
262
|
}
|
|
270
|
-
)
|
|
271
|
-
|
|
263
|
+
);
|
|
264
|
+
} })
|
|
272
265
|
}
|
|
273
266
|
),
|
|
274
267
|
/* @__PURE__ */ jsx(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"mappings":"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","names":[],"ignoreList":[],"sources":["../../../../src/pages/BundleSize/components/index.tsx"],"sourcesContent":["import {\n CodeOutlined,\n CodepenCircleOutlined,\n DeploymentUnitOutlined,\n InfoCircleOutlined,\n} from '@ant-design/icons';\nimport { Client, SDK } from '@rsdoctor/types';\nimport {\n Button,\n Card,\n Col,\n Divider,\n Empty,\n InputNumber,\n Row,\n Select,\n Space,\n Tag,\n Tooltip,\n Typography,\n} from 'antd';\nimport { debounce, includes, sumBy } from 'lodash-es';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useCodeDrawer } from '../../../components/base/CodeViewer/useCodeDrawer';\nimport { Badge as Bdg } from '../../../components/Badge';\nimport { FileTree } from '../../../components/FileTree';\nimport { KeywordInput } from '../../../components/Form/keyword';\nimport { Keyword } from '../../../components/Keyword';\nimport { ServerAPIProvider, withServerAPI } from '../../../components/Manifest';\nimport { Size } from '../../../constants';\nimport { createFileStructures, formatSize, useI18n } from '../../../utils';\nimport { GraphType } from '../constants';\nimport { AssetDetail } from './asset';\nimport { BundleCards } from './cards';\nimport styles from './index.module';\nimport './index.css';\nimport { SearchModal } from './search-modal';\n\nconst { Option } = Select;\n\nconst cardBodyHeight = 600;\n\nconst largeCardBodyHeight = 800;\n\ninterface WebpackModulesOverallProps {\n cwd: string;\n errors: SDK.ErrorsData;\n summary: Client.RsdoctorClientAssetsSummary;\n entryPoints: SDK.ServerAPI.InferResponseType<SDK.ServerAPI.API.GetEntryPoints>;\n}\nconst tabList = [\n {\n key: 'tree',\n label: (\n <Space>\n <Typography.Text>{'Tree Graph'}</Typography.Text>\n <Tooltip\n overlayStyle={{ maxWidth: 380 }}\n overlayInnerStyle={{ marginLeft: 16, padding: 10 }}\n color=\"white\"\n title={\n <Space direction=\"vertical\" color=\"white\" size=\"middle\">\n <Row>\n <Col>\n <Tag color=\"cyan\" style={{ margin: 0 }}>\n initial\n </Tag>\n <Typography.Text style={{ marginLeft: 4 }}>\n Identify whether the chunk is an initial chunk.\n </Typography.Text>\n </Col>\n </Row>\n <Row>\n <Col>\n <Tag color=\"green\" style={{ margin: 0 }}>\n concatenated\n </Tag>\n <Typography.Text style={{ marginLeft: 4 }}>\n Identify whether the module is a concatenated module\n </Typography.Text>\n <Tooltip\n overlayStyle={{ maxWidth: 408 }}\n placement=\"bottom\"\n color=\"white\"\n title={\n <Space direction=\"vertical\" color=\"white\">\n <Row>\n <Col>\n <Typography.Text strong>\n Concatenated Module\n </Typography.Text>\n <Typography.Text>\n : A performance optimization where multiple\n modules are merged (or \"hoisted\") into a single\n scope instead of wrapping each module in separate\n function closures. This reduces the bundle size\n and improves runtime performance by minimizing\n function call overhead.\n </Typography.Text>\n </Col>\n </Row>\n </Space>\n }\n >\n <InfoCircleOutlined\n style={{ color: 'rgba(0,0,0,.45)', marginLeft: 4 }}\n />\n </Tooltip>\n <Typography.Text>.</Typography.Text>\n </Col>\n </Row>\n <Row>\n <Col>\n <Button size=\"small\" icon={<CodepenCircleOutlined />} />\n <Typography.Text style={{ marginLeft: 4 }}>\n Open the code.\n </Typography.Text>\n </Col>\n </Row>\n <Row>\n <Col>\n <Button size=\"small\" icon={<DeploymentUnitOutlined />} />\n <Typography.Text style={{ marginLeft: 4 }}>\n View the module dependency, that is, module reasons in\n stats.json.\n </Typography.Text>\n </Col>\n </Row>\n <Row>\n <Col>\n <Tag color={'purple'}>{'Bundled: 15.77 KB'}</Tag>\n <Typography.Text>\n The final size of the output files after processing,\n bundling, and optimization. This is what is delivered to the\n browser.\n </Typography.Text>\n </Col>\n </Row>\n <Row>\n <Col>\n <Tag color={'orange'}>{'Source: 60.46 KB'}</Tag>\n <Typography.Text>\n The original size of your source code files before any\n processing or transformations. This is the raw size of your\n code as you wrote it.\n </Typography.Text>\n </Col>\n </Row>\n </Space>\n }\n >\n <InfoCircleOutlined style={{ color: 'rgba(0,0,0,.45)' }} />\n </Tooltip>\n </Space>\n ),\n },\n {\n key: 'tile',\n label: 'Tile Graph',\n },\n];\n\nexport const WebpackModulesOverallBase: React.FC<\n WebpackModulesOverallProps\n> = ({ errors, cwd, summary, entryPoints }) => {\n const [selectedEntryPoints, setEntryPoints] = useState<SDK.EntryPointData[]>(\n [],\n );\n const [inputModule, setModuleValue] = useState(0);\n const [inputAssetName, setAssetName] = useState('');\n const [inputAssetSize, setAssetSize] = useState(0);\n const [defaultExpandAll, setDefaultExpandAll] = useState(false);\n const [inputModuleUnit, setModuleUnit] = useState('');\n const [inputChunkUnit, setChunkUnit] = useState('');\n const [assetPath, setAssetPath] = useState<string | null>(null);\n const [graphType, setGraphType] = useState('tree' as GraphType);\n const { showCode, codeDrawerComponent } = useCodeDrawer(\n 'Do not have the codes of assets. If you use the lite or brief mode, there will have codes.',\n );\n\n const { t } = useI18n();\n\n const assets = summary.all.total.files;\n\n const handleChange = useCallback(\n (type: string) => (value: string) => {\n if (type === 'module') {\n setModuleUnit(value);\n } else if (type === 'chunk') {\n setChunkUnit(value);\n }\n },\n [],\n );\n\n const selectAfter = (type: string) => (\n <Select defaultValue=\"kb\" onChange={handleChange(type)}>\n <Option value=\"kb\">KB</Option>\n <Option value=\"mb\">MB</Option>\n </Select>\n );\n const onChangeModule = useCallback(\n debounce((newValue: number) => {\n const count =\n inputModuleUnit === 'mb' ? newValue * 1024 * 1024 : newValue * 1024;\n setModuleValue(count);\n }, 300),\n [],\n );\n\n const onChangeAsset = useCallback(\n debounce((newValue: number) => {\n const count =\n inputChunkUnit === 'mb' ? newValue * 1024 * 1024 : newValue * 1024;\n setAssetSize(count);\n }, 300),\n [],\n );\n\n const filteredAssets = useMemo(() => {\n let res = assets.slice();\n\n if (inputAssetName) {\n res = res.filter((e) => e.path.indexOf(inputAssetName) > -1);\n }\n\n if (inputAssetSize > 0) {\n res = res.filter((e) => e.size >= inputAssetSize);\n }\n\n if (selectedEntryPoints.length) {\n res = res.filter((e) => {\n if (selectedEntryPoints.some((ep) => includes(ep.assets, e.path))) {\n return true;\n }\n return false;\n });\n }\n\n return res.sort((a, b) => {\n const _a = a.path.indexOf('/') > -1 ? 1 : 0;\n const _b = b.path.indexOf('/') > -1 ? 1 : 0;\n // return _a - _b;\n return _b - _a;\n });\n }, [assets, selectedEntryPoints, inputAssetName, inputAssetSize]);\n\n useEffect(() => {\n function getFileExtension(filePath: string) {\n const parts = filePath.split('.');\n return parts.length > 1 ? parts.pop() : '';\n }\n\n summary.all.total.files.forEach((f) => {\n const ext = getFileExtension(f.path);\n if (ext === 'js') {\n setAssetPath(f.path);\n }\n });\n }, [summary.all.total.files]);\n\n const assetsStructures = useMemo(() => {\n const res = createFileStructures({\n files: filteredAssets.map((e) => e.path).filter(Boolean),\n fileTitle(file, basename) {\n const target = filteredAssets.find((e) => e.path === file)!;\n const { size, initial, path, content } = target;\n\n return (\n <div\n className={styles.assetBox}\n onClick={() => {\n setAssetPath(path);\n }}\n >\n <Keyword text={basename} keyword={''} className={styles.fileText} />\n <Space size=\"small\" className={styles.assetsTag}>\n <Divider type=\"vertical\" />\n <Typography.Text style={{ color: '#4FD233' }}>\n {formatSize(size)}\n </Typography.Text>\n <Divider type=\"vertical\" />\n {initial ? (\n <Typography.Text style={{ color: '#009A9E' }}>\n initial\n </Typography.Text>\n ) : null}\n <CodeOutlined\n style={{ fontSize: 14, padding: 0 }}\n onClick={() => showCode({ code: content!, filePath: path })}\n />\n </Space>\n </div>\n );\n },\n });\n return res;\n }, [filteredAssets]);\n\n const onSearch = (value: string) => {\n setAssetName(value);\n setDefaultExpandAll(false);\n };\n\n return (\n <>\n <div className=\"bundle-size-card\">\n <BundleCards cwd={cwd} errors={errors} summary={summary} />\n <Card\n className=\"bundle-size=card\"\n tabList={tabList}\n activeTabKey={graphType as 'tree' | 'tile'}\n onTabChange={(e) => setGraphType(e as 'tree' | 'tile')}\n hidden={graphType === 'tree'}\n tabProps={{\n size: 'middle',\n }}\n >\n <Row>\n <Typography.Text code>\n From: webpack-bundle-analyzer\n </Typography.Text>\n </Row>\n <ServerAPIProvider\n api={SDK.ServerAPI.API.GetTileReportHtml}\n body={{}}\n >\n {(data) => {\n if (data && graphType === 'tile') {\n return (\n <iframe\n srcDoc={data}\n width={'100%'}\n height={largeCardBodyHeight}\n style={{ border: 'none' }}\n />\n );\n }\n return (\n <Empty\n description={\n <div>\n Tile graph is disabled,{' '}\n <a href=\"https://rsdoctor.rs/config/options/options#generatetilegraph\">\n see the documentation to learn how to enable.\n </a>\n </div>\n }\n />\n );\n }}\n </ServerAPIProvider>\n </Card>\n\n <Card\n hidden={graphType === 'tile'}\n tabList={tabList}\n activeTabKey={graphType as 'tree' | 'tile'}\n onTabChange={(e) => setGraphType(e as 'tree' | 'tile')}\n tabProps={{\n size: 'middle',\n }}\n >\n <Space direction=\"vertical\">\n <Row align=\"middle\" gutter={[Size.BasePadding, Size.BasePadding]}>\n {entryPoints && entryPoints.length ? (\n <Col>\n <Select\n mode=\"multiple\"\n value={selectedEntryPoints.map((e) => e.name)}\n style={{ minWidth: 230, width: 'auto', maxWidth: 300 }}\n placeholder={'filter assets by entry point'}\n onChange={(name: string[]) => {\n setEntryPoints(\n name\n .map((e) => entryPoints.find((ep) => ep.name === e)!)\n .filter(Boolean),\n );\n }}\n allowClear\n onClear={() => {\n setEntryPoints([]);\n }}\n >\n {entryPoints.map((e) => {\n return (\n <Select.Option key={e.name} value={e.name}>\n <Space>\n <Bdg\n label={e.name}\n value={formatSize(e.size)}\n tooltip={e.name}\n />\n </Space>\n </Select.Option>\n );\n })}\n </Select>\n </Col>\n ) : null}\n <Col>\n <KeywordInput\n placeholder=\"search asset by keyword\"\n onChange={onSearch}\n />\n </Col>\n <Col span={6}>\n <InputNumber\n min={0}\n style={{ width: '95%' }}\n addonBefore={\n <Space>\n <Typography.Text\n style={{ fontSize: 14, color: 'inherit' }}\n >\n Asset Size\n </Typography.Text>\n <Tooltip\n title={t(\n 'filter the output assets which size is greater than the input value',\n )}\n style={{ marginLeft: 3 }}\n >\n <InfoCircleOutlined\n style={{ color: 'rgba(0,0,0,.45)' }}\n />\n </Tooltip>\n </Space>\n }\n onChange={(value) => onChangeAsset(Number(value))}\n addonAfter={selectAfter('chunk')}\n />\n </Col>\n <Col span={6}>\n <InputNumber\n min={0}\n style={{ width: '95%' }}\n addonBefore={\n <Space>\n <Typography.Text\n style={{ fontSize: 14, color: 'inherit' }}\n >\n Module Size\n </Typography.Text>\n <Tooltip\n title={t(\n 'filter the modules which size is greater than the input value',\n )}\n style={{ marginLeft: 3 }}\n >\n <InfoCircleOutlined\n style={{ color: 'rgba(0,0,0,.45)' }}\n />\n </Tooltip>\n </Space>\n }\n onChange={(value) => {\n onChangeModule(Number(value));\n }}\n addonAfter={selectAfter('module')}\n />\n </Col>\n </Row>\n <Row>\n <SearchModal />\n </Row>\n <Row align=\"middle\" gutter={[Size.BasePadding, Size.BasePadding]}>\n <Col span={24}>\n {filteredAssets.length ? (\n <Row gutter={Size.BasePadding}>\n <Col span={6}>\n <Card\n title={\n <Space>\n <Typography.Text>\n {t('Output Assets List')}\n </Typography.Text>\n <Divider type=\"vertical\" />\n <Tooltip\n title={`total assets count is ${assets.length}, the filtered assets count is ${filteredAssets.length}`}\n >\n <Typography.Text\n type=\"secondary\"\n style={{ fontSize: 12, fontWeight: 400 }}\n >\n {filteredAssets.length} / {assets.length}\n </Typography.Text>\n </Tooltip>\n <Divider type=\"vertical\" />\n <Typography.Text\n type=\"secondary\"\n style={{ fontSize: 12, fontWeight: 400 }}\n >\n {formatSize(sumBy(filteredAssets, (e) => e.size))}\n </Typography.Text>\n </Space>\n }\n size=\"small\"\n bodyStyle={{\n overflow: 'scroll',\n height: cardBodyHeight,\n }}\n >\n <FileTree\n className={styles.assets}\n treeData={assetsStructures}\n autoExpandParent\n defaultExpandAll={\n defaultExpandAll || filteredAssets.length <= 20\n }\n key={`tree_${inputAssetName}_${defaultExpandAll}`}\n />\n </Card>\n </Col>\n <Col span={18}>\n {assetPath ? (\n <ServerAPIProvider\n api={SDK.ServerAPI.API.GetAssetDetails}\n body={{ assetPath }}\n >\n {(details) => (\n <AssetDetail\n asset={details.asset}\n chunks={details.chunks}\n modules={details.modules}\n height={cardBodyHeight}\n moduleSizeLimit={inputModule}\n root={cwd}\n />\n )}\n </ServerAPIProvider>\n ) : (\n <Card\n bodyStyle={{\n height: cardBodyHeight,\n }}\n >\n <Empty\n description={\n <Typography.Text strong>\n Click the file path on the left to show the\n modules of the asset\n </Typography.Text>\n }\n />\n </Card>\n )}\n </Col>\n </Row>\n ) : (\n <Empty />\n )}\n </Col>\n </Row>\n </Space>\n </Card>\n </div>\n {codeDrawerComponent}\n </>\n );\n};\n\nexport const WebpackModulesOverall = withServerAPI({\n api: SDK.ServerAPI.API.GetProjectInfo,\n responsePropName: 'project',\n Component: (props: {\n project: SDK.ServerAPI.InferResponseType<SDK.ServerAPI.API.GetProjectInfo>;\n }) => {\n const { root, errors } = props.project;\n return (\n <ServerAPIProvider\n api={SDK.ServerAPI.API.GetAssetsSummary}\n body={{ withFileContent: true }}\n >\n {(summary) => {\n return (\n <ServerAPIProvider api={SDK.ServerAPI.API.GetEntryPoints}>\n {(entryPoints) => (\n <WebpackModulesOverallBase\n cwd={root}\n errors={errors}\n summary={summary}\n entryPoints={entryPoints}\n />\n )}\n </ServerAPIProvider>\n );\n }}\n </ServerAPIProvider>\n );\n },\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IiIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOltdLCJzb3VyY2VzQ29udGVudCI6W119"]}
|
|
1
|
+
{"version":3,"mappings":"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","names":[],"ignoreList":[],"sources":["../../../../src/pages/BundleSize/components/index.tsx"],"sourcesContent":["import {\n CodeOutlined,\n CodepenCircleOutlined,\n DeploymentUnitOutlined,\n InfoCircleOutlined,\n} from '@ant-design/icons';\nimport { Client, SDK } from '@rsdoctor/types';\nimport {\n Button,\n Card,\n Col,\n Divider,\n Empty,\n InputNumber,\n Row,\n Select,\n Space,\n Tag,\n Tooltip,\n Typography,\n} from 'antd';\nimport { debounce, includes, sumBy } from 'lodash-es';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useCodeDrawer } from '../../../components/base/CodeViewer/useCodeDrawer';\nimport { Badge as Bdg } from '../../../components/Badge';\nimport { FileTree } from '../../../components/FileTree';\nimport { KeywordInput } from '../../../components/Form/keyword';\nimport { Keyword } from '../../../components/Keyword';\nimport { ServerAPIProvider, withServerAPI } from '../../../components/Manifest';\nimport { Size } from '../../../constants';\nimport {\n createFileStructures,\n flattenTreemapData,\n formatSize,\n useI18n,\n} from '../../../utils';\nimport { GraphType } from '../constants';\nimport { AssetDetail } from './asset';\nimport { BundleCards } from './cards';\nimport styles from './index.module';\nimport './index.css';\nimport { SearchModal } from './search-modal';\nimport {\n AssetTreemapWithFilter,\n TreeNode,\n} from '../../../components/Charts/TreeMap';\n\nconst { Option } = Select;\n\nconst cardBodyHeight = 600;\n\ninterface WebpackModulesOverallProps {\n cwd: string;\n errors: SDK.ErrorsData;\n summary: Client.RsdoctorClientAssetsSummary;\n entryPoints: SDK.ServerAPI.InferResponseType<SDK.ServerAPI.API.GetEntryPoints>;\n}\nconst tabList = [\n {\n key: 'tree',\n label: (\n <Space>\n <Typography.Text>{'Tree Graph'}</Typography.Text>\n <Tooltip\n overlayStyle={{ maxWidth: 380 }}\n overlayInnerStyle={{ marginLeft: 16, padding: 10 }}\n color=\"white\"\n title={\n <Space direction=\"vertical\" color=\"white\" size=\"middle\">\n <Row>\n <Col>\n <Tag color=\"cyan\" style={{ margin: 0 }}>\n initial\n </Tag>\n <Typography.Text style={{ marginLeft: 4 }}>\n Identify whether the chunk is an initial chunk.\n </Typography.Text>\n </Col>\n </Row>\n <Row>\n <Col>\n <Tag color=\"green\" style={{ margin: 0 }}>\n concatenated\n </Tag>\n <Typography.Text style={{ marginLeft: 4 }}>\n Identify whether the module is a concatenated module\n </Typography.Text>\n <Tooltip\n overlayStyle={{ maxWidth: 408 }}\n placement=\"bottom\"\n color=\"white\"\n title={\n <Space direction=\"vertical\" color=\"white\">\n <Row>\n <Col>\n <Typography.Text strong>\n Concatenated Module\n </Typography.Text>\n <Typography.Text>\n : A performance optimization where multiple\n modules are merged (or \"hoisted\") into a single\n scope instead of wrapping each module in separate\n function closures. This reduces the bundle size\n and improves runtime performance by minimizing\n function call overhead.\n </Typography.Text>\n </Col>\n </Row>\n </Space>\n }\n >\n <InfoCircleOutlined\n style={{ color: 'rgba(0,0,0,.45)', marginLeft: 4 }}\n />\n </Tooltip>\n <Typography.Text>.</Typography.Text>\n </Col>\n </Row>\n <Row>\n <Col>\n <Button size=\"small\" icon={<CodepenCircleOutlined />} />\n <Typography.Text style={{ marginLeft: 4 }}>\n Open the code.\n </Typography.Text>\n </Col>\n </Row>\n <Row>\n <Col>\n <Button size=\"small\" icon={<DeploymentUnitOutlined />} />\n <Typography.Text style={{ marginLeft: 4 }}>\n View the module dependency, that is, module reasons in\n stats.json.\n </Typography.Text>\n </Col>\n </Row>\n <Row>\n <Col>\n <Tag color={'purple'}>{'Bundled: 15.77 KB'}</Tag>\n <Typography.Text>\n The final size of the output files after processing,\n bundling, and optimization. This is what is delivered to the\n browser.\n </Typography.Text>\n </Col>\n </Row>\n <Row>\n <Col>\n <Tag color={'orange'}>{'Source: 60.46 KB'}</Tag>\n <Typography.Text>\n The original size of your source code files before any\n processing or transformations. This is the raw size of your\n code as you wrote it.\n </Typography.Text>\n </Col>\n </Row>\n </Space>\n }\n >\n <InfoCircleOutlined style={{ color: 'rgba(0,0,0,.45)' }} />\n </Tooltip>\n </Space>\n ),\n },\n {\n key: 'tile',\n label: 'Tile Graph',\n },\n];\n\nexport const WebpackModulesOverallBase: React.FC<\n WebpackModulesOverallProps\n> = ({ errors, cwd, summary, entryPoints }) => {\n const [selectedEntryPoints, setEntryPoints] = useState<SDK.EntryPointData[]>(\n [],\n );\n const [inputModule, setModuleValue] = useState(0);\n const [inputAssetName, setAssetName] = useState('');\n const [inputAssetSize, setAssetSize] = useState(0);\n const [defaultExpandAll, setDefaultExpandAll] = useState(false);\n const [inputModuleUnit, setModuleUnit] = useState('');\n const [inputChunkUnit, setChunkUnit] = useState('');\n const [assetPath, setAssetPath] = useState<string | null>(null);\n const [graphType, setGraphType] = useState('tree' as GraphType);\n const { showCode, codeDrawerComponent } = useCodeDrawer(\n 'Do not have the codes of assets. If you use the lite or brief mode, there will have codes.',\n );\n\n const { t } = useI18n();\n\n const assets = summary.all.total.files;\n\n const handleChange = useCallback(\n (type: string) => (value: string) => {\n if (type === 'module') {\n setModuleUnit(value);\n } else if (type === 'chunk') {\n setChunkUnit(value);\n }\n },\n [],\n );\n\n const selectAfter = (type: string) => (\n <Select defaultValue=\"kb\" onChange={handleChange(type)}>\n <Option value=\"kb\">KB</Option>\n <Option value=\"mb\">MB</Option>\n </Select>\n );\n const onChangeModule = useCallback(\n debounce((newValue: number) => {\n const count =\n inputModuleUnit === 'mb' ? newValue * 1024 * 1024 : newValue * 1024;\n setModuleValue(count);\n }, 300),\n [],\n );\n\n const onChangeAsset = useCallback(\n debounce((newValue: number) => {\n const count =\n inputChunkUnit === 'mb' ? newValue * 1024 * 1024 : newValue * 1024;\n setAssetSize(count);\n }, 300),\n [],\n );\n\n const filteredAssets = useMemo(() => {\n let res = assets.slice();\n\n if (inputAssetName) {\n res = res.filter((e) => e.path.indexOf(inputAssetName) > -1);\n }\n\n if (inputAssetSize > 0) {\n res = res.filter((e) => e.size >= inputAssetSize);\n }\n\n if (selectedEntryPoints.length) {\n res = res.filter((e) => {\n if (selectedEntryPoints.some((ep) => includes(ep.assets, e.path))) {\n return true;\n }\n return false;\n });\n }\n\n return res.sort((a, b) => {\n const _a = a.path.indexOf('/') > -1 ? 1 : 0;\n const _b = b.path.indexOf('/') > -1 ? 1 : 0;\n // return _a - _b;\n return _b - _a;\n });\n }, [assets, selectedEntryPoints, inputAssetName, inputAssetSize]);\n\n useEffect(() => {\n function getFileExtension(filePath: string) {\n const parts = filePath.split('.');\n return parts.length > 1 ? parts.pop() : '';\n }\n\n summary.all.total.files.forEach((f) => {\n const ext = getFileExtension(f.path);\n if (ext === 'js') {\n setAssetPath(f.path);\n }\n });\n }, [summary.all.total.files]);\n\n const assetsStructures = useMemo(() => {\n const res = createFileStructures({\n files: filteredAssets.map((e) => e.path).filter(Boolean),\n fileTitle(file, basename) {\n const target = filteredAssets.find((e) => e.path === file)!;\n const { size, initial, path, content } = target;\n\n return (\n <div\n className={styles.assetBox}\n onClick={() => {\n setAssetPath(path);\n }}\n >\n <Keyword text={basename} keyword={''} className={styles.fileText} />\n <Space size=\"small\" className={styles.assetsTag}>\n <Divider type=\"vertical\" />\n <Typography.Text style={{ color: '#4FD233' }}>\n {formatSize(size)}\n </Typography.Text>\n <Divider type=\"vertical\" />\n {initial ? (\n <Typography.Text style={{ color: '#009A9E' }}>\n initial\n </Typography.Text>\n ) : null}\n <CodeOutlined\n style={{ fontSize: 14, padding: 0 }}\n onClick={() => showCode({ code: content!, filePath: path })}\n />\n </Space>\n </div>\n );\n },\n });\n return res;\n }, [filteredAssets]);\n\n const onSearch = (value: string) => {\n setAssetName(value);\n setDefaultExpandAll(false);\n };\n\n return (\n <>\n <div className=\"bundle-size-card\">\n <BundleCards cwd={cwd} errors={errors} summary={summary} />\n <Card\n className=\"bundle-size=card\"\n tabList={tabList}\n activeTabKey={graphType as 'tree' | 'tile'}\n onTabChange={(e) => setGraphType(e as 'tree' | 'tile')}\n hidden={graphType === 'tree'}\n tabProps={{\n size: 'middle',\n }}\n >\n <ServerAPIProvider api={SDK.ServerAPI.API.GetSummaryBundles}>\n {(data) => {\n const computedTreeData: TreeNode[] = data.map((item) => {\n const moduleTree = flattenTreemapData(item.modules);\n return {\n name: item.asset.path,\n value: item.asset.size,\n children: moduleTree.children,\n };\n });\n return (\n <AssetTreemapWithFilter\n treeData={computedTreeData}\n onChartClick={(i) => {\n console.log('onChartClick', i);\n }}\n />\n );\n }}\n </ServerAPIProvider>\n </Card>\n\n <Card\n hidden={graphType === 'tile'}\n tabList={tabList}\n activeTabKey={graphType as 'tree' | 'tile'}\n onTabChange={(e) => setGraphType(e as 'tree' | 'tile')}\n tabProps={{\n size: 'middle',\n }}\n >\n <Space direction=\"vertical\">\n <Row align=\"middle\" gutter={[Size.BasePadding, Size.BasePadding]}>\n {entryPoints && entryPoints.length ? (\n <Col>\n <Select\n mode=\"multiple\"\n value={selectedEntryPoints.map((e) => e.name)}\n style={{ minWidth: 230, width: 'auto', maxWidth: 300 }}\n placeholder={'filter assets by entry point'}\n onChange={(name: string[]) => {\n setEntryPoints(\n name\n .map((e) => entryPoints.find((ep) => ep.name === e)!)\n .filter(Boolean),\n );\n }}\n allowClear\n onClear={() => {\n setEntryPoints([]);\n }}\n >\n {entryPoints.map((e) => {\n return (\n <Select.Option key={e.name} value={e.name}>\n <Space>\n <Bdg\n label={e.name}\n value={formatSize(e.size)}\n tooltip={e.name}\n />\n </Space>\n </Select.Option>\n );\n })}\n </Select>\n </Col>\n ) : null}\n <Col>\n <KeywordInput\n placeholder=\"search asset by keyword\"\n onChange={onSearch}\n />\n </Col>\n <Col span={6}>\n <InputNumber\n min={0}\n style={{ width: '95%' }}\n addonBefore={\n <Space>\n <Typography.Text\n style={{ fontSize: 14, color: 'inherit' }}\n >\n Asset Size\n </Typography.Text>\n <Tooltip\n title={t(\n 'filter the output assets which size is greater than the input value',\n )}\n style={{ marginLeft: 3 }}\n >\n <InfoCircleOutlined\n style={{ color: 'rgba(0,0,0,.45)' }}\n />\n </Tooltip>\n </Space>\n }\n onChange={(value) => onChangeAsset(Number(value))}\n addonAfter={selectAfter('chunk')}\n />\n </Col>\n <Col span={6}>\n <InputNumber\n min={0}\n style={{ width: '95%' }}\n addonBefore={\n <Space>\n <Typography.Text\n style={{ fontSize: 14, color: 'inherit' }}\n >\n Module Size\n </Typography.Text>\n <Tooltip\n title={t(\n 'filter the modules which size is greater than the input value',\n )}\n style={{ marginLeft: 3 }}\n >\n <InfoCircleOutlined\n style={{ color: 'rgba(0,0,0,.45)' }}\n />\n </Tooltip>\n </Space>\n }\n onChange={(value) => {\n onChangeModule(Number(value));\n }}\n addonAfter={selectAfter('module')}\n />\n </Col>\n </Row>\n <Row>\n <SearchModal />\n </Row>\n <Row align=\"middle\" gutter={[Size.BasePadding, Size.BasePadding]}>\n <Col span={24}>\n {filteredAssets.length ? (\n <Row gutter={Size.BasePadding}>\n <Col span={6}>\n <Card\n title={\n <Space>\n <Typography.Text>\n {t('Output Assets List')}\n </Typography.Text>\n <Divider type=\"vertical\" />\n <Tooltip\n title={`total assets count is ${assets.length}, the filtered assets count is ${filteredAssets.length}`}\n >\n <Typography.Text\n type=\"secondary\"\n style={{ fontSize: 12, fontWeight: 400 }}\n >\n {filteredAssets.length} / {assets.length}\n </Typography.Text>\n </Tooltip>\n <Divider type=\"vertical\" />\n <Typography.Text\n type=\"secondary\"\n style={{ fontSize: 12, fontWeight: 400 }}\n >\n {formatSize(sumBy(filteredAssets, (e) => e.size))}\n </Typography.Text>\n </Space>\n }\n size=\"small\"\n bodyStyle={{\n overflow: 'scroll',\n height: cardBodyHeight,\n }}\n >\n <FileTree\n className={styles.assets}\n treeData={assetsStructures}\n autoExpandParent\n defaultExpandAll={\n defaultExpandAll || filteredAssets.length <= 20\n }\n key={`tree_${inputAssetName}_${defaultExpandAll}`}\n />\n </Card>\n </Col>\n <Col span={18}>\n {assetPath ? (\n <ServerAPIProvider\n api={SDK.ServerAPI.API.GetAssetDetails}\n body={{ assetPath }}\n >\n {(details) => (\n <AssetDetail\n asset={details.asset}\n chunks={details.chunks}\n modules={details.modules}\n height={cardBodyHeight}\n moduleSizeLimit={inputModule}\n root={cwd}\n />\n )}\n </ServerAPIProvider>\n ) : (\n <Card\n bodyStyle={{\n height: cardBodyHeight,\n }}\n >\n <Empty\n description={\n <Typography.Text strong>\n Click the file path on the left to show the\n modules of the asset\n </Typography.Text>\n }\n />\n </Card>\n )}\n </Col>\n </Row>\n ) : (\n <Empty />\n )}\n </Col>\n </Row>\n </Space>\n </Card>\n </div>\n {codeDrawerComponent}\n </>\n );\n};\n\nexport const WebpackModulesOverall = withServerAPI({\n api: SDK.ServerAPI.API.GetProjectInfo,\n responsePropName: 'project',\n Component: (props: {\n project: SDK.ServerAPI.InferResponseType<SDK.ServerAPI.API.GetProjectInfo>;\n }) => {\n const { root, errors } = props.project;\n return (\n <ServerAPIProvider\n api={SDK.ServerAPI.API.GetAssetsSummary}\n body={{ withFileContent: true }}\n >\n {(summary) => {\n return (\n <ServerAPIProvider api={SDK.ServerAPI.API.GetEntryPoints}>\n {(entryPoints) => (\n <WebpackModulesOverallBase\n cwd={root}\n errors={errors}\n summary={summary}\n entryPoints={entryPoints}\n />\n )}\n </ServerAPIProvider>\n );\n }}\n </ServerAPIProvider>\n );\n },\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IiIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOltdLCJzb3VyY2VzQ29udGVudCI6W119"]}
|
|
@@ -1,2 +1,8 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
export declare const SearchModal: React.FC
|
|
2
|
+
export declare const SearchModal: React.FC<{
|
|
3
|
+
onModuleClick?: (module: any) => void;
|
|
4
|
+
onClose?: () => void;
|
|
5
|
+
open?: boolean;
|
|
6
|
+
setOpen?: (open: boolean) => void;
|
|
7
|
+
isIcon?: boolean;
|
|
8
|
+
}>;
|
|
@@ -13,11 +13,20 @@ import {
|
|
|
13
13
|
import { ServerAPIProvider } from "../../../components";
|
|
14
14
|
import { SDK } from "@rsdoctor/types";
|
|
15
15
|
import styles from "./index.module";
|
|
16
|
+
import { SearchOutlined } from "@ant-design/icons";
|
|
16
17
|
const { Search } = Input;
|
|
17
|
-
const SearchModal = (
|
|
18
|
+
const SearchModal = ({
|
|
19
|
+
onModuleClick = void 0,
|
|
20
|
+
onClose,
|
|
21
|
+
open,
|
|
22
|
+
setOpen,
|
|
23
|
+
isIcon = false
|
|
24
|
+
}) => {
|
|
18
25
|
const [isModalOpen, setIsModalOpen] = useState(false);
|
|
19
26
|
const [searchModule, setSearchModule] = useState("");
|
|
20
27
|
const [searchChunk, setSearchChunk] = useState("");
|
|
28
|
+
const modalOpen = open !== void 0 ? open : isModalOpen;
|
|
29
|
+
const setModalOpen = setOpen || setIsModalOpen;
|
|
21
30
|
const onSearch = useCallback(
|
|
22
31
|
(...args) => {
|
|
23
32
|
const [value, _event] = args;
|
|
@@ -26,16 +35,26 @@ const SearchModal = () => {
|
|
|
26
35
|
[]
|
|
27
36
|
);
|
|
28
37
|
const showModal = () => {
|
|
29
|
-
|
|
38
|
+
setModalOpen(true);
|
|
30
39
|
};
|
|
31
40
|
const handleOk = () => {
|
|
32
|
-
|
|
41
|
+
setModalOpen(false);
|
|
42
|
+
onClose?.();
|
|
33
43
|
};
|
|
34
44
|
const handleCancel = () => {
|
|
35
|
-
|
|
45
|
+
setModalOpen(false);
|
|
46
|
+
onClose?.();
|
|
36
47
|
};
|
|
37
48
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
38
|
-
/* @__PURE__ */ jsx(
|
|
49
|
+
isIcon ? /* @__PURE__ */ jsx(SearchOutlined, { onClick: showModal }) : /* @__PURE__ */ jsx(
|
|
50
|
+
Button,
|
|
51
|
+
{
|
|
52
|
+
className: styles["search-btn"],
|
|
53
|
+
color: "cyan",
|
|
54
|
+
onClick: showModal,
|
|
55
|
+
children: "Search Module"
|
|
56
|
+
}
|
|
57
|
+
),
|
|
39
58
|
/* @__PURE__ */ jsx(
|
|
40
59
|
ServerAPIProvider,
|
|
41
60
|
{
|
|
@@ -50,7 +69,7 @@ const SearchModal = () => {
|
|
|
50
69
|
title: "Search Modules",
|
|
51
70
|
onOk: handleOk,
|
|
52
71
|
onCancel: handleCancel,
|
|
53
|
-
open:
|
|
72
|
+
open: modalOpen,
|
|
54
73
|
width: "65rem",
|
|
55
74
|
footer: "",
|
|
56
75
|
children: [
|
|
@@ -76,7 +95,12 @@ const SearchModal = () => {
|
|
|
76
95
|
key: id,
|
|
77
96
|
children: ModulesModal(
|
|
78
97
|
searchModule,
|
|
79
|
-
searchChunk || defaultChunkId
|
|
98
|
+
searchChunk || defaultChunkId,
|
|
99
|
+
(item) => {
|
|
100
|
+
onModuleClick?.(item);
|
|
101
|
+
setModalOpen(false);
|
|
102
|
+
onClose?.();
|
|
103
|
+
}
|
|
80
104
|
)
|
|
81
105
|
};
|
|
82
106
|
})
|
|
@@ -90,7 +114,7 @@ const SearchModal = () => {
|
|
|
90
114
|
)
|
|
91
115
|
] });
|
|
92
116
|
};
|
|
93
|
-
const ModulesModal = (searchModule, chunk) => {
|
|
117
|
+
const ModulesModal = (searchModule, chunk, onModuleClick) => {
|
|
94
118
|
return /* @__PURE__ */ jsx(
|
|
95
119
|
ServerAPIProvider,
|
|
96
120
|
{
|
|
@@ -106,30 +130,37 @@ const ModulesModal = (searchModule, chunk) => {
|
|
|
106
130
|
dataSource: modules,
|
|
107
131
|
renderItem: (item) => {
|
|
108
132
|
const itemPathArr = item.relativePath.split(searchModule);
|
|
109
|
-
return /* @__PURE__ */ jsx(
|
|
110
|
-
List.Item
|
|
133
|
+
return /* @__PURE__ */ jsx(
|
|
134
|
+
List.Item,
|
|
111
135
|
{
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
136
|
+
className: onModuleClick ? "search-list-item clickable" : "search-list-item",
|
|
137
|
+
onClick: onModuleClick ? () => onModuleClick(item) : void 0,
|
|
138
|
+
children: /* @__PURE__ */ jsx(Skeleton, { avatar: true, title: false, loading: !item.path, active: true, children: /* @__PURE__ */ jsx(
|
|
139
|
+
List.Item.Meta,
|
|
140
|
+
{
|
|
141
|
+
description: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
142
|
+
/* @__PURE__ */ jsx(Typography.Text, { code: true, children: "Module:" }),
|
|
143
|
+
itemPathArr.map((cur, index) => {
|
|
144
|
+
if (index < itemPathArr.length - 1) {
|
|
145
|
+
return /* @__PURE__ */ jsxs(Typography.Text, { style: { fontWeight: 200 }, children: [
|
|
146
|
+
cur,
|
|
147
|
+
/* @__PURE__ */ jsx(
|
|
148
|
+
Typography.Text,
|
|
149
|
+
{
|
|
150
|
+
strong: true,
|
|
151
|
+
style: { fontWeight: 600 },
|
|
152
|
+
children: searchModule
|
|
153
|
+
}
|
|
154
|
+
)
|
|
155
|
+
] });
|
|
156
|
+
}
|
|
157
|
+
return /* @__PURE__ */ jsx(Typography.Text, { style: { fontWeight: 200 }, children: cur });
|
|
158
|
+
})
|
|
159
|
+
] })
|
|
160
|
+
}
|
|
161
|
+
) })
|
|
131
162
|
}
|
|
132
|
-
)
|
|
163
|
+
);
|
|
133
164
|
}
|
|
134
165
|
}
|
|
135
166
|
) : /* @__PURE__ */ jsx(Empty, {}) })
|