@hkdigital/lib-core 0.4.30 → 0.4.32
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/dist/auth/jwt/constants.d.ts +1 -1
- package/dist/auth/jwt/errors.d.ts +5 -5
- package/dist/auth/jwt/typedef.d.ts +30 -30
- package/dist/config/generators/imagetools.d.ts +3 -3
- package/dist/config/generators/vite.d.ts +11 -11
- package/dist/config/generators/vite.js +1 -1
- package/dist/design/generators/index.d.ts +9 -9
- package/dist/design/utils/clamp.d.ts +1 -1
- package/dist/design/utils/root-vars.d.ts +1 -1
- package/dist/design/utils/scaling.d.ts +2 -2
- package/dist/generic/data/classes/IterableTree.d.ts +2 -2
- package/dist/generic/data/classes/IterableTree.js +1 -0
- package/dist/generic/data/classes/Selector.d.ts +5 -5
- package/dist/generic/data/classes/Selector.js +53 -60
- package/dist/generic/data/classes/typedef.d.ts +5 -5
- package/dist/generic/errors/generic.d.ts +3 -1
- package/dist/generic/errors/promise.d.ts +2 -2
- package/dist/generic/events/classes/EventEmitter.js +1 -0
- package/dist/generic/promises/classes/HkPromise.js +9 -15
- package/dist/logging/internal/adapters/console.d.ts +5 -5
- package/dist/logging/internal/adapters/pino.d.ts +3 -3
- package/dist/logging/internal/adapters/typedef.d.ts +7 -7
- package/dist/logging/internal/factories/client.d.ts +1 -1
- package/dist/logging/internal/factories/server.d.ts +1 -1
- package/dist/logging/internal/logger/Logger.d.ts +3 -3
- package/dist/logging/internal/transports/pretty-transport.d.ts +3 -3
- package/dist/logging/internal/transports/test-transport.d.ts +5 -5
- package/dist/logging/typedef.d.ts +1 -1
- package/dist/network/cache/IndexedDbCache.d.ts +10 -10
- package/dist/network/cache/MemoryResponseCache.d.ts +3 -3
- package/dist/network/cache/typedef.d.ts +3 -3
- package/dist/network/errors/http.d.ts +2 -2
- package/dist/network/http/caching.d.ts +2 -2
- package/dist/network/http/http-request.d.ts +1 -1
- package/dist/network/http/typedef.d.ts +31 -31
- package/dist/network/loaders/audio/AudioScene.svelte.d.ts +2 -2
- package/dist/network/loaders/base/SceneBase.svelte.d.ts +4 -4
- package/dist/network/loaders/base/SceneBase.svelte.js +1 -1
- package/dist/network/loaders/image/ImageLoader.svelte.d.ts +1 -1
- package/dist/network/loaders/image/ImageVariantsLoader.svelte.d.ts +5 -5
- package/dist/network/loaders/image/utils/index.d.ts +3 -3
- package/dist/services/manager-plugins/ConfigPlugin.d.ts +1 -1
- package/dist/services/service-base/ServiceBase.d.ts +13 -3
- package/dist/services/service-base/ServiceBase.js +27 -9
- package/dist/services/service-base/typedef.d.ts +8 -8
- package/dist/services/service-manager/ServiceManager.d.ts +10 -2
- package/dist/services/service-manager/ServiceManager.js +55 -27
- package/dist/services/service-manager/typedef.d.ts +12 -11
- package/dist/services/service-manager/typedef.js +2 -1
- package/dist/state/machines/finite-state-machine/FiniteStateMachine.svelte.d.ts +1 -1
- package/dist/state/machines/loading-state-machine/LoadingStateMachine.svelte.d.ts +1 -1
- package/dist/state/stores/theme.d.ts +1 -1
- package/dist/ui/components/button-group/ButtonGroup.svelte.d.ts +7 -7
- package/dist/ui/components/button-group/typedef.d.ts +1 -1
- package/dist/ui/components/compare-left-right/CompareLeftRight.svelte.d.ts +5 -5
- package/dist/ui/components/drag-drop/DragController.d.ts +1 -1
- package/dist/ui/components/drag-drop/DragDropContext.svelte.d.ts +3 -3
- package/dist/ui/components/drag-drop/Draggable.svelte.d.ts +20 -20
- package/dist/ui/components/drag-drop/DropZone.svelte.d.ts +27 -27
- package/dist/ui/components/drag-drop/DropZoneArea.svelte.d.ts +26 -26
- package/dist/ui/components/drag-drop/DropZoneList.svelte.d.ts +27 -27
- package/dist/ui/components/drag-drop/drag-state.svelte.d.ts +4 -4
- package/dist/ui/components/drag-drop/typedef/drag.d.ts +1 -1
- package/dist/ui/components/game-box/GameBox.svelte.d.ts +19 -19
- package/dist/ui/components/game-box/gamebox.util.d.ts +2 -2
- package/dist/ui/components/grid-layers/GridLayers.svelte.d.ts +7 -7
- package/dist/ui/components/image-box/ImageBox.svelte.d.ts +14 -14
- package/dist/ui/components/presenter/ImageSlide.svelte.d.ts +8 -8
- package/dist/ui/components/presenter/Presenter.state.svelte.d.ts +1 -1
- package/dist/ui/components/presenter/Presenter.svelte.d.ts +5 -5
- package/dist/ui/components/presenter/typedef.d.ts +13 -13
- package/dist/ui/components/rows/panel-grid-row/PanelGridRow.svelte.d.ts +7 -7
- package/dist/ui/components/rows/panel-row-2/PanelRow2.svelte.d.ts +7 -7
- package/dist/ui/components/tab-bar/HkTabBar.svelte.d.ts +10 -10
- package/dist/ui/components/tab-bar/HkTabBarSelector.state.svelte.d.ts +1 -1
- package/dist/ui/components/tab-bar/HkTabBarSelector.svelte.d.ts +10 -10
- package/dist/ui/components/tab-bar/typedef.d.ts +3 -3
- package/dist/ui/components/virtual-viewport/VirtualViewport.svelte.d.ts +17 -17
- package/dist/ui/dev/blocks/TextBlock.svelte.d.ts +6 -6
- package/dist/ui/dev/buttons/CheckButton.svelte.d.ts +11 -11
- package/dist/ui/primitives/area/HkArea.svelte.d.ts +6 -6
- package/dist/ui/primitives/area/HkGridArea.svelte.d.ts +12 -12
- package/dist/ui/primitives/buttons/button/Button.svelte.d.ts +16 -16
- package/dist/ui/primitives/buttons/button-icon-steeze/SteezeIconButton.svelte.d.ts +2 -2
- package/dist/ui/primitives/buttons/button-submit/SubmitButton.svelte +21 -0
- package/dist/ui/primitives/buttons/button-submit/SubmitButton.svelte.d.ts +12 -0
- package/dist/ui/primitives/buttons/index.d.ts +2 -1
- package/dist/ui/primitives/buttons/index.js +2 -1
- package/dist/ui/primitives/icons/HkIcon.svelte.d.ts +4 -4
- package/dist/ui/primitives/icons/HkTabIcon.svelte.d.ts +13 -13
- package/dist/ui/primitives/icons/SteezeIcon.svelte.d.ts +4 -4
- package/dist/ui/primitives/inputs/text-input/TextInput.svelte.d.ts +22 -22
- package/dist/ui/primitives/inputs/text-input/assets/IconInvalid.svelte.d.ts +1 -1
- package/dist/ui/primitives/inputs/text-input/assets/IconValid.svelte.d.ts +1 -1
- package/dist/ui/primitives/panels/panel/Panel.svelte.d.ts +6 -6
- package/dist/util/array/index.d.ts +17 -17
- package/dist/util/array/index.js +5 -5
- package/dist/util/compare/index.d.ts +2 -1
- package/dist/util/compare/index.js +1 -0
- package/dist/util/exceptions/index.d.ts +3 -2
- package/dist/util/exceptions/index.js +13 -9
- package/dist/util/expect/arrays.d.ts +1 -0
- package/dist/util/expect/arrays.js +1 -0
- package/dist/util/expect/primitives.d.ts +18 -0
- package/dist/util/expect/primitives.js +18 -0
- package/dist/util/function/index.d.ts +14 -1
- package/dist/util/geometry/index.d.ts +2 -2
- package/dist/util/geometry/index.js +1 -1
- package/dist/util/iterate/index.d.ts +7 -7
- package/dist/util/object/index.d.ts +13 -13
- package/dist/util/singleton/index.d.ts +3 -3
- package/dist/util/svelte/loading/loading-tracker.svelte.d.ts +1 -1
- package/dist/util/sveltekit/env/all.d.ts +7 -18
- package/dist/util/sveltekit/env/all.js +4 -22
- package/dist/util/sveltekit/env/parsers.d.ts +23 -37
- package/dist/util/sveltekit/env/parsers.js +15 -15
- package/dist/util/sveltekit/env/private.d.ts +9 -11
- package/dist/util/sveltekit/env/private.js +4 -4
- package/dist/util/sveltekit/env/public.d.ts +9 -11
- package/dist/util/sveltekit/env/public.js +3 -3
- package/dist/util/sveltekit/env-all.d.ts +1 -1
- package/dist/util/sveltekit/env-all.js +2 -4
- package/dist/util/sveltekit/route-folders/index.d.ts +2 -2
- package/dist/util/sveltekit/route-folders.d.ts +1 -0
- package/dist/util/{sveltekit.js → sveltekit/route-folders.js} +1 -1
- package/dist/util/time/index.d.ts +4 -4
- package/dist/valibot/parsers/url.d.ts +3 -3
- package/dist/valibot/parsers/url.js +6 -2
- package/package.json +1 -1
- package/dist/util/sveltekit.d.ts +0 -1
|
@@ -85,7 +85,8 @@ import {
|
|
|
85
85
|
* @extends EventEmitter
|
|
86
86
|
*/
|
|
87
87
|
export class ServiceBase extends EventEmitter {
|
|
88
|
-
|
|
88
|
+
|
|
89
|
+
/** @type {Object<string,any>|null} */
|
|
89
90
|
#lastConfig = null;
|
|
90
91
|
|
|
91
92
|
/**
|
|
@@ -97,6 +98,11 @@ export class ServiceBase extends EventEmitter {
|
|
|
97
98
|
constructor(name, options = {}) {
|
|
98
99
|
super();
|
|
99
100
|
|
|
101
|
+
if( typeof name !== 'string' )
|
|
102
|
+
{
|
|
103
|
+
throw new Error(`Service misses constructor parameter [name]`);
|
|
104
|
+
}
|
|
105
|
+
|
|
100
106
|
/** @type {string} */
|
|
101
107
|
this.name = name;
|
|
102
108
|
|
|
@@ -122,7 +128,7 @@ export class ServiceBase extends EventEmitter {
|
|
|
122
128
|
/**
|
|
123
129
|
* Configure the service with configuration
|
|
124
130
|
*
|
|
125
|
-
* @param {
|
|
131
|
+
* @param {Object<string,any>|null} [config={}]
|
|
126
132
|
*
|
|
127
133
|
* @returns {Promise<boolean>} True if configuration succeeded
|
|
128
134
|
*/
|
|
@@ -152,11 +158,20 @@ export class ServiceBase extends EventEmitter {
|
|
|
152
158
|
this.logger.info('Service configured');
|
|
153
159
|
return true;
|
|
154
160
|
} catch (error) {
|
|
155
|
-
this._setError('configuration', error);
|
|
161
|
+
this._setError('configuration', /** @type {Error} */ (error));
|
|
156
162
|
return false;
|
|
157
163
|
}
|
|
158
164
|
}
|
|
159
165
|
|
|
166
|
+
/**
|
|
167
|
+
* Get the last applied config
|
|
168
|
+
*
|
|
169
|
+
* @returns {Object<string,any>} config
|
|
170
|
+
*/
|
|
171
|
+
get lastConfig() {
|
|
172
|
+
return { ...this.#lastConfig };
|
|
173
|
+
}
|
|
174
|
+
|
|
160
175
|
/**
|
|
161
176
|
* Start the service
|
|
162
177
|
*
|
|
@@ -180,7 +195,7 @@ export class ServiceBase extends EventEmitter {
|
|
|
180
195
|
this.logger.info('Service started');
|
|
181
196
|
return true;
|
|
182
197
|
} catch (error) {
|
|
183
|
-
this._setError('startup', error);
|
|
198
|
+
this._setError('startup', /** @type {Error} */ (error));
|
|
184
199
|
return false;
|
|
185
200
|
}
|
|
186
201
|
}
|
|
@@ -224,12 +239,15 @@ export class ServiceBase extends EventEmitter {
|
|
|
224
239
|
this.logger.info('Service stopped');
|
|
225
240
|
return true;
|
|
226
241
|
} catch (error) {
|
|
227
|
-
if (
|
|
242
|
+
if (
|
|
243
|
+
/** @type {Error} */ (error).message === 'Shutdown timeout' &&
|
|
244
|
+
options.force
|
|
245
|
+
) {
|
|
228
246
|
this.logger.warn('Forced shutdown after timeout');
|
|
229
247
|
this._setState(STATE_STOPPED);
|
|
230
248
|
return true;
|
|
231
249
|
}
|
|
232
|
-
this._setError('shutdown', error);
|
|
250
|
+
this._setError('shutdown', /** @type {Error} */ (error));
|
|
233
251
|
return false;
|
|
234
252
|
}
|
|
235
253
|
}
|
|
@@ -267,7 +285,7 @@ export class ServiceBase extends EventEmitter {
|
|
|
267
285
|
this.logger.info('Recovery successful');
|
|
268
286
|
return true;
|
|
269
287
|
} catch (error) {
|
|
270
|
-
this._setError('recovery', error);
|
|
288
|
+
this._setError('recovery', /** @type {Error} */ (error));
|
|
271
289
|
return false;
|
|
272
290
|
}
|
|
273
291
|
}
|
|
@@ -305,7 +323,7 @@ export class ServiceBase extends EventEmitter {
|
|
|
305
323
|
|
|
306
324
|
return true;
|
|
307
325
|
} catch (error) {
|
|
308
|
-
this._setError('destruction', error);
|
|
326
|
+
this._setError('destruction', /** @type {Error} */ (error));
|
|
309
327
|
return false;
|
|
310
328
|
}
|
|
311
329
|
}
|
|
@@ -332,7 +350,7 @@ export class ServiceBase extends EventEmitter {
|
|
|
332
350
|
return {
|
|
333
351
|
...baseHealth,
|
|
334
352
|
healthy: false,
|
|
335
|
-
checkError: error.message
|
|
353
|
+
checkError: /** @type {Error} */ (error).message
|
|
336
354
|
};
|
|
337
355
|
}
|
|
338
356
|
}
|
|
@@ -9,11 +9,11 @@ export type ServiceOptions = {
|
|
|
9
9
|
/**
|
|
10
10
|
* - Initial log level for the service
|
|
11
11
|
*/
|
|
12
|
-
logLevel?: string;
|
|
12
|
+
logLevel?: string | undefined;
|
|
13
13
|
/**
|
|
14
14
|
* - Timeout for graceful shutdown
|
|
15
15
|
*/
|
|
16
|
-
shutdownTimeout?: number;
|
|
16
|
+
shutdownTimeout?: number | undefined;
|
|
17
17
|
};
|
|
18
18
|
/**
|
|
19
19
|
* Options for stopping a service
|
|
@@ -22,11 +22,11 @@ export type StopOptions = {
|
|
|
22
22
|
/**
|
|
23
23
|
* - Override shutdown timeout
|
|
24
24
|
*/
|
|
25
|
-
timeout?: number;
|
|
25
|
+
timeout?: number | undefined;
|
|
26
26
|
/**
|
|
27
27
|
* - Force stop even if timeout exceeded
|
|
28
28
|
*/
|
|
29
|
-
force?: boolean;
|
|
29
|
+
force?: boolean | undefined;
|
|
30
30
|
};
|
|
31
31
|
/**
|
|
32
32
|
* Health status returned by service health checks
|
|
@@ -47,11 +47,11 @@ export type HealthStatus = {
|
|
|
47
47
|
/**
|
|
48
48
|
* - Error message if unhealthy
|
|
49
49
|
*/
|
|
50
|
-
error?: string;
|
|
50
|
+
error?: string | undefined;
|
|
51
51
|
/**
|
|
52
52
|
* - Error from health check itself
|
|
53
53
|
*/
|
|
54
|
-
checkError?: string;
|
|
54
|
+
checkError?: string | undefined;
|
|
55
55
|
/**
|
|
56
56
|
* - Additional health check properties
|
|
57
57
|
*/
|
|
@@ -61,7 +61,7 @@ export type HealthStatus = {
|
|
|
61
61
|
* Base class interface that services must implement
|
|
62
62
|
* Allows additional custom properties and methods via Record<string, any>
|
|
63
63
|
*/
|
|
64
|
-
export type ServiceInstance =
|
|
64
|
+
export type ServiceInstance = Object & Record<string, any>;
|
|
65
65
|
export type StateChangeEvent = {
|
|
66
66
|
/**
|
|
67
67
|
* - Service name (added by ServiceManager)
|
|
@@ -94,7 +94,7 @@ export type HealthChangeEvent = {
|
|
|
94
94
|
/**
|
|
95
95
|
* - Previous health status
|
|
96
96
|
*/
|
|
97
|
-
wasHealthy?: boolean;
|
|
97
|
+
wasHealthy?: boolean | undefined;
|
|
98
98
|
};
|
|
99
99
|
/**
|
|
100
100
|
* Event emitted when service encounters an error
|
|
@@ -7,6 +7,10 @@
|
|
|
7
7
|
* @typedef {import('./typedef.js').HealthCheckResult} HealthCheckResult
|
|
8
8
|
*
|
|
9
9
|
* @typedef {import('../service-base/typedef.js').StopOptions} StopOptions
|
|
10
|
+
* @typedef {import('../service-base/typedef.js').StateChangeEvent} StateChangeEvent
|
|
11
|
+
* @typedef {import('../service-base/typedef.js').HealthChangeEvent} HealthChangeEvent
|
|
12
|
+
* @typedef {import('../service-base/typedef.js').ServiceErrorEvent} ServiceErrorEvent
|
|
13
|
+
* @typedef {import('../../logging/typedef.js').LogEvent} LogEvent
|
|
10
14
|
*/
|
|
11
15
|
/**
|
|
12
16
|
* Service Manager for lifecycle and dependency management
|
|
@@ -131,11 +135,11 @@ export class ServiceManager extends EventEmitter {
|
|
|
131
135
|
/**
|
|
132
136
|
* Listen to log messages emitted by individual services
|
|
133
137
|
*
|
|
134
|
-
* @param {
|
|
138
|
+
* @param {(logEvent: LogEvent) => void} listener - Log event handler
|
|
135
139
|
*
|
|
136
140
|
* @returns {Function} Unsubscribe function
|
|
137
141
|
*/
|
|
138
|
-
onServiceLogEvent(listener:
|
|
142
|
+
onServiceLogEvent(listener: (logEvent: LogEvent) => void): Function;
|
|
139
143
|
/**
|
|
140
144
|
* Set log level for the ServiceManager itself
|
|
141
145
|
*
|
|
@@ -181,5 +185,9 @@ export type ServiceEntry = import("./typedef.js").ServiceEntry;
|
|
|
181
185
|
export type ServiceConfigOrLabel = import("./typedef.js").ServiceConfigOrLabel;
|
|
182
186
|
export type HealthCheckResult = import("./typedef.js").HealthCheckResult;
|
|
183
187
|
export type StopOptions = import("../service-base/typedef.js").StopOptions;
|
|
188
|
+
export type StateChangeEvent = import("../service-base/typedef.js").StateChangeEvent;
|
|
189
|
+
export type HealthChangeEvent = import("../service-base/typedef.js").HealthChangeEvent;
|
|
190
|
+
export type ServiceErrorEvent = import("../service-base/typedef.js").ServiceErrorEvent;
|
|
191
|
+
export type LogEvent = import("../../logging/typedef.js").LogEvent;
|
|
184
192
|
import { EventEmitter } from '../../generic/events.js';
|
|
185
193
|
import { Logger } from '../../logging/index.js';
|
|
@@ -85,6 +85,10 @@ import {
|
|
|
85
85
|
* @typedef {import('./typedef.js').HealthCheckResult} HealthCheckResult
|
|
86
86
|
*
|
|
87
87
|
* @typedef {import('../service-base/typedef.js').StopOptions} StopOptions
|
|
88
|
+
* @typedef {import('../service-base/typedef.js').StateChangeEvent} StateChangeEvent
|
|
89
|
+
* @typedef {import('../service-base/typedef.js').HealthChangeEvent} HealthChangeEvent
|
|
90
|
+
* @typedef {import('../service-base/typedef.js').ServiceErrorEvent} ServiceErrorEvent
|
|
91
|
+
* @typedef {import('../../logging/typedef.js').LogEvent} LogEvent
|
|
88
92
|
*/
|
|
89
93
|
|
|
90
94
|
/**
|
|
@@ -197,10 +201,8 @@ export class ServiceManager extends EventEmitter {
|
|
|
197
201
|
|
|
198
202
|
// Track dependents
|
|
199
203
|
entry.dependencies.forEach((dep) => {
|
|
200
|
-
const depEntry = this
|
|
201
|
-
|
|
202
|
-
depEntry.dependents.add(name);
|
|
203
|
-
}
|
|
204
|
+
const depEntry = this.#getServiceEntry(dep);
|
|
205
|
+
depEntry.dependents.add(name);
|
|
204
206
|
});
|
|
205
207
|
|
|
206
208
|
this.services.set(name, entry);
|
|
@@ -220,11 +222,8 @@ export class ServiceManager extends EventEmitter {
|
|
|
220
222
|
* Service instance or null if not found
|
|
221
223
|
*/
|
|
222
224
|
get(name) {
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
this.logger.warn(`Service '${name}' not found`);
|
|
226
|
-
return null;
|
|
227
|
-
}
|
|
225
|
+
// @throws service not found
|
|
226
|
+
const entry = this.#getServiceEntry(name);
|
|
228
227
|
|
|
229
228
|
if (!entry.instance) {
|
|
230
229
|
try {
|
|
@@ -241,7 +240,10 @@ export class ServiceManager extends EventEmitter {
|
|
|
241
240
|
|
|
242
241
|
this.logger.debug(`Created instance for '${name}'`);
|
|
243
242
|
} catch (error) {
|
|
244
|
-
this.logger.error(
|
|
243
|
+
this.logger.error(
|
|
244
|
+
`Failed to create instance for '${name}'`,
|
|
245
|
+
/** @type {Error} */ (error)
|
|
246
|
+
);
|
|
245
247
|
return null;
|
|
246
248
|
}
|
|
247
249
|
}
|
|
@@ -260,7 +262,8 @@ export class ServiceManager extends EventEmitter {
|
|
|
260
262
|
const instance = this.get(name);
|
|
261
263
|
if (!instance) return false;
|
|
262
264
|
|
|
263
|
-
const entry = this
|
|
265
|
+
const entry = this.#getServiceEntry(name);
|
|
266
|
+
|
|
264
267
|
const config = await this.#resolveServiceConfig(name, entry);
|
|
265
268
|
|
|
266
269
|
return await instance.configure(config);
|
|
@@ -274,7 +277,7 @@ export class ServiceManager extends EventEmitter {
|
|
|
274
277
|
* @returns {Promise<boolean>} True if service started successfully
|
|
275
278
|
*/
|
|
276
279
|
async startService(name) {
|
|
277
|
-
const entry = this
|
|
280
|
+
const entry = this.#getServiceEntry(name);
|
|
278
281
|
if (!entry) {
|
|
279
282
|
this.logger.warn(`Cannot start unregistered service '${name}'`);
|
|
280
283
|
return false;
|
|
@@ -325,13 +328,15 @@ export class ServiceManager extends EventEmitter {
|
|
|
325
328
|
*/
|
|
326
329
|
async stopService(name, options = {}) {
|
|
327
330
|
const instance = this.get(name);
|
|
331
|
+
|
|
328
332
|
if (!instance) {
|
|
329
333
|
this.logger.warn(`Cannot stop unregistered service '${name}'`);
|
|
330
334
|
return true; // Already stopped
|
|
331
335
|
}
|
|
332
336
|
|
|
333
337
|
// Check dependents
|
|
334
|
-
const entry = this
|
|
338
|
+
const entry = this.#getServiceEntry(name);
|
|
339
|
+
|
|
335
340
|
if (!options.force && entry && entry.dependents.size > 0) {
|
|
336
341
|
const runningDependents = [];
|
|
337
342
|
for (const dep of entry.dependents) {
|
|
@@ -490,7 +495,7 @@ export class ServiceManager extends EventEmitter {
|
|
|
490
495
|
/**
|
|
491
496
|
* Listen to log messages emitted by individual services
|
|
492
497
|
*
|
|
493
|
-
* @param {
|
|
498
|
+
* @param {(logEvent: LogEvent) => void} listener - Log event handler
|
|
494
499
|
*
|
|
495
500
|
* @returns {Function} Unsubscribe function
|
|
496
501
|
*/
|
|
@@ -582,27 +587,45 @@ export class ServiceManager extends EventEmitter {
|
|
|
582
587
|
*/
|
|
583
588
|
_attachServiceEvents(name, instance) {
|
|
584
589
|
// Forward service events
|
|
585
|
-
instance.on('stateChanged', (data) => {
|
|
590
|
+
instance.on('stateChanged', (/** @type {StateChangeEvent} */ data) => {
|
|
586
591
|
this.emit('service:stateChanged', { service: name, data });
|
|
587
592
|
});
|
|
588
593
|
|
|
589
|
-
instance.on('healthChanged', (data) => {
|
|
594
|
+
instance.on('healthChanged', (/** @type {HealthChangeEvent} */ data) => {
|
|
590
595
|
this.emit('service:healthChanged', { service: name, data });
|
|
591
596
|
});
|
|
592
597
|
|
|
593
|
-
instance.on('error', (data) => {
|
|
598
|
+
instance.on('error', (/** @type {ServiceErrorEvent} */ data) => {
|
|
594
599
|
this.emit('service:error', { service: name, data });
|
|
595
600
|
});
|
|
596
601
|
|
|
597
602
|
// Forward log events
|
|
598
|
-
|
|
599
|
-
instance.logger.on('log', (logEvent) => {
|
|
603
|
+
instance.logger.on('log', (/** @type {LogEvent} */ logEvent) => {
|
|
600
604
|
this.emit('service:log', logEvent);
|
|
601
605
|
});
|
|
602
606
|
}
|
|
603
607
|
|
|
604
608
|
// Internal methods
|
|
605
609
|
|
|
610
|
+
/**
|
|
611
|
+
* Get internal service registration entry by name
|
|
612
|
+
*
|
|
613
|
+
* @param {string} name
|
|
614
|
+
*
|
|
615
|
+
* @throws {Error} service not registered
|
|
616
|
+
*
|
|
617
|
+
* @returns {ServiceEntry}
|
|
618
|
+
*/
|
|
619
|
+
#getServiceEntry(name) {
|
|
620
|
+
const entry = this.services.get(name);
|
|
621
|
+
|
|
622
|
+
if (!entry) {
|
|
623
|
+
throw new Error(`Service [${name}] has not been registered`);
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
return entry;
|
|
627
|
+
}
|
|
628
|
+
|
|
606
629
|
/**
|
|
607
630
|
* Resolve service configuration using plugins
|
|
608
631
|
*
|
|
@@ -674,7 +697,10 @@ export class ServiceManager extends EventEmitter {
|
|
|
674
697
|
const success = await this.stopService(name, options);
|
|
675
698
|
results.set(name, success);
|
|
676
699
|
} catch (error) {
|
|
677
|
-
this.logger.error(
|
|
700
|
+
this.logger.error(
|
|
701
|
+
`Error stopping '${name}'`,
|
|
702
|
+
/** @type {Error} */ (error)
|
|
703
|
+
);
|
|
678
704
|
results.set(name, false);
|
|
679
705
|
}
|
|
680
706
|
}
|
|
@@ -683,15 +709,18 @@ export class ServiceManager extends EventEmitter {
|
|
|
683
709
|
/**
|
|
684
710
|
* Sort services by dependencies using topological sort
|
|
685
711
|
*
|
|
686
|
-
* @returns {string[]} Service names in dependency order
|
|
687
712
|
* @throws {Error} If circular dependencies are detected
|
|
713
|
+
*
|
|
714
|
+
* @returns {string[]} Service names in dependency order
|
|
688
715
|
*/
|
|
689
716
|
#topologicalSort() {
|
|
717
|
+
/** @type {string[]}*/
|
|
690
718
|
const sorted = [];
|
|
719
|
+
|
|
691
720
|
const visited = new Set();
|
|
692
721
|
const visiting = new Set();
|
|
693
722
|
|
|
694
|
-
const visit = (name) => {
|
|
723
|
+
const visit = (/** @type {string} */ name) => {
|
|
695
724
|
if (visited.has(name)) return;
|
|
696
725
|
if (visiting.has(name)) {
|
|
697
726
|
throw new Error(`Circular dependency detected involving '${name}'`);
|
|
@@ -699,11 +728,10 @@ export class ServiceManager extends EventEmitter {
|
|
|
699
728
|
|
|
700
729
|
visiting.add(name);
|
|
701
730
|
|
|
702
|
-
const entry = this
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
}
|
|
731
|
+
const entry = this.#getServiceEntry(name);
|
|
732
|
+
|
|
733
|
+
for (const dep of entry.dependencies) {
|
|
734
|
+
visit(dep);
|
|
707
735
|
}
|
|
708
736
|
|
|
709
737
|
visiting.delete(name);
|
|
@@ -11,15 +11,15 @@ export type ServiceRegistrationOptions = {
|
|
|
11
11
|
/**
|
|
12
12
|
* - Services this service depends on
|
|
13
13
|
*/
|
|
14
|
-
dependencies?: string[];
|
|
14
|
+
dependencies?: string[] | undefined;
|
|
15
15
|
/**
|
|
16
16
|
* - Tags for grouping services
|
|
17
17
|
*/
|
|
18
|
-
tags?: string[];
|
|
18
|
+
tags?: string[] | undefined;
|
|
19
19
|
/**
|
|
20
20
|
* - Higher starts first
|
|
21
21
|
*/
|
|
22
|
-
startupPriority?: number;
|
|
22
|
+
startupPriority?: number | undefined;
|
|
23
23
|
};
|
|
24
24
|
/**
|
|
25
25
|
* Configuration for ServiceManager
|
|
@@ -28,23 +28,23 @@ export type ServiceManagerConfig = {
|
|
|
28
28
|
/**
|
|
29
29
|
* - Debug mode switch
|
|
30
30
|
*/
|
|
31
|
-
debug?: boolean;
|
|
31
|
+
debug?: boolean | undefined;
|
|
32
32
|
/**
|
|
33
33
|
* - Auto-start services on registration
|
|
34
34
|
*/
|
|
35
|
-
autoStart?: boolean;
|
|
35
|
+
autoStart?: boolean | undefined;
|
|
36
36
|
/**
|
|
37
37
|
* - Default timeout for stopping services
|
|
38
38
|
*/
|
|
39
|
-
stopTimeout?: number;
|
|
39
|
+
stopTimeout?: number | undefined;
|
|
40
40
|
/**
|
|
41
41
|
* - Default log level for new services
|
|
42
42
|
*/
|
|
43
|
-
defaultLogLevel?: string;
|
|
43
|
+
defaultLogLevel?: string | undefined;
|
|
44
44
|
/**
|
|
45
45
|
* - Initial log level for ServiceManager
|
|
46
46
|
*/
|
|
47
|
-
managerLogLevel?: string;
|
|
47
|
+
managerLogLevel?: string | undefined;
|
|
48
48
|
/**
|
|
49
49
|
* Per-service log levels:
|
|
50
50
|
* - String: "auth:debug,database:info"
|
|
@@ -52,7 +52,7 @@ export type ServiceManagerConfig = {
|
|
|
52
52
|
*/
|
|
53
53
|
serviceLogLevels?: string | {
|
|
54
54
|
[x: string]: string;
|
|
55
|
-
};
|
|
55
|
+
} | undefined;
|
|
56
56
|
};
|
|
57
57
|
/**
|
|
58
58
|
* Result of health check for all services
|
|
@@ -87,10 +87,11 @@ export type ServiceManagerPlugin = {
|
|
|
87
87
|
/**
|
|
88
88
|
* - Optional config resolution method
|
|
89
89
|
*/
|
|
90
|
-
resolveServiceConfig?: (arg0: string, arg1: ServiceEntry, arg2: any) => Promise<any | undefined
|
|
90
|
+
resolveServiceConfig?: ((arg0: string, arg1: ServiceEntry, arg2: any) => Promise<any | undefined>) | undefined;
|
|
91
91
|
};
|
|
92
92
|
/**
|
|
93
|
-
* Internal service registry entry
|
|
93
|
+
* Internal service registry entry, an internal registry entry that the
|
|
94
|
+
* ServiceManager uses to track each registered service.
|
|
94
95
|
*/
|
|
95
96
|
export type ServiceEntry = {
|
|
96
97
|
/**
|
|
@@ -87,7 +87,8 @@
|
|
|
87
87
|
// ============================================================================
|
|
88
88
|
|
|
89
89
|
/**
|
|
90
|
-
* Internal service registry entry
|
|
90
|
+
* Internal service registry entry, an internal registry entry that the
|
|
91
|
+
* ServiceManager uses to track each registered service.
|
|
91
92
|
*
|
|
92
93
|
* @typedef {Object} ServiceEntry
|
|
93
94
|
* @property {ServiceConstructor} ServiceClass - Service class constructor
|
|
@@ -45,7 +45,7 @@ export default class FiniteStateMachine extends EventEmitter {
|
|
|
45
45
|
* @param {string} event
|
|
46
46
|
* @param {any[]} args
|
|
47
47
|
*/
|
|
48
|
-
debounce(wait: number, event: string, ...args: any[]): Promise<any>;
|
|
48
|
+
debounce(wait: number | undefined, event: string, ...args: any[]): Promise<any>;
|
|
49
49
|
/** The current state. */
|
|
50
50
|
get current(): any;
|
|
51
51
|
#private;
|
|
@@ -21,7 +21,7 @@ export namespace metaThemeColorBase {
|
|
|
21
21
|
function get(): void;
|
|
22
22
|
}
|
|
23
23
|
export namespace metaThemeColorDark {
|
|
24
|
-
let subscribe_1: (this: void, run: import("svelte/store").Subscriber<string>, invalidate?: () => void) => import("svelte/store").Unsubscriber;
|
|
24
|
+
let subscribe_1: (this: void, run: import("svelte/store").Subscriber<string | null>, invalidate?: () => void) => import("svelte/store").Unsubscriber;
|
|
25
25
|
export { subscribe_1 as subscribe };
|
|
26
26
|
export function get_1(): void;
|
|
27
27
|
export { get_1 as get };
|
|
@@ -3,17 +3,17 @@ type ButtonGroup = {
|
|
|
3
3
|
$on?(type: string, callback: (e: any) => void): () => void;
|
|
4
4
|
$set?(props: Partial<{
|
|
5
5
|
[attr: string]: any;
|
|
6
|
-
base?: string;
|
|
7
|
-
bg?: string;
|
|
8
|
-
classes?: string;
|
|
6
|
+
base?: string | undefined;
|
|
7
|
+
bg?: string | undefined;
|
|
8
|
+
classes?: string | undefined;
|
|
9
9
|
buttons: ButtonDef[];
|
|
10
|
-
selected?: ButtonDef;
|
|
11
|
-
select?: (label: string) => void;
|
|
10
|
+
selected?: ButtonDef | null | undefined;
|
|
11
|
+
select?: ((label: string) => void) | undefined;
|
|
12
12
|
buttonSnippet: Snippet<[{
|
|
13
13
|
text: string;
|
|
14
14
|
value: string;
|
|
15
15
|
label: string;
|
|
16
|
-
props:
|
|
16
|
+
props: Object;
|
|
17
17
|
}]>;
|
|
18
18
|
}>): void;
|
|
19
19
|
};
|
|
@@ -29,6 +29,6 @@ declare const ButtonGroup: import("svelte").Component<{
|
|
|
29
29
|
text: string;
|
|
30
30
|
value: string;
|
|
31
31
|
label: string;
|
|
32
|
-
props:
|
|
32
|
+
props: Object;
|
|
33
33
|
}]>;
|
|
34
34
|
}, {}, "select" | "selected">;
|
|
@@ -2,11 +2,11 @@ export default CompareLeftRight;
|
|
|
2
2
|
type CompareLeftRight = {
|
|
3
3
|
$on?(type: string, callback: (e: any) => void): () => void;
|
|
4
4
|
$set?(props: Partial<{
|
|
5
|
-
leftContent?: Snippet<[]
|
|
6
|
-
rightContent?: Snippet<[]
|
|
7
|
-
classes?: string;
|
|
8
|
-
dividerColor?: string;
|
|
9
|
-
handleColor?: string;
|
|
5
|
+
leftContent?: Snippet<[]> | undefined;
|
|
6
|
+
rightContent?: Snippet<[]> | undefined;
|
|
7
|
+
classes?: string | undefined;
|
|
8
|
+
dividerColor?: string | undefined;
|
|
9
|
+
handleColor?: string | undefined;
|
|
10
10
|
} & Record<string, any>>): void;
|
|
11
11
|
};
|
|
12
12
|
declare const CompareLeftRight: import("svelte").Component<{
|
|
@@ -3,9 +3,9 @@ type DragDropContext = {
|
|
|
3
3
|
$on?(type: string, callback: (e: any) => void): () => void;
|
|
4
4
|
$set?(props: Partial<{
|
|
5
5
|
[key: string]: any;
|
|
6
|
-
contextKey?: ContextKey;
|
|
7
|
-
base?: string;
|
|
8
|
-
classes?: string;
|
|
6
|
+
contextKey?: ContextKey | undefined;
|
|
7
|
+
base?: string | undefined;
|
|
8
|
+
classes?: string | undefined;
|
|
9
9
|
children: Snippet<[]>;
|
|
10
10
|
}>): void;
|
|
11
11
|
};
|
|
@@ -4,12 +4,12 @@ type Draggable = {
|
|
|
4
4
|
$set?(props: Partial<{
|
|
5
5
|
[key: string]: any;
|
|
6
6
|
item: any;
|
|
7
|
-
group?: string;
|
|
8
|
-
source?: string;
|
|
9
|
-
disabled?: boolean;
|
|
10
|
-
dragDelay?: number;
|
|
11
|
-
base?: string;
|
|
12
|
-
classes?: string;
|
|
7
|
+
group?: string | undefined;
|
|
8
|
+
source?: string | undefined;
|
|
9
|
+
disabled?: boolean | undefined;
|
|
10
|
+
dragDelay?: number | undefined;
|
|
11
|
+
base?: string | undefined;
|
|
12
|
+
classes?: string | undefined;
|
|
13
13
|
children: Snippet<[{
|
|
14
14
|
element: HTMLElement;
|
|
15
15
|
rect: DOMRect;
|
|
@@ -18,33 +18,33 @@ type Draggable = {
|
|
|
18
18
|
draggingSnippet?: Snippet<[{
|
|
19
19
|
element: HTMLElement;
|
|
20
20
|
rect: DOMRect;
|
|
21
|
-
}]
|
|
22
|
-
contextKey?: ContextKey;
|
|
23
|
-
isDragging?: boolean;
|
|
24
|
-
isDropping?: boolean;
|
|
25
|
-
isDragPreview?: boolean;
|
|
26
|
-
onDragStart?: (detail: {
|
|
21
|
+
}]> | undefined;
|
|
22
|
+
contextKey?: ContextKey | undefined;
|
|
23
|
+
isDragging?: boolean | undefined;
|
|
24
|
+
isDropping?: boolean | undefined;
|
|
25
|
+
isDragPreview?: boolean | undefined;
|
|
26
|
+
onDragStart?: ((detail: {
|
|
27
27
|
event: DragEvent;
|
|
28
28
|
item: any;
|
|
29
29
|
source: string;
|
|
30
30
|
group: string;
|
|
31
31
|
getController: () => DragController;
|
|
32
|
-
}) => void;
|
|
33
|
-
onDragging?: (detail: {
|
|
32
|
+
}) => void) | undefined;
|
|
33
|
+
onDragging?: ((detail: {
|
|
34
34
|
event: DragEvent;
|
|
35
35
|
item: any;
|
|
36
|
-
}) => void;
|
|
37
|
-
onDragEnd?: (detail: {
|
|
36
|
+
}) => void) | undefined;
|
|
37
|
+
onDragEnd?: ((detail: {
|
|
38
38
|
event: DragEvent;
|
|
39
39
|
item: any;
|
|
40
40
|
wasDropped: boolean;
|
|
41
|
-
}) => void;
|
|
42
|
-
onDrop?: (detail: {
|
|
41
|
+
}) => void) | undefined;
|
|
42
|
+
onDrop?: ((detail: {
|
|
43
43
|
event: DragEvent;
|
|
44
44
|
item: any;
|
|
45
45
|
wasDropped: boolean;
|
|
46
|
-
}) => void;
|
|
47
|
-
canDrag?: (item: any) => boolean;
|
|
46
|
+
}) => void) | undefined;
|
|
47
|
+
canDrag?: ((item: any) => boolean) | undefined;
|
|
48
48
|
}>): void;
|
|
49
49
|
};
|
|
50
50
|
declare const Draggable: import("svelte").Component<{
|