@rsdoctor/components 1.3.4 → 1.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/dist/components/Alert/ecma-version-check.mjs +2 -2
  2. package/dist/components/Alert/ecma-version-check.mjs.map +1 -1
  3. package/dist/components/Alert/package-relation.mjs +2 -4
  4. package/dist/components/Alert/package-relation.mjs.map +1 -1
  5. package/dist/components/Alert/view.mjs +2 -3
  6. package/dist/components/Alert/view.mjs.map +1 -1
  7. package/dist/components/Alerts/bundle-alert.mjs +2 -4
  8. package/dist/components/Alerts/bundle-alert.mjs.map +1 -1
  9. package/dist/components/Charts/TimelineCharts/index.mjs +3 -4
  10. package/dist/components/Charts/TimelineCharts/index.mjs.map +1 -1
  11. package/dist/components/Charts/TreeMap.mjs +2 -3
  12. package/dist/components/Charts/TreeMap.mjs.map +1 -1
  13. package/dist/components/Charts/index.mjs +1 -1
  14. package/dist/components/Charts/index.mjs.map +1 -1
  15. package/dist/components/Charts/loader.mjs +2 -2
  16. package/dist/components/Charts/loader.mjs.map +1 -1
  17. package/dist/components/FileTree/index.mjs +2 -2
  18. package/dist/components/FileTree/index.mjs.map +1 -1
  19. package/dist/components/Loader/Analysis/files.mjs +32 -36
  20. package/dist/components/Loader/Analysis/files.mjs.map +1 -1
  21. package/dist/components/Loader/executions.mjs +1 -2
  22. package/dist/components/Loader/executions.mjs.map +1 -1
  23. package/dist/components/Overall/bundle_module.css +1 -0
  24. package/dist/components/Overall/bundle_module.css.map +1 -1
  25. package/dist/components/Overall/compile.mjs +1 -2
  26. package/dist/components/Overall/compile.mjs.map +1 -1
  27. package/dist/components/Overall/help-center_module.css +2 -0
  28. package/dist/components/Overall/help-center_module.css.map +1 -1
  29. package/dist/components/Overall/list_module.css +2 -12
  30. package/dist/components/Overall/list_module.css.map +1 -1
  31. package/dist/components/Overall/project_module.css +1 -0
  32. package/dist/components/Overall/project_module.css.map +1 -1
  33. package/dist/components/Select/index.mjs +1 -1
  34. package/dist/components/Select/index.mjs.map +1 -1
  35. package/dist/components/base/CodeViewer/index.mjs +1 -2
  36. package/dist/components/base/CodeViewer/index.mjs.map +1 -1
  37. package/dist/components/base/CodeViewer/utils.mjs +1 -1
  38. package/dist/components/base/CodeViewer/utils.mjs.map +1 -1
  39. package/dist/components/base/DiffViewer/index.mjs +1 -2
  40. package/dist/components/base/DiffViewer/index.mjs.map +1 -1
  41. package/dist/pages/BundleSize/components/asset.mjs +5 -12
  42. package/dist/pages/BundleSize/components/asset.mjs.map +1 -1
  43. package/dist/pages/BundleSize/components/cards.mjs +2 -2
  44. package/dist/pages/BundleSize/components/cards.mjs.map +1 -1
  45. package/dist/pages/BundleSize/components/index_module.css +2 -6
  46. package/dist/pages/BundleSize/components/index_module.css.map +1 -1
  47. package/dist/pages/BundleSize/components/search-modal.mjs +5 -5
  48. package/dist/pages/BundleSize/components/search-modal.mjs.map +1 -1
  49. package/dist/pages/ModuleAnalyze/chunks.mjs +1 -1
  50. package/dist/pages/ModuleAnalyze/chunks.mjs.map +1 -1
  51. package/dist/pages/ModuleAnalyze/components/fileTreeCom.mjs +1 -2
  52. package/dist/pages/ModuleAnalyze/components/fileTreeCom.mjs.map +1 -1
  53. package/dist/pages/ModuleAnalyze/fileTree.mjs +1 -2
  54. package/dist/pages/ModuleAnalyze/fileTree.mjs.map +1 -1
  55. package/dist/pages/ModuleAnalyze/utils/hooks.mjs +5 -8
  56. package/dist/pages/ModuleAnalyze/utils/hooks.mjs.map +1 -1
  57. package/dist/pages/ModuleAnalyze/utils/index.mjs +2 -4
  58. package/dist/pages/ModuleAnalyze/utils/index.mjs.map +1 -1
  59. package/dist/pages/Resources/BundleDiff/DiffContainer/assets.mjs +4 -7
  60. package/dist/pages/Resources/BundleDiff/DiffContainer/assets.mjs.map +1 -1
  61. package/dist/pages/Resources/BundleDiff/DiffContainer/modules.mjs +13 -16
  62. package/dist/pages/Resources/BundleDiff/DiffContainer/modules.mjs.map +1 -1
  63. package/dist/pages/Resources/BundleDiff/DiffContainer/row.mjs +15 -35
  64. package/dist/pages/Resources/BundleDiff/DiffContainer/row.mjs.map +1 -1
  65. package/dist/pages/Resources/BundleDiff/DiffServerAPIProvider/index.mjs +3 -4
  66. package/dist/pages/Resources/BundleDiff/DiffServerAPIProvider/index.mjs.map +1 -1
  67. package/dist/pages/TreeShaking/editor.mjs +2 -4
  68. package/dist/pages/TreeShaking/editor.mjs.map +1 -1
  69. package/dist/pages/TreeShaking/index.css +4 -28
  70. package/dist/pages/TreeShaking/index.css.map +1 -1
  71. package/dist/pages/TreeShaking/index.mjs +1 -1
  72. package/dist/pages/TreeShaking/index.mjs.map +1 -1
  73. package/dist/pages/TreeShaking/table.mjs +3 -3
  74. package/dist/pages/TreeShaking/table.mjs.map +1 -1
  75. package/dist/utils/file.mjs +8 -9
  76. package/dist/utils/file.mjs.map +1 -1
  77. package/dist/utils/hooks.mjs +1 -5
  78. package/dist/utils/hooks.mjs.map +1 -1
  79. package/dist/utils/loader.mjs +1 -1
  80. package/dist/utils/loader.mjs.map +1 -1
  81. package/dist/utils/request.mjs +1 -2
  82. package/dist/utils/request.mjs.map +1 -1
  83. package/dist/utils/url.mjs +2 -2
  84. package/dist/utils/url.mjs.map +1 -1
  85. package/package.json +6 -6
@@ -13,19 +13,12 @@ import { formatDiffSize } from "./utils.mjs";
13
13
  import { Graph } from "@rsdoctor/utils/common";
14
14
  const ModuleHashPattern = /[a-fA-F0-9]{20,}/;
15
15
  const getSizeColumnPropsForModuleRow = (key, sizeKey, sortByChanged)=>{
16
- const sortByChangedFn = (a, b)=>{
17
- var _a_current, _a_baseline, _b_current, _b_baseline;
18
- return ((null == (_a_current = a.current) ? void 0 : _a_current.size[sizeKey]) || 0) - ((null == (_a_baseline = a.baseline) ? void 0 : _a_baseline.size[sizeKey]) || 0) - ((null == (_b_current = b.current) ? void 0 : _b_current.size[sizeKey]) || 0) + ((null == (_b_baseline = b.baseline) ? void 0 : _b_baseline.size[sizeKey]) || 0);
19
- };
20
- const sorterFn = sortByChanged ? (a, b)=>sortByChangedFn(a, b) : (a, b)=>{
21
- var _a_key, _b_key;
22
- return ((null == (_a_key = a[key]) ? void 0 : _a_key.size[sizeKey]) || 0) - ((null == (_b_key = b[key]) ? void 0 : _b_key.size[sizeKey]) || 0);
23
- };
16
+ const sortByChangedFn = (a, b)=>(a.current?.size[sizeKey] || 0) - (a.baseline?.size[sizeKey] || 0) - (b.current?.size[sizeKey] || 0) + (b.baseline?.size[sizeKey] || 0);
17
+ const sorterFn = sortByChanged ? (a, b)=>sortByChangedFn(a, b) : (a, b)=>(a[key]?.size[sizeKey] || 0) - (b[key]?.size[sizeKey] || 0);
24
18
  return {
25
19
  width: 200,
26
20
  sorter: (a, b)=>sorterFn(a, b),
27
21
  render: (_v, r)=>{
28
- var _r_baseline, _r_baseline1;
29
22
  if (!r[key]) return '-';
30
23
  const size = r[key].size[sizeKey];
31
24
  return /*#__PURE__*/ jsxs(Space, {
@@ -33,7 +26,7 @@ const getSizeColumnPropsForModuleRow = (key, sizeKey, sortByChanged)=>{
33
26
  /*#__PURE__*/ jsx(Typography.Text, {
34
27
  children: formatSize(size)
35
28
  }),
36
- 'current' === key ? formatDiffSize((null == (_r_baseline = r.baseline) ? void 0 : _r_baseline.size[sizeKey]) || 0, size, ((null == (_r_baseline1 = r.baseline) ? void 0 : _r_baseline1.size[sizeKey]) || 0) > size ? Client.RsdoctorClientDiffState.Down : Client.RsdoctorClientDiffState.Up) : null
29
+ 'current' === key ? formatDiffSize(r.baseline?.size[sizeKey] || 0, size, (r.baseline?.size[sizeKey] || 0) > size ? Client.RsdoctorClientDiffState.Down : Client.RsdoctorClientDiffState.Up) : null
37
30
  ]
38
31
  });
39
32
  }
@@ -146,20 +139,14 @@ const ModuleRowForAsset = ({ data, baseline, current })=>{
146
139
  const bModules = useMemo(()=>data.baseline ? Graph.getModulesByAsset(data.baseline, bToTalChunks, bTotalModules).map((e)=>({
147
140
  ...e,
148
141
  [isBaseline]: true
149
- })).filter((cModule)=>{
150
- var _cModule_concatenationModules;
151
- return !(null == (_cModule_concatenationModules = cModule.concatenationModules) ? void 0 : _cModule_concatenationModules.length);
152
- }) : [], [
142
+ })).filter((cModule)=>!cModule.concatenationModules?.length) : [], [
153
143
  data,
154
144
  baseline
155
145
  ]);
156
146
  const cModules = useMemo(()=>data.current ? Graph.getModulesByAsset(data.current, cToTalChunks, cTotalModules).map((e)=>({
157
147
  ...e,
158
148
  [isBaseline]: false
159
- })).filter((cModule)=>{
160
- var _cModule_concatenationModules;
161
- return !(null == (_cModule_concatenationModules = cModule.concatenationModules) ? void 0 : _cModule_concatenationModules.length);
162
- }) : [], [
149
+ })).filter((cModule)=>!cModule.concatenationModules?.length) : [], [
163
150
  data,
164
151
  current
165
152
  ]);
@@ -171,8 +158,7 @@ const ModuleRowForAsset = ({ data, baseline, current })=>{
171
158
  ];
172
159
  const map = new Map();
173
160
  mods.forEach((mod)=>{
174
- var _mod_webpackId, _mod_path;
175
- const modPath = (null == (_mod_webpackId = mod.webpackId) ? void 0 : _mod_webpackId.replace(ModuleHashPattern, '')) || (null == (_mod_path = mod.path) ? void 0 : _mod_path.replace(ModuleHashPattern, ''));
161
+ const modPath = mod.webpackId?.replace(ModuleHashPattern, '') || mod.path?.replace(ModuleHashPattern, '');
176
162
  let t = map.get(modPath);
177
163
  if (!t) t = {
178
164
  path: modPath
@@ -343,10 +329,7 @@ const ModuleRowForAsset = ({ data, baseline, current })=>{
343
329
  ]
344
330
  }),
345
331
  onFilterDropdownOpenChange: (visible)=>{
346
- if (visible) setTimeout(()=>{
347
- var _searchInput_current;
348
- return null == (_searchInput_current = searchInput.current) ? void 0 : _searchInput_current.focus();
349
- }, 100);
332
+ if (visible) setTimeout(()=>searchInput.current?.focus(), 100);
350
333
  },
351
334
  onFilter (v, r) {
352
335
  return getPathInfo(r).alias.indexOf(v) > -1;
@@ -380,9 +363,7 @@ const ModuleRowForAsset = ({ data, baseline, current })=>{
380
363
  {
381
364
  title: 'Actions',
382
365
  width: 200,
383
- render: (_v, r)=>{
384
- var _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;
385
- return /*#__PURE__*/ jsx(Space, {
366
+ render: (_v, r)=>/*#__PURE__*/ jsx(Space, {
386
367
  direction: "vertical",
387
368
  style: {
388
369
  maxWidth: 170
@@ -392,24 +373,23 @@ const ModuleRowForAsset = ({ data, baseline, current })=>{
392
373
  file: r.path,
393
374
  data: [
394
375
  {
395
- baseline: null == (_baseline_moduleCodeMap_r_baseline_id = baseline.moduleCodeMap[null == (_r_baseline = r.baseline) ? void 0 : _r_baseline.id]) ? void 0 : _baseline_moduleCodeMap_r_baseline_id.source,
396
- current: null == (_current_moduleCodeMap_r_current_id = current.moduleCodeMap[null == (_r_current = r.current) ? void 0 : _r_current.id]) ? void 0 : _current_moduleCodeMap_r_current_id.source,
376
+ baseline: baseline.moduleCodeMap[r.baseline?.id]?.source,
377
+ current: current.moduleCodeMap[r.current?.id]?.source,
397
378
  group: 'Source'
398
379
  },
399
380
  {
400
- baseline: null == (_baseline_moduleCodeMap_r_baseline_id1 = baseline.moduleCodeMap[null == (_r_baseline1 = r.baseline) ? void 0 : _r_baseline1.id]) ? void 0 : _baseline_moduleCodeMap_r_baseline_id1.transformed,
401
- current: null == (_current_moduleCodeMap_r_current_id1 = current.moduleCodeMap[null == (_r_current1 = r.current) ? void 0 : _r_current1.id]) ? void 0 : _current_moduleCodeMap_r_current_id1.transformed,
381
+ baseline: baseline.moduleCodeMap[r.baseline?.id]?.transformed,
382
+ current: current.moduleCodeMap[r.current?.id]?.transformed,
402
383
  group: 'Transformed Source'
403
384
  },
404
385
  {
405
- baseline: null == (_baseline_moduleCodeMap_r_baseline_id2 = baseline.moduleCodeMap[null == (_r_baseline2 = r.baseline) ? void 0 : _r_baseline2.id]) ? void 0 : _baseline_moduleCodeMap_r_baseline_id2.parsedSource,
406
- current: null == (_current_moduleCodeMap_r_current_id2 = current.moduleCodeMap[null == (_r_current2 = r.current) ? void 0 : _r_current2.id]) ? void 0 : _current_moduleCodeMap_r_current_id2.parsedSource,
386
+ baseline: baseline.moduleCodeMap[r.baseline?.id]?.parsedSource,
387
+ current: current.moduleCodeMap[r.current?.id]?.parsedSource,
407
388
  group: 'Parsed Source'
408
389
  }
409
390
  ]
410
391
  })
411
- });
412
- }
392
+ })
413
393
  }
414
394
  ]
415
395
  });
