@rsdoctor/components 1.5.11 → 2.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/dist/components/Alert/types.d.ts +2 -2
  2. package/dist/components/Alerts/bundle-alert.d.ts +1 -1
  3. package/dist/components/Alerts/bundle-alert.mjs.map +1 -1
  4. package/dist/components/Alerts/overlay.mjs.map +1 -1
  5. package/dist/components/Charts/done.mjs +2 -2
  6. package/dist/components/Charts/done.mjs.map +1 -1
  7. package/dist/components/Charts/minify.mjs +2 -2
  8. package/dist/components/Charts/minify.mjs.map +1 -1
  9. package/dist/components/Configuration/builder.d.ts +1 -5
  10. package/dist/components/Configuration/builder.mjs.map +1 -1
  11. package/dist/components/Layout/index.d.ts +2 -2
  12. package/dist/components/Layout/index.mjs.map +1 -1
  13. package/dist/components/Layout/menus.mjs +7 -7
  14. package/dist/components/Layout/menus.mjs.map +1 -1
  15. package/dist/components/Loader/Analysis/files.mjs.map +1 -1
  16. package/dist/components/Loader/Analysis/index.d.ts +1 -7
  17. package/dist/components/Loader/Analysis/index.mjs.map +1 -1
  18. package/dist/components/Loader/executions.d.ts +1 -1
  19. package/dist/components/Loader/executions.mjs.map +1 -1
  20. package/dist/components/Manifest/api.d.ts +2 -2
  21. package/dist/components/Manifest/api.mjs +2 -2
  22. package/dist/components/Manifest/api.mjs.map +1 -1
  23. package/dist/components/Opener/code.d.ts +1 -1
  24. package/dist/components/Opener/code.mjs.map +1 -1
  25. package/dist/components/Opener/ide.d.ts +1 -1
  26. package/dist/components/Opener/ide.mjs.map +1 -1
  27. package/dist/components/Overall/bundle.d.ts +1 -1
  28. package/dist/components/Overall/bundle.mjs.map +1 -1
  29. package/dist/components/Plugins/plugins.d.ts +18 -0
  30. package/dist/components/Plugins/{webpack.mjs → plugins.mjs} +4 -4
  31. package/dist/components/Plugins/plugins.mjs.map +1 -0
  32. package/dist/components/TextDrawer/index.d.ts +1 -1
  33. package/dist/components/TextDrawer/index.mjs.map +1 -1
  34. package/dist/components/base/CodeViewer/index.mjs +2 -2
  35. package/dist/components/base/CodeViewer/index.mjs.map +1 -1
  36. package/dist/components/base/DiffViewer/index.mjs +1 -1
  37. package/dist/components/base/DiffViewer/index.mjs.map +1 -1
  38. package/dist/pages/{WebpackLoaders → Loaders}/Analysis/constants.d.ts +1 -1
  39. package/dist/pages/{WebpackLoaders → Loaders}/Analysis/constants.mjs +1 -1
  40. package/dist/pages/Loaders/Analysis/constants.mjs.map +1 -0
  41. package/dist/pages/Loaders/Analysis/index.mjs.map +1 -0
  42. package/dist/pages/{WebpackLoaders → Loaders}/Overall/constants.d.ts +1 -1
  43. package/dist/pages/{WebpackLoaders → Loaders}/Overall/constants.mjs +1 -1
  44. package/dist/pages/Loaders/Overall/constants.mjs.map +1 -0
  45. package/dist/pages/Loaders/Overall/index.mjs.map +1 -0
  46. package/dist/pages/Loaders/constants.d.ts +2 -0
  47. package/dist/pages/{WebpackLoaders → Loaders}/constants.mjs +1 -1
  48. package/dist/pages/Loaders/constants.mjs.map +1 -0
  49. package/dist/pages/ModuleAnalyze/chunks.mjs.map +1 -1
  50. package/dist/pages/{WebpackPlugins → Plugins}/constants.d.ts +1 -1
  51. package/dist/pages/{WebpackPlugins → Plugins}/constants.mjs +1 -1
  52. package/dist/pages/Plugins/constants.mjs.map +1 -0
  53. package/dist/pages/Plugins/index.css.map +1 -0
  54. package/dist/pages/{WebpackPlugins → Plugins}/index.mjs +2 -2
  55. package/dist/pages/Plugins/index.mjs.map +1 -0
  56. package/dist/pages/Resources/BundleDiff/DiffContainer/modules.mjs +2 -2
  57. package/dist/pages/Resources/BundleDiff/DiffContainer/modules.mjs.map +1 -1
  58. package/dist/pages/Resources/BundleDiff/DiffContainer/row.mjs +1 -1
  59. package/dist/pages/Resources/BundleDiff/DiffContainer/row.mjs.map +1 -1
  60. package/dist/pages/Resources/BundleDiff/DiffContainer/types.d.ts +1 -1
  61. package/dist/pages/Resources/BundleDiff/DiffServerAPIProvider/index.d.ts +1 -1
  62. package/dist/pages/Resources/BundleDiff/DiffServerAPIProvider/index.mjs.map +1 -1
  63. package/dist/pages/TreeShaking/editor.mjs +2 -2
  64. package/dist/pages/TreeShaking/editor.mjs.map +1 -1
  65. package/dist/pages/index.d.ts +3 -3
  66. package/dist/pages/index.mjs +4 -4
  67. package/dist/utils/data/base.d.ts +2 -2
  68. package/dist/utils/data/base.mjs.map +1 -1
  69. package/dist/utils/data/local.d.ts +10 -3
  70. package/dist/utils/data/local.mjs +37 -24
  71. package/dist/utils/data/local.mjs.map +1 -1
  72. package/dist/utils/data/local.test.d.ts +1 -0
  73. package/dist/utils/data/local.test.mjs +89 -0
  74. package/dist/utils/data/local.test.mjs.map +1 -0
  75. package/dist/utils/file.d.ts +3 -3
  76. package/dist/utils/file.mjs.map +1 -1
  77. package/dist/utils/hooks.d.ts +1 -1
  78. package/dist/utils/request.mjs +4 -3
  79. package/dist/utils/request.mjs.map +1 -1
  80. package/dist/utils/request.test.mjs +23 -0
  81. package/dist/utils/request.test.mjs.map +1 -1
  82. package/dist/utils/routes.mjs +1 -1
  83. package/dist/utils/routes.mjs.map +1 -1
  84. package/dist/utils/socket.d.ts +12 -2
  85. package/dist/utils/socket.mjs +155 -23
  86. package/dist/utils/socket.mjs.map +1 -1
  87. package/dist/utils/socket.test.d.ts +1 -0
  88. package/dist/utils/socket.test.mjs +167 -0
  89. package/dist/utils/socket.test.mjs.map +1 -0
  90. package/package.json +11 -12
  91. package/dist/components/Plugins/webpack.d.ts +0 -18
  92. package/dist/components/Plugins/webpack.mjs.map +0 -1
  93. package/dist/pages/WebpackLoaders/Analysis/constants.mjs.map +0 -1
  94. package/dist/pages/WebpackLoaders/Analysis/index.mjs.map +0 -1
  95. package/dist/pages/WebpackLoaders/Overall/constants.mjs.map +0 -1
  96. package/dist/pages/WebpackLoaders/Overall/index.mjs.map +0 -1
  97. package/dist/pages/WebpackLoaders/constants.d.ts +0 -2
  98. package/dist/pages/WebpackLoaders/constants.mjs.map +0 -1
  99. package/dist/pages/WebpackPlugins/constants.mjs.map +0 -1
  100. package/dist/pages/WebpackPlugins/index.css.map +0 -1
  101. package/dist/pages/WebpackPlugins/index.mjs.map +0 -1
  102. /package/dist/pages/{WebpackLoaders → Loaders}/Analysis/index.d.ts +0 -0
  103. /package/dist/pages/{WebpackLoaders → Loaders}/Analysis/index.mjs +0 -0
  104. /package/dist/pages/{WebpackLoaders → Loaders}/Overall/index.d.ts +0 -0
  105. /package/dist/pages/{WebpackLoaders → Loaders}/Overall/index.mjs +0 -0
  106. /package/dist/pages/{WebpackPlugins → Plugins}/index.css +0 -0
  107. /package/dist/pages/{WebpackPlugins → Plugins}/index.d.ts +0 -0
@@ -0,0 +1,2 @@
1
+ export declare const name = "Loaders";
2
+ export declare const route = "/loaders";
@@ -1,5 +1,5 @@
1
1
  const constants_name = 'Loaders';
2
- const route = '/webpack/loaders';
2
+ const route = '/loaders';
3
3
  export { constants_name as name, route };
4
4
 
5
5
  //# sourceMappingURL=constants.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pages/Loaders/constants.mjs","sources":["../../../src/pages/Loaders/constants.ts"],"sourcesContent":["export const name = 'Loaders';\n\nexport const route = '/loaders';\n"],"names":["name","route"],"mappings":"AAAO,MAAMA,iBAAO;AAEb,MAAMC,QAAQ"}
@@ -1 +1 @@
1
- {"version":3,"file":"pages/ModuleAnalyze/chunks.mjs","sources":["../../../src/pages/ModuleAnalyze/chunks.tsx"],"sourcesContent":["import { SDK } from '@rsdoctor/types';\nimport { Empty, Table, Tag } from 'antd';\nimport { orderBy } from 'es-toolkit/compat';\nimport React, { useMemo } from 'react';\nimport { formatSize } from 'src/utils';\nimport './index.sass';\nimport { Lodash } from '@rsdoctor/utils/common';\n\ntype ChunksDataType = {\n key: string | number;\n name: JSX.Element;\n size: JSX.Element;\n entry: JSX.Element;\n assets: JSX.Element[];\n};\n\nconst columns = [\n {\n title: 'Chunk Name',\n dataIndex: 'name',\n key: 'name',\n },\n {\n title: 'size | 大小',\n dataIndex: 'size',\n key: 'size',\n },\n {\n title: 'assets | 资源',\n dataIndex: 'assets',\n key: 'assets',\n },\n {\n title: 'Entry or Not | 是否是入口',\n dataIndex: 'entry',\n key: 'entry',\n },\n];\n\nexport const ChunksTable: React.FC<{\n chunks: SDK.ChunkData[];\n}> = ({ chunks }) => {\n const chunksData = useMemo(() => {\n const _chunksData: (ChunksDataType | undefined)[] = chunks.map((chunk) => {\n if (!chunk) return undefined;\n return {\n key: chunk.id,\n name: <Tag>{chunk.name}</Tag>,\n size: <Tag>{formatSize(chunk.parsedSize)}</Tag>,\n entry: <Tag>{chunk.entry ? '是 | Yes' : '否 | No'}</Tag>,\n assets: chunk.assets.map((asset) => (\n <p key={asset}>\n <Tag key={asset}>{asset}</Tag>\n </p>\n )),\n };\n });\n return orderBy(Lodash.compact(_chunksData), ['size'], ['desc']);\n }, [chunks]);\n\n return (\n <>\n {chunksData?.length ? (\n <Table\n bordered\n pagination={false}\n dataSource={chunksData}\n columns={columns}\n />\n ) : (\n <Empty />\n )}\n </>\n );\n};\n"],"names":["columns","ChunksTable","chunks","chunksData","useMemo","_chunksData","chunk","Tag","formatSize","asset","orderBy","Lodash","Table","Empty"],"mappings":";;;;;;;AAgBA,MAAMA,UAAU;IACd;QACE,OAAO;QACP,WAAW;QACX,KAAK;IACP;IACA;QACE,OAAO;QACP,WAAW;QACX,KAAK;IACP;IACA;QACE,OAAO;QACP,WAAW;QACX,KAAK;IACP;IACA;QACE,OAAO;QACP,WAAW;QACX,KAAK;IACP;CACD;AAEM,MAAMC,cAER,CAAC,EAAEC,MAAM,EAAE;IACd,MAAMC,aAAaC,QAAQ;QACzB,MAAMC,cAA8CH,OAAO,GAAG,CAAC,CAACI;YAC9D,IAAI,CAACA,OAAO;YACZ,OAAO;gBACL,KAAKA,MAAM,EAAE;gBACb,MAAM,WAAN,GAAM,IAACC,KAAGA;8BAAED,MAAM,IAAI;;gBACtB,MAAM,WAAN,GAAM,IAACC,KAAGA;8BAAEC,WAAWF,MAAM,UAAU;;gBACvC,OAAO,WAAP,GAAO,IAACC,KAAGA;8BAAED,MAAM,KAAK,GAAG,YAAY;;gBACvC,QAAQA,MAAM,MAAM,CAAC,GAAG,CAAC,CAACG,QAAAA,WAAAA,GACxB,IAAC;kCACC,kBAACF,KAAGA;sCAAcE;2BAARA;uBADJA;YAIZ;QACF;QACA,OAAOC,QAAQC,OAAO,OAAO,CAACN,cAAc;YAAC;SAAO,EAAE;YAAC;SAAO;IAChE,GAAG;QAACH;KAAO;IAEX,OAAO,WAAP,GACE;kBACGC,YAAY,SAAS,WAAT,GACX,IAACS,OAAKA;YACJ,UAAQ;YACR,YAAY;YACZ,YAAYT;YACZ,SAASH;2BAGX,IAACa,OAAKA,CAAAA;;AAId"}
1
+ {"version":3,"file":"pages/ModuleAnalyze/chunks.mjs","sources":["../../../src/pages/ModuleAnalyze/chunks.tsx"],"sourcesContent":["import { SDK } from '@rsdoctor/types';\nimport { Empty, Table, Tag } from 'antd';\nimport { orderBy } from 'es-toolkit/compat';\nimport React, { useMemo } from 'react';\nimport { formatSize } from 'src/utils';\nimport './index.sass';\nimport { Lodash } from '@rsdoctor/utils/common';\n\ntype ChunksDataType = {\n key: string | number;\n name: React.JSX.Element;\n size: React.JSX.Element;\n entry: React.JSX.Element;\n assets: React.JSX.Element[];\n};\n\nconst columns = [\n {\n title: 'Chunk Name',\n dataIndex: 'name',\n key: 'name',\n },\n {\n title: 'size | 大小',\n dataIndex: 'size',\n key: 'size',\n },\n {\n title: 'assets | 资源',\n dataIndex: 'assets',\n key: 'assets',\n },\n {\n title: 'Entry or Not | 是否是入口',\n dataIndex: 'entry',\n key: 'entry',\n },\n];\n\nexport const ChunksTable: React.FC<{\n chunks: SDK.ChunkData[];\n}> = ({ chunks }) => {\n const chunksData = useMemo(() => {\n const _chunksData: (ChunksDataType | undefined)[] = chunks.map((chunk) => {\n if (!chunk) return undefined;\n return {\n key: chunk.id,\n name: <Tag>{chunk.name}</Tag>,\n size: <Tag>{formatSize(chunk.parsedSize)}</Tag>,\n entry: <Tag>{chunk.entry ? '是 | Yes' : '否 | No'}</Tag>,\n assets: chunk.assets.map((asset) => (\n <p key={asset}>\n <Tag key={asset}>{asset}</Tag>\n </p>\n )),\n };\n });\n return orderBy(Lodash.compact(_chunksData), ['size'], ['desc']);\n }, [chunks]);\n\n return (\n <>\n {chunksData?.length ? (\n <Table\n bordered\n pagination={false}\n dataSource={chunksData}\n columns={columns}\n />\n ) : (\n <Empty />\n )}\n </>\n );\n};\n"],"names":["columns","ChunksTable","chunks","chunksData","useMemo","_chunksData","chunk","Tag","formatSize","asset","orderBy","Lodash","Table","Empty"],"mappings":";;;;;;;AAgBA,MAAMA,UAAU;IACd;QACE,OAAO;QACP,WAAW;QACX,KAAK;IACP;IACA;QACE,OAAO;QACP,WAAW;QACX,KAAK;IACP;IACA;QACE,OAAO;QACP,WAAW;QACX,KAAK;IACP;IACA;QACE,OAAO;QACP,WAAW;QACX,KAAK;IACP;CACD;AAEM,MAAMC,cAER,CAAC,EAAEC,MAAM,EAAE;IACd,MAAMC,aAAaC,QAAQ;QACzB,MAAMC,cAA8CH,OAAO,GAAG,CAAC,CAACI;YAC9D,IAAI,CAACA,OAAO;YACZ,OAAO;gBACL,KAAKA,MAAM,EAAE;gBACb,MAAM,WAAN,GAAM,IAACC,KAAGA;8BAAED,MAAM,IAAI;;gBACtB,MAAM,WAAN,GAAM,IAACC,KAAGA;8BAAEC,WAAWF,MAAM,UAAU;;gBACvC,OAAO,WAAP,GAAO,IAACC,KAAGA;8BAAED,MAAM,KAAK,GAAG,YAAY;;gBACvC,QAAQA,MAAM,MAAM,CAAC,GAAG,CAAC,CAACG,QAAAA,WAAAA,GACxB,IAAC;kCACC,kBAACF,KAAGA;sCAAcE;2BAARA;uBADJA;YAIZ;QACF;QACA,OAAOC,QAAQC,OAAO,OAAO,CAACN,cAAc;YAAC;SAAO,EAAE;YAAC;SAAO;IAChE,GAAG;QAACH;KAAO;IAEX,OAAO,WAAP,GACE;kBACGC,YAAY,SAAS,WAAT,GACX,IAACS,OAAKA;YACJ,UAAQ;YACR,YAAY;YACZ,YAAYT;YACZ,SAASH;2BAGX,IAACa,OAAKA,CAAAA;;AAId"}
@@ -1,3 +1,3 @@
1
1
  import { Client } from '@rsdoctor/types';
