nv-log-bw 1.0.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/nv-log-bw.js +718 -0
- package/TEST/index.html +1866 -0
- package/TEST/jsclick.html +1393 -0
- package/TEST/once.html +762 -0
- package/TOOL/cli-creat-html.js +22 -0
- package/TOOL/jsclick.html +675 -0
- package/TOOL/once.html +44 -0
- package/TOOL/tmpl.html +1148 -0
- package/com.sh +3 -0
- package/index.d.ts +489 -0
- package/index.js +1968 -0
- package/package.json +12 -0
package/com.sh
ADDED
package/index.d.ts
ADDED
|
@@ -0,0 +1,489 @@
|
|
|
1
|
+
// Type definitions for nv-log-viewer
|
|
2
|
+
// Project: nv-log-viewer
|
|
3
|
+
// Definitions by: nv-log-viewer
|
|
4
|
+
|
|
5
|
+
export as namespace NvLogViewer;
|
|
6
|
+
|
|
7
|
+
export interface LogEntry {
|
|
8
|
+
/** 日志时间戳 */
|
|
9
|
+
time: number;
|
|
10
|
+
/** 日志类型 */
|
|
11
|
+
type: 'info' | 'success' | 'warning' | 'error' | 'ignore';
|
|
12
|
+
/** 日志消息 */
|
|
13
|
+
message: string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface LogStats {
|
|
17
|
+
/** 总日志数量 */
|
|
18
|
+
total: number;
|
|
19
|
+
/** 信息日志数量 */
|
|
20
|
+
info: number;
|
|
21
|
+
/** 成功日志数量 */
|
|
22
|
+
success: number;
|
|
23
|
+
/** 警告日志数量 */
|
|
24
|
+
warning: number;
|
|
25
|
+
/** 错误日志数量 */
|
|
26
|
+
error: number;
|
|
27
|
+
/** 忽略日志数量 */
|
|
28
|
+
ignore: number;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export interface ImportResult {
|
|
32
|
+
/** 是否成功 */
|
|
33
|
+
success: boolean;
|
|
34
|
+
/** 导入的日志数量 */
|
|
35
|
+
count: number;
|
|
36
|
+
/** 导入的格式 */
|
|
37
|
+
format: 'json' | 'json-with-metadata' | 'text' | 'unknown';
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export interface ExportData {
|
|
41
|
+
/** 导出时间 */
|
|
42
|
+
exportTime: string;
|
|
43
|
+
/** 总日志数量 */
|
|
44
|
+
totalLogs: number;
|
|
45
|
+
/** 日志数组 */
|
|
46
|
+
logs: LogEntry[];
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export interface LogFilterOptions {
|
|
50
|
+
/** 是否显示信息日志 */
|
|
51
|
+
info?: boolean;
|
|
52
|
+
/** 是否显示成功日志 */
|
|
53
|
+
success?: boolean;
|
|
54
|
+
/** 是否显示警告日志 */
|
|
55
|
+
warning?: boolean;
|
|
56
|
+
/** 是否显示错误日志 */
|
|
57
|
+
error?: boolean;
|
|
58
|
+
/** 是否显示忽略日志 */
|
|
59
|
+
ignore?: boolean;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export interface LogViewerConfig {
|
|
63
|
+
/** 最大日志数量,默认 100 */
|
|
64
|
+
maxLogs?: number;
|
|
65
|
+
/** 主题,'dark' 或 'light',默认 'dark' */
|
|
66
|
+
theme?: 'dark' | 'light';
|
|
67
|
+
/** 是否显示时间,默认 true */
|
|
68
|
+
showTime?: boolean;
|
|
69
|
+
/** 时间格式,可选:'HH:mm:ss' | 'HH:mm:ss.ms' | 'relative' | 完整格式,默认 'HH:mm:ss' */
|
|
70
|
+
timeFormat?: 'HH:mm:ss' | 'HH:mm:ss.ms' | 'relative' | string;
|
|
71
|
+
/** 是否自动滚动到底部,默认 true */
|
|
72
|
+
autoScroll?: boolean;
|
|
73
|
+
/** 是否显示统计信息,默认 true */
|
|
74
|
+
showStats?: boolean;
|
|
75
|
+
/** 是否隐藏浮动按钮,默认 false */
|
|
76
|
+
hideButton?: boolean;
|
|
77
|
+
/** 是否自动销毁组件,默认 false */
|
|
78
|
+
autoDestroy?: boolean;
|
|
79
|
+
/** 是否可拖拽,默认 true */
|
|
80
|
+
draggable?: boolean;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export interface LogAddEventDetail {
|
|
84
|
+
/** 添加的日志条目 */
|
|
85
|
+
log: LogEntry;
|
|
86
|
+
/** 总日志数量 */
|
|
87
|
+
total: number;
|
|
88
|
+
/** 统计信息 */
|
|
89
|
+
stats: LogStats;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export interface LogClearEventDetail {
|
|
93
|
+
/** 清除的日志数量 */
|
|
94
|
+
clearedCount: number;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export interface LogImportEventDetail {
|
|
98
|
+
/** 导入的日志数量 */
|
|
99
|
+
count: number;
|
|
100
|
+
/** 导入的格式 */
|
|
101
|
+
format: 'json' | 'json-with-metadata' | 'text' | 'unknown';
|
|
102
|
+
/** 导入的日志数组 */
|
|
103
|
+
logs: LogEntry[];
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export interface LogToggleEventDetail {
|
|
107
|
+
/** 日志是否可见 */
|
|
108
|
+
visible: boolean;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* 日志查看器自定义元素
|
|
113
|
+
*
|
|
114
|
+
* @example
|
|
115
|
+
* ```html
|
|
116
|
+
* <nv-log-viewer></nv-log-viewer>
|
|
117
|
+
*
|
|
118
|
+
* <script>
|
|
119
|
+
* const viewer = document.querySelector('nv-log-viewer');
|
|
120
|
+
* viewer.addLog('这是一条信息日志', 'info');
|
|
121
|
+
* viewer.addLog('这是一条成功日志', 'success');
|
|
122
|
+
* viewer.addLog('这是一条警告日志', 'warning');
|
|
123
|
+
* viewer.addLog('这是一条错误日志', 'error');
|
|
124
|
+
* </script>
|
|
125
|
+
* ```
|
|
126
|
+
*
|
|
127
|
+
* @example
|
|
128
|
+
* ```javascript
|
|
129
|
+
* // 以编程方式创建
|
|
130
|
+
* const viewer = document.createElement('nv-log-viewer');
|
|
131
|
+
* viewer.setAttribute('theme', 'light');
|
|
132
|
+
* viewer.setAttribute('max-logs', '1000');
|
|
133
|
+
* document.body.appendChild(viewer);
|
|
134
|
+
* ```
|
|
135
|
+
*/
|
|
136
|
+
declare class NvLogViewer extends HTMLElement {
|
|
137
|
+
/**
|
|
138
|
+
* 创建日志查看器实例
|
|
139
|
+
*/
|
|
140
|
+
constructor();
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* 添加日志条目
|
|
144
|
+
*
|
|
145
|
+
* @param message 日志消息或日志对象
|
|
146
|
+
* @param type 日志类型,默认 'info'
|
|
147
|
+
* @param timestamp 时间戳,默认当前时间
|
|
148
|
+
*
|
|
149
|
+
* @example
|
|
150
|
+
* ```javascript
|
|
151
|
+
* // 添加简单日志
|
|
152
|
+
* viewer.addLog('任务开始执行');
|
|
153
|
+
* viewer.addLog('任务执行成功', 'success');
|
|
154
|
+
*
|
|
155
|
+
* // 添加对象日志
|
|
156
|
+
* viewer.addLog({
|
|
157
|
+
* message: '任务完成',
|
|
158
|
+
* type: 'success',
|
|
159
|
+
* time: Date.now()
|
|
160
|
+
* });
|
|
161
|
+
*
|
|
162
|
+
* // 添加带时间戳的日志
|
|
163
|
+
* viewer.addLog('定时日志', 'info', Date.now() - 3600000);
|
|
164
|
+
* ```
|
|
165
|
+
*/
|
|
166
|
+
addLog(message: string | object, type?: 'info' | 'success' | 'warning' | 'error' | 'ignore', timestamp?: number): void;
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* 清空所有日志
|
|
170
|
+
*
|
|
171
|
+
* @example
|
|
172
|
+
* ```javascript
|
|
173
|
+
* viewer.clearLogs();
|
|
174
|
+
* ```
|
|
175
|
+
*/
|
|
176
|
+
clearLogs(): void;
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* 切换日志显示/隐藏
|
|
180
|
+
*
|
|
181
|
+
* @example
|
|
182
|
+
* ```javascript
|
|
183
|
+
* viewer.toggleVisibility();
|
|
184
|
+
* ```
|
|
185
|
+
*/
|
|
186
|
+
toggleVisibility(): void;
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* 打开日志查看器窗口
|
|
190
|
+
*
|
|
191
|
+
* @example
|
|
192
|
+
* ```javascript
|
|
193
|
+
* viewer.open();
|
|
194
|
+
* ```
|
|
195
|
+
*/
|
|
196
|
+
open(): void;
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* 关闭日志查看器窗口
|
|
200
|
+
*
|
|
201
|
+
* @example
|
|
202
|
+
* ```javascript
|
|
203
|
+
* viewer.close();
|
|
204
|
+
* ```
|
|
205
|
+
*/
|
|
206
|
+
clos(): void;
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* 导出日志到文件
|
|
210
|
+
*
|
|
211
|
+
* @param format 导出格式,'json' 或 'text',默认 'json'
|
|
212
|
+
*
|
|
213
|
+
* @example
|
|
214
|
+
* ```javascript
|
|
215
|
+
* // 导出为 JSON
|
|
216
|
+
* viewer.exportLogs('json');
|
|
217
|
+
*
|
|
218
|
+
* // 导出为文本
|
|
219
|
+
* viewer.exportLogs('text');
|
|
220
|
+
* ```
|
|
221
|
+
*/
|
|
222
|
+
exportLogs(format?: 'json' | 'text'): void;
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* 从内容导入日志
|
|
226
|
+
*
|
|
227
|
+
* @param content 日志内容
|
|
228
|
+
* @param format 日志格式,'auto' | 'json' | 'text',默认 'auto'
|
|
229
|
+
* @returns 导入结果
|
|
230
|
+
*
|
|
231
|
+
* @example
|
|
232
|
+
* ```javascript
|
|
233
|
+
* // 导入 JSON
|
|
234
|
+
* const jsonContent = JSON.stringify([
|
|
235
|
+
* { time: Date.now(), type: 'info', message: '日志1' },
|
|
236
|
+
* { time: Date.now(), type: 'error', message: '日志2' }
|
|
237
|
+
* ]);
|
|
238
|
+
* viewer.importLogs(jsonContent, 'json');
|
|
239
|
+
*
|
|
240
|
+
* // 导入文本
|
|
241
|
+
* const textContent = `[2024-01-01 12:00:00] [INFO] 日志1
|
|
242
|
+
* [2024-01-01 12:00:01] [ERROR] 日志2`;
|
|
243
|
+
* viewer.importLogs(textContent, 'text');
|
|
244
|
+
*
|
|
245
|
+
* // 自动检测格式
|
|
246
|
+
* viewer.importLogs(someContent);
|
|
247
|
+
* ```
|
|
248
|
+
*/
|
|
249
|
+
importLogs(content: string, format?: 'auto' | 'json' | 'text'): Promise<ImportResult>;
|
|
250
|
+
|
|
251
|
+
/**
|
|
252
|
+
* 复制所有日志到剪贴板
|
|
253
|
+
*
|
|
254
|
+
* @example
|
|
255
|
+
* ```javascript
|
|
256
|
+
* viewer.copyLogs();
|
|
257
|
+
* ```
|
|
258
|
+
*/
|
|
259
|
+
copyLogs(): Promise<void>;
|
|
260
|
+
|
|
261
|
+
/**
|
|
262
|
+
* 获取所有日志
|
|
263
|
+
*
|
|
264
|
+
* @returns 日志数组
|
|
265
|
+
*
|
|
266
|
+
* @example
|
|
267
|
+
* ```javascript
|
|
268
|
+
* const logs = viewer.getLogs();
|
|
269
|
+
* console.log('当前日志数量:', logs.length);
|
|
270
|
+
* ```
|
|
271
|
+
*/
|
|
272
|
+
getLogs(): LogEntry[];
|
|
273
|
+
|
|
274
|
+
/**
|
|
275
|
+
* 获取过滤后的日志
|
|
276
|
+
*
|
|
277
|
+
* @param types 日志类型或类型数组
|
|
278
|
+
* @returns 过滤后的日志数组
|
|
279
|
+
*
|
|
280
|
+
* @example
|
|
281
|
+
* ```javascript
|
|
282
|
+
* // 获取所有错误日志
|
|
283
|
+
* const errors = viewer.getLogsByType('error');
|
|
284
|
+
*
|
|
285
|
+
* // 获取错误和警告日志
|
|
286
|
+
* const errorsAndWarnings = viewer.getLogsByType(['error', 'warning']);
|
|
287
|
+
* ```
|
|
288
|
+
*/
|
|
289
|
+
getLogsByType(types: string | string[]): LogEntry[];
|
|
290
|
+
|
|
291
|
+
/**
|
|
292
|
+
* 设置最大日志数量
|
|
293
|
+
*
|
|
294
|
+
* @param max 最大数量
|
|
295
|
+
*
|
|
296
|
+
* @example
|
|
297
|
+
* ```javascript
|
|
298
|
+
* // 设置最大保存 1000 条日志
|
|
299
|
+
* viewer.setMaxLogs(1000);
|
|
300
|
+
* ```
|
|
301
|
+
*/
|
|
302
|
+
setMaxLogs(max: number): void;
|
|
303
|
+
|
|
304
|
+
/**
|
|
305
|
+
* 设置主题
|
|
306
|
+
*
|
|
307
|
+
* @param theme 主题,'dark' 或 'light'
|
|
308
|
+
*
|
|
309
|
+
* @example
|
|
310
|
+
* ```javascript
|
|
311
|
+
* // 设置为亮色主题
|
|
312
|
+
* viewer.setTheme('light');
|
|
313
|
+
*
|
|
314
|
+
* // 设置为暗色主题
|
|
315
|
+
* viewer.setTheme('dark');
|
|
316
|
+
* ```
|
|
317
|
+
*/
|
|
318
|
+
setTheme(theme: 'dark' | 'light'): void;
|
|
319
|
+
|
|
320
|
+
/**
|
|
321
|
+
* 设置是否显示时间
|
|
322
|
+
*
|
|
323
|
+
* @param show 是否显示
|
|
324
|
+
*
|
|
325
|
+
* @example
|
|
326
|
+
* ```javascript
|
|
327
|
+
* // 显示时间
|
|
328
|
+
* viewer.setShowTime(true);
|
|
329
|
+
*
|
|
330
|
+
* // 隐藏时间
|
|
331
|
+
* viewer.setShowTime(false);
|
|
332
|
+
* ```
|
|
333
|
+
*/
|
|
334
|
+
setShowTime(show: boolean): void;
|
|
335
|
+
|
|
336
|
+
/**
|
|
337
|
+
* 设置时间格式
|
|
338
|
+
*
|
|
339
|
+
* @param format 时间格式字符串
|
|
340
|
+
*
|
|
341
|
+
* @example
|
|
342
|
+
* ```javascript
|
|
343
|
+
* // 设置只显示时间
|
|
344
|
+
* viewer.setTimeFormat('HH:mm:ss');
|
|
345
|
+
*
|
|
346
|
+
* // 设置带毫秒的时间
|
|
347
|
+
* viewer.setTimeFormat('HH:mm:ss.ms');
|
|
348
|
+
*
|
|
349
|
+
* // 设置相对时间
|
|
350
|
+
* viewer.setTimeFormat('relative');
|
|
351
|
+
*
|
|
352
|
+
* // 设置完整时间
|
|
353
|
+
* viewer.setTimeFormat('YYYY-MM-DD HH:mm:ss');
|
|
354
|
+
* ```
|
|
355
|
+
*/
|
|
356
|
+
setTimeFormat(format: string): void;
|
|
357
|
+
|
|
358
|
+
/**
|
|
359
|
+
* 设置是否自动滚动
|
|
360
|
+
*
|
|
361
|
+
* @param autoScroll 是否自动滚动
|
|
362
|
+
*
|
|
363
|
+
* @example
|
|
364
|
+
* ```javascript
|
|
365
|
+
* // 启用自动滚动
|
|
366
|
+
* viewer.setAutoScroll(true);
|
|
367
|
+
*
|
|
368
|
+
* // 禁用自动滚动
|
|
369
|
+
* viewer.setAutoScroll(false);
|
|
370
|
+
* ```
|
|
371
|
+
*/
|
|
372
|
+
setAutoScroll(autoScroll: boolean): void;
|
|
373
|
+
|
|
374
|
+
/**
|
|
375
|
+
* 设置是否显示统计信息
|
|
376
|
+
*
|
|
377
|
+
* @param show 是否显示
|
|
378
|
+
*
|
|
379
|
+
* @example
|
|
380
|
+
* ```javascript
|
|
381
|
+
* // 显示统计
|
|
382
|
+
* viewer.setShowStats(true);
|
|
383
|
+
*
|
|
384
|
+
* // 隐藏统计
|
|
385
|
+
* viewer.setShowStats(false);
|
|
386
|
+
* ```
|
|
387
|
+
*/
|
|
388
|
+
setShowStats(show: boolean): void;
|
|
389
|
+
|
|
390
|
+
/**
|
|
391
|
+
* 设置是否隐藏浮动按钮
|
|
392
|
+
*
|
|
393
|
+
* @param hide 是否隐藏
|
|
394
|
+
*
|
|
395
|
+
* @example
|
|
396
|
+
* ```javascript
|
|
397
|
+
* // 隐藏浮动按钮
|
|
398
|
+
* viewer.setHideButton(true);
|
|
399
|
+
*
|
|
400
|
+
* // 显示浮动按钮
|
|
401
|
+
* viewer.setHideButton(false);
|
|
402
|
+
* ```
|
|
403
|
+
*/
|
|
404
|
+
setHideButton(hide: boolean): void;
|
|
405
|
+
|
|
406
|
+
/**
|
|
407
|
+
* 设置是否自动销毁
|
|
408
|
+
*
|
|
409
|
+
* @param autoDestroy 是否自动销毁
|
|
410
|
+
*
|
|
411
|
+
* @example
|
|
412
|
+
* ```javascript
|
|
413
|
+
* // 启用自动销毁
|
|
414
|
+
* viewer.setAutoDestroy(true);
|
|
415
|
+
*
|
|
416
|
+
* // 禁用自动销毁
|
|
417
|
+
* viewer.setAutoDestroy(false);
|
|
418
|
+
* ```
|
|
419
|
+
*/
|
|
420
|
+
setAutoDestroy(autoDestroy: boolean): void;
|
|
421
|
+
|
|
422
|
+
/**
|
|
423
|
+
* 设置是否启用拖拽
|
|
424
|
+
*
|
|
425
|
+
* @param draggable 是否启用
|
|
426
|
+
*
|
|
427
|
+
* @example
|
|
428
|
+
* ```javascript
|
|
429
|
+
* // 启用拖拽
|
|
430
|
+
* viewer.setDraggable(true);
|
|
431
|
+
*
|
|
432
|
+
* // 禁用拖拽
|
|
433
|
+
* viewer.setDraggable(false);
|
|
434
|
+
* ```
|
|
435
|
+
*/
|
|
436
|
+
setDraggable(draggable: boolean): void;
|
|
437
|
+
|
|
438
|
+
// 事件处理
|
|
439
|
+
addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
|
|
440
|
+
addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
|
|
441
|
+
removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
|
|
442
|
+
removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
/**
|
|
446
|
+
* 日志添加事件
|
|
447
|
+
*/
|
|
448
|
+
export interface LogAddEvent extends CustomEvent<LogAddEventDetail> {
|
|
449
|
+
type: 'nv-log-add';
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
/**
|
|
453
|
+
* 日志清除事件
|
|
454
|
+
*/
|
|
455
|
+
export interface LogClearEvent extends CustomEvent<LogClearEventDetail> {
|
|
456
|
+
type: 'nv-log-clear';
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
/**
|
|
460
|
+
* 日志导入事件
|
|
461
|
+
*/
|
|
462
|
+
export interface LogImportEvent extends CustomEvent<LogImportEventDetail> {
|
|
463
|
+
type: 'nv-log-import';
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
/**
|
|
467
|
+
* 日志显示切换事件
|
|
468
|
+
*/
|
|
469
|
+
export interface LogToggleEvent extends CustomEvent<LogToggleEventDetail> {
|
|
470
|
+
type: 'nv-log-toggle';
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
/**
|
|
474
|
+
* 日志查看器事件映射
|
|
475
|
+
*/
|
|
476
|
+
export interface NvLogViewerEventMap extends HTMLElementEventMap {
|
|
477
|
+
'nv-log-add': LogAddEvent;
|
|
478
|
+
'nv-log-clear': LogClearEvent;
|
|
479
|
+
'nv-log-import': LogImportEvent;
|
|
480
|
+
'nv-log-toggle': LogToggleEvent;
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
declare global {
|
|
484
|
+
interface HTMLElementTagNameMap {
|
|
485
|
+
'nv-log-viewer': NvLogViewer;
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
interface HTMLElementEventMap extends NvLogViewerEventMap {}
|
|
489
|
+
}
|