@hkdigital/lib-core 0.3.11 → 0.3.13

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 (293) hide show
  1. package/README.md +173 -149
  2. package/dist/assets/autospuiten/car-paint-picker.js +41 -41
  3. package/dist/assets/autospuiten/labels.js +7 -7
  4. package/dist/classes/data/IterableTree.js +242 -242
  5. package/dist/classes/data/Selector.js +190 -190
  6. package/dist/classes/data/index.js +2 -2
  7. package/dist/classes/data/typedef.js +9 -9
  8. package/dist/classes/event-emitter/EventEmitter.js +273 -273
  9. package/dist/classes/event-emitter/index.js +2 -2
  10. package/dist/classes/index.js +4 -4
  11. package/dist/classes/promise/HkPromise.js +384 -384
  12. package/dist/classes/promise/index.js +1 -1
  13. package/dist/classes/stores/SubscribersCount.js +107 -107
  14. package/dist/classes/stores/index.js +1 -1
  15. package/dist/classes/streams/LogTransformStream.js +19 -19
  16. package/dist/classes/streams/ServerEventsStore.js +111 -111
  17. package/dist/classes/streams/TimeStampSource.js +26 -26
  18. package/dist/classes/streams/index.js +3 -3
  19. package/dist/classes/svelte/finite-state-machine/FiniteStateMachine.svelte.js +133 -133
  20. package/dist/classes/svelte/finite-state-machine/index.js +1 -1
  21. package/dist/classes/svelte/index.js +1 -11
  22. package/dist/classes/svelte/loading-state-machine/LoadingStateMachine.svelte.js +109 -109
  23. package/dist/classes/svelte/loading-state-machine/constants.js +16 -16
  24. package/dist/classes/svelte/loading-state-machine/index.js +3 -3
  25. package/dist/config/README.md +197 -196
  26. package/dist/config/generators/imagetools.js +189 -189
  27. package/dist/config/generators/vite.js +148 -142
  28. package/dist/config/imagetools.d.ts +72 -72
  29. package/dist/config/vite.js +4 -4
  30. package/dist/constants/bases/index.js +13 -13
  31. package/dist/constants/http/headers.js +6 -6
  32. package/dist/constants/http/index.js +2 -2
  33. package/dist/constants/http/methods.js +14 -14
  34. package/dist/constants/index.js +6 -6
  35. package/dist/constants/mime/application.js +5 -5
  36. package/dist/constants/mime/audio.js +13 -13
  37. package/dist/constants/mime/image.js +3 -3
  38. package/dist/constants/mime/index.js +4 -4
  39. package/dist/constants/mime/text.js +2 -2
  40. package/dist/constants/regexp/README.md +96 -95
  41. package/dist/constants/regexp/index.js +31 -31
  42. package/dist/constants/regexp/inspiratie.js__ +95 -95
  43. package/dist/constants/regexp/text.d.ts +4 -4
  44. package/dist/constants/regexp/text.js +49 -49
  45. package/dist/constants/regexp/url.js +3 -3
  46. package/dist/constants/regexp/user.js +29 -29
  47. package/dist/constants/states/drag.js +6 -6
  48. package/dist/constants/states/drop.js +6 -6
  49. package/dist/constants/states/index.js +4 -4
  50. package/dist/constants/states/input.js +11 -11
  51. package/dist/constants/states/submit.js +4 -4
  52. package/dist/constants/time/index.js +28 -28
  53. package/dist/css/utilities.css +43 -43
  54. package/dist/design/README.md +405 -405
  55. package/dist/design/config/design-config.js +73 -73
  56. package/dist/design/generators/index.js +288 -288
  57. package/dist/design/index.js +96 -96
  58. package/dist/design/plugins/skeleton.js +208 -208
  59. package/dist/design/tailwind-theme-extend.js +158 -158
  60. package/dist/design/themes/README.md +102 -102
  61. package/dist/design/themes/hkdev/components/blocks/text-block.css +34 -34
  62. package/dist/design/themes/hkdev/components/boxes/game-box.css +11 -11
  63. package/dist/design/themes/hkdev/components/buttons/button-icon-steeze.css +22 -22
  64. package/dist/design/themes/hkdev/components/buttons/button-text.css +32 -32
  65. package/dist/design/themes/hkdev/components/buttons/button.css +146 -146
  66. package/dist/design/themes/hkdev/components/buttons/skip-button.css +5 -5
  67. package/dist/design/themes/hkdev/components/drag-drop/draggable.css +73 -73
  68. package/dist/design/themes/hkdev/components/drag-drop/drop-zone.css +58 -58
  69. package/dist/design/themes/hkdev/components/icons/icon-steeze.css +15 -15
  70. package/dist/design/themes/hkdev/components/inputs/text-input.css +102 -102
  71. package/dist/design/themes/hkdev/components/panels/panel.css +25 -25
  72. package/dist/design/themes/hkdev/components/rows/panel-grid-row.css +4 -4
  73. package/dist/design/themes/hkdev/components/rows/panel-row-2.css +5 -5
  74. package/dist/design/themes/hkdev/components.css +29 -29
  75. package/dist/design/themes/hkdev/debug.css +1 -1
  76. package/dist/design/themes/hkdev/global/layout.css +32 -32
  77. package/dist/design/themes/hkdev/global/on-colors.css +32 -32
  78. package/dist/design/themes/hkdev/globals.css +3 -3
  79. package/dist/design/themes/hkdev/responsive.css +12 -12
  80. package/dist/design/themes/hkdev/theme-ext.js +12 -12
  81. package/dist/design/themes/hkdev/theme.css +218 -218
  82. package/dist/design/utils/clamp.js +66 -66
  83. package/dist/design/utils/root-vars.js +102 -102
  84. package/dist/design/utils/scaling.js +228 -228
  85. package/dist/design/utils/states.js +22 -22
  86. package/dist/errors/api.js +9 -9
  87. package/dist/errors/generic.js +20 -20
  88. package/dist/errors/http.js +16 -16
  89. package/dist/errors/index.js +5 -5
  90. package/dist/errors/jwt.js +5 -5
  91. package/dist/errors/promise.js +25 -25
  92. package/dist/logging/README.md +158 -0
  93. package/dist/logging/index.d.ts +3 -1
  94. package/dist/logging/index.js +11 -7
  95. package/dist/logging/internal/adapters/console.js +114 -114
  96. package/dist/logging/internal/adapters/index.js +2 -2
  97. package/dist/logging/internal/adapters/pino.js +160 -142
  98. package/dist/logging/internal/adapters/typedef.js +10 -10
  99. package/dist/logging/internal/{unified-logger/constants.js → constants.js} +22 -22
  100. package/dist/logging/internal/factories/client.d.ts +1 -1
  101. package/dist/logging/internal/factories/client.js +21 -21
  102. package/dist/logging/internal/factories/server.d.ts +1 -1
  103. package/dist/logging/internal/factories/server.js +22 -22
  104. package/dist/logging/internal/factories/universal.d.ts +2 -2
  105. package/dist/logging/internal/factories/universal.js +22 -22
  106. package/dist/logging/internal/{unified-logger → logger}/Logger.d.ts +2 -2
  107. package/dist/logging/internal/{unified-logger → logger}/Logger.js +217 -217
  108. package/dist/logging/internal/logger/index.d.ts +1 -0
  109. package/dist/logging/internal/logger/index.js +1 -0
  110. package/dist/logging/internal/{unified-logger/typedef.d.ts → typedef.d.ts} +2 -1
  111. package/dist/logging/internal/{unified-logger/typedef.js → typedef.js} +21 -17
  112. package/dist/network/README.md +172 -172
  113. package/dist/network/cache/IndexedDbCache.js +1407 -1407
  114. package/dist/network/cache/MemoryResponseCache.js +138 -138
  115. package/dist/network/cache/index.js +5 -5
  116. package/dist/network/cache/typedef.js +41 -41
  117. package/dist/network/cache.js +3 -3
  118. package/dist/network/http/caching.js +261 -261
  119. package/dist/network/http/errors.js +97 -97
  120. package/dist/network/http/headers.js +75 -75
  121. package/dist/network/http/http-request.js +578 -578
  122. package/dist/network/http/index.js +22 -22
  123. package/dist/network/http/json-request.js +224 -224
  124. package/dist/network/http/mocks.js +65 -65
  125. package/dist/network/http/response.js +318 -318
  126. package/dist/network/http/test-data__/content-length-test-hkdigital-small.V4HfZyBQ.avif +0 -0
  127. package/dist/network/http/typedef.js +93 -93
  128. package/dist/network/http/url.js +52 -52
  129. package/dist/network/http.js +5 -5
  130. package/dist/network/loaders/README.md +254 -254
  131. package/dist/network/loaders/audio/AudioLoader.svelte.js +58 -58
  132. package/dist/network/loaders/audio/AudioScene.svelte.js +324 -324
  133. package/dist/network/loaders/audio/mocks.js +35 -35
  134. package/dist/network/loaders/audio.js +1 -1
  135. package/dist/network/loaders/image/ImageLoader.svelte.js +44 -44
  136. package/dist/network/loaders/image/ImageScene.svelte.js +248 -248
  137. package/dist/network/loaders/image/ImageVariantsLoader.svelte.js +150 -150
  138. package/dist/network/loaders/image/index.js +4 -4
  139. package/dist/network/loaders/image/mocks.js +35 -35
  140. package/dist/network/loaders/image/typedef.js +8 -8
  141. package/dist/network/loaders/image/utils/index.js +86 -86
  142. package/dist/network/loaders/image.js +7 -7
  143. package/dist/network/loaders/typedef.js +38 -38
  144. package/dist/network/loaders.js +2 -2
  145. package/dist/network/states/NetworkLoader.svelte.js +338 -338
  146. package/dist/network/states/constants.js +3 -3
  147. package/dist/network/states/index.js +3 -3
  148. package/dist/network/states/mocks.js +30 -30
  149. package/dist/network/states/typedef.js +8 -8
  150. package/dist/network/typedef.js +9 -9
  151. package/dist/services/README.md +200 -0
  152. package/dist/services/index.d.ts +6 -1
  153. package/dist/services/index.js +8 -1
  154. package/dist/services/{internal/service-base → service-base}/ServiceBase.d.ts +2 -2
  155. package/dist/services/{internal/service-base → service-base}/ServiceBase.js +462 -462
  156. package/dist/services/{internal/service-base → service-base}/constants.d.ts +0 -12
  157. package/dist/services/{internal/service-base → service-base}/constants.js +98 -110
  158. package/dist/services/{internal/service-base → service-base}/index.js +3 -3
  159. package/dist/services/{internal/service-base → service-base}/typedef.d.ts +1 -1
  160. package/dist/services/{internal/service-base → service-base}/typedef.js +101 -101
  161. package/dist/services/{internal/service-manager → service-manager}/ServiceManager.d.ts +2 -2
  162. package/dist/services/{internal/service-manager → service-manager}/ServiceManager.js +608 -608
  163. package/dist/services/{internal/service-manager → service-manager}/constants.js +6 -6
  164. package/dist/services/{internal/service-manager → service-manager}/typedef.js +90 -90
  165. package/dist/states/index.js +1 -1
  166. package/dist/states/navigation.svelte.js +55 -55
  167. package/dist/stores/index.js +1 -1
  168. package/dist/stores/theme.js +80 -80
  169. package/dist/typedef/context.js +6 -6
  170. package/dist/typedef/drag.js +25 -25
  171. package/dist/typedef/drop.js +12 -12
  172. package/dist/typedef/index.d.ts +1 -0
  173. package/dist/typedef/index.js +4 -4
  174. package/dist/ui/components/button-group/ButtonGroup.svelte +82 -82
  175. package/dist/ui/components/button-group/typedef.js +10 -10
  176. package/dist/ui/components/compare-left-right/CompareLeftRight.svelte +179 -179
  177. package/dist/ui/components/compare-left-right/index.js +1 -1
  178. package/dist/ui/components/game-box/GameBox.svelte +577 -577
  179. package/dist/ui/components/game-box/gamebox.util.js +83 -83
  180. package/dist/ui/components/hk-app-layout/HkAppLayout.state.svelte.js +25 -25
  181. package/dist/ui/components/hk-app-layout/HkAppLayout.svelte +251 -251
  182. package/dist/ui/components/image-box/ImageBox.svelte +210 -210
  183. package/dist/ui/components/image-box/index.js +5 -5
  184. package/dist/ui/components/image-box/typedef.js +32 -32
  185. package/dist/ui/components/index.js +23 -23
  186. package/dist/ui/components/presenter/ImageSlide.svelte +64 -64
  187. package/dist/ui/components/presenter/Presenter.state.svelte.js +638 -638
  188. package/dist/ui/components/presenter/Presenter.svelte +142 -142
  189. package/dist/ui/components/presenter/constants.js +7 -7
  190. package/dist/ui/components/presenter/index.js +10 -10
  191. package/dist/ui/components/presenter/typedef.js +106 -106
  192. package/dist/ui/components/presenter/util.js +210 -210
  193. package/dist/ui/components/virtual-viewport/VirtualViewport.svelte +196 -196
  194. package/dist/ui/primitives/area/HkArea.svelte +49 -49
  195. package/dist/ui/primitives/area/HkGridArea.svelte +77 -77
  196. package/dist/ui/primitives/area/index.js +2 -2
  197. package/dist/ui/primitives/buttons/button/Button.svelte +82 -82
  198. package/dist/ui/primitives/buttons/button-icon-steeze/SteezeIconButton.svelte +30 -30
  199. package/dist/ui/primitives/buttons/button-text/TextButton.svelte +21 -21
  200. package/dist/ui/primitives/buttons/index.js +3 -3
  201. package/dist/ui/primitives/debug/debug-panel-design-scaling/DebugPanelDesignScaling.svelte +146 -146
  202. package/dist/ui/primitives/debug/index.js +1 -1
  203. package/dist/ui/primitives/drag-drop/DragController.js +44 -44
  204. package/dist/ui/primitives/drag-drop/DragDropContext.svelte +111 -111
  205. package/dist/ui/primitives/drag-drop/Draggable.svelte +519 -519
  206. package/dist/ui/primitives/drag-drop/DropZone.svelte +258 -258
  207. package/dist/ui/primitives/drag-drop/DropZoneArea.svelte +119 -119
  208. package/dist/ui/primitives/drag-drop/DropZoneList.svelte +125 -125
  209. package/dist/ui/primitives/drag-drop/actions.js +26 -26
  210. package/dist/ui/primitives/drag-drop/drag-state.svelte.js +322 -322
  211. package/dist/ui/primitives/drag-drop/index.js +7 -7
  212. package/dist/ui/primitives/drag-drop/util.js +85 -85
  213. package/dist/ui/primitives/hkdev/blocks/TextBlock.svelte +46 -46
  214. package/dist/ui/primitives/hkdev/buttons/CheckButton.svelte +62 -62
  215. package/dist/ui/primitives/icons/HkIcon.svelte +86 -86
  216. package/dist/ui/primitives/icons/HkTabIcon.svelte +116 -116
  217. package/dist/ui/primitives/icons/SteezeIcon.svelte +97 -97
  218. package/dist/ui/primitives/icons/index.js +6 -6
  219. package/dist/ui/primitives/icons/typedef.js +16 -16
  220. package/dist/ui/primitives/index.js +2 -2
  221. package/dist/ui/primitives/inputs/index.js +1 -1
  222. package/dist/ui/primitives/inputs/text-input/TestTextInput.svelte__ +102 -0
  223. package/dist/ui/primitives/inputs/text-input/TextInput.svelte +223 -223
  224. package/dist/ui/primitives/inputs/text-input/TextInput.svelte___ +83 -0
  225. package/dist/ui/primitives/inputs/text-input/assets/IconInvalid.svelte +14 -14
  226. package/dist/ui/primitives/inputs/text-input/assets/IconValid.svelte +12 -12
  227. package/dist/ui/primitives/layout/grid-layers/GridLayers.svelte +63 -63
  228. package/dist/ui/primitives/layout/grid-layers/GridLayers.svelte__heightFrom__ +372 -0
  229. package/dist/ui/primitives/layout/grid-layers/util.js +74 -74
  230. package/dist/ui/primitives/layout/index.js +1 -1
  231. package/dist/ui/primitives/panels/index.js +1 -1
  232. package/dist/ui/primitives/panels/panel/Panel.svelte +43 -43
  233. package/dist/ui/primitives/rows/index.js +3 -3
  234. package/dist/ui/primitives/rows/panel-grid-row/PanelGridRow.svelte +104 -104
  235. package/dist/ui/primitives/rows/panel-row-2/PanelRow2.svelte +40 -40
  236. package/dist/ui/primitives/tab-bar/HkTabBar.state.svelte.js +149 -149
  237. package/dist/ui/primitives/tab-bar/HkTabBar.svelte +74 -74
  238. package/dist/ui/primitives/tab-bar/HkTabBarSelector.state.svelte.js +93 -93
  239. package/dist/ui/primitives/tab-bar/HkTabBarSelector.svelte +49 -49
  240. package/dist/ui/primitives/tab-bar/index.js +17 -17
  241. package/dist/ui/primitives/tab-bar/typedef.js +11 -11
  242. package/dist/util/array/index.js +436 -436
  243. package/dist/util/bases/base58.js +262 -262
  244. package/dist/util/bases/index.js +1 -1
  245. package/dist/util/compare/index.js +247 -247
  246. package/dist/util/css/css-vars.js +83 -83
  247. package/dist/util/css/index.js +1 -1
  248. package/dist/util/env/index.js +9 -9
  249. package/dist/util/exceptions/index.d.ts +4 -3
  250. package/dist/util/exceptions/index.js +26 -23
  251. package/dist/util/expect/arrays.js +47 -47
  252. package/dist/util/expect/index.js +259 -259
  253. package/dist/util/expect/primitives.js +55 -55
  254. package/dist/util/expect/url.js +60 -60
  255. package/dist/util/function/index.js +218 -218
  256. package/dist/util/geo/index.js +26 -26
  257. package/dist/util/index.js +7 -7
  258. package/dist/util/is/index.js +147 -147
  259. package/dist/util/iterate/index.js +204 -204
  260. package/dist/util/object/index.js +1345 -1345
  261. package/dist/util/singleton/index.js +97 -97
  262. package/dist/util/string/array-path.js +75 -75
  263. package/dist/util/string/convert.js +54 -54
  264. package/dist/util/string/fs.js +226 -226
  265. package/dist/util/string/index.js +5 -5
  266. package/dist/util/string/interpolate.js +61 -61
  267. package/dist/util/string/pad.js +10 -10
  268. package/dist/util/svelte/index.js +4 -4
  269. package/dist/util/svelte/loading/loading-tracker.svelte.js +108 -108
  270. package/dist/util/svelte/observe/index.js +49 -49
  271. package/dist/util/svelte/state-context/index.js +117 -117
  272. package/dist/util/svelte/wait/index.js +38 -38
  273. package/dist/util/sveltekit/index.js +1 -1
  274. package/dist/util/sveltekit/route-folders/index.js +101 -101
  275. package/dist/util/time/index.js +328 -328
  276. package/dist/util/unique/index.js +231 -231
  277. package/dist/valibot/README.md +61 -50
  278. package/dist/valibot/index.js +8 -8
  279. package/dist/valibot/parsers/date.js__ +10 -0
  280. package/dist/valibot/parsers/email.d.ts +12 -0
  281. package/dist/valibot/parsers/email.js +34 -0
  282. package/dist/valibot/parsers/url.js +110 -110
  283. package/dist/valibot/parsers/user.js +23 -23
  284. package/dist/valibot/parsers.js +3 -3
  285. package/package.json +131 -131
  286. package/dist/logging/internal/unified-logger/index.d.ts +0 -3
  287. package/dist/logging/internal/unified-logger/index.js +0 -6
  288. package/dist/services/internal/index.d.ts +0 -6
  289. package/dist/services/internal/index.js +0 -8
  290. /package/dist/logging/internal/{unified-logger/constants.d.ts → constants.d.ts} +0 -0
  291. /package/dist/services/{internal/service-base → service-base}/index.d.ts +0 -0
  292. /package/dist/services/{internal/service-manager → service-manager}/constants.d.ts +0 -0
  293. /package/dist/services/{internal/service-manager → service-manager}/typedef.d.ts +0 -0
