@hkdigital/lib-core 0.3.11 → 0.3.12

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 (292) 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.js +4 -4
  173. package/dist/ui/components/button-group/ButtonGroup.svelte +82 -82
  174. package/dist/ui/components/button-group/typedef.js +10 -10
  175. package/dist/ui/components/compare-left-right/CompareLeftRight.svelte +179 -179
  176. package/dist/ui/components/compare-left-right/index.js +1 -1
  177. package/dist/ui/components/game-box/GameBox.svelte +577 -577
  178. package/dist/ui/components/game-box/gamebox.util.js +83 -83
  179. package/dist/ui/components/hk-app-layout/HkAppLayout.state.svelte.js +25 -25
  180. package/dist/ui/components/hk-app-layout/HkAppLayout.svelte +251 -251
  181. package/dist/ui/components/image-box/ImageBox.svelte +210 -210
  182. package/dist/ui/components/image-box/index.js +5 -5
  183. package/dist/ui/components/image-box/typedef.js +32 -32
  184. package/dist/ui/components/index.js +23 -23
  185. package/dist/ui/components/presenter/ImageSlide.svelte +64 -64
  186. package/dist/ui/components/presenter/Presenter.state.svelte.js +638 -638
  187. package/dist/ui/components/presenter/Presenter.svelte +142 -142
  188. package/dist/ui/components/presenter/constants.js +7 -7
  189. package/dist/ui/components/presenter/index.js +10 -10
  190. package/dist/ui/components/presenter/typedef.js +106 -106
  191. package/dist/ui/components/presenter/util.js +210 -210
  192. package/dist/ui/components/virtual-viewport/VirtualViewport.svelte +196 -196
  193. package/dist/ui/primitives/area/HkArea.svelte +49 -49
  194. package/dist/ui/primitives/area/HkGridArea.svelte +77 -77
  195. package/dist/ui/primitives/area/index.js +2 -2
  196. package/dist/ui/primitives/buttons/button/Button.svelte +82 -82
  197. package/dist/ui/primitives/buttons/button-icon-steeze/SteezeIconButton.svelte +30 -30
  198. package/dist/ui/primitives/buttons/button-text/TextButton.svelte +21 -21
  199. package/dist/ui/primitives/buttons/index.js +3 -3
  200. package/dist/ui/primitives/debug/debug-panel-design-scaling/DebugPanelDesignScaling.svelte +146 -146
  201. package/dist/ui/primitives/debug/index.js +1 -1
  202. package/dist/ui/primitives/drag-drop/DragController.js +44 -44
  203. package/dist/ui/primitives/drag-drop/DragDropContext.svelte +111 -111
  204. package/dist/ui/primitives/drag-drop/Draggable.svelte +519 -519
  205. package/dist/ui/primitives/drag-drop/DropZone.svelte +258 -258
  206. package/dist/ui/primitives/drag-drop/DropZoneArea.svelte +119 -119
  207. package/dist/ui/primitives/drag-drop/DropZoneList.svelte +125 -125
  208. package/dist/ui/primitives/drag-drop/actions.js +26 -26
  209. package/dist/ui/primitives/drag-drop/drag-state.svelte.js +322 -322
  210. package/dist/ui/primitives/drag-drop/index.js +7 -7
  211. package/dist/ui/primitives/drag-drop/util.js +85 -85
  212. package/dist/ui/primitives/hkdev/blocks/TextBlock.svelte +46 -46
  213. package/dist/ui/primitives/hkdev/buttons/CheckButton.svelte +62 -62
  214. package/dist/ui/primitives/icons/HkIcon.svelte +86 -86
  215. package/dist/ui/primitives/icons/HkTabIcon.svelte +116 -116
  216. package/dist/ui/primitives/icons/SteezeIcon.svelte +97 -97
  217. package/dist/ui/primitives/icons/index.js +6 -6
  218. package/dist/ui/primitives/icons/typedef.js +16 -16
  219. package/dist/ui/primitives/index.js +2 -2
  220. package/dist/ui/primitives/inputs/index.js +1 -1
  221. package/dist/ui/primitives/inputs/text-input/TestTextInput.svelte__ +102 -0
  222. package/dist/ui/primitives/inputs/text-input/TextInput.svelte +223 -223
  223. package/dist/ui/primitives/inputs/text-input/TextInput.svelte___ +83 -0
  224. package/dist/ui/primitives/inputs/text-input/assets/IconInvalid.svelte +14 -14
  225. package/dist/ui/primitives/inputs/text-input/assets/IconValid.svelte +12 -12
  226. package/dist/ui/primitives/layout/grid-layers/GridLayers.svelte +63 -63
  227. package/dist/ui/primitives/layout/grid-layers/GridLayers.svelte__heightFrom__ +372 -0
  228. package/dist/ui/primitives/layout/grid-layers/util.js +74 -74
  229. package/dist/ui/primitives/layout/index.js +1 -1
  230. package/dist/ui/primitives/panels/index.js +1 -1
  231. package/dist/ui/primitives/panels/panel/Panel.svelte +43 -43
  232. package/dist/ui/primitives/rows/index.js +3 -3
  233. package/dist/ui/primitives/rows/panel-grid-row/PanelGridRow.svelte +104 -104
  234. package/dist/ui/primitives/rows/panel-row-2/PanelRow2.svelte +40 -40
  235. package/dist/ui/primitives/tab-bar/HkTabBar.state.svelte.js +149 -149
  236. package/dist/ui/primitives/tab-bar/HkTabBar.svelte +74 -74
  237. package/dist/ui/primitives/tab-bar/HkTabBarSelector.state.svelte.js +93 -93
  238. package/dist/ui/primitives/tab-bar/HkTabBarSelector.svelte +49 -49
  239. package/dist/ui/primitives/tab-bar/index.js +17 -17
  240. package/dist/ui/primitives/tab-bar/typedef.js +11 -11
  241. package/dist/util/array/index.js +436 -436
  242. package/dist/util/bases/base58.js +262 -262
  243. package/dist/util/bases/index.js +1 -1
  244. package/dist/util/compare/index.js +247 -247
  245. package/dist/util/css/css-vars.js +83 -83
  246. package/dist/util/css/index.js +1 -1
  247. package/dist/util/env/index.js +9 -9
  248. package/dist/util/exceptions/index.d.ts +4 -3
  249. package/dist/util/exceptions/index.js +26 -23
  250. package/dist/util/expect/arrays.js +47 -47
  251. package/dist/util/expect/index.js +259 -259
  252. package/dist/util/expect/primitives.js +55 -55
  253. package/dist/util/expect/url.js +60 -60
  254. package/dist/util/function/index.js +218 -218
  255. package/dist/util/geo/index.js +26 -26
  256. package/dist/util/index.js +7 -7
  257. package/dist/util/is/index.js +147 -147
  258. package/dist/util/iterate/index.js +204 -204
  259. package/dist/util/object/index.js +1345 -1345
  260. package/dist/util/singleton/index.js +97 -97
  261. package/dist/util/string/array-path.js +75 -75
  262. package/dist/util/string/convert.js +54 -54
  263. package/dist/util/string/fs.js +226 -226
  264. package/dist/util/string/index.js +5 -5
  265. package/dist/util/string/interpolate.js +61 -61
  266. package/dist/util/string/pad.js +10 -10
  267. package/dist/util/svelte/index.js +4 -4
  268. package/dist/util/svelte/loading/loading-tracker.svelte.js +108 -108
  269. package/dist/util/svelte/observe/index.js +49 -49
  270. package/dist/util/svelte/state-context/index.js +117 -117
  271. package/dist/util/svelte/wait/index.js +38 -38
  272. package/dist/util/sveltekit/index.js +1 -1
  273. package/dist/util/sveltekit/route-folders/index.js +101 -101
  274. package/dist/util/time/index.js +328 -328
  275. package/dist/util/unique/index.js +231 -231
  276. package/dist/valibot/README.md +61 -50
  277. package/dist/valibot/index.js +8 -8
  278. package/dist/valibot/parsers/date.js__ +10 -0
  279. package/dist/valibot/parsers/email.d.ts +12 -0
  280. package/dist/valibot/parsers/email.js +34 -0
  281. package/dist/valibot/parsers/url.js +110 -110
  282. package/dist/valibot/parsers/user.js +23 -23
  283. package/dist/valibot/parsers.js +3 -3
  284. package/package.json +131 -131
  285. package/dist/logging/internal/unified-logger/index.d.ts +0 -3
  286. package/dist/logging/internal/unified-logger/index.js +0 -6
  287. package/dist/services/internal/index.d.ts +0 -6
  288. package/dist/services/internal/index.js +0 -8
  289. /package/dist/logging/internal/{unified-logger/constants.d.ts → constants.d.ts} +0 -0
  290. /package/dist/services/{internal/service-base → service-base}/index.d.ts +0 -0
  291. /package/dist/services/{internal/service-manager → service-manager}/constants.d.ts +0 -0
  292. /package/dist/services/{internal/service-manager → service-manager}/typedef.d.ts +0 -0
