@nebulaaa/journal 0.0.0-stage → 1.0.1

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.
@@ -0,0 +1,256 @@
1
+ 'use strict';
2
+
3
+ /*****************************************************************************
4
+ Author: DoooReyn
5
+ Feature: journal
6
+ Descriptions: 日志常量与默认配置
7
+ *****************************************************************************/
8
+ /** 全部分级,按权重由低到高排列 */
9
+ const JOURNAL_LEVELS = ['debug', 'info', 'warn', 'error', 'disable'];
10
+ /** 分级权重表:数值越大,输出门槛越高 */
11
+ const JOURNAL_LEVEL_WEIGHTS = {
12
+ debug: 0,
13
+ info: 1,
14
+ warn: 2,
15
+ error: 3,
16
+ disable: 4,
17
+ };
18
+ /** 默认分级样式 */
19
+ const JOURNAL_DEFAULT_LEVEL_STYLES = {
20
+ debug: { label: '[Debug]', color: '#8C8C8C' },
21
+ info: { label: '[Info]', color: '#0986FF' },
22
+ warn: { label: '[Warn]', color: '#E6A23C' },
23
+ error: { label: '[Error]', color: '#D93026' },
24
+ disable: { label: '[Disable]', color: '' },
25
+ };
26
+ /** 默认记录器名称 */
27
+ const JOURNAL_DEFAULT_LOGGER_NAME = 'journal';
28
+
29
+ /*****************************************************************************
30
+ Author: DoooReyn
31
+ Feature: journal
32
+ Descriptions: 日志管理器与记录器
33
+ *****************************************************************************/
34
+ /** 各分级对应的控制台输出方法(debug 走 log,兼容性更好) */
35
+ const CONSOLE_METHODS = {
36
+ debug: 'log',
37
+ info: 'info',
38
+ warn: 'warn',
39
+ error: 'error',
40
+ };
41
+ /**
42
+ * 日志记录器
43
+ *
44
+ * 由 Journal 创建,持有独立分级;输出记录时受双重限制:
45
+ * 1. 记录器分级低于所属管理器分级时,该记录器整体视为忽略;
46
+ * 2. 记录分级低于记录器分级时,该条记录视为忽略。
47
+ */
48
+ class JournalLogger {
49
+ constructor(options) {
50
+ var _a;
51
+ this.name = options.name;
52
+ this.level = (_a = options.level) !== null && _a !== void 0 ? _a : 'debug';
53
+ }
54
+ /** 输出 debug 级别记录 */
55
+ debug(message, ...args) {
56
+ this.log('debug', message, ...args);
57
+ }
58
+ /** 输出 info 级别记录 */
59
+ info(message, ...args) {
60
+ this.log('info', message, ...args);
61
+ }
62
+ /** 输出 warn 级别记录 */
63
+ warn(message, ...args) {
64
+ this.log('warn', message, ...args);
65
+ }
66
+ /** 输出 error 级别记录 */
67
+ error(message, ...args) {
68
+ this.log('error', message, ...args);
69
+ }
70
+ /**
71
+ * 输出一条记录,分级规则见类说明
72
+ * @param level 记录分级
73
+ * @param message 记录内容
74
+ * @param args 附加内容,透传给 console
75
+ */
76
+ log(level, message, ...args) {
77
+ if (level === 'disable') {
78
+ return;
79
+ }
80
+ if (JOURNAL_LEVEL_WEIGHTS[this.level] < JOURNAL_LEVEL_WEIGHTS[Journal.Level]) {
81
+ return;
82
+ }
83
+ if (JOURNAL_LEVEL_WEIGHTS[level] < JOURNAL_LEVEL_WEIGHTS[this.level]) {
84
+ return;
85
+ }
86
+ const style = Journal.GetLevelStyle(level);
87
+ const text = `[${this.name}] ${String(message)}`;
88
+ const method = CONSOLE_METHODS[level];
89
+ if (style.color) {
90
+ console[method](`%c${style.label}%c ${text}`, `color:${style.color};font-weight:bold;`, 'color:inherit;font-weight:inherit;', ...args);
91
+ }
92
+ else {
93
+ console[method](`${style.label} ${text}`, ...args);
94
+ }
95
+ }
96
+ }
97
+ /**
98
+ * 日志管理器(静态类)
99
+ *
100
+ * 通过 Journal.init(options) 初始化,必须初始化后才能使用:
101
+ * 未初始化时管理器分级为 disable,任何记录都不会输出,
102
+ * 且管理操作会被警告并忽略;使用 Journal.reset() 可恢复未初始化状态。
103
+ * 内置一个默认记录器,用于便捷记录,不占用记录器表,分级随管理器动态调整。
104
+ */
105
+ class Journal {
106
+ /** 静态类,禁止实例化 */
107
+ constructor() { }
108
+ /**
109
+ * 初始化;仅首次调用生效,重复调用将被警告并忽略
110
+ * @param options 管理器配置
111
+ */
112
+ static Init(options) {
113
+ var _a, _b, _c;
114
+ if (Journal._Initialized) {
115
+ console.warn('[Journal] 已初始化,请勿重复调用 init()');
116
+ return;
117
+ }
118
+ Journal._Initialized = true;
119
+ Journal._Level = (_a = options === null || options === void 0 ? void 0 : options.level) !== null && _a !== void 0 ? _a : 'debug';
120
+ Journal._Logger = new JournalLogger({ name: JOURNAL_DEFAULT_LOGGER_NAME, level: Journal._Level });
121
+ const overrides = options === null || options === void 0 ? void 0 : options.levels;
122
+ if (overrides) {
123
+ for (const level of JOURNAL_LEVELS) {
124
+ const style = overrides[level];
125
+ if (style) {
126
+ Journal._Styles[level] = Object.assign(Object.assign({}, Journal._Styles[level]), style);
127
+ }
128
+ }
129
+ }
130
+ for (const config of (_b = options === null || options === void 0 ? void 0 : options.loggers) !== null && _b !== void 0 ? _b : []) {
131
+ Journal.CreateLogger(config.name, (_c = config.level) !== null && _c !== void 0 ? _c : 'debug');
132
+ }
133
+ }
134
+ /** 重置为未初始化状态:清空记录器、恢复默认样式与分级 */
135
+ static Reset() {
136
+ Journal._Initialized = false;
137
+ Journal._Level = 'disable';
138
+ Journal._Logger = null;
139
+ Journal._Styles = Object.assign({}, JOURNAL_DEFAULT_LEVEL_STYLES);
140
+ Journal._Loggers.clear();
141
+ }
142
+ /** 管理器分级 */
143
+ static get Level() {
144
+ return Journal._Level;
145
+ }
146
+ static set Level(level) {
147
+ if (!Journal.EnsureReady()) {
148
+ return;
149
+ }
150
+ Journal._Level = level;
151
+ Journal._Logger.level = level;
152
+ }
153
+ /** 输出 debug 级别记录(默认记录器) */
154
+ static Debug(message, ...args) {
155
+ Journal.Log('debug', message, ...args);
156
+ }
157
+ /** 输出 info 级别记录(默认记录器) */
158
+ static Info(message, ...args) {
159
+ Journal.Log('info', message, ...args);
160
+ }
161
+ /** 输出 warn 级别记录(默认记录器) */
162
+ static Warn(message, ...args) {
163
+ Journal.Log('warn', message, ...args);
164
+ }
165
+ /** 输出 error 级别记录(默认记录器) */
166
+ static Error(message, ...args) {
167
+ Journal.Log('error', message, ...args);
168
+ }
169
+ /**
170
+ * 输出一条记录(默认记录器)
171
+ * @param level 记录分级
172
+ * @param message 记录内容
173
+ * @param args 附加内容,透传给 console
174
+ */
175
+ static Log(level, message, ...args) {
176
+ var _a;
177
+ if (!Journal.EnsureReady()) {
178
+ return;
179
+ }
180
+ (_a = Journal._Logger) === null || _a === void 0 ? void 0 : _a.log(level, message, ...args);
181
+ }
182
+ /** 获取分级样式 */
183
+ static GetLevelStyle(level) {
184
+ return Journal._Styles[level];
185
+ }
186
+ /** 更新分级样式,仅覆盖传入字段 */
187
+ static SetLevelStyle(level, style) {
188
+ if (!Journal.EnsureReady()) {
189
+ return;
190
+ }
191
+ Journal._Styles[level] = Object.assign(Object.assign({}, Journal._Styles[level]), style);
192
+ }
193
+ /**
194
+ * 创建记录器;同名记录器已存在时更新其分级并返回原实例
195
+ * @param name 记录器名称
196
+ * @param level 记录器分级,默认为 debug
197
+ */
198
+ static CreateLogger(name, level = 'debug') {
199
+ if (!Journal.EnsureReady()) {
200
+ return null;
201
+ }
202
+ const existing = Journal._Loggers.get(name);
203
+ if (existing) {
204
+ existing.level = level;
205
+ return existing;
206
+ }
207
+ const logger = new JournalLogger({ name, level });
208
+ Journal._Loggers.set(name, logger);
209
+ return logger;
210
+ }
211
+ /** 获取记录器,不存在时以管理器当前分级创建并返回 */
212
+ static GetLogger(name) {
213
+ var _a;
214
+ if (!Journal.EnsureReady()) {
215
+ return null;
216
+ }
217
+ return (_a = Journal._Loggers.get(name)) !== null && _a !== void 0 ? _a : Journal.CreateLogger(name, Journal._Level);
218
+ }
219
+ /** 移除记录器,返回是否移除成功 */
220
+ static RemoveLogger(name) {
221
+ return Journal._Loggers.delete(name);
222
+ }
223
+ /** 清空全部记录器,不影响默认记录器 */
224
+ static ClearLoggers() {
225
+ Journal._Loggers.clear();
226
+ }
227
+ /** 获取全部记录器,不含默认记录器 */
228
+ static GetLoggers() {
229
+ return [...Journal._Loggers.values()];
230
+ }
231
+ /** 未初始化时警告并返回 false */
232
+ static EnsureReady() {
233
+ if (!Journal._Initialized) {
234
+ console.warn('[Journal] 尚未初始化,请先调用 Journal.Init()');
235
+ return false;
236
+ }
237
+ return true;
238
+ }
239
+ }
240
+ /** 是否已初始化 */
241
+ Journal._Initialized = false;
242
+ /** 管理器分级;未初始化时为 disable,确保无任何输出 */
243
+ Journal._Level = 'disable';
244
+ /** 默认记录器;分级随管理器动态调整 */
245
+ Journal._Logger = null;
246
+ /** 分级样式表 */
247
+ Journal._Styles = Object.assign({}, JOURNAL_DEFAULT_LEVEL_STYLES);
248
+ /** 记录器表 */
249
+ Journal._Loggers = new Map();
250
+
251
+ exports.JOURNAL_DEFAULT_LEVEL_STYLES = JOURNAL_DEFAULT_LEVEL_STYLES;
252
+ exports.JOURNAL_DEFAULT_LOGGER_NAME = JOURNAL_DEFAULT_LOGGER_NAME;
253
+ exports.JOURNAL_LEVELS = JOURNAL_LEVELS;
254
+ exports.JOURNAL_LEVEL_WEIGHTS = JOURNAL_LEVEL_WEIGHTS;
255
+ exports.Journal = Journal;
256
+ exports.JournalLogger = JournalLogger;
@@ -0,0 +1,155 @@
1
+ /*****************************************************************************
2
+ Author: DoooReyn
3
+ Feature: journal
4
+ Descriptions: 日志类型定义
5
+ *****************************************************************************/
6
+ /** 日志分级,权重由低到高,disable 表示不输出任何日志 */
7
+ type JournalLevel = 'debug' | 'info' | 'warn' | 'error' | 'disable';
8
+ /** 可用于输出记录的分级(不含 disable) */
9
+ type JournalPrintLevel = Exclude<JournalLevel, 'disable'>;
10
+ /** 分级样式:标记与颜色 */
11
+ interface JournalLevelStyle {
12
+ /** 分级标记,输出于日志头部,如 "[Debug]" */
13
+ label: string;
14
+ /** 分级颜色,支持任意 CSS 颜色值;留空表示不着色 */
15
+ color: string;
16
+ }
17
+ /** 记录器配置 */
18
+ interface JournalLoggerOptions {
19
+ /** 记录器名称,需非空且在所属管理器内唯一 */
20
+ name: string;
21
+ /** 记录器分级,默认为 debug */
22
+ level?: JournalLevel;
23
+ }
24
+ /** 日志管理器配置 */
25
+ interface JournalManagerOptions {
26
+ /** 管理器分级,默认为 debug */
27
+ level?: JournalLevel;
28
+ /** 分级样式配置,覆盖对应分级的默认标记与颜色 */
29
+ levels?: {
30
+ [L in JournalLevel]?: Partial<JournalLevelStyle>;
31
+ };
32
+ /** 初始记录器配置列表 */
33
+ loggers?: JournalLoggerOptions[];
34
+ }
35
+
36
+ /*****************************************************************************
37
+ Author: DoooReyn
38
+ Feature: journal
39
+ Descriptions: 日志常量与默认配置
40
+ *****************************************************************************/
41
+
42
+ /** 全部分级,按权重由低到高排列 */
43
+ declare const JOURNAL_LEVELS: readonly ["debug", "info", "warn", "error", "disable"];
44
+ /** 分级权重表:数值越大,输出门槛越高 */
45
+ declare const JOURNAL_LEVEL_WEIGHTS: Record<JournalLevel, number>;
46
+ /** 默认分级样式 */
47
+ declare const JOURNAL_DEFAULT_LEVEL_STYLES: Record<JournalLevel, JournalLevelStyle>;
48
+ /** 默认记录器名称 */
49
+ declare const JOURNAL_DEFAULT_LOGGER_NAME = "journal";
50
+
51
+ /*****************************************************************************
52
+ Author: DoooReyn
53
+ Feature: journal
54
+ Descriptions: 日志管理器与记录器
55
+ *****************************************************************************/
56
+
57
+ /**
58
+ * 日志记录器
59
+ *
60
+ * 由 Journal 创建,持有独立分级;输出记录时受双重限制:
61
+ * 1. 记录器分级低于所属管理器分级时,该记录器整体视为忽略;
62
+ * 2. 记录分级低于记录器分级时,该条记录视为忽略。
63
+ */
64
+ declare class JournalLogger {
65
+ /** 记录器名称 */
66
+ readonly name: string;
67
+ /** 记录器分级 */
68
+ level: JournalLevel;
69
+ constructor(options: JournalLoggerOptions);
70
+ /** 输出 debug 级别记录 */
71
+ debug(message: unknown, ...args: unknown[]): void;
72
+ /** 输出 info 级别记录 */
73
+ info(message: unknown, ...args: unknown[]): void;
74
+ /** 输出 warn 级别记录 */
75
+ warn(message: unknown, ...args: unknown[]): void;
76
+ /** 输出 error 级别记录 */
77
+ error(message: unknown, ...args: unknown[]): void;
78
+ /**
79
+ * 输出一条记录,分级规则见类说明
80
+ * @param level 记录分级
81
+ * @param message 记录内容
82
+ * @param args 附加内容,透传给 console
83
+ */
84
+ log(level: JournalLevel, message: unknown, ...args: unknown[]): void;
85
+ }
86
+ /**
87
+ * 日志管理器(静态类)
88
+ *
89
+ * 通过 Journal.init(options) 初始化,必须初始化后才能使用:
90
+ * 未初始化时管理器分级为 disable,任何记录都不会输出,
91
+ * 且管理操作会被警告并忽略;使用 Journal.reset() 可恢复未初始化状态。
92
+ * 内置一个默认记录器,用于便捷记录,不占用记录器表,分级随管理器动态调整。
93
+ */
94
+ declare class Journal {
95
+ /** 是否已初始化 */
96
+ private static _Initialized;
97
+ /** 管理器分级;未初始化时为 disable,确保无任何输出 */
98
+ private static _Level;
99
+ /** 默认记录器;分级随管理器动态调整 */
100
+ private static _Logger;
101
+ /** 分级样式表 */
102
+ private static _Styles;
103
+ /** 记录器表 */
104
+ private static _Loggers;
105
+ /** 静态类,禁止实例化 */
106
+ private constructor();
107
+ /**
108
+ * 初始化;仅首次调用生效,重复调用将被警告并忽略
109
+ * @param options 管理器配置
110
+ */
111
+ static Init(options?: JournalManagerOptions): void;
112
+ /** 重置为未初始化状态:清空记录器、恢复默认样式与分级 */
113
+ static Reset(): void;
114
+ /** 管理器分级 */
115
+ static get Level(): JournalLevel;
116
+ static set Level(level: JournalLevel);
117
+ /** 输出 debug 级别记录(默认记录器) */
118
+ static Debug(message: unknown, ...args: unknown[]): void;
119
+ /** 输出 info 级别记录(默认记录器) */
120
+ static Info(message: unknown, ...args: unknown[]): void;
121
+ /** 输出 warn 级别记录(默认记录器) */
122
+ static Warn(message: unknown, ...args: unknown[]): void;
123
+ /** 输出 error 级别记录(默认记录器) */
124
+ static Error(message: unknown, ...args: unknown[]): void;
125
+ /**
126
+ * 输出一条记录(默认记录器)
127
+ * @param level 记录分级
128
+ * @param message 记录内容
129
+ * @param args 附加内容,透传给 console
130
+ */
131
+ private static Log;
132
+ /** 获取分级样式 */
133
+ static GetLevelStyle(level: JournalLevel): Readonly<JournalLevelStyle>;
134
+ /** 更新分级样式,仅覆盖传入字段 */
135
+ static SetLevelStyle(level: JournalLevel, style: Partial<JournalLevelStyle>): void;
136
+ /**
137
+ * 创建记录器;同名记录器已存在时更新其分级并返回原实例
138
+ * @param name 记录器名称
139
+ * @param level 记录器分级,默认为 debug
140
+ */
141
+ static CreateLogger(name: string, level?: JournalLevel): JournalLogger | null;
142
+ /** 获取记录器,不存在时以管理器当前分级创建并返回 */
143
+ static GetLogger(name: string): JournalLogger | null;
144
+ /** 移除记录器,返回是否移除成功 */
145
+ static RemoveLogger(name: string): boolean;
146
+ /** 清空全部记录器,不影响默认记录器 */
147
+ static ClearLoggers(): void;
148
+ /** 获取全部记录器,不含默认记录器 */
149
+ static GetLoggers(): JournalLogger[];
150
+ /** 未初始化时警告并返回 false */
151
+ private static EnsureReady;
152
+ }
153
+
154
+ export { JOURNAL_DEFAULT_LEVEL_STYLES, JOURNAL_DEFAULT_LOGGER_NAME, JOURNAL_LEVELS, JOURNAL_LEVEL_WEIGHTS, Journal, JournalLogger };
155
+ export type { JournalLevel, JournalLevelStyle, JournalLoggerOptions, JournalManagerOptions, JournalPrintLevel };
@@ -0,0 +1 @@
1
+ "use strict";const e=["debug","info","warn","error","disable"],r={debug:0,info:1,warn:2,error:3,disable:4},l={debug:{label:"[Debug]",color:"#8C8C8C"},info:{label:"[Info]",color:"#0986FF"},warn:{label:"[Warn]",color:"#E6A23C"},error:{label:"[Error]",color:"#D93026"},disable:{label:"[Disable]",color:""}},o="journal",t={debug:"log",info:"info",warn:"warn",error:"error"};class n{constructor(e){var r;this.name=e.name,this.level=null!==(r=e.level)&&void 0!==r?r:"debug"}debug(e,...r){this.log("debug",e,...r)}info(e,...r){this.log("info",e,...r)}warn(e,...r){this.log("warn",e,...r)}error(e,...r){this.log("error",e,...r)}log(e,l,...o){if("disable"===e)return;if(r[this.level]<r[s.Level])return;if(r[e]<r[this.level])return;const n=s.GetLevelStyle(e),i=`[${this.name}] ${String(l)}`,a=t[e];n.color?console[a](`%c${n.label}%c ${i}`,`color:${n.color};font-weight:bold;`,"color:inherit;font-weight:inherit;",...o):console[a](`${n.label} ${i}`,...o)}}class s{constructor(){}static Init(r){var l,t,i;if(s._Initialized)return void console.warn("[Journal] 已初始化,请勿重复调用 init()");s._Initialized=!0,s._Level=null!==(l=null==r?void 0:r.level)&&void 0!==l?l:"debug",s._Logger=new n({name:o,level:s._Level});const a=null==r?void 0:r.levels;if(a)for(const r of e){const e=a[r];e&&(s._Styles[r]=Object.assign(Object.assign({},s._Styles[r]),e))}for(const e of null!==(t=null==r?void 0:r.loggers)&&void 0!==t?t:[])s.CreateLogger(e.name,null!==(i=e.level)&&void 0!==i?i:"debug")}static Reset(){s._Initialized=!1,s._Level="disable",s._Logger=null,s._Styles=Object.assign({},l),s._Loggers.clear()}static get Level(){return s._Level}static set Level(e){s.EnsureReady()&&(s._Level=e,s._Logger.level=e)}static Debug(e,...r){s.Log("debug",e,...r)}static Info(e,...r){s.Log("info",e,...r)}static Warn(e,...r){s.Log("warn",e,...r)}static Error(e,...r){s.Log("error",e,...r)}static Log(e,r,...l){var o;s.EnsureReady()&&(null===(o=s._Logger)||void 0===o||o.log(e,r,...l))}static GetLevelStyle(e){return s._Styles[e]}static SetLevelStyle(e,r){s.EnsureReady()&&(s._Styles[e]=Object.assign(Object.assign({},s._Styles[e]),r))}static CreateLogger(e,r="debug"){if(!s.EnsureReady())return null;const l=s._Loggers.get(e);if(l)return l.level=r,l;const o=new n({name:e,level:r});return s._Loggers.set(e,o),o}static GetLogger(e){var r;return s.EnsureReady()?null!==(r=s._Loggers.get(e))&&void 0!==r?r:s.CreateLogger(e,s._Level):null}static RemoveLogger(e){return s._Loggers.delete(e)}static ClearLoggers(){s._Loggers.clear()}static GetLoggers(){return[...s._Loggers.values()]}static EnsureReady(){return!!s._Initialized||(console.warn("[Journal] 尚未初始化,请先调用 Journal.Init()"),!1)}}s._Initialized=!1,s._Level="disable",s._Logger=null,s._Styles=Object.assign({},l),s._Loggers=new Map,exports.JOURNAL_DEFAULT_LEVEL_STYLES=l,exports.JOURNAL_DEFAULT_LOGGER_NAME=o,exports.JOURNAL_LEVELS=e,exports.JOURNAL_LEVEL_WEIGHTS=r,exports.Journal=s,exports.JournalLogger=n;
@@ -0,0 +1 @@
1
+ const e=["debug","info","warn","error","disable"],l={debug:0,info:1,warn:2,error:3,disable:4},r={debug:{label:"[Debug]",color:"#8C8C8C"},info:{label:"[Info]",color:"#0986FF"},warn:{label:"[Warn]",color:"#E6A23C"},error:{label:"[Error]",color:"#D93026"},disable:{label:"[Disable]",color:""}},t="journal",o={debug:"log",info:"info",warn:"warn",error:"error"};class n{constructor(e){var l;this.name=e.name,this.level=null!==(l=e.level)&&void 0!==l?l:"debug"}debug(e,...l){this.log("debug",e,...l)}info(e,...l){this.log("info",e,...l)}warn(e,...l){this.log("warn",e,...l)}error(e,...l){this.log("error",e,...l)}log(e,r,...t){if("disable"===e)return;if(l[this.level]<l[s.Level])return;if(l[e]<l[this.level])return;const n=s.GetLevelStyle(e),i=`[${this.name}] ${String(r)}`,a=o[e];n.color?console[a](`%c${n.label}%c ${i}`,`color:${n.color};font-weight:bold;`,"color:inherit;font-weight:inherit;",...t):console[a](`${n.label} ${i}`,...t)}}class s{constructor(){}static Init(l){var r,o,i;if(s._Initialized)return void console.warn("[Journal] 已初始化,请勿重复调用 init()");s._Initialized=!0,s._Level=null!==(r=null==l?void 0:l.level)&&void 0!==r?r:"debug",s._Logger=new n({name:t,level:s._Level});const a=null==l?void 0:l.levels;if(a)for(const l of e){const e=a[l];e&&(s._Styles[l]=Object.assign(Object.assign({},s._Styles[l]),e))}for(const e of null!==(o=null==l?void 0:l.loggers)&&void 0!==o?o:[])s.CreateLogger(e.name,null!==(i=e.level)&&void 0!==i?i:"debug")}static Reset(){s._Initialized=!1,s._Level="disable",s._Logger=null,s._Styles=Object.assign({},r),s._Loggers.clear()}static get Level(){return s._Level}static set Level(e){s.EnsureReady()&&(s._Level=e,s._Logger.level=e)}static Debug(e,...l){s.Log("debug",e,...l)}static Info(e,...l){s.Log("info",e,...l)}static Warn(e,...l){s.Log("warn",e,...l)}static Error(e,...l){s.Log("error",e,...l)}static Log(e,l,...r){var t;s.EnsureReady()&&(null===(t=s._Logger)||void 0===t||t.log(e,l,...r))}static GetLevelStyle(e){return s._Styles[e]}static SetLevelStyle(e,l){s.EnsureReady()&&(s._Styles[e]=Object.assign(Object.assign({},s._Styles[e]),l))}static CreateLogger(e,l="debug"){if(!s.EnsureReady())return null;const r=s._Loggers.get(e);if(r)return r.level=l,r;const t=new n({name:e,level:l});return s._Loggers.set(e,t),t}static GetLogger(e){var l;return s.EnsureReady()?null!==(l=s._Loggers.get(e))&&void 0!==l?l:s.CreateLogger(e,s._Level):null}static RemoveLogger(e){return s._Loggers.delete(e)}static ClearLoggers(){s._Loggers.clear()}static GetLoggers(){return[...s._Loggers.values()]}static EnsureReady(){return!!s._Initialized||(console.warn("[Journal] 尚未初始化,请先调用 Journal.Init()"),!1)}}s._Initialized=!1,s._Level="disable",s._Logger=null,s._Styles=Object.assign({},r),s._Loggers=new Map;export{r as JOURNAL_DEFAULT_LEVEL_STYLES,t as JOURNAL_DEFAULT_LOGGER_NAME,e as JOURNAL_LEVELS,l as JOURNAL_LEVEL_WEIGHTS,s as Journal,n as JournalLogger};
@@ -0,0 +1,249 @@
1
+ /*****************************************************************************
2
+ Author: DoooReyn
3
+ Feature: journal
4
+ Descriptions: 日志常量与默认配置
5
+ *****************************************************************************/
6
+ /** 全部分级,按权重由低到高排列 */
7
+ const JOURNAL_LEVELS = ['debug', 'info', 'warn', 'error', 'disable'];
8
+ /** 分级权重表:数值越大,输出门槛越高 */
9
+ const JOURNAL_LEVEL_WEIGHTS = {
10
+ debug: 0,
11
+ info: 1,
12
+ warn: 2,
13
+ error: 3,
14
+ disable: 4,
15
+ };
16
+ /** 默认分级样式 */
17
+ const JOURNAL_DEFAULT_LEVEL_STYLES = {
18
+ debug: { label: '[Debug]', color: '#8C8C8C' },
19
+ info: { label: '[Info]', color: '#0986FF' },
20
+ warn: { label: '[Warn]', color: '#E6A23C' },
21
+ error: { label: '[Error]', color: '#D93026' },
22
+ disable: { label: '[Disable]', color: '' },
23
+ };
24
+ /** 默认记录器名称 */
25
+ const JOURNAL_DEFAULT_LOGGER_NAME = 'journal';
26
+
27
+ /*****************************************************************************
28
+ Author: DoooReyn
29
+ Feature: journal
30
+ Descriptions: 日志管理器与记录器
31
+ *****************************************************************************/
32
+ /** 各分级对应的控制台输出方法(debug 走 log,兼容性更好) */
33
+ const CONSOLE_METHODS = {
34
+ debug: 'log',
35
+ info: 'info',
36
+ warn: 'warn',
37
+ error: 'error',
38
+ };
39
+ /**
40
+ * 日志记录器
41
+ *
42
+ * 由 Journal 创建,持有独立分级;输出记录时受双重限制:
43
+ * 1. 记录器分级低于所属管理器分级时,该记录器整体视为忽略;
44
+ * 2. 记录分级低于记录器分级时,该条记录视为忽略。
45
+ */
46
+ class JournalLogger {
47
+ constructor(options) {
48
+ var _a;
49
+ this.name = options.name;
50
+ this.level = (_a = options.level) !== null && _a !== void 0 ? _a : 'debug';
51
+ }
52
+ /** 输出 debug 级别记录 */
53
+ debug(message, ...args) {
54
+ this.log('debug', message, ...args);
55
+ }
56
+ /** 输出 info 级别记录 */
57
+ info(message, ...args) {
58
+ this.log('info', message, ...args);
59
+ }
60
+ /** 输出 warn 级别记录 */
61
+ warn(message, ...args) {
62
+ this.log('warn', message, ...args);
63
+ }
64
+ /** 输出 error 级别记录 */
65
+ error(message, ...args) {
66
+ this.log('error', message, ...args);
67
+ }
68
+ /**
69
+ * 输出一条记录,分级规则见类说明
70
+ * @param level 记录分级
71
+ * @param message 记录内容
72
+ * @param args 附加内容,透传给 console
73
+ */
74
+ log(level, message, ...args) {
75
+ if (level === 'disable') {
76
+ return;
77
+ }
78
+ if (JOURNAL_LEVEL_WEIGHTS[this.level] < JOURNAL_LEVEL_WEIGHTS[Journal.Level]) {
79
+ return;
80
+ }
81
+ if (JOURNAL_LEVEL_WEIGHTS[level] < JOURNAL_LEVEL_WEIGHTS[this.level]) {
82
+ return;
83
+ }
84
+ const style = Journal.GetLevelStyle(level);
85
+ const text = `[${this.name}] ${String(message)}`;
86
+ const method = CONSOLE_METHODS[level];
87
+ if (style.color) {
88
+ console[method](`%c${style.label}%c ${text}`, `color:${style.color};font-weight:bold;`, 'color:inherit;font-weight:inherit;', ...args);
89
+ }
90
+ else {
91
+ console[method](`${style.label} ${text}`, ...args);
92
+ }
93
+ }
94
+ }
95
+ /**
96
+ * 日志管理器(静态类)
97
+ *
98
+ * 通过 Journal.init(options) 初始化,必须初始化后才能使用:
99
+ * 未初始化时管理器分级为 disable,任何记录都不会输出,
100
+ * 且管理操作会被警告并忽略;使用 Journal.reset() 可恢复未初始化状态。
101
+ * 内置一个默认记录器,用于便捷记录,不占用记录器表,分级随管理器动态调整。
102
+ */
103
+ class Journal {
104
+ /** 静态类,禁止实例化 */
105
+ constructor() { }
106
+ /**
107
+ * 初始化;仅首次调用生效,重复调用将被警告并忽略
108
+ * @param options 管理器配置
109
+ */
110
+ static Init(options) {
111
+ var _a, _b, _c;
112
+ if (Journal._Initialized) {
113
+ console.warn('[Journal] 已初始化,请勿重复调用 init()');
114
+ return;
115
+ }
116
+ Journal._Initialized = true;
117
+ Journal._Level = (_a = options === null || options === void 0 ? void 0 : options.level) !== null && _a !== void 0 ? _a : 'debug';
118
+ Journal._Logger = new JournalLogger({ name: JOURNAL_DEFAULT_LOGGER_NAME, level: Journal._Level });
119
+ const overrides = options === null || options === void 0 ? void 0 : options.levels;
120
+ if (overrides) {
121
+ for (const level of JOURNAL_LEVELS) {
122
+ const style = overrides[level];
123
+ if (style) {
124
+ Journal._Styles[level] = Object.assign(Object.assign({}, Journal._Styles[level]), style);
125
+ }
126
+ }
127
+ }
128
+ for (const config of (_b = options === null || options === void 0 ? void 0 : options.loggers) !== null && _b !== void 0 ? _b : []) {
129
+ Journal.CreateLogger(config.name, (_c = config.level) !== null && _c !== void 0 ? _c : 'debug');
130
+ }
131
+ }
132
+ /** 重置为未初始化状态:清空记录器、恢复默认样式与分级 */
133
+ static Reset() {
134
+ Journal._Initialized = false;
135
+ Journal._Level = 'disable';
136
+ Journal._Logger = null;
137
+ Journal._Styles = Object.assign({}, JOURNAL_DEFAULT_LEVEL_STYLES);
138
+ Journal._Loggers.clear();
139
+ }
140
+ /** 管理器分级 */
141
+ static get Level() {
142
+ return Journal._Level;
143
+ }
144
+ static set Level(level) {
145
+ if (!Journal.EnsureReady()) {
146
+ return;
147
+ }
148
+ Journal._Level = level;
149
+ Journal._Logger.level = level;
150
+ }
151
+ /** 输出 debug 级别记录(默认记录器) */
152
+ static Debug(message, ...args) {
153
+ Journal.Log('debug', message, ...args);
154
+ }
155
+ /** 输出 info 级别记录(默认记录器) */
156
+ static Info(message, ...args) {
157
+ Journal.Log('info', message, ...args);
158
+ }
159
+ /** 输出 warn 级别记录(默认记录器) */
160
+ static Warn(message, ...args) {
161
+ Journal.Log('warn', message, ...args);
162
+ }
163
+ /** 输出 error 级别记录(默认记录器) */
164
+ static Error(message, ...args) {
165
+ Journal.Log('error', message, ...args);
166
+ }
167
+ /**
168
+ * 输出一条记录(默认记录器)
169
+ * @param level 记录分级
170
+ * @param message 记录内容
171
+ * @param args 附加内容,透传给 console
172
+ */
173
+ static Log(level, message, ...args) {
174
+ var _a;
175
+ if (!Journal.EnsureReady()) {
176
+ return;
177
+ }
178
+ (_a = Journal._Logger) === null || _a === void 0 ? void 0 : _a.log(level, message, ...args);
179
+ }
180
+ /** 获取分级样式 */
181
+ static GetLevelStyle(level) {
182
+ return Journal._Styles[level];
183
+ }
184
+ /** 更新分级样式,仅覆盖传入字段 */
185
+ static SetLevelStyle(level, style) {
186
+ if (!Journal.EnsureReady()) {
187
+ return;
188
+ }
189
+ Journal._Styles[level] = Object.assign(Object.assign({}, Journal._Styles[level]), style);
190
+ }
191
+ /**
192
+ * 创建记录器;同名记录器已存在时更新其分级并返回原实例
193
+ * @param name 记录器名称
194
+ * @param level 记录器分级,默认为 debug
195
+ */
196
+ static CreateLogger(name, level = 'debug') {
197
+ if (!Journal.EnsureReady()) {
198
+ return null;
199
+ }
200
+ const existing = Journal._Loggers.get(name);
201
+ if (existing) {
202
+ existing.level = level;
203
+ return existing;
204
+ }
205
+ const logger = new JournalLogger({ name, level });
206
+ Journal._Loggers.set(name, logger);
207
+ return logger;
208
+ }
209
+ /** 获取记录器,不存在时以管理器当前分级创建并返回 */
210
+ static GetLogger(name) {
211
+ var _a;
212
+ if (!Journal.EnsureReady()) {
213
+ return null;
214
+ }
215
+ return (_a = Journal._Loggers.get(name)) !== null && _a !== void 0 ? _a : Journal.CreateLogger(name, Journal._Level);
216
+ }
217
+ /** 移除记录器,返回是否移除成功 */
218
+ static RemoveLogger(name) {
219
+ return Journal._Loggers.delete(name);
220
+ }
221
+ /** 清空全部记录器,不影响默认记录器 */
222
+ static ClearLoggers() {
223
+ Journal._Loggers.clear();
224
+ }
225
+ /** 获取全部记录器,不含默认记录器 */
226
+ static GetLoggers() {
227
+ return [...Journal._Loggers.values()];
228
+ }
229
+ /** 未初始化时警告并返回 false */
230
+ static EnsureReady() {
231
+ if (!Journal._Initialized) {
232
+ console.warn('[Journal] 尚未初始化,请先调用 Journal.Init()');
233
+ return false;
234
+ }
235
+ return true;
236
+ }
237
+ }
238
+ /** 是否已初始化 */
239
+ Journal._Initialized = false;
240
+ /** 管理器分级;未初始化时为 disable,确保无任何输出 */
241
+ Journal._Level = 'disable';
242
+ /** 默认记录器;分级随管理器动态调整 */
243
+ Journal._Logger = null;
244
+ /** 分级样式表 */
245
+ Journal._Styles = Object.assign({}, JOURNAL_DEFAULT_LEVEL_STYLES);
246
+ /** 记录器表 */
247
+ Journal._Loggers = new Map();
248
+
249
+ export { JOURNAL_DEFAULT_LEVEL_STYLES, JOURNAL_DEFAULT_LOGGER_NAME, JOURNAL_LEVELS, JOURNAL_LEVEL_WEIGHTS, Journal, JournalLogger };
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "@nebulaaa/journal",
3
+ "version": "1.0.1",
4
+ "description": "日志记录扩展包",
5
+ "author": "doooreyn",
6
+ "license": "MIT",
7
+ "keywords": [
8
+ "journal",
9
+ "nebulaaa"
10
+ ],
11
+ "engines": {
12
+ "node": ">=16.0.0",
13
+ "npm": ">=10.0.0"
14
+ },
15
+ "main": "./journal.cjs",
16
+ "module": "./journal.mjs",
17
+ "types": "./journal.d.ts",
18
+ "exports": {
19
+ ".": {
20
+ "types": "./journal.d.ts",
21
+ "require": "./journal.cjs",
22
+ "import": "./journal.mjs",
23
+ "default": "./journal.cjs"
24
+ },
25
+ "./min": {
26
+ "require": "./journal.min.cjs",
27
+ "import": "./journal.min.mjs"
28
+ }
29
+ },
30
+ "publishConfig": {
31
+ "registry": "https://registry.npmjs.org/",
32
+ "access": "public"
33
+ }
34
+ }
package/package.json CHANGED
@@ -1,6 +1,66 @@
1
- {
2
- "name": "@nebulaaa/journal",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
1
+ {
2
+ "name": "@nebulaaa/journal",
3
+ "version": "1.0.1",
4
+ "description": "日志记录扩展包",
5
+ "main": "./dist/journal.cjs",
6
+ "module": "./dist/journal.mjs",
7
+ "types": "./dist/journal.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "require": "./dist/journal.cjs",
11
+ "import": "./dist/journal.mjs",
12
+ "types": "./dist/journal.d.ts",
13
+ "default": "./dist/journal.cjs"
14
+ },
15
+ "./min": {
16
+ "require": "./dist/journal.min.cjs",
17
+ "import": "./dist/journal.min.mjs"
18
+ }
19
+ },
20
+ "files": [
21
+ "dist"
22
+ ],
23
+ "scripts": {
24
+ "clean": "node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"",
25
+ "build": "npm run clean && rollup -c rollup.config.mjs && node ../scripts/write-dist-package.mjs journal",
26
+ "test": "jest --config jest.config.mjs"
27
+ },
28
+ "keywords": [
29
+ "journal",
30
+ "nebulaaa"
31
+ ],
32
+ "author": "doooreyn",
33
+ "license": "MIT",
34
+ "devEngines": {
35
+ "packageManager": {
36
+ "name": "npm",
37
+ "version": ">=10.0.0",
38
+ "onFail": "warn"
39
+ }
40
+ },
41
+ "engines": {
42
+ "node": ">=16.0.0",
43
+ "npm": ">=10.0.0"
44
+ },
45
+ "publishConfig": {
46
+ "registry": "https://registry.npmjs.org/",
47
+ "access": "public"
48
+ },
49
+ "allowScripts": {
50
+ "unrs-resolver@1.12.2": true,
51
+ "@parcel/watcher@2.6.0": true
52
+ },
53
+ "devDependencies": {
54
+ "@rollup/plugin-terser": "^0.4.4",
55
+ "@rollup/plugin-typescript": "^12.1.2",
56
+ "@types/node": "^22.10.2",
57
+ "@types/jest": "^30.0.0",
58
+ "ts-jest": "^29.4.12",
59
+ "jest": "^30.5.2",
60
+ "rollup": "^4.28.1",
61
+ "rollup-plugin-dts": "^6.1.1",
62
+ "ts-node": "^10.9.2",
63
+ "typescript": "5.7.3"
64
+ },
65
+ "dependencies": {}
66
+ }
package/README.md DELETED
@@ -1,3 +0,0 @@
1
- # Temporary Holding Version
2
-
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.