@@ -1,142 +1,160 @@
1
- /**
2
- * Pino adapter for server-side logging
3
- */
4
-
5
- import pino from 'pino';
6
- import { dev } from '$app/environment';
7
-
8
- /**
9
- * Pino adapter that bridges Logger events to pino
10
- */
11
- export class PinoAdapter {
12
- #projectRoot = null;
13
-
14
- /**
15
- * Create a new PinoAdapter
16
- *
17
- * @param {Object} [options] - Pino configuration options
18
- */
19
- constructor(options = {}) {
20
- // Determine project root once for stack trace cleaning
21
- this.#projectRoot = import.meta.env.VITE_PROJECT_ROOT || process.cwd();
22
- const baseOptions = {
23
- serializers: {
24
- err: (err) => {
25
- const chain = [];
26
- let current = err;
27
- let isFirst = true;
28
-
29
- while (current) {
30
- /** @type {import('./typedef').ErrorSummary} */
31
- const serialized = {
32
- name: current.name,
33
- message: current.message,
34
- ...(isFirst &&
35
- this.pino.level === 'debug' && {
36
- stack: this.#cleanStackTrace(current.stack)
37
- })
38
- };
39
-
40
- // Include HttpError-specific properties
41
- if (current.status !== undefined) {
42
- serialized.status = current.status;
43
- }
44
- if (current.details !== undefined) {
45
- serialized.details = current.details;
46
- }
47
-
48
- chain.push(serialized);
49
- current = current.cause;
50
- isFirst = false;
51
- }
52
-
53
- return { errorChain: chain };
54
- }
55
- }
56
- };
57
-
58
- const devOptions = dev
59
- ? {
60
- level: 'debug',
61
- transport: {
62
- target: 'pino-pretty',
63
- options: {
64
- colorize: true
65
- }
66
- }
67
- }
68
- : {};
69
-
70
- this.pino = pino({ ...baseOptions, ...devOptions, ...options });
71
- }
72
-
73
- /**
74
- * Clean stack trace by removing project root path
75
- *
76
- * @param {string} stack - Original stack trace
77
- * @returns {string} Cleaned stack trace
78
- */
79
- #cleanStackTrace(stack) {
80
- if (!stack || !this.#projectRoot) {
81
- return stack;
82
- }
83
-
84
- // Escape special regex characters in the project root path
85
- const escapedRoot = this.#projectRoot.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
86
-
87
- // Replace project root path with relative path, but only after "at " to avoid
88
- // accidental replacements in error messages or other parts of the stack
89
- // Match the project root followed by a path separator
90
- const regex = new RegExp(`(\\s+at\\s+.*\\()${escapedRoot}[\\/\\\\]`, 'g');
91
-
92
- return stack.replace(regex, '$1');
93
- }
94
-
95
- /**
96
- * Handle log events from Logger
97
- *
98
- * @param {Object} logEvent - Log event from Logger
99
- */
100
- handleLog(logEvent) {
101
- const { level, message, details, source, timestamp } = logEvent;
102
-
103
- const logData = {
104
- source,
105
- timestamp
106
- };
107
-
108
- // Check if details contains an error and promote it to err property for pino serializer
109
- if (details) {
110
- if (details instanceof Error) {
111
- // details is directly an error
112
- logData.err = details;
113
- } else if (details.error instanceof Error) {
114
- // details has an error property
115
- logData.err = details.error;
116
- // Include other details except the error
117
- const { error, ...otherDetails } = details;
118
- if (Object.keys(otherDetails).length > 0) {
119
- logData.details = otherDetails;
120
- }
121
- } else {
122
- // No error found in details, include all details
123
- logData.details = details;
124
- }
125
- }
126
-
127
- this.pino[level](logData, message);
128
- }
129
-
130
- /**
131
- * Create a child logger with additional context
132
- *
133
- * @param {Object} context - Additional context data
134
- * @returns {PinoAdapter} New adapter instance with context
135
- */
136
- child(context) {
137
- const childPino = this.pino.child(context);
138
- const adapter = new PinoAdapter();
139
- adapter.pino = childPino;
140
- return adapter;
141
- }
142
- }
1
+ /**
2
+ * Pino adapter for server-side logging
3
+ */
4
+
5
+ import pino from 'pino';
6
+ import { dev } from '$app/environment';
7
+
8
+ /**
9
+ * Pino adapter that bridges Logger events to pino
10
+ */
11
+ export class PinoAdapter {
12
+ #projectRoot = null;
13
+
14
+ /**
15
+ * Create a new PinoAdapter
16
+ *
17
+ * @param {Object} [options] - Pino configuration options
18
+ */
19
+ constructor(options = {}) {
20
+ // Determine project root once for stack trace cleaning
21
+ this.#projectRoot = import.meta.env.VITE_PROJECT_ROOT || process.cwd();
22
+ const baseOptions = {
23
+ serializers: {
24
+ err: (err) => {
25
+ const chain = [];
26
+ let current = err;
27
+ let isFirst = true;
28
+
29
+ while (current) {
30
+ /** @type {import('./typedef').ErrorSummary} */
31
+ const serialized = {
32
+ name: current.name,
33
+ message: current.message,
34
+ ...(isFirst &&
35
+ this.pino.level === 'debug' && {
36
+ stack: this.#cleanStackTrace(current.stack)
37
+ })
38
+ };
39
+
40
+ // Include HttpError-specific properties
41
+ if (current.status !== undefined) {
42
+ serialized.status = current.status;
43
+ }
44
+ if (current.details !== undefined) {
45
+ serialized.details = current.details;
46
+ }
47
+
48
+ chain.push(serialized);
49
+ current = current.cause;
50
+ isFirst = false;
51
+ }
52
+
53
+ return { errorChain: chain };
54
+ }
55
+ }
56
+ };
57
+
58
+ // Add error handling for missing pino-pretty in dev
59
+ if (dev) {
60
+ const devOptions = {
61
+ level: 'debug',
62
+ transport: {
63
+ target: 'pino-pretty',
64
+ options: {
65
+ colorize: true
66
+ }
67
+ }
68
+ };
69
+
70
+ try {
71
+ this.pino = pino({ ...baseOptions, ...devOptions, ...options });
72
+ } catch (error) {
73
+ if (error.message.includes('pino-pretty')) {
74
+ const errorMessage = `
75
+ ╭─────────────────────────────────────────────────────────────╮
76
+ │ Missing Dependency │
77
+ ├─────────────────────────────────────────────────────────────┤
78
+ │ 'pino-pretty' is required for development logging │
79
+ Install it with: pnpm add -D pino-pretty │
80
+ ╰─────────────────────────────────────────────────────────────╯`;
81
+ console.error(errorMessage);
82
+ throw new Error('pino-pretty is required for development mode');
83
+ }
84
+ throw error;
85
+ }
86
+ } else {
87
+ this.pino = pino({ ...baseOptions, ...options });
88
+ }
89
+ }
90
+
91
+ /**
92
+ * Clean stack trace by removing project root path
93
+ *
94
+ * @param {string} stack - Original stack trace
95
+ * @returns {string} Cleaned stack trace
96
+ */
97
+ #cleanStackTrace(stack) {
98
+ if (!stack || !this.#projectRoot) {
99
+ return stack;
100
+ }
101
+
102
+ // Escape special regex characters in the project root path
103
+ const escapedRoot = this.#projectRoot.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
104
+
105
+ // Replace project root path with relative path, but only after "at " to avoid
106
+ // accidental replacements in error messages or other parts of the stack
107
+ // Match the project root followed by a path separator
108
+ const regex = new RegExp(`(\\s+at\\s+.*\\()${escapedRoot}[\\/\\\\]`, 'g');
109
+
110
+ return stack.replace(regex, '$1');
111
+ }
112
+
113
+ /**
114
+ * Handle log events from Logger
115
+ *
116
+ * @param {Object} logEvent - Log event from Logger
117
+ */
118
+ handleLog(logEvent) {
119
+ const { level, message, details, source, timestamp } = logEvent;
120
+
121
+ const logData = {
122
+ source,
123
+ timestamp
124
+ };
125
+
126
+ // Check if details contains an error and promote it to err property for pino serializer
127
+ if (details) {
128
+ if (details instanceof Error) {
129
+ // details is directly an error
130
+ logData.err = details;
131
+ } else if (details.error instanceof Error) {
132
+ // details has an error property
133
+ logData.err = details.error;
134
+ // Include other details except the error
135
+ const { error, ...otherDetails } = details;
136
+ if (Object.keys(otherDetails).length > 0) {
137
+ logData.details = otherDetails;
138
+ }
139
+ } else {
140
+ // No error found in details, include all details
141
+ logData.details = details;
142
+ }
143
+ }
144
+
145
+ this.pino[level](logData, message);
146
+ }
147
+
148
+ /**
149
+ * Create a child logger with additional context
150
+ *
151
+ * @param {Object} context - Additional context data
152
+ * @returns {PinoAdapter} New adapter instance with context
153
+ */
154
+ child(context) {
155
+ const childPino = this.pino.child(context);
156
+ const adapter = new PinoAdapter();
157
+ adapter.pino = childPino;
158
+ return adapter;
159
+ }
160
+ }
@@ -1,10 +1,10 @@
1
- /**
2
- * @typedef {Object} ErrorSummary
3
- * @property {string} name - The name of the exception/error
4
- * @property {string} message - The error message
5
- * @property {string} [stack] Stack trace (in debug mode for first exception)
6
- * @property {number} [status] - HTTP status code (for HttpError instances)
7
- * @property {*} [details] - Additional error details (for HttpError instances)
8
- */
9
-
10
- export default {};
1
+ /**
2
+ * @typedef {Object} ErrorSummary
3
+ * @property {string} name - The name of the exception/error
4
+ * @property {string} message - The error message
5
+ * @property {string} [stack] Stack trace (in debug mode for first exception)
6
+ * @property {number} [status] - HTTP status code (for HttpError instances)
7
+ * @property {*} [details] - Additional error details (for HttpError instances)
8
+ */
9
+
10
+ export default {};
@@ -1,22 +1,22 @@
1
-
2
- // Log level and log event names
3
- export const DEBUG = 'debug';
4
- export const INFO = 'info';
5
- export const WARN = 'warn';
6
- export const ERROR = 'error';
7
-
8
- // Use NONE to set log level to disable all logging
9
- export const NONE = 'none';
10
-
11
- // Level values for filtering (higher = more important)
12
- export const LEVELS = {
13
- [DEBUG]: 1,
14
- [INFO]: 2,
15
- [WARN]: 3,
16
- [ERROR]: 4,
17
- [NONE]: 5
18
- };
19
-
20
- // Event name for generic events
21
- export const LOG = 'log';
22
-
1
+
2
+ // Log level and log event names
3
+ export const DEBUG = 'debug';
4
+ export const INFO = 'info';
5
+ export const WARN = 'warn';
6
+ export const ERROR = 'error';
7
+
8
+ // Use NONE to set log level to disable all logging
9
+ export const NONE = 'none';
10
+
11
+ // Level values for filtering (higher = more important)
12
+ export const LEVELS = {
13
+ [DEBUG]: 1,
14
+ [INFO]: 2,
15
+ [WARN]: 3,
16
+ [ERROR]: 4,
17
+ [NONE]: 5
18
+ };
19
+
20
+ // Event name for generic events
21
+ export const LOG = 'log';
22
+
@@ -7,4 +7,4 @@
7
7
  * @returns {Logger} Configured logger instance