@@ -1,30 +1,30 @@
1
- import { CONTENT_TYPE, CONTENT_LENGTH } from '../../constants/http/index.js';
2
-
3
- import { OCTET_STREAM } from '../../constants/mime/application.js';
4
-
5
- const BASE64_DATA =
6
- 'UklGRnwAAABXQVZFZm10IBAAAAABAAEARKwAAIhYAQACABAAZGF0YVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA';
7
-
8
- /**
9
- * Create a response value that can be used by a mocked
10
- * fetch function
11
- *
12
- * @returns {Response}
13
- */
14
- export function createDataResponse(/* data , options */) {
15
- const binaryString = atob(BASE64_DATA);
16
- const bytes = new Uint8Array(binaryString.length);
17
-
18
- for (let i = 0; i < binaryString.length; i++) {
19
- bytes[i] = binaryString.charCodeAt(i);
20
- }
21
-
22
- const response = new Response(bytes, {
23
- headers: new Headers({
24
- [CONTENT_TYPE]: OCTET_STREAM,
25
- [CONTENT_LENGTH]: String(bytes.length)
26
- })
27
- });
28
-
29
- return response;
30
- }
1
+ import { CONTENT_TYPE, CONTENT_LENGTH } from '../../constants/http/index.js';
2
+
3
+ import { OCTET_STREAM } from '../../constants/mime/application.js';
4
+
5
+ const BASE64_DATA =
6
+ 'UklGRnwAAABXQVZFZm10IBAAAAABAAEARKwAAIhYAQACABAAZGF0YVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA';
7
+
8
+ /**
9
+ * Create a response value that can be used by a mocked
10
+ * fetch function
11
+ *
12
+ * @returns {Response}
13
+ */
14
+ export function createDataResponse(/* data , options */) {
15
+ const binaryString = atob(BASE64_DATA);
16
+ const bytes = new Uint8Array(binaryString.length);
17
+
18
+ for (let i = 0; i < binaryString.length; i++) {
19
+ bytes[i] = binaryString.charCodeAt(i);
20
+ }
21
+
22
+ const response = new Response(bytes, {
23
+ headers: new Headers({
24
+ [CONTENT_TYPE]: OCTET_STREAM,
25
+ [CONTENT_LENGTH]: String(bytes.length)
26
+ })
27
+ });
28
+
29
+ return response;
30
+ }
@@ -1,8 +1,8 @@
1
- /**
2
- * @typedef {Object} LoadingProgress
3
- * @property {number} bytesLoaded
4
- * @property {number} size
5
- * @property {boolean} loaded
6
- */
7
-
8
- export default {};
1
+ /**
2
+ * @typedef {Object} LoadingProgress
3
+ * @property {number} bytesLoaded
4
+ * @property {number} size
5
+ * @property {boolean} loaded
6
+ */
7
+
8
+ export default {};
@@ -1,10 +1,10 @@
1
- /**
2
- * Network module type definitions
3
- *
4
- * Re-exports types from all network submodules for convenient access
5
- */
6
-
7
- export * from './http/typedef.js';
8
- export * from './cache/typedef.js';
9
- export * from './states/typedef.js';
1
+ /**
2
+ * Network module type definitions
3
+ *
4
+ * Re-exports types from all network submodules for convenient access
5
+ */
6
+
7
+ export * from './http/typedef.js';
8
+ export * from './cache/typedef.js';
9
+ export * from './states/typedef.js';
10
10
  export * from './loaders/typedef.js';
