@zhin.js/core 1.0.17 → 1.0.18

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.
Files changed (112) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/REFACTORING_COMPLETE.md +178 -0
  3. package/REFACTORING_STATUS.md +263 -0
  4. package/lib/adapter.d.ts +44 -19
  5. package/lib/adapter.d.ts.map +1 -1
  6. package/lib/adapter.js +81 -50
  7. package/lib/adapter.js.map +1 -1
  8. package/lib/bot.d.ts +7 -12
  9. package/lib/bot.d.ts.map +1 -1
  10. package/lib/built/adapter-process.d.ts +36 -0
  11. package/lib/built/adapter-process.d.ts.map +1 -0
  12. package/lib/built/adapter-process.js +77 -0
  13. package/lib/built/adapter-process.js.map +1 -0
  14. package/lib/built/command.d.ts +46 -0
  15. package/lib/built/command.d.ts.map +1 -0
  16. package/lib/built/command.js +54 -0
  17. package/lib/built/command.js.map +1 -0
  18. package/lib/built/component.d.ts +42 -0
  19. package/lib/built/component.d.ts.map +1 -0
  20. package/lib/built/component.js +66 -0
  21. package/lib/built/component.js.map +1 -0
  22. package/lib/built/config.d.ts +31 -0
  23. package/lib/built/config.d.ts.map +1 -0
  24. package/lib/built/config.js +141 -0
  25. package/lib/built/config.js.map +1 -0
  26. package/lib/built/cron.d.ts +53 -0
  27. package/lib/built/cron.d.ts.map +1 -0
  28. package/lib/built/cron.js +79 -0
  29. package/lib/built/cron.js.map +1 -0
  30. package/lib/built/database.d.ts +17 -0
  31. package/lib/built/database.d.ts.map +1 -0
  32. package/lib/built/database.js +28 -0
  33. package/lib/built/database.js.map +1 -0
  34. package/lib/{permissions.d.ts → built/permission.d.ts} +5 -10
  35. package/lib/built/permission.d.ts.map +1 -0
  36. package/lib/{permissions.js → built/permission.js} +11 -10
  37. package/lib/built/permission.js.map +1 -0
  38. package/lib/command.d.ts +7 -7
  39. package/lib/command.d.ts.map +1 -1
  40. package/lib/command.js +5 -15
  41. package/lib/command.js.map +1 -1
  42. package/lib/component.d.ts.map +1 -1
  43. package/lib/component.js.map +1 -1
  44. package/lib/cron.d.ts +1 -0
  45. package/lib/cron.d.ts.map +1 -1
  46. package/lib/cron.js +2 -0
  47. package/lib/cron.js.map +1 -1
  48. package/lib/index.d.ts +11 -3
  49. package/lib/index.d.ts.map +1 -1
  50. package/lib/index.js +14 -4
  51. package/lib/index.js.map +1 -1
  52. package/lib/jsx-runtime.d.ts +2 -2
  53. package/lib/message.d.ts +2 -2
  54. package/lib/message.d.ts.map +1 -1
  55. package/lib/plugin.d.ts +164 -51
  56. package/lib/plugin.d.ts.map +1 -1
  57. package/lib/plugin.js +521 -150
  58. package/lib/plugin.js.map +1 -1
  59. package/lib/prompt.d.ts +1 -1
  60. package/lib/prompt.d.ts.map +1 -1
  61. package/lib/prompt.js +2 -1
  62. package/lib/prompt.js.map +1 -1
  63. package/lib/types.d.ts +33 -33
  64. package/lib/types.d.ts.map +1 -1
  65. package/lib/utils.d.ts +16 -1
  66. package/lib/utils.d.ts.map +1 -1
  67. package/lib/utils.js +166 -66
  68. package/lib/utils.js.map +1 -1
  69. package/package.json +15 -9
  70. package/src/adapter.ts +131 -80
  71. package/src/bot.ts +8 -13
  72. package/src/built/adapter-process.ts +77 -0
  73. package/src/built/command.ts +102 -0
  74. package/src/built/component.ts +111 -0
  75. package/src/built/config.ts +126 -0
  76. package/src/built/cron.ts +140 -0
  77. package/src/built/database.ts +38 -0
  78. package/src/{permissions.ts → built/permission.ts} +9 -12
  79. package/src/command.ts +11 -20
  80. package/src/component.ts +0 -1
  81. package/src/cron.ts +2 -0
  82. package/src/index.ts +15 -5
  83. package/src/message.ts +2 -2
  84. package/src/plugin.ts +671 -202
  85. package/src/prompt.ts +4 -3
  86. package/src/types.ts +41 -35
  87. package/src/utils.ts +418 -296
  88. package/test/minimal-bot.ts +31 -0
  89. package/test/stress-test.ts +123 -0
  90. package/tests/command.test.ts +47 -44
  91. package/ASYNC-JSX-SUPPORT.md +0 -173
  92. package/lib/app.d.ts +0 -191
  93. package/lib/app.d.ts.map +0 -1
  94. package/lib/app.js +0 -604
  95. package/lib/app.js.map +0 -1
  96. package/lib/config.d.ts +0 -54
  97. package/lib/config.d.ts.map +0 -1
  98. package/lib/config.js +0 -308
  99. package/lib/config.js.map +0 -1
  100. package/lib/log-transport.d.ts +0 -37
  101. package/lib/log-transport.d.ts.map +0 -1
  102. package/lib/log-transport.js +0 -136
  103. package/lib/log-transport.js.map +0 -1
  104. package/lib/permissions.d.ts.map +0 -1
  105. package/lib/permissions.js.map +0 -1
  106. package/src/app.ts +0 -772
  107. package/src/config.ts +0 -397
  108. package/src/log-transport.ts +0 -163
  109. package/tests/app.test.ts +0 -265
  110. package/tests/permissions.test.ts +0 -358
  111. package/tests/plugin.test.ts +0 -234
  112. package/tests/prompt.test.ts +0 -223