2
2
  export declare const name = "Plugins Analysis";
3
- export declare const route = Client.RsdoctorClientRoutes.WebpackPlugins;
3
+ export declare const route = Client.RsdoctorClientRoutes.Plugins;
@@ -1,6 +1,6 @@
1
1
  import { Client } from "@rsdoctor/types";
2
2
  const constants_name = 'Plugins Analysis';
3
- const route = Client.RsdoctorClientRoutes.WebpackPlugins;
3
+ const route = Client.RsdoctorClientRoutes.Plugins;
4
4
  export { constants_name as name, route };
5
5
 
6
6
  //# sourceMappingURL=constants.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pages/Plugins/constants.mjs","sources":["../../../src/pages/Plugins/constants.ts"],"sourcesContent":["import { Client } from '@rsdoctor/types';\n\nexport const name = 'Plugins Analysis';\n\nexport const route = Client.RsdoctorClientRoutes.Plugins;\n"],"names":["name","route","Client"],"mappings":";AAEO,MAAMA,iBAAO;AAEb,MAAMC,QAAQC,OAAO,oBAAoB,CAAC,OAAO"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["webpack://./src/pages/Plugins/index.scss"],"names":[],"mappings":"AAAA;EACE,YAAY;AACd","sourcesContent":[".plugin-select .ant-select-selector{width:300px}"],"sourceRoot":""}
@@ -5,7 +5,7 @@ import { Button, Card, Input, Select, Space, Typography } from "antd";
5
5
  import { useState } from "react";
6
6
  import { WebpackConfigurationViewer } from "../../components/Configuration/index.mjs";
7
7
  import { ServerAPIProvider } from "../../components/Manifest/index.mjs";
8
- import { WebpackPluginsDataTable } from "../../components/Plugins/webpack.mjs";
8
+ import { PluginsDataTable } from "../../components/Plugins/plugins.mjs";
9
9
  import { Size } from "../../constants.mjs";
10
10
  import "./index.css";
11
11
  export * from "./constants.mjs";
@@ -106,7 +106,7 @@ const Page = ()=>{
106
106
  hooks: selectedHooks,
107
107
  tapNames: selectedTapNames
108
108
  },
