@module-federation/devtools 0.0.0-next-20250926024003 → 0.0.0-perf-devtools-20260107043700

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 (99) hide show
  1. package/dist/es/App.css +12 -0
  2. package/dist/es/App.js +330 -22
  3. package/dist/es/App.module.js +1 -1
  4. package/dist/es/App_module.css +291 -5
  5. package/dist/es/component/DependencyGraph/index.js +205 -0
  6. package/dist/es/component/DependencyGraph/index.module.js +5 -0
  7. package/dist/es/component/DependencyGraph/index_module.css +97 -0
  8. package/dist/es/component/{GraphItem → DependencyGraphItem}/index.js +15 -6
  9. package/dist/es/component/DependencyGraphItem/index.module.js +5 -0
  10. package/dist/es/component/DependencyGraphItem/index_module.css +95 -0
  11. package/dist/es/component/Form/index.js +191 -109
  12. package/dist/es/component/Form/index.module.js +1 -1
  13. package/dist/es/component/Form/index_module.css +179 -25
  14. package/dist/es/component/Layout/index.js +288 -51
  15. package/dist/es/component/Layout/index.module.js +1 -1
  16. package/dist/es/component/Layout/index_module.css +52 -32
  17. package/dist/es/component/ModuleInfo/index.js +289 -0
  18. package/dist/es/component/ModuleInfo/index.module.js +5 -0
  19. package/dist/es/component/ModuleInfo/index_module.css +183 -0
  20. package/dist/es/component/SharedDepsExplorer/FocusResultDisplay.js +33 -0
  21. package/dist/es/component/SharedDepsExplorer/FocusResultDisplay.module.js +5 -0
  22. package/dist/es/component/SharedDepsExplorer/FocusResultDisplay_module.css +45 -0
  23. package/dist/es/component/SharedDepsExplorer/index.js +506 -0
  24. package/dist/es/component/SharedDepsExplorer/index.module.js +5 -0
  25. package/dist/es/component/SharedDepsExplorer/index_module.css +457 -0
  26. package/dist/es/component/SharedDepsExplorer/share-utils.js +206 -0
  27. package/dist/es/template/constant.js +5 -19
  28. package/dist/es/utils/chrome/fast-refresh.js +80 -7
  29. package/dist/es/utils/chrome/index.js +91 -38
  30. package/dist/es/utils/chrome/messages.js +6 -0
  31. package/dist/es/utils/chrome/post-message-listener.js +2 -1
  32. package/dist/es/utils/chrome/post-message-start.js +10 -2
  33. package/dist/es/utils/chrome/storage.js +6 -1
  34. package/dist/es/utils/sdk/graph.js +25 -4
  35. package/dist/es/utils/sdk/index.js +9 -0
  36. package/dist/es/worker/index.js +168 -1
  37. package/dist/lib/App.css +12 -0
  38. package/dist/lib/App.js +321 -18
  39. package/dist/lib/App.module.js +1 -1
  40. package/dist/lib/App_module.css +291 -5
  41. package/dist/lib/component/DependencyGraph/index.js +227 -0
  42. package/dist/lib/component/{GraphItem → DependencyGraph}/index.module.js +1 -1
  43. package/dist/lib/component/DependencyGraph/index_module.css +97 -0
  44. package/dist/lib/component/{GraphItem → DependencyGraphItem}/index.js +18 -9
  45. package/dist/lib/component/{Graph → DependencyGraphItem}/index.module.js +1 -1
  46. package/dist/lib/component/DependencyGraphItem/index_module.css +95 -0
  47. package/dist/lib/component/Form/index.js +188 -107
  48. package/dist/lib/component/Form/index.module.js +1 -1
  49. package/dist/lib/component/Form/index_module.css +179 -25
  50. package/dist/lib/component/Layout/index.js +280 -48
  51. package/dist/lib/component/Layout/index.module.js +1 -1
  52. package/dist/lib/component/Layout/index_module.css +52 -32
  53. package/dist/lib/component/ModuleInfo/index.js +319 -0
  54. package/dist/lib/component/ModuleInfo/index.module.js +25 -0
  55. package/dist/lib/component/ModuleInfo/index_module.css +183 -0
  56. package/dist/lib/component/SharedDepsExplorer/FocusResultDisplay.js +63 -0
  57. package/dist/lib/component/SharedDepsExplorer/FocusResultDisplay.module.js +25 -0
  58. package/dist/lib/component/SharedDepsExplorer/FocusResultDisplay_module.css +45 -0
  59. package/dist/lib/component/SharedDepsExplorer/index.js +513 -0
  60. package/dist/lib/component/SharedDepsExplorer/index.module.js +25 -0
  61. package/dist/lib/component/SharedDepsExplorer/index_module.css +457 -0
  62. package/dist/lib/component/SharedDepsExplorer/share-utils.js +237 -0
  63. package/dist/lib/template/constant.js +7 -17
  64. package/dist/lib/utils/chrome/fast-refresh.js +77 -8
  65. package/dist/lib/utils/chrome/index.js +94 -38
  66. package/dist/lib/utils/chrome/messages.js +31 -0
  67. package/dist/lib/utils/chrome/post-message-listener.js +2 -1
  68. package/dist/lib/utils/chrome/post-message-start.js +10 -2
  69. package/dist/lib/utils/chrome/storage.js +5 -0
  70. package/dist/lib/utils/sdk/graph.js +25 -4
  71. package/dist/lib/utils/sdk/index.js +10 -0
  72. package/dist/lib/worker/index.js +156 -1
  73. package/dist/types/src/App.d.ts +2 -1
  74. package/dist/types/src/component/{Graph → DependencyGraph}/index.d.ts +0 -1
  75. package/dist/types/src/component/{GraphItem → DependencyGraphItem}/index.d.ts +0 -1
  76. package/dist/types/src/component/Form/index.d.ts +2 -0
  77. package/dist/types/src/component/Layout/index.d.ts +0 -1
  78. package/dist/types/src/component/ModuleInfo/index.d.ts +8 -0
  79. package/dist/types/src/component/SharedDepsExplorer/FocusResultDisplay.d.ts +15 -0
  80. package/dist/types/src/component/SharedDepsExplorer/index.d.ts +6 -0
  81. package/dist/types/src/component/SharedDepsExplorer/share-utils.d.ts +44 -0
  82. package/dist/types/src/init.d.ts +0 -1
  83. package/dist/types/src/template/constant.d.ts +3 -5
  84. package/dist/types/src/utils/chrome/index.d.ts +5 -3
  85. package/dist/types/src/utils/chrome/messages.d.ts +2 -0
  86. package/dist/types/src/utils/chrome/storage.d.ts +5 -4
  87. package/dist/types/src/utils/sdk/graph.d.ts +2 -1
  88. package/dist/types/src/utils/sdk/index.d.ts +1 -0
  89. package/dist/types/src/utils/types/common.d.ts +4 -0
  90. package/dist/types/src/worker/index.d.ts +1 -0
  91. package/package.json +16 -14
  92. package/dist/es/component/Graph/index.js +0 -127
  93. package/dist/es/component/Graph/index.module.js +0 -5
  94. package/dist/es/component/Graph/index_module.css +0 -12
  95. package/dist/es/component/GraphItem/index.module.js +0 -5
  96. package/dist/es/component/GraphItem/index_module.css +0 -61
  97. package/dist/lib/component/Graph/index.js +0 -149
  98. package/dist/lib/component/Graph/index_module.css +0 -12
  99. package/dist/lib/component/GraphItem/index_module.css +0 -61
