@rsdoctor/components 1.2.3 → 1.2.4-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Alerts/collapse-cross-chunks.mjs +1 -1
- package/dist/components/Alerts/collapse-cross-chunks.mjs.map +1 -1
- package/dist/components/Alerts/collapse.mjs +1 -1
- package/dist/components/Alerts/collapse.mjs.map +1 -1
- package/dist/components/Layout/header.d.ts +4 -1
- package/dist/components/Layout/header.mjs +3 -3
- package/dist/components/Layout/header.mjs.map +1 -1
- package/dist/components/Layout/index.mjs +13 -3
- package/dist/components/Layout/index.mjs.map +1 -1
- package/dist/components/Layout/menus.mjs +4 -2
- package/dist/components/Layout/menus.mjs.map +1 -1
- package/dist/pages/Resources/BundleDiff/DiffContainer/modules.mjs +2 -2
- package/dist/pages/Resources/BundleDiff/DiffContainer/modules.mjs.map +1 -1
- package/dist/pages/Uploader/constants.d.ts +3 -0
- package/dist/pages/Uploader/constants.mjs +6 -0
- package/dist/pages/Uploader/constants.mjs.map +1 -0
- package/dist/pages/Uploader/index.d.ts +3 -0
- package/dist/pages/Uploader/index.mjs +73 -0
- package/dist/pages/Uploader/index.mjs.map +1 -0
- package/dist/pages/Uploader/utils.d.ts +3 -0
- package/dist/pages/Uploader/utils.mjs +45 -0
- package/dist/pages/Uploader/utils.mjs.map +1 -0
- package/dist/pages/index.d.ts +1 -0
- package/dist/pages/index.mjs +2 -1
- package/dist/utils/data/brief.d.ts +1 -0
- package/dist/utils/data/brief.mjs +11 -2
- package/dist/utils/data/brief.mjs.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.mjs +1 -0
- package/dist/utils/stats.d.ts +3 -0
- package/dist/utils/stats.mjs +43 -0
- package/dist/utils/stats.mjs.map +1 -0
- package/dist/utils/url.d.ts +2 -1
- package/dist/utils/url.mjs +29 -4
- package/dist/utils/url.mjs.map +1 -1
- package/package.json +14 -15
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components/Alerts/collapse-cross-chunks.mjs","sources":["webpack://@rsdoctor/components/./src/components/Alerts/collapse-cross-chunks.tsx"],"sourcesContent":["import Icon from '@ant-design/icons';\nimport { Collapse, Space, Tag, Typography } from 'antd';\nimport { ReactNode } from 'react';\n\nimport Overview from '../Overall/overview';\nimport styles from './collapse.module.scss';\nimport TotalSizeSvg from '../../common/svg/total-size.svg';\n\nimport type { Rule } from '@rsdoctor/types';\nimport type { AlertProps } from '../Alert/types';\n\nconst { Text } = Typography;\nconst { innerWidth } = window;\n\nconst LabelComponent = (props: {\n title: string | ReactNode;\n description: string;\n extra?: ReactNode;\n}) => {\n const { title, description, extra } = props;\n return (\n <div className={styles.label}>\n <div className={styles.labelContent}>\n <div>{title}</div>\n <div>{description}</div>\n </div>\n <div>{extra}</div>\n </div>\n );\n};\n\nexport const CrossChunksAlertCollapse = (props: {\n data: Array<Rule.RuleStoreDataItem>;\n extraData: Omit<AlertProps, 'data'>;\n}) => {\n const { data } = props;\n\n const items = data.map((d) => {\n const { package: dupPackage, chunks } =\n d as Rule.CrossChunksPackageRuleStoreData;\n\n const ChildComponent = () => {\n return chunks.map(({ chunks, module }) => {\n return (\n <div className={styles.collapseContainer}>\n <Overview\n style={{ backgroundColor: '#fff' }}\n title={\n <Space>\n <Icon style={{ fontSize: '18px' }} component={TotalSizeSvg} />\n <Text style={{ width: innerWidth > 1500 ? 900 : 700 }}>\n Module:{' '}\n <Text\n style={{\n fontSize: 12,\n color: 'rgba(28, 31, 35, 0.6)',\n fontWeight: 300,\n }}\n >\n {module.path}\n </Text>\n </Text>\n </Space>\n }\n description={\n <div className={styles.collapseChild}>\n {chunks.map((chunk) => (\n <div style={{ display: 'flex' }}>\n <div className={styles.attribute}>Chunk</div>\n <div className={styles.iconContainer}>\n <span className={styles.data}>{chunk.name}</span>\n </div>\n </div>\n ))}\n </div>\n }\n />\n </div>\n );\n });\n };\n\n return {\n key:
|
|
1
|
+
{"version":3,"file":"components/Alerts/collapse-cross-chunks.mjs","sources":["webpack://@rsdoctor/components/./src/components/Alerts/collapse-cross-chunks.tsx"],"sourcesContent":["import Icon from '@ant-design/icons';\nimport { Collapse, Space, Tag, Typography } from 'antd';\nimport { ReactNode } from 'react';\n\nimport Overview from '../Overall/overview';\nimport styles from './collapse.module.scss';\nimport TotalSizeSvg from '../../common/svg/total-size.svg';\n\nimport type { Rule } from '@rsdoctor/types';\nimport type { AlertProps } from '../Alert/types';\n\nconst { Text } = Typography;\nconst { innerWidth } = window;\n\nconst LabelComponent = (props: {\n title: string | ReactNode;\n description: string;\n extra?: ReactNode;\n}) => {\n const { title, description, extra } = props;\n return (\n <div className={styles.label}>\n <div className={styles.labelContent}>\n <div>{title}</div>\n <div>{description}</div>\n </div>\n <div>{extra}</div>\n </div>\n );\n};\n\nexport const CrossChunksAlertCollapse = (props: {\n data: Array<Rule.RuleStoreDataItem>;\n extraData: Omit<AlertProps, 'data'>;\n}) => {\n const { data } = props;\n\n const items = data.map((d) => {\n const { package: dupPackage, chunks } =\n d as Rule.CrossChunksPackageRuleStoreData;\n\n const ChildComponent = () => {\n return chunks.map(({ chunks, module }) => {\n return (\n <div className={styles.collapseContainer}>\n <Overview\n style={{ backgroundColor: '#fff' }}\n title={\n <Space>\n <Icon style={{ fontSize: '18px' }} component={TotalSizeSvg} />\n <Text style={{ width: innerWidth > 1500 ? 900 : 700 }}>\n Module:{' '}\n <Text\n style={{\n fontSize: 12,\n color: 'rgba(28, 31, 35, 0.6)',\n fontWeight: 300,\n }}\n >\n {module.path}\n </Text>\n </Text>\n </Space>\n }\n description={\n <div className={styles.collapseChild}>\n {chunks.map((chunk) => (\n <div style={{ display: 'flex' }}>\n <div className={styles.attribute}>Chunk</div>\n <div className={styles.iconContainer}>\n <span className={styles.data}>{chunk.name}</span>\n </div>\n </div>\n ))}\n </div>\n }\n />\n </div>\n );\n });\n };\n\n return {\n key: `${dupPackage.name}@${dupPackage.version}`,\n label: (\n <LabelComponent\n title={\n <Tag style={{ backgroundColor: '#EAEDF1', borderRadius: '2px' }}>\n <span\n className={styles.pkgName}\n >{`${dupPackage.name}@${dupPackage.version}`}</span>\n </Tag>\n }\n description={`has duplicates bundled into multiple chunks.`}\n />\n ),\n children: <ChildComponent />,\n };\n });\n\n return (\n <Collapse\n style={{ width: '100%' }}\n defaultActiveKey={['E1005']}\n items={items}\n />\n );\n};\n"],"names":["Text","Typography","innerWidth","window","LabelComponent","props","title","description","extra","styles","CrossChunksAlertCollapse","data","items","d","dupPackage","chunks","ChildComponent","module","Overview","Space","Icon","TotalSizeSvg","chunk","Tag","Collapse"],"mappings":";;;;;;AAWA,MAAM,EAAEA,IAAI,EAAE,GAAGC;AACjB,MAAM,EAAEC,YAAU,kCAAE,GAAGC;AAEvB,MAAMC,iBAAiB,CAACC;IAKtB,MAAM,EAAEC,KAAK,EAAEC,WAAW,EAAEC,KAAK,EAAE,GAAGH;IACtC,OAAO,WAAP,GACE,KAAC;QAAI,WAAWI,gBAAAA,KAAY;;0BAC1B,KAAC;gBAAI,WAAWA,gBAAAA,YAAmB;;kCACjC,IAAC;kCAAKH;;kCACN,IAAC;kCAAKC;;;;0BAER,IAAC;0BAAKC;;;;AAGZ;AAEO,MAAME,2BAA2B,CAACL;IAIvC,MAAM,EAAEM,IAAI,EAAE,GAAGN;IAEjB,MAAMO,QAAQD,KAAK,GAAG,CAAC,CAACE;QACtB,MAAM,EAAE,SAASC,UAAU,EAAEC,MAAM,EAAE,GACnCF;QAEF,MAAMG,iBAAiB,IACdD,OAAO,GAAG,CAAC,CAAC,EAAEA,MAAM,EAAEE,MAAM,EAAE,GAC5B,WAAP,GACE,IAAC;oBAAI,WAAWR,gBAAAA,iBAAwB;8BACtC,kBAACS,UAAQA;wBACP,OAAO;4BAAE,iBAAiB;wBAAO;wBACjC,qBACE,KAACC,OAAKA;;8CACJ,IAACC,OAAIA;oCAAC,OAAO;wCAAE,UAAU;oCAAO;oCAAG,WAAWC;;8CAC9C,KAACrB,MAAAA;oCAAK,OAAO;wCAAE,OAAOE,mCAAa,OAAO,MAAM;oCAAI;;wCAAG;wCAC7C;sDACR,IAACF,MAAAA;4CACC,OAAO;gDACL,UAAU;gDACV,OAAO;gDACP,YAAY;4CACd;sDAECiB,OAAO,IAAI;;;;;;wBAKpB,2BACE,IAAC;4BAAI,WAAWR,gBAAAA,aAAoB;sCACjCM,OAAO,GAAG,CAAC,CAACO,QAAAA,WAAAA,GACX,KAAC;oCAAI,OAAO;wCAAE,SAAS;oCAAO;;sDAC5B,IAAC;4CAAI,WAAWb,gBAAAA,SAAgB;sDAAE;;sDAClC,IAAC;4CAAI,WAAWA,gBAAAA,aAAoB;sDAClC,kBAAC;gDAAK,WAAWA,gBAAAA,IAAW;0DAAGa,MAAM,IAAI;;;;;;;;QAY7D,OAAO;YACL,KAAK,GAAGR,WAAW,IAAI,CAAC,CAAC,EAAEA,WAAW,OAAO,EAAE;YAC/C,OAAO,WAAP,GACE,IAACV,gBAAAA;gBACC,qBACE,IAACmB,KAAGA;oBAAC,OAAO;wBAAE,iBAAiB;wBAAW,cAAc;oBAAM;8BAC5D,kBAAC;wBACC,WAAWd,gBAAAA,OAAc;kCACzB,GAAGK,WAAW,IAAI,CAAC,CAAC,EAAEA,WAAW,OAAO,EAAE;;;gBAGhD,aAAa;;YAGjB,UAAU,WAAV,GAAU,IAACE,gBAAAA,CAAAA;QACb;IACF;IAEA,OAAO,WAAP,GACE,IAACQ,UAAQA;QACP,OAAO;YAAE,OAAO;QAAO;QACvB,kBAAkB;YAAC;SAAQ;QAC3B,OAAOZ;;AAGb"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components/Alerts/collapse.mjs","sources":["webpack://@rsdoctor/components/./src/components/Alerts/collapse.tsx"],"sourcesContent":["import { ReactNode } from 'react';\nimport { Collapse, Typography, Divider, Space, Tabs, Tag, Tooltip } from 'antd';\nimport Icon from '@ant-design/icons';\nimport { sumBy } from 'lodash-es';\n\nimport Overview from '../Overall/overview';\nimport { TextDrawer } from '../TextDrawer';\nimport { Title } from '../Title';\nimport { Size } from '../../constants';\nimport { formatSize } from '../../utils';\nimport BundleSizeSvg from '../../common/svg/bundle-size.svg';\nimport SourceSizeSvg from '../../common/svg/source-size.svg';\nimport TotalSizeSvg from '../../common/svg/total-size.svg';\nimport VersionSvg from '../../common/svg/version.svg';\n\nimport type { Rule } from '@rsdoctor/types';\n\nimport type { AlertProps } from '../Alert/types';\n\nimport styles from './collapse.module.scss';\n\nconst { Paragraph, Text } = Typography;\nconst { innerWidth } = window;\n\nconst LabelComponent = (props: {\n title: string | ReactNode;\n description: string;\n extra: ReactNode;\n}) => {\n const { title, description, extra } = props;\n return (\n <div className={styles.label}>\n <div className={styles.labelContent}>\n <div>{title}</div>\n <div>{description}</div>\n </div>\n <div>{extra}</div>\n </div>\n );\n};\n\nexport const AlertCollapse = (props: {\n data: Array<Rule.RuleStoreDataItem>;\n extraData: Omit<AlertProps, 'data'>;\n}) => {\n const { data, extraData } = props;\n\n const items = data\n .map((d) => {\n const data = d as Rule.PackageRelationDiffRuleStoreData;\n const { packages } = data;\n const totalSize = sumBy(packages, (e) => e.targetSize.sourceSize);\n\n return {\n totalSize,\n data,\n };\n })\n .sort((a, b) => {\n return b.totalSize - a.totalSize;\n })\n .map(({ data, totalSize }) => {\n const { packages } = data;\n const totalSizeStr = formatSize(totalSize);\n const { name } = packages.find((e) => !!e.target.name)!.target;\n const versions = packages.map((item) => item.target.version);\n\n const ChildComponent = () => {\n return packages.map((pkg, idx) => {\n const version = pkg.target.version;\n const root = pkg.target.root;\n const sizeStr = formatSize(pkg.targetSize.sourceSize);\n const parsedSizeStr = pkg.targetSize.parsedSize\n ? formatSize(pkg.targetSize.parsedSize)\n : null;\n\n return (\n <div className={styles.collapseContainer}>\n <Overview\n style={{ backgroundColor: '#fff' }}\n title={\n <Text\n style={{ width: innerWidth > 1500 ? 900 : 700 }}\n ellipsis={{\n tooltip: root,\n }}\n >\n {root}\n </Text>\n }\n description={\n <div className={styles.collapseChild}>\n <div>\n <div className={styles.attribute}>Version</div>\n <div className={styles.iconContainer}>\n <Icon\n style={{ fontSize: '18px' }}\n component={VersionSvg}\n />\n <span className={styles.data}>v{version}</span>\n </div>\n </div>\n <div>\n <div className={styles.attribute}>Source size</div>\n <div className={styles.iconContainer}>\n <Icon\n style={{ fontSize: '18px' }}\n component={SourceSizeSvg}\n />\n <span className={styles.data}>{sizeStr}</span>\n </div>\n </div>\n <div>\n <div className={styles.attribute}>Bundle size</div>\n <div className={styles.iconContainer}>\n <Icon\n style={{ fontSize: '18px' }}\n component={BundleSizeSvg}\n />\n <Tooltip\n title={`The bundle size of \"${name}\" is ${sizeStr}, this is after bundled, concatenated module cannot get bundled size. `}\n >\n <span className={styles.data}>\n {parsedSizeStr || 'CONCATENATED'}\n </span>\n </Tooltip>\n </div>\n </div>\n </div>\n }\n icon={\n <Paragraph\n style={{ position: 'relative', top: '-10px' }}\n copyable={{ text: root }}\n />\n }\n />\n {idx !== packages.length - 1 ? (\n <Divider style={{ margin: '10px 0' }} />\n ) : null}\n </div>\n );\n });\n };\n\n return {\n key: data.code,\n label: (\n <LabelComponent\n title={\n <Tag style={{ backgroundColor: '#EAEDF1', borderRadius: '2px' }}>\n <span className={styles.pkgName}>{name}</span>\n </Tag>\n }\n description={`${packages.length} versions was found`}\n extra={\n <div className={styles.extraContainer}>\n <div className={styles.iconContainer}>\n <Icon style={{ fontSize: '18px' }} component={TotalSizeSvg} />\n <span className={styles.data}>{totalSizeStr}</span>\n </div>\n {packages && packages.length > 0 ? (\n <TextDrawer\n text=\"Show Relations\"\n buttonProps={{ size: 'small' }}\n drawerProps={{ title: data.title, width: '60%' }}\n >\n <Space\n direction=\"vertical\"\n className=\"alert-space\"\n style={{ width: '100%' }}\n >\n <Space\n style={{\n marginBottom: Size.BasePadding / 2,\n width: '100%',\n }}\n >\n <Title\n text={\n <Tag style={{ backgroundColor: '#EAEDF1' }}>\n {name}\n </Tag>\n }\n upperFirst={false}\n />\n <Typography.Text strong>\n {versions.length}\n </Typography.Text>\n <Typography.Text> versions found</Typography.Text>\n </Space>\n <Tabs\n size=\"middle\"\n items={\n packages.map((pkg) => {\n const { target, targetSize } = pkg;\n return {\n label: (\n <Space className={styles.drawerLabelTitle}>\n <div>v{target.version}</div>\n <Tag className={styles.drawerLabelSize}>\n {formatSize(targetSize.sourceSize)}\n </Tag>\n </Space>\n ),\n key: `${target.root}${target.name}${target.version}`,\n children:\n extraData.getPackageRelationContentComponent({\n data,\n package: pkg,\n }),\n };\n })!\n }\n />\n </Space>\n </TextDrawer>\n ) : null}\n </div>\n }\n />\n ),\n children: <ChildComponent />,\n };\n });\n\n return (\n <Collapse\n style={{ width: '100%' }}\n defaultActiveKey={['E1001']}\n items={items}\n />\n );\n};\n"],"names":["Paragraph","Text","Typography","innerWidth","window","LabelComponent","props","title","description","extra","styles","AlertCollapse","data","extraData","items","d","packages","totalSize","sumBy","e","a","b","totalSizeStr","formatSize","name","versions","item","ChildComponent","pkg","idx","version","root","sizeStr","parsedSizeStr","Overview","Icon","VersionSvg","SourceSizeSvg","BundleSizeSvg","Tooltip","Divider","Tag","TotalSizeSvg","TextDrawer","Space","Size","Title","Tabs","target","targetSize","Collapse"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"components/Alerts/collapse.mjs","sources":["webpack://@rsdoctor/components/./src/components/Alerts/collapse.tsx"],"sourcesContent":["import { ReactNode } from 'react';\nimport { Collapse, Typography, Divider, Space, Tabs, Tag, Tooltip } from 'antd';\nimport Icon from '@ant-design/icons';\nimport { sumBy } from 'lodash-es';\n\nimport Overview from '../Overall/overview';\nimport { TextDrawer } from '../TextDrawer';\nimport { Title } from '../Title';\nimport { Size } from '../../constants';\nimport { formatSize } from '../../utils';\nimport BundleSizeSvg from '../../common/svg/bundle-size.svg';\nimport SourceSizeSvg from '../../common/svg/source-size.svg';\nimport TotalSizeSvg from '../../common/svg/total-size.svg';\nimport VersionSvg from '../../common/svg/version.svg';\n\nimport type { Rule } from '@rsdoctor/types';\n\nimport type { AlertProps } from '../Alert/types';\n\nimport styles from './collapse.module.scss';\n\nconst { Paragraph, Text } = Typography;\nconst { innerWidth } = window;\n\nconst LabelComponent = (props: {\n title: string | ReactNode;\n description: string;\n extra: ReactNode;\n}) => {\n const { title, description, extra } = props;\n return (\n <div className={styles.label}>\n <div className={styles.labelContent}>\n <div>{title}</div>\n <div>{description}</div>\n </div>\n <div>{extra}</div>\n </div>\n );\n};\n\nexport const AlertCollapse = (props: {\n data: Array<Rule.RuleStoreDataItem>;\n extraData: Omit<AlertProps, 'data'>;\n}) => {\n const { data, extraData } = props;\n\n const items = data\n .map((d) => {\n const data = d as Rule.PackageRelationDiffRuleStoreData;\n const { packages } = data;\n const totalSize = sumBy(packages, (e) => e.targetSize.sourceSize);\n\n return {\n totalSize,\n data,\n };\n })\n .sort((a, b) => {\n return b.totalSize - a.totalSize;\n })\n .map(({ data, totalSize }) => {\n const { packages } = data;\n const totalSizeStr = formatSize(totalSize);\n const { name } = packages.find((e) => !!e.target.name)!.target;\n const versions = packages.map((item) => item.target.version);\n\n const ChildComponent = () => {\n return packages.map((pkg, idx) => {\n const version = pkg.target.version;\n const root = pkg.target.root;\n const sizeStr = formatSize(pkg.targetSize.sourceSize);\n const parsedSizeStr = pkg.targetSize.parsedSize\n ? formatSize(pkg.targetSize.parsedSize)\n : null;\n\n return (\n <div className={styles.collapseContainer}>\n <Overview\n style={{ backgroundColor: '#fff' }}\n title={\n <Text\n style={{ width: innerWidth > 1500 ? 900 : 700 }}\n ellipsis={{\n tooltip: root,\n }}\n >\n {root}\n </Text>\n }\n description={\n <div className={styles.collapseChild}>\n <div>\n <div className={styles.attribute}>Version</div>\n <div className={styles.iconContainer}>\n <Icon\n style={{ fontSize: '18px' }}\n component={VersionSvg}\n />\n <span className={styles.data}>v{version}</span>\n </div>\n </div>\n <div>\n <div className={styles.attribute}>Source size</div>\n <div className={styles.iconContainer}>\n <Icon\n style={{ fontSize: '18px' }}\n component={SourceSizeSvg}\n />\n <span className={styles.data}>{sizeStr}</span>\n </div>\n </div>\n <div>\n <div className={styles.attribute}>Bundle size</div>\n <div className={styles.iconContainer}>\n <Icon\n style={{ fontSize: '18px' }}\n component={BundleSizeSvg}\n />\n <Tooltip\n title={`The bundle size of \"${name}\" is ${sizeStr}, this is after bundled, concatenated module cannot get bundled size. `}\n >\n <span className={styles.data}>\n {parsedSizeStr || 'CONCATENATED'}\n </span>\n </Tooltip>\n </div>\n </div>\n </div>\n }\n icon={\n <Paragraph\n style={{ position: 'relative', top: '-10px' }}\n copyable={{ text: root }}\n />\n }\n />\n {idx !== packages.length - 1 ? (\n <Divider style={{ margin: '10px 0' }} />\n ) : null}\n </div>\n );\n });\n };\n\n return {\n key: name,\n label: (\n <LabelComponent\n title={\n <Tag style={{ backgroundColor: '#EAEDF1', borderRadius: '2px' }}>\n <span className={styles.pkgName}>{name}</span>\n </Tag>\n }\n description={`${packages.length} versions was found`}\n extra={\n <div className={styles.extraContainer}>\n <div className={styles.iconContainer}>\n <Icon style={{ fontSize: '18px' }} component={TotalSizeSvg} />\n <span className={styles.data}>{totalSizeStr}</span>\n </div>\n {packages && packages.length > 0 ? (\n <TextDrawer\n text=\"Show Relations\"\n buttonProps={{ size: 'small' }}\n drawerProps={{ title: data.title, width: '60%' }}\n >\n <Space\n direction=\"vertical\"\n className=\"alert-space\"\n style={{ width: '100%' }}\n >\n <Space\n style={{\n marginBottom: Size.BasePadding / 2,\n width: '100%',\n }}\n >\n <Title\n text={\n <Tag style={{ backgroundColor: '#EAEDF1' }}>\n {name}\n </Tag>\n }\n upperFirst={false}\n />\n <Typography.Text strong>\n {versions.length}\n </Typography.Text>\n <Typography.Text> versions found</Typography.Text>\n </Space>\n <Tabs\n size=\"middle\"\n items={\n packages.map((pkg) => {\n const { target, targetSize } = pkg;\n return {\n label: (\n <Space className={styles.drawerLabelTitle}>\n <div>v{target.version}</div>\n <Tag className={styles.drawerLabelSize}>\n {formatSize(targetSize.sourceSize)}\n </Tag>\n </Space>\n ),\n key: `${target.root}${target.name}${target.version}`,\n children:\n extraData.getPackageRelationContentComponent({\n data,\n package: pkg,\n }),\n };\n })!\n }\n />\n </Space>\n </TextDrawer>\n ) : null}\n </div>\n }\n />\n ),\n children: <ChildComponent />,\n };\n });\n\n return (\n <Collapse\n style={{ width: '100%' }}\n defaultActiveKey={['E1001']}\n items={items}\n />\n );\n};\n"],"names":["Paragraph","Text","Typography","innerWidth","window","LabelComponent","props","title","description","extra","styles","AlertCollapse","data","extraData","items","d","packages","totalSize","sumBy","e","a","b","totalSizeStr","formatSize","name","versions","item","ChildComponent","pkg","idx","version","root","sizeStr","parsedSizeStr","Overview","Icon","VersionSvg","SourceSizeSvg","BundleSizeSvg","Tooltip","Divider","Tag","TotalSizeSvg","TextDrawer","Space","Size","Title","Tabs","target","targetSize","Collapse"],"mappings":";;;;;;;;;;;;;;AAqBA,MAAM,EAAEA,SAAS,EAAEC,IAAI,EAAE,GAAGC;AAC5B,MAAM,EAAEC,YAAU,qBAAE,GAAGC;AAEvB,MAAMC,iBAAiB,CAACC;IAKtB,MAAM,EAAEC,KAAK,EAAEC,WAAW,EAAEC,KAAK,EAAE,GAAGH;IACtC,OAAO,WAAP,GACE,KAAC;QAAI,WAAWI,gBAAAA,KAAY;;0BAC1B,KAAC;gBAAI,WAAWA,gBAAAA,YAAmB;;kCACjC,IAAC;kCAAKH;;kCACN,IAAC;kCAAKC;;;;0BAER,IAAC;0BAAKC;;;;AAGZ;AAEO,MAAME,gBAAgB,CAACL;IAI5B,MAAM,EAAEM,IAAI,EAAEC,SAAS,EAAE,GAAGP;IAE5B,MAAMQ,QAAQF,KACX,GAAG,CAAC,CAACG;QACJ,MAAMH,OAAOG;QACb,MAAM,EAAEC,QAAQ,EAAE,GAAGJ;QACrB,MAAMK,YAAYC,MAAMF,UAAU,CAACG,IAAMA,EAAE,UAAU,CAAC,UAAU;QAEhE,OAAO;YACLF;YACAL;QACF;IACF,GACC,IAAI,CAAC,CAACQ,GAAGC,IACDA,EAAE,SAAS,GAAGD,EAAE,SAAS,EAEjC,GAAG,CAAC,CAAC,EAAER,IAAI,EAAEK,SAAS,EAAE;QACvB,MAAM,EAAED,QAAQ,EAAE,GAAGJ;QACrB,MAAMU,eAAeC,WAAWN;QAChC,MAAM,EAAEO,IAAI,EAAE,GAAGR,SAAS,IAAI,CAAC,CAACG,IAAM,CAAC,CAACA,EAAE,MAAM,CAAC,IAAI,EAAG,MAAM;QAC9D,MAAMM,WAAWT,SAAS,GAAG,CAAC,CAACU,OAASA,KAAK,MAAM,CAAC,OAAO;QAE3D,MAAMC,iBAAiB,IACdX,SAAS,GAAG,CAAC,CAACY,KAAKC;gBACxB,MAAMC,UAAUF,IAAI,MAAM,CAAC,OAAO;gBAClC,MAAMG,OAAOH,IAAI,MAAM,CAAC,IAAI;gBAC5B,MAAMI,UAAUT,WAAWK,IAAI,UAAU,CAAC,UAAU;gBACpD,MAAMK,gBAAgBL,IAAI,UAAU,CAAC,UAAU,GAC3CL,WAAWK,IAAI,UAAU,CAAC,UAAU,IACpC;gBAEJ,OAAO,WAAP,GACE,KAAC;oBAAI,WAAWlB,gBAAAA,iBAAwB;;sCACtC,IAACwB,UAAQA;4BACP,OAAO;gCAAE,iBAAiB;4BAAO;4BACjC,qBACE,IAACjC,MAAAA;gCACC,OAAO;oCAAE,OAAOE,sBAAa,OAAO,MAAM;gCAAI;gCAC9C,UAAU;oCACR,SAAS4B;gCACX;0CAECA;;4BAGL,2BACE,KAAC;gCAAI,WAAWrB,gBAAAA,aAAoB;;kDAClC,KAAC;;0DACC,IAAC;gDAAI,WAAWA,gBAAAA,SAAgB;0DAAE;;0DAClC,KAAC;gDAAI,WAAWA,gBAAAA,aAAoB;;kEAClC,IAACyB,OAAIA;wDACH,OAAO;4DAAE,UAAU;wDAAO;wDAC1B,WAAWC;;kEAEb,KAAC;wDAAK,WAAW1B,gBAAAA,IAAW;;4DAAE;4DAAEoB;;;;;;;kDAGpC,KAAC;;0DACC,IAAC;gDAAI,WAAWpB,gBAAAA,SAAgB;0DAAE;;0DAClC,KAAC;gDAAI,WAAWA,gBAAAA,aAAoB;;kEAClC,IAACyB,OAAIA;wDACH,OAAO;4DAAE,UAAU;wDAAO;wDAC1B,WAAWE;;kEAEb,IAAC;wDAAK,WAAW3B,gBAAAA,IAAW;kEAAGsB;;;;;;kDAGnC,KAAC;;0DACC,IAAC;gDAAI,WAAWtB,gBAAAA,SAAgB;0DAAE;;0DAClC,KAAC;gDAAI,WAAWA,gBAAAA,aAAoB;;kEAClC,IAACyB,OAAIA;wDACH,OAAO;4DAAE,UAAU;wDAAO;wDAC1B,WAAWG;;kEAEb,IAACC,SAAOA;wDACN,OAAO,CAAC,oBAAoB,EAAEf,KAAK,KAAK,EAAEQ,QAAQ,sEAAsE,CAAC;kEAEzH,kBAAC;4DAAK,WAAWtB,gBAAAA,IAAW;sEACzBuB,iBAAiB;;;;;;;;;4BAO9B,oBACE,IAACjC,WAAAA;gCACC,OAAO;oCAAE,UAAU;oCAAY,KAAK;gCAAQ;gCAC5C,UAAU;oCAAE,MAAM+B;gCAAK;;;wBAI5BF,QAAQb,SAAS,MAAM,GAAG,IAAI,WAAJ,GACzB,IAACwB,SAAOA;4BAAC,OAAO;gCAAE,QAAQ;4BAAS;6BACjC;;;YAGV;QAGF,OAAO;YACL,KAAKhB;YACL,OAAO,WAAP,GACE,IAACnB,gBAAAA;gBACC,qBACE,IAACoC,KAAGA;oBAAC,OAAO;wBAAE,iBAAiB;wBAAW,cAAc;oBAAM;8BAC5D,kBAAC;wBAAK,WAAW/B,gBAAAA,OAAc;kCAAGc;;;gBAGtC,aAAa,GAAGR,SAAS,MAAM,CAAC,mBAAmB,CAAC;gBACpD,qBACE,KAAC;oBAAI,WAAWN,gBAAAA,cAAqB;;sCACnC,KAAC;4BAAI,WAAWA,gBAAAA,aAAoB;;8CAClC,IAACyB,OAAIA;oCAAC,OAAO;wCAAE,UAAU;oCAAO;oCAAG,WAAWO;;8CAC9C,IAAC;oCAAK,WAAWhC,gBAAAA,IAAW;8CAAGY;;;;wBAEhCN,YAAYA,SAAS,MAAM,GAAG,IAAI,WAAJ,GAC7B,IAAC2B,YAAUA;4BACT,MAAK;4BACL,aAAa;gCAAE,MAAM;4BAAQ;4BAC7B,aAAa;gCAAE,OAAO/B,KAAK,KAAK;gCAAE,OAAO;4BAAM;sCAE/C,mBAACgC,OAAKA;gCACJ,WAAU;gCACV,WAAU;gCACV,OAAO;oCAAE,OAAO;gCAAO;;kDAEvB,KAACA,OAAKA;wCACJ,OAAO;4CACL,cAAcC,KAAK,WAAW,GAAG;4CACjC,OAAO;wCACT;;0DAEA,IAACC,OAAKA;gDACJ,oBACE,IAACL,KAAGA;oDAAC,OAAO;wDAAE,iBAAiB;oDAAU;8DACtCjB;;gDAGL,YAAY;;0DAEd,IAACtB,WAAW,IAAI;gDAAC,QAAM;0DACpBuB,SAAS,MAAM;;0DAElB,IAACvB,WAAW,IAAI;0DAAC;;;;kDAEnB,IAAC6C,MAAIA;wCACH,MAAK;wCACL,OACE/B,SAAS,GAAG,CAAC,CAACY;4CACZ,MAAM,EAAEoB,MAAM,EAAEC,UAAU,EAAE,GAAGrB;4CAC/B,OAAO;gDACL,OAAO,WAAP,GACE,KAACgB,OAAKA;oDAAC,WAAWlC,gBAAAA,gBAAuB;;sEACvC,KAAC;;gEAAI;gEAAEsC,OAAO,OAAO;;;sEACrB,IAACP,KAAGA;4DAAC,WAAW/B,gBAAAA,eAAsB;sEACnCa,WAAW0B,WAAW,UAAU;;;;gDAIvC,KAAK,GAAGD,OAAO,IAAI,GAAGA,OAAO,IAAI,GAAGA,OAAO,OAAO,EAAE;gDACpD,UACEnC,UAAU,kCAAkC,CAAC;oDAC3CD;oDACA,SAASgB;gDACX;4CACJ;wCACF;;;;6BAKN;;;;YAKZ,UAAU,WAAV,GAAU,IAACD,gBAAAA,CAAAA;QACb;IACF;IAEF,OAAO,WAAP,GACE,IAACuB,UAAQA;QACP,OAAO;YAAE,OAAO;QAAO;QACvB,kBAAkB;YAAC;SAAQ;QAC3B,OAAOpC;;AAGb"}
|
|
@@ -10,7 +10,7 @@ import { Menus } from "./menus.mjs";
|
|
|
10
10
|
import "./header.css";
|
|
11
11
|
import { Client } from "@rsdoctor/types";
|
|
12
12
|
import { useNavigate } from "react-router-dom";
|
|
13
|
-
const Header = ()=>{
|
|
13
|
+
const Header = ({ enableRoutes })=>{
|
|
14
14
|
const { i18n } = useI18n();
|
|
15
15
|
const navigate = useNavigate();
|
|
16
16
|
const { isLight } = useTheme();
|
|
@@ -71,7 +71,7 @@ const Header = ()=>{
|
|
|
71
71
|
className: "rsdoctor-logo",
|
|
72
72
|
alt: "logo",
|
|
73
73
|
onClick: ()=>{
|
|
74
|
-
navigate(Client.RsdoctorClientRoutes.Home);
|
|
74
|
+
location.hash.includes(Client.RsdoctorClientRoutes.Uploader) && location.pathname.includes('/preview') ? location.href = 'http://rsdoctor.rs' : navigate(Client.RsdoctorClientRoutes.Home);
|
|
75
75
|
}
|
|
76
76
|
}),
|
|
77
77
|
/*#__PURE__*/ jsx(BuilderSelect, {})
|
|
@@ -82,7 +82,7 @@ const Header = ()=>{
|
|
|
82
82
|
style: {
|
|
83
83
|
transition: 'none'
|
|
84
84
|
}
|
|
85
|
-
}),
|
|
85
|
+
}, enableRoutes ? JSON.stringify(enableRoutes) : 'default'),
|
|
86
86
|
/*#__PURE__*/ jsx(Col, {
|
|
87
87
|
flex: 1,
|
|
88
88
|
children: /*#__PURE__*/ jsxs(Row, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components/Layout/header.mjs","sources":["webpack://@rsdoctor/components/./src/components/Layout/header.tsx"],"sourcesContent":["import { TranslationOutlined } from '@ant-design/icons';\nimport { Col, Dropdown, Layout, Row } from 'antd';\nimport React from 'react';\nimport { Language, Size } from '../../constants';\nimport { useI18n, useTheme } from '../../utils';\nimport { OverlayAlertsWithButton } from '../Alerts';\nimport { BuilderSelect } from './builder-select';\nimport { Menus } from './menus';\nimport './header.sass';\nimport { Client } from '@rsdoctor/types';\nimport { useNavigate } from 'react-router-dom';\n\nexport const Header: React.FC = () => {\n const { i18n } = useI18n();\n\n const navigate = useNavigate();\n const { isLight } = useTheme();\n const iconStyle: React.CSSProperties = {\n display: 'inline-block',\n fontSize: 20,\n textAlign: 'center',\n verticalAlign: 'middle',\n cursor: 'pointer',\n width: 30,\n transition: 'all 0.3s ease',\n };\n const languages = [\n { value: Language.Cn, label: '中文' },\n { value: Language.En, label: 'English' },\n ];\n\n return (\n <Layout.Header\n style={{\n height: Size.NavBarHeight,\n padding: 0,\n paddingLeft: Size.BasePadding,\n paddingRight: Size.BasePadding,\n position: 'fixed',\n zIndex: 999,\n width: '100%',\n backgroundColor: isLight ? '#fff' : '#141414',\n transition: 'none',\n }}\n >\n <Row\n justify=\"space-between\"\n align=\"middle\"\n style={{ height: Size.NavBarHeight }}\n wrap={false}\n >\n <Col\n style={{\n height: Size.NavBarHeight,\n lineHeight: `${Size.NavBarHeight + 2}px`,\n }}\n >\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n height: '100%',\n }}\n >\n <img\n src=\"https://assets.rspack.rs/rsdoctor/rsdoctor-title-logo.png\"\n className=\"rsdoctor-logo\"\n alt=\"logo\"\n onClick={() => {\n navigate(Client.RsdoctorClientRoutes.Home);\n }}\n />\n <BuilderSelect />\n </div>\n </Col>\n <Menus style={{ transition: 'none' }}
|
|
1
|
+
{"version":3,"file":"components/Layout/header.mjs","sources":["webpack://@rsdoctor/components/./src/components/Layout/header.tsx"],"sourcesContent":["import { TranslationOutlined } from '@ant-design/icons';\nimport { Col, Dropdown, Layout, Row } from 'antd';\nimport React from 'react';\nimport { Language, Size } from '../../constants';\nimport { useI18n, useTheme } from '../../utils';\nimport { OverlayAlertsWithButton } from '../Alerts';\nimport { BuilderSelect } from './builder-select';\nimport { Menus } from './menus';\nimport './header.sass';\nimport { Client } from '@rsdoctor/types';\nimport { useNavigate } from 'react-router-dom';\n\nexport interface HeaderProps {\n enableRoutes?: string[];\n}\n\nexport const Header: React.FC<HeaderProps> = ({ enableRoutes }) => {\n const { i18n } = useI18n();\n\n const navigate = useNavigate();\n const { isLight } = useTheme();\n const iconStyle: React.CSSProperties = {\n display: 'inline-block',\n fontSize: 20,\n textAlign: 'center',\n verticalAlign: 'middle',\n cursor: 'pointer',\n width: 30,\n transition: 'all 0.3s ease',\n };\n const languages = [\n { value: Language.Cn, label: '中文' },\n { value: Language.En, label: 'English' },\n ];\n\n return (\n <Layout.Header\n style={{\n height: Size.NavBarHeight,\n padding: 0,\n paddingLeft: Size.BasePadding,\n paddingRight: Size.BasePadding,\n position: 'fixed',\n zIndex: 999,\n width: '100%',\n backgroundColor: isLight ? '#fff' : '#141414',\n transition: 'none',\n }}\n >\n <Row\n justify=\"space-between\"\n align=\"middle\"\n style={{ height: Size.NavBarHeight }}\n wrap={false}\n >\n <Col\n style={{\n height: Size.NavBarHeight,\n lineHeight: `${Size.NavBarHeight + 2}px`,\n }}\n >\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n height: '100%',\n }}\n >\n <img\n src=\"https://assets.rspack.rs/rsdoctor/rsdoctor-title-logo.png\"\n className=\"rsdoctor-logo\"\n alt=\"logo\"\n onClick={() => {\n location.hash.includes(Client.RsdoctorClientRoutes.Uploader) &&\n location.pathname.includes('/preview')\n ? (location.href = 'http://rsdoctor.rs')\n : navigate(Client.RsdoctorClientRoutes.Home);\n }}\n />\n <BuilderSelect />\n </div>\n </Col>\n <Menus\n key={enableRoutes ? JSON.stringify(enableRoutes) : 'default'}\n style={{ transition: 'none' }}\n />\n\n <Col flex={1}>\n <Row\n align=\"middle\"\n justify=\"end\"\n style={{ height: Size.NavBarHeight }}\n wrap={false}\n gutter={[Size.BasePadding / 3, 0]}\n >\n <Col>\n <OverlayAlertsWithButton />\n </Col>\n\n {/* <Col> TODO: dark mode has some error need fix.\n <Switch\n className=\"header-switch\"\n checkedChildren=\"🌛\"\n unCheckedChildren=\"🌞\"\n checked={isDark}\n onChange={(checked) => {\n setTheme(checked ? Theme.Dark : Theme.Light);\n }}\n style={{ border: `1px solid ${isLight ? '#ddd' : '#fff'}`, background: isLight ? '#eee' : '#141414' }}\n />\n </Col> */}\n <Col>\n <Dropdown\n overlayStyle={{ zIndex: 1000 }}\n menu={{\n items: languages.map((e) => ({\n label: e.label,\n key: e.value,\n onClick() {\n i18n.changeLanguage(e.value);\n },\n })),\n selectedKeys: [i18n.language],\n }}\n >\n <TranslationOutlined\n className=\"header-icon\"\n style={iconStyle}\n />\n </Dropdown>\n </Col>\n </Row>\n </Col>\n </Row>\n </Layout.Header>\n );\n};\n"],"names":["Header","enableRoutes","i18n","useI18n","navigate","useNavigate","isLight","useTheme","iconStyle","languages","Language","Layout","Size","Row","Col","location","Client","BuilderSelect","Menus","JSON","OverlayAlertsWithButton","Dropdown","e","TranslationOutlined"],"mappings":";;;;;;;;;;;;AAgBO,MAAMA,SAAgC,CAAC,EAAEC,YAAY,EAAE;IAC5D,MAAM,EAAEC,IAAI,EAAE,GAAGC;IAEjB,MAAMC,WAAWC;IACjB,MAAM,EAAEC,OAAO,EAAE,GAAGC;IACpB,MAAMC,YAAiC;QACrC,SAAS;QACT,UAAU;QACV,WAAW;QACX,eAAe;QACf,QAAQ;QACR,OAAO;QACP,YAAY;IACd;IACA,MAAMC,YAAY;QAChB;YAAE,OAAOC,SAAS,EAAE;YAAE,OAAO;QAAK;QAClC;YAAE,OAAOA,SAAS,EAAE;YAAE,OAAO;QAAU;KACxC;IAED,OAAO,WAAP,GACE,IAACC,OAAO,MAAM;QACZ,OAAO;YACL,QAAQC,KAAK,YAAY;YACzB,SAAS;YACT,aAAaA,KAAK,WAAW;YAC7B,cAAcA,KAAK,WAAW;YAC9B,UAAU;YACV,QAAQ;YACR,OAAO;YACP,iBAAiBN,UAAU,SAAS;YACpC,YAAY;QACd;kBAEA,mBAACO,KAAGA;YACF,SAAQ;YACR,OAAM;YACN,OAAO;gBAAE,QAAQD,KAAK,YAAY;YAAC;YACnC,MAAM;;8BAEN,IAACE,KAAGA;oBACF,OAAO;wBACL,QAAQF,KAAK,YAAY;wBACzB,YAAY,GAAGA,KAAK,YAAY,GAAG,EAAE,EAAE,CAAC;oBAC1C;8BAEA,mBAAC;wBACC,OAAO;4BACL,SAAS;4BACT,gBAAgB;4BAChB,YAAY;4BACZ,QAAQ;wBACV;;0CAEA,IAAC;gCACC,KAAI;gCACJ,WAAU;gCACV,KAAI;gCACJ,SAAS;oCACPG,SAAS,IAAI,CAAC,QAAQ,CAACC,OAAO,oBAAoB,CAAC,QAAQ,KAC3DD,SAAS,QAAQ,CAAC,QAAQ,CAAC,cACtBA,SAAS,IAAI,GAAG,uBACjBX,SAASY,OAAO,oBAAoB,CAAC,IAAI;gCAC/C;;0CAEF,IAACC,eAAaA,CAAAA;;;;8BAGlB,IAACC,OAAKA;oBAEJ,OAAO;wBAAE,YAAY;oBAAO;mBADvBjB,eAAekB,KAAK,SAAS,CAAClB,gBAAgB;8BAIrD,IAACa,KAAGA;oBAAC,MAAM;8BACT,mBAACD,KAAGA;wBACF,OAAM;wBACN,SAAQ;wBACR,OAAO;4BAAE,QAAQD,KAAK,YAAY;wBAAC;wBACnC,MAAM;wBACN,QAAQ;4BAACA,KAAK,WAAW,GAAG;4BAAG;yBAAE;;0CAEjC,IAACE,KAAGA;0CACF,kBAACM,yBAAuBA,CAAAA;;0CAe1B,IAACN,KAAGA;0CACF,kBAACO,UAAQA;oCACP,cAAc;wCAAE,QAAQ;oCAAK;oCAC7B,MAAM;wCACJ,OAAOZ,UAAU,GAAG,CAAC,CAACa,IAAO;gDAC3B,OAAOA,EAAE,KAAK;gDACd,KAAKA,EAAE,KAAK;gDACZ;oDACEpB,KAAK,cAAc,CAACoB,EAAE,KAAK;gDAC7B;4CACF;wCACA,cAAc;4CAACpB,KAAK,QAAQ;yCAAC;oCAC/B;8CAEA,kBAACqB,qBAAmBA;wCAClB,WAAU;wCACV,OAAOf;;;;;;;;;;AASzB"}
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useContext, useEffect } from "react";
|
|
2
|
+
import { useContext, useEffect, useState } from "react";
|
|
3
3
|
import { FloatButton, Layout } from "antd";
|
|
4
4
|
import { Language, MAIN_BG, Size } from "../../constants.mjs";
|
|
5
5
|
import { Header } from "./header.mjs";
|
|
6
|
-
import { getFirstVisitFromStorage, getLanguage, setFirstVisitToStorage, useI18n, useLocale } from "../../utils/index.mjs";
|
|
6
|
+
import { getEnableRoutesFromUrlQuery, getFirstVisitFromStorage, getLanguage, setFirstVisitToStorage, useI18n, useLocale, useUrlQuery } from "../../utils/index.mjs";
|
|
7
7
|
import { Progress } from "./progress.mjs";
|
|
8
8
|
import { ConfigContext } from "../../config.mjs";
|
|
9
9
|
const Layout_Layout = (props)=>{
|
|
10
10
|
const locale = useLocale();
|
|
11
11
|
const { i18n } = useI18n();
|
|
12
12
|
const { children } = props;
|
|
13
|
+
const query = useUrlQuery();
|
|
14
|
+
const [enableRoutes, setEnableRoutes] = useState(()=>getEnableRoutesFromUrlQuery() || void 0);
|
|
13
15
|
useEffect(()=>{
|
|
14
16
|
let currentLocale = locale;
|
|
15
17
|
const visited = getFirstVisitFromStorage();
|
|
@@ -23,10 +25,18 @@ const Layout_Layout = (props)=>{
|
|
|
23
25
|
}, [
|
|
24
26
|
locale
|
|
25
27
|
]);
|
|
28
|
+
useEffect(()=>{
|
|
29
|
+
const newEnableRoutes = getEnableRoutesFromUrlQuery();
|
|
30
|
+
setEnableRoutes(newEnableRoutes || void 0);
|
|
31
|
+
}, [
|
|
32
|
+
query
|
|
33
|
+
]);
|
|
26
34
|
const ctx = useContext(ConfigContext);
|
|
27
35
|
return /*#__PURE__*/ jsxs(Layout, {
|
|
28
36
|
children: [
|
|
29
|
-
ctx.embedded ? null : /*#__PURE__*/ jsx(Header, {
|
|
37
|
+
ctx.embedded ? null : /*#__PURE__*/ jsx(Header, {
|
|
38
|
+
enableRoutes: enableRoutes
|
|
39
|
+
}),
|
|
30
40
|
/*#__PURE__*/ jsx(Progress, {}),
|
|
31
41
|
/*#__PURE__*/ jsxs(Layout.Content, {
|
|
32
42
|
style: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components/Layout/index.mjs","sources":["webpack://@rsdoctor/components/./src/components/Layout/index.tsx"],"sourcesContent":["import { PropsWithChildren, useContext, useEffect } from 'react';\nimport { FloatButton, Layout as L } from 'antd';\nimport { Language, MAIN_BG, Size } from '../../constants';\nimport { Header } from './header';\nimport {\n useLocale,\n useI18n,\n getFirstVisitFromStorage,\n setFirstVisitToStorage,\n getLanguage,\n} from '../../utils';\nimport { Progress } from './progress';\nimport { ConfigContext } from '../../config';\n\nexport interface LayoutProps {\n children: JSX.Element;\n}\n\nexport const Layout = (props: PropsWithChildren<LayoutProps>): JSX.Element => {\n const locale = useLocale();\n const { i18n } = useI18n();\n const { children } = props;\n\n useEffect(() => {\n let currentLocale = locale;\n // Check if the user is visiting the site for the first time\n const visited = getFirstVisitFromStorage();\n if (!visited) {\n setFirstVisitToStorage('1');\n const targetLang = window.navigator.language.split('-')[0];\n const userLang = getLanguage(targetLang);\n\n if (Object.values(Language).includes(userLang)) {\n currentLocale = userLang;\n }\n }\n\n if (i18n.language !== currentLocale) {\n i18n.changeLanguage(currentLocale);\n }\n }, [locale]);\n\n const ctx = useContext(ConfigContext);\n return (\n <L>\n {!ctx.embedded ? <Header /> : null}\n <Progress />\n <L.Content\n style={{\n height: '100%',\n minHeight: '100vh',\n padding: Size.BasePadding,\n marginTop: !ctx.embedded ? Size.NavBarHeight : 0,\n background: MAIN_BG,\n }}\n >\n {children}\n <FloatButton.BackTop />\n </L.Content>\n </L>\n );\n};\n"],"names":["Layout","props","locale","useLocale","i18n","useI18n","children","useEffect","currentLocale","visited","getFirstVisitFromStorage","setFirstVisitToStorage","targetLang","window","userLang","getLanguage","Object","Language","ctx","useContext","ConfigContext","L","Header","Progress","Size","MAIN_BG","FloatButton"],"mappings":";;;;;;;;
|
|
1
|
+
{"version":3,"file":"components/Layout/index.mjs","sources":["webpack://@rsdoctor/components/./src/components/Layout/index.tsx"],"sourcesContent":["import { PropsWithChildren, useContext, useEffect, useState } from 'react';\nimport { FloatButton, Layout as L } from 'antd';\nimport { Language, MAIN_BG, Size } from '../../constants';\nimport { Header } from './header';\nimport {\n useLocale,\n useI18n,\n getFirstVisitFromStorage,\n setFirstVisitToStorage,\n getLanguage,\n useUrlQuery,\n getEnableRoutesFromUrlQuery,\n} from '../../utils';\nimport { Progress } from './progress';\nimport { ConfigContext } from '../../config';\n\nexport interface LayoutProps {\n children: JSX.Element;\n}\n\nexport const Layout = (props: PropsWithChildren<LayoutProps>): JSX.Element => {\n const locale = useLocale();\n const { i18n } = useI18n();\n const { children } = props;\n const query = useUrlQuery();\n const [enableRoutes, setEnableRoutes] = useState<string[] | undefined>(\n () => getEnableRoutesFromUrlQuery() || undefined,\n );\n\n useEffect(() => {\n let currentLocale = locale;\n // Check if the user is visiting the site for the first time\n const visited = getFirstVisitFromStorage();\n if (!visited) {\n setFirstVisitToStorage('1');\n const targetLang = window.navigator.language.split('-')[0];\n const userLang = getLanguage(targetLang);\n\n if (Object.values(Language).includes(userLang)) {\n currentLocale = userLang;\n }\n }\n\n if (i18n.language !== currentLocale) {\n i18n.changeLanguage(currentLocale);\n }\n }, [locale]);\n\n // Listen for enableRoutes changes in URL query parameters\n useEffect(() => {\n const newEnableRoutes = getEnableRoutesFromUrlQuery();\n setEnableRoutes(newEnableRoutes || undefined);\n }, [query]);\n\n const ctx = useContext(ConfigContext);\n return (\n <L>\n {!ctx.embedded ? <Header enableRoutes={enableRoutes} /> : null}\n <Progress />\n <L.Content\n style={{\n height: '100%',\n minHeight: '100vh',\n padding: Size.BasePadding,\n marginTop: !ctx.embedded ? Size.NavBarHeight : 0,\n background: MAIN_BG,\n }}\n >\n {children}\n <FloatButton.BackTop />\n </L.Content>\n </L>\n );\n};\n"],"names":["Layout","props","locale","useLocale","i18n","useI18n","children","query","useUrlQuery","enableRoutes","setEnableRoutes","useState","getEnableRoutesFromUrlQuery","undefined","useEffect","currentLocale","visited","getFirstVisitFromStorage","setFirstVisitToStorage","targetLang","window","userLang","getLanguage","Object","Language","newEnableRoutes","ctx","useContext","ConfigContext","L","Header","Progress","Size","MAIN_BG","FloatButton"],"mappings":";;;;;;;;AAoBO,MAAMA,gBAAS,CAACC;IACrB,MAAMC,SAASC;IACf,MAAM,EAAEC,IAAI,EAAE,GAAGC;IACjB,MAAM,EAAEC,QAAQ,EAAE,GAAGL;IACrB,MAAMM,QAAQC;IACd,MAAM,CAACC,cAAcC,gBAAgB,GAAGC,SACtC,IAAMC,iCAAiCC;IAGzCC,UAAU;QACR,IAAIC,gBAAgBb;QAEpB,MAAMc,UAAUC;QAChB,IAAI,CAACD,SAAS;YACZE,uBAAuB;YACvB,MAAMC,aAAaC,OAAO,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YAC1D,MAAMC,WAAWC,YAAYH;YAE7B,IAAII,OAAO,MAAM,CAACC,UAAU,QAAQ,CAACH,WACnCN,gBAAgBM;QAEpB;QAEA,IAAIjB,KAAK,QAAQ,KAAKW,eACpBX,KAAK,cAAc,CAACW;IAExB,GAAG;QAACb;KAAO;IAGXY,UAAU;QACR,MAAMW,kBAAkBb;QACxBF,gBAAgBe,mBAAmBZ;IACrC,GAAG;QAACN;KAAM;IAEV,MAAMmB,MAAMC,WAAWC;IACvB,OAAO,WAAP,GACE,KAACC,QAACA;;YACEH,IAAI,QAAQ,GAA4C,OAAzC,WAAH,GAAG,IAACI,QAAMA;gBAAC,cAAcrB;;0BACvC,IAACsB,UAAQA,CAAAA;0BACT,KAACF,OAAAA,OAAS;gBACR,OAAO;oBACL,QAAQ;oBACR,WAAW;oBACX,SAASG,KAAK,WAAW;oBACzB,WAAW,AAACN,IAAI,QAAQ,GAAuB,IAApBM,KAAK,YAAY;oBAC5C,YAAYC;gBACd;;oBAEC3B;kCACD,IAAC4B,YAAY,OAAO;;;;;AAI5B"}
|
|
@@ -6,7 +6,7 @@ import { useEffect, useState } from "react";
|
|
|
6
6
|
import { useLocation, useNavigate } from "react-router-dom";
|
|
7
7
|
import { Size } from "../../constants.mjs";
|
|
8
8
|
import { name as constants_mjs_name, route } from "../../pages/Overall/constants.mjs";
|
|
9
|
-
import { hasBundle, hasCompile, useI18n } from "../../utils/index.mjs";
|
|
9
|
+
import { getEnableRoutesFromUrlQuery, hasBundle, hasCompile, useI18n } from "../../utils/index.mjs";
|
|
10
10
|
import { withServerAPI } from "../Manifest/index.mjs";
|
|
11
11
|
import overall_active from "../../common/svg/navbar/overall-active.mjs";
|
|
12
12
|
import overall_inactive from "../../common/svg/navbar/overall-inactive.mjs";
|
|
@@ -27,7 +27,9 @@ const MenusBase = (props)=>{
|
|
|
27
27
|
const { pathname } = useLocation();
|
|
28
28
|
const navigate = useNavigate();
|
|
29
29
|
const [navIcon, setNavIcon] = useState(defaultInActive);
|
|
30
|
-
const { routes:
|
|
30
|
+
const { routes: apiRoutes } = props;
|
|
31
|
+
const urlEnableRoutes = getEnableRoutesFromUrlQuery();
|
|
32
|
+
const enableRoutes = apiRoutes && apiRoutes.length > 0 ? apiRoutes : urlEnableRoutes || [];
|
|
31
33
|
useEffect(()=>{
|
|
32
34
|
if (pathname.includes('webpack')) setNavIcon({
|
|
33
35
|
...defaultInActive,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components/Layout/menus.mjs","sources":["webpack://@rsdoctor/components/./src/components/Layout/menus.tsx"],"sourcesContent":["import {\n BoxPlotFilled,\n MenuOutlined,\n FundFilled,\n ApiFilled,\n NodeIndexOutlined,\n} from '@ant-design/icons';\nimport { Manifest, SDK } from '@rsdoctor/types';\nimport { Menu, MenuProps } from 'antd';\nimport React, { useEffect, useState } from 'react';\nimport { useLocation, useNavigate } from 'react-router-dom';\nimport { Size } from '../../constants';\nimport * as OverallConstants from '../../pages/Overall/constants';\nimport {
|
|
1
|
+
{"version":3,"file":"components/Layout/menus.mjs","sources":["webpack://@rsdoctor/components/./src/components/Layout/menus.tsx"],"sourcesContent":["import {\n BoxPlotFilled,\n MenuOutlined,\n FundFilled,\n ApiFilled,\n NodeIndexOutlined,\n} from '@ant-design/icons';\nimport { Manifest, SDK } from '@rsdoctor/types';\nimport { Menu, MenuProps } from 'antd';\nimport React, { useEffect, useState } from 'react';\nimport { useLocation, useNavigate } from 'react-router-dom';\nimport { Size } from '../../constants';\nimport * as OverallConstants from '../../pages/Overall/constants';\nimport {\n useI18n,\n hasBundle,\n hasCompile,\n getEnableRoutesFromUrlQuery,\n} from '../../utils';\nimport { withServerAPI } from '../Manifest';\nimport OverallActive from 'src/common/svg/navbar/overall-active.svg';\nimport OverallInActive from 'src/common/svg/navbar/overall-inactive.svg';\nimport CompileAnalysisActive from 'src/common/svg/navbar/compile-analysis-active.svg';\nimport CompileAnalysisInActive from 'src/common/svg/navbar/compile-analysis-inactive.svg';\nimport BundleSizeActive from 'src/common/svg/navbar/bundle-size-active.svg';\nimport BundleSizeInActive from 'src/common/svg/navbar/bundle-size-inactive.svg';\nimport {\n BundleSize,\n LoaderFiles,\n PluginsAnalyze,\n ModuleResolve,\n LoaderTimeline,\n} from 'src/pages';\nimport { CompileName } from './constants';\n\nconst BuilderSwitchName = 'builder-switcher';\n\nconst defaultInActive = {\n overall: <OverallInActive />,\n webpack: <CompileAnalysisInActive />,\n bundle: <BundleSizeInActive />,\n};\nconst MenusBase: React.FC<{\n style?: React.CSSProperties;\n routes: Manifest.RsdoctorManifestClientRoutes[];\n}> = (props) => {\n const { t } = useI18n();\n const { pathname } = useLocation();\n const navigate = useNavigate();\n const [navIcon, setNavIcon] = useState(defaultInActive);\n const { routes: apiRoutes } = props;\n\n // Get enableRoutes from URL query as fallback\n const urlEnableRoutes = getEnableRoutesFromUrlQuery();\n const enableRoutes =\n apiRoutes && apiRoutes.length > 0\n ? apiRoutes\n : (urlEnableRoutes as Manifest.RsdoctorManifestClientRoutes[]) || [];\n\n useEffect(() => {\n if (pathname.includes('webpack')) {\n setNavIcon({\n ...defaultInActive,\n webpack: <CompileAnalysisActive />,\n });\n } else if (pathname.includes('overall') || pathname === '/') {\n setNavIcon({\n ...defaultInActive,\n overall: <OverallActive />,\n });\n } else if (pathname.includes('bundle')) {\n setNavIcon({\n ...defaultInActive,\n bundle: <BundleSizeActive />,\n });\n }\n }, [pathname]);\n\n const iconStyle: React.CSSProperties = {\n color: 'rgba(96, 102, 114)',\n };\n const items: MenuProps['items'] = [];\n\n if (enableRoutes.includes(Manifest.RsdoctorManifestClientRoutes.Overall)) {\n items.push({\n label: t(OverallConstants.name),\n key: OverallConstants.route,\n icon: navIcon.overall,\n children: [],\n onTitleClick(e) {\n navigate(e.key);\n },\n });\n }\n\n if (hasCompile(enableRoutes)) {\n items.push({\n label: t(CompileName),\n key: CompileName,\n icon: navIcon.webpack,\n children: [\n enableRoutes.includes(\n Manifest.RsdoctorManifestClientRoutes.WebpackLoaders,\n ) && {\n label: t(LoaderTimeline.name),\n key: LoaderTimeline.route,\n icon: <BoxPlotFilled style={iconStyle} />,\n },\n enableRoutes.includes(\n Manifest.RsdoctorManifestClientRoutes.WebpackLoaders,\n ) && {\n label: t(LoaderFiles.name),\n key: LoaderFiles.route,\n icon: <FundFilled style={iconStyle} />,\n },\n enableRoutes.includes(\n Manifest.RsdoctorManifestClientRoutes.ModuleResolve,\n ) && {\n label: t(ModuleResolve.name),\n key: ModuleResolve.route,\n icon: <NodeIndexOutlined style={iconStyle} />,\n },\n enableRoutes.includes(\n Manifest.RsdoctorManifestClientRoutes.WebpackPlugins,\n ) && {\n label: t(PluginsAnalyze.name),\n key: PluginsAnalyze.route,\n icon: <ApiFilled style={iconStyle} />,\n },\n ].filter((e) => Boolean(e)) as MenuProps['items'],\n });\n }\n\n if (hasBundle(enableRoutes)) {\n items.push({\n label: t(BundleSize.name),\n key: BundleSize.name,\n icon: navIcon.bundle,\n children: [],\n onTitleClick() {\n navigate(BundleSize.route);\n },\n });\n }\n\n const MenuComponent = (\n <Menu\n items={items}\n mode=\"horizontal\"\n key={enableRoutes.join('')}\n onClick={(e) => {\n if (!e.keyPath.includes(BuilderSwitchName)) {\n navigate(e.key);\n }\n }}\n overflowedIndicator={<MenuOutlined />}\n style={{\n height: Size.NavBarHeight,\n lineHeight: `${Size.NavBarHeight}px`,\n minWidth: 0,\n justifyContent: 'flex-end',\n ...props.style,\n }}\n selectedKeys={[pathname === '/' ? OverallConstants.route : pathname]}\n />\n );\n\n return <div style={{ marginLeft: '30px' }}>{MenuComponent}</div>;\n};\n\nexport const Menus = withServerAPI({\n api: SDK.ServerAPI.API.GetClientRoutes,\n responsePropName: 'routes',\n Component: MenusBase,\n fallbackComponent: () => null,\n showSkeleton: false,\n});\n"],"names":["BuilderSwitchName","defaultInActive","OverallInActive","CompileAnalysisInActive","BundleSizeInActive","MenusBase","props","t","useI18n","pathname","useLocation","navigate","useNavigate","navIcon","setNavIcon","useState","apiRoutes","urlEnableRoutes","getEnableRoutesFromUrlQuery","enableRoutes","useEffect","CompileAnalysisActive","OverallActive","BundleSizeActive","iconStyle","items","Manifest","OverallConstants","e","hasCompile","CompileName","LoaderTimeline","BoxPlotFilled","LoaderFiles","FundFilled","ModuleResolve","NodeIndexOutlined","PluginsAnalyze","ApiFilled","Boolean","hasBundle","BundleSize","MenuComponent","Menu","MenuOutlined","Size","Menus","withServerAPI","SDK"],"mappings":"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"}
|
|
@@ -295,7 +295,7 @@ const Modules = ({ baseline, current })=>{
|
|
|
295
295
|
}
|
|
296
296
|
]
|
|
297
297
|
}) : null,
|
|
298
|
-
/*#__PURE__*/ jsx(ViewChanges, {
|
|
298
|
+
(null == r ? void 0 : r.current) ? /*#__PURE__*/ jsx(ViewChanges, {
|
|
299
299
|
text: "Current Result Viewer",
|
|
300
300
|
file: r.path,
|
|
301
301
|
data: [
|
|
@@ -314,7 +314,7 @@ const Modules = ({ baseline, current })=>{
|
|
|
314
314
|
group: 'Parsed Source'
|
|
315
315
|
}
|
|
316
316
|
]
|
|
317
|
-
})
|
|
317
|
+
}) : null
|
|
318
318
|
]
|
|
319
319
|
});
|
|
320
320
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pages/Resources/BundleDiff/DiffContainer/modules.mjs","sources":["webpack://@rsdoctor/components/./src/pages/Resources/BundleDiff/DiffContainer/modules.tsx"],"sourcesContent":["import React, { useMemo, useState } from 'react';\nimport {\n Col,\n Divider,\n Row,\n Select,\n Space,\n Table,\n Tag,\n Tooltip,\n Typography,\n} from 'antd';\nimport { uniq } from 'lodash-es';\nimport { InfoCircleOutlined, FileSearchOutlined } from '@ant-design/icons';\nimport {\n BundleDiffComponentCardProps,\n BundleDiffTableModulesData,\n} from './types';\nimport { beautifyModulePath, useUniqModules } from '../../../../utils';\nimport { Size } from '../../../../constants';\nimport { KeywordInput } from '../../../../components/Form/keyword';\nimport { ViewChanges } from './changes';\nimport { UpdateType } from './constants';\nimport { Badge as Bdg } from '../../../../components/Badge';\nimport { ModuleHashPattern, getTargetColumnPropsForModuleRow } from './row';\nimport { Graph } from '@rsdoctor/utils/common';\n\nexport function getUpdateType(e: BundleDiffTableModulesData): UpdateType {\n if (e.baseline && !e.current) {\n // deleted\n return UpdateType.Deleted;\n }\n\n if (!e.baseline && e.current) {\n // new\n return UpdateType.New;\n }\n\n if (e.baseline && e.current) {\n if (\n e.baseline.size.sourceSize === e.current.size.sourceSize &&\n e.baseline.size.parsedSize === e.current.size.parsedSize\n ) {\n // not changed\n return UpdateType.NotChanged;\n }\n // update\n return UpdateType.Changed;\n }\n\n throw new Error('Update Type not match');\n}\n\nexport const FileUpdateTypeTag: React.FC<{ type: UpdateType }> = ({ type }) => {\n if (type === UpdateType.NotChanged) {\n return (\n <Tooltip title=\"It hasn't changed between Baseline and Current\">\n <Tag color=\"success\">Not Changed</Tag>\n </Tooltip>\n );\n }\n if (type === UpdateType.Changed) {\n return (\n <Tooltip title=\"It has been changed between Baseline and Current\">\n <Tag color=\"warning\">Changed</Tag>\n </Tooltip>\n );\n }\n if (type === UpdateType.New) {\n return (\n <Tooltip title=\"It is created in Current\">\n <Tag color=\"error\">New</Tag>\n </Tooltip>\n );\n }\n if (type === UpdateType.Deleted) {\n return (\n <Tooltip title=\"It has been deleted in Current\">\n <Tag color=\"error\">Deleted</Tag>\n </Tooltip>\n );\n }\n return null;\n};\n\nexport const Modules: React.FC<BundleDiffComponentCardProps> = ({\n baseline,\n current,\n}) => {\n const bModules = useMemo(\n () => useUniqModules(baseline.moduleGraph.modules),\n [baseline],\n );\n const cModules = useMemo(\n () => useUniqModules(current.moduleGraph.modules),\n [current],\n );\n\n const bChunks = baseline.chunkGraph.chunks;\n const cChunks = current.chunkGraph.chunks;\n\n const bRoot = baseline.root;\n const cRoot = current.root;\n\n const [keyword, setKeyword] = useState<string>();\n const [selectedUpdateTypes, setSelectedUpdateTypes] = useState<UpdateType[]>(\n [],\n );\n\n const dataSource = useMemo(() => {\n const res: Record<string, BundleDiffTableModulesData> = {};\n\n bModules.forEach((mod) => {\n const modPath =\n mod.webpackId?.replace(ModuleHashPattern, '') ||\n mod.path?.replace(ModuleHashPattern, '');\n\n if (!res[modPath]) {\n res[modPath] = {\n path: modPath,\n baseline: mod,\n };\n } else {\n console.warn('[Baseline Module Exists]: ', mod, res);\n }\n });\n\n cModules.forEach((mod) => {\n const modPath =\n mod.webpackId?.replace(ModuleHashPattern, '') ||\n mod.path?.replace(ModuleHashPattern, '');\n\n if (!res[modPath]) {\n res[modPath] = {\n path: modPath,\n };\n }\n res[modPath].current = mod;\n });\n\n return Object.values(res);\n }, [bModules, cModules]);\n\n const filteredDataSource = useMemo(() => {\n let list = dataSource.slice();\n\n if (keyword) {\n list = list.filter((e) => e.path.indexOf(keyword) > -1);\n }\n\n if (selectedUpdateTypes.length) {\n list = list.filter((e) => {\n return selectedUpdateTypes.includes(getUpdateType(e));\n });\n }\n\n return list;\n }, [dataSource, keyword, selectedUpdateTypes]);\n\n const { bFilteredModulesLength, cFilteredModulesLength } = useMemo(() => {\n return {\n bFilteredModulesLength: filteredDataSource.filter((e) => e.baseline)\n .length,\n cFilteredModulesLength: filteredDataSource.filter((e) => e.current)\n .length,\n };\n }, [filteredDataSource]);\n\n return (\n <Row gutter={[Size.BasePadding, Size.BasePadding]}>\n <Col span={24}>\n <Space wrap>\n <KeywordInput\n icon={<FileSearchOutlined />}\n label=\"\"\n labelStyle={{ width: 45 }}\n placeholder=\"Search by name\"\n onChange={(e) => {\n setKeyword(e);\n }}\n />\n <Select\n mode=\"multiple\"\n placeholder=\"Filter by changed type\"\n style={{ width: 200 }}\n options={Object.values(UpdateType).map((e) => ({\n label: e,\n value: e,\n }))}\n allowClear\n onChange={(e) => {\n setSelectedUpdateTypes(e);\n }}\n />\n </Space>\n </Col>\n <Col span={24}>\n <Table\n bordered\n sticky={{ offsetHeader: 54 }}\n pagination={{\n pageSize: 20,\n size: 'small',\n }}\n scroll={{ x: 1700 }}\n dataSource={filteredDataSource}\n rowKey={(e) => e.path}\n columns={[\n {\n fixed: 'left',\n title: (\n <Tooltip\n title={\n <Space direction=\"vertical\">\n <Typography.Text style={{ color: 'inherit' }}>\n filtered modules is {filteredDataSource.length} (Current\n & Baseline)\n </Typography.Text>\n <Typography.Text style={{ color: 'inherit' }}>\n total modules is {dataSource.length} (Current &\n Baseline)\n </Typography.Text>\n </Space>\n }\n >\n <Typography.Text strong>Modules</Typography.Text>\n <Divider type=\"vertical\" />\n <Typography.Text\n type=\"secondary\"\n style={{ fontSize: 10, fontWeight: 400, marginRight: 4 }}\n >\n {filteredDataSource.length}/{dataSource.length}\n </Typography.Text>\n <InfoCircleOutlined />\n </Tooltip>\n ),\n render: (_v, r) => {\n const { alias, inNodeModules } = beautifyModulePath(\n r.path,\n r.baseline ? bRoot : cRoot,\n );\n return (\n <Space>\n <Tooltip title={r.path}>\n <Typography.Text copyable={{ text: r.path }}>\n {alias}\n </Typography.Text>\n </Tooltip>\n <FileUpdateTypeTag type={getUpdateType(r)} />\n {inNodeModules ? (\n <Tag color=\"warning\">node_modules</Tag>\n ) : null}\n </Space>\n );\n },\n },\n getTargetColumnPropsForModuleRow(\n 'current',\n bFilteredModulesLength,\n cFilteredModulesLength,\n ),\n getTargetColumnPropsForModuleRow(\n 'baseline',\n bFilteredModulesLength,\n cFilteredModulesLength,\n ),\n {\n title: 'in Assets',\n render: (_v, r) => {\n const b: string[] = [];\n const c: string[] = [];\n if (r.current) {\n Graph.getChunksByModule(r.current, cChunks).forEach((e) =>\n e.assets.forEach((asset) => c.push(asset)),\n );\n }\n\n if (r.baseline) {\n Graph.getChunksByModule(r.baseline, bChunks).forEach((e) =>\n e.assets.forEach((asset) => b.push(asset)),\n );\n }\n\n if (!b.length && !c.length) return null;\n\n return (\n <Space direction=\"vertical\">\n {uniq(c)\n .filter(Boolean)\n .map((e) => (\n <Bdg label=\"Current\" value={e} key={`c_${e}`} />\n ))}\n {uniq(b)\n .filter(Boolean)\n .map((e) => (\n <Bdg label=\"Baseline\" value={e} key={`b_${e}`} />\n ))}\n </Space>\n );\n },\n },\n {\n title: 'Actions',\n width: 200,\n render: (_v, r) => {\n const isChanged = getUpdateType(r) === UpdateType.Changed;\n return (\n <Space direction=\"vertical\" style={{ maxWidth: 170 }}>\n {isChanged ? (\n <ViewChanges\n text=\"View Changes\"\n file={r.path}\n data={[\n {\n baseline:\n baseline.moduleCodeMap[r.baseline?.id as number]\n ?.source,\n current:\n current.moduleCodeMap[r.current?.id as number]\n ?.source,\n group: 'Source',\n },\n {\n baseline:\n baseline.moduleCodeMap[r.baseline?.id as number]\n ?.transformed,\n current:\n current.moduleCodeMap[r.current?.id as number]\n ?.transformed,\n group: 'Transformed Source',\n },\n {\n baseline:\n baseline.moduleCodeMap[r.baseline?.id as number]\n ?.parsedSource,\n current:\n current.moduleCodeMap[r.current?.id as number]\n ?.parsedSource,\n group: 'Parsed Source',\n },\n ]}\n />\n ) : null}\n <ViewChanges\n text=\"Current Result Viewer\"\n file={r.path}\n data={[\n {\n baseline:\n current.moduleCodeMap[r.current!.id]?.source,\n current:\n current.moduleCodeMap[r.current!.id]?.transformed,\n baselineTitle: 'Current Source',\n currentTitle: 'Current Transformed Source',\n group: 'Transformed Source',\n },\n {\n baseline:\n current.moduleCodeMap[r.current!.id]?.source,\n current:\n current.moduleCodeMap[r.current!.id]?.parsedSource,\n baselineTitle: 'Current Source',\n currentTitle: 'Current Parsed Source',\n group: 'Parsed Source',\n },\n ]}\n />\n </Space>\n );\n },\n },\n ]}\n />\n </Col>\n </Row>\n );\n};\n"],"names":["getUpdateType","e","UpdateType","Error","FileUpdateTypeTag","type","Tooltip","Tag","Modules","baseline","current","bModules","useMemo","useUniqModules","cModules","bChunks","cChunks","bRoot","cRoot","keyword","setKeyword","useState","selectedUpdateTypes","setSelectedUpdateTypes","dataSource","res","mod","_mod_webpackId","_mod_path","modPath","ModuleHashPattern","console","Object","filteredDataSource","list","bFilteredModulesLength","cFilteredModulesLength","Row","Size","Col","Space","KeywordInput","FileSearchOutlined","Select","Table","Typography","Divider","InfoCircleOutlined","_v","r","alias","inNodeModules","beautifyModulePath","getTargetColumnPropsForModuleRow","b","c","Graph","asset","uniq","Boolean","Bdg","_baseline_moduleCodeMap_r_baseline_id","_r_baseline","_current_moduleCodeMap_r_current_id","_r_current","_baseline_moduleCodeMap_r_baseline_id1","_r_baseline1","_current_moduleCodeMap_r_current_id1","_r_current1","_baseline_moduleCodeMap_r_baseline_id2","_r_baseline2","_current_moduleCodeMap_r_current_id2","_r_current2","_current_moduleCodeMap_r_current_id3","_current_moduleCodeMap_r_current_id4","_current_moduleCodeMap_r_current_id5","_current_moduleCodeMap_r_current_id6","isChanged","ViewChanges"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pages/Resources/BundleDiff/DiffContainer/modules.mjs","sources":["webpack://@rsdoctor/components/./src/pages/Resources/BundleDiff/DiffContainer/modules.tsx"],"sourcesContent":["import React, { useMemo, useState } from 'react';\nimport {\n Col,\n Divider,\n Row,\n Select,\n Space,\n Table,\n Tag,\n Tooltip,\n Typography,\n} from 'antd';\nimport { uniq } from 'lodash-es';\nimport { InfoCircleOutlined, FileSearchOutlined } from '@ant-design/icons';\nimport {\n BundleDiffComponentCardProps,\n BundleDiffTableModulesData,\n} from './types';\nimport { beautifyModulePath, useUniqModules } from '../../../../utils';\nimport { Size } from '../../../../constants';\nimport { KeywordInput } from '../../../../components/Form/keyword';\nimport { ViewChanges } from './changes';\nimport { UpdateType } from './constants';\nimport { Badge as Bdg } from '../../../../components/Badge';\nimport { ModuleHashPattern, getTargetColumnPropsForModuleRow } from './row';\nimport { Graph } from '@rsdoctor/utils/common';\n\nexport function getUpdateType(e: BundleDiffTableModulesData): UpdateType {\n if (e.baseline && !e.current) {\n // deleted\n return UpdateType.Deleted;\n }\n\n if (!e.baseline && e.current) {\n // new\n return UpdateType.New;\n }\n\n if (e.baseline && e.current) {\n if (\n e.baseline.size.sourceSize === e.current.size.sourceSize &&\n e.baseline.size.parsedSize === e.current.size.parsedSize\n ) {\n // not changed\n return UpdateType.NotChanged;\n }\n // update\n return UpdateType.Changed;\n }\n\n throw new Error('Update Type not match');\n}\n\nexport const FileUpdateTypeTag: React.FC<{ type: UpdateType }> = ({ type }) => {\n if (type === UpdateType.NotChanged) {\n return (\n <Tooltip title=\"It hasn't changed between Baseline and Current\">\n <Tag color=\"success\">Not Changed</Tag>\n </Tooltip>\n );\n }\n if (type === UpdateType.Changed) {\n return (\n <Tooltip title=\"It has been changed between Baseline and Current\">\n <Tag color=\"warning\">Changed</Tag>\n </Tooltip>\n );\n }\n if (type === UpdateType.New) {\n return (\n <Tooltip title=\"It is created in Current\">\n <Tag color=\"error\">New</Tag>\n </Tooltip>\n );\n }\n if (type === UpdateType.Deleted) {\n return (\n <Tooltip title=\"It has been deleted in Current\">\n <Tag color=\"error\">Deleted</Tag>\n </Tooltip>\n );\n }\n return null;\n};\n\nexport const Modules: React.FC<BundleDiffComponentCardProps> = ({\n baseline,\n current,\n}) => {\n const bModules = useMemo(\n () => useUniqModules(baseline.moduleGraph.modules),\n [baseline],\n );\n const cModules = useMemo(\n () => useUniqModules(current.moduleGraph.modules),\n [current],\n );\n\n const bChunks = baseline.chunkGraph.chunks;\n const cChunks = current.chunkGraph.chunks;\n\n const bRoot = baseline.root;\n const cRoot = current.root;\n\n const [keyword, setKeyword] = useState<string>();\n const [selectedUpdateTypes, setSelectedUpdateTypes] = useState<UpdateType[]>(\n [],\n );\n\n const dataSource = useMemo(() => {\n const res: Record<string, BundleDiffTableModulesData> = {};\n\n bModules.forEach((mod) => {\n const modPath =\n mod.webpackId?.replace(ModuleHashPattern, '') ||\n mod.path?.replace(ModuleHashPattern, '');\n\n if (!res[modPath]) {\n res[modPath] = {\n path: modPath,\n baseline: mod,\n };\n } else {\n console.warn('[Baseline Module Exists]: ', mod, res);\n }\n });\n\n cModules.forEach((mod) => {\n const modPath =\n mod.webpackId?.replace(ModuleHashPattern, '') ||\n mod.path?.replace(ModuleHashPattern, '');\n\n if (!res[modPath]) {\n res[modPath] = {\n path: modPath,\n };\n }\n res[modPath].current = mod;\n });\n\n return Object.values(res);\n }, [bModules, cModules]);\n\n const filteredDataSource = useMemo(() => {\n let list = dataSource.slice();\n\n if (keyword) {\n list = list.filter((e) => e.path.indexOf(keyword) > -1);\n }\n\n if (selectedUpdateTypes.length) {\n list = list.filter((e) => {\n return selectedUpdateTypes.includes(getUpdateType(e));\n });\n }\n\n return list;\n }, [dataSource, keyword, selectedUpdateTypes]);\n\n const { bFilteredModulesLength, cFilteredModulesLength } = useMemo(() => {\n return {\n bFilteredModulesLength: filteredDataSource.filter((e) => e.baseline)\n .length,\n cFilteredModulesLength: filteredDataSource.filter((e) => e.current)\n .length,\n };\n }, [filteredDataSource]);\n\n return (\n <Row gutter={[Size.BasePadding, Size.BasePadding]}>\n <Col span={24}>\n <Space wrap>\n <KeywordInput\n icon={<FileSearchOutlined />}\n label=\"\"\n labelStyle={{ width: 45 }}\n placeholder=\"Search by name\"\n onChange={(e) => {\n setKeyword(e);\n }}\n />\n <Select\n mode=\"multiple\"\n placeholder=\"Filter by changed type\"\n style={{ width: 200 }}\n options={Object.values(UpdateType).map((e) => ({\n label: e,\n value: e,\n }))}\n allowClear\n onChange={(e) => {\n setSelectedUpdateTypes(e);\n }}\n />\n </Space>\n </Col>\n <Col span={24}>\n <Table\n bordered\n sticky={{ offsetHeader: 54 }}\n pagination={{\n pageSize: 20,\n size: 'small',\n }}\n scroll={{ x: 1700 }}\n dataSource={filteredDataSource}\n rowKey={(e) => e.path}\n columns={[\n {\n fixed: 'left',\n title: (\n <Tooltip\n title={\n <Space direction=\"vertical\">\n <Typography.Text style={{ color: 'inherit' }}>\n filtered modules is {filteredDataSource.length} (Current\n & Baseline)\n </Typography.Text>\n <Typography.Text style={{ color: 'inherit' }}>\n total modules is {dataSource.length} (Current &\n Baseline)\n </Typography.Text>\n </Space>\n }\n >\n <Typography.Text strong>Modules</Typography.Text>\n <Divider type=\"vertical\" />\n <Typography.Text\n type=\"secondary\"\n style={{ fontSize: 10, fontWeight: 400, marginRight: 4 }}\n >\n {filteredDataSource.length}/{dataSource.length}\n </Typography.Text>\n <InfoCircleOutlined />\n </Tooltip>\n ),\n render: (_v, r) => {\n const { alias, inNodeModules } = beautifyModulePath(\n r.path,\n r.baseline ? bRoot : cRoot,\n );\n return (\n <Space>\n <Tooltip title={r.path}>\n <Typography.Text copyable={{ text: r.path }}>\n {alias}\n </Typography.Text>\n </Tooltip>\n <FileUpdateTypeTag type={getUpdateType(r)} />\n {inNodeModules ? (\n <Tag color=\"warning\">node_modules</Tag>\n ) : null}\n </Space>\n );\n },\n },\n getTargetColumnPropsForModuleRow(\n 'current',\n bFilteredModulesLength,\n cFilteredModulesLength,\n ),\n getTargetColumnPropsForModuleRow(\n 'baseline',\n bFilteredModulesLength,\n cFilteredModulesLength,\n ),\n {\n title: 'in Assets',\n render: (_v, r) => {\n const b: string[] = [];\n const c: string[] = [];\n if (r.current) {\n Graph.getChunksByModule(r.current, cChunks).forEach((e) =>\n e.assets.forEach((asset) => c.push(asset)),\n );\n }\n\n if (r.baseline) {\n Graph.getChunksByModule(r.baseline, bChunks).forEach((e) =>\n e.assets.forEach((asset) => b.push(asset)),\n );\n }\n\n if (!b.length && !c.length) return null;\n\n return (\n <Space direction=\"vertical\">\n {uniq(c)\n .filter(Boolean)\n .map((e) => (\n <Bdg label=\"Current\" value={e} key={`c_${e}`} />\n ))}\n {uniq(b)\n .filter(Boolean)\n .map((e) => (\n <Bdg label=\"Baseline\" value={e} key={`b_${e}`} />\n ))}\n </Space>\n );\n },\n },\n {\n title: 'Actions',\n width: 200,\n render: (_v, r) => {\n const isChanged = getUpdateType(r) === UpdateType.Changed;\n return (\n <Space direction=\"vertical\" style={{ maxWidth: 170 }}>\n {isChanged ? (\n <ViewChanges\n text=\"View Changes\"\n file={r.path}\n data={[\n {\n baseline:\n baseline.moduleCodeMap[r.baseline?.id as number]\n ?.source,\n current:\n current.moduleCodeMap[r.current?.id as number]\n ?.source,\n group: 'Source',\n },\n {\n baseline:\n baseline.moduleCodeMap[r.baseline?.id as number]\n ?.transformed,\n current:\n current.moduleCodeMap[r.current?.id as number]\n ?.transformed,\n group: 'Transformed Source',\n },\n {\n baseline:\n baseline.moduleCodeMap[r.baseline?.id as number]\n ?.parsedSource,\n current:\n current.moduleCodeMap[r.current?.id as number]\n ?.parsedSource,\n group: 'Parsed Source',\n },\n ]}\n />\n ) : null}\n {r?.current ? (\n <ViewChanges\n text=\"Current Result Viewer\"\n file={r.path}\n data={[\n {\n baseline:\n current.moduleCodeMap[r.current!.id]?.source,\n current:\n current.moduleCodeMap[r.current!.id]?.transformed,\n baselineTitle: 'Current Source',\n currentTitle: 'Current Transformed Source',\n group: 'Transformed Source',\n },\n {\n baseline:\n current.moduleCodeMap[r.current!.id]?.source,\n current:\n current.moduleCodeMap[r.current!.id]\n ?.parsedSource,\n baselineTitle: 'Current Source',\n currentTitle: 'Current Parsed Source',\n group: 'Parsed Source',\n },\n ]}\n />\n ) : null}\n </Space>\n );\n },\n },\n ]}\n />\n </Col>\n </Row>\n );\n};\n"],"names":["getUpdateType","e","UpdateType","Error","FileUpdateTypeTag","type","Tooltip","Tag","Modules","baseline","current","bModules","useMemo","useUniqModules","cModules","bChunks","cChunks","bRoot","cRoot","keyword","setKeyword","useState","selectedUpdateTypes","setSelectedUpdateTypes","dataSource","res","mod","_mod_webpackId","_mod_path","modPath","ModuleHashPattern","console","Object","filteredDataSource","list","bFilteredModulesLength","cFilteredModulesLength","Row","Size","Col","Space","KeywordInput","FileSearchOutlined","Select","Table","Typography","Divider","InfoCircleOutlined","_v","r","alias","inNodeModules","beautifyModulePath","getTargetColumnPropsForModuleRow","b","c","Graph","asset","uniq","Boolean","Bdg","_baseline_moduleCodeMap_r_baseline_id","_r_baseline","_current_moduleCodeMap_r_current_id","_r_current","_baseline_moduleCodeMap_r_baseline_id1","_r_baseline1","_current_moduleCodeMap_r_current_id1","_r_current1","_baseline_moduleCodeMap_r_baseline_id2","_r_baseline2","_current_moduleCodeMap_r_current_id2","_r_current2","_current_moduleCodeMap_r_current_id3","_current_moduleCodeMap_r_current_id4","_current_moduleCodeMap_r_current_id5","_current_moduleCodeMap_r_current_id6","isChanged","ViewChanges"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pages/Uploader/constants.mjs","sources":["webpack://@rsdoctor/components/./src/pages/Uploader/constants.ts"],"sourcesContent":["import { Client } from '@rsdoctor/types';\n\nexport const name = 'Upload and Analysis';\n\nexport const route = Client.RsdoctorClientRoutes.Uploader;\n"],"names":["name","route","Client"],"mappings":";AAEO,MAAMA,iBAAO;AAEb,MAAMC,QAAQC,OAAO,oBAAoB,CAAC,QAAQ"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { InboxOutlined } from "@ant-design/icons";
|
|
3
|
+
import { Spin, Upload, message } from "antd";
|
|
4
|
+
import { useState } from "react";
|
|
5
|
+
import { readJSONByFileReader } from "../../utils/index.mjs";
|
|
6
|
+
import { isRspackStats } from "../../utils/stats.mjs";
|
|
7
|
+
import { handleRsdoctorManifest, handleRspackStats } from "./utils.mjs";
|
|
8
|
+
export * from "./constants.mjs";
|
|
9
|
+
const Component = ()=>{
|
|
10
|
+
const [loading, setLoading] = useState(false);
|
|
11
|
+
const handleFileUpload = async (file)=>{
|
|
12
|
+
if (!file) return;
|
|
13
|
+
setLoading(true);
|
|
14
|
+
try {
|
|
15
|
+
const json = await readJSONByFileReader(file);
|
|
16
|
+
if (!json || 'object' != typeof json) throw new Error('Invalid JSON format');
|
|
17
|
+
if (isRspackStats(json)) await handleRspackStats(json);
|
|
18
|
+
else handleRsdoctorManifest(json);
|
|
19
|
+
} catch (err) {
|
|
20
|
+
const errorMessage = err instanceof Error ? err.message : 'Unknown error';
|
|
21
|
+
message.error(`Upload failed: ${errorMessage}`);
|
|
22
|
+
console.error('Upload error:', err);
|
|
23
|
+
} finally{
|
|
24
|
+
setLoading(false);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
return /*#__PURE__*/ jsx(Spin, {
|
|
28
|
+
spinning: loading,
|
|
29
|
+
tip: "uploading...",
|
|
30
|
+
children: /*#__PURE__*/ jsxs(Upload.Dragger, {
|
|
31
|
+
multiple: false,
|
|
32
|
+
showUploadList: false,
|
|
33
|
+
accept: ".json",
|
|
34
|
+
onChange: ({ file })=>{
|
|
35
|
+
handleFileUpload(file);
|
|
36
|
+
},
|
|
37
|
+
style: {
|
|
38
|
+
width: '100%'
|
|
39
|
+
},
|
|
40
|
+
beforeUpload: ()=>false,
|
|
41
|
+
children: [
|
|
42
|
+
/*#__PURE__*/ jsx("p", {
|
|
43
|
+
className: "ant-upload-drag-icon",
|
|
44
|
+
children: /*#__PURE__*/ jsx(InboxOutlined, {})
|
|
45
|
+
}),
|
|
46
|
+
/*#__PURE__*/ jsx("p", {
|
|
47
|
+
className: "ant-upload-text",
|
|
48
|
+
children: "Click or drag JSON file to this area to upload and analyze your stats.json or rsdoctor's rsdoctor-data.json."
|
|
49
|
+
}),
|
|
50
|
+
/*#__PURE__*/ jsxs("p", {
|
|
51
|
+
className: "ant-upload-hint",
|
|
52
|
+
children: [
|
|
53
|
+
"The rsdoctor's rsdoctor-data.json is in brief mode, and use the file type: ['json'].",
|
|
54
|
+
/*#__PURE__*/ jsx("a", {
|
|
55
|
+
href: "https://rsdoctor.rs/zh/config/options/output#mode-brief",
|
|
56
|
+
target: "_blank",
|
|
57
|
+
rel: "noopener noreferrer",
|
|
58
|
+
children: "Check the details."
|
|
59
|
+
})
|
|
60
|
+
]
|
|
61
|
+
}),
|
|
62
|
+
/*#__PURE__*/ jsx("p", {
|
|
63
|
+
className: "ant-upload-hint",
|
|
64
|
+
children: "By default, Rsdoctor will emit the rsdoctor-data.json to the output folder."
|
|
65
|
+
})
|
|
66
|
+
]
|
|
67
|
+
})
|
|
68
|
+
});
|
|
69
|
+
};
|
|
70
|
+
const Page = Component;
|
|
71
|
+
export { Page };
|
|
72
|
+
|
|
73
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pages/Uploader/index.mjs","sources":["webpack://@rsdoctor/components/./src/pages/Uploader/index.tsx"],"sourcesContent":["import { InboxOutlined } from '@ant-design/icons';\nimport { Common } from '@rsdoctor/types';\nimport { message, Spin, Upload, UploadFile } from 'antd';\nimport React, { useState } from 'react';\nimport { readJSONByFileReader } from '../../utils';\nimport { isRspackStats } from '../../utils/stats';\nimport { handleRspackStats, handleRsdoctorManifest } from './utils';\n\nconst Component: React.FC = () => {\n const [loading, setLoading] = useState(false);\n\n // Main file upload processing function\n const handleFileUpload = async (file: UploadFile) => {\n if (!file) return;\n\n setLoading(true);\n\n try {\n const json = await readJSONByFileReader<Common.PlainObject>(file);\n\n if (!json || typeof json !== 'object') {\n throw new Error('Invalid JSON format');\n }\n\n if (isRspackStats(json)) {\n await handleRspackStats(json);\n } else {\n handleRsdoctorManifest(json);\n }\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Unknown error';\n message.error(`Upload failed: ${errorMessage}`);\n console.error('Upload error:', err);\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <Spin spinning={loading} tip=\"uploading...\">\n <Upload.Dragger\n multiple={false}\n showUploadList={false}\n accept=\".json\"\n onChange={({ file }) => {\n handleFileUpload(file);\n }}\n style={{ width: '100%' }}\n beforeUpload={() => false}\n >\n <p className=\"ant-upload-drag-icon\">\n <InboxOutlined />\n </p>\n <p className=\"ant-upload-text\">\n Click or drag JSON file to this area to upload and analyze your\n stats.json or rsdoctor's rsdoctor-data.json.\n </p>\n <p className=\"ant-upload-hint\">\n The rsdoctor's rsdoctor-data.json is in brief mode, and use the file\n type: ['json'].\n <a\n href=\"https://rsdoctor.rs/zh/config/options/output#mode-brief\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Check the details.\n </a>\n </p>\n <p className=\"ant-upload-hint\">\n By default, Rsdoctor will emit the rsdoctor-data.json to the output\n folder.\n </p>\n </Upload.Dragger>\n </Spin>\n );\n};\n\nexport const Page = Component;\nexport * from './constants';\n"],"names":["Component","loading","setLoading","useState","handleFileUpload","file","json","readJSONByFileReader","Error","isRspackStats","handleRspackStats","handleRsdoctorManifest","err","errorMessage","message","console","Spin","Upload","InboxOutlined","Page"],"mappings":";;;;;;;;AAQA,MAAMA,YAAsB;IAC1B,MAAM,CAACC,SAASC,WAAW,GAAGC,SAAS;IAGvC,MAAMC,mBAAmB,OAAOC;QAC9B,IAAI,CAACA,MAAM;QAEXH,WAAW;QAEX,IAAI;YACF,MAAMI,OAAO,MAAMC,qBAAyCF;YAE5D,IAAI,CAACC,QAAQ,AAAgB,YAAhB,OAAOA,MAClB,MAAM,IAAIE,MAAM;YAGlB,IAAIC,cAAcH,OAChB,MAAMI,kBAAkBJ;iBAExBK,uBAAuBL;QAE3B,EAAE,OAAOM,KAAK;YACZ,MAAMC,eAAeD,eAAeJ,QAAQI,IAAI,OAAO,GAAG;YAC1DE,QAAQ,KAAK,CAAC,CAAC,eAAe,EAAED,cAAc;YAC9CE,QAAQ,KAAK,CAAC,iBAAiBH;QACjC,SAAU;YACRV,WAAW;QACb;IACF;IAEA,OAAO,WAAP,GACE,IAACc,MAAIA;QAAC,UAAUf;QAAS,KAAI;kBAC3B,mBAACgB,OAAO,OAAO;YACb,UAAU;YACV,gBAAgB;YAChB,QAAO;YACP,UAAU,CAAC,EAAEZ,IAAI,EAAE;gBACjBD,iBAAiBC;YACnB;YACA,OAAO;gBAAE,OAAO;YAAO;YACvB,cAAc,IAAM;;8BAEpB,IAAC;oBAAE,WAAU;8BACX,kBAACa,eAAaA,CAAAA;;8BAEhB,IAAC;oBAAE,WAAU;8BAAkB;;8BAI/B,KAAC;oBAAE,WAAU;;wBAAkB;sCAG7B,IAAC;4BACC,MAAK;4BACL,QAAO;4BACP,KAAI;sCACL;;;;8BAIH,IAAC;oBAAE,WAAU;8BAAkB;;;;;AAOvC;AAEO,MAAMC,OAAOnB"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { Client, Constants, Manifest } from "@rsdoctor/types";
|
|
2
|
+
import { message } from "antd";
|
|
3
|
+
import { loadRspackStats } from "../../utils/stats.mjs";
|
|
4
|
+
const defaultEnableRoutes = [
|
|
5
|
+
Manifest.RsdoctorManifestClientRoutes.Overall,
|
|
6
|
+
Manifest.RsdoctorManifestClientRoutes.BundleSize
|
|
7
|
+
];
|
|
8
|
+
const buildRedirectUrl = (enableRoutes)=>{
|
|
9
|
+
const baseUrl = `http://${location.host}${location.pathname}#/overall`;
|
|
10
|
+
const queryParams = enableRoutes && enableRoutes.length > 0 ? `?${Client.RsdoctorClientUrlQuery.EnableRoutes}=${encodeURIComponent(JSON.stringify(enableRoutes))}` : '';
|
|
11
|
+
return `${baseUrl}${queryParams}`;
|
|
12
|
+
};
|
|
13
|
+
const setWindowDataAndRedirect = (data, enableRoutes)=>{
|
|
14
|
+
window[Constants.WINDOW_RSDOCTOR_TAG] = data;
|
|
15
|
+
window[Constants.WINDOW_RSDOCTOR_TAG].enableRoutes = enableRoutes;
|
|
16
|
+
const redirectUrl = buildRedirectUrl(enableRoutes);
|
|
17
|
+
location.href = redirectUrl;
|
|
18
|
+
message.success('JSON data loaded successfully!');
|
|
19
|
+
};
|
|
20
|
+
const handleRspackStats = async (json)=>{
|
|
21
|
+
try {
|
|
22
|
+
const manifestJson = await loadRspackStats([
|
|
23
|
+
json
|
|
24
|
+
]);
|
|
25
|
+
if (manifestJson && manifestJson[0]) setWindowDataAndRedirect(manifestJson[0].data, defaultEnableRoutes);
|
|
26
|
+
else throw new Error('Invalid manifest data');
|
|
27
|
+
} catch (err) {
|
|
28
|
+
const errorMessage = err instanceof Error ? err.message : 'Unknown error';
|
|
29
|
+
message.error(`Failed to load Rspack stats: ${errorMessage}`);
|
|
30
|
+
throw err;
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
const handleRsdoctorManifest = (json)=>{
|
|
34
|
+
try {
|
|
35
|
+
const enableRoutes = json.clientRoutes || defaultEnableRoutes;
|
|
36
|
+
setWindowDataAndRedirect(json.data, enableRoutes);
|
|
37
|
+
} catch (err) {
|
|
38
|
+
const errorMessage = err instanceof Error ? err.message : 'Unknown error';
|
|
39
|
+
message.error(`Failed to load manifest data: ${errorMessage}`);
|
|
40
|
+
console.error('Failed to load manifest data:', err);
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
export { handleRsdoctorManifest, handleRspackStats };
|
|
44
|
+
|
|
45
|
+
//# sourceMappingURL=utils.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pages/Uploader/utils.mjs","sources":["webpack://@rsdoctor/components/./src/pages/Uploader/utils.ts"],"sourcesContent":["import { Client, Common, Constants, Manifest } from '@rsdoctor/types';\nimport { message } from 'antd';\nimport { loadRspackStats } from '../../utils/stats';\n\n// Default enabled routes\nconst defaultEnableRoutes = [\n Manifest.RsdoctorManifestClientRoutes.Overall,\n Manifest.RsdoctorManifestClientRoutes.BundleSize,\n];\n\n// Build redirect URL\nconst buildRedirectUrl = (enableRoutes: string[]) => {\n const baseUrl = `http://${location.host}${location.pathname}#/overall`;\n const queryParams =\n enableRoutes && enableRoutes.length > 0\n ? `?${Client.RsdoctorClientUrlQuery.EnableRoutes}=${encodeURIComponent(JSON.stringify(enableRoutes))}`\n : '';\n return `${baseUrl}${queryParams}`;\n};\n\n// Set window data and redirect\nconst setWindowDataAndRedirect = (data: any, enableRoutes: string[]) => {\n window[Constants.WINDOW_RSDOCTOR_TAG] = data;\n window[Constants.WINDOW_RSDOCTOR_TAG].enableRoutes = enableRoutes;\n\n const redirectUrl = buildRedirectUrl(enableRoutes);\n location.href = redirectUrl;\n\n message.success('JSON data loaded successfully!');\n};\n\n// Handle Rspack Stats data\nexport const handleRspackStats = async (json: Common.PlainObject) => {\n try {\n const manifestJson = await loadRspackStats([json]);\n if (manifestJson && manifestJson[0]) {\n setWindowDataAndRedirect(manifestJson[0].data, defaultEnableRoutes);\n } else {\n throw new Error('Invalid manifest data');\n }\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Unknown error';\n message.error(`Failed to load Rspack stats: ${errorMessage}`);\n throw err;\n }\n};\n\n// Handle Rsdoctor Manifest data\nexport const handleRsdoctorManifest = (json: Common.PlainObject) => {\n try {\n const enableRoutes = json.clientRoutes || defaultEnableRoutes;\n setWindowDataAndRedirect(json.data, enableRoutes);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Unknown error';\n message.error(`Failed to load manifest data: ${errorMessage}`);\n console.error('Failed to load manifest data:', err);\n }\n};\n"],"names":["defaultEnableRoutes","Manifest","buildRedirectUrl","enableRoutes","baseUrl","location","queryParams","Client","encodeURIComponent","JSON","setWindowDataAndRedirect","data","window","Constants","redirectUrl","message","handleRspackStats","json","manifestJson","loadRspackStats","Error","err","errorMessage","handleRsdoctorManifest","console"],"mappings":";;;AAKA,MAAMA,sBAAsB;IAC1BC,SAAS,4BAA4B,CAAC,OAAO;IAC7CA,SAAS,4BAA4B,CAAC,UAAU;CACjD;AAGD,MAAMC,mBAAmB,CAACC;IACxB,MAAMC,UAAU,CAAC,OAAO,EAAEC,SAAS,IAAI,GAAGA,SAAS,QAAQ,CAAC,SAAS,CAAC;IACtE,MAAMC,cACJH,gBAAgBA,aAAa,MAAM,GAAG,IAClC,CAAC,CAAC,EAAEI,OAAO,sBAAsB,CAAC,YAAY,CAAC,CAAC,EAAEC,mBAAmBC,KAAK,SAAS,CAACN,gBAAgB,GACpG;IACN,OAAO,GAAGC,UAAUE,aAAa;AACnC;AAGA,MAAMI,2BAA2B,CAACC,MAAWR;IAC3CS,MAAM,CAACC,UAAU,mBAAmB,CAAC,GAAGF;IACxCC,MAAM,CAACC,UAAU,mBAAmB,CAAC,CAAC,YAAY,GAAGV;IAErD,MAAMW,cAAcZ,iBAAiBC;IACrCE,SAAS,IAAI,GAAGS;IAEhBC,QAAQ,OAAO,CAAC;AAClB;AAGO,MAAMC,oBAAoB,OAAOC;IACtC,IAAI;QACF,MAAMC,eAAe,MAAMC,gBAAgB;YAACF;SAAK;QACjD,IAAIC,gBAAgBA,YAAY,CAAC,EAAE,EACjCR,yBAAyBQ,YAAY,CAAC,EAAE,CAAC,IAAI,EAAElB;aAE/C,MAAM,IAAIoB,MAAM;IAEpB,EAAE,OAAOC,KAAK;QACZ,MAAMC,eAAeD,eAAeD,QAAQC,IAAI,OAAO,GAAG;QAC1DN,QAAQ,KAAK,CAAC,CAAC,6BAA6B,EAAEO,cAAc;QAC5D,MAAMD;IACR;AACF;AAGO,MAAME,yBAAyB,CAACN;IACrC,IAAI;QACF,MAAMd,eAAec,KAAK,YAAY,IAAIjB;QAC1CU,yBAAyBO,KAAK,IAAI,EAAEd;IACtC,EAAE,OAAOkB,KAAK;QACZ,MAAMC,eAAeD,eAAeD,QAAQC,IAAI,OAAO,GAAG;QAC1DN,QAAQ,KAAK,CAAC,CAAC,8BAA8B,EAAEO,cAAc;QAC7DE,QAAQ,KAAK,CAAC,iCAAiCH;IACjD;AACF"}
|
package/dist/pages/index.d.ts
CHANGED
package/dist/pages/index.mjs
CHANGED
|
@@ -8,4 +8,5 @@ import * as __WEBPACK_EXTERNAL_MODULE__ModuleResolve_index_mjs_2463b148__ from "
|
|
|
8
8
|
import * as __WEBPACK_EXTERNAL_MODULE__Resources_RuleIndex_index_mjs_458631cc__ from "./Resources/RuleIndex/index.mjs";
|
|
9
9
|
import * as __WEBPACK_EXTERNAL_MODULE__TreeShaking_index_mjs_1daf5cdb__ from "./TreeShaking/index.mjs";
|
|
10
10
|
import * as __WEBPACK_EXTERNAL_MODULE__Resources_BundleDiff_index_mjs_3b739fff__ from "./Resources/BundleDiff/index.mjs";
|
|
11
|
-
|
|
11
|
+
import * as __WEBPACK_EXTERNAL_MODULE__Uploader_index_mjs_e3f3ea84__ from "./Uploader/index.mjs";
|
|
12
|
+
export { __WEBPACK_EXTERNAL_MODULE__Resources_BundleDiff_index_mjs_3b739fff__ as BundleDiff, __WEBPACK_EXTERNAL_MODULE__BundleSize_index_mjs_d0a2fb23__ as BundleSize, __WEBPACK_EXTERNAL_MODULE__WebpackLoaders_Analysis_index_mjs_a1d3659a__ as LoaderFiles, __WEBPACK_EXTERNAL_MODULE__WebpackLoaders_Overall_index_mjs_7fb4d495__ as LoaderTimeline, __WEBPACK_EXTERNAL_MODULE__ModuleAnalyze_index_mjs_4385c65f__ as ModuleAnalyze, __WEBPACK_EXTERNAL_MODULE__ModuleResolve_index_mjs_2463b148__ as ModuleResolve, __WEBPACK_EXTERNAL_MODULE__Overall_index_mjs_0ded43f9__ as Overall, __WEBPACK_EXTERNAL_MODULE__WebpackPlugins_index_mjs_a5b22b8e__ as PluginsAnalyze, __WEBPACK_EXTERNAL_MODULE__Resources_RuleIndex_index_mjs_458631cc__ as RuleIndex, __WEBPACK_EXTERNAL_MODULE__TreeShaking_index_mjs_1daf5cdb__ as TreeShaking, __WEBPACK_EXTERNAL_MODULE__Uploader_index_mjs_e3f3ea84__ as Uploader };
|
|
@@ -4,6 +4,7 @@ export declare class BriefDataLoader extends BaseDataLoader {
|
|
|
4
4
|
isLocal(): boolean;
|
|
5
5
|
loadData<T extends Manifest.RsdoctorManifestMappingKeys>(key: T): Promise<Manifest.InferManifestDataValue<T>>;
|
|
6
6
|
getData(scope: keyof Manifest.RsdoctorManifestData): any;
|
|
7
|
+
private parseData;
|
|
7
8
|
loadAPI<T extends SDK.ServerAPI.API, B extends SDK.ServerAPI.InferRequestBodyType<T> = SDK.ServerAPI.InferRequestBodyType<T>, R extends SDK.ServerAPI.InferResponseType<T> = SDK.ServerAPI.InferResponseType<T>>(...args: B extends void ? [api: T] : [api: T, body: B]): Promise<R>;
|
|
8
9
|
dispose(): void;
|
|
9
10
|
onDataUpdate(): void;
|
|
@@ -13,8 +13,8 @@ class BriefDataLoader extends BaseDataLoader {
|
|
|
13
13
|
if (!data) return;
|
|
14
14
|
let res = data;
|
|
15
15
|
if (!this.shardingDataMap.has(scope)) {
|
|
16
|
-
const scopeData =
|
|
17
|
-
this.shardingDataMap.set(scope, scopeData);
|
|
16
|
+
const scopeData = this.parseData(res);
|
|
17
|
+
this.shardingDataMap.set(scope, Promise.resolve(scopeData));
|
|
18
18
|
}
|
|
19
19
|
res = await this.shardingDataMap.get(scope);
|
|
20
20
|
return res;
|
|
@@ -23,6 +23,15 @@ class BriefDataLoader extends BaseDataLoader {
|
|
|
23
23
|
console.log(`[getData]-[scope]: ${scope}`);
|
|
24
24
|
return window[Constants.WINDOW_RSDOCTOR_TAG][scope];
|
|
25
25
|
}
|
|
26
|
+
parseData(data) {
|
|
27
|
+
if ('object' == typeof data && null !== data) return data;
|
|
28
|
+
if ('string' != typeof data) return data;
|
|
29
|
+
try {
|
|
30
|
+
return JSON.parse(Algorithm.decompressText(data));
|
|
31
|
+
} catch {
|
|
32
|
+
return data;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
26
35
|
async loadAPI(...args) {
|
|
27
36
|
return this.loader.loadAPI(...args);
|
|
28
37
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils/data/brief.mjs","sources":["webpack://@rsdoctor/components/./src/utils/data/brief.ts"],"sourcesContent":["import { Manifest, SDK } from '@rsdoctor/types';\nimport { Algorithm } from '@rsdoctor/utils/common';\nimport { BaseDataLoader } from './base';\nimport { Constants } from '@rsdoctor/types';\n\nexport class BriefDataLoader extends BaseDataLoader {\n public isLocal() {\n return false;\n }\n\n public async loadData<T extends Manifest.RsdoctorManifestMappingKeys>(\n key: T,\n ): Promise<Manifest.InferManifestDataValue<T>>;\n\n public async loadData(key: string): Promise<unknown> {\n console.log(`[loadData]-[key]: ${key}`);\n const [scope] = this.getKeys(key);\n\n console.log(`[loadData]-[scope]: ${scope}`);\n const data = this.getData(scope);\n\n if (!data) return;\n\n let res = data;\n\n // only cache by the root key in data\n if (!this.shardingDataMap.has(scope)) {\n const scopeData
|
|
1
|
+
{"version":3,"file":"utils/data/brief.mjs","sources":["webpack://@rsdoctor/components/./src/utils/data/brief.ts"],"sourcesContent":["import { Manifest, SDK } from '@rsdoctor/types';\nimport { Algorithm } from '@rsdoctor/utils/common';\nimport { BaseDataLoader } from './base';\nimport { Constants } from '@rsdoctor/types';\n\nexport class BriefDataLoader extends BaseDataLoader {\n public isLocal() {\n return false;\n }\n\n public async loadData<T extends Manifest.RsdoctorManifestMappingKeys>(\n key: T,\n ): Promise<Manifest.InferManifestDataValue<T>>;\n\n public async loadData(key: string): Promise<unknown> {\n console.log(`[loadData]-[key]: ${key}`);\n const [scope] = this.getKeys(key);\n\n console.log(`[loadData]-[scope]: ${scope}`);\n const data = this.getData(scope);\n\n if (!data) return;\n\n let res = data;\n\n // only cache by the root key in data\n if (!this.shardingDataMap.has(scope)) {\n const scopeData = this.parseData(res);\n\n this.shardingDataMap.set(scope, Promise.resolve(scopeData));\n }\n\n res = await this.shardingDataMap.get(scope);\n return res;\n }\n\n public getData(scope: keyof Manifest.RsdoctorManifestData) {\n console.log(`[getData]-[scope]: ${scope}`);\n return window[Constants.WINDOW_RSDOCTOR_TAG][scope];\n }\n\n private parseData(data: unknown): unknown {\n if (typeof data === 'object' && data !== null) {\n return data;\n }\n\n if (typeof data !== 'string') {\n return data;\n }\n\n try {\n return JSON.parse(Algorithm.decompressText(data));\n } catch {\n return data;\n }\n }\n\n public async loadAPI<\n T extends SDK.ServerAPI.API,\n B extends\n SDK.ServerAPI.InferRequestBodyType<T> = SDK.ServerAPI.InferRequestBodyType<T>,\n R extends\n SDK.ServerAPI.InferResponseType<T> = SDK.ServerAPI.InferResponseType<T>,\n >(...args: B extends void ? [api: T] : [api: T, body: B]): Promise<R> {\n return this.loader.loadAPI(...args) as R;\n }\n\n public dispose() {\n super.dispose();\n }\n\n public onDataUpdate() {}\n\n public removeOnDataUpdate() {}\n}\n"],"names":["BriefDataLoader","BaseDataLoader","key","console","scope","data","res","scopeData","Promise","window","Constants","JSON","Algorithm","args"],"mappings":";;;AAKO,MAAMA,wBAAwBC;IAC5B,UAAU;QACf,OAAO;IACT;IAMA,MAAa,SAASC,GAAW,EAAoB;QACnDC,QAAQ,GAAG,CAAC,CAAC,kBAAkB,EAAED,KAAK;QACtC,MAAM,CAACE,MAAM,GAAG,IAAI,CAAC,OAAO,CAACF;QAE7BC,QAAQ,GAAG,CAAC,CAAC,oBAAoB,EAAEC,OAAO;QAC1C,MAAMC,OAAO,IAAI,CAAC,OAAO,CAACD;QAE1B,IAAI,CAACC,MAAM;QAEX,IAAIC,MAAMD;QAGV,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAACD,QAAQ;YACpC,MAAMG,YAAY,IAAI,CAAC,SAAS,CAACD;YAEjC,IAAI,CAAC,eAAe,CAAC,GAAG,CAACF,OAAOI,QAAQ,OAAO,CAACD;QAClD;QAEAD,MAAM,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAACF;QACrC,OAAOE;IACT;IAEO,QAAQF,KAA0C,EAAE;QACzDD,QAAQ,GAAG,CAAC,CAAC,mBAAmB,EAAEC,OAAO;QACzC,OAAOK,MAAM,CAACC,UAAU,mBAAmB,CAAC,CAACN,MAAM;IACrD;IAEQ,UAAUC,IAAa,EAAW;QACxC,IAAI,AAAgB,YAAhB,OAAOA,QAAqBA,AAAS,SAATA,MAC9B,OAAOA;QAGT,IAAI,AAAgB,YAAhB,OAAOA,MACT,OAAOA;QAGT,IAAI;YACF,OAAOM,KAAK,KAAK,CAACC,UAAU,cAAc,CAACP;QAC7C,EAAE,OAAM;YACN,OAAOA;QACT;IACF;IAEA,MAAa,QAMX,GAAGQ,IAAmD,EAAc;QACpE,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,IAAIA;IAChC;IAEO,UAAU;QACf,KAAK,CAAC;IACR;IAEO,eAAe,CAAC;IAEhB,qBAAqB,CAAC;AAC/B"}
|
package/dist/utils/index.d.ts
CHANGED
package/dist/utils/index.mjs
CHANGED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { SDK } from "@rsdoctor/types";
|
|
2
|
+
import { Chunks, ModuleGraphTrans, PackageGraph } from "@rsdoctor/graph";
|
|
3
|
+
import { isArray } from "lodash-es";
|
|
4
|
+
function isRspackStats(json) {
|
|
5
|
+
return json.hash && isArray(json.assets) && isArray(json.chunks) && isArray(json.modules);
|
|
6
|
+
}
|
|
7
|
+
async function loadRspackStats(jsons) {
|
|
8
|
+
const res = await Promise.all(jsons.map(async (json)=>{
|
|
9
|
+
const chunkGraph = Chunks.chunkTransform(new Map(), json);
|
|
10
|
+
const moduleGraph = ModuleGraphTrans.getModuleGraphByStats(json, '.', chunkGraph);
|
|
11
|
+
await Chunks.getAssetsModulesData(moduleGraph, chunkGraph, json.outputPath || '', {}, void 0);
|
|
12
|
+
const pkgGraph = PackageGraph.fromModuleGraph(moduleGraph, '.');
|
|
13
|
+
return {
|
|
14
|
+
hash: json.hash || '',
|
|
15
|
+
moduleGraph: await moduleGraph.toData(),
|
|
16
|
+
chunkGraph: chunkGraph.toData(SDK.ToDataType.Normal),
|
|
17
|
+
packageGraph: pkgGraph.toData()
|
|
18
|
+
};
|
|
19
|
+
}));
|
|
20
|
+
return res.map((e)=>({
|
|
21
|
+
client: {
|
|
22
|
+
enableRoutes: []
|
|
23
|
+
},
|
|
24
|
+
data: {
|
|
25
|
+
pid: 0,
|
|
26
|
+
root: '',
|
|
27
|
+
errors: [],
|
|
28
|
+
configs: [],
|
|
29
|
+
plugin: {},
|
|
30
|
+
summary: {
|
|
31
|
+
costs: []
|
|
32
|
+
},
|
|
33
|
+
envinfo: {},
|
|
34
|
+
resolver: [],
|
|
35
|
+
loader: [],
|
|
36
|
+
moduleCodeMap: {},
|
|
37
|
+
...e
|
|
38
|
+
}
|
|
39
|
+
}));
|
|
40
|
+
}
|
|
41
|
+
export { isRspackStats, loadRspackStats };
|
|
42
|
+
|
|
43
|
+
//# sourceMappingURL=stats.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils/stats.mjs","sources":["webpack://@rsdoctor/components/./src/utils/stats.ts"],"sourcesContent":["import { Common, Manifest, Plugin, SDK } from '@rsdoctor/types';\nimport { PackageGraph } from '@rsdoctor/graph';\nimport { Chunks, ModuleGraphTrans } from '@rsdoctor/graph';\nimport { isArray } from 'lodash-es';\n\nexport function isRspackStats(\n json: Common.PlainObject,\n): json is Plugin.StatsCompilation {\n return (\n json.hash &&\n isArray(json.assets) &&\n isArray(json.chunks) &&\n isArray(json.modules)\n );\n}\n\nexport async function loadRspackStats(\n jsons: Plugin.StatsCompilation[],\n): Promise<Manifest.RsdoctorManifest[]> {\n const res = await Promise.all(\n jsons.map(async (json) => {\n const chunkGraph = Chunks.chunkTransform(new Map(), json);\n const moduleGraph = ModuleGraphTrans.getModuleGraphByStats(\n json,\n '.',\n chunkGraph,\n );\n await Chunks.getAssetsModulesData(\n moduleGraph,\n chunkGraph,\n json.outputPath || '',\n {},\n undefined,\n );\n const pkgGraph = PackageGraph.fromModuleGraph(moduleGraph, '.');\n\n return {\n hash: json.hash || '',\n moduleGraph: await moduleGraph.toData(),\n chunkGraph: chunkGraph.toData(SDK.ToDataType.Normal),\n packageGraph: pkgGraph.toData(),\n } as Pick<\n SDK.StoreData,\n 'moduleGraph' | 'chunkGraph' | 'hash' | 'packageGraph'\n >;\n }),\n );\n\n return res.map((e) => {\n return {\n client: {\n enableRoutes: [],\n },\n data: {\n pid: 0,\n root: '',\n errors: [],\n configs: [],\n plugin: {},\n summary: {\n costs: [],\n },\n envinfo: {} as SDK.EnvInfo,\n resolver: [],\n loader: [],\n moduleCodeMap: {},\n ...e,\n },\n };\n });\n}\n"],"names":["isRspackStats","json","isArray","loadRspackStats","jsons","res","Promise","chunkGraph","Chunks","Map","moduleGraph","ModuleGraphTrans","undefined","pkgGraph","PackageGraph","SDK","e"],"mappings":";;;AAKO,SAASA,cACdC,IAAwB;IAExB,OACEA,KAAK,IAAI,IACTC,QAAQD,KAAK,MAAM,KACnBC,QAAQD,KAAK,MAAM,KACnBC,QAAQD,KAAK,OAAO;AAExB;AAEO,eAAeE,gBACpBC,KAAgC;IAEhC,MAAMC,MAAM,MAAMC,QAAQ,GAAG,CAC3BF,MAAM,GAAG,CAAC,OAAOH;QACf,MAAMM,aAAaC,OAAO,cAAc,CAAC,IAAIC,OAAOR;QACpD,MAAMS,cAAcC,iBAAiB,qBAAqB,CACxDV,MACA,KACAM;QAEF,MAAMC,OAAO,oBAAoB,CAC/BE,aACAH,YACAN,KAAK,UAAU,IAAI,IACnB,CAAC,GACDW;QAEF,MAAMC,WAAWC,aAAa,eAAe,CAACJ,aAAa;QAE3D,OAAO;YACL,MAAMT,KAAK,IAAI,IAAI;YACnB,aAAa,MAAMS,YAAY,MAAM;YACrC,YAAYH,WAAW,MAAM,CAACQ,IAAI,UAAU,CAAC,MAAM;YACnD,cAAcF,SAAS,MAAM;QAC/B;IAIF;IAGF,OAAOR,IAAI,GAAG,CAAC,CAACW,IACP;YACL,QAAQ;gBACN,cAAc,EAAE;YAClB;YACA,MAAM;gBACJ,KAAK;gBACL,MAAM;gBACN,QAAQ,EAAE;gBACV,SAAS,EAAE;gBACX,QAAQ,CAAC;gBACT,SAAS;oBACP,OAAO,EAAE;gBACX;gBACA,SAAS,CAAC;gBACV,UAAU,EAAE;gBACZ,QAAQ,EAAE;gBACV,eAAe,CAAC;gBAChB,GAAGA,CAAC;YACN;QACF;AAEJ"}
|
package/dist/utils/url.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
export declare function isJsDataUrl(path: string): boolean;
|
|
2
2
|
export declare function getManifestUrlFromUrlQuery(): string | void;
|
|
3
|
+
export declare function getEnableRoutesFromUrlQuery(): string[] | void;
|
|
3
4
|
export declare function changeOrigin(origin: string): string;
|
|
4
|
-
export declare function getSharingUrl(manifestCloudUrl: string): string;
|
|
5
|
+
export declare function getSharingUrl(manifestCloudUrl: string, enableRoutes?: string[]): string;
|
|
5
6
|
export declare function getDemoUrl(): string | null;
|
|
6
7
|
export declare const getShortPath: (path: string) => string;
|
|
7
8
|
export declare function isDef<E = unknown>(data: E): data is NonNullable<E>;
|
package/dist/utils/url.mjs
CHANGED
|
@@ -20,6 +20,29 @@ function getManifestUrlFromUrlQuery() {
|
|
|
20
20
|
const url = query[Client.RsdoctorClientUrlQuery.ManifestFile];
|
|
21
21
|
if (url) return decodeURIComponent(url);
|
|
22
22
|
}
|
|
23
|
+
function getEnableRoutesFromUrlQuery() {
|
|
24
|
+
const { query } = url_parse(location.href, true);
|
|
25
|
+
let enableRoutesStr = query[Client.RsdoctorClientUrlQuery.EnableRoutes];
|
|
26
|
+
if (!enableRoutesStr && location.hash) {
|
|
27
|
+
const hashUrl = url_parse(location.hash, true);
|
|
28
|
+
enableRoutesStr = hashUrl.query[Client.RsdoctorClientUrlQuery.EnableRoutes];
|
|
29
|
+
}
|
|
30
|
+
if (!enableRoutesStr && location.hash) {
|
|
31
|
+
const hashFragment = location.hash;
|
|
32
|
+
const queryIndex = hashFragment.indexOf('?');
|
|
33
|
+
if (-1 !== queryIndex) {
|
|
34
|
+
const queryString = hashFragment.substring(queryIndex + 1);
|
|
35
|
+
const urlParams = new URLSearchParams(queryString);
|
|
36
|
+
enableRoutesStr = urlParams.get(Client.RsdoctorClientUrlQuery.EnableRoutes) || void 0;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
if (enableRoutesStr) try {
|
|
40
|
+
const result = JSON.parse(decodeURIComponent(enableRoutesStr));
|
|
41
|
+
return result;
|
|
42
|
+
} catch (err) {
|
|
43
|
+
console.warn('Failed to parse enableRoutes from URL query:', err);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
23
46
|
function changeOrigin(origin) {
|
|
24
47
|
const url = url_parse(location.href, true);
|
|
25
48
|
const newUrl = url_parse(origin, true);
|
|
@@ -30,14 +53,16 @@ function changeOrigin(origin) {
|
|
|
30
53
|
url.set('port', newUrl.port);
|
|
31
54
|
return url.toString();
|
|
32
55
|
}
|
|
33
|
-
function getSharingUrl(manifestCloudUrl) {
|
|
56
|
+
function getSharingUrl(manifestCloudUrl, enableRoutes) {
|
|
34
57
|
const url = url_parse(location.href, true);
|
|
35
58
|
setDefaultUrl(url);
|
|
36
59
|
setUploaderHash(url);
|
|
37
|
-
|
|
60
|
+
const query = {
|
|
38
61
|
...url.query,
|
|
39
62
|
[Client.RsdoctorClientUrlQuery.ManifestFile]: manifestCloudUrl
|
|
40
|
-
}
|
|
63
|
+
};
|
|
64
|
+
if (enableRoutes && enableRoutes.length > 0) query[Client.RsdoctorClientUrlQuery.EnableRoutes] = JSON.stringify(enableRoutes);
|
|
65
|
+
url.set('query', query);
|
|
41
66
|
return url.toString();
|
|
42
67
|
}
|
|
43
68
|
function getDemoUrl() {
|
|
@@ -55,6 +80,6 @@ const getShortPath = (path)=>{
|
|
|
55
80
|
function isDef(data) {
|
|
56
81
|
return null != data;
|
|
57
82
|
}
|
|
58
|
-
export { changeOrigin, getDemoUrl, getManifestUrlFromUrlQuery, getSharingUrl, getShortPath, isDef, isJsDataUrl };
|
|
83
|
+
export { changeOrigin, getDemoUrl, getEnableRoutesFromUrlQuery, getManifestUrlFromUrlQuery, getSharingUrl, getShortPath, isDef, isJsDataUrl };
|
|
59
84
|
|
|
60
85
|
//# sourceMappingURL=url.mjs.map
|
package/dist/utils/url.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils/url.mjs","sources":["webpack://@rsdoctor/components/./src/utils/url.ts"],"sourcesContent":["import parse from 'url-parse';\nimport { Constants, Client } from '@rsdoctor/types';\n\nfunction setDefaultUrl(url: parse<Record<string, string | undefined>>) {\n if (process.env.NODE_ENV !== 'development') {\n const uri = parse(Constants.RsdoctorClientUrl, true);\n url.set('origin', uri.origin);\n url.set('protocol', uri.protocol);\n url.set('host', uri.host);\n url.set('pathname', uri.pathname);\n }\n}\n\nfunction setUploaderHash(url: parse<Record<string, string | undefined>>) {\n if (url.hash.endsWith(Client.RsdoctorClientRoutes.Uploader)) {\n url.set('hash', Client.RsdoctorClientRoutes.Overall);\n }\n}\n\nexport function isJsDataUrl(path: string) {\n return path.startsWith('data:text/javascript;');\n}\n\nexport function getManifestUrlFromUrlQuery(): string | void {\n const { query } = parse(location.href, true);\n const url = query[Client.RsdoctorClientUrlQuery.ManifestFile];\n if (url) {\n return decodeURIComponent(url);\n }\n}\n\nexport function changeOrigin(origin: string) {\n const url = parse(location.href, true);\n const newUrl = parse(origin, true);\n\n setUploaderHash(url);\n\n url.set('origin', origin);\n url.set('protocol', newUrl.protocol);\n url.set('host', newUrl.host);\n url.set('port', newUrl.port);\n\n return url.toString();\n}\n\nexport function getSharingUrl(manifestCloudUrl: string) {\n const url = parse(location.href, true);\n\n setDefaultUrl(url);\n setUploaderHash(url);\n\n
|
|
1
|
+
{"version":3,"file":"utils/url.mjs","sources":["webpack://@rsdoctor/components/./src/utils/url.ts"],"sourcesContent":["import parse from 'url-parse';\nimport { Constants, Client } from '@rsdoctor/types';\n\nfunction setDefaultUrl(url: parse<Record<string, string | undefined>>) {\n if (process.env.NODE_ENV !== 'development') {\n const uri = parse(Constants.RsdoctorClientUrl, true);\n url.set('origin', uri.origin);\n url.set('protocol', uri.protocol);\n url.set('host', uri.host);\n url.set('pathname', uri.pathname);\n }\n}\n\nfunction setUploaderHash(url: parse<Record<string, string | undefined>>) {\n if (url.hash.endsWith(Client.RsdoctorClientRoutes.Uploader)) {\n url.set('hash', Client.RsdoctorClientRoutes.Overall);\n }\n}\n\nexport function isJsDataUrl(path: string) {\n return path.startsWith('data:text/javascript;');\n}\n\nexport function getManifestUrlFromUrlQuery(): string | void {\n const { query } = parse(location.href, true);\n const url = query[Client.RsdoctorClientUrlQuery.ManifestFile];\n if (url) {\n return decodeURIComponent(url);\n }\n}\n\nexport function getEnableRoutesFromUrlQuery(): string[] | void {\n const { query } = parse(location.href, true);\n let enableRoutesStr = query[Client.RsdoctorClientUrlQuery.EnableRoutes];\n\n if (!enableRoutesStr && location.hash) {\n const hashUrl = parse(location.hash, true);\n enableRoutesStr = hashUrl.query[Client.RsdoctorClientUrlQuery.EnableRoutes];\n }\n\n // If still not found, try manual parsing of hash fragment\n if (!enableRoutesStr && location.hash) {\n const hashFragment = location.hash;\n const queryIndex = hashFragment.indexOf('?');\n if (queryIndex !== -1) {\n const queryString = hashFragment.substring(queryIndex + 1);\n const urlParams = new URLSearchParams(queryString);\n enableRoutesStr =\n urlParams.get(Client.RsdoctorClientUrlQuery.EnableRoutes) || undefined;\n }\n }\n\n if (enableRoutesStr) {\n try {\n const result = JSON.parse(decodeURIComponent(enableRoutesStr));\n return result;\n } catch (err) {\n console.warn('Failed to parse enableRoutes from URL query:', err);\n return undefined;\n }\n }\n return undefined;\n}\n\nexport function changeOrigin(origin: string) {\n const url = parse(location.href, true);\n const newUrl = parse(origin, true);\n\n setUploaderHash(url);\n\n url.set('origin', origin);\n url.set('protocol', newUrl.protocol);\n url.set('host', newUrl.host);\n url.set('port', newUrl.port);\n\n return url.toString();\n}\n\nexport function getSharingUrl(\n manifestCloudUrl: string,\n enableRoutes?: string[],\n) {\n const url = parse(location.href, true);\n\n setDefaultUrl(url);\n setUploaderHash(url);\n\n const query: Record<string, string> = {\n ...url.query,\n [Client.RsdoctorClientUrlQuery.ManifestFile]: manifestCloudUrl,\n };\n\n // Add enableRoutes to query if provided\n if (enableRoutes && enableRoutes.length > 0) {\n query[Client.RsdoctorClientUrlQuery.EnableRoutes] =\n JSON.stringify(enableRoutes);\n }\n\n url.set('query', query);\n\n return url.toString();\n}\n\nexport function getDemoUrl() {\n if (process.env.OFFICIAL_DEMO_MANIFEST_PATH) {\n return getSharingUrl(process.env.OFFICIAL_DEMO_MANIFEST_PATH);\n }\n return null;\n}\n\nexport const getShortPath = (path: string) => {\n if (path?.indexOf('node_modules') >= 0) {\n const pathArr = path.split('node_modules');\n return `node_modules${pathArr[pathArr.length - 1]}`;\n }\n if (path?.length) {\n return `${path?.split('/').slice(-4).join('/')}`;\n }\n return path;\n};\n\nexport function isDef<E = unknown>(data: E): data is NonNullable<E> {\n return data !== undefined && data !== null;\n}\n"],"names":["setDefaultUrl","url","process","uri","parse","Constants","setUploaderHash","Client","isJsDataUrl","path","getManifestUrlFromUrlQuery","query","location","decodeURIComponent","getEnableRoutesFromUrlQuery","enableRoutesStr","hashUrl","hashFragment","queryIndex","queryString","urlParams","URLSearchParams","undefined","result","JSON","err","console","changeOrigin","origin","newUrl","getSharingUrl","manifestCloudUrl","enableRoutes","getDemoUrl","getShortPath","pathArr","isDef","data"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rsdoctor/components",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.4-beta.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"repository": {
|
|
@@ -38,32 +38,31 @@
|
|
|
38
38
|
}
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
|
-
"@rsbuild/plugin-check-syntax": "1.
|
|
42
|
-
"@rsbuild/plugin-react": "^1.
|
|
43
|
-
"@rsbuild/plugin-sass": "^1.
|
|
41
|
+
"@rsbuild/plugin-check-syntax": "1.4.0",
|
|
42
|
+
"@rsbuild/plugin-react": "^1.4.0",
|
|
43
|
+
"@rsbuild/plugin-sass": "^1.4.0",
|
|
44
44
|
"@rsbuild/plugin-svgr": "^1.2.1",
|
|
45
|
-
"@
|
|
46
|
-
"@types/lodash-es": "4.17.12",
|
|
45
|
+
"@types/lodash-es": "^4.17.12",
|
|
47
46
|
"@types/node": "^22.8.1",
|
|
48
47
|
"@types/path-browserify": "1.0.3",
|
|
49
|
-
"@types/react": "^18.3.
|
|
48
|
+
"@types/react": "^18.3.24",
|
|
50
49
|
"@types/react-highlight-words": "^0.20.0",
|
|
51
50
|
"@types/url-parse": "1.4.11",
|
|
52
51
|
"react": "18.3.1",
|
|
53
|
-
"typescript": "^5.
|
|
52
|
+
"typescript": "^5.9.2"
|
|
54
53
|
},
|
|
55
54
|
"dependencies": {
|
|
56
55
|
"@ant-design/icons": "5.6.1",
|
|
57
56
|
"@monaco-editor/react": "4.7.0",
|
|
58
57
|
"ansi-to-react": "6.1.6",
|
|
59
58
|
"antd": "5.19.1",
|
|
60
|
-
"axios": "^1.
|
|
59
|
+
"axios": "^1.12.0",
|
|
61
60
|
"clsx": "^2.1.1",
|
|
62
|
-
"dayjs": "1.11.
|
|
61
|
+
"dayjs": "1.11.18",
|
|
63
62
|
"echarts": "^5.6.0",
|
|
64
63
|
"echarts-for-react": "^3.0.3",
|
|
65
64
|
"i18next": "22.0.4",
|
|
66
|
-
"lodash-es": "4.17.21",
|
|
65
|
+
"lodash-es": "^4.17.21",
|
|
67
66
|
"monaco-editor": "0.49.0",
|
|
68
67
|
"path-browserify": "1.0.1",
|
|
69
68
|
"rc-dialog": "9.1.0",
|
|
@@ -74,11 +73,11 @@
|
|
|
74
73
|
"react-json-view": "1.21.3",
|
|
75
74
|
"react-markdown": "^9.1.0",
|
|
76
75
|
"react-router-dom": "6.4.3",
|
|
77
|
-
"socket.io-client": "4.
|
|
76
|
+
"socket.io-client": "4.8.1",
|
|
78
77
|
"url-parse": "1.5.10",
|
|
79
|
-
"@rsdoctor/graph": "1.2.
|
|
80
|
-
"@rsdoctor/types": "1.2.
|
|
81
|
-
"@rsdoctor/utils": "1.2.
|
|
78
|
+
"@rsdoctor/graph": "1.2.4-beta.1",
|
|
79
|
+
"@rsdoctor/types": "1.2.4-beta.1",
|
|
80
|
+
"@rsdoctor/utils": "1.2.4-beta.1"
|
|
82
81
|
},
|
|
83
82
|
"peerDependencies": {
|
|
84
83
|
"react": ">=18.3.1",
|