@rsdoctor/components 1.2.2 → 1.2.4-beta.0

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.
Files changed (37) hide show
  1. package/dist/components/Alerts/collapse-cross-chunks.mjs +1 -1
  2. package/dist/components/Alerts/collapse-cross-chunks.mjs.map +1 -1
  3. package/dist/components/Alerts/collapse.mjs +1 -1
  4. package/dist/components/Alerts/collapse.mjs.map +1 -1
  5. package/dist/components/Layout/header.d.ts +4 -1
  6. package/dist/components/Layout/header.mjs +2 -2
  7. package/dist/components/Layout/header.mjs.map +1 -1
  8. package/dist/components/Layout/index.mjs +13 -3
  9. package/dist/components/Layout/index.mjs.map +1 -1
  10. package/dist/components/Layout/menus.mjs +4 -2
  11. package/dist/components/Layout/menus.mjs.map +1 -1
  12. package/dist/pages/BundleSize/components/index.mjs +3 -3
  13. package/dist/pages/BundleSize/components/index.mjs.map +1 -1
  14. package/dist/pages/BundleSize/constants.d.ts +1 -1
  15. package/dist/pages/BundleSize/constants.mjs.map +1 -1
  16. package/dist/pages/Resources/BundleDiff/DiffContainer/modules.mjs +2 -2
  17. package/dist/pages/Resources/BundleDiff/DiffContainer/modules.mjs.map +1 -1
  18. package/dist/pages/Uploader/constants.d.ts +3 -0
  19. package/dist/pages/Uploader/constants.mjs +6 -0
  20. package/dist/pages/Uploader/constants.mjs.map +1 -0
  21. package/dist/pages/Uploader/index.d.ts +3 -0
  22. package/dist/pages/Uploader/index.mjs +74 -0
  23. package/dist/pages/Uploader/index.mjs.map +1 -0
  24. package/dist/pages/index.d.ts +1 -0
  25. package/dist/pages/index.mjs +2 -1
  26. package/dist/utils/data/brief.d.ts +1 -0
  27. package/dist/utils/data/brief.mjs +11 -2
  28. package/dist/utils/data/brief.mjs.map +1 -1
  29. package/dist/utils/index.d.ts +1 -0
  30. package/dist/utils/index.mjs +1 -0
  31. package/dist/utils/stats.d.ts +3 -0
  32. package/dist/utils/stats.mjs +43 -0
  33. package/dist/utils/stats.mjs.map +1 -0
  34. package/dist/utils/url.d.ts +2 -1
  35. package/dist/utils/url.mjs +29 -4
  36. package/dist/utils/url.mjs.map +1 -1
  37. package/package.json +9 -10
@@ -89,7 +89,7 @@ const CrossChunksAlertCollapse = (props)=>{
89
89
  })
90
90
  }));
