@lytjs/devtools 4.0.5 → 4.2.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.
- package/README.md +153 -0
- package/dist/index.cjs +5 -5
- package/dist/index.mjs +4 -4
- package/dist/types/batch-analyzer.d.ts +150 -0
- package/dist/types/batch-analyzer.d.ts.map +1 -0
- package/dist/types/component-profiler.d.ts +144 -0
- package/dist/types/component-profiler.d.ts.map +1 -0
- package/dist/types/component-tree.d.ts +69 -0
- package/dist/types/component-tree.d.ts.map +1 -0
- package/dist/types/event-panel.d.ts +129 -0
- package/dist/types/event-panel.d.ts.map +1 -0
- package/dist/types/event-tracker.d.ts +80 -0
- package/dist/types/event-tracker.d.ts.map +1 -0
- package/dist/types/hooks.d.ts +177 -0
- package/dist/types/hooks.d.ts.map +1 -0
- package/dist/types/index.d.ts +185 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/memory-tracker.d.ts +148 -0
- package/dist/types/memory-tracker.d.ts.map +1 -0
- package/dist/types/panel.d.ts +182 -0
- package/dist/types/panel.d.ts.map +1 -0
- package/dist/types/perf-collector.d.ts +328 -0
- package/dist/types/perf-collector.d.ts.map +1 -0
- package/dist/types/perf-panel.d.ts +231 -0
- package/dist/types/perf-panel.d.ts.map +1 -0
- package/dist/types/render-tracker.d.ts +147 -0
- package/dist/types/render-tracker.d.ts.map +1 -0
- package/dist/types/route-panel.d.ts +68 -0
- package/dist/types/route-panel.d.ts.map +1 -0
- package/dist/types/router-panel-enhanced.d.ts +118 -0
- package/dist/types/router-panel-enhanced.d.ts.map +1 -0
- package/dist/types/state-inspector.d.ts +80 -0
- package/dist/types/state-inspector.d.ts.map +1 -0
- package/dist/types/time-travel.d.ts +189 -0
- package/dist/types/time-travel.d.ts.map +1 -0
- package/dist/types/virtual-tree.d.ts +168 -0
- package/dist/types/virtual-tree.d.ts.map +1 -0
- package/package.json +5 -3
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lyt.js DevTools — 应用连接钩子
|
|
3
|
+
*
|
|
4
|
+
* 负责将 DevTools 连接到 Lyt.js 应用实例,拦截组件生命周期、
|
|
5
|
+
* 状态变化和事件发射,并将数据推送到 DevTools 面板。
|
|
6
|
+
*
|
|
7
|
+
* 核心功能:
|
|
8
|
+
* - connectToApp(app) 连接到 Lyt 应用实例
|
|
9
|
+
* - 拦截组件创建/更新/卸载生命周期
|
|
10
|
+
* - 拦截状态变化
|
|
11
|
+
* - 拦截事件发射
|
|
12
|
+
* - 将数据推送到 DevTools 面板
|
|
13
|
+
*
|
|
14
|
+
* 纯原生零依赖实现。
|
|
15
|
+
*/
|
|
16
|
+
/** 组件信息(DevTools 内部使用) */
|
|
17
|
+
export interface ComponentInfo {
|
|
18
|
+
/** 唯一标识 */
|
|
19
|
+
id: string;
|
|
20
|
+
/** 组件名称 */
|
|
21
|
+
name: string;
|
|
22
|
+
/** 父组件 ID */
|
|
23
|
+
parentId: string | null;
|
|
24
|
+
/** 子组件 ID 列表 */
|
|
25
|
+
childIds: string[];
|
|
26
|
+
/** 组件 props */
|
|
27
|
+
props: Record<string, any>;
|
|
28
|
+
/** 组件 state */
|
|
29
|
+
state: Record<string, any>;
|
|
30
|
+
/** 计算属性缓存 */
|
|
31
|
+
computed: Record<string, any>;
|
|
32
|
+
/** 是否已挂载 */
|
|
33
|
+
isMounted: boolean;
|
|
34
|
+
/** 是否已卸载 */
|
|
35
|
+
isUnmounted: boolean;
|
|
36
|
+
/** 对应的 DOM 元素 */
|
|
37
|
+
el: Element | null;
|
|
38
|
+
/** 渲染耗时(毫秒) */
|
|
39
|
+
renderTime: number;
|
|
40
|
+
/** 最后更新时间 */
|
|
41
|
+
lastUpdateTime: number;
|
|
42
|
+
/** 组件实例引用 */
|
|
43
|
+
instance: any;
|
|
44
|
+
}
|
|
45
|
+
/** 事件记录 */
|
|
46
|
+
export interface EventRecord {
|
|
47
|
+
/** 事件唯一 ID */
|
|
48
|
+
id: string;
|
|
49
|
+
/** 事件名称 */
|
|
50
|
+
name: string;
|
|
51
|
+
/** 触发时间戳 */
|
|
52
|
+
timestamp: number;
|
|
53
|
+
/** 事件参数 */
|
|
54
|
+
args: any[];
|
|
55
|
+
/** 来源组件 ID */
|
|
56
|
+
componentId: string;
|
|
57
|
+
/** 来源组件名称 */
|
|
58
|
+
componentName: string;
|
|
59
|
+
}
|
|
60
|
+
/** 状态变化记录 */
|
|
61
|
+
export interface StateChangeRecord {
|
|
62
|
+
/** 组件 ID */
|
|
63
|
+
componentId: string;
|
|
64
|
+
/** 组件名称 */
|
|
65
|
+
componentName: string;
|
|
66
|
+
/** 属性路径 */
|
|
67
|
+
path: string;
|
|
68
|
+
/** 旧值 */
|
|
69
|
+
oldValue: any;
|
|
70
|
+
/** 新值 */
|
|
71
|
+
newValue: any;
|
|
72
|
+
/** 变化时间戳 */
|
|
73
|
+
timestamp: number;
|
|
74
|
+
}
|
|
75
|
+
/** DevTools 钩子回调接口 */
|
|
76
|
+
export interface DevToolsCallbacks {
|
|
77
|
+
/** 组件创建回调 */
|
|
78
|
+
onComponentCreated?: (info: ComponentInfo) => void;
|
|
79
|
+
/** 组件更新回调 */
|
|
80
|
+
onComponentUpdated?: (info: ComponentInfo) => void;
|
|
81
|
+
/** 组件卸载回调 */
|
|
82
|
+
onComponentUnmounted?: (componentId: string) => void;
|
|
83
|
+
/** 状态变化回调 */
|
|
84
|
+
onStateChanged?: (record: StateChangeRecord) => void;
|
|
85
|
+
/** 事件触发回调 */
|
|
86
|
+
onEventEmitted?: (record: EventRecord) => void;
|
|
87
|
+
}
|
|
88
|
+
/** Lyt 应用实例接口(最小化) */
|
|
89
|
+
export interface LytApp {
|
|
90
|
+
/** 根组件实例 */
|
|
91
|
+
_instance: any;
|
|
92
|
+
/** 挂载方法 */
|
|
93
|
+
mount: (container: string | Element) => any;
|
|
94
|
+
/** 卸载方法 */
|
|
95
|
+
unmount: () => void;
|
|
96
|
+
/** 全局属性 */
|
|
97
|
+
globalProperties?: Record<string, any>;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* 连接到 Lyt.js 应用实例
|
|
101
|
+
*
|
|
102
|
+
* 通过拦截应用实例上的方法来监听组件生命周期、状态变化和事件。
|
|
103
|
+
*
|
|
104
|
+
* @param app - Lyt.js 应用实例
|
|
105
|
+
* @param cb - DevTools 回调函数集合
|
|
106
|
+
*/
|
|
107
|
+
export declare function connectToApp(app: LytApp, cb?: DevToolsCallbacks): void;
|
|
108
|
+
/**
|
|
109
|
+
* 获取所有组件信息
|
|
110
|
+
*/
|
|
111
|
+
export declare function getAllComponents(): ComponentInfo[];
|
|
112
|
+
/**
|
|
113
|
+
* 获取根组件信息
|
|
114
|
+
*/
|
|
115
|
+
export declare function getRootComponent(): ComponentInfo | null;
|
|
116
|
+
/**
|
|
117
|
+
* 根据 ID 获取组件信息
|
|
118
|
+
*/
|
|
119
|
+
export declare function getComponentById(id: string): ComponentInfo | null;
|
|
120
|
+
/**
|
|
121
|
+
* 获取组件的子组件列表
|
|
122
|
+
*/
|
|
123
|
+
export declare function getChildComponents(parentId: string): ComponentInfo[];
|
|
124
|
+
/**
|
|
125
|
+
* 获取所有事件记录
|
|
126
|
+
*/
|
|
127
|
+
export declare function getEventRecords(): EventRecord[];
|
|
128
|
+
/**
|
|
129
|
+
* 获取所有状态变化记录
|
|
130
|
+
*/
|
|
131
|
+
export declare function getStateChangeRecords(): StateChangeRecord[];
|
|
132
|
+
/**
|
|
133
|
+
* 获取指定组件的状态变化记录
|
|
134
|
+
*/
|
|
135
|
+
export declare function getComponentStateChanges(componentId: string): StateChangeRecord[];
|
|
136
|
+
/**
|
|
137
|
+
* 获取指定组件的事件记录
|
|
138
|
+
*/
|
|
139
|
+
export declare function getComponentEvents(componentId: string): EventRecord[];
|
|
140
|
+
/**
|
|
141
|
+
* 选中组件
|
|
142
|
+
*/
|
|
143
|
+
export declare function selectComponent(id: string | null): void;
|
|
144
|
+
/**
|
|
145
|
+
* 获取当前选中的组件
|
|
146
|
+
*/
|
|
147
|
+
export declare function getSelectedComponent(): ComponentInfo | null;
|
|
148
|
+
/**
|
|
149
|
+
* 获取当前选中的组件 ID
|
|
150
|
+
*/
|
|
151
|
+
export declare function getSelectedComponentId(): string | null;
|
|
152
|
+
/**
|
|
153
|
+
* 手动修改组件状态
|
|
154
|
+
*/
|
|
155
|
+
export declare function setComponentState(componentId: string, path: string, value: any): boolean;
|
|
156
|
+
/**
|
|
157
|
+
* 刷新组件树信息
|
|
158
|
+
* 重新遍历应用实例,更新所有组件信息
|
|
159
|
+
*/
|
|
160
|
+
export declare function refreshComponentTree(app: LytApp): void;
|
|
161
|
+
/**
|
|
162
|
+
* 清除所有记录
|
|
163
|
+
*/
|
|
164
|
+
export declare function clearRecords(): void;
|
|
165
|
+
/**
|
|
166
|
+
* 断开连接
|
|
167
|
+
*/
|
|
168
|
+
export declare function disconnect(): void;
|
|
169
|
+
/**
|
|
170
|
+
* 检查是否已连接
|
|
171
|
+
*/
|
|
172
|
+
export declare function isAppConnected(): boolean;
|
|
173
|
+
/**
|
|
174
|
+
* 获取组件数量
|
|
175
|
+
*/
|
|
176
|
+
export declare function getComponentCount(): number;
|
|
177
|
+
//# sourceMappingURL=hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/hooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lyt.js DevTools — 主入口
|
|
3
|
+
*
|
|
4
|
+
* DevTools 类是开发者工具的主入口,负责:
|
|
5
|
+
* - 连接到 Lyt.js 应用实例
|
|
6
|
+
* - 初始化所有子模块(组件树、状态检查器、事件追踪、时间旅行)
|
|
7
|
+
* - 创建 DevTools 面板 DOM(浮动面板,可拖拽)
|
|
8
|
+
* - 提供 show() / hide() 切换面板显示
|
|
9
|
+
*
|
|
10
|
+
* 使用方式:
|
|
11
|
+
* ```ts
|
|
12
|
+
* import { createDevTools } from '@lytjs/devtools'
|
|
13
|
+
* import { createApp } from '@lytjs/core'
|
|
14
|
+
*
|
|
15
|
+
* const app = createApp({ ... })
|
|
16
|
+
* app.use(createDevTools())
|
|
17
|
+
* app.mount('#app')
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* 纯原生零依赖实现。
|
|
21
|
+
*/
|
|
22
|
+
import { DevToolsPanel } from './panel';
|
|
23
|
+
import { ComponentTreeInspector } from './component-tree';
|
|
24
|
+
import { StateInspector } from './state-inspector';
|
|
25
|
+
import { EventTracker } from './event-tracker';
|
|
26
|
+
import { TimeTravelDebugger } from './time-travel';
|
|
27
|
+
import { type LytApp } from './hooks';
|
|
28
|
+
/** DevTools 配置 */
|
|
29
|
+
export interface DevToolsConfig {
|
|
30
|
+
/** 面板初始宽度 */
|
|
31
|
+
width?: number;
|
|
32
|
+
/** 面板初始高度 */
|
|
33
|
+
height?: number;
|
|
34
|
+
/** 面板初始 X 位置 */
|
|
35
|
+
x?: number;
|
|
36
|
+
/** 面板初始 Y 位置 */
|
|
37
|
+
y?: number;
|
|
38
|
+
/** 是否在启动时自动显示面板 */
|
|
39
|
+
autoShow?: boolean;
|
|
40
|
+
/** 面板标题 */
|
|
41
|
+
title?: string;
|
|
42
|
+
}
|
|
43
|
+
/** Lyt 应用 API 接口(插件系统使用) */
|
|
44
|
+
interface AppAPI {
|
|
45
|
+
use: (plugin: any, ...options: any[]) => AppAPI;
|
|
46
|
+
provide: <T = any>(key: string | symbol, value: T) => void;
|
|
47
|
+
inject: <T = any>(key: string | symbol, defaultValue?: T) => T | undefined;
|
|
48
|
+
config: Record<string, any>;
|
|
49
|
+
globalProperties: Record<string, any>;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Lyt.js 开发者工具
|
|
53
|
+
*
|
|
54
|
+
* 提供浏览器端的调试能力,包括组件树检查、状态检查、事件追踪和时间旅行调试。
|
|
55
|
+
*/
|
|
56
|
+
export declare class DevTools {
|
|
57
|
+
/** 调试面板 */
|
|
58
|
+
private panel;
|
|
59
|
+
/** 组件树检查器 */
|
|
60
|
+
private componentTree;
|
|
61
|
+
/** 状态检查器 */
|
|
62
|
+
private stateInspector;
|
|
63
|
+
/** 事件追踪器 */
|
|
64
|
+
private eventTracker;
|
|
65
|
+
/** 时间旅行调试器 */
|
|
66
|
+
private timeTravel;
|
|
67
|
+
/** 是否已安装 */
|
|
68
|
+
private _installed;
|
|
69
|
+
/** 应用实例引用 */
|
|
70
|
+
private app;
|
|
71
|
+
/** 配置 */
|
|
72
|
+
private config;
|
|
73
|
+
constructor(config?: DevToolsConfig);
|
|
74
|
+
/**
|
|
75
|
+
* 安装到 Lyt.js 应用
|
|
76
|
+
*
|
|
77
|
+
* @param app - Lyt.js 应用实例
|
|
78
|
+
*/
|
|
79
|
+
install(app: LytApp): void;
|
|
80
|
+
/**
|
|
81
|
+
* 显示面板
|
|
82
|
+
*/
|
|
83
|
+
show(): void;
|
|
84
|
+
/**
|
|
85
|
+
* 隐藏面板
|
|
86
|
+
*/
|
|
87
|
+
hide(): void;
|
|
88
|
+
/**
|
|
89
|
+
* 切换面板显示状态
|
|
90
|
+
*/
|
|
91
|
+
toggle(): void;
|
|
92
|
+
/**
|
|
93
|
+
* 面板是否可见
|
|
94
|
+
*/
|
|
95
|
+
isVisible(): boolean;
|
|
96
|
+
/**
|
|
97
|
+
* 渲染路由标签页内容
|
|
98
|
+
* 当前为占位实现,后续可集成 @lytjs/router
|
|
99
|
+
*/
|
|
100
|
+
private renderRouterTab;
|
|
101
|
+
/**
|
|
102
|
+
* 刷新组件树
|
|
103
|
+
*/
|
|
104
|
+
refreshTree(): void;
|
|
105
|
+
/**
|
|
106
|
+
* 清除所有记录(事件和状态变化)
|
|
107
|
+
*/
|
|
108
|
+
clearAllRecords(): void;
|
|
109
|
+
/**
|
|
110
|
+
* 获取面板实例(高级用法)
|
|
111
|
+
*/
|
|
112
|
+
getPanel(): DevToolsPanel;
|
|
113
|
+
/**
|
|
114
|
+
* 获取组件树检查器实例
|
|
115
|
+
*/
|
|
116
|
+
getComponentTree(): ComponentTreeInspector;
|
|
117
|
+
/**
|
|
118
|
+
* 获取状态检查器实例
|
|
119
|
+
*/
|
|
120
|
+
getStateInspector(): StateInspector;
|
|
121
|
+
/**
|
|
122
|
+
* 获取事件追踪器实例
|
|
123
|
+
*/
|
|
124
|
+
getEventTracker(): EventTracker;
|
|
125
|
+
/**
|
|
126
|
+
* 获取时间旅行调试器实例
|
|
127
|
+
*/
|
|
128
|
+
getTimeTravel(): TimeTravelDebugger;
|
|
129
|
+
/**
|
|
130
|
+
* 销毁 DevTools
|
|
131
|
+
* 清理所有子模块和 DOM 元素
|
|
132
|
+
*/
|
|
133
|
+
destroy(): void;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* 创建 DevTools 插件
|
|
137
|
+
*
|
|
138
|
+
* 返回一个符合 Lyt.js 插件接口的对象,可通过 app.use() 安装。
|
|
139
|
+
*
|
|
140
|
+
* @param config - DevTools 配置(可选)
|
|
141
|
+
* @returns DevTools 插件对象
|
|
142
|
+
*
|
|
143
|
+
* @example
|
|
144
|
+
* ```ts
|
|
145
|
+
* import { createDevTools } from '@lytjs/devtools'
|
|
146
|
+
* import { createApp } from '@lytjs/core'
|
|
147
|
+
*
|
|
148
|
+
* const app = createApp({ ... })
|
|
149
|
+
* app.use(createDevTools({ width: 480, height: 640 }))
|
|
150
|
+
* app.mount('#app')
|
|
151
|
+
* ```
|
|
152
|
+
*/
|
|
153
|
+
export declare function createDevTools(config?: DevToolsConfig): {
|
|
154
|
+
install: (app: AppAPI) => void;
|
|
155
|
+
};
|
|
156
|
+
export { DevToolsPanel } from './panel';
|
|
157
|
+
export { ComponentTreeInspector } from './component-tree';
|
|
158
|
+
export { StateInspector } from './state-inspector';
|
|
159
|
+
export { EventTracker } from './event-tracker';
|
|
160
|
+
export { TimeTravelDebugger } from './time-travel';
|
|
161
|
+
export { RoutePanel } from './route-panel';
|
|
162
|
+
export { PerfPanel } from './perf-panel';
|
|
163
|
+
export { PerformanceCollector } from './perf-collector';
|
|
164
|
+
export { ComponentProfiler } from './component-profiler';
|
|
165
|
+
export { EventPanel } from './event-panel';
|
|
166
|
+
export { RouterPanel } from './router-panel-enhanced';
|
|
167
|
+
export { VirtualComponentTree } from './virtual-tree';
|
|
168
|
+
export { MemoryTracker } from './memory-tracker';
|
|
169
|
+
export { RenderTracker } from './render-tracker';
|
|
170
|
+
export { BatchAnalyzer } from './batch-analyzer';
|
|
171
|
+
export { connectToApp, disconnect, getAllComponents, getRootComponent, getComponentById, getChildComponents, getEventRecords, getStateChangeRecords, getComponentStateChanges, getComponentEvents, selectComponent, getSelectedComponent, getSelectedComponentId, setComponentState, refreshComponentTree, clearRecords, isAppConnected, getComponentCount, } from './hooks';
|
|
172
|
+
export type { TabType } from './panel';
|
|
173
|
+
export type { ComponentInfo, EventRecord, StateChangeRecord, DevToolsCallbacks, LytApp, } from './hooks';
|
|
174
|
+
export type { StateSnapshot, } from './time-travel';
|
|
175
|
+
export type { RouteHistoryEntry, RoutePanelConfig, } from './route-panel';
|
|
176
|
+
export type { PerfEntry, EnhancedPerfPanelConfig, } from './perf-panel';
|
|
177
|
+
export type { Metric, FCPMetric, INPMetric, RenderMetric, UpdateFrequencyMetric, MemoryMetric, CustomMarkMetric, FPSMetric, PerformanceReport, } from './perf-collector';
|
|
178
|
+
export type { RenderRecord, ProfileResult, } from './component-profiler';
|
|
179
|
+
export type { CapturedEvent, EventPanelConfig, } from './event-panel';
|
|
180
|
+
export type { RouteLocation, RouteNavigation, RouterPanelConfig, } from './router-panel-enhanced';
|
|
181
|
+
export type { ComponentTreeNode, VirtualTreeOptions, } from './virtual-tree';
|
|
182
|
+
export type { MemorySnapshot, MemoryTrendPoint, MemoryLeakResult, MemoryReport, MemoryTrackerConfig, } from './memory-tracker';
|
|
183
|
+
export type { RenderRecord as RenderTrackerRecord, SlowRenderEntry, RenderComponentStats, RenderStats as RenderTrackerStats, RenderTimelineEntry, RenderTrackerConfig, } from './render-tracker';
|
|
184
|
+
export type { BatchRecord, BatchNameStats, BatchStats, AnomalousBatch, BatchAnalyzerConfig, } from './batch-analyzer';
|
|
185
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lyt.js DevTools - 内存使用追踪器
|
|
3
|
+
*
|
|
4
|
+
* 追踪内存使用情况,提供内存趋势分析、泄漏检测和内存报告生成。
|
|
5
|
+
* 使用环形缓冲区限制内存占用。
|
|
6
|
+
*
|
|
7
|
+
* 纯原生零依赖实现。
|
|
8
|
+
*/
|
|
9
|
+
/** 内存快照 */
|
|
10
|
+
export interface MemorySnapshot {
|
|
11
|
+
/** 快照时间戳 */
|
|
12
|
+
timestamp: number;
|
|
13
|
+
/** 已使用堆大小 (bytes) */
|
|
14
|
+
usedJSHeapSize: number;
|
|
15
|
+
/** 总堆大小 (bytes) */
|
|
16
|
+
totalJSHeapSize: number;
|
|
17
|
+
/** 堆大小上限 (bytes) */
|
|
18
|
+
jsHeapSizeLimit: number;
|
|
19
|
+
/** 快照序号 */
|
|
20
|
+
index: number;
|
|
21
|
+
}
|
|
22
|
+
/** 内存趋势数据点 */
|
|
23
|
+
export interface MemoryTrendPoint {
|
|
24
|
+
/** 时间戳 */
|
|
25
|
+
timestamp: number;
|
|
26
|
+
/** 已使用堆大小 (bytes) */
|
|
27
|
+
usedJSHeapSize: number;
|
|
28
|
+
/** 与前一个快照的变化量 (bytes) */
|
|
29
|
+
delta: number;
|
|
30
|
+
/** 使用率百分比 (0-100) */
|
|
31
|
+
usagePercent: number;
|
|
32
|
+
}
|
|
33
|
+
/** 内存泄漏检测结果 */
|
|
34
|
+
export interface MemoryLeakResult {
|
|
35
|
+
/** 是否存在可能的内存泄漏 */
|
|
36
|
+
hasLeak: boolean;
|
|
37
|
+
/** 泄漏严重程度: 'none' | 'low' | 'medium' | 'high' */
|
|
38
|
+
severity: 'none' | 'low' | 'medium' | 'high';
|
|
39
|
+
/** 泄漏描述 */
|
|
40
|
+
description: string;
|
|
41
|
+
/** 分析的快照数量 */
|
|
42
|
+
snapshotCount: number;
|
|
43
|
+
/** 增长速率 (bytes/s) */
|
|
44
|
+
growthRate: number;
|
|
45
|
+
/** 线性回归 R^2 值(越接近 1 越可能是线性增长) */
|
|
46
|
+
rSquared: number;
|
|
47
|
+
}
|
|
48
|
+
/** 内存报告 */
|
|
49
|
+
export interface MemoryReport {
|
|
50
|
+
/** 报告生成时间 */
|
|
51
|
+
generatedAt: number;
|
|
52
|
+
/** 当前快照 */
|
|
53
|
+
current: MemorySnapshot | null;
|
|
54
|
+
/** 峰值使用量 (bytes) */
|
|
55
|
+
peakUsage: number;
|
|
56
|
+
/** 峰值使用量时间戳 */
|
|
57
|
+
peakTimestamp: number;
|
|
58
|
+
/** 平均使用量 (bytes) */
|
|
59
|
+
averageUsage: number;
|
|
60
|
+
/** 最低使用量 (bytes) */
|
|
61
|
+
minUsage: number;
|
|
62
|
+
/** 总增长量 (bytes),第一个快照到最后一个快照 */
|
|
63
|
+
totalGrowth: number;
|
|
64
|
+
/** 趋势数据 */
|
|
65
|
+
trend: MemoryTrendPoint[];
|
|
66
|
+
/** 泄漏检测结果 */
|
|
67
|
+
leakDetection: MemoryLeakResult;
|
|
68
|
+
/** 快照总数 */
|
|
69
|
+
snapshotCount: number;
|
|
70
|
+
}
|
|
71
|
+
/** 内存追踪器配置 */
|
|
72
|
+
export interface MemoryTrackerConfig {
|
|
73
|
+
/** 环形缓冲区容量,默认 100 */
|
|
74
|
+
bufferSize?: number;
|
|
75
|
+
/** 泄漏检测的增长速率阈值 (bytes/s),默认 1024 */
|
|
76
|
+
leakGrowthThreshold?: number;
|
|
77
|
+
/** 泄漏检测的 R^2 阈值,默认 0.7 */
|
|
78
|
+
leakRSquaredThreshold?: number;
|
|
79
|
+
/** 泄漏检测所需最少快照数,默认 5 */
|
|
80
|
+
leakMinSnapshots?: number;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* 内存使用追踪器
|
|
84
|
+
*
|
|
85
|
+
* 追踪内存使用情况,提供趋势分析、泄漏检测和报告生成。
|
|
86
|
+
*/
|
|
87
|
+
export declare class MemoryTracker {
|
|
88
|
+
/** 内存快照缓冲区 */
|
|
89
|
+
private snapshots;
|
|
90
|
+
/** 快照计数器(单调递增) */
|
|
91
|
+
private counter;
|
|
92
|
+
/** 配置 */
|
|
93
|
+
private readonly config;
|
|
94
|
+
constructor(config?: MemoryTrackerConfig);
|
|
95
|
+
/**
|
|
96
|
+
* 记录内存快照
|
|
97
|
+
*
|
|
98
|
+
* 如果浏览器支持 performance.memory,则自动采集;
|
|
99
|
+
* 否则使用传入的值或返回 null。
|
|
100
|
+
*
|
|
101
|
+
* @param usedJSHeapSize - 已使用堆大小 (bytes),可选
|
|
102
|
+
* @param totalJSHeapSize - 总堆大小 (bytes),可选
|
|
103
|
+
* @param jsHeapSizeLimit - 堆大小上限 (bytes),可选
|
|
104
|
+
* @returns 记录的快照,如果无法获取内存信息则返回 null
|
|
105
|
+
*/
|
|
106
|
+
trackMemoryUsage(usedJSHeapSize?: number, totalJSHeapSize?: number, jsHeapSizeLimit?: number, timestamp?: number): MemorySnapshot | null;
|
|
107
|
+
/**
|
|
108
|
+
* 获取内存趋势数据
|
|
109
|
+
*
|
|
110
|
+
* @returns 趋势数据点数组
|
|
111
|
+
*/
|
|
112
|
+
getMemoryTrend(): MemoryTrendPoint[];
|
|
113
|
+
/**
|
|
114
|
+
* 检测可能的内存泄漏
|
|
115
|
+
*
|
|
116
|
+
* 使用线性回归分析内存增长趋势,结合增长速率判断是否存在泄漏。
|
|
117
|
+
*
|
|
118
|
+
* @returns 泄漏检测结果
|
|
119
|
+
*/
|
|
120
|
+
detectMemoryLeak(): MemoryLeakResult;
|
|
121
|
+
/**
|
|
122
|
+
* 生成内存报告
|
|
123
|
+
*
|
|
124
|
+
* @returns 内存报告
|
|
125
|
+
*/
|
|
126
|
+
getMemoryReport(): MemoryReport;
|
|
127
|
+
/**
|
|
128
|
+
* 获取所有快照
|
|
129
|
+
*
|
|
130
|
+
* @returns 快照数组
|
|
131
|
+
*/
|
|
132
|
+
getSnapshots(): MemorySnapshot[];
|
|
133
|
+
/**
|
|
134
|
+
* 获取快照数量
|
|
135
|
+
*
|
|
136
|
+
* @returns 快照数量
|
|
137
|
+
*/
|
|
138
|
+
getSnapshotCount(): number;
|
|
139
|
+
/**
|
|
140
|
+
* 清除所有快照
|
|
141
|
+
*/
|
|
142
|
+
clear(): void;
|
|
143
|
+
/**
|
|
144
|
+
* 销毁追踪器
|
|
145
|
+
*/
|
|
146
|
+
destroy(): void;
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=memory-tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-tracker.d.ts","sourceRoot":"","sources":["../../src/memory-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,WAAW;AACX,MAAM,WAAW,cAAc;IAC7B,YAAY;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,qBAAqB;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW;IACX,KAAK,EAAE,MAAM,CAAC;CACf;AAED,cAAc;AACd,MAAM,WAAW,gBAAgB;IAC/B,UAAU;IACV,SAAS,EAAE,MAAM,CAAC;IAClB,qBAAqB;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,qBAAqB;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,eAAe;AACf,MAAM,WAAW,gBAAgB;IAC/B,kBAAkB;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,iDAAiD;IACjD,QAAQ,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC7C,WAAW;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,WAAW;AACX,MAAM,WAAW,YAAY;IAC3B,aAAa;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW;IACX,OAAO,EAAE,cAAc,GAAG,IAAI,CAAC;IAC/B,oBAAoB;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,gCAAgC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW;IACX,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,aAAa;IACb,aAAa,EAAE,gBAAgB,CAAC;IAChC,WAAW;IACX,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,cAAc;AACd,MAAM,WAAW,mBAAmB;IAClC,qBAAqB;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,0BAA0B;IAC1B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,uBAAuB;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAyED;;;;GAIG;AACH,qBAAa,aAAa;IACxB,cAAc;IACd,OAAO,CAAC,SAAS,CAA6B;IAC9C,kBAAkB;IAClB,OAAO,CAAC,OAAO,CAAa;IAC5B,SAAS;IACT,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;gBAE3C,MAAM,CAAC,EAAE,mBAAmB;IAcxC;;;;;;;;;;OAUG;IACH,gBAAgB,CACd,cAAc,CAAC,EAAE,MAAM,EACvB,eAAe,CAAC,EAAE,MAAM,EACxB,eAAe,CAAC,EAAE,MAAM,EACxB,SAAS,CAAC,EAAE,MAAM,GACjB,cAAc,GAAG,IAAI;IA2BxB;;;;OAIG;IACH,cAAc,IAAI,gBAAgB,EAAE;IAqBpC;;;;;;OAMG;IACH,gBAAgB,IAAI,gBAAgB;IAmFpC;;;;OAIG;IACH,eAAe,IAAI,YAAY;IAmD/B;;;;OAIG;IACH,YAAY,IAAI,cAAc,EAAE;IAIhC;;;;OAIG;IACH,gBAAgB,IAAI,MAAM;IAI1B;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,OAAO,IAAI,IAAI;CAGhB"}
|