@hkdigital/lib-sveltekit 0.2.20 → 0.2.21

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 (254) hide show
  1. package/README.md +135 -135
  2. package/dist/assets/autospuiten/car-paint-picker.js +41 -41
  3. package/dist/assets/autospuiten/labels.js +7 -7
  4. package/dist/classes/cache/IndexedDbCache.js +1407 -1407
  5. package/dist/classes/cache/MemoryResponseCache.js +138 -138
  6. package/dist/classes/cache/index.js +5 -5
  7. package/dist/classes/cache/typedef.js +41 -41
  8. package/dist/classes/data/IterableTree.js +243 -243
  9. package/dist/classes/data/Selector.js +190 -190
  10. package/dist/classes/data/index.js +2 -2
  11. package/dist/classes/events/EventEmitter.js +275 -275
  12. package/dist/classes/events/index.js +2 -2
  13. package/dist/classes/index.js +4 -4
  14. package/dist/classes/logging/Logger.js +210 -210
  15. package/dist/classes/logging/constants.js +16 -16
  16. package/dist/classes/logging/index.js +4 -4
  17. package/dist/classes/logging/typedef.js +17 -17
  18. package/dist/classes/promise/HkPromise.js +377 -377
  19. package/dist/classes/promise/index.js +1 -1
  20. package/dist/classes/services/ServiceBase.js +463 -463
  21. package/dist/classes/services/ServiceManager.js +614 -614
  22. package/dist/classes/services/index.js +5 -5
  23. package/dist/classes/services/service-states.js +205 -205
  24. package/dist/classes/services/typedef.js +179 -179
  25. package/dist/classes/stores/SubscribersCount.js +107 -107
  26. package/dist/classes/stores/index.js +1 -1
  27. package/dist/classes/streams/LogTransformStream.js +19 -19
  28. package/dist/classes/streams/ServerEventsStore.js +110 -110
  29. package/dist/classes/streams/TimeStampSource.js +26 -26
  30. package/dist/classes/streams/index.js +3 -3
  31. package/dist/classes/svelte/audio/AudioLoader.svelte.js +58 -58
  32. package/dist/classes/svelte/audio/AudioScene.svelte.js +324 -324
  33. package/dist/classes/svelte/audio/mocks.js +35 -35
  34. package/dist/classes/svelte/finite-state-machine/FiniteStateMachine.svelte.js +133 -133
  35. package/dist/classes/svelte/finite-state-machine/index.js +1 -1
  36. package/dist/classes/svelte/image/ImageLoader.svelte.js +45 -45
  37. package/dist/classes/svelte/image/ImageScene.svelte.js +249 -249
  38. package/dist/classes/svelte/image/ImageVariantsLoader.svelte.js +152 -152
  39. package/dist/classes/svelte/image/index.js +4 -4
  40. package/dist/classes/svelte/image/mocks.js +35 -35
  41. package/dist/classes/svelte/image/typedef.js +8 -8
  42. package/dist/classes/svelte/index.js +14 -14
  43. package/dist/classes/svelte/loading-state-machine/LoadingStateMachine.svelte.js +109 -109
  44. package/dist/classes/svelte/loading-state-machine/constants.js +16 -16
  45. package/dist/classes/svelte/loading-state-machine/index.js +3 -3
  46. package/dist/classes/svelte/network-loader/NetworkLoader.svelte.js +338 -338
  47. package/dist/classes/svelte/network-loader/constants.js +3 -3
  48. package/dist/classes/svelte/network-loader/index.js +3 -3
  49. package/dist/classes/svelte/network-loader/mocks.js +30 -30
  50. package/dist/classes/svelte/network-loader/typedef.js +8 -8
  51. package/dist/components/area/HkArea.svelte +49 -49
  52. package/dist/components/area/HkGridArea.svelte +77 -77
  53. package/dist/components/area/index.js +2 -2
  54. package/dist/components/buttons/button/Button.svelte +82 -82
  55. package/dist/components/buttons/button-icon-steeze/SteezeIconButton.svelte +30 -30
  56. package/dist/components/buttons/button-text/TextButton.svelte +21 -21
  57. package/dist/components/buttons/index.js +3 -3
  58. package/dist/components/debug/debug-panel-design-scaling/DebugPanelDesignScaling.svelte +146 -146
  59. package/dist/components/debug/index.js +1 -1
  60. package/dist/components/drag-drop/DragController.js +44 -44
  61. package/dist/components/drag-drop/DragDropContext.svelte +111 -111
  62. package/dist/components/drag-drop/Draggable.svelte +519 -519
  63. package/dist/components/drag-drop/DropZoneArea.svelte +119 -119
  64. package/dist/components/drag-drop/DropZoneList.svelte +125 -125
  65. package/dist/components/drag-drop/{DropZone.svelte → Dropzone.svelte} +258 -258
  66. package/dist/components/drag-drop/actions.js +26 -26
  67. package/dist/components/drag-drop/drag-state.svelte.js +322 -322
  68. package/dist/components/drag-drop/index.js +7 -7
  69. package/dist/components/drag-drop/util.js +85 -85
  70. package/dist/components/hkdev/blocks/TextBlock.svelte +46 -46
  71. package/dist/components/hkdev/buttons/CheckButton.svelte +62 -62
  72. package/dist/components/icons/HkIcon.svelte +86 -86
  73. package/dist/components/icons/HkTabIcon.svelte +116 -116
  74. package/dist/components/icons/SteezeIcon.svelte +97 -97
  75. package/dist/components/icons/index.js +6 -6
  76. package/dist/components/icons/typedef.js +16 -16
  77. package/dist/components/index.js +2 -2
  78. package/dist/components/inputs/index.js +1 -1
  79. package/dist/components/inputs/text-input/TestTextInput.svelte__ +102 -102
  80. package/dist/components/inputs/text-input/TextInput.svelte +223 -223
  81. package/dist/components/inputs/text-input/TextInput.svelte___ +83 -83
  82. package/dist/components/inputs/text-input/assets/IconInvalid.svelte +14 -14
  83. package/dist/components/inputs/text-input/assets/IconValid.svelte +12 -12
  84. package/dist/components/layout/grid-layers/GridLayers.svelte +63 -63
  85. package/dist/components/layout/grid-layers/util.js +74 -74
  86. package/dist/components/layout/index.js +1 -1
  87. package/dist/components/panels/index.js +1 -1
  88. package/dist/components/panels/panel/Panel.svelte +43 -43
  89. package/dist/components/rows/index.js +3 -3
  90. package/dist/components/rows/panel-grid-row/PanelGridRow.svelte +104 -104
  91. package/dist/components/rows/panel-row-2/PanelRow2.svelte +40 -40
  92. package/dist/components/tab-bar/HkTabBar.state.svelte.js +149 -149
  93. package/dist/components/tab-bar/HkTabBar.svelte +74 -74
  94. package/dist/components/tab-bar/HkTabBarSelector.state.svelte.js +93 -93
  95. package/dist/components/tab-bar/HkTabBarSelector.svelte +49 -49
  96. package/dist/components/tab-bar/index.js +17 -17
  97. package/dist/components/tab-bar/typedef.js +11 -11
  98. package/dist/config/imagetools-config.js +189 -189
  99. package/dist/config/imagetools.d.ts +72 -72
  100. package/dist/constants/bases.js +13 -13
  101. package/dist/constants/errors/api.js +9 -9
  102. package/dist/constants/errors/generic.js +5 -5
  103. package/dist/constants/errors/index.js +3 -3
  104. package/dist/constants/errors/jwt.js +5 -5
  105. package/dist/constants/http/headers.js +6 -6
  106. package/dist/constants/http/index.js +2 -2
  107. package/dist/constants/http/methods.js +14 -14
  108. package/dist/constants/index.js +3 -3
  109. package/dist/constants/mime/application.js +5 -5
  110. package/dist/constants/mime/audio.js +13 -13
  111. package/dist/constants/mime/image.js +3 -3
  112. package/dist/constants/mime/index.js +4 -4
  113. package/dist/constants/mime/text.js +2 -2
  114. package/dist/constants/regexp/index.js +31 -31
  115. package/dist/constants/regexp/inspiratie.js__ +95 -95
  116. package/dist/constants/regexp/text.js +49 -49
  117. package/dist/constants/regexp/user.js +32 -32
  118. package/dist/constants/regexp/web.js +3 -3
  119. package/dist/constants/state-labels/drag-states.js +6 -6
  120. package/dist/constants/state-labels/drop-states.js +6 -6
  121. package/dist/constants/state-labels/input-states.js +11 -11
  122. package/dist/constants/state-labels/submit-states.js +4 -4
  123. package/dist/constants/time.js +28 -28
  124. package/dist/css/utilities.css +43 -43
  125. package/dist/design/design-config.js +73 -73
  126. package/dist/design/tailwind-theme-extend.js +158 -158
  127. package/dist/features/button-group/ButtonGroup.svelte +82 -82
  128. package/dist/features/button-group/typedef.js +10 -10
  129. package/dist/features/compare-left-right/CompareLeftRight.svelte +179 -179
  130. package/dist/features/compare-left-right/index.js +1 -1
  131. package/dist/features/game-box/GameBox.svelte +577 -577
  132. package/dist/features/game-box/gamebox.util.js +83 -83
  133. package/dist/features/hk-app-layout/HkAppLayout.state.svelte.js +25 -25
  134. package/dist/features/hk-app-layout/HkAppLayout.svelte +251 -251
  135. package/dist/features/image-box/ImageBox.svelte +210 -210
  136. package/dist/features/image-box/index.js +5 -5
  137. package/dist/features/image-box/typedef.js +32 -32
  138. package/dist/features/index.js +23 -23
  139. package/dist/features/presenter/ImageSlide.svelte +64 -64
  140. package/dist/features/presenter/Presenter.state.svelte.js +638 -638
  141. package/dist/features/presenter/Presenter.svelte +142 -142
  142. package/dist/features/presenter/constants.js +7 -7
  143. package/dist/features/presenter/index.js +10 -10
  144. package/dist/features/presenter/typedef.js +106 -106
  145. package/dist/features/presenter/util.js +210 -210
  146. package/dist/features/virtual-viewport/VirtualViewport.svelte +196 -196
  147. package/dist/logging/adapters/console.js +114 -114
  148. package/dist/logging/adapters/pino.js +60 -60
  149. package/dist/logging/constants.js +1 -1
  150. package/dist/logging/factories/client.js +21 -21
  151. package/dist/logging/factories/server.js +22 -22
  152. package/dist/logging/factories/universal.js +23 -23
  153. package/dist/logging/index.js +8 -8
  154. package/dist/schemas/index.js +1 -1
  155. package/dist/schemas/validate-url.js +180 -180
  156. package/dist/server/index.js +1 -1
  157. package/dist/server/logger.js +94 -94
  158. package/dist/states/index.js +1 -1
  159. package/dist/states/navigation.svelte.js +55 -55
  160. package/dist/stores/index.js +1 -1
  161. package/dist/stores/theme.js +80 -80
  162. package/dist/themes/hkdev/components/blocks/text-block.css +34 -41
  163. package/dist/themes/hkdev/components/boxes/game-box.css +11 -12
  164. package/dist/themes/hkdev/components/buttons/button-icon-steeze.css +22 -22
  165. package/dist/themes/hkdev/components/buttons/button-text.css +32 -32
  166. package/dist/themes/hkdev/components/buttons/button.css +146 -146
  167. package/dist/themes/hkdev/components/buttons/skip-button.css +5 -6
  168. package/dist/themes/hkdev/components/drag-drop/draggable.css +73 -73
  169. package/dist/themes/hkdev/components/drag-drop/drop-zone.css +58 -48
  170. package/dist/themes/hkdev/components/icons/icon-steeze.css +16 -22
  171. package/dist/themes/hkdev/components/inputs/text-input.css +102 -104
  172. package/dist/themes/hkdev/components/panels/panel.css +25 -27
  173. package/dist/themes/hkdev/components/rows/panel-grid-row.css +4 -6
  174. package/dist/themes/hkdev/components/rows/panel-row-2.css +5 -7
  175. package/dist/themes/hkdev/components.css +29 -53
  176. package/dist/themes/hkdev/debug.css +1 -1
  177. package/dist/themes/hkdev/global/layout.css +32 -39
  178. package/dist/themes/hkdev/global/on-colors.css +32 -53
  179. package/dist/themes/hkdev/globals.css +4 -11
  180. package/dist/themes/hkdev/responsive.css +12 -12
  181. package/dist/themes/hkdev/theme-ext.js +12 -15
  182. package/dist/themes/hkdev/theme.css +219 -0
  183. package/dist/themes/index.d.ts +1 -1
  184. package/dist/themes/index.js +1 -1
  185. package/dist/typedef/context.js +6 -6
  186. package/dist/typedef/drag.js +25 -25
  187. package/dist/typedef/drop.js +12 -12
  188. package/dist/typedef/image.js +38 -38
  189. package/dist/typedef/index.js +4 -4
  190. package/dist/util/array/index.js +436 -436
  191. package/dist/util/bases/base58.js +262 -262
  192. package/dist/util/bases/index.js +1 -1
  193. package/dist/util/compare/index.js +247 -247
  194. package/dist/util/css/css-vars.js +83 -83
  195. package/dist/util/css/index.js +1 -1
  196. package/dist/util/design-system/components/states.js +22 -22
  197. package/dist/util/design-system/css/clamp.js +66 -66
  198. package/dist/util/design-system/css/root-design-vars.js +102 -102
  199. package/dist/util/design-system/index.js +5 -5
  200. package/dist/util/design-system/layout/scaling.js +228 -228
  201. package/dist/util/design-system/skeleton.js +208 -208
  202. package/dist/util/design-system/tailwind.js +288 -288
  203. package/dist/util/env/index.js +9 -9
  204. package/dist/util/expect/arrays.js +47 -47
  205. package/dist/util/expect/index.js +259 -259
  206. package/dist/util/expect/primitives.js +55 -55
  207. package/dist/util/expect/url.js +60 -60
  208. package/dist/util/function/index.js +218 -218
  209. package/dist/util/geo/index.js +26 -26
  210. package/dist/util/http/caching.js +263 -263
  211. package/dist/util/http/errors.js +97 -97
  212. package/dist/util/http/headers.js +75 -75
  213. package/dist/util/http/http-request.js +578 -578
  214. package/dist/util/http/index.js +22 -22
  215. package/dist/util/http/json-request.js +224 -224
  216. package/dist/util/http/mocks.js +65 -65
  217. package/dist/util/http/response.js +294 -294
  218. package/dist/util/http/typedef.js +93 -93
  219. package/dist/util/http/url.js +52 -52
  220. package/dist/util/image/index.js +86 -86
  221. package/dist/util/index.js +2 -2
  222. package/dist/util/is/index.js +140 -140
  223. package/dist/util/iterate/index.js +234 -234
  224. package/dist/util/object/index.js +1361 -1361
  225. package/dist/util/singleton/index.js +97 -97
  226. package/dist/util/string/array-path.js +75 -75
  227. package/dist/util/string/convert.js +54 -54
  228. package/dist/util/string/fs.js +226 -226
  229. package/dist/util/string/index.js +5 -5
  230. package/dist/util/string/interpolate.js +61 -61
  231. package/dist/util/string/pad.js +10 -10
  232. package/dist/util/svelte/index.js +4 -4
  233. package/dist/util/svelte/loading/loading-tracker.svelte.js +108 -108
  234. package/dist/util/svelte/observe/index.js +49 -49
  235. package/dist/util/svelte/state-context/index.js +117 -117
  236. package/dist/util/svelte/wait/index.js +38 -38
  237. package/dist/util/sveltekit/index.js +1 -1
  238. package/dist/util/sveltekit/route-folders/index.js +101 -101
  239. package/dist/util/time/index.js +323 -323
  240. package/dist/util/unique/index.js +249 -249
  241. package/dist/valibot/date.js__ +10 -10
  242. package/dist/valibot/index.js +9 -9
  243. package/dist/valibot/url.js +95 -95
  244. package/dist/valibot/user.js +23 -23
  245. package/dist/zod/all.js +33 -33
  246. package/dist/zod/generic.js +11 -11
  247. package/dist/zod/javascript.js +32 -32
  248. package/dist/zod/user.js +16 -16
  249. package/dist/zod/web.js +52 -52
  250. package/package.json +132 -129
  251. package/dist/components/layout/grid-layers/GridLayers.svelte__heightFrom__ +0 -372
  252. package/dist/themes/hkdev/theme.d.ts +0 -234
  253. package/dist/themes/hkdev/theme.js +0 -235
  254. package/dist/util/http/test-data__/content-length-test-hkdigital-small.V4HfZyBQ.avif +0 -0
@@ -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 {};