@@ -1 +1 @@
1
- {"version":3,"file":"pages/Resources/BundleDiff/DiffContainer/row.mjs","sources":["webpack://@rsdoctor/components/./src/pages/Resources/BundleDiff/DiffContainer/row.tsx"],"sourcesContent":["import { InfoCircleOutlined, SearchOutlined } from '@ant-design/icons';\nimport {\n Button,\n Divider,\n Input,\n InputRef,\n Space,\n Table,\n Tag,\n Tooltip,\n Typography,\n} from 'antd';\nimport {\n ColumnGroupType,\n ColumnType,\n FilterConfirmProps,\n} from 'antd/es/table/interface';\nimport { upperFirst } from 'es-toolkit/compat';\nimport React, { useMemo, useRef, useState } from 'react';\nimport { Client } from '@rsdoctor/types';\nimport { CompareFn } from 'antd/lib/table/interface';\nimport { Color } from '../../../../constants';\nimport {\n beautifyModulePath,\n formatPercent,\n formatSize,\n} from '../../../../utils';\nimport { ViewChanges } from './changes';\nimport { FileUpdateTypeTag, getUpdateType } from './modules';\nimport {\n BundleDiffComponentCardProps,\n BundleDiffTableAssetsData,\n BundleDiffTableModulesData,\n} from './types';\nimport { UpdateType } from './constants';\nimport { formatDiffSize } from './utils';\nimport { Graph } from '@rsdoctor/utils/common';\n\nexport const ModuleHashPattern = /[a-fA-F0-9]{20,}/;\n\nexport const getSizeColumnPropsForModuleRow = (\n key: 'baseline' | 'current',\n sizeKey: 'parsedSize' | 'sourceSize',\n sortByChanged?: boolean,\n): ColumnType<BundleDiffTableModulesData> => {\n const sortByChangedFn: CompareFn<any> = (a, b) =>\n (a.current?.size[sizeKey] || 0) -\n (a.baseline?.size[sizeKey] || 0) -\n (b.current?.size[sizeKey] || 0) +\n (b.baseline?.size[sizeKey] || 0);\n\n const sorterFn: CompareFn<any> = sortByChanged\n ? (a, b) => sortByChangedFn(a, b)\n : (a, b) => (a[key]?.size[sizeKey] || 0) - (b[key]?.size[sizeKey] || 0);\n\n return {\n width: 200,\n sorter: (a, b) => sorterFn(a, b),\n render: (_v, r) => {\n if (!r[key]) return '-';\n const size = r[key]!.size[sizeKey];\n return (\n <Space>\n <Typography.Text>{formatSize(size)}</Typography.Text>\n {key === 'current'\n ? formatDiffSize(\n r.baseline?.size[sizeKey] || 0,\n size,\n (r.baseline?.size[sizeKey] || 0) > size\n ? Client.RsdoctorClientDiffState.Down\n : Client.RsdoctorClientDiffState.Up,\n )\n : null}\n </Space>\n );\n },\n };\n};\n\nexport const getTargetColumnPropsForModuleRow = (\n key: 'baseline' | 'current',\n bModulesCount: number,\n cModulesCount: number,\n): ColumnGroupType<BundleDiffTableModulesData> => {\n const [sortByChanged, setSortByChanged] = useState(false);\n\n const isB = key === 'baseline';\n return {\n title: () => {\n const count = isB ? bModulesCount : cModulesCount;\n const title = upperFirst(key);\n const diff = Graph.diffSize(bModulesCount, cModulesCount);\n return (\n <div>\n <Typography.Text>{title}</Typography.Text>\n <Divider type=\"vertical\" />\n <Tooltip\n title={\n <Space direction=\"vertical\">\n <Typography.Text style={{ color: 'inherit' }}>\n {title} modules is {count}\n </Typography.Text>\n {isB ? null : (\n <Typography.Text style={{ color: 'inherit' }}>\n Percent is {formatPercent(diff.percent)}\n </Typography.Text>\n )}\n </Space>\n }\n >\n <Space>\n <Typography.Text\n type=\"secondary\"\n style={{ fontSize: 10, fontWeight: 400 }}\n >\n {count}\n </Typography.Text>\n <InfoCircleOutlined />\n </Space>\n </Tooltip>\n </div>\n );\n },\n children: [\n {\n title: 'Source Size',\n ...getSizeColumnPropsForModuleRow(key, 'sourceSize', sortByChanged),\n },\n {\n title: 'Parsed Size',\n defaultSortOrder: isB ? undefined : 'descend',\n ...getSizeColumnPropsForModuleRow(key, 'parsedSize', sortByChanged),\n },\n ],\n filterSearch: true,\n filters: [\n {\n text: 'Show Changed',\n value: UpdateType.NotChanged,\n },\n {\n text: 'Show All',\n value: 'All',\n },\n ],\n onFilter(v, r) {\n if (v === UpdateType.NotChanged) {\n setSortByChanged(true);\n } else {\n setSortByChanged(false);\n }\n return v === UpdateType.NotChanged ? getUpdateType(r) !== v : true;\n },\n };\n};\n\nexport const ModuleRowForAsset: React.FC<\n { data: BundleDiffTableAssetsData } & Pick<\n BundleDiffComponentCardProps,\n 'baseline' | 'current'\n >\n> = ({ data, baseline, current }) => {\n const { modules: bTotalModules } = baseline.moduleGraph;\n const { modules: cTotalModules } = current.moduleGraph;\n const { chunks: bToTalChunks } = baseline.chunkGraph;\n const { chunks: cToTalChunks } = current.chunkGraph;\n const bRoot = baseline.root;\n const cRoot = current.root;\n\n const [searchText, setSearchText] = useState('');\n const searchInput = useRef<InputRef>(null);\n\n const handleSearch = (\n selectedKeys: string[],\n confirm: (param?: FilterConfirmProps) => void,\n ) => {\n confirm();\n setSearchText(selectedKeys[0]);\n };\n\n const handleReset = (clearFilters: () => void) => {\n clearFilters();\n setSearchText('');\n };\n\n const isBaseline = '__is_baseline__' as const;\n\n const bModules = useMemo(\n () =>\n data.baseline\n ? Graph.getModulesByAsset(data.baseline, bToTalChunks, bTotalModules)\n .map((e) => ({\n ...e,\n [isBaseline]: true,\n }))\n .filter((cModule) => !cModule.concatenationModules?.length)\n : [],\n [data, baseline],\n );\n const cModules = useMemo(\n () =>\n data.current\n ? Graph.getModulesByAsset(data.current, cToTalChunks, cTotalModules)\n .map((e) => ({\n ...e,\n [isBaseline]: false,\n }))\n .filter((cModule) => !cModule.concatenationModules?.length)\n : [],\n [data, current],\n );\n\n const getPathInfo = (r: BundleDiffTableModulesData) =>\n beautifyModulePath(r.path, r.__is_baseline__ ? bRoot : cRoot);\n\n const dataSource: BundleDiffTableModulesData[] = useMemo(() => {\n const mods = [...bModules, ...cModules];\n const map = new Map<string, BundleDiffTableModulesData>();\n\n // group by module.path\n mods.forEach((mod) => {\n const modPath =\n mod.webpackId?.replace(ModuleHashPattern, '') ||\n mod.path?.replace(ModuleHashPattern, '');\n let t: BundleDiffTableModulesData = map.get(modPath)!;\n\n if (!t) {\n t = { path: modPath };\n }\n\n if (mod[isBaseline]) {\n t.baseline = mod;\n } else {\n t.current = mod;\n }\n map.set(modPath, t);\n });\n\n return [...map.values()];\n }, [bModules, cModules, searchText]);\n\n const { bModulesCount, cModulesCount, totalCount } = useMemo(() => {\n const fileNameFilter = (e: BundleDiffTableModulesData) =>\n getPathInfo(e).alias.indexOf(searchText) > -1;\n\n let b = dataSource.filter((e) => e.baseline);\n let c = dataSource.filter((e) => e.current);\n let totalCount = dataSource.length;\n\n if (searchText) {\n b = b.filter(fileNameFilter);\n c = c.filter(fileNameFilter);\n totalCount = dataSource.filter(fileNameFilter).length;\n }\n\n return {\n bModulesCount: b.length,\n cModulesCount: c.length,\n totalCount,\n };\n }, [dataSource, searchText]);\n\n return (\n <Table\n dataSource={dataSource}\n rowKey={(e) => e.path}\n size=\"small\"\n pagination={{\n size: 'small',\n }}\n bordered\n scroll={{ x: 1500 }}\n columns={[\n {\n fixed: 'left',\n title: () => {\n return (\n <div>\n <Typography.Text>\n Modules of {`\"${data.alias}\"`}\n </Typography.Text>\n <Divider type=\"vertical\" />\n <Tooltip\n title={\n <Space direction=\"vertical\">\n <Typography.Text style={{ color: 'inherit' }}>\n filtered modules: {totalCount}\n </Typography.Text>\n <Typography.Text style={{ color: 'inherit' }}>\n total modules: {dataSource.length}\n </Typography.Text>\n </Space>\n }\n >\n <Typography.Text\n type=\"secondary\"\n style={{ fontSize: 10, fontWeight: 400, marginRight: 4 }}\n >\n {totalCount}/{dataSource.length}\n </Typography.Text>\n <InfoCircleOutlined />\n </Tooltip>\n </div>\n );\n },\n filterDropdown({\n setSelectedKeys,\n selectedKeys,\n confirm,\n clearFilters,\n }) {\n return (\n <div\n style={{ padding: 8 }}\n onKeyDown={(e) => e.stopPropagation()}\n >\n <Input\n ref={searchInput}\n placeholder={`Search by file name`}\n value={selectedKeys[0]}\n onChange={(e) =>\n setSelectedKeys(e.target.value ? [e.target.value] : [])\n }\n onPressEnter={() =>\n handleSearch(selectedKeys as string[], confirm)\n }\n style={{ marginBottom: 8, display: 'block' }}\n />\n <Space>\n <Button\n type=\"primary\"\n onClick={() =>\n handleSearch(selectedKeys as string[], confirm)\n }\n icon={<SearchOutlined />}\n size=\"small\"\n style={{ width: 90 }}\n >\n Search\n </Button>\n <Button\n onClick={() => {\n clearFilters && handleReset(clearFilters);\n setSelectedKeys([]);\n handleSearch([], confirm);\n }}\n size=\"small\"\n style={{ width: 90 }}\n >\n Reset\n </Button>\n </Space>\n </div>\n );\n },\n filterSearch: true,\n filterIcon: (filtered) => (\n <Space>\n <Typography.Text\n type={searchText ? undefined : 'secondary'}\n style={{ fontWeight: 400 }}\n >\n {searchText || 'Search by file name'}\n </Typography.Text>\n <SearchOutlined\n style={{ color: filtered ? Color.Blue : undefined }}\n />\n </Space>\n ),\n onFilterDropdownOpenChange: (visible) => {\n if (visible) {\n setTimeout(() => searchInput.current?.focus(), 100);\n }\n },\n onFilter(v, r) {\n return getPathInfo(r).alias.indexOf(v as string) > -1;\n },\n render: (_v, r) => {\n const { alias, inNodeModules } = getPathInfo(r);\n return (\n <Space>\n <Tooltip title={r.path}>\n <Typography.Text copyable={{ text: r.path }}>\n {alias}\n </Typography.Text>\n </Tooltip>\n {inNodeModules ? <Tag color=\"warning\">node_modules</Tag> : null}\n <FileUpdateTypeTag type={getUpdateType(r)} />\n </Space>\n );\n },\n },\n getTargetColumnPropsForModuleRow(\n 'current',\n bModulesCount,\n cModulesCount,\n ),\n getTargetColumnPropsForModuleRow(\n 'baseline',\n bModulesCount,\n cModulesCount,\n ),\n {\n title: 'Actions',\n width: 200,\n render: (_v, r) => {\n return (\n <Space direction=\"vertical\" style={{ maxWidth: 170 }}>\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]?.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 </Space>\n );\n },\n },\n ]}\n />\n );\n};\n"],"names":["ModuleHashPattern","getSizeColumnPropsForModuleRow","key","sizeKey","sortByChanged","sortByChangedFn","a","b","_a_current","_a_baseline","_b_current","_b_baseline","sorterFn","_a_key","_b_key","_v","r","_r_baseline","_r_baseline1","size","Space","Typography","formatSize","formatDiffSize","Client","getTargetColumnPropsForModuleRow","bModulesCount","cModulesCount","setSortByChanged","useState","isB","count","title","upperFirst","diff","Graph","Divider","Tooltip","formatPercent","InfoCircleOutlined","undefined","UpdateType","v","getUpdateType","ModuleRowForAsset","data","baseline","current","bTotalModules","cTotalModules","bToTalChunks","cToTalChunks","bRoot","cRoot","searchText","setSearchText","searchInput","useRef","handleSearch","selectedKeys","confirm","handleReset","clearFilters","isBaseline","bModules","useMemo","e","cModule","_cModule_concatenationModules","cModules","getPathInfo","beautifyModulePath","dataSource","mods","map","Map","mod","_mod_webpackId","_mod_path","modPath","t","totalCount","fileNameFilter","c","Table","setSelectedKeys","Input","Button","SearchOutlined","filtered","Color","visible","setTimeout","_searchInput_current","alias","inNodeModules","Tag","FileUpdateTypeTag","_baseline_moduleCodeMap_r_baseline_id","_current_moduleCodeMap_r_current_id","_r_current","_baseline_moduleCodeMap_r_baseline_id1","_current_moduleCodeMap_r_current_id1","_r_current1","_baseline_moduleCodeMap_r_baseline_id2","_r_baseline2","_current_moduleCodeMap_r_current_id2","_r_current2","ViewChanges"],"mappings":";;;;;;;;;;;;;AAsCO,MAAMA,oBAAoB;AAE1B,MAAMC,iCAAiC,CAC5CC,KACAC,SACAC;IAEA,MAAMC,kBAAkC,CAACC,GAAGC;YACzCC,YACAC,aACAC,YACAC;eAHAH,AAAAA,CAAAA,SAAAA,CAAAA,aAAAA,EAAE,OAAO,AAAD,IAARA,KAAAA,IAAAA,WAAW,IAAI,CAACL,QAAQ,AAAD,KAAK,KAC5BM,CAAAA,SAAAA,CAAAA,cAAAA,EAAE,QAAQ,AAAD,IAATA,KAAAA,IAAAA,YAAY,IAAI,CAACN,QAAQ,AAAD,KAAK,KAC7BO,CAAAA,SAAAA,CAAAA,aAAAA,EAAE,OAAO,AAAD,IAARA,KAAAA,IAAAA,WAAW,IAAI,CAACP,QAAQ,AAAD,KAAK,KAC5BQ,CAAAA,SAAAA,CAAAA,cAAAA,EAAE,QAAQ,AAAD,IAATA,KAAAA,IAAAA,YAAY,IAAI,CAACR,QAAQ,AAAD,KAAK;;IAEhC,MAAMS,WAA2BR,gBAC7B,CAACE,GAAGC,IAAMF,gBAAgBC,GAAGC,KAC7B,CAACD,GAAGC;YAAOM,QAA+BC;eAA/BD,AAAAA,CAAAA,SAAAA,CAAAA,SAAAA,CAAC,CAACX,IAAI,AAAD,IAALW,KAAAA,IAAAA,OAAQ,IAAI,CAACV,QAAQ,AAAD,KAAK,KAAMW,CAAAA,SAAAA,CAAAA,SAAAA,CAAC,CAACZ,IAAI,AAAD,IAALY,KAAAA,IAAAA,OAAQ,IAAI,CAACX,QAAQ,AAAD,KAAK;;IAEvE,OAAO;QACL,OAAO;QACP,QAAQ,CAACG,GAAGC,IAAMK,SAASN,GAAGC;QAC9B,QAAQ,CAACQ,IAAIC;gBAQDC,aAECC;YATX,IAAI,CAACF,CAAC,CAACd,IAAI,EAAE,OAAO;YACpB,MAAMiB,OAAOH,CAAC,CAACd,IAAI,CAAE,IAAI,CAACC,QAAQ;YAClC,OAAO,WAAP,GACE,KAACiB,OAAKA;;kCACJ,IAACC,WAAW,IAAI;kCAAEC,WAAWH;;oBACpB,cAARjB,MACGqB,eACEN,AAAAA,SAAAA,CAAAA,cAAAA,EAAE,QAAQ,AAAD,IAATA,KAAAA,IAAAA,YAAY,IAAI,CAACd,QAAQ,AAAD,KAAK,GAC7BgB,MACCD,AAAAA,CAAAA,SAAAA,CAAAA,eAAAA,EAAE,QAAQ,AAAD,IAATA,KAAAA,IAAAA,aAAY,IAAI,CAACf,QAAQ,AAAD,KAAK,KAAKgB,OAC/BK,OAAO,uBAAuB,CAAC,IAAI,GACnCA,OAAO,uBAAuB,CAAC,EAAE,IAEvC;;;QAGV;IACF;AACF;AAEO,MAAMC,mCAAmC,CAC9CvB,KACAwB,eACAC;IAEA,MAAM,CAACvB,eAAewB,iBAAiB,GAAGC,SAAS;IAEnD,MAAMC,MAAM5B,AAAQ,eAARA;IACZ,OAAO;QACL,OAAO;YACL,MAAM6B,QAAQD,MAAMJ,gBAAgBC;YACpC,MAAMK,QAAQC,WAAW/B;YACzB,MAAMgC,OAAOC,MAAM,QAAQ,CAACT,eAAeC;YAC3C,OAAO,WAAP,GACE,KAAC;;kCACC,IAACN,WAAW,IAAI;kCAAEW;;kCAClB,IAACI,SAAOA;wBAAC,MAAK;;kCACd,IAACC,SAAOA;wBACN,qBACE,KAACjB,OAAKA;4BAAC,WAAU;;8CACf,KAACC,WAAW,IAAI;oCAAC,OAAO;wCAAE,OAAO;oCAAU;;wCACxCW;wCAAM;wCAAaD;;;gCAErBD,MAAM,OAAO,WAAP,GACL,KAACT,WAAW,IAAI;oCAAC,OAAO;wCAAE,OAAO;oCAAU;;wCAAG;wCAChCiB,cAAcJ,KAAK,OAAO;;;;;kCAM9C,mBAACd,OAAKA;;8CACJ,IAACC,WAAW,IAAI;oCACd,MAAK;oCACL,OAAO;wCAAE,UAAU;wCAAI,YAAY;oCAAI;8CAEtCU;;8CAEH,IAACQ,oBAAkBA,CAAAA;;;;;;QAK7B;QACA,UAAU;YACR;gBACE,OAAO;gBACP,GAAGtC,+BAA+BC,KAAK,cAAcE,cAAc;YACrE;YACA;gBACE,OAAO;gBACP,kBAAkB0B,MAAMU,SAAY;gBACpC,GAAGvC,+BAA+BC,KAAK,cAAcE,cAAc;YACrE;SACD;QACD,cAAc;QACd,SAAS;YACP;gBACE,MAAM;gBACN,OAAOqC,WAAW,UAAU;YAC9B;YACA;gBACE,MAAM;gBACN,OAAO;YACT;SACD;QACD,UAASC,CAAC,EAAE1B,CAAC;YACP0B,MAAMD,WAAW,UAAU,GAC7Bb,iBAAiB,QAEjBA,iBAAiB;YAEnB,OAAOc,MAAMD,WAAW,UAAU,GAAGE,cAAc3B,OAAO0B,IAAI;QAChE;IACF;AACF;AAEO,MAAME,oBAKT,CAAC,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAE;IAC9B,MAAM,EAAE,SAASC,aAAa,EAAE,GAAGF,SAAS,WAAW;IACvD,MAAM,EAAE,SAASG,aAAa,EAAE,GAAGF,QAAQ,WAAW;IACtD,MAAM,EAAE,QAAQG,YAAY,EAAE,GAAGJ,SAAS,UAAU;IACpD,MAAM,EAAE,QAAQK,YAAY,EAAE,GAAGJ,QAAQ,UAAU;IACnD,MAAMK,QAAQN,SAAS,IAAI;IAC3B,MAAMO,QAAQN,QAAQ,IAAI;IAE1B,MAAM,CAACO,YAAYC,cAAc,GAAG1B,SAAS;IAC7C,MAAM2B,cAAcC,OAAiB;IAErC,MAAMC,eAAe,CACnBC,cACAC;QAEAA;QACAL,cAAcI,YAAY,CAAC,EAAE;IAC/B;IAEA,MAAME,cAAc,CAACC;QACnBA;QACAP,cAAc;IAChB;IAEA,MAAMQ,aAAa;IAEnB,MAAMC,WAAWC,QACf,IACEpB,KAAK,QAAQ,GACTV,MAAM,iBAAiB,CAACU,KAAK,QAAQ,EAAEK,cAAcF,eAClD,GAAG,CAAC,CAACkB,IAAO;gBACX,GAAGA,CAAC;gBACJ,CAACH,WAAW,EAAE;YAChB,IACC,MAAM,CAAC,CAACI;gBAAaC;mBAAD,UAACA,CAAAA,gCAAAA,QAAQ,oBAAoB,AAAD,IAA3BA,KAAAA,IAAAA,8BAA8B,MAAM,AAAD;aAC3D,EAAE,EACR;QAACvB;QAAMC;KAAS;IAElB,MAAMuB,WAAWJ,QACf,IACEpB,KAAK,OAAO,GACRV,MAAM,iBAAiB,CAACU,KAAK,OAAO,EAAEM,cAAcF,eACjD,GAAG,CAAC,CAACiB,IAAO;gBACX,GAAGA,CAAC;gBACJ,CAACH,WAAW,EAAE;YAChB,IACC,MAAM,CAAC,CAACI;gBAAaC;mBAAD,UAACA,CAAAA,gCAAAA,QAAQ,oBAAoB,AAAD,IAA3BA,KAAAA,IAAAA,8BAA8B,MAAM,AAAD;aAC3D,EAAE,EACR;QAACvB;QAAME;KAAQ;IAGjB,MAAMuB,cAAc,CAACtD,IACnBuD,mBAAmBvD,EAAE,IAAI,EAAEA,EAAE,eAAe,GAAGoC,QAAQC;IAEzD,MAAMmB,aAA2CP,QAAQ;QACvD,MAAMQ,OAAO;eAAIT;eAAaK;SAAS;QACvC,MAAMK,MAAM,IAAIC;QAGhBF,KAAK,OAAO,CAAC,CAACG;gBAEVC,gBACAC;YAFF,MAAMC,UACJF,AAAAA,SAAAA,CAAAA,iBAAAA,IAAI,SAAS,AAAD,IAAZA,KAAAA,IAAAA,eAAe,OAAO,CAAC7E,mBAAmB,GAAE,KAAF,SAC1C8E,CAAAA,YAAAA,IAAI,IAAI,AAAD,IAAPA,KAAAA,IAAAA,UAAU,OAAO,CAAC9E,mBAAmB,GAAE;YACzC,IAAIgF,IAAgCN,IAAI,GAAG,CAACK;YAE5C,IAAI,CAACC,GACHA,IAAI;gBAAE,MAAMD;YAAQ;YAGtB,IAAIH,GAAG,CAACb,WAAW,EACjBiB,EAAE,QAAQ,GAAGJ;iBAEbI,EAAE,OAAO,GAAGJ;YAEdF,IAAI,GAAG,CAACK,SAASC;QACnB;QAEA,OAAO;eAAIN,IAAI,MAAM;SAAG;IAC1B,GAAG;QAACV;QAAUK;QAAUf;KAAW;IAEnC,MAAM,EAAE5B,aAAa,EAAEC,aAAa,EAAEsD,UAAU,EAAE,GAAGhB,QAAQ;QAC3D,MAAMiB,iBAAiB,CAAChB,IACtBI,YAAYJ,GAAG,KAAK,CAAC,OAAO,CAACZ,cAAc;QAE7C,IAAI/C,IAAIiE,WAAW,MAAM,CAAC,CAACN,IAAMA,EAAE,QAAQ;QAC3C,IAAIiB,IAAIX,WAAW,MAAM,CAAC,CAACN,IAAMA,EAAE,OAAO;QAC1C,IAAIe,aAAaT,WAAW,MAAM;QAElC,IAAIlB,YAAY;YACd/C,IAAIA,EAAE,MAAM,CAAC2E;YACbC,IAAIA,EAAE,MAAM,CAACD;YACbD,aAAaT,WAAW,MAAM,CAACU,gBAAgB,MAAM;QACvD;QAEA,OAAO;YACL,eAAe3E,EAAE,MAAM;YACvB,eAAe4E,EAAE,MAAM;YACvBF;QACF;IACF,GAAG;QAACT;QAAYlB;KAAW;IAE3B,OAAO,WAAP,GACE,IAAC8B,OAAKA;QACJ,YAAYZ;QACZ,QAAQ,CAACN,IAAMA,EAAE,IAAI;QACrB,MAAK;QACL,YAAY;YACV,MAAM;QACR;QACA,UAAQ;QACR,QAAQ;YAAE,GAAG;QAAK;QAClB,SAAS;YACP;gBACE,OAAO;gBACP,OAAO,IACE,WAAP,GACE,KAAC;;0CACC,KAAC7C,WAAW,IAAI;;oCAAC;oCACH,CAAC,CAAC,EAAEwB,KAAK,KAAK,CAAC,CAAC,CAAC;;;0CAE/B,IAACT,SAAOA;gCAAC,MAAK;;0CACd,KAACC,SAAOA;gCACN,qBACE,KAACjB,OAAKA;oCAAC,WAAU;;sDACf,KAACC,WAAW,IAAI;4CAAC,OAAO;gDAAE,OAAO;4CAAU;;gDAAG;gDACzB4D;;;sDAErB,KAAC5D,WAAW,IAAI;4CAAC,OAAO;gDAAE,OAAO;4CAAU;;gDAAG;gDAC5BmD,WAAW,MAAM;;;;;;kDAKvC,KAACnD,WAAW,IAAI;wCACd,MAAK;wCACL,OAAO;4CAAE,UAAU;4CAAI,YAAY;4CAAK,aAAa;wCAAE;;4CAEtD4D;4CAAW;4CAAET,WAAW,MAAM;;;kDAEjC,IAACjC,oBAAkBA,CAAAA;;;;;gBAK3B,gBAAe,EACb8C,eAAe,EACf1B,YAAY,EACZC,OAAO,EACPE,YAAY,EACb;oBACC,OAAO,WAAP,GACE,KAAC;wBACC,OAAO;4BAAE,SAAS;wBAAE;wBACpB,WAAW,CAACI,IAAMA,EAAE,eAAe;;0CAEnC,IAACoB,OAAKA;gCACJ,KAAK9B;gCACL,aAAa;gCACb,OAAOG,YAAY,CAAC,EAAE;gCACtB,UAAU,CAACO,IACTmB,gBAAgBnB,EAAE,MAAM,CAAC,KAAK,GAAG;wCAACA,EAAE,MAAM,CAAC,KAAK;qCAAC,GAAG,EAAE;gCAExD,cAAc,IACZR,aAAaC,cAA0BC;gCAEzC,OAAO;oCAAE,cAAc;oCAAG,SAAS;gCAAQ;;0CAE7C,KAACxC,OAAKA;;kDACJ,IAACmE,QAAMA;wCACL,MAAK;wCACL,SAAS,IACP7B,aAAaC,cAA0BC;wCAEzC,oBAAM,IAAC4B,gBAAcA,CAAAA;wCACrB,MAAK;wCACL,OAAO;4CAAE,OAAO;wCAAG;kDACpB;;kDAGD,IAACD,QAAMA;wCACL,SAAS;4CACPzB,gBAAgBD,YAAYC;4CAC5BuB,gBAAgB,EAAE;4CAClB3B,aAAa,EAAE,EAAEE;wCACnB;wCACA,MAAK;wCACL,OAAO;4CAAE,OAAO;wCAAG;kDACpB;;;;;;gBAMT;gBACA,cAAc;gBACd,YAAY,CAAC6B,WAAAA,WAAAA,GACX,KAACrE,OAAKA;;0CACJ,IAACC,WAAW,IAAI;gCACd,MAAMiC,aAAad,SAAY;gCAC/B,OAAO;oCAAE,YAAY;gCAAI;0CAExBc,cAAc;;0CAEjB,IAACkC,gBAAcA;gCACb,OAAO;oCAAE,OAAOC,WAAWC,MAAM,IAAI,GAAGlD;gCAAU;;;;gBAIxD,4BAA4B,CAACmD;oBAC3B,IAAIA,SACFC,WAAW;4BAAMC;uCAAAA,CAAAA,uBAAAA,YAAY,OAAO,AAAD,IAAlBA,KAAAA,IAAAA,qBAAqB,KAAK;uBAAI;gBAEnD;gBACA,UAASnD,CAAC,EAAE1B,CAAC;oBACX,OAAOsD,YAAYtD,GAAG,KAAK,CAAC,OAAO,CAAC0B,KAAe;gBACrD;gBACA,QAAQ,CAAC3B,IAAIC;oBACX,MAAM,EAAE8E,KAAK,EAAEC,aAAa,EAAE,GAAGzB,YAAYtD;oBAC7C,OAAO,WAAP,GACE,KAACI,OAAKA;;0CACJ,IAACiB,SAAOA;gCAAC,OAAOrB,EAAE,IAAI;0CACpB,kBAACK,WAAW,IAAI;oCAAC,UAAU;wCAAE,MAAML,EAAE,IAAI;oCAAC;8CACvC8E;;;4BAGJC,gBAAgB,WAAhBA,GAAgB,IAACC,KAAGA;gCAAC,OAAM;0CAAU;iCAAqB;0CAC3D,IAACC,mBAAiBA;gCAAC,MAAMtD,cAAc3B;;;;gBAG7C;YACF;YACAS,iCACE,WACAC,eACAC;YAEFF,iCACE,YACAC,eACAC;YAEF;gBACE,OAAO;gBACP,OAAO;gBACP,QAAQ,CAACZ,IAAIC;wBASCkF,uCAAuBjF,aAGvBkF,qCAAsBC,YAKtBC,wCAAuBnF,cAGvBoF,sCAAsBC,aAMtBC,wCAAuBC,cAGvBC,sCAAsBC;oBA5BlC,OAAO,WAAP,GACE,IAACvF,OAAKA;wBAAC,WAAU;wBAAW,OAAO;4BAAE,UAAU;wBAAI;kCACjD,kBAACwF,aAAWA;4BACV,MAAK;4BACL,MAAM5F,EAAE,IAAI;4BACZ,MAAM;gCACJ;oCACE,UAAQ,QACNkF,CAAAA,wCAAAA,SAAS,aAAa,CAAC,QAAAjF,CAAAA,cAAAA,EAAE,QAAQ,AAAD,IAATA,KAAAA,IAAAA,YAAY,EAAE,CAAW,AAAX,IAArCiF,KAAAA,IAAAA,sCACI,MAAM;oCACZ,SAAO,QACLC,CAAAA,sCAAAA,QAAQ,aAAa,CAAC,QAAAC,CAAAA,aAAAA,EAAE,OAAO,AAAD,IAARA,KAAAA,IAAAA,WAAW,EAAE,CAAW,AAAX,IAAnCD,KAAAA,IAAAA,oCAAgD,MAAM;oCACxD,OAAO;gCACT;gCACA;oCACE,UAAQ,QACNE,CAAAA,yCAAAA,SAAS,aAAa,CAAC,QAAAnF,CAAAA,eAAAA,EAAE,QAAQ,AAAD,IAATA,KAAAA,IAAAA,aAAY,EAAE,CAAW,AAAX,IAArCmF,KAAAA,IAAAA,uCACI,WAAW;oCACjB,SAAO,QACLC,CAAAA,uCAAAA,QAAQ,aAAa,CAAC,QAAAC,CAAAA,cAAAA,EAAE,OAAO,AAAD,IAARA,KAAAA,IAAAA,YAAW,EAAE,CAAW,AAAX,IAAnCD,KAAAA,IAAAA,qCACI,WAAW;oCACjB,OAAO;gCACT;gCACA;oCACE,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;oCAClB,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;oCAClB,OAAO;gCACT;6BACD;;;gBAIT;YACF;SACD;;AAGP"}
1
+ {"version":3,"file":"pages/Resources/BundleDiff/DiffContainer/row.mjs","sources":["webpack://@rsdoctor/components/./src/pages/Resources/BundleDiff/DiffContainer/row.tsx"],"sourcesContent":["import { InfoCircleOutlined, SearchOutlined } from '@ant-design/icons';\nimport {\n Button,\n Divider,\n Input,\n InputRef,\n Space,\n Table,\n Tag,\n Tooltip,\n Typography,\n} from 'antd';\nimport {\n ColumnGroupType,\n ColumnType,\n FilterConfirmProps,\n} from 'antd/es/table/interface';\nimport { upperFirst } from 'es-toolkit/compat';\nimport React, { useMemo, useRef, useState } from 'react';\nimport { Client } from '@rsdoctor/types';\nimport { CompareFn } from 'antd/lib/table/interface';\nimport { Color } from '../../../../constants';\nimport {\n beautifyModulePath,\n formatPercent,\n formatSize,\n} from '../../../../utils';\nimport { ViewChanges } from './changes';\nimport { FileUpdateTypeTag, getUpdateType } from './modules';\nimport {\n BundleDiffComponentCardProps,\n BundleDiffTableAssetsData,\n BundleDiffTableModulesData,\n} from './types';\nimport { UpdateType } from './constants';\nimport { formatDiffSize } from './utils';\nimport { Graph } from '@rsdoctor/utils/common';\n\nexport const ModuleHashPattern = /[a-fA-F0-9]{20,}/;\n\nexport const getSizeColumnPropsForModuleRow = (\n key: 'baseline' | 'current',\n sizeKey: 'parsedSize' | 'sourceSize',\n sortByChanged?: boolean,\n): ColumnType<BundleDiffTableModulesData> => {\n const sortByChangedFn: CompareFn<any> = (a, b) =>\n (a.current?.size[sizeKey] || 0) -\n (a.baseline?.size[sizeKey] || 0) -\n (b.current?.size[sizeKey] || 0) +\n (b.baseline?.size[sizeKey] || 0);\n\n const sorterFn: CompareFn<any> = sortByChanged\n ? (a, b) => sortByChangedFn(a, b)\n : (a, b) => (a[key]?.size[sizeKey] || 0) - (b[key]?.size[sizeKey] || 0);\n\n return {\n width: 200,\n sorter: (a, b) => sorterFn(a, b),\n render: (_v, r) => {\n if (!r[key]) return '-';\n const size = r[key]!.size[sizeKey];\n return (\n <Space>\n <Typography.Text>{formatSize(size)}</Typography.Text>\n {key === 'current'\n ? formatDiffSize(\n r.baseline?.size[sizeKey] || 0,\n size,\n (r.baseline?.size[sizeKey] || 0) > size\n ? Client.RsdoctorClientDiffState.Down\n : Client.RsdoctorClientDiffState.Up,\n )\n : null}\n </Space>\n );\n },\n };\n};\n\nexport const getTargetColumnPropsForModuleRow = (\n key: 'baseline' | 'current',\n bModulesCount: number,\n cModulesCount: number,\n): ColumnGroupType<BundleDiffTableModulesData> => {\n const [sortByChanged, setSortByChanged] = useState(false);\n\n const isB = key === 'baseline';\n return {\n title: () => {\n const count = isB ? bModulesCount : cModulesCount;\n const title = upperFirst(key);\n const diff = Graph.diffSize(bModulesCount, cModulesCount);\n return (\n <div>\n <Typography.Text>{title}</Typography.Text>\n <Divider type=\"vertical\" />\n <Tooltip\n title={\n <Space direction=\"vertical\">\n <Typography.Text style={{ color: 'inherit' }}>\n {title} modules is {count}\n </Typography.Text>\n {isB ? null : (\n <Typography.Text style={{ color: 'inherit' }}>\n Percent is {formatPercent(diff.percent)}\n </Typography.Text>\n )}\n </Space>\n }\n >\n <Space>\n <Typography.Text\n type=\"secondary\"\n style={{ fontSize: 10, fontWeight: 400 }}\n >\n {count}\n </Typography.Text>\n <InfoCircleOutlined />\n </Space>\n </Tooltip>\n </div>\n );\n },\n children: [\n {\n title: 'Source Size',\n ...getSizeColumnPropsForModuleRow(key, 'sourceSize', sortByChanged),\n },\n {\n title: 'Parsed Size',\n defaultSortOrder: isB ? undefined : 'descend',\n ...getSizeColumnPropsForModuleRow(key, 'parsedSize', sortByChanged),\n },\n ],\n filterSearch: true,\n filters: [\n {\n text: 'Show Changed',\n value: UpdateType.NotChanged,\n },\n {\n text: 'Show All',\n value: 'All',\n },\n ],\n onFilter(v, r) {\n if (v === UpdateType.NotChanged) {\n setSortByChanged(true);\n } else {\n setSortByChanged(false);\n }\n return v === UpdateType.NotChanged ? getUpdateType(r) !== v : true;\n },\n };\n};\n\nexport const ModuleRowForAsset: React.FC<\n { data: BundleDiffTableAssetsData } & Pick<\n BundleDiffComponentCardProps,\n 'baseline' | 'current'\n >\n> = ({ data, baseline, current }) => {\n const { modules: bTotalModules } = baseline.moduleGraph;\n const { modules: cTotalModules } = current.moduleGraph;\n const { chunks: bToTalChunks } = baseline.chunkGraph;\n const { chunks: cToTalChunks } = current.chunkGraph;\n const bRoot = baseline.root;\n const cRoot = current.root;\n\n const [searchText, setSearchText] = useState('');\n const searchInput = useRef<InputRef>(null);\n\n const handleSearch = (\n selectedKeys: string[],\n confirm: (param?: FilterConfirmProps) => void,\n ) => {\n confirm();\n setSearchText(selectedKeys[0]);\n };\n\n const handleReset = (clearFilters: () => void) => {\n clearFilters();\n setSearchText('');\n };\n\n const isBaseline = '__is_baseline__' as const;\n\n const bModules = useMemo(\n () =>\n data.baseline\n ? Graph.getModulesByAsset(data.baseline, bToTalChunks, bTotalModules)\n .map((e) => ({\n ...e,\n [isBaseline]: true,\n }))\n .filter((cModule) => !cModule.concatenationModules?.length)\n : [],\n [data, baseline],\n );\n const cModules = useMemo(\n () =>\n data.current\n ? Graph.getModulesByAsset(data.current, cToTalChunks, cTotalModules)\n .map((e) => ({\n ...e,\n [isBaseline]: false,\n }))\n .filter((cModule) => !cModule.concatenationModules?.length)\n : [],\n [data, current],\n );\n\n const getPathInfo = (r: BundleDiffTableModulesData) =>\n beautifyModulePath(r.path, r.__is_baseline__ ? bRoot : cRoot);\n\n const dataSource: BundleDiffTableModulesData[] = useMemo(() => {\n const mods = [...bModules, ...cModules];\n const map = new Map<string, BundleDiffTableModulesData>();\n\n // group by module.path\n mods.forEach((mod) => {\n const modPath =\n mod.webpackId?.replace(ModuleHashPattern, '') ||\n mod.path?.replace(ModuleHashPattern, '');\n let t: BundleDiffTableModulesData = map.get(modPath)!;\n\n if (!t) {\n t = { path: modPath };\n }\n\n if (mod[isBaseline]) {\n t.baseline = mod;\n } else {\n t.current = mod;\n }\n map.set(modPath, t);\n });\n\n return [...map.values()];\n }, [bModules, cModules, searchText]);\n\n const { bModulesCount, cModulesCount, totalCount } = useMemo(() => {\n const fileNameFilter = (e: BundleDiffTableModulesData) =>\n getPathInfo(e).alias.indexOf(searchText) > -1;\n\n let b = dataSource.filter((e) => e.baseline);\n let c = dataSource.filter((e) => e.current);\n let totalCount = dataSource.length;\n\n if (searchText) {\n b = b.filter(fileNameFilter);\n c = c.filter(fileNameFilter);\n totalCount = dataSource.filter(fileNameFilter).length;\n }\n\n return {\n bModulesCount: b.length,\n cModulesCount: c.length,\n totalCount,\n };\n }, [dataSource, searchText]);\n\n return (\n <Table\n dataSource={dataSource}\n rowKey={(e) => e.path}\n size=\"small\"\n pagination={{\n size: 'small',\n }}\n bordered\n scroll={{ x: 1500 }}\n columns={[\n {\n fixed: 'left',\n title: () => {\n return (\n <div>\n <Typography.Text>\n Modules of {`\"${data.alias}\"`}\n </Typography.Text>\n <Divider type=\"vertical\" />\n <Tooltip\n title={\n <Space direction=\"vertical\">\n <Typography.Text style={{ color: 'inherit' }}>\n filtered modules: {totalCount}\n </Typography.Text>\n <Typography.Text style={{ color: 'inherit' }}>\n total modules: {dataSource.length}\n </Typography.Text>\n </Space>\n }\n >\n <Typography.Text\n type=\"secondary\"\n style={{ fontSize: 10, fontWeight: 400, marginRight: 4 }}\n >\n {totalCount}/{dataSource.length}\n </Typography.Text>\n <InfoCircleOutlined />\n </Tooltip>\n </div>\n );\n },\n filterDropdown({\n setSelectedKeys,\n selectedKeys,\n confirm,\n clearFilters,\n }) {\n return (\n <div\n style={{ padding: 8 }}\n onKeyDown={(e) => e.stopPropagation()}\n >\n <Input\n ref={searchInput}\n placeholder={`Search by file name`}\n value={selectedKeys[0]}\n onChange={(e) =>\n setSelectedKeys(e.target.value ? [e.target.value] : [])\n }\n onPressEnter={() =>\n handleSearch(selectedKeys as string[], confirm)\n }\n style={{ marginBottom: 8, display: 'block' }}\n />\n <Space>\n <Button\n type=\"primary\"\n onClick={() =>\n handleSearch(selectedKeys as string[], confirm)\n }\n icon={<SearchOutlined />}\n size=\"small\"\n style={{ width: 90 }}\n >\n Search\n </Button>\n <Button\n onClick={() => {\n clearFilters && handleReset(clearFilters);\n setSelectedKeys([]);\n handleSearch([], confirm);\n }}\n size=\"small\"\n style={{ width: 90 }}\n >\n Reset\n </Button>\n </Space>\n </div>\n );\n },\n filterSearch: true,\n filterIcon: (filtered) => (\n <Space>\n <Typography.Text\n type={searchText ? undefined : 'secondary'}\n style={{ fontWeight: 400 }}\n >\n {searchText || 'Search by file name'}\n </Typography.Text>\n <SearchOutlined\n style={{ color: filtered ? Color.Blue : undefined }}\n />\n </Space>\n ),\n onFilterDropdownOpenChange: (visible) => {\n if (visible) {\n setTimeout(() => searchInput.current?.focus(), 100);\n }\n },\n onFilter(v, r) {\n return getPathInfo(r).alias.indexOf(v as string) > -1;\n },\n render: (_v, r) => {\n const { alias, inNodeModules } = getPathInfo(r);\n return (\n <Space>\n <Tooltip title={r.path}>\n <Typography.Text copyable={{ text: r.path }}>\n {alias}\n </Typography.Text>\n </Tooltip>\n {inNodeModules ? <Tag color=\"warning\">node_modules</Tag> : null}\n <FileUpdateTypeTag type={getUpdateType(r)} />\n </Space>\n );\n },\n },\n getTargetColumnPropsForModuleRow(\n 'current',\n bModulesCount,\n cModulesCount,\n ),\n getTargetColumnPropsForModuleRow(\n 'baseline',\n bModulesCount,\n cModulesCount,\n ),\n {\n title: 'Actions',\n width: 200,\n render: (_v, r) => {\n return (\n <Space direction=\"vertical\" style={{ maxWidth: 170 }}>\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]?.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 </Space>\n );\n },\n },\n ]}\n />\n );\n};\n"],"names":["ModuleHashPattern","getSizeColumnPropsForModuleRow","key","sizeKey","sortByChanged","sortByChangedFn","a","b","sorterFn","_v","r","size","Space","Typography","formatSize","formatDiffSize","Client","getTargetColumnPropsForModuleRow","bModulesCount","cModulesCount","setSortByChanged","useState","isB","count","title","upperFirst","diff","Graph","Divider","Tooltip","formatPercent","InfoCircleOutlined","undefined","UpdateType","v","getUpdateType","ModuleRowForAsset","data","baseline","current","bTotalModules","cTotalModules","bToTalChunks","cToTalChunks","bRoot","cRoot","searchText","setSearchText","searchInput","useRef","handleSearch","selectedKeys","confirm","handleReset","clearFilters","isBaseline","bModules","useMemo","e","cModule","cModules","getPathInfo","beautifyModulePath","dataSource","mods","map","Map","mod","modPath","t","totalCount","fileNameFilter","c","Table","setSelectedKeys","Input","Button","SearchOutlined","filtered","Color","visible","setTimeout","alias","inNodeModules","Tag","FileUpdateTypeTag","ViewChanges"],"mappings":"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"}
@@ -4,21 +4,20 @@ import { ServerAPIProvider } from "../../../../components/Manifest/index.mjs";
4
4
  import { fetchManifest, useUrlQuery } from "../../../../utils/index.mjs";
