@mt0926/node-network-devtools 0.1.3 → 0.3.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 (51) hide show
  1. package/README.md +96 -1
  2. package/dist/cjs/adapters/axios.js +2 -0
  3. package/dist/cjs/adapters/axios.js.map +1 -0
  4. package/dist/cjs/adapters/nextjs.js +133 -0
  5. package/dist/cjs/adapters/nextjs.js.map +1 -0
  6. package/dist/cjs/cli.js +223 -0
  7. package/dist/cjs/cli.js.map +1 -0
  8. package/dist/cjs/config.js +150 -0
  9. package/dist/cjs/config.js.map +1 -0
  10. package/dist/cjs/context/context-manager.js +139 -0
  11. package/dist/cjs/context/context-manager.js.map +1 -0
  12. package/dist/cjs/gui/browser-detector.js +263 -0
  13. package/dist/cjs/gui/browser-detector.js.map +1 -0
  14. package/dist/cjs/gui/browser-launcher.js +365 -0
  15. package/dist/cjs/gui/browser-launcher.js.map +1 -0
  16. package/dist/cjs/gui/event-bridge.js +197 -0
  17. package/dist/cjs/gui/event-bridge.js.map +1 -0
  18. package/dist/cjs/gui/port-utils.js +85 -0
  19. package/dist/cjs/gui/port-utils.js.map +1 -0
  20. package/dist/cjs/gui/server.js +251 -0
  21. package/dist/cjs/gui/server.js.map +1 -0
  22. package/dist/cjs/gui/websocket-hub.js +336 -0
  23. package/dist/cjs/gui/websocket-hub.js.map +1 -0
  24. package/dist/cjs/index.js +170 -0
  25. package/dist/cjs/index.js.map +1 -0
  26. package/dist/cjs/interceptors/http-patcher.js +275 -0
  27. package/dist/cjs/interceptors/http-patcher.js.map +1 -0
  28. package/dist/cjs/interceptors/undici-patcher.js +362 -0
  29. package/dist/cjs/interceptors/undici-patcher.js.map +1 -0
  30. package/dist/cjs/package.json +3 -0
  31. package/dist/cjs/register.js +95 -0
  32. package/dist/cjs/register.js.map +1 -0
  33. package/dist/cjs/store/ring-buffer.js +241 -0
  34. package/dist/cjs/store/ring-buffer.js.map +1 -0
  35. package/dist/cjs/test-setup.js +8 -0
  36. package/dist/cjs/test-setup.js.map +1 -0
  37. package/dist/cjs/utils/module-compat.js +83 -0
  38. package/dist/cjs/utils/module-compat.js.map +1 -0
  39. package/dist/esm/cli.js +22 -4
  40. package/dist/esm/cli.js.map +1 -1
  41. package/dist/esm/gui/server.js +25 -6
  42. package/dist/esm/gui/server.js.map +1 -1
  43. package/dist/esm/interceptors/undici-patcher.js +9 -4
  44. package/dist/esm/interceptors/undici-patcher.js.map +1 -1
  45. package/dist/esm/utils/module-compat.js +78 -0
  46. package/dist/esm/utils/module-compat.js.map +1 -0
  47. package/dist/types/gui/server.d.ts.map +1 -1
  48. package/dist/types/interceptors/undici-patcher.d.ts.map +1 -1
  49. package/dist/types/utils/module-compat.d.ts +34 -0
  50. package/dist/types/utils/module-compat.d.ts.map +1 -0
  51. package/package.json +22 -8
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+ /**
3
+ * 上下文管理器
4
+ *
5
+ * 使用 AsyncLocalStorage 实现请求追踪上下文
6
+ * 支持跨异步边界传递 TraceID
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.ContextManager = void 0;
10
+ exports.generateTraceId = generateTraceId;
11
+ exports.getCurrentContext = getCurrentContext;
12
+ exports.getCurrentTraceId = getCurrentTraceId;
13
+ exports.startTrace = startTrace;
14
+ exports.runWithContext = runWithContext;
15
+ exports.runWithTrace = runWithTrace;
16
+ exports.runWithTraceAsync = runWithTraceAsync;
17
+ exports.updateContextMetadata = updateContextMetadata;
18
+ exports.getTraceDuration = getTraceDuration;
19
+ exports.createTraceIdGetter = createTraceIdGetter;
20
+ const node_async_hooks_1 = require("node:async_hooks");
21
+ const nanoid_1 = require("nanoid");
22
+ // AsyncLocalStorage 实例
23
+ const asyncLocalStorage = new node_async_hooks_1.AsyncLocalStorage();
24
+ /**
25
+ * 生成唯一的 TraceID
26
+ */
27
+ function generateTraceId() {
28
+ return `trace_${(0, nanoid_1.nanoid)(16)}`;
29
+ }
30
+ /**
31
+ * 获取当前追踪上下文
32
+ */
33
+ function getCurrentContext() {
34
+ return asyncLocalStorage.getStore();
35
+ }
36
+ /**
37
+ * 获取当前 TraceID
38
+ */
39
+ function getCurrentTraceId() {
40
+ return asyncLocalStorage.getStore()?.traceId;
41
+ }
42
+ /**
43
+ * 开始新的追踪
44
+ *
45
+ * @param traceId 可选的 TraceID,不提供则自动生成
46
+ * @param metadata 可选的元数据
47
+ * @returns 新的追踪上下文
48
+ */
49
+ function startTrace(traceId, metadata) {
50
+ const currentContext = getCurrentContext();
51
+ const context = {
52
+ traceId: traceId || generateTraceId(),
53
+ parentTraceId: currentContext?.traceId,
54
+ startTime: Date.now(),
55
+ metadata,
56
+ };
57
+ return context;
58
+ }
59
+ /**
60
+ * 在追踪上下文中运行函数
61
+ *
62
+ * @param context 追踪上下文
63
+ * @param fn 要运行的函数
64
+ * @returns 函数的返回值
65
+ */
66
+ function runWithContext(context, fn) {
67
+ return asyncLocalStorage.run(context, fn);
68
+ }
69
+ /**
70
+ * 在新的追踪上下文中运行函数
71
+ *
72
+ * @param fn 要运行的函数
73
+ * @param traceId 可选的 TraceID
74
+ * @param metadata 可选的元数据
75
+ * @returns 函数的返回值
76
+ */
77
+ function runWithTrace(fn, traceId, metadata) {
78
+ const context = startTrace(traceId, metadata);
79
+ return runWithContext(context, fn);
80
+ }
81
+ /**
82
+ * 在新的追踪上下文中运行异步函数
83
+ *
84
+ * @param fn 要运行的异步函数
85
+ * @param traceId 可选的 TraceID
86
+ * @param metadata 可选的元数据
87
+ * @returns Promise
88
+ */
89
+ async function runWithTraceAsync(fn, traceId, metadata) {
90
+ const context = startTrace(traceId, metadata);
91
+ return asyncLocalStorage.run(context, fn);
92
+ }
93
+ /**
94
+ * 更新当前上下文的元数据
95
+ *
96
+ * @param metadata 要合并的元数据
97
+ */
98
+ function updateContextMetadata(metadata) {
99
+ const context = getCurrentContext();
100
+ if (context) {
101
+ context.metadata = {
102
+ ...context.metadata,
103
+ ...metadata,
104
+ };
105
+ }
106
+ }
107
+ /**
108
+ * 获取追踪持续时间(毫秒)
109
+ */
110
+ function getTraceDuration() {
111
+ const context = getCurrentContext();
112
+ if (context) {
113
+ return Date.now() - context.startTime;
114
+ }
115
+ return undefined;
116
+ }
117
+ /**
118
+ * 创建获取当前 TraceID 的回调函数
119
+ * 用于传递给拦截器
120
+ */
121
+ function createTraceIdGetter() {
122
+ return getCurrentTraceId;
123
+ }
124
+ /**
125
+ * ContextManager 对象
126
+ */
127
+ exports.ContextManager = {
128
+ generateTraceId,
129
+ getCurrentContext,
130
+ getCurrentTraceId,
131
+ startTrace,
132
+ runWithContext,
133
+ runWithTrace,
134
+ runWithTraceAsync,
135
+ updateContextMetadata,
136
+ getTraceDuration,
137
+ createTraceIdGetter,
138
+ };
139
+ //# sourceMappingURL=context-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-manager.js","sourceRoot":"","sources":["../../../src/context/context-manager.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAyBH,0CAEC;AAKD,8CAEC;AAKD,8CAEC;AASD,gCAWC;AASD,wCAEC;AAUD,oCAOC;AAUD,8CAOC;AAOD,sDAQC;AAKD,4CAMC;AAMD,kDAEC;AA1ID,uDAAqD;AACrD,mCAAgC;AAgBhC,uBAAuB;AACvB,MAAM,iBAAiB,GAAG,IAAI,oCAAiB,EAAgB,CAAC;AAEhE;;GAEG;AACH,SAAgB,eAAe;IAC7B,OAAO,SAAS,IAAA,eAAM,EAAC,EAAE,CAAC,EAAE,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB;IAC/B,OAAO,iBAAiB,CAAC,QAAQ,EAAE,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB;IAC/B,OAAO,iBAAiB,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC;AAC/C,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,UAAU,CAAC,OAAgB,EAAE,QAAkC;IAC7E,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;IAE3C,MAAM,OAAO,GAAiB;QAC5B,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE;QACrC,aAAa,EAAE,cAAc,EAAE,OAAO;QACtC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,QAAQ;KACT,CAAC;IAEF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,cAAc,CAAI,OAAqB,EAAE,EAAW;IAClE,OAAO,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,YAAY,CAC1B,EAAW,EACX,OAAgB,EAChB,QAAkC;IAElC,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC9C,OAAO,cAAc,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACrC,CAAC;AAED;;;;;;;GAOG;AACI,KAAK,UAAU,iBAAiB,CACrC,EAAoB,EACpB,OAAgB,EAChB,QAAkC;IAElC,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC9C,OAAO,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED;;;;GAIG;AACH,SAAgB,qBAAqB,CAAC,QAAiC;IACrE,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;IACpC,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,QAAQ,GAAG;YACjB,GAAG,OAAO,CAAC,QAAQ;YACnB,GAAG,QAAQ;SACZ,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB;IAC9B,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;IACpC,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC;IACxC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,SAAgB,mBAAmB;IACjC,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED;;GAEG;AACU,QAAA,cAAc,GAAG;IAC5B,eAAe;IACf,iBAAiB;IACjB,iBAAiB;IACjB,UAAU;IACV,cAAc;IACd,YAAY;IACZ,iBAAiB;IACjB,qBAAqB;IACrB,gBAAgB;IAChB,mBAAmB;CACpB,CAAC"}
@@ -0,0 +1,263 @@
1
+ "use strict";
2
+ /**
3
+ * 浏览器检测器模块
4
+ *
5
+ * 跨平台检测系统已安装的浏览器(Chrome、Edge、Chromium)
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.BrowserType = void 0;
9
+ exports.getBrowserDetector = getBrowserDetector;
10
+ exports.createBrowserDetector = createBrowserDetector;
11
+ exports.detectBrowser = detectBrowser;
12
+ exports.detectAllBrowsers = detectAllBrowsers;
13
+ /**
14
+ * 浏览器类型枚举
15
+ */
16
+ var BrowserType;
17
+ (function (BrowserType) {
18
+ BrowserType["Chrome"] = "chrome";
19
+ BrowserType["Edge"] = "edge";
20
+ BrowserType["Chromium"] = "chromium";
21
+ })(BrowserType || (exports.BrowserType = BrowserType = {}));
22
+ const fs_1 = require("fs");
23
+ const os_1 = require("os");
24
+ /**
25
+ * Windows 平台浏览器路径配置
26
+ */
27
+ const WINDOWS_BROWSER_PATHS = {
28
+ [BrowserType.Chrome]: [
29
+ 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe',
30
+ 'C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe',
31
+ ...(process.env.LOCALAPPDATA
32
+ ? [`${process.env.LOCALAPPDATA}\\Google\\Chrome\\Application\\chrome.exe`]
33
+ : []),
34
+ ],
35
+ [BrowserType.Edge]: [
36
+ 'C:\\Program Files\\Microsoft\\Edge\\Application\\msedge.exe',
37
+ 'C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe',
38
+ ],
39
+ [BrowserType.Chromium]: [
40
+ ...(process.env.LOCALAPPDATA
41
+ ? [`${process.env.LOCALAPPDATA}\\Chromium\\Application\\chrome.exe`]
42
+ : []),
43
+ ],
44
+ };
45
+ /**
46
+ * macOS 平台浏览器路径配置
47
+ */
48
+ const MACOS_BROWSER_PATHS = {
49
+ [BrowserType.Chrome]: [
50
+ '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
51
+ ...(process.env.HOME
52
+ ? [`${process.env.HOME}/Applications/Google Chrome.app/Contents/MacOS/Google Chrome`]
53
+ : []),
54
+ ],
55
+ [BrowserType.Edge]: [
56
+ '/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge',
57
+ ],
58
+ [BrowserType.Chromium]: [
59
+ '/Applications/Chromium.app/Contents/MacOS/Chromium',
60
+ ],
61
+ };
62
+ /**
63
+ * Linux 平台浏览器路径配置
64
+ */
65
+ const LINUX_BROWSER_PATHS = {
66
+ [BrowserType.Chrome]: [
67
+ '/usr/bin/google-chrome',
68
+ '/usr/bin/google-chrome-stable',
69
+ '/usr/local/bin/google-chrome',
70
+ '/snap/bin/chromium',
71
+ ],
72
+ [BrowserType.Chromium]: [
73
+ '/usr/bin/chromium',
74
+ '/usr/bin/chromium-browser',
75
+ ],
76
+ [BrowserType.Edge]: [
77
+ '/usr/bin/microsoft-edge',
78
+ ],
79
+ };
80
+ /**
81
+ * 浏览器显示名称映射
82
+ */
83
+ const BROWSER_NAMES = {
84
+ [BrowserType.Chrome]: 'Google Chrome',
85
+ [BrowserType.Edge]: 'Microsoft Edge',
86
+ [BrowserType.Chromium]: 'Chromium',
87
+ };
88
+ /**
89
+ * 浏览器优先级顺序(数字越小优先级越高)
90
+ */
91
+ const BROWSER_PRIORITY = {
92
+ [BrowserType.Chrome]: 1,
93
+ [BrowserType.Edge]: 2,
94
+ [BrowserType.Chromium]: 3,
95
+ };
96
+ /**
97
+ * 根据当前平台获取浏览器路径配置
98
+ */
99
+ function getBrowserPathsForPlatform() {
100
+ const currentPlatform = (0, os_1.platform)();
101
+ switch (currentPlatform) {
102
+ case 'win32':
103
+ return WINDOWS_BROWSER_PATHS;
104
+ case 'darwin':
105
+ return MACOS_BROWSER_PATHS;
106
+ case 'linux':
107
+ return LINUX_BROWSER_PATHS;
108
+ default:
109
+ // 未知平台,返回空配置
110
+ return {
111
+ [BrowserType.Chrome]: [],
112
+ [BrowserType.Edge]: [],
113
+ [BrowserType.Chromium]: [],
114
+ };
115
+ }
116
+ }
117
+ /**
118
+ * 检测指定类型的浏览器
119
+ *
120
+ * @param type 浏览器类型
121
+ * @returns 浏览器信息,如果未找到则返回 null
122
+ */
123
+ function detectBrowserByType(type) {
124
+ const paths = getBrowserPathsForPlatform()[type];
125
+ for (const path of paths) {
126
+ if ((0, fs_1.existsSync)(path)) {
127
+ return {
128
+ type,
129
+ path,
130
+ name: BROWSER_NAMES[type],
131
+ };
132
+ }
133
+ }
134
+ return null;
135
+ }
136
+ /**
137
+ * 浏览器检测器实现类
138
+ */
139
+ class BrowserDetector {
140
+ /**
141
+ * 检测系统已安装的浏览器(按优先级返回第一个)
142
+ */
143
+ detect() {
144
+ // 优先检查自定义浏览器路径
145
+ const customPath = process.env.NND_BROWSER_PATH;
146
+ if (customPath && (0, fs_1.existsSync)(customPath)) {
147
+ // 尝试从路径推断浏览器类型
148
+ const lowerPath = customPath.toLowerCase();
149
+ let type;
150
+ if (lowerPath.includes('chrome') && !lowerPath.includes('chromium')) {
151
+ type = BrowserType.Chrome;
152
+ }
153
+ else if (lowerPath.includes('edge') || lowerPath.includes('msedge')) {
154
+ type = BrowserType.Edge;
155
+ }
156
+ else {
157
+ type = BrowserType.Chromium;
158
+ }
159
+ return {
160
+ type,
161
+ path: customPath,
162
+ name: BROWSER_NAMES[type],
163
+ };
164
+ }
165
+ // 按优先级检测浏览器
166
+ const browserTypes = [
167
+ BrowserType.Chrome,
168
+ BrowserType.Edge,
169
+ BrowserType.Chromium,
170
+ ];
171
+ for (const type of browserTypes) {
172
+ const browser = detectBrowserByType(type);
173
+ if (browser) {
174
+ return browser;
175
+ }
176
+ }
177
+ return null;
178
+ }
179
+ /**
180
+ * 检测所有已安装的浏览器
181
+ */
182
+ detectAll() {
183
+ const browsers = [];
184
+ // 检查自定义浏览器路径
185
+ const customPath = process.env.NND_BROWSER_PATH;
186
+ if (customPath && (0, fs_1.existsSync)(customPath)) {
187
+ const lowerPath = customPath.toLowerCase();
188
+ let type;
189
+ if (lowerPath.includes('chrome') && !lowerPath.includes('chromium')) {
190
+ type = BrowserType.Chrome;
191
+ }
192
+ else if (lowerPath.includes('edge') || lowerPath.includes('msedge')) {
193
+ type = BrowserType.Edge;
194
+ }
195
+ else {
196
+ type = BrowserType.Chromium;
197
+ }
198
+ browsers.push({
199
+ type,
200
+ path: customPath,
201
+ name: `${BROWSER_NAMES[type]} (自定义)`,
202
+ });
203
+ }
204
+ // 检测所有浏览器类型
205
+ const browserTypes = [
206
+ BrowserType.Chrome,
207
+ BrowserType.Edge,
208
+ BrowserType.Chromium,
209
+ ];
210
+ for (const type of browserTypes) {
211
+ const browser = detectBrowserByType(type);
212
+ if (browser) {
213
+ // 避免重复添加自定义路径的浏览器
214
+ if (!browsers.some(b => b.path === browser.path)) {
215
+ browsers.push(browser);
216
+ }
217
+ }
218
+ }
219
+ // 按优先级排序
220
+ browsers.sort((a, b) => BROWSER_PRIORITY[a.type] - BROWSER_PRIORITY[b.type]);
221
+ return browsers;
222
+ }
223
+ }
224
+ /**
225
+ * 浏览器检测器单例
226
+ */
227
+ let detectorInstance = null;
228
+ /**
229
+ * 获取浏览器检测器单例
230
+ */
231
+ function getBrowserDetector() {
232
+ if (!detectorInstance) {
233
+ detectorInstance = new BrowserDetector();
234
+ }
235
+ return detectorInstance;
236
+ }
237
+ /**
238
+ * 创建新的浏览器检测器实例
239
+ */
240
+ function createBrowserDetector() {
241
+ return new BrowserDetector();
242
+ }
243
+ /**
244
+ * 检测浏览器(便捷函数)
245
+ *
246
+ * 使用单例检测器检测系统已安装的浏览器
247
+ *
248
+ * @returns 浏览器信息,如果未检测到则返回 null
249
+ */
250
+ function detectBrowser() {
251
+ return getBrowserDetector().detect();
252
+ }
253
+ /**
254
+ * 检测所有浏览器(便捷函数)
255
+ *
256
+ * 使用单例检测器检测所有已安装的浏览器
257
+ *
258
+ * @returns 浏览器信息数组,按优先级排序
259
+ */
260
+ function detectAllBrowsers() {
261
+ return getBrowserDetector().detectAll();
262
+ }
263
+ //# sourceMappingURL=browser-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-detector.js","sourceRoot":"","sources":["../../../src/gui/browser-detector.ts"],"names":[],"mappings":"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"}