@hkdigital/lib-sveltekit 0.2.21 → 0.2.22
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/README.md +149 -135
- package/dist/assets/autospuiten/car-paint-picker.js +41 -41
- package/dist/assets/autospuiten/labels.js +7 -7
- package/dist/classes/cache/IndexedDbCache.js +1407 -1407
- package/dist/classes/cache/MemoryResponseCache.js +138 -138
- package/dist/classes/cache/index.js +5 -5
- package/dist/classes/cache/typedef.js +41 -41
- package/dist/classes/data/IterableTree.js +243 -243
- package/dist/classes/data/Selector.js +190 -190
- package/dist/classes/data/index.js +2 -2
- package/dist/classes/events/EventEmitter.js +275 -275
- package/dist/classes/events/index.js +2 -2
- package/dist/classes/index.js +4 -4
- package/dist/classes/logging/Logger.js +210 -210
- package/dist/classes/logging/constants.js +16 -16
- package/dist/classes/logging/index.js +4 -4
- package/dist/classes/logging/typedef.js +17 -17
- package/dist/classes/promise/HkPromise.js +377 -377
- package/dist/classes/promise/index.js +1 -1
- package/dist/classes/services/ServiceBase.js +463 -463
- package/dist/classes/services/ServiceManager.js +614 -614
- package/dist/classes/services/index.js +5 -5
- package/dist/classes/services/service-states.js +205 -205
- package/dist/classes/services/typedef.js +179 -179
- package/dist/classes/stores/SubscribersCount.js +107 -107
- package/dist/classes/stores/index.js +1 -1
- package/dist/classes/streams/LogTransformStream.js +19 -19
- package/dist/classes/streams/ServerEventsStore.js +110 -110
- package/dist/classes/streams/TimeStampSource.js +26 -26
- package/dist/classes/streams/index.js +3 -3
- package/dist/classes/svelte/audio/AudioLoader.svelte.js +58 -58
- package/dist/classes/svelte/audio/AudioScene.svelte.js +324 -324
- package/dist/classes/svelte/audio/mocks.js +35 -35
- package/dist/classes/svelte/finite-state-machine/FiniteStateMachine.svelte.js +133 -133
- package/dist/classes/svelte/finite-state-machine/index.js +1 -1
- package/dist/classes/svelte/image/ImageLoader.svelte.js +45 -45
- package/dist/classes/svelte/image/ImageScene.svelte.js +249 -249
- package/dist/classes/svelte/image/ImageVariantsLoader.svelte.js +152 -152
- package/dist/classes/svelte/image/index.js +4 -4
- package/dist/classes/svelte/image/mocks.js +35 -35
- package/dist/classes/svelte/image/typedef.js +8 -8
- package/dist/classes/svelte/index.js +14 -14
- package/dist/classes/svelte/loading-state-machine/LoadingStateMachine.svelte.js +109 -109
- package/dist/classes/svelte/loading-state-machine/constants.js +16 -16
- package/dist/classes/svelte/loading-state-machine/index.js +3 -3
- package/dist/classes/svelte/network-loader/NetworkLoader.svelte.js +338 -338
- package/dist/classes/svelte/network-loader/constants.js +3 -3
- package/dist/classes/svelte/network-loader/index.js +3 -3
- package/dist/classes/svelte/network-loader/mocks.js +30 -30
- package/dist/classes/svelte/network-loader/typedef.js +8 -8
- package/dist/components/area/HkArea.svelte +49 -49
- package/dist/components/area/HkGridArea.svelte +77 -77
- package/dist/components/area/index.js +2 -2
- package/dist/components/buttons/button/Button.svelte +82 -82
- package/dist/components/buttons/button-icon-steeze/SteezeIconButton.svelte +30 -30
- package/dist/components/buttons/button-text/TextButton.svelte +21 -21
- package/dist/components/buttons/index.js +3 -3
- package/dist/components/debug/debug-panel-design-scaling/DebugPanelDesignScaling.svelte +146 -146
- package/dist/components/debug/index.js +1 -1
- package/dist/components/drag-drop/DragController.js +44 -44
- package/dist/components/drag-drop/DragDropContext.svelte +111 -111
- package/dist/components/drag-drop/Draggable.svelte +519 -519
- package/dist/components/drag-drop/{Dropzone.svelte → DropZone.svelte} +258 -258
- package/dist/components/drag-drop/DropZoneArea.svelte +119 -119
- package/dist/components/drag-drop/DropZoneList.svelte +125 -125
- package/dist/components/drag-drop/actions.js +26 -26
- package/dist/components/drag-drop/drag-state.svelte.js +322 -322
- package/dist/components/drag-drop/index.js +7 -7
- package/dist/components/drag-drop/util.js +85 -85
- package/dist/components/hkdev/blocks/TextBlock.svelte +46 -46
- package/dist/components/hkdev/buttons/CheckButton.svelte +62 -62
- package/dist/components/icons/HkIcon.svelte +86 -86
- package/dist/components/icons/HkTabIcon.svelte +116 -116
- package/dist/components/icons/SteezeIcon.svelte +97 -97
- package/dist/components/icons/index.js +6 -6
- package/dist/components/icons/typedef.js +16 -16
- package/dist/components/index.js +2 -2
- package/dist/components/inputs/index.js +1 -1
- package/dist/components/inputs/text-input/TestTextInput.svelte__ +102 -102
- package/dist/components/inputs/text-input/TextInput.svelte +223 -223
- package/dist/components/inputs/text-input/TextInput.svelte___ +83 -83
- package/dist/components/inputs/text-input/assets/IconInvalid.svelte +14 -14
- package/dist/components/inputs/text-input/assets/IconValid.svelte +12 -12
- package/dist/components/layout/grid-layers/GridLayers.svelte +63 -63
- package/dist/components/layout/grid-layers/GridLayers.svelte__heightFrom__ +372 -0
- package/dist/components/layout/grid-layers/util.js +74 -74
- package/dist/components/layout/index.js +1 -1
- package/dist/components/panels/index.js +1 -1
- package/dist/components/panels/panel/Panel.svelte +43 -43
- package/dist/components/rows/index.js +3 -3
- package/dist/components/rows/panel-grid-row/PanelGridRow.svelte +104 -104
- package/dist/components/rows/panel-row-2/PanelRow2.svelte +40 -40
- package/dist/components/tab-bar/HkTabBar.state.svelte.js +149 -149
- package/dist/components/tab-bar/HkTabBar.svelte +74 -74
- package/dist/components/tab-bar/HkTabBarSelector.state.svelte.js +93 -93
- package/dist/components/tab-bar/HkTabBarSelector.svelte +49 -49
- package/dist/components/tab-bar/index.js +17 -17
- package/dist/components/tab-bar/typedef.js +11 -11
- package/dist/config/imagetools-config.js +189 -189
- package/dist/config/imagetools.d.ts +72 -72
- package/dist/constants/bases.js +13 -13
- package/dist/constants/errors/api.js +9 -9
- package/dist/constants/errors/generic.js +5 -5
- package/dist/constants/errors/index.js +3 -3
- package/dist/constants/errors/jwt.js +5 -5
- package/dist/constants/http/headers.js +6 -6
- package/dist/constants/http/index.js +2 -2
- package/dist/constants/http/methods.js +14 -14
- package/dist/constants/index.js +3 -3
- package/dist/constants/mime/application.js +5 -5
- package/dist/constants/mime/audio.js +13 -13
- package/dist/constants/mime/image.js +3 -3
- package/dist/constants/mime/index.js +4 -4
- package/dist/constants/mime/text.js +2 -2
- package/dist/constants/regexp/index.js +31 -31
- package/dist/constants/regexp/inspiratie.js__ +95 -95
- package/dist/constants/regexp/text.js +49 -49
- package/dist/constants/regexp/user.js +32 -32
- package/dist/constants/regexp/web.js +3 -3
- package/dist/constants/state-labels/drag-states.js +6 -6
- package/dist/constants/state-labels/drop-states.js +6 -6
- package/dist/constants/state-labels/input-states.js +11 -11
- package/dist/constants/state-labels/submit-states.js +4 -4
- package/dist/constants/time.js +28 -28
- package/dist/css/utilities.css +43 -43
- package/dist/design/design-config.js +73 -73
- package/dist/design/tailwind-theme-extend.js +158 -158
- package/dist/features/button-group/ButtonGroup.svelte +82 -82
- package/dist/features/button-group/typedef.js +10 -10
- package/dist/features/compare-left-right/CompareLeftRight.svelte +179 -179
- package/dist/features/compare-left-right/index.js +1 -1
- package/dist/features/game-box/GameBox.svelte +577 -577
- package/dist/features/game-box/gamebox.util.js +83 -83
- package/dist/features/hk-app-layout/HkAppLayout.state.svelte.js +25 -25
- package/dist/features/hk-app-layout/HkAppLayout.svelte +251 -251
- package/dist/features/image-box/ImageBox.svelte +210 -210
- package/dist/features/image-box/index.js +5 -5
- package/dist/features/image-box/typedef.js +32 -32
- package/dist/features/index.js +23 -23
- package/dist/features/presenter/ImageSlide.svelte +64 -64
- package/dist/features/presenter/Presenter.state.svelte.js +638 -638
- package/dist/features/presenter/Presenter.svelte +142 -142
- package/dist/features/presenter/constants.js +7 -7
- package/dist/features/presenter/index.js +10 -10
- package/dist/features/presenter/typedef.js +106 -106
- package/dist/features/presenter/util.js +210 -210
- package/dist/features/virtual-viewport/VirtualViewport.svelte +196 -196
- package/dist/logging/adapters/console.js +114 -114
- package/dist/logging/adapters/pino.js +60 -60
- package/dist/logging/constants.js +1 -1
- package/dist/logging/factories/client.js +21 -21
- package/dist/logging/factories/server.js +22 -22
- package/dist/logging/factories/universal.js +23 -23
- package/dist/logging/index.js +8 -8
- package/dist/schemas/index.js +1 -1
- package/dist/schemas/validate-url.js +180 -180
- package/dist/server/index.js +1 -1
- package/dist/server/logger.js +94 -94
- package/dist/states/index.js +1 -1
- package/dist/states/navigation.svelte.js +55 -55
- package/dist/stores/index.js +1 -1
- package/dist/stores/theme.js +80 -80
- package/dist/themes/hkdev/components/blocks/text-block.css +34 -34
- package/dist/themes/hkdev/components/boxes/game-box.css +11 -11
- package/dist/themes/hkdev/components/buttons/button-icon-steeze.css +22 -22
- package/dist/themes/hkdev/components/buttons/button-text.css +32 -32
- package/dist/themes/hkdev/components/buttons/button.css +146 -146
- package/dist/themes/hkdev/components/buttons/skip-button.css +5 -5
- package/dist/themes/hkdev/components/drag-drop/draggable.css +73 -73
- package/dist/themes/hkdev/components/drag-drop/drop-zone.css +58 -58
- package/dist/themes/hkdev/components/icons/icon-steeze.css +15 -15
- package/dist/themes/hkdev/components/inputs/text-input.css +102 -102
- package/dist/themes/hkdev/components/panels/panel.css +25 -25
- package/dist/themes/hkdev/components/rows/panel-grid-row.css +4 -4
- package/dist/themes/hkdev/components/rows/panel-row-2.css +5 -5
- package/dist/themes/hkdev/components.css +29 -29
- package/dist/themes/hkdev/debug.css +1 -1
- package/dist/themes/hkdev/global/layout.css +32 -32
- package/dist/themes/hkdev/global/on-colors.css +32 -32
- package/dist/themes/hkdev/globals.css +3 -3
- package/dist/themes/hkdev/responsive.css +12 -12
- package/dist/themes/hkdev/theme-ext.js +12 -12
- package/dist/themes/hkdev/theme.css +218 -218
- package/dist/themes/index.js +1 -1
- package/dist/typedef/context.js +6 -6
- package/dist/typedef/drag.js +25 -25
- package/dist/typedef/drop.js +12 -12
- package/dist/typedef/image.js +38 -38
- package/dist/typedef/index.js +4 -4
- package/dist/util/array/index.js +436 -436
- package/dist/util/bases/base58.js +262 -262
- package/dist/util/bases/index.js +1 -1
- package/dist/util/compare/index.js +247 -247
- package/dist/util/css/css-vars.js +83 -83
- package/dist/util/css/index.js +1 -1
- package/dist/util/design-system/components/states.js +22 -22
- package/dist/util/design-system/css/clamp.js +66 -66
- package/dist/util/design-system/css/root-design-vars.js +102 -102
- package/dist/util/design-system/index.js +5 -5
- package/dist/util/design-system/layout/scaling.js +228 -228
- package/dist/util/design-system/skeleton.js +208 -208
- package/dist/util/design-system/tailwind.js +288 -288
- package/dist/util/env/index.js +9 -9
- package/dist/util/exceptions/index.d.ts +11 -0
- package/dist/util/exceptions/index.js +17 -0
- package/dist/util/expect/arrays.js +47 -47
- package/dist/util/expect/index.js +259 -259
- package/dist/util/expect/primitives.js +55 -55
- package/dist/util/expect/url.js +60 -60
- package/dist/util/function/index.js +218 -218
- package/dist/util/geo/index.js +26 -26
- package/dist/util/http/caching.js +263 -263
- package/dist/util/http/errors.js +97 -97
- package/dist/util/http/headers.js +75 -75
- package/dist/util/http/http-request.js +578 -578
- package/dist/util/http/index.js +22 -22
- package/dist/util/http/json-request.js +224 -224
- package/dist/util/http/mocks.js +65 -65
- package/dist/util/http/response.js +294 -294
- package/dist/util/http/test-data__/content-length-test-hkdigital-small.V4HfZyBQ.avif +0 -0
- package/dist/util/http/typedef.js +93 -93
- package/dist/util/http/url.js +52 -52
- package/dist/util/image/index.js +86 -86
- package/dist/util/index.d.ts +1 -0
- package/dist/util/index.js +3 -2
- package/dist/util/is/index.js +140 -140
- package/dist/util/iterate/index.js +234 -234
- package/dist/util/object/index.js +1361 -1361
- package/dist/util/singleton/index.js +97 -97
- package/dist/util/string/array-path.js +75 -75
- package/dist/util/string/convert.js +54 -54
- package/dist/util/string/fs.js +226 -226
- package/dist/util/string/index.js +5 -5
- package/dist/util/string/interpolate.js +61 -61
- package/dist/util/string/pad.js +10 -10
- package/dist/util/svelte/index.js +4 -4
- package/dist/util/svelte/loading/loading-tracker.svelte.js +108 -108
- package/dist/util/svelte/observe/index.js +49 -49
- package/dist/util/svelte/state-context/index.js +117 -117
- package/dist/util/svelte/wait/index.js +38 -38
- package/dist/util/sveltekit/index.js +1 -1
- package/dist/util/sveltekit/route-folders/index.js +101 -101
- package/dist/util/time/index.js +323 -323
- package/dist/util/unique/index.js +249 -249
- package/dist/valibot/date.js__ +10 -10
- package/dist/valibot/index.js +9 -9
- package/dist/valibot/url.js +95 -95
- package/dist/valibot/user.js +23 -23
- package/dist/zod/all.js +33 -33
- package/dist/zod/generic.js +11 -11
- package/dist/zod/javascript.js +32 -32
- package/dist/zod/user.js +16 -16
- package/dist/zod/web.js +52 -52
- package/package.json +133 -132
@@ -1,210 +1,210 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview Logger implementation based on EventEmitter e.g.
|
3
|
-
* for service logging.
|
4
|
-
*
|
5
|
-
* This Logger provides consistent log level filtering and event-based
|
6
|
-
* distribution of log messages. It integrates with the service architecture
|
7
|
-
* to provide controlled, consistent logging across all services.
|
8
|
-
*
|
9
|
-
* @example
|
10
|
-
* // Basic usage
|
11
|
-
* import { Logger, INFO, DEBUG } from './Logger.js';
|
12
|
-
*
|
13
|
-
* const logger = new Logger('myService', INFO);
|
14
|
-
*
|
15
|
-
* // Log at different levels
|
16
|
-
* logger.debug('Detailed information', { value: 42 }); // Filtered out at INFO
|
17
|
-
* logger.info('Operation completed', { items: 27 }); // Will be logged
|
18
|
-
* logger.warn('Unusual condition detected'); // Will be logged
|
19
|
-
*
|
20
|
-
* // Listen to log events
|
21
|
-
* logger.on('log', (logEvent) => {
|
22
|
-
* // Process all log events
|
23
|
-
* saveToLogFile(logEvent);
|
24
|
-
* });
|
25
|
-
*
|
26
|
-
* logger.on(ERROR, (logEvent) => {
|
27
|
-
* // Process only error events
|
28
|
-
* sendAlertEmail(logEvent);
|
29
|
-
* });
|
30
|
-
*
|
31
|
-
* // Change log level at runtime
|
32
|
-
* logger.setLevel(DEBUG); // Now debug messages will also be logged
|
33
|
-
*/
|
34
|
-
|
35
|
-
import { EventEmitter } from '../events';
|
36
|
-
|
37
|
-
import { DEBUG, INFO, WARN, ERROR, LEVELS } from './constants.js';
|
38
|
-
|
39
|
-
/**
|
40
|
-
* Logger class for consistent logging across services
|
41
|
-
* @extends EventEmitter
|
42
|
-
*/
|
43
|
-
export default class Logger extends EventEmitter {
|
44
|
-
#defaultContext;
|
45
|
-
#hasContext;
|
46
|
-
|
47
|
-
/**
|
48
|
-
* Create a new Logger instance
|
49
|
-
*
|
50
|
-
* @param {string} name - Name of the service/component for this logger
|
51
|
-
* @param {string} [defaultLevel=INFO] - Initial log level threshold
|
52
|
-
* @param {Object} [context={}] - Default context data for all logs
|
53
|
-
*/
|
54
|
-
constructor(name, defaultLevel = INFO, context = {}) {
|
55
|
-
super();
|
56
|
-
this.name = name;
|
57
|
-
this.level = defaultLevel;
|
58
|
-
|
59
|
-
this.#defaultContext = structuredClone(context);
|
60
|
-
this.#hasContext = Object.keys(this.#defaultContext).length > 0;
|
61
|
-
}
|
62
|
-
|
63
|
-
/**
|
64
|
-
* Set the minimum log level threshold
|
65
|
-
*
|
66
|
-
* @param {string} level - New log level (DEBUG, INFO, WARN, ERROR or NONE)
|
67
|
-
* @returns {boolean} True if level was valid and set, false otherwise
|
68
|
-
*/
|
69
|
-
setLevel(level) {
|
70
|
-
if (LEVELS[level] !== undefined) {
|
71
|
-
this.level = level;
|
72
|
-
return true;
|
73
|
-
}
|
74
|
-
|
75
|
-
console.warn(`Invalid log level: ${level}`);
|
76
|
-
return false;
|
77
|
-
}
|
78
|
-
|
79
|
-
/**
|
80
|
-
* Log a debug message
|
81
|
-
*
|
82
|
-
* @param {string} message - Log message
|
83
|
-
* @param {*} [details] - Additional details
|
84
|
-
* @returns {boolean} True if the log was emitted
|
85
|
-
*/
|
86
|
-
debug(message, details) {
|
87
|
-
return this.#log(DEBUG, message, details);
|
88
|
-
}
|
89
|
-
|
90
|
-
/**
|
91
|
-
* Log an info message
|
92
|
-
*
|
93
|
-
* @param {string} message - Log message
|
94
|
-
* @param {*} [details] - Additional details
|
95
|
-
* @returns {boolean} True if the log was emitted
|
96
|
-
*/
|
97
|
-
info(message, details) {
|
98
|
-
return this.#log(INFO, message, details);
|
99
|
-
}
|
100
|
-
|
101
|
-
/**
|
102
|
-
* Log a warning message
|
103
|
-
*
|
104
|
-
* @param {string} message - Log message
|
105
|
-
* @param {*} [details] - Additional details
|
106
|
-
* @returns {boolean} True if the log was emitted
|
107
|
-
*/
|
108
|
-
warn(message, details) {
|
109
|
-
return this.#log(WARN, message, details);
|
110
|
-
}
|
111
|
-
|
112
|
-
/**
|
113
|
-
* Log an error message
|
114
|
-
*
|
115
|
-
* @param {string} message - Log message
|
116
|
-
* @param {*} [details] - Additional details
|
117
|
-
* @returns {boolean} True if the log was emitted
|
118
|
-
*/
|
119
|
-
error(message, details) {
|
120
|
-
return this.#log(ERROR, message, details);
|
121
|
-
}
|
122
|
-
|
123
|
-
/**
|
124
|
-
* Create a child logger with additional context
|
125
|
-
*
|
126
|
-
* @param {string} namespace
|
127
|
-
* Namespace of the context (needed for chaining contexts)
|
128
|
-
*
|
129
|
-
* @param {Object} additionalContext - Additional context data
|
130
|
-
*
|
131
|
-
* @returns {Logger} New logger instance with merged context
|
132
|
-
*/
|
133
|
-
context(namespace, additionalContext) {
|
134
|
-
if( typeof namespace !== "string" ) {
|
135
|
-
throw new Error('Invalid namespace');
|
136
|
-
}
|
137
|
-
|
138
|
-
const mergedContext = {
|
139
|
-
...this.#defaultContext,
|
140
|
-
[namespace]: additionalContext
|
141
|
-
};
|
142
|
-
|
143
|
-
return new Logger(this.name, this.level, mergedContext);
|
144
|
-
}
|
145
|
-
|
146
|
-
/**
|
147
|
-
* Log an event from an event emitter of type LogEvent
|
148
|
-
*
|
149
|
-
* E.g. an event that was created by another Logger instance and should be
|
150
|
-
* forwarded to this logger.
|
151
|
-
*
|
152
|
-
* @param {string} eventName
|
153
|
-
* @param {import('./typedef.js').LogEventData} eventData
|
154
|
-
*/
|
155
|
-
logFromEvent( eventName, eventData ) {
|
156
|
-
const level = eventData.level;
|
157
|
-
|
158
|
-
// Check if this log level should be filtered
|
159
|
-
if (LEVELS[level] < LEVELS[this.level]) {
|
160
|
-
return false; // Below threshold, don't emit
|
161
|
-
}
|
162
|
-
|
163
|
-
this.#logEvent( { ...eventData, eventName });
|
164
|
-
}
|
165
|
-
|
166
|
-
/**
|
167
|
-
* Internal logging method
|
168
|
-
*
|
169
|
-
* @param {string} level - Log level
|
170
|
-
* @param {string} message - Log message
|
171
|
-
* @param {*} [details] - Additional details to include in the log
|
172
|
-
* @returns {boolean} True if the log was emitted, false if filtered
|
173
|
-
*/
|
174
|
-
#log(level, message, details) {
|
175
|
-
// Check if this log level should be filtered
|
176
|
-
if (LEVELS[level] < LEVELS[this.level]) {
|
177
|
-
return false; // Below threshold, don't emit
|
178
|
-
}
|
179
|
-
|
180
|
-
const timestamp = new Date();
|
181
|
-
|
182
|
-
const logEvent = {
|
183
|
-
timestamp,
|
184
|
-
source: this.name,
|
185
|
-
level,
|
186
|
-
message,
|
187
|
-
context: this.#hasContext ? this.#defaultContext : null,
|
188
|
-
details: details ?? null
|
189
|
-
};
|
190
|
-
|
191
|
-
// Emit as both specific level event and generic 'log' event
|
192
|
-
this.emit(level, logEvent);
|
193
|
-
this.emit('log', logEvent);
|
194
|
-
|
195
|
-
return true;
|
196
|
-
}
|
197
|
-
|
198
|
-
/**
|
199
|
-
* Internal event loggin method
|
200
|
-
*
|
201
|
-
* @param {import('./typedef.js').LogEvent} logEvent
|
202
|
-
*/
|
203
|
-
#logEvent(logEvent) {
|
204
|
-
// Emit as both specific level event and generic 'log' event
|
205
|
-
this.emit(logEvent.level, logEvent);
|
206
|
-
this.emit('log', logEvent);
|
207
|
-
|
208
|
-
return true;
|
209
|
-
}
|
210
|
-
}
|
1
|
+
/**
|
2
|
+
* @fileoverview Logger implementation based on EventEmitter e.g.
|
3
|
+
* for service logging.
|
4
|
+
*
|
5
|
+
* This Logger provides consistent log level filtering and event-based
|
6
|
+
* distribution of log messages. It integrates with the service architecture
|
7
|
+
* to provide controlled, consistent logging across all services.
|
8
|
+
*
|
9
|
+
* @example
|
10
|
+
* // Basic usage
|
11
|
+
* import { Logger, INFO, DEBUG } from './Logger.js';
|
12
|
+
*
|
13
|
+
* const logger = new Logger('myService', INFO);
|
14
|
+
*
|
15
|
+
* // Log at different levels
|
16
|
+
* logger.debug('Detailed information', { value: 42 }); // Filtered out at INFO
|
17
|
+
* logger.info('Operation completed', { items: 27 }); // Will be logged
|
18
|
+
* logger.warn('Unusual condition detected'); // Will be logged
|
19
|
+
*
|
20
|
+
* // Listen to log events
|
21
|
+
* logger.on('log', (logEvent) => {
|
22
|
+
* // Process all log events
|
23
|
+
* saveToLogFile(logEvent);
|
24
|
+
* });
|
25
|
+
*
|
26
|
+
* logger.on(ERROR, (logEvent) => {
|
27
|
+
* // Process only error events
|
28
|
+
* sendAlertEmail(logEvent);
|
29
|
+
* });
|
30
|
+
*
|
31
|
+
* // Change log level at runtime
|
32
|
+
* logger.setLevel(DEBUG); // Now debug messages will also be logged
|
33
|
+
*/
|
34
|
+
|
35
|
+
import { EventEmitter } from '../events';
|
36
|
+
|
37
|
+
import { DEBUG, INFO, WARN, ERROR, LEVELS } from './constants.js';
|
38
|
+
|
39
|
+
/**
|
40
|
+
* Logger class for consistent logging across services
|
41
|
+
* @extends EventEmitter
|
42
|
+
*/
|
43
|
+
export default class Logger extends EventEmitter {
|
44
|
+
#defaultContext;
|
45
|
+
#hasContext;
|
46
|
+
|
47
|
+
/**
|
48
|
+
* Create a new Logger instance
|
49
|
+
*
|
50
|
+
* @param {string} name - Name of the service/component for this logger
|
51
|
+
* @param {string} [defaultLevel=INFO] - Initial log level threshold
|
52
|
+
* @param {Object} [context={}] - Default context data for all logs
|
53
|
+
*/
|
54
|
+
constructor(name, defaultLevel = INFO, context = {}) {
|
55
|
+
super();
|
56
|
+
this.name = name;
|
57
|
+
this.level = defaultLevel;
|
58
|
+
|
59
|
+
this.#defaultContext = structuredClone(context);
|
60
|
+
this.#hasContext = Object.keys(this.#defaultContext).length > 0;
|
61
|
+
}
|
62
|
+
|
63
|
+
/**
|
64
|
+
* Set the minimum log level threshold
|
65
|
+
*
|
66
|
+
* @param {string} level - New log level (DEBUG, INFO, WARN, ERROR or NONE)
|
67
|
+
* @returns {boolean} True if level was valid and set, false otherwise
|
68
|
+
*/
|
69
|
+
setLevel(level) {
|
70
|
+
if (LEVELS[level] !== undefined) {
|
71
|
+
this.level = level;
|
72
|
+
return true;
|
73
|
+
}
|
74
|
+
|
75
|
+
console.warn(`Invalid log level: ${level}`);
|
76
|
+
return false;
|
77
|
+
}
|
78
|
+
|
79
|
+
/**
|
80
|
+
* Log a debug message
|
81
|
+
*
|
82
|
+
* @param {string} message - Log message
|
83
|
+
* @param {*} [details] - Additional details
|
84
|
+
* @returns {boolean} True if the log was emitted
|
85
|
+
*/
|
86
|
+
debug(message, details) {
|
87
|
+
return this.#log(DEBUG, message, details);
|
88
|
+
}
|
89
|
+
|
90
|
+
/**
|
91
|
+
* Log an info message
|
92
|
+
*
|
93
|
+
* @param {string} message - Log message
|
94
|
+
* @param {*} [details] - Additional details
|
95
|
+
* @returns {boolean} True if the log was emitted
|
96
|
+
*/
|
97
|
+
info(message, details) {
|
98
|
+
return this.#log(INFO, message, details);
|
99
|
+
}
|
100
|
+
|
101
|
+
/**
|
102
|
+
* Log a warning message
|
103
|
+
*
|
104
|
+
* @param {string} message - Log message
|
105
|
+
* @param {*} [details] - Additional details
|
106
|
+
* @returns {boolean} True if the log was emitted
|
107
|
+
*/
|
108
|
+
warn(message, details) {
|
109
|
+
return this.#log(WARN, message, details);
|
110
|
+
}
|
111
|
+
|
112
|
+
/**
|
113
|
+
* Log an error message
|
114
|
+
*
|
115
|
+
* @param {string} message - Log message
|
116
|
+
* @param {*} [details] - Additional details
|
117
|
+
* @returns {boolean} True if the log was emitted
|
118
|
+
*/
|
119
|
+
error(message, details) {
|
120
|
+
return this.#log(ERROR, message, details);
|
121
|
+
}
|
122
|
+
|
123
|
+
/**
|
124
|
+
* Create a child logger with additional context
|
125
|
+
*
|
126
|
+
* @param {string} namespace
|
127
|
+
* Namespace of the context (needed for chaining contexts)
|
128
|
+
*
|
129
|
+
* @param {Object} additionalContext - Additional context data
|
130
|
+
*
|
131
|
+
* @returns {Logger} New logger instance with merged context
|
132
|
+
*/
|
133
|
+
context(namespace, additionalContext) {
|
134
|
+
if( typeof namespace !== "string" ) {
|
135
|
+
throw new Error('Invalid namespace');
|
136
|
+
}
|
137
|
+
|
138
|
+
const mergedContext = {
|
139
|
+
...this.#defaultContext,
|
140
|
+
[namespace]: additionalContext
|
141
|
+
};
|
142
|
+
|
143
|
+
return new Logger(this.name, this.level, mergedContext);
|
144
|
+
}
|
145
|
+
|
146
|
+
/**
|
147
|
+
* Log an event from an event emitter of type LogEvent
|
148
|
+
*
|
149
|
+
* E.g. an event that was created by another Logger instance and should be
|
150
|
+
* forwarded to this logger.
|
151
|
+
*
|
152
|
+
* @param {string} eventName
|
153
|
+
* @param {import('./typedef.js').LogEventData} eventData
|
154
|
+
*/
|
155
|
+
logFromEvent( eventName, eventData ) {
|
156
|
+
const level = eventData.level;
|
157
|
+
|
158
|
+
// Check if this log level should be filtered
|
159
|
+
if (LEVELS[level] < LEVELS[this.level]) {
|
160
|
+
return false; // Below threshold, don't emit
|
161
|
+
}
|
162
|
+
|
163
|
+
this.#logEvent( { ...eventData, eventName });
|
164
|
+
}
|
165
|
+
|
166
|
+
/**
|
167
|
+
* Internal logging method
|
168
|
+
*
|
169
|
+
* @param {string} level - Log level
|
170
|
+
* @param {string} message - Log message
|
171
|
+
* @param {*} [details] - Additional details to include in the log
|
172
|
+
* @returns {boolean} True if the log was emitted, false if filtered
|
173
|
+
*/
|
174
|
+
#log(level, message, details) {
|
175
|
+
// Check if this log level should be filtered
|
176
|
+
if (LEVELS[level] < LEVELS[this.level]) {
|
177
|
+
return false; // Below threshold, don't emit
|
178
|
+
}
|
179
|
+
|
180
|
+
const timestamp = new Date();
|
181
|
+
|
182
|
+
const logEvent = {
|
183
|
+
timestamp,
|
184
|
+
source: this.name,
|
185
|
+
level,
|
186
|
+
message,
|
187
|
+
context: this.#hasContext ? this.#defaultContext : null,
|
188
|
+
details: details ?? null
|
189
|
+
};
|
190
|
+
|
191
|
+
// Emit as both specific level event and generic 'log' event
|
192
|
+
this.emit(level, logEvent);
|
193
|
+
this.emit('log', logEvent);
|
194
|
+
|
195
|
+
return true;
|
196
|
+
}
|
197
|
+
|
198
|
+
/**
|
199
|
+
* Internal event loggin method
|
200
|
+
*
|
201
|
+
* @param {import('./typedef.js').LogEvent} logEvent
|
202
|
+
*/
|
203
|
+
#logEvent(logEvent) {
|
204
|
+
// Emit as both specific level event and generic 'log' event
|
205
|
+
this.emit(logEvent.level, logEvent);
|
206
|
+
this.emit('log', logEvent);
|
207
|
+
|
208
|
+
return true;
|
209
|
+
}
|
210
|
+
}
|
@@ -1,16 +1,16 @@
|
|
1
|
-
|
2
|
-
// Log level names
|
3
|
-
export const DEBUG = 'debug';
|
4
|
-
export const INFO = 'info';
|
5
|
-
export const WARN = 'warn';
|
6
|
-
export const ERROR = 'error';
|
7
|
-
export const NONE = 'none';
|
8
|
-
|
9
|
-
// Level values for filtering (higher = more important)
|
10
|
-
export const LEVELS = {
|
11
|
-
[DEBUG]: 1,
|
12
|
-
[INFO]: 2,
|
13
|
-
[WARN]: 3,
|
14
|
-
[ERROR]: 4,
|
15
|
-
[NONE]: 6
|
16
|
-
};
|
1
|
+
|
2
|
+
// Log level names
|
3
|
+
export const DEBUG = 'debug';
|
4
|
+
export const INFO = 'info';
|
5
|
+
export const WARN = 'warn';
|
6
|
+
export const ERROR = 'error';
|
7
|
+
export const NONE = 'none';
|
8
|
+
|
9
|
+
// Level values for filtering (higher = more important)
|
10
|
+
export const LEVELS = {
|
11
|
+
[DEBUG]: 1,
|
12
|
+
[INFO]: 2,
|
13
|
+
[WARN]: 3,
|
14
|
+
[ERROR]: 4,
|
15
|
+
[NONE]: 6
|
16
|
+
};
|
@@ -1,4 +1,4 @@
|
|
1
|
-
|
2
|
-
export { default as Logger } from './Logger.js';
|
3
|
-
|
4
|
-
export * from './constants.js';
|
1
|
+
|
2
|
+
export { default as Logger } from './Logger.js';
|
3
|
+
|
4
|
+
export * from './constants.js';
|
@@ -1,17 +1,17 @@
|
|
1
|
-
/**
|
2
|
-
* @typedef {Object} LogEventData
|
3
|
-
* @property {Date} timestamp - When the log event was created
|
4
|
-
* @property {string} source - Name of the source where the event came from
|
5
|
-
* @property {string} level - Log level (DEBUG, INFO, WARN, ERROR)
|
6
|
-
* @property {string} message - The log message
|
7
|
-
* @property {Object|null} context
|
8
|
-
* Default context data from the logger (null if no context)
|
9
|
-
* @property {*} [details] - Additional details provided with the log (optional)
|
10
|
-
*/
|
11
|
-
|
12
|
-
/**
|
13
|
-
* @typedef {LogEventData & { eventName?: string }} LogEvent
|
14
|
-
* eventName - Original event name if log came from an event (optional)
|
15
|
-
*/
|
16
|
-
|
17
|
-
export default {};
|
1
|
+
/**
|
2
|
+
* @typedef {Object} LogEventData
|
3
|
+
* @property {Date} timestamp - When the log event was created
|
4
|
+
* @property {string} source - Name of the source where the event came from
|
5
|
+
* @property {string} level - Log level (DEBUG, INFO, WARN, ERROR)
|
6
|
+
* @property {string} message - The log message
|
7
|
+
* @property {Object|null} context
|
8
|
+
* Default context data from the logger (null if no context)
|
9
|
+
* @property {*} [details] - Additional details provided with the log (optional)
|
10
|
+
*/
|
11
|
+
|
12
|
+
/**
|
13
|
+
* @typedef {LogEventData & { eventName?: string }} LogEvent
|
14
|
+
* eventName - Original event name if log came from an event (optional)
|
15
|
+
*/
|
16
|
+
|
17
|
+
export default {};
|