@rsdoctor/components 1.3.7 → 1.3.9

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 (281) hide show
  1. package/dist/common/imgs/connection-point.mjs.map +1 -1
  2. package/dist/common/imgs/webpack.mjs.map +1 -1
  3. package/dist/common/svg/bundle-size.mjs.map +1 -1
  4. package/dist/common/svg/error.mjs.map +1 -1
  5. package/dist/common/svg/file-css.mjs.map +1 -1
  6. package/dist/common/svg/file-html.mjs.map +1 -1
  7. package/dist/common/svg/file-image.mjs.map +1 -1
  8. package/dist/common/svg/file-js.mjs.map +1 -1
  9. package/dist/common/svg/file-unknown.mjs.map +1 -1
  10. package/dist/common/svg/file.mjs.map +1 -1
  11. package/dist/common/svg/files/css.mjs.map +1 -1
  12. package/dist/common/svg/files/html.mjs.map +1 -1
  13. package/dist/common/svg/files/image.mjs.map +1 -1
  14. package/dist/common/svg/files/js.mjs.map +1 -1
  15. package/dist/common/svg/files/unkown-file.mjs.map +1 -1
  16. package/dist/common/svg/loader/input.mjs.map +1 -1
  17. package/dist/common/svg/loader/output.mjs.map +1 -1
  18. package/dist/common/svg/loader/step.mjs.map +1 -1
  19. package/dist/common/svg/navbar/bundle-size-active.mjs.map +1 -1
  20. package/dist/common/svg/navbar/bundle-size-inactive.mjs.map +1 -1
  21. package/dist/common/svg/navbar/compile-analysis-active.mjs.map +1 -1
  22. package/dist/common/svg/navbar/compile-analysis-inactive.mjs.map +1 -1
  23. package/dist/common/svg/navbar/overall-active.mjs.map +1 -1
  24. package/dist/common/svg/navbar/overall-inactive.mjs.map +1 -1
  25. package/dist/common/svg/output.mjs.map +1 -1
  26. package/dist/common/svg/source-size.mjs.map +1 -1
  27. package/dist/common/svg/source.mjs.map +1 -1
  28. package/dist/common/svg/total-size.mjs.map +1 -1
  29. package/dist/common/svg/version.mjs.map +1 -1
  30. package/dist/components/Alert/change.d.ts +1 -1
  31. package/dist/components/Alert/change.mjs.map +1 -1
  32. package/dist/components/Alert/ecma-version-check.d.ts +1 -1
  33. package/dist/components/Alert/ecma-version-check.mjs.map +1 -1
  34. package/dist/components/Alert/ecma-version-check.module.mjs.map +1 -1
  35. package/dist/components/Alert/file-relation.d.ts +1 -1
  36. package/dist/components/Alert/file-relation.mjs.map +1 -1
  37. package/dist/components/Alert/package-relation.d.ts +1 -1
  38. package/dist/components/Alert/package-relation.mjs.map +1 -1
  39. package/dist/components/Alert/package-relation.module.mjs.map +1 -1
  40. package/dist/components/Alert/view.d.ts +1 -1
  41. package/dist/components/Alert/view.mjs.map +1 -1
  42. package/dist/components/Alerts/bundle-alert.d.ts +2 -2
  43. package/dist/components/Alerts/bundle-alert.mjs.map +1 -1
  44. package/dist/components/Alerts/bundle-alert.module.mjs.map +1 -1
  45. package/dist/components/Alerts/bundle.mjs.map +1 -1
  46. package/dist/components/Alerts/collapse-cross-chunks.d.ts +1 -1
  47. package/dist/components/Alerts/collapse-cross-chunks.mjs.map +1 -1
  48. package/dist/components/Alerts/collapse.d.ts +1 -1
  49. package/dist/components/Alerts/collapse.mjs.map +1 -1
  50. package/dist/components/Alerts/collapse.module.mjs.map +1 -1
  51. package/dist/components/Alerts/compile.mjs.map +1 -1
  52. package/dist/components/Alerts/index.d.ts +3 -3
  53. package/dist/components/Alerts/list.mjs.map +1 -1
  54. package/dist/components/Alerts/list.module.mjs.map +1 -1
  55. package/dist/components/Alerts/overlay.mjs.map +1 -1
  56. package/dist/components/Alerts/overlay.module.mjs.map +1 -1
  57. package/dist/components/Badge/index.mjs.map +1 -1
  58. package/dist/components/Card/diff.d.ts +1 -1
  59. package/dist/components/Card/diff.mjs.map +1 -1
  60. package/dist/components/Card/index.d.ts +1 -1
  61. package/dist/components/Card/index.mjs.map +1 -1
  62. package/dist/components/Card/size.mjs.map +1 -1
  63. package/dist/components/Card/size.module.mjs.map +1 -1
  64. package/dist/components/Card/statistic.mjs.map +1 -1
  65. package/dist/components/Charts/TimelineCharts/index.d.ts +2 -2
  66. package/dist/components/Charts/TimelineCharts/index.mjs.map +1 -1
  67. package/dist/components/Charts/TreeMap.mjs.map +1 -1
  68. package/dist/components/Charts/bootstrap.d.ts +1 -1
  69. package/dist/components/Charts/bootstrap.mjs.map +1 -1
  70. package/dist/components/Charts/common.d.ts +2 -2
  71. package/dist/components/Charts/common.mjs.map +1 -1
  72. package/dist/components/Charts/constants.mjs.map +1 -1
  73. package/dist/components/Charts/done.d.ts +1 -1
  74. package/dist/components/Charts/done.mjs.map +1 -1
  75. package/dist/components/Charts/index.mjs.map +1 -1
  76. package/dist/components/Charts/loader.d.ts +1 -1
  77. package/dist/components/Charts/loader.mjs.map +1 -1
  78. package/dist/components/Charts/minify.d.ts +1 -1
  79. package/dist/components/Charts/minify.mjs.map +1 -1
  80. package/dist/components/Charts/treemap.module.mjs.map +1 -1
  81. package/dist/components/Charts/types.mjs.map +1 -1
  82. package/dist/components/Charts/utils.d.ts +1 -1
  83. package/dist/components/Charts/utils.mjs.map +1 -1
  84. package/dist/components/Configuration/builder.mjs.map +1 -1
  85. package/dist/components/Configuration/builder.module.mjs.map +1 -1
  86. package/dist/components/Configuration/index.d.ts +1 -1
  87. package/dist/components/FileTree/css.mjs.map +1 -1
  88. package/dist/components/FileTree/html.mjs.map +1 -1
  89. package/dist/components/FileTree/image.mjs.map +1 -1
  90. package/dist/components/FileTree/index.mjs.map +1 -1
  91. package/dist/components/FileTree/js.mjs.map +1 -1
  92. package/dist/components/FileTree/unkown-file.mjs.map +1 -1
  93. package/dist/components/Form/keyword.mjs.map +1 -1
  94. package/dist/components/Keyword/index.mjs.map +1 -1
  95. package/dist/components/Keyword/style.module.mjs.map +1 -1
  96. package/dist/components/Layout/builder-select.mjs.map +1 -1
  97. package/dist/components/Layout/bundle-size-icon.mjs.map +1 -1
  98. package/dist/components/Layout/compile-icon.mjs.map +1 -1
  99. package/dist/components/Layout/constants.mjs.map +1 -1
  100. package/dist/components/Layout/header.mjs.map +1 -1
  101. package/dist/components/Layout/index.mjs.map +1 -1
  102. package/dist/components/Layout/menus.mjs.map +1 -1
  103. package/dist/components/Layout/overall-icon.mjs.map +1 -1
  104. package/dist/components/Layout/progress.mjs.map +1 -1
  105. package/dist/components/Loader/Analysis/files.mjs.map +1 -1
  106. package/dist/components/Loader/Analysis/index.mjs.map +1 -1
  107. package/dist/components/Loader/Analysis/input.mjs.map +1 -1
  108. package/dist/components/Loader/Analysis/output.mjs.map +1 -1
  109. package/dist/components/Loader/Analysis/style.module.mjs.map +1 -1
  110. package/dist/components/Loader/executions.mjs.map +1 -1
  111. package/dist/components/Loader/step.mjs.map +1 -1
  112. package/dist/components/Manifest/api.mjs.map +1 -1
  113. package/dist/components/Manifest/data.mjs.map +1 -1
  114. package/dist/components/Manifest/index.d.ts +2 -2
  115. package/dist/components/Opener/code.mjs.map +1 -1
  116. package/dist/components/Opener/index.d.ts +2 -2
  117. package/dist/components/Opener/vscode.mjs.map +1 -1
  118. package/dist/components/Overall/DataSummary.mjs.map +1 -1
  119. package/dist/components/Overall/DataSummary.module.mjs.map +1 -1
  120. package/dist/components/Overall/bundle.mjs.map +1 -1
  121. package/dist/components/Overall/bundle.module.mjs.map +1 -1
  122. package/dist/components/Overall/card.module.mjs.map +1 -1
  123. package/dist/components/Overall/compile.mjs.map +1 -1
  124. package/dist/components/Overall/compile.module.mjs.map +1 -1
  125. package/dist/components/Overall/help-center.mjs.map +1 -1
  126. package/dist/components/Overall/help-center.module.mjs.map +1 -1
  127. package/dist/components/Overall/index.d.ts +3 -3
  128. package/dist/components/Overall/list.module.mjs.map +1 -1
  129. package/dist/components/Overall/overview.mjs.map +1 -1
  130. package/dist/components/Overall/overview.module.mjs.map +1 -1
  131. package/dist/components/Overall/project.mjs.map +1 -1
  132. package/dist/components/Overall/project.module.mjs.map +1 -1
  133. package/dist/components/Plugins/webpack.mjs.map +1 -1
  134. package/dist/components/Resolver/analysis.mjs.map +1 -1
  135. package/dist/components/Select/index.mjs.map +1 -1
  136. package/dist/components/Status/failed.mjs.map +1 -1
  137. package/dist/components/Status/index.d.ts +1 -1
  138. package/dist/components/TextDrawer/duplicate.d.ts +2 -2
  139. package/dist/components/TextDrawer/duplicate.mjs.map +1 -1
  140. package/dist/components/TextDrawer/index.d.ts +1 -1
  141. package/dist/components/TextDrawer/index.mjs.map +1 -1
  142. package/dist/components/Title/index.mjs.map +1 -1
  143. package/dist/components/base/CodeViewer/index.d.ts +4 -4
  144. package/dist/components/base/CodeViewer/index.mjs.map +1 -1
  145. package/dist/components/base/CodeViewer/index.module.mjs.map +1 -1
  146. package/dist/components/base/CodeViewer/useCodeDrawer.d.ts +1 -1
  147. package/dist/components/base/CodeViewer/useCodeDrawer.mjs.map +1 -1
  148. package/dist/components/base/CodeViewer/utils.mjs.map +1 -1
  149. package/dist/components/base/DiffViewer/index.d.ts +4 -4
  150. package/dist/components/base/DiffViewer/index.mjs.map +1 -1
  151. package/dist/components/base/DiffViewer/index.module.mjs.map +1 -1
  152. package/dist/components/base/DiffViewer/useDiffDrawer.d.ts +1 -1
  153. package/dist/components/base/DiffViewer/useDiffDrawer.mjs.map +1 -1
  154. package/dist/components/base/DiffViewer/utils.mjs.map +1 -1
  155. package/dist/components/base/index.d.ts +2 -2
  156. package/dist/components/index.d.ts +10 -10
  157. package/dist/config.d.ts +1 -1
  158. package/dist/config.mjs.map +1 -1
  159. package/dist/constants.mjs.map +1 -1
  160. package/dist/index.d.ts +3 -3
  161. package/dist/pages/BundleSize/components/asset.d.ts +1 -1
  162. package/dist/pages/BundleSize/components/asset.mjs.map +1 -1
  163. package/dist/pages/BundleSize/components/card.module.mjs.map +1 -1
  164. package/dist/pages/BundleSize/components/cards.mjs.map +1 -1
  165. package/dist/pages/BundleSize/components/index.mjs.map +1 -1
  166. package/dist/pages/BundleSize/components/index.module.mjs.map +1 -1
  167. package/dist/pages/BundleSize/components/search-modal.mjs.map +1 -1
  168. package/dist/pages/BundleSize/config.mjs.map +1 -1
  169. package/dist/pages/BundleSize/constants.mjs.map +1 -1
  170. package/dist/pages/BundleSize/index.d.ts +1 -1
  171. package/dist/pages/BundleSize/index.mjs.map +1 -1
  172. package/dist/pages/ModuleAnalyze/chunks.mjs.map +1 -1
  173. package/dist/pages/ModuleAnalyze/components/fileTreeCom.d.ts +1 -1
  174. package/dist/pages/ModuleAnalyze/components/fileTreeCom.mjs.map +1 -1
  175. package/dist/pages/ModuleAnalyze/constants.mjs.map +1 -1
  176. package/dist/pages/ModuleAnalyze/dependency.mjs.map +1 -1
  177. package/dist/pages/ModuleAnalyze/fileTree.mjs.map +1 -1
  178. package/dist/pages/ModuleAnalyze/index.mjs.map +1 -1
  179. package/dist/pages/ModuleAnalyze/utils/hooks.mjs.map +1 -1
  180. package/dist/pages/ModuleAnalyze/utils/index.mjs.map +1 -1
  181. package/dist/pages/ModuleResolve/constants.mjs.map +1 -1
  182. package/dist/pages/ModuleResolve/index.d.ts +1 -1
  183. package/dist/pages/ModuleResolve/index.mjs.map +1 -1
  184. package/dist/pages/Overall/constants.mjs.map +1 -1
  185. package/dist/pages/Overall/index.d.ts +1 -1
  186. package/dist/pages/Overall/index.mjs.map +1 -1
  187. package/dist/pages/Overall/index.module.mjs.map +1 -1
  188. package/dist/pages/Overall/responsiveLayout.mjs.map +1 -1
  189. package/dist/pages/Resources/BundleDiff/DiffContainer/assets.mjs.map +1 -1
  190. package/dist/pages/Resources/BundleDiff/DiffContainer/cards.d.ts +1 -1
  191. package/dist/pages/Resources/BundleDiff/DiffContainer/cards.mjs.map +1 -1
  192. package/dist/pages/Resources/BundleDiff/DiffContainer/changes.mjs.map +1 -1
  193. package/dist/pages/Resources/BundleDiff/DiffContainer/constants.mjs.map +1 -1
  194. package/dist/pages/Resources/BundleDiff/DiffContainer/index.d.ts +1 -1
  195. package/dist/pages/Resources/BundleDiff/DiffContainer/index.mjs.map +1 -1
  196. package/dist/pages/Resources/BundleDiff/DiffContainer/modules.d.ts +2 -2
  197. package/dist/pages/Resources/BundleDiff/DiffContainer/modules.mjs.map +1 -1
  198. package/dist/pages/Resources/BundleDiff/DiffContainer/overview.mjs.map +1 -1
  199. package/dist/pages/Resources/BundleDiff/DiffContainer/packages.d.ts +1 -1
  200. package/dist/pages/Resources/BundleDiff/DiffContainer/packages.mjs.map +1 -1
  201. package/dist/pages/Resources/BundleDiff/DiffContainer/row.d.ts +1 -1
  202. package/dist/pages/Resources/BundleDiff/DiffContainer/row.mjs.map +1 -1
  203. package/dist/pages/Resources/BundleDiff/DiffContainer/types.d.ts +2 -2
  204. package/dist/pages/Resources/BundleDiff/DiffContainer/utils.mjs.map +1 -1
  205. package/dist/pages/Resources/BundleDiff/DiffServerAPIProvider/index.d.ts +1 -1
  206. package/dist/pages/Resources/BundleDiff/DiffServerAPIProvider/index.mjs.map +1 -1
  207. package/dist/pages/Resources/BundleDiff/constants.mjs.map +1 -1
  208. package/dist/pages/Resources/BundleDiff/index.d.ts +2 -2
  209. package/dist/pages/Resources/BundleDiff/index.mjs.map +1 -1
  210. package/dist/pages/Resources/RuleIndex/constants.mjs.map +1 -1
  211. package/dist/pages/Resources/RuleIndex/index.d.ts +1 -1
  212. package/dist/pages/Resources/RuleIndex/index.mjs.map +1 -1
  213. package/dist/pages/TreeShaking/constants.mjs.map +1 -1
  214. package/dist/pages/TreeShaking/editor.d.ts +1 -1
  215. package/dist/pages/TreeShaking/editor.mjs.map +1 -1
  216. package/dist/pages/TreeShaking/index.d.ts +1 -1
  217. package/dist/pages/TreeShaking/index.mjs.map +1 -1
  218. package/dist/pages/TreeShaking/open-tag.mjs.map +1 -1
  219. package/dist/pages/TreeShaking/range.mjs.map +1 -1
  220. package/dist/pages/TreeShaking/space.mjs.map +1 -1
  221. package/dist/pages/TreeShaking/table.d.ts +1 -1
  222. package/dist/pages/TreeShaking/table.mjs.map +1 -1
  223. package/dist/pages/TreeShaking/utils.d.ts +1 -1
  224. package/dist/pages/TreeShaking/utils.mjs.map +1 -1
  225. package/dist/pages/Uploader/constants.mjs.map +1 -1
  226. package/dist/pages/Uploader/index.d.ts +1 -1
  227. package/dist/pages/Uploader/index.mjs.map +1 -1
  228. package/dist/pages/Uploader/utils.mjs.map +1 -1
  229. package/dist/pages/WebpackLoaders/Analysis/constants.mjs.map +1 -1
  230. package/dist/pages/WebpackLoaders/Analysis/index.d.ts +1 -1
  231. package/dist/pages/WebpackLoaders/Analysis/index.mjs.map +1 -1
  232. package/dist/pages/WebpackLoaders/Overall/constants.mjs.map +1 -1
  233. package/dist/pages/WebpackLoaders/Overall/index.d.ts +1 -1
  234. package/dist/pages/WebpackLoaders/Overall/index.mjs.map +1 -1
  235. package/dist/pages/WebpackLoaders/constants.mjs.map +1 -1
  236. package/dist/pages/WebpackPlugins/constants.mjs.map +1 -1
  237. package/dist/pages/WebpackPlugins/index.d.ts +1 -1
  238. package/dist/pages/WebpackPlugins/index.mjs.map +1 -1
  239. package/dist/pages/index.d.ts +11 -11
  240. package/dist/utils/data/base.mjs.map +1 -1
  241. package/dist/utils/data/brief.d.ts +1 -1
  242. package/dist/utils/data/brief.mjs.map +1 -1
  243. package/dist/utils/data/index.d.ts +1 -1
  244. package/dist/utils/data/index.mjs.map +1 -1
  245. package/dist/utils/data/local.d.ts +1 -1
  246. package/dist/utils/data/local.mjs.map +1 -1
  247. package/dist/utils/data/remote.d.ts +1 -1
  248. package/dist/utils/data/remote.mjs.map +1 -1
  249. package/dist/utils/file.mjs.map +1 -1
  250. package/dist/utils/hooks.d.ts +1 -1
  251. package/dist/utils/hooks.mjs +4 -3
  252. package/dist/utils/hooks.mjs.map +1 -1
  253. package/dist/utils/i18n/cn.d.ts +1 -1
  254. package/dist/utils/i18n/cn.mjs.map +1 -1
  255. package/dist/utils/i18n/en.mjs +3 -3
  256. package/dist/utils/i18n/en.mjs.map +1 -1
  257. package/dist/utils/i18n/index.mjs.map +1 -1
  258. package/dist/utils/index.d.ts +16 -16
  259. package/dist/utils/loader.mjs.map +1 -1
  260. package/dist/utils/locale.d.ts +1 -1
  261. package/dist/utils/locale.mjs.map +1 -1
  262. package/dist/utils/manifest.d.ts +4 -4
  263. package/dist/utils/manifest.mjs.map +1 -1
  264. package/dist/utils/request.mjs.map +1 -1
  265. package/dist/utils/routes.mjs.map +1 -1
  266. package/dist/utils/size.mjs.map +1 -1
  267. package/dist/utils/socket.mjs.map +1 -1
  268. package/dist/utils/stats.mjs.map +1 -1
  269. package/dist/utils/storage.d.ts +2 -2
  270. package/dist/utils/storage.mjs.map +1 -1
  271. package/dist/utils/string.mjs.map +1 -1
  272. package/dist/utils/time.mjs.map +1 -1
  273. package/dist/utils/url.mjs.map +1 -1
  274. package/dist/utils/worker/index.d.ts +4 -4
  275. package/dist/utils/worker/master.d.ts +2 -2
  276. package/dist/utils/worker/master.mjs.map +1 -1
  277. package/dist/utils/worker/utils.d.ts +1 -1
  278. package/dist/utils/worker/utils.mjs.map +1 -1
  279. package/dist/utils/worker/worker.d.ts +1 -1
  280. package/dist/utils/worker/worker.mjs.map +1 -1
  281. package/package.json +7 -7