91
91
  return {
92
- key: d.code,
92
+ key: `${dupPackage.name}@${dupPackage.version}`,
93
93
  label: /*#__PURE__*/ jsx(LabelComponent, {
94
94
  title: /*#__PURE__*/ jsx(Tag, {
95
95
  style: {
@@ -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: d.code,\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,KAAKT,EAAE,IAAI;YACX,OAAO,WAAP,GACE,IAACT,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
+ {"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"}
@@ -171,7 +171,7 @@ const AlertCollapse = (props)=>{
171
171
  });
172
172
  });
173
173
  return {
174
- key: data.code,
174
+ key: name,
175
175
  label: /*#__PURE__*/ jsx(LabelComponent, {
176
176
  title: /*#__PURE__*/ jsx(Tag, {
177
177
  style: {
@@ -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":"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"}
@@ -1,3 +1,6 @@
1
1
  import React from 'react';
2
2
  import './header.sass';
3
- export declare const Header: React.FC;
3
+ export interface HeaderProps {
4
+ enableRoutes?: string[];
5
+ }
6
+ export declare const Header: React.FC<HeaderProps>;
@@ -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();
@@ -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' }} />\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","i18n","useI18n","navigate","useNavigate","isLight","useTheme","iconStyle","languages","Language","Layout","Size","Row","Col","Client","BuilderSelect","Menus","OverlayAlertsWithButton","Dropdown","e","TranslationOutlined"],"mappings":";;;;;;;;;;;;AAYO,MAAMA,SAAmB;IAC9B,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;oCACPR,SAASW,OAAO,oBAAoB,CAAC,IAAI;gCAC3C;;0CAEF,IAACC,eAAaA,CAAAA;;;;8BAGlB,IAACC,OAAKA;oBAAC,OAAO;wBAAE,YAAY;oBAAO;;8BAEnC,IAACH,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,kBAACI,yBAAuBA,CAAAA;;0CAe1B,IAACJ,KAAGA;0CACF,kBAACK,UAAQA;oCACP,cAAc;wCAAE,QAAQ;oCAAK;oCAC7B,MAAM;wCACJ,OAAOV,UAAU,GAAG,CAAC,CAACW,IAAO;gDAC3B,OAAOA,EAAE,KAAK;gDACd,KAAKA,EAAE,KAAK;gDACZ;oDACElB,KAAK,cAAc,CAACkB,EAAE,KAAK;gDAC7B;4CACF;wCACA,cAAc;4CAAClB,KAAK,QAAQ;yCAAC;oCAC/B;8CAEA,kBAACmB,qBAAmBA;wCAClB,WAAU;wCACV,OAAOb;;;;;;;;;;AASzB"}
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 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","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;oCACPR,SAASW,OAAO,oBAAoB,CAAC,IAAI;gCAC3C;;0CAEF,IAACC,eAAaA,CAAAA;;;;8BAGlB,IAACC,OAAKA;oBAEJ,OAAO;wBAAE,YAAY;oBAAO;mBADvBhB,eAAeiB,KAAK,SAAS,CAACjB,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,kBAACK,yBAAuBA,CAAAA;;0CAe1B,IAACL,KAAGA;0CACF,kBAACM,UAAQA;oCACP,cAAc;wCAAE,QAAQ;oCAAK;oCAC7B,MAAM;wCACJ,OAAOX,UAAU,GAAG,CAAC,CAACY,IAAO;gDAC3B,OAAOA,EAAE,KAAK;gDACd,KAAKA,EAAE,KAAK;gDACZ;oDACEnB,KAAK,cAAc,CAACmB,EAAE,KAAK;gDAC7B;4CACF;wCACA,cAAc;4CAACnB,KAAK,QAAQ;yCAAC;oCAC/B;8CAEA,kBAACoB,qBAAmBA;wCAClB,WAAU;wCACV,OAAOd;;;;;;;;;;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":";;;;;;;;AAkBO,MAAMA,gBAAS,CAACC;IACrB,MAAMC,SAASC;IACf,MAAM,EAAEC,IAAI,EAAE,GAAGC;IACjB,MAAM,EAAEC,QAAQ,EAAE,GAAGL;IAErBM,UAAU;QACR,IAAIC,gBAAgBN;QAEpB,MAAMO,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,IAAIV,KAAK,QAAQ,KAAKI,eACpBJ,KAAK,cAAc,CAACI;IAExB,GAAG;QAACN;KAAO;IAEX,MAAMgB,MAAMC,WAAWC;IACvB,OAAO,WAAP,GACE,KAACC,QAACA;;YACEH,IAAI,QAAQ,GAAgB,OAAb,WAAH,GAAG,IAACI,QAAMA,CAAAA;0BACxB,IAACC,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;;oBAECnB;kCACD,IAACoB,YAAY,OAAO;;;;;AAI5B"}
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: enableRoutes } = props;
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 { useI18n, hasBundle, hasCompile } 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: enableRoutes } = props;\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","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":";;;;;;;;;;;;;;;;;;AA8BA,MAAMA,oBAAoB;AAE1B,MAAMC,kBAAkB;IACtB,SAAS,WAAT,GAAS,IAACC,kBAAeA,CAAAA;IACzB,SAAS,WAAT,GAAS,IAACC,2BAAuBA,CAAAA;IACjC,QAAQ,WAAR,GAAQ,IAACC,sBAAkBA,CAAAA;AAC7B;AACA,MAAMC,YAGD,CAACC;IACJ,MAAM,EAAEC,CAAC,EAAE,GAAGC;IACd,MAAM,EAAEC,QAAQ,EAAE,GAAGC;IACrB,MAAMC,WAAWC;IACjB,MAAM,CAACC,SAASC,WAAW,GAAGC,SAASd;IACvC,MAAM,EAAE,QAAQe,YAAY,EAAE,GAAGV;IAEjCW,UAAU;QACR,IAAIR,SAAS,QAAQ,CAAC,YACpBK,WAAW;YACT,GAAGb,eAAe;YAClB,SAAS,WAAT,GAAS,IAACiB,yBAAqBA,CAAAA;QACjC;aACK,IAAIT,SAAS,QAAQ,CAAC,cAAcA,AAAa,QAAbA,UACzCK,WAAW;YACT,GAAGb,eAAe;YAClB,SAAS,WAAT,GAAS,IAACkB,gBAAaA,CAAAA;QACzB;aACK,IAAIV,SAAS,QAAQ,CAAC,WAC3BK,WAAW;YACT,GAAGb,eAAe;YAClB,QAAQ,WAAR,GAAQ,IAACmB,oBAAgBA,CAAAA;QAC3B;IAEJ,GAAG;QAACX;KAAS;IAEb,MAAMY,YAAiC;QACrC,OAAO;IACT;IACA,MAAMC,QAA4B,EAAE;IAEpC,IAAIN,aAAa,QAAQ,CAACO,SAAS,4BAA4B,CAAC,OAAO,GACrED,MAAM,IAAI,CAAC;QACT,OAAOf,EAAEiB;QACT,KAAKA;QACL,MAAMX,QAAQ,OAAO;QACrB,UAAU,EAAE;QACZ,cAAaY,CAAC;YACZd,SAASc,EAAE,GAAG;QAChB;IACF;IAGF,IAAIC,WAAWV,eACbM,MAAM,IAAI,CAAC;QACT,OAAOf,EAAEoB;QACT,KAAKA;QACL,MAAMd,QAAQ,OAAO;QACrB,UAAU;YACRG,aAAa,QAAQ,CACnBO,SAAS,4BAA4B,CAAC,cAAc,KACjD;gBACH,OAAOhB,EAAEqB,eAAe,IAAI;gBAC5B,KAAKA,eAAe,KAAK;gBACzB,MAAM,WAAN,GAAM,IAACC,eAAaA;oBAAC,OAAOR;;YAC9B;YACAL,aAAa,QAAQ,CACnBO,SAAS,4BAA4B,CAAC,cAAc,KACjD;gBACH,OAAOhB,EAAEuB,YAAY,IAAI;gBACzB,KAAKA,YAAY,KAAK;gBACtB,MAAM,WAAN,GAAM,IAACC,YAAUA;oBAAC,OAAOV;;YAC3B;YACAL,aAAa,QAAQ,CACnBO,SAAS,4BAA4B,CAAC,aAAa,KAChD;gBACH,OAAOhB,EAAEyB,cAAc,IAAI;gBAC3B,KAAKA,cAAc,KAAK;gBACxB,MAAM,WAAN,GAAM,IAACC,mBAAiBA;oBAAC,OAAOZ;;YAClC;YACAL,aAAa,QAAQ,CACnBO,SAAS,4BAA4B,CAAC,cAAc,KACjD;gBACH,OAAOhB,EAAE2B,eAAe,IAAI;gBAC5B,KAAKA,eAAe,KAAK;gBACzB,MAAM,WAAN,GAAM,IAACC,WAASA;oBAAC,OAAOd;;YAC1B;SACD,CAAC,MAAM,CAAC,CAACI,IAAMW,QAAQX;IAC1B;IAGF,IAAIY,UAAUrB,eACZM,MAAM,IAAI,CAAC;QACT,OAAOf,EAAE+B,WAAW,IAAI;QACxB,KAAKA,WAAW,IAAI;QACpB,MAAMzB,QAAQ,MAAM;QACpB,UAAU,EAAE;QACZ;YACEF,SAAS2B,WAAW,KAAK;QAC3B;IACF;IAGF,MAAMC,gBAAgB,WAAhBA,GACJ,IAACC,MAAIA;QACH,OAAOlB;QACP,MAAK;QAEL,SAAS,CAACG;YACR,IAAI,CAACA,EAAE,OAAO,CAAC,QAAQ,CAACzB,oBACtBW,SAASc,EAAE,GAAG;QAElB;QACA,mCAAqB,IAACgB,cAAYA,CAAAA;QAClC,OAAO;YACL,QAAQC,KAAK,YAAY;YACzB,YAAY,GAAGA,KAAK,YAAY,CAAC,EAAE,CAAC;YACpC,UAAU;YACV,gBAAgB;YAChB,GAAGpC,MAAM,KAAK;QAChB;QACA,cAAc;YAAc,QAAbG,WAAmBe,QAAyBf;SAAS;OAd/DO,aAAa,IAAI,CAAC;IAkB3B,OAAO,WAAP,GAAO,IAAC;QAAI,OAAO;YAAE,YAAY;QAAO;kBAAIuB;;AAC9C;AAEO,MAAMI,QAAQC,cAAc;IACjC,KAAKC,IAAI,SAAS,CAAC,GAAG,CAAC,eAAe;IACtC,kBAAkB;IAClB,WAAWxC;IACX,mBAAmB,IAAM;IACzB,cAAc;AAChB"}
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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"}
@@ -184,8 +184,8 @@ const tabList = [
184
184
  })
185
185
  },
186
186
  {
187
- key: 'tile',
188
- label: 'Tile Graph'
187
+ key: 'treemap',
188
+ label: 'Treemap'
189
189
  }
190
190
  ];
191
191
  const WebpackModulesOverallBase = ({ errors, cwd, summary, entryPoints })=>{
@@ -366,7 +366,7 @@ const WebpackModulesOverallBase = ({ errors, cwd, summary, entryPoints })=>{
366
366
  })
367
367
  }),
368
368
  /*#__PURE__*/ jsx(Card, {
369
- hidden: 'tile' === graphType,
369
+ hidden: 'treemap' === graphType,
370
370
  tabList: tabList,
371
371
  activeTabKey: graphType,
372
372
  onTabChange: (e)=>setGraphType(e),
@@ -1 +1 @@
1
- {"version":3,"file":"pages/BundleSize/components/index.mjs","sources":["webpack://@rsdoctor/components/./src/pages/BundleSize/components/index.tsx"],"sourcesContent":["import {\n CodeOutlined,\n CodepenCircleOutlined,\n DeploymentUnitOutlined,\n InfoCircleOutlined,\n} from '@ant-design/icons';\nimport { Client, SDK } from '@rsdoctor/types';\nimport {\n Button,\n Card,\n Col,\n Divider,\n Empty,\n InputNumber,\n Row,\n Select,\n Space,\n Tag,\n Tooltip,\n Typography,\n} from 'antd';\nimport { debounce, sumBy } from 'lodash-es';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useCodeDrawer } from 'src/components/base/CodeViewer/useCodeDrawer';\nimport { Badge as Bdg } from '../../../components/Badge';\nimport { FileTree } from '../../../components/FileTree';\nimport { KeywordInput } from '../../../components/Form/keyword';\nimport { Keyword } from '../../../components/Keyword';\nimport { ServerAPIProvider, withServerAPI } from '../../../components/Manifest';\nimport { Size } from '../../../constants';\nimport {\n createFileStructures,\n flattenTreemapData,\n formatSize,\n useI18n,\n} from '../../../utils';\nimport { GraphType } from '../constants';\nimport { AssetDetail } from './asset';\nimport { BundleCards } from './cards';\nimport styles from './index.module.scss';\nimport './index.sass';\nimport { SearchModal } from './search-modal';\nimport {\n AssetTreemapWithFilter,\n TreeNode,\n} from 'src/components/Charts/TreeMap';\nimport { Rspack } from '@rsdoctor/utils/common';\n\nconst { Option } = Select;\n\nconst cardBodyHeight = 600;\n\ninterface WebpackModulesOverallProps {\n cwd: string;\n errors: SDK.ErrorsData;\n summary: Client.RsdoctorClientAssetsSummary;\n entryPoints: SDK.ServerAPI.InferResponseType<SDK.ServerAPI.API.GetEntryPoints>;\n}\nconst tabList = [\n {\n key: 'tree',\n label: (\n <Space>\n <Typography.Text>{'Tree Graph'}</Typography.Text>\n <Tooltip\n overlayStyle={{ maxWidth: 380 }}\n overlayInnerStyle={{ marginLeft: 16, padding: 10 }}\n color=\"white\"\n title={\n <Space direction=\"vertical\" color=\"white\" size=\"middle\">\n <Row>\n <Col>\n <Tag color=\"cyan\" style={{ margin: 0 }}>\n initial\n </Tag>\n <Typography.Text style={{ marginLeft: 4 }}>\n Identify whether the chunk is an initial chunk.\n </Typography.Text>\n </Col>\n </Row>\n <Row>\n <Col>\n <Tag color=\"green\" style={{ margin: 0 }}>\n concatenated\n </Tag>\n <Typography.Text style={{ marginLeft: 4 }}>\n Identify whether the module is a concatenated module\n </Typography.Text>\n <Tooltip\n overlayStyle={{ maxWidth: 408 }}\n placement=\"bottom\"\n color=\"white\"\n title={\n <Space direction=\"vertical\" color=\"white\">\n <Row>\n <Col>\n <Typography.Text strong>\n Concatenated Module\n </Typography.Text>\n <Typography.Text>\n : A performance optimization where multiple\n modules are merged (or \"hoisted\") into a single\n scope instead of wrapping each module in separate\n function closures. This reduces the bundle size\n and improves runtime performance by minimizing\n function call overhead.\n </Typography.Text>\n </Col>\n </Row>\n </Space>\n }\n >\n <InfoCircleOutlined\n style={{ color: 'rgba(0,0,0,.45)', marginLeft: 4 }}\n />\n </Tooltip>\n <Typography.Text>.</Typography.Text>\n </Col>\n </Row>\n <Row>\n <Col>\n <Button size=\"small\" icon={<CodepenCircleOutlined />} />\n <Typography.Text style={{ marginLeft: 4 }}>\n Open the code.\n </Typography.Text>\n </Col>\n </Row>\n <Row>\n <Col>\n <Button size=\"small\" icon={<DeploymentUnitOutlined />} />\n <Typography.Text style={{ marginLeft: 4 }}>\n View the module dependency, that is, module reasons in\n stats.json.\n </Typography.Text>\n </Col>\n </Row>\n <Row>\n <Col>\n <Tag color={'purple'}>{'Bundled: 15.77 KB'}</Tag>\n <Typography.Text>\n The final size of the output files after processing,\n bundling, and optimization. This is what is delivered to the\n browser.\n </Typography.Text>\n </Col>\n </Row>\n <Row>\n <Col>\n <Tag color={'orange'}>{'Source: 60.46 KB'}</Tag>\n <Typography.Text>\n The original size of your source code files before any\n processing or transformations. This is the raw size of your\n code as you wrote it.\n </Typography.Text>\n </Col>\n </Row>\n </Space>\n }\n >\n <InfoCircleOutlined style={{ color: 'rgba(0,0,0,.45)' }} />\n </Tooltip>\n </Space>\n ),\n },\n {\n key: 'tile',\n label: 'Tile Graph',\n },\n];\n\nexport const WebpackModulesOverallBase: React.FC<\n WebpackModulesOverallProps\n> = ({ errors, cwd, summary, entryPoints }) => {\n const [selectedEntryPoints, setEntryPoints] = useState<SDK.EntryPointData[]>(\n [],\n );\n const [inputModule, setModuleValue] = useState(0);\n const [inputAssetName, setAssetName] = useState('');\n const [inputAssetSize, setAssetSize] = useState(0);\n const [defaultExpandAll, setDefaultExpandAll] = useState(false);\n const [inputModuleUnit, setModuleUnit] = useState('');\n const [inputChunkUnit, setChunkUnit] = useState('');\n const [assetPath, setAssetPath] = useState<string | null>(null);\n const [graphType, setGraphType] = useState('tree' as GraphType);\n const { showCode, codeDrawerComponent } = useCodeDrawer(\n 'Do not have the codes of assets. If you use the lite or brief mode, there will have codes.',\n );\n\n const { t } = useI18n();\n\n const assets = summary.all.total.files;\n\n const handleChange = useCallback(\n (type: string) => (value: string) => {\n if (type === 'module') {\n setModuleUnit(value);\n } else if (type === 'chunk') {\n setChunkUnit(value);\n }\n },\n [],\n );\n\n const selectAfter = (type: string) => (\n <Select defaultValue=\"kb\" onChange={handleChange(type)}>\n <Option value=\"kb\">KB</Option>\n <Option value=\"mb\">MB</Option>\n </Select>\n );\n const onChangeModule = useCallback(\n debounce((newValue: number) => {\n const count =\n inputModuleUnit === 'mb' ? newValue * 1024 * 1024 : newValue * 1024;\n setModuleValue(count);\n }, 300),\n [],\n );\n\n const onChangeAsset = useCallback(\n debounce((newValue: number) => {\n const count =\n inputChunkUnit === 'mb' ? newValue * 1024 * 1024 : newValue * 1024;\n setAssetSize(count);\n }, 300),\n [],\n );\n\n const filteredAssets = useMemo(() => {\n let res = assets.slice();\n\n if (inputAssetName) {\n res = res.filter((e) => e.path.indexOf(inputAssetName) > -1);\n }\n\n if (inputAssetSize > 0) {\n res = res.filter((e) => e.size >= inputAssetSize);\n }\n\n if (selectedEntryPoints.length) {\n res = res.filter((e) => {\n if (selectedEntryPoints.some((ep) => ep.assets.includes(e.path))) {\n return true;\n }\n return false;\n });\n }\n\n return res.sort((a, b) => {\n const _a = a.path.indexOf('/') > -1 ? 1 : 0;\n const _b = b.path.indexOf('/') > -1 ? 1 : 0;\n // return _a - _b;\n return _b - _a;\n });\n }, [assets, selectedEntryPoints, inputAssetName, inputAssetSize]);\n\n useEffect(() => {\n function getFileExtension(filePath: string) {\n const parts = filePath.split('.');\n return parts.length > 1 ? parts.pop() : '';\n }\n\n summary.all.total.files.forEach((f) => {\n const ext = getFileExtension(f.path);\n if (ext === 'js') {\n setAssetPath(f.path);\n }\n });\n }, [summary.all.total.files]);\n\n const assetsStructures = useMemo(() => {\n const res = createFileStructures({\n files: filteredAssets.map((e) => e.path).filter(Boolean),\n fileTitle(file, basename) {\n const target = filteredAssets.find((e) => e.path === file)!;\n const { size, initial, path, content } = target;\n\n return (\n <div\n className={styles.assetBox}\n onClick={() => {\n setAssetPath(path);\n }}\n >\n <Keyword text={basename} keyword={''} className={styles.fileText} />\n <Space size=\"small\" className={styles.assetsTag}>\n <Divider type=\"vertical\" />\n <Typography.Text style={{ color: '#4FD233' }}>\n {formatSize(size)}\n </Typography.Text>\n <Divider type=\"vertical\" />\n {initial ? (\n <Typography.Text style={{ color: '#009A9E' }}>\n initial\n </Typography.Text>\n ) : null}\n <CodeOutlined\n style={{ fontSize: 14, padding: 0 }}\n onClick={() => showCode({ code: content!, filePath: path })}\n />\n </Space>\n </div>\n );\n },\n });\n return res;\n }, [filteredAssets]);\n\n const onSearch = (value: string) => {\n setAssetName(value);\n setDefaultExpandAll(false);\n };\n\n return (\n <>\n <div className=\"bundle-size-card\">\n <BundleCards cwd={cwd} errors={errors} summary={summary} />\n <Card\n className=\"bundle-size=card\"\n tabList={tabList}\n activeTabKey={graphType as 'tree' | 'tile'}\n onTabChange={(e) => setGraphType(e as 'tree' | 'tile')}\n hidden={graphType === 'tree'}\n tabProps={{\n size: 'middle',\n }}\n >\n <ServerAPIProvider api={SDK.ServerAPI.API.GetProjectInfo}>\n {(data) => {\n const { isRspack, hasSourceMap } = Rspack.checkSourceMapSupport(\n data.configs,\n );\n return (\n <ServerAPIProvider api={SDK.ServerAPI.API.GetSummaryBundles}>\n {(data) => {\n // Filter assets to only show JS (js, cjs, mjs), CSS, and HTML files\n const isTargetFileType = (filePath: string): boolean => {\n const ext = filePath.toLowerCase().split('.').pop() || '';\n return (\n ext === 'js' ||\n ext === 'cjs' ||\n ext === 'mjs' ||\n ext === 'css' ||\n ext === 'html'\n );\n };\n\n const computedTreeData: TreeNode[] = data\n .filter((item) => isTargetFileType(item.asset.path))\n .map((item) => ({\n name: item.asset.path,\n value: item.asset.size,\n children: flattenTreemapData(item.modules).children,\n }));\n return (\n <AssetTreemapWithFilter\n treeData={computedTreeData}\n bundledSize={hasSourceMap || isRspack}\n />\n );\n }}\n </ServerAPIProvider>\n );\n }}\n </ServerAPIProvider>\n </Card>\n\n <Card\n hidden={graphType === 'tile'}\n tabList={tabList}\n activeTabKey={graphType as 'tree' | 'tile'}\n onTabChange={(e) => setGraphType(e as 'tree' | 'tile')}\n tabProps={{\n size: 'middle',\n }}\n >\n <Space direction=\"vertical\">\n <Row align=\"middle\" gutter={[Size.BasePadding, Size.BasePadding]}>\n {entryPoints && entryPoints.length ? (\n <Col>\n <Select\n mode=\"multiple\"\n value={selectedEntryPoints.map((e) => e.name)}\n style={{ minWidth: 230, width: 'auto', maxWidth: 300 }}\n placeholder={'filter assets by entry point'}\n onChange={(name: string[]) => {\n setEntryPoints(\n name\n .map((e) => entryPoints.find((ep) => ep.name === e)!)\n .filter(Boolean),\n );\n }}\n allowClear\n onClear={() => {\n setEntryPoints([]);\n }}\n >\n {entryPoints.map((e) => {\n return (\n <Select.Option key={e.name} value={e.name}>\n <Space>\n <Bdg\n label={e.name}\n value={formatSize(e.size)}\n tooltip={e.name}\n />\n </Space>\n </Select.Option>\n );\n })}\n </Select>\n </Col>\n ) : null}\n <Col>\n <KeywordInput\n placeholder=\"search asset by keyword\"\n onChange={onSearch}\n />\n </Col>\n <Col span={6}>\n <InputNumber\n min={0}\n style={{ width: '95%' }}\n addonBefore={\n <Space>\n <Typography.Text\n style={{ fontSize: 14, color: 'inherit' }}\n >\n Asset Size\n </Typography.Text>\n <Tooltip\n title={t(\n 'filter the output assets which size is greater than the input value',\n )}\n style={{ marginLeft: 3 }}\n >\n <InfoCircleOutlined\n style={{ color: 'rgba(0,0,0,.45)' }}\n />\n </Tooltip>\n </Space>\n }\n onChange={(value) => onChangeAsset(Number(value))}\n addonAfter={selectAfter('chunk')}\n />\n </Col>\n <Col span={6}>\n <InputNumber\n min={0}\n style={{ width: '95%' }}\n addonBefore={\n <Space>\n <Typography.Text\n style={{ fontSize: 14, color: 'inherit' }}\n >\n Module Size\n </Typography.Text>\n <Tooltip\n title={t(\n 'filter the modules which size is greater than the input value',\n )}\n style={{ marginLeft: 3 }}\n >\n <InfoCircleOutlined\n style={{ color: 'rgba(0,0,0,.45)' }}\n />\n </Tooltip>\n </Space>\n }\n onChange={(value) => {\n onChangeModule(Number(value));\n }}\n addonAfter={selectAfter('module')}\n />\n </Col>\n </Row>\n <Row>\n <SearchModal />\n </Row>\n <Row align=\"middle\" gutter={[Size.BasePadding, Size.BasePadding]}>\n <Col span={24}>\n {filteredAssets.length ? (\n <Row gutter={Size.BasePadding}>\n <Col span={6}>\n <Card\n title={\n <Space>\n <Typography.Text>\n {t('Output Assets List')}\n </Typography.Text>\n <Divider type=\"vertical\" />\n <Tooltip\n title={`total assets count is ${assets.length}, the filtered assets count is ${filteredAssets.length}`}\n >\n <Typography.Text\n type=\"secondary\"\n style={{ fontSize: 12, fontWeight: 400 }}\n >\n {filteredAssets.length} / {assets.length}\n </Typography.Text>\n </Tooltip>\n <Divider type=\"vertical\" />\n <Typography.Text\n type=\"secondary\"\n style={{ fontSize: 12, fontWeight: 400 }}\n >\n {formatSize(sumBy(filteredAssets, (e) => e.size))}\n </Typography.Text>\n </Space>\n }\n size=\"small\"\n bodyStyle={{\n overflow: 'scroll',\n height: cardBodyHeight,\n }}\n >\n <FileTree\n className={styles.assets}\n treeData={assetsStructures}\n autoExpandParent\n defaultExpandAll={\n defaultExpandAll || filteredAssets.length <= 20\n }\n key={`tree_${inputAssetName}_${defaultExpandAll}`}\n />\n </Card>\n </Col>\n <Col span={18}>\n {assetPath ? (\n <ServerAPIProvider\n api={SDK.ServerAPI.API.GetAssetDetails}\n body={{ assetPath }}\n >\n {(details) => (\n <AssetDetail\n asset={details.asset}\n chunks={details.chunks}\n modules={details.modules}\n height={cardBodyHeight}\n moduleSizeLimit={inputModule}\n root={cwd}\n />\n )}\n </ServerAPIProvider>\n ) : (\n <Card\n bodyStyle={{\n height: cardBodyHeight,\n }}\n >\n <Empty\n description={\n <Typography.Text strong>\n Click the file path on the left to show the\n modules of the asset\n </Typography.Text>\n }\n />\n </Card>\n )}\n </Col>\n </Row>\n ) : (\n <Empty />\n )}\n </Col>\n </Row>\n </Space>\n </Card>\n </div>\n {codeDrawerComponent}\n </>\n );\n};\n\nexport const WebpackModulesOverall = withServerAPI({\n api: SDK.ServerAPI.API.GetProjectInfo,\n responsePropName: 'project',\n Component: (props: {\n project: SDK.ServerAPI.InferResponseType<SDK.ServerAPI.API.GetProjectInfo>;\n }) => {\n const { root, errors } = props.project;\n return (\n <ServerAPIProvider\n api={SDK.ServerAPI.API.GetAssetsSummary}\n body={{ withFileContent: true }}\n >\n {(summary) => {\n return (\n <ServerAPIProvider api={SDK.ServerAPI.API.GetEntryPoints}>\n {(entryPoints) => (\n <WebpackModulesOverallBase\n cwd={root}\n errors={errors}\n summary={summary}\n entryPoints={entryPoints}\n />\n )}\n </ServerAPIProvider>\n );\n }}\n </ServerAPIProvider>\n );\n },\n});\n"],"names":["Option","Select","cardBodyHeight","tabList","Space","Typography","Tooltip","Row","Col","Tag","InfoCircleOutlined","Button","CodepenCircleOutlined","DeploymentUnitOutlined","WebpackModulesOverallBase","errors","cwd","summary","entryPoints","selectedEntryPoints","setEntryPoints","useState","inputModule","setModuleValue","inputAssetName","setAssetName","inputAssetSize","setAssetSize","defaultExpandAll","setDefaultExpandAll","inputModuleUnit","setModuleUnit","inputChunkUnit","setChunkUnit","assetPath","setAssetPath","graphType","setGraphType","showCode","codeDrawerComponent","useCodeDrawer","t","useI18n","assets","handleChange","useCallback","type","value","selectAfter","onChangeModule","debounce","newValue","count","onChangeAsset","filteredAssets","useMemo","res","e","ep","a","b","_a","_b","useEffect","getFileExtension","filePath","parts","f","ext","assetsStructures","createFileStructures","Boolean","file","basename","target","size","initial","path","content","styles","Keyword","Divider","formatSize","CodeOutlined","onSearch","BundleCards","Card","ServerAPIProvider","SDK","data","isRspack","hasSourceMap","Rspack","isTargetFileType","computedTreeData","item","flattenTreemapData","AssetTreemapWithFilter","Size","name","Bdg","KeywordInput","InputNumber","Number","SearchModal","sumBy","FileTree","details","AssetDetail","Empty","WebpackModulesOverall","withServerAPI","props","root"],"mappings":"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"}
1
+ {"version":3,"file":"pages/BundleSize/components/index.mjs","sources":["webpack://@rsdoctor/components/./src/pages/BundleSize/components/index.tsx"],"sourcesContent":["import {\n CodeOutlined,\n CodepenCircleOutlined,\n DeploymentUnitOutlined,\n InfoCircleOutlined,\n} from '@ant-design/icons';\nimport { Client, SDK } from '@rsdoctor/types';\nimport {\n Button,\n Card,\n Col,\n Divider,\n Empty,\n InputNumber,\n Row,\n Select,\n Space,\n Tag,\n Tooltip,\n Typography,\n} from 'antd';\nimport { debounce, sumBy } from 'lodash-es';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useCodeDrawer } from 'src/components/base/CodeViewer/useCodeDrawer';\nimport { Badge as Bdg } from '../../../components/Badge';\nimport { FileTree } from '../../../components/FileTree';\nimport { KeywordInput } from '../../../components/Form/keyword';\nimport { Keyword } from '../../../components/Keyword';\nimport { ServerAPIProvider, withServerAPI } from '../../../components/Manifest';\nimport { Size } from '../../../constants';\nimport {\n createFileStructures,\n flattenTreemapData,\n formatSize,\n useI18n,\n} from '../../../utils';\nimport { GraphType } from '../constants';\nimport { AssetDetail } from './asset';\nimport { BundleCards } from './cards';\nimport styles from './index.module.scss';\nimport './index.sass';\nimport { SearchModal } from './search-modal';\nimport {\n AssetTreemapWithFilter,\n TreeNode,\n} from 'src/components/Charts/TreeMap';\nimport { Rspack } from '@rsdoctor/utils/common';\n\nconst { Option } = Select;\n\nconst cardBodyHeight = 600;\n\ninterface WebpackModulesOverallProps {\n cwd: string;\n errors: SDK.ErrorsData;\n summary: Client.RsdoctorClientAssetsSummary;\n entryPoints: SDK.ServerAPI.InferResponseType<SDK.ServerAPI.API.GetEntryPoints>;\n}\nconst tabList = [\n {\n key: 'tree',\n label: (\n <Space>\n <Typography.Text>{'Tree Graph'}</Typography.Text>\n <Tooltip\n overlayStyle={{ maxWidth: 380 }}\n overlayInnerStyle={{ marginLeft: 16, padding: 10 }}\n color=\"white\"\n title={\n <Space direction=\"vertical\" color=\"white\" size=\"middle\">\n <Row>\n <Col>\n <Tag color=\"cyan\" style={{ margin: 0 }}>\n initial\n </Tag>\n <Typography.Text style={{ marginLeft: 4 }}>\n Identify whether the chunk is an initial chunk.\n </Typography.Text>\n </Col>\n </Row>\n <Row>\n <Col>\n <Tag color=\"green\" style={{ margin: 0 }}>\n concatenated\n </Tag>\n <Typography.Text style={{ marginLeft: 4 }}>\n Identify whether the module is a concatenated module\n </Typography.Text>\n <Tooltip\n overlayStyle={{ maxWidth: 408 }}\n placement=\"bottom\"\n color=\"white\"\n title={\n <Space direction=\"vertical\" color=\"white\">\n <Row>\n <Col>\n <Typography.Text strong>\n Concatenated Module\n </Typography.Text>\n <Typography.Text>\n : A performance optimization where multiple\n modules are merged (or \"hoisted\") into a single\n scope instead of wrapping each module in separate\n function closures. This reduces the bundle size\n and improves runtime performance by minimizing\n function call overhead.\n </Typography.Text>\n </Col>\n </Row>\n </Space>\n }\n >\n <InfoCircleOutlined\n style={{ color: 'rgba(0,0,0,.45)', marginLeft: 4 }}\n />\n </Tooltip>\n <Typography.Text>.</Typography.Text>\n </Col>\n </Row>\n <Row>\n <Col>\n <Button size=\"small\" icon={<CodepenCircleOutlined />} />\n <Typography.Text style={{ marginLeft: 4 }}>\n Open the code.\n </Typography.Text>\n </Col>\n </Row>\n <Row>\n <Col>\n <Button size=\"small\" icon={<DeploymentUnitOutlined />} />\n <Typography.Text style={{ marginLeft: 4 }}>\n View the module dependency, that is, module reasons in\n stats.json.\n </Typography.Text>\n </Col>\n </Row>\n <Row>\n <Col>\n <Tag color={'purple'}>{'Bundled: 15.77 KB'}</Tag>\n <Typography.Text>\n The final size of the output files after processing,\n bundling, and optimization. This is what is delivered to the\n browser.\n </Typography.Text>\n </Col>\n </Row>\n <Row>\n <Col>\n <Tag color={'orange'}>{'Source: 60.46 KB'}</Tag>\n <Typography.Text>\n The original size of your source code files before any\n processing or transformations. This is the raw size of your\n code as you wrote it.\n </Typography.Text>\n </Col>\n </Row>\n </Space>\n }\n >\n <InfoCircleOutlined style={{ color: 'rgba(0,0,0,.45)' }} />\n </Tooltip>\n </Space>\n ),\n },\n {\n key: 'treemap',\n label: 'Treemap',\n },\n];\n\nexport const WebpackModulesOverallBase: React.FC<\n WebpackModulesOverallProps\n> = ({ errors, cwd, summary, entryPoints }) => {\n const [selectedEntryPoints, setEntryPoints] = useState<SDK.EntryPointData[]>(\n [],\n );\n const [inputModule, setModuleValue] = useState(0);\n const [inputAssetName, setAssetName] = useState('');\n const [inputAssetSize, setAssetSize] = useState(0);\n const [defaultExpandAll, setDefaultExpandAll] = useState(false);\n const [inputModuleUnit, setModuleUnit] = useState('');\n const [inputChunkUnit, setChunkUnit] = useState('');\n const [assetPath, setAssetPath] = useState<string | null>(null);\n const [graphType, setGraphType] = useState('tree' as GraphType);\n const { showCode, codeDrawerComponent } = useCodeDrawer(\n 'Do not have the codes of assets. If you use the lite or brief mode, there will have codes.',\n );\n\n const { t } = useI18n();\n\n const assets = summary.all.total.files;\n\n const handleChange = useCallback(\n (type: string) => (value: string) => {\n if (type === 'module') {\n setModuleUnit(value);\n } else if (type === 'chunk') {\n setChunkUnit(value);\n }\n },\n [],\n );\n\n const selectAfter = (type: string) => (\n <Select defaultValue=\"kb\" onChange={handleChange(type)}>\n <Option value=\"kb\">KB</Option>\n <Option value=\"mb\">MB</Option>\n </Select>\n );\n const onChangeModule = useCallback(\n debounce((newValue: number) => {\n const count =\n inputModuleUnit === 'mb' ? newValue * 1024 * 1024 : newValue * 1024;\n setModuleValue(count);\n }, 300),\n [],\n );\n\n const onChangeAsset = useCallback(\n debounce((newValue: number) => {\n const count =\n inputChunkUnit === 'mb' ? newValue * 1024 * 1024 : newValue * 1024;\n setAssetSize(count);\n }, 300),\n [],\n );\n\n const filteredAssets = useMemo(() => {\n let res = assets.slice();\n\n if (inputAssetName) {\n res = res.filter((e) => e.path.indexOf(inputAssetName) > -1);\n }\n\n if (inputAssetSize > 0) {\n res = res.filter((e) => e.size >= inputAssetSize);\n }\n\n if (selectedEntryPoints.length) {\n res = res.filter((e) => {\n if (selectedEntryPoints.some((ep) => ep.assets.includes(e.path))) {\n return true;\n }\n return false;\n });\n }\n\n return res.sort((a, b) => {\n const _a = a.path.indexOf('/') > -1 ? 1 : 0;\n const _b = b.path.indexOf('/') > -1 ? 1 : 0;\n // return _a - _b;\n return _b - _a;\n });\n }, [assets, selectedEntryPoints, inputAssetName, inputAssetSize]);\n\n useEffect(() => {\n function getFileExtension(filePath: string) {\n const parts = filePath.split('.');\n return parts.length > 1 ? parts.pop() : '';\n }\n\n summary.all.total.files.forEach((f) => {\n const ext = getFileExtension(f.path);\n if (ext === 'js') {\n setAssetPath(f.path);\n }\n });\n }, [summary.all.total.files]);\n\n const assetsStructures = useMemo(() => {\n const res = createFileStructures({\n files: filteredAssets.map((e) => e.path).filter(Boolean),\n fileTitle(file, basename) {\n const target = filteredAssets.find((e) => e.path === file)!;\n const { size, initial, path, content } = target;\n\n return (\n <div\n className={styles.assetBox}\n onClick={() => {\n setAssetPath(path);\n }}\n >\n <Keyword text={basename} keyword={''} className={styles.fileText} />\n <Space size=\"small\" className={styles.assetsTag}>\n <Divider type=\"vertical\" />\n <Typography.Text style={{ color: '#4FD233' }}>\n {formatSize(size)}\n </Typography.Text>\n <Divider type=\"vertical\" />\n {initial ? (\n <Typography.Text style={{ color: '#009A9E' }}>\n initial\n </Typography.Text>\n ) : null}\n <CodeOutlined\n style={{ fontSize: 14, padding: 0 }}\n onClick={() => showCode({ code: content!, filePath: path })}\n />\n </Space>\n </div>\n );\n },\n });\n return res;\n }, [filteredAssets]);\n\n const onSearch = (value: string) => {\n setAssetName(value);\n setDefaultExpandAll(false);\n };\n\n return (\n <>\n <div className=\"bundle-size-card\">\n <BundleCards cwd={cwd} errors={errors} summary={summary} />\n <Card\n className=\"bundle-size=card\"\n tabList={tabList}\n activeTabKey={graphType as 'tree' | 'treemap'}\n onTabChange={(e) => setGraphType(e as 'tree' | 'treemap')}\n hidden={graphType === 'tree'}\n tabProps={{\n size: 'middle',\n }}\n >\n <ServerAPIProvider api={SDK.ServerAPI.API.GetProjectInfo}>\n {(data) => {\n const { isRspack, hasSourceMap } = Rspack.checkSourceMapSupport(\n data.configs,\n );\n return (\n <ServerAPIProvider api={SDK.ServerAPI.API.GetSummaryBundles}>\n {(data) => {\n // Filter assets to only show JS (js, cjs, mjs), CSS, and HTML files\n const isTargetFileType = (filePath: string): boolean => {\n const ext = filePath.toLowerCase().split('.').pop() || '';\n return (\n ext === 'js' ||\n ext === 'cjs' ||\n ext === 'mjs' ||\n ext === 'css' ||\n ext === 'html'\n );\n };\n\n const computedTreeData: TreeNode[] = data\n .filter((item) => isTargetFileType(item.asset.path))\n .map((item) => ({\n name: item.asset.path,\n value: item.asset.size,\n children: flattenTreemapData(item.modules).children,\n }));\n return (\n <AssetTreemapWithFilter\n treeData={computedTreeData}\n bundledSize={hasSourceMap || isRspack}\n />\n );\n }}\n </ServerAPIProvider>\n );\n }}\n </ServerAPIProvider>\n </Card>\n\n <Card\n hidden={graphType === 'treemap'}\n tabList={tabList}\n activeTabKey={graphType as 'tree' | 'treemap'}\n onTabChange={(e) => setGraphType(e as 'tree' | 'treemap')}\n tabProps={{\n size: 'middle',\n }}\n >\n <Space direction=\"vertical\">\n <Row align=\"middle\" gutter={[Size.BasePadding, Size.BasePadding]}>\n {entryPoints && entryPoints.length ? (\n <Col>\n <Select\n mode=\"multiple\"\n value={selectedEntryPoints.map((e) => e.name)}\n style={{ minWidth: 230, width: 'auto', maxWidth: 300 }}\n placeholder={'filter assets by entry point'}\n onChange={(name: string[]) => {\n setEntryPoints(\n name\n .map((e) => entryPoints.find((ep) => ep.name === e)!)\n .filter(Boolean),\n );\n }}\n allowClear\n onClear={() => {\n setEntryPoints([]);\n }}\n >\n {entryPoints.map((e) => {\n return (\n <Select.Option key={e.name} value={e.name}>\n <Space>\n <Bdg\n label={e.name}\n value={formatSize(e.size)}\n tooltip={e.name}\n />\n </Space>\n </Select.Option>\n );\n })}\n </Select>\n </Col>\n ) : null}\n <Col>\n <KeywordInput\n placeholder=\"search asset by keyword\"\n onChange={onSearch}\n />\n </Col>\n <Col span={6}>\n <InputNumber\n min={0}\n style={{ width: '95%' }}\n addonBefore={\n <Space>\n <Typography.Text\n style={{ fontSize: 14, color: 'inherit' }}\n >\n Asset Size\n </Typography.Text>\n <Tooltip\n title={t(\n 'filter the output assets which size is greater than the input value',\n )}\n style={{ marginLeft: 3 }}\n >\n <InfoCircleOutlined\n style={{ color: 'rgba(0,0,0,.45)' }}\n />\n </Tooltip>\n </Space>\n }\n onChange={(value) => onChangeAsset(Number(value))}\n addonAfter={selectAfter('chunk')}\n />\n </Col>\n <Col span={6}>\n <InputNumber\n min={0}\n style={{ width: '95%' }}\n addonBefore={\n <Space>\n <Typography.Text\n style={{ fontSize: 14, color: 'inherit' }}\n >\n Module Size\n </Typography.Text>\n <Tooltip\n title={t(\n 'filter the modules which size is greater than the input value',\n )}\n style={{ marginLeft: 3 }}\n >\n <InfoCircleOutlined\n style={{ color: 'rgba(0,0,0,.45)' }}\n />\n </Tooltip>\n </Space>\n }\n onChange={(value) => {\n onChangeModule(Number(value));\n }}\n addonAfter={selectAfter('module')}\n />\n </Col>\n </Row>\n <Row>\n <SearchModal />\n </Row>\n <Row align=\"middle\" gutter={[Size.BasePadding, Size.BasePadding]}>\n <Col span={24}>\n {filteredAssets.length ? (\n <Row gutter={Size.BasePadding}>\n <Col span={6}>\n <Card\n title={\n <Space>\n <Typography.Text>\n {t('Output Assets List')}\n </Typography.Text>\n <Divider type=\"vertical\" />\n <Tooltip\n title={`total assets count is ${assets.length}, the filtered assets count is ${filteredAssets.length}`}\n >\n <Typography.Text\n type=\"secondary\"\n style={{ fontSize: 12, fontWeight: 400 }}\n >\n {filteredAssets.length} / {assets.length}\n </Typography.Text>\n </Tooltip>\n <Divider type=\"vertical\" />\n <Typography.Text\n type=\"secondary\"\n style={{ fontSize: 12, fontWeight: 400 }}\n >\n {formatSize(sumBy(filteredAssets, (e) => e.size))}\n </Typography.Text>\n </Space>\n }\n size=\"small\"\n bodyStyle={{\n overflow: 'scroll',\n height: cardBodyHeight,\n }}\n >\n <FileTree\n className={styles.assets}\n treeData={assetsStructures}\n autoExpandParent\n defaultExpandAll={\n defaultExpandAll || filteredAssets.length <= 20\n }\n key={`tree_${inputAssetName}_${defaultExpandAll}`}\n />\n </Card>\n </Col>\n <Col span={18}>\n {assetPath ? (\n <ServerAPIProvider\n api={SDK.ServerAPI.API.GetAssetDetails}\n body={{ assetPath }}\n >\n {(details) => (\n <AssetDetail\n asset={details.asset}\n chunks={details.chunks}\n modules={details.modules}\n height={cardBodyHeight}\n moduleSizeLimit={inputModule}\n root={cwd}\n />\n )}\n </ServerAPIProvider>\n ) : (\n <Card\n bodyStyle={{\n height: cardBodyHeight,\n }}\n >\n <Empty\n description={\n <Typography.Text strong>\n Click the file path on the left to show the\n modules of the asset\n </Typography.Text>\n }\n />\n </Card>\n )}\n </Col>\n </Row>\n ) : (\n <Empty />\n )}\n </Col>\n </Row>\n </Space>\n </Card>\n </div>\n {codeDrawerComponent}\n </>\n );\n};\n\nexport const WebpackModulesOverall = withServerAPI({\n api: SDK.ServerAPI.API.GetProjectInfo,\n responsePropName: 'project',\n Component: (props: {\n project: SDK.ServerAPI.InferResponseType<SDK.ServerAPI.API.GetProjectInfo>;\n }) => {\n const { root, errors } = props.project;\n return (\n <ServerAPIProvider\n api={SDK.ServerAPI.API.GetAssetsSummary}\n body={{ withFileContent: true }}\n >\n {(summary) => {\n return (\n <ServerAPIProvider api={SDK.ServerAPI.API.GetEntryPoints}>\n {(entryPoints) => (\n <WebpackModulesOverallBase\n cwd={root}\n errors={errors}\n summary={summary}\n entryPoints={entryPoints}\n />\n )}\n </ServerAPIProvider>\n );\n }}\n </ServerAPIProvider>\n );\n },\n});\n"],"names":["Option","Select","cardBodyHeight","tabList","Space","Typography","Tooltip","Row","Col","Tag","InfoCircleOutlined","Button","CodepenCircleOutlined","DeploymentUnitOutlined","WebpackModulesOverallBase","errors","cwd","summary","entryPoints","selectedEntryPoints","setEntryPoints","useState","inputModule","setModuleValue","inputAssetName","setAssetName","inputAssetSize","setAssetSize","defaultExpandAll","setDefaultExpandAll","inputModuleUnit","setModuleUnit","inputChunkUnit","setChunkUnit","assetPath","setAssetPath","graphType","setGraphType","showCode","codeDrawerComponent","useCodeDrawer","t","useI18n","assets","handleChange","useCallback","type","value","selectAfter","onChangeModule","debounce","newValue","count","onChangeAsset","filteredAssets","useMemo","res","e","ep","a","b","_a","_b","useEffect","getFileExtension","filePath","parts","f","ext","assetsStructures","createFileStructures","Boolean","file","basename","target","size","initial","path","content","styles","Keyword","Divider","formatSize","CodeOutlined","onSearch","BundleCards","Card","ServerAPIProvider","SDK","data","isRspack","hasSourceMap","Rspack","isTargetFileType","computedTreeData","item","flattenTreemapData","AssetTreemapWithFilter","Size","name","Bdg","KeywordInput","InputNumber","Number","SearchModal","sumBy","FileTree","details","AssetDetail","Empty","WebpackModulesOverall","withServerAPI","props","root"],"mappings":"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"}
@@ -2,4 +2,4 @@ import { Client } from '@rsdoctor/types';
2
2
  export declare const maxModuleSize = 5000;
3
3
  export declare const name = "BundleSize";
4
4
  export declare const route = Client.RsdoctorClientRoutes.BundleSize;
5
- export type GraphType = 'tile' | 'tree';
5
+ export type GraphType = 'treemap' | 'tree';
@@ -1 +1 @@
1
- {"version":3,"file":"pages/BundleSize/constants.mjs","sources":["webpack://@rsdoctor/components/./src/pages/BundleSize/constants.ts"],"sourcesContent":["import { Client } from '@rsdoctor/types';\n\nexport const maxModuleSize = 5000;\n\nexport const name = 'BundleSize';\n\nexport const route = Client.RsdoctorClientRoutes.BundleSize;\n\nexport type GraphType = 'tile' | 'tree';\n"],"names":["maxModuleSize","name","route","Client"],"mappings":";AAEO,MAAMA,gBAAgB;AAEtB,MAAMC,iBAAO;AAEb,MAAMC,QAAQC,OAAO,oBAAoB,CAAC,UAAU"}
1
+ {"version":3,"file":"pages/BundleSize/constants.mjs","sources":["webpack://@rsdoctor/components/./src/pages/BundleSize/constants.ts"],"sourcesContent":["import { Client } from '@rsdoctor/types';\n\nexport const maxModuleSize = 5000;\n\nexport const name = 'BundleSize';\n\nexport const route = Client.RsdoctorClientRoutes.BundleSize;\n\nexport type GraphType = 'treemap' | 'tree';\n"],"names":["maxModuleSize","name","route","Client"],"mappings":";AAEO,MAAMA,gBAAgB;AAEtB,MAAMC,iBAAO;AAEb,MAAMC,QAAQC,OAAO,oBAAoB,CAAC,UAAU"}
@@ -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":";;;;;;;;;;;;;AA2BO,SAASA,cAAcC,CAA6B;IACzD,IAAIA,EAAE,QAAQ,IAAI,CAACA,EAAE,OAAO,EAE1B,OAAOC,WAAW,OAAO;IAG3B,IAAI,CAACD,EAAE,QAAQ,IAAIA,EAAE,OAAO,EAE1B,OAAOC,WAAW,GAAG;IAGvB,IAAID,EAAE,QAAQ,IAAIA,EAAE,OAAO,EAAE;QAC3B,IACEA,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,KAAKA,EAAE,OAAO,CAAC,IAAI,CAAC,UAAU,IACxDA,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,KAAKA,EAAE,OAAO,CAAC,IAAI,CAAC,UAAU,EAGxD,OAAOC,WAAW,UAAU;QAG9B,OAAOA,WAAW,OAAO;IAC3B;IAEA,MAAM,IAAIC,MAAM;AAClB;AAEO,MAAMC,oBAAoD,CAAC,EAAEC,IAAI,EAAE;IACxE,IAAIA,SAASH,WAAW,UAAU,EAChC,OAAO,WAAP,GACE,IAACI,SAAOA;QAAC,OAAM;kBACb,kBAACC,KAAGA;YAAC,OAAM;sBAAU;;;IAI3B,IAAIF,SAASH,WAAW,OAAO,EAC7B,OAAO,WAAP,GACE,IAACI,SAAOA;QAAC,OAAM;kBACb,kBAACC,KAAGA;YAAC,OAAM;sBAAU;;;IAI3B,IAAIF,SAASH,WAAW,GAAG,EACzB,OAAO,WAAP,GACE,IAACI,SAAOA;QAAC,OAAM;kBACb,kBAACC,KAAGA;YAAC,OAAM;sBAAQ;;;IAIzB,IAAIF,SAASH,WAAW,OAAO,EAC7B,OAAO,WAAP,GACE,IAACI,SAAOA;QAAC,OAAM;kBACb,kBAACC,KAAGA;YAAC,OAAM;sBAAQ;;;IAIzB,OAAO;AACT;AAEO,MAAMC,UAAkD,CAAC,EAC9DC,QAAQ,EACRC,OAAO,EACR;IACC,MAAMC,WAAWC,QACf,IAAMC,eAAeJ,SAAS,WAAW,CAAC,OAAO,GACjD;QAACA;KAAS;IAEZ,MAAMK,WAAWF,QACf,IAAMC,eAAeH,QAAQ,WAAW,CAAC,OAAO,GAChD;QAACA;KAAQ;IAGX,MAAMK,UAAUN,SAAS,UAAU,CAAC,MAAM;IAC1C,MAAMO,UAAUN,QAAQ,UAAU,CAAC,MAAM;IAEzC,MAAMO,QAAQR,SAAS,IAAI;IAC3B,MAAMS,QAAQR,QAAQ,IAAI;IAE1B,MAAM,CAACS,SAASC,WAAW,GAAGC;IAC9B,MAAM,CAACC,qBAAqBC,uBAAuB,GAAGF,SACpD,EAAE;IAGJ,MAAMG,aAAaZ,QAAQ;QACzB,MAAMa,MAAkD,CAAC;QAEzDd,SAAS,OAAO,CAAC,CAACe;gBAEdC,gBACAC;YAFF,MAAMC,UACJF,AAAAA,SAAAA,CAAAA,iBAAAA,IAAI,SAAS,AAAD,IAAZA,KAAAA,IAAAA,eAAe,OAAO,CAACG,mBAAmB,GAAE,KAAF,SAC1CF,CAAAA,YAAAA,IAAI,IAAI,AAAD,IAAPA,KAAAA,IAAAA,UAAU,OAAO,CAACE,mBAAmB,GAAE;YAEzC,IAAKL,GAAG,CAACI,QAAQ,EAMfE,QAAQ,IAAI,CAAC,8BAA8BL,KAAKD;iBALhDA,GAAG,CAACI,QAAQ,GAAG;gBACb,MAAMA;gBACN,UAAUH;YACZ;QAIJ;QAEAZ,SAAS,OAAO,CAAC,CAACY;gBAEdC,gBACAC;YAFF,MAAMC,UACJF,AAAAA,SAAAA,CAAAA,iBAAAA,IAAI,SAAS,AAAD,IAAZA,KAAAA,IAAAA,eAAe,OAAO,CAACG,mBAAmB,GAAE,KAAF,SAC1CF,CAAAA,YAAAA,IAAI,IAAI,AAAD,IAAPA,KAAAA,IAAAA,UAAU,OAAO,CAACE,mBAAmB,GAAE;YAEzC,IAAI,CAACL,GAAG,CAACI,QAAQ,EACfJ,GAAG,CAACI,QAAQ,GAAG;gBACb,MAAMA;YACR;YAEFJ,GAAG,CAACI,QAAQ,CAAC,OAAO,GAAGH;QACzB;QAEA,OAAOM,OAAO,MAAM,CAACP;IACvB,GAAG;QAACd;QAAUG;KAAS;IAEvB,MAAMmB,qBAAqBrB,QAAQ;QACjC,IAAIsB,OAAOV,WAAW,KAAK;QAE3B,IAAIL,SACFe,OAAOA,KAAK,MAAM,CAAC,CAACjC,IAAMA,EAAE,IAAI,CAAC,OAAO,CAACkB,WAAW;QAGtD,IAAIG,oBAAoB,MAAM,EAC5BY,OAAOA,KAAK,MAAM,CAAC,CAACjC,IACXqB,oBAAoB,QAAQ,CAACtB,cAAcC;QAItD,OAAOiC;IACT,GAAG;QAACV;QAAYL;QAASG;KAAoB;IAE7C,MAAM,EAAEa,sBAAsB,EAAEC,sBAAsB,EAAE,GAAGxB,QAAQ,IAC1D;YACL,wBAAwBqB,mBAAmB,MAAM,CAAC,CAAChC,IAAMA,EAAE,QAAQ,EAChE,MAAM;YACT,wBAAwBgC,mBAAmB,MAAM,CAAC,CAAChC,IAAMA,EAAE,OAAO,EAC/D,MAAM;QACX,IACC;QAACgC;KAAmB;IAEvB,OAAO,WAAP,GACE,KAACI,KAAGA;QAAC,QAAQ;YAACC,KAAK,WAAW;YAAEA,KAAK,WAAW;SAAC;;0BAC/C,IAACC,KAAGA;gBAAC,MAAM;0BACT,mBAACC,OAAKA;oBAAC,MAAI;;sCACT,IAACC,cAAYA;4BACX,oBAAM,IAACC,oBAAkBA,CAAAA;4BACzB,OAAM;4BACN,YAAY;gCAAE,OAAO;4BAAG;4BACxB,aAAY;4BACZ,UAAU,CAACzC;gCACTmB,WAAWnB;4BACb;;sCAEF,IAAC0C,QAAMA;4BACL,MAAK;4BACL,aAAY;4BACZ,OAAO;gCAAE,OAAO;4BAAI;4BACpB,SAASX,OAAO,MAAM,CAAC9B,YAAY,GAAG,CAAC,CAACD,IAAO;oCAC7C,OAAOA;oCACP,OAAOA;gCACT;4BACA,YAAU;4BACV,UAAU,CAACA;gCACTsB,uBAAuBtB;4BACzB;;;;;0BAIN,IAACsC,KAAGA;gBAAC,MAAM;0BACT,kBAACK,OAAKA;oBACJ,UAAQ;oBACR,QAAQ;wBAAE,cAAc;oBAAG;oBAC3B,YAAY;wBACV,UAAU;wBACV,MAAM;oBACR;oBACA,QAAQ;wBAAE,GAAG;oBAAK;oBAClB,YAAYX;oBACZ,QAAQ,CAAChC,IAAMA,EAAE,IAAI;oBACrB,SAAS;wBACP;4BACE,OAAO;4BACP,OAAO,WAAP,GACE,KAACK,SAAOA;gCACN,qBACE,KAACkC,OAAKA;oCAAC,WAAU;;sDACf,KAACK,WAAW,IAAI;4CAAC,OAAO;gDAAE,OAAO;4CAAU;;gDAAG;gDACvBZ,mBAAmB,MAAM;gDAAC;;;sDAGjD,KAACY,WAAW,IAAI;4CAAC,OAAO;gDAAE,OAAO;4CAAU;;gDAAG;gDAC1BrB,WAAW,MAAM;gDAAC;;;;;;kDAM1C,IAACqB,WAAW,IAAI;wCAAC,QAAM;kDAAC;;kDACxB,IAACC,SAAOA;wCAAC,MAAK;;kDACd,KAACD,WAAW,IAAI;wCACd,MAAK;wCACL,OAAO;4CAAE,UAAU;4CAAI,YAAY;4CAAK,aAAa;wCAAE;;4CAEtDZ,mBAAmB,MAAM;4CAAC;4CAAET,WAAW,MAAM;;;kDAEhD,IAACuB,oBAAkBA,CAAAA;;;4BAGvB,QAAQ,CAACC,IAAIC;gCACX,MAAM,EAAEC,KAAK,EAAEC,aAAa,EAAE,GAAGC,mBAC/BH,EAAE,IAAI,EACNA,EAAE,QAAQ,GAAGhC,QAAQC;gCAEvB,OAAO,WAAP,GACE,KAACsB,OAAKA;;sDACJ,IAAClC,SAAOA;4CAAC,OAAO2C,EAAE,IAAI;sDACpB,kBAACJ,WAAW,IAAI;gDAAC,UAAU;oDAAE,MAAMI,EAAE,IAAI;gDAAC;0DACvCC;;;sDAGL,IAAC9C,mBAAAA;4CAAkB,MAAMJ,cAAciD;;wCACtCE,gBAAgB,WAAhBA,GACC,IAAC5C,KAAGA;4CAAC,OAAM;sDAAU;6CACnB;;;4BAGV;wBACF;wBACA8C,iCACE,WACAlB,wBACAC;wBAEFiB,iCACE,YACAlB,wBACAC;wBAEF;4BACE,OAAO;4BACP,QAAQ,CAACY,IAAIC;gCACX,MAAMK,IAAc,EAAE;gCACtB,MAAMC,IAAc,EAAE;gCACtB,IAAIN,EAAE,OAAO,EACXO,MAAM,iBAAiB,CAACP,EAAE,OAAO,EAAEjC,SAAS,OAAO,CAAC,CAACf,IACnDA,EAAE,MAAM,CAAC,OAAO,CAAC,CAACwD,QAAUF,EAAE,IAAI,CAACE;gCAIvC,IAAIR,EAAE,QAAQ,EACZO,MAAM,iBAAiB,CAACP,EAAE,QAAQ,EAAElC,SAAS,OAAO,CAAC,CAACd,IACpDA,EAAE,MAAM,CAAC,OAAO,CAAC,CAACwD,QAAUH,EAAE,IAAI,CAACG;gCAIvC,IAAI,CAACH,EAAE,MAAM,IAAI,CAACC,EAAE,MAAM,EAAE,OAAO;gCAEnC,OAAO,WAAP,GACE,KAACf,OAAKA;oCAAC,WAAU;;wCACdkB,KAAKH,GACH,MAAM,CAACI,SACP,GAAG,CAAC,CAAC1D,IAAAA,WAAAA,GACJ,IAAC2D,OAAGA;gDAAC,OAAM;gDAAU,OAAO3D;+CAAQ,CAAC,EAAE,EAAEA,GAAG;wCAE/CyD,KAAKJ,GACH,MAAM,CAACK,SACP,GAAG,CAAC,CAAC1D,IAAAA,WAAAA,GACJ,IAAC2D,OAAGA;gDAAC,OAAM;gDAAW,OAAO3D;+CAAQ,CAAC,EAAE,EAAEA,GAAG;;;4BAIvD;wBACF;wBACA;4BACE,OAAO;4BACP,OAAO;4BACP,QAAQ,CAAC+C,IAAIC;oCAWGY,uCAAuBC,aAGvBC,qCAAsBC,YAMtBC,wCAAuBC,cAGvBC,sCAAsBC,aAMtBC,wCAAuBC,cAGvBC,sCAAsBC,aActBC,sCAEAC,sCAOAC,sCAEAC;gCAxDd,MAAMC,YAAY7E,cAAciD,OAAO/C,WAAW,OAAO;gCACzD,OAAO,WAAP,GACE,KAACsC,OAAKA;oCAAC,WAAU;oCAAW,OAAO;wCAAE,UAAU;oCAAI;;wCAChDqC,YAAY,WAAZA,GACC,IAACC,aAAWA;4CACV,MAAK;4CACL,MAAM7B,EAAE,IAAI;4CACZ,MAAM;gDACJ;oDACE,UAAQ,QACNY,CAAAA,wCAAAA,SAAS,aAAa,CAAC,QAAAC,CAAAA,cAAAA,EAAE,QAAQ,AAAD,IAATA,KAAAA,IAAAA,YAAY,EAAE,CAAW,AAAX,IAArCD,KAAAA,IAAAA,sCACI,MAAM;oDACZ,SAAO,QACLE,CAAAA,sCAAAA,QAAQ,aAAa,CAAC,QAAAC,CAAAA,aAAAA,EAAE,OAAO,AAAD,IAARA,KAAAA,IAAAA,WAAW,EAAE,CAAW,AAAX,IAAnCD,KAAAA,IAAAA,oCACI,MAAM;oDACZ,OAAO;gDACT;gDACA;oDACE,UAAQ,QACNE,CAAAA,yCAAAA,SAAS,aAAa,CAAC,QAAAC,CAAAA,eAAAA,EAAE,QAAQ,AAAD,IAATA,KAAAA,IAAAA,aAAY,EAAE,CAAW,AAAX,IAArCD,KAAAA,IAAAA,uCACI,WAAW;oDACjB,SAAO,QACLE,CAAAA,uCAAAA,QAAQ,aAAa,CAAC,QAAAC,CAAAA,cAAAA,EAAE,OAAO,AAAD,IAARA,KAAAA,IAAAA,YAAW,EAAE,CAAW,AAAX,IAAnCD,KAAAA,IAAAA,qCACI,WAAW;oDACjB,OAAO;gDACT;gDACA;oDACE,UAAQ,QACNE,CAAAA,yCAAAA,SAAS,aAAa,CAAC,QAAAC,CAAAA,eAAAA,EAAE,QAAQ,AAAD,IAATA,KAAAA,IAAAA,aAAY,EAAE,CAAW,AAAX,IAArCD,KAAAA,IAAAA,uCACI,YAAY;oDAClB,SAAO,QACLE,CAAAA,uCAAAA,QAAQ,aAAa,CAAC,QAAAC,CAAAA,cAAAA,EAAE,OAAO,AAAD,IAARA,KAAAA,IAAAA,YAAW,EAAE,CAAW,AAAX,IAAnCD,KAAAA,IAAAA,qCACI,YAAY;oDAClB,OAAO;gDACT;6CACD;6CAED;wCACHtB,CAAAA,QAAAA,IAAAA,KAAAA,IAAAA,EAAG,OAAO,AAAD,IAAC,cACT,IAAC6B,aAAWA;4CACV,MAAK;4CACL,MAAM7B,EAAE,IAAI;4CACZ,MAAM;gDACJ;oDACE,UAAQ,QACNwB,CAAAA,uCAAAA,QAAQ,aAAa,CAACxB,EAAE,OAAO,CAAE,EAAE,CAAC,AAAD,IAAnCwB,KAAAA,IAAAA,qCAAsC,MAAM;oDAC9C,SAAO,QACLC,CAAAA,uCAAAA,QAAQ,aAAa,CAACzB,EAAE,OAAO,CAAE,EAAE,CAAC,AAAD,IAAnCyB,KAAAA,IAAAA,qCAAsC,WAAW;oDACnD,eAAe;oDACf,cAAc;oDACd,OAAO;gDACT;gDACA;oDACE,UAAQ,QACNC,CAAAA,uCAAAA,QAAQ,aAAa,CAAC1B,EAAE,OAAO,CAAE,EAAE,CAAC,AAAD,IAAnC0B,KAAAA,IAAAA,qCAAsC,MAAM;oDAC9C,SAAO,QACLC,CAAAA,uCAAAA,QAAQ,aAAa,CAAC3B,EAAE,OAAO,CAAE,EAAE,CAAC,AAAD,IAAnC2B,KAAAA,IAAAA,qCACI,YAAY;oDAClB,eAAe;oDACf,cAAc;oDACd,OAAO;gDACT;6CACD;6CAED;;;4BAGV;wBACF;qBACD;;;;;AAKX"}
@@ -0,0 +1,3 @@
1
+ import { Client } from '@rsdoctor/types';
2
+ export declare const name = "Upload and Analysis";
3
+ export declare const route = Client.RsdoctorClientRoutes.Uploader;
@@ -0,0 +1,6 @@
1
+ import { Client } from "@rsdoctor/types";
2
+ const constants_name = 'Upload and Analysis';
3
+ const route = Client.RsdoctorClientRoutes.Uploader;
4
+ export { constants_name as name, route };
5
+
6
+ //# sourceMappingURL=constants.mjs.map
@@ -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,3 @@
1
+ import React from 'react';
2
+ export declare const Page: React.FC<{}>;
3
+ export * from './constants';
@@ -0,0 +1,74 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ import { Spin, Upload, message } from "antd";
4
+ import { InboxOutlined } from "@ant-design/icons";
5
+ import { Client, Constants } from "@rsdoctor/types";
6
+ import { isWebpackStats, loadWebpackStats } from "../../utils/stats.mjs";
7
+ import { getSharingUrl, readJSONByFileReader } from "../../utils/index.mjs";
8
+ export * from "./constants.mjs";
9
+ const Component = ()=>{
10
+ const [loading, setLoading] = useState(false);
11
+ return /*#__PURE__*/ jsx(Spin, {
12
+ spinning: loading,
13
+ tip: "uploading...",
14
+ children: /*#__PURE__*/ jsxs(Upload.Dragger, {
15
+ multiple: false,
16
+ showUploadList: false,
17
+ accept: ".json",
18
+ onChange: ({ file })=>{
19
+ setLoading(true);
20
+ readJSONByFileReader(file).then(async (json)=>{
21
+ if (json && 'object' == typeof json) try {
22
+ window[Constants.WINDOW_RSDOCTOR_TAG] = json.data;
23
+ window[Constants.WINDOW_RSDOCTOR_TAG].enableRoutes = json.clientRoutes;
24
+ const enableRoutes = json.clientRoutes;
25
+ const baseUrl = `http://${location.host}/#/overall`;
26
+ const queryParams = enableRoutes && enableRoutes.length > 0 ? `?${Client.RsdoctorClientUrlQuery.EnableRoutes}=${encodeURIComponent(JSON.stringify(enableRoutes))}` : '';
27
+ location.href = `${baseUrl}${queryParams}`;
28
+ message.success('JSON data loaded successfully!');
29
+ } catch (err) {
30
+ message.error(`Failed to load JSON data: ${err.message}`);
31
+ console.error('Failed to load JSON data:', err);
32
+ }
33
+ else if (isWebpackStats(json)) {
34
+ const manifestJson = await loadWebpackStats([
35
+ json
36
+ ]).then((manifests)=>manifests[0]).catch((err)=>{
37
+ message.error(`load json error: ${err.message}`);
38
+ throw err;
39
+ });
40
+ if (manifestJson) location.href = getSharingUrl((null == manifestJson ? void 0 : manifestJson.cloudManifestUrl) || '');
41
+ else message.error('json is invalid');
42
+ } else {
43
+ message.error('Invalid JSON format');
44
+ console.warn('Invalid JSON format:', json);
45
+ }
46
+ }).finally(()=>{
47
+ setLoading(false);
48
+ });
49
+ },
50
+ style: {
51
+ width: '100%'
52
+ },
53
+ beforeUpload: ()=>false,
54
+ children: [
55
+ /*#__PURE__*/ jsx("p", {
56
+ className: "ant-upload-drag-icon",
57
+ children: /*#__PURE__*/ jsx(InboxOutlined, {})
58
+ }),
59
+ /*#__PURE__*/ jsx("p", {
60
+ className: "ant-upload-text",
61
+ children: "Click or drag json file to this area to upload and analyze your profile json"
62
+ }),
63
+ /*#__PURE__*/ jsx("p", {
64
+ className: "ant-upload-hint",
65
+ children: "By default, Rsdoctor will emit the profile json(manifest.json) to the output folder."
66
+ })
67
+ ]
68
+ })
69
+ });
70
+ };
71
+ const Page = Component;
72
+ export { Page };
73
+
74
+ //# 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 React, { useState } from 'react';\nimport { message, Spin, Upload } from 'antd';\nimport { InboxOutlined } from '@ant-design/icons';\nimport { Constants, Client, Common } from '@rsdoctor/types';\nimport { isWebpackStats, loadWebpackStats } from '../../utils/stats';\nimport { getSharingUrl, readJSONByFileReader } from '../../utils';\n\nconst Component: React.FC = () => {\n const [loading, setLoading] = useState(false);\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 setLoading(true);\n readJSONByFileReader<Common.PlainObject>(file)\n .then(async (json) => {\n // Check if it's a valid JSON object\n if (json && typeof json === 'object') {\n try {\n // Mount the JSON data to window object for HTML page to use\n window[Constants.WINDOW_RSDOCTOR_TAG] = json.data;\n window[Constants.WINDOW_RSDOCTOR_TAG].enableRoutes =\n json.clientRoutes;\n\n // Redirect to the analysis page with enableRoutes in query\n const enableRoutes = json.clientRoutes;\n const baseUrl = `http://${location.host}/#/overall`;\n const queryParams =\n enableRoutes && enableRoutes.length > 0\n ? `?${Client.RsdoctorClientUrlQuery.EnableRoutes}=${encodeURIComponent(JSON.stringify(enableRoutes))}`\n : '';\n location.href = `${baseUrl}${queryParams}`;\n\n message.success('JSON data loaded successfully!');\n } catch (err) {\n message.error(\n `Failed to load JSON data: ${(err as Error).message}`,\n );\n console.error('Failed to load JSON data:', err);\n }\n } else if (isWebpackStats(json)) {\n const manifestJson = await loadWebpackStats([json])\n .then((manifests) => {\n return manifests[0];\n })\n .catch((err: Error) => {\n message.error(`load json error: ${err.message}`);\n throw err;\n });\n if (manifestJson) {\n location.href = getSharingUrl(\n manifestJson?.cloudManifestUrl || '',\n );\n } else {\n message.error('json is invalid');\n }\n } else {\n message.error('Invalid JSON format');\n console.warn('Invalid JSON format:', json);\n }\n })\n .finally(() => {\n setLoading(false);\n });\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 profile json\n </p>\n <p className=\"ant-upload-hint\">\n By default, Rsdoctor will emit the profile json(manifest.json) to the\n output folder.\n </p>\n </Upload.Dragger>\n </Spin>\n );\n};\n\nexport const Page = Component;\nexport * from './constants';\n"],"names":["Component","loading","setLoading","useState","Spin","Upload","file","readJSONByFileReader","json","window","Constants","enableRoutes","baseUrl","location","queryParams","Client","encodeURIComponent","JSON","message","err","console","isWebpackStats","manifestJson","loadWebpackStats","manifests","getSharingUrl","InboxOutlined","Page"],"mappings":";;;;;;;;AAOA,MAAMA,YAAsB;IAC1B,MAAM,CAACC,SAASC,WAAW,GAAGC,SAAS;IAEvC,OAAO,WAAP,GACE,IAACC,MAAIA;QAAC,UAAUH;QAAS,KAAI;kBAC3B,mBAACI,OAAO,OAAO;YACb,UAAU;YACV,gBAAgB;YAChB,QAAO;YACP,UAAU,CAAC,EAAEC,IAAI,EAAE;gBACjBJ,WAAW;gBACXK,qBAAyCD,MACtC,IAAI,CAAC,OAAOE;oBAEX,IAAIA,QAAQ,AAAgB,YAAhB,OAAOA,MACjB,IAAI;wBAEFC,MAAM,CAACC,UAAU,mBAAmB,CAAC,GAAGF,KAAK,IAAI;wBACjDC,MAAM,CAACC,UAAU,mBAAmB,CAAC,CAAC,YAAY,GAChDF,KAAK,YAAY;wBAGnB,MAAMG,eAAeH,KAAK,YAAY;wBACtC,MAAMI,UAAU,CAAC,OAAO,EAAEC,SAAS,IAAI,CAAC,UAAU,CAAC;wBACnD,MAAMC,cACJH,gBAAgBA,aAAa,MAAM,GAAG,IAClC,CAAC,CAAC,EAAEI,OAAO,sBAAsB,CAAC,YAAY,CAAC,CAAC,EAAEC,mBAAmBC,KAAK,SAAS,CAACN,gBAAgB,GACpG;wBACNE,SAAS,IAAI,GAAG,GAAGD,UAAUE,aAAa;wBAE1CI,QAAQ,OAAO,CAAC;oBAClB,EAAE,OAAOC,KAAK;wBACZD,QAAQ,KAAK,CACX,CAAC,0BAA0B,EAAGC,IAAc,OAAO,EAAE;wBAEvDC,QAAQ,KAAK,CAAC,6BAA6BD;oBAC7C;yBACK,IAAIE,eAAeb,OAAO;wBAC/B,MAAMc,eAAe,MAAMC,iBAAiB;4BAACf;yBAAK,EAC/C,IAAI,CAAC,CAACgB,YACEA,SAAS,CAAC,EAAE,EAEpB,KAAK,CAAC,CAACL;4BACND,QAAQ,KAAK,CAAC,CAAC,iBAAiB,EAAEC,IAAI,OAAO,EAAE;4BAC/C,MAAMA;wBACR;wBACF,IAAIG,cACFT,SAAS,IAAI,GAAGY,cACdH,AAAAA,CAAAA,QAAAA,eAAAA,KAAAA,IAAAA,aAAc,gBAAgB,AAAD,KAAK;6BAGpCJ,QAAQ,KAAK,CAAC;oBAElB,OAAO;wBACLA,QAAQ,KAAK,CAAC;wBACdE,QAAQ,IAAI,CAAC,wBAAwBZ;oBACvC;gBACF,GACC,OAAO,CAAC;oBACPN,WAAW;gBACb;YACJ;YACA,OAAO;gBAAE,OAAO;YAAO;YACvB,cAAc,IAAM;;8BAEpB,IAAC;oBAAE,WAAU;8BACX,kBAACwB,eAAaA,CAAAA;;8BAEhB,IAAC;oBAAE,WAAU;8BAAkB;;8BAI/B,IAAC;oBAAE,WAAU;8BAAkB;;;;;AAOvC;AAEO,MAAMC,OAAO3B"}
@@ -8,3 +8,4 @@ export * as ModuleResolve from './ModuleResolve';
8
8
  export * as RuleIndex from './Resources/RuleIndex';
9
9
  export * as TreeShaking from './TreeShaking';
10
10
  export * as BundleDiff from './Resources/BundleDiff';
11
+ export * as Uploader from './Uploader';
@@ -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
- 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 };
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 = 'object' == typeof res ? res : JSON.parse(Algorithm.decompressText(res));
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 =\n typeof res === 'object'\n ? res\n : JSON.parse(Algorithm.decompressText(res));\n\n this.shardingDataMap.set(scope, 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 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","JSON","Algorithm","window","Constants","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,YACJ,AAAe,YAAf,OAAOD,MACHA,MACAE,KAAK,KAAK,CAACC,UAAU,cAAc,CAACH;YAE1C,IAAI,CAAC,eAAe,CAAC,GAAG,CAACF,OAAOG;QAClC;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,OAAOM,MAAM,CAACC,UAAU,mBAAmB,CAAC,CAACP,MAAM;IACrD;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"}
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"}
@@ -13,3 +13,4 @@ export * from './string';
13
13
  export * from './time';
14
14
  export * from './url';
15
15
  export * from './worker';
16
+ export * from './stats';
@@ -13,3 +13,4 @@ export * from "./string.mjs";
13
13
  export * from "./time.mjs";
14
14
  export * from "./url.mjs";
15
15
  export * from "./worker/index.mjs";
16
+ export * from "./stats.mjs";
@@ -0,0 +1,3 @@
1
+ import { Common, Manifest, Plugin } from '@rsdoctor/types';
2
+ export declare function isWebpackStats(json: Common.PlainObject): json is Plugin.StatsCompilation;
3
+ export declare function loadWebpackStats(jsons: Plugin.StatsCompilation[]): Promise<Manifest.RsdoctorManifest[]>;
@@ -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 isWebpackStats(json) {
5
+ return json.hash && isArray(json.assets) && isArray(json.chunks) && isArray(json.modules);
6
+ }
7
+ async function loadWebpackStats(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 { isWebpackStats, loadWebpackStats };
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 isWebpackStats(\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 loadWebpackStats(\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":["isWebpackStats","json","isArray","loadWebpackStats","jsons","res","Promise","chunkGraph","Chunks","Map","moduleGraph","ModuleGraphTrans","undefined","pkgGraph","PackageGraph","SDK","e"],"mappings":";;;AAKO,SAASA,eACdC,IAAwB;IAExB,OACEA,KAAK,IAAI,IACTC,QAAQD,KAAK,MAAM,KACnBC,QAAQD,KAAK,MAAM,KACnBC,QAAQD,KAAK,OAAO;AAExB;AAEO,eAAeE,iBACpBC,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"}
@@ -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>;
@@ -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
- url.set('query', {
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
@@ -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 url.set('query', {\n ...url.query,\n [Client.RsdoctorClientUrlQuery.ManifestFile]: manifestCloudUrl,\n });\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","changeOrigin","origin","newUrl","getSharingUrl","manifestCloudUrl","getDemoUrl","getShortPath","pathArr","isDef","data"],"mappings":";;AAGA,SAASA,cAAcC,GAA8C;IACnE,IAAIC,AAAyB,kBAAzBA,QAAQ,GAAG,CAAC,QAAQ,EAAoB;QAC1C,MAAMC,MAAMC,UAAMC,UAAU,iBAAiB,EAAE;QAC/CJ,IAAI,GAAG,CAAC,UAAUE,IAAI,MAAM;QAC5BF,IAAI,GAAG,CAAC,YAAYE,IAAI,QAAQ;QAChCF,IAAI,GAAG,CAAC,QAAQE,IAAI,IAAI;QACxBF,IAAI,GAAG,CAAC,YAAYE,IAAI,QAAQ;IAClC;AACF;AAEA,SAASG,gBAAgBL,GAA8C;IACrE,IAAIA,IAAI,IAAI,CAAC,QAAQ,CAACM,OAAO,oBAAoB,CAAC,QAAQ,GACxDN,IAAI,GAAG,CAAC,QAAQM,OAAO,oBAAoB,CAAC,OAAO;AAEvD;AAEO,SAASC,YAAYC,IAAY;IACtC,OAAOA,KAAK,UAAU,CAAC;AACzB;AAEO,SAASC;IACd,MAAM,EAAEC,KAAK,EAAE,GAAGP,UAAMQ,SAAS,IAAI,EAAE;IACvC,MAAMX,MAAMU,KAAK,CAACJ,OAAO,sBAAsB,CAAC,YAAY,CAAC;IAC7D,IAAIN,KACF,OAAOY,mBAAmBZ;AAE9B;AAEO,SAASa,aAAaC,MAAc;IACzC,MAAMd,MAAMG,UAAMQ,SAAS,IAAI,EAAE;IACjC,MAAMI,SAASZ,UAAMW,QAAQ;IAE7BT,gBAAgBL;IAEhBA,IAAI,GAAG,CAAC,UAAUc;IAClBd,IAAI,GAAG,CAAC,YAAYe,OAAO,QAAQ;IACnCf,IAAI,GAAG,CAAC,QAAQe,OAAO,IAAI;IAC3Bf,IAAI,GAAG,CAAC,QAAQe,OAAO,IAAI;IAE3B,OAAOf,IAAI,QAAQ;AACrB;AAEO,SAASgB,cAAcC,gBAAwB;IACpD,MAAMjB,MAAMG,UAAMQ,SAAS,IAAI,EAAE;IAEjCZ,cAAcC;IACdK,gBAAgBL;IAEhBA,IAAI,GAAG,CAAC,SAAS;QACf,GAAGA,IAAI,KAAK;QACZ,CAACM,OAAO,sBAAsB,CAAC,YAAY,CAAC,EAAEW;IAChD;IAEA,OAAOjB,IAAI,QAAQ;AACrB;AAEO,SAASkB;IACd,IAAIjB,QAAQ,GAAG,CAAC,2BAA2B,EACzC,OAAOe,cAAcf,QAAQ,GAAG,CAAC,2BAA2B;IAE9D,OAAO;AACT;AAEO,MAAMkB,eAAe,CAACX;IAC3B,IAAIA,AAAAA,CAAAA,QAAAA,OAAAA,KAAAA,IAAAA,KAAM,OAAO,CAAC,eAAc,KAAK,GAAG;QACtC,MAAMY,UAAUZ,KAAK,KAAK,CAAC;QAC3B,OAAO,CAAC,YAAY,EAAEY,OAAO,CAACA,QAAQ,MAAM,GAAG,EAAE,EAAE;IACrD;IACA,IAAIZ,QAAAA,OAAAA,KAAAA,IAAAA,KAAM,MAAM,EACd,OAAO,GAAGA,QAAAA,OAAAA,KAAAA,IAAAA,KAAM,KAAK,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM;IAElD,OAAOA;AACT;AAEO,SAASa,MAAmBC,IAAO;IACxC,OAAOA,QAAAA;AACT"}
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.2",
3
+ "version": "1.2.4-beta.0",
4
4
  "license": "MIT",
5
5
  "types": "dist/index.d.ts",
6
6
  "repository": {
@@ -42,28 +42,27 @@
42
42
  "@rsbuild/plugin-react": "^1.3.4",
43
43
  "@rsbuild/plugin-sass": "^1.3.3",
44
44
  "@rsbuild/plugin-svgr": "^1.2.1",
45
- "@rslib/core": "^0.11.0",
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
48
  "@types/react": "^18.3.23",
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.2.2"
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.11.0",
59
+ "axios": "^1.12.0",
61
60
  "clsx": "^2.1.1",
62
61
  "dayjs": "1.11.13",
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.6.1",
76
+ "socket.io-client": "4.8.1",
78
77
  "url-parse": "1.5.10",
79
- "@rsdoctor/types": "1.2.2",
80
- "@rsdoctor/graph": "1.2.2",
81
- "@rsdoctor/utils": "1.2.2"
78
+ "@rsdoctor/graph": "1.2.4-beta.0",
79
+ "@rsdoctor/types": "1.2.4-beta.0",
80
+ "@rsdoctor/utils": "1.2.4-beta.0"
82
81
  },
83
82
  "peerDependencies": {
84
83
  "react": ">=18.3.1",