@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.
- package/README.md +173 -149
- package/dist/assets/autospuiten/car-paint-picker.js +41 -41
- package/dist/assets/autospuiten/labels.js +7 -7
- package/dist/classes/data/IterableTree.js +242 -242
- package/dist/classes/data/Selector.js +190 -190
- package/dist/classes/data/index.js +2 -2
- package/dist/classes/data/typedef.js +9 -9
- package/dist/classes/event-emitter/EventEmitter.js +273 -273
- package/dist/classes/event-emitter/index.js +2 -2
- package/dist/classes/index.js +4 -4
- package/dist/classes/promise/HkPromise.js +384 -384
- package/dist/classes/promise/index.js +1 -1
- package/dist/classes/stores/SubscribersCount.js +107 -107
- package/dist/classes/stores/index.js +1 -1
- package/dist/classes/streams/LogTransformStream.js +19 -19
- package/dist/classes/streams/ServerEventsStore.js +111 -111
- package/dist/classes/streams/TimeStampSource.js +26 -26
- package/dist/classes/streams/index.js +3 -3
- package/dist/classes/svelte/finite-state-machine/FiniteStateMachine.svelte.js +133 -133
- package/dist/classes/svelte/finite-state-machine/index.js +1 -1
- package/dist/classes/svelte/index.js +1 -11
- package/dist/classes/svelte/loading-state-machine/LoadingStateMachine.svelte.js +109 -109
- package/dist/classes/svelte/loading-state-machine/constants.js +16 -16
- package/dist/classes/svelte/loading-state-machine/index.js +3 -3
- package/dist/config/README.md +197 -196
- package/dist/config/generators/imagetools.js +189 -189
- package/dist/config/generators/vite.js +148 -142
- package/dist/config/imagetools.d.ts +72 -72
- package/dist/config/vite.js +4 -4
- package/dist/constants/bases/index.js +13 -13
- package/dist/constants/http/headers.js +6 -6
- package/dist/constants/http/index.js +2 -2
- package/dist/constants/http/methods.js +14 -14
- package/dist/constants/index.js +6 -6
- package/dist/constants/mime/application.js +5 -5
- package/dist/constants/mime/audio.js +13 -13
- package/dist/constants/mime/image.js +3 -3
- package/dist/constants/mime/index.js +4 -4
- package/dist/constants/mime/text.js +2 -2
- package/dist/constants/regexp/README.md +96 -95
- package/dist/constants/regexp/index.js +31 -31
- package/dist/constants/regexp/inspiratie.js__ +95 -95
- package/dist/constants/regexp/text.d.ts +4 -4
- package/dist/constants/regexp/text.js +49 -49
- package/dist/constants/regexp/url.js +3 -3
- package/dist/constants/regexp/user.js +29 -29
- package/dist/constants/states/drag.js +6 -6
- package/dist/constants/states/drop.js +6 -6
- package/dist/constants/states/index.js +4 -4
- package/dist/constants/states/input.js +11 -11
- package/dist/constants/states/submit.js +4 -4
- package/dist/constants/time/index.js +28 -28
- package/dist/css/utilities.css +43 -43
- package/dist/design/README.md +405 -405
- package/dist/design/config/design-config.js +73 -73
- package/dist/design/generators/index.js +288 -288
- package/dist/design/index.js +96 -96
- package/dist/design/plugins/skeleton.js +208 -208
- package/dist/design/tailwind-theme-extend.js +158 -158
- package/dist/design/themes/README.md +102 -102
- package/dist/design/themes/hkdev/components/blocks/text-block.css +34 -34
- package/dist/design/themes/hkdev/components/boxes/game-box.css +11 -11
- package/dist/design/themes/hkdev/components/buttons/button-icon-steeze.css +22 -22
- package/dist/design/themes/hkdev/components/buttons/button-text.css +32 -32
- package/dist/design/themes/hkdev/components/buttons/button.css +146 -146
- package/dist/design/themes/hkdev/components/buttons/skip-button.css +5 -5
- package/dist/design/themes/hkdev/components/drag-drop/draggable.css +73 -73
- package/dist/design/themes/hkdev/components/drag-drop/drop-zone.css +58 -58
- package/dist/design/themes/hkdev/components/icons/icon-steeze.css +15 -15
- package/dist/design/themes/hkdev/components/inputs/text-input.css +102 -102
- package/dist/design/themes/hkdev/components/panels/panel.css +25 -25
- package/dist/design/themes/hkdev/components/rows/panel-grid-row.css +4 -4
- package/dist/design/themes/hkdev/components/rows/panel-row-2.css +5 -5
- package/dist/design/themes/hkdev/components.css +29 -29
- package/dist/design/themes/hkdev/debug.css +1 -1
- package/dist/design/themes/hkdev/global/layout.css +32 -32
- package/dist/design/themes/hkdev/global/on-colors.css +32 -32
- package/dist/design/themes/hkdev/globals.css +3 -3
- package/dist/design/themes/hkdev/responsive.css +12 -12
- package/dist/design/themes/hkdev/theme-ext.js +12 -12
- package/dist/design/themes/hkdev/theme.css +218 -218
- package/dist/design/utils/clamp.js +66 -66
- package/dist/design/utils/root-vars.js +102 -102
- package/dist/design/utils/scaling.js +228 -228
- package/dist/design/utils/states.js +22 -22
- package/dist/errors/api.js +9 -9
- package/dist/errors/generic.js +20 -20
- package/dist/errors/http.js +16 -16
- package/dist/errors/index.js +5 -5
- package/dist/errors/jwt.js +5 -5
- package/dist/errors/promise.js +25 -25
- package/dist/logging/README.md +158 -0
- package/dist/logging/index.d.ts +3 -1
- package/dist/logging/index.js +11 -7
- package/dist/logging/internal/adapters/console.js +114 -114
- package/dist/logging/internal/adapters/index.js +2 -2
- package/dist/logging/internal/adapters/pino.js +160 -142
- package/dist/logging/internal/adapters/typedef.js +10 -10
- package/dist/logging/internal/{unified-logger/constants.js → constants.js} +22 -22
- package/dist/logging/internal/factories/client.d.ts +1 -1
- package/dist/logging/internal/factories/client.js +21 -21
- package/dist/logging/internal/factories/server.d.ts +1 -1
- package/dist/logging/internal/factories/server.js +22 -22
- package/dist/logging/internal/factories/universal.d.ts +2 -2
- package/dist/logging/internal/factories/universal.js +22 -22
- package/dist/logging/internal/{unified-logger → logger}/Logger.d.ts +2 -2
- package/dist/logging/internal/{unified-logger → logger}/Logger.js +217 -217
- package/dist/logging/internal/logger/index.d.ts +1 -0
- package/dist/logging/internal/logger/index.js +1 -0
- package/dist/logging/internal/{unified-logger/typedef.d.ts → typedef.d.ts} +2 -1
- package/dist/logging/internal/{unified-logger/typedef.js → typedef.js} +21 -17
- package/dist/network/README.md +172 -172
- package/dist/network/cache/IndexedDbCache.js +1407 -1407
- package/dist/network/cache/MemoryResponseCache.js +138 -138
- package/dist/network/cache/index.js +5 -5
- package/dist/network/cache/typedef.js +41 -41
- package/dist/network/cache.js +3 -3
- package/dist/network/http/caching.js +261 -261
- package/dist/network/http/errors.js +97 -97
- package/dist/network/http/headers.js +75 -75
- package/dist/network/http/http-request.js +578 -578
- package/dist/network/http/index.js +22 -22
- package/dist/network/http/json-request.js +224 -224
- package/dist/network/http/mocks.js +65 -65
- package/dist/network/http/response.js +318 -318
- package/dist/network/http/test-data__/content-length-test-hkdigital-small.V4HfZyBQ.avif +0 -0
- package/dist/network/http/typedef.js +93 -93
- package/dist/network/http/url.js +52 -52
- package/dist/network/http.js +5 -5
- package/dist/network/loaders/README.md +254 -254
- package/dist/network/loaders/audio/AudioLoader.svelte.js +58 -58
- package/dist/network/loaders/audio/AudioScene.svelte.js +324 -324
- package/dist/network/loaders/audio/mocks.js +35 -35
- package/dist/network/loaders/audio.js +1 -1
- package/dist/network/loaders/image/ImageLoader.svelte.js +44 -44
- package/dist/network/loaders/image/ImageScene.svelte.js +248 -248
- package/dist/network/loaders/image/ImageVariantsLoader.svelte.js +150 -150
- package/dist/network/loaders/image/index.js +4 -4
- package/dist/network/loaders/image/mocks.js +35 -35
- package/dist/network/loaders/image/typedef.js +8 -8
- package/dist/network/loaders/image/utils/index.js +86 -86
- package/dist/network/loaders/image.js +7 -7
- package/dist/network/loaders/typedef.js +38 -38
- package/dist/network/loaders.js +2 -2
- package/dist/network/states/NetworkLoader.svelte.js +338 -338
- package/dist/network/states/constants.js +3 -3
- package/dist/network/states/index.js +3 -3
- package/dist/network/states/mocks.js +30 -30
- package/dist/network/states/typedef.js +8 -8
- package/dist/network/typedef.js +9 -9
- package/dist/services/README.md +200 -0
- package/dist/services/index.d.ts +6 -1
- package/dist/services/index.js +8 -1
- package/dist/services/{internal/service-base → service-base}/ServiceBase.d.ts +2 -2
- package/dist/services/{internal/service-base → service-base}/ServiceBase.js +462 -462
- package/dist/services/{internal/service-base → service-base}/constants.d.ts +0 -12
- package/dist/services/{internal/service-base → service-base}/constants.js +98 -110
- package/dist/services/{internal/service-base → service-base}/index.js +3 -3
- package/dist/services/{internal/service-base → service-base}/typedef.d.ts +1 -1
- package/dist/services/{internal/service-base → service-base}/typedef.js +101 -101
- package/dist/services/{internal/service-manager → service-manager}/ServiceManager.d.ts +2 -2
- package/dist/services/{internal/service-manager → service-manager}/ServiceManager.js +608 -608
- package/dist/services/{internal/service-manager → service-manager}/constants.js +6 -6
- package/dist/services/{internal/service-manager → service-manager}/typedef.js +90 -90
- package/dist/states/index.js +1 -1
- package/dist/states/navigation.svelte.js +55 -55
- package/dist/stores/index.js +1 -1
- package/dist/stores/theme.js +80 -80
- package/dist/typedef/context.js +6 -6
- package/dist/typedef/drag.js +25 -25
- package/dist/typedef/drop.js +12 -12
- package/dist/typedef/index.d.ts +1 -0
- package/dist/typedef/index.js +4 -4
- package/dist/ui/components/button-group/ButtonGroup.svelte +82 -82
- package/dist/ui/components/button-group/typedef.js +10 -10
- package/dist/ui/components/compare-left-right/CompareLeftRight.svelte +179 -179
- package/dist/ui/components/compare-left-right/index.js +1 -1
- package/dist/ui/components/game-box/GameBox.svelte +577 -577
- package/dist/ui/components/game-box/gamebox.util.js +83 -83
- package/dist/ui/components/hk-app-layout/HkAppLayout.state.svelte.js +25 -25
- package/dist/ui/components/hk-app-layout/HkAppLayout.svelte +251 -251
- package/dist/ui/components/image-box/ImageBox.svelte +210 -210
- package/dist/ui/components/image-box/index.js +5 -5
- package/dist/ui/components/image-box/typedef.js +32 -32
- package/dist/ui/components/index.js +23 -23
- package/dist/ui/components/presenter/ImageSlide.svelte +64 -64
- package/dist/ui/components/presenter/Presenter.state.svelte.js +638 -638
- package/dist/ui/components/presenter/Presenter.svelte +142 -142
- package/dist/ui/components/presenter/constants.js +7 -7
- package/dist/ui/components/presenter/index.js +10 -10
- package/dist/ui/components/presenter/typedef.js +106 -106
- package/dist/ui/components/presenter/util.js +210 -210
- package/dist/ui/components/virtual-viewport/VirtualViewport.svelte +196 -196
- package/dist/ui/primitives/area/HkArea.svelte +49 -49
- package/dist/ui/primitives/area/HkGridArea.svelte +77 -77
- package/dist/ui/primitives/area/index.js +2 -2
- package/dist/ui/primitives/buttons/button/Button.svelte +82 -82
- package/dist/ui/primitives/buttons/button-icon-steeze/SteezeIconButton.svelte +30 -30
- package/dist/ui/primitives/buttons/button-text/TextButton.svelte +21 -21
- package/dist/ui/primitives/buttons/index.js +3 -3
- package/dist/ui/primitives/debug/debug-panel-design-scaling/DebugPanelDesignScaling.svelte +146 -146
- package/dist/ui/primitives/debug/index.js +1 -1
- package/dist/ui/primitives/drag-drop/DragController.js +44 -44
- package/dist/ui/primitives/drag-drop/DragDropContext.svelte +111 -111
- package/dist/ui/primitives/drag-drop/Draggable.svelte +519 -519
- package/dist/ui/primitives/drag-drop/DropZone.svelte +258 -258
- package/dist/ui/primitives/drag-drop/DropZoneArea.svelte +119 -119
- package/dist/ui/primitives/drag-drop/DropZoneList.svelte +125 -125
- package/dist/ui/primitives/drag-drop/actions.js +26 -26
- package/dist/ui/primitives/drag-drop/drag-state.svelte.js +322 -322
- package/dist/ui/primitives/drag-drop/index.js +7 -7
- package/dist/ui/primitives/drag-drop/util.js +85 -85
- package/dist/ui/primitives/hkdev/blocks/TextBlock.svelte +46 -46
- package/dist/ui/primitives/hkdev/buttons/CheckButton.svelte +62 -62
- package/dist/ui/primitives/icons/HkIcon.svelte +86 -86
- package/dist/ui/primitives/icons/HkTabIcon.svelte +116 -116
- package/dist/ui/primitives/icons/SteezeIcon.svelte +97 -97
- package/dist/ui/primitives/icons/index.js +6 -6
- package/dist/ui/primitives/icons/typedef.js +16 -16
- package/dist/ui/primitives/index.js +2 -2
- package/dist/ui/primitives/inputs/index.js +1 -1
- package/dist/ui/primitives/inputs/text-input/TestTextInput.svelte__ +102 -0
- package/dist/ui/primitives/inputs/text-input/TextInput.svelte +223 -223
- package/dist/ui/primitives/inputs/text-input/TextInput.svelte___ +83 -0
- package/dist/ui/primitives/inputs/text-input/assets/IconInvalid.svelte +14 -14
- package/dist/ui/primitives/inputs/text-input/assets/IconValid.svelte +12 -12
- package/dist/ui/primitives/layout/grid-layers/GridLayers.svelte +63 -63
- package/dist/ui/primitives/layout/grid-layers/GridLayers.svelte__heightFrom__ +372 -0
- package/dist/ui/primitives/layout/grid-layers/util.js +74 -74
- package/dist/ui/primitives/layout/index.js +1 -1
- package/dist/ui/primitives/panels/index.js +1 -1
- package/dist/ui/primitives/panels/panel/Panel.svelte +43 -43
- package/dist/ui/primitives/rows/index.js +3 -3
- package/dist/ui/primitives/rows/panel-grid-row/PanelGridRow.svelte +104 -104
- package/dist/ui/primitives/rows/panel-row-2/PanelRow2.svelte +40 -40
- package/dist/ui/primitives/tab-bar/HkTabBar.state.svelte.js +149 -149
- package/dist/ui/primitives/tab-bar/HkTabBar.svelte +74 -74
- package/dist/ui/primitives/tab-bar/HkTabBarSelector.state.svelte.js +93 -93
- package/dist/ui/primitives/tab-bar/HkTabBarSelector.svelte +49 -49
- package/dist/ui/primitives/tab-bar/index.js +17 -17
- package/dist/ui/primitives/tab-bar/typedef.js +11 -11
- package/dist/util/array/index.js +436 -436
- package/dist/util/bases/base58.js +262 -262
- package/dist/util/bases/index.js +1 -1
- package/dist/util/compare/index.js +247 -247
- package/dist/util/css/css-vars.js +83 -83
- package/dist/util/css/index.js +1 -1
- package/dist/util/env/index.js +9 -9
- package/dist/util/exceptions/index.d.ts +4 -3
- package/dist/util/exceptions/index.js +26 -23
- package/dist/util/expect/arrays.js +47 -47
- package/dist/util/expect/index.js +259 -259
- package/dist/util/expect/primitives.js +55 -55
- package/dist/util/expect/url.js +60 -60
- package/dist/util/function/index.js +218 -218
- package/dist/util/geo/index.js +26 -26
- package/dist/util/index.js +7 -7
- package/dist/util/is/index.js +147 -147
- package/dist/util/iterate/index.js +204 -204
- package/dist/util/object/index.js +1345 -1345
- package/dist/util/singleton/index.js +97 -97
- package/dist/util/string/array-path.js +75 -75
- package/dist/util/string/convert.js +54 -54
- package/dist/util/string/fs.js +226 -226
- package/dist/util/string/index.js +5 -5
- package/dist/util/string/interpolate.js +61 -61
- package/dist/util/string/pad.js +10 -10
- package/dist/util/svelte/index.js +4 -4
- package/dist/util/svelte/loading/loading-tracker.svelte.js +108 -108
- package/dist/util/svelte/observe/index.js +49 -49
- package/dist/util/svelte/state-context/index.js +117 -117
- package/dist/util/svelte/wait/index.js +38 -38
- package/dist/util/sveltekit/index.js +1 -1
- package/dist/util/sveltekit/route-folders/index.js +101 -101
- package/dist/util/time/index.js +328 -328
- package/dist/util/unique/index.js +231 -231
- package/dist/valibot/README.md +61 -50
- package/dist/valibot/index.js +8 -8
- package/dist/valibot/parsers/date.js__ +10 -0
- package/dist/valibot/parsers/email.d.ts +12 -0
- package/dist/valibot/parsers/email.js +34 -0
- package/dist/valibot/parsers/url.js +110 -110
- package/dist/valibot/parsers/user.js +23 -23
- package/dist/valibot/parsers.js +3 -3
- package/package.json +131 -131
- package/dist/logging/internal/unified-logger/index.d.ts +0 -3
- package/dist/logging/internal/unified-logger/index.js +0 -6
- package/dist/services/internal/index.d.ts +0 -6
- package/dist/services/internal/index.js +0 -8
- /package/dist/logging/internal/{unified-logger/constants.d.ts → constants.d.ts} +0 -0
- /package/dist/services/{internal/service-base → service-base}/index.d.ts +0 -0
- /package/dist/services/{internal/service-manager → service-manager}/constants.d.ts +0 -0
- /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 {};
|
package/dist/network/typedef.js
CHANGED
|
@@ -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.
|
package/dist/services/index.d.ts
CHANGED
|
@@ -1 +1,6 @@
|
|
|
1
|
-
export
|
|
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";
|
package/dist/services/index.js
CHANGED
|
@@ -1 +1,8 @@
|
|
|
1
|
-
export
|
|
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 '
|
|
161
|
-
import { Logger } from '
|
|
160
|
+
import { EventEmitter } from '../../classes/event-emitter';
|
|
161
|
+
import { Logger } from '../../logging/internal/logger';
|