{"version":3,"file":"components/Alerts/bundle-alert.mjs","sources":["../../../src/components/Alerts/bundle-alert.tsx"],"sourcesContent":["import { Tabs, Empty, Tag } from 'antd';\nimport { useEffect, useState } from 'react';\n\nimport { Card } from '../Card';\nimport { ECMAVersionCheck } from '../Alert/ecma-version-check';\nimport { Overview } from '../Overall/overview';\nimport { AlertCollapse } from './collapse';\nimport { CommonList } from './list';\nimport { ViewMode } from '../../constants';\nimport { useThemeToken } from '../../utils';\n\nimport type { AlertProps } from '../Alert/types';\nimport type { CSSProperties } from 'react';\nimport type { Rule } from '@rsdoctor/types';\n\nimport styles from './bundle-alert.module.scss';\nimport utilStyles from './index.module.scss';\nimport { CrossChunksAlertCollapse } from './collapse-cross-chunks';\nimport { ModuleMixedChunksAlertCollapse } from './collapse-module-mixed-chunks';\nimport { SideEffectsOnlyImportsAlertCollapse } from './collapse-side-effects-only-imports';\nimport { CjsRequireAlertCollapse } from './collapse-cjs-require';\nimport { EsmResolvedToCjsAlertCollapse } from './collapse-esm-cjs';\n\ninterface BundleAlertProps {\n  title: string;\n  cwd: string;\n  dataSource: Rule.RuleStoreDataItem[];\n  extraData: Omit<AlertProps, 'data'>;\n  viewMode: ViewMode;\n  setViewMode(mode: ViewMode): void;\n  extraCom?: React.JSX.Element | undefined;\n}\n\nconst BUILTIN_RULE_TABS = [\n  {\n    key: 'E1001',\n    label: 'Duplicate Packages',\n  },\n  {\n    key: 'E1002',\n    label: 'Cross Chunks Package',\n  },\n  {\n    key: 'E1003',\n    label: 'Loader Performance Optimization',\n  },\n  {\n    key: 'E1004',\n    label: 'ECMA Version Check',\n  },\n  {\n    key: 'E1005',\n    label: 'Default Import Check',\n  },\n  {\n    key: 'E1006',\n    label: 'Module Mixed Chunks',\n  },\n  {\n    key: 'E1007',\n    label: 'Tree Shaking Side Effects Only',\n  },\n  {\n    key: 'E1008',\n    label: 'CJS Require Cannot Tree-Shake',\n  },\n  {\n    key: 'E1009',\n    label: 'ESM Import Resolved to CJS',\n  },\n];\n\nexport const BundleAlert: React.FC<BundleAlertProps> = ({\n  title,\n  dataSource,\n  extraData,\n}) => {\n  const themeToken = useThemeToken();\n  const tabData: Array<{\n    key: string;\n    label: string;\n    data: Array<Rule.RuleStoreDataItem>;\n    tag: string;\n  }> = BUILTIN_RULE_TABS.map((tab) => ({ ...tab, data: [], tag: tab.key }));\n  const customRulesData: Array<Rule.RuleStoreDataItem> = [];\n\n  dataSource.forEach((data) => {\n    const target = tabData.find((td) => td.key === data.code);\n    if (target) {\n      target.data.push(data);\n    } else {\n      customRulesData.push(data);\n    }\n  });\n\n  if (customRulesData.length) {\n    tabData.push({\n      key: 'CUSTOM_RULES',\n      label: 'Custom Rules',\n      data: customRulesData,\n      tag: 'Custom',\n    });\n  }\n\n  tabData.sort(\n    (a, b) => (b.data.length > 0 ? 1 : 0) - (a.data.length > 0 ? 1 : 0),\n  );\n\n  const defaultActiveKey = tabData[0]?.key ?? 'E1001';\n  const [activeKey, setActiveKey] = useState(defaultActiveKey);\n  const activeTab = tabData.find((tab) => tab.key === activeKey);\n  const resolvedActiveKey =\n    activeTab && (activeTab.data.length > 0 || dataSource.length === 0)\n      ? activeKey\n      : defaultActiveKey;\n\n  useEffect(() => {\n    setActiveKey(defaultActiveKey);\n  }, [defaultActiveKey]);\n\n  const tabItems = tabData.map((td) => {\n    const tagStyle =\n      resolvedActiveKey === td.key\n        ? ({\n            border: `1px solid ${themeToken.colorPrimaryBorder}`,\n            backgroundColor: themeToken.colorPrimaryBg,\n          } as CSSProperties)\n        : {};\n\n    const tagTextStyle =\n      resolvedActiveKey === td.key\n        ? {\n            color: themeToken.colorPrimary,\n          }\n        : {};\n\n    const LabelComponent = () => (\n      <Overview\n        style={{\n          backgroundColor: 'transparent',\n          border: 'none',\n          borderRadius: 0,\n          minHeight: 'auto',\n          padding: '8px 0',\n          width: '100%',\n        }}\n        title={<span className={styles.labelTitle}>{td.label}</span>}\n        description={\n          <div className={styles.labelDescription}>\n            <span>{td.data.length}</span>\n            <Tag\n              style={{ fontFamily: 'Menlo', borderRadius: '2px', ...tagStyle }}\n            >\n              <span style={{ ...tagTextStyle }}>{td.tag}</span>\n            </Tag>\n          </div>\n        }\n      />\n    );\n\n    let children, description;\n    switch (td.key) {\n      case 'E1001':\n        children = <AlertCollapse data={td.data} extraData={extraData} />;\n        break;\n      case 'E1002':\n        children = (\n          <CrossChunksAlertCollapse data={td.data} extraData={extraData} />\n        );\n        break;\n      case 'E1003':\n        children = <CommonList data={td.data} />;\n        break;\n      case 'E1004':\n        description = (\n          <span>\n            No ECMA Version Check Rules were found. Please refer to\n            「https://rsdoctor.rs/guide/usage/rule-config」.\n          </span>\n        );\n        children = <ECMAVersionCheck data={td.data} />;\n        break;\n      case 'E1005':\n        children = <CommonList data={td.data} />;\n        break;\n      case 'E1006':\n        children = (\n          <ModuleMixedChunksAlertCollapse\n            data={td.data}\n            extraData={extraData}\n          />\n        );\n        break;\n      case 'E1007':\n        children = (\n          <SideEffectsOnlyImportsAlertCollapse\n            data={td.data}\n            extraData={extraData}\n          />\n        );\n        break;\n      case 'E1008':\n        children = (\n          <CjsRequireAlertCollapse data={td.data} extraData={extraData} />\n        );\n        break;\n      case 'E1009':\n        children = (\n          <EsmResolvedToCjsAlertCollapse data={td.data} extraData={extraData} />\n        );\n        break;\n      case 'CUSTOM_RULES':\n        children = <CommonList data={td.data} showCode />;\n        break;\n      default:\n        children = null;\n        break;\n    }\n\n    if (!td.data.length) {\n      children = (\n        <Empty description={description} image={Empty.PRESENTED_IMAGE_SIMPLE} />\n      );\n    }\n\n    return {\n      key: td.key,\n      label: <LabelComponent />,\n      children: (\n        <Card\n          className={styles.card}\n          type=\"inner\"\n          title={\n            <>\n              <Tag\n                className={utilStyles.tag}\n                style={{\n                  fontFamily: 'Menlo',\n                  fontWeight: '700',\n                  fontSize: '13px',\n                }}\n              >\n                {td.tag}\n              </Tag>\n              <span>{td.label}</span>\n            </>\n          }\n        >\n          {children}\n        </Card>\n      ),\n    };\n  });\n\n  return (\n    <Card style={{ width: '100%', borderRadius: '12px' }}>\n      <div className={styles.container}>\n        <div className={styles.title}>{title}</div>\n        {!dataSource.length ? (\n          <div\n            style={{\n              minHeight: '480px',\n              display: 'flex',\n              justifyContent: 'center',\n              alignItems: 'center',\n            }}\n          >\n            <Empty\n              description={'No Bundle Alerts Data'}\n              image={Empty.PRESENTED_IMAGE_SIMPLE}\n            />\n          </div>\n        ) : (\n          <Tabs\n            onChange={setActiveKey}\n            tabBarGutter={10}\n            type=\"card\"\n            activeKey={resolvedActiveKey}\n            items={tabItems}\n          />\n        )}\n      </div>\n    </Card>\n  );\n};\n"],"names":["BUILTIN_RULE_TABS","BundleAlert","title","dataSource","extraData","themeToken","useThemeToken","tabData","tab","customRulesData","data","target","td","a","b","defaultActiveKey","activeKey","setActiveKey","useState","activeTab","resolvedActiveKey","useEffect","tabItems","tagStyle","tagTextStyle","LabelComponent","Overview","styles","Tag","children","description","AlertCollapse","CrossChunksAlertCollapse","CommonList","ECMAVersionCheck","ModuleMixedChunksAlertCollapse","SideEffectsOnlyImportsAlertCollapse","CjsRequireAlertCollapse","EsmResolvedToCjsAlertCollapse","Empty","Card","utilStyles","Tabs"],"mappings":"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"}