@foxford/logger 1.0.1 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (6) hide show
  1. package/browser.js +297 -411
  2. package/browser.mjs +295 -399
  3. package/index.d.ts +170 -11
  4. package/node.js +262 -385
  5. package/node.mjs +260 -372
  6. package/package.json +5 -4
package/browser.js CHANGED
@@ -1,456 +1,342 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var log = require('loglevel');
6
-
7
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
-
9
- var log__default = /*#__PURE__*/_interopDefaultLegacy(log);
10
-
11
- /**
12
- * Генерирует hex-код цвета на основе строки, избегая оттенков красного
13
- * @param {string} str - Строка, для которой нужно сгенерировать цвет
14
- * @returns {string} - Hex-код цвета
15
- */
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const log = require("loglevel");
16
4
  function generateHexByString(str) {
17
- // Генерируем новый цвет
18
- let hash = 0;
19
- for (let i = 0; i < str.length; i++) {
20
- hash = str.charCodeAt(i) + ((hash << 5) - hash);
21
- }
22
- // Используем HSL для контроля оттенка
23
- const hue = Math.abs(hash) % 300; // Расширяем диапазон, исключая только часть красного (300-360)
24
- const saturation = 60 + (Math.abs(hash) % 40); // От 60% до 100%
25
- const lightness = 30 + (Math.abs(hash) % 40); // От 30% до 70%
26
- // Конвертируем HSL в RGB
27
- const chroma = ((1 - Math.abs((2 * lightness) / 100 - 1)) * saturation) / 100;
28
- const huePrime = hue / 60;
29
- const x = chroma * (1 - Math.abs((huePrime % 2) - 1));
30
- let r1 = 0, g1 = 0, b1 = 0;
31
- if (huePrime >= 0 && huePrime < 1) {
32
- [r1, g1, b1] = [chroma, x, 0];
33
- }
34
- else if (huePrime >= 1 && huePrime < 2) {
35
- [r1, g1, b1] = [x, chroma, 0];
36
- }
37
- else if (huePrime >= 2 && huePrime < 3) {
38
- [r1, g1, b1] = [0, chroma, x];
39
- }
40
- else if (huePrime >= 3 && huePrime < 4) {
41
- [r1, g1, b1] = [0, x, chroma];
42
- }
43
- else if (huePrime >= 4 && huePrime < 5) {
44
- [r1, g1, b1] = [x, 0, chroma];
45
- }
46
- else {
47
- [r1, g1, b1] = [chroma, 0, x];
48
- }
49
- const m = lightness / 100 - chroma / 2;
50
- const [r, g, b] = [r1, g1, b1].map((v) => Math.round((v + m) * 255));
51
- // Добавляем проверку и значения по умолчанию
52
- const rValue = r !== null && r !== void 0 ? r : 0;
53
- const gValue = g !== null && g !== void 0 ? g : 0;
54
- const bValue = b !== null && b !== void 0 ? b : 0;
55
- const color = `#${((rValue << 16) | (gValue << 8) | bValue).toString(16).padStart(6, '0')}`;
56
- return color;
5
+ let hash = 0;
6
+ for (let i = 0; i < str.length; i++) {
7
+ hash = str.charCodeAt(i) + ((hash << 5) - hash);
8
+ }
9
+ const hue = Math.abs(hash) % 300;
10
+ const saturation = 60 + Math.abs(hash) % 40;
11
+ const lightness = 30 + Math.abs(hash) % 40;
12
+ const chroma = (1 - Math.abs(2 * lightness / 100 - 1)) * saturation / 100;
13
+ const huePrime = hue / 60;
14
+ const x = chroma * (1 - Math.abs(huePrime % 2 - 1));
15
+ let r1 = 0, g1 = 0, b1 = 0;
16
+ if (huePrime >= 0 && huePrime < 1) {
17
+ [r1, g1, b1] = [chroma, x, 0];
18
+ } else if (huePrime >= 1 && huePrime < 2) {
19
+ [r1, g1, b1] = [x, chroma, 0];
20
+ } else if (huePrime >= 2 && huePrime < 3) {
21
+ [r1, g1, b1] = [0, chroma, x];
22
+ } else if (huePrime >= 3 && huePrime < 4) {
23
+ [r1, g1, b1] = [0, x, chroma];
24
+ } else if (huePrime >= 4 && huePrime < 5) {
25
+ [r1, g1, b1] = [x, 0, chroma];
26
+ } else {
27
+ [r1, g1, b1] = [chroma, 0, x];
28
+ }
29
+ const m = lightness / 100 - chroma / 2;
30
+ const [r, g, b] = [r1, g1, b1].map((v) => Math.round((v + m) * 255));
31
+ const rValue = r != null ? r : 0;
32
+ const gValue = g != null ? g : 0;
33
+ const bValue = b != null ? b : 0;
34
+ const color = `#${(rValue << 16 | gValue << 8 | bValue).toString(16).padStart(6, "0")}`;
35
+ return color;
57
36
  }