@@ -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":["../../../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,6 +1,6 @@
1
1
  import { SDK } from '@rsdoctor/types';
2
2
  import type { editor } from 'monaco-editor';
3
- export declare function useFileStructures(modules: SDK.ModuleInstance[], moduleGraph: SDK.ModuleGraphInstance, searchInput: string, selectedModule: SDK.ModuleInstance, onItemClick: (file: string) => void, cwd: string): import("../..").DataNode[];
3
+ export declare function useFileStructures(modules: SDK.ModuleInstance[], moduleGraph: SDK.ModuleGraphInstance, searchInput: string, selectedModule: SDK.ModuleInstance, onItemClick: (file: string) => void, cwd: string): import("../../index.js").DataNode[];
4
4
  export declare function getTreeFilesDefaultExpandedKeys(files: any[]): (string | number)[];
5
5
  export declare function ellipsisPath(full: string): string;
6
6
  export declare function getModulePositionString(statement: SDK.StatementInstance, module: SDK.ModuleInstance): string;
@@ -1 +1 @@
1
- {"version":3,"file":"pages/TreeShaking/utils.mjs","sources":["webpack://@rsdoctor/components/./src/pages/TreeShaking/utils.tsx"],"sourcesContent":["import { Module } from '@rsdoctor/graph';\nimport { SDK } from '@rsdoctor/types';\nimport { Space, Tag } from 'antd';\nimport { escape, get } from 'es-toolkit/compat';\nimport type { editor, Range as RangeClass } from 'monaco-editor';\nimport path from 'path-browserify';\nimport { useMemo } from 'react';\nimport { getSelectionRange } from 'src/components/base/CodeViewer/utils';\nimport { Keyword } from '../../components/Keyword';\nimport { createFileStructures, mapFileKey } from '../../utils';\nimport { getOpenTagText } from './open-tag';\nimport { Range } from './range';\n\nexport function useFileStructures(\n modules: SDK.ModuleInstance[],\n moduleGraph: SDK.ModuleGraphInstance,\n searchInput: string,\n selectedModule: SDK.ModuleInstance,\n onItemClick: (file: string) => void,\n cwd: string,\n) {\n const files = useMemo(\n () =>\n createFileStructures({\n files: modules.map((item) => item.path),\n cwd,\n fileTitle(file, basename) {\n const module = moduleGraph\n .getModules()\n .find(\n (item) => item.path === file && item.kind === Module.kind.Normal,\n )!;\n const mgm = moduleGraph.getModuleGraphModule(module)!;\n const infos = mgm.getExports();\n const unused = infos.filter(\n (info) => info.getSideEffects().length === 0,\n );\n return (\n <Space style={{ wordBreak: 'break-all' }}>\n <Keyword\n text={basename}\n keyword={file}\n onClick={() => onItemClick(file)}\n />\n {mgm.dynamic ? <Tag color=\"cyan\">dynamic</Tag> : ''}\n {unused.length > 0 ? (\n <Tag color=\"green\">{unused.length} Unused</Tag>\n ) : (\n ''\n )}\n </Space>\n );\n },\n }),\n [searchInput, selectedModule],\n );\n\n return files;\n}\n\nexport function getTreeFilesDefaultExpandedKeys(files: any[]) {\n return mapFileKey(files, 3, (node) => {\n const resourcePath: string = get(node, '__RESOURCEPATH__')!;\n const isNodeModules = resourcePath.indexOf('/node_modules/') > -1;\n return !isNodeModules;\n });\n}\n\nexport function ellipsisPath(full: string) {\n let result = '';\n let current = full;\n\n for (let i = 0; i < 3; i++) {\n result = result\n ? `${path.basename(current)}/${result}`\n : path.basename(current);\n current = path.dirname(current);\n }\n\n return `...${result}`;\n}\n\nexport function getModulePositionString(\n statement: SDK.StatementInstance,\n module: SDK.ModuleInstance,\n) {\n const maxLen = 30;\n const { path, isPreferSource } = module;\n const start = isPreferSource\n ? statement.position.source!.start\n : statement.position.transformed.start;\n const suffix = `:${start.line ?? 1}:${start.column ?? 0}`;\n\n return path.length <= maxLen\n ? `${path}${suffix}`\n : `...${path.substring(path.length - 30)}${suffix}`;\n}\n\nexport function getHoverMessageInModule(\n module: SDK.ModuleInstance,\n moduleGraph: SDK.ModuleGraphInstance,\n) {\n const mgm = moduleGraph.getModuleGraphModule(module);\n /** 当前模块导出变量 */\n const exportLocals = mgm.getOwnExports();\n /** 当前模块声明变量 */\n const variables = exportLocals\n .map((item) => item.variable)\n .filter((item): item is SDK.VariableInstance => Boolean(item));\n\n if (exportLocals.length === 0 && variables.length === 0) {\n return [];\n }\n\n function getVariableMessage(data: SDK.VariableInstance) {\n const exportData = data.getExportInfo();\n\n if (!exportData) {\n return 'Can not find SideEffect info.';\n }\n\n const sideEffects = exportData.getSideEffects();\n\n if (sideEffects.length === 0) {\n return 'Have no sideEffect.';\n }\n\n /*\n * monaco hover html 代码允许的元素和标签\n * @link https://github.com/microsoft/vscode/blob/6d2920473c6f13759c978dd89104c4270a83422d/src/vs/base/browser/markdownRenderer.ts#L296-L317\n */\n\n let content = `Used **${sideEffects.length}** times:\\n\\n<div data-code=\"tree-shaking-hover\">\\n<li>`;\n\n for (const sideEffect of sideEffects) {\n if (!sideEffect) {\n continue;\n }\n\n const { identifier, module } = sideEffect;\n\n if (!module) {\n continue;\n }\n\n const { id, isPreferSource } = module;\n const lineCode = identifier.getLineCode();\n\n content += `\\n<ol>\n ${getOpenTagText(\n id,\n isPreferSource\n ? identifier.position.source!\n : identifier.position.transformed,\n getModulePositionString(identifier, module),\n )}\n ${lineCode ? `<pre>${escape(lineCode)}</pre>` : ''}\n </ol>`;\n }\n\n content += '\\n</li></div>';\n\n return content;\n }\n\n const { isPreferSource } = module;\n\n const declarationHovers = variables\n .map((item) => {\n const position = isPreferSource\n ? item.identifier.position.source\n : item.identifier.position.transformed;\n const range =\n position &&\n getSelectionRange(position, Range as unknown as typeof RangeClass);\n\n if (!position || !range) {\n return;\n }\n\n return {\n range,\n options: {\n stickiness: 1,\n inlineClassName: 'tree-shaking-statement-declaration-identifier',\n isWholeLine: false,\n showIfCollapsed: true,\n hoverMessage: {\n supportHtml: true,\n supportThemeIcons: true,\n isTrusted: true,\n value: getVariableMessage(item),\n },\n },\n } as unknown as editor.IModelDecoration;\n })\n .filter((item): item is editor.IModelDecoration => Boolean(item));\n\n /**\n * 导出部分的信息,需要先过滤声明和导出位置重叠的部分\n * export { foo };\n * export { foo } from 'foo';\n * export * as name from 'foo';\n * export * from 'foo';\n * 最后一种需要合并位置\n */\n\n return declarationHovers;\n}\n"],"names":["useFileStructures","modules","moduleGraph","searchInput","selectedModule","onItemClick","cwd","files","useMemo","createFileStructures","item","file","basename","module","Module","mgm","infos","unused","info","Space","Keyword","Tag","getTreeFilesDefaultExpandedKeys","mapFileKey","node","resourcePath","get","isNodeModules","ellipsisPath","full","result","current","i","path","getModulePositionString","statement","maxLen","isPreferSource","start","suffix","getHoverMessageInModule","exportLocals","variables","Boolean","getVariableMessage","data","exportData","sideEffects","content","sideEffect","identifier","id","lineCode","getOpenTagText","escape","declarationHovers","position","range","getSelectionRange","Range"],"mappings":"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"}
1
+ {"version":3,"file":"pages/TreeShaking/utils.mjs","sources":["../../../src/pages/TreeShaking/utils.tsx"],"sourcesContent":["import { Module } from '@rsdoctor/graph';\nimport { SDK } from '@rsdoctor/types';\nimport { Space, Tag } from 'antd';\nimport { escape, get } from 'es-toolkit/compat';\nimport type { editor, Range as RangeClass } from 'monaco-editor';\nimport path from 'path-browserify';\nimport { useMemo } from 'react';\nimport { getSelectionRange } from 'src/components/base/CodeViewer/utils';\nimport { Keyword } from '../../components/Keyword';\nimport { createFileStructures, mapFileKey } from '../../utils';\nimport { getOpenTagText } from './open-tag';\nimport { Range } from './range';\n\nexport function useFileStructures(\n modules: SDK.ModuleInstance[],\n moduleGraph: SDK.ModuleGraphInstance,\n searchInput: string,\n selectedModule: SDK.ModuleInstance,\n onItemClick: (file: string) => void,\n cwd: string,\n) {\n const files = useMemo(\n () =>\n createFileStructures({\n files: modules.map((item) => item.path),\n cwd,\n fileTitle(file, basename) {\n const module = moduleGraph\n .getModules()\n .find(\n (item) => item.path === file && item.kind === Module.kind.Normal,\n )!;\n const mgm = moduleGraph.getModuleGraphModule(module)!;\n const infos = mgm.getExports();\n const unused = infos.filter(\n (info) => info.getSideEffects().length === 0,\n );\n return (\n <Space style={{ wordBreak: 'break-all' }}>\n <Keyword\n text={basename}\n keyword={file}\n onClick={() => onItemClick(file)}\n />\n {mgm.dynamic ? <Tag color=\"cyan\">dynamic</Tag> : ''}\n {unused.length > 0 ? (\n <Tag color=\"green\">{unused.length} Unused</Tag>\n ) : (\n ''\n )}\n </Space>\n );\n },\n }),\n [searchInput, selectedModule],\n );\n\n return files;\n}\n\nexport function getTreeFilesDefaultExpandedKeys(files: any[]) {\n return mapFileKey(files, 3, (node) => {\n const resourcePath: string = get(node, '__RESOURCEPATH__')!;\n const isNodeModules = resourcePath.indexOf('/node_modules/') > -1;\n return !isNodeModules;\n });\n}\n\nexport function ellipsisPath(full: string) {\n let result = '';\n let current = full;\n\n for (let i = 0; i < 3; i++) {\n result = result\n ? `${path.basename(current)}/${result}`\n : path.basename(current);\n current = path.dirname(current);\n }\n\n return `...${result}`;\n}\n\nexport function getModulePositionString(\n statement: SDK.StatementInstance,\n module: SDK.ModuleInstance,\n) {\n const maxLen = 30;\n const { path, isPreferSource } = module;\n const start = isPreferSource\n ? statement.position.source!.start\n : statement.position.transformed.start;\n const suffix = `:${start.line ?? 1}:${start.column ?? 0}`;\n\n return path.length <= maxLen\n ? `${path}${suffix}`\n : `...${path.substring(path.length - 30)}${suffix}`;\n}\n\nexport function getHoverMessageInModule(\n module: SDK.ModuleInstance,\n moduleGraph: SDK.ModuleGraphInstance,\n) {\n const mgm = moduleGraph.getModuleGraphModule(module);\n /** 当前模块导出变量 */\n const exportLocals = mgm.getOwnExports();\n /** 当前模块声明变量 */\n const variables = exportLocals\n .map((item) => item.variable)\n .filter((item): item is SDK.VariableInstance => Boolean(item));\n\n if (exportLocals.length === 0 && variables.length === 0) {\n return [];\n }\n\n function getVariableMessage(data: SDK.VariableInstance) {\n const exportData = data.getExportInfo();\n\n if (!exportData) {\n return 'Can not find SideEffect info.';\n }\n\n const sideEffects = exportData.getSideEffects();\n\n if (sideEffects.length === 0) {\n return 'Have no sideEffect.';\n }\n\n /*\n * monaco hover html 代码允许的元素和标签\n * @link https://github.com/microsoft/vscode/blob/6d2920473c6f13759c978dd89104c4270a83422d/src/vs/base/browser/markdownRenderer.ts#L296-L317\n */\n\n let content = `Used **${sideEffects.length}** times:\\n\\n<div data-code=\"tree-shaking-hover\">\\n<li>`;\n\n for (const sideEffect of sideEffects) {\n if (!sideEffect) {\n continue;\n }\n\n const { identifier, module } = sideEffect;\n\n if (!module) {\n continue;\n }\n\n const { id, isPreferSource } = module;\n const lineCode = identifier.getLineCode();\n\n content += `\\n<ol>\n ${getOpenTagText(\n id,\n isPreferSource\n ? identifier.position.source!\n : identifier.position.transformed,\n getModulePositionString(identifier, module),\n )}\n ${lineCode ? `<pre>${escape(lineCode)}</pre>` : ''}\n </ol>`;\n }\n\n content += '\\n</li></div>';\n\n return content;\n }\n\n const { isPreferSource } = module;\n\n const declarationHovers = variables\n .map((item) => {\n const position = isPreferSource\n ? item.identifier.position.source\n : item.identifier.position.transformed;\n const range =\n position &&\n getSelectionRange(position, Range as unknown as typeof RangeClass);\n\n if (!position || !range) {\n return;\n }\n\n return {\n range,\n options: {\n stickiness: 1,\n inlineClassName: 'tree-shaking-statement-declaration-identifier',\n isWholeLine: false,\n showIfCollapsed: true,\n hoverMessage: {\n supportHtml: true,\n supportThemeIcons: true,\n isTrusted: true,\n value: getVariableMessage(item),\n },\n },\n } as unknown as editor.IModelDecoration;\n })\n .filter((item): item is editor.IModelDecoration => Boolean(item));\n\n /**\n * 导出部分的信息,需要先过滤声明和导出位置重叠的部分\n * export { foo };\n * export { foo } from 'foo';\n * export * as name from 'foo';\n * export * from 'foo';\n * 最后一种需要合并位置\n */\n\n return declarationHovers;\n}\n"],"names":["useFileStructures","modules","moduleGraph","searchInput","selectedModule","onItemClick","cwd","files","useMemo","createFileStructures","item","file","basename","module","Module","mgm","infos","unused","info","Space","Keyword","Tag","getTreeFilesDefaultExpandedKeys","mapFileKey","node","resourcePath","get","isNodeModules","ellipsisPath","full","result","current","i","path","getModulePositionString","statement","maxLen","isPreferSource","start","suffix","getHoverMessageInModule","exportLocals","variables","Boolean","getVariableMessage","data","exportData","sideEffects","content","sideEffect","identifier","id","lineCode","getOpenTagText","escape","declarationHovers","position","range","getSelectionRange","Range"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"pages/Uploader/constants.mjs","sources":["webpack://@rsdoctor/components/./src/pages/Uploader/constants.ts"],"sourcesContent":["import { Client } from '@rsdoctor/types';\n\nexport const name = 'Upload and Analysis';\n\nexport const route = Client.RsdoctorClientRoutes.Uploader;\n"],"names":["name","route","Client"],"mappings":";AAEO,MAAMA,iBAAO;AAEb,MAAMC,QAAQC,OAAO,oBAAoB,CAAC,QAAQ"}
1
+ {"version":3,"file":"pages/Uploader/constants.mjs","sources":["../../../src/pages/Uploader/constants.ts"],"sourcesContent":["import { Client } from '@rsdoctor/types';\n\nexport const name = 'Upload and Analysis';\n\nexport const route = Client.RsdoctorClientRoutes.Uploader;\n"],"names":["name","route","Client"],"mappings":";AAEO,MAAMA,iBAAO;AAEb,MAAMC,QAAQC,OAAO,oBAAoB,CAAC,QAAQ"}
@@ -1,3 +1,3 @@
1
1
  import React from 'react';
2
2
  export declare const Page: React.FC<{}>;
3
- export * from './constants';
3
+ export * from './constants.js';
@@ -1 +1 @@
1
- {"version":3,"file":"pages/Uploader/index.mjs","sources":["webpack://@rsdoctor/components/./src/pages/Uploader/index.tsx"],"sourcesContent":["import { InboxOutlined } from '@ant-design/icons';\nimport { Common } from '@rsdoctor/types';\nimport { message, Spin, Upload, UploadFile } from 'antd';\nimport React, { useState } from 'react';\nimport { readJSONByFileReader } from '../../utils';\nimport { isRspackStats } from '../../utils/stats';\nimport { handleRspackStats, handleRsdoctorManifest } from './utils';\n\nconst Component: React.FC = () => {\n const [loading, setLoading] = useState(false);\n\n // Main file upload processing function\n const handleFileUpload = async (file: UploadFile) => {\n if (!file) return;\n\n setLoading(true);\n\n try {\n const json = await readJSONByFileReader<Common.PlainObject>(file);\n\n if (!json || typeof json !== 'object') {\n throw new Error('Invalid JSON format');\n }\n\n if (isRspackStats(json)) {\n await handleRspackStats(json);\n } else {\n handleRsdoctorManifest(json);\n }\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Unknown error';\n message.error(`Upload failed: ${errorMessage}`);\n console.error('Upload error:', err);\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <Spin spinning={loading} tip=\"uploading...\">\n <Upload.Dragger\n multiple={false}\n showUploadList={false}\n accept=\".json\"\n onChange={({ file }) => {\n handleFileUpload(file);\n }}\n style={{ width: '100%' }}\n beforeUpload={() => false}\n >\n <p className=\"ant-upload-drag-icon\">\n <InboxOutlined />\n </p>\n <p className=\"ant-upload-text\">\n Click or drag JSON file to this area to upload and analyze your\n stats.json or rsdoctor's rsdoctor-data.json.\n </p>\n <p className=\"ant-upload-hint\">\n The rsdoctor's rsdoctor-data.json is in brief mode, and use the file\n type: ['json'].\n <a\n href=\"https://rsdoctor.rs/zh/config/options/output#mode-brief\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Check the details.\n </a>\n </p>\n <p className=\"ant-upload-hint\">\n By default, Rsdoctor will emit the rsdoctor-data.json to the output\n folder.\n </p>\n </Upload.Dragger>\n </Spin>\n );\n};\n\nexport const Page = Component;\nexport * from './constants';\n"],"names":["Component","loading","setLoading","useState","handleFileUpload","file","json","readJSONByFileReader","Error","isRspackStats","handleRspackStats","handleRsdoctorManifest","err","errorMessage","message","console","Spin","Upload","InboxOutlined","Page"],"mappings":";;;;;;;;AAQA,MAAMA,YAAsB;IAC1B,MAAM,CAACC,SAASC,WAAW,GAAGC,SAAS;IAGvC,MAAMC,mBAAmB,OAAOC;QAC9B,IAAI,CAACA,MAAM;QAEXH,WAAW;QAEX,IAAI;YACF,MAAMI,OAAO,MAAMC,qBAAyCF;YAE5D,IAAI,CAACC,QAAQ,AAAgB,YAAhB,OAAOA,MAClB,MAAM,IAAIE,MAAM;YAGlB,IAAIC,cAAcH,OAChB,MAAMI,kBAAkBJ;iBAExBK,uBAAuBL;QAE3B,EAAE,OAAOM,KAAK;YACZ,MAAMC,eAAeD,eAAeJ,QAAQI,IAAI,OAAO,GAAG;YAC1DE,QAAQ,KAAK,CAAC,CAAC,eAAe,EAAED,cAAc;YAC9CE,QAAQ,KAAK,CAAC,iBAAiBH;QACjC,SAAU;YACRV,WAAW;QACb;IACF;IAEA,OAAO,WAAP,GACE,IAACc,MAAIA;QAAC,UAAUf;QAAS,KAAI;kBAC3B,mBAACgB,OAAO,OAAO;YACb,UAAU;YACV,gBAAgB;YAChB,QAAO;YACP,UAAU,CAAC,EAAEZ,IAAI,EAAE;gBACjBD,iBAAiBC;YACnB;YACA,OAAO;gBAAE,OAAO;YAAO;YACvB,cAAc,IAAM;;8BAEpB,IAAC;oBAAE,WAAU;8BACX,kBAACa,eAAaA,CAAAA;;8BAEhB,IAAC;oBAAE,WAAU;8BAAkB;;8BAI/B,KAAC;oBAAE,WAAU;;wBAAkB;sCAG7B,IAAC;4BACC,MAAK;4BACL,QAAO;4BACP,KAAI;sCACL;;;;8BAIH,IAAC;oBAAE,WAAU;8BAAkB;;;;;AAOvC;AAEO,MAAMC,OAAOnB"}
1
+ {"version":3,"file":"pages/Uploader/index.mjs","sources":["../../../src/pages/Uploader/index.tsx"],"sourcesContent":["import { InboxOutlined } from '@ant-design/icons';\nimport { Common } from '@rsdoctor/types';\nimport { message, Spin, Upload, UploadFile } from 'antd';\nimport React, { useState } from 'react';\nimport { readJSONByFileReader } from '../../utils';\nimport { isRspackStats } from '../../utils/stats';\nimport { handleRspackStats, handleRsdoctorManifest } from './utils';\n\nconst Component: React.FC = () => {\n const [loading, setLoading] = useState(false);\n\n // Main file upload processing function\n const handleFileUpload = async (file: UploadFile) => {\n if (!file) return;\n\n setLoading(true);\n\n try {\n const json = await readJSONByFileReader<Common.PlainObject>(file);\n\n if (!json || typeof json !== 'object') {\n throw new Error('Invalid JSON format');\n }\n\n if (isRspackStats(json)) {\n await handleRspackStats(json);\n } else {\n handleRsdoctorManifest(json);\n }\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Unknown error';\n message.error(`Upload failed: ${errorMessage}`);\n console.error('Upload error:', err);\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <Spin spinning={loading} tip=\"uploading...\">\n <Upload.Dragger\n multiple={false}\n showUploadList={false}\n accept=\".json\"\n onChange={({ file }) => {\n handleFileUpload(file);\n }}\n style={{ width: '100%' }}\n beforeUpload={() => false}\n >\n <p className=\"ant-upload-drag-icon\">\n <InboxOutlined />\n </p>\n <p className=\"ant-upload-text\">\n Click or drag JSON file to this area to upload and analyze your\n stats.json or rsdoctor's rsdoctor-data.json.\n </p>\n <p className=\"ant-upload-hint\">\n The rsdoctor's rsdoctor-data.json is in brief mode, and use the file\n type: ['json'].\n <a\n href=\"https://rsdoctor.rs/zh/config/options/output#mode-brief\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Check the details.\n </a>\n </p>\n <p className=\"ant-upload-hint\">\n By default, Rsdoctor will emit the rsdoctor-data.json to the output\n folder.\n </p>\n </Upload.Dragger>\n </Spin>\n );\n};\n\nexport const Page = Component;\nexport * from './constants';\n"],"names":["Component","loading","setLoading","useState","handleFileUpload","file","json","readJSONByFileReader","Error","isRspackStats","handleRspackStats","handleRsdoctorManifest","err","errorMessage","message","console","Spin","Upload","InboxOutlined","Page"],"mappings":";;;;;;;;AAQA,MAAMA,YAAsB;IAC1B,MAAM,CAACC,SAASC,WAAW,GAAGC,SAAS;IAGvC,MAAMC,mBAAmB,OAAOC;QAC9B,IAAI,CAACA,MAAM;QAEXH,WAAW;QAEX,IAAI;YACF,MAAMI,OAAO,MAAMC,qBAAyCF;YAE5D,IAAI,CAACC,QAAQ,AAAgB,YAAhB,OAAOA,MAClB,MAAM,IAAIE,MAAM;YAGlB,IAAIC,cAAcH,OAChB,MAAMI,kBAAkBJ;iBAExBK,uBAAuBL;QAE3B,EAAE,OAAOM,KAAK;YACZ,MAAMC,eAAeD,eAAeJ,QAAQI,IAAI,OAAO,GAAG;YAC1DE,QAAQ,KAAK,CAAC,CAAC,eAAe,EAAED,cAAc;YAC9CE,QAAQ,KAAK,CAAC,iBAAiBH;QACjC,SAAU;YACRV,WAAW;QACb;IACF;IAEA,OAAO,WAAP,GACE,IAACc,MAAIA;QAAC,UAAUf;QAAS,KAAI;kBAC3B,mBAACgB,OAAO,OAAO;YACb,UAAU;YACV,gBAAgB;YAChB,QAAO;YACP,UAAU,CAAC,EAAEZ,IAAI,EAAE;gBACjBD,iBAAiBC;YACnB;YACA,OAAO;gBAAE,OAAO;YAAO;YACvB,cAAc,IAAM;;8BAEpB,IAAC;oBAAE,WAAU;8BACX,kBAACa,eAAaA,CAAAA;;8BAEhB,IAAC;oBAAE,WAAU;8BAAkB;;8BAI/B,KAAC;oBAAE,WAAU;;wBAAkB;sCAG7B,IAAC;4BACC,MAAK;4BACL,QAAO;4BACP,KAAI;sCACL;;;;8BAIH,IAAC;oBAAE,WAAU;8BAAkB;;;;;AAOvC;AAEO,MAAMC,OAAOnB"}
@@ -1 +1 @@
1
- {"version":3,"file":"pages/Uploader/utils.mjs","sources":["webpack://@rsdoctor/components/./src/pages/Uploader/utils.ts"],"sourcesContent":["import { Client, Common, Constants, Manifest } from '@rsdoctor/types';\nimport { message } from 'antd';\nimport { loadRspackStats } from '../../utils/stats';\n\n// Default enabled routes\nconst defaultEnableRoutes = [\n Manifest.RsdoctorManifestClientRoutes.Overall,\n Manifest.RsdoctorManifestClientRoutes.BundleSize,\n];\n\n// Build redirect URL\nconst buildRedirectUrl = (enableRoutes: string[]) => {\n const baseUrl = `//${location.host}${location.pathname}#/overall`;\n const queryParams =\n enableRoutes && enableRoutes.length > 0\n ? `?${Client.RsdoctorClientUrlQuery.EnableRoutes}=${encodeURIComponent(JSON.stringify(enableRoutes))}`\n : '';\n return `${baseUrl}${queryParams}`;\n};\n\n// Set window data and redirect\nconst setWindowDataAndRedirect = (data: any, enableRoutes: string[]) => {\n window[Constants.WINDOW_RSDOCTOR_TAG] = data;\n window[Constants.WINDOW_RSDOCTOR_TAG].enableRoutes = enableRoutes;\n\n const redirectUrl = buildRedirectUrl(enableRoutes);\n location.href = redirectUrl;\n\n message.success('JSON data loaded successfully!');\n};\n\n// Handle Rspack Stats data\nexport const handleRspackStats = async (json: Common.PlainObject) => {\n try {\n const manifestJson = await loadRspackStats([json]);\n if (manifestJson && manifestJson[0]) {\n setWindowDataAndRedirect(manifestJson[0].data, defaultEnableRoutes);\n } else {\n throw new Error('Invalid manifest data');\n }\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Unknown error';\n message.error(`Failed to load Rspack stats: ${errorMessage}`);\n throw err;\n }\n};\n\n// Handle Rsdoctor Manifest data\nexport const handleRsdoctorManifest = (json: Common.PlainObject) => {\n try {\n const enableRoutes = json.clientRoutes || defaultEnableRoutes;\n setWindowDataAndRedirect(json.data, enableRoutes);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Unknown error';\n message.error(`Failed to load manifest data: ${errorMessage}`);\n console.error('Failed to load manifest data:', err);\n }\n};\n"],"names":["defaultEnableRoutes","Manifest","buildRedirectUrl","enableRoutes","baseUrl","location","queryParams","Client","encodeURIComponent","JSON","setWindowDataAndRedirect","data","window","Constants","redirectUrl","message","handleRspackStats","json","manifestJson","loadRspackStats","Error","err","errorMessage","handleRsdoctorManifest","console"],"mappings":";;;AAKA,MAAMA,sBAAsB;IAC1BC,SAAS,4BAA4B,CAAC,OAAO;IAC7CA,SAAS,4BAA4B,CAAC,UAAU;CACjD;AAGD,MAAMC,mBAAmB,CAACC;IACxB,MAAMC,UAAU,CAAC,EAAE,EAAEC,SAAS,IAAI,GAAGA,SAAS,QAAQ,CAAC,SAAS,CAAC;IACjE,MAAMC,cACJH,gBAAgBA,aAAa,MAAM,GAAG,IAClC,CAAC,CAAC,EAAEI,OAAO,sBAAsB,CAAC,YAAY,CAAC,CAAC,EAAEC,mBAAmBC,KAAK,SAAS,CAACN,gBAAgB,GACpG;IACN,OAAO,GAAGC,UAAUE,aAAa;AACnC;AAGA,MAAMI,2BAA2B,CAACC,MAAWR;IAC3CS,MAAM,CAACC,UAAU,mBAAmB,CAAC,GAAGF;IACxCC,MAAM,CAACC,UAAU,mBAAmB,CAAC,CAAC,YAAY,GAAGV;IAErD,MAAMW,cAAcZ,iBAAiBC;IACrCE,SAAS,IAAI,GAAGS;IAEhBC,QAAQ,OAAO,CAAC;AAClB;AAGO,MAAMC,oBAAoB,OAAOC;IACtC,IAAI;QACF,MAAMC,eAAe,MAAMC,gBAAgB;YAACF;SAAK;QACjD,IAAIC,gBAAgBA,YAAY,CAAC,EAAE,EACjCR,yBAAyBQ,YAAY,CAAC,EAAE,CAAC,IAAI,EAAElB;aAE/C,MAAM,IAAIoB,MAAM;IAEpB,EAAE,OAAOC,KAAK;QACZ,MAAMC,eAAeD,eAAeD,QAAQC,IAAI,OAAO,GAAG;QAC1DN,QAAQ,KAAK,CAAC,CAAC,6BAA6B,EAAEO,cAAc;QAC5D,MAAMD;IACR;AACF;AAGO,MAAME,yBAAyB,CAACN;IACrC,IAAI;QACF,MAAMd,eAAec,KAAK,YAAY,IAAIjB;QAC1CU,yBAAyBO,KAAK,IAAI,EAAEd;IACtC,EAAE,OAAOkB,KAAK;QACZ,MAAMC,eAAeD,eAAeD,QAAQC,IAAI,OAAO,GAAG;QAC1DN,QAAQ,KAAK,CAAC,CAAC,8BAA8B,EAAEO,cAAc;QAC7DE,QAAQ,KAAK,CAAC,iCAAiCH;IACjD;AACF"}
1
+ {"version":3,"file":"pages/Uploader/utils.mjs","sources":["../../../src/pages/Uploader/utils.ts"],"sourcesContent":["import { Client, Common, Constants, Manifest } from '@rsdoctor/types';\nimport { message } from 'antd';\nimport { loadRspackStats } from '../../utils/stats';\n\n// Default enabled routes\nconst defaultEnableRoutes = [\n Manifest.RsdoctorManifestClientRoutes.Overall,\n Manifest.RsdoctorManifestClientRoutes.BundleSize,\n];\n\n// Build redirect URL\nconst buildRedirectUrl = (enableRoutes: string[]) => {\n const baseUrl = `//${location.host}${location.pathname}#/overall`;\n const queryParams =\n enableRoutes && enableRoutes.length > 0\n ? `?${Client.RsdoctorClientUrlQuery.EnableRoutes}=${encodeURIComponent(JSON.stringify(enableRoutes))}`\n : '';\n return `${baseUrl}${queryParams}`;\n};\n\n// Set window data and redirect\nconst setWindowDataAndRedirect = (data: any, enableRoutes: string[]) => {\n window[Constants.WINDOW_RSDOCTOR_TAG] = data;\n window[Constants.WINDOW_RSDOCTOR_TAG].enableRoutes = enableRoutes;\n\n const redirectUrl = buildRedirectUrl(enableRoutes);\n location.href = redirectUrl;\n\n message.success('JSON data loaded successfully!');\n};\n\n// Handle Rspack Stats data\nexport const handleRspackStats = async (json: Common.PlainObject) => {\n try {\n const manifestJson = await loadRspackStats([json]);\n if (manifestJson && manifestJson[0]) {\n setWindowDataAndRedirect(manifestJson[0].data, defaultEnableRoutes);\n } else {\n throw new Error('Invalid manifest data');\n }\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Unknown error';\n message.error(`Failed to load Rspack stats: ${errorMessage}`);\n throw err;\n }\n};\n\n// Handle Rsdoctor Manifest data\nexport const handleRsdoctorManifest = (json: Common.PlainObject) => {\n try {\n const enableRoutes = json.clientRoutes || defaultEnableRoutes;\n setWindowDataAndRedirect(json.data, enableRoutes);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Unknown error';\n message.error(`Failed to load manifest data: ${errorMessage}`);\n console.error('Failed to load manifest data:', err);\n }\n};\n"],"names":["defaultEnableRoutes","Manifest","buildRedirectUrl","enableRoutes","baseUrl","location","queryParams","Client","encodeURIComponent","JSON","setWindowDataAndRedirect","data","window","Constants","redirectUrl","message","handleRspackStats","json","manifestJson","loadRspackStats","Error","err","errorMessage","handleRsdoctorManifest","console"],"mappings":";;;AAKA,MAAMA,sBAAsB;IAC1BC,SAAS,4BAA4B,CAAC,OAAO;IAC7CA,SAAS,4BAA4B,CAAC,UAAU;CACjD;AAGD,MAAMC,mBAAmB,CAACC;IACxB,MAAMC,UAAU,CAAC,EAAE,EAAEC,SAAS,IAAI,GAAGA,SAAS,QAAQ,CAAC,SAAS,CAAC;IACjE,MAAMC,cACJH,gBAAgBA,aAAa,MAAM,GAAG,IAClC,CAAC,CAAC,EAAEI,OAAO,sBAAsB,CAAC,YAAY,CAAC,CAAC,EAAEC,mBAAmBC,KAAK,SAAS,CAACN,gBAAgB,GACpG;IACN,OAAO,GAAGC,UAAUE,aAAa;AACnC;AAGA,MAAMI,2BAA2B,CAACC,MAAWR;IAC3CS,MAAM,CAACC,UAAU,mBAAmB,CAAC,GAAGF;IACxCC,MAAM,CAACC,UAAU,mBAAmB,CAAC,CAAC,YAAY,GAAGV;IAErD,MAAMW,cAAcZ,iBAAiBC;IACrCE,SAAS,IAAI,GAAGS;IAEhBC,QAAQ,OAAO,CAAC;AAClB;AAGO,MAAMC,oBAAoB,OAAOC;IACtC,IAAI;QACF,MAAMC,eAAe,MAAMC,gBAAgB;YAACF;SAAK;QACjD,IAAIC,gBAAgBA,YAAY,CAAC,EAAE,EACjCR,yBAAyBQ,YAAY,CAAC,EAAE,CAAC,IAAI,EAAElB;aAE/C,MAAM,IAAIoB,MAAM;IAEpB,EAAE,OAAOC,KAAK;QACZ,MAAMC,eAAeD,eAAeD,QAAQC,IAAI,OAAO,GAAG;QAC1DN,QAAQ,KAAK,CAAC,CAAC,6BAA6B,EAAEO,cAAc;QAC5D,MAAMD;IACR;AACF;AAGO,MAAME,yBAAyB,CAACN;IACrC,IAAI;QACF,MAAMd,eAAec,KAAK,YAAY,IAAIjB;QAC1CU,yBAAyBO,KAAK,IAAI,EAAEd;IACtC,EAAE,OAAOkB,KAAK;QACZ,MAAMC,eAAeD,eAAeD,QAAQC,IAAI,OAAO,GAAG;QAC1DN,QAAQ,KAAK,CAAC,CAAC,8BAA8B,EAAEO,cAAc;QAC7DE,QAAQ,KAAK,CAAC,iCAAiCH;IACjD;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"pages/WebpackLoaders/Analysis/constants.mjs","sources":["webpack://@rsdoctor/components/./src/pages/WebpackLoaders/Analysis/constants.ts"],"sourcesContent":["import { Client } from '@rsdoctor/types';\n\nexport const name = 'Loaders Analysis';\n\nexport const route = Client.RsdoctorClientRoutes.WebpackLoaderAnalysis;\n"],"names":["name","route","Client"],"mappings":";AAEO,MAAMA,iBAAO;AAEb,MAAMC,QAAQC,OAAO,oBAAoB,CAAC,qBAAqB"}
1
+ {"version":3,"file":"pages/WebpackLoaders/Analysis/constants.mjs","sources":["../../../../src/pages/WebpackLoaders/Analysis/constants.ts"],"sourcesContent":["import { Client } from '@rsdoctor/types';\n\nexport const name = 'Loaders Analysis';\n\nexport const route = Client.RsdoctorClientRoutes.WebpackLoaderAnalysis;\n"],"names":["name","route","Client"],"mappings":";AAEO,MAAMA,iBAAO;AAEb,MAAMC,QAAQC,OAAO,oBAAoB,CAAC,qBAAqB"}
@@ -1,3 +1,3 @@
1
1
  import React from 'react';
2
2
  export declare const Page: React.FC;
3
- export * from './constants';
3
+ export * from './constants.js';
@@ -1 +1 @@
1
- {"version":3,"file":"pages/WebpackLoaders/Analysis/index.mjs","sources":["webpack://@rsdoctor/components/./src/pages/WebpackLoaders/Analysis/index.tsx"],"sourcesContent":["import React from 'react';\nimport { LoaderAnalysis } from '../../../components/Loader/Analysis';\nimport { WebpackConfigurationViewer } from '../../../components/Configuration';\nimport { Card } from '../../../components/Card';\nimport { Popover, Space, Tag, theme, Typography } from 'antd';\nimport { ExclamationCircleOutlined } from '@ant-design/icons';\nimport { t } from 'i18next';\nconst { useToken } = theme;\n\nexport const Page: React.FC = () => {\n const { token } = useToken();\n\n return (\n <Card\n title={\n <Space align=\"baseline\">\n <Typography.Title level={5} style={{ margin: 0 }}>\n Loader Analysis\n </Typography.Title>\n <Popover\n content={\n <div>\n {t('AsyncLoaderInfo')}\n <a\n href=\"https://rsdoctor.rs/guide/more/faq#cssextractrspackplugin-%E7%9A%84-loader-%E8%80%97%E6%97%B6%E8%BF%87%E9%95%BF%E9%97%AE%E9%A2%98\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {t('Details')}\n </a>\n </div>\n }\n title=\"Info\"\n >\n <Tag icon={<ExclamationCircleOutlined />} color=\"warning\">\n Info\n </Tag>\n </Popover>\n </Space>\n }\n extra={<WebpackConfigurationViewer defaultKeys={['module', 'resolve']} />}\n bodyStyle={{ paddingTop: token.padding, height: 800 }}\n >\n <LoaderAnalysis />\n </Card>\n );\n};\n\nexport * from './constants';\n"],"names":["useToken","theme","Page","token","Card","Space","Typography","Popover","t","Tag","ExclamationCircleOutlined","WebpackConfigurationViewer","LoaderAnalysis"],"mappings":";;;;;;;;;AAOA,MAAM,EAAEA,QAAQ,EAAE,GAAGC;AAEd,MAAMC,OAAiB;IAC5B,MAAM,EAAEC,KAAK,EAAE,GAAGH;IAElB,OAAO,WAAP,GACE,IAACI,MAAIA;QACH,qBACE,KAACC,OAAKA;YAAC,OAAM;;8BACX,IAACC,WAAW,KAAK;oBAAC,OAAO;oBAAG,OAAO;wBAAE,QAAQ;oBAAE;8BAAG;;8BAGlD,IAACC,SAAOA;oBACN,uBACE,KAAC;;4BACEC,EAAE;0CACH,IAAC;gCACC,MAAK;gCACL,QAAO;gCACP,KAAI;0CAEHA,EAAE;;;;oBAIT,OAAM;8BAEN,kBAACC,KAAGA;wBAAC,oBAAM,IAACC,2BAAyBA,CAAAA;wBAAK,OAAM;kCAAU;;;;;QAMhE,qBAAO,IAACC,4BAA0BA;YAAC,aAAa;gBAAC;gBAAU;aAAU;;QACrE,WAAW;YAAE,YAAYR,MAAM,OAAO;YAAE,QAAQ;QAAI;kBAEpD,kBAACS,gBAAcA,CAAAA;;AAGrB"}
1
+ {"version":3,"file":"pages/WebpackLoaders/Analysis/index.mjs","sources":["../../../../src/pages/WebpackLoaders/Analysis/index.tsx"],"sourcesContent":["import React from 'react';\nimport { LoaderAnalysis } from '../../../components/Loader/Analysis';\nimport { WebpackConfigurationViewer } from '../../../components/Configuration';\nimport { Card } from '../../../components/Card';\nimport { Popover, Space, Tag, theme, Typography } from 'antd';\nimport { ExclamationCircleOutlined } from '@ant-design/icons';\nimport { t } from 'i18next';\nconst { useToken } = theme;\n\nexport const Page: React.FC = () => {\n const { token } = useToken();\n\n return (\n <Card\n title={\n <Space align=\"baseline\">\n <Typography.Title level={5} style={{ margin: 0 }}>\n Loader Analysis\n </Typography.Title>\n <Popover\n content={\n <div>\n {t('AsyncLoaderInfo')}\n <a\n href=\"https://rsdoctor.rs/guide/more/faq#cssextractrspackplugin-%E7%9A%84-loader-%E8%80%97%E6%97%B6%E8%BF%87%E9%95%BF%E9%97%AE%E9%A2%98\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {t('Details')}\n </a>\n </div>\n }\n title=\"Info\"\n >\n <Tag icon={<ExclamationCircleOutlined />} color=\"warning\">\n Info\n </Tag>\n </Popover>\n </Space>\n }\n extra={<WebpackConfigurationViewer defaultKeys={['module', 'resolve']} />}\n bodyStyle={{ paddingTop: token.padding, height: 800 }}\n >\n <LoaderAnalysis />\n </Card>\n );\n};\n\nexport * from './constants';\n"],"names":["useToken","theme","Page","token","Card","Space","Typography","Popover","t","Tag","ExclamationCircleOutlined","WebpackConfigurationViewer","LoaderAnalysis"],"mappings":";;;;;;;;;AAOA,MAAM,EAAEA,QAAQ,EAAE,GAAGC;AAEd,MAAMC,OAAiB;IAC5B,MAAM,EAAEC,KAAK,EAAE,GAAGH;IAElB,OAAO,WAAP,GACE,IAACI,MAAIA;QACH,qBACE,KAACC,OAAKA;YAAC,OAAM;;8BACX,IAACC,WAAW,KAAK;oBAAC,OAAO;oBAAG,OAAO;wBAAE,QAAQ;oBAAE;8BAAG;;8BAGlD,IAACC,SAAOA;oBACN,uBACE,KAAC;;4BACEC,EAAE;0CACH,IAAC;gCACC,MAAK;gCACL,QAAO;gCACP,KAAI;0CAEHA,EAAE;;;;oBAIT,OAAM;8BAEN,kBAACC,KAAGA;wBAAC,oBAAM,IAACC,2BAAyBA,CAAAA;wBAAK,OAAM;kCAAU;;;;;QAMhE,qBAAO,IAACC,4BAA0BA;YAAC,aAAa;gBAAC;gBAAU;aAAU;;QACrE,WAAW;YAAE,YAAYR,MAAM,OAAO;YAAE,QAAQ;QAAI;kBAEpD,kBAACS,gBAAcA,CAAAA;;AAGrB"}
@@ -1 +1 @@
1
- {"version":3,"file":"pages/WebpackLoaders/Overall/constants.mjs","sources":["webpack://@rsdoctor/components/./src/pages/WebpackLoaders/Overall/constants.ts"],"sourcesContent":["import { Client } from '@rsdoctor/types';\n\nexport const name = 'Loaders Timeline';\n\nexport const route = Client.RsdoctorClientRoutes.WebpackLoaderOverall;\n"],"names":["name","route","Client"],"mappings":";AAEO,MAAMA,iBAAO;AAEb,MAAMC,QAAQC,OAAO,oBAAoB,CAAC,oBAAoB"}
1
+ {"version":3,"file":"pages/WebpackLoaders/Overall/constants.mjs","sources":["../../../../src/pages/WebpackLoaders/Overall/constants.ts"],"sourcesContent":["import { Client } from '@rsdoctor/types';\n\nexport const name = 'Loaders Timeline';\n\nexport const route = Client.RsdoctorClientRoutes.WebpackLoaderOverall;\n"],"names":["name","route","Client"],"mappings":";AAEO,MAAMA,iBAAO;AAEb,MAAMC,QAAQC,OAAO,oBAAoB,CAAC,oBAAoB"}
@@ -1,3 +1,3 @@
1
1
  import React from 'react';
2
2
  export declare const Page: React.FC;
3
- export * from './constants';
3
+ export * from './constants.js';
@@ -1 +1 @@
1
- {"version":3,"file":"pages/WebpackLoaders/Overall/index.mjs","sources":["webpack://@rsdoctor/components/./src/pages/WebpackLoaders/Overall/index.tsx"],"sourcesContent":["import React from 'react';\nimport { WebpackConfigurationViewer } from '../../../components/Configuration';\nimport { Card } from '../../../components/Card';\nimport { LoaderChart } from 'src/components/Charts';\nimport { Popover, Space, Tag, Typography } from 'antd/lib';\nimport { ExclamationCircleOutlined } from '@ant-design/icons';\nimport { useTranslation } from 'react-i18next';\n\nexport const Page: React.FC = () => {\n const { t } = useTranslation();\n return (\n <Card\n title={\n <Space align=\"baseline\">\n <Typography.Title level={5} style={{ margin: 0 }}>\n Loader Timeline\n </Typography.Title>\n <Popover\n content={\n <div>\n {t('AsyncLoaderInfo')}\n <a\n href=\"https://rsdoctor.rs/guide/more/faq#cssextractrspackplugin-%E7%9A%84-loader-%E8%80%97%E6%97%B6%E8%BF%87%E9%95%BF%E9%97%AE%E9%A2%98\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {t('Details')}\n </a>\n </div>\n }\n title=\"Info\"\n >\n <Tag icon={<ExclamationCircleOutlined />} color=\"warning\">\n Info\n </Tag>\n </Popover>\n </Space>\n }\n extra={<WebpackConfigurationViewer defaultKeys={['module']} />}\n >\n <LoaderChart />\n </Card>\n );\n};\n\nexport * from './constants';\n"],"names":["Page","t","useTranslation","Card","Space","Typography","Popover","Tag","ExclamationCircleOutlined","WebpackConfigurationViewer","LoaderChart"],"mappings":";;;;;;;;;AAQO,MAAMA,OAAiB;IAC5B,MAAM,EAAEC,CAAC,EAAE,GAAGC;IACd,OAAO,WAAP,GACE,IAACC,MAAIA;QACH,qBACE,KAACC,OAAKA;YAAC,OAAM;;8BACX,IAACC,WAAW,KAAK;oBAAC,OAAO;oBAAG,OAAO;wBAAE,QAAQ;oBAAE;8BAAG;;8BAGlD,IAACC,SAAOA;oBACN,uBACE,KAAC;;4BACEL,EAAE;0CACH,IAAC;gCACC,MAAK;gCACL,QAAO;gCACP,KAAI;0CAEHA,EAAE;;;;oBAIT,OAAM;8BAEN,kBAACM,KAAGA;wBAAC,oBAAM,IAACC,2BAAyBA,CAAAA;wBAAK,OAAM;kCAAU;;;;;QAMhE,qBAAO,IAACC,4BAA0BA;YAAC,aAAa;gBAAC;aAAS;;kBAE1D,kBAACC,aAAWA,CAAAA;;AAGlB"}
1
+ {"version":3,"file":"pages/WebpackLoaders/Overall/index.mjs","sources":["../../../../src/pages/WebpackLoaders/Overall/index.tsx"],"sourcesContent":["import React from 'react';\nimport { WebpackConfigurationViewer } from '../../../components/Configuration';\nimport { Card } from '../../../components/Card';\nimport { LoaderChart } from 'src/components/Charts';\nimport { Popover, Space, Tag, Typography } from 'antd/lib';\nimport { ExclamationCircleOutlined } from '@ant-design/icons';\nimport { useTranslation } from 'react-i18next';\n\nexport const Page: React.FC = () => {\n const { t } = useTranslation();\n return (\n <Card\n title={\n <Space align=\"baseline\">\n <Typography.Title level={5} style={{ margin: 0 }}>\n Loader Timeline\n </Typography.Title>\n <Popover\n content={\n <div>\n {t('AsyncLoaderInfo')}\n <a\n href=\"https://rsdoctor.rs/guide/more/faq#cssextractrspackplugin-%E7%9A%84-loader-%E8%80%97%E6%97%B6%E8%BF%87%E9%95%BF%E9%97%AE%E9%A2%98\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {t('Details')}\n </a>\n </div>\n }\n title=\"Info\"\n >\n <Tag icon={<ExclamationCircleOutlined />} color=\"warning\">\n Info\n </Tag>\n </Popover>\n </Space>\n }\n extra={<WebpackConfigurationViewer defaultKeys={['module']} />}\n >\n <LoaderChart />\n </Card>\n );\n};\n\nexport * from './constants';\n"],"names":["Page","t","useTranslation","Card","Space","Typography","Popover","Tag","ExclamationCircleOutlined","WebpackConfigurationViewer","LoaderChart"],"mappings":";;;;;;;;;AAQO,MAAMA,OAAiB;IAC5B,MAAM,EAAEC,CAAC,EAAE,GAAGC;IACd,OAAO,WAAP,GACE,IAACC,MAAIA;QACH,qBACE,KAACC,OAAKA;YAAC,OAAM;;8BACX,IAACC,WAAW,KAAK;oBAAC,OAAO;oBAAG,OAAO;wBAAE,QAAQ;oBAAE;8BAAG;;8BAGlD,IAACC,SAAOA;oBACN,uBACE,KAAC;;4BACEL,EAAE;0CACH,IAAC;gCACC,MAAK;gCACL,QAAO;gCACP,KAAI;0CAEHA,EAAE;;;;oBAIT,OAAM;8BAEN,kBAACM,KAAGA;wBAAC,oBAAM,IAACC,2BAAyBA,CAAAA;wBAAK,OAAM;kCAAU;;;;;QAMhE,qBAAO,IAACC,4BAA0BA;YAAC,aAAa;gBAAC;aAAS;;kBAE1D,kBAACC,aAAWA,CAAAA;;AAGlB"}
@@ -1 +1 @@
1
- {"version":3,"file":"pages/WebpackLoaders/constants.mjs","sources":["webpack://@rsdoctor/components/./src/pages/WebpackLoaders/constants.ts"],"sourcesContent":["export const name = 'Loaders';\n\nexport const route = '/webpack/loaders';\n"],"names":["name","route"],"mappings":"AAAO,MAAMA,iBAAO;AAEb,MAAMC,QAAQ"}
1
+ {"version":3,"file":"pages/WebpackLoaders/constants.mjs","sources":["../../../src/pages/WebpackLoaders/constants.ts"],"sourcesContent":["export const name = 'Loaders';\n\nexport const route = '/webpack/loaders';\n"],"names":["name","route"],"mappings":"AAAO,MAAMA,iBAAO;AAEb,MAAMC,QAAQ"}
@@ -1 +1 @@
1
- {"version":3,"file":"pages/WebpackPlugins/constants.mjs","sources":["webpack://@rsdoctor/components/./src/pages/WebpackPlugins/constants.ts"],"sourcesContent":["import { Client } from '@rsdoctor/types';\n\nexport const name = 'Plugins Analysis';\n\nexport const route = Client.RsdoctorClientRoutes.WebpackPlugins;\n"],"names":["name","route","Client"],"mappings":";AAEO,MAAMA,iBAAO;AAEb,MAAMC,QAAQC,OAAO,oBAAoB,CAAC,cAAc"}
1
+ {"version":3,"file":"pages/WebpackPlugins/constants.mjs","sources":["../../../src/pages/WebpackPlugins/constants.ts"],"sourcesContent":["import { Client } from '@rsdoctor/types';\n\nexport const name = 'Plugins Analysis';\n\nexport const route = Client.RsdoctorClientRoutes.WebpackPlugins;\n"],"names":["name","route","Client"],"mappings":";AAEO,MAAMA,iBAAO;AAEb,MAAMC,QAAQC,OAAO,oBAAoB,CAAC,cAAc"}
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
2
  import './index.scss';
3
3
  export declare const Page: React.FC;
4
- export * from './constants';
4
+ export * from './constants.js';
@@ -1 +1 @@
1
- {"version":3,"file":"pages/WebpackPlugins/index.mjs","sources":["webpack://@rsdoctor/components/./src/pages/WebpackPlugins/index.tsx"],"sourcesContent":["import { ApiOutlined, PartitionOutlined } from '@ant-design/icons';\nimport { SDK } from '@rsdoctor/types';\nimport { Button, Card, Input, Select, Space, Typography } from 'antd';\nimport React, { useState } from 'react';\nimport { WebpackConfigurationViewer } from '../../components/Configuration';\nimport { ServerAPIProvider } from '../../components/Manifest';\nimport { WebpackPluginsDataTable } from '../../components/Plugins/webpack';\nimport { Size } from '../../constants';\nimport './index.scss';\n\nexport const Page: React.FC = () => {\n const [selectedTapNames, setSelectedTapNames] = useState([]);\n const [selectedHooks, setSelectedHooks] = useState([]);\n\n return (\n <div>\n <Card\n title=\"Plugins Overall\"\n bodyStyle={{ paddingTop: Size.BasePadding / 3 }}\n extra={<WebpackConfigurationViewer defaultKeys={['plugins']} />}\n >\n <Space\n direction=\"vertical\"\n style={{ width: '100%', padding: '0 30px' }}\n >\n <ServerAPIProvider api={SDK.ServerAPI.API.GetPluginSummary}>\n {({ hooks, tapNames }) => (\n <Space style={{ marginBottom: Size.BasePadding / 2 }}>\n <Input.Group compact>\n <Button>\n <ApiOutlined />\n <Typography.Text>Plugin Tap Names</Typography.Text>\n </Button>\n <Select\n mode=\"multiple\"\n allowClear\n className=\"plugin-select\"\n style={{ width: 300 }}\n popupMatchSelectWidth\n onChange={(e) => {\n setSelectedTapNames(e);\n }}\n >\n {tapNames.map((e) => {\n return (\n <Select.Option key={e} label={e} value={e}>\n {e}\n </Select.Option>\n );\n })}\n </Select>\n </Input.Group>\n <Input.Group compact>\n <Button>\n <PartitionOutlined />\n <Typography.Text>Hooks</Typography.Text>\n </Button>\n <Select\n mode=\"multiple\"\n allowClear\n className=\"plugin-select\"\n style={{ width: 300 }}\n popupMatchSelectWidth\n onChange={(e) => {\n setSelectedHooks(e);\n }}\n >\n {hooks.map((e) => {\n return (\n <Select.Option key={e} label={e} value={e}>\n {e}\n </Select.Option>\n );\n })}\n </Select>\n </Input.Group>\n </Space>\n )}\n </ServerAPIProvider>\n <ServerAPIProvider\n api={SDK.ServerAPI.API.GetPluginData}\n body={{ hooks: selectedHooks, tapNames: selectedTapNames }}\n >\n {(res) => <WebpackPluginsDataTable dataSource={res} />}\n </ServerAPIProvider>\n </Space>\n </Card>\n </div>\n );\n};\n\nexport * from './constants';\n"],"names":["Page","selectedTapNames","setSelectedTapNames","useState","selectedHooks","setSelectedHooks","Card","Size","WebpackConfigurationViewer","Space","ServerAPIProvider","SDK","hooks","tapNames","Input","Button","ApiOutlined","Typography","Select","e","PartitionOutlined","res","WebpackPluginsDataTable"],"mappings":";;;;;;;;;;;AAUO,MAAMA,OAAiB;IAC5B,MAAM,CAACC,kBAAkBC,oBAAoB,GAAGC,SAAS,EAAE;IAC3D,MAAM,CAACC,eAAeC,iBAAiB,GAAGF,SAAS,EAAE;IAErD,OAAO,WAAP,GACE,IAAC;kBACC,kBAACG,MAAIA;YACH,OAAM;YACN,WAAW;gBAAE,YAAYC,KAAK,WAAW,GAAG;YAAE;YAC9C,qBAAO,IAACC,4BAA0BA;gBAAC,aAAa;oBAAC;iBAAU;;sBAE3D,mBAACC,OAAKA;gBACJ,WAAU;gBACV,OAAO;oBAAE,OAAO;oBAAQ,SAAS;gBAAS;;kCAE1C,IAACC,mBAAiBA;wBAAC,KAAKC,IAAI,SAAS,CAAC,GAAG,CAAC,gBAAgB;kCACvD,CAAC,EAAEC,KAAK,EAAEC,QAAQ,EAAE,iBACnB,KAACJ,OAAKA;gCAAC,OAAO;oCAAE,cAAcF,KAAK,WAAW,GAAG;gCAAE;;kDACjD,KAACO,MAAM,KAAK;wCAAC,SAAO;;0DAClB,KAACC,QAAMA;;kEACL,IAACC,aAAWA,CAAAA;kEACZ,IAACC,WAAW,IAAI;kEAAC;;;;0DAEnB,IAACC,QAAMA;gDACL,MAAK;gDACL,YAAU;gDACV,WAAU;gDACV,OAAO;oDAAE,OAAO;gDAAI;gDACpB,uBAAqB;gDACrB,UAAU,CAACC;oDACTjB,oBAAoBiB;gDACtB;0DAECN,SAAS,GAAG,CAAC,CAACM,IACN,WAAP,GACE,IAACD,OAAO,MAAM;wDAAS,OAAOC;wDAAG,OAAOA;kEACrCA;uDADiBA;;;;kDAO5B,KAACL,MAAM,KAAK;wCAAC,SAAO;;0DAClB,KAACC,QAAMA;;kEACL,IAACK,mBAAiBA,CAAAA;kEAClB,IAACH,WAAW,IAAI;kEAAC;;;;0DAEnB,IAACC,QAAMA;gDACL,MAAK;gDACL,YAAU;gDACV,WAAU;gDACV,OAAO;oDAAE,OAAO;gDAAI;gDACpB,uBAAqB;gDACrB,UAAU,CAACC;oDACTd,iBAAiBc;gDACnB;0DAECP,MAAM,GAAG,CAAC,CAACO,IACH,WAAP,GACE,IAACD,OAAO,MAAM;wDAAS,OAAOC;wDAAG,OAAOA;kEACrCA;uDADiBA;;;;;;;kCAUlC,IAACT,mBAAiBA;wBAChB,KAAKC,IAAI,SAAS,CAAC,GAAG,CAAC,aAAa;wBACpC,MAAM;4BAAE,OAAOP;4BAAe,UAAUH;wBAAiB;kCAExD,CAACoB,MAAAA,WAAAA,GAAQ,IAACC,yBAAuBA;gCAAC,YAAYD;;;;;;;AAM3D"}
1
+ {"version":3,"file":"pages/WebpackPlugins/index.mjs","sources":["../../../src/pages/WebpackPlugins/index.tsx"],"sourcesContent":["import { ApiOutlined, PartitionOutlined } from '@ant-design/icons';\nimport { SDK } from '@rsdoctor/types';\nimport { Button, Card, Input, Select, Space, Typography } from 'antd';\nimport React, { useState } from 'react';\nimport { WebpackConfigurationViewer } from '../../components/Configuration';\nimport { ServerAPIProvider } from '../../components/Manifest';\nimport { WebpackPluginsDataTable } from '../../components/Plugins/webpack';\nimport { Size } from '../../constants';\nimport './index.scss';\n\nexport const Page: React.FC = () => {\n const [selectedTapNames, setSelectedTapNames] = useState([]);\n const [selectedHooks, setSelectedHooks] = useState([]);\n\n return (\n <div>\n <Card\n title=\"Plugins Overall\"\n bodyStyle={{ paddingTop: Size.BasePadding / 3 }}\n extra={<WebpackConfigurationViewer defaultKeys={['plugins']} />}\n >\n <Space\n direction=\"vertical\"\n style={{ width: '100%', padding: '0 30px' }}\n >\n <ServerAPIProvider api={SDK.ServerAPI.API.GetPluginSummary}>\n {({ hooks, tapNames }) => (\n <Space style={{ marginBottom: Size.BasePadding / 2 }}>\n <Input.Group compact>\n <Button>\n <ApiOutlined />\n <Typography.Text>Plugin Tap Names</Typography.Text>\n </Button>\n <Select\n mode=\"multiple\"\n allowClear\n className=\"plugin-select\"\n style={{ width: 300 }}\n popupMatchSelectWidth\n onChange={(e) => {\n setSelectedTapNames(e);\n }}\n >\n {tapNames.map((e) => {\n return (\n <Select.Option key={e} label={e} value={e}>\n {e}\n </Select.Option>\n );\n })}\n </Select>\n </Input.Group>\n <Input.Group compact>\n <Button>\n <PartitionOutlined />\n <Typography.Text>Hooks</Typography.Text>\n </Button>\n <Select\n mode=\"multiple\"\n allowClear\n className=\"plugin-select\"\n style={{ width: 300 }}\n popupMatchSelectWidth\n onChange={(e) => {\n setSelectedHooks(e);\n }}\n >\n {hooks.map((e) => {\n return (\n <Select.Option key={e} label={e} value={e}>\n {e}\n </Select.Option>\n );\n })}\n </Select>\n </Input.Group>\n </Space>\n )}\n </ServerAPIProvider>\n <ServerAPIProvider\n api={SDK.ServerAPI.API.GetPluginData}\n body={{ hooks: selectedHooks, tapNames: selectedTapNames }}\n >\n {(res) => <WebpackPluginsDataTable dataSource={res} />}\n </ServerAPIProvider>\n </Space>\n </Card>\n </div>\n );\n};\n\nexport * from './constants';\n"],"names":["Page","selectedTapNames","setSelectedTapNames","useState","selectedHooks","setSelectedHooks","Card","Size","WebpackConfigurationViewer","Space","ServerAPIProvider","SDK","hooks","tapNames","Input","Button","ApiOutlined","Typography","Select","e","PartitionOutlined","res","WebpackPluginsDataTable"],"mappings":";;;;;;;;;;;AAUO,MAAMA,OAAiB;IAC5B,MAAM,CAACC,kBAAkBC,oBAAoB,GAAGC,SAAS,EAAE;IAC3D,MAAM,CAACC,eAAeC,iBAAiB,GAAGF,SAAS,EAAE;IAErD,OAAO,WAAP,GACE,IAAC;kBACC,kBAACG,MAAIA;YACH,OAAM;YACN,WAAW;gBAAE,YAAYC,KAAK,WAAW,GAAG;YAAE;YAC9C,qBAAO,IAACC,4BAA0BA;gBAAC,aAAa;oBAAC;iBAAU;;sBAE3D,mBAACC,OAAKA;gBACJ,WAAU;gBACV,OAAO;oBAAE,OAAO;oBAAQ,SAAS;gBAAS;;kCAE1C,IAACC,mBAAiBA;wBAAC,KAAKC,IAAI,SAAS,CAAC,GAAG,CAAC,gBAAgB;kCACvD,CAAC,EAAEC,KAAK,EAAEC,QAAQ,EAAE,iBACnB,KAACJ,OAAKA;gCAAC,OAAO;oCAAE,cAAcF,KAAK,WAAW,GAAG;gCAAE;;kDACjD,KAACO,MAAM,KAAK;wCAAC,SAAO;;0DAClB,KAACC,QAAMA;;kEACL,IAACC,aAAWA,CAAAA;kEACZ,IAACC,WAAW,IAAI;kEAAC;;;;0DAEnB,IAACC,QAAMA;gDACL,MAAK;gDACL,YAAU;gDACV,WAAU;gDACV,OAAO;oDAAE,OAAO;gDAAI;gDACpB,uBAAqB;gDACrB,UAAU,CAACC;oDACTjB,oBAAoBiB;gDACtB;0DAECN,SAAS,GAAG,CAAC,CAACM,IACN,WAAP,GACE,IAACD,OAAO,MAAM;wDAAS,OAAOC;wDAAG,OAAOA;kEACrCA;uDADiBA;;;;kDAO5B,KAACL,MAAM,KAAK;wCAAC,SAAO;;0DAClB,KAACC,QAAMA;;kEACL,IAACK,mBAAiBA,CAAAA;kEAClB,IAACH,WAAW,IAAI;kEAAC;;;;0DAEnB,IAACC,QAAMA;gDACL,MAAK;gDACL,YAAU;gDACV,WAAU;gDACV,OAAO;oDAAE,OAAO;gDAAI;gDACpB,uBAAqB;gDACrB,UAAU,CAACC;oDACTd,iBAAiBc;gDACnB;0DAECP,MAAM,GAAG,CAAC,CAACO,IACH,WAAP,GACE,IAACD,OAAO,MAAM;wDAAS,OAAOC;wDAAG,OAAOA;kEACrCA;uDADiBA;;;;;;;kCAUlC,IAACT,mBAAiBA;wBAChB,KAAKC,IAAI,SAAS,CAAC,GAAG,CAAC,aAAa;wBACpC,MAAM;4BAAE,OAAOP;4BAAe,UAAUH;wBAAiB;kCAExD,CAACoB,MAAAA,WAAAA,GAAQ,IAACC,yBAAuBA;gCAAC,YAAYD;;;;;;;AAM3D"}
@@ -1,11 +1,11 @@
1
- export * as Overall from './Overall';
2
- export * as BundleSize from './BundleSize';
3
- export * as ModuleAnalyze from './ModuleAnalyze';
4
- export * as LoaderTimeline from './WebpackLoaders/Overall';
5
- export * as LoaderFiles from './WebpackLoaders/Analysis';
6
- export * as PluginsAnalyze from './WebpackPlugins';
7
- export * as ModuleResolve from './ModuleResolve';
8
- export * as RuleIndex from './Resources/RuleIndex';
9
- export * as TreeShaking from './TreeShaking';
10
- export * as BundleDiff from './Resources/BundleDiff';
11
- export * as Uploader from './Uploader';
1
+ export * as Overall from './Overall/index.js';
2
+ export * as BundleSize from './BundleSize/index.js';
3
+ export * as ModuleAnalyze from './ModuleAnalyze/index.js';
4
+ export * as LoaderTimeline from './WebpackLoaders/Overall/index.js';
5
+ export * as LoaderFiles from './WebpackLoaders/Analysis/index.js';
6
+ export * as PluginsAnalyze from './WebpackPlugins/index.js';
7
+ export * as ModuleResolve from './ModuleResolve/index.js';
8
+ export * as RuleIndex from './Resources/RuleIndex/index.js';
9
+ export * as TreeShaking from './TreeShaking/index.js';
10
+ export * as BundleDiff from './Resources/BundleDiff/index.js';
11
+ export * as Uploader from './Uploader/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"utils/data/base.mjs","sources":["webpack://@rsdoctor/components/./src/utils/data/base.ts"],"sourcesContent":["import { Common, Manifest, SDK } from '@rsdoctor/types';\nimport { Data } from '@rsdoctor/utils/common';\n\nexport abstract class BaseDataLoader implements Manifest.ManifestDataLoader {\n protected pool = new Map<string, Promise<unknown>>();\n\n protected loader: Data.APIDataLoader;\n\n protected disposed = false;\n\n protected shardingDataMap = new Map<\n keyof Manifest.RsdoctorManifestData | string,\n Promise<Manifest.RsdoctorManifestData[keyof Manifest.RsdoctorManifestData]>\n >();\n\n constructor(protected manifest: Manifest.RsdoctorManifestWithShardingFiles) {\n this.loader = new Data.APIDataLoader(this);\n console.log('[DataLoader] isLocal: ', this.isLocal());\n }\n\n protected get<T extends keyof Manifest.RsdoctorManifestWithShardingFiles>(\n key: T,\n ): void | Manifest.RsdoctorManifestWithShardingFiles[T] {\n if (!this.manifest) return;\n return this.manifest[key];\n }\n\n protected getData<T extends keyof Manifest.RsdoctorManifestData>(\n key: T,\n scope: 'data' | 'cloudData' = 'data',\n ): void | Manifest.RsdoctorManifestWithShardingFiles['data'][T] {\n const data = this.get(scope);\n if (!data) return;\n return data[key];\n }\n\n protected getKeys(key: string) {\n return key.split('.');\n }\n\n protected joinKeys(keys: string[]) {\n return keys.join('.');\n }\n\n public dispose() {\n this.disposed = true;\n }\n\n public limit<T>(\n key: string,\n fn: Common.Function<unknown[], Promise<T>>,\n ): Promise<T> {\n if (this.pool.has(key)) {\n return this.pool.get(key) as Promise<T>;\n }\n const res = fn().finally(() => this.pool.delete(key));\n this.pool.set(key, res);\n return res;\n }\n\n public log(...args: unknown[]) {\n console.log(`[${this.constructor.name}]`, ...args);\n }\n\n public async loadManifest() {\n return this.manifest;\n }\n\n abstract loadData<T extends string, P>(key: T): Promise<void | P>;\n\n abstract loadData<T extends Manifest.RsdoctorManifestMappingKeys>(\n key: T,\n ): Promise<void | Manifest.InferManifestDataValue<T>>;\n\n abstract isLocal(): boolean;\n\n abstract loadAPI<\n T extends SDK.ServerAPI.API,\n B extends\n SDK.ServerAPI.InferRequestBodyType<T> = SDK.ServerAPI.InferRequestBodyType<T>,\n R extends\n SDK.ServerAPI.InferResponseType<T> = SDK.ServerAPI.InferResponseType<T>,\n >(...args: B extends void ? [api: T] : [api: T, body: B]): Promise<R>;\n\n public abstract onDataUpdate<\n T extends SDK.ServerAPI.API | SDK.ServerAPI.APIExtends,\n >(api: T, fn: (response: SDK.ServerAPI.SocketResponseType<T>) => void): void;\n\n public abstract removeOnDataUpdate<\n T extends SDK.ServerAPI.API | SDK.ServerAPI.APIExtends,\n >(api: T, fn: (response: SDK.ServerAPI.SocketResponseType<T>) => void): void;\n}\n"],"names":["BaseDataLoader","key","scope","data","keys","fn","res","args","console","manifest","Map","Data"],"mappings":";;;;;;;;;;;AAGO,MAAeA;IAiBV,IACRC,GAAM,EACgD;QACtD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;QACpB,OAAO,IAAI,CAAC,QAAQ,CAACA,IAAI;IAC3B;IAEU,QACRA,GAAM,EACNC,QAA8B,MAAM,EAC0B;QAC9D,MAAMC,OAAO,IAAI,CAAC,GAAG,CAACD;QACtB,IAAI,CAACC,MAAM;QACX,OAAOA,IAAI,CAACF,IAAI;IAClB;IAEU,QAAQA,GAAW,EAAE;QAC7B,OAAOA,IAAI,KAAK,CAAC;IACnB;IAEU,SAASG,IAAc,EAAE;QACjC,OAAOA,KAAK,IAAI,CAAC;IACnB;IAEO,UAAU;QACf,IAAI,CAAC,QAAQ,GAAG;IAClB;IAEO,MACLH,GAAW,EACXI,EAA0C,EAC9B;QACZ,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAACJ,MAChB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAACA;QAEvB,MAAMK,MAAMD,KAAK,OAAO,CAAC,IAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAACJ;QAChD,IAAI,CAAC,IAAI,CAAC,GAAG,CAACA,KAAKK;QACnB,OAAOA;IACT;IAEO,IAAI,GAAGC,IAAe,EAAE;QAC7BC,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,KAAKD;IAC/C;IAEA,MAAa,eAAe;QAC1B,OAAO,IAAI,CAAC,QAAQ;IACtB;IAnDA,YAAsBE,QAAoD,CAAE;;QAX5E,uBAAU,QAAV;QAEA,uBAAU,UAAV;QAEA,uBAAU,YAAV;QAEA,uBAAU,mBAAV;aAKsBA,QAAQ,GAARA;aAXZ,IAAI,GAAG,IAAIC;aAIX,QAAQ,GAAG;aAEX,eAAe,GAAG,IAAIA;QAM9B,IAAI,CAAC,MAAM,GAAG,IAAIC,KAAK,aAAa,CAAC,IAAI;QACzCH,QAAQ,GAAG,CAAC,0BAA0B,IAAI,CAAC,OAAO;IACpD;AAyEF"}
1
+ {"version":3,"file":"utils/data/base.mjs","sources":["../../../src/utils/data/base.ts"],"sourcesContent":["import { Common, Manifest, SDK } from '@rsdoctor/types';\nimport { Data } from '@rsdoctor/utils/common';\n\nexport abstract class BaseDataLoader implements Manifest.ManifestDataLoader {\n protected pool = new Map<string, Promise<unknown>>();\n\n protected loader: Data.APIDataLoader;\n\n protected disposed = false;\n\n protected shardingDataMap = new Map<\n keyof Manifest.RsdoctorManifestData | string,\n Promise<Manifest.RsdoctorManifestData[keyof Manifest.RsdoctorManifestData]>\n >();\n\n constructor(protected manifest: Manifest.RsdoctorManifestWithShardingFiles) {\n this.loader = new Data.APIDataLoader(this);\n console.log('[DataLoader] isLocal: ', this.isLocal());\n }\n\n protected get<T extends keyof Manifest.RsdoctorManifestWithShardingFiles>(\n key: T,\n ): void | Manifest.RsdoctorManifestWithShardingFiles[T] {\n if (!this.manifest) return;\n return this.manifest[key];\n }\n\n protected getData<T extends keyof Manifest.RsdoctorManifestData>(\n key: T,\n scope: 'data' | 'cloudData' = 'data',\n ): void | Manifest.RsdoctorManifestWithShardingFiles['data'][T] {\n const data = this.get(scope);\n if (!data) return;\n return data[key];\n }\n\n protected getKeys(key: string) {\n return key.split('.');\n }\n\n protected joinKeys(keys: string[]) {\n return keys.join('.');\n }\n\n public dispose() {\n this.disposed = true;\n }\n\n public limit<T>(\n key: string,\n fn: Common.Function<unknown[], Promise<T>>,\n ): Promise<T> {\n if (this.pool.has(key)) {\n return this.pool.get(key) as Promise<T>;\n }\n const res = fn().finally(() => this.pool.delete(key));\n this.pool.set(key, res);\n return res;\n }\n\n public log(...args: unknown[]) {\n console.log(`[${this.constructor.name}]`, ...args);\n }\n\n public async loadManifest() {\n return this.manifest;\n }\n\n abstract loadData<T extends string, P>(key: T): Promise<void | P>;\n\n abstract loadData<T extends Manifest.RsdoctorManifestMappingKeys>(\n key: T,\n ): Promise<void | Manifest.InferManifestDataValue<T>>;\n\n abstract isLocal(): boolean;\n\n abstract loadAPI<\n T extends SDK.ServerAPI.API,\n B extends\n SDK.ServerAPI.InferRequestBodyType<T> = SDK.ServerAPI.InferRequestBodyType<T>,\n R extends\n SDK.ServerAPI.InferResponseType<T> = SDK.ServerAPI.InferResponseType<T>,\n >(...args: B extends void ? [api: T] : [api: T, body: B]): Promise<R>;\n\n public abstract onDataUpdate<\n T extends SDK.ServerAPI.API | SDK.ServerAPI.APIExtends,\n >(api: T, fn: (response: SDK.ServerAPI.SocketResponseType<T>) => void): void;\n\n public abstract removeOnDataUpdate<\n T extends SDK.ServerAPI.API | SDK.ServerAPI.APIExtends,\n >(api: T, fn: (response: SDK.ServerAPI.SocketResponseType<T>) => void): void;\n}\n"],"names":["BaseDataLoader","key","scope","data","keys","fn","res","args","console","manifest","Map","Data"],"mappings":";;;;;;;;;;;AAGO,MAAeA;IAiBV,IACRC,GAAM,EACgD;QACtD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;QACpB,OAAO,IAAI,CAAC,QAAQ,CAACA,IAAI;IAC3B;IAEU,QACRA,GAAM,EACNC,QAA8B,MAAM,EAC0B;QAC9D,MAAMC,OAAO,IAAI,CAAC,GAAG,CAACD;QACtB,IAAI,CAACC,MAAM;QACX,OAAOA,IAAI,CAACF,IAAI;IAClB;IAEU,QAAQA,GAAW,EAAE;QAC7B,OAAOA,IAAI,KAAK,CAAC;IACnB;IAEU,SAASG,IAAc,EAAE;QACjC,OAAOA,KAAK,IAAI,CAAC;IACnB;IAEO,UAAU;QACf,IAAI,CAAC,QAAQ,GAAG;IAClB;IAEO,MACLH,GAAW,EACXI,EAA0C,EAC9B;QACZ,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAACJ,MAChB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAACA;QAEvB,MAAMK,MAAMD,KAAK,OAAO,CAAC,IAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAACJ;QAChD,IAAI,CAAC,IAAI,CAAC,GAAG,CAACA,KAAKK;QACnB,OAAOA;IACT;IAEO,IAAI,GAAGC,IAAe,EAAE;QAC7BC,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,KAAKD;IAC/C;IAEA,MAAa,eAAe;QAC1B,OAAO,IAAI,CAAC,QAAQ;IACtB;IAnDA,YAAsBE,QAAoD,CAAE;;QAX5E,uBAAU,QAAV;QAEA,uBAAU,UAAV;QAEA,uBAAU,YAAV;QAEA,uBAAU,mBAAV;aAKsBA,QAAQ,GAARA;aAXZ,IAAI,GAAG,IAAIC;aAIX,QAAQ,GAAG;aAEX,eAAe,GAAG,IAAIA;QAM9B,IAAI,CAAC,MAAM,GAAG,IAAIC,KAAK,aAAa,CAAC,IAAI;QACzCH,QAAQ,GAAG,CAAC,0BAA0B,IAAI,CAAC,OAAO;IACpD;AAyEF"}
@@ -1,5 +1,5 @@
1
1
  import { Manifest, SDK } from '@rsdoctor/types';
2
- import { BaseDataLoader } from './base';
2
+ import { BaseDataLoader } from './base.js';
3
3
  export declare class BriefDataLoader extends BaseDataLoader {
4
4
  isLocal(): boolean;
5
5
  loadData<T extends Manifest.RsdoctorManifestMappingKeys>(key: T): Promise<Manifest.InferManifestDataValue<T>>;
@@ -1 +1 @@
1
- {"version":3,"file":"utils/data/brief.mjs","sources":["webpack://@rsdoctor/components/./src/utils/data/brief.ts"],"sourcesContent":["import { Manifest, SDK } from '@rsdoctor/types';\nimport { Algorithm } from '@rsdoctor/utils/common';\nimport { BaseDataLoader } from './base';\nimport { Constants } from '@rsdoctor/types';\n\nexport class BriefDataLoader extends BaseDataLoader {\n public isLocal() {\n return false;\n }\n\n public async loadData<T extends Manifest.RsdoctorManifestMappingKeys>(\n key: T,\n ): Promise<Manifest.InferManifestDataValue<T>>;\n\n public async loadData(key: string): Promise<unknown> {\n console.log(`[loadData]-[key]: ${key}`);\n const [scope] = this.getKeys(key);\n\n console.log(`[loadData]-[scope]: ${scope}`);\n const data = this.getData(scope);\n\n if (!data) return;\n\n let res = data;\n\n // only cache by the root key in data\n if (!this.shardingDataMap.has(scope)) {\n const scopeData = this.parseData(res);\n\n this.shardingDataMap.set(scope, Promise.resolve(scopeData));\n }\n\n res = await this.shardingDataMap.get(scope);\n return res;\n }\n\n public getData(scope: keyof Manifest.RsdoctorManifestData) {\n console.log(`[getData]-[scope]: ${scope}`);\n return window[Constants.WINDOW_RSDOCTOR_TAG][scope];\n }\n\n private parseData(data: unknown): unknown {\n if (typeof data === 'object' && data !== null) {\n return data;\n }\n\n if (typeof data !== 'string') {\n return data;\n }\n\n try {\n return JSON.parse(Algorithm.decompressText(data));\n } catch {\n return data;\n }\n }\n\n public async loadAPI<\n T extends SDK.ServerAPI.API,\n B extends\n SDK.ServerAPI.InferRequestBodyType<T> = SDK.ServerAPI.InferRequestBodyType<T>,\n R extends\n SDK.ServerAPI.InferResponseType<T> = SDK.ServerAPI.InferResponseType<T>,\n >(...args: B extends void ? [api: T] : [api: T, body: B]): Promise<R> {\n return this.loader.loadAPI(...args) as R;\n }\n\n public dispose() {\n super.dispose();\n }\n\n public onDataUpdate() {}\n\n public removeOnDataUpdate() {}\n}\n"],"names":["BriefDataLoader","BaseDataLoader","key","console","scope","data","res","scopeData","Promise","window","Constants","JSON","Algorithm","args"],"mappings":";;;AAKO,MAAMA,wBAAwBC;IAC5B,UAAU;QACf,OAAO;IACT;IAMA,MAAa,SAASC,GAAW,EAAoB;QACnDC,QAAQ,GAAG,CAAC,CAAC,kBAAkB,EAAED,KAAK;QACtC,MAAM,CAACE,MAAM,GAAG,IAAI,CAAC,OAAO,CAACF;QAE7BC,QAAQ,GAAG,CAAC,CAAC,oBAAoB,EAAEC,OAAO;QAC1C,MAAMC,OAAO,IAAI,CAAC,OAAO,CAACD;QAE1B,IAAI,CAACC,MAAM;QAEX,IAAIC,MAAMD;QAGV,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAACD,QAAQ;YACpC,MAAMG,YAAY,IAAI,CAAC,SAAS,CAACD;YAEjC,IAAI,CAAC,eAAe,CAAC,GAAG,CAACF,OAAOI,QAAQ,OAAO,CAACD;QAClD;QAEAD,MAAM,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAACF;QACrC,OAAOE;IACT;IAEO,QAAQF,KAA0C,EAAE;QACzDD,QAAQ,GAAG,CAAC,CAAC,mBAAmB,EAAEC,OAAO;QACzC,OAAOK,MAAM,CAACC,UAAU,mBAAmB,CAAC,CAACN,MAAM;IACrD;IAEQ,UAAUC,IAAa,EAAW;QACxC,IAAI,AAAgB,YAAhB,OAAOA,QAAqBA,AAAS,SAATA,MAC9B,OAAOA;QAGT,IAAI,AAAgB,YAAhB,OAAOA,MACT,OAAOA;QAGT,IAAI;YACF,OAAOM,KAAK,KAAK,CAACC,UAAU,cAAc,CAACP;QAC7C,EAAE,OAAM;YACN,OAAOA;QACT;IACF;IAEA,MAAa,QAMX,GAAGQ,IAAmD,EAAc;QACpE,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,IAAIA;IAChC;IAEO,UAAU;QACf,KAAK,CAAC;IACR;IAEO,eAAe,CAAC;IAEhB,qBAAqB,CAAC;AAC/B"}
1
+ {"version":3,"file":"utils/data/brief.mjs","sources":["../../../src/utils/data/brief.ts"],"sourcesContent":["import { Manifest, SDK } from '@rsdoctor/types';\nimport { Algorithm } from '@rsdoctor/utils/common';\nimport { BaseDataLoader } from './base';\nimport { Constants } from '@rsdoctor/types';\n\nexport class BriefDataLoader extends BaseDataLoader {\n public isLocal() {\n return false;\n }\n\n public async loadData<T extends Manifest.RsdoctorManifestMappingKeys>(\n key: T,\n ): Promise<Manifest.InferManifestDataValue<T>>;\n\n public async loadData(key: string): Promise<unknown> {\n console.log(`[loadData]-[key]: ${key}`);\n const [scope] = this.getKeys(key);\n\n console.log(`[loadData]-[scope]: ${scope}`);\n const data = this.getData(scope);\n\n if (!data) return;\n\n let res = data;\n\n // only cache by the root key in data\n if (!this.shardingDataMap.has(scope)) {\n const scopeData = this.parseData(res);\n\n this.shardingDataMap.set(scope, Promise.resolve(scopeData));\n }\n\n res = await this.shardingDataMap.get(scope);\n return res;\n }\n\n public getData(scope: keyof Manifest.RsdoctorManifestData) {\n console.log(`[getData]-[scope]: ${scope}`);\n return window[Constants.WINDOW_RSDOCTOR_TAG][scope];\n }\n\n private parseData(data: unknown): unknown {\n if (typeof data === 'object' && data !== null) {\n return data;\n }\n\n if (typeof data !== 'string') {\n return data;\n }\n\n try {\n return JSON.parse(Algorithm.decompressText(data));\n } catch {\n return data;\n }\n }\n\n public async loadAPI<\n T extends SDK.ServerAPI.API,\n B extends\n SDK.ServerAPI.InferRequestBodyType<T> = SDK.ServerAPI.InferRequestBodyType<T>,\n R extends\n SDK.ServerAPI.InferResponseType<T> = SDK.ServerAPI.InferResponseType<T>,\n >(...args: B extends void ? [api: T] : [api: T, body: B]): Promise<R> {\n return this.loader.loadAPI(...args) as R;\n }\n\n public dispose() {\n super.dispose();\n }\n\n public onDataUpdate() {}\n\n public removeOnDataUpdate() {}\n}\n"],"names":["BriefDataLoader","BaseDataLoader","key","console","scope","data","res","scopeData","Promise","window","Constants","JSON","Algorithm","args"],"mappings":";;;AAKO,MAAMA,wBAAwBC;IAC5B,UAAU;QACf,OAAO;IACT;IAMA,MAAa,SAASC,GAAW,EAAoB;QACnDC,QAAQ,GAAG,CAAC,CAAC,kBAAkB,EAAED,KAAK;QACtC,MAAM,CAACE,MAAM,GAAG,IAAI,CAAC,OAAO,CAACF;QAE7BC,QAAQ,GAAG,CAAC,CAAC,oBAAoB,EAAEC,OAAO;QAC1C,MAAMC,OAAO,IAAI,CAAC,OAAO,CAACD;QAE1B,IAAI,CAACC,MAAM;QAEX,IAAIC,MAAMD;QAGV,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAACD,QAAQ;YACpC,MAAMG,YAAY,IAAI,CAAC,SAAS,CAACD;YAEjC,IAAI,CAAC,eAAe,CAAC,GAAG,CAACF,OAAOI,QAAQ,OAAO,CAACD;QAClD;QAEAD,MAAM,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAACF;QACrC,OAAOE;IACT;IAEO,QAAQF,KAA0C,EAAE;QACzDD,QAAQ,GAAG,CAAC,CAAC,mBAAmB,EAAEC,OAAO;QACzC,OAAOK,MAAM,CAACC,UAAU,mBAAmB,CAAC,CAACN,MAAM;IACrD;IAEQ,UAAUC,IAAa,EAAW;QACxC,IAAI,AAAgB,YAAhB,OAAOA,QAAqBA,AAAS,SAATA,MAC9B,OAAOA;QAGT,IAAI,AAAgB,YAAhB,OAAOA,MACT,OAAOA;QAGT,IAAI;YACF,OAAOM,KAAK,KAAK,CAACC,UAAU,cAAc,CAACP;QAC7C,EAAE,OAAM;YACN,OAAOA;QACT;IACF;IAEA,MAAa,QAMX,GAAGQ,IAAmD,EAAc;QACpE,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,IAAIA;IAChC;IAEO,UAAU;QACf,KAAK,CAAC;IACR;IAEO,eAAe,CAAC;IAEhB,qBAAqB,CAAC;AAC/B"}
@@ -1,5 +1,5 @@
1
1
  import { Manifest } from '@rsdoctor/types';
2
- import { BaseDataLoader } from './base';
2
+ import { BaseDataLoader } from './base.js';
3
3
  export declare function useDataLoader(manifest: Manifest.RsdoctorManifestWithShardingFiles | void): {
4
4
  loader: void | BaseDataLoader;
5
5
  };
@@ -1 +1 @@
1
- {"version":3,"file":"utils/data/index.mjs","sources":["webpack://@rsdoctor/components/./src/utils/data/index.ts"],"sourcesContent":["import { Constants, Manifest } from '@rsdoctor/types';\nimport { useEffect, useState } from 'react';\nimport { LocalServerDataLoader } from './local';\nimport { RemoteDataLoader } from './remote';\nimport { BaseDataLoader } from './base';\nimport { getAPILoaderModeFromStorage } from '../storage';\nimport { APILoaderMode4Dev } from '../../constants';\nimport { BriefDataLoader } from './brief';\n\nconst loaderTask = new WeakMap<\n Manifest.RsdoctorManifestWithShardingFiles,\n Promise<BaseDataLoader>\n>();\n\nasync function createDataLoader(\n manifest: Manifest.RsdoctorManifestWithShardingFiles,\n) {\n try {\n if (process.env.NODE_ENV === 'development') {\n const mode = getAPILoaderModeFromStorage();\n console.log(`[development]-${mode}`);\n if (mode === APILoaderMode4Dev.Local)\n return new LocalServerDataLoader(manifest);\n if (mode === APILoaderMode4Dev.Remote)\n return new RemoteDataLoader(manifest);\n }\n\n // local server exists\n if (manifest.__LOCAL__SERVER__) {\n console.log(`[LocalServerDataLoader]`);\n return new LocalServerDataLoader(manifest);\n }\n } catch (error) {\n console.log('[DataLoader] fallback to RemoteDataLoader');\n }\n\n return new RemoteDataLoader(manifest);\n}\n\nexport function useDataLoader(\n manifest: Manifest.RsdoctorManifestWithShardingFiles | void,\n) {\n const [loader, setLoader] = useState<BaseDataLoader | void>(undefined);\n\n useEffect(() => {\n if (window[Constants.WINDOW_RSDOCTOR_TAG]) {\n console.log('[brief mode]');\n const loader = new BriefDataLoader({ data: [] } as any);\n setLoader(loader);\n }\n }, []);\n\n useEffect(() => {\n if (!manifest) return;\n\n if (!loaderTask.has(manifest)) {\n const promise = createDataLoader(manifest);\n loaderTask.set(manifest, promise);\n }\n\n const task = loaderTask.get(manifest)!;\n task.then((loader) => {\n setLoader(loader);\n });\n }, [manifest]);\n\n return {\n loader,\n };\n}\n"],"names":["loaderTask","WeakMap","createDataLoader","manifest","process","mode","getAPILoaderModeFromStorage","console","APILoaderMode4Dev","LocalServerDataLoader","RemoteDataLoader","error","useDataLoader","loader","setLoader","useState","undefined","useEffect","window","Constants","BriefDataLoader","promise","task"],"mappings":";;;;;;;AASA,MAAMA,aAAa,IAAIC;AAKvB,eAAeC,iBACbC,QAAoD;IAEpD,IAAI;QACF,IAAIC,AAAyB,kBAAzBA,QAAQ,GAAG,CAAC,QAAQ,EAAoB;YAC1C,MAAMC,OAAOC;YACbC,QAAQ,GAAG,CAAC,CAAC,cAAc,EAAEF,MAAM;YACnC,IAAIA,SAASG,kBAAkB,KAAK,EAClC,OAAO,IAAIC,sBAAsBN;YACnC,IAAIE,SAASG,kBAAkB,MAAM,EACnC,OAAO,IAAIE,iBAAiBP;QAChC;QAGA,IAAIA,SAAS,iBAAiB,EAAE;YAC9BI,QAAQ,GAAG,CAAC;YACZ,OAAO,IAAIE,sBAAsBN;QACnC;IACF,EAAE,OAAOQ,OAAO;QACdJ,QAAQ,GAAG,CAAC;IACd;IAEA,OAAO,IAAIG,iBAAiBP;AAC9B;AAEO,SAASS,cACdT,QAA2D;IAE3D,MAAM,CAACU,QAAQC,UAAU,GAAGC,SAAgCC;IAE5DC,UAAU;QACR,IAAIC,MAAM,CAACC,UAAU,mBAAmB,CAAC,EAAE;YACzCZ,QAAQ,GAAG,CAAC;YACZ,MAAMM,SAAS,IAAIO,gBAAgB;gBAAE,MAAM,EAAE;YAAC;YAC9CN,UAAUD;QACZ;IACF,GAAG,EAAE;IAELI,UAAU;QACR,IAAI,CAACd,UAAU;QAEf,IAAI,CAACH,WAAW,GAAG,CAACG,WAAW;YAC7B,MAAMkB,UAAUnB,iBAAiBC;YACjCH,WAAW,GAAG,CAACG,UAAUkB;QAC3B;QAEA,MAAMC,OAAOtB,WAAW,GAAG,CAACG;QAC5BmB,KAAK,IAAI,CAAC,CAACT;YACTC,UAAUD;QACZ;IACF,GAAG;QAACV;KAAS;IAEb,OAAO;QACLU;IACF;AACF"}
1
+ {"version":3,"file":"utils/data/index.mjs","sources":["../../../src/utils/data/index.ts"],"sourcesContent":["import { Constants, Manifest } from '@rsdoctor/types';\nimport { useEffect, useState } from 'react';\nimport { LocalServerDataLoader } from './local';\nimport { RemoteDataLoader } from './remote';\nimport { BaseDataLoader } from './base';\nimport { getAPILoaderModeFromStorage } from '../storage';\nimport { APILoaderMode4Dev } from '../../constants';\nimport { BriefDataLoader } from './brief';\n\nconst loaderTask = new WeakMap<\n Manifest.RsdoctorManifestWithShardingFiles,\n Promise<BaseDataLoader>\n>();\n\nasync function createDataLoader(\n manifest: Manifest.RsdoctorManifestWithShardingFiles,\n) {\n try {\n if (process.env.NODE_ENV === 'development') {\n const mode = getAPILoaderModeFromStorage();\n console.log(`[development]-${mode}`);\n if (mode === APILoaderMode4Dev.Local)\n return new LocalServerDataLoader(manifest);\n if (mode === APILoaderMode4Dev.Remote)\n return new RemoteDataLoader(manifest);\n }\n\n // local server exists\n if (manifest.__LOCAL__SERVER__) {\n console.log(`[LocalServerDataLoader]`);\n return new LocalServerDataLoader(manifest);\n }\n } catch (error) {\n console.log('[DataLoader] fallback to RemoteDataLoader');\n }\n\n return new RemoteDataLoader(manifest);\n}\n\nexport function useDataLoader(\n manifest: Manifest.RsdoctorManifestWithShardingFiles | void,\n) {\n const [loader, setLoader] = useState<BaseDataLoader | void>(undefined);\n\n useEffect(() => {\n if (window[Constants.WINDOW_RSDOCTOR_TAG]) {\n console.log('[brief mode]');\n const loader = new BriefDataLoader({ data: [] } as any);\n setLoader(loader);\n }\n }, []);\n\n useEffect(() => {\n if (!manifest) return;\n\n if (!loaderTask.has(manifest)) {\n const promise = createDataLoader(manifest);\n loaderTask.set(manifest, promise);\n }\n\n const task = loaderTask.get(manifest)!;\n task.then((loader) => {\n setLoader(loader);\n });\n }, [manifest]);\n\n return {\n loader,\n };\n}\n"],"names":["loaderTask","WeakMap","createDataLoader","manifest","process","mode","getAPILoaderModeFromStorage","console","APILoaderMode4Dev","LocalServerDataLoader","RemoteDataLoader","error","useDataLoader","loader","setLoader","useState","undefined","useEffect","window","Constants","BriefDataLoader","promise","task"],"mappings":";;;;;;;AASA,MAAMA,aAAa,IAAIC;AAKvB,eAAeC,iBACbC,QAAoD;IAEpD,IAAI;QACF,IAAIC,AAAyB,kBAAzBA,QAAQ,GAAG,CAAC,QAAQ,EAAoB;YAC1C,MAAMC,OAAOC;YACbC,QAAQ,GAAG,CAAC,CAAC,cAAc,EAAEF,MAAM;YACnC,IAAIA,SAASG,kBAAkB,KAAK,EAClC,OAAO,IAAIC,sBAAsBN;YACnC,IAAIE,SAASG,kBAAkB,MAAM,EACnC,OAAO,IAAIE,iBAAiBP;QAChC;QAGA,IAAIA,SAAS,iBAAiB,EAAE;YAC9BI,QAAQ,GAAG,CAAC;YACZ,OAAO,IAAIE,sBAAsBN;QACnC;IACF,EAAE,OAAOQ,OAAO;QACdJ,QAAQ,GAAG,CAAC;IACd;IAEA,OAAO,IAAIG,iBAAiBP;AAC9B;AAEO,SAASS,cACdT,QAA2D;IAE3D,MAAM,CAACU,QAAQC,UAAU,GAAGC,SAAgCC;IAE5DC,UAAU;QACR,IAAIC,MAAM,CAACC,UAAU,mBAAmB,CAAC,EAAE;YACzCZ,QAAQ,GAAG,CAAC;YACZ,MAAMM,SAAS,IAAIO,gBAAgB;gBAAE,MAAM,EAAE;YAAC;YAC9CN,UAAUD;QACZ;IACF,GAAG,EAAE;IAELI,UAAU;QACR,IAAI,CAACd,UAAU;QAEf,IAAI,CAACH,WAAW,GAAG,CAACG,WAAW;YAC7B,MAAMkB,UAAUnB,iBAAiBC;YACjCH,WAAW,GAAG,CAACG,UAAUkB;QAC3B;QAEA,MAAMC,OAAOtB,WAAW,GAAG,CAACG;QAC5BmB,KAAK,IAAI,CAAC,CAACT;YACTC,UAAUD;QACZ;IACF,GAAG;QAACV;KAAS;IAEb,OAAO;QACLU;IACF;AACF"}
@@ -1,5 +1,5 @@
1
1
  import { Common, Manifest, SDK } from '@rsdoctor/types';
2
- import { BaseDataLoader } from './base';
2
+ import { BaseDataLoader } from './base.js';
3
3
  export declare class LocalServerDataLoader extends BaseDataLoader {
4
4
  protected events: Map<SDK.ServerAPI.API | SDK.ServerAPI.APIExtends, Set<Common.Function>>;
5
5
  isLocal(): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"utils/data/local.mjs","sources":["webpack://@rsdoctor/components/./src/utils/data/local.ts"],"sourcesContent":["import { Manifest as ManifestShared } from '@rsdoctor/utils/common';\nimport { Common, Manifest, SDK } from '@rsdoctor/types';\nimport { get } from 'es-toolkit/compat';\nimport { BaseDataLoader } from './base';\nimport { getSocket } from '../socket';\n\nexport class LocalServerDataLoader extends BaseDataLoader {\n protected events: Map<\n SDK.ServerAPI.API | SDK.ServerAPI.APIExtends,\n Set<Common.Function>\n > = new Map();\n\n public isLocal() {\n return true;\n }\n\n public async loadData<T extends keyof Manifest.RsdoctorManifestData>(\n key: T,\n ): Promise<void | Manifest.RsdoctorManifestData[T]>;\n\n public async loadData(key: string): Promise<unknown> {\n return this.limit(key, async () => {\n const [scope, ...rest] = this.getKeys(key);\n const data = this.getData(scope as keyof Manifest.RsdoctorManifestData);\n\n if (!data) return;\n\n let res: unknown = data;\n\n // sharding files\n if (ManifestShared.isShardingData(res)) {\n if (!this.shardingDataMap.has(key)) {\n const task = new Promise((resolve) => {\n getSocket().emit(\n SDK.ServerAPI.API.LoadDataByKey,\n { key },\n (\n res: SDK.ServerAPI.SocketResponseType<SDK.ServerAPI.API.LoadDataByKey>,\n ) => {\n resolve(res.res);\n },\n );\n });\n // const task = postServerAPI(SDK.ServerAPI.API.LoadDataByKey, { key }).catch((err) => {\n // this.log(`loadData error: `, res, key);\n // throw err;\n // });\n // save with every key\n this.shardingDataMap.set(key, task);\n }\n\n res = await this.shardingDataMap.get(key);\n this.shardingDataMap.delete(key);\n return res;\n }\n\n return rest.length > 0 ? get(res, this.joinKeys(rest)) : res;\n });\n }\n\n public async loadAPI<\n T extends SDK.ServerAPI.API,\n B extends\n SDK.ServerAPI.InferRequestBodyType<T> = SDK.ServerAPI.InferRequestBodyType<T>,\n R extends\n SDK.ServerAPI.InferResponseType<T> = SDK.ServerAPI.InferResponseType<T>,\n >(...args: B extends void ? [api: T] : [api: T, body: B]): Promise<R> {\n const [api, body] = args;\n // request limitation key\n const key = body ? `${api}_${JSON.stringify(body)}` : `${api}`;\n const socketPort = this.get('__SOCKET__PORT__') ?? '';\n\n return this.limit(key, async () => {\n return new Promise((resolve) => {\n getSocket(socketPort).emit(\n api,\n body,\n (res: SDK.ServerAPI.SocketResponseType<T>) => {\n resolve(res.res as R);\n },\n );\n });\n // const res = await postServerAPI(...args).catch((err) => {\n // this.log(`loadAPI error: `, key);\n // throw err;\n // });\n\n // return res as R;\n });\n }\n\n public dispose() {\n super.dispose();\n this.events.forEach((evs, api) => {\n evs.forEach((ev) => {\n this.removeOnDataUpdate(api, ev);\n });\n evs.clear();\n });\n this.events.clear();\n }\n\n /**\n * add event listener when received data from server.\n */\n public onDataUpdate<T extends SDK.ServerAPI.API | SDK.ServerAPI.APIExtends>(\n api: T,\n fn: (response: SDK.ServerAPI.SocketResponseType<T>) => void,\n ) {\n if (!this.events.has(api)) {\n this.events.set(api, new Set());\n }\n\n if (this.events.get(api)!.has(fn)) {\n return;\n }\n\n this.events.get(api)!.add(fn);\n getSocket().on(api as string, fn);\n }\n\n public removeOnDataUpdate<\n T extends SDK.ServerAPI.API | SDK.ServerAPI.APIExtends,\n >(api: T, fn: (response: SDK.ServerAPI.SocketResponseType<T>) => void) {\n getSocket().off(api as string, fn);\n this.events.get(api)!.delete(fn);\n }\n}\n"],"names":["LocalServerDataLoader","BaseDataLoader","key","scope","rest","data","res","ManifestShared","task","Promise","resolve","getSocket","SDK","get","args","api","body","JSON","socketPort","evs","ev","fn","Set","Map"],"mappings":";;;;;;;;;;;;;;;AAMO,MAAMA,8BAA8BC;IAMlC,UAAU;QACf,OAAO;IACT;IAMA,MAAa,SAASC,GAAW,EAAoB;QACnD,OAAO,IAAI,CAAC,KAAK,CAACA,KAAK;YACrB,MAAM,CAACC,OAAO,GAAGC,KAAK,GAAG,IAAI,CAAC,OAAO,CAACF;YACtC,MAAMG,OAAO,IAAI,CAAC,OAAO,CAACF;YAE1B,IAAI,CAACE,MAAM;YAEX,IAAIC,MAAeD;YAGnB,IAAIE,SAAAA,cAA6B,CAACD,MAAM;gBACtC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAACJ,MAAM;oBAClC,MAAMM,OAAO,IAAIC,QAAQ,CAACC;wBACxBC,YAAY,IAAI,CACdC,IAAI,SAAS,CAAC,GAAG,CAAC,aAAa,EAC/B;4BAAEV;wBAAI,GACN,CACEI;4BAEAI,QAAQJ,IAAI,GAAG;wBACjB;oBAEJ;oBAMA,IAAI,CAAC,eAAe,CAAC,GAAG,CAACJ,KAAKM;gBAChC;gBAEAF,MAAM,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAACJ;gBACrC,IAAI,CAAC,eAAe,CAAC,MAAM,CAACA;gBAC5B,OAAOI;YACT;YAEA,OAAOF,KAAK,MAAM,GAAG,IAAIS,IAAIP,KAAK,IAAI,CAAC,QAAQ,CAACF,SAASE;QAC3D;IACF;IAEA,MAAa,QAMX,GAAGQ,IAAmD,EAAc;QACpE,MAAM,CAACC,KAAKC,KAAK,GAAGF;QAEpB,MAAMZ,MAAMc,OAAO,GAAGD,IAAI,CAAC,EAAEE,KAAK,SAAS,CAACD,OAAO,GAAG,GAAGD,KAAK;QAC9D,MAAMG,aAAa,IAAI,CAAC,GAAG,CAAC,uBAAuB;QAEnD,OAAO,IAAI,CAAC,KAAK,CAAChB,KAAK,UACd,IAAIO,QAAQ,CAACC;gBAClBC,UAAUO,YAAY,IAAI,CACxBH,KACAC,MACA,CAACV;oBACCI,QAAQJ,IAAI,GAAG;gBACjB;YAEJ;IAQJ;IAEO,UAAU;QACf,KAAK,CAAC;QACN,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAACa,KAAKJ;YACxBI,IAAI,OAAO,CAAC,CAACC;gBACX,IAAI,CAAC,kBAAkB,CAACL,KAAKK;YAC/B;YACAD,IAAI,KAAK;QACX;QACA,IAAI,CAAC,MAAM,CAAC,KAAK;IACnB;IAKO,aACLJ,GAAM,EACNM,EAA2D,EAC3D;QACA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAACN,MACnB,IAAI,CAAC,MAAM,CAAC,GAAG,CAACA,KAAK,IAAIO;QAG3B,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAACP,KAAM,GAAG,CAACM,KAC5B;QAGF,IAAI,CAAC,MAAM,CAAC,GAAG,CAACN,KAAM,GAAG,CAACM;QAC1BV,YAAY,EAAE,CAACI,KAAeM;IAChC;IAEO,mBAELN,GAAM,EAAEM,EAA2D,EAAE;QACrEV,YAAY,GAAG,CAACI,KAAeM;QAC/B,IAAI,CAAC,MAAM,CAAC,GAAG,CAACN,KAAM,MAAM,CAACM;IAC/B;;QAxHK,gBACL,uBAAU,UAGN,IAAIE;;AAqHV"}
1
+ {"version":3,"file":"utils/data/local.mjs","sources":["../../../src/utils/data/local.ts"],"sourcesContent":["import { Manifest as ManifestShared } from '@rsdoctor/utils/common';\nimport { Common, Manifest, SDK } from '@rsdoctor/types';\nimport { get } from 'es-toolkit/compat';\nimport { BaseDataLoader } from './base';\nimport { getSocket } from '../socket';\n\nexport class LocalServerDataLoader extends BaseDataLoader {\n protected events: Map<\n SDK.ServerAPI.API | SDK.ServerAPI.APIExtends,\n Set<Common.Function>\n > = new Map();\n\n public isLocal() {\n return true;\n }\n\n public async loadData<T extends keyof Manifest.RsdoctorManifestData>(\n key: T,\n ): Promise<void | Manifest.RsdoctorManifestData[T]>;\n\n public async loadData(key: string): Promise<unknown> {\n return this.limit(key, async () => {\n const [scope, ...rest] = this.getKeys(key);\n const data = this.getData(scope as keyof Manifest.RsdoctorManifestData);\n\n if (!data) return;\n\n let res: unknown = data;\n\n // sharding files\n if (ManifestShared.isShardingData(res)) {\n if (!this.shardingDataMap.has(key)) {\n const task = new Promise((resolve) => {\n getSocket().emit(\n SDK.ServerAPI.API.LoadDataByKey,\n { key },\n (\n res: SDK.ServerAPI.SocketResponseType<SDK.ServerAPI.API.LoadDataByKey>,\n ) => {\n resolve(res.res);\n },\n );\n });\n // const task = postServerAPI(SDK.ServerAPI.API.LoadDataByKey, { key }).catch((err) => {\n // this.log(`loadData error: `, res, key);\n // throw err;\n // });\n // save with every key\n this.shardingDataMap.set(key, task);\n }\n\n res = await this.shardingDataMap.get(key);\n this.shardingDataMap.delete(key);\n return res;\n }\n\n return rest.length > 0 ? get(res, this.joinKeys(rest)) : res;\n });\n }\n\n public async loadAPI<\n T extends SDK.ServerAPI.API,\n B extends\n SDK.ServerAPI.InferRequestBodyType<T> = SDK.ServerAPI.InferRequestBodyType<T>,\n R extends\n SDK.ServerAPI.InferResponseType<T> = SDK.ServerAPI.InferResponseType<T>,\n >(...args: B extends void ? [api: T] : [api: T, body: B]): Promise<R> {\n const [api, body] = args;\n // request limitation key\n const key = body ? `${api}_${JSON.stringify(body)}` : `${api}`;\n const socketPort = this.get('__SOCKET__PORT__') ?? '';\n\n return this.limit(key, async () => {\n return new Promise((resolve) => {\n getSocket(socketPort).emit(\n api,\n body,\n (res: SDK.ServerAPI.SocketResponseType<T>) => {\n resolve(res.res as R);\n },\n );\n });\n // const res = await postServerAPI(...args).catch((err) => {\n // this.log(`loadAPI error: `, key);\n // throw err;\n // });\n\n // return res as R;\n });\n }\n\n public dispose() {\n super.dispose();\n this.events.forEach((evs, api) => {\n evs.forEach((ev) => {\n this.removeOnDataUpdate(api, ev);\n });\n evs.clear();\n });\n this.events.clear();\n }\n\n /**\n * add event listener when received data from server.\n */\n public onDataUpdate<T extends SDK.ServerAPI.API | SDK.ServerAPI.APIExtends>(\n api: T,\n fn: (response: SDK.ServerAPI.SocketResponseType<T>) => void,\n ) {\n if (!this.events.has(api)) {\n this.events.set(api, new Set());\n }\n\n if (this.events.get(api)!.has(fn)) {\n return;\n }\n\n this.events.get(api)!.add(fn);\n getSocket().on(api as string, fn);\n }\n\n public removeOnDataUpdate<\n T extends SDK.ServerAPI.API | SDK.ServerAPI.APIExtends,\n >(api: T, fn: (response: SDK.ServerAPI.SocketResponseType<T>) => void) {\n getSocket().off(api as string, fn);\n this.events.get(api)!.delete(fn);\n }\n}\n"],"names":["LocalServerDataLoader","BaseDataLoader","key","scope","rest","data","res","ManifestShared","task","Promise","resolve","getSocket","SDK","get","args","api","body","JSON","socketPort","evs","ev","fn","Set","Map"],"mappings":";;;;;;;;;;;;;;;AAMO,MAAMA,8BAA8BC;IAMlC,UAAU;QACf,OAAO;IACT;IAMA,MAAa,SAASC,GAAW,EAAoB;QACnD,OAAO,IAAI,CAAC,KAAK,CAACA,KAAK;YACrB,MAAM,CAACC,OAAO,GAAGC,KAAK,GAAG,IAAI,CAAC,OAAO,CAACF;YACtC,MAAMG,OAAO,IAAI,CAAC,OAAO,CAACF;YAE1B,IAAI,CAACE,MAAM;YAEX,IAAIC,MAAeD;YAGnB,IAAIE,SAAAA,cAA6B,CAACD,MAAM;gBACtC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAACJ,MAAM;oBAClC,MAAMM,OAAO,IAAIC,QAAQ,CAACC;wBACxBC,YAAY,IAAI,CACdC,IAAI,SAAS,CAAC,GAAG,CAAC,aAAa,EAC/B;4BAAEV;wBAAI,GACN,CACEI;4BAEAI,QAAQJ,IAAI,GAAG;wBACjB;oBAEJ;oBAMA,IAAI,CAAC,eAAe,CAAC,GAAG,CAACJ,KAAKM;gBAChC;gBAEAF,MAAM,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAACJ;gBACrC,IAAI,CAAC,eAAe,CAAC,MAAM,CAACA;gBAC5B,OAAOI;YACT;YAEA,OAAOF,KAAK,MAAM,GAAG,IAAIS,IAAIP,KAAK,IAAI,CAAC,QAAQ,CAACF,SAASE;QAC3D;IACF;IAEA,MAAa,QAMX,GAAGQ,IAAmD,EAAc;QACpE,MAAM,CAACC,KAAKC,KAAK,GAAGF;QAEpB,MAAMZ,MAAMc,OAAO,GAAGD,IAAI,CAAC,EAAEE,KAAK,SAAS,CAACD,OAAO,GAAG,GAAGD,KAAK;QAC9D,MAAMG,aAAa,IAAI,CAAC,GAAG,CAAC,uBAAuB;QAEnD,OAAO,IAAI,CAAC,KAAK,CAAChB,KAAK,UACd,IAAIO,QAAQ,CAACC;gBAClBC,UAAUO,YAAY,IAAI,CACxBH,KACAC,MACA,CAACV;oBACCI,QAAQJ,IAAI,GAAG;gBACjB;YAEJ;IAQJ;IAEO,UAAU;QACf,KAAK,CAAC;QACN,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAACa,KAAKJ;YACxBI,IAAI,OAAO,CAAC,CAACC;gBACX,IAAI,CAAC,kBAAkB,CAACL,KAAKK;YAC/B;YACAD,IAAI,KAAK;QACX;QACA,IAAI,CAAC,MAAM,CAAC,KAAK;IACnB;IAKO,aACLJ,GAAM,EACNM,EAA2D,EAC3D;QACA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAACN,MACnB,IAAI,CAAC,MAAM,CAAC,GAAG,CAACA,KAAK,IAAIO;QAG3B,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAACP,KAAM,GAAG,CAACM,KAC5B;QAGF,IAAI,CAAC,MAAM,CAAC,GAAG,CAACN,KAAM,GAAG,CAACM;QAC1BV,YAAY,EAAE,CAACI,KAAeM;IAChC;IAEO,mBAELN,GAAM,EAAEM,EAA2D,EAAE;QACrEV,YAAY,GAAG,CAACI,KAAeM;QAC/B,IAAI,CAAC,MAAM,CAAC,GAAG,CAACN,KAAM,MAAM,CAACM;IAC/B;;QAxHK,gBACL,uBAAU,UAGN,IAAIE;;AAqHV"}
@@ -1,5 +1,5 @@
1
1
  import { Manifest, SDK } from '@rsdoctor/types';
2
- import { BaseDataLoader } from './base';
2
+ import { BaseDataLoader } from './base.js';
3
3
  export declare class RemoteDataLoader extends BaseDataLoader {
4
4
  isLocal(): boolean;
5
5
  loadData<T extends Manifest.RsdoctorManifestMappingKeys>(key: T): Promise<Manifest.InferManifestDataValue<T>>;
@@ -1 +1 @@
1
- {"version":3,"file":"utils/data/remote.mjs","sources":["webpack://@rsdoctor/components/./src/utils/data/remote.ts"],"sourcesContent":["import { Manifest, SDK } from '@rsdoctor/types';\nimport { Manifest as ManifestShared } from '@rsdoctor/utils/common';\nimport { get } from 'es-toolkit/compat';\nimport { BaseDataLoader } from './base';\nimport { fetchShardingFile } from '../request';\n\nexport class RemoteDataLoader extends BaseDataLoader {\n public isLocal() {\n return false;\n }\n\n public async loadData<T extends Manifest.RsdoctorManifestMappingKeys>(\n key: T,\n ): Promise<Manifest.InferManifestDataValue<T>>;\n\n public async loadData(key: string): Promise<unknown> {\n return this.limit(key, async () => {\n const [scope, ...rest] = this.getKeys(key);\n const data = this.getData(\n scope as keyof Manifest.RsdoctorManifestData,\n 'cloudData',\n );\n\n if (!data) return;\n\n let res = data;\n\n // sharding files\n if (ManifestShared.isShardingData(res)) {\n // only cache by the root key in data\n if (!this.shardingDataMap.has(scope)) {\n const task = ManifestShared.fetchShardingData(\n res,\n fetchShardingFile,\n ).catch((err) => {\n this.log(`loadData error: `, res, key);\n throw err;\n });\n this.shardingDataMap.set(scope, task);\n }\n\n res = await this.shardingDataMap.get(scope);\n }\n\n return rest.length > 0 ? get(res, this.joinKeys(rest)) : res;\n });\n }\n\n public async loadAPI<\n T extends SDK.ServerAPI.API,\n B extends\n SDK.ServerAPI.InferRequestBodyType<T> = SDK.ServerAPI.InferRequestBodyType<T>,\n R extends\n SDK.ServerAPI.InferResponseType<T> = SDK.ServerAPI.InferResponseType<T>,\n >(...args: B extends void ? [api: T] : [api: T, body: B]): Promise<R> {\n const [api, body] = args;\n // request limitation key\n const key = body ? `${api}_${JSON.stringify(body)}` : `${api}`;\n\n return this.limit(key, async () => {\n return this.loader.loadAPI(...args) as R;\n });\n }\n\n public dispose() {\n super.dispose();\n }\n\n public onDataUpdate() {}\n\n public removeOnDataUpdate() {}\n}\n"],"names":["RemoteDataLoader","BaseDataLoader","key","scope","rest","data","res","ManifestShared","task","fetchShardingFile","err","get","args","api","body","JSON"],"mappings":";;;;AAMO,MAAMA,yBAAyBC;IAC7B,UAAU;QACf,OAAO;IACT;IAMA,MAAa,SAASC,GAAW,EAAoB;QACnD,OAAO,IAAI,CAAC,KAAK,CAACA,KAAK;YACrB,MAAM,CAACC,OAAO,GAAGC,KAAK,GAAG,IAAI,CAAC,OAAO,CAACF;YACtC,MAAMG,OAAO,IAAI,CAAC,OAAO,CACvBF,OACA;YAGF,IAAI,CAACE,MAAM;YAEX,IAAIC,MAAMD;YAGV,IAAIE,SAAAA,cAA6B,CAACD,MAAM;gBAEtC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAACH,QAAQ;oBACpC,MAAMK,OAAOD,SAAAA,iBAAgC,CAC3CD,KACAG,mBACA,KAAK,CAAC,CAACC;wBACP,IAAI,CAAC,GAAG,CAAC,oBAAoBJ,KAAKJ;wBAClC,MAAMQ;oBACR;oBACA,IAAI,CAAC,eAAe,CAAC,GAAG,CAACP,OAAOK;gBAClC;gBAEAF,MAAM,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAACH;YACvC;YAEA,OAAOC,KAAK,MAAM,GAAG,IAAIO,IAAIL,KAAK,IAAI,CAAC,QAAQ,CAACF,SAASE;QAC3D;IACF;IAEA,MAAa,QAMX,GAAGM,IAAmD,EAAc;QACpE,MAAM,CAACC,KAAKC,KAAK,GAAGF;QAEpB,MAAMV,MAAMY,OAAO,GAAGD,IAAI,CAAC,EAAEE,KAAK,SAAS,CAACD,OAAO,GAAG,GAAGD,KAAK;QAE9D,OAAO,IAAI,CAAC,KAAK,CAACX,KAAK,UACd,IAAI,CAAC,MAAM,CAAC,OAAO,IAAIU;IAElC;IAEO,UAAU;QACf,KAAK,CAAC;IACR;IAEO,eAAe,CAAC;IAEhB,qBAAqB,CAAC;AAC/B"}
1
+ {"version":3,"file":"utils/data/remote.mjs","sources":["../../../src/utils/data/remote.ts"],"sourcesContent":["import { Manifest, SDK } from '@rsdoctor/types';\nimport { Manifest as ManifestShared } from '@rsdoctor/utils/common';\nimport { get } from 'es-toolkit/compat';\nimport { BaseDataLoader } from './base';\nimport { fetchShardingFile } from '../request';\n\nexport class RemoteDataLoader extends BaseDataLoader {\n public isLocal() {\n return false;\n }\n\n public async loadData<T extends Manifest.RsdoctorManifestMappingKeys>(\n key: T,\n ): Promise<Manifest.InferManifestDataValue<T>>;\n\n public async loadData(key: string): Promise<unknown> {\n return this.limit(key, async () => {\n const [scope, ...rest] = this.getKeys(key);\n const data = this.getData(\n scope as keyof Manifest.RsdoctorManifestData,\n 'cloudData',\n );\n\n if (!data) return;\n\n let res = data;\n\n // sharding files\n if (ManifestShared.isShardingData(res)) {\n // only cache by the root key in data\n if (!this.shardingDataMap.has(scope)) {\n const task = ManifestShared.fetchShardingData(\n res,\n fetchShardingFile,\n ).catch((err) => {\n this.log(`loadData error: `, res, key);\n throw err;\n });\n this.shardingDataMap.set(scope, task);\n }\n\n res = await this.shardingDataMap.get(scope);\n }\n\n return rest.length > 0 ? get(res, this.joinKeys(rest)) : res;\n });\n }\n\n public async loadAPI<\n T extends SDK.ServerAPI.API,\n B extends\n SDK.ServerAPI.InferRequestBodyType<T> = SDK.ServerAPI.InferRequestBodyType<T>,\n R extends\n SDK.ServerAPI.InferResponseType<T> = SDK.ServerAPI.InferResponseType<T>,\n >(...args: B extends void ? [api: T] : [api: T, body: B]): Promise<R> {\n const [api, body] = args;\n // request limitation key\n const key = body ? `${api}_${JSON.stringify(body)}` : `${api}`;\n\n return this.limit(key, async () => {\n return this.loader.loadAPI(...args) as R;\n });\n }\n\n public dispose() {\n super.dispose();\n }\n\n public onDataUpdate() {}\n\n public removeOnDataUpdate() {}\n}\n"],"names":["RemoteDataLoader","BaseDataLoader","key","scope","rest","data","res","ManifestShared","task","fetchShardingFile","err","get","args","api","body","JSON"],"mappings":";;;;AAMO,MAAMA,yBAAyBC;IAC7B,UAAU;QACf,OAAO;IACT;IAMA,MAAa,SAASC,GAAW,EAAoB;QACnD,OAAO,IAAI,CAAC,KAAK,CAACA,KAAK;YACrB,MAAM,CAACC,OAAO,GAAGC,KAAK,GAAG,IAAI,CAAC,OAAO,CAACF;YACtC,MAAMG,OAAO,IAAI,CAAC,OAAO,CACvBF,OACA;YAGF,IAAI,CAACE,MAAM;YAEX,IAAIC,MAAMD;YAGV,IAAIE,SAAAA,cAA6B,CAACD,MAAM;gBAEtC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAACH,QAAQ;oBACpC,MAAMK,OAAOD,SAAAA,iBAAgC,CAC3CD,KACAG,mBACA,KAAK,CAAC,CAACC;wBACP,IAAI,CAAC,GAAG,CAAC,oBAAoBJ,KAAKJ;wBAClC,MAAMQ;oBACR;oBACA,IAAI,CAAC,eAAe,CAAC,GAAG,CAACP,OAAOK;gBAClC;gBAEAF,MAAM,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAACH;YACvC;YAEA,OAAOC,KAAK,MAAM,GAAG,IAAIO,IAAIL,KAAK,IAAI,CAAC,QAAQ,CAACF,SAASE;QAC3D;IACF;IAEA,MAAa,QAMX,GAAGM,IAAmD,EAAc;QACpE,MAAM,CAACC,KAAKC,KAAK,GAAGF;QAEpB,MAAMV,MAAMY,OAAO,GAAGD,IAAI,CAAC,EAAEE,KAAK,SAAS,CAACD,OAAO,GAAG,GAAGD,KAAK;QAE9D,OAAO,IAAI,CAAC,KAAK,CAACX,KAAK,UACd,IAAI,CAAC,MAAM,CAAC,OAAO,IAAIU;IAElC;IAEO,UAAU;QACf,KAAK,CAAC;IACR;IAEO,eAAe,CAAC;IAEhB,qBAAqB,CAAC;AAC/B"}