@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,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';