58
-
59
- /** Ключ для хранения значения debug в localStorage */
60
- const DEBUG_LC_KEY = 'debug';
61
- /**
62
- * Кеш для хранения сгенерированных цветов
63
- * могут быть заранее предустановлены по имени логгера
64
- **/
37
+ const DEBUG_LC_KEY = "debug";
65
38
  const colorCache = {};
66
- /** Цвета для различных уровней логирования */
67
39
  const levelColors = {
68
- TRACE: '#6C757D', // Серый
69
- LOG: '#17A2B8', // Голубой
70
- DEBUG: '#17A2B8', // Голубой
71
- INFO: '#28A745', // Зеленый
72
- WARN: '#FFC107', // Желтый
73
- ERROR: '#DC3545', // Красный
40
+ TRACE: "#6C757D",
41
+ // Серый
42
+ LOG: "#17A2B8",
43
+ // Голубой
44
+ DEBUG: "#17A2B8",
45
+ // Голубой
46
+ INFO: "#28A745",
47
+ // Зеленый
48
+ WARN: "#FFC107",
49
+ // Желтый
50
+ ERROR: "#DC3545"
51
+ // Красный
74
52
  };
75
- /**
76
- * Генерирует hex-код цвета на основе строки, избегая оттенков красного
77
- * @param {string} str - Строка, для которой нужно сгенерировать цвет
78
- * @returns {string} - Hex-код цвета
79
- */
80
53
  function stringToColorCode(str) {
81
- var _a;
82
- // Если цвет уже есть в кеше, возвращаем его
83
- if (str in colorCache) {
84
- return (_a = colorCache[str]) !== null && _a !== void 0 ? _a : 'inherit';
85
- }
86
- const color = generateHexByString(str);
87
- // Сохраняем цвет в кеш
88
- colorCache[str] = color;
89
- return color;
54
+ var _a;
55
+ if (str in colorCache) {
56
+ return (_a = colorCache[str]) != null ? _a : "inherit";
57
+ }
58
+ const color = generateHexByString(str);
59
+ colorCache[str] = color;
60
+ return color;
90
61
  }
91
- /**
92
- * Получает значение debug из localStorage
93
- * @returns {string | undefined} Значение debug или undefined, если его нет
94
- */
95
62
  function getDebugValue() {
96
- try {
97
- return localStorage.getItem(DEBUG_LC_KEY) || undefined;
98
- }
99
- catch (error) {
100
- console.warn('Failed to get `debug` value from localStorage:', error);
101
- return undefined;
102
- }
63
+ try {
64
+ return localStorage.getItem(DEBUG_LC_KEY) || void 0;
65
+ } catch (error) {
66
+ console.warn("Failed to get `debug` value from localStorage:", error);
67
+ return void 0;
68
+ }
103
69
  }
