@rsdoctor/components 1.5.3 → 1.5.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/common/imgs/connection-point.mjs +1 -1
- package/dist/common/imgs/rsdoctor-navbar.mjs +1 -1
- package/dist/common/imgs/webpack.mjs +1 -1
- package/dist/common/svg/bundle-size.mjs +1 -1
- package/dist/common/svg/cursor.mjs +1 -1
- package/dist/common/svg/error.mjs +1 -1
- package/dist/common/svg/file-css.mjs +1 -1
- package/dist/common/svg/file-html.mjs +1 -1
- package/dist/common/svg/file-image.mjs +1 -1
- package/dist/common/svg/file-js.mjs +1 -1
- package/dist/common/svg/file-unknown.mjs +1 -1
- package/dist/common/svg/file.mjs +1 -1
- package/dist/common/svg/files/css.mjs +1 -1
- package/dist/common/svg/files/html.mjs +1 -1
- package/dist/common/svg/files/image.mjs +1 -1
- package/dist/common/svg/files/js.mjs +1 -1
- package/dist/common/svg/files/unkown-file.mjs +1 -1
- package/dist/common/svg/loader/input.mjs +1 -1
- package/dist/common/svg/loader/output.mjs +1 -1
- package/dist/common/svg/loader/step.mjs +1 -1
- package/dist/common/svg/navbar/bundle-size-active.mjs +1 -1
- package/dist/common/svg/navbar/bundle-size-inactive.mjs +1 -1
- package/dist/common/svg/navbar/compile-analysis-active.mjs +1 -1
- package/dist/common/svg/navbar/compile-analysis-inactive.mjs +1 -1
- package/dist/common/svg/navbar/overall-active.mjs +1 -1
- package/dist/common/svg/navbar/overall-inactive.mjs +1 -1
- package/dist/common/svg/output.mjs +1 -1
- package/dist/common/svg/source-size.mjs +1 -1
- package/dist/common/svg/source.mjs +1 -1
- package/dist/common/svg/total-size.mjs +1 -1
- package/dist/common/svg/trae.mjs +1 -1
- package/dist/common/svg/version.mjs +1 -1
- package/dist/common/svg/vscode.mjs +1 -1
- package/dist/components/Alert/change.mjs.map +1 -1
- package/dist/components/Alert/ecma-version-check.mjs +1 -1
- package/dist/components/Alert/ecma-version-check.mjs.map +1 -1
- package/dist/components/Alert/ecma-version-check.module.mjs +1 -1
- package/dist/components/Alert/package-relation.module.mjs +1 -1
- package/dist/components/Alert/view.mjs.map +1 -1
- package/dist/components/Alerts/bundle-alert.mjs +50 -2
- package/dist/components/Alerts/bundle-alert.mjs.map +1 -1
- package/dist/components/Alerts/bundle-alert.module.mjs +1 -1
- package/dist/components/Alerts/collapse-cjs-require.d.ts +6 -0
- package/dist/components/Alerts/collapse-cjs-require.mjs +142 -0
- package/dist/components/Alerts/collapse-cjs-require.mjs.map +1 -0
- package/dist/components/Alerts/collapse-cross-chunks.mjs +2 -23
- package/dist/components/Alerts/collapse-cross-chunks.mjs.map +1 -1
- package/dist/components/Alerts/collapse-esm-cjs.d.ts +6 -0
- package/dist/components/Alerts/collapse-esm-cjs.mjs +231 -0
- package/dist/components/Alerts/collapse-esm-cjs.mjs.map +1 -0
- package/dist/components/Alerts/collapse-module-mixed-chunks.mjs +2 -23
- package/dist/components/Alerts/collapse-module-mixed-chunks.mjs.map +1 -1
- package/dist/components/Alerts/collapse-shared.d.ts +9 -0
- package/dist/components/Alerts/collapse-shared.mjs +90 -0
- package/dist/components/Alerts/collapse-shared.mjs.map +1 -0
- package/dist/components/Alerts/collapse-side-effects-only-imports.d.ts +6 -0
- package/dist/components/Alerts/collapse-side-effects-only-imports.mjs +131 -0
- package/dist/components/Alerts/collapse-side-effects-only-imports.mjs.map +1 -0
- package/dist/components/Alerts/collapse.mjs +2 -23
- package/dist/components/Alerts/collapse.mjs.map +1 -1
- package/dist/components/Alerts/collapse.module.mjs +1 -1
- package/dist/components/Alerts/list.module.mjs +1 -1
- package/dist/components/Alerts/overlay.mjs.map +1 -1
- package/dist/components/Alerts/overlay.module.mjs +1 -1
- package/dist/components/Card/diff.mjs.map +1 -1
- package/dist/components/Card/index.mjs +1 -1
- package/dist/components/Card/size.mjs +2 -2
- package/dist/components/Card/size.mjs.map +1 -1
- package/dist/components/Card/size.module.mjs +1 -1
- package/dist/components/Charts/TimelineCharts/index.mjs +1 -1
- package/dist/components/Charts/TimelineCharts/index.mjs.map +1 -1
- package/dist/components/Charts/TreeMap.mjs +1 -1
- package/dist/components/Charts/TreeMap.mjs.map +1 -1
- package/dist/components/Charts/constants.mjs +1 -1
- package/dist/components/Charts/loader.mjs +2 -2
- package/dist/components/Charts/loader.mjs.map +1 -1
- package/dist/components/Charts/treemap.module.mjs +1 -1
- package/dist/components/Configuration/builder.module.mjs +1 -1
- package/dist/components/FileTree/css.mjs +1 -1
- package/dist/components/FileTree/html.mjs +1 -1
- package/dist/components/FileTree/image.mjs +1 -1
- package/dist/components/FileTree/index.mjs +1 -1
- package/dist/components/FileTree/index.mjs.map +1 -1
- package/dist/components/FileTree/js.mjs +1 -1
- package/dist/components/FileTree/unkown-file.mjs +1 -1
- package/dist/components/Keyword/style.module.mjs +1 -1
- package/dist/components/Layout/bundle-size-icon.mjs +1 -1
- package/dist/components/Layout/compile-icon.mjs +1 -1
- package/dist/components/Layout/index.mjs.map +1 -1
- package/dist/components/Layout/overall-icon.mjs +1 -1
- package/dist/components/Layout/project-info-context.mjs.map +1 -1
- package/dist/components/Loader/Analysis/input.mjs +1 -1
- package/dist/components/Loader/Analysis/output.mjs +1 -1
- package/dist/components/Loader/Analysis/style.module.mjs +1 -1
- package/dist/components/Loader/executions.mjs.map +1 -1
- package/dist/components/Loader/step.mjs +1 -1
- package/dist/components/Manifest/api.mjs.map +1 -1
- package/dist/components/Overall/DataSummary.module.mjs +1 -1
- package/dist/components/Overall/bundle.mjs +1 -1
- package/dist/components/Overall/bundle.mjs.map +1 -1
- package/dist/components/Overall/bundle.module.mjs +1 -1
- package/dist/components/Overall/card.module.mjs +1 -1
- package/dist/components/Overall/compile.mjs.map +1 -1
- package/dist/components/Overall/compile.module.mjs +1 -1
- package/dist/components/Overall/help-center.module.mjs +1 -1
- package/dist/components/Overall/list.module.mjs +1 -1
- package/dist/components/Overall/overview.mjs +2 -1
- package/dist/components/Overall/overview.module.mjs +1 -1
- package/dist/components/Overall/project.module.mjs +1 -1
- package/dist/components/Resolver/analysis.mjs +2 -2
- package/dist/components/Resolver/analysis.mjs.map +1 -1
- package/dist/components/Select/index.mjs.map +1 -1
- package/dist/components/Status/failed.mjs.map +1 -1
- package/dist/components/TextDrawer/duplicate.mjs.map +1 -1
- package/dist/components/TextDrawer/index.mjs +1 -1
- package/dist/components/base/CodeViewer/index.mjs +2 -2
- package/dist/components/base/CodeViewer/index.mjs.map +1 -1
- package/dist/components/base/CodeViewer/index.module.mjs +1 -1
- package/dist/components/base/DiffViewer/index.mjs +2 -2
- package/dist/components/base/DiffViewer/index.mjs.map +1 -1
- package/dist/components/base/DiffViewer/index.module.mjs +1 -1
- package/dist/components/index.mjs +1 -2
- package/dist/config.mjs.map +1 -1
- package/dist/constants.mjs +1 -1
- package/dist/pages/BundleSize/components/asset.mjs +2 -2
- package/dist/pages/BundleSize/components/asset.mjs.map +1 -1
- package/dist/pages/BundleSize/components/card.module.mjs +1 -1
- package/dist/pages/BundleSize/components/cards.mjs +2 -2
- package/dist/pages/BundleSize/components/cards.mjs.map +1 -1
- package/dist/pages/BundleSize/components/index.mjs +1 -1
- package/dist/pages/BundleSize/components/index.mjs.map +1 -1
- package/dist/pages/BundleSize/components/index.module.mjs +1 -1
- package/dist/pages/BundleSize/components/search-modal.mjs +1 -1
- package/dist/pages/BundleSize/components/search-modal.mjs.map +1 -1
- package/dist/pages/BundleSize/config.mjs.map +1 -1
- package/dist/pages/BundleSize/constants.mjs +1 -1
- package/dist/pages/BundleSize/index.mjs +1 -1
- package/dist/pages/ModuleAnalyze/constants.mjs +1 -1
- package/dist/pages/ModuleAnalyze/dependency.mjs +1 -1
- package/dist/pages/ModuleResolve/index.mjs +1 -1
- package/dist/pages/Overall/index.mjs +1 -1
- package/dist/pages/Overall/index.module.mjs +1 -1
- package/dist/pages/Resources/BundleDiff/DiffContainer/assets.mjs.map +1 -1
- package/dist/pages/Resources/BundleDiff/DiffContainer/changes.mjs.map +1 -1
- package/dist/pages/Resources/BundleDiff/DiffContainer/modules.mjs.map +1 -1
- package/dist/pages/Resources/BundleDiff/DiffContainer/packages.mjs.map +1 -1
- package/dist/pages/Resources/BundleDiff/constants.mjs.map +1 -1
- package/dist/pages/Resources/BundleDiff/index.mjs +2 -2
- package/dist/pages/Resources/RuleIndex/index.mjs +1 -1
- package/dist/pages/TreeShaking/index.mjs +1 -1
- package/dist/pages/TreeShaking/open-tag.mjs +1 -1
- package/dist/pages/TreeShaking/table.mjs.map +1 -1
- package/dist/pages/Uploader/index.mjs +1 -1
- package/dist/pages/WebpackLoaders/Analysis/index.mjs +2 -2
- package/dist/pages/WebpackLoaders/Analysis/index.mjs.map +1 -1
- package/dist/pages/WebpackLoaders/Overall/index.mjs +1 -1
- package/dist/pages/WebpackPlugins/index.mjs +1 -1
- package/dist/pages/index.mjs +1 -1
- package/dist/utils/i18n/cn.mjs +1 -1
- package/dist/utils/i18n/en.mjs +1 -1
- package/dist/utils/i18n/index.mjs +1 -1
- package/dist/utils/loader.mjs +1 -1
- package/dist/utils/loader.mjs.map +1 -1
- package/dist/utils/string.d.ts +1 -0
- package/dist/utils/string.mjs +6 -1
- package/dist/utils/string.mjs.map +1 -1
- package/dist/utils/time.mjs +1 -1
- package/dist/utils/time.mjs.map +1 -1
- package/package.json +9 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components/Loader/executions.mjs","sources":["../../../src/components/Loader/executions.tsx"],"sourcesContent":["import { ClockCircleTwoTone } from '@ant-design/icons';\nimport { SDK } from '@rsdoctor/types';\nimport {\n Col,\n Divider,\n Empty,\n List,\n Row,\n Space,\n Tabs,\n Tag,\n Timeline,\n Tooltip,\n Typography,\n} from 'antd';\nimport dayjs from 'dayjs';\nimport { PropsWithChildren, useCallback, useState } from 'react';\nimport InputIcon from 'src/common/svg/loader/input.svg';\nimport OutputIcon from 'src/common/svg/loader/output.svg';\nimport StepIcon from 'src/common/svg/loader/step.svg';\nimport { Size } from '../../constants';\nimport { beautifyPath, formatCosts, useTheme } from '../../utils';\nimport { CodeViewer, DiffViewer } from '../base';\nimport { Card } from '../Card';\nimport { CodeOpener } from '../Opener';\nimport { Title } from '../Title';\nimport { ServerAPIProvider } from '../Manifest';\nimport styles from './Analysis/style.module.scss';\n\ninterface LoaderExecutionsProps {\n cwd: string;\n data: SDK.ServerAPI.InferResponseType<SDK.ServerAPI.API.GetLoaderFileDetails>;\n index?: number;\n}\n\nconst LoaderPropsItem = ({\n loader,\n resource,\n cwd,\n}: {\n loader: Omit<SDK.LoaderTransformData, 'input' | 'result'> & {\n costs: number;\n };\n resource: SDK.ResourceData;\n cwd: string;\n}): JSX.Element => {\n return (\n <Card\n title={'Loader Details'}\n style={{ border: 'none' }}\n extra={\n <Tag icon={<ClockCircleTwoTone />} color=\"default\">\n {dayjs(loader.startAt).format('YYYY-MM-DD HH:mm:ss')}\n </Tag>\n }\n >\n <Space direction=\"vertical\" style={{ width: '100%' }}>\n {loader.isPitch ? <Typography.Text code>pitch</Typography.Text> : null}\n <List size=\"large\" bordered>\n <List.Item>\n <Typography.Text strong>{'File Path'}</Typography.Text>\n <div>{beautifyPath(resource.path, cwd)}</div>\n </List.Item>\n <List.Item>\n <Typography.Text strong>{'Resource Path'}</Typography.Text>\n <CodeOpener cwd={cwd} url={resource.path} loc=\"\" disabled />\n </List.Item>\n <List.Item>\n <Typography.Text strong>{'Resource Query'}</Typography.Text>\n <div>{resource.queryRaw || '-'}</div>\n </List.Item>\n <List.Item>\n <Typography.Text strong>{'Duration'}</Typography.Text>\n <div>{formatCosts(loader.costs)}</div>\n </List.Item>\n <List.Item>\n <Typography.Text strong>{'Loader'}</Typography.Text>\n <div>\n <Typography.Text code>{loader.loader}</Typography.Text>\n </div>\n </List.Item>\n <List.Item>\n <Typography.Text strong>{'Loader Index'}</Typography.Text>\n <div>{`${loader.loaderIndex}`}</div>\n </List.Item>\n <List.Item>\n <Typography.Text strong>{'Loader Path'}</Typography.Text>\n <CodeOpener cwd={cwd} url={loader.path} loc=\"\" disabled />\n </List.Item>\n <List.Item>\n <div style={{ width: 180 }}>\n <Typography.Text strong>{'Options'}</Typography.Text>\n </div>\n <Divider type=\"vertical\" />\n <Typography.Paragraph\n ellipsis={{\n rows: 2,\n expandable: true,\n symbol: 'more',\n }}\n copyable\n >\n {JSON.stringify(loader.options || '-')}\n </Typography.Paragraph>\n </List.Item>\n </List>\n </Space>\n </Card>\n );\n};\n\n// Component to render Loader Details content with lazy-loaded code\nconst LoaderDetailsContent = ({\n loader,\n resource,\n isLight,\n codeData,\n}: {\n loader: Omit<SDK.LoaderTransformData, 'input' | 'result'> & { costs: number };\n resource: SDK.ResourceData;\n isLight: boolean;\n codeData: SDK.ServerAPI.InferResponseType<SDK.ServerAPI.API.GetLoaderFileInputAndOutput>;\n}): JSX.Element => {\n const hasError = loader.errors && loader.errors.length;\n const before = codeData?.input || '';\n const loaderResult = codeData?.output || '';\n\n return (\n <div style={{ height: '100%' }}>\n {hasError ? (\n <Col span={24} style={{ height: '53%', minHeight: 400 }}>\n <div\n style={{\n padding: Size.BasePadding,\n borderTop: `1px solid ${isLight ? '#f0f0f0' : 'rgba(253, 253, 253, 0.12)'}`,\n borderBottom: `1px solid ${isLight ? '#f0f0f0' : 'rgba(253, 253, 253, 0.12)'}`,\n }}\n >\n <Title\n text={`the error stack of [${loader.loader}] ${loader.isPitch ? 'pitch' : ''}`}\n />\n </div>\n <div style={{ height: '90%' }}>\n <CodeViewer code={loader.errors[0].message} lang=\"javascript\" />\n </div>\n </Col>\n ) : (\n <Col span={24} style={{ height: '53%', minHeight: 400 }}>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n padding: Size.BasePadding,\n borderBottom: `1px solid ${isLight ? '#f0f0f0' : 'rgba(253, 253, 253, 0.12)'}`,\n }}\n >\n <Title\n text={\n <>\n {`the result of [${loader.loader}] ${loader.isPitch ? 'pitch' : ''}`}\n {!loader.isPitch && (\n <span style={{ fontWeight: 400 }}>\n (\n <InputIcon\n style={{\n verticalAlign: 'middle',\n margin: '0 2px',\n }}\n />\n Input ⟷\n <OutputIcon\n style={{\n verticalAlign: 'middle',\n position: 'relative',\n top: -2,\n }}\n />\n Output)\n </span>\n )}\n </>\n }\n />\n <div style={{ flex: 1 }} />\n </div>\n {loader.isPitch ? (\n loaderResult ? (\n <div style={{ height: '90%' }}>\n <CodeViewer\n isEmbed\n code={loaderResult}\n filePath={resource.path}\n />\n </div>\n ) : (\n <Empty\n description={\n 'No loader result. If you use the Brief Mode, there will not have loader results.'\n }\n />\n )\n ) : (\n <div style={{ minHeight: '700px' }}>\n <div style={{ height: '40rem', overflow: 'hidden' }}>\n {!loaderResult && !before ? (\n <Empty\n description={\n 'No loader result. If you use the Brief Mode, there will not have loader results.'\n }\n />\n ) : (\n <DiffViewer\n isEmbed\n original={before}\n modified={loaderResult || ''}\n originalFilePath={resource.path}\n modifiedFilePath={resource.path}\n />\n )}\n </div>\n </div>\n )}\n </Col>\n )}\n </div>\n );\n};\n\nexport const LoaderExecutions = ({\n data,\n cwd,\n index,\n}: PropsWithChildren<LoaderExecutionsProps>): JSX.Element => {\n const { loaders, resource } = data;\n const [currentIndex, setCurrentIndex] = useState(index || 0);\n const { theme } = useTheme();\n const isLight = theme === 'light';\n const loader = loaders[currentIndex];\n const leftSpan = 5;\n const [activeKey, setActiveKey] = useState('loaderDetails');\n const onChange = useCallback((key: string) => {\n setActiveKey(key);\n }, []);\n\n return (\n <Row className={styles.executions} style={{ height: '100%' }}>\n <Col\n span={leftSpan}\n style={{\n borderRight: isLight ? `1px solid #f0f0f0` : undefined,\n padding: Size.BasePadding,\n }}\n >\n <Space direction=\"vertical\" style={{ width: '100%' }}>\n <Title text=\"Executions\" />\n <Timeline mode=\"left\" style={{ marginTop: Size.BasePadding }}>\n {loaders.map((e, i, arr) => {\n const { loader, isPitch } = e;\n const costs = formatCosts(e.costs);\n return (\n <Timeline.Item\n dot={\n isPitch ? (\n <Tag style={{ marginLeft: 1, fontWeight: 500 }}>\n pitch\n </Tag>\n ) : (\n <ClockCircleTwoTone />\n )\n }\n style={{ paddingBottom: 10, textAlign: 'center' }}\n key={i}\n >\n <Row align=\"middle\" justify=\"space-between\" gutter={[0, 10]}>\n <Col span={24} className={styles.timeline}>\n <Tooltip title={loader} trigger=\"hover\">\n <div\n className={`${styles.box} ${currentIndex === i ? styles.selected : ''}`}\n onClick={() => {\n setCurrentIndex(i);\n }}\n style={{ textAlign: 'left' }}\n >\n <div>\n <Typography.Text style={{ color: '#000' }}>\n {costs.match(/[0-9]*\\.?[0-9]+/g)?.[0]}\n </Typography.Text>\n {` `}\n <Typography.Text\n style={{ color: 'rgba(0,0,0,0.45)' }}\n >\n {costs.match(/[a-zA-Z]+/g)}\n </Typography.Text>\n </div>\n <Typography.Text\n style={{ color: 'rgba(0,0,0,0.65)' }}\n className={styles.loader}\n >\n {loader}\n </Typography.Text>\n </div>\n </Tooltip>\n </Col>\n </Row>\n {i === arr.length - 1 ? null : (\n <div style={{ paddingTop: 10 }}>\n <StepIcon />\n </div>\n )}\n </Timeline.Item>\n );\n })}\n </Timeline>\n </Space>\n </Col>\n <Col span={24 - leftSpan} style={{ height: '100%' }}>\n <Tabs\n type=\"card\"\n defaultActiveKey=\"loaderDetails\"\n activeKey={activeKey}\n items={[\n {\n label: 'Loader Props',\n key: 'loaderProps',\n children: (\n <LoaderPropsItem\n loader={loader}\n resource={resource}\n cwd={cwd}\n />\n ),\n },\n {\n label: 'Loader Details',\n key: 'loaderDetails',\n children:\n activeKey === 'loaderDetails' ? (\n <ServerAPIProvider\n api={SDK.ServerAPI.API.GetLoaderFileInputAndOutput}\n body={{\n file: resource.path,\n loader: loader.loader,\n loaderIndex: loader.loaderIndex,\n }}\n showSkeleton={false}\n >\n {(codeData) => (\n <LoaderDetailsContent\n loader={loader}\n resource={resource}\n isLight={isLight}\n codeData={codeData}\n />\n )}\n </ServerAPIProvider>\n ) : null,\n },\n ]}\n onChange={onChange}\n />\n </Col>\n </Row>\n );\n};\n"],"names":["LoaderPropsItem","loader","resource","cwd","Card","Tag","ClockCircleTwoTone","dayjs","Space","Typography","List","beautifyPath","CodeOpener","formatCosts","Divider","JSON","LoaderDetailsContent","isLight","codeData","hasError","before","loaderResult","Col","Size","Title","CodeViewer","InputIcon","OutputIcon","Empty","DiffViewer","LoaderExecutions","data","index","loaders","currentIndex","setCurrentIndex","useState","theme","useTheme","leftSpan","activeKey","setActiveKey","onChange","useCallback","key","Row","styles","undefined","Timeline","e","i","arr","isPitch","costs","Tooltip","StepIcon","Tabs","ServerAPIProvider","SDK"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"components/Loader/executions.mjs","sources":["../../../src/components/Loader/executions.tsx"],"sourcesContent":["import { ClockCircleTwoTone } from '@ant-design/icons';\nimport { SDK } from '@rsdoctor/types';\nimport {\n Col,\n Divider,\n Empty,\n List,\n Row,\n Space,\n Tabs,\n Tag,\n Timeline,\n Tooltip,\n Typography,\n} from 'antd';\nimport dayjs from 'dayjs';\nimport { PropsWithChildren, useCallback, useState } from 'react';\nimport InputIcon from 'src/common/svg/loader/input.svg';\nimport OutputIcon from 'src/common/svg/loader/output.svg';\nimport StepIcon from 'src/common/svg/loader/step.svg';\nimport { Size } from '../../constants';\nimport { beautifyPath, formatCosts, useTheme } from '../../utils';\nimport { CodeViewer, DiffViewer } from '../base';\nimport { Card } from '../Card';\nimport { CodeOpener } from '../Opener';\nimport { Title } from '../Title';\nimport { ServerAPIProvider } from '../Manifest';\nimport styles from './Analysis/style.module.scss';\n\ninterface LoaderExecutionsProps {\n cwd: string;\n data: SDK.ServerAPI.InferResponseType<SDK.ServerAPI.API.GetLoaderFileDetails>;\n index?: number;\n}\n\nconst LoaderPropsItem = ({\n loader,\n resource,\n cwd,\n}: {\n loader: Omit<SDK.LoaderTransformData, 'input' | 'result'> & {\n costs: number;\n };\n resource: SDK.ResourceData;\n cwd: string;\n}): JSX.Element => {\n return (\n <Card\n title={'Loader Details'}\n style={{ border: 'none' }}\n extra={\n <Tag icon={<ClockCircleTwoTone />} color=\"default\">\n {dayjs(loader.startAt).format('YYYY-MM-DD HH:mm:ss')}\n </Tag>\n }\n >\n <Space direction=\"vertical\" style={{ width: '100%' }}>\n {loader.isPitch ? <Typography.Text code>pitch</Typography.Text> : null}\n <List size=\"large\" bordered>\n <List.Item>\n <Typography.Text strong>{'File Path'}</Typography.Text>\n <div>{beautifyPath(resource.path, cwd)}</div>\n </List.Item>\n <List.Item>\n <Typography.Text strong>{'Resource Path'}</Typography.Text>\n <CodeOpener cwd={cwd} url={resource.path} loc=\"\" disabled />\n </List.Item>\n <List.Item>\n <Typography.Text strong>{'Resource Query'}</Typography.Text>\n <div>{resource.queryRaw || '-'}</div>\n </List.Item>\n <List.Item>\n <Typography.Text strong>{'Duration'}</Typography.Text>\n <div>{formatCosts(loader.costs)}</div>\n </List.Item>\n <List.Item>\n <Typography.Text strong>{'Loader'}</Typography.Text>\n <div>\n <Typography.Text code>{loader.loader}</Typography.Text>\n </div>\n </List.Item>\n <List.Item>\n <Typography.Text strong>{'Loader Index'}</Typography.Text>\n <div>{`${loader.loaderIndex}`}</div>\n </List.Item>\n <List.Item>\n <Typography.Text strong>{'Loader Path'}</Typography.Text>\n <CodeOpener cwd={cwd} url={loader.path} loc=\"\" disabled />\n </List.Item>\n <List.Item>\n <div style={{ width: 180 }}>\n <Typography.Text strong>{'Options'}</Typography.Text>\n </div>\n <Divider type=\"vertical\" />\n <Typography.Paragraph\n ellipsis={{\n rows: 2,\n expandable: true,\n symbol: 'more',\n }}\n copyable\n >\n {JSON.stringify(loader.options || '-')}\n </Typography.Paragraph>\n </List.Item>\n </List>\n </Space>\n </Card>\n );\n};\n\n// Component to render Loader Details content with lazy-loaded code\nconst LoaderDetailsContent = ({\n loader,\n resource,\n isLight,\n codeData,\n}: {\n loader: Omit<SDK.LoaderTransformData, 'input' | 'result'> & { costs: number };\n resource: SDK.ResourceData;\n isLight: boolean;\n codeData: SDK.ServerAPI.InferResponseType<SDK.ServerAPI.API.GetLoaderFileInputAndOutput>;\n}): JSX.Element => {\n const hasError = loader.errors && loader.errors.length;\n const before = codeData?.input || '';\n const loaderResult = codeData?.output || '';\n\n return (\n <div style={{ height: '100%' }}>\n {hasError ? (\n <Col span={24} style={{ height: '53%', minHeight: 400 }}>\n <div\n style={{\n padding: Size.BasePadding,\n borderTop: `1px solid ${isLight ? '#f0f0f0' : 'rgba(253, 253, 253, 0.12)'}`,\n borderBottom: `1px solid ${isLight ? '#f0f0f0' : 'rgba(253, 253, 253, 0.12)'}`,\n }}\n >\n <Title\n text={`the error stack of [${loader.loader}] ${loader.isPitch ? 'pitch' : ''}`}\n />\n </div>\n <div style={{ height: '90%' }}>\n <CodeViewer code={loader.errors[0].message} lang=\"javascript\" />\n </div>\n </Col>\n ) : (\n <Col span={24} style={{ height: '53%', minHeight: 400 }}>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n padding: Size.BasePadding,\n borderBottom: `1px solid ${isLight ? '#f0f0f0' : 'rgba(253, 253, 253, 0.12)'}`,\n }}\n >\n <Title\n text={\n <>\n {`the result of [${loader.loader}] ${loader.isPitch ? 'pitch' : ''}`}\n {!loader.isPitch && (\n <span style={{ fontWeight: 400 }}>\n (\n <InputIcon\n style={{\n verticalAlign: 'middle',\n margin: '0 2px',\n }}\n />\n Input ⟷\n <OutputIcon\n style={{\n verticalAlign: 'middle',\n position: 'relative',\n top: -2,\n }}\n />\n Output)\n </span>\n )}\n </>\n }\n />\n <div style={{ flex: 1 }} />\n </div>\n {loader.isPitch ? (\n loaderResult ? (\n <div style={{ height: '90%' }}>\n <CodeViewer\n isEmbed\n code={loaderResult}\n filePath={resource.path}\n />\n </div>\n ) : (\n <Empty\n description={\n 'No loader result. If you use the Brief Mode, there will not have loader results.'\n }\n />\n )\n ) : (\n <div style={{ minHeight: '700px' }}>\n <div style={{ height: '40rem', overflow: 'hidden' }}>\n {!loaderResult && !before ? (\n <Empty\n description={\n 'No loader result. If you use the Brief Mode, there will not have loader results.'\n }\n />\n ) : (\n <DiffViewer\n isEmbed\n original={before}\n modified={loaderResult || ''}\n originalFilePath={resource.path}\n modifiedFilePath={resource.path}\n />\n )}\n </div>\n </div>\n )}\n </Col>\n )}\n </div>\n );\n};\n\nexport const LoaderExecutions = ({\n data,\n cwd,\n index,\n}: PropsWithChildren<LoaderExecutionsProps>): JSX.Element => {\n const { loaders, resource } = data;\n const [currentIndex, setCurrentIndex] = useState(index || 0);\n const { theme } = useTheme();\n const isLight = theme === 'light';\n const loader = loaders[currentIndex];\n const leftSpan = 5;\n const [activeKey, setActiveKey] = useState('loaderDetails');\n const onChange = useCallback((key: string) => {\n setActiveKey(key);\n }, []);\n\n return (\n <Row className={styles.executions} style={{ height: '100%' }}>\n <Col\n span={leftSpan}\n style={{\n borderRight: isLight ? `1px solid #f0f0f0` : undefined,\n padding: Size.BasePadding,\n }}\n >\n <Space direction=\"vertical\" style={{ width: '100%' }}>\n <Title text=\"Executions\" />\n <Timeline mode=\"left\" style={{ marginTop: Size.BasePadding }}>\n {loaders.map((e, i, arr) => {\n const { loader, isPitch } = e;\n const costs = formatCosts(e.costs);\n return (\n <Timeline.Item\n dot={\n isPitch ? (\n <Tag style={{ marginLeft: 1, fontWeight: 500 }}>\n pitch\n </Tag>\n ) : (\n <ClockCircleTwoTone />\n )\n }\n style={{ paddingBottom: 10, textAlign: 'center' }}\n key={i}\n >\n <Row align=\"middle\" justify=\"space-between\" gutter={[0, 10]}>\n <Col span={24} className={styles.timeline}>\n <Tooltip title={loader} trigger=\"hover\">\n <div\n className={`${styles.box} ${currentIndex === i ? styles.selected : ''}`}\n onClick={() => {\n setCurrentIndex(i);\n }}\n style={{ textAlign: 'left' }}\n >\n <div>\n <Typography.Text style={{ color: '#000' }}>\n {costs.match(/[0-9]*\\.?[0-9]+/g)?.[0]}\n </Typography.Text>\n {` `}\n <Typography.Text\n style={{ color: 'rgba(0,0,0,0.45)' }}\n >\n {costs.match(/[a-zA-Z]+/g)}\n </Typography.Text>\n </div>\n <Typography.Text\n style={{ color: 'rgba(0,0,0,0.65)' }}\n className={styles.loader}\n >\n {loader}\n </Typography.Text>\n </div>\n </Tooltip>\n </Col>\n </Row>\n {i === arr.length - 1 ? null : (\n <div style={{ paddingTop: 10 }}>\n <StepIcon />\n </div>\n )}\n </Timeline.Item>\n );\n })}\n </Timeline>\n </Space>\n </Col>\n <Col span={24 - leftSpan} style={{ height: '100%' }}>\n <Tabs\n type=\"card\"\n defaultActiveKey=\"loaderDetails\"\n activeKey={activeKey}\n items={[\n {\n label: 'Loader Props',\n key: 'loaderProps',\n children: (\n <LoaderPropsItem\n loader={loader}\n resource={resource}\n cwd={cwd}\n />\n ),\n },\n {\n label: 'Loader Details',\n key: 'loaderDetails',\n children:\n activeKey === 'loaderDetails' ? (\n <ServerAPIProvider\n api={SDK.ServerAPI.API.GetLoaderFileInputAndOutput}\n body={{\n file: resource.path,\n loader: loader.loader,\n loaderIndex: loader.loaderIndex,\n }}\n showSkeleton={false}\n >\n {(codeData) => (\n <LoaderDetailsContent\n loader={loader}\n resource={resource}\n isLight={isLight}\n codeData={codeData}\n />\n )}\n </ServerAPIProvider>\n ) : null,\n },\n ]}\n onChange={onChange}\n />\n </Col>\n </Row>\n );\n};\n"],"names":["LoaderPropsItem","loader","resource","cwd","Card","Tag","ClockCircleTwoTone","dayjs","Space","Typography","List","beautifyPath","CodeOpener","formatCosts","Divider","JSON","LoaderDetailsContent","isLight","codeData","hasError","before","loaderResult","Col","Size","Title","CodeViewer","InputIcon","OutputIcon","Empty","DiffViewer","LoaderExecutions","data","index","loaders","currentIndex","setCurrentIndex","useState","theme","useTheme","leftSpan","activeKey","setActiveKey","onChange","useCallback","key","Row","styles","undefined","Timeline","e","i","arr","isPitch","costs","Tooltip","StepIcon","Tabs","ServerAPIProvider","SDK"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components/Manifest/api.mjs","sources":["../../../src/components/Manifest/api.tsx"],"sourcesContent":["import { Constants, Manifest, SDK } from '@rsdoctor/types';\nimport { Skeleton, Spin } from 'antd';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { isEqual } from 'es-toolkit/compat';\nimport { fetchManifest, useDataLoader } from '../../utils';\nimport { ComponentState } from '../../constants';\nimport { FailedStatus } from '../Status';\nimport { BaseDataLoader } from '../../utils/data/base';\nimport { Lodash } from '@rsdoctor/utils/common';\nimport { Client } from '@rsdoctor/types';\n\n/**\n * Checks if the current route is uploader route\n */\nfunction isUploaderRoute(): boolean {\n if (typeof window === 'undefined') {\n return false;\n }\n return window.location.hash.includes(Client.RsdoctorClientRoutes.Uploader);\n}\n\nexport type InferServerAPIBody<T> =\n SDK.ServerAPI.InferRequestBodyType<T> extends void\n ? {\n // use `any` to avoid ts check when need not to define the body in this component.\n body?: any;\n }\n : {\n body: SDK.ServerAPI.InferRequestBodyType<T>;\n };\n\ntype ServerAPIProviderProps<\n T extends SDK.ServerAPI.API | SDK.ServerAPI.APIExtends,\n> = {\n manifestLoader?: () => Promise<Manifest.RsdoctorManifestWithShardingFiles>;\n api: T;\n children: (response: SDK.ServerAPI.InferResponseType<T>) => JSX.Element;\n fallbackComponent?: React.FC;\n showSkeleton?: boolean;\n} & InferServerAPIBody<T>;\n\n/**\n * this component will request server api to the sdk of Rsdoctor in local development.\n * otherwise it will fallback to load full manifest for the data.\n *\n * @example usage\n * <ServerAPIProvider {...props}>\n * {(response) => {\n * <Component {...}></Component>\n * }}\n * </ServerAPIProvider>\n */\nexport const ServerAPIProvider = <\n T extends SDK.ServerAPI.API | SDK.ServerAPI.APIExtends,\n>(\n props: ServerAPIProviderProps<T>,\n): JSX.Element | null => {\n const {\n manifestLoader = fetchManifest,\n api,\n children,\n // default value of \"body\" must be \"null\" to avoid the response type not match when the socket received message.\n body = null,\n showSkeleton = true,\n fallbackComponent,\n } = props;\n let promise: Promise<Manifest.RsdoctorManifestWithShardingFiles>;\n\n const [manifest, setManifest] =\n useState<Manifest.RsdoctorManifestWithShardingFiles>();\n const [state, setState] = useState(ComponentState.Pending);\n const [res, setRes] = useState({} as SDK.ServerAPI.InferResponseType<T>);\n\n const { loader } = useDataLoader(manifest);\n\n function init(loader: BaseDataLoader | void) {\n if (window[Constants.WINDOW_RSDOCTOR_TAG]) {\n executeLoader(loader);\n } else {\n promise = manifestLoader();\n ensureManifest(promise).then(() => {\n executeLoader(loader);\n });\n }\n }\n\n const update = useCallback(\n ({ req, res: response }: SDK.ServerAPI.SocketResponseType<T>) => {\n if (req.api === api) {\n // body is equal.\n // both two body are null or undefined.\n if (\n isEqual(req.body, body) ||\n (Lodash.isNil(req.body) && Lodash.isNil(body))\n ) {\n if (!isEqual(res, response)) {\n setRes(response);\n }\n }\n }\n // make sure update successful.\n setState(ComponentState.Success);\n },\n [res, api, body],\n );\n\n useEffect(() => {\n init(loader);\n }, [loader, api, body]);\n\n useEffect(() => {\n if (!loader) return;\n // add update event listener\n loader.onDataUpdate(api, update);\n return () => {\n // remove update event when the component unmount.\n loader.removeOnDataUpdate(api, update);\n };\n }, [loader, api, body]);\n\n function ensureManifest(\n pro: Promise<Manifest.RsdoctorManifestWithShardingFiles>,\n ) {\n return pro\n .then((manifest) => {\n setManifest(manifest);\n })\n .catch((err) => {\n // If route is uploader, set empty manifest and continue instead of failing\n if (isUploaderRoute()) {\n console.warn(\n '[ServerAPIProvider] Failed to load manifest for uploader route, continuing with empty manifest:',\n err,\n );\n setState(ComponentState.Success);\n return;\n }\n setState(ComponentState.Fail);\n throw err;\n });\n }\n\n function executeLoader(loader: BaseDataLoader | void) {\n if (!loader) {\n return;\n }\n\n const exts = Object.values(SDK.ServerAPI.APIExtends);\n\n // extends api will wait for update only.\n if (exts.includes(api as SDK.ServerAPI.APIExtends)) {\n // extends api need to handle \"undefined\" response inside component.\n setState(ComponentState.Success);\n return;\n }\n\n loader\n .loadAPI(api as SDK.ServerAPI.API, body)\n .then((e) => {\n // if (process.env.NODE_ENV === 'development') {\n // console.log('[ServerAPIProvider] props: ', e, api, loader);\n // }\n // maybe the data not prepared.\n if (Lodash.isNil(e)) {\n return;\n }\n setRes(e as SDK.ServerAPI.InferResponseType<T>);\n setState(ComponentState.Success);\n })\n .catch((err) => {\n console.error(err);\n setState(ComponentState.Fail);\n });\n }\n\n if (state === ComponentState.Pending) {\n return showSkeleton ? <Skeleton active /> : null;\n }\n\n if (state === ComponentState.Fail) {\n if (fallbackComponent)\n return fallbackComponent as unknown as React.ReactElement;\n\n return (\n <FailedStatus\n retry={() => {\n setState(ComponentState.Pending);\n promise = manifestLoader();\n init();\n }}\n />\n );\n }\n\n if (state === ComponentState.Updating) {\n return <Spin spinning>{children(res)}</Spin>;\n }\n\n return children(res);\n};\n\nexport function withServerAPI<\n T,\n P extends keyof T,\n A extends SDK.ServerAPI.API | SDK.ServerAPI.APIExtends,\n>({\n Component,\n api,\n responsePropName,\n body: bodyInRoot,\n fallbackComponent,\n showSkeleton,\n}: {\n Component: React.FC<T>;\n api: A;\n responsePropName: P;\n fallbackComponent?: React.FC;\n showSkeleton?: boolean;\n} & Partial<Partial<InferServerAPIBody<A>>>): React.FC<\n Omit<T, P> & Partial<InferServerAPIBody<A>>\n> {\n return function _(props) {\n const { body = bodyInRoot, ...rest } = props;\n\n return (\n // @ts-ignore\n <ServerAPIProvider\n api={api}\n body={body}\n showSkeleton={showSkeleton}\n fallbackComponent={fallbackComponent}\n >\n {(res) => {\n const _props = {\n ...rest,\n [responsePropName]: res,\n } as T & JSX.IntrinsicAttributes;\n\n return <Component {..._props} />;\n }}\n </ServerAPIProvider>\n );\n };\n}\n"],"names":["isUploaderRoute","window","Client","ServerAPIProvider","props","manifestLoader","fetchManifest","api","children","body","showSkeleton","fallbackComponent","promise","manifest","setManifest","useState","state","setState","ComponentState","res","setRes","loader","useDataLoader","init","Constants","executeLoader","ensureManifest","update","useCallback","req","response","isEqual","Lodash","useEffect","pro","err","console","exts","Object","SDK","e","Skeleton","FailedStatus","Spin","withServerAPI","Component","responsePropName","bodyInRoot","rest","_props"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"components/Manifest/api.mjs","sources":["../../../src/components/Manifest/api.tsx"],"sourcesContent":["import { Constants, Manifest, SDK } from '@rsdoctor/types';\nimport { Skeleton, Spin } from 'antd';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { isEqual } from 'es-toolkit/compat';\nimport { fetchManifest, useDataLoader } from '../../utils';\nimport { ComponentState } from '../../constants';\nimport { FailedStatus } from '../Status';\nimport { BaseDataLoader } from '../../utils/data/base';\nimport { Lodash } from '@rsdoctor/utils/common';\nimport { Client } from '@rsdoctor/types';\n\n/**\n * Checks if the current route is uploader route\n */\nfunction isUploaderRoute(): boolean {\n if (typeof window === 'undefined') {\n return false;\n }\n return window.location.hash.includes(Client.RsdoctorClientRoutes.Uploader);\n}\n\nexport type InferServerAPIBody<T> =\n SDK.ServerAPI.InferRequestBodyType<T> extends void\n ? {\n // use `any` to avoid ts check when need not to define the body in this component.\n body?: any;\n }\n : {\n body: SDK.ServerAPI.InferRequestBodyType<T>;\n };\n\ntype ServerAPIProviderProps<\n T extends SDK.ServerAPI.API | SDK.ServerAPI.APIExtends,\n> = {\n manifestLoader?: () => Promise<Manifest.RsdoctorManifestWithShardingFiles>;\n api: T;\n children: (response: SDK.ServerAPI.InferResponseType<T>) => JSX.Element;\n fallbackComponent?: React.FC;\n showSkeleton?: boolean;\n} & InferServerAPIBody<T>;\n\n/**\n * this component will request server api to the sdk of Rsdoctor in local development.\n * otherwise it will fallback to load full manifest for the data.\n *\n * @example usage\n * <ServerAPIProvider {...props}>\n * {(response) => {\n * <Component {...}></Component>\n * }}\n * </ServerAPIProvider>\n */\nexport const ServerAPIProvider = <\n T extends SDK.ServerAPI.API | SDK.ServerAPI.APIExtends,\n>(\n props: ServerAPIProviderProps<T>,\n): JSX.Element | null => {\n const {\n manifestLoader = fetchManifest,\n api,\n children,\n // default value of \"body\" must be \"null\" to avoid the response type not match when the socket received message.\n body = null,\n showSkeleton = true,\n fallbackComponent,\n } = props;\n let promise: Promise<Manifest.RsdoctorManifestWithShardingFiles>;\n\n const [manifest, setManifest] =\n useState<Manifest.RsdoctorManifestWithShardingFiles>();\n const [state, setState] = useState(ComponentState.Pending);\n const [res, setRes] = useState({} as SDK.ServerAPI.InferResponseType<T>);\n\n const { loader } = useDataLoader(manifest);\n\n function init(loader: BaseDataLoader | void) {\n if (window[Constants.WINDOW_RSDOCTOR_TAG]) {\n executeLoader(loader);\n } else {\n promise = manifestLoader();\n ensureManifest(promise).then(() => {\n executeLoader(loader);\n });\n }\n }\n\n const update = useCallback(\n ({ req, res: response }: SDK.ServerAPI.SocketResponseType<T>) => {\n if (req.api === api) {\n // body is equal.\n // both two body are null or undefined.\n if (\n isEqual(req.body, body) ||\n (Lodash.isNil(req.body) && Lodash.isNil(body))\n ) {\n if (!isEqual(res, response)) {\n setRes(response);\n }\n }\n }\n // make sure update successful.\n setState(ComponentState.Success);\n },\n [res, api, body],\n );\n\n useEffect(() => {\n init(loader);\n }, [loader, api, body]);\n\n useEffect(() => {\n if (!loader) return;\n // add update event listener\n loader.onDataUpdate(api, update);\n return () => {\n // remove update event when the component unmount.\n loader.removeOnDataUpdate(api, update);\n };\n }, [loader, api, body]);\n\n function ensureManifest(\n pro: Promise<Manifest.RsdoctorManifestWithShardingFiles>,\n ) {\n return pro\n .then((manifest) => {\n setManifest(manifest);\n })\n .catch((err) => {\n // If route is uploader, set empty manifest and continue instead of failing\n if (isUploaderRoute()) {\n console.warn(\n '[ServerAPIProvider] Failed to load manifest for uploader route, continuing with empty manifest:',\n err,\n );\n setState(ComponentState.Success);\n return;\n }\n setState(ComponentState.Fail);\n throw err;\n });\n }\n\n function executeLoader(loader: BaseDataLoader | void) {\n if (!loader) {\n return;\n }\n\n const exts = Object.values(SDK.ServerAPI.APIExtends);\n\n // extends api will wait for update only.\n if (exts.includes(api as SDK.ServerAPI.APIExtends)) {\n // extends api need to handle \"undefined\" response inside component.\n setState(ComponentState.Success);\n return;\n }\n\n loader\n .loadAPI(api as SDK.ServerAPI.API, body)\n .then((e) => {\n // if (process.env.NODE_ENV === 'development') {\n // console.log('[ServerAPIProvider] props: ', e, api, loader);\n // }\n // maybe the data not prepared.\n if (Lodash.isNil(e)) {\n return;\n }\n setRes(e as SDK.ServerAPI.InferResponseType<T>);\n setState(ComponentState.Success);\n })\n .catch((err) => {\n console.error(err);\n setState(ComponentState.Fail);\n });\n }\n\n if (state === ComponentState.Pending) {\n return showSkeleton ? <Skeleton active /> : null;\n }\n\n if (state === ComponentState.Fail) {\n if (fallbackComponent)\n return fallbackComponent as unknown as React.ReactElement;\n\n return (\n <FailedStatus\n retry={() => {\n setState(ComponentState.Pending);\n promise = manifestLoader();\n init();\n }}\n />\n );\n }\n\n if (state === ComponentState.Updating) {\n return <Spin spinning>{children(res)}</Spin>;\n }\n\n return children(res);\n};\n\nexport function withServerAPI<\n T,\n P extends keyof T,\n A extends SDK.ServerAPI.API | SDK.ServerAPI.APIExtends,\n>({\n Component,\n api,\n responsePropName,\n body: bodyInRoot,\n fallbackComponent,\n showSkeleton,\n}: {\n Component: React.FC<T>;\n api: A;\n responsePropName: P;\n fallbackComponent?: React.FC;\n showSkeleton?: boolean;\n} & Partial<Partial<InferServerAPIBody<A>>>): React.FC<\n Omit<T, P> & Partial<InferServerAPIBody<A>>\n> {\n return function _(props) {\n const { body = bodyInRoot, ...rest } = props;\n\n return (\n // @ts-ignore\n <ServerAPIProvider\n api={api}\n body={body}\n showSkeleton={showSkeleton}\n fallbackComponent={fallbackComponent}\n >\n {(res) => {\n const _props = {\n ...rest,\n [responsePropName]: res,\n } as T & JSX.IntrinsicAttributes;\n\n return <Component {..._props} />;\n }}\n </ServerAPIProvider>\n );\n };\n}\n"],"names":["isUploaderRoute","window","Client","ServerAPIProvider","props","manifestLoader","fetchManifest","api","children","body","showSkeleton","fallbackComponent","promise","manifest","setManifest","useState","state","setState","ComponentState","res","setRes","loader","useDataLoader","init","Constants","executeLoader","ensureManifest","update","useCallback","req","response","isEqual","Lodash","useEffect","pro","err","console","exts","Object","SDK","e","Skeleton","FailedStatus","Spin","withServerAPI","Component","responsePropName","bodyInRoot","rest","_props"],"mappings":"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"}
|
|
@@ -13,7 +13,7 @@ import card_module from "./card.module.mjs";
|
|
|
13
13
|
import { DataSummary } from "./DataSummary.mjs";
|
|
14
14
|
import { Client, SDK } from "@rsdoctor/types";
|
|
15
15
|
import bundle_module from "./bundle.module.mjs";
|
|
16
|
-
const { DirectoryTree } = Tree;
|
|
16
|
+
const { DirectoryTree: DirectoryTree } = Tree;
|
|
17
17
|
const getFiles = (data)=>{
|
|
18
18
|
let files = [];
|
|
19
19
|
if (data.files.length) files = data.files.map((fileMessage)=>{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components/Overall/bundle.mjs","sources":["../../../src/components/Overall/bundle.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport {\n Descriptions,\n DescriptionsProps,\n Button,\n Tree,\n Tag,\n Segmented,\n} from 'antd';\nimport { FolderOpenTwoTone, RightOutlined } from '@ant-design/icons';\nimport { useNavigate } from 'react-router-dom';\n\nimport { getFileCom } from '../FileTree';\nimport { formatSize, useI18n } from '../../utils';\nimport { TextDrawer } from '../TextDrawer';\nimport { Card } from '../Card';\nimport { ServerAPIProvider } from '../Manifest';\nimport listStyles from './list.module.scss';\nimport cardStyles from './card.module.scss';\nimport { DataSummary } from './DataSummary';\n\nimport { Client, SDK } from '@rsdoctor/types';\nimport type { TreeDataNode } from 'antd';\n\nimport styles from './bundle.module.scss';\n\ntype viewType = 'files' | 'size';\n\nconst { DirectoryTree } = Tree;\n\nexport const getFiles = (\n data: Client.RsdoctorClientAssetsSummary['all']['total'],\n) => {\n let files: Array<{\n fileName: string;\n defaultDir: string;\n size: number;\n initial: boolean;\n }> = [];\n if (data.files.length) {\n files = data.files.map((fileMessage) => {\n const filePath = fileMessage.path;\n const pathArray = filePath.split('/');\n const fileName = pathArray.pop()!;\n const defaultDir = pathArray.join('/') || 'output';\n\n return {\n fileName,\n defaultDir,\n size: fileMessage.size,\n initial: fileMessage.initial,\n };\n });\n }\n\n const treeData: TreeDataNode[] = [];\n files.forEach((file) => {\n const target = treeData.find((data) => data.title === file.defaultDir);\n const parent: TreeDataNode = target || {\n title: file.defaultDir,\n key: file.defaultDir,\n icon: <FolderOpenTwoTone />,\n children: [],\n };\n const icon = getFileCom(file.fileName);\n if (!target) {\n treeData.push(parent);\n }\n parent.children!.push({\n title: (\n <div className={styles.treeContainer}>\n <div className={styles.treeTitle}>{file.fileName}</div>\n <div className={styles.line} />\n <Tag className={styles.tag} color=\"green\">\n {formatSize(file.size)}\n </Tag>\n {file.initial ? (\n <Tag className={styles.tag} color=\"cyan\">\n initial\n </Tag>\n ) : null}\n </div>\n ),\n key: file.fileName,\n isLeaf: true,\n icon,\n });\n });\n\n return {\n treeData,\n };\n};\n\nexport const getFilesWithDrawer = (\n data: Client.RsdoctorClientAssetsSummary['all']['total'],\n): JSX.Element => {\n const { treeData } = getFiles(data);\n\n return (\n <>\n {data.files.length ? (\n <TextDrawer\n buttonProps={{\n size: 'small',\n }}\n buttonStyle={{\n fontSize: 'inherit',\n }}\n drawerProps={{\n title: 'Files',\n }}\n text={<span>{data.count}</span>}\n >\n <DirectoryTree\n defaultExpandAll\n selectable={false}\n treeData={treeData}\n rootStyle={{\n minHeight: '800px',\n border: '1px solid rgba(235, 237, 241)',\n }}\n />\n </TextDrawer>\n ) : (\n data.count\n )}\n </>\n );\n};\n\nconst BundleDescriptions = ({\n res,\n view,\n}: {\n res: Client.RsdoctorClientAssetsSummary;\n view: viewType;\n}) => {\n const fileItems: DescriptionsProps['items'] = [\n {\n key: 'js-files-count',\n label: 'JS files',\n children: (\n <span className={`${styles.description} ${styles.column}`}>\n {getFilesWithDrawer(res.js.total)}\n </span>\n ),\n },\n {\n key: 'css-files-count',\n label: 'CSS files',\n children: (\n <span className={`${styles.description} ${styles.column}`}>\n {getFilesWithDrawer(res.css.total)}\n </span>\n ),\n },\n {\n key: 'font-files-count',\n label: 'Font files',\n children: (\n <span className={`${styles.description} ${styles.column}`}>\n {getFilesWithDrawer(res.fonts.total)}\n </span>\n ),\n },\n {\n key: 'html-files-count',\n label: 'HTML files',\n children: (\n <span className={styles.description}>\n {getFilesWithDrawer(res.html.total)}\n </span>\n ),\n },\n {\n key: 'image-files-count',\n label: 'Image files',\n children: (\n <span className={styles.description}>\n {getFilesWithDrawer(res.imgs.total)}\n </span>\n ),\n },\n {\n key: 'media-files-count',\n label: 'Media files',\n children: (\n <span className={styles.description}>\n {getFilesWithDrawer(res.media.total)}\n </span>\n ),\n },\n ];\n\n const [jsSize, jsSizeUnit] = formatSize(res.js.total.size).split(' ');\n const [cssSize, cssSizeUnit] = formatSize(res.css.total.size).split(' ');\n const [fontSize, fontSizeUnit] = formatSize(res.fonts.total.size).split(' ');\n const [htmlSize, htmlSizeUnit] = formatSize(res.html.total.size).split(' ');\n const [imgSize, imgSizeUnit] = formatSize(res.imgs.total.size).split(' ');\n const [mediaSize, mediaSizeUnit] = formatSize(res.media.total.size).split(\n ' ',\n );\n\n const sizeItems: DescriptionsProps['items'] = [\n {\n key: 'js-files-size',\n label: <span className={styles.label}>JS size</span>,\n children: (\n <div className={styles.column}>\n <span className={styles.description}>{jsSize}</span>\n <span className={styles.unit}>{jsSizeUnit}</span>\n </div>\n ),\n },\n {\n key: 'css-files-size',\n label: <span className={styles.label}>CSS size</span>,\n children: (\n <div className={styles.column}>\n <span className={styles.description}>{cssSize}</span>\n <span className={styles.unit}>{cssSizeUnit}</span>\n </div>\n ),\n },\n {\n key: 'font-files-size',\n label: <span className={styles.label}>Font size</span>,\n children: (\n <div className={styles.column}>\n <span className={styles.description}>{fontSize}</span>\n <span className={styles.unit}>{fontSizeUnit}</span>\n </div>\n ),\n },\n {\n key: 'html-files-size',\n label: <span className={styles.label}>HTML size</span>,\n children: (\n <>\n <span className={styles.description}>{htmlSize}</span>\n <span className={styles.unit}>{htmlSizeUnit}</span>\n </>\n ),\n },\n {\n key: 'image-files-size',\n label: <span className={styles.label}>Image size</span>,\n children: (\n <>\n <span className={styles.description}>{imgSize}</span>\n <span className={styles.unit}>{imgSizeUnit}</span>\n </>\n ),\n },\n {\n key: 'media-files-size',\n label: <span className={styles.label}>Media size</span>,\n children: (\n <>\n <span className={styles.description}>{mediaSize}</span>\n <span className={styles.unit}>{mediaSizeUnit}</span>\n </>\n ),\n },\n ];\n\n return (\n <Descriptions\n layout={'vertical'}\n className={listStyles.bundleOverall}\n size=\"small\"\n column={3}\n colon={false}\n items={view === 'files' ? fileItems : sizeItems}\n />\n );\n};\n\nexport const BundleOverall: React.FC<{\n errors: SDK.ErrorsData;\n cwd: string;\n}> = (): JSX.Element | null => {\n const [view, setView] = useState<viewType>('size');\n const navigate = useNavigate();\n const { t } = useI18n();\n\n const handleViewChange = (value: viewType) => {\n setView(value);\n };\n\n return (\n <ServerAPIProvider\n api={SDK.ServerAPI.API.GetAssetsSummary}\n body={{ withFileContent: false }}\n >\n {(res) => {\n const totalSizeStr = formatSize(res.all.total.size);\n return (\n <Card className={cardStyles.card} style={{ height: '316px' }}>\n <div>\n <div className={styles.title}>\n <span>{t('Bundle Overall')}</span>\n <Button\n type=\"link\"\n style={{ padding: '0px' }}\n onClick={() => {\n navigate(Client.RsdoctorClientRoutes.BundleSize);\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <span style={{ marginRight: '8px', fontSize: '13px' }}>\n {t('ViewBundleSize')}\n </span>\n <RightOutlined style={{ fontSize: '10px' }} />\n </div>\n </Button>\n </div>\n <Segmented\n options={['Size', 'Files']}\n onChange={(val) =>\n handleViewChange(val.toLocaleLowerCase() as viewType)\n }\n size=\"small\"\n style={{ marginBottom: 8, fontSize: '14px' }}\n />\n <DataSummary\n theme={view === 'files' ? 'common' : 'warning'}\n number={view === 'files' ? res.all.total.count : totalSizeStr}\n description={`Total ${view}`}\n />\n <BundleDescriptions view={view} res={res} />\n </div>\n </Card>\n );\n }}\n </ServerAPIProvider>\n );\n};\n"],"names":["DirectoryTree","Tree","getFiles","data","files","fileMessage","filePath","pathArray","fileName","defaultDir","treeData","file","target","parent","FolderOpenTwoTone","icon","getFileCom","styles","Tag","formatSize","getFilesWithDrawer","TextDrawer","BundleDescriptions","res","view","fileItems","jsSize","jsSizeUnit","cssSize","cssSizeUnit","fontSize","fontSizeUnit","htmlSize","htmlSizeUnit","imgSize","imgSizeUnit","mediaSize","mediaSizeUnit","sizeItems","Descriptions","listStyles","BundleOverall","setView","useState","navigate","useNavigate","t","useI18n","handleViewChange","value","ServerAPIProvider","SDK","totalSizeStr","Card","cardStyles","Button","Client","RightOutlined","Segmented","val","DataSummary"],"mappings":";;;;;;;;;;;;;;;AA4BA,MAAM,EAAEA,aAAa,EAAE,GAAGC;AAEnB,MAAMC,WAAW,CACtBC;IAEA,IAAIC,QAKC,EAAE;IACP,IAAID,KAAK,KAAK,CAAC,MAAM,EACnBC,QAAQD,KAAK,KAAK,CAAC,GAAG,CAAC,CAACE;QACtB,MAAMC,WAAWD,YAAY,IAAI;QACjC,MAAME,YAAYD,SAAS,KAAK,CAAC;QACjC,MAAME,WAAWD,UAAU,GAAG;QAC9B,MAAME,aAAaF,UAAU,IAAI,CAAC,QAAQ;QAE1C,OAAO;YACLC;YACAC;YACA,MAAMJ,YAAY,IAAI;YACtB,SAASA,YAAY,OAAO;QAC9B;IACF;IAGF,MAAMK,WAA2B,EAAE;IACnCN,MAAM,OAAO,CAAC,CAACO;QACb,MAAMC,SAASF,SAAS,IAAI,CAAC,CAACP,OAASA,KAAK,KAAK,KAAKQ,KAAK,UAAU;QACrE,MAAME,SAAuBD,UAAU;YACrC,OAAOD,KAAK,UAAU;YACtB,KAAKA,KAAK,UAAU;YACpB,MAAM,WAAN,GAAM,IAACG,mBAAiBA,CAAAA;YACxB,UAAU,EAAE;QACd;QACA,MAAMC,OAAOC,WAAWL,KAAK,QAAQ;QACrC,IAAI,CAACC,QACHF,SAAS,IAAI,CAACG;QAEhBA,OAAO,QAAQ,CAAE,IAAI,CAAC;YACpB,OAAO,WAAP,GACE,KAAC;gBAAI,WAAWI,cAAAA,aAAoB;;kCAClC,IAAC;wBAAI,WAAWA,cAAAA,SAAgB;kCAAGN,KAAK,QAAQ;;kCAChD,IAAC;wBAAI,WAAWM,cAAAA,IAAW;;kCAC3B,IAACC,KAAGA;wBAAC,WAAWD,cAAAA,GAAU;wBAAE,OAAM;kCAC/BE,WAAWR,KAAK,IAAI;;oBAEtBA,KAAK,OAAO,GAAG,WAAH,GACX,IAACO,KAAGA;wBAAC,WAAWD,cAAAA,GAAU;wBAAE,OAAM;kCAAO;yBAGvC;;;YAGR,KAAKN,KAAK,QAAQ;YAClB,QAAQ;YACRI;QACF;IACF;IAEA,OAAO;QACLL;IACF;AACF;AAEO,MAAMU,qBAAqB,CAChCjB;IAEA,MAAM,EAAEO,QAAQ,EAAE,GAAGR,SAASC;IAE9B,OAAO,WAAP,GACE;kBACGA,KAAK,KAAK,CAAC,MAAM,GAAG,WAAH,GAChB,IAACkB,YAAUA;YACT,aAAa;gBACX,MAAM;YACR;YACA,aAAa;gBACX,UAAU;YACZ;YACA,aAAa;gBACX,OAAO;YACT;YACA,oBAAM,IAAC;0BAAMlB,KAAK,KAAK;;sBAEvB,kBAACH,eAAAA;gBACC,kBAAgB;gBAChB,YAAY;gBACZ,UAAUU;gBACV,WAAW;oBACT,WAAW;oBACX,QAAQ;gBACV;;aAIJP,KAAK,KAAK;;AAIlB;AAEA,MAAMmB,qBAAqB,CAAC,EAC1BC,GAAG,EACHC,IAAI,EAIL;IACC,MAAMC,YAAwC;QAC5C;YACE,KAAK;YACL,OAAO;YACP,UAAU,WAAV,GACE,IAAC;gBAAK,WAAW,GAAGR,cAAAA,WAAkB,CAAC,CAAC,EAAEA,cAAAA,MAAa,EAAE;0BACtDG,mBAAmBG,IAAI,EAAE,CAAC,KAAK;;QAGtC;QACA;YACE,KAAK;YACL,OAAO;YACP,UAAU,WAAV,GACE,IAAC;gBAAK,WAAW,GAAGN,cAAAA,WAAkB,CAAC,CAAC,EAAEA,cAAAA,MAAa,EAAE;0BACtDG,mBAAmBG,IAAI,GAAG,CAAC,KAAK;;QAGvC;QACA;YACE,KAAK;YACL,OAAO;YACP,UAAU,WAAV,GACE,IAAC;gBAAK,WAAW,GAAGN,cAAAA,WAAkB,CAAC,CAAC,EAAEA,cAAAA,MAAa,EAAE;0BACtDG,mBAAmBG,IAAI,KAAK,CAAC,KAAK;;QAGzC;QACA;YACE,KAAK;YACL,OAAO;YACP,UAAU,WAAV,GACE,IAAC;gBAAK,WAAWN,cAAAA,WAAkB;0BAChCG,mBAAmBG,IAAI,IAAI,CAAC,KAAK;;QAGxC;QACA;YACE,KAAK;YACL,OAAO;YACP,UAAU,WAAV,GACE,IAAC;gBAAK,WAAWN,cAAAA,WAAkB;0BAChCG,mBAAmBG,IAAI,IAAI,CAAC,KAAK;;QAGxC;QACA;YACE,KAAK;YACL,OAAO;YACP,UAAU,WAAV,GACE,IAAC;gBAAK,WAAWN,cAAAA,WAAkB;0BAChCG,mBAAmBG,IAAI,KAAK,CAAC,KAAK;;QAGzC;KACD;IAED,MAAM,CAACG,QAAQC,WAAW,GAAGR,WAAWI,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC;IACjE,MAAM,CAACK,SAASC,YAAY,GAAGV,WAAWI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC;IACpE,MAAM,CAACO,UAAUC,aAAa,GAAGZ,WAAWI,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC;IACxE,MAAM,CAACS,UAAUC,aAAa,GAAGd,WAAWI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC;IACvE,MAAM,CAACW,SAASC,YAAY,GAAGhB,WAAWI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC;IACrE,MAAM,CAACa,WAAWC,cAAc,GAAGlB,WAAWI,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CACvE;IAGF,MAAMe,YAAwC;QAC5C;YACE,KAAK;YACL,OAAO,WAAP,GAAO,IAAC;gBAAK,WAAWrB,cAAAA,KAAY;0BAAE;;YACtC,UAAU,WAAV,GACE,KAAC;gBAAI,WAAWA,cAAAA,MAAa;;kCAC3B,IAAC;wBAAK,WAAWA,cAAAA,WAAkB;kCAAGS;;kCACtC,IAAC;wBAAK,WAAWT,cAAAA,IAAW;kCAAGU;;;;QAGrC;QACA;YACE,KAAK;YACL,OAAO,WAAP,GAAO,IAAC;gBAAK,WAAWV,cAAAA,KAAY;0BAAE;;YACtC,UAAU,WAAV,GACE,KAAC;gBAAI,WAAWA,cAAAA,MAAa;;kCAC3B,IAAC;wBAAK,WAAWA,cAAAA,WAAkB;kCAAGW;;kCACtC,IAAC;wBAAK,WAAWX,cAAAA,IAAW;kCAAGY;;;;QAGrC;QACA;YACE,KAAK;YACL,OAAO,WAAP,GAAO,IAAC;gBAAK,WAAWZ,cAAAA,KAAY;0BAAE;;YACtC,UAAU,WAAV,GACE,KAAC;gBAAI,WAAWA,cAAAA,MAAa;;kCAC3B,IAAC;wBAAK,WAAWA,cAAAA,WAAkB;kCAAGa;;kCACtC,IAAC;wBAAK,WAAWb,cAAAA,IAAW;kCAAGc;;;;QAGrC;QACA;YACE,KAAK;YACL,OAAO,WAAP,GAAO,IAAC;gBAAK,WAAWd,cAAAA,KAAY;0BAAE;;YACtC,UAAU,WAAV,GACE;;kCACE,IAAC;wBAAK,WAAWA,cAAAA,WAAkB;kCAAGe;;kCACtC,IAAC;wBAAK,WAAWf,cAAAA,IAAW;kCAAGgB;;;;QAGrC;QACA;YACE,KAAK;YACL,OAAO,WAAP,GAAO,IAAC;gBAAK,WAAWhB,cAAAA,KAAY;0BAAE;;YACtC,UAAU,WAAV,GACE;;kCACE,IAAC;wBAAK,WAAWA,cAAAA,WAAkB;kCAAGiB;;kCACtC,IAAC;wBAAK,WAAWjB,cAAAA,IAAW;kCAAGkB;;;;QAGrC;QACA;YACE,KAAK;YACL,OAAO,WAAP,GAAO,IAAC;gBAAK,WAAWlB,cAAAA,KAAY;0BAAE;;YACtC,UAAU,WAAV,GACE;;kCACE,IAAC;wBAAK,WAAWA,cAAAA,WAAkB;kCAAGmB;;kCACtC,IAAC;wBAAK,WAAWnB,cAAAA,IAAW;kCAAGoB;;;;QAGrC;KACD;IAED,OAAO,WAAP,GACE,IAACE,cAAYA;QACX,QAAQ;QACR,WAAWC,YAAAA,aAAwB;QACnC,MAAK;QACL,QAAQ;QACR,OAAO;QACP,OAAOhB,AAAS,YAATA,OAAmBC,YAAYa;;AAG5C;AAEO,MAAMG,gBAGR;IACH,MAAM,CAACjB,MAAMkB,QAAQ,GAAGC,SAAmB;IAC3C,MAAMC,WAAWC;IACjB,MAAM,EAAEC,CAAC,EAAE,GAAGC;IAEd,MAAMC,mBAAmB,CAACC;QACxBP,QAAQO;IACV;IAEA,OAAO,WAAP,GACE,IAACC,mBAAiBA;QAChB,KAAKC,IAAI,SAAS,CAAC,GAAG,CAAC,gBAAgB;QACvC,MAAM;YAAE,iBAAiB;QAAM;kBAE9B,CAAC5B;YACA,MAAM6B,eAAejC,WAAWI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI;YAClD,OAAO,WAAP,GACE,IAAC8B,MAAIA;gBAAC,WAAWC,YAAAA,IAAe;gBAAE,OAAO;oBAAE,QAAQ;gBAAQ;0BACzD,mBAAC;;sCACC,KAAC;4BAAI,WAAWrC,cAAAA,KAAY;;8CAC1B,IAAC;8CAAM6B,EAAE;;8CACT,IAACS,QAAMA;oCACL,MAAK;oCACL,OAAO;wCAAE,SAAS;oCAAM;oCACxB,SAAS;wCACPX,SAASY,OAAO,oBAAoB,CAAC,UAAU;oCACjD;8CAEA,mBAAC;wCAAI,OAAO;4CAAE,SAAS;4CAAQ,YAAY;wCAAS;;0DAClD,IAAC;gDAAK,OAAO;oDAAE,aAAa;oDAAO,UAAU;gDAAO;0DACjDV,EAAE;;0DAEL,IAACW,eAAaA;gDAAC,OAAO;oDAAE,UAAU;gDAAO;;;;;;;sCAI/C,IAACC,WAASA;4BACR,SAAS;gCAAC;gCAAQ;6BAAQ;4BAC1B,UAAU,CAACC,MACTX,iBAAiBW,IAAI,iBAAiB;4BAExC,MAAK;4BACL,OAAO;gCAAE,cAAc;gCAAG,UAAU;4BAAO;;sCAE7C,IAACC,aAAWA;4BACV,OAAOpC,AAAS,YAATA,OAAmB,WAAW;4BACrC,QAAQA,AAAS,YAATA,OAAmBD,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG6B;4BACjD,aAAa,CAAC,MAAM,EAAE5B,MAAM;;sCAE9B,IAACF,oBAAAA;4BAAmB,MAAME;4BAAM,KAAKD;;;;;QAI7C;;AAGN"}
|
|
1
|
+
{"version":3,"file":"components/Overall/bundle.mjs","sources":["../../../src/components/Overall/bundle.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport {\n Descriptions,\n DescriptionsProps,\n Button,\n Tree,\n Tag,\n Segmented,\n} from 'antd';\nimport { FolderOpenTwoTone, RightOutlined } from '@ant-design/icons';\nimport { useNavigate } from 'react-router-dom';\n\nimport { getFileCom } from '../FileTree';\nimport { formatSize, useI18n } from '../../utils';\nimport { TextDrawer } from '../TextDrawer';\nimport { Card } from '../Card';\nimport { ServerAPIProvider } from '../Manifest';\nimport listStyles from './list.module.scss';\nimport cardStyles from './card.module.scss';\nimport { DataSummary } from './DataSummary';\n\nimport { Client, SDK } from '@rsdoctor/types';\nimport type { TreeDataNode } from 'antd';\n\nimport styles from './bundle.module.scss';\n\ntype viewType = 'files' | 'size';\n\nconst { DirectoryTree } = Tree;\n\nexport const getFiles = (\n data: Client.RsdoctorClientAssetsSummary['all']['total'],\n) => {\n let files: Array<{\n fileName: string;\n defaultDir: string;\n size: number;\n initial: boolean;\n }> = [];\n if (data.files.length) {\n files = data.files.map((fileMessage) => {\n const filePath = fileMessage.path;\n const pathArray = filePath.split('/');\n const fileName = pathArray.pop()!;\n const defaultDir = pathArray.join('/') || 'output';\n\n return {\n fileName,\n defaultDir,\n size: fileMessage.size,\n initial: fileMessage.initial,\n };\n });\n }\n\n const treeData: TreeDataNode[] = [];\n files.forEach((file) => {\n const target = treeData.find((data) => data.title === file.defaultDir);\n const parent: TreeDataNode = target || {\n title: file.defaultDir,\n key: file.defaultDir,\n icon: <FolderOpenTwoTone />,\n children: [],\n };\n const icon = getFileCom(file.fileName);\n if (!target) {\n treeData.push(parent);\n }\n parent.children!.push({\n title: (\n <div className={styles.treeContainer}>\n <div className={styles.treeTitle}>{file.fileName}</div>\n <div className={styles.line} />\n <Tag className={styles.tag} color=\"green\">\n {formatSize(file.size)}\n </Tag>\n {file.initial ? (\n <Tag className={styles.tag} color=\"cyan\">\n initial\n </Tag>\n ) : null}\n </div>\n ),\n key: file.fileName,\n isLeaf: true,\n icon,\n });\n });\n\n return {\n treeData,\n };\n};\n\nexport const getFilesWithDrawer = (\n data: Client.RsdoctorClientAssetsSummary['all']['total'],\n): JSX.Element => {\n const { treeData } = getFiles(data);\n\n return (\n <>\n {data.files.length ? (\n <TextDrawer\n buttonProps={{\n size: 'small',\n }}\n buttonStyle={{\n fontSize: 'inherit',\n }}\n drawerProps={{\n title: 'Files',\n }}\n text={<span>{data.count}</span>}\n >\n <DirectoryTree\n defaultExpandAll\n selectable={false}\n treeData={treeData}\n rootStyle={{\n minHeight: '800px',\n border: '1px solid rgba(235, 237, 241)',\n }}\n />\n </TextDrawer>\n ) : (\n data.count\n )}\n </>\n );\n};\n\nconst BundleDescriptions = ({\n res,\n view,\n}: {\n res: Client.RsdoctorClientAssetsSummary;\n view: viewType;\n}) => {\n const fileItems: DescriptionsProps['items'] = [\n {\n key: 'js-files-count',\n label: 'JS files',\n children: (\n <span className={`${styles.description} ${styles.column}`}>\n {getFilesWithDrawer(res.js.total)}\n </span>\n ),\n },\n {\n key: 'css-files-count',\n label: 'CSS files',\n children: (\n <span className={`${styles.description} ${styles.column}`}>\n {getFilesWithDrawer(res.css.total)}\n </span>\n ),\n },\n {\n key: 'font-files-count',\n label: 'Font files',\n children: (\n <span className={`${styles.description} ${styles.column}`}>\n {getFilesWithDrawer(res.fonts.total)}\n </span>\n ),\n },\n {\n key: 'html-files-count',\n label: 'HTML files',\n children: (\n <span className={styles.description}>\n {getFilesWithDrawer(res.html.total)}\n </span>\n ),\n },\n {\n key: 'image-files-count',\n label: 'Image files',\n children: (\n <span className={styles.description}>\n {getFilesWithDrawer(res.imgs.total)}\n </span>\n ),\n },\n {\n key: 'media-files-count',\n label: 'Media files',\n children: (\n <span className={styles.description}>\n {getFilesWithDrawer(res.media.total)}\n </span>\n ),\n },\n ];\n\n const [jsSize, jsSizeUnit] = formatSize(res.js.total.size).split(' ');\n const [cssSize, cssSizeUnit] = formatSize(res.css.total.size).split(' ');\n const [fontSize, fontSizeUnit] = formatSize(res.fonts.total.size).split(' ');\n const [htmlSize, htmlSizeUnit] = formatSize(res.html.total.size).split(' ');\n const [imgSize, imgSizeUnit] = formatSize(res.imgs.total.size).split(' ');\n const [mediaSize, mediaSizeUnit] = formatSize(res.media.total.size).split(\n ' ',\n );\n\n const sizeItems: DescriptionsProps['items'] = [\n {\n key: 'js-files-size',\n label: <span className={styles.label}>JS size</span>,\n children: (\n <div className={styles.column}>\n <span className={styles.description}>{jsSize}</span>\n <span className={styles.unit}>{jsSizeUnit}</span>\n </div>\n ),\n },\n {\n key: 'css-files-size',\n label: <span className={styles.label}>CSS size</span>,\n children: (\n <div className={styles.column}>\n <span className={styles.description}>{cssSize}</span>\n <span className={styles.unit}>{cssSizeUnit}</span>\n </div>\n ),\n },\n {\n key: 'font-files-size',\n label: <span className={styles.label}>Font size</span>,\n children: (\n <div className={styles.column}>\n <span className={styles.description}>{fontSize}</span>\n <span className={styles.unit}>{fontSizeUnit}</span>\n </div>\n ),\n },\n {\n key: 'html-files-size',\n label: <span className={styles.label}>HTML size</span>,\n children: (\n <>\n <span className={styles.description}>{htmlSize}</span>\n <span className={styles.unit}>{htmlSizeUnit}</span>\n </>\n ),\n },\n {\n key: 'image-files-size',\n label: <span className={styles.label}>Image size</span>,\n children: (\n <>\n <span className={styles.description}>{imgSize}</span>\n <span className={styles.unit}>{imgSizeUnit}</span>\n </>\n ),\n },\n {\n key: 'media-files-size',\n label: <span className={styles.label}>Media size</span>,\n children: (\n <>\n <span className={styles.description}>{mediaSize}</span>\n <span className={styles.unit}>{mediaSizeUnit}</span>\n </>\n ),\n },\n ];\n\n return (\n <Descriptions\n layout={'vertical'}\n className={listStyles.bundleOverall}\n size=\"small\"\n column={3}\n colon={false}\n items={view === 'files' ? fileItems : sizeItems}\n />\n );\n};\n\nexport const BundleOverall: React.FC<{\n errors: SDK.ErrorsData;\n cwd: string;\n}> = (): JSX.Element | null => {\n const [view, setView] = useState<viewType>('size');\n const navigate = useNavigate();\n const { t } = useI18n();\n\n const handleViewChange = (value: viewType) => {\n setView(value);\n };\n\n return (\n <ServerAPIProvider\n api={SDK.ServerAPI.API.GetAssetsSummary}\n body={{ withFileContent: false }}\n >\n {(res) => {\n const totalSizeStr = formatSize(res.all.total.size);\n return (\n <Card className={cardStyles.card} style={{ height: '316px' }}>\n <div>\n <div className={styles.title}>\n <span>{t('Bundle Overall')}</span>\n <Button\n type=\"link\"\n style={{ padding: '0px' }}\n onClick={() => {\n navigate(Client.RsdoctorClientRoutes.BundleSize);\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <span style={{ marginRight: '8px', fontSize: '13px' }}>\n {t('ViewBundleSize')}\n </span>\n <RightOutlined style={{ fontSize: '10px' }} />\n </div>\n </Button>\n </div>\n <Segmented\n options={['Size', 'Files']}\n onChange={(val) =>\n handleViewChange(val.toLocaleLowerCase() as viewType)\n }\n size=\"small\"\n style={{ marginBottom: 8, fontSize: '14px' }}\n />\n <DataSummary\n theme={view === 'files' ? 'common' : 'warning'}\n number={view === 'files' ? res.all.total.count : totalSizeStr}\n description={`Total ${view}`}\n />\n <BundleDescriptions view={view} res={res} />\n </div>\n </Card>\n );\n }}\n </ServerAPIProvider>\n );\n};\n"],"names":["DirectoryTree","Tree","getFiles","data","files","fileMessage","filePath","pathArray","fileName","defaultDir","treeData","file","target","parent","FolderOpenTwoTone","icon","getFileCom","styles","Tag","formatSize","getFilesWithDrawer","TextDrawer","BundleDescriptions","res","view","fileItems","jsSize","jsSizeUnit","cssSize","cssSizeUnit","fontSize","fontSizeUnit","htmlSize","htmlSizeUnit","imgSize","imgSizeUnit","mediaSize","mediaSizeUnit","sizeItems","Descriptions","listStyles","BundleOverall","setView","useState","navigate","useNavigate","t","useI18n","handleViewChange","value","ServerAPIProvider","SDK","totalSizeStr","Card","cardStyles","Button","Client","RightOutlined","Segmented","val","DataSummary"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components/Overall/compile.mjs","sources":["../../../src/components/Overall/compile.tsx"],"sourcesContent":["import { SDK } from '@rsdoctor/types';\nimport { Summary } from '@rsdoctor/utils/common';\nimport { Divider, Progress, Space, Typography } from 'antd';\nimport React from 'react';\nimport { formatCosts, useI18n } from '../../utils';\nimport { Card } from '../Card';\nimport { BootstrapChartContainer } from '../Charts/bootstrap';\nimport { DoneChartContainer } from '../Charts/done';\nimport { MinifyChartContainer } from '../Charts/minify';\n\nimport cardStyles from './card.module.scss';\nimport styles from './compile.module.scss';\n\nconst Stage: React.FC<\n React.PropsWithChildren<{\n name: string;\n showDivider?: boolean;\n }>\n> = ({ children, name, showDivider = true }) => {\n return (\n <Typography.Text style={{ color: 'inherit' }}>\n <Typography.Text style={{ color: 'inherit' }}>{name}</Typography.Text>\n {showDivider ? <Divider type=\"vertical\" /> : null}\n {children}\n </Typography.Text>\n );\n};\n\nexport const CompileOverall: React.FC<{ summary: SDK.SummaryData }> = ({\n summary,\n}) => {\n const { t } = useI18n();\n\n if (!summary?.costs?.length) return null;\n\n const maxCosts = Math.max(...summary.costs.map((item) => item.costs));\n\n return (\n <Card className={cardStyles.card}>\n <div>\n <Space\n style={{ wordBreak: 'break-all', width: '100%', marginTop: '0' }}\n size={20}\n direction=\"vertical\"\n >\n <div className={styles.title}>{t('Compile Overall')}</div>\n {summary.costs.map((e) => {\n const { name, costs } = e;\n const percent = (costs * 100) / maxCosts;\n\n const ProgressBar = (\n <Progress\n className={styles.progress}\n percent={percent}\n status=\"normal\"\n format={() => formatCosts(costs)}\n />\n );\n\n switch (name) {\n case Summary.SummaryCostsDataName.Bootstrap:\n return (\n <Stage name=\"Bootstrap ~ BeforeCompile\" key={name}>\n <BootstrapChartContainer summary={summary} />\n {ProgressBar}\n </Stage>\n );\n case Summary.SummaryCostsDataName.Compile:\n return (\n <Stage name=\"Compile\" key={name} showDivider={false}>\n {ProgressBar}\n </Stage>\n );\n case Summary.SummaryCostsDataName.Done:\n return (\n <Stage name=\"AfterCompile ~ Done\" key={name}>\n <DoneChartContainer summary={summary} />\n {ProgressBar}\n </Stage>\n );\n case Summary.SummaryCostsDataName.Minify:\n return (\n <Stage name=\"Minify\" key={name}>\n <MinifyChartContainer summary={summary} />\n {ProgressBar}\n </Stage>\n );\n\n default:\n return null;\n }\n })}\n </Space>\n </div>\n </Card>\n );\n};\n"],"names":["Stage","children","name","showDivider","Typography","Divider","CompileOverall","summary","t","useI18n","maxCosts","Math","item","Card","cardStyles","Space","styles","e","costs","percent","ProgressBar","Progress","formatCosts","Summary","BootstrapChartContainer","DoneChartContainer","MinifyChartContainer"],"mappings":";;;;;;;;;;;AAaA,MAAMA,QAKF,CAAC,EAAEC,QAAQ,EAAEC,IAAI,EAAEC,cAAc,IAAI,EAAE,GAClC,WAAP,GACE,KAACC,WAAW,IAAI;QAAC,OAAO;YAAE,OAAO;QAAU;;0BACzC,IAACA,WAAW,IAAI;gBAAC,OAAO;oBAAE,OAAO;gBAAU;0BAAIF;;YAC9CC,cAAc,WAAdA,GAAc,IAACE,SAAOA;gBAAC,MAAK;iBAAgB;YAC5CJ;;;AAKA,MAAMK,iBAAyD,CAAC,EACrEC,OAAO,EACR;IACC,MAAM,EAAEC,CAAC,EAAE,GAAGC;IAEd,IAAI,CAACF,SAAS,OAAO,QAAQ,OAAO;IAEpC,MAAMG,WAAWC,KAAK,GAAG,IAAIJ,QAAQ,KAAK,CAAC,GAAG,CAAC,CAACK,OAASA,KAAK,KAAK;IAEnE,OAAO,WAAP,GACE,IAACC,MAAIA;QAAC,WAAWC,YAAAA,IAAe;kBAC9B,kBAAC;sBACC,mBAACC,OAAKA;gBACJ,OAAO;oBAAE,WAAW;oBAAa,OAAO;oBAAQ,WAAW;gBAAI;gBAC/D,MAAM;gBACN,WAAU;;kCAEV,IAAC;wBAAI,WAAWC,eAAAA,KAAY;kCAAGR,EAAE;;oBAChCD,QAAQ,KAAK,CAAC,GAAG,CAAC,CAACU;wBAClB,MAAM,EAAEf,IAAI,EAAEgB,KAAK,EAAE,GAAGD;wBACxB,MAAME,UAAWD,AAAQ,MAARA,QAAeR;wBAEhC,MAAMU,cAAc,WAAdA,GACJ,IAACC,UAAQA;4BACP,WAAWL,eAAAA,QAAe;4BAC1B,SAASG;4BACT,QAAO;4BACP,QAAQ,IAAMG,YAAYJ;;wBAI9B,OAAQhB;4BACN,KAAKqB,QAAQ,oBAAoB,CAAC,SAAS;gCACzC,OAAO,WAAP,GACE,KAACvB,
|
|
1
|
+
{"version":3,"file":"components/Overall/compile.mjs","sources":["../../../src/components/Overall/compile.tsx"],"sourcesContent":["import { SDK } from '@rsdoctor/types';\nimport { Summary } from '@rsdoctor/utils/common';\nimport { Divider, Progress, Space, Typography } from 'antd';\nimport React from 'react';\nimport { formatCosts, useI18n } from '../../utils';\nimport { Card } from '../Card';\nimport { BootstrapChartContainer } from '../Charts/bootstrap';\nimport { DoneChartContainer } from '../Charts/done';\nimport { MinifyChartContainer } from '../Charts/minify';\n\nimport cardStyles from './card.module.scss';\nimport styles from './compile.module.scss';\n\nconst Stage: React.FC<\n React.PropsWithChildren<{\n name: string;\n showDivider?: boolean;\n }>\n> = ({ children, name, showDivider = true }) => {\n return (\n <Typography.Text style={{ color: 'inherit' }}>\n <Typography.Text style={{ color: 'inherit' }}>{name}</Typography.Text>\n {showDivider ? <Divider type=\"vertical\" /> : null}\n {children}\n </Typography.Text>\n );\n};\n\nexport const CompileOverall: React.FC<{ summary: SDK.SummaryData }> = ({\n summary,\n}) => {\n const { t } = useI18n();\n\n if (!summary?.costs?.length) return null;\n\n const maxCosts = Math.max(...summary.costs.map((item) => item.costs));\n\n return (\n <Card className={cardStyles.card}>\n <div>\n <Space\n style={{ wordBreak: 'break-all', width: '100%', marginTop: '0' }}\n size={20}\n direction=\"vertical\"\n >\n <div className={styles.title}>{t('Compile Overall')}</div>\n {summary.costs.map((e) => {\n const { name, costs } = e;\n const percent = (costs * 100) / maxCosts;\n\n const ProgressBar = (\n <Progress\n className={styles.progress}\n percent={percent}\n status=\"normal\"\n format={() => formatCosts(costs)}\n />\n );\n\n switch (name) {\n case Summary.SummaryCostsDataName.Bootstrap:\n return (\n <Stage name=\"Bootstrap ~ BeforeCompile\" key={name}>\n <BootstrapChartContainer summary={summary} />\n {ProgressBar}\n </Stage>\n );\n case Summary.SummaryCostsDataName.Compile:\n return (\n <Stage name=\"Compile\" key={name} showDivider={false}>\n {ProgressBar}\n </Stage>\n );\n case Summary.SummaryCostsDataName.Done:\n return (\n <Stage name=\"AfterCompile ~ Done\" key={name}>\n <DoneChartContainer summary={summary} />\n {ProgressBar}\n </Stage>\n );\n case Summary.SummaryCostsDataName.Minify:\n return (\n <Stage name=\"Minify\" key={name}>\n <MinifyChartContainer summary={summary} />\n {ProgressBar}\n </Stage>\n );\n\n default:\n return null;\n }\n })}\n </Space>\n </div>\n </Card>\n );\n};\n"],"names":["Stage","children","name","showDivider","Typography","Divider","CompileOverall","summary","t","useI18n","maxCosts","Math","item","Card","cardStyles","Space","styles","e","costs","percent","ProgressBar","Progress","formatCosts","Summary","BootstrapChartContainer","DoneChartContainer","MinifyChartContainer"],"mappings":";;;;;;;;;;;AAaA,MAAMA,QAKF,CAAC,EAAEC,QAAQ,EAAEC,IAAI,EAAEC,cAAc,IAAI,EAAE,GAClC,WAAP,GACE,KAACC,WAAW,IAAI;QAAC,OAAO;YAAE,OAAO;QAAU;;0BACzC,IAACA,WAAW,IAAI;gBAAC,OAAO;oBAAE,OAAO;gBAAU;0BAAIF;;YAC9CC,cAAc,WAAdA,GAAc,IAACE,SAAOA;gBAAC,MAAK;iBAAgB;YAC5CJ;;;AAKA,MAAMK,iBAAyD,CAAC,EACrEC,OAAO,EACR;IACC,MAAM,EAAEC,CAAC,EAAE,GAAGC;IAEd,IAAI,CAACF,SAAS,OAAO,QAAQ,OAAO;IAEpC,MAAMG,WAAWC,KAAK,GAAG,IAAIJ,QAAQ,KAAK,CAAC,GAAG,CAAC,CAACK,OAASA,KAAK,KAAK;IAEnE,OAAO,WAAP,GACE,IAACC,MAAIA;QAAC,WAAWC,YAAAA,IAAe;kBAC9B,kBAAC;sBACC,mBAACC,OAAKA;gBACJ,OAAO;oBAAE,WAAW;oBAAa,OAAO;oBAAQ,WAAW;gBAAI;gBAC/D,MAAM;gBACN,WAAU;;kCAEV,IAAC;wBAAI,WAAWC,eAAAA,KAAY;kCAAGR,EAAE;;oBAChCD,QAAQ,KAAK,CAAC,GAAG,CAAC,CAACU;wBAClB,MAAM,EAAEf,IAAI,EAAEgB,KAAK,EAAE,GAAGD;wBACxB,MAAME,UAAWD,AAAQ,MAARA,QAAeR;wBAEhC,MAAMU,cAAc,WAAdA,GACJ,IAACC,UAAQA;4BACP,WAAWL,eAAAA,QAAe;4BAC1B,SAASG;4BACT,QAAO;4BACP,QAAQ,IAAMG,YAAYJ;;wBAI9B,OAAQhB;4BACN,KAAKqB,QAAQ,oBAAoB,CAAC,SAAS;gCACzC,OAAO,WAAP,GACE,KAACvB,OAAKA;oCAAC,MAAK;;sDACV,IAACwB,yBAAuBA;4CAAC,SAASjB;;wCACjCa;;mCAF0ClB;4BAKjD,KAAKqB,QAAQ,oBAAoB,CAAC,OAAO;gCACvC,OAAO,WAAP,GACE,IAACvB,OAAKA;oCAAC,MAAK;oCAAqB,aAAa;8CAC3CoB;mCADwBlB;4BAI/B,KAAKqB,QAAQ,oBAAoB,CAAC,IAAI;gCACpC,OAAO,WAAP,GACE,KAACvB,OAAKA;oCAAC,MAAK;;sDACV,IAACyB,oBAAkBA;4CAAC,SAASlB;;wCAC5Ba;;mCAFoClB;4BAK3C,KAAKqB,QAAQ,oBAAoB,CAAC,MAAM;gCACtC,OAAO,WAAP,GACE,KAACvB,OAAKA;oCAAC,MAAK;;sDACV,IAAC0B,sBAAoBA;4CAAC,SAASnB;;wCAC9Ba;;mCAFuBlB;4BAM9B;gCACE,OAAO;wBACX;oBACF;;;;;AAKV"}
|
|
@@ -46,7 +46,7 @@ const ResolverDetailsPanel = ({ filepath, before, after, resolvers })=>/*#__PURE
|
|
|
46
46
|
children: /*#__PURE__*/ jsx(Table, {
|
|
47
47
|
style: {
|
|
48
48
|
width: '100%',
|
|
49
|
-
height,
|
|
49
|
+
height: height,
|
|
50
50
|
overflowY: 'scroll',
|
|
51
51
|
wordBreak: 'break-all'
|
|
52
52
|
},
|
|
@@ -140,7 +140,7 @@ const ResolverFiles = (props)=>{
|
|
|
140
140
|
children: /*#__PURE__*/ jsx(FileTree, {
|
|
141
141
|
style: {
|
|
142
142
|
width: '100%',
|
|
143
|
-
height,
|
|
143
|
+
height: height,
|
|
144
144
|
overflow: 'scroll'
|
|
145
145
|
},
|
|
146
146
|
treeData: files,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components/Resolver/analysis.mjs","sources":["../../../src/components/Resolver/analysis.tsx"],"sourcesContent":["/* eslint-disable react/no-unescaped-entities */\nimport { CloseCircleOutlined, FileSearchOutlined } from '@ant-design/icons';\nimport { SDK } from '@rsdoctor/types';\nimport { Resolver } from '@rsdoctor/utils/common';\nimport { Card, Col, Row, Space, Table, Tabs, Typography } from 'antd';\nimport { get } from 'es-toolkit/compat';\nimport React, { useMemo, useState } from 'react';\nimport { Size } from '../../constants';\nimport { createFileStructures, formatCosts, mapFileKey } from '../../utils';\nimport { FileTree } from '../FileTree';\nimport { KeywordInput } from '../Form/keyword';\nimport { ServerAPIProvider, withServerAPI } from '../Manifest';\nimport { DiffViewer } from '../base';\n\nconst height = 735;\n\nconst ResolverDetailsPanel: React.FC<\n SDK.ServerAPI.InferResponseType<SDK.ServerAPI.API.GetResolverFileDetails>\n> = ({ filepath, before, after, resolvers }) => {\n return (\n <Col flex={1}>\n <Tabs\n defaultActiveKey=\"diff\"\n items={[\n {\n key: 'diff',\n label: 'Resolve Diff Viewer',\n children: (\n <Card styles={{ body: { padding: 0, overflow: 'hidden' } }}>\n <DiffViewer\n style={{\n height: height + 50,\n }}\n isEmbed\n originalFilePath={filepath}\n modifiedFilePath={filepath}\n original={before}\n modified={after}\n />\n </Card>\n ),\n },\n {\n key: 'details',\n label: 'Resolve Details',\n children: (\n <Card>\n <Table\n style={{\n width: '100%',\n height,\n overflowY: 'scroll',\n wordBreak: 'break-all',\n }}\n size=\"small\"\n pagination={false}\n bordered\n rowKey={(e) => e.request}\n columns={[\n {\n title: 'Source Code',\n width: 200,\n render: (_v, r) => (\n <Typography.Text copyable>\n <Typography.Text code strong>\n {r.request}\n </Typography.Text>\n </Typography.Text>\n ),\n },\n {\n title: 'Duration',\n width: 80,\n render: (_v, r) => (\n <Typography.Text strong>\n {formatCosts(r.costs)}\n </Typography.Text>\n ),\n sorter: (a, b) => a.costs - b.costs,\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Resolve Result',\n render: (_v, r) => {\n if (Resolver.isResolveSuccessData(r))\n return (\n <Typography.Text copyable>\n {r.result}\n </Typography.Text>\n );\n return (\n <CloseCircleOutlined style={{ color: '#f50' }} />\n );\n },\n },\n ]}\n dataSource={resolvers}\n />\n </Card>\n ),\n },\n ]}\n />\n </Col>\n );\n};\n\nexport const ResolverFiles: React.FC<{\n filename: string;\n cwd: string;\n resolver: SDK.ServerAPI.InferResponseType<SDK.ServerAPI.API.GetResolverFileTree>;\n}> = (props) => {\n const { resolver, cwd } = props;\n\n const [filepath, setFilepath] = useState('');\n\n const inlinedResourcePathKey = '__RESOURCEPATH__';\n const n = '/node_modules/';\n\n const paths = useMemo(() => {\n return resolver.map((e) => e.issuerPath).filter(Boolean);\n }, [resolver]);\n\n const filterPaths = useMemo(() => {\n return paths.filter((e) =>\n props.filename ? e.indexOf(props.filename) > -1 : true,\n );\n }, [props.filename, paths]);\n\n const allNodeModules =\n filterPaths.length && filterPaths.every((e) => e.indexOf(n) > -1);\n\n const files = useMemo(() => {\n return createFileStructures({\n files: filterPaths.length ? filterPaths : paths,\n cwd,\n fileTitle(file, basename) {\n return <div onClick={() => setFilepath(file)}>{basename}</div>;\n },\n });\n }, [props.filename]);\n\n return (\n <Row justify=\"start\" align=\"top\" wrap={false} gutter={Size.BasePadding}>\n <Col span={7}>\n <Card title=\"Files\">\n <FileTree\n style={{ width: '100%', height, overflow: 'scroll' }}\n treeData={files}\n defaultExpandedKeys={mapFileKey(\n files,\n allNodeModules ? 1 : 4,\n allNodeModules\n ? undefined\n : (node) => {\n const resourcePath: string = get(\n node,\n inlinedResourcePathKey,\n )!;\n const isNodeModules = resourcePath.indexOf(n) > -1;\n\n if (\n filterPaths.length &&\n filterPaths.every((e) => e.indexOf(n) > -1)\n ) {\n return true;\n }\n\n return !isNodeModules;\n },\n )}\n key={`tree_${props.filename}`}\n />\n </Card>\n </Col>\n {filepath && (\n <ServerAPIProvider\n api={SDK.ServerAPI.API.GetResolverFileDetails}\n body={{ filepath }}\n >\n {(resolvers) => <ResolverDetailsPanel {...resolvers} />}\n </ServerAPIProvider>\n )}\n </Row>\n );\n};\n\nexport const ResolverAnalysisBase: React.FC<{\n project: SDK.ServerAPI.InferResponseType<SDK.ServerAPI.API.GetProjectInfo>;\n}> = ({ project }) => {\n const { root: cwd } = project;\n const [filename, setFilename] = useState('');\n\n return (\n <div style={{ width: '100%' }}>\n <Space\n style={{ marginTop: Size.BasePadding, marginBottom: Size.BasePadding }}\n >\n <KeywordInput\n icon={<FileSearchOutlined />}\n label=\"Filename\"\n placeholder=\"search filename by keyword\"\n onChange={(e) => setFilename(e)}\n />\n </Space>\n <ServerAPIProvider api={SDK.ServerAPI.API.GetResolverFileTree}>\n {(resolver) => (\n <ResolverFiles filename={filename} resolver={resolver} cwd={cwd} />\n )}\n </ServerAPIProvider>\n </div>\n );\n};\n\nexport const ResolverAnalysis = withServerAPI({\n api: SDK.ServerAPI.API.GetProjectInfo,\n responsePropName: 'project',\n Component: ResolverAnalysisBase,\n});\n"],"names":["height","ResolverDetailsPanel","filepath","before","after","resolvers","Col","Tabs","Card","DiffViewer","Table","e","_v","r","Typography","formatCosts","a","b","Resolver","CloseCircleOutlined","ResolverFiles","props","resolver","cwd","setFilepath","useState","inlinedResourcePathKey","n","paths","useMemo","Boolean","filterPaths","allNodeModules","files","createFileStructures","file","basename","Row","Size","FileTree","mapFileKey","undefined","node","resourcePath","get","isNodeModules","ServerAPIProvider","SDK","ResolverAnalysisBase","project","filename","setFilename","Space","KeywordInput","FileSearchOutlined","ResolverAnalysis","withServerAPI"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"components/Resolver/analysis.mjs","sources":["../../../src/components/Resolver/analysis.tsx"],"sourcesContent":["/* eslint-disable react/no-unescaped-entities */\nimport { CloseCircleOutlined, FileSearchOutlined } from '@ant-design/icons';\nimport { SDK } from '@rsdoctor/types';\nimport { Resolver } from '@rsdoctor/utils/common';\nimport { Card, Col, Row, Space, Table, Tabs, Typography } from 'antd';\nimport { get } from 'es-toolkit/compat';\nimport React, { useMemo, useState } from 'react';\nimport { Size } from '../../constants';\nimport { createFileStructures, formatCosts, mapFileKey } from '../../utils';\nimport { FileTree } from '../FileTree';\nimport { KeywordInput } from '../Form/keyword';\nimport { ServerAPIProvider, withServerAPI } from '../Manifest';\nimport { DiffViewer } from '../base';\n\nconst height = 735;\n\nconst ResolverDetailsPanel: React.FC<\n SDK.ServerAPI.InferResponseType<SDK.ServerAPI.API.GetResolverFileDetails>\n> = ({ filepath, before, after, resolvers }) => {\n return (\n <Col flex={1}>\n <Tabs\n defaultActiveKey=\"diff\"\n items={[\n {\n key: 'diff',\n label: 'Resolve Diff Viewer',\n children: (\n <Card styles={{ body: { padding: 0, overflow: 'hidden' } }}>\n <DiffViewer\n style={{\n height: height + 50,\n }}\n isEmbed\n originalFilePath={filepath}\n modifiedFilePath={filepath}\n original={before}\n modified={after}\n />\n </Card>\n ),\n },\n {\n key: 'details',\n label: 'Resolve Details',\n children: (\n <Card>\n <Table\n style={{\n width: '100%',\n height,\n overflowY: 'scroll',\n wordBreak: 'break-all',\n }}\n size=\"small\"\n pagination={false}\n bordered\n rowKey={(e) => e.request}\n columns={[\n {\n title: 'Source Code',\n width: 200,\n render: (_v, r) => (\n <Typography.Text copyable>\n <Typography.Text code strong>\n {r.request}\n </Typography.Text>\n </Typography.Text>\n ),\n },\n {\n title: 'Duration',\n width: 80,\n render: (_v, r) => (\n <Typography.Text strong>\n {formatCosts(r.costs)}\n </Typography.Text>\n ),\n sorter: (a, b) => a.costs - b.costs,\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Resolve Result',\n render: (_v, r) => {\n if (Resolver.isResolveSuccessData(r))\n return (\n <Typography.Text copyable>\n {r.result}\n </Typography.Text>\n );\n return (\n <CloseCircleOutlined style={{ color: '#f50' }} />\n );\n },\n },\n ]}\n dataSource={resolvers}\n />\n </Card>\n ),\n },\n ]}\n />\n </Col>\n );\n};\n\nexport const ResolverFiles: React.FC<{\n filename: string;\n cwd: string;\n resolver: SDK.ServerAPI.InferResponseType<SDK.ServerAPI.API.GetResolverFileTree>;\n}> = (props) => {\n const { resolver, cwd } = props;\n\n const [filepath, setFilepath] = useState('');\n\n const inlinedResourcePathKey = '__RESOURCEPATH__';\n const n = '/node_modules/';\n\n const paths = useMemo(() => {\n return resolver.map((e) => e.issuerPath).filter(Boolean);\n }, [resolver]);\n\n const filterPaths = useMemo(() => {\n return paths.filter((e) =>\n props.filename ? e.indexOf(props.filename) > -1 : true,\n );\n }, [props.filename, paths]);\n\n const allNodeModules =\n filterPaths.length && filterPaths.every((e) => e.indexOf(n) > -1);\n\n const files = useMemo(() => {\n return createFileStructures({\n files: filterPaths.length ? filterPaths : paths,\n cwd,\n fileTitle(file, basename) {\n return <div onClick={() => setFilepath(file)}>{basename}</div>;\n },\n });\n }, [props.filename]);\n\n return (\n <Row justify=\"start\" align=\"top\" wrap={false} gutter={Size.BasePadding}>\n <Col span={7}>\n <Card title=\"Files\">\n <FileTree\n style={{ width: '100%', height, overflow: 'scroll' }}\n treeData={files}\n defaultExpandedKeys={mapFileKey(\n files,\n allNodeModules ? 1 : 4,\n allNodeModules\n ? undefined\n : (node) => {\n const resourcePath: string = get(\n node,\n inlinedResourcePathKey,\n )!;\n const isNodeModules = resourcePath.indexOf(n) > -1;\n\n if (\n filterPaths.length &&\n filterPaths.every((e) => e.indexOf(n) > -1)\n ) {\n return true;\n }\n\n return !isNodeModules;\n },\n )}\n key={`tree_${props.filename}`}\n />\n </Card>\n </Col>\n {filepath && (\n <ServerAPIProvider\n api={SDK.ServerAPI.API.GetResolverFileDetails}\n body={{ filepath }}\n >\n {(resolvers) => <ResolverDetailsPanel {...resolvers} />}\n </ServerAPIProvider>\n )}\n </Row>\n );\n};\n\nexport const ResolverAnalysisBase: React.FC<{\n project: SDK.ServerAPI.InferResponseType<SDK.ServerAPI.API.GetProjectInfo>;\n}> = ({ project }) => {\n const { root: cwd } = project;\n const [filename, setFilename] = useState('');\n\n return (\n <div style={{ width: '100%' }}>\n <Space\n style={{ marginTop: Size.BasePadding, marginBottom: Size.BasePadding }}\n >\n <KeywordInput\n icon={<FileSearchOutlined />}\n label=\"Filename\"\n placeholder=\"search filename by keyword\"\n onChange={(e) => setFilename(e)}\n />\n </Space>\n <ServerAPIProvider api={SDK.ServerAPI.API.GetResolverFileTree}>\n {(resolver) => (\n <ResolverFiles filename={filename} resolver={resolver} cwd={cwd} />\n )}\n </ServerAPIProvider>\n </div>\n );\n};\n\nexport const ResolverAnalysis = withServerAPI({\n api: SDK.ServerAPI.API.GetProjectInfo,\n responsePropName: 'project',\n Component: ResolverAnalysisBase,\n});\n"],"names":["height","ResolverDetailsPanel","filepath","before","after","resolvers","Col","Tabs","Card","DiffViewer","Table","e","_v","r","Typography","formatCosts","a","b","Resolver","CloseCircleOutlined","ResolverFiles","props","resolver","cwd","setFilepath","useState","inlinedResourcePathKey","n","paths","useMemo","Boolean","filterPaths","allNodeModules","files","createFileStructures","file","basename","Row","Size","FileTree","mapFileKey","undefined","node","resourcePath","get","isNodeModules","ServerAPIProvider","SDK","ResolverAnalysisBase","project","filename","setFilename","Space","KeywordInput","FileSearchOutlined","ResolverAnalysis","withServerAPI"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components/Select/index.mjs","sources":["../../../src/components/Select/index.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport { Button, Col, Input, Row, Select, Typography } from 'antd';\nimport { FileSearchOutlined, SelectOutlined } from '@ant-design/icons';\nimport { KeywordInput } from '../Form/keyword';\nimport { Size } from 'src/constants';\nimport { ServerAPIProvider } from '../Manifest';\nimport { SDK } from '@rsdoctor/types';\nimport './index.scss';\n\ninterface LoaderNamesSelectProps {\n style?: React.CSSProperties;\n onChange: (loaders: string[]) => void;\n loaderNames: string[];\n}\n\nexport type ISelectLoaderProps = {\n loaders: string[];\n filename: string;\n layer?: string;\n};\n\nexport const LoaderNamesSelect: React.FC<LoaderNamesSelectProps> = ({\n style,\n onChange,\n loaderNames,\n}) => {\n const [selectLoaders, setSelectLoaders] = useState([]);\n\n const labelStyle: React.CSSProperties = { width: 120 };\n\n return (\n <Input.Group compact style={style}>\n <Button style={labelStyle}>\n <SelectOutlined />\n <Typography.Text>Loaders</Typography.Text>\n </Button>\n <Select\n mode=\"multiple\"\n allowClear\n defaultValue={selectLoaders}\n className=\"loader-select\"\n style={{ width: 300 }}\n popupMatchSelectWidth={300}\n placeholder={'select loaders'}\n onChange={(e) => {\n setSelectLoaders(e);\n onChange(e);\n }}\n >\n {loaderNames.map((e) => {\n return (\n <Select.Option key={e} label={e} value={e}>\n {e}\n </Select.Option>\n );\n })}\n </Select>\n </Input.Group>\n );\n};\n\nconst LoaderLayerSelect: React.FC<{\n onChange(value: string): void;\n layers: string[];\n}> = ({ onChange, layers }) => {\n const [layer, setLayer] = useState('');\n const labelStyle: React.CSSProperties = { width: 120 };\n\n return (\n <Input.Group compact>\n <Button style={labelStyle}>\n <SelectOutlined />\n <Typography.Text>Layers</Typography.Text>\n </Button>\n <Select\n allowClear\n className=\"layer-select\"\n style={{ width: 150 }}\n defaultValue={layer}\n placeholder={'select layer'}\n onChange={(e) => {\n setLayer(e);\n onChange(e);\n }}\n >\n {layers?.length ? (\n layers?.map((e) => {\n return (\n <Select.Option key={e} label={e} value={e}>\n {e}\n </Select.Option>\n );\n })\n ) : (\n <></>\n )}\n </Select>\n </Input.Group>\n );\n};\n\nexport const LoaderCommonSelect: React.FC<{\n onChange(value: ISelectLoaderProps): void;\n loaderNames: string[];\n}> = ({ onChange, loaderNames }) => {\n const [selectLoaders, setSelectLoaders] = useState<string[]>([]);\n const [filename, setFilename] = useState('');\n const [layer, setLayer] = useState('');\n\n useEffect(() => {\n onChange({ loaders: selectLoaders, filename, layer });\n }, [selectLoaders, filename, layer]);\n\n return (\n <Row style={{ marginBottom: Size.BasePadding, marginLeft: 10 }}>\n <Col>\n <LoaderNamesSelect\n loaderNames={loaderNames}\n style={{ marginRight: Size.BasePadding }}\n onChange={(e) => {\n setSelectLoaders(e);\n }}\n />\n </Col>\n <Col>\n <KeywordInput\n icon={<FileSearchOutlined />}\n style={{ marginRight: Size.BasePadding }}\n label=\"Filename\"\n placeholder=\"search filename by keyword\"\n onChange={(e) => {\n setFilename(e);\n }}\n />\n </Col>\n <Col>\n <ServerAPIProvider api={SDK.ServerAPI.API.GetLayers}>\n {(layers) =>\n layers.length ? (\n <LoaderLayerSelect\n layers={layers}\n onChange={(e) => {\n setLayer(e);\n }}\n />\n ) : (\n <></>\n )\n }\n </ServerAPIProvider>\n </Col>\n </Row>\n );\n};\n"],"names":["LoaderNamesSelect","style","onChange","loaderNames","selectLoaders","setSelectLoaders","useState","labelStyle","Input","Button","SelectOutlined","Typography","Select","e","LoaderLayerSelect","layers","layer","setLayer","LoaderCommonSelect","filename","setFilename","useEffect","Row","Size","Col","KeywordInput","FileSearchOutlined","ServerAPIProvider","SDK"],"mappings":";;;;;;;;;AAqBO,MAAMA,oBAAsD,CAAC,EAClEC,KAAK,EACLC,QAAQ,EACRC,WAAW,EACZ;IACC,MAAM,CAACC,eAAeC,iBAAiB,GAAGC,SAAS,EAAE;IAErD,MAAMC,aAAkC;QAAE,OAAO;IAAI;IAErD,OAAO,WAAP,GACE,KAACC,MAAM,KAAK;QAAC,SAAO;QAAC,OAAOP;;0BAC1B,KAACQ,QAAMA;gBAAC,OAAOF;;kCACb,IAACG,gBAAcA,CAAAA;kCACf,IAACC,WAAW,IAAI;kCAAC;;;;0BAEnB,IAACC,QAAMA;gBACL,MAAK;gBACL,YAAU;gBACV,cAAcR;gBACd,WAAU;gBACV,OAAO;oBAAE,OAAO;gBAAI;gBACpB,uBAAuB;gBACvB,aAAa;gBACb,UAAU,CAACS;oBACTR,iBAAiBQ;oBACjBX,SAASW;gBACX;0BAECV,YAAY,GAAG,CAAC,CAACU,IACT,WAAP,GACE,IAACD,OAAO,MAAM;wBAAS,OAAOC;wBAAG,OAAOA;kCACrCA;uBADiBA;;;;AAQhC;AAEA,MAAMC,oBAGD,CAAC,EAAEZ,QAAQ,EAAEa,MAAM,EAAE;IACxB,MAAM,CAACC,OAAOC,SAAS,GAAGX,SAAS;IACnC,MAAMC,aAAkC;QAAE,OAAO;IAAI;IAErD,OAAO,WAAP,GACE,KAACC,MAAM,KAAK;QAAC,SAAO;;0BAClB,KAACC,QAAMA;gBAAC,OAAOF;;kCACb,IAACG,gBAAcA,CAAAA;kCACf,IAACC,WAAW,IAAI;kCAAC;;;;0BAEnB,IAACC,QAAMA;gBACL,YAAU;gBACV,WAAU;gBACV,OAAO;oBAAE,OAAO;gBAAI;gBACpB,cAAcI;gBACd,aAAa;gBACb,UAAU,CAACH;oBACTI,SAASJ;oBACTX,SAASW;gBACX;0BAECE,QAAQ,SACPA,QAAQ,IAAI,CAACF,IACJ,WAAP,GACE,IAACD,OAAO,MAAM;wBAAS,OAAOC;wBAAG,OAAOA;kCACrCA;uBADiBA,MAIxB,cAEA;;;;AAKV;AAEO,MAAMK,qBAGR,CAAC,EAAEhB,QAAQ,EAAEC,WAAW,EAAE;IAC7B,MAAM,CAACC,eAAeC,iBAAiB,GAAGC,SAAmB,EAAE;IAC/D,MAAM,CAACa,UAAUC,YAAY,GAAGd,SAAS;IACzC,MAAM,CAACU,OAAOC,SAAS,GAAGX,SAAS;IAEnCe,UAAU;QACRnB,SAAS;YAAE,SAASE;YAAee;YAAUH;QAAM;IACrD,GAAG;QAACZ;QAAee;QAAUH;KAAM;IAEnC,OAAO,WAAP,GACE,KAACM,KAAGA;QAAC,OAAO;YAAE,cAAcC,KAAK,WAAW;YAAE,YAAY;QAAG;;0BAC3D,IAACC,KAAGA;0BACF,kBAACxB,
|
|
1
|
+
{"version":3,"file":"components/Select/index.mjs","sources":["../../../src/components/Select/index.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport { Button, Col, Input, Row, Select, Typography } from 'antd';\nimport { FileSearchOutlined, SelectOutlined } from '@ant-design/icons';\nimport { KeywordInput } from '../Form/keyword';\nimport { Size } from 'src/constants';\nimport { ServerAPIProvider } from '../Manifest';\nimport { SDK } from '@rsdoctor/types';\nimport './index.scss';\n\ninterface LoaderNamesSelectProps {\n style?: React.CSSProperties;\n onChange: (loaders: string[]) => void;\n loaderNames: string[];\n}\n\nexport type ISelectLoaderProps = {\n loaders: string[];\n filename: string;\n layer?: string;\n};\n\nexport const LoaderNamesSelect: React.FC<LoaderNamesSelectProps> = ({\n style,\n onChange,\n loaderNames,\n}) => {\n const [selectLoaders, setSelectLoaders] = useState([]);\n\n const labelStyle: React.CSSProperties = { width: 120 };\n\n return (\n <Input.Group compact style={style}>\n <Button style={labelStyle}>\n <SelectOutlined />\n <Typography.Text>Loaders</Typography.Text>\n </Button>\n <Select\n mode=\"multiple\"\n allowClear\n defaultValue={selectLoaders}\n className=\"loader-select\"\n style={{ width: 300 }}\n popupMatchSelectWidth={300}\n placeholder={'select loaders'}\n onChange={(e) => {\n setSelectLoaders(e);\n onChange(e);\n }}\n >\n {loaderNames.map((e) => {\n return (\n <Select.Option key={e} label={e} value={e}>\n {e}\n </Select.Option>\n );\n })}\n </Select>\n </Input.Group>\n );\n};\n\nconst LoaderLayerSelect: React.FC<{\n onChange(value: string): void;\n layers: string[];\n}> = ({ onChange, layers }) => {\n const [layer, setLayer] = useState('');\n const labelStyle: React.CSSProperties = { width: 120 };\n\n return (\n <Input.Group compact>\n <Button style={labelStyle}>\n <SelectOutlined />\n <Typography.Text>Layers</Typography.Text>\n </Button>\n <Select\n allowClear\n className=\"layer-select\"\n style={{ width: 150 }}\n defaultValue={layer}\n placeholder={'select layer'}\n onChange={(e) => {\n setLayer(e);\n onChange(e);\n }}\n >\n {layers?.length ? (\n layers?.map((e) => {\n return (\n <Select.Option key={e} label={e} value={e}>\n {e}\n </Select.Option>\n );\n })\n ) : (\n <></>\n )}\n </Select>\n </Input.Group>\n );\n};\n\nexport const LoaderCommonSelect: React.FC<{\n onChange(value: ISelectLoaderProps): void;\n loaderNames: string[];\n}> = ({ onChange, loaderNames }) => {\n const [selectLoaders, setSelectLoaders] = useState<string[]>([]);\n const [filename, setFilename] = useState('');\n const [layer, setLayer] = useState('');\n\n useEffect(() => {\n onChange({ loaders: selectLoaders, filename, layer });\n }, [selectLoaders, filename, layer]);\n\n return (\n <Row style={{ marginBottom: Size.BasePadding, marginLeft: 10 }}>\n <Col>\n <LoaderNamesSelect\n loaderNames={loaderNames}\n style={{ marginRight: Size.BasePadding }}\n onChange={(e) => {\n setSelectLoaders(e);\n }}\n />\n </Col>\n <Col>\n <KeywordInput\n icon={<FileSearchOutlined />}\n style={{ marginRight: Size.BasePadding }}\n label=\"Filename\"\n placeholder=\"search filename by keyword\"\n onChange={(e) => {\n setFilename(e);\n }}\n />\n </Col>\n <Col>\n <ServerAPIProvider api={SDK.ServerAPI.API.GetLayers}>\n {(layers) =>\n layers.length ? (\n <LoaderLayerSelect\n layers={layers}\n onChange={(e) => {\n setLayer(e);\n }}\n />\n ) : (\n <></>\n )\n }\n </ServerAPIProvider>\n </Col>\n </Row>\n );\n};\n"],"names":["LoaderNamesSelect","style","onChange","loaderNames","selectLoaders","setSelectLoaders","useState","labelStyle","Input","Button","SelectOutlined","Typography","Select","e","LoaderLayerSelect","layers","layer","setLayer","LoaderCommonSelect","filename","setFilename","useEffect","Row","Size","Col","KeywordInput","FileSearchOutlined","ServerAPIProvider","SDK"],"mappings":";;;;;;;;;AAqBO,MAAMA,oBAAsD,CAAC,EAClEC,KAAK,EACLC,QAAQ,EACRC,WAAW,EACZ;IACC,MAAM,CAACC,eAAeC,iBAAiB,GAAGC,SAAS,EAAE;IAErD,MAAMC,aAAkC;QAAE,OAAO;IAAI;IAErD,OAAO,WAAP,GACE,KAACC,MAAM,KAAK;QAAC,SAAO;QAAC,OAAOP;;0BAC1B,KAACQ,QAAMA;gBAAC,OAAOF;;kCACb,IAACG,gBAAcA,CAAAA;kCACf,IAACC,WAAW,IAAI;kCAAC;;;;0BAEnB,IAACC,QAAMA;gBACL,MAAK;gBACL,YAAU;gBACV,cAAcR;gBACd,WAAU;gBACV,OAAO;oBAAE,OAAO;gBAAI;gBACpB,uBAAuB;gBACvB,aAAa;gBACb,UAAU,CAACS;oBACTR,iBAAiBQ;oBACjBX,SAASW;gBACX;0BAECV,YAAY,GAAG,CAAC,CAACU,IACT,WAAP,GACE,IAACD,OAAO,MAAM;wBAAS,OAAOC;wBAAG,OAAOA;kCACrCA;uBADiBA;;;;AAQhC;AAEA,MAAMC,oBAGD,CAAC,EAAEZ,QAAQ,EAAEa,MAAM,EAAE;IACxB,MAAM,CAACC,OAAOC,SAAS,GAAGX,SAAS;IACnC,MAAMC,aAAkC;QAAE,OAAO;IAAI;IAErD,OAAO,WAAP,GACE,KAACC,MAAM,KAAK;QAAC,SAAO;;0BAClB,KAACC,QAAMA;gBAAC,OAAOF;;kCACb,IAACG,gBAAcA,CAAAA;kCACf,IAACC,WAAW,IAAI;kCAAC;;;;0BAEnB,IAACC,QAAMA;gBACL,YAAU;gBACV,WAAU;gBACV,OAAO;oBAAE,OAAO;gBAAI;gBACpB,cAAcI;gBACd,aAAa;gBACb,UAAU,CAACH;oBACTI,SAASJ;oBACTX,SAASW;gBACX;0BAECE,QAAQ,SACPA,QAAQ,IAAI,CAACF,IACJ,WAAP,GACE,IAACD,OAAO,MAAM;wBAAS,OAAOC;wBAAG,OAAOA;kCACrCA;uBADiBA,MAIxB,cAEA;;;;AAKV;AAEO,MAAMK,qBAGR,CAAC,EAAEhB,QAAQ,EAAEC,WAAW,EAAE;IAC7B,MAAM,CAACC,eAAeC,iBAAiB,GAAGC,SAAmB,EAAE;IAC/D,MAAM,CAACa,UAAUC,YAAY,GAAGd,SAAS;IACzC,MAAM,CAACU,OAAOC,SAAS,GAAGX,SAAS;IAEnCe,UAAU;QACRnB,SAAS;YAAE,SAASE;YAAee;YAAUH;QAAM;IACrD,GAAG;QAACZ;QAAee;QAAUH;KAAM;IAEnC,OAAO,WAAP,GACE,KAACM,KAAGA;QAAC,OAAO;YAAE,cAAcC,KAAK,WAAW;YAAE,YAAY;QAAG;;0BAC3D,IAACC,KAAGA;0BACF,kBAACxB,mBAAiBA;oBAChB,aAAaG;oBACb,OAAO;wBAAE,aAAaoB,KAAK,WAAW;oBAAC;oBACvC,UAAU,CAACV;wBACTR,iBAAiBQ;oBACnB;;;0BAGJ,IAACW,KAAGA;0BACF,kBAACC,cAAYA;oBACX,oBAAM,IAACC,oBAAkBA,CAAAA;oBACzB,OAAO;wBAAE,aAAaH,KAAK,WAAW;oBAAC;oBACvC,OAAM;oBACN,aAAY;oBACZ,UAAU,CAACV;wBACTO,YAAYP;oBACd;;;0BAGJ,IAACW,KAAGA;0BACF,kBAACG,mBAAiBA;oBAAC,KAAKC,IAAI,SAAS,CAAC,GAAG,CAAC,SAAS;8BAChD,CAACb,SACAA,OAAO,MAAM,GAAG,WAAH,GACX,IAACD,mBAAiBA;4BAChB,QAAQC;4BACR,UAAU,CAACF;gCACTI,SAASJ;4BACX;2CAGF;;;;;AAOd"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components/Status/failed.mjs","sources":["../../../src/components/Status/failed.tsx"],"sourcesContent":["import { Common } from '@rsdoctor/types';\nimport { Button, Empty, Space, Typography } from 'antd';\nimport React from 'react';\n\ninterface FailedStatusProps {\n title?: string;\n buttonText?: string;\n retry: Common.Function;\n}\n\nconst defaultTitle = 'Load data failed, please try again';\nconst defaultButtonText = 'retry';\n\nconst FailedStatusComponent: React.FC<FailedStatusProps> = ({\n title = defaultTitle,\n buttonText = defaultButtonText,\n retry,\n}) => {\n return (\n <Empty\n description={\n <Space direction=\"vertical\">\n <Typography.Text>{title}</Typography.Text>\n <Button\n type=\"primary\"\n onClick={() => {\n retry();\n }}\n >\n {buttonText}\n </Button>\n </Space>\n }\n />\n );\n};\n\nexport const FailedStatus = React.memo(FailedStatusComponent);\n"],"names":["defaultTitle","defaultButtonText","FailedStatusComponent","title","buttonText","retry","Empty","Space","Typography","Button","FailedStatus","React"],"mappings":";;;AAUA,MAAMA,eAAe;AACrB,MAAMC,oBAAoB;AAE1B,MAAMC,wBAAqD,CAAC,EAC1DC,QAAQH,YAAY,EACpBI,aAAaH,iBAAiB,EAC9BI,KAAK,EACN,GACQ,WAAP,GACE,IAACC,OAAKA;QACJ,2BACE,KAACC,OAAKA;YAAC,WAAU;;8BACf,IAACC,WAAW,IAAI;8BAAEL;;8BAClB,IAACM,QAAMA;oBACL,MAAK;oBACL,SAAS;wBACPJ;oBACF;8BAECD;;;;;AAQN,MAAMM,eAAe,
|
|
1
|
+
{"version":3,"file":"components/Status/failed.mjs","sources":["../../../src/components/Status/failed.tsx"],"sourcesContent":["import { Common } from '@rsdoctor/types';\nimport { Button, Empty, Space, Typography } from 'antd';\nimport React from 'react';\n\ninterface FailedStatusProps {\n title?: string;\n buttonText?: string;\n retry: Common.Function;\n}\n\nconst defaultTitle = 'Load data failed, please try again';\nconst defaultButtonText = 'retry';\n\nconst FailedStatusComponent: React.FC<FailedStatusProps> = ({\n title = defaultTitle,\n buttonText = defaultButtonText,\n retry,\n}) => {\n return (\n <Empty\n description={\n <Space direction=\"vertical\">\n <Typography.Text>{title}</Typography.Text>\n <Button\n type=\"primary\"\n onClick={() => {\n retry();\n }}\n >\n {buttonText}\n </Button>\n </Space>\n }\n />\n );\n};\n\nexport const FailedStatus = React.memo(FailedStatusComponent);\n"],"names":["defaultTitle","defaultButtonText","FailedStatusComponent","title","buttonText","retry","Empty","Space","Typography","Button","FailedStatus","React"],"mappings":";;;AAUA,MAAMA,eAAe;AACrB,MAAMC,oBAAoB;AAE1B,MAAMC,wBAAqD,CAAC,EAC1DC,QAAQH,YAAY,EACpBI,aAAaH,iBAAiB,EAC9BI,KAAK,EACN,GACQ,WAAP,GACE,IAACC,OAAKA;QACJ,2BACE,KAACC,OAAKA;YAAC,WAAU;;8BACf,IAACC,WAAW,IAAI;8BAAEL;;8BAClB,IAACM,QAAMA;oBACL,MAAK;oBACL,SAAS;wBACPJ;oBACF;8BAECD;;;;;AAQN,MAAMM,eAAe,WAAHA,GAAGC,MAAAA,IAAU,CAACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components/TextDrawer/duplicate.mjs","sources":["../../../src/components/TextDrawer/duplicate.tsx"],"sourcesContent":["import { Col, Row, Space, Tooltip, Typography } from 'antd';\nimport React from 'react';\nimport { Rule, SDK } from '@rsdoctor/types';\nimport { ExceptionOutlined } from '@ant-design/icons';\nimport { Alerts } from '@rsdoctor/utils/common';\nimport { Size } from '../../constants';\nimport { TextDrawer, TextDrawerProps } from './index';\nimport {\n PackageRelationAlert,\n PackageRelationReasons,\n PackageRelationReasonsWithServer,\n} from '../Alert/package-relation';\nimport { PackageRelationAlertProps } from '../Alert/types';\nimport { ServerAPIProvider } from '../Manifest';\n\ninterface DuplicatePackageDrawerContentProps extends Omit<TextDrawerProps, 'text'> {\n duplicatePackages: Rule.PackageRelationDiffRuleStoreData[];\n cwd: string;\n textStyle?: React.CSSProperties;\n children: PackageRelationAlertProps['getPackageRelationContentComponent'];\n}\n\ninterface DuplicatePackageDrawerProps extends Omit<DuplicatePackageDrawerContentProps, 'children'> {\n moduleGraph: Pick<SDK.ModuleGraphData, 'dependencies' | 'modules'>;\n moduleCodeMap: SDK.ModuleCodeData;\n}\n\nconst DuplicatePackageDrawerContent: React.FC<DuplicatePackageDrawerContentProps> = ({\n duplicatePackages = [],\n cwd,\n children,\n ...props\n}) => {\n return (\n <TextDrawer\n {...props}\n buttonStyle={{ fontSize: 'inherit', ...props.buttonStyle }}\n buttonProps={{ type: 'text', ...props.buttonProps }}\n text={\n <Tooltip title=\"Click to show the details of duplicate packages\">\n <Space style={{ fontSize: 'inherit' }}>\n <Typography.Text strong style={{ fontSize: 'inherit', color: 'inherit', ...props.textStyle }}>\n {duplicatePackages.length}\n </Typography.Text>\n <ExceptionOutlined />\n </Space>\n </Tooltip>\n }\n drawerProps={{ title: 'Duplicate Packages Viewer', ...props.drawerProps }}\n >\n <Row gutter={[Size.BasePadding, Size.BasePadding]}>\n {duplicatePackages.map((err, i) => {\n return (\n <Col span={24} key={i}>\n <PackageRelationAlert data={err} cwd={cwd} getPackageRelationContentComponent={children} />\n </Col>\n );\n })}\n </Row>\n </TextDrawer>\n );\n};\n\nexport const DuplicatePackageDrawer: React.FC<DuplicatePackageDrawerProps> = ({ moduleGraph, ...props }) => {\n return (\n <DuplicatePackageDrawerContent {...props}>\n {(res) => {\n return (\n <ServerAPIProvider\n api={SDK.ServerAPI.API.GetModuleCodeByModuleIds}\n body={{ moduleIds: moduleGraph.modules.map((mod) => mod.id) }}\n >\n {(moduleCodes) => (\n <PackageRelationReasons\n data={Alerts.getPackageRelationAlertDetails(\n moduleGraph.modules,\n moduleGraph.dependencies,\n props.cwd,\n res.package.dependencies,\n moduleCodes,\n )}\n cwd={props.cwd}\n />\n )}\n </ServerAPIProvider>\n );\n }}\n </DuplicatePackageDrawerContent>\n );\n};\n\nexport const DuplicatePackageDrawerWithServer: React.FC<Omit<DuplicatePackageDrawerContentProps, 'children'>> = (\n props,\n) => {\n return (\n <DuplicatePackageDrawerContent {...props}>\n {(res) => {\n return (\n <PackageRelationReasonsWithServer body={{ id: res.data.id, target: res.package.target }} cwd={props.cwd} />\n );\n }}\n </DuplicatePackageDrawerContent>\n );\n};\n"],"names":["DuplicatePackageDrawerContent","duplicatePackages","cwd","children","props","TextDrawer","Tooltip","Space","Typography","ExceptionOutlined","Row","Size","err","i","Col","PackageRelationAlert","DuplicatePackageDrawer","moduleGraph","res","ServerAPIProvider","SDK","mod","moduleCodes","PackageRelationReasons","Alerts","DuplicatePackageDrawerWithServer","PackageRelationReasonsWithServer"],"mappings":";;;;;;;;;;AA2BA,MAAMA,gCAA8E,CAAC,EACnFC,oBAAoB,EAAE,EACtBC,GAAG,EACHC,QAAQ,EACR,GAAGC,OACJ,GACQ,WAAP,GACE,IAACC,YAAUA;QACR,GAAGD,KAAK;QACT,aAAa;YAAE,UAAU;YAAW,GAAGA,MAAM,WAAW;QAAC;QACzD,aAAa;YAAE,MAAM;YAAQ,GAAGA,MAAM,WAAW;QAAC;QAClD,oBACE,IAACE,SAAOA;YAAC,OAAM;sBACb,mBAACC,OAAKA;gBAAC,OAAO;oBAAE,UAAU;gBAAU;;kCAClC,IAACC,WAAW,IAAI;wBAAC,QAAM;wBAAC,OAAO;4BAAE,UAAU;4BAAW,OAAO;4BAAW,GAAGJ,MAAM,SAAS;wBAAC;kCACxFH,kBAAkB,MAAM;;kCAE3B,IAACQ,mBAAiBA,CAAAA;;;;QAIxB,aAAa;YAAE,OAAO;YAA6B,GAAGL,MAAM,WAAW;QAAC;kBAExE,kBAACM,KAAGA;YAAC,QAAQ;gBAACC,KAAK,WAAW;gBAAEA,KAAK,WAAW;aAAC;sBAC9CV,kBAAkB,GAAG,CAAC,CAACW,KAAKC,IACpB,WAAP,GACE,IAACC,KAAGA;oBAAC,MAAM;8BACT,kBAACC,sBAAoBA;wBAAC,MAAMH;wBAAK,KAAKV;wBAAK,oCAAoCC;;mBAD7DU;;;AAUzB,MAAMG,yBAAgE,CAAC,EAAEC,WAAW,EAAE,GAAGb,OAAO,GAC9F,WAAP,GACE,IAACJ,+
|
|
1
|
+
{"version":3,"file":"components/TextDrawer/duplicate.mjs","sources":["../../../src/components/TextDrawer/duplicate.tsx"],"sourcesContent":["import { Col, Row, Space, Tooltip, Typography } from 'antd';\nimport React from 'react';\nimport { Rule, SDK } from '@rsdoctor/types';\nimport { ExceptionOutlined } from '@ant-design/icons';\nimport { Alerts } from '@rsdoctor/utils/common';\nimport { Size } from '../../constants';\nimport { TextDrawer, TextDrawerProps } from './index';\nimport {\n PackageRelationAlert,\n PackageRelationReasons,\n PackageRelationReasonsWithServer,\n} from '../Alert/package-relation';\nimport { PackageRelationAlertProps } from '../Alert/types';\nimport { ServerAPIProvider } from '../Manifest';\n\ninterface DuplicatePackageDrawerContentProps extends Omit<TextDrawerProps, 'text'> {\n duplicatePackages: Rule.PackageRelationDiffRuleStoreData[];\n cwd: string;\n textStyle?: React.CSSProperties;\n children: PackageRelationAlertProps['getPackageRelationContentComponent'];\n}\n\ninterface DuplicatePackageDrawerProps extends Omit<DuplicatePackageDrawerContentProps, 'children'> {\n moduleGraph: Pick<SDK.ModuleGraphData, 'dependencies' | 'modules'>;\n moduleCodeMap: SDK.ModuleCodeData;\n}\n\nconst DuplicatePackageDrawerContent: React.FC<DuplicatePackageDrawerContentProps> = ({\n duplicatePackages = [],\n cwd,\n children,\n ...props\n}) => {\n return (\n <TextDrawer\n {...props}\n buttonStyle={{ fontSize: 'inherit', ...props.buttonStyle }}\n buttonProps={{ type: 'text', ...props.buttonProps }}\n text={\n <Tooltip title=\"Click to show the details of duplicate packages\">\n <Space style={{ fontSize: 'inherit' }}>\n <Typography.Text strong style={{ fontSize: 'inherit', color: 'inherit', ...props.textStyle }}>\n {duplicatePackages.length}\n </Typography.Text>\n <ExceptionOutlined />\n </Space>\n </Tooltip>\n }\n drawerProps={{ title: 'Duplicate Packages Viewer', ...props.drawerProps }}\n >\n <Row gutter={[Size.BasePadding, Size.BasePadding]}>\n {duplicatePackages.map((err, i) => {\n return (\n <Col span={24} key={i}>\n <PackageRelationAlert data={err} cwd={cwd} getPackageRelationContentComponent={children} />\n </Col>\n );\n })}\n </Row>\n </TextDrawer>\n );\n};\n\nexport const DuplicatePackageDrawer: React.FC<DuplicatePackageDrawerProps> = ({ moduleGraph, ...props }) => {\n return (\n <DuplicatePackageDrawerContent {...props}>\n {(res) => {\n return (\n <ServerAPIProvider\n api={SDK.ServerAPI.API.GetModuleCodeByModuleIds}\n body={{ moduleIds: moduleGraph.modules.map((mod) => mod.id) }}\n >\n {(moduleCodes) => (\n <PackageRelationReasons\n data={Alerts.getPackageRelationAlertDetails(\n moduleGraph.modules,\n moduleGraph.dependencies,\n props.cwd,\n res.package.dependencies,\n moduleCodes,\n )}\n cwd={props.cwd}\n />\n )}\n </ServerAPIProvider>\n );\n }}\n </DuplicatePackageDrawerContent>\n );\n};\n\nexport const DuplicatePackageDrawerWithServer: React.FC<Omit<DuplicatePackageDrawerContentProps, 'children'>> = (\n props,\n) => {\n return (\n <DuplicatePackageDrawerContent {...props}>\n {(res) => {\n return (\n <PackageRelationReasonsWithServer body={{ id: res.data.id, target: res.package.target }} cwd={props.cwd} />\n );\n }}\n </DuplicatePackageDrawerContent>\n );\n};\n"],"names":["DuplicatePackageDrawerContent","duplicatePackages","cwd","children","props","TextDrawer","Tooltip","Space","Typography","ExceptionOutlined","Row","Size","err","i","Col","PackageRelationAlert","DuplicatePackageDrawer","moduleGraph","res","ServerAPIProvider","SDK","mod","moduleCodes","PackageRelationReasons","Alerts","DuplicatePackageDrawerWithServer","PackageRelationReasonsWithServer"],"mappings":";;;;;;;;;;AA2BA,MAAMA,gCAA8E,CAAC,EACnFC,oBAAoB,EAAE,EACtBC,GAAG,EACHC,QAAQ,EACR,GAAGC,OACJ,GACQ,WAAP,GACE,IAACC,YAAUA;QACR,GAAGD,KAAK;QACT,aAAa;YAAE,UAAU;YAAW,GAAGA,MAAM,WAAW;QAAC;QACzD,aAAa;YAAE,MAAM;YAAQ,GAAGA,MAAM,WAAW;QAAC;QAClD,oBACE,IAACE,SAAOA;YAAC,OAAM;sBACb,mBAACC,OAAKA;gBAAC,OAAO;oBAAE,UAAU;gBAAU;;kCAClC,IAACC,WAAW,IAAI;wBAAC,QAAM;wBAAC,OAAO;4BAAE,UAAU;4BAAW,OAAO;4BAAW,GAAGJ,MAAM,SAAS;wBAAC;kCACxFH,kBAAkB,MAAM;;kCAE3B,IAACQ,mBAAiBA,CAAAA;;;;QAIxB,aAAa;YAAE,OAAO;YAA6B,GAAGL,MAAM,WAAW;QAAC;kBAExE,kBAACM,KAAGA;YAAC,QAAQ;gBAACC,KAAK,WAAW;gBAAEA,KAAK,WAAW;aAAC;sBAC9CV,kBAAkB,GAAG,CAAC,CAACW,KAAKC,IACpB,WAAP,GACE,IAACC,KAAGA;oBAAC,MAAM;8BACT,kBAACC,sBAAoBA;wBAAC,MAAMH;wBAAK,KAAKV;wBAAK,oCAAoCC;;mBAD7DU;;;AAUzB,MAAMG,yBAAgE,CAAC,EAAEC,WAAW,EAAE,GAAGb,OAAO,GAC9F,WAAP,GACE,IAACJ,+BAA6BA;QAAE,GAAGI,KAAK;kBACrC,CAACc,MACO,WAAP,GACE,IAACC,mBAAiBA;gBAChB,KAAKC,IAAI,SAAS,CAAC,GAAG,CAAC,wBAAwB;gBAC/C,MAAM;oBAAE,WAAWH,YAAY,OAAO,CAAC,GAAG,CAAC,CAACI,MAAQA,IAAI,EAAE;gBAAE;0BAE3D,CAACC,cAAAA,WAAAA,GACA,IAACC,wBAAsBA;wBACrB,MAAMC,OAAO,8BAA8B,CACzCP,YAAY,OAAO,EACnBA,YAAY,YAAY,EACxBb,MAAM,GAAG,EACTc,IAAI,OAAO,CAAC,YAAY,EACxBI;wBAEF,KAAKlB,MAAM,GAAG;;;;AAUvB,MAAMqB,mCAAmG,CAC9GrB,QAEO,WAAP,GACE,IAACJ,+BAA6BA;QAAE,GAAGI,KAAK;kBACrC,CAACc,MACO,WAAP,GACE,IAACQ,kCAAgCA;gBAAC,MAAM;oBAAE,IAAIR,IAAI,IAAI,CAAC,EAAE;oBAAE,QAAQA,IAAI,OAAO,CAAC,MAAM;gBAAC;gBAAG,KAAKd,MAAM,GAAG"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
export * from "./duplicate.mjs";
|
|
1
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
3
|
import { CodeOutlined } from "@ant-design/icons";
|
|
3
4
|
import { Button, Drawer } from "antd";
|
|
4
5
|
import { useState } from "react";
|
|
5
|
-
export * from "./duplicate.mjs";
|
|
6
6
|
const TextDrawer = (props)=>{
|
|
7
7
|
const [visible, setVisible] = useState(false);
|
|
8
8
|
return /*#__PURE__*/ jsxs("div", {
|
|
@@ -6,7 +6,6 @@ import { defineMonacoOptions, editorShowRange, getFileName, getFilePathFormat }
|
|
|
6
6
|
import { Checkbox } from "antd";
|
|
7
7
|
import index_module from "./index.module.mjs";
|
|
8
8
|
import { Lodash } from "@rsdoctor/utils/common";
|
|
9
|
-
import { useCodeDrawer } from "./useCodeDrawer.mjs";
|
|
10
9
|
function CodeViewer({ className, style, code = '', lang, filePath = '', defaultLine, ranges, isEmbed = false, headerVisible = true, isLightTheme = true, formatOnMount = false }) {
|
|
11
10
|
const editor = useRef();
|
|
12
11
|
const monaco = useRef();
|
|
@@ -80,6 +79,7 @@ function CodeViewer({ className, style, code = '', lang, filePath = '', defaultL
|
|
|
80
79
|
]
|
|
81
80
|
});
|
|
82
81
|
}
|
|
83
|
-
export {
|
|
82
|
+
export { useCodeDrawer } from "./useCodeDrawer.mjs";
|
|
83
|
+
export { CodeViewer, defineMonacoOptions };
|
|
84
84
|
|
|
85
85
|
//# sourceMappingURL=index.mjs.map
|