@lytjs/plugin-logger 5.0.0 → 6.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/index.cjs +200 -2
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +76 -0
- package/dist/index.d.ts +76 -0
- package/dist/index.mjs +194 -2
- package/dist/index.mjs.map +1 -0
- package/package.json +34 -24
- package/README.md +0 -135
- package/dist/types/index.d.ts +0 -67
- package/dist/types/index.d.ts.map +0 -1
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,200 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var core = require('@lytjs/core');
|
|
6
|
+
var reactivity = require('@lytjs/reactivity');
|
|
7
|
+
|
|
8
|
+
// src/index.ts
|
|
9
|
+
var LOG_LEVELS = {
|
|
10
|
+
debug: 0,
|
|
11
|
+
info: 1,
|
|
12
|
+
warn: 2,
|
|
13
|
+
error: 3,
|
|
14
|
+
silent: 4
|
|
15
|
+
};
|
|
16
|
+
var defaultFormatter = (entry) => {
|
|
17
|
+
const timestamp = new Date(entry.timestamp).toISOString();
|
|
18
|
+
const modulePart = entry.module ? ` [${entry.module}]` : "";
|
|
19
|
+
return `[${timestamp}] ${entry.level.toUpperCase()}${modulePart}: ${entry.message}`;
|
|
20
|
+
};
|
|
21
|
+
function createLogger(options = {}) {
|
|
22
|
+
const {
|
|
23
|
+
level = "info",
|
|
24
|
+
enablePersistence = false,
|
|
25
|
+
storageKey = "lyt-logs",
|
|
26
|
+
maxLogs = 1e3,
|
|
27
|
+
enablePerformance = true,
|
|
28
|
+
formatter = defaultFormatter
|
|
29
|
+
} = options;
|
|
30
|
+
const levelSignal = reactivity.signal(level);
|
|
31
|
+
const logsSignal = reactivity.signal([]);
|
|
32
|
+
const performanceMetricsSignal = reactivity.signal([]);
|
|
33
|
+
const pendingMeasures = /* @__PURE__ */ new Map();
|
|
34
|
+
function shouldLog(level2) {
|
|
35
|
+
return LOG_LEVELS[level2] >= LOG_LEVELS[levelSignal()];
|
|
36
|
+
}
|
|
37
|
+
function addLog(level2, message, data, module) {
|
|
38
|
+
if (!shouldLog(level2)) return;
|
|
39
|
+
const entry = {
|
|
40
|
+
timestamp: Date.now(),
|
|
41
|
+
level: level2,
|
|
42
|
+
message,
|
|
43
|
+
data,
|
|
44
|
+
module
|
|
45
|
+
};
|
|
46
|
+
const newLogs = [...logsSignal(), entry];
|
|
47
|
+
if (newLogs.length > maxLogs) {
|
|
48
|
+
newLogs.shift();
|
|
49
|
+
}
|
|
50
|
+
logsSignal.set(newLogs);
|
|
51
|
+
if (enablePersistence) {
|
|
52
|
+
saveLogs();
|
|
53
|
+
}
|
|
54
|
+
outputLog(entry);
|
|
55
|
+
}
|
|
56
|
+
function outputLog(entry) {
|
|
57
|
+
const formattedMessage = formatter(entry);
|
|
58
|
+
switch (entry.level) {
|
|
59
|
+
case "debug":
|
|
60
|
+
console.debug(formattedMessage, entry.data || "");
|
|
61
|
+
break;
|
|
62
|
+
case "info":
|
|
63
|
+
console.info(formattedMessage, entry.data || "");
|
|
64
|
+
break;
|
|
65
|
+
case "warn":
|
|
66
|
+
console.warn(formattedMessage, entry.data || "");
|
|
67
|
+
break;
|
|
68
|
+
case "error":
|
|
69
|
+
console.error(formattedMessage, entry.data || "");
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
function saveLogs() {
|
|
74
|
+
if (typeof localStorage === "undefined") return;
|
|
75
|
+
try {
|
|
76
|
+
localStorage.setItem(storageKey, JSON.stringify(logsSignal()));
|
|
77
|
+
} catch {
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
function loadLogs() {
|
|
81
|
+
if (typeof localStorage === "undefined") return [];
|
|
82
|
+
try {
|
|
83
|
+
const stored = localStorage.getItem(storageKey);
|
|
84
|
+
return stored ? JSON.parse(stored) : [];
|
|
85
|
+
} catch {
|
|
86
|
+
return [];
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
function debug(message, data, module) {
|
|
90
|
+
addLog("debug", message, data, module);
|
|
91
|
+
}
|
|
92
|
+
function info(message, data, module) {
|
|
93
|
+
addLog("info", message, data, module);
|
|
94
|
+
}
|
|
95
|
+
function warn(message, data, module) {
|
|
96
|
+
addLog("warn", message, data, module);
|
|
97
|
+
}
|
|
98
|
+
function error(message, data, module) {
|
|
99
|
+
addLog("error", message, data, module);
|
|
100
|
+
}
|
|
101
|
+
function setLevel(newLevel) {
|
|
102
|
+
levelSignal.set(newLevel);
|
|
103
|
+
}
|
|
104
|
+
function startMeasure(name, data) {
|
|
105
|
+
if (!enablePerformance) return;
|
|
106
|
+
const metric = {
|
|
107
|
+
name,
|
|
108
|
+
startTime: Date.now(),
|
|
109
|
+
data
|
|
110
|
+
};
|
|
111
|
+
pendingMeasures.set(name, metric);
|
|
112
|
+
debug(`Performance measure started: ${name}`, data, "performance");
|
|
113
|
+
}
|
|
114
|
+
function endMeasure(name) {
|
|
115
|
+
if (!enablePerformance) return null;
|
|
116
|
+
const metric = pendingMeasures.get(name);
|
|
117
|
+
if (!metric) {
|
|
118
|
+
warn(`Performance measure "${name}" not found`, void 0, "performance");
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
metric.endTime = Date.now();
|
|
122
|
+
metric.duration = metric.endTime - metric.startTime;
|
|
123
|
+
pendingMeasures.delete(name);
|
|
124
|
+
const newMetrics = [...performanceMetricsSignal(), metric];
|
|
125
|
+
performanceMetricsSignal.set(newMetrics);
|
|
126
|
+
info(`Performance measure "${name}": ${metric.duration}ms`, metric, "performance");
|
|
127
|
+
return metric;
|
|
128
|
+
}
|
|
129
|
+
function clear() {
|
|
130
|
+
logsSignal.set([]);
|
|
131
|
+
performanceMetricsSignal.set([]);
|
|
132
|
+
pendingMeasures.clear();
|
|
133
|
+
if (enablePersistence && typeof localStorage !== "undefined") {
|
|
134
|
+
try {
|
|
135
|
+
localStorage.removeItem(storageKey);
|
|
136
|
+
} catch {
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
function getMetrics() {
|
|
141
|
+
return performanceMetricsSignal();
|
|
142
|
+
}
|
|
143
|
+
function init() {
|
|
144
|
+
if (enablePersistence) {
|
|
145
|
+
const storedLogs = loadLogs();
|
|
146
|
+
if (storedLogs.length > 0) {
|
|
147
|
+
logsSignal.set(storedLogs);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
init();
|
|
152
|
+
return {
|
|
153
|
+
get level() {
|
|
154
|
+
return levelSignal();
|
|
155
|
+
},
|
|
156
|
+
get logs() {
|
|
157
|
+
return logsSignal();
|
|
158
|
+
},
|
|
159
|
+
debug,
|
|
160
|
+
info,
|
|
161
|
+
warn,
|
|
162
|
+
error,
|
|
163
|
+
setLevel,
|
|
164
|
+
startMeasure,
|
|
165
|
+
endMeasure,
|
|
166
|
+
clear,
|
|
167
|
+
getMetrics
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
var pluginLogger = core.definePlugin({
|
|
171
|
+
name: "logger",
|
|
172
|
+
version: "6.0.0",
|
|
173
|
+
description: "LytJS official logger plugin with log levels, persistence, and performance tracing support",
|
|
174
|
+
author: "LytJS Team",
|
|
175
|
+
keywords: ["lytjs", "logger", "logging", "debug", "performance"],
|
|
176
|
+
schema: {
|
|
177
|
+
type: "object",
|
|
178
|
+
object: {
|
|
179
|
+
properties: {
|
|
180
|
+
level: { type: "string", default: "info" },
|
|
181
|
+
enablePersistence: { type: "boolean", default: false },
|
|
182
|
+
storageKey: { type: "string", default: "lyt-logs" },
|
|
183
|
+
maxLogs: { type: "number", default: 1e3 },
|
|
184
|
+
enablePerformance: { type: "boolean", default: true }
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
},
|
|
188
|
+
install(app, options) {
|
|
189
|
+
const logger = createLogger(options);
|
|
190
|
+
app.config.globalProperties.$logger = logger;
|
|
191
|
+
app.provide("lyt-logger", logger);
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
var index_default = pluginLogger;
|
|
195
|
+
|
|
196
|
+
exports.LOG_LEVELS = LOG_LEVELS;
|
|
197
|
+
exports.createLogger = createLogger;
|
|
198
|
+
exports.default = index_default;
|
|
199
|
+
//# sourceMappingURL=index.cjs.map
|
|
200
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"names":["signal","level","definePlugin"],"mappings":";;;;;;;;AAYA,IAAM,UAAA,GAAuC;AAAA,EAC3C,KAAA,EAAO,CAAA;AAAA,EACP,IAAA,EAAM,CAAA;AAAA,EACN,IAAA,EAAM,CAAA;AAAA,EACN,KAAA,EAAO,CAAA;AAAA,EACP,MAAA,EAAQ;AACV;AAEA,IAAM,gBAAA,GAAmB,CAAC,KAAA,KAA4B;AACpD,EAAA,MAAM,YAAY,IAAI,IAAA,CAAK,KAAA,CAAM,SAAS,EAAE,WAAA,EAAY;AACxD,EAAA,MAAM,aAAa,KAAA,CAAM,MAAA,GAAS,CAAA,EAAA,EAAK,KAAA,CAAM,MAAM,CAAA,CAAA,CAAA,GAAM,EAAA;AACzD,EAAA,OAAO,CAAA,CAAA,EAAI,SAAS,CAAA,EAAA,EAAK,KAAA,CAAM,KAAA,CAAM,WAAA,EAAa,CAAA,EAAG,UAAU,CAAA,EAAA,EAAK,KAAA,CAAM,OAAO,CAAA,CAAA;AACnF,CAAA;AAEA,SAAS,YAAA,CAAa,OAAA,GAAyB,EAAC,EAAmB;AACjE,EAAA,MAAM;AAAA,IACJ,KAAA,GAAQ,MAAA;AAAA,IACR,iBAAA,GAAoB,KAAA;AAAA,IACpB,UAAA,GAAa,UAAA;AAAA,IACb,OAAA,GAAU,GAAA;AAAA,IACV,iBAAA,GAAoB,IAAA;AAAA,IACpB,SAAA,GAAY;AAAA,GACd,GAAI,OAAA;AAEJ,EAAA,MAAM,WAAA,GAAcA,kBAAiB,KAAK,CAAA;AAC1C,EAAA,MAAM,UAAA,GAAaA,iBAAA,CAAmB,EAAE,CAAA;AACxC,EAAA,MAAM,wBAAA,GAA2BA,iBAAA,CAA4B,EAAE,CAAA;AAC/D,EAAA,MAAM,eAAA,uBAAsB,GAAA,EAA+B;AAE3D,EAAA,SAAS,UAAUC,MAAAA,EAA0B;AAC3C,IAAA,OAAO,UAAA,CAAWA,MAAK,CAAA,IAAK,UAAA,CAAW,aAAa,CAAA;AAAA,EACtD;AAEA,EAAA,SAAS,MAAA,CAAOA,MAAAA,EAAiB,OAAA,EAAiB,IAAA,EAAgB,MAAA,EAAiB;AACjF,IAAA,IAAI,CAAC,SAAA,CAAUA,MAAK,CAAA,EAAG;AAEvB,IAAA,MAAM,KAAA,GAAkB;AAAA,MACtB,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,MACpB,KAAA,EAAAA,MAAAA;AAAA,MACA,OAAA;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,MAAM,OAAA,GAAU,CAAC,GAAG,UAAA,IAAc,KAAK,CAAA;AACvC,IAAA,IAAI,OAAA,CAAQ,SAAS,OAAA,EAAS;AAC5B,MAAA,OAAA,CAAQ,KAAA,EAAM;AAAA,IAChB;AACA,IAAA,UAAA,CAAW,IAAI,OAAO,CAAA;AAEtB,IAAA,IAAI,iBAAA,EAAmB;AACrB,MAAA,QAAA,EAAS;AAAA,IACX;AAEA,IAAA,SAAA,CAAU,KAAK,CAAA;AAAA,EACjB;AAEA,EAAA,SAAS,UAAU,KAAA,EAAiB;AAClC,IAAA,MAAM,gBAAA,GAAmB,UAAU,KAAK,CAAA;AAExC,IAAA,QAAQ,MAAM,KAAA;AAAO,MACnB,KAAK,OAAA;AACH,QAAA,OAAA,CAAQ,KAAA,CAAM,gBAAA,EAAkB,KAAA,CAAM,IAAA,IAAQ,EAAE,CAAA;AAChD,QAAA;AAAA,MACF,KAAK,MAAA;AACH,QAAA,OAAA,CAAQ,IAAA,CAAK,gBAAA,EAAkB,KAAA,CAAM,IAAA,IAAQ,EAAE,CAAA;AAC/C,QAAA;AAAA,MACF,KAAK,MAAA;AACH,QAAA,OAAA,CAAQ,IAAA,CAAK,gBAAA,EAAkB,KAAA,CAAM,IAAA,IAAQ,EAAE,CAAA;AAC/C,QAAA;AAAA,MACF,KAAK,OAAA;AACH,QAAA,OAAA,CAAQ,KAAA,CAAM,gBAAA,EAAkB,KAAA,CAAM,IAAA,IAAQ,EAAE,CAAA;AAChD,QAAA;AAAA;AACJ,EACF;AAEA,EAAA,SAAS,QAAA,GAAW;AAClB,IAAA,IAAI,OAAO,iBAAiB,WAAA,EAAa;AACzC,IAAA,IAAI;AACF,MAAA,YAAA,CAAa,QAAQ,UAAA,EAAY,IAAA,CAAK,SAAA,CAAU,UAAA,EAAY,CAAC,CAAA;AAAA,IAC/D,CAAA,CAAA,MAAQ;AAAA,IACR;AAAA,EACF;AAEA,EAAA,SAAS,QAAA,GAAuB;AAC9B,IAAA,IAAI,OAAO,YAAA,KAAiB,WAAA,EAAa,OAAO,EAAC;AACjD,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,YAAA,CAAa,OAAA,CAAQ,UAAU,CAAA;AAC9C,MAAA,OAAO,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,MAAM,IAAI,EAAC;AAAA,IACxC,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,EAAC;AAAA,IACV;AAAA,EACF;AAEA,EAAA,SAAS,KAAA,CAAM,OAAA,EAAiB,IAAA,EAAgB,MAAA,EAAiB;AAC/D,IAAA,MAAA,CAAO,OAAA,EAAS,OAAA,EAAS,IAAA,EAAM,MAAM,CAAA;AAAA,EACvC;AAEA,EAAA,SAAS,IAAA,CAAK,OAAA,EAAiB,IAAA,EAAgB,MAAA,EAAiB;AAC9D,IAAA,MAAA,CAAO,MAAA,EAAQ,OAAA,EAAS,IAAA,EAAM,MAAM,CAAA;AAAA,EACtC;AAEA,EAAA,SAAS,IAAA,CAAK,OAAA,EAAiB,IAAA,EAAgB,MAAA,EAAiB;AAC9D,IAAA,MAAA,CAAO,MAAA,EAAQ,OAAA,EAAS,IAAA,EAAM,MAAM,CAAA;AAAA,EACtC;AAEA,EAAA,SAAS,KAAA,CAAM,OAAA,EAAiB,IAAA,EAAgB,MAAA,EAAiB;AAC/D,IAAA,MAAA,CAAO,OAAA,EAAS,OAAA,EAAS,IAAA,EAAM,MAAM,CAAA;AAAA,EACvC;AAEA,EAAA,SAAS,SAAS,QAAA,EAAoB;AACpC,IAAA,WAAA,CAAY,IAAI,QAAQ,CAAA;AAAA,EAC1B;AAEA,EAAA,SAAS,YAAA,CAAa,MAAc,IAAA,EAAgB;AAClD,IAAA,IAAI,CAAC,iBAAA,EAAmB;AAExB,IAAA,MAAM,MAAA,GAA4B;AAAA,MAChC,IAAA;AAAA,MACA,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,MACpB;AAAA,KACF;AACA,IAAA,eAAA,CAAgB,GAAA,CAAI,MAAM,MAAM,CAAA;AAChC,IAAA,KAAA,CAAM,CAAA,6BAAA,EAAgC,IAAI,CAAA,CAAA,EAAI,IAAA,EAAM,aAAa,CAAA;AAAA,EACnE;AAEA,EAAA,SAAS,WAAW,IAAA,EAAwC;AAC1D,IAAA,IAAI,CAAC,mBAAmB,OAAO,IAAA;AAE/B,IAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,GAAA,CAAI,IAAI,CAAA;AACvC,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,IAAA,CAAK,CAAA,qBAAA,EAAwB,IAAI,CAAA,WAAA,CAAA,EAAe,MAAA,EAAW,aAAa,CAAA;AACxE,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAA,CAAO,OAAA,GAAU,KAAK,GAAA,EAAI;AAC1B,IAAA,MAAA,CAAO,QAAA,GAAW,MAAA,CAAO,OAAA,GAAU,MAAA,CAAO,SAAA;AAE1C,IAAA,eAAA,CAAgB,OAAO,IAAI,CAAA;AAE3B,IAAA,MAAM,UAAA,GAAa,CAAC,GAAG,wBAAA,IAA4B,MAAM,CAAA;AACzD,IAAA,wBAAA,CAAyB,IAAI,UAAU,CAAA;AAEvC,IAAA,IAAA,CAAK,wBAAwB,IAAI,CAAA,GAAA,EAAM,OAAO,QAAQ,CAAA,EAAA,CAAA,EAAM,QAAQ,aAAa,CAAA;AAEjF,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,SAAS,KAAA,GAAQ;AACf,IAAA,UAAA,CAAW,GAAA,CAAI,EAAE,CAAA;AACjB,IAAA,wBAAA,CAAyB,GAAA,CAAI,EAAE,CAAA;AAC/B,IAAA,eAAA,CAAgB,KAAA,EAAM;AACtB,IAAA,IAAI,iBAAA,IAAqB,OAAO,YAAA,KAAiB,WAAA,EAAa;AAC5D,MAAA,IAAI;AACF,QAAA,YAAA,CAAa,WAAW,UAAU,CAAA;AAAA,MACpC,CAAA,CAAA,MAAQ;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,EAAA,SAAS,UAAA,GAAkC;AACzC,IAAA,OAAO,wBAAA,EAAyB;AAAA,EAClC;AAEA,EAAA,SAAS,IAAA,GAAO;AACd,IAAA,IAAI,iBAAA,EAAmB;AACrB,MAAA,MAAM,aAAa,QAAA,EAAS;AAC5B,MAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,QAAA,UAAA,CAAW,IAAI,UAAU,CAAA;AAAA,MAC3B;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAA,EAAK;AAEL,EAAA,OAAO;AAAA,IACL,IAAI,KAAA,GAAQ;AACV,MAAA,OAAO,WAAA,EAAY;AAAA,IACrB,CAAA;AAAA,IACA,IAAI,IAAA,GAAO;AACT,MAAA,OAAO,UAAA,EAAW;AAAA,IACpB,CAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAA;AAAA,IACA,YAAA;AAAA,IACA,UAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF;AACF;AAEA,IAAM,eAAeC,iBAAA,CAAa;AAAA,EAChC,IAAA,EAAM,QAAA;AAAA,EACN,OAAA,EAAS,OAAA;AAAA,EACT,WAAA,EAAa,4FAAA;AAAA,EACb,MAAA,EAAQ,YAAA;AAAA,EACR,UAAU,CAAC,OAAA,EAAS,QAAA,EAAU,SAAA,EAAW,SAAS,aAAa,CAAA;AAAA,EAC/D,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,QAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,UAAA,EAAY;AAAA,QACV,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAU,SAAS,MAAA,EAAO;AAAA,QACzC,iBAAA,EAAmB,EAAE,IAAA,EAAM,SAAA,EAAW,SAAS,KAAA,EAAM;AAAA,QACrD,UAAA,EAAY,EAAE,IAAA,EAAM,QAAA,EAAU,SAAS,UAAA,EAAW;AAAA,QAClD,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA,EAAU,SAAS,GAAA,EAAK;AAAA,QACzC,iBAAA,EAAmB,EAAE,IAAA,EAAM,SAAA,EAAW,SAAS,IAAA;AAAK;AACtD;AACF,GACF;AAAA,EACA,OAAA,CAAQ,KAAK,OAAA,EAAS;AACpB,IAAA,MAAM,MAAA,GAAS,aAAa,OAAwB,CAAA;AAEpD,IAAA,GAAA,CAAI,MAAA,CAAO,iBAAiB,OAAA,GAAU,MAAA;AAEtC,IAAA,GAAA,CAAI,OAAA,CAAQ,cAAc,MAAM,CAAA;AAAA,EAClC;AACF,CAAC,CAAA;AAED,IAAO,aAAA,GAAQ","file":"index.cjs","sourcesContent":["/**\r\n * @lytjs/plugin-logger\r\n *\r\n * LytJS official logger plugin with log levels, persistence, and performance tracing support.\r\n *\r\n * @packageDocumentation\r\n */\r\n\r\nimport { definePlugin } from '@lytjs/core';\r\nimport { signal } from '@lytjs/reactivity';\r\nimport type { LogLevel, LogEntry, LoggerOptions, PerformanceMetric, LoggerInstance } from './types';\r\n\r\nconst LOG_LEVELS: Record<LogLevel, number> = {\r\n debug: 0,\r\n info: 1,\r\n warn: 2,\r\n error: 3,\r\n silent: 4,\r\n};\r\n\r\nconst defaultFormatter = (entry: LogEntry): string => {\r\n const timestamp = new Date(entry.timestamp).toISOString();\r\n const modulePart = entry.module ? ` [${entry.module}]` : '';\r\n return `[${timestamp}] ${entry.level.toUpperCase()}${modulePart}: ${entry.message}`;\r\n};\r\n\r\nfunction createLogger(options: LoggerOptions = {}): LoggerInstance {\r\n const {\r\n level = 'info',\r\n enablePersistence = false,\r\n storageKey = 'lyt-logs',\r\n maxLogs = 1000,\r\n enablePerformance = true,\r\n formatter = defaultFormatter,\r\n } = options;\r\n\r\n const levelSignal = signal<LogLevel>(level);\r\n const logsSignal = signal<LogEntry[]>([]);\r\n const performanceMetricsSignal = signal<PerformanceMetric[]>([]);\r\n const pendingMeasures = new Map<string, PerformanceMetric>();\r\n\r\n function shouldLog(level: LogLevel): boolean {\r\n return LOG_LEVELS[level] >= LOG_LEVELS[levelSignal()];\r\n }\r\n\r\n function addLog(level: LogLevel, message: string, data?: unknown, module?: string) {\r\n if (!shouldLog(level)) return;\r\n\r\n const entry: LogEntry = {\r\n timestamp: Date.now(),\r\n level,\r\n message,\r\n data,\r\n module,\r\n };\r\n\r\n const newLogs = [...logsSignal(), entry];\r\n if (newLogs.length > maxLogs) {\r\n newLogs.shift();\r\n }\r\n logsSignal.set(newLogs);\r\n\r\n if (enablePersistence) {\r\n saveLogs();\r\n }\r\n\r\n outputLog(entry);\r\n }\r\n\r\n function outputLog(entry: LogEntry) {\r\n const formattedMessage = formatter(entry);\r\n\r\n switch (entry.level) {\r\n case 'debug':\r\n console.debug(formattedMessage, entry.data || '');\r\n break;\r\n case 'info':\r\n console.info(formattedMessage, entry.data || '');\r\n break;\r\n case 'warn':\r\n console.warn(formattedMessage, entry.data || '');\r\n break;\r\n case 'error':\r\n console.error(formattedMessage, entry.data || '');\r\n break;\r\n }\r\n }\r\n\r\n function saveLogs() {\r\n if (typeof localStorage === 'undefined') return;\r\n try {\r\n localStorage.setItem(storageKey, JSON.stringify(logsSignal()));\r\n } catch {\r\n }\r\n }\r\n\r\n function loadLogs(): LogEntry[] {\r\n if (typeof localStorage === 'undefined') return [];\r\n try {\r\n const stored = localStorage.getItem(storageKey);\r\n return stored ? JSON.parse(stored) : [];\r\n } catch {\r\n return [];\r\n }\r\n }\r\n\r\n function debug(message: string, data?: unknown, module?: string) {\r\n addLog('debug', message, data, module);\r\n }\r\n\r\n function info(message: string, data?: unknown, module?: string) {\r\n addLog('info', message, data, module);\r\n }\r\n\r\n function warn(message: string, data?: unknown, module?: string) {\r\n addLog('warn', message, data, module);\r\n }\r\n\r\n function error(message: string, data?: unknown, module?: string) {\r\n addLog('error', message, data, module);\r\n }\r\n\r\n function setLevel(newLevel: LogLevel) {\r\n levelSignal.set(newLevel);\r\n }\r\n\r\n function startMeasure(name: string, data?: unknown) {\r\n if (!enablePerformance) return;\r\n\r\n const metric: PerformanceMetric = {\r\n name,\r\n startTime: Date.now(),\r\n data,\r\n };\r\n pendingMeasures.set(name, metric);\r\n debug(`Performance measure started: ${name}`, data, 'performance');\r\n }\r\n\r\n function endMeasure(name: string): PerformanceMetric | null {\r\n if (!enablePerformance) return null;\r\n\r\n const metric = pendingMeasures.get(name);\r\n if (!metric) {\r\n warn(`Performance measure \"${name}\" not found`, undefined, 'performance');\r\n return null;\r\n }\r\n\r\n metric.endTime = Date.now();\r\n metric.duration = metric.endTime - metric.startTime;\r\n\r\n pendingMeasures.delete(name);\r\n\r\n const newMetrics = [...performanceMetricsSignal(), metric];\r\n performanceMetricsSignal.set(newMetrics);\r\n\r\n info(`Performance measure \"${name}\": ${metric.duration}ms`, metric, 'performance');\r\n\r\n return metric;\r\n }\r\n\r\n function clear() {\r\n logsSignal.set([]);\r\n performanceMetricsSignal.set([]);\r\n pendingMeasures.clear();\r\n if (enablePersistence && typeof localStorage !== 'undefined') {\r\n try {\r\n localStorage.removeItem(storageKey);\r\n } catch {\r\n }\r\n }\r\n }\r\n\r\n function getMetrics(): PerformanceMetric[] {\r\n return performanceMetricsSignal();\r\n }\r\n\r\n function init() {\r\n if (enablePersistence) {\r\n const storedLogs = loadLogs();\r\n if (storedLogs.length > 0) {\r\n logsSignal.set(storedLogs);\r\n }\r\n }\r\n }\r\n\r\n init();\r\n\r\n return {\r\n get level() {\r\n return levelSignal();\r\n },\r\n get logs() {\r\n return logsSignal();\r\n },\r\n debug,\r\n info,\r\n warn,\r\n error,\r\n setLevel,\r\n startMeasure,\r\n endMeasure,\r\n clear,\r\n getMetrics,\r\n };\r\n}\r\n\r\nconst pluginLogger = definePlugin({\r\n name: 'logger',\r\n version: '6.0.0',\r\n description: 'LytJS official logger plugin with log levels, persistence, and performance tracing support',\r\n author: 'LytJS Team',\r\n keywords: ['lytjs', 'logger', 'logging', 'debug', 'performance'],\r\n schema: {\r\n type: 'object',\r\n object: {\r\n properties: {\r\n level: { type: 'string', default: 'info' },\r\n enablePersistence: { type: 'boolean', default: false },\r\n storageKey: { type: 'string', default: 'lyt-logs' },\r\n maxLogs: { type: 'number', default: 1000 },\r\n enablePerformance: { type: 'boolean', default: true },\r\n },\r\n },\r\n },\r\n install(app, options) {\r\n const logger = createLogger(options as LoggerOptions);\r\n\r\n app.config.globalProperties.$logger = logger;\r\n\r\n app.provide('lyt-logger', logger);\r\n },\r\n});\r\n\r\nexport default pluginLogger;\r\nexport type { LogLevel, LogEntry, LoggerOptions, PerformanceMetric, LoggerInstance };\r\nexport { createLogger, LOG_LEVELS };\r\n"]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import * as _lytjs_core from '@lytjs/core';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @lytjs/plugin-logger - 类型定义
|
|
5
|
+
*/
|
|
6
|
+
type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'silent';
|
|
7
|
+
interface LogEntry {
|
|
8
|
+
/** 时间戳 */
|
|
9
|
+
timestamp: number;
|
|
10
|
+
/** 日志级别 */
|
|
11
|
+
level: LogLevel;
|
|
12
|
+
/** 日志消息 */
|
|
13
|
+
message: string;
|
|
14
|
+
/** 附加数据 */
|
|
15
|
+
data?: unknown;
|
|
16
|
+
/** 模块名 */
|
|
17
|
+
module?: string;
|
|
18
|
+
}
|
|
19
|
+
interface LoggerOptions {
|
|
20
|
+
/** 日志级别 */
|
|
21
|
+
level?: LogLevel;
|
|
22
|
+
/** 是否启用持久化 */
|
|
23
|
+
enablePersistence?: boolean;
|
|
24
|
+
/** 本地存储 key */
|
|
25
|
+
storageKey?: string;
|
|
26
|
+
/** 最大日志条数 */
|
|
27
|
+
maxLogs?: number;
|
|
28
|
+
/** 是否启用性能追踪 */
|
|
29
|
+
enablePerformance?: boolean;
|
|
30
|
+
/** 是否显示时间戳 */
|
|
31
|
+
showTimestamp?: boolean;
|
|
32
|
+
/** 自定义格式化函数 */
|
|
33
|
+
formatter?: (entry: LogEntry) => string;
|
|
34
|
+
}
|
|
35
|
+
interface PerformanceMetric {
|
|
36
|
+
/** 名称 */
|
|
37
|
+
name: string;
|
|
38
|
+
/** 开始时间 */
|
|
39
|
+
startTime: number;
|
|
40
|
+
/** 结束时间 */
|
|
41
|
+
endTime?: number;
|
|
42
|
+
/** 持续时间 */
|
|
43
|
+
duration?: number;
|
|
44
|
+
/** 附加数据 */
|
|
45
|
+
data?: unknown;
|
|
46
|
+
}
|
|
47
|
+
interface LoggerInstance {
|
|
48
|
+
/** 当前日志级别 */
|
|
49
|
+
level: LogLevel;
|
|
50
|
+
/** 日志记录 */
|
|
51
|
+
logs: LogEntry[];
|
|
52
|
+
/** 调试日志 */
|
|
53
|
+
debug: (message: string, data?: unknown, module?: string) => void;
|
|
54
|
+
/** 信息日志 */
|
|
55
|
+
info: (message: string, data?: unknown, module?: string) => void;
|
|
56
|
+
/** 警告日志 */
|
|
57
|
+
warn: (message: string, data?: unknown, module?: string) => void;
|
|
58
|
+
/** 错误日志 */
|
|
59
|
+
error: (message: string, data?: unknown, module?: string) => void;
|
|
60
|
+
/** 设置日志级别 */
|
|
61
|
+
setLevel: (level: LogLevel) => void;
|
|
62
|
+
/** 开始性能追踪 */
|
|
63
|
+
startMeasure: (name: string, data?: unknown) => void;
|
|
64
|
+
/** 结束性能追踪 */
|
|
65
|
+
endMeasure: (name: string) => PerformanceMetric | null;
|
|
66
|
+
/** 清空日志 */
|
|
67
|
+
clear: () => void;
|
|
68
|
+
/** 获取性能指标 */
|
|
69
|
+
getMetrics: () => PerformanceMetric[];
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
declare const LOG_LEVELS: Record<LogLevel, number>;
|
|
73
|
+
declare function createLogger(options?: LoggerOptions): LoggerInstance;
|
|
74
|
+
declare const pluginLogger: _lytjs_core.PluginDefinition<unknown>;
|
|
75
|
+
|
|
76
|
+
export { LOG_LEVELS, type LogEntry, type LogLevel, type LoggerInstance, type LoggerOptions, type PerformanceMetric, createLogger, pluginLogger as default };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import * as _lytjs_core from '@lytjs/core';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @lytjs/plugin-logger - 类型定义
|
|
5
|
+
*/
|
|
6
|
+
type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'silent';
|
|
7
|
+
interface LogEntry {
|
|
8
|
+
/** 时间戳 */
|
|
9
|
+
timestamp: number;
|
|
10
|
+
/** 日志级别 */
|
|
11
|
+
level: LogLevel;
|
|
12
|
+
/** 日志消息 */
|
|
13
|
+
message: string;
|
|
14
|
+
/** 附加数据 */
|
|
15
|
+
data?: unknown;
|
|
16
|
+
/** 模块名 */
|
|
17
|
+
module?: string;
|
|
18
|
+
}
|
|
19
|
+
interface LoggerOptions {
|
|
20
|
+
/** 日志级别 */
|
|
21
|
+
level?: LogLevel;
|
|
22
|
+
/** 是否启用持久化 */
|
|
23
|
+
enablePersistence?: boolean;
|
|
24
|
+
/** 本地存储 key */
|
|
25
|
+
storageKey?: string;
|
|
26
|
+
/** 最大日志条数 */
|
|
27
|
+
maxLogs?: number;
|
|
28
|
+
/** 是否启用性能追踪 */
|
|
29
|
+
enablePerformance?: boolean;
|
|
30
|
+
/** 是否显示时间戳 */
|
|
31
|
+
showTimestamp?: boolean;
|
|
32
|
+
/** 自定义格式化函数 */
|
|
33
|
+
formatter?: (entry: LogEntry) => string;
|
|
34
|
+
}
|
|
35
|
+
interface PerformanceMetric {
|
|
36
|
+
/** 名称 */
|
|
37
|
+
name: string;
|
|
38
|
+
/** 开始时间 */
|
|
39
|
+
startTime: number;
|
|
40
|
+
/** 结束时间 */
|
|
41
|
+
endTime?: number;
|
|
42
|
+
/** 持续时间 */
|
|
43
|
+
duration?: number;
|
|
44
|
+
/** 附加数据 */
|
|
45
|
+
data?: unknown;
|
|
46
|
+
}
|
|
47
|
+
interface LoggerInstance {
|
|
48
|
+
/** 当前日志级别 */
|
|
49
|
+
level: LogLevel;
|
|
50
|
+
/** 日志记录 */
|
|
51
|
+
logs: LogEntry[];
|
|
52
|
+
/** 调试日志 */
|
|
53
|
+
debug: (message: string, data?: unknown, module?: string) => void;
|
|
54
|
+
/** 信息日志 */
|
|
55
|
+
info: (message: string, data?: unknown, module?: string) => void;
|
|
56
|
+
/** 警告日志 */
|
|
57
|
+
warn: (message: string, data?: unknown, module?: string) => void;
|
|
58
|
+
/** 错误日志 */
|
|
59
|
+
error: (message: string, data?: unknown, module?: string) => void;
|
|
60
|
+
/** 设置日志级别 */
|
|
61
|
+
setLevel: (level: LogLevel) => void;
|
|
62
|
+
/** 开始性能追踪 */
|
|
63
|
+
startMeasure: (name: string, data?: unknown) => void;
|
|
64
|
+
/** 结束性能追踪 */
|
|
65
|
+
endMeasure: (name: string) => PerformanceMetric | null;
|
|
66
|
+
/** 清空日志 */
|
|
67
|
+
clear: () => void;
|
|
68
|
+
/** 获取性能指标 */
|
|
69
|
+
getMetrics: () => PerformanceMetric[];
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
declare const LOG_LEVELS: Record<LogLevel, number>;
|
|
73
|
+
declare function createLogger(options?: LoggerOptions): LoggerInstance;
|
|
74
|
+
declare const pluginLogger: _lytjs_core.PluginDefinition<unknown>;
|
|
75
|
+
|
|
76
|
+
export { LOG_LEVELS, type LogEntry, type LogLevel, type LoggerInstance, type LoggerOptions, type PerformanceMetric, createLogger, pluginLogger as default };
|
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,194 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { definePlugin } from '@lytjs/core';
|
|
2
|
+
import { signal } from '@lytjs/reactivity';
|
|
3
|
+
|
|
4
|
+
// src/index.ts
|
|
5
|
+
var LOG_LEVELS = {
|
|
6
|
+
debug: 0,
|
|
7
|
+
info: 1,
|
|
8
|
+
warn: 2,
|
|
9
|
+
error: 3,
|
|
10
|
+
silent: 4
|
|
11
|
+
};
|
|
12
|
+
var defaultFormatter = (entry) => {
|
|
13
|
+
const timestamp = new Date(entry.timestamp).toISOString();
|
|
14
|
+
const modulePart = entry.module ? ` [${entry.module}]` : "";
|
|
15
|
+
return `[${timestamp}] ${entry.level.toUpperCase()}${modulePart}: ${entry.message}`;
|
|
16
|
+
};
|
|
17
|
+
function createLogger(options = {}) {
|
|
18
|
+
const {
|
|
19
|
+
level = "info",
|
|
20
|
+
enablePersistence = false,
|
|
21
|
+
storageKey = "lyt-logs",
|
|
22
|
+
maxLogs = 1e3,
|
|
23
|
+
enablePerformance = true,
|
|
24
|
+
formatter = defaultFormatter
|
|
25
|
+
} = options;
|
|
26
|
+
const levelSignal = signal(level);
|
|
27
|
+
const logsSignal = signal([]);
|
|
28
|
+
const performanceMetricsSignal = signal([]);
|
|
29
|
+
const pendingMeasures = /* @__PURE__ */ new Map();
|
|
30
|
+
function shouldLog(level2) {
|
|
31
|
+
return LOG_LEVELS[level2] >= LOG_LEVELS[levelSignal()];
|
|
32
|
+
}
|
|
33
|
+
function addLog(level2, message, data, module) {
|
|
34
|
+
if (!shouldLog(level2)) return;
|
|
35
|
+
const entry = {
|
|
36
|
+
timestamp: Date.now(),
|
|
37
|
+
level: level2,
|
|
38
|
+
message,
|
|
39
|
+
data,
|
|
40
|
+
module
|
|
41
|
+
};
|
|
42
|
+
const newLogs = [...logsSignal(), entry];
|
|
43
|
+
if (newLogs.length > maxLogs) {
|
|
44
|
+
newLogs.shift();
|
|
45
|
+
}
|
|
46
|
+
logsSignal.set(newLogs);
|
|
47
|
+
if (enablePersistence) {
|
|
48
|
+
saveLogs();
|
|
49
|
+
}
|
|
50
|
+
outputLog(entry);
|
|
51
|
+
}
|
|
52
|
+
function outputLog(entry) {
|
|
53
|
+
const formattedMessage = formatter(entry);
|
|
54
|
+
switch (entry.level) {
|
|
55
|
+
case "debug":
|
|
56
|
+
console.debug(formattedMessage, entry.data || "");
|
|
57
|
+
break;
|
|
58
|
+
case "info":
|
|
59
|
+
console.info(formattedMessage, entry.data || "");
|
|
60
|
+
break;
|
|
61
|
+
case "warn":
|
|
62
|
+
console.warn(formattedMessage, entry.data || "");
|
|
63
|
+
break;
|
|
64
|
+
case "error":
|
|
65
|
+
console.error(formattedMessage, entry.data || "");
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
function saveLogs() {
|
|
70
|
+
if (typeof localStorage === "undefined") return;
|
|
71
|
+
try {
|
|
72
|
+
localStorage.setItem(storageKey, JSON.stringify(logsSignal()));
|
|
73
|
+
} catch {
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
function loadLogs() {
|
|
77
|
+
if (typeof localStorage === "undefined") return [];
|
|
78
|
+
try {
|
|
79
|
+
const stored = localStorage.getItem(storageKey);
|
|
80
|
+
return stored ? JSON.parse(stored) : [];
|
|
81
|
+
} catch {
|
|
82
|
+
return [];
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
function debug(message, data, module) {
|
|
86
|
+
addLog("debug", message, data, module);
|
|
87
|
+
}
|
|
88
|
+
function info(message, data, module) {
|
|
89
|
+
addLog("info", message, data, module);
|
|
90
|
+
}
|
|
91
|
+
function warn(message, data, module) {
|
|
92
|
+
addLog("warn", message, data, module);
|
|
93
|
+
}
|
|
94
|
+
function error(message, data, module) {
|
|
95
|
+
addLog("error", message, data, module);
|
|
96
|
+
}
|
|
97
|
+
function setLevel(newLevel) {
|
|
98
|
+
levelSignal.set(newLevel);
|
|
99
|
+
}
|
|
100
|
+
function startMeasure(name, data) {
|
|
101
|
+
if (!enablePerformance) return;
|
|
102
|
+
const metric = {
|
|
103
|
+
name,
|
|
104
|
+
startTime: Date.now(),
|
|
105
|
+
data
|
|
106
|
+
};
|
|
107
|
+
pendingMeasures.set(name, metric);
|
|
108
|
+
debug(`Performance measure started: ${name}`, data, "performance");
|
|
109
|
+
}
|
|
110
|
+
function endMeasure(name) {
|
|
111
|
+
if (!enablePerformance) return null;
|
|
112
|
+
const metric = pendingMeasures.get(name);
|
|
113
|
+
if (!metric) {
|
|
114
|
+
warn(`Performance measure "${name}" not found`, void 0, "performance");
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
metric.endTime = Date.now();
|
|
118
|
+
metric.duration = metric.endTime - metric.startTime;
|
|
119
|
+
pendingMeasures.delete(name);
|
|
120
|
+
const newMetrics = [...performanceMetricsSignal(), metric];
|
|
121
|
+
performanceMetricsSignal.set(newMetrics);
|
|
122
|
+
info(`Performance measure "${name}": ${metric.duration}ms`, metric, "performance");
|
|
123
|
+
return metric;
|
|
124
|
+
}
|
|
125
|
+
function clear() {
|
|
126
|
+
logsSignal.set([]);
|
|
127
|
+
performanceMetricsSignal.set([]);
|
|
128
|
+
pendingMeasures.clear();
|
|
129
|
+
if (enablePersistence && typeof localStorage !== "undefined") {
|
|
130
|
+
try {
|
|
131
|
+
localStorage.removeItem(storageKey);
|
|
132
|
+
} catch {
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
function getMetrics() {
|
|
137
|
+
return performanceMetricsSignal();
|
|
138
|
+
}
|
|
139
|
+
function init() {
|
|
140
|
+
if (enablePersistence) {
|
|
141
|
+
const storedLogs = loadLogs();
|
|
142
|
+
if (storedLogs.length > 0) {
|
|
143
|
+
logsSignal.set(storedLogs);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
init();
|
|
148
|
+
return {
|
|
149
|
+
get level() {
|
|
150
|
+
return levelSignal();
|
|
151
|
+
},
|
|
152
|
+
get logs() {
|
|
153
|
+
return logsSignal();
|
|
154
|
+
},
|
|
155
|
+
debug,
|
|
156
|
+
info,
|
|
157
|
+
warn,
|
|
158
|
+
error,
|
|
159
|
+
setLevel,
|
|
160
|
+
startMeasure,
|
|
161
|
+
endMeasure,
|
|
162
|
+
clear,
|
|
163
|
+
getMetrics
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
var pluginLogger = definePlugin({
|
|
167
|
+
name: "logger",
|
|
168
|
+
version: "6.0.0",
|
|
169
|
+
description: "LytJS official logger plugin with log levels, persistence, and performance tracing support",
|
|
170
|
+
author: "LytJS Team",
|
|
171
|
+
keywords: ["lytjs", "logger", "logging", "debug", "performance"],
|
|
172
|
+
schema: {
|
|
173
|
+
type: "object",
|
|
174
|
+
object: {
|
|
175
|
+
properties: {
|
|
176
|
+
level: { type: "string", default: "info" },
|
|
177
|
+
enablePersistence: { type: "boolean", default: false },
|
|
178
|
+
storageKey: { type: "string", default: "lyt-logs" },
|
|
179
|
+
maxLogs: { type: "number", default: 1e3 },
|
|
180
|
+
enablePerformance: { type: "boolean", default: true }
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
},
|
|
184
|
+
install(app, options) {
|
|
185
|
+
const logger = createLogger(options);
|
|
186
|
+
app.config.globalProperties.$logger = logger;
|
|
187
|
+
app.provide("lyt-logger", logger);
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
var index_default = pluginLogger;
|
|
191
|
+
|
|
192
|
+
export { LOG_LEVELS, createLogger, index_default as default };
|
|
193
|
+
//# sourceMappingURL=index.mjs.map
|
|
194
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"names":["level"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\r\n * @lytjs/plugin-logger\r\n *\r\n * LytJS official logger plugin with log levels, persistence, and performance tracing support.\r\n *\r\n * @packageDocumentation\r\n */\r\n\r\nimport { definePlugin } from '@lytjs/core';\r\nimport { signal } from '@lytjs/reactivity';\r\nimport type { LogLevel, LogEntry, LoggerOptions, PerformanceMetric, LoggerInstance } from './types';\r\n\r\nconst LOG_LEVELS: Record<LogLevel, number> = {\r\n debug: 0,\r\n info: 1,\r\n warn: 2,\r\n error: 3,\r\n silent: 4,\r\n};\r\n\r\nconst defaultFormatter = (entry: LogEntry): string => {\r\n const timestamp = new Date(entry.timestamp).toISOString();\r\n const modulePart = entry.module ? ` [${entry.module}]` : '';\r\n return `[${timestamp}] ${entry.level.toUpperCase()}${modulePart}: ${entry.message}`;\r\n};\r\n\r\nfunction createLogger(options: LoggerOptions = {}): LoggerInstance {\r\n const {\r\n level = 'info',\r\n enablePersistence = false,\r\n storageKey = 'lyt-logs',\r\n maxLogs = 1000,\r\n enablePerformance = true,\r\n formatter = defaultFormatter,\r\n } = options;\r\n\r\n const levelSignal = signal<LogLevel>(level);\r\n const logsSignal = signal<LogEntry[]>([]);\r\n const performanceMetricsSignal = signal<PerformanceMetric[]>([]);\r\n const pendingMeasures = new Map<string, PerformanceMetric>();\r\n\r\n function shouldLog(level: LogLevel): boolean {\r\n return LOG_LEVELS[level] >= LOG_LEVELS[levelSignal()];\r\n }\r\n\r\n function addLog(level: LogLevel, message: string, data?: unknown, module?: string) {\r\n if (!shouldLog(level)) return;\r\n\r\n const entry: LogEntry = {\r\n timestamp: Date.now(),\r\n level,\r\n message,\r\n data,\r\n module,\r\n };\r\n\r\n const newLogs = [...logsSignal(), entry];\r\n if (newLogs.length > maxLogs) {\r\n newLogs.shift();\r\n }\r\n logsSignal.set(newLogs);\r\n\r\n if (enablePersistence) {\r\n saveLogs();\r\n }\r\n\r\n outputLog(entry);\r\n }\r\n\r\n function outputLog(entry: LogEntry) {\r\n const formattedMessage = formatter(entry);\r\n\r\n switch (entry.level) {\r\n case 'debug':\r\n console.debug(formattedMessage, entry.data || '');\r\n break;\r\n case 'info':\r\n console.info(formattedMessage, entry.data || '');\r\n break;\r\n case 'warn':\r\n console.warn(formattedMessage, entry.data || '');\r\n break;\r\n case 'error':\r\n console.error(formattedMessage, entry.data || '');\r\n break;\r\n }\r\n }\r\n\r\n function saveLogs() {\r\n if (typeof localStorage === 'undefined') return;\r\n try {\r\n localStorage.setItem(storageKey, JSON.stringify(logsSignal()));\r\n } catch {\r\n }\r\n }\r\n\r\n function loadLogs(): LogEntry[] {\r\n if (typeof localStorage === 'undefined') return [];\r\n try {\r\n const stored = localStorage.getItem(storageKey);\r\n return stored ? JSON.parse(stored) : [];\r\n } catch {\r\n return [];\r\n }\r\n }\r\n\r\n function debug(message: string, data?: unknown, module?: string) {\r\n addLog('debug', message, data, module);\r\n }\r\n\r\n function info(message: string, data?: unknown, module?: string) {\r\n addLog('info', message, data, module);\r\n }\r\n\r\n function warn(message: string, data?: unknown, module?: string) {\r\n addLog('warn', message, data, module);\r\n }\r\n\r\n function error(message: string, data?: unknown, module?: string) {\r\n addLog('error', message, data, module);\r\n }\r\n\r\n function setLevel(newLevel: LogLevel) {\r\n levelSignal.set(newLevel);\r\n }\r\n\r\n function startMeasure(name: string, data?: unknown) {\r\n if (!enablePerformance) return;\r\n\r\n const metric: PerformanceMetric = {\r\n name,\r\n startTime: Date.now(),\r\n data,\r\n };\r\n pendingMeasures.set(name, metric);\r\n debug(`Performance measure started: ${name}`, data, 'performance');\r\n }\r\n\r\n function endMeasure(name: string): PerformanceMetric | null {\r\n if (!enablePerformance) return null;\r\n\r\n const metric = pendingMeasures.get(name);\r\n if (!metric) {\r\n warn(`Performance measure \"${name}\" not found`, undefined, 'performance');\r\n return null;\r\n }\r\n\r\n metric.endTime = Date.now();\r\n metric.duration = metric.endTime - metric.startTime;\r\n\r\n pendingMeasures.delete(name);\r\n\r\n const newMetrics = [...performanceMetricsSignal(), metric];\r\n performanceMetricsSignal.set(newMetrics);\r\n\r\n info(`Performance measure \"${name}\": ${metric.duration}ms`, metric, 'performance');\r\n\r\n return metric;\r\n }\r\n\r\n function clear() {\r\n logsSignal.set([]);\r\n performanceMetricsSignal.set([]);\r\n pendingMeasures.clear();\r\n if (enablePersistence && typeof localStorage !== 'undefined') {\r\n try {\r\n localStorage.removeItem(storageKey);\r\n } catch {\r\n }\r\n }\r\n }\r\n\r\n function getMetrics(): PerformanceMetric[] {\r\n return performanceMetricsSignal();\r\n }\r\n\r\n function init() {\r\n if (enablePersistence) {\r\n const storedLogs = loadLogs();\r\n if (storedLogs.length > 0) {\r\n logsSignal.set(storedLogs);\r\n }\r\n }\r\n }\r\n\r\n init();\r\n\r\n return {\r\n get level() {\r\n return levelSignal();\r\n },\r\n get logs() {\r\n return logsSignal();\r\n },\r\n debug,\r\n info,\r\n warn,\r\n error,\r\n setLevel,\r\n startMeasure,\r\n endMeasure,\r\n clear,\r\n getMetrics,\r\n };\r\n}\r\n\r\nconst pluginLogger = definePlugin({\r\n name: 'logger',\r\n version: '6.0.0',\r\n description: 'LytJS official logger plugin with log levels, persistence, and performance tracing support',\r\n author: 'LytJS Team',\r\n keywords: ['lytjs', 'logger', 'logging', 'debug', 'performance'],\r\n schema: {\r\n type: 'object',\r\n object: {\r\n properties: {\r\n level: { type: 'string', default: 'info' },\r\n enablePersistence: { type: 'boolean', default: false },\r\n storageKey: { type: 'string', default: 'lyt-logs' },\r\n maxLogs: { type: 'number', default: 1000 },\r\n enablePerformance: { type: 'boolean', default: true },\r\n },\r\n },\r\n },\r\n install(app, options) {\r\n const logger = createLogger(options as LoggerOptions);\r\n\r\n app.config.globalProperties.$logger = logger;\r\n\r\n app.provide('lyt-logger', logger);\r\n },\r\n});\r\n\r\nexport default pluginLogger;\r\nexport type { LogLevel, LogEntry, LoggerOptions, PerformanceMetric, LoggerInstance };\r\nexport { createLogger, LOG_LEVELS };\r\n"]}
|
package/package.json
CHANGED
|
@@ -1,44 +1,54 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lytjs/plugin-logger",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "6.0.0",
|
|
4
|
+
"description": "LytJS official logger plugin with log levels, persistence, and performance tracing support",
|
|
5
|
+
"type": "module",
|
|
5
6
|
"main": "./dist/index.cjs",
|
|
6
7
|
"module": "./dist/index.mjs",
|
|
7
|
-
"types": "./dist/
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
8
9
|
"exports": {
|
|
9
10
|
".": {
|
|
10
|
-
"types": "./dist/
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
11
12
|
"import": "./dist/index.mjs",
|
|
12
|
-
"require": "./dist/index.cjs"
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
"require": "./dist/index.cjs"
|
|
14
|
+
},
|
|
15
|
+
"./package.json": "./package.json"
|
|
15
16
|
},
|
|
16
|
-
"sideEffects": false,
|
|
17
17
|
"files": [
|
|
18
18
|
"dist"
|
|
19
19
|
],
|
|
20
|
+
"sideEffects": false,
|
|
21
|
+
"scripts": {
|
|
22
|
+
"build": "tsup",
|
|
23
|
+
"dev": "tsup --watch",
|
|
24
|
+
"test": "vitest run",
|
|
25
|
+
"test:watch": "vitest",
|
|
26
|
+
"test:coverage": "vitest run --coverage",
|
|
27
|
+
"type-check": "tsc --noEmit",
|
|
28
|
+
"lint": "eslint \"src/**/*.ts\"",
|
|
29
|
+
"clean": "rm -rf dist"
|
|
30
|
+
},
|
|
31
|
+
"dependencies": {
|
|
32
|
+
"@lytjs/core": "^6.0.0",
|
|
33
|
+
"@lytjs/reactivity": "^6.0.0",
|
|
34
|
+
"@lytjs/common-is": "^6.0.0"
|
|
35
|
+
},
|
|
36
|
+
"devDependencies": {
|
|
37
|
+
"tsup": "^8.0.0",
|
|
38
|
+
"typescript": "^5.4.0",
|
|
39
|
+
"vitest": "^3.0.0"
|
|
40
|
+
},
|
|
20
41
|
"license": "MIT",
|
|
21
|
-
"author": "lytjs",
|
|
22
42
|
"repository": {
|
|
23
43
|
"type": "git",
|
|
24
|
-
"url": "https://gitee.com/lytjs/lytjs"
|
|
44
|
+
"url": "https://gitee.com/lytjs/lytjs.git",
|
|
45
|
+
"directory": "packages/plugins/packages/plugin-logger"
|
|
25
46
|
},
|
|
26
|
-
"homepage": "https://gitee.com/lytjs/lytjs",
|
|
27
47
|
"keywords": [
|
|
28
|
-
"lyt",
|
|
29
48
|
"lytjs",
|
|
30
|
-
"javascript",
|
|
31
|
-
"framework",
|
|
32
|
-
"frontend",
|
|
33
|
-
"vue-like",
|
|
34
|
-
"lightweight",
|
|
35
|
-
"zero-dependency",
|
|
36
49
|
"logger",
|
|
37
50
|
"logging",
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
]
|
|
41
|
-
"publishConfig": {
|
|
42
|
-
"access": "public"
|
|
43
|
-
}
|
|
51
|
+
"debug",
|
|
52
|
+
"performance"
|
|
53
|
+
]
|
|
44
54
|
}
|
package/README.md
DELETED
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
# @lytjs/plugin-logger
|
|
2
|
-
|
|
3
|
-
> Lyt.js 日志插件 - 提供分级日志记录、日志过滤和持久化存储功能
|
|
4
|
-
|
|
5
|
-
**版本:** 4.2.0
|
|
6
|
-
|
|
7
|
-
## 安装
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
npm install @lytjs/plugin-logger
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
## 使用
|
|
14
|
-
|
|
15
|
-
### 注册插件
|
|
16
|
-
|
|
17
|
-
```typescript
|
|
18
|
-
import { createApp } from '@lytjs/core'
|
|
19
|
-
import { createLogger } from '@lytjs/plugin-logger'
|
|
20
|
-
|
|
21
|
-
const logger = createLogger({
|
|
22
|
-
level: 'debug',
|
|
23
|
-
prefix: '[Lyt]',
|
|
24
|
-
persist: true,
|
|
25
|
-
maxLogs: 1000,
|
|
26
|
-
})
|
|
27
|
-
|
|
28
|
-
const app = createApp({})
|
|
29
|
-
app.use(logger)
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
### 基本日志输出
|
|
33
|
-
|
|
34
|
-
```typescript
|
|
35
|
-
logger.debug('调试信息', { foo: 'bar' })
|
|
36
|
-
logger.info('普通信息')
|
|
37
|
-
logger.warn('警告信息')
|
|
38
|
-
logger.error('错误信息', new Error('出错了'))
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
### 动态调整日志级别
|
|
42
|
-
|
|
43
|
-
```typescript
|
|
44
|
-
// 开发环境使用 debug
|
|
45
|
-
logger.setLevel('debug')
|
|
46
|
-
|
|
47
|
-
// 生产环境使用 warn
|
|
48
|
-
logger.setLevel('warn')
|
|
49
|
-
|
|
50
|
-
// 关闭所有日志
|
|
51
|
-
logger.setLevel('silent')
|
|
52
|
-
|
|
53
|
-
// 获取当前级别
|
|
54
|
-
logger.getLevel() // 'warn'
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
### 自定义传输
|
|
58
|
-
|
|
59
|
-
```typescript
|
|
60
|
-
const logger = createLogger({
|
|
61
|
-
level: 'info',
|
|
62
|
-
transport: (log) => {
|
|
63
|
-
// 发送日志到远程服务器
|
|
64
|
-
fetch('/api/logs', {
|
|
65
|
-
method: 'POST',
|
|
66
|
-
body: JSON.stringify(log),
|
|
67
|
-
})
|
|
68
|
-
},
|
|
69
|
-
})
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
### 获取和清除日志
|
|
73
|
-
|
|
74
|
-
```typescript
|
|
75
|
-
// 获取所有日志记录
|
|
76
|
-
const logs = logger.getLogs()
|
|
77
|
-
|
|
78
|
-
// 清除日志记录
|
|
79
|
-
logger.clearLogs()
|
|
80
|
-
|
|
81
|
-
// 销毁日志实例,释放资源
|
|
82
|
-
logger.destroy()
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
## API
|
|
86
|
-
|
|
87
|
-
### Options
|
|
88
|
-
|
|
89
|
-
| 选项 | 类型 | 默认值 | 描述 |
|
|
90
|
-
|------|------|--------|------|
|
|
91
|
-
| `level` | `'debug' \| 'info' \| 'warn' \| 'error' \| 'silent'` | `'info'` | 日志级别 |
|
|
92
|
-
| `prefix` | `string` | `''` | 日志前缀 |
|
|
93
|
-
| `persist` | `boolean` | `false` | 是否持久化到 localStorage |
|
|
94
|
-
| `maxLogs` | `number` | `1000` | 最大日志条数(FIFO 策略) |
|
|
95
|
-
| `timestamp` | `boolean` | `true` | 是否显示时间戳 |
|
|
96
|
-
| `format` | `string` | - | 自定义格式化模板,例如 `'{timestamp} [{level}] {prefix} {message}'` |
|
|
97
|
-
| `transport` | `(log: LogEntry) => void` | - | 自定义日志传输(如发送到服务器) |
|
|
98
|
-
|
|
99
|
-
### 方法
|
|
100
|
-
|
|
101
|
-
| 方法 | 签名 | 描述 |
|
|
102
|
-
|------|------|------|
|
|
103
|
-
| `debug` | `(...args: any[]) => void` | 输出调试日志 |
|
|
104
|
-
| `info` | `(...args: any[]) => void` | 输出信息日志 |
|
|
105
|
-
| `warn` | `(...args: any[]) => void` | 输出警告日志 |
|
|
106
|
-
| `error` | `(...args: any[]) => void` | 输出错误日志 |
|
|
107
|
-
| `setLevel` | `(level: LogLevel) => void` | 设置日志级别 |
|
|
108
|
-
| `getLevel` | `() => LogLevel` | 获取当前日志级别 |
|
|
109
|
-
| `getLogs` | `() => LogEntry[]` | 获取所有日志记录 |
|
|
110
|
-
| `clearLogs` | `() => void` | 清除日志记录 |
|
|
111
|
-
| `destroy` | `() => void` | 销毁日志实例,释放资源 |
|
|
112
|
-
|
|
113
|
-
### 类型
|
|
114
|
-
|
|
115
|
-
```typescript
|
|
116
|
-
type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'silent'
|
|
117
|
-
|
|
118
|
-
interface LogEntry {
|
|
119
|
-
level: LogLevel
|
|
120
|
-
message: string
|
|
121
|
-
timestamp: number
|
|
122
|
-
args: any[]
|
|
123
|
-
}
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
### 特性
|
|
127
|
-
|
|
128
|
-
- **彩色输出**:浏览器环境使用 CSS 样式,Node.js 环境使用 ANSI 颜色码
|
|
129
|
-
- **持久化**:支持将日志存储到 localStorage,页面刷新后可恢复
|
|
130
|
-
- **FIFO 策略**:超过 `maxLogs` 时自动丢弃最早的日志
|
|
131
|
-
- **自定义格式**:通过 `format` 选项自定义日志输出格式
|
|
132
|
-
|
|
133
|
-
## License
|
|
134
|
-
|
|
135
|
-
MIT
|
package/dist/types/index.d.ts
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
/** 日志级别 */
|
|
2
|
-
type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'silent';
|
|
3
|
-
/** 日志插件配置选项 */
|
|
4
|
-
interface LoggerOptions {
|
|
5
|
-
/** 日志级别,默认 'info' */
|
|
6
|
-
level?: LogLevel;
|
|
7
|
-
/** 日志前缀 */
|
|
8
|
-
prefix?: string;
|
|
9
|
-
/** 是否持久化到 localStorage,默认 false */
|
|
10
|
-
persist?: boolean;
|
|
11
|
-
/** 最大日志条数,默认 1000 */
|
|
12
|
-
maxLogs?: number;
|
|
13
|
-
/** 是否显示时间戳,默认 true */
|
|
14
|
-
timestamp?: boolean;
|
|
15
|
-
/** 格式化模板,例如 '{timestamp} [{level}] {prefix} {message}' */
|
|
16
|
-
format?: string;
|
|
17
|
-
/** 自定义日志传输(如发送到服务器) */
|
|
18
|
-
transport?: (log: LogEntry) => void;
|
|
19
|
-
}
|
|
20
|
-
/** 日志条目 */
|
|
21
|
-
interface LogEntry {
|
|
22
|
-
/** 日志级别 */
|
|
23
|
-
level: LogLevel;
|
|
24
|
-
/** 日志消息 */
|
|
25
|
-
message: string;
|
|
26
|
-
/** 时间戳(毫秒) */
|
|
27
|
-
timestamp: number;
|
|
28
|
-
/** 附加参数 */
|
|
29
|
-
args: any[];
|
|
30
|
-
}
|
|
31
|
-
/** 日志插件应用接口(最小化) */
|
|
32
|
-
interface LoggerPluginApp {
|
|
33
|
-
use(plugin: unknown, options?: unknown): void;
|
|
34
|
-
[key: string]: unknown;
|
|
35
|
-
}
|
|
36
|
-
/** 日志插件实例 */
|
|
37
|
-
interface Logger {
|
|
38
|
-
/** 安装到 Lyt 应用 */
|
|
39
|
-
install: (app: LoggerPluginApp, options?: LoggerOptions) => void;
|
|
40
|
-
/** 调试日志 */
|
|
41
|
-
debug(...args: any[]): void;
|
|
42
|
-
/** 信息日志 */
|
|
43
|
-
info(...args: any[]): void;
|
|
44
|
-
/** 警告日志 */
|
|
45
|
-
warn(...args: any[]): void;
|
|
46
|
-
/** 错误日志 */
|
|
47
|
-
error(...args: any[]): void;
|
|
48
|
-
/** 设置日志级别 */
|
|
49
|
-
setLevel(level: LogLevel): void;
|
|
50
|
-
/** 获取当前日志级别 */
|
|
51
|
-
getLevel(): LogLevel;
|
|
52
|
-
/** 获取所有日志记录 */
|
|
53
|
-
getLogs(): LogEntry[];
|
|
54
|
-
/** 清除日志记录 */
|
|
55
|
-
clearLogs(): void;
|
|
56
|
-
/** 销毁日志实例 */
|
|
57
|
-
destroy(): void;
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* 创建日志插件实例
|
|
61
|
-
* @param options 日志配置
|
|
62
|
-
* @returns Logger 插件实例
|
|
63
|
-
*/
|
|
64
|
-
declare function createLogger(options?: LoggerOptions): Logger;
|
|
65
|
-
export { createLogger };
|
|
66
|
-
export type { Logger, LoggerOptions, LogLevel, LogEntry };
|
|
67
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAkBA,WAAW;AACX,KAAK,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAA;AAE9D,eAAe;AACf,UAAU,aAAa;IACrB,qBAAqB;IACrB,KAAK,CAAC,EAAE,QAAQ,CAAA;IAChB,WAAW;IACX,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,mCAAmC;IACnC,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,qBAAqB;IACrB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,sBAAsB;IACtB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,uBAAuB;IACvB,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,KAAK,IAAI,CAAA;CACpC;AAED,WAAW;AACX,UAAU,QAAQ;IAChB,WAAW;IACX,KAAK,EAAE,QAAQ,CAAA;IACf,WAAW;IACX,OAAO,EAAE,MAAM,CAAA;IACf,cAAc;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW;IACX,IAAI,EAAE,GAAG,EAAE,CAAA;CACZ;AAED,oBAAoB;AACpB,UAAU,eAAe;IACvB,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;IAC7C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,aAAa;AACb,UAAU,MAAM;IACd,iBAAiB;IACjB,OAAO,EAAE,CAAC,GAAG,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,aAAa,KAAK,IAAI,CAAA;IAChE,WAAW;IACX,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;IAC3B,WAAW;IACX,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;IAC1B,WAAW;IACX,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;IAC1B,WAAW;IACX,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;IAC3B,aAAa;IACb,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAA;IAC/B,eAAe;IACf,QAAQ,IAAI,QAAQ,CAAA;IACpB,eAAe;IACf,OAAO,IAAI,QAAQ,EAAE,CAAA;IACrB,aAAa;IACb,SAAS,IAAI,IAAI,CAAA;IACjB,aAAa;IACb,OAAO,IAAI,IAAI,CAAA;CAChB;AA0FD;;;;GAIG;AACH,iBAAS,YAAY,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM,CAoOrD;AAED,OAAO,EAAE,YAAY,EAAE,CAAA;AACvB,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAA"}
|