{"version":3,"file":"pages/BundleSize/components/asset.mjs","sources":["../../../../src/pages/BundleSize/components/asset.tsx"],"sourcesContent":["import {\n  CodepenCircleOutlined,\n  ColumnHeightOutlined,\n  InfoCircleOutlined,\n} from '@ant-design/icons';\nimport { SDK } from '@rsdoctor/types';\nimport {\n  Button,\n  Card,\n  Divider,\n  Empty,\n  Popover as BasePopover,\n  Space,\n  Tag,\n  type TagProps,\n  type TooltipProps,\n  type PopoverProps,\n  Tooltip as BaseTooltip,\n  Tree,\n  Typography,\n} from 'antd';\nimport { DataNode as AntdDataNode } from 'antd/es/tree';\nimport { debounce, omitBy, sumBy } from 'es-toolkit/compat';\nimport { dirname, relative } from 'path';\nimport React, {\n  useEffect,\n  useMemo,\n  useState,\n  memo,\n  useCallback,\n  use,\n  createContext,\n} from 'react';\nimport { CodeViewer } from 'src/components/base';\nimport { Badge as Bdg } from '../../../components/Badge';\nimport { KeywordInput } from '../../../components/Form/keyword';\nimport { ServerAPIProvider } from '../../../components/Manifest';\nimport { TextDrawer } from '../../../components/TextDrawer';\nimport { Size } from '../../../constants';\nimport {\n  DataNode,\n  createFileStructures,\n  formatSize,\n  isJsDataUrl,\n  useElementSize,\n  useI18n,\n} from '../../../utils';\nimport { ModuleAnalyzeComponent } from '../../ModuleAnalyze';\nimport { ModuleGraphListContext } from '../config';\nimport styles from './asset.module.scss';\nimport { ModuleData } from '@rsdoctor/graph';\nimport { ErrorBoundary } from 'react-error-boundary';\n\nconst { DirectoryTree } = Tree;\n\nconst TAB_MAP = {\n  source: 'source code',\n  transformed: 'Transformed Code (After compile)',\n  parsedSource: 'Bundled Code (After bundle and tree-shaking)',\n};\n\n// antd's tooltip/popover component often throws 185 error when rendered inside a virtual list.\n// this is used as a reset mechanism for the error boundary.\n// also these tooltips are a real performance killer\n// and they can be easily turned off by wrapping the problematic subtree in DisablePopups\nconst POPUPS_ENABLED_BY_DEFAULT = true;\nconst PopupContext = createContext({ enabled: POPUPS_ENABLED_BY_DEFAULT });\nconst DisablePopups = ({ children }: { children: any }) => (\n  <PopupContext.Provider value={{ enabled: false }}>\n    {children}\n  </PopupContext.Provider>\n);\nconst usePopupsEnabled = (): boolean => use(PopupContext)?.enabled ?? true;\nconst Tooltip = (props: TooltipProps) => {\n  const enabled = usePopupsEnabled();\n  if (enabled) return <BaseTooltip {...props} />;\n  else return props.children ?? null;\n};\nconst Popover = (props: PopoverProps) => {\n  const enabled = usePopupsEnabled();\n  if (enabled) return <BasePopover {...props} />;\n  else return props.children ?? null;\n};\n\nconst EmptyCodeItem = () => (\n  <Empty\n    description={`Do not have the module code.\n  (1) If you use the brief mode, there will not have any codes to show.\n  (2) If you use lite mode, there will not have source codes.`}\n  />\n);\n\nexport const ModuleCodeViewer: React.FC<{ data: SDK.ModuleData }> = ({\n  data,\n}) => {\n  const [tab, setTab] = useState('');\n  const { t } = useI18n();\n\n  const TAB_LAB_MAP: Record<string, string> = {\n    source: 'Source Code',\n    transformed: `Transformed Code(${t('After Compile')})`,\n    parsedSource: `Bundled Code(${t('After Bundled')})`,\n  };\n  if (!data) return null;\n\n  const { path } = data;\n\n  return (\n    <TextDrawer\n      text=\"\"\n      buttonProps={{\n        size: 'small',\n        icon: (\n          <Popover content=\"Open the Codes Box\">\n            <CodepenCircleOutlined />\n          </Popover>\n        ),\n        type: 'default',\n      }}\n      buttonStyle={{ padding: `0 4px` }}\n      drawerProps={{\n        destroyOnClose: true,\n        title: `Code of \"${path}\"`,\n      }}\n    >\n      <ServerAPIProvider\n        api={SDK.ServerAPI.API.GetModuleCodeByModuleId}\n        body={{ moduleId: data.id }}\n      >\n        {(source) => {\n          return (\n            <>\n              {!source['source'] &&\n              !source['parsedSource'] &&\n              !source['transformed'] ? (\n                <EmptyCodeItem />\n              ) : (\n                <Card\n                  className=\"code-size-card\"\n                  style={{ width: '100%' }}\n                  tabList={Object.keys(omitBy(source, (s) => !s))\n                    .map((k) => ({ tab: k }))\n                    .map((e) => ({\n                      ...e,\n                      tab: TAB_LAB_MAP[e.tab],\n                      key: e.tab,\n                    }))}\n                  defaultActiveTabKey={\n                    source['parsedSource'] ? 'parsedSource' : 'source'\n                  }\n                  onTabChange={(v) => setTab(v)}\n                  tabBarExtraContent={\n                    <Popover\n                      placement=\"bottom\"\n                      title={\n                        <Typography.Title level={5}>Explain</Typography.Title>\n                      }\n                      content={\n                        <>\n                          <div\n                            style={{\n                              display: 'flex',\n                              flexDirection: 'column',\n                              marginBottom: 30,\n                            }}\n                          >\n                            <div>\n                              <Typography.Text strong>Source: </Typography.Text>\n                              <Typography.Text>\n                                {TAB_MAP.source}\n                              </Typography.Text>\n                            </div>\n                            <div>\n                              <Typography.Text strong>\n                                Transformed:\n                              </Typography.Text>\n                              <Typography.Text>\n                                {TAB_MAP.transformed}\n                              </Typography.Text>\n                            </div>\n                            <div>\n                              <Typography.Text strong>\n                                Bundled Source:\n                              </Typography.Text>\n                              <Typography.Text>\n                                {TAB_MAP.parsedSource}\n                              </Typography.Text>\n                            </div>\n                            <br />\n                            <Typography.Text strong>{'More'}</Typography.Text>\n                            <Typography.Text>\n                              {t('CodeModeExplain')}\n                            </Typography.Text>\n                          </div>\n                        </>\n                      }\n                      trigger={'hover'}\n                    >\n                      <a href=\"#\">Explain</a>\n                    </Popover>\n                  }\n                  styles={{ body: { padding: 0, overflow: 'hidden' } }}\n                >\n                  {source['parsedSource'] ||\n                  source['source'] ||\n                  source['transformed'] ? (\n                    <CodeViewer\n                      isEmbed\n                      code={\n                        tab\n                          ? source[tab as keyof SDK.ModuleSource]\n                          : source['parsedSource']\n                            ? source['parsedSource']\n                            : source['source']\n                      }\n                      filePath={path}\n                    />\n                  ) : (\n                    <EmptyCodeItem />\n                  )}\n                </Card>\n              )}\n            </>\n          );\n        }}\n      </ServerAPIProvider>\n    </TextDrawer>\n  );\n};\n\nexport const ModuleGraphViewer: React.FC<{\n  id: number | string;\n  show: boolean;\n  setShow: (_show: boolean) => void;\n  cwd: string;\n}> = ({ id, show, setShow, cwd }) => {\n  if (!id) return null;\n\n  return (\n    <ServerAPIProvider api={SDK.ServerAPI.API.GetAllModuleGraph} body={{}}>\n      {(modules) => (\n        <ModuleAnalyzeComponent\n          cwd={cwd}\n          moduleId={id}\n          modules={modules}\n          show={show}\n          setShow={setShow}\n        />\n      )}\n    </ServerAPIProvider>\n  );\n};\n\nconst inlinedResourcePathKey = '__RESOURCEPATH__';\n\nexport function getChildrenModule(node: DataNode, mods: string[]) {\n  if (node.children) {\n    node.children.forEach((n: DataNode) => {\n      if (n.isLeaf) {\n        mods.push(n[inlinedResourcePathKey]);\n      } else {\n        getChildrenModule(n, mods);\n      }\n    });\n  }\n\n  return mods;\n}\n\nexport const ModulesStatistics: React.FC<{\n  modules: SDK.ModuleData[];\n  chunks: SDK.ChunkData[];\n  filteredModules: SDK.ModuleData[];\n}> = memo(({ modules, chunks, filteredModules }) => {\n  const { sourceSize, parsedSize, filteredParsedSize, filteredSourceSize } =\n    useMemo(() => {\n      return {\n        sourceSize: sumBy(modules, (e) => e.size.sourceSize),\n        parsedSize: sumBy(modules, (e) => e.size.parsedSize),\n        filteredSourceSize: sumBy(filteredModules, (e) => e.size.sourceSize),\n        filteredParsedSize: sumBy(filteredModules, (e) => e.size.parsedSize),\n      };\n    }, [modules, filteredModules]);\n\n  return (\n    <Space>\n      <Tooltip\n        title={`total modules count is ${modules.length}, the filtered modules count is ${filteredModules.length}`}\n      >\n        <Space>\n          <Typography.Text\n            type=\"secondary\"\n            style={{ fontSize: 12, fontWeight: 400 }}\n          >\n            Modules: {filteredModules.length} / {modules.length}\n          </Typography.Text>\n          <InfoCircleOutlined />\n        </Space>\n      </Tooltip>\n      <Divider type=\"vertical\" />\n      <Tooltip\n        title={\n          <Space direction=\"vertical\">\n            <Typography.Text style={{ color: 'inherit' }}>\n              Total modules bundled size: {formatSize(parsedSize)}\n            </Typography.Text>\n            <Typography.Text style={{ color: 'inherit' }}>\n              Total modules source size: {formatSize(sourceSize)}\n            </Typography.Text>\n            <Typography.Text style={{ color: 'inherit' }}>\n              Filtered modules bundled size: {formatSize(filteredParsedSize)}\n            </Typography.Text>\n            <Typography.Text style={{ color: 'inherit' }}>\n              Filtered modules source size: {formatSize(filteredSourceSize)}\n            </Typography.Text>\n          </Space>\n        }\n      >\n        <Space>\n          <Typography.Text\n            type=\"secondary\"\n            style={{ fontSize: 12, fontWeight: 400 }}\n          >\n            Modules Size:\n            {filteredParsedSize === parsedSize\n              ? formatSize(parsedSize)\n              : `${formatSize(filteredParsedSize)} / ${formatSize(parsedSize)}`}\n          </Typography.Text>\n          <InfoCircleOutlined />\n        </Space>\n      </Tooltip>\n      <Divider type=\"vertical\" />\n      <Tooltip\n        title={\n          <Space direction=\"vertical\">\n            <Typography.Text style={{ color: 'inherit' }}>\n              this asset includes {chunks.length} chunks:\n            </Typography.Text>\n            {chunks.map((e) => (\n              <Bdg label=\"chunk\" value={e.name} key={e.name} />\n            ))}\n          </Space>\n        }\n      >\n        <Space>\n          <Typography.Text\n            type=\"secondary\"\n            style={{ fontSize: 12, fontWeight: 400 }}\n          >\n            Chunks: {chunks.length}\n          </Typography.Text>\n          <InfoCircleOutlined />\n        </Space>\n      </Tooltip>\n    </Space>\n  );\n});\n\nconst defaultTagStyle: React.CSSProperties = {\n  margin: 'none',\n  marginInlineEnd: 0,\n};\nconst AbstractTag = ({\n  color,\n  tooltipTitle,\n  style = defaultTagStyle,\n  children,\n}: {\n  color: TagProps['color'];\n  children: string;\n  tooltipTitle: string;\n  style?: React.CSSProperties | null;\n}) => {\n  return (\n    <Tooltip\n      title={\n        <Space>\n          <Typography.Text style={{ color: 'inherit' }}>\n            {tooltipTitle}\n          </Typography.Text>\n        </Space>\n      }\n    >\n      <Tag color={color} style={style || undefined}>\n        {children}\n      </Tag>\n    </Tooltip>\n  );\n};\nconst ConcatenatedTag = ({ moduleCount }: { moduleCount: number }) => {\n  return (\n    <AbstractTag\n      color=\"blue\"\n      tooltipTitle={`This is a concatenated container module that includes ${moduleCount} modules`}\n    >\n      concatenated container\n    </AbstractTag>\n  );\n};\nconst TotalBundledSizeTag = ({ size }: { size: number }) => {\n  return (\n    <AbstractTag\n      color=\"geekblue\"\n      tooltipTitle=\"The total output size of all the files in this folder. If you enabled minification, this value shows the minified size.\"\n    >\n      {`bundled size: ${formatSize(size)}`}\n    </AbstractTag>\n  );\n};\nconst BundledSizeTag = ({ size }: { size: number }) => {\n  return (\n    <AbstractTag\n      color=\"geekblue\"\n      style={null}\n      tooltipTitle=\"The final output size of this file. If you enabled minification, this value shows the minified size.\"\n    >\n      {`bundled size: ${formatSize(size)}`}\n    </AbstractTag>\n  );\n};\nconst GzippedSizeTag = ({ size }: { size: number }) => {\n  return (\n    <AbstractTag\n      color=\"orange\"\n      style={null}\n      tooltipTitle=\"The compressed file size that users actually download, as most web servers use gzip compression.\"\n    >\n      {`gzipped: ${formatSize(size)}`}\n    </AbstractTag>\n  );\n};\nconst TotalSourceSizeTag = ({ size }: { size: number }) => {\n  return (\n    <AbstractTag\n      tooltipTitle=\"The total original size of all the files in this folder, before any transformations and minification.\"\n      color=\"cyan\"\n    >{`source size: ${formatSize(size)}`}</AbstractTag>\n  );\n};\nconst SourceSizeTag = ({ size }: { size: number }) => {\n  return (\n    <AbstractTag\n      color=\"cyan\"\n      style={null}\n      tooltipTitle=\"The original size of this file, before any transformations and minification.\"\n    >\n      {`source size: ${formatSize(size)}`}\n    </AbstractTag>\n  );\n};\n\nexport const AssetDetail: React.FC<{\n  asset: SDK.AssetData;\n  chunks: SDK.ChunkData[];\n  modules: SDK.ModuleData[];\n  moduleSizeLimit?: number;\n  height?: number;\n  root: string;\n}> = ({\n  asset,\n  chunks: includeChunks,\n  modules: includeModules,\n  moduleSizeLimit,\n  height,\n  root,\n}) => {\n  const [moduleKeyword, setModuleKeyword] = useState('');\n  const [defaultExpandAll, setDefaultExpandAll] = useState(false);\n  const [moduleJumpList, setModuleJumpList] = useState([] as number[]);\n  const [showModuleGraphViewer, setShowModuleGraphViewer] = useState(false);\n  const filteredModules = useMemo(() => {\n    let res = includeModules.slice();\n    if (moduleKeyword) {\n      const regexp = new RegExp(moduleKeyword, 'i');\n      res = res.filter((e) => regexp.test(e.path));\n    }\n\n    if (moduleSizeLimit) {\n      res = res.filter((e) => e.size.parsedSize >= moduleSizeLimit);\n    }\n\n    return res;\n  }, [includeModules, moduleKeyword, moduleSizeLimit]);\n\n  const onSearch = (value: string) => setModuleKeyword(value);\n  const openModuleGraphViewer = useCallback((modId: number[]) => {\n    setShowModuleGraphViewer(true);\n    setModuleJumpList(modId);\n  }, []);\n\n  useEffect(() => {\n    setModuleKeyword('');\n    setDefaultExpandAll(false);\n  }, [asset]);\n\n  useEffect(() => {\n    setDefaultExpandAll(false);\n  }, [moduleKeyword]);\n\n  return (\n    <ModuleGraphListContext.Provider\n      value={{ moduleJumpList, setModuleJumpList }}\n    >\n      <Card\n        className={styles.bundle}\n        title={`Modules of \"${asset.path}\"`}\n        style={\n          height\n            ? ({\n                '--body-min-height': height + 'px',\n              } as React.CSSProperties)\n            : undefined\n        }\n        classNames={{\n          body: styles.bundleBody,\n        }}\n        size=\"small\"\n      >\n        {includeModules.length ? (\n          <>\n            <div>\n              <ModulesStatistics\n                modules={includeModules}\n                chunks={includeChunks}\n                filteredModules={filteredModules}\n              />\n            </div>\n            <div>\n              <Space>\n                <KeywordInput\n                  placeholder=\"search module by keyword\"\n                  onChange={onSearch}\n                  key={asset.path}\n                />\n                <Button\n                  onClick={() => setDefaultExpandAll(true)}\n                  size=\"small\"\n                  icon={<ColumnHeightOutlined />}\n                />\n              </Space>\n            </div>\n            <AssetDetailTree\n              assetPath={asset.path}\n              includeModules={includeModules}\n              filteredModules={filteredModules}\n              defaultExpandAll={defaultExpandAll}\n              moduleKeyword={moduleKeyword}\n              openModuleGraphViewer={openModuleGraphViewer}\n            />\n          </>\n        ) : (\n          <Empty\n            description={\n              <Typography.Text\n                strong\n              >{`\"${asset.path}\" doesn't have any modules`}</Typography.Text>\n            }\n          />\n        )}\n        <ModuleGraphViewer\n          id={\n            moduleJumpList?.length\n              ? moduleJumpList[moduleJumpList.length - 1]\n              : ''\n          }\n          show={showModuleGraphViewer}\n          setShow={setShowModuleGraphViewer}\n          cwd={root}\n        />\n      </Card>\n    </ModuleGraphListContext.Provider>\n  );\n};\n\nlet defaultExpandedModulesKeys: React.Key[] = [];\nconst AssetDetailTree = memo(\n  ({\n    filteredModules,\n    includeModules,\n    defaultExpandAll,\n    moduleKeyword,\n    openModuleGraphViewer,\n    assetPath,\n  }: {\n    filteredModules: SDK.ModuleData[];\n    includeModules: SDK.ModuleData[];\n    defaultExpandAll: boolean;\n    moduleKeyword: string;\n    openModuleGraphViewer: (moduleId: number[]) => void;\n    assetPath: string;\n  }) => {\n    const ITEM_HEIGHT = 30;\n    const PERMANENT_PERF_MODE = false;\n    const DISABLE_PERF_MODE_SCROLL_DELAY = 150;\n    const ENABLE_ANIMATIONS = false;\n\n    // disable all the tooltips and popovers inside the tree?\n    const [performanceMode, setPerformanceMode] = useState(PERMANENT_PERF_MODE);\n    const [\n      bundleTreeRef,\n      { height: bundleTreeHeight, width: bundleTreeWidth },\n    ] = useElementSize();\n\n    const onScroll = useMemo(() => {\n      if (PERMANENT_PERF_MODE) return undefined;\n      const disablePerformanceMode = debounce(() => {\n        setPerformanceMode(false);\n      }, DISABLE_PERF_MODE_SCROLL_DELAY);\n      const onScroll = () => {\n        setPerformanceMode(true);\n        disablePerformanceMode();\n      };\n      return onScroll;\n    }, []);\n\n    const treeData = useMemo(() => {\n      // Normalize paths for comparison - convert backslashes to forward slashes\n      const normalizePath = (path: string) => path.replace(/\\\\/g, '/');\n\n      const filteredModulesMap: Map<string, ModuleData> = new Map();\n      const files: string[] = [];\n      for (const mod of filteredModules) {\n        if (mod.path) {\n          filteredModulesMap.set(normalizePath(mod.path), mod);\n          files.push(mod.path);\n        }\n      }\n      const includeModulesMap: Map<string, ModuleData> = new Map();\n      for (const mod of includeModules) {\n        if (mod.path) {\n          includeModulesMap.set(normalizePath(mod.path), mod);\n        }\n      }\n\n      const onFileEntryClick = (modId: number) =>\n        openModuleGraphViewer([modId]);\n\n      const treeData = createFileStructures({\n        files,\n        inlinedResourcePathKey,\n        fileTitle(file, basename) {\n          const mod = filteredModulesMap.get(normalizePath(file));\n\n          if (!mod) return basename;\n\n          return (\n            <AssetDetailTreeFileEntry\n              mod={mod}\n              basename={basename}\n              includeModules={includeModules}\n              onClick={onFileEntryClick}\n            />\n          );\n        },\n        dirTitle(dir, defaultTitle) {\n          // all these calculations can be done directly in AssetDetailTreeDirEntry component\n          // but in that case they'll run on every component render\n          // and here it happens only once on dependencies change\n          const paths = getChildrenModule(dir, []);\n\n          if (!paths.length) return defaultTitle;\n\n          const { parsedSize, sourceSize } = paths.reduce(\n            (acc, path) => {\n              const mod = includeModulesMap.get(normalizePath(path));\n              if (mod) {\n                acc.sourceSize += mod.size?.sourceSize || 0;\n                acc.parsedSize += mod.size?.parsedSize || 0;\n              }\n              return acc;\n            },\n            { sourceSize: 0, parsedSize: 0 },\n          );\n          return (\n            <AssetDetailTreeDirEntry\n              title={defaultTitle}\n              parsedSize={parsedSize}\n              sourceSize={sourceSize}\n            />\n          );\n        },\n        page: 'bundle',\n      });\n      return treeData;\n    }, [filteredModules, openModuleGraphViewer]);\n\n    return (\n      <PopupContext.Provider value={{ enabled: !performanceMode }}>\n        <div\n          className={styles.bundleTree}\n          style={\n            {\n              marginTop: Size.BasePadding,\n              '--item-height': ITEM_HEIGHT + 'px',\n            } as React.CSSProperties\n          }\n        >\n          <div className={styles.bundleTreeViewport}>\n            <div className={styles.bundleTreeInnerViewport} ref={bundleTreeRef}>\n              {bundleTreeHeight > 0 && (\n                <>\n                  {filteredModules.length ? (\n                    <DirectoryTree\n                      onScroll={onScroll}\n                      key={`tree_${moduleKeyword}_${defaultExpandAll}_${assetPath}`}\n                      selectable={false}\n                      virtual\n                      itemHeight={ITEM_HEIGHT}\n                      height={bundleTreeHeight}\n                      style={\n                        bundleTreeWidth\n                          ? { width: bundleTreeWidth + 'px' }\n                          : undefined\n                      }\n                      defaultExpandAll={\n                        defaultExpandAll || filteredModules.length <= 20\n                      }\n                      onExpand={(expandedKeys) => {\n                        defaultExpandedModulesKeys = expandedKeys;\n                      }}\n                      defaultExpandParent\n                      // @ts-ignore\n                      defaultExpandedKeys={\n                        defaultExpandedModulesKeys?.length\n                          ? defaultExpandedModulesKeys\n                          : treeData.length === 1\n                            ? [treeData[0].key]\n                            : []\n                      }\n                      treeData={treeData as AntdDataNode[]}\n                      motion={ENABLE_ANIMATIONS ? undefined : false}\n                    />\n                  ) : (\n                    <Empty\n                      description={\n                        <Typography.Text\n                          strong\n                        >{`\"${moduleKeyword}\" can't match any modules`}</Typography.Text>\n                      }\n                    />\n                  )}\n                </>\n              )}\n            </div>\n          </div>\n        </div>\n      </PopupContext.Provider>\n    );\n  },\n);\n\nconst AssetDetailTreeDirEntry = memo(\n  ({\n    title,\n    parsedSize,\n    sourceSize,\n  }: {\n    title: string;\n    parsedSize: number;\n    sourceSize: number;\n  }) => {\n    const render = () => {\n      return (\n        <div className={styles.bundleTreeEntryContent}>\n          <Popover content={title}>\n            <Typography.Text className={styles.bundleTreeEntryTitle}>\n              {title}\n            </Typography.Text>\n          </Popover>\n          <div className={styles.divider} />\n          <Space>\n            {parsedSize > 0 ? (\n              <>\n                <TotalBundledSizeTag size={parsedSize} />\n                <TotalSourceSizeTag size={sourceSize} />\n              </>\n            ) : (\n              <TotalSourceSizeTag size={sourceSize} />\n            )}\n          </Space>\n        </div>\n      );\n    };\n    const renderWithoutPopups = () => <DisablePopups>{render()}</DisablePopups>;\n    return (\n      <div className={styles.bundleTreeEntry}>\n        <ErrorBoundary fallbackRender={renderWithoutPopups}>\n          {render()}\n        </ErrorBoundary>\n      </div>\n    );\n  },\n);\n\nconst AssetDetailTreeFileEntry = memo(\n  ({\n    mod,\n    basename,\n    includeModules,\n    onClick,\n  }: {\n    mod: SDK.ModuleData;\n    basename: string;\n    includeModules: SDK.ModuleData[];\n    onClick: (modId: number) => void;\n  }) => {\n    const isConcatenation = mod.kind === SDK.ModuleKind.Concatenation;\n    const { parsedSize = 0, sourceSize = 0, gzipSize = 0 } = mod.size;\n\n    const renderSize = () => {\n      if (parsedSize !== 0) {\n        const sourceSizeTag = <SourceSizeTag size={sourceSize} />;\n        const bundledSizeTag = <BundledSizeTag size={parsedSize} />;\n        if (typeof gzipSize === 'number') {\n          return (\n            <Popover placement=\"bottom\" content={sourceSizeTag}>\n              <Space direction=\"horizontal\">\n                {bundledSizeTag}\n                <GzippedSizeTag size={gzipSize} />\n              </Space>\n            </Popover>\n          );\n        } else {\n          return (\n            <Space direction=\"horizontal\">\n              {bundledSizeTag}\n              {sourceSizeTag}\n            </Space>\n          );\n        }\n      } else if (sourceSize !== 0) {\n        // fallback to display tag for source size\n        return <SourceSizeTag size={sourceSize} />;\n      } else {\n        return null;\n      }\n    };\n    const renderContainedOtherModules = () => {\n      const containedOtherModules =\n        !isConcatenation &&\n        parsedSize === 0 &&\n        includeModules.filter(\n          (e) => e !== mod && e.modules && e.modules.indexOf(mod.id) > -1,\n        );\n      if (containedOtherModules && containedOtherModules.length) {\n        return (\n          <Tooltip\n            title={\n              <Space direction=\"vertical\">\n                <Typography.Text style={{ color: 'inherit' }}>\n                  This module is concatenated into another container module:\n                </Typography.Text>\n                {containedOtherModules.map(({ id, path }) => {\n                  if (isJsDataUrl(path)) {\n                    return (\n                      <Typography.Paragraph\n                        ellipsis={{ rows: 4 }}\n                        key={id}\n                        style={{ color: 'inherit', maxWidth: '100%' }}\n                        code\n                      >\n                        {path}\n                      </Typography.Paragraph>\n                    );\n                  }\n\n                  const p = relative(dirname(mod.path), path);\n                  if (p.startsWith('javascript;charset=utf-8;base64,')) {\n                    return (\n                      <Typography.Text\n                        key={id}\n                        style={{ color: 'inherit', maxWidth: '100%' }}\n                        code\n                      >\n                        {p[0] === '.' ? p : `./${p}`}\n                      </Typography.Text>\n                    );\n                  }\n\n                  return (\n                    <Typography.Text key={id} style={{ color: 'inherit' }} code>\n                      {p[0] === '.' ? p : `./${p}`}\n                    </Typography.Text>\n                  );\n                })}\n              </Space>\n            }\n          >\n            <Tag color=\"green\">concatenated</Tag>\n          </Tooltip>\n        );\n      } else {\n        return null;\n      }\n    };\n    const render = () => {\n      return (\n        <div className={styles.bundleTreeEntryContent}>\n          <Popover\n            content={`Open the ${basename}’s module reasons tree.`}\n            placement=\"bottom\"\n          >\n            <div\n              className={styles.bundleTreeEntryTitleWrap}\n              onClick={() => onClick(mod.id)}\n            >\n              <Popover content={basename}>\n                <Typography.Text className={styles.bundleTreeEntryTitle}>\n                  {basename}\n                </Typography.Text>\n              </Popover>\n              <div className={styles.divider} />\n            </div>\n          </Popover>\n          <Space>\n            {renderSize()}\n            {isConcatenation && (\n              <ConcatenatedTag moduleCount={mod.modules?.length || 0} />\n            )}\n            {renderContainedOtherModules()}\n            <ModuleCodeViewer data={mod} />\n          </Space>\n        </div>\n      );\n    };\n    const renderWithoutPopups = () => <DisablePopups>{render()}</DisablePopups>;\n    return (\n      <div className={styles.bundleTreeEntry}>\n        <ErrorBoundary fallbackRender={renderWithoutPopups}>\n          {render()}\n        </ErrorBoundary>\n      </div>\n    );\n  },\n);\n"],"names":["DirectoryTree","Tree","TAB_MAP","POPUPS_ENABLED_BY_DEFAULT","PopupContext","createContext","DisablePopups","children","usePopupsEnabled","use","Tooltip","props","enabled","BaseTooltip","Popover","BasePopover","EmptyCodeItem","Empty","ModuleCodeViewer","data","tab","setTab","useState","t","useI18n","TAB_LAB_MAP","path","TextDrawer","CodepenCircleOutlined","ServerAPIProvider","SDK","source","Card","Object","omitBy","s","k","e","v","Typography","CodeViewer","ModuleGraphViewer","id","show","setShow","cwd","modules","ModuleAnalyzeComponent","inlinedResourcePathKey","getChildrenModule","node","mods","n","ModulesStatistics","memo","chunks","filteredModules","sourceSize","parsedSize","filteredParsedSize","filteredSourceSize","useMemo","sumBy","Space","InfoCircleOutlined","Divider","formatSize","Bdg","defaultTagStyle","AbstractTag","color","tooltipTitle","style","Tag","undefined","ConcatenatedTag","moduleCount","TotalBundledSizeTag","size","BundledSizeTag","GzippedSizeTag","TotalSourceSizeTag","SourceSizeTag","AssetDetail","asset","includeChunks","includeModules","moduleSizeLimit","height","root","moduleKeyword","setModuleKeyword","defaultExpandAll","setDefaultExpandAll","moduleJumpList","setModuleJumpList","showModuleGraphViewer","setShowModuleGraphViewer","res","regexp","RegExp","onSearch","value","openModuleGraphViewer","useCallback","modId","useEffect","ModuleGraphListContext","styles","KeywordInput","Button","ColumnHeightOutlined","AssetDetailTree","defaultExpandedModulesKeys","assetPath","ITEM_HEIGHT","PERMANENT_PERF_MODE","DISABLE_PERF_MODE_SCROLL_DELAY","ENABLE_ANIMATIONS","performanceMode","setPerformanceMode","bundleTreeRef","bundleTreeHeight","bundleTreeWidth","useElementSize","onScroll","disablePerformanceMode","debounce","treeData","normalizePath","filteredModulesMap","Map","files","mod","includeModulesMap","onFileEntryClick","createFileStructures","file","basename","AssetDetailTreeFileEntry","dir","defaultTitle","paths","acc","AssetDetailTreeDirEntry","Size","expandedKeys","title","render","renderWithoutPopups","ErrorBoundary","onClick","isConcatenation","gzipSize","renderSize","sourceSizeTag","bundledSizeTag","renderContainedOtherModules","containedOtherModules","isJsDataUrl","p","relative","dirname"],"mappings":"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"}