@@ -1,2 +1,157 @@
1
1
  "use strict";
2
- console.log("Module Federation Worker");
2
+ var __async = (__this, __arguments, generator) => {
3
+ return new Promise((resolve, reject) => {
4
+ var fulfilled = (value) => {
5
+ try {
6
+ step(generator.next(value));
7
+ } catch (e) {
8
+ reject(e);
9
+ }
10
+ };
11
+ var rejected = (value) => {
12
+ try {
13
+ step(generator.throw(value));
14
+ } catch (e) {
15
+ reject(e);
16
+ }
17
+ };
18
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
19
+ step((generator = generator.apply(__this, __arguments)).next());
20
+ });
21
+ };
22
+ var import_messages = require("../utils/chrome/messages");
23
+ const SIDE_PANEL_PATH = "html/main/index.html";
24
+ const getSidePanel = () => chrome == null ? void 0 : chrome.sidePanel;
25
+ const resolveTabId = (tabId) => __async(exports, null, function* () {
26
+ if (typeof tabId === "number") {
27
+ return tabId;
28
+ }
29
+ const [activeTab] = yield chrome.tabs.query({
30
+ active: true,
31
+ lastFocusedWindow: true
32
+ });
33
+ return activeTab == null ? void 0 : activeTab.id;
34
+ });
35
+ const broadcastActiveTab = (tabId) => {
36
+ try {
37
+ chrome.runtime.sendMessage({
38
+ type: import_messages.MESSAGE_ACTIVE_TAB_CHANGED,
39
+ tabId
40
+ });
41
+ } catch (error) {
42
+ console.warn(
43
+ "[Module Federation Devtools] Failed to broadcast active tab",
44
+ error
45
+ );
46
+ }
47
+ };
48
+ const openSidePanel = (tabId) => __async(exports, null, function* () {
49
+ const sidePanel = getSidePanel();
50
+ if (!sidePanel) {
51
+ throw new Error("sidePanel api not available");
52
+ }
53
+ const targetTabId = yield resolveTabId(tabId);
54
+ if (typeof targetTabId !== "number") {
55
+ throw new Error("No active tab available");
56
+ }
57
+ yield sidePanel.setOptions({
58
+ tabId: targetTabId,
59
+ path: SIDE_PANEL_PATH,
60
+ enabled: true
61
+ });
62
+ if (sidePanel.open) {
63
+ yield sidePanel.open({ tabId: targetTabId });
64
+ }
65
+ broadcastActiveTab(targetTabId);
66
+ if (sidePanel.getOptions) {
67
+ try {
68
+ const options = yield sidePanel.getOptions({ tabId: targetTabId });
69
+ broadcastActiveTab(targetTabId);
70
+ return options;
71
+ } catch (error) {
72
+ console.warn("[Module Federation Devtools] getOptions failed", error);
73
+ }
74
+ }
75
+ return {
76
+ path: SIDE_PANEL_PATH,
77
+ enabled: true
78
+ };
79
+ });
80
+ chrome.runtime.onInstalled.addListener(() => {
81
+ const sidePanel = getSidePanel();
82
+ if (sidePanel == null ? void 0 : sidePanel.setPanelBehavior) {
83
+ sidePanel.setPanelBehavior({ openPanelOnActionClick: true }).catch((error) => {
84
+ console.warn(
85
+ "[Module Federation Devtools] setPanelBehavior failed",
86
+ error
87
+ );
88
+ });
89
+ }
90
+ });
91
+ chrome.action.onClicked.addListener((tab) => __async(exports, null, function* () {
92
+ try {
93
+ yield openSidePanel(tab.id);
94
+ } catch (error) {
95
+ console.warn(
96
+ "[Module Federation Devtools] Failed to open side panel",
97
+ error
98
+ );
99
+ }
100
+ }));
101
+ chrome.runtime.onMessage.addListener((message, _sender, sendResponse) => {
102
+ if ((message == null ? void 0 : message.type) === import_messages.MESSAGE_OPEN_SIDE_PANEL) {
103
+ openSidePanel(message.tabId).then((options) => sendResponse({ ok: true, options })).catch(
104
+ (error) => sendResponse({ ok: false, message: String(error) })
105
+ );
106
+ return true;
107
+ }
108
+ return void 0;
109
+ });
110
+ chrome.tabs.onActivated.addListener((activeInfo) => __async(exports, null, function* () {
111
+ const tabId = activeInfo == null ? void 0 : activeInfo.tabId;
112
+ if (typeof tabId !== "number") {
113
+ return;
114
+ }
115
+ try {
116
+ broadcastActiveTab(tabId);
117
+ } catch (error) {
118
+ console.warn(
119
+ "[Module Federation Devtools] Failed to handle tab activation",
120
+ error
121
+ );
122
+ }
123
+ }));
124
+ chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
125
+ if (changeInfo.status !== "complete") {
126
+ return;
127
+ }
128
+ if (tab == null ? void 0 : tab.active) {
129
+ try {
130
+ broadcastActiveTab(tabId);
131
+ } catch (error) {
132
+ console.warn(
133
+ "[Module Federation Devtools] Failed to handle tab update",
134
+ error
135
+ );
136
+ }
137
+ }
138
+ });
139
+ chrome.tabs.onRemoved.addListener((tabId) => __async(exports, null, function* () {
140
+ try {
141
+ const FormID = "FormID";
142
+ const data = yield chrome.storage.sync.get(FormID);
143
+ const storeData = data[FormID];
144
+ if (storeData == null ? void 0 : storeData[String(tabId)]) {
145
+ delete storeData[String(tabId)];
146
+ yield chrome.storage.sync.set({
147
+ [FormID]: storeData
148
+ });
149
+ }
150
+ } catch (error) {
151
+ console.warn(
152
+ "[Module Federation Devtools] Failed to handle tab removal",
153
+ error
154
+ );
155
+ }
156
+ }));
157
+ console.log("Module Federation Worker ready");
@@ -1,4 +1,5 @@
1
- /// <reference types="react" />
1
+ import '@arco-design/web-react/es/_util/react-19-adapter';
2
+ import './App.css';
2
3
  import './init';