@@ -0,0 +1,200 @@
1
+ # Services
2
+
3
+ A comprehensive service management system providing standardized lifecycle management, health monitoring, and dependency orchestration for application services.
4
+
5
+ ## Overview
6
+
7
+ The services module provides two main components:
8
+
9
+ - **ServiceBase** - Base class for implementing services with lifecycle management
10
+ - **ServiceManager** - Orchestrates multiple services with dependency resolution
11
+
12
+ All services follow a standardized state machine with proper error handling, logging, and health monitoring.
13
+
14
+ ## Service States
15
+
16
+ Services transition through these states during their lifecycle:
17
+
18
+ - `created` - Service instantiated but not initialized
19
+ - `initializing` - Currently running initialization
20
+ - `initialized` - Ready to start
21
+ - `starting` - Currently starting up
22
+ - `running` - Operational and healthy
23
+ - `stopping` - Currently shutting down
24
+ - `stopped` - Cleanly stopped
25
+ - `destroying` - Being destroyed and cleaned up
26
+ - `destroyed` - Completely destroyed
27
+ - `error` - Failed and non-operational
28
+ - `recovering` - Attempting recovery from error
29
+
30
+ ## ServiceBase
31
+
32
+ Base class that all services should extend. Provides:
33
+
34
+ - Standardized lifecycle methods (`initialize`, `start`, `stop`, `destroy`)
35
+ - Health monitoring and recovery
36
+ - Event emission for state changes
37
+ - Integrated logging
38
+ - Error handling and timeout management
39
+
40
+ ### Basic Usage
41
+
42
+ ```javascript
43
+ import { ServiceBase } from '$lib/services/index.js';
44
+
45
+ class DatabaseService extends ServiceBase {
46
+ async _init(config) {
47
+ this.connectionString = config.connectionString;
48
+ }
49
+
50
+ async _start() {
51
+ this.connection = await createConnection(this.connectionString);
52
+ }
53
+
54
+ async _stop() {
55
+ await this.connection?.close();
56
+ }
57
+
58
+ async _healthCheck() {
59
+ const start = Date.now();
60
+ await this.connection.ping();
61
+ return { latency: Date.now() - start };
62
+ }
63
+ }
64
+
65
+ // Usage
66
+ const db = new DatabaseService('database');
67
+ await db.initialize({ connectionString: 'postgres://...' });
68
+ await db.start();
69
+
70
+ // Listen to events
71
+ db.on('healthChanged', ({ healthy }) => {
72
+ console.log(`Database is ${healthy ? 'healthy' : 'unhealthy'}`);
73
+ });
74
+ ```
75
+
76
+ ### Protected Methods to Override
77
+
78
+ - `_init(config)` - Initialize service with configuration
79
+ - `_start()` - Start the service
80
+ - `_stop()` - Stop the service
81
+ - `_destroy()` - Clean up resources (optional)
82
+ - `_recover()` - Custom recovery logic (optional)
83
+ - `_healthCheck()` - Return health status (optional)
84
+
85
+ ### Events
86
+
87
+ - `stateChanged` - Service state transitions
88
+ - `healthChanged` - Health status changes
89
+ - `error` - Service errors
90
+
91
+ ## ServiceManager
92
+
93
+ Manages multiple services with dependency resolution and coordinated lifecycle operations.
94
+
95
+ ### Features
96
+
97
+ - Service registration with dependency declarations
98
+ - Automatic dependency resolution and startup ordering
99
+ - Coordinated shutdown in reverse dependency order
100
+ - Health monitoring for all services
101
+ - Centralized logging control
102
+ - Service recovery management
103
+
104
+ ### Usage
105
+
106
+ ```javascript
107
+ import { ServiceManager } from '$lib/services/index.js';
108
+ import DatabaseService from './services/DatabaseService.js';
109
+ import AuthService from './services/AuthService.js';
110
+
111
+ const manager = new ServiceManager({
112
+ debug: true,
113
+ stopTimeout: 10000
114
+ });
115
+
116
+ // Register services with dependencies
117
+ manager.register('database', DatabaseService, {
118
+ connectionString: 'postgres://localhost/myapp'
119
+ });
120
+
121
+ manager.register('auth', AuthService, {
122
+ secret: process.env.JWT_SECRET
123
+ }, {
124
+ dependencies: ['database'] // auth depends on database
125
+ });
126
+
127
+ // Start all services in dependency order
128
+ await manager.startAll();
129
+
130
+ // Check system health
131
+ const health = await manager.checkHealth();
132
+
133
+ // Stop all services in reverse dependency order
134
+ await manager.stopAll();
135
+ ```
136
+
137
+ ### Service Registration
138
+
139
+ ```javascript
140
+ manager.register(name, ServiceClass, config, options);
141
+ ```
142
+
143
+ - `name` - Unique service identifier
144
+ - `ServiceClass` - Class extending ServiceBase
145
+ - `config` - Service-specific configuration
146
+ - `options.dependencies` - Array of service names this service depends on
147
+
148
+ ### Health Monitoring
149
+
150
+ ```javascript
151
+ // Listen for health changes
152
+ manager.on('service:healthChanged', ({ service, healthy }) => {
153
+ if (!healthy) {
154
+ console.error(`Service ${service} became unhealthy`);
155
+ }
156
+ });
157
+
158
+ // Check individual service health
159
+ const dbHealth = await manager.getServiceHealth('database');
160
+
161
+ // Check all services health
162
+ const systemHealth = await manager.checkHealth();
163
+ ```
164
+
165
+ ### Error Handling and Recovery
166
+
167
+ ```javascript
168
+ // Listen for service errors
169
+ manager.on('service:error', async ({ service, error }) => {
170
+ console.log(`Service ${service} failed:`, error.message);
171
+
172
+ // Attempt automatic recovery
173
+ await manager.recoverService(service);
174
+ });
175
+
176
+ // Manual recovery
177
+ await manager.recoverService('database');
178
+ ```
179
+
180
+ ## Best Practices
181
+
182
+ 1. **Always extend ServiceBase** for consistent lifecycle management
183
+ 2. **Keep initialization lightweight** - heavy work should be in `_start()`
184
+ 3. **Implement proper cleanup** in `_stop()` to prevent resource leaks
185
+ 4. **Use health checks** for monitoring critical service functionality
186
+ 5. **Declare dependencies explicitly** when registering with ServiceManager
187
+ 6. **Handle errors gracefully** and implement recovery where appropriate
188
+ 7. **Use descriptive service names** for better logging and debugging
189
+
190
+ ## Testing
191
+
192
+ Services include comprehensive test suites demonstrating:
193
+
194
+ - Lifecycle state transitions
195
+ - Error handling and recovery
196
+ - Dependency resolution
197
+ - Health monitoring
198
+ - Event emission
199
+
200
+ Run tests with your project's test command to ensure service reliability.
@@ -1 +1,6 @@
1
- export * from "./internal/index.js";
1
+ export { default as ServiceBase } from "./service-base/ServiceBase.js";
2
+ export { default as ServiceManager } from "./service-manager/ServiceManager.js";
3
+ export * from "./service-base/constants.js";
4
+ export * from "./service-manager/constants.js";
5
+ export * from "./service-base/typedef.js";
6
+ export * from "./service-manager/typedef.js";
@@ -1 +1,8 @@
1
- export * from './internal/index.js';
1
+ export { default as ServiceBase } from './service-base/ServiceBase.js';
2
+ export { default as ServiceManager } from './service-manager/ServiceManager.js';
3
+
4
+ export * from './service-base/constants.js';
5
+ export * from './service-manager/constants.js';
6
+
7
+ export * from './service-base/typedef.js';
8
+ export * from './service-manager/typedef.js';
@@ -157,5 +157,5 @@ export type HealthStatus = import("./typedef.js").HealthStatus;
157
157
  export type StateChangeEvent = import("./typedef.js").StateChangeEvent;
158
158
  export type HealthChangeEvent = import("./typedef.js").HealthChangeEvent;
159
159
  export type ServiceErrorEvent = import("./typedef.js").ServiceErrorEvent;
160
- import { EventEmitter } from '../../../classes/event-emitter';
161
- import { Logger } from '../../../logging/internal/unified-logger';
160
+ import { EventEmitter } from '../../classes/event-emitter';
161
+ import { Logger } from '../../logging/internal/logger';