8
8
  */
9
9
  export function createClientLogger(name: string, level?: string, consoleOptions?: any): Logger;
10
- import { Logger } from '../unified-logger';
10
+ import { Logger } from '../logger/index.js';
@@ -1,21 +1,21 @@
1
- import { Logger } from '../unified-logger';
2
- import { ConsoleAdapter } from '../adapters/console.js';
3
- import { INFO } from '../unified-logger/constants.js';
4
-
5
- /**
6
- * Create a client-side logger with console adapter
7
- *
8
- * @param {string} name
9
- * @param {string} [level=INFO] - Initial log level
10
- * @param {Object} [consoleOptions] - Additional console options
11
- * @returns {Logger} Configured logger instance
12
- */
13
- export function createClientLogger(name, level = INFO, consoleOptions = {}) {
14
- const logger = new Logger(name, level);
15
- const adapter = new ConsoleAdapter({ ...consoleOptions, level });
16
-
17
- // Connect adapter to logger events
18
- logger.on('log', (logEvent) => adapter.handleLog(logEvent));
19
-
20
- return logger;
21
- }
1
+ import { Logger } from '../logger/index.js';
2
+ import { ConsoleAdapter } from '../adapters/console.js';
3
+ import { INFO } from '../constants.js';
4
+
5
+ /**
6
+ * Create a client-side logger with console adapter
7
+ *
8
+ * @param {string} name
9
+ * @param {string} [level=INFO] - Initial log level
10
+ * @param {Object} [consoleOptions] - Additional console options
11
+ * @returns {Logger} Configured logger instance
12
+ */
13
+ export function createClientLogger(name, level = INFO, consoleOptions = {}) {
14
+ const logger = new Logger(name, level);
15
+ const adapter = new ConsoleAdapter({ ...consoleOptions, level });
16
+
17
+ // Connect adapter to logger events
18
+ logger.on('log', (logEvent) => adapter.handleLog(logEvent));
19
+
20
+ return logger;
21
+ }
@@ -7,4 +7,4 @@
7
7
  * @returns {Logger} Configured logger instance