package/lib/config.d.ts DELETED
@@ -1,54 +0,0 @@
1
- import { Schema } from '@zhin.js/hmr';
2
- import type { AppConfig, DefineConfig } from "./types.js";
3
- import { EventEmitter } from "node:events";
4
- export interface ConfigOptions {
5
- configPath?: string;
6
- envPath?: string;
7
- envOverride?: boolean;
8
- }
9
- /**
10
- * 支持的配置文件格式
11
- */
12
- export type ConfigFormat = "json" | "yaml" | "yml" | "toml" | "js" | "ts";
13
- export declare class Config<T extends object = object> extends EventEmitter {
14
- #private;
15
- constructor(filename: string, schema: Schema<Partial<T>>, initialConfig: T);
16
- get filepath(): string;
17
- get config(): T;
18
- set config(newConfig: T);
19
- reload(): void;
20
- get<K extends Config.Paths<T>>(key: K): Config.Value<T, K>;
21
- set<K extends Config.Paths<T>>(key: K, value: Config.Value<T, K>): void;
22
- }
23
- export declare namespace Config {
24
- export const supportedExtensions: string[];
25
- export function proxyResult<T>(result: T, onSet: (value: T) => void): T;
26
- /**
27
- * 配置文件元数据,用于记录原始格式信息
28
- */
29
- interface ConfigMetadata {
30
- usesFunction: boolean;
31
- originalContent?: string;
32
- }
33
- /**
34
- * 智能保存配置文件,保留原有格式
35
- */
36
- export function save<T extends object>(filePath: string, config: T): void;
37
- /**
38
- * 记录配置文件的元数据
39
- */
40
- export function setMetadata(filePath: string, metadata: ConfigMetadata): void;
41
- /**
42
- * 获取配置文件的元数据
43
- */
44
- export function getMetadata(filePath: string): ConfigMetadata | undefined;
45
- export function load<T extends object>(filePath: string, schema: Schema<T>): Promise<T>;
46
- export type Value<T, K extends Paths<T>> = K extends `${infer Key}.${infer Rest}` ? Key extends keyof T ? Rest extends Paths<T[Key]> ? Value<T[Key], Rest> : never : never : K extends keyof T ? T[K] : never;
47
- export type Paths<T, Prefix extends string = "", Depth extends any[] = []> = Depth["length"] extends 10 ? never : {
48
- [K in keyof T]: T[K] extends object ? `${Prefix}${K & string}` | Paths<T[K], `${Prefix}${K & string}.`, [...Depth, 1]> : `${Prefix}${K & string}`;
49
- }[keyof T];
50
- export function getNestedObject<T>(obj: T, path: string): any;
51
- export {};
52
- }
53
- export declare function defineConfig<T extends DefineConfig<AppConfig>>(config: T): T;
54
- //# sourceMappingURL=config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/lib/config.js DELETED
@@ -1,308 +0,0 @@
1
- var _a;
2
- import fs from "node:fs";
3
- import path from "node:path";
4
- import { pathToFileURL } from "node:url";
5
- import { parse as parseYaml, stringify as stringifyYaml } from "yaml";
6
- import { parse as parseToml } from "toml";
7
- import { EventEmitter } from "node:events";
8
- export class Config extends EventEmitter {
9
- #filepath;
10
- #schema;
11
- #data;
12
- constructor(filename, schema, initialConfig) {
13
- super();
14
- const ext = path.extname(filename).toLowerCase();
15
- if (!_a.supportedExtensions.includes(ext)) {
16
- throw new Error(`不支持的配置文件格式: ${ext},支持的格式有 ${_a.supportedExtensions.join("/")}`);
17
- }
18
- const fullpath = path.resolve(process.cwd(), filename);
19
- if (!fs.existsSync(fullpath)) {
20
- _a.save(fullpath, initialConfig);
21
- }
22
- this.#filepath = fullpath;
23
- this.#schema = schema;
24
- this.#data = initialConfig;
25
- this.#load(this.#data);
26
- }
27
- get filepath() {
28
- return this.#filepath;
29
- }
30
- get config() {
31
- return _a.proxyResult(this.#data, () => { _a.save(this.#filepath, this.#data); });
32
- }
33
- set config(newConfig) {
34
- const beforeConfig = this.#data;
35
- this.#data = newConfig;
36
- this.emit("change", beforeConfig, this.#data);
37
- _a.save(this.#filepath, this.#data);
38
- }
39
- #load(before) {
40
- // 加载配置文件
41
- _a.load(this.#filepath, this.#schema)
42
- .then((data) => {
43
- this.#data = data;
44
- if (JSON.stringify(before) !== JSON.stringify(this.#data)) {
45
- this.emit("change", before, this.#data);
46
- }
47
- });
48
- }
49
- reload() {
50
- this.#load(this.#data);
51
- }
52
- get(key) {
53
- const lastKey = /\.?([^.]*)$/.exec(key)?.[1];
54
- if (!lastKey)
55
- throw new Error(`无法获取配置项: ${key}`);
56
- const obj = _a.getNestedObject(this.#data, key);
57
- const result = Reflect.get(obj, lastKey);
58
- return _a.proxyResult(result, () => { _a.save(this.#filepath, this.#data); });
59
- }
60
- set(key, value) {
61
- const prop = /\.?([^.]*)$/.exec(key)?.[1];
62
- if (!prop)
63
- throw new Error(`无法设置配置项: ${key}`);
64
- const obj = _a.getNestedObject(this.#data, key);
65
- const beforeConfig = this.#data;
66
- Reflect.set(obj, prop, value);
67
- _a.save(this.#filepath, this.#data);
68
- this.emit("change", beforeConfig, this.#data);
69
- }
70
- }
71
- _a = Config;
72
- (function (Config) {
73
- Config.supportedExtensions = [
74
- ".json",
75
- ".yaml",
76
- ".yml",
77
- ".toml",
78
- ".js",
79
- ".ts",
80
- ];
81
- function proxyResult(result, onSet) {
82
- if ((typeof result !== 'object' && typeof result !== 'string') || result === null)
83
- return result;
84
- if (typeof result === 'string')
85
- return replaceEnvVars(result);
86
- return new Proxy(result, {
87
- get(target, prop, receiver) {
88
- const value = Reflect.get(target, prop, receiver);
89
- return proxyResult(value, onSet);
90
- },
91
- set(target, prop, value, receiver) {
92
- const result = Reflect.set(target, prop, value, receiver);
93
- onSet(value);
94
- return result;
95
- }
96
- });
97
- }
98
- Config.proxyResult = proxyResult;
99
- // 存储配置文件的元数据
100
- const configMetadataMap = new Map();
101
- /**
102
- * 智能保存配置文件,保留原有格式
103
- */
104
- function save(filePath, config) {
105
- const ext = path.extname(filePath).toLowerCase();
106
- const metadata = configMetadataMap.get(filePath);
107
- let content;
108
- switch (ext) {
109
- case ".json":
110
- content = JSON.stringify(config, null, 2);
111
- break;
112
- case ".yaml":
113
- case ".yml":
114
- content = stringifyYaml(config, { indent: 2 });
115
- break;
116
- case ".toml":
117
- throw new Error("暂不支持保存 TOML 格式的配置文件");
118
- case ".js":
119
- case ".ts":
120
- // 智能保存 JS/TS 配置
121
- content = saveJsConfig(filePath, config, metadata);
122
- break;
123
- default:
124
- throw new Error(`不支持的配置文件格式: ${ext}`);
125
- }
126
- fs.writeFileSync(filePath, content, "utf-8");
127
- }
128
- Config.save = save;
129
- /**
130
- * 智能保存 JS/TS 配置文件,保留函数格式和环境变量
131
- */
132
- function saveJsConfig(filePath, config, metadata) {
133
- const ext = path.extname(filePath);
134
- const usesFunction = metadata?.usesFunction ?? false;
135
- const originalContent = metadata?.originalContent;
136
- if (usesFunction && originalContent) {
137
- // 如果使用函数导出,尝试保留原有格式并更新配置
138
- return updateJsConfigWithFunction(originalContent, config, ext === ".ts");
139
- }
140
- else {
141
- // 简单对象导出
142
- const typeAnnotation = ext === ".ts" ? ": DefineConfig<AppConfig>" : "";
143
- return `export default ${JSON.stringify(config, null, 2)}${typeAnnotation};`;
144
- }
145
- }
146
- /**
147
- * 更新使用函数导出的配置文件
148
- * 保留环境变量访问模式和原有代码结构
149
- */
150
- function updateJsConfigWithFunction(originalContent, newConfig, isTypeScript) {
151
- // 简单的字符串替换策略:
152
- // 1. 找到 return 语句中的对象
153
- // 2. 替换对象内容,但保留环境变量访问
154
- const returnMatch = originalContent.match(/return\s*({[\s\S]*?})\s*[;}]?\s*$/m);
155
- if (!returnMatch) {
156
- // 如果找不到 return 语句,回退到简单格式
157
- const typeAnnotation = isTypeScript ? ": DefineConfig<AppConfig>" : "";
158
- return `export default ${JSON.stringify(newConfig, null, 2)}${typeAnnotation};`;
159
- }
160
- // 保留原有的函数签名和代码结构
161
- // 只更新 return 语句中的对象
162
- const configString = formatConfigObject(newConfig, 2);
163
- const beforeReturn = originalContent.substring(0, returnMatch.index + 6); // "return"
164
- return `${beforeReturn.trim()} ${configString}\n});`;
165
- }
166
- /**
167
- * 格式化配置对象为字符串,保留环境变量访问模式
168
- */
169
- function formatConfigObject(obj, indent = 0) {
170
- const spaces = " ".repeat(indent);
171
- const nextSpaces = " ".repeat(indent + 2);
172
- if (obj === null || obj === undefined) {
173
- return String(obj);
174
- }
175
- if (typeof obj === "string") {
176
- for (const [key, value] of Object.entries(process.env)) {
177
- if (obj === value && value !== 'zhin')
178
- return `process.env.${key}`;
179
- }
180
- return JSON.stringify(obj);
181
- }
182
- if (typeof obj === "number" || typeof obj === "boolean") {
183
- return String(obj);
184
- }
185
- if (Array.isArray(obj)) {
186
- if (obj.length === 0)
187
- return "[]";
188
- const items = obj
189
- .map((item) => `${nextSpaces}${formatConfigObject(item, indent + 2)}`)
190
- .join(",\n");
191
- return `[\n${items}\n${spaces}]`;
192
- }
193
- if (typeof obj === "object") {
194
- const entries = Object.entries(obj);
195
- if (entries.length === 0)
196
- return "{}";
197
- const props = entries
198
- .map(([key, value]) => {
199
- const needsQuotes = /[^a-zA-Z0-9_$]/.test(key);
200
- const keyStr = needsQuotes ? `'${key}'` : key;
201
- return `${nextSpaces}${keyStr}: ${formatConfigObject(value, indent + 2)}`;
202
- })
203
- .join(",\n");
204
- return `{\n${props}\n${spaces}}`;
205
- }
206
- return JSON.stringify(obj);
207
- }
208
- /**
209
- * 记录配置文件的元数据
210
- */
211
- function setMetadata(filePath, metadata) {
212
- configMetadataMap.set(filePath, metadata);
213
- }
214
- Config.setMetadata = setMetadata;
215
- /**
216
- * 获取配置文件的元数据
217
- */
218
- function getMetadata(filePath) {
219
- return configMetadataMap.get(filePath);
220
- }
221
- Config.getMetadata = getMetadata;
222
- async function load(filePath, schema) {
223
- const ext = path.extname(filePath).toLowerCase();
224
- const content = fs.readFileSync(filePath, "utf-8");
225
- let rawConfig;
226
- let usesFunction = false;
227
- switch (ext) {
228
- case ".json":
229
- rawConfig = JSON.parse(content);
230
- break;
231
- case ".yaml":
232
- case ".yml":
233
- rawConfig = parseYaml(content);
234
- break;
235
- case ".toml":
236
- rawConfig = parseToml(content);
237
- break;
238
- case ".js":
239
- case ".ts":
240
- // 使用动态导入加载 JS/TS 模块
241
- const fileUrl = pathToFileURL(path.resolve(filePath)).href;
242
- const module = await import(`${fileUrl}?t=${Date.now()}`);
243
- // 支持 ES 模块的 default 导出和 CommonJS 模块
244
- rawConfig = module.default || module;
245
- if (typeof rawConfig === "function") {
246
- usesFunction = true;
247
- rawConfig = await rawConfig((process.env || {}));
248
- }
249
- // 记录元数据
250
- setMetadata(filePath, { usesFunction, originalContent: content });
251
- break;
252
- default:
253
- throw new Error(`不支持的配置文件格式: ${ext}`);
254
- }
255
- return schema(rawConfig);
256
- }
257
- Config.load = load;
258
- function getNestedObject(obj, path) {
259
- const parts = path.split(".");
260
- let current = obj;
261
- for (let i = 0; i < parts.length - 1; i++) {
262
- const part = parts[i];
263
- if (!(part in current)) {
264
- current[part] = {};
265
- }
266
- current = current[part];
267
- }
268
- return current;
269
- }
270
- Config.getNestedObject = getNestedObject;
271
- })(Config || (Config = {}));
272
- /**
273
- * 替换字符串中的环境变量
274
- */
275
- function replaceEnvVars(str) {
276
- if (typeof str !== 'string')
277
- return str;
278
- return str.replace(/^\$\{([^}]+)\}$/, (match, content) => {
279
- // 解析环境变量名和默认值
280
- const colonIndex = content.indexOf(":-");
281
- let envName;
282
- let defaultValue;
283
- if (colonIndex !== -1) {
284
- // 格式: VAR_NAME:-default_value
285
- envName = content.slice(0, colonIndex);
286
- defaultValue = content.slice(colonIndex + 2);
287
- }
288
- else {
289
- // 格式: VAR_NAME
290
- envName = content;
291
- defaultValue = undefined;
292
- }
293
- const envValue = process.env[envName];
294
- if (envValue !== undefined) {
295
- return envValue;
296
- }
297
- else if (defaultValue !== undefined) {
298
- return defaultValue;
299
- }
300
- else {
301
- return match;
302
- }
303
- });
304
- }
305
- export function defineConfig(config) {
306
- return config;
307
- }
308
- //# sourceMappingURL=config.js.map
package/lib/config.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -1,37 +0,0 @@
1
- import { LogTransport } from '@zhin.js/logger';
2
- import { App } from './app.js';
3
- /**
4
- * 数据库日志传输器
5
- * 将日志存储到数据库,并自动清理旧日志
6
- */
7
- export declare class DatabaseLogTransport implements LogTransport {
8
- private app;
9
- private stripAnsiRegex;
10
- private cleanupTimer?;
11
- private maxDays;
12
- private maxRecords;
13
- private cleanupInterval;
14
- constructor(app: App);
15
- /**
16
- * 启动定时清理任务
17
- */
18
- private startCleanup;
19
- /**
20
- * 清理旧日志
21
- */
22
- private cleanupOldLogs;
23
- /**
24
- * 停止清理任务
25
- */
26
- stopCleanup(): void;
27
- /**
28
- * 移除 ANSI 颜色代码
29
- */
30
- private stripAnsi;
31
- write(message: string): void;
32
- /**
33
- * 保存日志到数据库
34
- */
35
- private saveToDatabase;
36
- }
37
- //# sourceMappingURL=log-transport.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"log-transport.d.ts","sourceRoot":"","sources":["../src/log-transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAE9B;;;GAGG;AACH,qBAAa,oBAAqB,YAAW,YAAY;IACvD,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,cAAc,CAAoB;IAC1C,OAAO,CAAC,YAAY,CAAC,CAAgB;IACrC,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,eAAe,CAAQ;gBAEnB,GAAG,EAAE,GAAG;IAapB;;OAEG;IACH,OAAO,CAAC,YAAY;IAcpB;;OAEG;YACW,cAAc;IAkD5B;;OAEG;IACI,WAAW,IAAI,IAAI;IAO1B;;OAEG;IACH,OAAO,CAAC,SAAS;IAIjB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAqB5B;;OAEG;YACW,cAAc;CAsB7B"}
@@ -1,136 +0,0 @@
1
- /**
2
- * 数据库日志传输器
3
- * 将日志存储到数据库,并自动清理旧日志
4
- */
5
- export class DatabaseLogTransport {
6
- app;
7
- stripAnsiRegex = /\x1b\[[0-9;]*m/g;
8
- cleanupTimer;
9
- maxDays;
10
- maxRecords;
11
- cleanupInterval;
12
- constructor(app) {
13
- this.app = app;
14
- // 从配置读取日志清理策略
15
- const logConfig = app['config']?.log || {};
16
- this.maxDays = logConfig.maxDays || 7; // 默认保留 7 天
17
- this.maxRecords = logConfig.maxRecords || 10000; // 默认最多 10000 条
18
- this.cleanupInterval = logConfig.cleanupInterval || 24; // 默认 24 小时清理一次
19
- // 启动定时清理
20
- this.startCleanup();
21
- }
22
- /**
23
- * 启动定时清理任务
24
- */
25
- startCleanup() {
26
- // 立即执行一次清理
27
- this.cleanupOldLogs().catch(err => {
28
- this.app.logger.error('[DatabaseLogTransport] Initial cleanup failed:', err.message);
29
- });
30
- // 设置定时任务
31
- this.cleanupTimer = setInterval(() => {
32
- this.cleanupOldLogs().catch(err => {
33
- this.app.logger.error('[DatabaseLogTransport] Scheduled cleanup failed:', err.message);
34
- });
35
- }, this.cleanupInterval * 60 * 60 * 1000); // 转换为毫秒
36
- }
37
- /**
38
- * 清理旧日志
39
- */
40
- async cleanupOldLogs() {
41
- if (!this.app.database) {
42
- return;
43
- }
44
- try {
45
- const LogModel = this.app.database.model('SystemLog');
46
- if (!LogModel) {
47
- return;
48
- }
49
- // 1. 按时间清理:删除超过 maxDays 天的日志
50
- const cutoffDate = new Date();
51
- cutoffDate.setDate(cutoffDate.getDate() - this.maxDays);
52
- const deletedByDate = await LogModel
53
- .delete({ timestamp: { $lt: cutoffDate } });
54
- // 2. 按数量清理:如果日志总数超过 maxRecords,删除最旧的
55
- const total = await LogModel.select();
56
- const totalCount = total.length;
57
- if (totalCount > this.maxRecords) {
58
- const excessCount = totalCount - this.maxRecords;
59
- // 查找最旧的 excessCount 条日志的 ID
60
- const oldestLogs = await LogModel
61
- .select('id', 'timestamp')
62
- .orderBy('timestamp', 'ASC')
63
- .limit(excessCount);
64
- const idsToDelete = oldestLogs.map((log) => log.id);
65
- if (idsToDelete.length > 0) {
66
- await LogModel
67
- .delete({ id: { $in: idsToDelete } });
68
- }
69
- }
70
- this.app.logger.info(`[DatabaseLogTransport] Log cleanup completed. ` +
71
- `Deleted ${deletedByDate || 0} logs older than ${this.maxDays} days. ` +
72
- `Current total: ${Math.max(0, totalCount - (deletedByDate || 0))} logs.`);
73
- }
74
- catch (error) {
75
- // 静默处理错误
76
- this.app.logger.debug('[DatabaseLogTransport] Cleanup error:', error.message, error.stack);
77
- }
78
- }
79
- /**
80
- * 停止清理任务
81
- */
82
- stopCleanup() {
83
- if (this.cleanupTimer) {
84
- clearInterval(this.cleanupTimer);
85
- this.cleanupTimer = undefined;
86
- }
87
- }
88
- /**
89
- * 移除 ANSI 颜色代码
90
- */
91
- stripAnsi(str) {
92
- return str.replace(this.stripAnsiRegex, '');
93
- }
94
- write(message) {
95
- // 移除 ANSI 颜色代码
96
- const cleanMessage = this.stripAnsi(message);
97
- // 解析日志消息
98
- // 格式: [09-08 04:07:55.852] [INFO] [MyApp]: message
99
- const logRegex = /\[[\d-]+ [\d:.]+\] \[(\w+)\] \[([^\]]+)\]: ([\s\S]+)/;
100
- const match = cleanMessage.match(logRegex);
101
- if (match) {
102
- const [, level, name, msg] = match;
103
- const source = name.split(':')[0]; // 取第一部分作为 source
104
- // 异步存储到数据库,不阻塞日志输出
105
- this.saveToDatabase(level.toLowerCase(), name, msg.trim(), source).catch(err => {
106
- // 避免日志存储失败导致应用崩溃
107
- console.error('[DatabaseLogTransport] Failed to save log:', err.message);
108
- });
109
- }
110
- }
111
- /**
112
- * 保存日志到数据库
113
- */
114
- async saveToDatabase(level, name, message, source) {
115
- if (!this.app.database) {
116
- return; // 没有数据库则跳过
117
- }
118
- try {
119
- const LogModel = this.app.database.model('SystemLog');
120
- if (!LogModel) {
121
- return; // 模型不存在则跳过
122
- }
123
- await LogModel.create({
124
- level,
125
- name,
126
- message,
127
- source,
128
- timestamp: new Date()
129
- });
130
- }
131
- catch (error) {
132
- // 静默处理错误,避免干扰主流程
133
- }
134
- }
135
- }
136
- //# sourceMappingURL=log-transport.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"log-transport.js","sourceRoot":"","sources":["../src/log-transport.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../src/permissions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,iBAAiB,GAAG,iBAAiB,IAAI;IAC1E,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;IACrB,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAA;CAC9B,CAAA;AACD,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,iBAAiB,GAAG,iBAAiB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,OAAO,CAAC,CAAA;AAC7J,qBAAa,WAAY,SAAQ,KAAK,CAAC,cAAc,CAAC;IACtC,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAAH,GAAG,EAAE,GAAG;IAoCrC,GAAG,CAAC,UAAU,EAAE,cAAc;IAG9B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;CAMhD;AACD,yBAAiB,WAAW,CAAA;IACxB,SAAgB,MAAM,CAAC,CAAC,SAAS,iBAAiB,GAAG,iBAAiB,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAE7I;CACJ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"permissions.js","sourceRoot":"","sources":["../src/permissions.ts"],"names":[],"mappings":"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"}