@hkdigital/lib-sveltekit 0.2.21 → 0.2.22
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 +149 -135
- package/dist/assets/autospuiten/car-paint-picker.js +41 -41
- package/dist/assets/autospuiten/labels.js +7 -7
- package/dist/classes/cache/IndexedDbCache.js +1407 -1407
- package/dist/classes/cache/MemoryResponseCache.js +138 -138
- package/dist/classes/cache/index.js +5 -5
- package/dist/classes/cache/typedef.js +41 -41
- package/dist/classes/data/IterableTree.js +243 -243
- package/dist/classes/data/Selector.js +190 -190
- package/dist/classes/data/index.js +2 -2
- package/dist/classes/events/EventEmitter.js +275 -275
- package/dist/classes/events/index.js +2 -2
- package/dist/classes/index.js +4 -4
- package/dist/classes/logging/Logger.js +210 -210
- package/dist/classes/logging/constants.js +16 -16
- package/dist/classes/logging/index.js +4 -4
- package/dist/classes/logging/typedef.js +17 -17
- package/dist/classes/promise/HkPromise.js +377 -377
- package/dist/classes/promise/index.js +1 -1
- package/dist/classes/services/ServiceBase.js +463 -463
- package/dist/classes/services/ServiceManager.js +614 -614
- package/dist/classes/services/index.js +5 -5
- package/dist/classes/services/service-states.js +205 -205
- package/dist/classes/services/typedef.js +179 -179
- 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 +110 -110
- package/dist/classes/streams/TimeStampSource.js +26 -26
- package/dist/classes/streams/index.js +3 -3
- package/dist/classes/svelte/audio/AudioLoader.svelte.js +58 -58
- package/dist/classes/svelte/audio/AudioScene.svelte.js +324 -324
- package/dist/classes/svelte/audio/mocks.js +35 -35
- 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/image/ImageLoader.svelte.js +45 -45
- package/dist/classes/svelte/image/ImageScene.svelte.js +249 -249
- package/dist/classes/svelte/image/ImageVariantsLoader.svelte.js +152 -152
- package/dist/classes/svelte/image/index.js +4 -4
- package/dist/classes/svelte/image/mocks.js +35 -35
- package/dist/classes/svelte/image/typedef.js +8 -8
- package/dist/classes/svelte/index.js +14 -14
- 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/classes/svelte/network-loader/NetworkLoader.svelte.js +338 -338
- package/dist/classes/svelte/network-loader/constants.js +3 -3
- package/dist/classes/svelte/network-loader/index.js +3 -3
- package/dist/classes/svelte/network-loader/mocks.js +30 -30
- package/dist/classes/svelte/network-loader/typedef.js +8 -8
- package/dist/components/area/HkArea.svelte +49 -49
- package/dist/components/area/HkGridArea.svelte +77 -77
- package/dist/components/area/index.js +2 -2
- package/dist/components/buttons/button/Button.svelte +82 -82
- package/dist/components/buttons/button-icon-steeze/SteezeIconButton.svelte +30 -30
- package/dist/components/buttons/button-text/TextButton.svelte +21 -21
- package/dist/components/buttons/index.js +3 -3
- package/dist/components/debug/debug-panel-design-scaling/DebugPanelDesignScaling.svelte +146 -146
- package/dist/components/debug/index.js +1 -1
- package/dist/components/drag-drop/DragController.js +44 -44
- package/dist/components/drag-drop/DragDropContext.svelte +111 -111
- package/dist/components/drag-drop/Draggable.svelte +519 -519
- package/dist/components/drag-drop/{Dropzone.svelte → DropZone.svelte} +258 -258
- package/dist/components/drag-drop/DropZoneArea.svelte +119 -119
- package/dist/components/drag-drop/DropZoneList.svelte +125 -125
- package/dist/components/drag-drop/actions.js +26 -26
- package/dist/components/drag-drop/drag-state.svelte.js +322 -322
- package/dist/components/drag-drop/index.js +7 -7
- package/dist/components/drag-drop/util.js +85 -85
- package/dist/components/hkdev/blocks/TextBlock.svelte +46 -46
- package/dist/components/hkdev/buttons/CheckButton.svelte +62 -62
- package/dist/components/icons/HkIcon.svelte +86 -86
- package/dist/components/icons/HkTabIcon.svelte +116 -116
- package/dist/components/icons/SteezeIcon.svelte +97 -97
- package/dist/components/icons/index.js +6 -6
- package/dist/components/icons/typedef.js +16 -16
- package/dist/components/index.js +2 -2
- package/dist/components/inputs/index.js +1 -1
- package/dist/components/inputs/text-input/TestTextInput.svelte__ +102 -102
- package/dist/components/inputs/text-input/TextInput.svelte +223 -223
- package/dist/components/inputs/text-input/TextInput.svelte___ +83 -83
- package/dist/components/inputs/text-input/assets/IconInvalid.svelte +14 -14
- package/dist/components/inputs/text-input/assets/IconValid.svelte +12 -12
- package/dist/components/layout/grid-layers/GridLayers.svelte +63 -63
- package/dist/components/layout/grid-layers/GridLayers.svelte__heightFrom__ +372 -0
- package/dist/components/layout/grid-layers/util.js +74 -74
- package/dist/components/layout/index.js +1 -1
- package/dist/components/panels/index.js +1 -1
- package/dist/components/panels/panel/Panel.svelte +43 -43
- package/dist/components/rows/index.js +3 -3
- package/dist/components/rows/panel-grid-row/PanelGridRow.svelte +104 -104
- package/dist/components/rows/panel-row-2/PanelRow2.svelte +40 -40
- package/dist/components/tab-bar/HkTabBar.state.svelte.js +149 -149
- package/dist/components/tab-bar/HkTabBar.svelte +74 -74
- package/dist/components/tab-bar/HkTabBarSelector.state.svelte.js +93 -93
- package/dist/components/tab-bar/HkTabBarSelector.svelte +49 -49
- package/dist/components/tab-bar/index.js +17 -17
- package/dist/components/tab-bar/typedef.js +11 -11
- package/dist/config/imagetools-config.js +189 -189
- package/dist/config/imagetools.d.ts +72 -72
- package/dist/constants/bases.js +13 -13
- package/dist/constants/errors/api.js +9 -9
- package/dist/constants/errors/generic.js +5 -5
- package/dist/constants/errors/index.js +3 -3
- package/dist/constants/errors/jwt.js +5 -5
- 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 +3 -3
- 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/index.js +31 -31
- package/dist/constants/regexp/inspiratie.js__ +95 -95
- package/dist/constants/regexp/text.js +49 -49
- package/dist/constants/regexp/user.js +32 -32
- package/dist/constants/regexp/web.js +3 -3
- package/dist/constants/state-labels/drag-states.js +6 -6
- package/dist/constants/state-labels/drop-states.js +6 -6
- package/dist/constants/state-labels/input-states.js +11 -11
- package/dist/constants/state-labels/submit-states.js +4 -4
- package/dist/constants/time.js +28 -28
- package/dist/css/utilities.css +43 -43
- package/dist/design/design-config.js +73 -73
- package/dist/design/tailwind-theme-extend.js +158 -158
- package/dist/features/button-group/ButtonGroup.svelte +82 -82
- package/dist/features/button-group/typedef.js +10 -10
- package/dist/features/compare-left-right/CompareLeftRight.svelte +179 -179
- package/dist/features/compare-left-right/index.js +1 -1
- package/dist/features/game-box/GameBox.svelte +577 -577
- package/dist/features/game-box/gamebox.util.js +83 -83
- package/dist/features/hk-app-layout/HkAppLayout.state.svelte.js +25 -25
- package/dist/features/hk-app-layout/HkAppLayout.svelte +251 -251
- package/dist/features/image-box/ImageBox.svelte +210 -210
- package/dist/features/image-box/index.js +5 -5
- package/dist/features/image-box/typedef.js +32 -32
- package/dist/features/index.js +23 -23
- package/dist/features/presenter/ImageSlide.svelte +64 -64
- package/dist/features/presenter/Presenter.state.svelte.js +638 -638
- package/dist/features/presenter/Presenter.svelte +142 -142
- package/dist/features/presenter/constants.js +7 -7
- package/dist/features/presenter/index.js +10 -10
- package/dist/features/presenter/typedef.js +106 -106
- package/dist/features/presenter/util.js +210 -210
- package/dist/features/virtual-viewport/VirtualViewport.svelte +196 -196
- package/dist/logging/adapters/console.js +114 -114
- package/dist/logging/adapters/pino.js +60 -60
- package/dist/logging/constants.js +1 -1
- package/dist/logging/factories/client.js +21 -21
- package/dist/logging/factories/server.js +22 -22
- package/dist/logging/factories/universal.js +23 -23
- package/dist/logging/index.js +8 -8
- package/dist/schemas/index.js +1 -1
- package/dist/schemas/validate-url.js +180 -180
- package/dist/server/index.js +1 -1
- package/dist/server/logger.js +94 -94
- 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/themes/hkdev/components/blocks/text-block.css +34 -34
- package/dist/themes/hkdev/components/boxes/game-box.css +11 -11
- package/dist/themes/hkdev/components/buttons/button-icon-steeze.css +22 -22
- package/dist/themes/hkdev/components/buttons/button-text.css +32 -32
- package/dist/themes/hkdev/components/buttons/button.css +146 -146
- package/dist/themes/hkdev/components/buttons/skip-button.css +5 -5
- package/dist/themes/hkdev/components/drag-drop/draggable.css +73 -73
- package/dist/themes/hkdev/components/drag-drop/drop-zone.css +58 -58
- package/dist/themes/hkdev/components/icons/icon-steeze.css +15 -15
- package/dist/themes/hkdev/components/inputs/text-input.css +102 -102
- package/dist/themes/hkdev/components/panels/panel.css +25 -25
- package/dist/themes/hkdev/components/rows/panel-grid-row.css +4 -4
- package/dist/themes/hkdev/components/rows/panel-row-2.css +5 -5
- package/dist/themes/hkdev/components.css +29 -29
- package/dist/themes/hkdev/debug.css +1 -1
- package/dist/themes/hkdev/global/layout.css +32 -32
- package/dist/themes/hkdev/global/on-colors.css +32 -32
- package/dist/themes/hkdev/globals.css +3 -3
- package/dist/themes/hkdev/responsive.css +12 -12
- package/dist/themes/hkdev/theme-ext.js +12 -12
- package/dist/themes/hkdev/theme.css +218 -218
- package/dist/themes/index.js +1 -1
- package/dist/typedef/context.js +6 -6
- package/dist/typedef/drag.js +25 -25
- package/dist/typedef/drop.js +12 -12
- package/dist/typedef/image.js +38 -38
- package/dist/typedef/index.js +4 -4
- 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/design-system/components/states.js +22 -22
- package/dist/util/design-system/css/clamp.js +66 -66
- package/dist/util/design-system/css/root-design-vars.js +102 -102
- package/dist/util/design-system/index.js +5 -5
- package/dist/util/design-system/layout/scaling.js +228 -228
- package/dist/util/design-system/skeleton.js +208 -208
- package/dist/util/design-system/tailwind.js +288 -288
- package/dist/util/env/index.js +9 -9
- package/dist/util/exceptions/index.d.ts +11 -0
- package/dist/util/exceptions/index.js +17 -0
- 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/http/caching.js +263 -263
- package/dist/util/http/errors.js +97 -97
- package/dist/util/http/headers.js +75 -75
- package/dist/util/http/http-request.js +578 -578
- package/dist/util/http/index.js +22 -22
- package/dist/util/http/json-request.js +224 -224
- package/dist/util/http/mocks.js +65 -65
- package/dist/util/http/response.js +294 -294
- package/dist/util/http/test-data__/content-length-test-hkdigital-small.V4HfZyBQ.avif +0 -0
- package/dist/util/http/typedef.js +93 -93
- package/dist/util/http/url.js +52 -52
- package/dist/util/image/index.js +86 -86
- package/dist/util/index.d.ts +1 -0
- package/dist/util/index.js +3 -2
- package/dist/util/is/index.js +140 -140
- package/dist/util/iterate/index.js +234 -234
- package/dist/util/object/index.js +1361 -1361
- 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 +323 -323
- package/dist/util/unique/index.js +249 -249
- package/dist/valibot/date.js__ +10 -10
- package/dist/valibot/index.js +9 -9
- package/dist/valibot/url.js +95 -95
- package/dist/valibot/user.js +23 -23
- package/dist/zod/all.js +33 -33
- package/dist/zod/generic.js +11 -11
- package/dist/zod/javascript.js +32 -32
- package/dist/zod/user.js +16 -16
- package/dist/zod/web.js +52 -52
- package/package.json +133 -132
@@ -1,5 +1,5 @@
|
|
1
|
-
export { default as ServiceBase } from './ServiceBase.js';
|
2
|
-
export { default as ServiceManager } from './ServiceManager.js';
|
3
|
-
|
4
|
-
export * from './service-states.js';
|
5
|
-
export * from './typedef.js';
|
1
|
+
export { default as ServiceBase } from './ServiceBase.js';
|
2
|
+
export { default as ServiceManager } from './ServiceManager.js';
|
3
|
+
|
4
|
+
export * from './service-states.js';
|
5
|
+
export * from './typedef.js';
|
@@ -1,205 +1,205 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview Service state constants for the service management system.
|
3
|
-
*
|
4
|
-
* Defines all possible states a service can be in during its lifecycle.
|
5
|
-
* Services transition through these states as they are initialized, started,
|
6
|
-
* stopped, and handle errors or recovery.
|
7
|
-
*
|
8
|
-
* @example
|
9
|
-
* // Using state constants in a service
|
10
|
-
* import { RUNNING, ERROR } from './service-states.js';
|
11
|
-
*
|
12
|
-
* class MyService extends ServiceBase {
|
13
|
-
* async doWork() {
|
14
|
-
* if (this.state !== RUNNING) {
|
15
|
-
* throw new Error('Service not running');
|
16
|
-
* }
|
17
|
-
* // ... do work
|
18
|
-
* }
|
19
|
-
* }
|
20
|
-
*
|
21
|
-
* @example
|
22
|
-
* // Checking service states
|
23
|
-
* import { RUNNING, ERROR, STOPPED } from './service-states.js';
|
24
|
-
*
|
25
|
-
* const service = serviceManager.get('database');
|
26
|
-
*
|
27
|
-
* switch (service.state) {
|
28
|
-
* case RUNNING:
|
29
|
-
* console.log('Service is operational');
|
30
|
-
* break;
|
31
|
-
* case ERROR:
|
32
|
-
* console.log('Service has failed');
|
33
|
-
* break;
|
34
|
-
* case STOPPED:
|
35
|
-
* console.log('Service is stopped');
|
36
|
-
* break;
|
37
|
-
* }
|
38
|
-
*/
|
39
|
-
|
40
|
-
/**
|
41
|
-
* Service has not been created yet
|
42
|
-
* @const {string}
|
43
|
-
*/
|
44
|
-
export const NOT_CREATED = 'not-created';
|
45
|
-
|
46
|
-
/**
|
47
|
-
* Service has been created but not initialized
|
48
|
-
* @const {string}
|
49
|
-
*/
|
50
|
-
export const CREATED = 'created';
|
51
|
-
|
52
|
-
/**
|
53
|
-
* Service is currently initializing
|
54
|
-
* @const {string}
|
55
|
-
*/
|
56
|
-
export const INITIALIZING = 'initializing';
|
57
|
-
|
58
|
-
/**
|
59
|
-
* Service has been initialized and is ready to start
|
60
|
-
* @const {string}
|
61
|
-
*/
|
62
|
-
export const INITIALIZED = 'initialized';
|
63
|
-
|
64
|
-
/**
|
65
|
-
* Service is currently starting up
|
66
|
-
* @const {string}
|
67
|
-
*/
|
68
|
-
export const STARTING = 'starting';
|
69
|
-
|
70
|
-
/**
|
71
|
-
* Service is running and operational
|
72
|
-
* @const {string}
|
73
|
-
*/
|
74
|
-
export const RUNNING = 'running';
|
75
|
-
|
76
|
-
/**
|
77
|
-
* Service is currently shutting down
|
78
|
-
* @const {string}
|
79
|
-
*/
|
80
|
-
export const STOPPING = 'stopping';
|
81
|
-
|
82
|
-
/**
|
83
|
-
* Service has been stopped
|
84
|
-
* @const {string}
|
85
|
-
*/
|
86
|
-
export const STOPPED = 'stopped';
|
87
|
-
|
88
|
-
/**
|
89
|
-
* Service is being destroyed and cleaned up
|
90
|
-
* @const {string}
|
91
|
-
*/
|
92
|
-
export const DESTROYING = 'destroying';
|
93
|
-
|
94
|
-
/**
|
95
|
-
* Service has been destroyed and cannot be used
|
96
|
-
* @const {string}
|
97
|
-
*/
|
98
|
-
export const DESTROYED = 'destroyed';
|
99
|
-
|
100
|
-
/**
|
101
|
-
* Service encountered an error and is not operational
|
102
|
-
* @const {string}
|
103
|
-
*/
|
104
|
-
export const ERROR = 'error';
|
105
|
-
|
106
|
-
/**
|
107
|
-
* Service is attempting to recover from an error
|
108
|
-
* @const {string}
|
109
|
-
*/
|
110
|
-
export const RECOVERING = 'recovering';
|
111
|
-
|
112
|
-
/**
|
113
|
-
* Valid state transitions map
|
114
|
-
* Maps each state to the states it can transition to
|
115
|
-
* @const {Object<string, string[]>}
|
116
|
-
*/
|
117
|
-
export const VALID_TRANSITIONS = {
|
118
|
-
[CREATED]: [INITIALIZING, DESTROYING],
|
119
|
-
[INITIALIZING]: [INITIALIZED, ERROR, DESTROYING],
|
120
|
-
[INITIALIZED]: [STARTING, DESTROYING],
|
121
|
-
[STARTING]: [RUNNING, ERROR, STOPPING],
|
122
|
-
[RUNNING]: [STOPPING, ERROR],
|
123
|
-
[STOPPING]: [STOPPED, ERROR],
|
124
|
-
[STOPPED]: [STARTING, DESTROYING, INITIALIZING],
|
125
|
-
[DESTROYING]: [DESTROYED, ERROR],
|
126
|
-
[DESTROYED]: [CREATED], // Can be recreated
|
127
|
-
[ERROR]: [RECOVERING, STOPPING, DESTROYING],
|
128
|
-
[RECOVERING]: [RUNNING, STOPPED, ERROR]
|
129
|
-
};
|
130
|
-
|
131
|
-
/**
|
132
|
-
* States that indicate the service is operational
|
133
|
-
* @const {string[]}
|
134
|
-
*/
|
135
|
-
export const OPERATIONAL_STATES = [RUNNING];
|
136
|
-
|
137
|
-
/**
|
138
|
-
* States that indicate the service is transitioning
|
139
|
-
* @const {string[]}
|
140
|
-
*/
|
141
|
-
export const TRANSITIONAL_STATES = [
|
142
|
-
INITIALIZING,
|
143
|
-
STARTING,
|
144
|
-
STOPPING,
|
145
|
-
DESTROYING,
|
146
|
-
RECOVERING
|
147
|
-
];
|
148
|
-
|
149
|
-
/**
|
150
|
-
* States that indicate the service is not operational
|
151
|
-
* @const {string[]}
|
152
|
-
*/
|
153
|
-
export const INACTIVE_STATES = [
|
154
|
-
CREATED,
|
155
|
-
INITIALIZED,
|
156
|
-
STOPPED,
|
157
|
-
DESTROYED,
|
158
|
-
ERROR
|
159
|
-
];
|
160
|
-
|
161
|
-
/**
|
162
|
-
* Check if a state transition is valid
|
163
|
-
*
|
164
|
-
* @param {string} fromState - Current state
|
165
|
-
* @param {string} toState - Desired state
|
166
|
-
*
|
167
|
-
* @returns {boolean} True if transition is valid
|
168
|
-
*/
|
169
|
-
export function isValidTransition(fromState, toState) {
|
170
|
-
const validStates = VALID_TRANSITIONS[fromState];
|
171
|
-
return validStates ? validStates.includes(toState) : false;
|
172
|
-
}
|
173
|
-
|
174
|
-
/**
|
175
|
-
* Check if a service is in an operational state
|
176
|
-
*
|
177
|
-
* @param {string} state - Current state
|
178
|
-
*
|
179
|
-
* @returns {boolean} True if operational
|
180
|
-
*/
|
181
|
-
export function isOperational(state) {
|
182
|
-
return OPERATIONAL_STATES.includes(state);
|
183
|
-
}
|
184
|
-
|
185
|
-
/**
|
186
|
-
* Check if a service is in a transitional state
|
187
|
-
*
|
188
|
-
* @param {string} state - Current state
|
189
|
-
*
|
190
|
-
* @returns {boolean} True if transitioning
|
191
|
-
*/
|
192
|
-
export function isTransitioning(state) {
|
193
|
-
return TRANSITIONAL_STATES.includes(state);
|
194
|
-
}
|
195
|
-
|
196
|
-
/**
|
197
|
-
* Check if a service is in an inactive state
|
198
|
-
*
|
199
|
-
* @param {string} state - Current state
|
200
|
-
*
|
201
|
-
* @returns {boolean} True if inactive
|
202
|
-
*/
|
203
|
-
export function isInactive(state) {
|
204
|
-
return INACTIVE_STATES.includes(state);
|
205
|
-
}
|
1
|
+
/**
|
2
|
+
* @fileoverview Service state constants for the service management system.
|
3
|
+
*
|
4
|
+
* Defines all possible states a service can be in during its lifecycle.
|
5
|
+
* Services transition through these states as they are initialized, started,
|
6
|
+
* stopped, and handle errors or recovery.
|
7
|
+
*
|
8
|
+
* @example
|
9
|
+
* // Using state constants in a service
|
10
|
+
* import { RUNNING, ERROR } from './service-states.js';
|
11
|
+
*
|
12
|
+
* class MyService extends ServiceBase {
|
13
|
+
* async doWork() {
|
14
|
+
* if (this.state !== RUNNING) {
|
15
|
+
* throw new Error('Service not running');
|
16
|
+
* }
|
17
|
+
* // ... do work
|
18
|
+
* }
|
19
|
+
* }
|
20
|
+
*
|
21
|
+
* @example
|
22
|
+
* // Checking service states
|
23
|
+
* import { RUNNING, ERROR, STOPPED } from './service-states.js';
|
24
|
+
*
|
25
|
+
* const service = serviceManager.get('database');
|
26
|
+
*
|
27
|
+
* switch (service.state) {
|
28
|
+
* case RUNNING:
|
29
|
+
* console.log('Service is operational');
|
30
|
+
* break;
|
31
|
+
* case ERROR:
|
32
|
+
* console.log('Service has failed');
|
33
|
+
* break;
|
34
|
+
* case STOPPED:
|
35
|
+
* console.log('Service is stopped');
|
36
|
+
* break;
|
37
|
+
* }
|
38
|
+
*/
|
39
|
+
|
40
|
+
/**
|
41
|
+
* Service has not been created yet
|
42
|
+
* @const {string}
|
43
|
+
*/
|
44
|
+
export const NOT_CREATED = 'not-created';
|
45
|
+
|
46
|
+
/**
|
47
|
+
* Service has been created but not initialized
|
48
|
+
* @const {string}
|
49
|
+
*/
|
50
|
+
export const CREATED = 'created';
|
51
|
+
|
52
|
+
/**
|
53
|
+
* Service is currently initializing
|
54
|
+
* @const {string}
|
55
|
+
*/
|
56
|
+
export const INITIALIZING = 'initializing';
|
57
|
+
|
58
|
+
/**
|
59
|
+
* Service has been initialized and is ready to start
|
60
|
+
* @const {string}
|
61
|
+
*/
|
62
|
+
export const INITIALIZED = 'initialized';
|
63
|
+
|
64
|
+
/**
|
65
|
+
* Service is currently starting up
|
66
|
+
* @const {string}
|
67
|
+
*/
|
68
|
+
export const STARTING = 'starting';
|
69
|
+
|
70
|
+
/**
|
71
|
+
* Service is running and operational
|
72
|
+
* @const {string}
|
73
|
+
*/
|
74
|
+
export const RUNNING = 'running';
|
75
|
+
|
76
|
+
/**
|
77
|
+
* Service is currently shutting down
|
78
|
+
* @const {string}
|
79
|
+
*/
|
80
|
+
export const STOPPING = 'stopping';
|
81
|
+
|
82
|
+
/**
|
83
|
+
* Service has been stopped
|
84
|
+
* @const {string}
|
85
|
+
*/
|
86
|
+
export const STOPPED = 'stopped';
|
87
|
+
|
88
|
+
/**
|
89
|
+
* Service is being destroyed and cleaned up
|
90
|
+
* @const {string}
|
91
|
+
*/
|
92
|
+
export const DESTROYING = 'destroying';
|
93
|
+
|
94
|
+
/**
|
95
|
+
* Service has been destroyed and cannot be used
|
96
|
+
* @const {string}
|
97
|
+
*/
|
98
|
+
export const DESTROYED = 'destroyed';
|
99
|
+
|
100
|
+
/**
|
101
|
+
* Service encountered an error and is not operational
|
102
|
+
* @const {string}
|
103
|
+
*/
|
104
|
+
export const ERROR = 'error';
|
105
|
+
|
106
|
+
/**
|
107
|
+
* Service is attempting to recover from an error
|
108
|
+
* @const {string}
|
109
|
+
*/
|
110
|
+
export const RECOVERING = 'recovering';
|
111
|
+
|
112
|
+
/**
|
113
|
+
* Valid state transitions map
|
114
|
+
* Maps each state to the states it can transition to
|
115
|
+
* @const {Object<string, string[]>}
|
116
|
+
*/
|
117
|
+
export const VALID_TRANSITIONS = {
|
118
|
+
[CREATED]: [INITIALIZING, DESTROYING],
|
119
|
+
[INITIALIZING]: [INITIALIZED, ERROR, DESTROYING],
|
120
|
+
[INITIALIZED]: [STARTING, DESTROYING],
|
121
|
+
[STARTING]: [RUNNING, ERROR, STOPPING],
|
122
|
+
[RUNNING]: [STOPPING, ERROR],
|
123
|
+
[STOPPING]: [STOPPED, ERROR],
|
124
|
+
[STOPPED]: [STARTING, DESTROYING, INITIALIZING],
|
125
|
+
[DESTROYING]: [DESTROYED, ERROR],
|
126
|
+
[DESTROYED]: [CREATED], // Can be recreated
|
127
|
+
[ERROR]: [RECOVERING, STOPPING, DESTROYING],
|
128
|
+
[RECOVERING]: [RUNNING, STOPPED, ERROR]
|
129
|
+
};
|
130
|
+
|
131
|
+
/**
|
132
|
+
* States that indicate the service is operational
|
133
|
+
* @const {string[]}
|
134
|
+
*/
|
135
|
+
export const OPERATIONAL_STATES = [RUNNING];
|
136
|
+
|
137
|
+
/**
|
138
|
+
* States that indicate the service is transitioning
|
139
|
+
* @const {string[]}
|
140
|
+
*/
|
141
|
+
export const TRANSITIONAL_STATES = [
|
142
|
+
INITIALIZING,
|
143
|
+
STARTING,
|
144
|
+
STOPPING,
|
145
|
+
DESTROYING,
|
146
|
+
RECOVERING
|
147
|
+
];
|
148
|
+
|
149
|
+
/**
|
150
|
+
* States that indicate the service is not operational
|
151
|
+
* @const {string[]}
|
152
|
+
*/
|
153
|
+
export const INACTIVE_STATES = [
|
154
|
+
CREATED,
|
155
|
+
INITIALIZED,
|
156
|
+
STOPPED,
|
157
|
+
DESTROYED,
|
158
|
+
ERROR
|
159
|
+
];
|
160
|
+
|
161
|
+
/**
|
162
|
+
* Check if a state transition is valid
|
163
|
+
*
|
164
|
+
* @param {string} fromState - Current state
|
165
|
+
* @param {string} toState - Desired state
|
166
|
+
*
|
167
|
+
* @returns {boolean} True if transition is valid
|
168
|
+
*/
|
169
|
+
export function isValidTransition(fromState, toState) {
|
170
|
+
const validStates = VALID_TRANSITIONS[fromState];
|
171
|
+
return validStates ? validStates.includes(toState) : false;
|
172
|
+
}
|
173
|
+
|
174
|
+
/**
|
175
|
+
* Check if a service is in an operational state
|
176
|
+
*
|
177
|
+
* @param {string} state - Current state
|
178
|
+
*
|
179
|
+
* @returns {boolean} True if operational
|
180
|
+
*/
|
181
|
+
export function isOperational(state) {
|
182
|
+
return OPERATIONAL_STATES.includes(state);
|
183
|
+
}
|
184
|
+
|
185
|
+
/**
|
186
|
+
* Check if a service is in a transitional state
|
187
|
+
*
|
188
|
+
* @param {string} state - Current state
|
189
|
+
*
|
190
|
+
* @returns {boolean} True if transitioning
|
191
|
+
*/
|
192
|
+
export function isTransitioning(state) {
|
193
|
+
return TRANSITIONAL_STATES.includes(state);
|
194
|
+
}
|
195
|
+
|
196
|
+
/**
|
197
|
+
* Check if a service is in an inactive state
|
198
|
+
*
|
199
|
+
* @param {string} state - Current state
|
200
|
+
*
|
201
|
+
* @returns {boolean} True if inactive
|
202
|
+
*/
|
203
|
+
export function isInactive(state) {
|
204
|
+
return INACTIVE_STATES.includes(state);
|
205
|
+
}
|