8
8
  */
9
9
  export function createServerLogger(name: string, level?: string, pinoOptions?: any): Logger;
10
- import { Logger } from '../unified-logger';
10
+ import { Logger } from '../logger/index.js';
@@ -1,22 +1,22 @@
1
- import { Logger } from '../unified-logger';
2
-
3
- import { PinoAdapter } from '../adapters/pino.js';
4
- import { INFO } from '../unified-logger/constants.js';
5
-
6
- /**
7
- * Create a server-side logger with pino adapter
8
- *
9
- * @param {string} name
10
- * @param {string} [level=INFO] - Initial log level
11
- * @param {Object} [pinoOptions] - Additional pino options
12
- * @returns {Logger} Configured logger instance
13
- */
14
- export function createServerLogger(name, level = INFO, pinoOptions = {}) {
15
- const logger = new Logger(name, level);
16
- const adapter = new PinoAdapter(pinoOptions);
17
-
18
- // Connect adapter to logger events
19
- logger.on('log', (logEvent) => adapter.handleLog(logEvent));
20
-
21
- return logger;
22
- }
1
+ import { Logger } from '../logger/index.js';
2
+
3
+ import { PinoAdapter } from '../adapters/pino.js';
4
+ import { INFO } from '../constants.js';
5
+
6
+ /**
7
+ * Create a server-side logger with pino adapter
8
+ *
9
+ * @param {string} name
10
+ * @param {string} [level=INFO] - Initial log level
11
+ * @param {Object} [pinoOptions] - Additional pino options
12
+ * @returns {Logger} Configured logger instance
13
+ */
14
+ export function createServerLogger(name, level = INFO, pinoOptions = {}) {
15
+ const logger = new Logger(name, level);
16
+ const adapter = new PinoAdapter(pinoOptions);
17
+
18
+ // Connect adapter to logger events
19
+ logger.on('log', (logEvent) => adapter.handleLog(logEvent));
20
+
21
+ return logger;
22
+ }
@@ -4,6 +4,6 @@
4
4
  * @param {string} serviceName - Name of the service
