@lytjs/devtools 4.0.5 → 4.1.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/dist/index.cjs +5 -5
- package/dist/index.mjs +4 -4
- package/dist/tsconfig.tsbuildinfo +1 -0
- 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,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lyt.js DevTools - 组件渲染追踪器
|
|
3
|
+
*
|
|
4
|
+
* 追踪组件渲染耗时,提供慢渲染检测、渲染统计和渲染时间线。
|
|
5
|
+
* 使用环形缓冲区限制内存占用。
|
|
6
|
+
*
|
|
7
|
+
* 纯原生零依赖实现。
|
|
8
|
+
*/
|
|
9
|
+
/** 渲染记录 */
|
|
10
|
+
export interface RenderRecord {
|
|
11
|
+
/** 组件名称 */
|
|
12
|
+
componentName: string;
|
|
13
|
+
/** 渲染耗时 (ms) */
|
|
14
|
+
duration: number;
|
|
15
|
+
/** 渲染时间戳 */
|
|
16
|
+
timestamp: number;
|
|
17
|
+
/** 记录序号 */
|
|
18
|
+
index: number;
|
|
19
|
+
}
|
|
20
|
+
/** 慢渲染条目 */
|
|
21
|
+
export interface SlowRenderEntry {
|
|
22
|
+
/** 组件名称 */
|
|
23
|
+
componentName: string;
|
|
24
|
+
/** 渲染耗时 (ms) */
|
|
25
|
+
duration: number;
|
|
26
|
+
/** 渲染时间戳 */
|
|
27
|
+
timestamp: number;
|
|
28
|
+
/** 超出阈值的量 (ms) */
|
|
29
|
+
overThreshold: number;
|
|
30
|
+
}
|
|
31
|
+
/** 渲染统计(按组件分组) */
|
|
32
|
+
export interface RenderComponentStats {
|
|
33
|
+
/** 组件名称 */
|
|
34
|
+
componentName: string;
|
|
35
|
+
/** 渲染次数 */
|
|
36
|
+
renderCount: number;
|
|
37
|
+
/** 平均渲染耗时 (ms) */
|
|
38
|
+
avgDuration: number;
|
|
39
|
+
/** 最大渲染耗时 (ms) */
|
|
40
|
+
maxDuration: number;
|
|
41
|
+
/** 最小渲染耗时 (ms) */
|
|
42
|
+
minDuration: number;
|
|
43
|
+
/** 总渲染耗时 (ms) */
|
|
44
|
+
totalDuration: number;
|
|
45
|
+
/** 慢渲染次数 */
|
|
46
|
+
slowCount: number;
|
|
47
|
+
}
|
|
48
|
+
/** 整体渲染统计 */
|
|
49
|
+
export interface RenderStats {
|
|
50
|
+
/** 总渲染次数 */
|
|
51
|
+
totalRenders: number;
|
|
52
|
+
/** 总渲染耗时 (ms) */
|
|
53
|
+
totalDuration: number;
|
|
54
|
+
/** 平均渲染耗时 (ms) */
|
|
55
|
+
avgDuration: number;
|
|
56
|
+
/** 最大渲染耗时 (ms) */
|
|
57
|
+
maxDuration: number;
|
|
58
|
+
/** 最小渲染耗时 (ms) */
|
|
59
|
+
minDuration: number;
|
|
60
|
+
/** 慢渲染次数 */
|
|
61
|
+
slowRenderCount: number;
|
|
62
|
+
/** 慢渲染占比 (0-1) */
|
|
63
|
+
slowRenderRatio: number;
|
|
64
|
+
/** 按组件分组的统计 */
|
|
65
|
+
byComponent: RenderComponentStats[];
|
|
66
|
+
}
|
|
67
|
+
/** 渲染时间线条目 */
|
|
68
|
+
export interface RenderTimelineEntry {
|
|
69
|
+
/** 组件名称 */
|
|
70
|
+
componentName: string;
|
|
71
|
+
/** 渲染耗时 (ms) */
|
|
72
|
+
duration: number;
|
|
73
|
+
/** 渲染时间戳 */
|
|
74
|
+
timestamp: number;
|
|
75
|
+
/** 是否为慢渲染 */
|
|
76
|
+
isSlow: boolean;
|
|
77
|
+
/** 与前一次渲染的间隔 (ms),第一条为 -1 */
|
|
78
|
+
gap: number;
|
|
79
|
+
}
|
|
80
|
+
/** 渲染追踪器配置 */
|
|
81
|
+
export interface RenderTrackerConfig {
|
|
82
|
+
/** 环形缓冲区容量,默认 200 */
|
|
83
|
+
bufferSize?: number;
|
|
84
|
+
/** 慢渲染阈值 (ms),默认 16 */
|
|
85
|
+
slowThreshold?: number;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* 组件渲染追踪器
|
|
89
|
+
*
|
|
90
|
+
* 追踪组件渲染耗时,提供慢渲染检测、渲染统计和渲染时间线。
|
|
91
|
+
*/
|
|
92
|
+
export declare class RenderTracker {
|
|
93
|
+
/** 渲染记录缓冲区 */
|
|
94
|
+
private records;
|
|
95
|
+
/** 记录计数器(单调递增) */
|
|
96
|
+
private counter;
|
|
97
|
+
/** 配置 */
|
|
98
|
+
private readonly config;
|
|
99
|
+
constructor(config?: RenderTrackerConfig);
|
|
100
|
+
/**
|
|
101
|
+
* 记录一次渲染
|
|
102
|
+
*
|
|
103
|
+
* @param componentName - 组件名称
|
|
104
|
+
* @param duration - 渲染耗时 (ms)
|
|
105
|
+
*/
|
|
106
|
+
trackRender(componentName: string, duration: number): void;
|
|
107
|
+
/**
|
|
108
|
+
* 获取慢渲染组件列表
|
|
109
|
+
*
|
|
110
|
+
* @param threshold - 慢渲染阈值 (ms),默认使用配置值
|
|
111
|
+
* @returns 慢渲染条目数组,按耗时降序排列
|
|
112
|
+
*/
|
|
113
|
+
getSlowRenderers(threshold?: number): SlowRenderEntry[];
|
|
114
|
+
/**
|
|
115
|
+
* 获取渲染统计
|
|
116
|
+
*
|
|
117
|
+
* @returns 渲染统计信息
|
|
118
|
+
*/
|
|
119
|
+
getRenderStats(): RenderStats;
|
|
120
|
+
/**
|
|
121
|
+
* 获取渲染时间线
|
|
122
|
+
*
|
|
123
|
+
* @returns 渲染时间线条目数组
|
|
124
|
+
*/
|
|
125
|
+
getRenderTimeline(): RenderTimelineEntry[];
|
|
126
|
+
/**
|
|
127
|
+
* 获取所有渲染记录
|
|
128
|
+
*
|
|
129
|
+
* @returns 渲染记录数组
|
|
130
|
+
*/
|
|
131
|
+
getRecords(): RenderRecord[];
|
|
132
|
+
/**
|
|
133
|
+
* 获取记录数量
|
|
134
|
+
*
|
|
135
|
+
* @returns 记录数量
|
|
136
|
+
*/
|
|
137
|
+
getRecordCount(): number;
|
|
138
|
+
/**
|
|
139
|
+
* 清除所有记录
|
|
140
|
+
*/
|
|
141
|
+
clear(): void;
|
|
142
|
+
/**
|
|
143
|
+
* 销毁追踪器
|
|
144
|
+
*/
|
|
145
|
+
destroy(): void;
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=render-tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-tracker.d.ts","sourceRoot":"","sources":["../../src/render-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,WAAW;AACX,MAAM,WAAW,YAAY;IAC3B,WAAW;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW;IACX,KAAK,EAAE,MAAM,CAAC;CACf;AAED,YAAY;AACZ,MAAM,WAAW,eAAe;IAC9B,WAAW;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,kBAAkB;AAClB,MAAM,WAAW,oBAAoB;IACnC,WAAW;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,aAAa;AACb,MAAM,WAAW,WAAW;IAC1B,YAAY;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY;IACZ,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe;IACf,WAAW,EAAE,oBAAoB,EAAE,CAAC;CACrC;AAED,cAAc;AACd,MAAM,WAAW,mBAAmB;IAClC,WAAW;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,6BAA6B;IAC7B,GAAG,EAAE,MAAM,CAAC;CACb;AAED,cAAc;AACd,MAAM,WAAW,mBAAmB;IAClC,qBAAqB;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uBAAuB;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAuED;;;;GAIG;AACH,qBAAa,aAAa;IACxB,cAAc;IACd,OAAO,CAAC,OAAO,CAA2B;IAC1C,kBAAkB;IAClB,OAAO,CAAC,OAAO,CAAa;IAC5B,SAAS;IACT,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;gBAE3C,MAAM,CAAC,EAAE,mBAAmB;IAYxC;;;;;OAKG;IACH,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAS1D;;;;;OAKG;IACH,gBAAgB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,eAAe,EAAE;IAevD;;;;OAIG;IACH,cAAc,IAAI,WAAW;IAkF7B;;;;OAIG;IACH,iBAAiB,IAAI,mBAAmB,EAAE;IAiB1C;;;;OAIG;IACH,UAAU,IAAI,YAAY,EAAE;IAI5B;;;;OAIG;IACH,cAAc,IAAI,MAAM;IAIxB;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,OAAO,IAAI,IAAI;CAGhB"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lyt.js DevTools 路由面板
|
|
3
|
+
* 显示当前路由信息和导航历史
|
|
4
|
+
*/
|
|
5
|
+
/** 路由历史记录条目 */
|
|
6
|
+
export interface RouteHistoryEntry {
|
|
7
|
+
/** 路由路径 */
|
|
8
|
+
path: string;
|
|
9
|
+
/** 路由参数 */
|
|
10
|
+
params?: Record<string, string>;
|
|
11
|
+
/** 查询参数 */
|
|
12
|
+
query?: Record<string, string>;
|
|
13
|
+
/** 导航时间戳 */
|
|
14
|
+
timestamp: number;
|
|
15
|
+
}
|
|
16
|
+
/** 路由面板配置 */
|
|
17
|
+
export interface RoutePanelConfig {
|
|
18
|
+
/** 最大历史记录条数 */
|
|
19
|
+
maxHistory?: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* 路由面板
|
|
23
|
+
*
|
|
24
|
+
* 显示当前路由信息和导航历史列表,
|
|
25
|
+
* 帮助开发者调试路由相关的问题。
|
|
26
|
+
*/
|
|
27
|
+
export declare class RoutePanel {
|
|
28
|
+
private container;
|
|
29
|
+
private history;
|
|
30
|
+
private maxHistory;
|
|
31
|
+
private currentPath;
|
|
32
|
+
private currentParams;
|
|
33
|
+
private currentQuery;
|
|
34
|
+
constructor(container: HTMLElement, config?: RoutePanelConfig);
|
|
35
|
+
/**
|
|
36
|
+
* 更新当前路由信息
|
|
37
|
+
*
|
|
38
|
+
* @param path - 路由路径
|
|
39
|
+
* @param params - 路由参数
|
|
40
|
+
* @param query - 查询参数
|
|
41
|
+
*/
|
|
42
|
+
updateRoute(path: string, params?: Record<string, string>, query?: Record<string, string>): void;
|
|
43
|
+
/**
|
|
44
|
+
* 获取路由历史记录
|
|
45
|
+
*
|
|
46
|
+
* @returns 历史记录数组(最新在前)
|
|
47
|
+
*/
|
|
48
|
+
getHistory(): RouteHistoryEntry[];
|
|
49
|
+
/**
|
|
50
|
+
* 获取当前路由路径
|
|
51
|
+
*
|
|
52
|
+
* @returns 当前路径
|
|
53
|
+
*/
|
|
54
|
+
getCurrentPath(): string;
|
|
55
|
+
/**
|
|
56
|
+
* 清除历史记录
|
|
57
|
+
*/
|
|
58
|
+
clearHistory(): void;
|
|
59
|
+
/**
|
|
60
|
+
* 渲染路由面板 UI
|
|
61
|
+
*/
|
|
62
|
+
private render;
|
|
63
|
+
/**
|
|
64
|
+
* 销毁面板,清理 DOM
|
|
65
|
+
*/
|
|
66
|
+
destroy(): void;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=route-panel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route-panel.d.ts","sourceRoot":"","sources":["../../src/route-panel.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAe;AACf,MAAM,WAAW,iBAAiB;IAChC,WAAW;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW;IACX,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,WAAW;IACX,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,YAAY;IACZ,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,aAAa;AACb,MAAM,WAAW,gBAAgB;IAC/B,eAAe;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED;;;;;GAKG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,YAAY,CAA6B;gBAErC,SAAS,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,gBAAgB;IAM7D;;;;;;OAMG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAsBhG;;;;OAIG;IACH,UAAU,IAAI,iBAAiB,EAAE;IAIjC;;;;OAIG;IACH,cAAc,IAAI,MAAM;IAIxB;;OAEG;IACH,YAAY,IAAI,IAAI;IAKpB;;OAEG;IACH,OAAO,CAAC,MAAM;IA4Gd;;OAEG;IACH,OAAO,IAAI,IAAI;CAIhB"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lyt.js DevTools — 路由面板(增强版)
|
|
3
|
+
*
|
|
4
|
+
* 独立的路由检查器,展示当前路由信息、导航历史和路由匹配信息。
|
|
5
|
+
* 支持历史记录查看、详情展示等功能。
|
|
6
|
+
*
|
|
7
|
+
* 纯原生零依赖实现。
|
|
8
|
+
*/
|
|
9
|
+
/** 路由位置信息 */
|
|
10
|
+
export interface RouteLocation {
|
|
11
|
+
/** 路由路径 */
|
|
12
|
+
path: string;
|
|
13
|
+
/** 路由参数 */
|
|
14
|
+
params?: Record<string, string>;
|
|
15
|
+
/** 查询参数 */
|
|
16
|
+
query?: Record<string, string>;
|
|
17
|
+
/** 哈希 */
|
|
18
|
+
hash?: string;
|
|
19
|
+
/** 路由名称 */
|
|
20
|
+
name?: string;
|
|
21
|
+
/** 是否完全匹配 */
|
|
22
|
+
matched?: boolean;
|
|
23
|
+
}
|
|
24
|
+
/** 路由导航记录 */
|
|
25
|
+
export interface RouteNavigation {
|
|
26
|
+
/** 导航序号 */
|
|
27
|
+
index: number;
|
|
28
|
+
/** 目标路由 */
|
|
29
|
+
to: RouteLocation;
|
|
30
|
+
/** 来源路由 */
|
|
31
|
+
from: RouteLocation;
|
|
32
|
+
/** 导航时间戳 */
|
|
33
|
+
timestamp: number;
|
|
34
|
+
/** 导航类型 */
|
|
35
|
+
type: 'push' | 'replace' | 'pop';
|
|
36
|
+
}
|
|
37
|
+
/** 路由面板配置 */
|
|
38
|
+
export interface RouterPanelConfig {
|
|
39
|
+
/** 最大历史记录条数,默认 50 */
|
|
40
|
+
maxHistory?: number;
|
|
41
|
+
/** 面板标题,默认 "路由面板" */
|
|
42
|
+
title?: string;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* 路由面板
|
|
46
|
+
*
|
|
47
|
+
* 展示当前路由信息、导航历史和路由匹配信息。
|
|
48
|
+
*/
|
|
49
|
+
export declare class RouterPanel {
|
|
50
|
+
/** 当前路由 */
|
|
51
|
+
private currentRoute;
|
|
52
|
+
/** 导航历史 */
|
|
53
|
+
private history;
|
|
54
|
+
/** 最大历史记录条数 */
|
|
55
|
+
private maxHistory;
|
|
56
|
+
/** 面板标题 */
|
|
57
|
+
private title;
|
|
58
|
+
/** 导航计数器 */
|
|
59
|
+
private navCounter;
|
|
60
|
+
/** DOM 根元素 */
|
|
61
|
+
private element;
|
|
62
|
+
/** 选中的历史条目索引 */
|
|
63
|
+
private selectedHistoryIndex;
|
|
64
|
+
constructor(config?: RouterPanelConfig);
|
|
65
|
+
/**
|
|
66
|
+
* 路由变化回调
|
|
67
|
+
*
|
|
68
|
+
* @param to - 目标路由
|
|
69
|
+
* @param from - 来源路由
|
|
70
|
+
* @param type - 导航类型
|
|
71
|
+
*/
|
|
72
|
+
onRouteChange(to: RouteLocation, from: RouteLocation, type?: 'push' | 'replace' | 'pop'): void;
|
|
73
|
+
/**
|
|
74
|
+
* 获取当前路由
|
|
75
|
+
*
|
|
76
|
+
* @returns 当前路由信息,如果没有则为 null
|
|
77
|
+
*/
|
|
78
|
+
getCurrentRoute(): RouteLocation | null;
|
|
79
|
+
/**
|
|
80
|
+
* 获取导航历史
|
|
81
|
+
*
|
|
82
|
+
* @returns 导航历史数组
|
|
83
|
+
*/
|
|
84
|
+
getHistory(): RouteNavigation[];
|
|
85
|
+
/**
|
|
86
|
+
* 清除导航历史
|
|
87
|
+
*/
|
|
88
|
+
clearHistory(): void;
|
|
89
|
+
/**
|
|
90
|
+
* 获取历史记录条数
|
|
91
|
+
*/
|
|
92
|
+
getHistoryCount(): number;
|
|
93
|
+
/**
|
|
94
|
+
* 获取最大历史记录条数
|
|
95
|
+
*/
|
|
96
|
+
getMaxHistory(): number;
|
|
97
|
+
/**
|
|
98
|
+
* 选中某条历史记录
|
|
99
|
+
*
|
|
100
|
+
* @param index - 历史记录在 getHistory() 返回数组中的索引
|
|
101
|
+
*/
|
|
102
|
+
selectHistoryEntry(index: number): void;
|
|
103
|
+
/**
|
|
104
|
+
* 获取选中的历史记录
|
|
105
|
+
*/
|
|
106
|
+
getSelectedHistoryEntry(): RouteNavigation | null;
|
|
107
|
+
/**
|
|
108
|
+
* 渲染面板 DOM 元素
|
|
109
|
+
*
|
|
110
|
+
* @returns 面板 DOM 元素
|
|
111
|
+
*/
|
|
112
|
+
render(): HTMLElement;
|
|
113
|
+
/**
|
|
114
|
+
* 销毁面板
|
|
115
|
+
*/
|
|
116
|
+
destroy(): void;
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=router-panel-enhanced.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router-panel-enhanced.d.ts","sourceRoot":"","sources":["../../src/router-panel-enhanced.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,aAAa;AACb,MAAM,WAAW,aAAa;IAC5B,WAAW;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW;IACX,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,WAAW;IACX,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,SAAS;IACT,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,aAAa;AACb,MAAM,WAAW,eAAe;IAC9B,WAAW;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW;IACX,EAAE,EAAE,aAAa,CAAC;IAClB,WAAW;IACX,IAAI,EAAE,aAAa,CAAC;IACpB,YAAY;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW;IACX,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,KAAK,CAAC;CAClC;AAED,aAAa;AACb,MAAM,WAAW,iBAAiB;IAChC,qBAAqB;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD;;;;GAIG;AACH,qBAAa,WAAW;IACtB,WAAW;IACX,OAAO,CAAC,YAAY,CAA8B;IAClD,WAAW;IACX,OAAO,CAAC,OAAO,CAAyB;IACxC,eAAe;IACf,OAAO,CAAC,UAAU,CAAS;IAC3B,WAAW;IACX,OAAO,CAAC,KAAK,CAAS;IACtB,YAAY;IACZ,OAAO,CAAC,UAAU,CAAa;IAC/B,cAAc;IACd,OAAO,CAAC,OAAO,CAA4B;IAC3C,gBAAgB;IAChB,OAAO,CAAC,oBAAoB,CAAc;gBAE9B,MAAM,CAAC,EAAE,iBAAiB;IAStC;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,KAAK,GAAG,IAAI;IAoB9F;;;;OAIG;IACH,eAAe,IAAI,aAAa,GAAG,IAAI;IAIvC;;;;OAIG;IACH,UAAU,IAAI,eAAe,EAAE;IAQ/B;;OAEG;IACH,YAAY,IAAI,IAAI;IAMpB;;OAEG;IACH,eAAe,IAAI,MAAM;IAIzB;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;;;OAIG;IACH,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAMvC;;OAEG;IACH,uBAAuB,IAAI,eAAe,GAAG,IAAI;IAgBjD;;;;OAIG;IACH,MAAM,IAAI,WAAW;IA8JrB;;OAEG;IACH,OAAO,IAAI,IAAI;CAQhB"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lyt.js DevTools — 状态检查器
|
|
3
|
+
*
|
|
4
|
+
* 显示和编辑当前选中组件的完整状态,包括 props、state、computed。
|
|
5
|
+
* 支持嵌套对象展开/折叠、实时更新高亮、双击编辑和变化历史记录。
|
|
6
|
+
*
|
|
7
|
+
* 核心功能:
|
|
8
|
+
* - StateInspector 类
|
|
9
|
+
* - 显示当前选中组件的完整状态(props/state/computed)
|
|
10
|
+
* - 状态值可展开/折叠(支持嵌套对象)
|
|
11
|
+
* - 状态变化实时更新(高亮变化的属性)
|
|
12
|
+
* - 手动编辑状态值(双击编辑)
|
|
13
|
+
* - 状态变化历史记录
|
|
14
|
+
*
|
|
15
|
+
* 纯原生零依赖实现。
|
|
16
|
+
*/
|
|
17
|
+
import type { DevToolsPanel } from './panel';
|
|
18
|
+
/**
|
|
19
|
+
* 状态检查器
|
|
20
|
+
*
|
|
21
|
+
* 负责显示和编辑组件的 props、state、computed 状态。
|
|
22
|
+
*/
|
|
23
|
+
export declare class StateInspector {
|
|
24
|
+
/** 面板引用 */
|
|
25
|
+
private panel;
|
|
26
|
+
/** 当前内容容器 */
|
|
27
|
+
private container;
|
|
28
|
+
/** 展开的路径集合 */
|
|
29
|
+
private expandedPaths;
|
|
30
|
+
/** 最近变化的属性路径(用于高亮) */
|
|
31
|
+
private changedPaths;
|
|
32
|
+
/** 高亮清除定时器 */
|
|
33
|
+
private highlightTimer;
|
|
34
|
+
/** 当前显示历史记录模式 */
|
|
35
|
+
private showHistory;
|
|
36
|
+
/** 更新定时器 */
|
|
37
|
+
private updateTimer;
|
|
38
|
+
constructor(panel: DevToolsPanel);
|
|
39
|
+
/**
|
|
40
|
+
* 渲染状态检查器到指定容器
|
|
41
|
+
*/
|
|
42
|
+
render(container: HTMLElement): void;
|
|
43
|
+
/**
|
|
44
|
+
* 渲染状态内容
|
|
45
|
+
*/
|
|
46
|
+
private renderState;
|
|
47
|
+
/**
|
|
48
|
+
* 渲染状态分类区块
|
|
49
|
+
*/
|
|
50
|
+
private renderCategory;
|
|
51
|
+
/**
|
|
52
|
+
* 渲染单个属性
|
|
53
|
+
*/
|
|
54
|
+
private renderProperty;
|
|
55
|
+
/**
|
|
56
|
+
* 开始编辑状态值
|
|
57
|
+
*/
|
|
58
|
+
private startEdit;
|
|
59
|
+
/**
|
|
60
|
+
* 渲染状态变化历史
|
|
61
|
+
*/
|
|
62
|
+
private renderHistory;
|
|
63
|
+
/**
|
|
64
|
+
* 全局更新事件处理
|
|
65
|
+
*/
|
|
66
|
+
private onUpdate;
|
|
67
|
+
/**
|
|
68
|
+
* 标记属性变化(用于高亮)
|
|
69
|
+
*/
|
|
70
|
+
markChanged(path: string): void;
|
|
71
|
+
/**
|
|
72
|
+
* 强制刷新
|
|
73
|
+
*/
|
|
74
|
+
refresh(): void;
|
|
75
|
+
/**
|
|
76
|
+
* 销毁检查器
|
|
77
|
+
*/
|
|
78
|
+
destroy(): void;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=state-inspector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-inspector.d.ts","sourceRoot":"","sources":["../../src/state-inspector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAWH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AA8F7C;;;;GAIG;AACH,qBAAa,cAAc;IACzB,WAAW;IACX,OAAO,CAAC,KAAK,CAAgB;IAC7B,aAAa;IACb,OAAO,CAAC,SAAS,CAA4B;IAC7C,cAAc;IACd,OAAO,CAAC,aAAa,CAAoC;IACzD,sBAAsB;IACtB,OAAO,CAAC,YAAY,CAA6B;IACjD,cAAc;IACd,OAAO,CAAC,cAAc,CAA8C;IACpE,iBAAiB;IACjB,OAAO,CAAC,WAAW,CAAkB;IACrC,YAAY;IACZ,OAAO,CAAC,WAAW,CAA8C;gBAErD,KAAK,EAAE,aAAa;IAahC;;OAEG;IACH,MAAM,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI;IAKpC;;OAEG;IACH,OAAO,CAAC,WAAW;IA0EnB;;OAEG;IACH,OAAO,CAAC,cAAc;IAkEtB;;OAEG;IACH,OAAO,CAAC,cAAc;IA0JtB;;OAEG;IACH,OAAO,CAAC,SAAS;IA+FjB;;OAEG;IACH,OAAO,CAAC,aAAa;IA0DrB;;OAEG;IACH,OAAO,CAAC,QAAQ,CAOd;IAEF;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAa/B;;OAEG;IACH,OAAO,IAAI,IAAI;IAQf;;OAEG;IACH,OAAO,IAAI,IAAI;CAchB"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lyt.js DevTools — 时间旅行调试
|
|
3
|
+
*
|
|
4
|
+
* 提供状态快照系统和时间轴控件,支持回到任意历史时间点查看和恢复状态。
|
|
5
|
+
*
|
|
6
|
+
* 核心功能:
|
|
7
|
+
* - TimeTravelDebugger 类
|
|
8
|
+
* - 状态快照系统(每次状态变化时保存快照)
|
|
9
|
+
* - 快照包含完整的组件状态树
|
|
10
|
+
* - 最多保存 100 个快照(内存限制)
|
|
11
|
+
* - 时间轴控件(滑块拖拽、播放/暂停、步进按钮)
|
|
12
|
+
* - 回到历史时间点时恢复状态并重新渲染
|
|
13
|
+
* - 快照列表显示
|
|
14
|
+
*
|
|
15
|
+
* 纯原生零依赖实现。
|
|
16
|
+
*/
|
|
17
|
+
import { type StateChangeRecord } from './hooks';
|
|
18
|
+
import type { DevToolsPanel } from './panel';
|
|
19
|
+
/** 状态快照 */
|
|
20
|
+
export interface StateSnapshot {
|
|
21
|
+
/** 快照唯一 ID */
|
|
22
|
+
id: number;
|
|
23
|
+
/** 快照时间戳 */
|
|
24
|
+
timestamp: number;
|
|
25
|
+
/** 快照描述 */
|
|
26
|
+
description: string;
|
|
27
|
+
/** 所有组件的状态快照 */
|
|
28
|
+
components: Map<string, ComponentSnapshot>;
|
|
29
|
+
/** 触发此快照的状态变化记录(可选) */
|
|
30
|
+
trigger?: StateChangeRecord;
|
|
31
|
+
}
|
|
32
|
+
/** 单个组件的状态快照 */
|
|
33
|
+
interface ComponentSnapshot {
|
|
34
|
+
/** 组件 ID */
|
|
35
|
+
id: string;
|
|
36
|
+
/** 组件名称 */
|
|
37
|
+
name: string;
|
|
38
|
+
/** 组件 state 深拷贝 */
|
|
39
|
+
state: Record<string, any>;
|
|
40
|
+
/** 组件 props 深拷贝 */
|
|
41
|
+
props: Record<string, any>;
|
|
42
|
+
/** 组件 computed 深拷贝 */
|
|
43
|
+
computed: Record<string, any>;
|
|
44
|
+
/** 是否已挂载 */
|
|
45
|
+
isMounted: boolean;
|
|
46
|
+
}
|
|
47
|
+
/** 播放状态 */
|
|
48
|
+
type PlayState = 'stopped' | 'playing' | 'paused';
|
|
49
|
+
/**
|
|
50
|
+
* 时间旅行调试器
|
|
51
|
+
*
|
|
52
|
+
* 通过状态快照系统记录应用状态变化历史,
|
|
53
|
+
* 提供时间轴控件让开发者回到任意时间点查看状态。
|
|
54
|
+
*/
|
|
55
|
+
export declare class TimeTravelDebugger {
|
|
56
|
+
/** 面板引用 */
|
|
57
|
+
private panel;
|
|
58
|
+
/** 当前内容容器 */
|
|
59
|
+
private container;
|
|
60
|
+
/** 快照列表 */
|
|
61
|
+
private snapshots;
|
|
62
|
+
/** 快照 ID 计数器 */
|
|
63
|
+
private snapshotCounter;
|
|
64
|
+
/** 最大快照数量 */
|
|
65
|
+
private maxSnapshots;
|
|
66
|
+
/** 当前查看的快照索引(-1 表示当前实时状态) */
|
|
67
|
+
private currentIndex;
|
|
68
|
+
/** 播放状态 */
|
|
69
|
+
private playState;
|
|
70
|
+
/** 播放速度(毫秒/步) */
|
|
71
|
+
private playSpeed;
|
|
72
|
+
/** 播放定时器 */
|
|
73
|
+
private playTimer;
|
|
74
|
+
/** 是否启用自动快照 */
|
|
75
|
+
private autoSnapshot;
|
|
76
|
+
/** 更新定时器 */
|
|
77
|
+
private updateTimer;
|
|
78
|
+
constructor(panel: DevToolsPanel);
|
|
79
|
+
/**
|
|
80
|
+
* 创建状态快照
|
|
81
|
+
*
|
|
82
|
+
* @param description - 快照描述
|
|
83
|
+
* @param trigger - 触发此快照的状态变化记录
|
|
84
|
+
*/
|
|
85
|
+
takeSnapshot(description?: string, trigger?: StateChangeRecord): StateSnapshot;
|
|
86
|
+
/**
|
|
87
|
+
* 获取所有快照
|
|
88
|
+
*/
|
|
89
|
+
getSnapshots(): StateSnapshot[];
|
|
90
|
+
/**
|
|
91
|
+
* 获取指定索引的快照
|
|
92
|
+
*/
|
|
93
|
+
getSnapshot(index: number): StateSnapshot | null;
|
|
94
|
+
/**
|
|
95
|
+
* 获取当前快照索引
|
|
96
|
+
*/
|
|
97
|
+
getCurrentIndex(): number;
|
|
98
|
+
/**
|
|
99
|
+
* 清空所有快照
|
|
100
|
+
*/
|
|
101
|
+
clearSnapshots(): void;
|
|
102
|
+
/**
|
|
103
|
+
* 设置自动快照开关
|
|
104
|
+
*/
|
|
105
|
+
setAutoSnapshot(enabled: boolean): void;
|
|
106
|
+
/**
|
|
107
|
+
* 跳转到指定快照
|
|
108
|
+
*
|
|
109
|
+
* @param index - 快照索引
|
|
110
|
+
*/
|
|
111
|
+
travelTo(index: number): void;
|
|
112
|
+
/**
|
|
113
|
+
* 跳转到上一个快照
|
|
114
|
+
*/
|
|
115
|
+
stepBack(): void;
|
|
116
|
+
/**
|
|
117
|
+
* 跳转到下一个快照
|
|
118
|
+
*/
|
|
119
|
+
stepForward(): void;
|
|
120
|
+
/**
|
|
121
|
+
* 跳转到最新状态(实时)
|
|
122
|
+
*/
|
|
123
|
+
goToLatest(): void;
|
|
124
|
+
/**
|
|
125
|
+
* 恢复指定快照的状态到实际组件
|
|
126
|
+
*
|
|
127
|
+
* 注意:这是一个破坏性操作,会修改组件的实际状态。
|
|
128
|
+
*/
|
|
129
|
+
restoreSnapshot(index: number): boolean;
|
|
130
|
+
/**
|
|
131
|
+
* 开始自动回放
|
|
132
|
+
*/
|
|
133
|
+
startPlayback(): void;
|
|
134
|
+
/**
|
|
135
|
+
* 暂停回放
|
|
136
|
+
*/
|
|
137
|
+
pausePlayback(): void;
|
|
138
|
+
/**
|
|
139
|
+
* 停止回放
|
|
140
|
+
*/
|
|
141
|
+
stopPlayback(): void;
|
|
142
|
+
/**
|
|
143
|
+
* 设置播放速度
|
|
144
|
+
*/
|
|
145
|
+
setPlaySpeed(speed: number): void;
|
|
146
|
+
/**
|
|
147
|
+
* 获取播放状态
|
|
148
|
+
*/
|
|
149
|
+
getPlayState(): PlayState;
|
|
150
|
+
/**
|
|
151
|
+
* 渲染时间旅行调试器到指定容器
|
|
152
|
+
*/
|
|
153
|
+
render(container: HTMLElement): void;
|
|
154
|
+
/**
|
|
155
|
+
* 渲染时间旅行内容
|
|
156
|
+
*/
|
|
157
|
+
private renderTimeTravel;
|
|
158
|
+
/**
|
|
159
|
+
* 渲染播放控制栏
|
|
160
|
+
*/
|
|
161
|
+
private renderPlaybackControls;
|
|
162
|
+
/**
|
|
163
|
+
* 渲染快照列表
|
|
164
|
+
*/
|
|
165
|
+
private renderSnapshotList;
|
|
166
|
+
/**
|
|
167
|
+
* 创建按钮样式
|
|
168
|
+
*/
|
|
169
|
+
private createButtonStyle;
|
|
170
|
+
/**
|
|
171
|
+
* 创建小按钮样式
|
|
172
|
+
*/
|
|
173
|
+
private createSmallButtonStyle;
|
|
174
|
+
/**
|
|
175
|
+
* 全局更新事件处理
|
|
176
|
+
* 自动创建快照
|
|
177
|
+
*/
|
|
178
|
+
private onUpdate;
|
|
179
|
+
/**
|
|
180
|
+
* 强制刷新
|
|
181
|
+
*/
|
|
182
|
+
refresh(): void;
|
|
183
|
+
/**
|
|
184
|
+
* 销毁调试器
|
|
185
|
+
*/
|
|
186
|
+
destroy(): void;
|
|
187
|
+
}
|
|
188
|
+
export {};
|
|
189
|
+
//# sourceMappingURL=time-travel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"time-travel.d.ts","sourceRoot":"","sources":["../../src/time-travel.ts"],"names":[],"mappings":"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"}
|