5
5
  import { Algorithm } from "@rsdoctor/utils/common";
6
6
  const DiffServerAPIProvider = (props)=>{
7
- var _query_Client_RsdoctorClientUrlQuery_BundleDiffFiles;
8
7
  const { api, body, children, manifests } = props;
9
8
  const query = useUrlQuery();
10
9
  const windowData = window[Constants.WINDOW_RSDOCTOR_TAG];
11
- if ((null == windowData ? void 0 : windowData.baseline) && (null == windowData ? void 0 : windowData.current)) {
10
+ if (windowData?.baseline && windowData?.current) {
12
11
  const baseline = JSON.parse(Algorithm.decompressText(windowData.baseline));
13
12
  const current = JSON.parse(Algorithm.decompressText(windowData.current));
14
13
  return /*#__PURE__*/ jsx(Fragment, {
15
14
  children: children(baseline, current)
16
15
  });
17
16
  }
18
- if (null == manifests ? void 0 : manifests.length) return /*#__PURE__*/ jsx(Fragment, {
17
+ if (manifests?.length) return /*#__PURE__*/ jsx(Fragment, {
19
18
  children: children(manifests[0].data, manifests[1].data)
20
19
  });
21
- const [baselineFile, currentFile] = (null == (_query_Client_RsdoctorClientUrlQuery_BundleDiffFiles = query[Client.RsdoctorClientUrlQuery.BundleDiffFiles]) ? void 0 : _query_Client_RsdoctorClientUrlQuery_BundleDiffFiles.split(',')) || [];
20
+ const [baselineFile, currentFile] = query[Client.RsdoctorClientUrlQuery.BundleDiffFiles]?.split(',') || [];
22
21
  return /*#__PURE__*/ jsx(ServerAPIProvider, {
23
22
  api: api,
24
23
  body: body,
@@ -1 +1 @@
1
- {"version":3,"file":"pages/Resources/BundleDiff/DiffServerAPIProvider/index.mjs","sources":["webpack://@rsdoctor/components/./src/pages/Resources/BundleDiff/DiffServerAPIProvider/index.tsx"],"sourcesContent":["import { Client, SDK, Constants } from '@rsdoctor/types';\nimport { ServerAPIProvider } from 'src/components/Manifest';\nimport { fetchManifest, useUrlQuery } from 'src/utils';\nimport { Algorithm } from '@rsdoctor/utils/common';\nimport { BundleDiffServerAPIProviderComponentCommonProps } from '../DiffContainer/types';\n\nexport const DiffServerAPIProvider = <\n T extends SDK.ServerAPI.API | SDK.ServerAPI.APIExtends,\n>(\n props: BundleDiffServerAPIProviderComponentCommonProps<T>,\n): JSX.Element => {\n const { api, body, children, manifests } = props;\n const query = useUrlQuery();\n\n const windowData = (window as any)[Constants.WINDOW_RSDOCTOR_TAG];\n if (windowData?.baseline && windowData?.current) {\n const baseline = JSON.parse(Algorithm.decompressText(windowData.baseline));\n const current = JSON.parse(Algorithm.decompressText(windowData.current));\n return <>{children(baseline, current)}</>;\n }\n\n if (manifests?.length) {\n return <>{children(manifests[0].data as any, manifests[1].data as any)}</>;\n }\n\n const [baselineFile, currentFile] =\n query[Client.RsdoctorClientUrlQuery.BundleDiffFiles]?.split(',') || [];\n\n return (\n <ServerAPIProvider\n api={api}\n body={body}\n manifestLoader={\n baselineFile ? () => fetchManifest(baselineFile) : undefined\n }\n >\n {(baseline) => {\n return (\n <ServerAPIProvider\n api={api}\n body={body}\n manifestLoader={\n currentFile ? () => fetchManifest(currentFile) : undefined\n }\n >\n {(current) => {\n return children(baseline, current);\n }}\n </ServerAPIProvider>\n );\n }}\n </ServerAPIProvider>\n );\n};\n"],"names":["DiffServerAPIProvider","props","_query_Client_RsdoctorClientUrlQuery_BundleDiffFiles","api","body","children","manifests","query","useUrlQuery","windowData","window","Constants","baseline","JSON","Algorithm","current","baselineFile","currentFile","Client","ServerAPIProvider","fetchManifest","undefined"],"mappings":";;;;;AAMO,MAAMA,wBAAwB,CAGnCC;QAiBEC;IAfF,MAAM,EAAEC,GAAG,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,SAAS,EAAE,GAAGL;IAC3C,MAAMM,QAAQC;IAEd,MAAMC,aAAcC,MAAc,CAACC,UAAU,mBAAmB,CAAC;IACjE,IAAIF,AAAAA,CAAAA,QAAAA,aAAAA,KAAAA,IAAAA,WAAY,QAAQ,AAAD,KAAKA,CAAAA,QAAAA,aAAAA,KAAAA,IAAAA,WAAY,OAAO,AAAD,GAAG;QAC/C,MAAMG,WAAWC,KAAK,KAAK,CAACC,UAAU,cAAc,CAACL,WAAW,QAAQ;QACxE,MAAMM,UAAUF,KAAK,KAAK,CAACC,UAAU,cAAc,CAACL,WAAW,OAAO;QACtE,OAAO,WAAP,GAAO;sBAAGJ,SAASO,UAAUG;;IAC/B;IAEA,IAAIT,QAAAA,YAAAA,KAAAA,IAAAA,UAAW,MAAM,EACnB,OAAO,WAAP,GAAO;kBAAGD,SAASC,SAAS,CAAC,EAAE,CAAC,IAAI,EAASA,SAAS,CAAC,EAAE,CAAC,IAAI;;IAGhE,MAAM,CAACU,cAAcC,YAAY,GAC/Bf,AAAAA,SAAAA,CAAAA,uDAAAA,KAAK,CAACgB,OAAO,sBAAsB,CAAC,eAAe,CAAC,AAAD,IAAnDhB,KAAAA,IAAAA,qDAAsD,KAAK,CAAC,IAAG,KAAK,EAAE;IAExE,OAAO,WAAP,GACE,IAACiB,mBAAiBA;QAChB,KAAKhB;QACL,MAAMC;QACN,gBACEY,eAAe,IAAMI,cAAcJ,gBAAgBK;kBAGpD,CAACT,WACO,WAAP,GACE,IAACO,mBAAiBA;gBAChB,KAAKhB;gBACL,MAAMC;gBACN,gBACEa,cAAc,IAAMG,cAAcH,eAAeI;0BAGlD,CAACN,UACOV,SAASO,UAAUG;;;AAOxC"}
1
+ {"version":3,"file":"pages/Resources/BundleDiff/DiffServerAPIProvider/index.mjs","sources":["webpack://@rsdoctor/components/./src/pages/Resources/BundleDiff/DiffServerAPIProvider/index.tsx"],"sourcesContent":["import { Client, SDK, Constants } from '@rsdoctor/types';\nimport { ServerAPIProvider } from 'src/components/Manifest';\nimport { fetchManifest, useUrlQuery } from 'src/utils';\nimport { Algorithm } from '@rsdoctor/utils/common';\nimport { BundleDiffServerAPIProviderComponentCommonProps } from '../DiffContainer/types';\n\nexport const DiffServerAPIProvider = <\n T extends SDK.ServerAPI.API | SDK.ServerAPI.APIExtends,\n>(\n props: BundleDiffServerAPIProviderComponentCommonProps<T>,\n): JSX.Element => {\n const { api, body, children, manifests } = props;\n const query = useUrlQuery();\n\n const windowData = (window as any)[Constants.WINDOW_RSDOCTOR_TAG];\n if (windowData?.baseline && windowData?.current) {\n const baseline = JSON.parse(Algorithm.decompressText(windowData.baseline));\n const current = JSON.parse(Algorithm.decompressText(windowData.current));\n return <>{children(baseline, current)}</>;\n }\n\n if (manifests?.length) {\n return <>{children(manifests[0].data as any, manifests[1].data as any)}</>;\n }\n\n const [baselineFile, currentFile] =\n query[Client.RsdoctorClientUrlQuery.BundleDiffFiles]?.split(',') || [];\n\n return (\n <ServerAPIProvider\n api={api}\n body={body}\n manifestLoader={\n baselineFile ? () => fetchManifest(baselineFile) : undefined\n }\n >\n {(baseline) => {\n return (\n <ServerAPIProvider\n api={api}\n body={body}\n manifestLoader={\n currentFile ? () => fetchManifest(currentFile) : undefined\n }\n >\n {(current) => {\n return children(baseline, current);\n }}\n </ServerAPIProvider>\n );\n }}\n </ServerAPIProvider>\n );\n};\n"],"names":["DiffServerAPIProvider","props","api","body","children","manifests","query","useUrlQuery","windowData","window","Constants","baseline","JSON","Algorithm","current","baselineFile","currentFile","Client","ServerAPIProvider","fetchManifest","undefined"],"mappings":";;;;;AAMO,MAAMA,wBAAwB,CAGnCC;IAEA,MAAM,EAAEC,GAAG,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,SAAS,EAAE,GAAGJ;IAC3C,MAAMK,QAAQC;IAEd,MAAMC,aAAcC,MAAc,CAACC,UAAU,mBAAmB,CAAC;IACjE,IAAIF,YAAY,YAAYA,YAAY,SAAS;QAC/C,MAAMG,WAAWC,KAAK,KAAK,CAACC,UAAU,cAAc,CAACL,WAAW,QAAQ;QACxE,MAAMM,UAAUF,KAAK,KAAK,CAACC,UAAU,cAAc,CAACL,WAAW,OAAO;QACtE,OAAO,WAAP,GAAO;sBAAGJ,SAASO,UAAUG;;IAC/B;IAEA,IAAIT,WAAW,QACb,OAAO,WAAP,GAAO;kBAAGD,SAASC,SAAS,CAAC,EAAE,CAAC,IAAI,EAASA,SAAS,CAAC,EAAE,CAAC,IAAI;;IAGhE,MAAM,CAACU,cAAcC,YAAY,GAC/BV,KAAK,CAACW,OAAO,sBAAsB,CAAC,eAAe,CAAC,EAAE,MAAM,QAAQ,EAAE;IAExE,OAAO,WAAP,GACE,IAACC,mBAAiBA;QAChB,KAAKhB;QACL,MAAMC;QACN,gBACEY,eAAe,IAAMI,cAAcJ,gBAAgBK;kBAGpD,CAACT,WACO,WAAP,GACE,IAACO,mBAAiBA;gBAChB,KAAKhB;gBACL,MAAMC;gBACN,gBACEa,cAAc,IAAMG,cAAcH,eAAeI;0BAGlD,CAACN,UACOV,SAASO,UAAUG;;;AAOxC"}
@@ -22,8 +22,7 @@ function CodeEditor(props) {
22
22
  changeModule.current = true;
23
23
  setContent(source.source || isPreferSource ? source.source : source.transformed);
24
24
  setTimeout(()=>{
25
- var _editorRef_current_getModel, _editorRef_current;
26
- oldHovers.current = (null == (_editorRef_current = editorRef.current) ? void 0 : null == (_editorRef_current_getModel = _editorRef_current.getModel()) ? void 0 : _editorRef_current_getModel.deltaDecorations(oldHovers.current, getHoverMessageInModule(module, moduleGraph))) ?? [];
25
+ oldHovers.current = editorRef.current?.getModel()?.deltaDecorations(oldHovers.current, getHoverMessageInModule(module, moduleGraph)) ?? [];
27
26
  }, 200);
28
27
  }, [
29
28
  module,
@@ -31,8 +30,7 @@ function CodeEditor(props) {
31
30
  ]);
32
31
  useEffect(()=>{
33
32
  function setRangeAndLine() {
34
- var _editorRef_current;
35
- const model = null == (_editorRef_current = editorRef.current) ? void 0 : _editorRef_current.getModel();
33
+ const model = editorRef.current?.getModel();
36
34
  if (!model) return;
37
35
  oldRanges.current = model.deltaDecorations(oldRanges.current, ranges.map((arr)=>({
38
36
  range: getSelectionRange(arr, Range),
@@ -1 +1 @@
1
- {"version":3,"file":"pages/TreeShaking/editor.mjs","sources":["webpack://@rsdoctor/components/./src/pages/TreeShaking/editor.tsx"],"sourcesContent":["import { InfoCircleOutlined, LoadingOutlined } from '@ant-design/icons';\nimport Editor, { OnMount } from '@monaco-editor/react';\nimport { SDK } from '@rsdoctor/types';\nimport { Card, Space, Tooltip, Typography } from 'antd';\nimport type { editor, Range as RangeClass } from 'monaco-editor';\nimport path from 'path-browserify';\nimport { useEffect, useRef, useState } from 'react';\nimport {\n defineMonacoOptions,\n getFilePathFormat,\n getSelectionRange,\n} from 'src/components/base/CodeViewer/utils';\nimport { parseOpenTag } from './open-tag';\nimport { Range } from './range';\nimport { SetEditorStatus } from './types';\nimport { getHoverMessageInModule } from './utils';\n\nexport interface CodeEditorProps {\n module: SDK.ModuleInstance;\n moduleGraph: SDK.ModuleGraphInstance;\n ranges: SDK.SourceRange[];\n setEditorData: SetEditorStatus;\n source: SDK.ModuleSource;\n toLine?: number;\n}\n\nconst defaultEditOption = defineMonacoOptions();\n\nexport function CodeEditor(props: CodeEditorProps) {\n const { module, moduleGraph, ranges, toLine, setEditorData, source } = props;\n const editorRef = useRef<editor.IStandaloneCodeEditor>();\n const oldRanges = useRef<string[]>([]);\n const oldHovers = useRef<string[]>([]);\n const oldToLine = useRef<number>();\n const changeModule = useRef(false);\n const [content, setContent] = useState('');\n // const [isDynamic, setIsDynamic] = useState(false);\n // const [exports, setExports] = useState<SDK.ExportData[]>([]);\n\n useEffect(() => {\n const { isPreferSource } = module;\n changeModule.current = true;\n setContent(\n source.source || isPreferSource ? source.source : source.transformed,\n );\n setTimeout(() => {\n oldHovers.current =\n editorRef.current\n ?.getModel()\n ?.deltaDecorations(\n oldHovers.current,\n getHoverMessageInModule(module, moduleGraph),\n ) ?? [];\n }, 200);\n }, [module, source]);\n\n useEffect(() => {\n function setRangeAndLine() {\n const model = editorRef.current?.getModel();\n\n if (!model) {\n return;\n }\n\n oldRanges.current = model.deltaDecorations(\n oldRanges.current,\n ranges.map((arr) => {\n return {\n range: getSelectionRange(\n arr,\n Range as unknown as typeof RangeClass,\n ),\n options: {\n stickiness: 1,\n inlineClassName: 'tree-shaking-statement-side-effect',\n isWholeLine: false,\n showIfCollapsed: true,\n },\n } as unknown as editor.IModelDecoration;\n }),\n );\n\n if (\n editorRef.current &&\n typeof toLine === 'number' &&\n oldToLine.current !== toLine\n ) {\n oldToLine.current = toLine;\n editorRef.current.revealLine(toLine, 0);\n }\n }\n\n // 模块变更时,高亮和滚动需要等待 300ms,确保在文本变更之后\n if (changeModule) {\n setTimeout(setRangeAndLine, 300);\n } else {\n setRangeAndLine();\n }\n\n changeModule.current = false;\n }, [ranges, toLine]);\n\n useEffect(() => {\n const openEditor = (event: MouseEvent) => {\n const query = parseOpenTag(event.target as HTMLElement);\n\n if (query) {\n const module = moduleGraph.getModuleById(query.module);\n\n if (module) {\n setEditorData(module, [query.range], query.range.start.line);\n }\n }\n };\n\n document.body.addEventListener('click', openEditor);\n\n return () => {\n document.body.removeEventListener('click', openEditor);\n };\n }, []);\n\n if (!module) {\n return <div>请选择要查看的模块</div>;\n }\n\n const handleEditorDidMount: OnMount = (editor) => {\n editorRef.current = editor;\n };\n\n return (\n <Card\n title={\n <Tooltip title={module.path}>\n <Space>\n <Typography.Text>{path.basename(module.path)}</Typography.Text>\n <InfoCircleOutlined />\n </Space>\n </Tooltip>\n }\n className=\"tree-shaking-editor\"\n >\n {/* TODO: change to CodeViewer */}\n <Editor\n theme=\"vs-dark\"\n language={getFilePathFormat(module.path)}\n value={content}\n loading={<LoadingOutlined style={{ fontSize: 30 }} />}\n options={defaultEditOption}\n onMount={handleEditorDidMount}\n />\n </Card>\n );\n}\n"],"names":["defaultEditOption","defineMonacoOptions","CodeEditor","props","module","moduleGraph","ranges","toLine","setEditorData","source","editorRef","useRef","oldRanges","oldHovers","oldToLine","changeModule","content","setContent","useState","useEffect","isPreferSource","setTimeout","_editorRef_current_getModel","getHoverMessageInModule","setRangeAndLine","_editorRef_current","model","arr","getSelectionRange","Range","openEditor","event","query","parseOpenTag","document","handleEditorDidMount","editor","Card","Tooltip","Space","Typography","path","InfoCircleOutlined","Editor","getFilePathFormat","LoadingOutlined"],"mappings":"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"}
1
+ {"version":3,"file":"pages/TreeShaking/editor.mjs","sources":["webpack://@rsdoctor/components/./src/pages/TreeShaking/editor.tsx"],"sourcesContent":["import { InfoCircleOutlined, LoadingOutlined } from '@ant-design/icons';\nimport Editor, { OnMount } from '@monaco-editor/react';\nimport { SDK } from '@rsdoctor/types';\nimport { Card, Space, Tooltip, Typography } from 'antd';\nimport type { editor, Range as RangeClass } from 'monaco-editor';\nimport path from 'path-browserify';\nimport { useEffect, useRef, useState } from 'react';\nimport {\n defineMonacoOptions,\n getFilePathFormat,\n getSelectionRange,\n} from 'src/components/base/CodeViewer/utils';\nimport { parseOpenTag } from './open-tag';\nimport { Range } from './range';\nimport { SetEditorStatus } from './types';\nimport { getHoverMessageInModule } from './utils';\n\nexport interface CodeEditorProps {\n module: SDK.ModuleInstance;\n moduleGraph: SDK.ModuleGraphInstance;\n ranges: SDK.SourceRange[];\n setEditorData: SetEditorStatus;\n source: SDK.ModuleSource;\n toLine?: number;\n}\n\nconst defaultEditOption = defineMonacoOptions();\n\nexport function CodeEditor(props: CodeEditorProps) {\n const { module, moduleGraph, ranges, toLine, setEditorData, source } = props;\n const editorRef = useRef<editor.IStandaloneCodeEditor>();\n const oldRanges = useRef<string[]>([]);\n const oldHovers = useRef<string[]>([]);\n const oldToLine = useRef<number>();\n const changeModule = useRef(false);\n const [content, setContent] = useState('');\n // const [isDynamic, setIsDynamic] = useState(false);\n // const [exports, setExports] = useState<SDK.ExportData[]>([]);\n\n useEffect(() => {\n const { isPreferSource } = module;\n changeModule.current = true;\n setContent(\n source.source || isPreferSource ? source.source : source.transformed,\n );\n setTimeout(() => {\n oldHovers.current =\n editorRef.current\n ?.getModel()\n ?.deltaDecorations(\n oldHovers.current,\n getHoverMessageInModule(module, moduleGraph),\n ) ?? [];\n }, 200);\n }, [module, source]);\n\n useEffect(() => {\n function setRangeAndLine() {\n const model = editorRef.current?.getModel();\n\n if (!model) {\n return;\n }\n\n oldRanges.current = model.deltaDecorations(\n oldRanges.current,\n ranges.map((arr) => {\n return {\n range: getSelectionRange(\n arr,\n Range as unknown as typeof RangeClass,\n ),\n options: {\n stickiness: 1,\n inlineClassName: 'tree-shaking-statement-side-effect',\n isWholeLine: false,\n showIfCollapsed: true,\n },\n } as unknown as editor.IModelDecoration;\n }),\n );\n\n if (\n editorRef.current &&\n typeof toLine === 'number' &&\n oldToLine.current !== toLine\n ) {\n oldToLine.current = toLine;\n editorRef.current.revealLine(toLine, 0);\n }\n }\n\n // 模块变更时,高亮和滚动需要等待 300ms,确保在文本变更之后\n if (changeModule) {\n setTimeout(setRangeAndLine, 300);\n } else {\n setRangeAndLine();\n }\n\n changeModule.current = false;\n }, [ranges, toLine]);\n\n useEffect(() => {\n const openEditor = (event: MouseEvent) => {\n const query = parseOpenTag(event.target as HTMLElement);\n\n if (query) {\n const module = moduleGraph.getModuleById(query.module);\n\n if (module) {\n setEditorData(module, [query.range], query.range.start.line);\n }\n }\n };\n\n document.body.addEventListener('click', openEditor);\n\n return () => {\n document.body.removeEventListener('click', openEditor);\n };\n }, []);\n\n if (!module) {\n return <div>请选择要查看的模块</div>;\n }\n\n const handleEditorDidMount: OnMount = (editor) => {\n editorRef.current = editor;\n };\n\n return (\n <Card\n title={\n <Tooltip title={module.path}>\n <Space>\n <Typography.Text>{path.basename(module.path)}</Typography.Text>\n <InfoCircleOutlined />\n </Space>\n </Tooltip>\n }\n className=\"tree-shaking-editor\"\n >\n {/* TODO: change to CodeViewer */}\n <Editor\n theme=\"vs-dark\"\n language={getFilePathFormat(module.path)}\n value={content}\n loading={<LoadingOutlined style={{ fontSize: 30 }} />}\n options={defaultEditOption}\n onMount={handleEditorDidMount}\n />\n </Card>\n );\n}\n"],"names":["defaultEditOption","defineMonacoOptions","CodeEditor","props","module","moduleGraph","ranges","toLine","setEditorData","source","editorRef","useRef","oldRanges","oldHovers","oldToLine","changeModule","content","setContent","useState","useEffect","isPreferSource","setTimeout","getHoverMessageInModule","setRangeAndLine","model","arr","getSelectionRange","Range","openEditor","event","query","parseOpenTag","document","handleEditorDidMount","editor","Card","Tooltip","Space","Typography","path","InfoCircleOutlined","Editor","getFilePathFormat","LoadingOutlined"],"mappings":";;;;;;;;;;AA0BA,MAAMA,oBAAoBC;AAEnB,SAASC,WAAWC,KAAsB;IAC/C,MAAM,EAAEC,MAAM,EAAEC,WAAW,EAAEC,MAAM,EAAEC,MAAM,EAAEC,aAAa,EAAEC,MAAM,EAAE,GAAGN;IACvE,MAAMO,YAAYC;IAClB,MAAMC,YAAYD,OAAiB,EAAE;IACrC,MAAME,YAAYF,OAAiB,EAAE;IACrC,MAAMG,YAAYH;IAClB,MAAMI,eAAeJ,OAAO;IAC5B,MAAM,CAACK,SAASC,WAAW,GAAGC,SAAS;IAIvCC,UAAU;QACR,MAAM,EAAEC,cAAc,EAAE,GAAGhB;QAC3BW,aAAa,OAAO,GAAG;QACvBE,WACER,OAAO,MAAM,IAAIW,iBAAiBX,OAAO,MAAM,GAAGA,OAAO,WAAW;QAEtEY,WAAW;YACTR,UAAU,OAAO,GACfH,UAAU,OAAO,EACb,YACA,iBACAG,UAAU,OAAO,EACjBS,wBAAwBlB,QAAQC,iBAC7B,EAAE;QACb,GAAG;IACL,GAAG;QAACD;QAAQK;KAAO;IAEnBU,UAAU;QACR,SAASI;YACP,MAAMC,QAAQd,UAAU,OAAO,EAAE;YAEjC,IAAI,CAACc,OACH;YAGFZ,UAAU,OAAO,GAAGY,MAAM,gBAAgB,CACxCZ,UAAU,OAAO,EACjBN,OAAO,GAAG,CAAC,CAACmB,MACH;oBACL,OAAOC,kBACLD,KACAE;oBAEF,SAAS;wBACP,YAAY;wBACZ,iBAAiB;wBACjB,aAAa;wBACb,iBAAiB;oBACnB;gBACF;YAIJ,IACEjB,UAAU,OAAO,IACjB,AAAkB,YAAlB,OAAOH,UACPO,UAAU,OAAO,KAAKP,QACtB;gBACAO,UAAU,OAAO,GAAGP;gBACpBG,UAAU,OAAO,CAAC,UAAU,CAACH,QAAQ;YACvC;QACF;QAGA,IAAIQ,cACFM,WAAWE,iBAAiB;aAE5BA;QAGFR,aAAa,OAAO,GAAG;IACzB,GAAG;QAACT;QAAQC;KAAO;IAEnBY,UAAU;QACR,MAAMS,aAAa,CAACC;YAClB,MAAMC,QAAQC,aAAaF,MAAM,MAAM;YAEvC,IAAIC,OAAO;gBACT,MAAM1B,SAASC,YAAY,aAAa,CAACyB,MAAM,MAAM;gBAErD,IAAI1B,QACFI,cAAcJ,QAAQ;oBAAC0B,MAAM,KAAK;iBAAC,EAAEA,MAAM,KAAK,CAAC,KAAK,CAAC,IAAI;YAE/D;QACF;QAEAE,SAAS,IAAI,CAAC,gBAAgB,CAAC,SAASJ;QAExC,OAAO;YACLI,SAAS,IAAI,CAAC,mBAAmB,CAAC,SAASJ;QAC7C;IACF,GAAG,EAAE;IAEL,IAAI,CAACxB,QACH,OAAO,WAAP,GAAO,IAAC;kBAAI;;IAGd,MAAM6B,uBAAgC,CAACC;QACrCxB,UAAU,OAAO,GAAGwB;IACtB;IAEA,OAAO,WAAP,GACE,IAACC,MAAIA;QACH,qBACE,IAACC,SAAOA;YAAC,OAAOhC,OAAO,IAAI;sBACzB,mBAACiC,OAAKA;;kCACJ,IAACC,WAAW,IAAI;kCAAEC,gBAAAA,QAAa,CAACnC,OAAO,IAAI;;kCAC3C,IAACoC,oBAAkBA,CAAAA;;;;QAIzB,WAAU;kBAGV,kBAACC,OAAMA;YACL,OAAM;YACN,UAAUC,kBAAkBtC,OAAO,IAAI;YACvC,OAAOY;YACP,uBAAS,IAAC2B,iBAAeA;gBAAC,OAAO;oBAAE,UAAU;gBAAG;;YAChD,SAAS3C;YACT,SAASiC;;;AAIjB"}
@@ -57,36 +57,12 @@
57
57
  border-top: 1px solid #0505050f;
58
58
  }
59
59
 
60
- .tree-shaking-page .tree-shaking-export-table .ant-table-wrapper .ant-table-tbody > tr:last-child > td .ant-table-container table > thead > tr:first-child th th:first-child:not(:-webkit-any(:lang(ae), :lang(ar), :lang(arc), :lang(bcc), :lang(bqi), :lang(ckb), :lang(dv), :lang(fa), :lang(glk), :lang(he), :lang(ku), :lang(mzn), :lang(nqo), :lang(pnb), :lang(ps), :lang(sd), :lang(ug), :lang(ur), :lang(yi))) {
61
- border-top-left-radius: 0;
60
+ .tree-shaking-page .tree-shaking-export-table .ant-table-wrapper .ant-table-tbody > tr:last-child > td .ant-table-container table > thead > tr:first-child th th:first-child {
61
+ border-start-start-radius: 0;
62
62
  }
63
63
 
64
- .tree-shaking-page .tree-shaking-export-table .ant-table-wrapper .ant-table-tbody > tr:last-child > td .ant-table-container table > thead > tr:first-child th th:first-child:not(:is(:lang(ae), :lang(ar), :lang(arc), :lang(bcc), :lang(bqi), :lang(ckb), :lang(dv), :lang(fa), :lang(glk), :lang(he), :lang(ku), :lang(mzn), :lang(nqo), :lang(pnb), :lang(ps), :lang(sd), :lang(ug), :lang(ur), :lang(yi))) {
65
- border-top-left-radius: 0;
66
- }
67
-
68
- .tree-shaking-page .tree-shaking-export-table .ant-table-wrapper .ant-table-tbody > tr:last-child > td .ant-table-container table > thead > tr:first-child th th:first-child:-webkit-any(:lang(ae), :lang(ar), :lang(arc), :lang(bcc), :lang(bqi), :lang(ckb), :lang(dv), :lang(fa), :lang(glk), :lang(he), :lang(ku), :lang(mzn), :lang(nqo), :lang(pnb), :lang(ps), :lang(sd), :lang(ug), :lang(ur), :lang(yi)) {
69
- border-top-right-radius: 0;
70
- }
71
-
72
- .tree-shaking-page .tree-shaking-export-table .ant-table-wrapper .ant-table-tbody > tr:last-child > td .ant-table-container table > thead > tr:first-child th th:first-child:is(:lang(ae), :lang(ar), :lang(arc), :lang(bcc), :lang(bqi), :lang(ckb), :lang(dv), :lang(fa), :lang(glk), :lang(he), :lang(ku), :lang(mzn), :lang(nqo), :lang(pnb), :lang(ps), :lang(sd), :lang(ug), :lang(ur), :lang(yi)) {
73
- border-top-right-radius: 0;
74
- }
75
-
76
- .tree-shaking-page .tree-shaking-export-table .ant-table-wrapper .ant-table-tbody > tr:last-child > td .ant-table-container table > thead > tr:first-child th th:last-child:not(:-webkit-any(:lang(ae), :lang(ar), :lang(arc), :lang(bcc), :lang(bqi), :lang(ckb), :lang(dv), :lang(fa), :lang(glk), :lang(he), :lang(ku), :lang(mzn), :lang(nqo), :lang(pnb), :lang(ps), :lang(sd), :lang(ug), :lang(ur), :lang(yi))) {
77
- border-top-right-radius: 0;
78
- }
79
-
80
- .tree-shaking-page .tree-shaking-export-table .ant-table-wrapper .ant-table-tbody > tr:last-child > td .ant-table-container table > thead > tr:first-child th th:last-child:not(:is(:lang(ae), :lang(ar), :lang(arc), :lang(bcc), :lang(bqi), :lang(ckb), :lang(dv), :lang(fa), :lang(glk), :lang(he), :lang(ku), :lang(mzn), :lang(nqo), :lang(pnb), :lang(ps), :lang(sd), :lang(ug), :lang(ur), :lang(yi))) {
81
- border-top-right-radius: 0;
82
- }
83
-
84
- .tree-shaking-page .tree-shaking-export-table .ant-table-wrapper .ant-table-tbody > tr:last-child > td .ant-table-container table > thead > tr:first-child th th:last-child:-webkit-any(:lang(ae), :lang(ar), :lang(arc), :lang(bcc), :lang(bqi), :lang(ckb), :lang(dv), :lang(fa), :lang(glk), :lang(he), :lang(ku), :lang(mzn), :lang(nqo), :lang(pnb), :lang(ps), :lang(sd), :lang(ug), :lang(ur), :lang(yi)) {
85
- border-top-left-radius: 0;
86
- }
87
-
88
- .tree-shaking-page .tree-shaking-export-table .ant-table-wrapper .ant-table-tbody > tr:last-child > td .ant-table-container table > thead > tr:first-child th th:last-child:is(:lang(ae), :lang(ar), :lang(arc), :lang(bcc), :lang(bqi), :lang(ckb), :lang(dv), :lang(fa), :lang(glk), :lang(he), :lang(ku), :lang(mzn), :lang(nqo), :lang(pnb), :lang(ps), :lang(sd), :lang(ug), :lang(ur), :lang(yi)) {
89
- border-top-left-radius: 0;
64
+ .tree-shaking-page .tree-shaking-export-table .ant-table-wrapper .ant-table-tbody > tr:last-child > td .ant-table-container table > thead > tr:first-child th th:last-child {
65
+ border-start-end-radius: 0;
90
66
  }
91
67
 
92
68
  .tree-shaking-page .tree-shaking-side-effect-list {
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack://./src/pages/TreeShaking/index.scss"],"names":[],"mappings":"AADA;EAEE,WAAW;EACX,YAAY;AACd;;AAEA;EACE,sBAAsB;EACtB,aAAa;AACf;;AAEA;EACE,mBAAmB;EACnB,0BAA0B;AAC5B;;AAEA;EACE,mBAAmB;EACnB,0BAA0B;AAC5B;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,YAAY;EACZ,cAAc;AAChB;;AAEA;EACE,YAAY;EACZ,aAAa;AACf;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,WAAW;EACX,yBAAyB;AAC3B;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,+BAA+B;AACjC;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,0BAA0B;AAC5B;;AAEA;EACE,0BAA0B;AAC5B;;AAEA;EACE,0BAA0B;AAC5B;;AAEA;EACE,0BAA0B;AAC5B;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,sBAAsB;EACtB,uBAAuB;EACvB,aAAa;AACf;;AAEA;EACE,uBAAuB;EACvB,mBAAmB;EACnB,gBAAgB;AAClB;;AAEA;EACE,sBAAsB;EACtB,WAAW;AACb;;AAEA;EACE,kBAAkB;EAClB,iBAAiB;AACnB;;AAEA;EACE,aAAa;AACf","sourcesContent":[".tree-shaking-page{width:100%;height:100%}.tree-shaking-page .ant-card{display:flex;flex-direction:column}.tree-shaking-page .tree-shaking-statement-side-effect{text-decoration:underline;background:#711f1c}.tree-shaking-page .tree-shaking-statement-declaration-identifier{text-decoration:underline;background:#2c87ec}.tree-shaking-page .tree-shaking-files-box{height:700px}.tree-shaking-page .tree-shaking-files{overflow:auto;height:100%}.tree-shaking-page .tree-shaking-editor{flex-grow:1;height:700px}.tree-shaking-page .tree-shaking-editor .ant-card-body{padding:0}.tree-shaking-page .tree-shaking-files-box,.tree-shaking-page .tree-shaking-editor .ant-card-body{width:auto;height:calc(100% - 48px)}.tree-shaking-page .tree-shaking-export-table .ant-card-body{padding:0}.tree-shaking-page .tree-shaking-export-table .ant-card-body .ant-divider{margin:24px}.tree-shaking-page .tree-shaking-export-table .ant-table-wrapper .ant-table-tbody>tr:last-child>td{border-bottom:none}.tree-shaking-page .tree-shaking-export-table .ant-table-wrapper .ant-table-tbody>tr:last-child>td .ant-table-container table>thead>tr:first-child th{border-top:1px solid rgba(5,5,5,.06)}.tree-shaking-page .tree-shaking-export-table .ant-table-wrapper .ant-table-tbody>tr:last-child>td .ant-table-container table>thead>tr:first-child th th:first-child{border-start-start-radius:0}.tree-shaking-page .tree-shaking-export-table .ant-table-wrapper .ant-table-tbody>tr:last-child>td .ant-table-container table>thead>tr:first-child th th:last-child{border-start-end-radius:0}.tree-shaking-page .tree-shaking-side-effect-list{display:flex;flex-direction:column;align-items:flex-start}.tree-shaking-page .tree-shaking-side-effect-list .tree-shaking-side-effect-list-item{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.monaco-hover .markdown-hover.hover-row hr{margin:2px;background-color:gray}.monaco-hover .markdown-hover.hover-row div[data-code=tree-shaking-hover] ol{margin:4px 0 10px 0;padding-left:4px}.monaco-hover .markdown-hover.hover-row div[data-code=tree-shaking-hover] ol pre{margin:2px 0}"],"sourceRoot":""}
1
+ {"version":3,"sources":["webpack://./src/pages/TreeShaking/index.scss"],"names":[],"mappings":"AADA;EAEE,WAAW;EACX,YAAY;AACd;;AAEA;EACE,sBAAsB;EACtB,aAAa;AACf;;AAEA;EACE,mBAAmB;EACnB,0BAA0B;AAC5B;;AAEA;EACE,mBAAmB;EACnB,0BAA0B;AAC5B;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,YAAY;EACZ,cAAc;AAChB;;AAEA;EACE,YAAY;EACZ,aAAa;AACf;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,WAAW;EACX,yBAAyB;AAC3B;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,+BAA+B;AACjC;;AAEA;EACE,4BAA4B;AAC9B;;AAEA;EACE,0BAA0B;AAC5B;;AAEA;EACE,sBAAsB;EACtB,uBAAuB;EACvB,aAAa;AACf;;AAEA;EACE,uBAAuB;EACvB,mBAAmB;EACnB,gBAAgB;AAClB;;AAEA;EACE,sBAAsB;EACtB,WAAW;AACb;;AAEA;EACE,kBAAkB;EAClB,iBAAiB;AACnB;;AAEA;EACE,aAAa;AACf","sourcesContent":[".tree-shaking-page{width:100%;height:100%}.tree-shaking-page .ant-card{display:flex;flex-direction:column}.tree-shaking-page .tree-shaking-statement-side-effect{text-decoration:underline;background:#711f1c}.tree-shaking-page .tree-shaking-statement-declaration-identifier{text-decoration:underline;background:#2c87ec}.tree-shaking-page .tree-shaking-files-box{height:700px}.tree-shaking-page .tree-shaking-files{overflow:auto;height:100%}.tree-shaking-page .tree-shaking-editor{flex-grow:1;height:700px}.tree-shaking-page .tree-shaking-editor .ant-card-body{padding:0}.tree-shaking-page .tree-shaking-files-box,.tree-shaking-page .tree-shaking-editor .ant-card-body{width:auto;height:calc(100% - 48px)}.tree-shaking-page .tree-shaking-export-table .ant-card-body{padding:0}.tree-shaking-page .tree-shaking-export-table .ant-card-body .ant-divider{margin:24px}.tree-shaking-page .tree-shaking-export-table .ant-table-wrapper .ant-table-tbody>tr:last-child>td{border-bottom:none}.tree-shaking-page .tree-shaking-export-table .ant-table-wrapper .ant-table-tbody>tr:last-child>td .ant-table-container table>thead>tr:first-child th{border-top:1px solid rgba(5,5,5,.06)}.tree-shaking-page .tree-shaking-export-table .ant-table-wrapper .ant-table-tbody>tr:last-child>td .ant-table-container table>thead>tr:first-child th th:first-child{border-start-start-radius:0}.tree-shaking-page .tree-shaking-export-table .ant-table-wrapper .ant-table-tbody>tr:last-child>td .ant-table-container table>thead>tr:first-child th th:last-child{border-start-end-radius:0}.tree-shaking-page .tree-shaking-side-effect-list{display:flex;flex-direction:column;align-items:flex-start}.tree-shaking-page .tree-shaking-side-effect-list .tree-shaking-side-effect-list-item{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.monaco-hover .markdown-hover.hover-row hr{margin:2px;background-color:gray}.monaco-hover .markdown-hover.hover-row div[data-code=tree-shaking-hover] ol{margin:4px 0 10px 0;padding-left:4px}.monaco-hover .markdown-hover.hover-row div[data-code=tree-shaking-hover] ol pre{margin:2px 0}"],"sourceRoot":""}
@@ -27,7 +27,7 @@ const Component = ({ data, cwd })=>{
27
27
  searchInput
28
28
  ]);
29
29
  const entry = useMemo(()=>filteredModules.find((item)=>item.isEntry), []);
30
- const [selectedModule, setSelectedModule] = useState(entry || (null == filteredModules ? void 0 : filteredModules.length) && (null == filteredModules ? void 0 : filteredModules[0]));
30
+ const [selectedModule, setSelectedModule] = useState(entry || filteredModules?.length && filteredModules?.[0]);
31
31
  const files = useFileStructures(filteredModules, moduleGraph, searchInput, selectedModule, (file)=>{
32
32
  setEditorData(filteredModules.find((item)=>item.path === file), []);
33
33
  }, cwd);
@@ -1 +1 @@
1
- {"version":3,"file":"pages/TreeShaking/index.mjs","sources":["webpack://@rsdoctor/components/./src/pages/TreeShaking/index.tsx"],"sourcesContent":["import React, { useMemo, useState } from 'react';\nimport { Card, Col, Row, Radio } from 'antd';\nimport { Lodash } from '@rsdoctor/utils/common';\nimport { FileSearchOutlined } from '@ant-design/icons';\nimport { SDK } from '@rsdoctor/types';\nimport path from 'path-browserify';\nimport {\n ConnectManifestData,\n ServerAPIProvider,\n} from 'src/components/Manifest';\nimport { Size } from '../../constants';\nimport { FileTree } from '../../components/FileTree';\nimport { KeywordInput } from '../../components/Form/keyword';\nimport { getTreeFilesDefaultExpandedKeys, useFileStructures } from './utils';\nimport {\n fetchManifest,\n useModuleGraphInstanceByModuleGraph,\n} from '../../utils';\nimport { CodeEditor } from './editor';\nimport { Space } from './space';\nimport { TreeShakingTable } from './table';\nimport type { TableKind, SetEditorStatus } from './types';\n\nimport './index.sass';\nexport * from './constants';\n\nconst Component: React.FC<{ data: SDK.ModuleGraphData; cwd: string }> = ({\n data,\n cwd,\n}) => {\n const moduleGraph = useModuleGraphInstanceByModuleGraph(data);\n\n if (moduleGraph.size() === 0) {\n return <Space />;\n }\n\n const [searchInput, setSearchInput] = useState('');\n const [toLine, setToLine] = useState(1);\n const [ranges, setRanges] = useState<SDK.SourceRange[]>([]);\n const [tableKind, setTableKind] = useState<TableKind>('side-effect');\n const filteredModules = useMemo(\n () =>\n moduleGraph\n .getModules()\n .filter(\n (item) =>\n item.kind === SDK.ModuleKind.Normal &&\n path.basename(item.path).includes(searchInput),\n ),\n [searchInput],\n );\n\n const entry = useMemo(\n () => filteredModules.find((item) => item.isEntry)!,\n [],\n );\n const [selectedModule, setSelectedModule] = useState(\n entry || (filteredModules?.length && filteredModules?.[0]),\n );\n const files = useFileStructures(\n filteredModules,\n moduleGraph,\n searchInput,\n selectedModule,\n (file) => {\n setEditorData(filteredModules.find((item) => item.path === file)!, []);\n },\n cwd,\n );\n const setEditorData: SetEditorStatus = (module, ranges, line) => {\n setSelectedModule(module);\n setRanges(ranges.slice());\n\n if (Lodash.isNumber(line)) {\n setToLine(line);\n }\n };\n\n return (\n <Card\n title=\"Tree Shaking Analysis\"\n bodyStyle={{ paddingTop: 0 }}\n className=\"tree-shaking-page\"\n >\n <Row\n justify=\"space-between\"\n align=\"middle\"\n style={{ marginBottom: Size.BasePadding, marginTop: Size.BasePadding }}\n >\n <KeywordInput\n icon={<FileSearchOutlined />}\n width={400}\n label=\"FileName\"\n placeholder=\"search filename by keyword\"\n style={{ width: 'auto' }}\n onChange={(e) => setSearchInput(e)}\n />\n <Radio.Group\n value={tableKind}\n onChange={({ target }) => setTableKind(target.value)}\n >\n <Radio.Button value=\"side-effect\">SideEffects</Radio.Button>\n <Radio.Button value=\"export\">Export Variables</Radio.Button>\n </Radio.Group>\n </Row>\n <Row\n justify=\"space-between\"\n align=\"top\"\n wrap={false}\n gutter={[Size.BasePadding, Size.BasePadding]}\n >\n <Col span={7}>\n <Card\n title={`Total Files: ${filteredModules.length}`}\n className=\"tree-shaking-files-box\"\n >\n <FileTree\n style={{ height: '80%' }}\n className=\"tree-shaking-files\"\n selectedKeys={selectedModule ? [selectedModule.path] : []}\n defaultExpandedKeys={getTreeFilesDefaultExpandedKeys(files)}\n treeData={files}\n expandAction=\"click\"\n />\n </Card>\n </Col>\n <Col span={9}>\n <ServerAPIProvider\n api={SDK.ServerAPI.API.GetModuleCodeByModuleId}\n body={{ moduleId: selectedModule.id }}\n >\n {(source) => {\n return (\n <CodeEditor\n module={selectedModule}\n moduleGraph={moduleGraph}\n ranges={ranges}\n toLine={toLine}\n setEditorData={setEditorData}\n source={source}\n />\n );\n }}\n </ServerAPIProvider>\n </Col>\n <Col flex={1}>\n <TreeShakingTable\n kind={tableKind}\n setEditorData={setEditorData}\n module={selectedModule}\n moduleGraph={moduleGraph}\n />\n </Col>\n </Row>\n </Card>\n );\n};\n\nexport const TreeShakingPage = ConnectManifestData(\n fetchManifest,\n [\n ['moduleGraph', 'data'],\n ['root', 'cwd'],\n ],\n Component,\n);\n"],"names":["Component","data","cwd","moduleGraph","useModuleGraphInstanceByModuleGraph","Space","searchInput","setSearchInput","useState","toLine","setToLine","ranges","setRanges","tableKind","setTableKind","filteredModules","useMemo","item","SDK","path","entry","selectedModule","setSelectedModule","files","useFileStructures","file","setEditorData","module","line","Lodash","Card","Row","Size","KeywordInput","FileSearchOutlined","e","Radio","target","Col","FileTree","getTreeFilesDefaultExpandedKeys","ServerAPIProvider","source","CodeEditor","TreeShakingTable","TreeShakingPage","ConnectManifestData","fetchManifest"],"mappings":"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"}
1
+ {"version":3,"file":"pages/TreeShaking/index.mjs","sources":["webpack://@rsdoctor/components/./src/pages/TreeShaking/index.tsx"],"sourcesContent":["import React, { useMemo, useState } from 'react';\nimport { Card, Col, Row, Radio } from 'antd';\nimport { Lodash } from '@rsdoctor/utils/common';\nimport { FileSearchOutlined } from '@ant-design/icons';\nimport { SDK } from '@rsdoctor/types';\nimport path from 'path-browserify';\nimport {\n ConnectManifestData,\n ServerAPIProvider,\n} from 'src/components/Manifest';\nimport { Size } from '../../constants';\nimport { FileTree } from '../../components/FileTree';\nimport { KeywordInput } from '../../components/Form/keyword';\nimport { getTreeFilesDefaultExpandedKeys, useFileStructures } from './utils';\nimport {\n fetchManifest,\n useModuleGraphInstanceByModuleGraph,\n} from '../../utils';\nimport { CodeEditor } from './editor';\nimport { Space } from './space';\nimport { TreeShakingTable } from './table';\nimport type { TableKind, SetEditorStatus } from './types';\n\nimport './index.sass';\nexport * from './constants';\n\nconst Component: React.FC<{ data: SDK.ModuleGraphData; cwd: string }> = ({\n data,\n cwd,\n}) => {\n const moduleGraph = useModuleGraphInstanceByModuleGraph(data);\n\n if (moduleGraph.size() === 0) {\n return <Space />;\n }\n\n const [searchInput, setSearchInput] = useState('');\n const [toLine, setToLine] = useState(1);\n const [ranges, setRanges] = useState<SDK.SourceRange[]>([]);\n const [tableKind, setTableKind] = useState<TableKind>('side-effect');\n const filteredModules = useMemo(\n () =>\n moduleGraph\n .getModules()\n .filter(\n (item) =>\n item.kind === SDK.ModuleKind.Normal &&\n path.basename(item.path).includes(searchInput),\n ),\n [searchInput],\n );\n\n const entry = useMemo(\n () => filteredModules.find((item) => item.isEntry)!,\n [],\n );\n const [selectedModule, setSelectedModule] = useState(\n entry || (filteredModules?.length && filteredModules?.[0]),\n );\n const files = useFileStructures(\n filteredModules,\n moduleGraph,\n searchInput,\n selectedModule,\n (file) => {\n setEditorData(filteredModules.find((item) => item.path === file)!, []);\n },\n cwd,\n );\n const setEditorData: SetEditorStatus = (module, ranges, line) => {\n setSelectedModule(module);\n setRanges(ranges.slice());\n\n if (Lodash.isNumber(line)) {\n setToLine(line);\n }\n };\n\n return (\n <Card\n title=\"Tree Shaking Analysis\"\n bodyStyle={{ paddingTop: 0 }}\n className=\"tree-shaking-page\"\n >\n <Row\n justify=\"space-between\"\n align=\"middle\"\n style={{ marginBottom: Size.BasePadding, marginTop: Size.BasePadding }}\n >\n <KeywordInput\n icon={<FileSearchOutlined />}\n width={400}\n label=\"FileName\"\n placeholder=\"search filename by keyword\"\n style={{ width: 'auto' }}\n onChange={(e) => setSearchInput(e)}\n />\n <Radio.Group\n value={tableKind}\n onChange={({ target }) => setTableKind(target.value)}\n >\n <Radio.Button value=\"side-effect\">SideEffects</Radio.Button>\n <Radio.Button value=\"export\">Export Variables</Radio.Button>\n </Radio.Group>\n </Row>\n <Row\n justify=\"space-between\"\n align=\"top\"\n wrap={false}\n gutter={[Size.BasePadding, Size.BasePadding]}\n >\n <Col span={7}>\n <Card\n title={`Total Files: ${filteredModules.length}`}\n className=\"tree-shaking-files-box\"\n >\n <FileTree\n style={{ height: '80%' }}\n className=\"tree-shaking-files\"\n selectedKeys={selectedModule ? [selectedModule.path] : []}\n defaultExpandedKeys={getTreeFilesDefaultExpandedKeys(files)}\n treeData={files}\n expandAction=\"click\"\n />\n </Card>\n </Col>\n <Col span={9}>\n <ServerAPIProvider\n api={SDK.ServerAPI.API.GetModuleCodeByModuleId}\n body={{ moduleId: selectedModule.id }}\n >\n {(source) => {\n return (\n <CodeEditor\n module={selectedModule}\n moduleGraph={moduleGraph}\n ranges={ranges}\n toLine={toLine}\n setEditorData={setEditorData}\n source={source}\n />\n );\n }}\n </ServerAPIProvider>\n </Col>\n <Col flex={1}>\n <TreeShakingTable\n kind={tableKind}\n setEditorData={setEditorData}\n module={selectedModule}\n moduleGraph={moduleGraph}\n />\n </Col>\n </Row>\n </Card>\n );\n};\n\nexport const TreeShakingPage = ConnectManifestData(\n fetchManifest,\n [\n ['moduleGraph', 'data'],\n ['root', 'cwd'],\n ],\n Component,\n);\n"],"names":["Component","data","cwd","moduleGraph","useModuleGraphInstanceByModuleGraph","Space","searchInput","setSearchInput","useState","toLine","setToLine","ranges","setRanges","tableKind","setTableKind","filteredModules","useMemo","item","SDK","path","entry","selectedModule","setSelectedModule","files","useFileStructures","file","setEditorData","module","line","Lodash","Card","Row","Size","KeywordInput","FileSearchOutlined","e","Radio","target","Col","FileTree","getTreeFilesDefaultExpandedKeys","ServerAPIProvider","source","CodeEditor","TreeShakingTable","TreeShakingPage","ConnectManifestData","fetchManifest"],"mappings":"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"}
@@ -114,7 +114,7 @@ const SideEffectTable = ({ module, moduleGraph, setEditorData })=>{
114
114
  key: i,
115
115
  name,
116
116
  identifier: module.isPreferSource ? identifier.position.source : identifier.position.transformed,
117
- declaration: null == variable ? void 0 : variable.identifier
117
+ declaration: variable?.identifier
118
118
  })).sort((pre, next)=>{
119
119
  if (pre.name === next.name) return pre.identifier.start.line > next.identifier.start.line ? 1 : -1;
120
120
  return pre.name > next.name ? 1 : -1;
@@ -272,9 +272,9 @@ const ExportTable = ({ module, moduleGraph, setEditorData })=>{
272
272
  return {
273
273
  key: i,
274
274
  name: item.name,
275
- declaration: null == variable ? void 0 : variable.identifier,
275
+ declaration: variable?.identifier,
276
276
  used: item.getSideEffects().map(({ module, identifier })=>{
277
- const range = (null == module ? void 0 : module.isPreferSource) ? identifier.position.source : identifier.position.transformed;
277
+ const range = module?.isPreferSource ? identifier.position.source : identifier.position.transformed;
278
278
  if (!module || !range) return;
279
279
  return {
280
280
  module,
@@ -1 +1 @@
1
- {"version":3,"file":"pages/TreeShaking/table.mjs","sources":["webpack://@rsdoctor/components/./src/pages/TreeShaking/table.tsx"],"sourcesContent":["import { SDK } from '@rsdoctor/types';\nimport {\n Space,\n Table,\n Typography,\n Divider,\n Tooltip,\n Button,\n Input,\n InputRef,\n} from 'antd';\nimport { SearchOutlined } from '@ant-design/icons';\nimport type { ColumnType, FilterConfirmProps } from 'antd/es/table/interface';\nimport React, { useMemo, useState, useRef } from 'react';\nimport Highlighter from 'react-highlight-words';\nimport { Card } from '../../components/Card';\nimport type { TableKind, SetEditorStatus } from './types';\nimport { ellipsisPath } from './utils';\nimport { isDef } from '../../utils';\n\nconst tableHeight = 600;\n\ninterface TableProps {\n module: SDK.ModuleInstance;\n moduleGraph: SDK.ModuleGraphInstance;\n setEditorData: SetEditorStatus;\n kind: TableKind;\n}\n\nfunction getDeclarationElement(\n val: SDK.StatementInstance | undefined,\n setEditorData: SetEditorStatus,\n) {\n if (!val) {\n return <div>Can not find declaration.</div>;\n }\n\n const { module } = val;\n const range = module.isPreferSource\n ? val.position.source!\n : val.position.transformed;\n\n return (\n <Tooltip title={`${module.path}, line ${range.start.line}`}>\n <Button\n type=\"link\"\n onClick={() => setEditorData(module, [range], range.start.line)}\n >\n Move To\n </Button>\n </Tooltip>\n );\n}\n\nfunction useSearchCell<Data>(dataIndex: string): ColumnType<Data> {\n const [searchText, setSearchText] = useState('');\n const [searchedColumn, setSearchedColumn] = useState('');\n const searchInput = useRef<InputRef>(null);\n\n const handleSearch = (\n selectedKeys: string[],\n confirm: (param?: FilterConfirmProps) => void,\n dataIndex: string,\n ) => {\n confirm();\n setSearchText(selectedKeys[0]);\n setSearchedColumn(dataIndex);\n };\n\n const handleReset = (clearFilters: () => void) => {\n clearFilters();\n setSearchText('');\n };\n\n return {\n filterDropdown: ({\n setSelectedKeys,\n selectedKeys,\n confirm,\n clearFilters,\n close,\n }) => (\n <div style={{ padding: 8 }} onKeyDown={(e) => e.stopPropagation()}>\n <Input\n ref={searchInput}\n placeholder={`Search ${dataIndex}`}\n value={selectedKeys[0]}\n onChange={(e) =>\n setSelectedKeys(e.target.value ? [e.target.value] : [])\n }\n onPressEnter={() =>\n handleSearch(selectedKeys as string[], confirm, dataIndex)\n }\n style={{ marginBottom: 8, display: 'block' }}\n />\n <Space>\n <Button\n type=\"primary\"\n onClick={() =>\n handleSearch(selectedKeys as string[], confirm, dataIndex)\n }\n icon={<SearchOutlined />}\n size=\"small\"\n style={{ width: 90 }}\n >\n Search\n </Button>\n <Button\n onClick={() => clearFilters && handleReset(clearFilters)}\n size=\"small\"\n style={{ width: 90 }}\n >\n Reset\n </Button>\n <Button type=\"link\" size=\"small\" onClick={close}>\n close\n </Button>\n </Space>\n </div>\n ),\n filterIcon: (filtered: boolean) => (\n <SearchOutlined style={{ color: filtered ? '#1890ff' : undefined }} />\n ),\n onFilter: (value, record): boolean => {\n // @ts-ignore\n return record[dataIndex]\n .toString()\n .toLowerCase()\n .includes((value as string).toLowerCase());\n },\n render: (text: string) => {\n return searchedColumn === dataIndex ? (\n <Highlighter\n highlightStyle={{ backgroundColor: '#ffc069', padding: 0 }}\n searchWords={[searchText]}\n autoEscape\n textToHighlight={text ? text.toString() : ''}\n />\n ) : (\n text\n );\n },\n };\n}\n\nexport const SideEffectTable: React.FC<TableProps> = ({\n module,\n moduleGraph,\n setEditorData,\n}) => {\n interface SideEffectDataRowData {\n key: number;\n name: string;\n identifier: SDK.SourceRange;\n declaration?: SDK.StatementInstance;\n children?: SideEffectDataRowData[];\n }\n\n const sideEffects = useMemo(\n () => moduleGraph.getModuleGraphModule(module)!.getSideEffects(),\n [module],\n );\n const dataSource = sideEffects\n .map(({ variable, name, identifier }, i): SideEffectDataRowData => {\n return {\n key: i,\n name,\n identifier: module.isPreferSource\n ? identifier.position.source!\n : identifier.position.transformed,\n declaration: variable?.identifier,\n };\n })\n .sort((pre, next) => {\n // 名称相同则看行数\n if (pre.name === next.name) {\n return pre.identifier.start.line! > next.identifier.start.line!\n ? 1\n : -1;\n }\n\n // 名称不同则比较名称\n return pre.name > next.name ? 1 : -1;\n })\n .reduce((ans, item) => {\n const lastItem = ans[ans.length - 1];\n\n if (!lastItem || lastItem.name !== item.name) {\n ans.push(item);\n return ans;\n }\n\n if (!lastItem.children) {\n lastItem.children = [];\n }\n\n lastItem.children.push(item);\n return ans;\n }, [] as SideEffectDataRowData[]);\n\n const columns: ColumnType<any>[] = [\n {\n title: 'Name',\n dataIndex: 'name',\n key: 'name',\n align: 'center',\n ...useSearchCell<SDK.ExportData>('name'),\n },\n {\n title: 'SideEffect',\n dataIndex: 'identifier',\n key: 'identifier',\n align: 'center',\n render: (val: SDK.SourceRange) => {\n return (\n <Tooltip title={`Current File line ${val.start.line}`}>\n <Button\n type=\"link\"\n onClick={() => setEditorData(module, [val], val.start.line)}\n >\n Move To\n </Button>\n </Tooltip>\n );\n },\n },\n {\n title: 'Declaration',\n dataIndex: 'declaration',\n key: 'declaration',\n align: 'center',\n render: (val: SDK.StatementInstance) => {\n return getDeclarationElement(val, setEditorData);\n },\n },\n ];\n\n const titleInfo = (\n <React.Fragment>\n <Space style={{ fontWeight: 400 }}>\n Import\n <Typography.Text strong>{dataSource.length}</Typography.Text>\n variables\n <Divider type=\"vertical\" />\n <Typography.Text strong>{sideEffects.length}</Typography.Text>\n sideEffects\n </Space>\n </React.Fragment>\n );\n\n return (\n <Card\n style={{ marginBottom: 10 }}\n title={titleInfo}\n className=\"tree-shaking-export-table\"\n >\n <Table\n size=\"small\"\n dataSource={dataSource}\n columns={columns}\n pagination={false}\n scroll={{ y: tableHeight }}\n />\n </Card>\n );\n};\n\nexport const ExportTable: React.FC<TableProps> = ({\n module,\n moduleGraph,\n setEditorData,\n}) => {\n const exportsData = useMemo(\n () => moduleGraph.getModuleGraphModule(module)!.getExports(),\n [module],\n );\n const allUnUsedExports = exportsData.filter(\n (item) => item.getSideEffects().length === 0,\n );\n const titleInfo = (\n <React.Fragment>\n <Space style={{ fontWeight: 400 }}>\n Export\n <Typography.Text strong>{exportsData.length}</Typography.Text>\n </Space>\n {exportsData.length > 0 ? (\n <>\n <Divider type=\"vertical\" />\n <Typography.Text style={{ fontWeight: 400 }} code>\n <Typography.Text>Unused</Typography.Text>\n <Divider type=\"vertical\" />\n <Typography.Text strong>{allUnUsedExports.length}</Typography.Text>\n </Typography.Text>\n <Divider type=\"vertical\" />\n <Typography.Text style={{ fontWeight: 400 }} code>\n <Typography.Text>Used</Typography.Text>\n <Divider type=\"vertical\" />\n <Typography.Text strong>\n {exportsData.length - allUnUsedExports.length}\n </Typography.Text>\n </Typography.Text>\n </>\n ) : (\n ''\n )}\n </React.Fragment>\n );\n\n interface RowData {\n key: number;\n name: string;\n declaration?: SDK.StatementInstance;\n used: {\n module: SDK.ModuleInstance;\n range: SDK.SourceRange;\n }[];\n }\n\n const dataSource: RowData[] = exportsData.map((item, i) => {\n const { variable } = item;\n\n return {\n key: i,\n name: item.name,\n declaration: variable?.identifier,\n used: item\n .getSideEffects()\n .map(({ module, identifier }) => {\n const range = module?.isPreferSource\n ? identifier.position.source\n : identifier.position.transformed;\n\n if (!module || !range) {\n return;\n }\n\n return {\n module,\n range,\n };\n })\n .filter(isDef),\n };\n });\n\n const columns: ColumnType<any>[] = [\n {\n title: 'Name',\n dataIndex: 'name',\n key: 'name',\n align: 'center',\n ...useSearchCell<SDK.ExportInstance>('name'),\n },\n {\n title: 'Declaration',\n dataIndex: 'declaration',\n key: 'declaration',\n align: 'center',\n render: (val?: SDK.StatementInstance) => {\n return getDeclarationElement(val, setEditorData);\n },\n },\n {\n title: 'Info',\n dataIndex: 'used',\n key: 'used',\n align: 'center',\n sorter: (a: RowData, b: RowData) => a.used.length - b.used.length,\n sortDirections: ['descend', 'ascend'],\n render: (val: RowData['used']) => <span>Used {val.length} times</span>,\n },\n ];\n\n const expandElement = (data: any) => {\n return (\n <div className=\"tree-shaking-side-effect-list\">\n <Typography.Text>List of SideEffect:</Typography.Text>\n {data.used.map(({ module, range }: any) => (\n <Tooltip key={module.id} title={`${module.path}:${range.start.line}`}>\n <Button\n className=\"tree-shaking-side-effect-list-item\"\n type=\"link\"\n onClick={() => {\n setEditorData(module, [range], range.start.line);\n }}\n >\n {`${ellipsisPath(module.path)}:${range.start.line}`}\n </Button>\n </Tooltip>\n ))}\n </div>\n );\n };\n\n return (\n <Card title={titleInfo} className=\"tree-shaking-export-table\">\n <Table\n size=\"small\"\n dataSource={dataSource}\n columns={columns}\n pagination={false}\n scroll={{ y: tableHeight }}\n expandable={{\n expandedRowRender: expandElement,\n rowExpandable: (val: any) => val.used.length > 0,\n }}\n />\n </Card>\n );\n};\n\nexport const TreeShakingTable: React.FC<TableProps> = (props) => {\n return props.kind === 'side-effect' ? (\n <SideEffectTable {...props} />\n ) : (\n <ExportTable {...props} />\n );\n};\n"],"names":["tableHeight","getDeclarationElement","val","setEditorData","module","range","Tooltip","Button","useSearchCell","dataIndex","searchText","setSearchText","useState","searchedColumn","setSearchedColumn","searchInput","useRef","handleSearch","selectedKeys","confirm","handleReset","clearFilters","setSelectedKeys","close","e","Input","Space","SearchOutlined","filtered","undefined","value","record","text","Highlighter","SideEffectTable","moduleGraph","sideEffects","useMemo","dataSource","variable","name","identifier","i","pre","next","ans","item","lastItem","columns","titleInfo","React","Typography","Divider","Card","Table","ExportTable","exportsData","allUnUsedExports","isDef","a","b","expandElement","data","ellipsisPath","TreeShakingTable","props"],"mappings":"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"}
1
+ {"version":3,"file":"pages/TreeShaking/table.mjs","sources":["webpack://@rsdoctor/components/./src/pages/TreeShaking/table.tsx"],"sourcesContent":["import { SDK } from '@rsdoctor/types';\nimport {\n Space,\n Table,\n Typography,\n Divider,\n Tooltip,\n Button,\n Input,\n InputRef,\n} from 'antd';\nimport { SearchOutlined } from '@ant-design/icons';\nimport type { ColumnType, FilterConfirmProps } from 'antd/es/table/interface';\nimport React, { useMemo, useState, useRef } from 'react';\nimport Highlighter from 'react-highlight-words';\nimport { Card } from '../../components/Card';\nimport type { TableKind, SetEditorStatus } from './types';\nimport { ellipsisPath } from './utils';\nimport { isDef } from '../../utils';\n\nconst tableHeight = 600;\n\ninterface TableProps {\n module: SDK.ModuleInstance;\n moduleGraph: SDK.ModuleGraphInstance;\n setEditorData: SetEditorStatus;\n kind: TableKind;\n}\n\nfunction getDeclarationElement(\n val: SDK.StatementInstance | undefined,\n setEditorData: SetEditorStatus,\n) {\n if (!val) {\n return <div>Can not find declaration.</div>;\n }\n\n const { module } = val;\n const range = module.isPreferSource\n ? val.position.source!\n : val.position.transformed;\n\n return (\n <Tooltip title={`${module.path}, line ${range.start.line}`}>\n <Button\n type=\"link\"\n onClick={() => setEditorData(module, [range], range.start.line)}\n >\n Move To\n </Button>\n </Tooltip>\n );\n}\n\nfunction useSearchCell<Data>(dataIndex: string): ColumnType<Data> {\n const [searchText, setSearchText] = useState('');\n const [searchedColumn, setSearchedColumn] = useState('');\n const searchInput = useRef<InputRef>(null);\n\n const handleSearch = (\n selectedKeys: string[],\n confirm: (param?: FilterConfirmProps) => void,\n dataIndex: string,\n ) => {\n confirm();\n setSearchText(selectedKeys[0]);\n setSearchedColumn(dataIndex);\n };\n\n const handleReset = (clearFilters: () => void) => {\n clearFilters();\n setSearchText('');\n };\n\n return {\n filterDropdown: ({\n setSelectedKeys,\n selectedKeys,\n confirm,\n clearFilters,\n close,\n }) => (\n <div style={{ padding: 8 }} onKeyDown={(e) => e.stopPropagation()}>\n <Input\n ref={searchInput}\n placeholder={`Search ${dataIndex}`}\n value={selectedKeys[0]}\n onChange={(e) =>\n setSelectedKeys(e.target.value ? [e.target.value] : [])\n }\n onPressEnter={() =>\n handleSearch(selectedKeys as string[], confirm, dataIndex)\n }\n style={{ marginBottom: 8, display: 'block' }}\n />\n <Space>\n <Button\n type=\"primary\"\n onClick={() =>\n handleSearch(selectedKeys as string[], confirm, dataIndex)\n }\n icon={<SearchOutlined />}\n size=\"small\"\n style={{ width: 90 }}\n >\n Search\n </Button>\n <Button\n onClick={() => clearFilters && handleReset(clearFilters)}\n size=\"small\"\n style={{ width: 90 }}\n >\n Reset\n </Button>\n <Button type=\"link\" size=\"small\" onClick={close}>\n close\n </Button>\n </Space>\n </div>\n ),\n filterIcon: (filtered: boolean) => (\n <SearchOutlined style={{ color: filtered ? '#1890ff' : undefined }} />\n ),\n onFilter: (value, record): boolean => {\n // @ts-ignore\n return record[dataIndex]\n .toString()\n .toLowerCase()\n .includes((value as string).toLowerCase());\n },\n render: (text: string) => {\n return searchedColumn === dataIndex ? (\n <Highlighter\n highlightStyle={{ backgroundColor: '#ffc069', padding: 0 }}\n searchWords={[searchText]}\n autoEscape\n textToHighlight={text ? text.toString() : ''}\n />\n ) : (\n text\n );\n },\n };\n}\n\nexport const SideEffectTable: React.FC<TableProps> = ({\n module,\n moduleGraph,\n setEditorData,\n}) => {\n interface SideEffectDataRowData {\n key: number;\n name: string;\n identifier: SDK.SourceRange;\n declaration?: SDK.StatementInstance;\n children?: SideEffectDataRowData[];\n }\n\n const sideEffects = useMemo(\n () => moduleGraph.getModuleGraphModule(module)!.getSideEffects(),\n [module],\n );\n const dataSource = sideEffects\n .map(({ variable, name, identifier }, i): SideEffectDataRowData => {\n return {\n key: i,\n name,\n identifier: module.isPreferSource\n ? identifier.position.source!\n : identifier.position.transformed,\n declaration: variable?.identifier,\n };\n })\n .sort((pre, next) => {\n // 名称相同则看行数\n if (pre.name === next.name) {\n return pre.identifier.start.line! > next.identifier.start.line!\n ? 1\n : -1;\n }\n\n // 名称不同则比较名称\n return pre.name > next.name ? 1 : -1;\n })\n .reduce((ans, item) => {\n const lastItem = ans[ans.length - 1];\n\n if (!lastItem || lastItem.name !== item.name) {\n ans.push(item);\n return ans;\n }\n\n if (!lastItem.children) {\n lastItem.children = [];\n }\n\n lastItem.children.push(item);\n return ans;\n }, [] as SideEffectDataRowData[]);\n\n const columns: ColumnType<any>[] = [\n {\n title: 'Name',\n dataIndex: 'name',\n key: 'name',\n align: 'center',\n ...useSearchCell<SDK.ExportData>('name'),\n },\n {\n title: 'SideEffect',\n dataIndex: 'identifier',\n key: 'identifier',\n align: 'center',\n render: (val: SDK.SourceRange) => {\n return (\n <Tooltip title={`Current File line ${val.start.line}`}>\n <Button\n type=\"link\"\n onClick={() => setEditorData(module, [val], val.start.line)}\n >\n Move To\n </Button>\n </Tooltip>\n );\n },\n },\n {\n title: 'Declaration',\n dataIndex: 'declaration',\n key: 'declaration',\n align: 'center',\n render: (val: SDK.StatementInstance) => {\n return getDeclarationElement(val, setEditorData);\n },\n },\n ];\n\n const titleInfo = (\n <React.Fragment>\n <Space style={{ fontWeight: 400 }}>\n Import\n <Typography.Text strong>{dataSource.length}</Typography.Text>\n variables\n <Divider type=\"vertical\" />\n <Typography.Text strong>{sideEffects.length}</Typography.Text>\n sideEffects\n </Space>\n </React.Fragment>\n );\n\n return (\n <Card\n style={{ marginBottom: 10 }}\n title={titleInfo}\n className=\"tree-shaking-export-table\"\n >\n <Table\n size=\"small\"\n dataSource={dataSource}\n columns={columns}\n pagination={false}\n scroll={{ y: tableHeight }}\n />\n </Card>\n );\n};\n\nexport const ExportTable: React.FC<TableProps> = ({\n module,\n moduleGraph,\n setEditorData,\n}) => {\n const exportsData = useMemo(\n () => moduleGraph.getModuleGraphModule(module)!.getExports(),\n [module],\n );\n const allUnUsedExports = exportsData.filter(\n (item) => item.getSideEffects().length === 0,\n );\n const titleInfo = (\n <React.Fragment>\n <Space style={{ fontWeight: 400 }}>\n Export\n <Typography.Text strong>{exportsData.length}</Typography.Text>\n </Space>\n {exportsData.length > 0 ? (\n <>\n <Divider type=\"vertical\" />\n <Typography.Text style={{ fontWeight: 400 }} code>\n <Typography.Text>Unused</Typography.Text>\n <Divider type=\"vertical\" />\n <Typography.Text strong>{allUnUsedExports.length}</Typography.Text>\n </Typography.Text>\n <Divider type=\"vertical\" />\n <Typography.Text style={{ fontWeight: 400 }} code>\n <Typography.Text>Used</Typography.Text>\n <Divider type=\"vertical\" />\n <Typography.Text strong>\n {exportsData.length - allUnUsedExports.length}\n </Typography.Text>\n </Typography.Text>\n </>\n ) : (\n ''\n )}\n </React.Fragment>\n );\n\n interface RowData {\n key: number;\n name: string;\n declaration?: SDK.StatementInstance;\n used: {\n module: SDK.ModuleInstance;\n range: SDK.SourceRange;\n }[];\n }\n\n const dataSource: RowData[] = exportsData.map((item, i) => {\n const { variable } = item;\n\n return {\n key: i,\n name: item.name,\n declaration: variable?.identifier,\n used: item\n .getSideEffects()\n .map(({ module, identifier }) => {\n const range = module?.isPreferSource\n ? identifier.position.source\n : identifier.position.transformed;\n\n if (!module || !range) {\n return;\n }\n\n return {\n module,\n range,\n };\n })\n .filter(isDef),\n };\n });\n\n const columns: ColumnType<any>[] = [\n {\n title: 'Name',\n dataIndex: 'name',\n key: 'name',\n align: 'center',\n ...useSearchCell<SDK.ExportInstance>('name'),\n },\n {\n title: 'Declaration',\n dataIndex: 'declaration',\n key: 'declaration',\n align: 'center',\n render: (val?: SDK.StatementInstance) => {\n return getDeclarationElement(val, setEditorData);\n },\n },\n {\n title: 'Info',\n dataIndex: 'used',\n key: 'used',\n align: 'center',\n sorter: (a: RowData, b: RowData) => a.used.length - b.used.length,\n sortDirections: ['descend', 'ascend'],\n render: (val: RowData['used']) => <span>Used {val.length} times</span>,\n },\n ];\n\n const expandElement = (data: any) => {\n return (\n <div className=\"tree-shaking-side-effect-list\">\n <Typography.Text>List of SideEffect:</Typography.Text>\n {data.used.map(({ module, range }: any) => (\n <Tooltip key={module.id} title={`${module.path}:${range.start.line}`}>\n <Button\n className=\"tree-shaking-side-effect-list-item\"\n type=\"link\"\n onClick={() => {\n setEditorData(module, [range], range.start.line);\n }}\n >\n {`${ellipsisPath(module.path)}:${range.start.line}`}\n </Button>\n </Tooltip>\n ))}\n </div>\n );\n };\n\n return (\n <Card title={titleInfo} className=\"tree-shaking-export-table\">\n <Table\n size=\"small\"\n dataSource={dataSource}\n columns={columns}\n pagination={false}\n scroll={{ y: tableHeight }}\n expandable={{\n expandedRowRender: expandElement,\n rowExpandable: (val: any) => val.used.length > 0,\n }}\n />\n </Card>\n );\n};\n\nexport const TreeShakingTable: React.FC<TableProps> = (props) => {\n return props.kind === 'side-effect' ? (\n <SideEffectTable {...props} />\n ) : (\n <ExportTable {...props} />\n );\n};\n"],"names":["tableHeight","getDeclarationElement","val","setEditorData","module","range","Tooltip","Button","useSearchCell","dataIndex","searchText","setSearchText","useState","searchedColumn","setSearchedColumn","searchInput","useRef","handleSearch","selectedKeys","confirm","handleReset","clearFilters","setSelectedKeys","close","e","Input","Space","SearchOutlined","filtered","undefined","value","record","text","Highlighter","SideEffectTable","moduleGraph","sideEffects","useMemo","dataSource","variable","name","identifier","i","pre","next","ans","item","lastItem","columns","titleInfo","React","Typography","Divider","Card","Table","ExportTable","exportsData","allUnUsedExports","isDef","a","b","expandElement","data","ellipsisPath","TreeShakingTable","props"],"mappings":"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"}