@hkdigital/lib-core 0.3.10 → 0.3.11

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 (421) hide show
  1. package/README.md +149 -149
  2. package/dist/assets/autospuiten/car-paint-picker.d.ts +7 -7
  3. package/dist/assets/autospuiten/car-paint-picker.js +41 -41
  4. package/dist/assets/autospuiten/labels.js +7 -7
  5. package/dist/classes/data/IterableTree.d.ts +13 -6
  6. package/dist/classes/data/IterableTree.js +242 -229
  7. package/dist/classes/data/Selector.js +190 -190
  8. package/dist/classes/data/index.js +2 -2
  9. package/dist/classes/data/typedef.js +9 -9
  10. package/dist/classes/event-emitter/EventEmitter.js +273 -273
  11. package/dist/classes/event-emitter/index.js +2 -2
  12. package/dist/classes/index.js +4 -4
  13. package/dist/classes/promise/HkPromise.d.ts +18 -17
  14. package/dist/classes/promise/HkPromise.js +384 -377
  15. package/dist/classes/promise/index.js +1 -1
  16. package/dist/classes/stores/SubscribersCount.js +107 -107
  17. package/dist/classes/stores/index.js +1 -1
  18. package/dist/classes/streams/LogTransformStream.js +19 -19
  19. package/dist/classes/streams/ServerEventsStore.d.ts +2 -3
  20. package/dist/classes/streams/ServerEventsStore.js +111 -110
  21. package/dist/classes/streams/TimeStampSource.js +26 -26
  22. package/dist/classes/streams/index.js +3 -3
  23. package/dist/classes/svelte/finite-state-machine/FiniteStateMachine.svelte.js +133 -133
  24. package/dist/classes/svelte/finite-state-machine/index.js +1 -1
  25. package/dist/classes/svelte/index.d.ts +0 -8
  26. package/dist/classes/svelte/index.js +11 -14
  27. package/dist/classes/svelte/loading-state-machine/LoadingStateMachine.svelte.js +109 -109
  28. package/dist/classes/svelte/loading-state-machine/constants.js +16 -16
  29. package/dist/classes/svelte/loading-state-machine/index.js +3 -3
  30. package/dist/config/README.md +196 -0
  31. package/dist/config/{imagetools-config.js → generators/imagetools.js} +189 -189
  32. package/dist/config/generators/vite.d.ts +47 -0
  33. package/dist/config/generators/vite.js +142 -0
  34. package/dist/config/imagetools.d.ts +72 -72
  35. package/dist/config/vite.d.ts +1 -0
  36. package/dist/config/vite.js +5 -0
  37. package/dist/constants/bases/index.js +13 -13
  38. package/dist/constants/http/headers.js +6 -6
  39. package/dist/constants/http/index.js +2 -2
  40. package/dist/constants/http/methods.js +14 -14
  41. package/dist/constants/index.js +6 -6
  42. package/dist/constants/mime/application.js +5 -5
  43. package/dist/constants/mime/audio.js +13 -13
  44. package/dist/constants/mime/image.js +3 -3
  45. package/dist/constants/mime/index.js +4 -4
  46. package/dist/constants/mime/text.js +2 -2
  47. package/dist/constants/regexp/README.md +95 -0
  48. package/dist/constants/regexp/index.d.ts +1 -1
  49. package/dist/constants/regexp/index.js +31 -31
  50. package/dist/constants/regexp/inspiratie.js__ +95 -95
  51. package/dist/constants/regexp/text.d.ts +3 -3
  52. package/dist/constants/regexp/text.js +49 -49
  53. package/dist/constants/regexp/url.d.ts +1 -0
  54. package/dist/constants/regexp/url.js +3 -0
  55. package/dist/constants/regexp/user.d.ts +0 -1
  56. package/dist/constants/regexp/user.js +29 -33
  57. package/dist/constants/states/drag.js +6 -6
  58. package/dist/constants/states/drop.js +6 -6
  59. package/dist/constants/states/index.js +4 -4
  60. package/dist/constants/states/input.js +11 -11
  61. package/dist/constants/states/submit.js +4 -4
  62. package/dist/constants/time/index.js +28 -28
  63. package/dist/css/utilities.css +43 -43
  64. package/dist/design/README.md +405 -0
  65. package/dist/design/{design-config.js → config/design-config.js} +73 -73
  66. package/dist/{util/design-system/tailwind.js → design/generators/index.js} +288 -288
  67. package/dist/design/index.d.ts +8 -0
  68. package/dist/design/index.js +97 -0
  69. package/dist/{util/design-system → design/plugins}/skeleton.js +208 -208
  70. package/dist/design/tailwind-theme-extend.js +158 -158
  71. package/dist/design/themes/README.md +103 -0
  72. package/dist/{themes → design/themes}/hkdev/components/blocks/text-block.css +34 -34
  73. package/dist/{themes → design/themes}/hkdev/components/boxes/game-box.css +11 -11
  74. package/dist/{themes → design/themes}/hkdev/components/buttons/button-icon-steeze.css +22 -22
  75. package/dist/{themes → design/themes}/hkdev/components/buttons/button-text.css +32 -32
  76. package/dist/{themes → design/themes}/hkdev/components/buttons/button.css +146 -146
  77. package/dist/{themes → design/themes}/hkdev/components/buttons/skip-button.css +5 -5
  78. package/dist/{themes → design/themes}/hkdev/components/drag-drop/draggable.css +73 -73
  79. package/dist/{themes → design/themes}/hkdev/components/drag-drop/drop-zone.css +58 -58
  80. package/dist/{themes → design/themes}/hkdev/components/icons/icon-steeze.css +15 -15
  81. package/dist/{themes → design/themes}/hkdev/components/inputs/text-input.css +102 -102
  82. package/dist/{themes → design/themes}/hkdev/components/panels/panel.css +25 -25
  83. package/dist/{themes → design/themes}/hkdev/components/rows/panel-grid-row.css +4 -4
  84. package/dist/{themes → design/themes}/hkdev/components/rows/panel-row-2.css +5 -5
  85. package/dist/{themes → design/themes}/hkdev/components.css +29 -29
  86. package/dist/design/themes/hkdev/debug.css +2 -0
  87. package/dist/{themes → design/themes}/hkdev/global/layout.css +32 -32
  88. package/dist/{themes → design/themes}/hkdev/global/on-colors.css +32 -32
  89. package/dist/{themes → design/themes}/hkdev/globals.css +3 -3
  90. package/dist/{themes → design/themes}/hkdev/responsive.css +12 -12
  91. package/dist/{themes → design/themes}/hkdev/theme-ext.js +12 -12
  92. package/dist/{themes → design/themes}/hkdev/theme.css +218 -218
  93. package/dist/{util/design-system/css → design/utils}/clamp.js +66 -66
  94. package/dist/{util/design-system/css/root-design-vars.d.ts → design/utils/root-vars.d.ts} +2 -2
  95. package/dist/{util/design-system/css/root-design-vars.js → design/utils/root-vars.js} +102 -102
  96. package/dist/{util/design-system/layout → design/utils}/scaling.js +228 -228
  97. package/dist/{util/design-system/components → design/utils}/states.js +22 -22
  98. package/dist/errors/api.js +9 -9
  99. package/dist/errors/generic.js +20 -20
  100. package/dist/errors/http.js +16 -16
  101. package/dist/errors/index.d.ts +1 -0
  102. package/dist/errors/index.js +5 -4
  103. package/dist/errors/jwt.js +5 -5
  104. package/dist/errors/promise.d.ts +27 -0
  105. package/dist/errors/promise.js +26 -0
  106. package/dist/logging/index.js +7 -7
  107. package/dist/logging/internal/adapters/console.js +114 -114
  108. package/dist/logging/internal/adapters/index.js +2 -2
  109. package/dist/logging/internal/adapters/pino.js +142 -142
  110. package/dist/logging/internal/adapters/typedef.js +10 -10
  111. package/dist/logging/internal/factories/client.js +21 -21
  112. package/dist/logging/internal/factories/server.js +22 -22
  113. package/dist/logging/internal/factories/universal.js +22 -22
  114. package/dist/logging/internal/unified-logger/Logger.js +217 -217
  115. package/dist/logging/internal/unified-logger/constants.js +22 -22
  116. package/dist/logging/internal/unified-logger/index.js +6 -6
  117. package/dist/logging/internal/unified-logger/typedef.js +17 -17
  118. package/dist/network/README.md +173 -0
  119. package/dist/{classes → network}/cache/IndexedDbCache.js +1407 -1407
  120. package/dist/{classes → network}/cache/MemoryResponseCache.js +138 -138
  121. package/dist/{classes → network}/cache/index.js +5 -5
  122. package/dist/{classes → network}/cache/typedef.js +41 -41
  123. package/dist/network/cache.d.ts +3 -0
  124. package/dist/network/cache.js +4 -0
  125. package/dist/{util → network}/http/caching.js +261 -263
  126. package/dist/{util → network}/http/errors.js +97 -97
  127. package/dist/{util → network}/http/headers.js +75 -75
  128. package/dist/{util → network}/http/http-request.js +578 -578
  129. package/dist/{util → network}/http/index.js +22 -22
  130. package/dist/{util → network}/http/json-request.js +224 -224
  131. package/dist/{util → network}/http/mocks.js +65 -65
  132. package/dist/{util → network}/http/response.js +318 -318
  133. package/dist/{util → network}/http/typedef.js +93 -93
  134. package/dist/{util → network}/http/url.js +52 -52
  135. package/dist/network/http.d.ts +6 -0
  136. package/dist/network/http.js +6 -0
  137. package/dist/network/loaders/README.md +255 -0
  138. package/dist/{classes/svelte → network/loaders}/audio/AudioLoader.svelte.d.ts +1 -1
  139. package/dist/{classes/svelte → network/loaders}/audio/AudioLoader.svelte.js +58 -58
  140. package/dist/{classes/svelte → network/loaders}/audio/AudioScene.svelte.js +324 -324
  141. package/dist/{classes/svelte → network/loaders}/audio/mocks.js +35 -35
  142. package/dist/network/loaders/audio.d.ts +2 -0
  143. package/dist/network/loaders/audio.js +2 -0
  144. package/dist/{classes/svelte → network/loaders}/image/ImageLoader.svelte.d.ts +3 -6
  145. package/dist/{classes/svelte → network/loaders}/image/ImageLoader.svelte.js +44 -45
  146. package/dist/{classes/svelte → network/loaders}/image/ImageScene.svelte.d.ts +5 -7
  147. package/dist/{classes/svelte → network/loaders}/image/ImageScene.svelte.js +248 -249
  148. package/dist/{classes/svelte → network/loaders}/image/ImageVariantsLoader.svelte.d.ts +4 -4
  149. package/dist/{classes/svelte → network/loaders}/image/ImageVariantsLoader.svelte.js +150 -152
  150. package/dist/{classes/svelte → network/loaders}/image/index.js +4 -4
  151. package/dist/{classes/svelte → network/loaders}/image/mocks.js +35 -35
  152. package/dist/{classes/svelte → network/loaders}/image/typedef.js +8 -8
  153. package/dist/{util/image → network/loaders/image/utils}/index.d.ts +2 -2
  154. package/dist/{util/image → network/loaders/image/utils}/index.js +86 -86
  155. package/dist/network/loaders/image.d.ts +5 -0
  156. package/dist/network/loaders/image.js +8 -0
  157. package/dist/{typedef/image.js → network/loaders/typedef.js} +38 -38
  158. package/dist/network/loaders.d.ts +2 -0
  159. package/dist/network/loaders.js +2 -0
  160. package/dist/{classes/svelte/network-loader → network/states}/NetworkLoader.svelte.d.ts +1 -1
  161. package/dist/{classes/svelte/network-loader → network/states}/NetworkLoader.svelte.js +338 -338
  162. package/dist/{classes/svelte/network-loader → network/states}/constants.js +3 -3
  163. package/dist/{classes/svelte/network-loader → network/states}/index.js +3 -3
  164. package/dist/{classes/svelte/network-loader → network/states}/mocks.js +30 -30
  165. package/dist/{classes/svelte/network-loader → network/states}/typedef.js +8 -8
  166. package/dist/network/typedef.d.ts +4 -0
  167. package/dist/network/typedef.js +10 -0
  168. package/dist/services/index.js +1 -1
  169. package/dist/services/internal/index.js +8 -8
  170. package/dist/services/internal/service-base/ServiceBase.js +462 -462
  171. package/dist/services/internal/service-base/constants.js +110 -110
  172. package/dist/services/internal/service-base/index.js +3 -3
  173. package/dist/services/internal/service-base/typedef.js +101 -101
  174. package/dist/services/internal/service-manager/ServiceManager.js +608 -608
  175. package/dist/services/internal/service-manager/constants.js +6 -6
  176. package/dist/services/internal/service-manager/typedef.js +90 -90
  177. package/dist/states/index.js +1 -1
  178. package/dist/states/navigation.svelte.js +55 -55
  179. package/dist/stores/index.js +1 -1
  180. package/dist/stores/theme.js +80 -80
  181. package/dist/typedef/context.js +6 -6
  182. package/dist/typedef/drag.js +25 -25
  183. package/dist/typedef/drop.js +12 -12
  184. package/dist/typedef/index.d.ts +0 -1
  185. package/dist/typedef/index.js +4 -4
  186. package/dist/{components → ui/components}/button-group/ButtonGroup.svelte +82 -82
  187. package/dist/{components → ui/components}/button-group/typedef.js +10 -10
  188. package/dist/{components → ui/components}/compare-left-right/CompareLeftRight.svelte +179 -179
  189. package/dist/{components → ui/components}/compare-left-right/index.js +1 -1
  190. package/dist/{components → ui/components}/game-box/GameBox.svelte +577 -577
  191. package/dist/{components → ui/components}/game-box/gamebox.util.js +83 -83
  192. package/dist/ui/components/hk-app-layout/HkAppLayout.state.svelte.d.ts +6 -0
  193. package/dist/{components → ui/components}/hk-app-layout/HkAppLayout.state.svelte.js +25 -25
  194. package/dist/{components → ui/components}/hk-app-layout/HkAppLayout.svelte +251 -251
  195. package/dist/{components → ui/components}/image-box/ImageBox.svelte +210 -210
  196. package/dist/{components → ui/components}/image-box/ImageBox.svelte.d.ts +6 -6
  197. package/dist/ui/components/image-box/index.js +5 -0
  198. package/dist/{components → ui/components}/image-box/typedef.js +32 -32
  199. package/dist/{components → ui/components}/index.js +23 -23
  200. package/dist/{components → ui/components}/presenter/ImageSlide.svelte +64 -64
  201. package/dist/{components → ui/components}/presenter/ImageSlide.svelte.d.ts +2 -2
  202. package/dist/{components → ui/components}/presenter/Presenter.state.svelte.d.ts +1 -1
  203. package/dist/{components → ui/components}/presenter/Presenter.state.svelte.js +638 -638
  204. package/dist/{components → ui/components}/presenter/Presenter.svelte +142 -142
  205. package/dist/{components → ui/components}/presenter/constants.js +7 -7
  206. package/dist/{components → ui/components}/presenter/index.js +10 -10
  207. package/dist/{components → ui/components}/presenter/typedef.js +106 -106
  208. package/dist/{components → ui/components}/presenter/util.js +210 -210
  209. package/dist/{components → ui/components}/virtual-viewport/VirtualViewport.svelte +196 -196
  210. package/dist/{primitives → ui/primitives}/area/HkArea.svelte +49 -49
  211. package/dist/{primitives → ui/primitives}/area/HkGridArea.svelte +77 -77
  212. package/dist/{primitives → ui/primitives}/area/index.js +2 -2
  213. package/dist/{primitives → ui/primitives}/buttons/button/Button.svelte +82 -82
  214. package/dist/{primitives → ui/primitives}/buttons/button/Button.svelte.d.ts +1 -1
  215. package/dist/{primitives → ui/primitives}/buttons/button-icon-steeze/SteezeIconButton.svelte +30 -30
  216. package/dist/{primitives → ui/primitives}/buttons/button-text/TextButton.svelte +21 -21
  217. package/dist/{primitives → ui/primitives}/buttons/index.js +3 -3
  218. package/dist/{primitives → ui/primitives}/debug/debug-panel-design-scaling/DebugPanelDesignScaling.svelte +146 -146
  219. package/dist/{primitives → ui/primitives}/debug/index.js +1 -1
  220. package/dist/{primitives → ui/primitives}/drag-drop/DragController.js +44 -44
  221. package/dist/{primitives → ui/primitives}/drag-drop/DragDropContext.svelte +111 -111
  222. package/dist/{primitives → ui/primitives}/drag-drop/DragDropContext.svelte.d.ts +1 -1
  223. package/dist/{primitives → ui/primitives}/drag-drop/Draggable.svelte +519 -519
  224. package/dist/{primitives → ui/primitives}/drag-drop/Draggable.svelte.d.ts +1 -1
  225. package/dist/{primitives → ui/primitives}/drag-drop/DropZone.svelte +258 -258
  226. package/dist/{primitives → ui/primitives}/drag-drop/DropZone.svelte.d.ts +3 -3
  227. package/dist/{primitives → ui/primitives}/drag-drop/DropZoneArea.svelte +119 -119
  228. package/dist/{primitives → ui/primitives}/drag-drop/DropZoneArea.svelte.d.ts +3 -3
  229. package/dist/{primitives → ui/primitives}/drag-drop/DropZoneList.svelte +125 -125
  230. package/dist/{primitives → ui/primitives}/drag-drop/DropZoneList.svelte.d.ts +3 -3
  231. package/dist/{primitives → ui/primitives}/drag-drop/actions.js +26 -26
  232. package/dist/{primitives → ui/primitives}/drag-drop/drag-state.svelte.d.ts +11 -11
  233. package/dist/{primitives → ui/primitives}/drag-drop/drag-state.svelte.js +322 -322
  234. package/dist/{primitives → ui/primitives}/drag-drop/index.js +7 -7
  235. package/dist/{primitives → ui/primitives}/drag-drop/util.js +85 -85
  236. package/dist/{primitives → ui/primitives}/hkdev/blocks/TextBlock.svelte +46 -46
  237. package/dist/{primitives → ui/primitives}/hkdev/buttons/CheckButton.svelte +62 -62
  238. package/dist/{primitives → ui/primitives}/icons/HkIcon.svelte +86 -86
  239. package/dist/{primitives → ui/primitives}/icons/HkTabIcon.svelte +116 -116
  240. package/dist/{primitives → ui/primitives}/icons/SteezeIcon.svelte +97 -97
  241. package/dist/{primitives → ui/primitives}/icons/index.js +6 -6
  242. package/dist/{primitives → ui/primitives}/icons/typedef.js +16 -16
  243. package/dist/{primitives → ui/primitives}/index.js +2 -2
  244. package/dist/{primitives → ui/primitives}/inputs/index.js +1 -1
  245. package/dist/{primitives → ui/primitives}/inputs/text-input/TextInput.svelte +223 -223
  246. package/dist/{primitives → ui/primitives}/inputs/text-input/assets/IconInvalid.svelte +14 -14
  247. package/dist/{primitives → ui/primitives}/inputs/text-input/assets/IconValid.svelte +12 -12
  248. package/dist/{primitives → ui/primitives}/layout/grid-layers/GridLayers.svelte +63 -63
  249. package/dist/{primitives → ui/primitives}/layout/grid-layers/util.js +74 -74
  250. package/dist/{primitives → ui/primitives}/layout/index.js +1 -1
  251. package/dist/{primitives → ui/primitives}/panels/index.js +1 -1
  252. package/dist/{primitives → ui/primitives}/panels/panel/Panel.svelte +43 -43
  253. package/dist/{primitives → ui/primitives}/rows/index.js +3 -3
  254. package/dist/{primitives → ui/primitives}/rows/panel-grid-row/PanelGridRow.svelte +104 -104
  255. package/dist/{primitives → ui/primitives}/rows/panel-row-2/PanelRow2.svelte +40 -40
  256. package/dist/{primitives → ui/primitives}/tab-bar/HkTabBar.state.svelte.d.ts +3 -3
  257. package/dist/{primitives → ui/primitives}/tab-bar/HkTabBar.state.svelte.js +149 -149
  258. package/dist/{primitives → ui/primitives}/tab-bar/HkTabBar.svelte +74 -74
  259. package/dist/{primitives → ui/primitives}/tab-bar/HkTabBarSelector.state.svelte.d.ts +3 -3
  260. package/dist/{primitives → ui/primitives}/tab-bar/HkTabBarSelector.state.svelte.js +93 -93
  261. package/dist/{primitives → ui/primitives}/tab-bar/HkTabBarSelector.svelte +49 -49
  262. package/dist/{primitives → ui/primitives}/tab-bar/index.js +17 -17
  263. package/dist/{primitives → ui/primitives}/tab-bar/typedef.js +11 -11
  264. package/dist/util/array/index.js +436 -436
  265. package/dist/util/bases/base58.js +262 -262
  266. package/dist/util/bases/index.js +1 -1
  267. package/dist/util/compare/index.js +247 -247
  268. package/dist/util/css/css-vars.js +83 -83
  269. package/dist/util/css/index.js +1 -1
  270. package/dist/util/env/index.js +9 -9
  271. package/dist/util/exceptions/index.js +23 -23
  272. package/dist/util/expect/arrays.js +47 -47
  273. package/dist/util/expect/index.js +259 -259
  274. package/dist/util/expect/primitives.js +55 -55
  275. package/dist/util/expect/url.d.ts +6 -6
  276. package/dist/util/expect/url.js +60 -60
  277. package/dist/util/function/index.js +218 -218
  278. package/dist/util/geo/index.js +26 -26
  279. package/dist/util/index.js +7 -7
  280. package/dist/util/is/index.js +147 -147
  281. package/dist/util/iterate/index.d.ts +4 -4
  282. package/dist/util/iterate/index.js +204 -204
  283. package/dist/util/object/index.js +1345 -1345
  284. package/dist/util/singleton/index.js +97 -97
  285. package/dist/util/string/array-path.js +75 -75
  286. package/dist/util/string/convert.js +54 -54
  287. package/dist/util/string/fs.js +226 -226
  288. package/dist/util/string/index.js +5 -5
  289. package/dist/util/string/interpolate.js +61 -61
  290. package/dist/util/string/pad.js +10 -10
  291. package/dist/util/svelte/index.js +4 -4
  292. package/dist/util/svelte/loading/loading-tracker.svelte.js +108 -108
  293. package/dist/util/svelte/observe/index.js +49 -49
  294. package/dist/util/svelte/state-context/index.js +117 -117
  295. package/dist/util/svelte/wait/index.js +38 -38
  296. package/dist/util/sveltekit/index.js +1 -1
  297. package/dist/util/sveltekit/route-folders/index.js +101 -101
  298. package/dist/util/time/index.js +328 -328
  299. package/dist/util/unique/index.js +231 -231
  300. package/dist/valibot/README.md +50 -0
  301. package/dist/valibot/index.d.ts +4 -4
  302. package/dist/valibot/index.js +8 -9
  303. package/dist/valibot/{url.d.ts → parsers/url.d.ts} +13 -5
  304. package/dist/valibot/{url.js → parsers/url.js} +111 -95
  305. package/dist/valibot/{user.js → parsers/user.js} +23 -23
  306. package/dist/valibot/parsers.d.ts +2 -0
  307. package/dist/valibot/parsers.js +4 -0
  308. package/package.json +131 -133
  309. package/dist/components/hk-app-layout/HkAppLayout.state.svelte.d.ts +0 -6
  310. package/dist/components/image-box/index.js +0 -5
  311. package/dist/constants/regexp/web.d.ts +0 -1
  312. package/dist/constants/regexp/web.js +0 -3
  313. package/dist/primitives/inputs/text-input/TestTextInput.svelte__ +0 -102
  314. package/dist/primitives/inputs/text-input/TextInput.svelte___ +0 -83
  315. package/dist/primitives/layout/grid-layers/GridLayers.svelte__heightFrom__ +0 -372
  316. package/dist/schemas/index.d.ts +0 -1
  317. package/dist/schemas/index.js +0 -1
  318. package/dist/schemas/validate-url.d.ts +0 -30
  319. package/dist/schemas/validate-url.js +0 -180
  320. package/dist/themes/hkdev/debug.css +0 -2
  321. package/dist/themes/index.d.ts +0 -1
  322. package/dist/themes/index.js +0 -1
  323. package/dist/util/design-system/index.d.ts +0 -5
  324. package/dist/util/design-system/index.js +0 -5
  325. package/dist/util/http/test-data__/content-length-test-hkdigital-small.V4HfZyBQ.avif +0 -0
  326. package/dist/valibot/date.js__ +0 -10
  327. package/dist/zod/all.d.ts +0 -6
  328. package/dist/zod/all.js +0 -33
  329. package/dist/zod/generic.d.ts +0 -6
  330. package/dist/zod/generic.js +0 -11
  331. package/dist/zod/javascript.d.ts +0 -8
  332. package/dist/zod/javascript.js +0 -32
  333. package/dist/zod/user.d.ts +0 -9
  334. package/dist/zod/user.js +0 -16
  335. package/dist/zod/web.d.ts +0 -21
  336. package/dist/zod/web.js +0 -52
  337. /package/dist/config/{imagetools-config.d.ts → generators/imagetools.d.ts} +0 -0
  338. /package/dist/design/{design-config.d.ts → config/design-config.d.ts} +0 -0
  339. /package/dist/{util/design-system/tailwind.d.ts → design/generators/index.d.ts} +0 -0
  340. /package/dist/{util/design-system → design/plugins}/skeleton.d.ts +0 -0
  341. /package/dist/{themes → design/themes}/hkdev/theme-ext.d.ts +0 -0
  342. /package/dist/{util/design-system/css → design/utils}/clamp.d.ts +0 -0
  343. /package/dist/{util/design-system/layout → design/utils}/scaling.d.ts +0 -0
  344. /package/dist/{util/design-system/components → design/utils}/states.d.ts +0 -0
  345. /package/dist/{classes → network}/cache/IndexedDbCache.d.ts +0 -0
  346. /package/dist/{classes → network}/cache/MemoryResponseCache.d.ts +0 -0
  347. /package/dist/{classes → network}/cache/index.d.ts +0 -0
  348. /package/dist/{classes → network}/cache/typedef.d.ts +0 -0
  349. /package/dist/{util → network}/http/caching.d.ts +0 -0
  350. /package/dist/{util → network}/http/errors.d.ts +0 -0
  351. /package/dist/{util → network}/http/headers.d.ts +0 -0
  352. /package/dist/{util → network}/http/http-request.d.ts +0 -0
  353. /package/dist/{util → network}/http/index.d.ts +0 -0
  354. /package/dist/{util → network}/http/json-request.d.ts +0 -0
  355. /package/dist/{util → network}/http/mocks.d.ts +0 -0
  356. /package/dist/{util → network}/http/response.d.ts +0 -0
  357. /package/dist/{util → network}/http/typedef.d.ts +0 -0
  358. /package/dist/{util → network}/http/url.d.ts +0 -0
  359. /package/dist/{classes/svelte → network/loaders}/audio/AudioScene.svelte.d.ts +0 -0
  360. /package/dist/{classes/svelte → network/loaders}/audio/mocks.d.ts +0 -0
  361. /package/dist/{classes/svelte → network/loaders}/image/index.d.ts +0 -0
  362. /package/dist/{classes/svelte → network/loaders}/image/mocks.d.ts +0 -0
  363. /package/dist/{classes/svelte → network/loaders}/image/typedef.d.ts +0 -0
  364. /package/dist/{typedef/image.d.ts → network/loaders/typedef.d.ts} +0 -0
  365. /package/dist/{classes/svelte/network-loader → network/states}/constants.d.ts +0 -0
  366. /package/dist/{classes/svelte/network-loader → network/states}/index.d.ts +0 -0
  367. /package/dist/{classes/svelte/network-loader → network/states}/mocks.d.ts +0 -0
  368. /package/dist/{classes/svelte/network-loader → network/states}/typedef.d.ts +0 -0
  369. /package/dist/{components → ui/components}/button-group/ButtonGroup.svelte.d.ts +0 -0
  370. /package/dist/{components → ui/components}/button-group/typedef.d.ts +0 -0
  371. /package/dist/{components → ui/components}/compare-left-right/CompareLeftRight.svelte.d.ts +0 -0
  372. /package/dist/{components → ui/components}/compare-left-right/index.d.ts +0 -0
  373. /package/dist/{components → ui/components}/game-box/GameBox.svelte.d.ts +0 -0
  374. /package/dist/{components → ui/components}/game-box/gamebox.util.d.ts +0 -0
  375. /package/dist/{components → ui/components}/hk-app-layout/HkAppLayout.svelte.d.ts +0 -0
  376. /package/dist/{components → ui/components}/image-box/index.d.ts +0 -0
  377. /package/dist/{components → ui/components}/image-box/typedef.d.ts +0 -0
  378. /package/dist/{components → ui/components}/index.d.ts +0 -0
  379. /package/dist/{components → ui/components}/presenter/Presenter.svelte.d.ts +0 -0
  380. /package/dist/{components → ui/components}/presenter/constants.d.ts +0 -0
  381. /package/dist/{components → ui/components}/presenter/index.d.ts +0 -0
  382. /package/dist/{components → ui/components}/presenter/typedef.d.ts +0 -0
  383. /package/dist/{components → ui/components}/presenter/util.d.ts +0 -0
  384. /package/dist/{components → ui/components}/virtual-viewport/VirtualViewport.svelte.d.ts +0 -0
  385. /package/dist/{primitives → ui/primitives}/area/HkArea.svelte.d.ts +0 -0
  386. /package/dist/{primitives → ui/primitives}/area/HkGridArea.svelte.d.ts +0 -0
  387. /package/dist/{primitives → ui/primitives}/area/index.d.ts +0 -0
  388. /package/dist/{primitives → ui/primitives}/buttons/button-icon-steeze/SteezeIconButton.svelte.d.ts +0 -0
  389. /package/dist/{primitives → ui/primitives}/buttons/button-text/TextButton.svelte.d.ts +0 -0
  390. /package/dist/{primitives → ui/primitives}/buttons/index.d.ts +0 -0
  391. /package/dist/{primitives → ui/primitives}/debug/debug-panel-design-scaling/DebugPanelDesignScaling.svelte.d.ts +0 -0
  392. /package/dist/{primitives → ui/primitives}/debug/index.d.ts +0 -0
  393. /package/dist/{primitives → ui/primitives}/drag-drop/DragController.d.ts +0 -0
  394. /package/dist/{primitives → ui/primitives}/drag-drop/actions.d.ts +0 -0
  395. /package/dist/{primitives → ui/primitives}/drag-drop/index.d.ts +0 -0
  396. /package/dist/{primitives → ui/primitives}/drag-drop/util.d.ts +0 -0
  397. /package/dist/{primitives → ui/primitives}/hkdev/blocks/TextBlock.svelte.d.ts +0 -0
  398. /package/dist/{primitives → ui/primitives}/hkdev/buttons/CheckButton.svelte.d.ts +0 -0
  399. /package/dist/{primitives → ui/primitives}/icons/HkIcon.svelte.d.ts +0 -0
  400. /package/dist/{primitives → ui/primitives}/icons/HkTabIcon.svelte.d.ts +0 -0
  401. /package/dist/{primitives → ui/primitives}/icons/SteezeIcon.svelte.d.ts +0 -0
  402. /package/dist/{primitives → ui/primitives}/icons/index.d.ts +0 -0
  403. /package/dist/{primitives → ui/primitives}/icons/typedef.d.ts +0 -0
  404. /package/dist/{primitives → ui/primitives}/index.d.ts +0 -0
  405. /package/dist/{primitives → ui/primitives}/inputs/index.d.ts +0 -0
  406. /package/dist/{primitives → ui/primitives}/inputs/text-input/TextInput.svelte.d.ts +0 -0
  407. /package/dist/{primitives → ui/primitives}/inputs/text-input/assets/IconInvalid.svelte.d.ts +0 -0
  408. /package/dist/{primitives → ui/primitives}/inputs/text-input/assets/IconValid.svelte.d.ts +0 -0
  409. /package/dist/{primitives → ui/primitives}/layout/grid-layers/GridLayers.svelte.d.ts +0 -0
  410. /package/dist/{primitives → ui/primitives}/layout/grid-layers/util.d.ts +0 -0
  411. /package/dist/{primitives → ui/primitives}/layout/index.d.ts +0 -0
  412. /package/dist/{primitives → ui/primitives}/panels/index.d.ts +0 -0
  413. /package/dist/{primitives → ui/primitives}/panels/panel/Panel.svelte.d.ts +0 -0
  414. /package/dist/{primitives → ui/primitives}/rows/index.d.ts +0 -0
  415. /package/dist/{primitives → ui/primitives}/rows/panel-grid-row/PanelGridRow.svelte.d.ts +0 -0
  416. /package/dist/{primitives → ui/primitives}/rows/panel-row-2/PanelRow2.svelte.d.ts +0 -0
  417. /package/dist/{primitives → ui/primitives}/tab-bar/HkTabBar.svelte.d.ts +0 -0
  418. /package/dist/{primitives → ui/primitives}/tab-bar/HkTabBarSelector.svelte.d.ts +0 -0
  419. /package/dist/{primitives → ui/primitives}/tab-bar/index.d.ts +0 -0
  420. /package/dist/{primitives → ui/primitives}/tab-bar/typedef.d.ts +0 -0
  421. /package/dist/valibot/{user.d.ts → parsers/user.d.ts} +0 -0