5
5
  * @param {string} [level] - Initial log level
6
6
  * @param {Object} [options] - Additional options
7
- * @returns {import('../unified-logger').Logger} Configured logger instance
7
+ * @returns {import('../logger').Logger} Configured logger instance
8
8
  */
9
- export function createLogger(serviceName: string, level?: string, options?: any): import("../unified-logger").Logger;
9
+ export function createLogger(serviceName: string, level?: string, options?: any): import("../logger").Logger;
@@ -1,22 +1,22 @@
1
- /**
2
- * Universal logger factory that auto-detects environment
3
- */
4
- import { browser } from '$app/environment';
5
- import { createServerLogger } from './server.js';
6
- import { createClientLogger } from './client.js';
7
-
8
- /**
9
- * Create a logger that works in both server and client environments
10
- *
11
- * @param {string} serviceName - Name of the service
12
- * @param {string} [level] - Initial log level
13
- * @param {Object} [options] - Additional options
14
- * @returns {import('../unified-logger').Logger} Configured logger instance
15
- */
16
- export function createLogger(serviceName, level, options = {}) {
17
- if (browser) {
18
- return createClientLogger(serviceName, level, options);
19
- } else {
20
- return createServerLogger(serviceName, level, options);
21
- }
22
- }
1
+ /**
2
+ * Universal logger factory that auto-detects environment
3
+ */
4
+ import { browser } from '$app/environment';
5
+ import { createServerLogger } from './server.js';
6
+ import { createClientLogger } from './client.js';
7
+
8
+ /**
9
+ * Create a logger that works in both server and client environments
10
+ *
11
+ * @param {string} serviceName - Name of the service
12
+ * @param {string} [level] - Initial log level
13
+ * @param {Object} [options] - Additional options
14
+ * @returns {import('../logger').Logger} Configured logger instance
15
+ */
16
+ export function createLogger(serviceName, level, options = {}) {
17
+ if (browser) {
18
+ return createClientLogger(serviceName, level, options);
19
+ } else {
20
+ return createServerLogger(serviceName, level, options);
21
+ }
22
+ }
@@ -70,9 +70,9 @@ export default class Logger extends EventEmitter {
70
70
  * forwarded to this logger.
71
71
  *
72
72
  * @param {string} eventName
73
- * @param {import('./typedef.js').LogEventData} eventData
73
+ * @param {import('../typedef.js').LogEventData} eventData
74
74
  */
75
- logFromEvent(eventName: string, eventData: import("./typedef.js").LogEventData): boolean;
75
+ logFromEvent(eventName: string, eventData: import("../typedef.js").LogEventData): boolean;
76
76
  #private;
77
77
  }
78
78
  import { EventEmitter } from '../../../classes/event-emitter';