104
- /**
105
- * Устанавливает значение debug в localStorage
106
- * @param {string | null} value - Значение для установки
107
- */
108
70
  function setDebugValue(value) {
109
- try {
110
- if (value === null || value === undefined) {
111
- localStorage.removeItem(DEBUG_LC_KEY);
112
- }
113
- else {
114
- localStorage.setItem(DEBUG_LC_KEY, value);
115
- }
116
- }
117
- catch (error) {
118
- console.warn('Failed to set `debug` value in localStorage:', error);
71
+ try {
72
+ if (value === null || value === void 0) {
73
+ localStorage.removeItem(DEBUG_LC_KEY);
74
+ } else {
75
+ localStorage.setItem(DEBUG_LC_KEY, value);
119
76
  }
77
+ } catch (error) {
78
+ console.warn("Failed to set `debug` value in localStorage:", error);
79
+ }
120
80
  }
121
- /**
122
- * Форматирует сообщение лога
123
- * @param {string} level - Уровень логирования
124
- * @param {string} name - Имя логгера
125
- * @param {Date} timestamp - Временная метка
126
- * @returns {Array} Массив с отформатированной строкой и стилями
127
- */
128
81
  function formatter(level, name, timestamp) {
129
- const baseStyle = 'font-weight: bold;';
130
- const date = `${timestamp.toLocaleDateString()} ${timestamp.toLocaleTimeString()}`;
131
- let dateStyle;
132
- let levelStyle;
133
- let nameStyle;
134
- switch (name) {
135
- // предустановленнный цветовой шаблон по имени логгера
136
- case 'critical':
137
- dateStyle = `color: ${levelColors.ERROR};`;
138
- levelStyle = `color: ${levelColors.ERROR};`;
139
- nameStyle = `color: ${levelColors.ERROR};`;
140
- break;
141
- default:
142
- dateStyle = `color: #6C757D;`;
143
- levelStyle = `color: ${levelColors[level]};`;
144
- nameStyle = `color: ${stringToColorCode(name)};`;
145
- break;
146
- }
147
- return [
148
- `%c[${date}] %c[${level}] %c[${name}] %c•`,
149
- `${baseStyle} ${dateStyle}`,
150
- `${baseStyle} ${levelStyle}`,
151
- `${baseStyle} ${nameStyle}`,
152
- `color: white`,
153
- ];
82
+ const baseStyle = "font-weight: bold;";
83
+ const date = `${timestamp.toLocaleDateString()} ${timestamp.toLocaleTimeString()}`;
84
+ let dateStyle;
85
+ let levelStyle;
86
+ let nameStyle;
87
+ switch (name) {
88
+ // предустановленнный цветовой шаблон по имени логгера
89
+ case "critical":
90
+ dateStyle = `color: ${levelColors.ERROR};`;
91
+ levelStyle = `color: ${levelColors.ERROR};`;
92
+ nameStyle = `color: ${levelColors.ERROR};`;
93
+ break;
94
+ default:
95
+ dateStyle = `color: #6C757D;`;
96
+ levelStyle = `color: ${levelColors[level]};`;
97
+ nameStyle = `color: ${stringToColorCode(name)};`;
98
+ break;
99
+ }
100
+ return [
101
+ `%c[${date}] %c[${level}] %c[${name}] %c•`,
102
+ `${baseStyle} ${dateStyle}`,
103
+ `${baseStyle} ${levelStyle}`,
104
+ `${baseStyle} ${nameStyle}`,
105
+ `color: white`
106
+ ];
154
107
  }
155
- /**
156
- * Объект с методами для работы с окружением браузера
157
- */
158
108
  const environment = {
159
- getDebugValue,
160
- setDebugValue,
161
- formatter,
162
- /**
163
- * Устанавливает обработчик изменения значения debug
164
- * @param {function} callback - Функция обратного вызова
165
- * @returns {function} Функция для удаления обработчика
166
- */
167
- onDebugValueChange: (callback) => {
168
- function changeValue(event) {
169
- if (event.key === DEBUG_LC_KEY) {
170
- callback(event.newValue);
171
- }
172
- }
173
- window.addEventListener('storage', changeValue);
174
- return () => {
175
- window.removeEventListener('storage', changeValue);
176
- };
177
- },
109
+ getDebugValue,
110
+ setDebugValue,
111
+ formatter,
112
+ /**
113
+ * Устанавливает обработчик изменения значения debug
114
+ * @param {function} callback - Функция обратного вызова
115
+ * @returns {function} Функция для удаления обработчика
116
+ */
117
+ onDebugValueChange: (callback) => {
118
+ function changeValue(event) {
119
+ if (event.key === DEBUG_LC_KEY) {
120
+ callback(event.newValue);
121
+ }
122
+ }
123
+ window.addEventListener("storage", changeValue);
124
+ return () => {
125
+ window.removeEventListener("storage", changeValue);
126
+ };
127
+ }
178
128
  };
179
-
180
- /**
181
- * Генерирует UUID версии 4.
182
- * @returns {string} Строка, представляющая UUID версии 4.
183
- */
184
129
  function generateUUIDv4() {
185
- return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, (char) => (parseInt(char, 10) ^ (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (parseInt(char, 10) / 4)))).toString(16));
130
+ return "10000000-1000-4000-8000-100000000000".replace(
131
+ /[018]/g,
132
+ (char) => (parseInt(char, 10) ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> parseInt(char, 10) / 4).toString(
133
+ 16
134
+ )
135
+ );
186
136
  }