3
4
  import { RootComponentProps } from './utils';
4
5
  import '@arco-design/web-react/dist/css/arco.css';
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { GlobalModuleInfo } from '@module-federation/sdk';
3
2
  import 'reactflow/dist/style.css';
4
3
  declare const Graph: (props: {
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import 'reactflow/dist/style.css';
3
2
  declare const GraphItem: (props: {
4
3
  data: {
@@ -13,6 +13,8 @@ interface FormProps {
13
13
  validateForm: any;
14
14
  enableHMR: string;
15
15
  onHMRChange: (on: boolean) => void;
16
+ enableClip: boolean;
17
+ onClipChange: (on: boolean) => void;
16
18
  headerSlot?: ReactNode;
17
19
  }
18
20
  declare const FormComponent: (props: FormProps & RootComponentProps) => import("react").JSX.Element;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { GlobalModuleInfo } from '@module-federation/sdk';
3
2
  import type { Federation } from '@module-federation/runtime';
4
3
  import { RootComponentProps } from '../../utils';
@@ -0,0 +1,8 @@
1
+ import type { GlobalModuleInfo } from '@module-federation/sdk';
2
+ interface HomeProps {
3
+ moduleInfo: GlobalModuleInfo;
4
+ selectedModuleId: string | null;
5
+ onSelectModule: (moduleId: string) => void;
6
+ }
7
+ declare const Home: (props: HomeProps) => import("react").JSX.Element;
8
+ export default Home;
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ import { LoadedStatus } from './share-utils';
3
+ interface FocusResult {
4
+ packageName: string;
5
+ version: string;
6
+ status: LoadedStatus;
7
+ providers: string[];
8
+ }
9
+ interface FocusResultDisplayProps {
10
+ focusResult: FocusResult | null;
11
+ hasData: boolean;
12
+ loadedStatusLabel: (status: LoadedStatus) => string;
13
+ }
14
+ declare const FocusResultDisplay: React.FC<FocusResultDisplayProps>;
15
+ export default FocusResultDisplay;
@@ -0,0 +1,6 @@
1
+ import type { GlobalShareScopeMap } from '@module-federation/runtime/types';
2
+ interface SharedDepsExplorerProps {
3
+ shareData?: GlobalShareScopeMap;
4
+ }
5
+ declare function SharedDepsExplorer({ shareData: shareDataProp, }: SharedDepsExplorerProps): import("react").JSX.Element;
6
+ export default SharedDepsExplorer;
@@ -0,0 +1,44 @@
1
+ import { GlobalShareScopeMap, Shared, SharedConfig } from '@module-federation/runtime/types';
2
+ export type LoadedStatus = 'loaded' | 'loading' | 'not-loaded';
3
+ export type ReuseStatus = boolean;
4
+ export interface ShareStats {
5
+ totalProviders: number;
6
+ totalScopes: number;
7
+ totalPackages: number;
8
+ totalVersions: number;
9
+ loadedCount: number;
10
+ reusedCount: number;
11
+ }
12
+ export interface NormalizedSharedVersion {
13
+ id: string;
14
+ provider: string;
15
+ scope: string;
16
+ packageName: string;
17
+ version: string;
18
+ from: string;
19
+ useIn: string[];
20
+ shareConfig: SharedConfig;
21
+ strategy?: string;
22
+ loaded?: boolean;
23
+ loading?: unknown;
24
+ loadedStatus: LoadedStatus;
25
+ reuseStatus: ReuseStatus;
26
+ }
27
+ export declare function computeLoadedStatus(entry: Shared): LoadedStatus;
28
+ export declare function computeReuseStatus(entry: Shared): ReuseStatus;
29
+ export declare function normalizeShareData(raw: GlobalShareScopeMap | null | undefined): NormalizedSharedVersion[];
30
+ export declare function computeShareStats(versions: NormalizedSharedVersion[]): ShareStats;
31
+ export declare function groupByProviderScopePackage(versions: NormalizedSharedVersion[]): Record<string, Record<string, Record<string, NormalizedSharedVersion[]>>>;
32
+ export declare function getFilterOptions(versions: NormalizedSharedVersion[]): {
33
+ providers: string[];
34
+ scopes: string[];
35
+ packages: string[];
36
+ versions: string[];
37
+ };
38
+ export declare function findPackageProvider(versions: NormalizedSharedVersion[], packageName: string, version?: string): {
39
+ packageName: string;
40
+ version: string;
41
+ providers: string[];
42
+ status: LoadedStatus;
43
+ } | null;
44
+ export declare function getReusedVersions(versions: NormalizedSharedVersion[]): NormalizedSharedVersion[];
@@ -1,4 +1,3 @@
1
- /// <reference types="chrome" />
2
1
  import { GlobalModuleInfo } from '@module-federation/sdk';
3
2
  declare global {
4
3
  interface Window {
@@ -1,5 +1,6 @@
1
1
  export declare const FormID = "FormID";
2
2
  export declare const ENABLEHMR = "enableHMR";
3
+ export declare const ENABLE_CLIP = "enableClip";
3
4
  export declare const proxyFormField = "proxyFormField";
4
5
  export declare const defaultDataItem: {
5
6
  key: string;
@@ -7,11 +8,7 @@ export declare const defaultDataItem: {
7
8
  checked: boolean;
8
9
  };
9
10
  export declare const defaultModuleData: {
10
- proxyFormField: {
11
- key: string;
12
- value: string;
13
- checked: boolean;
14
- }[];
11
+ proxyFormField: never[];
15
12
  };
16
13
  export declare const statusInfo: Record<string, {
17
14
  status: string;
@@ -19,5 +16,6 @@ export declare const statusInfo: Record<string, {
19
16
  color: string;
20
17
  }>;
21
18
  export declare const __ENABLE_FAST_REFRESH__ = "enableFastRefresh";
19
+ export declare const __EAGER_SHARE__ = "eagerShare";
22
20
  export declare const BROWSER_ENV_KEY = "MF_ENV";
23
21
  export declare const __FEDERATION_DEVTOOLS__ = "__MF_DEVTOOLS__";
@@ -1,16 +1,18 @@
1
- /// <reference types="chrome" />
2
1
  import { GlobalModuleInfo } from '@module-federation/sdk';
3
2
  export * from './storage';
4
3
  export declare const injectPostMessage: (postMessageUrl: string) => void;
5
4
  export declare const TabInfo: {
6
5
  currentTabId: number;
7
6
  };
7
+ export declare const setTargetTab: (tab?: chrome.tabs.Tab | null) => void;
8
+ export declare const syncActiveTab: (tabId?: number) => Promise<chrome.tabs.Tab | undefined>;
8
9
  export declare function getCurrentTabId(): number;
9
10
  export declare function getInspectWindowTabId(): Promise<unknown>;
10
- export declare const getGlobalModuleInfo: (callback: React.Dispatch<React.SetStateAction<GlobalModuleInfo>>) => Promise<void>;
11
+ export declare const refreshModuleInfo: () => Promise<void>;
12
+ export declare const getGlobalModuleInfo: (callback: (moduleInfo: GlobalModuleInfo) => void) => Promise<() => void>;
11
13
  export declare const getTabs: (queryOptions?: {}) => Promise<chrome.tabs.Tab[]>;
12
14
  export declare const getScope: () => Promise<string>;
13
- export declare const injectScript: (excuteScript: (...args: Array<any>) => any, world?: boolean, ...args: any) => Promise<void>;
15
+ export declare const injectScript: (excuteScript: (...args: Array<any>) => any, world?: boolean, ...args: any) => Promise<any>;
14
16
  export declare const getUrl: (file: string) => string;
15
17
  export declare const injectToast: (toastUtilUrl: string, e2eFlag: string) => void;
16
18
  export declare const setChromeStorage: (formData: Record<string, any>) => void;
@@ -0,0 +1,2 @@
1
+ export declare const MESSAGE_OPEN_SIDE_PANEL = "mf-devtools/open-side-panel";
2
+ export declare const MESSAGE_ACTIVE_TAB_CHANGED = "mf-devtools/active-tab-changed";
@@ -1,4 +1,5 @@
1
- export declare const mergeStorage: (...args: any[]) => Promise<void>;
2
- export declare const removeStorageKey: (...args: any[]) => Promise<void>;
3
- export declare const removeStorage: (...args: any[]) => Promise<void>;
4
- export declare const setStorage: (...args: any[]) => Promise<void>;
1
+ export declare const mergeStorage: (...args: any[]) => Promise<any>;
2
+ export declare const removeStorageKey: (...args: any[]) => Promise<any>;
3
+ export declare const removeStorage: (...args: any[]) => Promise<any>;
4
+ export declare const setStorage: (...args: any[]) => Promise<any>;
5
+ export declare const getStorageValue: (...args: any[]) => Promise<any>;
@@ -40,6 +40,7 @@ export declare class DependencyGraph {
40
40
  createGraph(target?: string): void;
41
41
  addNode(id: string, type: string, x: number, y: number, nodeData: NodeCustomData): void;
42
42
  addEdge(id: string, source: string, target: string, type?: Edge): void;
43
- run(targetGraph: any, target: string | undefined, type: string, id?: string): void;
43
+ run(targetGraph: any, target: string | undefined, type: string, id?: string, depth?: number, maxDepth?: number): void;
44
44
  identify(): string;
45
+ calculateDepth(target?: string, visited?: Set<string>): number;
45
46
  }
@@ -1,5 +1,6 @@
1
1
  export * from './graph';
2
2
  export declare const setLocalStorage: (key: string, value: any) => void;
3
+ export declare const getLocalStorage: (key: string) => string | null;
3
4
  export declare const removeLocalStorage: (key: string) => void;
4
5
  export declare const mergeLocalStorage: (target: string, key: string, value: any) => void;
5
6
  export declare const removeLocalStorageKey: (target: string, key: string) => void;
@@ -1,4 +1,5 @@
1
1
  import type { ReactNode } from 'react';
2
+ import type { GlobalModuleInfo } from '@module-federation/sdk';
2
3
  import { getModuleInfo } from '../index';
3
4
  export interface FormItemStatus {
4
5
  keyStatus: boolean;
@@ -14,5 +15,8 @@ export interface RootComponentProps {
14
15
  handleProxyAddress?: (address: string) => string;
15
16
  customValueValidate?: (schema: string) => boolean;
16
17
  headerSlot?: ReactNode;
18
+ onModuleInfoChange?: (moduleInfo: GlobalModuleInfo) => void;
19
+ onModuleInfoReset?: () => void;
20
+ tabId?: number;
17
21
  }
18
22
  export {};
@@ -0,0 +1 @@
1
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@module-federation/devtools",
3
- "version": "0.0.0-next-20250926024003",
3
+ "version": "0.0.0-perf-devtools-20260107043700",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -37,35 +37,37 @@
37
37
  "access": "public"
38
38
  },
39
39
  "dependencies": {
40
- "@arco-design/web-react": "^2.64.1",
41
- "@modern-js/runtime": "2.68.2",
40
+ "@modern-js/runtime": "2.69.3",
41
+ "@arco-design/web-react": "2.66.7",
42
42
  "ahooks": "^3.7.10",
43
43
  "dagre": "^0.8.5",
44
- "react": "~18.3.1",
45
- "react-dom": "~18.3.1",
44
+ "react": "^19.2.0",
45
+ "react-dom": "^19.2.0",
46
46
  "reactflow": "11.11.4",
47
- "@module-federation/sdk": "0.0.0-next-20250926024003"
47
+ "echarts": "^6.0.0",
48
+ "lucide-react": "^0.364.0",
49
+ "echarts-for-react": "^3.0.5",
50
+ "@module-federation/sdk": "0.0.0-perf-devtools-20260107043700"
48
51
  },
49
52
  "devDependencies": {
50
53
  "@modern-js-app/eslint-config": "2.59.0",
51
- "@modern-js/app-tools": "2.68.2",
54
+ "@modern-js/app-tools": "2.69.3",
52
55
  "@modern-js/eslint-config": "2.59.0",
53
- "@modern-js/module-tools": "2.68.2",
54
- "@modern-js/storybook": "2.68.2",
55
- "@modern-js/tsconfig": "2.68.2",
56
+ "@modern-js/module-tools": "2.69.3",
57
+ "@modern-js/storybook": "2.69.3",
58
+ "@modern-js/tsconfig": "2.69.3",
56
59
  "@playwright/test": "1.49.1",
57
60
  "@types/chrome": "^0.0.272",
58
61
  "@types/dagre": "^0.7.52",
59
62
  "@types/jest": "~29.2.4",
60
63
  "@types/node": "~20.12.12",
61
- "@types/react": "~18.2.0",
62
- "@types/react-dom": "~18.3.0",
64
+ "@types/react": "^19.2.2",
65
+ "@types/react-dom": "^19.2.2",
63
66
  "lint-staged": "~13.1.0",
64
67
  "prettier": "~3.3.3",
65
68
  "rimraf": "~6.0.1",
66
- "typescript": "~5.0.4",
67
69
  "vitest": "1.2.2",
68
- "@module-federation/runtime": "0.0.0-next-20250926024003"
70
+ "@module-federation/runtime": "0.0.0-perf-devtools-20260107043700"
69
71
  },
70
72
  "scripts": {
71
73
  "build:storybook": "storybook build",
@@ -1,127 +0,0 @@
1
- var __defProp = Object.defineProperty;
2
- var __defProps = Object.defineProperties;
3
- var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
- var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
- var __spreadValues = (a, b) => {
9
- for (var prop in b || (b = {}))
10
- if (__hasOwnProp.call(b, prop))
11
- __defNormalProp(a, prop, b[prop]);
12
- if (__getOwnPropSymbols)
13
- for (var prop of __getOwnPropSymbols(b)) {
14
- if (__propIsEnum.call(b, prop))
15
- __defNormalProp(a, prop, b[prop]);
16
- }
17
- return a;
18
- };
19
- var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
- import { jsx } from "react/jsx-runtime";
21
- import { useCallback, useEffect } from "react";
22
- import ReactFlow, {
23
- addEdge,
24
- ConnectionLineType,
25
- useNodesState,
26
- useEdgesState,
27
- Controls
28
- } from "reactflow";
29
- import dagre from "dagre";
30
- import { DependencyGraph } from "../../utils/sdk/graph";
31
- import GraphItem from "../GraphItem";
32
- import { separateType } from "../../utils";
33
- import styles from "./index.module";
34
- import "reactflow/dist/style.css";
35
- const nodeWidth = 400;
36
- const nodeHeight = 600;
37
- const nodeTypes = { graphItem: GraphItem };
38
- const Graph = (props) => {
39
- const [nodes, setNodes, onNodesChange] = useNodesState([]);
40
- const [edges, setEdges, onEdgesChange] = useEdgesState([]);
41
- const { snapshot } = props;
42
- const { moduleInfo } = window.__FEDERATION__;
43
- const { consumers } = separateType(moduleInfo);
44
- useEffect(() => {
45
- const dagreGraph = new dagre.graphlib.Graph();
46
- dagreGraph.setDefaultEdgeLabel(() => ({}));
47
- const getLayoutedElements = (nodes2, edges2, direction = "TB") => {
48
- dagreGraph.setGraph({ rankdir: direction });
49
- nodes2.forEach((node) => {
50
- dagreGraph.setNode(node.id, { width: nodeWidth, height: nodeHeight });
51
- });
52
- edges2.forEach((edge) => {
53
- dagreGraph.setEdge(edge.source, edge.target);
54
- });
55
- dagre.layout(dagreGraph);
56
- nodes2.forEach((node) => {
57
- const nodeWithPosition = dagreGraph.node(node.id);
58
- node.position = {
59
- x: nodeWithPosition.x - nodeWidth / 2,
60
- y: nodeWithPosition.y - nodeHeight / 2
61
- };
62
- });
63
- return { nodes: nodes2, edges: edges2 };
64
- };
65
- let nodeSet = [];
66
- let edgeSet = [];
67
- for (const consumer in consumers) {
68
- const moduleGraph = new DependencyGraph(snapshot, consumer);
69
- moduleGraph.createGraph();
70
- moduleGraph.run(moduleGraph.graph, consumer, "graphItem");
71
- nodeSet = [...nodeSet, ...moduleGraph.node];
72
- edgeSet = [...edgeSet, ...moduleGraph.edge];
73
- }
74
- if (!nodeSet.length) {
75
- nodeSet.push({
76
- id: "1",
77
- type: "graphItem",
78
- position: {
79
- x: 0,
80
- y: 0
81
- },
82
- data: {
83
- color: "lightgreen"
84
- }
85
- });
86
- }
87
- const { nodes: layoutedNodes, edges: layoutedEdges } = getLayoutedElements(
88
- nodeSet,
89
- edgeSet
90
- );
91
- setNodes(layoutedNodes);
92
- setEdges(layoutedEdges);
93
- setTimeout(() => {
94
- const element = document.getElementsByClassName(
95
- "react-flow__controls-fitview"
96
- )[0];
97
- element == null ? void 0 : element.click();
98
- }, 50);
99
- }, [snapshot]);
100
- const onConnect = useCallback(
101
- (params) => setEdges(
102
- (eds) => addEdge(
103
- __spreadProps(__spreadValues({}, params), { type: ConnectionLineType.SmoothStep, animated: true }),
104
- eds
105
- )
106
- ),
107
- []
108
- );
109
- return /* @__PURE__ */ jsx("div", { className: styles.depWrapper, children: /* @__PURE__ */ jsx(
110
- ReactFlow,
111
- {
112
- className: styles.graph,
113
- nodes,
114
- edges,
115
- onNodesChange,
116
- onEdgesChange,
117
- onConnect,
118
- nodeTypes,
119
- fitView: true,
120
- children: /* @__PURE__ */ jsx(Controls, {})
121
- }
122
- ) });
123
- };
124
- var Graph_default = Graph;
125
- export {
126
- Graph_default as default
127
- };
@@ -1,5 +0,0 @@
1
- import "./index_module.css";
2
- var index_module_default = { "depWrapper": "depWrapper_613b1", "table": "table_613b1", "graph": "graph_613b1" };
3
- export {
4
- index_module_default as default
5
- };
@@ -1,12 +0,0 @@
1
- .depWrapper_613b1 {
2
- border: 1px solid #e5e6ec;
3
- margin-top: 16px;
4
- padding-top: 14px;
5
- border-radius: 8px;
6
- }
7
- .depWrapper_613b1 .table_613b1 {
8
- margin: 8px 0 20px;
9
- }
10
- .depWrapper_613b1 .graph_613b1 {
11
- height: 80vh !important;
12
- }
@@ -1,5 +0,0 @@
1
- import "./index_module.css";
2
- var index_module_default = { "Wrapper": "Wrapper_2fa4f", "container": "container_2fa4f", "group": "group_2fa4f", "name": "name_2fa4f", "info": "info_2fa4f", "expose-container": "expose-container_2fa4f", "type": "type_2fa4f", "item": "item_2fa4f", "message": "message_2fa4f" };
3
- export {
4
- index_module_default as default
5
- };
@@ -1,61 +0,0 @@
1
- .Wrapper_2fa4f {
2
- display: flex;
3
- box-sizing: border-box;
4
- border-radius: 10px;
5
- margin: 0;
6
- padding: 0;
7
- width: 300px;
8
- overflow: hidden;
9
- }
10
- .Wrapper_2fa4f .container_2fa4f {
11
- display: flex;
12
- flex-direction: column;
13
- width: 100%;
14
- height: 100%;
15
- margin: 0;
16
- padding: 0;
17
- }
18
- .Wrapper_2fa4f .container_2fa4f .group_2fa4f {
19
- display: flex;
20
- align-items: center;
21
- margin-bottom: 3px;
22
- width: 100%;
23
- padding: 5px 0;
24
- }
25
- .Wrapper_2fa4f .container_2fa4f .group_2fa4f .name_2fa4f {
26
- color: white;
27
- text-align: center;
28
- margin: 0 auto;
29
- }
30
- .Wrapper_2fa4f .container_2fa4f .info_2fa4f {
31
- display: flex;
32
- flex-direction: column;
33
- background-color: white;
34
- margin: 0 4px 4px 4px;
35
- padding: 10px;
36
- border-radius: 0 0 5px 5px;
37
- font-size: 12px;
38
- }
39
- .Wrapper_2fa4f .container_2fa4f .info_2fa4f .expose-container_2fa4f {
40
- display: flex;
41
- margin-bottom: 5px;
42
- }
43
- .Wrapper_2fa4f .container_2fa4f .info_2fa4f .type_2fa4f {
44
- font-weight: bold;
45
- margin-right: 10px;
46
- }
47
- .Wrapper_2fa4f .container_2fa4f .info_2fa4f .item_2fa4f {
48
- display: inline-block;
49
- padding: 5px;
50
- background: lightgray;
51
- border-radius: 15px;
52
- font-size: 8px;
53
- margin-right: 5px;
54
- margin-bottom: 5px;
55
- font-weight: 300;
56
- text-overflow: ellipsis;
57
- overflow: hidden;
58
- }
59
- .Wrapper_2fa4f .container_2fa4f .message_2fa4f {
60
- display: flex;
61
- }