@@ -1,462 +1,462 @@
1
- /**
2
- * @fileoverview Base service class with lifecycle management, health checks,
3
- * and integrated logging.
4
- *
5
- * ServiceBase provides a standardized lifecycle for all services with states,
6
- * events, logging, and error handling. Services extend this class and override
7
- * the protected methods to implement their specific functionality.
8
- *
9
- * @example
10
- * // Basic service implementation
11
- * import { ServiceBase } from './ServiceBase.js';
12
- *
13
- * class DatabaseService extends ServiceBase {
14
- * async _init(config) {
15
- * this.connectionString = config.connectionString;
16
- * }
17
- *
18
- * async _start() {
19
- * this.connection = await createConnection(this.connectionString);
20
- * }
21
- *
22
- * async _stop() {
23
- * await this.connection?.close();
24
- * }
25
- * }
26
- *
27
- * // Usage
28
- * const db = new DatabaseService('database');
29
- * await db.initialize({ connectionString: 'postgres://...' });
30
- * await db.start();
31
- *
32
- * // Listen to events
33
- * db.on('healthChanged', ({ healthy }) => {
34
- * console.log(`Database is ${healthy ? 'healthy' : 'unhealthy'}`);
35
- * });
36
- *
37
- * @example
38
- * // Service with recovery and health checks
39
- * class ApiService extends ServiceBase {
40
- * async _recover() {
41
- * // Custom recovery logic
42
- * await this.reconnect();
43
- * }
44
- *
45
- * async _healthCheck() {
46
- * const start = Date.now();
47
- * await this.ping();
48
- * return { latency: Date.now() - start };
49
- * }
50
- * }
51
- */
52
-
53
- import { EventEmitter } from '../../../classes/event-emitter';
54
- import { Logger, INFO } from '../../../logging/internal/unified-logger';
55
-
56
- import {
57
- CREATED,
58
- INITIALIZING,
59
- INITIALIZED,
60
- STARTING,
61
- RUNNING,
62
- STOPPING,
63
- STOPPED,
64
- DESTROYING,
65
- DESTROYED,
66
- ERROR as ERROR_STATE,
67
- RECOVERING
68
- } from './constants.js';
69
-
70
- /**
71
- * @typedef {import('./typedef.js').ServiceOptions} ServiceOptions
72
- * @typedef {import('./typedef.js').StopOptions} StopOptions
73
- * @typedef {import('./typedef.js').HealthStatus} HealthStatus
74
- * @typedef {import('./typedef.js').StateChangeEvent} StateChangeEvent
75
- * @typedef {import('./typedef.js').HealthChangeEvent} HealthChangeEvent
76
- * @typedef {import('./typedef.js').ServiceErrorEvent} ServiceErrorEvent
77
- */
78
-
79
- /**
80
- * Base class for all services with lifecycle management
81
- * @extends EventEmitter
82
- */
83
- export class ServiceBase extends EventEmitter {
84
- /**
85
- * Create a new service instance
86
- *
87
- * @param {string} name - Service name
88
- * @param {ServiceOptions} [options={}] - Service options
89
- */
90
- constructor(name, options = {}) {
91
- super();
92
-
93
- /** @type {string} */
94
- this.name = name;
95
-
96
- /** @type {string} */
97
- this.state = CREATED;
98
-
99
- /** @type {boolean} */
100
- this.healthy = false;
101
-
102
- /** @type {Error|null} */
103
- this.error = null;
104
-
105
- /** @type {Logger} */
106
- this.logger = new Logger(name, options.logLevel || INFO);
107
-
108
- /** @private @type {number} */
109
- this._shutdownTimeout = options.shutdownTimeout || 5000;
110
- }
111
-
112
- /**
113
- * Initialize the service with configuration
114
- *
115
- * @param {*} [config={}] - Service-specific configuration
116
- *
117
- * @returns {Promise<boolean>} True if initialization succeeded
118
- */
119
- async initialize(config = {}) {
120
- if (this.state !== CREATED &&
121
- this.state !== STOPPED &&
122
- this.state !== DESTROYED) {
123
- this.logger.warn(`Cannot initialize from state: ${this.state}`);
124
- return false;
125
- }
126
-
127
- try {
128
- this._setState(INITIALIZING);
129
- this.logger.debug('Initializing service', { config });
130
-
131
- await this._init(config);
132
-
133
- this._setState(INITIALIZED);
134
- this.logger.info('Service initialized');
135
- return true;
136
- } catch (error) {
137
- this._setError('initialization', error);
138
- return false;
139
- }
140
- }
141
-
142
- /**
143
- * Start the service
144
- *
145
- * @returns {Promise<boolean>} True if the service started successfully
146
- */
147
- async start() {
148
- if (this.state !== INITIALIZED && this.state !== STOPPED) {
149
- this.logger.warn(`Cannot start from state: ${this.state}`);
150
- return false;
151
- }
152
-
153
- try {
154
- this._setState(STARTING);
155
- this.logger.debug('Starting service');
156
-
157
- await this._start();
158
-
159
- this._setState(RUNNING);
160
- this._setHealthy(true);
161
- this.logger.info('Service started');
162
- return true;
163
- } catch (error) {
164
- this._setError('startup', error);
165
- return false;
166
- }
167
- }
168
-
169
- /**
170
- * Stop the service with optional timeout
171
- *
172
- * @param {StopOptions} [options={}] - Stop options
173
- *
174
- * @returns {Promise<boolean>} True if the service stopped successfully
175
- */
176
- async stop(options = {}) {
177
- if (this.state !== RUNNING && this.state !== ERROR_STATE) {
178
- this.logger.warn(`Cannot stop from state: ${this.state}`);
179
- return true; // Already stopped
180
- }
181
-
182
- const timeout = options.timeout ?? this._shutdownTimeout;
183
-
184
- try {
185
- this._setState(STOPPING);
186
- this._setHealthy(false);
187
- this.logger.debug('Stopping service');
188
-
189
- // Wrap _stop in a timeout
190
- const stopPromise = this._stop();
191
-
192
- if (timeout > 0) {
193
- await Promise.race([
194
- stopPromise,
195
- new Promise((_, reject) =>
196
- setTimeout(() => reject(new Error('Shutdown timeout')), timeout)
197
- )
198
- ]);
199
- } else {
200
- await stopPromise;
201
- }
202
-
203
- this._setState(STOPPED);
204
- this.logger.info('Service stopped');
205
- return true;
206
- } catch (error) {
207
- if (error.message === 'Shutdown timeout' && options.force) {
208
- this.logger.warn('Forced shutdown after timeout');
209
- this._setState(STOPPED);
210
- return true;
211
- }
212
- this._setError('shutdown', error);
213
- return false;
214
- }
215
- }
216
-
217
- /**
218
- * Recover the service from error state
219
- *
220
- * @returns {Promise<boolean>} True if recovery succeeded
221
- */
222
- async recover() {
223
- if (this.state !== ERROR_STATE) {
224
- this.logger.warn(
225
- `Can only recover from ERROR state, current: ${this.state}`
226
- );
227
- return false;
228
- }
229
-
230
- try {
231
- this._setState(RECOVERING);
232
- this.logger.info('Attempting recovery');
233
-
234
- // Try custom recovery first
235
- if (this._recover) {
236
- await this._recover();
237
- this._setState(RUNNING);
238
- this._setHealthy(true);
239
- } else {
240
- // Default: restart
241
- this._setState(STOPPED);
242
- await this.start();
243
- }
244
-
245
- this.error = null;
246
- this.logger.info('Recovery successful');
247
- return true;
248
- } catch (error) {
249
- this._setError('recovery', error);
250
- return false;
251
- }
252
- }
253
-
254
- /**
255
- * Destroy the service and cleanup resources
256
- *
257
- * @returns {Promise<boolean>} True if destruction succeeded
258
- */
259
- async destroy() {
260
- if (this.state === DESTROYED) {
261
- return true;
262
- }
263
-
264
- try {
265
- if (this.state === RUNNING) {
266
- await this.stop();
267
- }
268
-
269
- this._setState(DESTROYING);
270
- this.logger.debug('Destroying service');
271
-
272
- if (this._destroy) {
273
- await this._destroy();
274
- }
275
-
276
- this._setState(DESTROYED);
277
- this._setHealthy(false);
278
- this.logger.info('Service destroyed');
279
-
280
- // Cleanup
281
- this.removeAllListeners();
282
- this.logger.removeAllListeners();
283
-
284
- return true;
285
- } catch (error) {
286
- this._setError('destruction', error);
287
- return false;
288
- }
289
- }
290
-
291
- /**
292
- * Get the current health status of the service
293
- *
294
- * @returns {Promise<HealthStatus>} Health status object
295
- */
296
- async getHealth() {
297
- const baseHealth = {
298
- name: this.name,
299
- state: this.state,
300
- healthy: this.healthy,
301
- error: this.error?.message
302
- };
303
-
304
- if (this._healthCheck) {
305
- try {
306
- const customHealth = await this._healthCheck();
307
- return { ...baseHealth, ...customHealth };
308
- } catch (error) {
309
- return {
310
- ...baseHealth,
311
- healthy: false,
312
- checkError: error.message
313
- };
314
- }
315
- }
316
-
317
- return baseHealth;
318
- }
319
-
320
- /**
321
- * Set the service log level
322
- *
323
- * @param {string} level - New log level
324
- *
325
- * @returns {boolean} True if the level was set successfully
326
- */
327
- setLogLevel(level) {
328
- return this.logger.setLevel(level);
329
- }
330
-
331
- // Protected methods to override in subclasses
332
-
333
- /**
334
- * Initialize the service (override in subclass)
335
- *
336
- * @protected
337
- * @param {*} config - Service configuration
338
- *
339
- * @returns {Promise<void>}
340
- */
341
- async _init(config) {
342
- // Override in subclass
343
- }
344
-
345
- /**
346
- * Start the service (override in subclass)
347
- *
348
- * @protected
349
- *
350
- * @returns {Promise<void>}
351
- */
352
- async _start() {
353
- // Override in subclass
354
- }
355
-
356
- /**
357
- * Stop the service (override in subclass)
358
- *
359
- * @protected
360
- *
361
- * @returns {Promise<void>}
362
- */
363
- async _stop() {
364
- // Override in subclass
365
- }
366
-
367
- /**
368
- * Destroy the service (optional override)
369
- *
370
- * @protected
371
- *
372
- * @returns {Promise<void>}
373
- */
374
- async _destroy() {
375
- // Override in subclass if needed
376
- }
377
-
378
- /**
379
- * Recover from error state (optional override)
380
- *
381
- * @protected
382
- *
383
- * @returns {Promise<void>}
384
- */
385
- async _recover() {
386
- // Override in subclass if custom recovery needed
387
- // Default behavior is stop + start
388
- }
389
-
390
- /**
391
- * Perform health check (optional override)
392
- *
393
- * @protected
394
- *
395
- * @returns {Promise<Object>} Additional health information
396
- */
397
- async _healthCheck() {
398
- // Override in subclass if health checks needed
399
- return {};
400
- }
401
-
402
- // Private methods
403
-
404
- /**
405
- * Set the service state and emit event
406
- *
407
- * @private
408
- * @param {string} newState - New state value
409
- */
410
- _setState(newState) {
411
- const oldState = this.state;
412
- this.state = newState;
413
-
414
- this.emit('stateChanged', {
415
- oldState,
416
- newState
417
- });
418
- }
419
-
420
- /**
421
- * Set the health status and emit event if changed
422
- *
423
- * @private
424
- * @param {boolean} healthy - New health status
425
- */
426
- _setHealthy(healthy) {
427
- const wasHealthy = this.healthy;
428
- this.healthy = healthy;
429
-
430
- if (wasHealthy !== healthy) {
431
- this.emit('healthChanged', {
432
- healthy,
433
- wasHealthy
434
- });
435
- }
436
- }
437
-
438
- /**
439
- * Set error state and emit error event
440
- *
441
- * @private
442
- * @param {string} operation - Operation that failed
443
- * @param {Error} error - Error that occurred
444
- */
445
- _setError(operation, error) {
446
- this.error = error;
447
- this._setState(ERROR_STATE);
448
- this._setHealthy(false);
449
-
450
- this.logger.error(`${operation} failed`, {
451
- error: error.message,
452
- stack: error.stack
453
- });
454
-
455
- this.emit('error', {
456
- operation,
457
- error
458
- });
459
- }
460
- }
461
-
462
- export default ServiceBase;
1
+ /**
2
+ * @fileoverview Base service class with lifecycle management, health checks,
3
+ * and integrated logging.
4
+ *
5
+ * ServiceBase provides a standardized lifecycle for all services with states,
6
+ * events, logging, and error handling. Services extend this class and override
7
+ * the protected methods to implement their specific functionality.
8
+ *
9
+ * @example
10
+ * // Basic service implementation
11
+ * import { ServiceBase } from './ServiceBase.js';
12
+ *
13
+ * class DatabaseService extends ServiceBase {
14
+ * async _init(config) {
15
+ * this.connectionString = config.connectionString;
16
+ * }
17
+ *
18
+ * async _start() {
19
+ * this.connection = await createConnection(this.connectionString);
20
+ * }
21
+ *
22
+ * async _stop() {
23
+ * await this.connection?.close();
24
+ * }
25
+ * }
26
+ *
27
+ * // Usage
28
+ * const db = new DatabaseService('database');
29
+ * await db.initialize({ connectionString: 'postgres://...' });
30
+ * await db.start();
31
+ *
32
+ * // Listen to events
33
+ * db.on('healthChanged', ({ healthy }) => {
34
+ * console.log(`Database is ${healthy ? 'healthy' : 'unhealthy'}`);
35
+ * });
36
+ *
37
+ * @example
38
+ * // Service with recovery and health checks
39
+ * class ApiService extends ServiceBase {
40
+ * async _recover() {
41
+ * // Custom recovery logic
42
+ * await this.reconnect();
43
+ * }
44
+ *
45
+ * async _healthCheck() {
46
+ * const start = Date.now();
47
+ * await this.ping();
48
+ * return { latency: Date.now() - start };
49
+ * }
50
+ * }
51
+ */
52
+
53
+ import { EventEmitter } from '../../../classes/event-emitter';
54
+ import { Logger, INFO } from '../../../logging/internal/unified-logger';
55
+
56
+ import {
57
+ CREATED,
58
+ INITIALIZING,
59
+ INITIALIZED,
60
+ STARTING,
61
+ RUNNING,
62
+ STOPPING,
63
+ STOPPED,
64
+ DESTROYING,
65
+ DESTROYED,
66
+ ERROR as ERROR_STATE,
67
+ RECOVERING
68
+ } from './constants.js';
69
+
70
+ /**
71
+ * @typedef {import('./typedef.js').ServiceOptions} ServiceOptions
72
+ * @typedef {import('./typedef.js').StopOptions} StopOptions
73
+ * @typedef {import('./typedef.js').HealthStatus} HealthStatus
74
+ * @typedef {import('./typedef.js').StateChangeEvent} StateChangeEvent
75
+ * @typedef {import('./typedef.js').HealthChangeEvent} HealthChangeEvent
76
+ * @typedef {import('./typedef.js').ServiceErrorEvent} ServiceErrorEvent
77
+ */
78
+
79
+ /**
80
+ * Base class for all services with lifecycle management
81
+ * @extends EventEmitter
82
+ */
83
+ export class ServiceBase extends EventEmitter {
84
+ /**
85
+ * Create a new service instance
86
+ *
87
+ * @param {string} name - Service name
88
+ * @param {ServiceOptions} [options={}] - Service options
89
+ */
90
+ constructor(name, options = {}) {
91
+ super();
92
+
93
+ /** @type {string} */
94
+ this.name = name;
95
+
96
+ /** @type {string} */
97
+ this.state = CREATED;
98
+
99
+ /** @type {boolean} */
100
+ this.healthy = false;
101
+
102
+ /** @type {Error|null} */
103
+ this.error = null;
104
+
105
+ /** @type {Logger} */
106
+ this.logger = new Logger(name, options.logLevel || INFO);
107
+
108
+ /** @private @type {number} */
109
+ this._shutdownTimeout = options.shutdownTimeout || 5000;
110
+ }
111
+
112
+ /**
113
+ * Initialize the service with configuration
114
+ *
115
+ * @param {*} [config={}] - Service-specific configuration
116
+ *
117
+ * @returns {Promise<boolean>} True if initialization succeeded
118
+ */
119
+ async initialize(config = {}) {
120
+ if (this.state !== CREATED &&
121
+ this.state !== STOPPED &&
122
+ this.state !== DESTROYED) {
123
+ this.logger.warn(`Cannot initialize from state: ${this.state}`);
124
+ return false;
125
+ }
126
+
127
+ try {
128
+ this._setState(INITIALIZING);
129
+ this.logger.debug('Initializing service', { config });
130
+
131
+ await this._init(config);
132
+
133
+ this._setState(INITIALIZED);
134
+ this.logger.info('Service initialized');
135
+ return true;
136
+ } catch (error) {
137
+ this._setError('initialization', error);
138
+ return false;
139
+ }
140
+ }
141
+
142
+ /**
143
+ * Start the service
144
+ *
145
+ * @returns {Promise<boolean>} True if the service started successfully
146
+ */
147
+ async start() {
148
+ if (this.state !== INITIALIZED && this.state !== STOPPED) {
149
+ this.logger.warn(`Cannot start from state: ${this.state}`);
150
+ return false;
151
+ }
152
+
153
+ try {
154
+ this._setState(STARTING);
155
+ this.logger.debug('Starting service');
156
+
157
+ await this._start();
158
+
159
+ this._setState(RUNNING);
160
+ this._setHealthy(true);
161
+ this.logger.info('Service started');
162
+ return true;
163
+ } catch (error) {
164
+ this._setError('startup', error);
165
+ return false;
166
+ }
167
+ }
168
+
169
+ /**
170
+ * Stop the service with optional timeout
171
+ *
172
+ * @param {StopOptions} [options={}] - Stop options
173
+ *
174
+ * @returns {Promise<boolean>} True if the service stopped successfully
175
+ */
176
+ async stop(options = {}) {
177
+ if (this.state !== RUNNING && this.state !== ERROR_STATE) {
178
+ this.logger.warn(`Cannot stop from state: ${this.state}`);
179
+ return true; // Already stopped
180
+ }
181
+
182
+ const timeout = options.timeout ?? this._shutdownTimeout;
183
+
184
+ try {
185
+ this._setState(STOPPING);
186
+ this._setHealthy(false);
187
+ this.logger.debug('Stopping service');
188
+
189
+ // Wrap _stop in a timeout
190
+ const stopPromise = this._stop();
191
+
192
+ if (timeout > 0) {
193
+ await Promise.race([
194
+ stopPromise,
195
+ new Promise((_, reject) =>
196
+ setTimeout(() => reject(new Error('Shutdown timeout')), timeout)
197
+ )
198
+ ]);
199
+ } else {
200
+ await stopPromise;
201
+ }
202
+
203
+ this._setState(STOPPED);
204
+ this.logger.info('Service stopped');
205
+ return true;
206
+ } catch (error) {
207
+ if (error.message === 'Shutdown timeout' && options.force) {
208
+ this.logger.warn('Forced shutdown after timeout');
209
+ this._setState(STOPPED);
210
+ return true;
211
+ }
212
+ this._setError('shutdown', error);
213
+ return false;
214
+ }
215
+ }
216
+
217
+ /**
218
+ * Recover the service from error state
219
+ *
220
+ * @returns {Promise<boolean>} True if recovery succeeded
221
+ */
222
+ async recover() {
223
+ if (this.state !== ERROR_STATE) {
224
+ this.logger.warn(
225
+ `Can only recover from ERROR state, current: ${this.state}`
226
+ );
227
+ return false;
228
+ }
229
+
230
+ try {
231
+ this._setState(RECOVERING);
232
+ this.logger.info('Attempting recovery');
233
+
234
+ // Try custom recovery first
235
+ if (this._recover) {
236
+ await this._recover();
237
+ this._setState(RUNNING);
238
+ this._setHealthy(true);
239
+ } else {
240
+ // Default: restart
241
+ this._setState(STOPPED);
242
+ await this.start();
243
+ }
244
+
245
+ this.error = null;
246
+ this.logger.info('Recovery successful');
247
+ return true;
248
+ } catch (error) {
249
+ this._setError('recovery', error);
250
+ return false;
251
+ }
252
+ }
253
+
254
+ /**
255
+ * Destroy the service and cleanup resources
256
+ *
257
+ * @returns {Promise<boolean>} True if destruction succeeded
258
+ */
259
+ async destroy() {
260
+ if (this.state === DESTROYED) {
261
+ return true;
262
+ }
263
+
264
+ try {
265
+ if (this.state === RUNNING) {
266
+ await this.stop();
267
+ }
268
+
269
+ this._setState(DESTROYING);
270
+ this.logger.debug('Destroying service');
271
+
272
+ if (this._destroy) {
273
+ await this._destroy();
274
+ }
275
+
276
+ this._setState(DESTROYED);
277
+ this._setHealthy(false);
278
+ this.logger.info('Service destroyed');
279
+
280
+ // Cleanup
281
+ this.removeAllListeners();
282
+ this.logger.removeAllListeners();
283
+
284
+ return true;
285
+ } catch (error) {
286
+ this._setError('destruction', error);
287
+ return false;
288
+ }
289
+ }
290
+
291
+ /**
292
+ * Get the current health status of the service
293
+ *
294
+ * @returns {Promise<HealthStatus>} Health status object
295
+ */
296
+ async getHealth() {
297
+ const baseHealth = {
298
+ name: this.name,
299
+ state: this.state,
300
+ healthy: this.healthy,
301
+ error: this.error?.message
302
+ };
303
+
304
+ if (this._healthCheck) {
305
+ try {
306
+ const customHealth = await this._healthCheck();
307
+ return { ...baseHealth, ...customHealth };
308
+ } catch (error) {
309
+ return {
310
+ ...baseHealth,
311
+ healthy: false,
312
+ checkError: error.message
313
+ };
314
+ }
315
+ }
316
+
317
+ return baseHealth;
318
+ }
319
+
320
+ /**
321
+ * Set the service log level
322
+ *
323
+ * @param {string} level - New log level
324
+ *
325
+ * @returns {boolean} True if the level was set successfully
326
+ */
327
+ setLogLevel(level) {
328
+ return this.logger.setLevel(level);
329
+ }
330
+
331
+ // Protected methods to override in subclasses
332
+
333
+ /**
334
+ * Initialize the service (override in subclass)
335
+ *
336
+ * @protected
337
+ * @param {*} config - Service configuration
338
+ *
339
+ * @returns {Promise<void>}
340
+ */
341
+ async _init(config) {
342
+ // Override in subclass
343
+ }
344
+
345
+ /**
346
+ * Start the service (override in subclass)
347
+ *
348
+ * @protected
349
+ *
350
+ * @returns {Promise<void>}
351
+ */
352
+ async _start() {
353
+ // Override in subclass
354
+ }
355
+
356
+ /**
357
+ * Stop the service (override in subclass)
358
+ *
359
+ * @protected
360
+ *
361
+ * @returns {Promise<void>}
362
+ */
363
+ async _stop() {
364
+ // Override in subclass
365
+ }
366
+
367
+ /**
368
+ * Destroy the service (optional override)
369
+ *
370
+ * @protected
371
+ *
372
+ * @returns {Promise<void>}
373
+ */
374
+ async _destroy() {
375
+ // Override in subclass if needed
376
+ }
377
+
378
+ /**
379
+ * Recover from error state (optional override)
380
+ *
381
+ * @protected
382
+ *
383
+ * @returns {Promise<void>}
384
+ */
385
+ async _recover() {
386
+ // Override in subclass if custom recovery needed
387
+ // Default behavior is stop + start
388
+ }
389
+
390
+ /**
391
+ * Perform health check (optional override)
392
+ *
393
+ * @protected
394
+ *
395
+ * @returns {Promise<Object>} Additional health information
396
+ */
397
+ async _healthCheck() {
398
+ // Override in subclass if health checks needed
399
+ return {};
400
+ }
401
+
402
+ // Private methods
403
+
404
+ /**
405
+ * Set the service state and emit event
406
+ *
407
+ * @private
408
+ * @param {string} newState - New state value
409
+ */
410
+ _setState(newState) {
411
+ const oldState = this.state;
412
+ this.state = newState;
413
+
414
+ this.emit('stateChanged', {
415
+ oldState,
416
+ newState
417
+ });
418
+ }
419
+
420
+ /**
421
+ * Set the health status and emit event if changed
422
+ *
423
+ * @private
424
+ * @param {boolean} healthy - New health status
425
+ */
426
+ _setHealthy(healthy) {
427
+ const wasHealthy = this.healthy;
428
+ this.healthy = healthy;
429
+
430
+ if (wasHealthy !== healthy) {
431
+ this.emit('healthChanged', {
432
+ healthy,
433
+ wasHealthy
434
+ });
435
+ }
436
+ }
437
+
438
+ /**
439
+ * Set error state and emit error event
440
+ *
441
+ * @private
442
+ * @param {string} operation - Operation that failed
443
+ * @param {Error} error - Error that occurred
444
+ */
445
+ _setError(operation, error) {
446
+ this.error = error;
447
+ this._setState(ERROR_STATE);
448
+ this._setHealthy(false);
449
+
450
+ this.logger.error(`${operation} failed`, {
451
+ error: error.message,
452
+ stack: error.stack
453
+ });
454
+
455
+ this.emit('error', {
456
+ operation,
457
+ error
458
+ });
459
+ }
460
+ }
461
+
462
+ export default ServiceBase;