187
-
188
- /* eslint-disable @typescript-eslint/no-unsafe-function-type */
189
- const loggerCache = new Map();
190
- const previousLevels = new Map();
137
+ const loggerCache = /* @__PURE__ */ new Map();
138
+ const previousLevels = /* @__PURE__ */ new Map();
191
139
  let isInitialized = false;
192
- /**
193
- * Создает экземпляр HierarchicalLogger
194
- * @param fullName Имя логгера
195
- * @param parent Родительский логгер (если есть)
196
- */
197
140
  function createHierarchicalLogger(originalGetLogger, fullName, parent) {
198
- const loggerId = generateUUIDv4();
199
- const baseLogger = originalGetLogger(fullName);
200
- const name = parent ? fullName.slice(parent.getFullName().length + 1) : fullName;
201
- const hierarchicalLogger = Object.assign(Object.assign({}, baseLogger), { id: loggerId, parent: parent !== null && parent !== void 0 ? parent : null, children: new Set(), name: name, debugEnabled: false, isDebugEnabled() {
202
- return this.debugEnabled;
203
- },
204
- getDebugPattern() {
205
- var _a;
206
- return (_a = environment.getDebugValue()) !== null && _a !== void 0 ? _a : null;
207
- },
208
- // Добавим вспомогательный метод для получения полного имени логгера
209
- getFullName() {
210
- if (!this.parent) {
211
- return this.name;
212
- }
213
- const parentFullName = this.parent.getFullName();
214
- return parentFullName ? `${parentFullName}:${this.name}` : this.name;
215
- },
216
- setDebug(enabled) {
217
- this.debugEnabled = enabled;
218
- const parentLevel = this.parent ? this.parent.getLevel() : undefined;
219
- const currentPatterns = (environment.getDebugValue() || '').split(',').filter(Boolean);
220
- const fullName = this.getFullName();
221
- if (enabled) {
222
- if (!previousLevels.has(this.id)) {
223
- previousLevels.set(this.id, baseLogger.getLevel());
224
- }
225
- baseLogger.setLevel(log__default["default"].levels.TRACE, false);
226
- // Если включаем отладку
227
- if (!currentPatterns.some((pattern) => fullName === pattern || `${fullName}:*` === pattern)) {
228
- // Удаляем все дочерние паттерны, если они есть
229
- const childrenPatterns = currentPatterns.filter((pattern) => pattern.startsWith(`${fullName}:`));
230
- childrenPatterns.forEach((pattern) => {
231
- const index = currentPatterns.indexOf(pattern);
232
- if (index !== -1) {
233
- currentPatterns.splice(index, 1);
234
- }
235
- });
236
- // Добавляем новый паттерн без ':*'
237
- currentPatterns.push(fullName);
238
- }
239
- }
240
- else {
241
- let newLevel;
242
- if (parentLevel !== undefined) {
243
- // Используем уровень родительского логгера, если он существует
244
- newLevel = parentLevel;
245
- }
246
- else {
247
- // Если родительского логгера нет, используем предыдущий сохраненный уровень или уровень по умолчанию
248
- newLevel = previousLevels.get(this.id) || log__default["default"].levels.WARN;
249
- }
250
- baseLogger.setLevel(newLevel, false);
251
- previousLevels.delete(this.id);
252
- // Если выключаем отладку
253
- const index = currentPatterns.findIndex((pattern) => pattern === fullName || pattern === `${fullName}:*`);
254
- if (index !== -1) {
255
- currentPatterns.splice(index, 1);
256
- }
257
- }
258
- // Оптимизируем паттерны
259
- const optimizedPatterns = optimizePatterns(currentPatterns);
260
- // Сохраняем оптимизированные паттерны
261
- environment.setDebugValue(optimizedPatterns.join(',') || null);
262
- },
263
- getLogger(name) {
264
- const childLogger = createHierarchicalLogger(originalGetLogger, `${fullName}:${name}`, this);
265
- this.children.add(childLogger);
266
- return childLogger;
267
- },
268
- setLevel(level) {
269
- baseLogger.setLevel(level, false);
270
- // Обновляем уровень для всех дочерних логгеров
271
- this.children.forEach((child) => child.setLevel(level, false));
272
- // Если логгер в режиме отладки, сохраняем новый уровень
273
- if (this.isDebugEnabled()) {
274
- previousLevels.set(loggerId, level);
275
- }
276
- } });
277
- const originalFactory = baseLogger.methodFactory;
278
- // Переопределяем методы логирования для учета режима отладки
279
- const logMethods = ['trace', 'debug', 'info', 'warn', 'error', 'log'];
280
- logMethods.forEach((method) => {
281
- const originalMethod = originalFactory(method, baseLogger.getLevel(), fullName);
282
- hierarchicalLogger[method] = function (...args) {
283
- var _a;
284
- const debugEnabled = this.isDebugEnabled();
285
- const messageLevel = (_a = log__default["default"].levels[method.toUpperCase()]) !== null && _a !== void 0 ? _a : 0;
286
- const currentLevel = baseLogger.getLevel();
287
- if (debugEnabled || messageLevel >= currentLevel) {
288
- return originalMethod.apply(baseLogger, args);
141
+ const loggerId = generateUUIDv4();
142
+ const baseLogger = originalGetLogger(fullName);
143
+ const name = parent ? fullName.slice(parent.getFullName().length + 1) : fullName;
144
+ const hierarchicalLogger = {
145
+ ...baseLogger,
146
+ id: loggerId,
147
+ parent: parent != null ? parent : null,
148
+ children: /* @__PURE__ */ new Set(),
149
+ name,
150
+ debugEnabled: false,
151
+ isDebugEnabled() {
152
+ return this.debugEnabled;
153
+ },
154
+ getDebugPattern() {
155
+ var _a;
156
+ return (_a = environment.getDebugValue()) != null ? _a : null;
157
+ },
158
+ // Добавим вспомогательный метод для получения полного имени логгера
159
+ getFullName() {
160
+ if (!this.parent) {
161
+ return this.name;
162
+ }
163
+ const parentFullName = this.parent.getFullName();
164
+ return parentFullName ? `${parentFullName}:${this.name}` : this.name;
165
+ },
166
+ setDebug(enabled) {
167
+ this.debugEnabled = enabled;
168
+ const parentLevel = this.parent ? this.parent.getLevel() : void 0;
169
+ const currentPatterns = (environment.getDebugValue() || "").split(",").filter(Boolean);
170
+ const fullName2 = this.getFullName();
171
+ if (enabled) {
172
+ if (!previousLevels.has(this.id)) {
173
+ previousLevels.set(this.id, baseLogger.getLevel());
174
+ }
175
+ baseLogger.setLevel(log.levels.TRACE, false);
176
+ if (!currentPatterns.some((pattern) => fullName2 === pattern || `${fullName2}:*` === pattern)) {
177
+ const childrenPatterns = currentPatterns.filter((pattern) => pattern.startsWith(`${fullName2}:`));
178
+ childrenPatterns.forEach((pattern) => {
179
+ const index = currentPatterns.indexOf(pattern);
180
+ if (index !== -1) {
181
+ currentPatterns.splice(index, 1);
289
182
  }
290
- };
291
- });
292
- loggerCache.set(loggerId, hierarchicalLogger);
293
- if (!isInitialized) {
294
- isInitialized = true;
295
- initializeDebugPatterns();
296
- }
297
- else {
298
- const debugPattern = environment.getDebugValue() || '';
299
- const patterns = debugPattern
300
- .split(',')
301
- .map((p) => p.trim())
302
- .filter(Boolean);
303
- configureLogger(hierarchicalLogger, patterns);
183
+ });
184
+ currentPatterns.push(fullName2);
185
+ }
186
+ } else {
187
+ let newLevel;
188
+ if (parentLevel !== void 0) {
189
+ newLevel = parentLevel;
190
+ } else {
191
+ newLevel = previousLevels.get(this.id) || log.levels.WARN;
192
+ }
193
+ baseLogger.setLevel(newLevel, false);
194
+ previousLevels.delete(this.id);
195
+ const index = currentPatterns.findIndex((pattern) => pattern === fullName2 || pattern === `${fullName2}:*`);
196
+ if (index !== -1) {
197
+ currentPatterns.splice(index, 1);
198
+ }
199
+ }
200
+ const optimizedPatterns = optimizePatterns(currentPatterns);
201
+ environment.setDebugValue(optimizedPatterns.join(",") || null);
202
+ },
203
+ getLogger(name2) {
204
+ const childLogger = createHierarchicalLogger(originalGetLogger, `${fullName}:${name2}`, this);
205
+ this.children.add(childLogger);
206
+ return childLogger;
207
+ },
208
+ setLevel(level) {
209
+ baseLogger.setLevel(level, false);
210
+ this.children.forEach((child) => child.setLevel(level, false));
211
+ if (this.isDebugEnabled()) {
212
+ previousLevels.set(loggerId, level);
213
+ }
304
214
  }
305
- return hierarchicalLogger;
215
+ };
216
+ const originalFactory = baseLogger.methodFactory;
217
+ const logMethods = ["trace", "debug", "info", "warn", "error", "log"];
218
+ logMethods.forEach((method) => {
219
+ const originalMethod = originalFactory(method, baseLogger.getLevel(), fullName);
220
+ hierarchicalLogger[method] = function(...args) {
221
+ var _a;
222
+ const debugEnabled = this.isDebugEnabled();
223
+ const messageLevel = (_a = log.levels[method.toUpperCase()]) != null ? _a : 0;
224
+ const currentLevel = baseLogger.getLevel();
225
+ if (debugEnabled || messageLevel >= currentLevel) {
226
+ return originalMethod.apply(baseLogger, args);
227
+ }
228
+ };
229
+ });
230
+ loggerCache.set(loggerId, hierarchicalLogger);
231
+ if (!isInitialized) {
232
+ isInitialized = true;
233
+ initializeDebugPatterns();
234
+ } else {
235
+ const debugPattern = environment.getDebugValue() || "";
236
+ const patterns = debugPattern.split(",").map((p) => p.trim()).filter(Boolean);
237
+ configureLogger(hierarchicalLogger, patterns);
238
+ }
239
+ return hierarchicalLogger;
306
240
  }
307
- /**
308
- * Оптимизирует паттерны отладки
309
- * @param patterns Массив паттернов отладки
310
- * @returns Оптимизированный массив паттернов
311
- */
312
241
  function optimizePatterns(patterns) {
313
- const optimized = new Set();
314
- // Сортируем паттерны от более общих к более конкретным
315
- patterns.sort((a, b) => a.split(':').length - b.split(':').length);
316
- for (const pattern of patterns) {
317
- let isRedundant = false;
318
- for (const existingPattern of optimized) {
319
- if (pattern === existingPattern || pattern.startsWith(existingPattern + ':')) {
320
- isRedundant = true;
321
- break;
322
- }
323
- }
324
- if (!isRedundant) {
325
- optimized.add(pattern);
326
- }
242
+ const optimized = /* @__PURE__ */ new Set();
243
+ patterns.sort((a, b) => a.split(":").length - b.split(":").length);
244
+ for (const pattern of patterns) {
245
+ let isRedundant = false;
246
+ for (const existingPattern of optimized) {
247
+ if (pattern === existingPattern || pattern.startsWith(existingPattern + ":")) {
248
+ isRedundant = true;
249
+ break;
250
+ }
251
+ }
252
+ if (!isRedundant) {
253
+ optimized.add(pattern);
327
254
  }
328
- return Array.from(optimized);
255
+ }
256
+ return Array.from(optimized);
329
257
  }
330
- /**
331
- * Проверяет, должен ли логгер быть в режиме отладки
332
- * @param fullName Полное имя логгера
333
- * @param patterns Массив паттернов отладки
334
- * @returns true, если логгер должен быть в режиме отладки
335
- */
336
258
  function shouldEnableDebug(fullName, patterns) {
337
- return patterns.some((pattern) => {
338
- if (pattern === '*')
339
- return true;
340
- if (fullName === pattern)
341
- return true;
342
- if (pattern.endsWith(':*')) {
343
- const patternPrefix = pattern.slice(0, -2);
344
- return fullName.startsWith(patternPrefix + ':');
345
- }
346
- return false;
347
- });
259
+ return patterns.some((pattern) => {
260
+ if (pattern === "*") return true;
261
+ if (fullName === pattern) return true;
262
+ if (pattern.endsWith(":*")) {
263
+ const patternPrefix = pattern.slice(0, -2);
264
+ return fullName.startsWith(patternPrefix + ":");
265
+ }
266
+ return false;
267
+ });
348
268
  }
349
- /**
350
- * Настраивает логгер в соответствии с текущими паттернами отладки
351
- * @param logger Логгер для настройки
352
- * @param patterns Массив паттернов отладки
353
- */
354
269
  function configureLogger(logger, patterns) {
355
- const fullName = logger.getFullName();
356
- const debugEnabled = shouldEnableDebug(fullName, patterns);
357
- logger.debugEnabled = debugEnabled;
358
- if (debugEnabled) {
359
- logger.setLevel(previousLevels.get(logger.id) || log__default["default"].levels.TRACE);
360
- }
361
- else {
362
- logger.setLevel(previousLevels.get(logger.id) || log__default["default"].levels.WARN);
363
- }
270
+ const fullName = logger.getFullName();
271
+ const debugEnabled = shouldEnableDebug(fullName, patterns);
272
+ logger.debugEnabled = debugEnabled;
273
+ if (debugEnabled) {
274
+ logger.setLevel(previousLevels.get(logger.id) || log.levels.TRACE);
275
+ } else {
276
+ logger.setLevel(previousLevels.get(logger.id) || log.levels.WARN);
277
+ }
364
278
  }
365
- /**
366
- * Инициализирует паттерны отладки из environment
367
- */
368
279
  function initializeDebugPatterns() {
369
- const debugPattern = environment.getDebugValue() || '';
370
- const patterns = debugPattern
371
- .split(',')
372
- .map((p) => p.trim())
373
- .filter(Boolean);
374
- // Создаем Set для отслеживания уже обработанных логгеров
375
- const processedLoggers = new Set();
376
- function processLogger(logger) {
377
- if (processedLoggers.has(logger.id))
378
- return;
379
- processedLoggers.add(logger.id);
380
- configureLogger(logger, patterns);
381
- // Обрабатываем дочерние логгеры
382
- logger.children.forEach(processLogger);
383
- }
384
- // Обрабатываем все существующие логгеры
385
- loggerCache.forEach(processLogger);
386
- // Обрабатываем все существующие логгеры
387
- Array.from(loggerCache).forEach(([, logger]) => {
388
- processLogger(logger);
389
- });
280
+ const debugPattern = environment.getDebugValue() || "";
281
+ const patterns = debugPattern.split(",").map((p) => p.trim()).filter(Boolean);
282
+ const processedLoggers = /* @__PURE__ */ new Set();
283
+ function processLogger(logger) {
284
+ if (processedLoggers.has(logger.id)) return;
285
+ processedLoggers.add(logger.id);
286
+ configureLogger(logger, patterns);
287
+ logger.children.forEach(processLogger);
288
+ }
289
+ loggerCache.forEach(processLogger);
290
+ Array.from(loggerCache).forEach(([, logger]) => {
291
+ processLogger(logger);
292
+ });
390
293
  }
391
- /**
392
- * Плагин иерархического логгера для loglevel
393
- */
394
294
  const hierarchicalPlugin = {
395
- apply(rootLogger) {
396
- // Переопределяем метод getLogger корневого логгера
397
- const originalGetLogger = rootLogger.getLogger.bind(rootLogger);
398
- rootLogger.getLogger = (name) => {
399
- return createHierarchicalLogger(originalGetLogger, name);
400
- };
401
- // Отслеживаем изменения в environment
402
- environment.onDebugValueChange(() => {
403
- initializeDebugPatterns();
404
- });
405
- },
295
+ apply(rootLogger) {
296
+ const originalGetLogger = rootLogger.getLogger.bind(rootLogger);
297
+ rootLogger.getLogger = (name) => {
298
+ return createHierarchicalLogger(originalGetLogger, name);
299
+ };
300
+ environment.onDebugValueChange(() => {
301
+ initializeDebugPatterns();
302
+ });
303
+ }
406
304
  };
407
-
408
305
  const defaultOptions = {
409
- format: (level, name, timestamp) => `[${timestamp.toISOString()}] [${level}] [${name}]`,
306
+ format: (level, name, timestamp) => `[${timestamp.toISOString()}] [${level}] [${name}]`
410
307
  };
411
- /**
412
- * Плагин для добавления префикса к логам
413
- * @param logger Инстанс логгера
414
- * @param options Опции плагина
415
- */
416
308
  function prefix(logger, options = {}) {
417
- const mergedOptions = Object.assign(Object.assign({}, defaultOptions), options);
418
- const originalFactory = logger.methodFactory;
419
- logger.methodFactory = function (methodName, logLevel, loggerName) {
420
- const rawMethod = originalFactory(methodName, logLevel, loggerName);
421
- return function (...args) {
422
- const level = methodName.toUpperCase();
423
- const timestamp = new Date();
424
- const prefix = mergedOptions.format(level, typeof loggerName === 'string' ? loggerName : '', timestamp);
425
- if (Array.isArray(prefix)) {
426
- rawMethod.apply(this, [...prefix, ...args]);
427
- }
428
- else {
429
- rawMethod.apply(this, [prefix, ...args]);
430
- }
431
- };
309
+ const mergedOptions = { ...defaultOptions, ...options };
310
+ const originalFactory = logger.methodFactory;
311
+ logger.methodFactory = function(methodName, logLevel, loggerName) {
312
+ const rawMethod = originalFactory(methodName, logLevel, loggerName);
313
+ return function(...args) {
314
+ const level = methodName.toUpperCase();
315
+ const timestamp = /* @__PURE__ */ new Date();
316
+ const prefix2 = mergedOptions.format(level, typeof loggerName === "string" ? loggerName : "", timestamp);
317
+ if (Array.isArray(prefix2)) {
318
+ rawMethod.apply(this, [...prefix2, ...args]);
319
+ } else {
320
+ rawMethod.apply(this, [prefix2, ...args]);
321
+ }
432
322
  };
433
- return logger;
323
+ };
324
+ return logger;
434
325
  }
435
326
  const prefixPlugin = {
436
- apply(rootLogger, options = {}) {
437
- prefix(rootLogger, options);
438
- },
327
+ apply(rootLogger, options = {}) {
328
+ prefix(rootLogger, options);
329
+ }
439
330
  };
440
-
441
- // Применяем плагины
442
- hierarchicalPlugin.apply(log__default["default"]);
443
- prefixPlugin.apply(log__default["default"], {
444
- format: (level, name, timestamp) => {
445
- return environment.formatter(level, name, timestamp);
446
- },
331
+ hierarchicalPlugin.apply(log);
332
+ prefixPlugin.apply(log, {
333
+ format: (level, name, timestamp) => {
334
+ return environment.formatter(level, name, timestamp);
335
+ }
447
336
  });
448
- // сброс левела чтобы игнорировать запись в сторадже в браузерной имплементации
449
- log__default["default"].resetLevel();
450
- // Пересоздаем методы логгера
451
- log__default["default"].rebuild();
452
- const extendedLog = Object.assign(log__default["default"], {});
453
-
337
+ log.resetLevel();
338
+ log.rebuild();
339
+ const extendedLog = Object.assign(log, {});
454
340
  exports.hierarchicalPlugin = hierarchicalPlugin;
455
341
  exports.log = extendedLog;
456
342
  exports.prefixPlugin = prefixPlugin;