weixin-devtools-mcp 0.0.1 → 0.1.1
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.
- package/LICENSE +21 -0
- package/README.md +127 -128
- package/build/MiniProgramContext.d.ts +317 -0
- package/build/MiniProgramContext.d.ts.map +1 -0
- package/build/MiniProgramContext.js +696 -0
- package/build/MiniProgramContext.js.map +1 -0
- package/build/collectors/Collector.d.ts +127 -0
- package/build/collectors/Collector.d.ts.map +1 -0
- package/build/collectors/Collector.js +252 -0
- package/build/collectors/Collector.js.map +1 -0
- package/build/collectors/ConsoleCollector.d.ts +104 -0
- package/build/collectors/ConsoleCollector.d.ts.map +1 -0
- package/build/collectors/ConsoleCollector.js +157 -0
- package/build/collectors/ConsoleCollector.js.map +1 -0
- package/build/collectors/NetworkCollector.d.ts +167 -0
- package/build/collectors/NetworkCollector.d.ts.map +1 -0
- package/build/collectors/NetworkCollector.js +265 -0
- package/build/collectors/NetworkCollector.js.map +1 -0
- package/build/collectors/index.d.ts +13 -0
- package/build/collectors/index.d.ts.map +1 -0
- package/build/collectors/index.js +17 -0
- package/build/collectors/index.js.map +1 -0
- package/build/config/tool-profile.d.ts +30 -0
- package/build/config/tool-profile.d.ts.map +1 -0
- package/build/config/tool-profile.js +138 -0
- package/build/config/tool-profile.js.map +1 -0
- package/build/connection/adapters.d.ts +3 -0
- package/build/connection/adapters.d.ts.map +1 -0
- package/build/connection/adapters.js +134 -0
- package/build/connection/adapters.js.map +1 -0
- package/build/connection/errors.d.ts +34 -0
- package/build/connection/errors.d.ts.map +1 -0
- package/build/connection/errors.js +101 -0
- package/build/connection/errors.js.map +1 -0
- package/build/connection/health-probe.d.ts +4 -0
- package/build/connection/health-probe.d.ts.map +1 -0
- package/build/connection/health-probe.js +60 -0
- package/build/connection/health-probe.js.map +1 -0
- package/build/connection/index.d.ts +6 -0
- package/build/connection/index.d.ts.map +1 -0
- package/build/connection/index.js +6 -0
- package/build/connection/index.js.map +1 -0
- package/build/connection/manager.d.ts +19 -0
- package/build/connection/manager.d.ts.map +1 -0
- package/build/connection/manager.js +227 -0
- package/build/connection/manager.js.map +1 -0
- package/build/connection/resolver.d.ts +3 -0
- package/build/connection/resolver.d.ts.map +1 -0
- package/build/connection/resolver.js +99 -0
- package/build/connection/resolver.js.map +1 -0
- package/build/connection/types.d.ts +95 -0
- package/build/connection/types.d.ts.map +1 -0
- package/build/connection/types.js +16 -0
- package/build/connection/types.js.map +1 -0
- package/build/core/assertion.d.ts +22 -0
- package/build/core/assertion.d.ts.map +1 -0
- package/build/core/assertion.js +318 -0
- package/build/core/assertion.js.map +1 -0
- package/build/core/connection.d.ts +37 -0
- package/build/core/connection.d.ts.map +1 -0
- package/build/core/connection.js +745 -0
- package/build/core/connection.js.map +1 -0
- package/build/core/index.d.ts +13 -0
- package/build/core/index.d.ts.map +1 -0
- package/build/core/index.js +19 -0
- package/build/core/index.js.map +1 -0
- package/build/core/interaction.d.ts +22 -0
- package/build/core/interaction.d.ts.map +1 -0
- package/build/core/interaction.js +185 -0
- package/build/core/interaction.js.map +1 -0
- package/build/core/navigation.d.ts +26 -0
- package/build/core/navigation.d.ts.map +1 -0
- package/build/core/navigation.js +210 -0
- package/build/core/navigation.js.map +1 -0
- package/build/core/query.d.ts +14 -0
- package/build/core/query.d.ts.map +1 -0
- package/build/core/query.js +191 -0
- package/build/core/query.js.map +1 -0
- package/build/core/screenshot.d.ts +10 -0
- package/build/core/screenshot.d.ts.map +1 -0
- package/build/core/screenshot.js +93 -0
- package/build/core/screenshot.js.map +1 -0
- package/build/core/snapshot.d.ts +17 -0
- package/build/core/snapshot.d.ts.map +1 -0
- package/build/core/snapshot.js +225 -0
- package/build/core/snapshot.js.map +1 -0
- package/build/core/types.d.ts +250 -0
- package/build/core/types.d.ts.map +1 -0
- package/build/core/types.js +6 -0
- package/build/core/types.js.map +1 -0
- package/build/formatters/consoleFormatter.d.ts +50 -0
- package/build/formatters/consoleFormatter.d.ts.map +1 -0
- package/build/formatters/consoleFormatter.js +116 -0
- package/build/formatters/consoleFormatter.js.map +1 -0
- package/build/formatters/snapshotFormatter.d.ts +41 -0
- package/build/formatters/snapshotFormatter.d.ts.map +1 -0
- package/build/formatters/snapshotFormatter.js +156 -0
- package/build/formatters/snapshotFormatter.js.map +1 -0
- package/build/index.d.ts +11 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +45 -9
- package/build/index.js.map +1 -0
- package/build/server.d.ts +7 -0
- package/build/server.d.ts.map +1 -0
- package/build/server.js +88 -32
- package/build/server.js.map +1 -0
- package/build/tools/ToolDefinition.d.ts +265 -0
- package/build/tools/ToolDefinition.d.ts.map +1 -0
- package/build/tools/ToolDefinition.js +16 -7
- package/build/tools/ToolDefinition.js.map +1 -0
- package/build/tools/assert.d.ts +17 -0
- package/build/tools/assert.d.ts.map +1 -0
- package/build/tools/assert.js +63 -103
- package/build/tools/assert.js.map +1 -0
- package/build/tools/connection.d.ts +13 -0
- package/build/tools/connection.d.ts.map +1 -0
- package/build/tools/connection.js +338 -611
- package/build/tools/connection.js.map +1 -0
- package/build/tools/console.d.ts +20 -0
- package/build/tools/console.d.ts.map +1 -0
- package/build/tools/console.js +162 -152
- package/build/tools/console.js.map +1 -0
- package/build/tools/diagnose.d.ts +22 -0
- package/build/tools/diagnose.d.ts.map +1 -0
- package/build/tools/diagnose.js +406 -13
- package/build/tools/diagnose.js.map +1 -0
- package/build/tools/index.d.ts +6 -0
- package/build/tools/index.d.ts.map +1 -0
- package/build/tools/index.js +3 -77
- package/build/tools/index.js.map +1 -0
- package/build/tools/input.d.ts +21 -0
- package/build/tools/input.d.ts.map +1 -0
- package/build/tools/input.js +73 -139
- package/build/tools/input.js.map +1 -0
- package/build/tools/navigate.d.ts +21 -0
- package/build/tools/navigate.d.ts.map +1 -0
- package/build/tools/navigate.js +63 -126
- package/build/tools/navigate.js.map +1 -0
- package/build/tools/network.d.ts +21 -0
- package/build/tools/network.d.ts.map +1 -0
- package/build/tools/network.js +214 -1044
- package/build/tools/network.js.map +1 -0
- package/build/tools/page.d.ts +13 -0
- package/build/tools/page.d.ts.map +1 -0
- package/build/tools/page.js +6 -3
- package/build/tools/page.js.map +1 -0
- package/build/tools/screenshot.d.ts +9 -0
- package/build/tools/screenshot.d.ts.map +1 -0
- package/build/tools/screenshot.js +3 -1
- package/build/tools/screenshot.js.map +1 -0
- package/build/tools/script.d.ts +6 -0
- package/build/tools/script.d.ts.map +1 -0
- package/build/tools/script.js +92 -0
- package/build/tools/script.js.map +1 -0
- package/build/tools/snapshot.d.ts +9 -0
- package/build/tools/snapshot.d.ts.map +1 -0
- package/build/tools/snapshot.js +78 -12
- package/build/tools/snapshot.js.map +1 -0
- package/build/tools/tools.d.ts +15 -0
- package/build/tools/tools.d.ts.map +1 -0
- package/build/tools/tools.js +63 -0
- package/build/tools/tools.js.map +1 -0
- package/build/tools.d.ts +431 -0
- package/build/tools.d.ts.map +1 -0
- package/build/tools.js +258 -118
- package/build/tools.js.map +1 -0
- package/build/types/errors.d.ts +189 -0
- package/build/types/errors.d.ts.map +1 -0
- package/build/types/errors.js +257 -0
- package/build/types/errors.js.map +1 -0
- package/build/utils/error.d.ts +6 -0
- package/build/utils/error.d.ts.map +1 -0
- package/build/utils/error.js +11 -0
- package/build/utils/error.js.map +1 -0
- package/build/utils/idGenerator.d.ts +21 -0
- package/build/utils/idGenerator.d.ts.map +1 -0
- package/build/utils/idGenerator.js +23 -0
- package/build/utils/idGenerator.js.map +1 -0
- package/build/version.d.ts +7 -0
- package/build/version.d.ts.map +1 -0
- package/build/version.js +10 -0
- package/build/version.js.map +1 -0
- package/package.json +31 -9
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ConsoleCollector - Console 消息收集器
|
|
3
|
+
*
|
|
4
|
+
* 专门用于收集和管理 Console 消息和异常
|
|
5
|
+
* 继承自通用 Collector 基类
|
|
6
|
+
*/
|
|
7
|
+
import { Collector } from './Collector.js';
|
|
8
|
+
/**
|
|
9
|
+
* 检查是否为 ConsoleMessage
|
|
10
|
+
*/
|
|
11
|
+
export function isConsoleMessage(entry) {
|
|
12
|
+
return 'type' in entry;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* 检查是否为 ExceptionMessage
|
|
16
|
+
*/
|
|
17
|
+
export function isExceptionMessage(entry) {
|
|
18
|
+
return !('type' in entry) && 'message' in entry;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Console 消息收集器
|
|
22
|
+
*/
|
|
23
|
+
export class ConsoleCollector extends Collector {
|
|
24
|
+
constructor(options) {
|
|
25
|
+
super(options);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* 添加 Console 消息
|
|
29
|
+
* @returns 分配的 msgid
|
|
30
|
+
*/
|
|
31
|
+
addMessage(message) {
|
|
32
|
+
const id = this.collect(message);
|
|
33
|
+
// 同步 msgid 到消息对象
|
|
34
|
+
const storedMessage = this.getById(id);
|
|
35
|
+
if (storedMessage) {
|
|
36
|
+
storedMessage.msgid = id;
|
|
37
|
+
}
|
|
38
|
+
return id;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* 添加异常信息
|
|
42
|
+
* @returns 分配的 msgid
|
|
43
|
+
*/
|
|
44
|
+
addException(exception) {
|
|
45
|
+
const id = this.collect(exception);
|
|
46
|
+
// 同步 msgid 到异常对象
|
|
47
|
+
const storedException = this.getById(id);
|
|
48
|
+
if (storedException) {
|
|
49
|
+
storedException.msgid = id;
|
|
50
|
+
}
|
|
51
|
+
return id;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* 通过 msgid 获取消息
|
|
55
|
+
*/
|
|
56
|
+
getMessageById(msgid) {
|
|
57
|
+
return this.getById(msgid);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* 获取 Console 消息(支持类型过滤)
|
|
61
|
+
*/
|
|
62
|
+
getMessages(options = {}) {
|
|
63
|
+
const { types, ...baseOptions } = options;
|
|
64
|
+
// 构建过滤函数
|
|
65
|
+
let filter = baseOptions.filter;
|
|
66
|
+
if (types && types.length > 0) {
|
|
67
|
+
const typeSet = new Set(types);
|
|
68
|
+
const originalFilter = filter;
|
|
69
|
+
filter = (entry) => {
|
|
70
|
+
// 类型过滤
|
|
71
|
+
const typeMatch = isConsoleMessage(entry)
|
|
72
|
+
? typeSet.has(entry.type)
|
|
73
|
+
: typeSet.has('error'); // ExceptionMessage 视为 error 类型
|
|
74
|
+
// 如果有原始过滤器,还需要满足原始过滤条件
|
|
75
|
+
if (originalFilter) {
|
|
76
|
+
return typeMatch && originalFilter(entry);
|
|
77
|
+
}
|
|
78
|
+
return typeMatch;
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
return this.getData({ ...baseOptions, filter });
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* 只获取 Console 消息(不包括异常)
|
|
85
|
+
*/
|
|
86
|
+
getConsoleMessagesOnly(options = {}) {
|
|
87
|
+
const entries = this.getMessages(options);
|
|
88
|
+
return entries.filter(isConsoleMessage);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* 只获取异常信息
|
|
92
|
+
*/
|
|
93
|
+
getExceptionsOnly(options = {}) {
|
|
94
|
+
const entries = this.getData(options);
|
|
95
|
+
return entries.filter(isExceptionMessage);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* 获取错误数量(包括 error 类型消息和异常)
|
|
99
|
+
*/
|
|
100
|
+
getErrorCount() {
|
|
101
|
+
let count = 0;
|
|
102
|
+
const entries = this.getData({ includePreserved: false });
|
|
103
|
+
for (const entry of entries) {
|
|
104
|
+
if (isExceptionMessage(entry) || (isConsoleMessage(entry) && entry.type === 'error')) {
|
|
105
|
+
count++;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return count;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* 获取警告数量
|
|
112
|
+
*/
|
|
113
|
+
getWarningCount() {
|
|
114
|
+
let count = 0;
|
|
115
|
+
const entries = this.getData({ includePreserved: false });
|
|
116
|
+
for (const entry of entries) {
|
|
117
|
+
if (isConsoleMessage(entry) && entry.type === 'warn') {
|
|
118
|
+
count++;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return count;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* 格式化消息预览(用于列表显示)
|
|
125
|
+
*/
|
|
126
|
+
formatPreview(entry, maxLength = 100) {
|
|
127
|
+
let text;
|
|
128
|
+
if (isConsoleMessage(entry)) {
|
|
129
|
+
if (entry.message) {
|
|
130
|
+
text = entry.message;
|
|
131
|
+
}
|
|
132
|
+
else if (entry.args.length > 0) {
|
|
133
|
+
text = entry.args
|
|
134
|
+
.map(arg => {
|
|
135
|
+
if (typeof arg === 'string')
|
|
136
|
+
return arg;
|
|
137
|
+
if (typeof arg === 'object')
|
|
138
|
+
return JSON.stringify(arg);
|
|
139
|
+
return String(arg);
|
|
140
|
+
})
|
|
141
|
+
.join(' ');
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
text = '';
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
text = entry.message;
|
|
149
|
+
}
|
|
150
|
+
// 截断长文本
|
|
151
|
+
if (text.length > maxLength) {
|
|
152
|
+
return text.slice(0, maxLength) + '...';
|
|
153
|
+
}
|
|
154
|
+
return text;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=ConsoleCollector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConsoleCollector.js","sourceRoot":"","sources":["../../src/collectors/ConsoleCollector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NetworkCollector - 网络请求收集器
|
|
3
|
+
*
|
|
4
|
+
* 专门用于收集和管理网络请求
|
|
5
|
+
* 继承自通用 Collector 基类
|
|
6
|
+
*/
|
|
7
|
+
import { Collector, type CollectorOptions, type QueryOptions } from './Collector.js';
|
|
8
|
+
/**
|
|
9
|
+
* 网络请求类型
|
|
10
|
+
*/
|
|
11
|
+
export type NetworkRequestType = 'request' | 'uploadFile' | 'downloadFile';
|
|
12
|
+
/**
|
|
13
|
+
* 网络请求信息接口
|
|
14
|
+
*/
|
|
15
|
+
export interface NetworkRequest {
|
|
16
|
+
/** 请求 ID(由应用层分配) */
|
|
17
|
+
id: string;
|
|
18
|
+
/** 请求类型 */
|
|
19
|
+
type: NetworkRequestType;
|
|
20
|
+
/** 请求 URL */
|
|
21
|
+
url: string;
|
|
22
|
+
/** HTTP 方法 */
|
|
23
|
+
method?: string;
|
|
24
|
+
/** 请求头 */
|
|
25
|
+
headers?: Record<string, string>;
|
|
26
|
+
/** 请求体数据 */
|
|
27
|
+
data?: unknown;
|
|
28
|
+
/** 查询参数(Mpx 框架等) */
|
|
29
|
+
params?: Record<string, unknown>;
|
|
30
|
+
/** 响应状态码 */
|
|
31
|
+
statusCode?: number;
|
|
32
|
+
/** 响应数据 */
|
|
33
|
+
response?: unknown;
|
|
34
|
+
/** 响应头 */
|
|
35
|
+
responseHeaders?: Record<string, string>;
|
|
36
|
+
/** 错误信息 */
|
|
37
|
+
error?: string;
|
|
38
|
+
/** 请求耗时(毫秒) */
|
|
39
|
+
duration?: number;
|
|
40
|
+
/** 请求开始时间 */
|
|
41
|
+
timestamp: string;
|
|
42
|
+
/** 请求完成时间 */
|
|
43
|
+
completedAt?: string;
|
|
44
|
+
/** 是否成功 */
|
|
45
|
+
success: boolean;
|
|
46
|
+
/** 是否等待响应中 */
|
|
47
|
+
pending?: boolean;
|
|
48
|
+
/** 请求来源 */
|
|
49
|
+
source?: string;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* 网络请求查询选项
|
|
53
|
+
*/
|
|
54
|
+
export interface NetworkQueryOptions extends QueryOptions<NetworkRequest> {
|
|
55
|
+
/** 请求类型过滤 */
|
|
56
|
+
type?: NetworkRequestType | 'all';
|
|
57
|
+
/** URL 匹配模式(正则表达式) */
|
|
58
|
+
urlPattern?: string;
|
|
59
|
+
/** 仅返回成功的请求 */
|
|
60
|
+
successOnly?: boolean;
|
|
61
|
+
/** 仅返回失败的请求 */
|
|
62
|
+
failedOnly?: boolean;
|
|
63
|
+
/** 仅返回已完成的请求 */
|
|
64
|
+
completedOnly?: boolean;
|
|
65
|
+
/** 指定时间之后的请求(ISO 8601 格式) */
|
|
66
|
+
since?: string;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* wx 网络方法类型(用于存储原始方法以便恢复)
|
|
70
|
+
*/
|
|
71
|
+
export type WxNetworkMethod = ((options: Record<string, unknown>) => unknown) | undefined;
|
|
72
|
+
/**
|
|
73
|
+
* 原始方法存储
|
|
74
|
+
*/
|
|
75
|
+
export interface OriginalMethods {
|
|
76
|
+
request?: WxNetworkMethod;
|
|
77
|
+
uploadFile?: WxNetworkMethod;
|
|
78
|
+
downloadFile?: WxNetworkMethod;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* 网络请求收集器
|
|
82
|
+
*/
|
|
83
|
+
export declare class NetworkCollector extends Collector<NetworkRequest> {
|
|
84
|
+
#private;
|
|
85
|
+
constructor(options?: CollectorOptions);
|
|
86
|
+
/**
|
|
87
|
+
* 设置 MiniProgram 引用(用于远程同步)
|
|
88
|
+
*/
|
|
89
|
+
setMiniProgram(miniProgram: {
|
|
90
|
+
evaluate: (fn: () => unknown) => Promise<unknown>;
|
|
91
|
+
} | null): void;
|
|
92
|
+
/**
|
|
93
|
+
* 从远程同步数据(带节流)
|
|
94
|
+
* @param force 是否强制同步(跳过节流)
|
|
95
|
+
* @returns 同步的请求数量
|
|
96
|
+
*/
|
|
97
|
+
syncFromRemote(force?: boolean): Promise<number>;
|
|
98
|
+
/**
|
|
99
|
+
* 设置同步间隔
|
|
100
|
+
*/
|
|
101
|
+
setSyncInterval(intervalMs: number): void;
|
|
102
|
+
/**
|
|
103
|
+
* 设置原始方法(用于恢复)
|
|
104
|
+
*/
|
|
105
|
+
setOriginalMethods(methods: OriginalMethods): void;
|
|
106
|
+
/**
|
|
107
|
+
* 获取原始方法
|
|
108
|
+
*/
|
|
109
|
+
getOriginalMethods(): OriginalMethods;
|
|
110
|
+
/**
|
|
111
|
+
* 清除原始方法引用
|
|
112
|
+
*/
|
|
113
|
+
clearOriginalMethods(): void;
|
|
114
|
+
/**
|
|
115
|
+
* 添加网络请求
|
|
116
|
+
* @returns Stable ID
|
|
117
|
+
*/
|
|
118
|
+
addRequest(request: NetworkRequest): number;
|
|
119
|
+
/**
|
|
120
|
+
* 更新请求状态(当响应到达时)
|
|
121
|
+
*/
|
|
122
|
+
updateRequest(id: string, updates: Partial<Pick<NetworkRequest, 'statusCode' | 'response' | 'responseHeaders' | 'error' | 'duration' | 'completedAt' | 'success' | 'pending'>>): boolean;
|
|
123
|
+
/**
|
|
124
|
+
* 标记请求完成
|
|
125
|
+
*/
|
|
126
|
+
completeRequest(id: string, response: {
|
|
127
|
+
statusCode?: number;
|
|
128
|
+
data?: unknown;
|
|
129
|
+
headers?: Record<string, string>;
|
|
130
|
+
error?: string;
|
|
131
|
+
}): boolean;
|
|
132
|
+
/**
|
|
133
|
+
* 获取网络请求(支持多种过滤条件)
|
|
134
|
+
*/
|
|
135
|
+
getRequests(options?: NetworkQueryOptions): NetworkRequest[];
|
|
136
|
+
/**
|
|
137
|
+
* 通过请求 ID 获取请求
|
|
138
|
+
*/
|
|
139
|
+
getRequestById(id: string): NetworkRequest | undefined;
|
|
140
|
+
/**
|
|
141
|
+
* 获取待处理的请求
|
|
142
|
+
*/
|
|
143
|
+
getPendingRequests(): NetworkRequest[];
|
|
144
|
+
/**
|
|
145
|
+
* 获取失败的请求
|
|
146
|
+
*/
|
|
147
|
+
getFailedRequests(): NetworkRequest[];
|
|
148
|
+
/**
|
|
149
|
+
* 获取请求统计
|
|
150
|
+
*/
|
|
151
|
+
getStats(): {
|
|
152
|
+
total: number;
|
|
153
|
+
pending: number;
|
|
154
|
+
success: number;
|
|
155
|
+
failed: number;
|
|
156
|
+
byType: Record<NetworkRequestType, number>;
|
|
157
|
+
};
|
|
158
|
+
/**
|
|
159
|
+
* 获取平均响应时间(毫秒)
|
|
160
|
+
*/
|
|
161
|
+
getAverageResponseTime(): number;
|
|
162
|
+
/**
|
|
163
|
+
* 完全重置(包括原始方法引用)
|
|
164
|
+
*/
|
|
165
|
+
reset(): void;
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=NetworkCollector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NetworkCollector.d.ts","sourceRoot":"","sources":["../../src/collectors/NetworkCollector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NetworkCollector - 网络请求收集器
|
|
3
|
+
*
|
|
4
|
+
* 专门用于收集和管理网络请求
|
|
5
|
+
* 继承自通用 Collector 基类
|
|
6
|
+
*/
|
|
7
|
+
import { Collector } from './Collector.js';
|
|
8
|
+
/**
|
|
9
|
+
* 网络请求收集器
|
|
10
|
+
*/
|
|
11
|
+
export class NetworkCollector extends Collector {
|
|
12
|
+
/** 存储原始的 wx 网络方法 */
|
|
13
|
+
#originalMethods = {};
|
|
14
|
+
/** 上次同步时间戳 */
|
|
15
|
+
#lastSyncTimestamp = 0;
|
|
16
|
+
/** 同步间隔(毫秒) */
|
|
17
|
+
#syncIntervalMs = 5000;
|
|
18
|
+
/** MiniProgram 引用(用于同步) */
|
|
19
|
+
#miniProgram = null;
|
|
20
|
+
constructor(options) {
|
|
21
|
+
super(options);
|
|
22
|
+
}
|
|
23
|
+
// ============ MiniProgram 引用管理 ============
|
|
24
|
+
/**
|
|
25
|
+
* 设置 MiniProgram 引用(用于远程同步)
|
|
26
|
+
*/
|
|
27
|
+
setMiniProgram(miniProgram) {
|
|
28
|
+
this.#miniProgram = miniProgram;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* 从远程同步数据(带节流)
|
|
32
|
+
* @param force 是否强制同步(跳过节流)
|
|
33
|
+
* @returns 同步的请求数量
|
|
34
|
+
*/
|
|
35
|
+
async syncFromRemote(force = false) {
|
|
36
|
+
const now = Date.now();
|
|
37
|
+
// 节流:非强制且未到同步时间
|
|
38
|
+
if (!force && now - this.#lastSyncTimestamp < this.#syncIntervalMs) {
|
|
39
|
+
return 0;
|
|
40
|
+
}
|
|
41
|
+
if (!this.#miniProgram) {
|
|
42
|
+
return 0;
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
// 从小程序环境拉取并清空远程日志
|
|
46
|
+
const remoteLogs = await this.#miniProgram.evaluate(function () {
|
|
47
|
+
// @ts-ignore
|
|
48
|
+
const wxObj = typeof wx !== 'undefined' ? wx : null;
|
|
49
|
+
if (!wxObj || !wxObj.__networkLogs)
|
|
50
|
+
return [];
|
|
51
|
+
// 返回并清空(避免重复处理)
|
|
52
|
+
// @ts-ignore
|
|
53
|
+
const logs = [...wxObj.__networkLogs];
|
|
54
|
+
// @ts-ignore
|
|
55
|
+
wxObj.__networkLogs = [];
|
|
56
|
+
return logs;
|
|
57
|
+
});
|
|
58
|
+
this.#lastSyncTimestamp = now;
|
|
59
|
+
// 批量添加到本地存储
|
|
60
|
+
let addedCount = 0;
|
|
61
|
+
for (const log of remoteLogs) {
|
|
62
|
+
if (log && typeof log === 'object' && log.url) {
|
|
63
|
+
this.addRequest(log);
|
|
64
|
+
addedCount++;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return addedCount;
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
console.warn('[NetworkCollector] 同步失败:', error);
|
|
71
|
+
return 0;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* 设置同步间隔
|
|
76
|
+
*/
|
|
77
|
+
setSyncInterval(intervalMs) {
|
|
78
|
+
this.#syncIntervalMs = Math.max(1000, intervalMs); // 最少 1 秒
|
|
79
|
+
}
|
|
80
|
+
// ============ 原始方法管理 ============
|
|
81
|
+
/**
|
|
82
|
+
* 设置原始方法(用于恢复)
|
|
83
|
+
*/
|
|
84
|
+
setOriginalMethods(methods) {
|
|
85
|
+
this.#originalMethods = { ...methods };
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* 获取原始方法
|
|
89
|
+
*/
|
|
90
|
+
getOriginalMethods() {
|
|
91
|
+
return { ...this.#originalMethods };
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* 清除原始方法引用
|
|
95
|
+
*/
|
|
96
|
+
clearOriginalMethods() {
|
|
97
|
+
this.#originalMethods = {};
|
|
98
|
+
}
|
|
99
|
+
// ============ 请求收集 ============
|
|
100
|
+
/**
|
|
101
|
+
* 添加网络请求
|
|
102
|
+
* @returns Stable ID
|
|
103
|
+
*/
|
|
104
|
+
addRequest(request) {
|
|
105
|
+
return this.collect(request);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* 更新请求状态(当响应到达时)
|
|
109
|
+
*/
|
|
110
|
+
updateRequest(id, updates) {
|
|
111
|
+
const request = this.find(req => req.id === id);
|
|
112
|
+
if (request) {
|
|
113
|
+
Object.assign(request, updates);
|
|
114
|
+
return true;
|
|
115
|
+
}
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* 标记请求完成
|
|
120
|
+
*/
|
|
121
|
+
completeRequest(id, response) {
|
|
122
|
+
const request = this.find(req => req.id === id);
|
|
123
|
+
if (!request) {
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
const now = new Date().toISOString();
|
|
127
|
+
const startTime = new Date(request.timestamp).getTime();
|
|
128
|
+
const endTime = new Date(now).getTime();
|
|
129
|
+
request.statusCode = response.statusCode;
|
|
130
|
+
request.response = response.data;
|
|
131
|
+
request.responseHeaders = response.headers;
|
|
132
|
+
request.error = response.error;
|
|
133
|
+
request.duration = endTime - startTime;
|
|
134
|
+
request.completedAt = now;
|
|
135
|
+
request.success = !response.error && (response.statusCode === undefined || (response.statusCode >= 200 && response.statusCode < 400));
|
|
136
|
+
request.pending = false;
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
// ============ 请求查询 ============
|
|
140
|
+
/**
|
|
141
|
+
* 获取网络请求(支持多种过滤条件)
|
|
142
|
+
*/
|
|
143
|
+
getRequests(options = {}) {
|
|
144
|
+
const { type = 'all', urlPattern, successOnly, failedOnly, completedOnly, since, ...baseOptions } = options;
|
|
145
|
+
// 构建复合过滤函数
|
|
146
|
+
const originalFilter = baseOptions.filter;
|
|
147
|
+
const filter = (request) => {
|
|
148
|
+
// 类型过滤
|
|
149
|
+
if (type !== 'all' && request.type !== type) {
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
// URL 模式过滤
|
|
153
|
+
if (urlPattern) {
|
|
154
|
+
try {
|
|
155
|
+
const regex = new RegExp(urlPattern);
|
|
156
|
+
if (!regex.test(request.url)) {
|
|
157
|
+
return false;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
// 正则表达式无效,作为普通字符串匹配
|
|
162
|
+
if (!request.url.includes(urlPattern)) {
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
// 成功/失败过滤
|
|
168
|
+
if (successOnly && !request.success) {
|
|
169
|
+
return false;
|
|
170
|
+
}
|
|
171
|
+
if (failedOnly && request.success) {
|
|
172
|
+
return false;
|
|
173
|
+
}
|
|
174
|
+
// 完成状态过滤
|
|
175
|
+
if (completedOnly && request.pending) {
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
// 时间过滤
|
|
179
|
+
if (since) {
|
|
180
|
+
const sinceTime = new Date(since).getTime();
|
|
181
|
+
const requestTime = new Date(request.timestamp).getTime();
|
|
182
|
+
if (requestTime < sinceTime) {
|
|
183
|
+
return false;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
// 应用原始过滤器
|
|
187
|
+
if (originalFilter && !originalFilter(request)) {
|
|
188
|
+
return false;
|
|
189
|
+
}
|
|
190
|
+
return true;
|
|
191
|
+
};
|
|
192
|
+
return this.getData({ ...baseOptions, filter });
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* 通过请求 ID 获取请求
|
|
196
|
+
*/
|
|
197
|
+
getRequestById(id) {
|
|
198
|
+
return this.find(req => req.id === id);
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* 获取待处理的请求
|
|
202
|
+
*/
|
|
203
|
+
getPendingRequests() {
|
|
204
|
+
return this.findAll(req => req.pending === true);
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* 获取失败的请求
|
|
208
|
+
*/
|
|
209
|
+
getFailedRequests() {
|
|
210
|
+
return this.findAll(req => !req.success && !req.pending);
|
|
211
|
+
}
|
|
212
|
+
// ============ 统计信息 ============
|
|
213
|
+
/**
|
|
214
|
+
* 获取请求统计
|
|
215
|
+
*/
|
|
216
|
+
getStats() {
|
|
217
|
+
const requests = this.getData({ includePreserved: false });
|
|
218
|
+
const stats = {
|
|
219
|
+
total: requests.length,
|
|
220
|
+
pending: 0,
|
|
221
|
+
success: 0,
|
|
222
|
+
failed: 0,
|
|
223
|
+
byType: {
|
|
224
|
+
request: 0,
|
|
225
|
+
uploadFile: 0,
|
|
226
|
+
downloadFile: 0,
|
|
227
|
+
},
|
|
228
|
+
};
|
|
229
|
+
for (const request of requests) {
|
|
230
|
+
stats.byType[request.type]++;
|
|
231
|
+
if (request.pending) {
|
|
232
|
+
stats.pending++;
|
|
233
|
+
}
|
|
234
|
+
else if (request.success) {
|
|
235
|
+
stats.success++;
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
stats.failed++;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
return stats;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* 获取平均响应时间(毫秒)
|
|
245
|
+
*/
|
|
246
|
+
getAverageResponseTime() {
|
|
247
|
+
const requests = this.getData({ includePreserved: false });
|
|
248
|
+
const completedRequests = requests.filter(req => req.duration !== undefined);
|
|
249
|
+
if (completedRequests.length === 0) {
|
|
250
|
+
return 0;
|
|
251
|
+
}
|
|
252
|
+
const totalTime = completedRequests.reduce((sum, req) => sum + (req.duration ?? 0), 0);
|
|
253
|
+
return Math.round(totalTime / completedRequests.length);
|
|
254
|
+
}
|
|
255
|
+
// ============ 重置 ============
|
|
256
|
+
/**
|
|
257
|
+
* 完全重置(包括原始方法引用)
|
|
258
|
+
*/
|
|
259
|
+
reset() {
|
|
260
|
+
this.clear();
|
|
261
|
+
this.clearOriginalMethods();
|
|
262
|
+
this.stopMonitoring();
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
//# sourceMappingURL=NetworkCollector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NetworkCollector.js","sourceRoot":"","sources":["../../src/collectors/NetworkCollector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collectors 模块导出
|
|
3
|
+
*
|
|
4
|
+
* 提供通用的数据收集器模式:
|
|
5
|
+
* - Collector: 通用基类
|
|
6
|
+
* - ConsoleCollector: Console 消息收集
|
|
7
|
+
* - NetworkCollector: 网络请求收集
|
|
8
|
+
*/
|
|
9
|
+
export { Collector, type CollectorOptions, type NavigationSession, type QueryOptions, } from './Collector.js';
|
|
10
|
+
export { ConsoleCollector, type ConsoleMessage, type ExceptionMessage, type ConsoleEntry, type ConsoleQueryOptions, isConsoleMessage, isExceptionMessage, } from './ConsoleCollector.js';
|
|
11
|
+
export { NetworkCollector, type NetworkRequest, type NetworkRequestType, type NetworkQueryOptions, type WxNetworkMethod, type OriginalMethods, } from './NetworkCollector.js';
|
|
12
|
+
export { createIdGenerator, stableIdSymbol, type WithStableId, } from '../utils/idGenerator.js';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/collectors/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EACL,SAAS,EACT,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,YAAY,GAClB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,gBAAgB,EAChB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,gBAAgB,EAChB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,eAAe,GACrB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,KAAK,YAAY,GAClB,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collectors 模块导出
|
|
3
|
+
*
|
|
4
|
+
* 提供通用的数据收集器模式:
|
|
5
|
+
* - Collector: 通用基类
|
|
6
|
+
* - ConsoleCollector: Console 消息收集
|
|
7
|
+
* - NetworkCollector: 网络请求收集
|
|
8
|
+
*/
|
|
9
|
+
// 基类和通用类型
|
|
10
|
+
export { Collector, } from './Collector.js';
|
|
11
|
+
// Console 收集器
|
|
12
|
+
export { ConsoleCollector, isConsoleMessage, isExceptionMessage, } from './ConsoleCollector.js';
|
|
13
|
+
// Network 收集器
|
|
14
|
+
export { NetworkCollector, } from './NetworkCollector.js';
|
|
15
|
+
// ID 工具(重新导出)
|
|
16
|
+
export { createIdGenerator, stableIdSymbol, } from '../utils/idGenerator.js';
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/collectors/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,UAAU;AACV,OAAO,EACL,SAAS,GAIV,MAAM,gBAAgB,CAAC;AAExB,cAAc;AACd,OAAO,EACL,gBAAgB,EAKhB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAE/B,cAAc;AACd,OAAO,EACL,gBAAgB,GAMjB,MAAM,uBAAuB,CAAC;AAE/B,cAAc;AACd,OAAO,EACL,iBAAiB,EACjB,cAAc,GAEf,MAAM,yBAAyB,CAAC"}
|