109
- children: (res)=>/*#__PURE__*/ jsx(WebpackPluginsDataTable, {
109
+ children: (res)=>/*#__PURE__*/ jsx(PluginsDataTable, {
110
110
  dataSource: res
111
111
  })
112
112
  })
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pages/Plugins/index.mjs","sources":["../../../src/pages/Plugins/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 { PluginsDataTable } from '../../components/Plugins/plugins';\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) => <PluginsDataTable 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","PluginsDataTable"],"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,kBAAgBA;gCAAC,YAAYD;;;;;;;AAMpD"}
@@ -67,7 +67,7 @@ const Modules = ({ baseline, current })=>{
67
67
  const dataSource = useMemo(()=>{
68
68
  const res = {};
69
69
  bModules.forEach((mod)=>{
70
- const modPath = mod.webpackId?.replace(ModuleHashPattern, '') || mod.path?.replace(ModuleHashPattern, '');
70
+ const modPath = mod.identifier?.replace(ModuleHashPattern, '') || mod.path?.replace(ModuleHashPattern, '');
71
71
  if (res[modPath]) console.warn('[Baseline Module Exists]: ', mod, res);
72
72
  else res[modPath] = {
73
73
  path: modPath,
@@ -75,7 +75,7 @@ const Modules = ({ baseline, current })=>{
75
75
  };
76
76
  });
77
77
  cModules.forEach((mod)=>{
78
- const modPath = mod.webpackId?.replace(ModuleHashPattern, '') || mod.path?.replace(ModuleHashPattern, '');
78
+ const modPath = mod.identifier?.replace(ModuleHashPattern, '') || mod.path?.replace(ModuleHashPattern, '');
79
79
  if (!res[modPath]) res[modPath] = {
80
80
  path: modPath
81
81
  };
@@ -1 +1 @@
1
- {"version":3,"file":"pages/Resources/BundleDiff/DiffContainer/modules.mjs","sources":["../../../../../src/pages/Resources/BundleDiff/DiffContainer/modules.tsx"],"sourcesContent":["import React, { useMemo, useState } from 'react';\nimport {\n Col,\n Divider,\n Row,\n Select,\n Space,\n Table,\n Tag,\n Tooltip,\n Typography,\n} from 'antd';\nimport { uniq } from 'es-toolkit/compat';\nimport { InfoCircleOutlined, FileSearchOutlined } from '@ant-design/icons';\nimport {\n BundleDiffComponentCardProps,\n BundleDiffTableModulesData,\n} from './types';\nimport { beautifyModulePath, useUniqModules } from '../../../../utils';\nimport { Size } from '../../../../constants';\nimport { KeywordInput } from '../../../../components/Form/keyword';\nimport { ViewChanges } from './changes';\nimport { UpdateType } from './constants';\nimport { Badge as Bdg } from '../../../../components/Badge';\nimport { ModuleHashPattern, getTargetColumnPropsForModuleRow } from './row';\nimport { Graph } from '@rsdoctor/utils/common';\n\nexport function getUpdateType(e: BundleDiffTableModulesData): UpdateType {\n if (e.baseline && !e.current) {\n // deleted\n return UpdateType.Deleted;\n }\n\n if (!e.baseline && e.current) {\n // new\n return UpdateType.New;\n }\n\n if (e.baseline && e.current) {\n if (\n e.baseline.size.sourceSize === e.current.size.sourceSize &&\n e.baseline.size.parsedSize === e.current.size.parsedSize\n ) {\n // not changed\n return UpdateType.NotChanged;\n }\n // update\n return UpdateType.Changed;\n }\n\n throw new Error('Update Type not match');\n}\n\nexport const FileUpdateTypeTag: React.FC<{ type: UpdateType }> = ({ type }) => {\n if (type === UpdateType.NotChanged) {\n return (\n <Tooltip title=\"It hasn't changed between Baseline and Current\">\n <Tag color=\"success\">Not Changed</Tag>\n </Tooltip>\n );\n }\n if (type === UpdateType.Changed) {\n return (\n <Tooltip title=\"It has been changed between Baseline and Current\">\n <Tag color=\"warning\">Changed</Tag>\n </Tooltip>\n );\n }\n if (type === UpdateType.New) {\n return (\n <Tooltip title=\"It is created in Current\">\n <Tag color=\"error\">New</Tag>\n </Tooltip>\n );\n }\n if (type === UpdateType.Deleted) {\n return (\n <Tooltip title=\"It has been deleted in Current\">\n <Tag color=\"error\">Deleted</Tag>\n </Tooltip>\n );\n }\n return null;\n};\n\nexport const Modules: React.FC<BundleDiffComponentCardProps> = ({\n baseline,\n current,\n}) => {\n const bModules = useMemo(\n () => useUniqModules(baseline.moduleGraph.modules),\n [baseline],\n );\n const cModules = useMemo(\n () => useUniqModules(current.moduleGraph.modules),\n [current],\n );\n\n const bChunks = baseline.chunkGraph.chunks;\n const cChunks = current.chunkGraph.chunks;\n\n const bRoot = baseline.root;\n const cRoot = current.root;\n\n const [keyword, setKeyword] = useState<string>();\n const [selectedUpdateTypes, setSelectedUpdateTypes] = useState<UpdateType[]>(\n [],\n );\n\n const dataSource = useMemo(() => {\n const res: Record<string, BundleDiffTableModulesData> = {};\n\n bModules.forEach((mod) => {\n const modPath =\n mod.webpackId?.replace(ModuleHashPattern, '') ||\n mod.path?.replace(ModuleHashPattern, '');\n\n if (!res[modPath]) {\n res[modPath] = {\n path: modPath,\n baseline: mod,\n };\n } else {\n console.warn('[Baseline Module Exists]: ', mod, res);\n }\n });\n\n cModules.forEach((mod) => {\n const modPath =\n mod.webpackId?.replace(ModuleHashPattern, '') ||\n mod.path?.replace(ModuleHashPattern, '');\n\n if (!res[modPath]) {\n res[modPath] = {\n path: modPath,\n };\n }\n res[modPath].current = mod;\n });\n\n return Object.values(res);\n }, [bModules, cModules]);\n\n const filteredDataSource = useMemo(() => {\n let list = dataSource.slice();\n\n if (keyword) {\n list = list.filter((e) => e.path.indexOf(keyword) > -1);\n }\n\n if (selectedUpdateTypes.length) {\n list = list.filter((e) => {\n return selectedUpdateTypes.includes(getUpdateType(e));\n });\n }\n\n return list;\n }, [dataSource, keyword, selectedUpdateTypes]);\n\n const { bFilteredModulesLength, cFilteredModulesLength } = useMemo(() => {\n return {\n bFilteredModulesLength: filteredDataSource.filter((e) => e.baseline)\n .length,\n cFilteredModulesLength: filteredDataSource.filter((e) => e.current)\n .length,\n };\n }, [filteredDataSource]);\n\n return (\n <Row gutter={[Size.BasePadding, Size.BasePadding]}>\n <Col span={24}>\n <Space wrap>\n <KeywordInput\n icon={<FileSearchOutlined />}\n label=\"\"\n labelStyle={{ width: 45 }}\n placeholder=\"Search by name\"\n onChange={(e) => {\n setKeyword(e);\n }}\n />\n <Select\n mode=\"multiple\"\n placeholder=\"Filter by changed type\"\n style={{ width: 200 }}\n options={Object.values(UpdateType).map((e) => ({\n label: e,\n value: e,\n }))}\n allowClear\n onChange={(e) => {\n setSelectedUpdateTypes(e);\n }}\n />\n </Space>\n </Col>\n <Col span={24}>\n <Table\n bordered\n sticky={{ offsetHeader: 54 }}\n pagination={{\n pageSize: 20,\n size: 'small',\n }}\n scroll={{ x: 1700 }}\n dataSource={filteredDataSource}\n rowKey={(e) => e.path}\n columns={[\n {\n fixed: 'left',\n title: (\n <Tooltip\n title={\n <Space direction=\"vertical\">\n <Typography.Text style={{ color: 'inherit' }}>\n filtered modules is {filteredDataSource.length} (Current\n & Baseline)\n </Typography.Text>\n <Typography.Text style={{ color: 'inherit' }}>\n total modules is {dataSource.length} (Current &\n Baseline)\n </Typography.Text>\n </Space>\n }\n >\n <Typography.Text strong>Modules</Typography.Text>\n <Divider type=\"vertical\" />\n <Typography.Text\n type=\"secondary\"\n style={{ fontSize: 10, fontWeight: 400, marginRight: 4 }}\n >\n {filteredDataSource.length}/{dataSource.length}\n </Typography.Text>\n <InfoCircleOutlined />\n </Tooltip>\n ),\n render: (_v, r) => {\n const { alias, inNodeModules } = beautifyModulePath(\n r.path,\n r.baseline ? bRoot : cRoot,\n );\n return (\n <Space>\n <Tooltip title={r.path}>\n <Typography.Text copyable={{ text: r.path }}>\n {alias}\n </Typography.Text>\n </Tooltip>\n <FileUpdateTypeTag type={getUpdateType(r)} />\n {inNodeModules ? (\n <Tag color=\"warning\">node_modules</Tag>\n ) : null}\n </Space>\n );\n },\n },\n getTargetColumnPropsForModuleRow(\n 'current',\n bFilteredModulesLength,\n cFilteredModulesLength,\n ),\n getTargetColumnPropsForModuleRow(\n 'baseline',\n bFilteredModulesLength,\n cFilteredModulesLength,\n ),\n {\n title: 'in Assets',\n render: (_v, r) => {\n const b: string[] = [];\n const c: string[] = [];\n if (r.current) {\n Graph.getChunksByModule(r.current, cChunks).forEach((e) =>\n e.assets.forEach((asset) => c.push(asset)),\n );\n }\n\n if (r.baseline) {\n Graph.getChunksByModule(r.baseline, bChunks).forEach((e) =>\n e.assets.forEach((asset) => b.push(asset)),\n );\n }\n\n if (!b.length && !c.length) return null;\n\n return (\n <Space direction=\"vertical\">\n {uniq(c)\n .filter(Boolean)\n .map((e) => (\n <Bdg label=\"Current\" value={e} key={`c_${e}`} />\n ))}\n {uniq(b)\n .filter(Boolean)\n .map((e) => (\n <Bdg label=\"Baseline\" value={e} key={`b_${e}`} />\n ))}\n </Space>\n );\n },\n },\n {\n title: 'Actions',\n width: 200,\n render: (_v, r) => {\n const isChanged = getUpdateType(r) === UpdateType.Changed;\n return (\n <Space direction=\"vertical\" style={{ maxWidth: 170 }}>\n {isChanged ? (\n <ViewChanges\n text=\"View Changes\"\n file={r.path}\n data={[\n {\n baseline:\n baseline.moduleCodeMap[r.baseline?.id as number]\n ?.source,\n current:\n current.moduleCodeMap[r.current?.id as number]\n ?.source,\n group: 'Source',\n },\n {\n baseline:\n baseline.moduleCodeMap[r.baseline?.id as number]\n ?.transformed,\n current:\n current.moduleCodeMap[r.current?.id as number]\n ?.transformed,\n group: 'Transformed Source',\n },\n {\n baseline:\n baseline.moduleCodeMap[r.baseline?.id as number]\n ?.parsedSource,\n current:\n current.moduleCodeMap[r.current?.id as number]\n ?.parsedSource,\n group: 'Parsed Source',\n },\n ]}\n />\n ) : null}\n {r?.current ? (\n <ViewChanges\n text=\"Current Result Viewer\"\n file={r.path}\n data={[\n {\n baseline:\n current.moduleCodeMap[r.current!.id]?.source,\n current:\n current.moduleCodeMap[r.current!.id]?.transformed,\n baselineTitle: 'Current Source',\n currentTitle: 'Current Transformed Source',\n group: 'Transformed Source',\n },\n {\n baseline:\n current.moduleCodeMap[r.current!.id]?.source,\n current:\n current.moduleCodeMap[r.current!.id]\n ?.parsedSource,\n baselineTitle: 'Current Source',\n currentTitle: 'Current Parsed Source',\n group: 'Parsed Source',\n },\n ]}\n />\n ) : null}\n </Space>\n );\n },\n },\n ]}\n />\n </Col>\n </Row>\n );\n};\n"],"names":["getUpdateType","e","UpdateType","Error","FileUpdateTypeTag","type","Tooltip","Tag","Modules","baseline","current","bModules","useMemo","useUniqModules","cModules","bChunks","cChunks","bRoot","cRoot","keyword","setKeyword","useState","selectedUpdateTypes","setSelectedUpdateTypes","dataSource","res","mod","modPath","ModuleHashPattern","console","Object","filteredDataSource","list","bFilteredModulesLength","cFilteredModulesLength","Row","Size","Col","Space","KeywordInput","FileSearchOutlined","Select","Table","Typography","Divider","InfoCircleOutlined","_v","r","alias","inNodeModules","beautifyModulePath","getTargetColumnPropsForModuleRow","b","c","Graph","asset","uniq","Boolean","Bdg","isChanged","ViewChanges"],"mappings":"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"}
1
+ {"version":3,"file":"pages/Resources/BundleDiff/DiffContainer/modules.mjs","sources":["../../../../../src/pages/Resources/BundleDiff/DiffContainer/modules.tsx"],"sourcesContent":["import React, { useMemo, useState } from 'react';\nimport {\n Col,\n Divider,\n Row,\n Select,\n Space,\n Table,\n Tag,\n Tooltip,\n Typography,\n} from 'antd';\nimport { uniq } from 'es-toolkit/compat';\nimport { InfoCircleOutlined, FileSearchOutlined } from '@ant-design/icons';\nimport {\n BundleDiffComponentCardProps,\n BundleDiffTableModulesData,\n} from './types';\nimport { beautifyModulePath, useUniqModules } from '../../../../utils';\nimport { Size } from '../../../../constants';\nimport { KeywordInput } from '../../../../components/Form/keyword';\nimport { ViewChanges } from './changes';\nimport { UpdateType } from './constants';\nimport { Badge as Bdg } from '../../../../components/Badge';\nimport { ModuleHashPattern, getTargetColumnPropsForModuleRow } from './row';\nimport { Graph } from '@rsdoctor/utils/common';\n\nexport function getUpdateType(e: BundleDiffTableModulesData): UpdateType {\n if (e.baseline && !e.current) {\n // deleted\n return UpdateType.Deleted;\n }\n\n if (!e.baseline && e.current) {\n // new\n return UpdateType.New;\n }\n\n if (e.baseline && e.current) {\n if (\n e.baseline.size.sourceSize === e.current.size.sourceSize &&\n e.baseline.size.parsedSize === e.current.size.parsedSize\n ) {\n // not changed\n return UpdateType.NotChanged;\n }\n // update\n return UpdateType.Changed;\n }\n\n throw new Error('Update Type not match');\n}\n\nexport const FileUpdateTypeTag: React.FC<{ type: UpdateType }> = ({ type }) => {\n if (type === UpdateType.NotChanged) {\n return (\n <Tooltip title=\"It hasn't changed between Baseline and Current\">\n <Tag color=\"success\">Not Changed</Tag>\n </Tooltip>\n );\n }\n if (type === UpdateType.Changed) {\n return (\n <Tooltip title=\"It has been changed between Baseline and Current\">\n <Tag color=\"warning\">Changed</Tag>\n </Tooltip>\n );\n }\n if (type === UpdateType.New) {\n return (\n <Tooltip title=\"It is created in Current\">\n <Tag color=\"error\">New</Tag>\n </Tooltip>\n );\n }\n if (type === UpdateType.Deleted) {\n return (\n <Tooltip title=\"It has been deleted in Current\">\n <Tag color=\"error\">Deleted</Tag>\n </Tooltip>\n );\n }\n return null;\n};\n\nexport const Modules: React.FC<BundleDiffComponentCardProps> = ({\n baseline,\n current,\n}) => {\n const bModules = useMemo(\n () => useUniqModules(baseline.moduleGraph.modules),\n [baseline],\n );\n const cModules = useMemo(\n () => useUniqModules(current.moduleGraph.modules),\n [current],\n );\n\n const bChunks = baseline.chunkGraph.chunks;\n const cChunks = current.chunkGraph.chunks;\n\n const bRoot = baseline.root;\n const cRoot = current.root;\n\n const [keyword, setKeyword] = useState<string>();\n const [selectedUpdateTypes, setSelectedUpdateTypes] = useState<UpdateType[]>(\n [],\n );\n\n const dataSource = useMemo(() => {\n const res: Record<string, BundleDiffTableModulesData> = {};\n\n bModules.forEach((mod) => {\n const modPath =\n mod.identifier?.replace(ModuleHashPattern, '') ||\n mod.path?.replace(ModuleHashPattern, '');\n\n if (!res[modPath]) {\n res[modPath] = {\n path: modPath,\n baseline: mod,\n };\n } else {\n console.warn('[Baseline Module Exists]: ', mod, res);\n }\n });\n\n cModules.forEach((mod) => {\n const modPath =\n mod.identifier?.replace(ModuleHashPattern, '') ||\n mod.path?.replace(ModuleHashPattern, '');\n\n if (!res[modPath]) {\n res[modPath] = {\n path: modPath,\n };\n }\n res[modPath].current = mod;\n });\n\n return Object.values(res);\n }, [bModules, cModules]);\n\n const filteredDataSource = useMemo(() => {\n let list = dataSource.slice();\n\n if (keyword) {\n list = list.filter((e) => e.path.indexOf(keyword) > -1);\n }\n\n if (selectedUpdateTypes.length) {\n list = list.filter((e) => {\n return selectedUpdateTypes.includes(getUpdateType(e));\n });\n }\n\n return list;\n }, [dataSource, keyword, selectedUpdateTypes]);\n\n const { bFilteredModulesLength, cFilteredModulesLength } = useMemo(() => {\n return {\n bFilteredModulesLength: filteredDataSource.filter((e) => e.baseline)\n .length,\n cFilteredModulesLength: filteredDataSource.filter((e) => e.current)\n .length,\n };\n }, [filteredDataSource]);\n\n return (\n <Row gutter={[Size.BasePadding, Size.BasePadding]}>\n <Col span={24}>\n <Space wrap>\n <KeywordInput\n icon={<FileSearchOutlined />}\n label=\"\"\n labelStyle={{ width: 45 }}\n placeholder=\"Search by name\"\n onChange={(e) => {\n setKeyword(e);\n }}\n />\n <Select\n mode=\"multiple\"\n placeholder=\"Filter by changed type\"\n style={{ width: 200 }}\n options={Object.values(UpdateType).map((e) => ({\n label: e,\n value: e,\n }))}\n allowClear\n onChange={(e) => {\n setSelectedUpdateTypes(e);\n }}\n />\n </Space>\n </Col>\n <Col span={24}>\n <Table\n bordered\n sticky={{ offsetHeader: 54 }}\n pagination={{\n pageSize: 20,\n size: 'small',\n }}\n scroll={{ x: 1700 }}\n dataSource={filteredDataSource}\n rowKey={(e) => e.path}\n columns={[\n {\n fixed: 'left',\n title: (\n <Tooltip\n title={\n <Space direction=\"vertical\">\n <Typography.Text style={{ color: 'inherit' }}>\n filtered modules is {filteredDataSource.length} (Current\n & Baseline)\n </Typography.Text>\n <Typography.Text style={{ color: 'inherit' }}>\n total modules is {dataSource.length} (Current &\n Baseline)\n </Typography.Text>\n </Space>\n }\n >\n <Typography.Text strong>Modules</Typography.Text>\n <Divider type=\"vertical\" />\n <Typography.Text\n type=\"secondary\"\n style={{ fontSize: 10, fontWeight: 400, marginRight: 4 }}\n >\n {filteredDataSource.length}/{dataSource.length}\n </Typography.Text>\n <InfoCircleOutlined />\n </Tooltip>\n ),\n render: (_v, r) => {\n const { alias, inNodeModules } = beautifyModulePath(\n r.path,\n r.baseline ? bRoot : cRoot,\n );\n return (\n <Space>\n <Tooltip title={r.path}>\n <Typography.Text copyable={{ text: r.path }}>\n {alias}\n </Typography.Text>\n </Tooltip>\n <FileUpdateTypeTag type={getUpdateType(r)} />\n {inNodeModules ? (\n <Tag color=\"warning\">node_modules</Tag>\n ) : null}\n </Space>\n );\n },\n },\n getTargetColumnPropsForModuleRow(\n 'current',\n bFilteredModulesLength,\n cFilteredModulesLength,\n ),\n getTargetColumnPropsForModuleRow(\n 'baseline',\n bFilteredModulesLength,\n cFilteredModulesLength,\n ),\n {\n title: 'in Assets',\n render: (_v, r) => {\n const b: string[] = [];\n const c: string[] = [];\n if (r.current) {\n Graph.getChunksByModule(r.current, cChunks).forEach((e) =>\n e.assets.forEach((asset) => c.push(asset)),\n );\n }\n\n if (r.baseline) {\n Graph.getChunksByModule(r.baseline, bChunks).forEach((e) =>\n e.assets.forEach((asset) => b.push(asset)),\n );\n }\n\n if (!b.length && !c.length) return null;\n\n return (\n <Space direction=\"vertical\">\n {uniq(c)\n .filter(Boolean)\n .map((e) => (\n <Bdg label=\"Current\" value={e} key={`c_${e}`} />\n ))}\n {uniq(b)\n .filter(Boolean)\n .map((e) => (\n <Bdg label=\"Baseline\" value={e} key={`b_${e}`} />\n ))}\n </Space>\n );\n },\n },\n {\n title: 'Actions',\n width: 200,\n render: (_v, r) => {\n const isChanged = getUpdateType(r) === UpdateType.Changed;\n return (\n <Space direction=\"vertical\" style={{ maxWidth: 170 }}>\n {isChanged ? (\n <ViewChanges\n text=\"View Changes\"\n file={r.path}\n data={[\n {\n baseline:\n baseline.moduleCodeMap[r.baseline?.id as number]\n ?.source,\n current:\n current.moduleCodeMap[r.current?.id as number]\n ?.source,\n group: 'Source',\n },\n {\n baseline:\n baseline.moduleCodeMap[r.baseline?.id as number]\n ?.transformed,\n current:\n current.moduleCodeMap[r.current?.id as number]\n ?.transformed,\n group: 'Transformed Source',\n },\n {\n baseline:\n baseline.moduleCodeMap[r.baseline?.id as number]\n ?.parsedSource,\n current:\n current.moduleCodeMap[r.current?.id as number]\n ?.parsedSource,\n group: 'Parsed Source',\n },\n ]}\n />\n ) : null}\n {r?.current ? (\n <ViewChanges\n text=\"Current Result Viewer\"\n file={r.path}\n data={[\n {\n baseline:\n current.moduleCodeMap[r.current!.id]?.source,\n current:\n current.moduleCodeMap[r.current!.id]?.transformed,\n baselineTitle: 'Current Source',\n currentTitle: 'Current Transformed Source',\n group: 'Transformed Source',\n },\n {\n baseline:\n current.moduleCodeMap[r.current!.id]?.source,\n current:\n current.moduleCodeMap[r.current!.id]\n ?.parsedSource,\n baselineTitle: 'Current Source',\n currentTitle: 'Current Parsed Source',\n group: 'Parsed Source',\n },\n ]}\n />\n ) : null}\n </Space>\n );\n },\n },\n ]}\n />\n </Col>\n </Row>\n );\n};\n"],"names":["getUpdateType","e","UpdateType","Error","FileUpdateTypeTag","type","Tooltip","Tag","Modules","baseline","current","bModules","useMemo","useUniqModules","cModules","bChunks","cChunks","bRoot","cRoot","keyword","setKeyword","useState","selectedUpdateTypes","setSelectedUpdateTypes","dataSource","res","mod","modPath","ModuleHashPattern","console","Object","filteredDataSource","list","bFilteredModulesLength","cFilteredModulesLength","Row","Size","Col","Space","KeywordInput","FileSearchOutlined","Select","Table","Typography","Divider","InfoCircleOutlined","_v","r","alias","inNodeModules","beautifyModulePath","getTargetColumnPropsForModuleRow","b","c","Graph","asset","uniq","Boolean","Bdg","isChanged","ViewChanges"],"mappings":"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"}
@@ -158,7 +158,7 @@ const ModuleRowForAsset = ({ data, baseline, current })=>{
158
158
  ];
159
159
  const map = new Map();
160
160
  mods.forEach((mod)=>{
161
- const modPath = mod.webpackId?.replace(ModuleHashPattern, '') || mod.path?.replace(ModuleHashPattern, '');
161
+ const modPath = mod.identifier?.replace(ModuleHashPattern, '') || mod.path?.replace(ModuleHashPattern, '');
162
162
  let t = map.get(modPath);
163
163
  if (!t) t = {
164
164
  path: modPath
@@ -1 +1 @@
1
- {"version":3,"file":"pages/Resources/BundleDiff/DiffContainer/row.mjs","sources":["../../../../../src/pages/Resources/BundleDiff/DiffContainer/row.tsx"],"sourcesContent":["import { InfoCircleOutlined, SearchOutlined } from '@ant-design/icons';\nimport {\n Button,\n Divider,\n Input,\n InputRef,\n Space,\n Table,\n Tag,\n Tooltip,\n Typography,\n} from 'antd';\nimport {\n ColumnGroupType,\n ColumnType,\n FilterConfirmProps,\n} from 'antd/es/table/interface';\nimport { upperFirst } from 'es-toolkit/compat';\nimport React, { useMemo, useRef, useState } from 'react';\nimport { Client } from '@rsdoctor/types';\nimport { CompareFn } from 'antd/lib/table/interface';\nimport { Color } from '../../../../constants';\nimport {\n beautifyModulePath,\n formatPercent,\n formatSize,\n} from '../../../../utils';\nimport { ViewChanges } from './changes';\nimport { FileUpdateTypeTag, getUpdateType } from './modules';\nimport {\n BundleDiffComponentCardProps,\n BundleDiffTableAssetsData,\n BundleDiffTableModulesData,\n} from './types';\nimport { UpdateType } from './constants';\nimport { formatDiffSize } from './utils';\nimport { Graph } from '@rsdoctor/utils/common';\n\nexport const ModuleHashPattern = /[a-fA-F0-9]{20,}/;\n\nexport const getSizeColumnPropsForModuleRow = (\n key: 'baseline' | 'current',\n sizeKey: 'parsedSize' | 'sourceSize',\n sortByChanged?: boolean,\n): ColumnType<BundleDiffTableModulesData> => {\n const sortByChangedFn: CompareFn<any> = (a, b) =>\n (a.current?.size[sizeKey] || 0) -\n (a.baseline?.size[sizeKey] || 0) -\n (b.current?.size[sizeKey] || 0) +\n (b.baseline?.size[sizeKey] || 0);\n\n const sorterFn: CompareFn<any> = sortByChanged\n ? (a, b) => sortByChangedFn(a, b)\n : (a, b) => (a[key]?.size[sizeKey] || 0) - (b[key]?.size[sizeKey] || 0);\n\n return {\n width: 200,\n sorter: (a, b) => sorterFn(a, b),\n render: (_v, r) => {\n if (!r[key]) return '-';\n const size = r[key]!.size[sizeKey];\n return (\n <Space>\n <Typography.Text>{formatSize(size)}</Typography.Text>\n {key === 'current'\n ? formatDiffSize(\n r.baseline?.size[sizeKey] || 0,\n size,\n (r.baseline?.size[sizeKey] || 0) > size\n ? Client.RsdoctorClientDiffState.Down\n : Client.RsdoctorClientDiffState.Up,\n )\n : null}\n </Space>\n );\n },\n };\n};\n\nexport const getTargetColumnPropsForModuleRow = (\n key: 'baseline' | 'current',\n bModulesCount: number,\n cModulesCount: number,\n): ColumnGroupType<BundleDiffTableModulesData> => {\n const [sortByChanged, setSortByChanged] = useState(false);\n\n const isB = key === 'baseline';\n return {\n title: () => {\n const count = isB ? bModulesCount : cModulesCount;\n const title = upperFirst(key);\n const diff = Graph.diffSize(bModulesCount, cModulesCount);\n return (\n <div>\n <Typography.Text>{title}</Typography.Text>\n <Divider type=\"vertical\" />\n <Tooltip\n title={\n <Space direction=\"vertical\">\n <Typography.Text style={{ color: 'inherit' }}>\n {title} modules is {count}\n </Typography.Text>\n {isB ? null : (\n <Typography.Text style={{ color: 'inherit' }}>\n Percent is {formatPercent(diff.percent)}\n </Typography.Text>\n )}\n </Space>\n }\n >\n <Space>\n <Typography.Text\n type=\"secondary\"\n style={{ fontSize: 10, fontWeight: 400 }}\n >\n {count}\n </Typography.Text>\n <InfoCircleOutlined />\n </Space>\n </Tooltip>\n </div>\n );\n },\n children: [\n {\n title: 'Source Size',\n ...getSizeColumnPropsForModuleRow(key, 'sourceSize', sortByChanged),\n },\n {\n title: 'Parsed Size',\n defaultSortOrder: isB ? undefined : 'descend',\n ...getSizeColumnPropsForModuleRow(key, 'parsedSize', sortByChanged),\n },\n ],\n filterSearch: true,\n filters: [\n {\n text: 'Show Changed',\n value: UpdateType.NotChanged,\n },\n {\n text: 'Show All',\n value: 'All',\n },\n ],\n onFilter(v, r) {\n if (v === UpdateType.NotChanged) {\n setSortByChanged(true);\n } else {\n setSortByChanged(false);\n }\n return v === UpdateType.NotChanged ? getUpdateType(r) !== v : true;\n },\n };\n};\n\nexport const ModuleRowForAsset: React.FC<\n { data: BundleDiffTableAssetsData } & Pick<\n BundleDiffComponentCardProps,\n 'baseline' | 'current'\n >\n> = ({ data, baseline, current }) => {\n const { modules: bTotalModules } = baseline.moduleGraph;\n const { modules: cTotalModules } = current.moduleGraph;\n const { chunks: bToTalChunks } = baseline.chunkGraph;\n const { chunks: cToTalChunks } = current.chunkGraph;\n const bRoot = baseline.root;\n const cRoot = current.root;\n\n const [searchText, setSearchText] = useState('');\n const searchInput = useRef<InputRef>(null);\n\n const handleSearch = (\n selectedKeys: string[],\n confirm: (param?: FilterConfirmProps) => void,\n ) => {\n confirm();\n setSearchText(selectedKeys[0]);\n };\n\n const handleReset = (clearFilters: () => void) => {\n clearFilters();\n setSearchText('');\n };\n\n const isBaseline = '__is_baseline__' as const;\n\n const bModules = useMemo(\n () =>\n data.baseline\n ? Graph.getModulesByAsset(data.baseline, bToTalChunks, bTotalModules)\n .map((e) => ({\n ...e,\n [isBaseline]: true,\n }))\n .filter((cModule) => !cModule.concatenationModules?.length)\n : [],\n [data, baseline],\n );\n const cModules = useMemo(\n () =>\n data.current\n ? Graph.getModulesByAsset(data.current, cToTalChunks, cTotalModules)\n .map((e) => ({\n ...e,\n [isBaseline]: false,\n }))\n .filter((cModule) => !cModule.concatenationModules?.length)\n : [],\n [data, current],\n );\n\n const getPathInfo = (r: BundleDiffTableModulesData) =>\n beautifyModulePath(r.path, r.__is_baseline__ ? bRoot : cRoot);\n\n const dataSource: BundleDiffTableModulesData[] = useMemo(() => {\n const mods = [...bModules, ...cModules];\n const map = new Map<string, BundleDiffTableModulesData>();\n\n // group by module.path\n mods.forEach((mod) => {\n const modPath =\n mod.webpackId?.replace(ModuleHashPattern, '') ||\n mod.path?.replace(ModuleHashPattern, '');\n let t: BundleDiffTableModulesData = map.get(modPath)!;\n\n if (!t) {\n t = { path: modPath };\n }\n\n if (mod[isBaseline]) {\n t.baseline = mod;\n } else {\n t.current = mod;\n }\n map.set(modPath, t);\n });\n\n return [...map.values()];\n }, [bModules, cModules, searchText]);\n\n const { bModulesCount, cModulesCount, totalCount } = useMemo(() => {\n const fileNameFilter = (e: BundleDiffTableModulesData) =>\n getPathInfo(e).alias.indexOf(searchText) > -1;\n\n let b = dataSource.filter((e) => e.baseline);\n let c = dataSource.filter((e) => e.current);\n let totalCount = dataSource.length;\n\n if (searchText) {\n b = b.filter(fileNameFilter);\n c = c.filter(fileNameFilter);\n totalCount = dataSource.filter(fileNameFilter).length;\n }\n\n return {\n bModulesCount: b.length,\n cModulesCount: c.length,\n totalCount,\n };\n }, [dataSource, searchText]);\n\n return (\n <Table\n dataSource={dataSource}\n rowKey={(e) => e.path}\n size=\"small\"\n pagination={{\n size: 'small',\n }}\n bordered\n scroll={{ x: 1500 }}\n columns={[\n {\n fixed: 'left',\n title: () => {\n return (\n <div>\n <Typography.Text>\n Modules of {`\"${data.alias}\"`}\n </Typography.Text>\n <Divider type=\"vertical\" />\n <Tooltip\n title={\n <Space direction=\"vertical\">\n <Typography.Text style={{ color: 'inherit' }}>\n filtered modules: {totalCount}\n </Typography.Text>\n <Typography.Text style={{ color: 'inherit' }}>\n total modules: {dataSource.length}\n </Typography.Text>\n </Space>\n }\n >\n <Typography.Text\n type=\"secondary\"\n style={{ fontSize: 10, fontWeight: 400, marginRight: 4 }}\n >\n {totalCount}/{dataSource.length}\n </Typography.Text>\n <InfoCircleOutlined />\n </Tooltip>\n </div>\n );\n },\n filterDropdown({\n setSelectedKeys,\n selectedKeys,\n confirm,\n clearFilters,\n }) {\n return (\n <div\n style={{ padding: 8 }}\n onKeyDown={(e) => e.stopPropagation()}\n >\n <Input\n ref={searchInput}\n placeholder={`Search by file name`}\n value={selectedKeys[0]}\n onChange={(e) =>\n setSelectedKeys(e.target.value ? [e.target.value] : [])\n }\n onPressEnter={() =>\n handleSearch(selectedKeys as string[], confirm)\n }\n style={{ marginBottom: 8, display: 'block' }}\n />\n <Space>\n <Button\n type=\"primary\"\n onClick={() =>\n handleSearch(selectedKeys as string[], confirm)\n }\n icon={<SearchOutlined />}\n size=\"small\"\n style={{ width: 90 }}\n >\n Search\n </Button>\n <Button\n onClick={() => {\n if (clearFilters) {\n handleReset(clearFilters);\n }\n setSelectedKeys([]);\n handleSearch([], confirm);\n }}\n size=\"small\"\n style={{ width: 90 }}\n >\n Reset\n </Button>\n </Space>\n </div>\n );\n },\n filterSearch: true,\n filterIcon: (filtered) => (\n <Space>\n <Typography.Text\n type={searchText ? undefined : 'secondary'}\n style={{ fontWeight: 400 }}\n >\n {searchText || 'Search by file name'}\n </Typography.Text>\n <SearchOutlined\n style={{ color: filtered ? Color.Blue : undefined }}\n />\n </Space>\n ),\n onFilterDropdownOpenChange: (visible) => {\n if (visible) {\n setTimeout(() => searchInput.current?.focus(), 100);\n }\n },\n onFilter(v, r) {\n return getPathInfo(r).alias.indexOf(v as string) > -1;\n },\n render: (_v, r) => {\n const { alias, inNodeModules } = getPathInfo(r);\n return (\n <Space>\n <Tooltip title={r.path}>\n <Typography.Text copyable={{ text: r.path }}>\n {alias}\n </Typography.Text>\n </Tooltip>\n {inNodeModules ? <Tag color=\"warning\">node_modules</Tag> : null}\n <FileUpdateTypeTag type={getUpdateType(r)} />\n </Space>\n );\n },\n },\n getTargetColumnPropsForModuleRow(\n 'current',\n bModulesCount,\n cModulesCount,\n ),\n getTargetColumnPropsForModuleRow(\n 'baseline',\n bModulesCount,\n cModulesCount,\n ),\n {\n title: 'Actions',\n width: 200,\n render: (_v, r) => {\n return (\n <Space direction=\"vertical\" style={{ maxWidth: 170 }}>\n <ViewChanges\n text=\"View Changes\"\n file={r.path}\n data={[\n {\n baseline:\n baseline.moduleCodeMap[r.baseline?.id as number]\n ?.source,\n current:\n current.moduleCodeMap[r.current?.id as number]?.source,\n group: 'Source',\n },\n {\n baseline:\n baseline.moduleCodeMap[r.baseline?.id as number]\n ?.transformed,\n current:\n current.moduleCodeMap[r.current?.id as number]\n ?.transformed,\n group: 'Transformed Source',\n },\n {\n baseline:\n baseline.moduleCodeMap[r.baseline?.id as number]\n ?.parsedSource,\n current:\n current.moduleCodeMap[r.current?.id as number]\n ?.parsedSource,\n group: 'Parsed Source',\n },\n ]}\n />\n </Space>\n );\n },\n },\n ]}\n />\n );\n};\n"],"names":["ModuleHashPattern","getSizeColumnPropsForModuleRow","key","sizeKey","sortByChanged","sortByChangedFn","a","b","sorterFn","_v","r","size","Space","Typography","formatSize","formatDiffSize","Client","getTargetColumnPropsForModuleRow","bModulesCount","cModulesCount","setSortByChanged","useState","isB","count","title","upperFirst","diff","Graph","Divider","Tooltip","formatPercent","InfoCircleOutlined","undefined","UpdateType","v","getUpdateType","ModuleRowForAsset","data","baseline","current","bTotalModules","cTotalModules","bToTalChunks","cToTalChunks","bRoot","cRoot","searchText","setSearchText","searchInput","useRef","handleSearch","selectedKeys","confirm","handleReset","clearFilters","isBaseline","bModules","useMemo","e","cModule","cModules","getPathInfo","beautifyModulePath","dataSource","mods","map","Map","mod","modPath","t","totalCount","fileNameFilter","c","Table","setSelectedKeys","Input","Button","SearchOutlined","filtered","Color","visible","setTimeout","alias","inNodeModules","Tag","FileUpdateTypeTag","ViewChanges"],"mappings":"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"}
1
+ {"version":3,"file":"pages/Resources/BundleDiff/DiffContainer/row.mjs","sources":["../../../../../src/pages/Resources/BundleDiff/DiffContainer/row.tsx"],"sourcesContent":["import { InfoCircleOutlined, SearchOutlined } from '@ant-design/icons';\nimport {\n Button,\n Divider,\n Input,\n InputRef,\n Space,\n Table,\n Tag,\n Tooltip,\n Typography,\n} from 'antd';\nimport {\n ColumnGroupType,\n ColumnType,\n FilterConfirmProps,\n} from 'antd/es/table/interface';\nimport { upperFirst } from 'es-toolkit/compat';\nimport React, { useMemo, useRef, useState } from 'react';\nimport { Client } from '@rsdoctor/types';\nimport { CompareFn } from 'antd/lib/table/interface';\nimport { Color } from '../../../../constants';\nimport {\n beautifyModulePath,\n formatPercent,\n formatSize,\n} from '../../../../utils';\nimport { ViewChanges } from './changes';\nimport { FileUpdateTypeTag, getUpdateType } from './modules';\nimport {\n BundleDiffComponentCardProps,\n BundleDiffTableAssetsData,\n BundleDiffTableModulesData,\n} from './types';\nimport { UpdateType } from './constants';\nimport { formatDiffSize } from './utils';\nimport { Graph } from '@rsdoctor/utils/common';\n\nexport const ModuleHashPattern = /[a-fA-F0-9]{20,}/;\n\nexport const getSizeColumnPropsForModuleRow = (\n key: 'baseline' | 'current',\n sizeKey: 'parsedSize' | 'sourceSize',\n sortByChanged?: boolean,\n): ColumnType<BundleDiffTableModulesData> => {\n const sortByChangedFn: CompareFn<any> = (a, b) =>\n (a.current?.size[sizeKey] || 0) -\n (a.baseline?.size[sizeKey] || 0) -\n (b.current?.size[sizeKey] || 0) +\n (b.baseline?.size[sizeKey] || 0);\n\n const sorterFn: CompareFn<any> = sortByChanged\n ? (a, b) => sortByChangedFn(a, b)\n : (a, b) => (a[key]?.size[sizeKey] || 0) - (b[key]?.size[sizeKey] || 0);\n\n return {\n width: 200,\n sorter: (a, b) => sorterFn(a, b),\n render: (_v, r) => {\n if (!r[key]) return '-';\n const size = r[key]!.size[sizeKey];\n return (\n <Space>\n <Typography.Text>{formatSize(size)}</Typography.Text>\n {key === 'current'\n ? formatDiffSize(\n r.baseline?.size[sizeKey] || 0,\n size,\n (r.baseline?.size[sizeKey] || 0) > size\n ? Client.RsdoctorClientDiffState.Down\n : Client.RsdoctorClientDiffState.Up,\n )\n : null}\n </Space>\n );\n },\n };\n};\n\nexport const getTargetColumnPropsForModuleRow = (\n key: 'baseline' | 'current',\n bModulesCount: number,\n cModulesCount: number,\n): ColumnGroupType<BundleDiffTableModulesData> => {\n const [sortByChanged, setSortByChanged] = useState(false);\n\n const isB = key === 'baseline';\n return {\n title: () => {\n const count = isB ? bModulesCount : cModulesCount;\n const title = upperFirst(key);\n const diff = Graph.diffSize(bModulesCount, cModulesCount);\n return (\n <div>\n <Typography.Text>{title}</Typography.Text>\n <Divider type=\"vertical\" />\n <Tooltip\n title={\n <Space direction=\"vertical\">\n <Typography.Text style={{ color: 'inherit' }}>\n {title} modules is {count}\n </Typography.Text>\n {isB ? null : (\n <Typography.Text style={{ color: 'inherit' }}>\n Percent is {formatPercent(diff.percent)}\n </Typography.Text>\n )}\n </Space>\n }\n >\n <Space>\n <Typography.Text\n type=\"secondary\"\n style={{ fontSize: 10, fontWeight: 400 }}\n >\n {count}\n </Typography.Text>\n <InfoCircleOutlined />\n </Space>\n </Tooltip>\n </div>\n );\n },\n children: [\n {\n title: 'Source Size',\n ...getSizeColumnPropsForModuleRow(key, 'sourceSize', sortByChanged),\n },\n {\n title: 'Parsed Size',\n defaultSortOrder: isB ? undefined : 'descend',\n ...getSizeColumnPropsForModuleRow(key, 'parsedSize', sortByChanged),\n },\n ],\n filterSearch: true,\n filters: [\n {\n text: 'Show Changed',\n value: UpdateType.NotChanged,\n },\n {\n text: 'Show All',\n value: 'All',\n },\n ],\n onFilter(v, r) {\n if (v === UpdateType.NotChanged) {\n setSortByChanged(true);\n } else {\n setSortByChanged(false);\n }\n return v === UpdateType.NotChanged ? getUpdateType(r) !== v : true;\n },\n };\n};\n\nexport const ModuleRowForAsset: React.FC<\n { data: BundleDiffTableAssetsData } & Pick<\n BundleDiffComponentCardProps,\n 'baseline' | 'current'\n >\n> = ({ data, baseline, current }) => {\n const { modules: bTotalModules } = baseline.moduleGraph;\n const { modules: cTotalModules } = current.moduleGraph;\n const { chunks: bToTalChunks } = baseline.chunkGraph;\n const { chunks: cToTalChunks } = current.chunkGraph;\n const bRoot = baseline.root;\n const cRoot = current.root;\n\n const [searchText, setSearchText] = useState('');\n const searchInput = useRef<InputRef>(null);\n\n const handleSearch = (\n selectedKeys: string[],\n confirm: (param?: FilterConfirmProps) => void,\n ) => {\n confirm();\n setSearchText(selectedKeys[0]);\n };\n\n const handleReset = (clearFilters: () => void) => {\n clearFilters();\n setSearchText('');\n };\n\n const isBaseline = '__is_baseline__' as const;\n\n const bModules = useMemo(\n () =>\n data.baseline\n ? Graph.getModulesByAsset(data.baseline, bToTalChunks, bTotalModules)\n .map((e) => ({\n ...e,\n [isBaseline]: true,\n }))\n .filter((cModule) => !cModule.concatenationModules?.length)\n : [],\n [data, baseline],\n );\n const cModules = useMemo(\n () =>\n data.current\n ? Graph.getModulesByAsset(data.current, cToTalChunks, cTotalModules)\n .map((e) => ({\n ...e,\n [isBaseline]: false,\n }))\n .filter((cModule) => !cModule.concatenationModules?.length)\n : [],\n [data, current],\n );\n\n const getPathInfo = (r: BundleDiffTableModulesData) =>\n beautifyModulePath(r.path, r.__is_baseline__ ? bRoot : cRoot);\n\n const dataSource: BundleDiffTableModulesData[] = useMemo(() => {\n const mods = [...bModules, ...cModules];\n const map = new Map<string, BundleDiffTableModulesData>();\n\n // group by module.path\n mods.forEach((mod) => {\n const modPath =\n mod.identifier?.replace(ModuleHashPattern, '') ||\n mod.path?.replace(ModuleHashPattern, '');\n let t: BundleDiffTableModulesData = map.get(modPath)!;\n\n if (!t) {\n t = { path: modPath };\n }\n\n if (mod[isBaseline]) {\n t.baseline = mod;\n } else {\n t.current = mod;\n }\n map.set(modPath, t);\n });\n\n return [...map.values()];\n }, [bModules, cModules, searchText]);\n\n const { bModulesCount, cModulesCount, totalCount } = useMemo(() => {\n const fileNameFilter = (e: BundleDiffTableModulesData) =>\n getPathInfo(e).alias.indexOf(searchText) > -1;\n\n let b = dataSource.filter((e) => e.baseline);\n let c = dataSource.filter((e) => e.current);\n let totalCount = dataSource.length;\n\n if (searchText) {\n b = b.filter(fileNameFilter);\n c = c.filter(fileNameFilter);\n totalCount = dataSource.filter(fileNameFilter).length;\n }\n\n return {\n bModulesCount: b.length,\n cModulesCount: c.length,\n totalCount,\n };\n }, [dataSource, searchText]);\n\n return (\n <Table\n dataSource={dataSource}\n rowKey={(e) => e.path}\n size=\"small\"\n pagination={{\n size: 'small',\n }}\n bordered\n scroll={{ x: 1500 }}\n columns={[\n {\n fixed: 'left',\n title: () => {\n return (\n <div>\n <Typography.Text>\n Modules of {`\"${data.alias}\"`}\n </Typography.Text>\n <Divider type=\"vertical\" />\n <Tooltip\n title={\n <Space direction=\"vertical\">\n <Typography.Text style={{ color: 'inherit' }}>\n filtered modules: {totalCount}\n </Typography.Text>\n <Typography.Text style={{ color: 'inherit' }}>\n total modules: {dataSource.length}\n </Typography.Text>\n </Space>\n }\n >\n <Typography.Text\n type=\"secondary\"\n style={{ fontSize: 10, fontWeight: 400, marginRight: 4 }}\n >\n {totalCount}/{dataSource.length}\n </Typography.Text>\n <InfoCircleOutlined />\n </Tooltip>\n </div>\n );\n },\n filterDropdown({\n setSelectedKeys,\n selectedKeys,\n confirm,\n clearFilters,\n }) {\n return (\n <div\n style={{ padding: 8 }}\n onKeyDown={(e) => e.stopPropagation()}\n >\n <Input\n ref={searchInput}\n placeholder={`Search by file name`}\n value={selectedKeys[0]}\n onChange={(e) =>\n setSelectedKeys(e.target.value ? [e.target.value] : [])\n }\n onPressEnter={() =>\n handleSearch(selectedKeys as string[], confirm)\n }\n style={{ marginBottom: 8, display: 'block' }}\n />\n <Space>\n <Button\n type=\"primary\"\n onClick={() =>\n handleSearch(selectedKeys as string[], confirm)\n }\n icon={<SearchOutlined />}\n size=\"small\"\n style={{ width: 90 }}\n >\n Search\n </Button>\n <Button\n onClick={() => {\n if (clearFilters) {\n handleReset(clearFilters);\n }\n setSelectedKeys([]);\n handleSearch([], confirm);\n }}\n size=\"small\"\n style={{ width: 90 }}\n >\n Reset\n </Button>\n </Space>\n </div>\n );\n },\n filterSearch: true,\n filterIcon: (filtered) => (\n <Space>\n <Typography.Text\n type={searchText ? undefined : 'secondary'}\n style={{ fontWeight: 400 }}\n >\n {searchText || 'Search by file name'}\n </Typography.Text>\n <SearchOutlined\n style={{ color: filtered ? Color.Blue : undefined }}\n />\n </Space>\n ),\n onFilterDropdownOpenChange: (visible) => {\n if (visible) {\n setTimeout(() => searchInput.current?.focus(), 100);\n }\n },\n onFilter(v, r) {\n return getPathInfo(r).alias.indexOf(v as string) > -1;\n },\n render: (_v, r) => {\n const { alias, inNodeModules } = getPathInfo(r);\n return (\n <Space>\n <Tooltip title={r.path}>\n <Typography.Text copyable={{ text: r.path }}>\n {alias}\n </Typography.Text>\n </Tooltip>\n {inNodeModules ? <Tag color=\"warning\">node_modules</Tag> : null}\n <FileUpdateTypeTag type={getUpdateType(r)} />\n </Space>\n );\n },\n },\n getTargetColumnPropsForModuleRow(\n 'current',\n bModulesCount,\n cModulesCount,\n ),\n getTargetColumnPropsForModuleRow(\n 'baseline',\n bModulesCount,\n cModulesCount,\n ),\n {\n title: 'Actions',\n width: 200,\n render: (_v, r) => {\n return (\n <Space direction=\"vertical\" style={{ maxWidth: 170 }}>\n <ViewChanges\n text=\"View Changes\"\n file={r.path}\n data={[\n {\n baseline:\n baseline.moduleCodeMap[r.baseline?.id as number]\n ?.source,\n current:\n current.moduleCodeMap[r.current?.id as number]?.source,\n group: 'Source',\n },\n {\n baseline:\n baseline.moduleCodeMap[r.baseline?.id as number]\n ?.transformed,\n current:\n current.moduleCodeMap[r.current?.id as number]\n ?.transformed,\n group: 'Transformed Source',\n },\n {\n baseline:\n baseline.moduleCodeMap[r.baseline?.id as number]\n ?.parsedSource,\n current:\n current.moduleCodeMap[r.current?.id as number]\n ?.parsedSource,\n group: 'Parsed Source',\n },\n ]}\n />\n </Space>\n );\n },\n },\n ]}\n />\n );\n};\n"],"names":["ModuleHashPattern","getSizeColumnPropsForModuleRow","key","sizeKey","sortByChanged","sortByChangedFn","a","b","sorterFn","_v","r","size","Space","Typography","formatSize","formatDiffSize","Client","getTargetColumnPropsForModuleRow","bModulesCount","cModulesCount","setSortByChanged","useState","isB","count","title","upperFirst","diff","Graph","Divider","Tooltip","formatPercent","InfoCircleOutlined","undefined","UpdateType","v","getUpdateType","ModuleRowForAsset","data","baseline","current","bTotalModules","cTotalModules","bToTalChunks","cToTalChunks","bRoot","cRoot","searchText","setSearchText","searchInput","useRef","handleSearch","selectedKeys","confirm","handleReset","clearFilters","isBaseline","bModules","useMemo","e","cModule","cModules","getPathInfo","beautifyModulePath","dataSource","mods","map","Map","mod","modPath","t","totalCount","fileNameFilter","c","Table","setSelectedKeys","Input","Button","SearchOutlined","filtered","Color","visible","setTimeout","alias","inNodeModules","Tag","FileUpdateTypeTag","ViewChanges"],"mappings":"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"}
@@ -4,7 +4,7 @@ import { InferServerAPIBody } from '../../../../components/Manifest/api.js';
4
4
  export type BundleDiffServerAPIProviderComponentCommonProps<T extends SDK.ServerAPI.API | SDK.ServerAPI.APIExtends> = {
5
5
  manifests?: Manifest.RsdoctorManifest[];
6
6
  api: T;
7
- children: (baseline: SDK.ServerAPI.InferResponseType<T>, current: SDK.ServerAPI.InferResponseType<T>) => JSX.Element;
7
+ children: (baseline: SDK.ServerAPI.InferResponseType<T>, current: SDK.ServerAPI.InferResponseType<T>) => React.JSX.Element;
8
8
  } & InferServerAPIBody<T>;
9
9
  export interface BundleDiffContainerProps {
10
10
  manifests: Manifest.RsdoctorManifest[];
@@ -1,3 +1,3 @@
1
1
  import { SDK } from '@rsdoctor/types';
2
2
  import { BundleDiffServerAPIProviderComponentCommonProps } from '../DiffContainer/types.js';
3
- export declare const DiffServerAPIProvider: <T extends SDK.ServerAPI.API | SDK.ServerAPI.APIExtends>(props: BundleDiffServerAPIProviderComponentCommonProps<T>) => JSX.Element;
3
+ export declare const DiffServerAPIProvider: <T extends SDK.ServerAPI.API | SDK.ServerAPI.APIExtends>(props: BundleDiffServerAPIProviderComponentCommonProps<T>) => React.JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"pages/Resources/BundleDiff/DiffServerAPIProvider/index.mjs","sources":["../../../../../src/pages/Resources/BundleDiff/DiffServerAPIProvider/index.tsx"],"sourcesContent":["import { Client, SDK, Constants } from '@rsdoctor/types';\nimport { ServerAPIProvider } from 'src/components/Manifest';\nimport { fetchManifest, useUrlQuery } from 'src/utils';\nimport { Algorithm } from '@rsdoctor/utils/common';\nimport { BundleDiffServerAPIProviderComponentCommonProps } from '../DiffContainer/types';\n\nexport const DiffServerAPIProvider = <\n T extends SDK.ServerAPI.API | SDK.ServerAPI.APIExtends,\n>(\n props: BundleDiffServerAPIProviderComponentCommonProps<T>,\n): JSX.Element => {\n const { api, body, children, manifests } = props;\n const query = useUrlQuery();\n\n const windowData = (window as any)[Constants.WINDOW_RSDOCTOR_TAG];\n if (windowData?.baseline && windowData?.current) {\n const baseline = JSON.parse(Algorithm.decompressText(windowData.baseline));\n const current = JSON.parse(Algorithm.decompressText(windowData.current));\n return <>{children(baseline, current)}</>;\n }\n\n if (manifests?.length) {\n return <>{children(manifests[0].data as any, manifests[1].data as any)}</>;\n }\n\n const [baselineFile, currentFile] =\n query[Client.RsdoctorClientUrlQuery.BundleDiffFiles]?.split(',') || [];\n\n return (\n <ServerAPIProvider\n api={api}\n body={body}\n manifestLoader={\n baselineFile ? () => fetchManifest(baselineFile) : undefined\n }\n >\n {(baseline) => {\n return (\n <ServerAPIProvider\n api={api}\n body={body}\n manifestLoader={\n currentFile ? () => fetchManifest(currentFile) : undefined\n }\n >\n {(current) => {\n return children(baseline, current);\n }}\n </ServerAPIProvider>\n );\n }}\n </ServerAPIProvider>\n );\n};\n"],"names":["DiffServerAPIProvider","props","api","body","children","manifests","query","useUrlQuery","windowData","window","Constants","baseline","JSON","Algorithm","current","baselineFile","currentFile","Client","ServerAPIProvider","fetchManifest","undefined"],"mappings":";;;;;AAMO,MAAMA,wBAAwB,CAGnCC;IAEA,MAAM,EAAEC,GAAG,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,SAAS,EAAE,GAAGJ;IAC3C,MAAMK,QAAQC;IAEd,MAAMC,aAAcC,MAAc,CAACC,UAAU,mBAAmB,CAAC;IACjE,IAAIF,YAAY,YAAYA,YAAY,SAAS;QAC/C,MAAMG,WAAWC,KAAK,KAAK,CAACC,UAAU,cAAc,CAACL,WAAW,QAAQ;QACxE,MAAMM,UAAUF,KAAK,KAAK,CAACC,UAAU,cAAc,CAACL,WAAW,OAAO;QACtE,OAAO,WAAP,GAAO;sBAAGJ,SAASO,UAAUG;;IAC/B;IAEA,IAAIT,WAAW,QACb,OAAO,WAAP,GAAO;kBAAGD,SAASC,SAAS,CAAC,EAAE,CAAC,IAAI,EAASA,SAAS,CAAC,EAAE,CAAC,IAAI;;IAGhE,MAAM,CAACU,cAAcC,YAAY,GAC/BV,KAAK,CAACW,OAAO,sBAAsB,CAAC,eAAe,CAAC,EAAE,MAAM,QAAQ,EAAE;IAExE,OAAO,WAAP,GACE,IAACC,mBAAiBA;QAChB,KAAKhB;QACL,MAAMC;QACN,gBACEY,eAAe,IAAMI,cAAcJ,gBAAgBK;kBAGpD,CAACT,WACO,WAAP,GACE,IAACO,mBAAiBA;gBAChB,KAAKhB;gBACL,MAAMC;gBACN,gBACEa,cAAc,IAAMG,cAAcH,eAAeI;0BAGlD,CAACN,UACOV,SAASO,UAAUG;;;AAOxC"}
1
+ {"version":3,"file":"pages/Resources/BundleDiff/DiffServerAPIProvider/index.mjs","sources":["../../../../../src/pages/Resources/BundleDiff/DiffServerAPIProvider/index.tsx"],"sourcesContent":["import { Client, SDK, Constants } from '@rsdoctor/types';\nimport { ServerAPIProvider } from 'src/components/Manifest';\nimport { fetchManifest, useUrlQuery } from 'src/utils';\nimport { Algorithm } from '@rsdoctor/utils/common';\nimport { BundleDiffServerAPIProviderComponentCommonProps } from '../DiffContainer/types';\n\nexport const DiffServerAPIProvider = <\n T extends SDK.ServerAPI.API | SDK.ServerAPI.APIExtends,\n>(\n props: BundleDiffServerAPIProviderComponentCommonProps<T>,\n): React.JSX.Element => {\n const { api, body, children, manifests } = props;\n const query = useUrlQuery();\n\n const windowData = (window as any)[Constants.WINDOW_RSDOCTOR_TAG];\n if (windowData?.baseline && windowData?.current) {\n const baseline = JSON.parse(Algorithm.decompressText(windowData.baseline));\n const current = JSON.parse(Algorithm.decompressText(windowData.current));\n return <>{children(baseline, current)}</>;\n }\n\n if (manifests?.length) {\n return <>{children(manifests[0].data as any, manifests[1].data as any)}</>;\n }\n\n const [baselineFile, currentFile] =\n query[Client.RsdoctorClientUrlQuery.BundleDiffFiles]?.split(',') || [];\n\n return (\n <ServerAPIProvider\n api={api}\n body={body}\n manifestLoader={\n baselineFile ? () => fetchManifest(baselineFile) : undefined\n }\n >\n {(baseline) => {\n return (\n <ServerAPIProvider\n api={api}\n body={body}\n manifestLoader={\n currentFile ? () => fetchManifest(currentFile) : undefined\n }\n >\n {(current) => {\n return children(baseline, current);\n }}\n </ServerAPIProvider>\n );\n }}\n </ServerAPIProvider>\n );\n};\n"],"names":["DiffServerAPIProvider","props","api","body","children","manifests","query","useUrlQuery","windowData","window","Constants","baseline","JSON","Algorithm","current","baselineFile","currentFile","Client","ServerAPIProvider","fetchManifest","undefined"],"mappings":";;;;;AAMO,MAAMA,wBAAwB,CAGnCC;IAEA,MAAM,EAAEC,GAAG,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,SAAS,EAAE,GAAGJ;IAC3C,MAAMK,QAAQC;IAEd,MAAMC,aAAcC,MAAc,CAACC,UAAU,mBAAmB,CAAC;IACjE,IAAIF,YAAY,YAAYA,YAAY,SAAS;QAC/C,MAAMG,WAAWC,KAAK,KAAK,CAACC,UAAU,cAAc,CAACL,WAAW,QAAQ;QACxE,MAAMM,UAAUF,KAAK,KAAK,CAACC,UAAU,cAAc,CAACL,WAAW,OAAO;QACtE,OAAO,WAAP,GAAO;sBAAGJ,SAASO,UAAUG;;IAC/B;IAEA,IAAIT,WAAW,QACb,OAAO,WAAP,GAAO;kBAAGD,SAASC,SAAS,CAAC,EAAE,CAAC,IAAI,EAASA,SAAS,CAAC,EAAE,CAAC,IAAI;;IAGhE,MAAM,CAACU,cAAcC,YAAY,GAC/BV,KAAK,CAACW,OAAO,sBAAsB,CAAC,eAAe,CAAC,EAAE,MAAM,QAAQ,EAAE;IAExE,OAAO,WAAP,GACE,IAACC,mBAAiBA;QAChB,KAAKhB;QACL,MAAMC;QACN,gBACEY,eAAe,IAAMI,cAAcJ,gBAAgBK;kBAGpD,CAACT,WACO,WAAP,GACE,IAACO,mBAAiBA;gBAChB,KAAKhB;gBACL,MAAMC;gBACN,gBACEa,cAAc,IAAMG,cAAcH,eAAeI;0BAGlD,CAACN,UACOV,SAASO,UAAUG;;;AAOxC"}
@@ -11,10 +11,10 @@ import { getHoverMessageInModule } from "./utils.mjs";
11
11
  const defaultEditOption = defineMonacoOptions();
12
12
  function CodeEditor(props) {
13
13
  const { module, moduleGraph, ranges, toLine, setEditorData, source } = props;
14
- const editorRef = useRef();
14
+ const editorRef = useRef(void 0);
15
15
  const oldRanges = useRef([]);
16
16
  const oldHovers = useRef([]);
17
- const oldToLine = useRef();
17
+ const oldToLine = useRef(void 0);
18
18
  const changeModule = useRef(false);
19
19
  const [content, setContent] = useState('');
20
20
  useEffect(()=>{
@@ -1 +1 @@
1
- {"version":3,"file":"pages/TreeShaking/editor.mjs","sources":["../../../src/pages/TreeShaking/editor.tsx"],"sourcesContent":["import { InfoCircleOutlined, LoadingOutlined } from '@ant-design/icons';\nimport Editor, { OnMount } from '@monaco-editor/react';\nimport { SDK } from '@rsdoctor/types';\nimport { Card, Space, Tooltip, Typography } from 'antd';\nimport type { editor, Range as RangeClass } from 'monaco-editor';\nimport path from 'path-browserify';\nimport { useEffect, useRef, useState } from 'react';\nimport {\n defineMonacoOptions,\n getFilePathFormat,\n getSelectionRange,\n} from 'src/components/base/CodeViewer/utils';\nimport { parseOpenTag } from './open-tag';\nimport { Range } from './range';\nimport { SetEditorStatus } from './types';\nimport { getHoverMessageInModule } from './utils';\n\nexport interface CodeEditorProps {\n module: SDK.ModuleInstance;\n moduleGraph: SDK.ModuleGraphInstance;\n ranges: SDK.SourceRange[];\n setEditorData: SetEditorStatus;\n source: SDK.ModuleSource;\n toLine?: number;\n}\n\nconst defaultEditOption = defineMonacoOptions();\n\nexport function CodeEditor(props: CodeEditorProps) {\n const { module, moduleGraph, ranges, toLine, setEditorData, source } = props;\n const editorRef = useRef<editor.IStandaloneCodeEditor>();\n const oldRanges = useRef<string[]>([]);\n const oldHovers = useRef<string[]>([]);\n const oldToLine = useRef<number>();\n const changeModule = useRef(false);\n const [content, setContent] = useState('');\n // const [isDynamic, setIsDynamic] = useState(false);\n // const [exports, setExports] = useState<SDK.ExportData[]>([]);\n\n useEffect(() => {\n const { isPreferSource } = module;\n changeModule.current = true;\n setContent(\n source.source || isPreferSource ? source.source : source.transformed,\n );\n setTimeout(() => {\n oldHovers.current =\n editorRef.current\n ?.getModel()\n ?.deltaDecorations(\n oldHovers.current,\n getHoverMessageInModule(module, moduleGraph),\n ) ?? [];\n }, 200);\n }, [module, source]);\n\n useEffect(() => {\n function setRangeAndLine() {\n const model = editorRef.current?.getModel();\n\n if (!model) {\n return;\n }\n\n oldRanges.current = model.deltaDecorations(\n oldRanges.current,\n ranges.map((arr) => {\n return {\n range: getSelectionRange(\n arr,\n Range as unknown as typeof RangeClass,\n ),\n options: {\n stickiness: 1,\n inlineClassName: 'tree-shaking-statement-side-effect',\n isWholeLine: false,\n showIfCollapsed: true,\n },\n } as unknown as editor.IModelDecoration;\n }),\n );\n\n if (\n editorRef.current &&\n typeof toLine === 'number' &&\n oldToLine.current !== toLine\n ) {\n oldToLine.current = toLine;\n editorRef.current.revealLine(toLine, 0);\n }\n }\n\n // 模块变更时,高亮和滚动需要等待 300ms,确保在文本变更之后\n if (changeModule) {\n setTimeout(setRangeAndLine, 300);\n } else {\n setRangeAndLine();\n }\n\n changeModule.current = false;\n }, [ranges, toLine]);\n\n useEffect(() => {\n const openEditor = (event: MouseEvent) => {\n const query = parseOpenTag(event.target as HTMLElement);\n\n if (query) {\n const module = moduleGraph.getModuleById(query.module);\n\n if (module) {\n setEditorData(module, [query.range], query.range.start.line);\n }\n }\n };\n\n document.body.addEventListener('click', openEditor);\n\n return () => {\n document.body.removeEventListener('click', openEditor);\n };\n }, []);\n\n if (!module) {\n return <div>请选择要查看的模块</div>;\n }\n\n const handleEditorDidMount: OnMount = (editor) => {\n editorRef.current = editor;\n };\n\n return (\n <Card\n title={\n <Tooltip title={module.path}>\n <Space>\n <Typography.Text>{path.basename(module.path)}</Typography.Text>\n <InfoCircleOutlined />\n </Space>\n </Tooltip>\n }\n className=\"tree-shaking-editor\"\n >\n {/* TODO: change to CodeViewer */}\n <Editor\n theme=\"vs-dark\"\n language={getFilePathFormat(module.path)}\n value={content}\n loading={<LoadingOutlined style={{ fontSize: 30 }} />}\n options={defaultEditOption}\n onMount={handleEditorDidMount}\n />\n </Card>\n );\n}\n"],"names":["defaultEditOption","defineMonacoOptions","CodeEditor","props","module","moduleGraph","ranges","toLine","setEditorData","source","editorRef","useRef","oldRanges","oldHovers","oldToLine","changeModule","content","setContent","useState","useEffect","isPreferSource","setTimeout","getHoverMessageInModule","setRangeAndLine","model","arr","getSelectionRange","Range","openEditor","event","query","parseOpenTag","document","handleEditorDidMount","editor","Card","Tooltip","Space","Typography","path","InfoCircleOutlined","Editor","getFilePathFormat","LoadingOutlined"],"mappings":";;;;;;;;;;AA0BA,MAAMA,oBAAoBC;AAEnB,SAASC,WAAWC,KAAsB;IAC/C,MAAM,EAAEC,MAAM,EAAEC,WAAW,EAAEC,MAAM,EAAEC,MAAM,EAAEC,aAAa,EAAEC,MAAM,EAAE,GAAGN;IACvE,MAAMO,YAAYC;IAClB,MAAMC,YAAYD,OAAiB,EAAE;IACrC,MAAME,YAAYF,OAAiB,EAAE;IACrC,MAAMG,YAAYH;IAClB,MAAMI,eAAeJ,OAAO;IAC5B,MAAM,CAACK,SAASC,WAAW,GAAGC,SAAS;IAIvCC,UAAU;QACR,MAAM,EAAEC,cAAc,EAAE,GAAGhB;QAC3BW,aAAa,OAAO,GAAG;QACvBE,WACER,OAAO,MAAM,IAAIW,iBAAiBX,OAAO,MAAM,GAAGA,OAAO,WAAW;QAEtEY,WAAW;YACTR,UAAU,OAAO,GACfH,UAAU,OAAO,EACb,YACA,iBACAG,UAAU,OAAO,EACjBS,wBAAwBlB,QAAQC,iBAC7B,EAAE;QACb,GAAG;IACL,GAAG;QAACD;QAAQK;KAAO;IAEnBU,UAAU;QACR,SAASI;YACP,MAAMC,QAAQd,UAAU,OAAO,EAAE;YAEjC,IAAI,CAACc,OACH;YAGFZ,UAAU,OAAO,GAAGY,MAAM,gBAAgB,CACxCZ,UAAU,OAAO,EACjBN,OAAO,GAAG,CAAC,CAACmB,MACH;oBACL,OAAOC,kBACLD,KACAE;oBAEF,SAAS;wBACP,YAAY;wBACZ,iBAAiB;wBACjB,aAAa;wBACb,iBAAiB;oBACnB;gBACF;YAIJ,IACEjB,UAAU,OAAO,IACjB,AAAkB,YAAlB,OAAOH,UACPO,UAAU,OAAO,KAAKP,QACtB;gBACAO,UAAU,OAAO,GAAGP;gBACpBG,UAAU,OAAO,CAAC,UAAU,CAACH,QAAQ;YACvC;QACF;QAGA,IAAIQ,cACFM,WAAWE,iBAAiB;aAE5BA;QAGFR,aAAa,OAAO,GAAG;IACzB,GAAG;QAACT;QAAQC;KAAO;IAEnBY,UAAU;QACR,MAAMS,aAAa,CAACC;YAClB,MAAMC,QAAQC,aAAaF,MAAM,MAAM;YAEvC,IAAIC,OAAO;gBACT,MAAM1B,SAASC,YAAY,aAAa,CAACyB,MAAM,MAAM;gBAErD,IAAI1B,QACFI,cAAcJ,QAAQ;oBAAC0B,MAAM,KAAK;iBAAC,EAAEA,MAAM,KAAK,CAAC,KAAK,CAAC,IAAI;YAE/D;QACF;QAEAE,SAAS,IAAI,CAAC,gBAAgB,CAAC,SAASJ;QAExC,OAAO;YACLI,SAAS,IAAI,CAAC,mBAAmB,CAAC,SAASJ;QAC7C;IACF,GAAG,EAAE;IAEL,IAAI,CAACxB,QACH,OAAO,WAAP,GAAO,IAAC;kBAAI;;IAGd,MAAM6B,uBAAgC,CAACC;QACrCxB,UAAU,OAAO,GAAGwB;IACtB;IAEA,OAAO,WAAP,GACE,IAACC,MAAIA;QACH,qBACE,IAACC,SAAOA;YAAC,OAAOhC,OAAO,IAAI;sBACzB,mBAACiC,OAAKA;;kCACJ,IAACC,WAAW,IAAI;kCAAEC,gBAAAA,QAAa,CAACnC,OAAO,IAAI;;kCAC3C,IAACoC,oBAAkBA,CAAAA;;;;QAIzB,WAAU;kBAGV,kBAACC,OAAMA;YACL,OAAM;YACN,UAAUC,kBAAkBtC,OAAO,IAAI;YACvC,OAAOY;YACP,uBAAS,IAAC2B,iBAAeA;gBAAC,OAAO;oBAAE,UAAU;gBAAG;;YAChD,SAAS3C;YACT,SAASiC;;;AAIjB"}
1
+ {"version":3,"file":"pages/TreeShaking/editor.mjs","sources":["../../../src/pages/TreeShaking/editor.tsx"],"sourcesContent":["import { InfoCircleOutlined, LoadingOutlined } from '@ant-design/icons';\nimport Editor, { OnMount } from '@monaco-editor/react';\nimport { SDK } from '@rsdoctor/types';\nimport { Card, Space, Tooltip, Typography } from 'antd';\nimport type { editor, Range as RangeClass } from 'monaco-editor';\nimport path from 'path-browserify';\nimport { useEffect, useRef, useState } from 'react';\nimport {\n defineMonacoOptions,\n getFilePathFormat,\n getSelectionRange,\n} from 'src/components/base/CodeViewer/utils';\nimport { parseOpenTag } from './open-tag';\nimport { Range } from './range';\nimport { SetEditorStatus } from './types';\nimport { getHoverMessageInModule } from './utils';\n\nexport interface CodeEditorProps {\n module: SDK.ModuleInstance;\n moduleGraph: SDK.ModuleGraphInstance;\n ranges: SDK.SourceRange[];\n setEditorData: SetEditorStatus;\n source: SDK.ModuleSource;\n toLine?: number;\n}\n\nconst defaultEditOption = defineMonacoOptions();\n\nexport function CodeEditor(props: CodeEditorProps) {\n const { module, moduleGraph, ranges, toLine, setEditorData, source } = props;\n const editorRef = useRef<editor.IStandaloneCodeEditor>(undefined);\n const oldRanges = useRef<string[]>([]);\n const oldHovers = useRef<string[]>([]);\n const oldToLine = useRef<number>(undefined);\n const changeModule = useRef(false);\n const [content, setContent] = useState('');\n // const [isDynamic, setIsDynamic] = useState(false);\n // const [exports, setExports] = useState<SDK.ExportData[]>([]);\n\n useEffect(() => {\n const { isPreferSource } = module;\n changeModule.current = true;\n setContent(\n source.source || isPreferSource ? source.source : source.transformed,\n );\n setTimeout(() => {\n oldHovers.current =\n editorRef.current\n ?.getModel()\n ?.deltaDecorations(\n oldHovers.current,\n getHoverMessageInModule(module, moduleGraph),\n ) ?? [];\n }, 200);\n }, [module, source]);\n\n useEffect(() => {\n function setRangeAndLine() {\n const model = editorRef.current?.getModel();\n\n if (!model) {\n return;\n }\n\n oldRanges.current = model.deltaDecorations(\n oldRanges.current,\n ranges.map((arr) => {\n return {\n range: getSelectionRange(\n arr,\n Range as unknown as typeof RangeClass,\n ),\n options: {\n stickiness: 1,\n inlineClassName: 'tree-shaking-statement-side-effect',\n isWholeLine: false,\n showIfCollapsed: true,\n },\n } as unknown as editor.IModelDecoration;\n }),\n );\n\n if (\n editorRef.current &&\n typeof toLine === 'number' &&\n oldToLine.current !== toLine\n ) {\n oldToLine.current = toLine;\n editorRef.current.revealLine(toLine, 0);\n }\n }\n\n // 模块变更时,高亮和滚动需要等待 300ms,确保在文本变更之后\n if (changeModule) {\n setTimeout(setRangeAndLine, 300);\n } else {\n setRangeAndLine();\n }\n\n changeModule.current = false;\n }, [ranges, toLine]);\n\n useEffect(() => {\n const openEditor = (event: MouseEvent) => {\n const query = parseOpenTag(event.target as HTMLElement);\n\n if (query) {\n const module = moduleGraph.getModuleById(query.module);\n\n if (module) {\n setEditorData(module, [query.range], query.range.start.line);\n }\n }\n };\n\n document.body.addEventListener('click', openEditor);\n\n return () => {\n document.body.removeEventListener('click', openEditor);\n };\n }, []);\n\n if (!module) {\n return <div>请选择要查看的模块</div>;\n }\n\n const handleEditorDidMount: OnMount = (editor) => {\n editorRef.current = editor;\n };\n\n return (\n <Card\n title={\n <Tooltip title={module.path}>\n <Space>\n <Typography.Text>{path.basename(module.path)}</Typography.Text>\n <InfoCircleOutlined />\n </Space>\n </Tooltip>\n }\n className=\"tree-shaking-editor\"\n >\n {/* TODO: change to CodeViewer */}\n <Editor\n theme=\"vs-dark\"\n language={getFilePathFormat(module.path)}\n value={content}\n loading={<LoadingOutlined style={{ fontSize: 30 }} />}\n options={defaultEditOption}\n onMount={handleEditorDidMount}\n />\n </Card>\n );\n}\n"],"names":["defaultEditOption","defineMonacoOptions","CodeEditor","props","module","moduleGraph","ranges","toLine","setEditorData","source","editorRef","useRef","undefined","oldRanges","oldHovers","oldToLine","changeModule","content","setContent","useState","useEffect","isPreferSource","setTimeout","getHoverMessageInModule","setRangeAndLine","model","arr","getSelectionRange","Range","openEditor","event","query","parseOpenTag","document","handleEditorDidMount","editor","Card","Tooltip","Space","Typography","path","InfoCircleOutlined","Editor","getFilePathFormat","LoadingOutlined"],"mappings":";;;;;;;;;;AA0BA,MAAMA,oBAAoBC;AAEnB,SAASC,WAAWC,KAAsB;IAC/C,MAAM,EAAEC,MAAM,EAAEC,WAAW,EAAEC,MAAM,EAAEC,MAAM,EAAEC,aAAa,EAAEC,MAAM,EAAE,GAAGN;IACvE,MAAMO,YAAYC,OAAqCC;IACvD,MAAMC,YAAYF,OAAiB,EAAE;IACrC,MAAMG,YAAYH,OAAiB,EAAE;IACrC,MAAMI,YAAYJ,OAAeC;IACjC,MAAMI,eAAeL,OAAO;IAC5B,MAAM,CAACM,SAASC,WAAW,GAAGC,SAAS;IAIvCC,UAAU;QACR,MAAM,EAAEC,cAAc,EAAE,GAAGjB;QAC3BY,aAAa,OAAO,GAAG;QACvBE,WACET,OAAO,MAAM,IAAIY,iBAAiBZ,OAAO,MAAM,GAAGA,OAAO,WAAW;QAEtEa,WAAW;YACTR,UAAU,OAAO,GACfJ,UAAU,OAAO,EACb,YACA,iBACAI,UAAU,OAAO,EACjBS,wBAAwBnB,QAAQC,iBAC7B,EAAE;QACb,GAAG;IACL,GAAG;QAACD;QAAQK;KAAO;IAEnBW,UAAU;QACR,SAASI;YACP,MAAMC,QAAQf,UAAU,OAAO,EAAE;YAEjC,IAAI,CAACe,OACH;YAGFZ,UAAU,OAAO,GAAGY,MAAM,gBAAgB,CACxCZ,UAAU,OAAO,EACjBP,OAAO,GAAG,CAAC,CAACoB,MACH;oBACL,OAAOC,kBACLD,KACAE;oBAEF,SAAS;wBACP,YAAY;wBACZ,iBAAiB;wBACjB,aAAa;wBACb,iBAAiB;oBACnB;gBACF;YAIJ,IACElB,UAAU,OAAO,IACjB,AAAkB,YAAlB,OAAOH,UACPQ,UAAU,OAAO,KAAKR,QACtB;gBACAQ,UAAU,OAAO,GAAGR;gBACpBG,UAAU,OAAO,CAAC,UAAU,CAACH,QAAQ;YACvC;QACF;QAGA,IAAIS,cACFM,WAAWE,iBAAiB;aAE5BA;QAGFR,aAAa,OAAO,GAAG;IACzB,GAAG;QAACV;QAAQC;KAAO;IAEnBa,UAAU;QACR,MAAMS,aAAa,CAACC;YAClB,MAAMC,QAAQC,aAAaF,MAAM,MAAM;YAEvC,IAAIC,OAAO;gBACT,MAAM3B,SAASC,YAAY,aAAa,CAAC0B,MAAM,MAAM;gBAErD,IAAI3B,QACFI,cAAcJ,QAAQ;oBAAC2B,MAAM,KAAK;iBAAC,EAAEA,MAAM,KAAK,CAAC,KAAK,CAAC,IAAI;YAE/D;QACF;QAEAE,SAAS,IAAI,CAAC,gBAAgB,CAAC,SAASJ;QAExC,OAAO;YACLI,SAAS,IAAI,CAAC,mBAAmB,CAAC,SAASJ;QAC7C;IACF,GAAG,EAAE;IAEL,IAAI,CAACzB,QACH,OAAO,WAAP,GAAO,IAAC;kBAAI;;IAGd,MAAM8B,uBAAgC,CAACC;QACrCzB,UAAU,OAAO,GAAGyB;IACtB;IAEA,OAAO,WAAP,GACE,IAACC,MAAIA;QACH,qBACE,IAACC,SAAOA;YAAC,OAAOjC,OAAO,IAAI;sBACzB,mBAACkC,OAAKA;;kCACJ,IAACC,WAAW,IAAI;kCAAEC,gBAAAA,QAAa,CAACpC,OAAO,IAAI;;kCAC3C,IAACqC,oBAAkBA,CAAAA;;;;QAIzB,WAAU;kBAGV,kBAACC,OAAMA;YACL,OAAM;YACN,UAAUC,kBAAkBvC,OAAO,IAAI;YACvC,OAAOa;YACP,uBAAS,IAAC2B,iBAAeA;gBAAC,OAAO;oBAAE,UAAU;gBAAG;;YAChD,SAAS5C;YACT,SAASkC;;;AAIjB"}
@@ -1,9 +1,9 @@
1
1
  export * as Overall from './Overall/index.js';
2
2
  export * as BundleSize from './BundleSize/index.js';
3
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';
4
+ export * as LoaderTimeline from './Loaders/Overall/index.js';
5
+ export * as LoaderFiles from './Loaders/Analysis/index.js';
6
+ export * as PluginsAnalyze from './Plugins/index.js';
7
7
  export * as ModuleResolve from './ModuleResolve/index.js';
8
8
  export * as RuleIndex from './Resources/RuleIndex/index.js';
9
9
  export * as TreeShaking from './TreeShaking/index.js';
@@ -1,12 +1,12 @@
1
1
  import * as __rspack_external__Overall_index_mjs_0ded43f9 from "./Overall/index.mjs";
2
2
  import * as __rspack_external__BundleSize_index_mjs_d0a2fb23 from "./BundleSize/index.mjs";
3
3
  import * as __rspack_external__ModuleAnalyze_index_mjs_4385c65f from "./ModuleAnalyze/index.mjs";
4
- import * as __rspack_external__WebpackLoaders_Overall_index_mjs_7fb4d495 from "./WebpackLoaders/Overall/index.mjs";
5
- import * as __rspack_external__WebpackLoaders_Analysis_index_mjs_a1d3659a from "./WebpackLoaders/Analysis/index.mjs";
6
- import * as __rspack_external__WebpackPlugins_index_mjs_a5b22b8e from "./WebpackPlugins/index.mjs";
4
+ import * as __rspack_external__Loaders_Overall_index_mjs_40901be5 from "./Loaders/Overall/index.mjs";
5
+ import * as __rspack_external__Loaders_Analysis_index_mjs_617e53eb from "./Loaders/Analysis/index.mjs";
6
+ import * as __rspack_external__Plugins_index_mjs_7b6a192c from "./Plugins/index.mjs";
7
7
  import * as __rspack_external__ModuleResolve_index_mjs_2463b148 from "./ModuleResolve/index.mjs";
8
8
  import * as __rspack_external__Resources_RuleIndex_index_mjs_458631cc from "./Resources/RuleIndex/index.mjs";
9
9
  import * as __rspack_external__TreeShaking_index_mjs_1daf5cdb from "./TreeShaking/index.mjs";
10
10
  import * as __rspack_external__Resources_BundleDiff_index_mjs_3b739fff from "./Resources/BundleDiff/index.mjs";
11
11
  import * as __rspack_external__Uploader_index_mjs_e3f3ea84 from "./Uploader/index.mjs";
12
- export { __rspack_external__BundleSize_index_mjs_d0a2fb23 as BundleSize, __rspack_external__ModuleAnalyze_index_mjs_4385c65f as ModuleAnalyze, __rspack_external__ModuleResolve_index_mjs_2463b148 as ModuleResolve, __rspack_external__Overall_index_mjs_0ded43f9 as Overall, __rspack_external__Resources_BundleDiff_index_mjs_3b739fff as BundleDiff, __rspack_external__Resources_RuleIndex_index_mjs_458631cc as RuleIndex, __rspack_external__TreeShaking_index_mjs_1daf5cdb as TreeShaking, __rspack_external__Uploader_index_mjs_e3f3ea84 as Uploader, __rspack_external__WebpackLoaders_Analysis_index_mjs_a1d3659a as LoaderFiles, __rspack_external__WebpackLoaders_Overall_index_mjs_7fb4d495 as LoaderTimeline, __rspack_external__WebpackPlugins_index_mjs_a5b22b8e as PluginsAnalyze };
12
+ export { __rspack_external__BundleSize_index_mjs_d0a2fb23 as BundleSize, __rspack_external__Loaders_Analysis_index_mjs_617e53eb as LoaderFiles, __rspack_external__Loaders_Overall_index_mjs_40901be5 as LoaderTimeline, __rspack_external__ModuleAnalyze_index_mjs_4385c65f as ModuleAnalyze, __rspack_external__ModuleResolve_index_mjs_2463b148 as ModuleResolve, __rspack_external__Overall_index_mjs_0ded43f9 as Overall, __rspack_external__Plugins_index_mjs_7b6a192c as PluginsAnalyze, __rspack_external__Resources_BundleDiff_index_mjs_3b739fff as BundleDiff, __rspack_external__Resources_RuleIndex_index_mjs_458631cc as RuleIndex, __rspack_external__TreeShaking_index_mjs_1daf5cdb as TreeShaking, __rspack_external__Uploader_index_mjs_e3f3ea84 as Uploader };
@@ -19,6 +19,6 @@ export declare abstract class BaseDataLoader implements Manifest.ManifestDataLoa
19
19
  abstract loadData<T extends Manifest.RsdoctorManifestMappingKeys>(key: T): Promise<void | Manifest.InferManifestDataValue<T>>;
20
20
  abstract isLocal(): boolean;
21
21
  abstract loadAPI<T extends SDK.ServerAPI.API, B extends SDK.ServerAPI.InferRequestBodyType<T> = SDK.ServerAPI.InferRequestBodyType<T>, R extends SDK.ServerAPI.InferResponseType<T> = SDK.ServerAPI.InferResponseType<T>>(...args: B extends void ? [api: T] : [api: T, body: B]): Promise<R>;
22
- abstract onDataUpdate<T extends SDK.ServerAPI.API | SDK.ServerAPI.APIExtends>(api: T, fn: (response: SDK.ServerAPI.SocketResponseType<T>) => void): void;
23
- abstract removeOnDataUpdate<T extends SDK.ServerAPI.API | SDK.ServerAPI.APIExtends>(api: T, fn: (response: SDK.ServerAPI.SocketResponseType<T>) => void): void;
22
+ abstract onDataUpdate<T extends SDK.ServerAPI.API | SDK.ServerAPI.APIExtends>(api: T, body: SDK.ServerAPI.InferRequestBodyType<T, null> | null, fn: (response: SDK.ServerAPI.SocketResponseType<T>) => void): void;
23
+ abstract removeOnDataUpdate<T extends SDK.ServerAPI.API | SDK.ServerAPI.APIExtends>(api: T, body: SDK.ServerAPI.InferRequestBodyType<T, null> | null, fn: (response: SDK.ServerAPI.SocketResponseType<T>) => void): void;
24
24
  }
@@ -1 +1 @@
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
+ {"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 SDK.ServerAPI.InferRequestBodyType<T> =\n SDK.ServerAPI.InferRequestBodyType<T>,\n R extends SDK.ServerAPI.InferResponseType<T> =\n 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 >(\n api: T,\n body: SDK.ServerAPI.InferRequestBodyType<T, null> | null,\n fn: (response: SDK.ServerAPI.SocketResponseType<T>) => void,\n ): void;\n\n public abstract removeOnDataUpdate<\n T extends SDK.ServerAPI.API | SDK.ServerAPI.APIExtends,\n >(\n api: T,\n body: SDK.ServerAPI.InferRequestBodyType<T, null> | null,\n fn: (response: SDK.ServerAPI.SocketResponseType<T>) => void,\n ): 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;AAiFF"}
@@ -1,7 +1,13 @@
1
1
  import { Common, Manifest, SDK } from '@rsdoctor/types';
2
2
  import { BaseDataLoader } from './base.js';
3
+ type DataUpdateAPI = SDK.ServerAPI.API | SDK.ServerAPI.APIExtends;
4
+ type DataUpdateSubscription = {
5
+ api: DataUpdateAPI;
6
+ body: SDK.ServerAPI.InferRequestBodyType<DataUpdateAPI, null> | null;
7
+ listeners: Set<Common.Function>;
8
+ };
3
9
  export declare class LocalServerDataLoader extends BaseDataLoader {
4
- protected events: Map<SDK.ServerAPI.API | SDK.ServerAPI.APIExtends, Set<Common.Function>>;
10
+ protected events: Map<string, DataUpdateSubscription>;
5
11
  isLocal(): boolean;
6
12
  loadData<T extends keyof Manifest.RsdoctorManifestData>(key: T): Promise<void | Manifest.RsdoctorManifestData[T]>;
7
13
  loadAPI<T extends SDK.ServerAPI.API, B extends SDK.ServerAPI.InferRequestBodyType<T> = SDK.ServerAPI.InferRequestBodyType<T>, R extends SDK.ServerAPI.InferResponseType<T> = SDK.ServerAPI.InferResponseType<T>>(...args: B extends void ? [api: T] : [api: T, body: B]): Promise<R>;
@@ -9,6 +15,7 @@ export declare class LocalServerDataLoader extends BaseDataLoader {
9
15
  /**
10
16
  * add event listener when received data from server.
11
17
  */
12
- onDataUpdate<T extends SDK.ServerAPI.API | SDK.ServerAPI.APIExtends>(api: T, fn: (response: SDK.ServerAPI.SocketResponseType<T>) => void): void;
13
- removeOnDataUpdate<T extends SDK.ServerAPI.API | SDK.ServerAPI.APIExtends>(api: T, fn: (response: SDK.ServerAPI.SocketResponseType<T>) => void): void;
18
+ onDataUpdate<T extends SDK.ServerAPI.API | SDK.ServerAPI.APIExtends>(api: T, body: SDK.ServerAPI.InferRequestBodyType<T, null> | null, fn: (response: SDK.ServerAPI.SocketResponseType<T>) => void): void;
19
+ removeOnDataUpdate<T extends SDK.ServerAPI.API | SDK.ServerAPI.APIExtends>(api: T, body: SDK.ServerAPI.InferRequestBodyType<T, null> | null, fn: (response: SDK.ServerAPI.SocketResponseType<T>) => void): void;
14
20
  }
21
+ export {};