@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.
Files changed (130) hide show
  1. package/dist/auth/jwt/constants.d.ts +1 -1
  2. package/dist/auth/jwt/errors.d.ts +5 -5
  3. package/dist/auth/jwt/typedef.d.ts +30 -30
  4. package/dist/config/generators/imagetools.d.ts +3 -3
  5. package/dist/config/generators/vite.d.ts +11 -11
  6. package/dist/config/generators/vite.js +1 -1
  7. package/dist/design/generators/index.d.ts +9 -9
  8. package/dist/design/utils/clamp.d.ts +1 -1
  9. package/dist/design/utils/root-vars.d.ts +1 -1
  10. package/dist/design/utils/scaling.d.ts +2 -2
  11. package/dist/generic/data/classes/IterableTree.d.ts +2 -2
  12. package/dist/generic/data/classes/IterableTree.js +1 -0
  13. package/dist/generic/data/classes/Selector.d.ts +5 -5
  14. package/dist/generic/data/classes/Selector.js +53 -60
  15. package/dist/generic/data/classes/typedef.d.ts +5 -5
  16. package/dist/generic/errors/generic.d.ts +3 -1
  17. package/dist/generic/errors/promise.d.ts +2 -2
  18. package/dist/generic/events/classes/EventEmitter.js +1 -0
  19. package/dist/generic/promises/classes/HkPromise.js +9 -15
  20. package/dist/logging/internal/adapters/console.d.ts +5 -5
  21. package/dist/logging/internal/adapters/pino.d.ts +3 -3
  22. package/dist/logging/internal/adapters/typedef.d.ts +7 -7
  23. package/dist/logging/internal/factories/client.d.ts +1 -1
  24. package/dist/logging/internal/factories/server.d.ts +1 -1
  25. package/dist/logging/internal/logger/Logger.d.ts +3 -3
  26. package/dist/logging/internal/transports/pretty-transport.d.ts +3 -3
  27. package/dist/logging/internal/transports/test-transport.d.ts +5 -5
  28. package/dist/logging/typedef.d.ts +1 -1
  29. package/dist/network/cache/IndexedDbCache.d.ts +10 -10
  30. package/dist/network/cache/MemoryResponseCache.d.ts +3 -3
  31. package/dist/network/cache/typedef.d.ts +3 -3
  32. package/dist/network/errors/http.d.ts +2 -2
  33. package/dist/network/http/caching.d.ts +2 -2
  34. package/dist/network/http/http-request.d.ts +1 -1
  35. package/dist/network/http/typedef.d.ts +31 -31
  36. package/dist/network/loaders/audio/AudioScene.svelte.d.ts +2 -2
  37. package/dist/network/loaders/base/SceneBase.svelte.d.ts +4 -4
  38. package/dist/network/loaders/base/SceneBase.svelte.js +1 -1
  39. package/dist/network/loaders/image/ImageLoader.svelte.d.ts +1 -1
  40. package/dist/network/loaders/image/ImageVariantsLoader.svelte.d.ts +5 -5
  41. package/dist/network/loaders/image/utils/index.d.ts +3 -3
  42. package/dist/services/manager-plugins/ConfigPlugin.d.ts +1 -1
  43. package/dist/services/service-base/ServiceBase.d.ts +13 -3
  44. package/dist/services/service-base/ServiceBase.js +27 -9
  45. package/dist/services/service-base/typedef.d.ts +8 -8
  46. package/dist/services/service-manager/ServiceManager.d.ts +10 -2
  47. package/dist/services/service-manager/ServiceManager.js +55 -27
  48. package/dist/services/service-manager/typedef.d.ts +12 -11
  49. package/dist/services/service-manager/typedef.js +2 -1
  50. package/dist/state/machines/finite-state-machine/FiniteStateMachine.svelte.d.ts +1 -1
  51. package/dist/state/machines/loading-state-machine/LoadingStateMachine.svelte.d.ts +1 -1
  52. package/dist/state/stores/theme.d.ts +1 -1
  53. package/dist/ui/components/button-group/ButtonGroup.svelte.d.ts +7 -7
  54. package/dist/ui/components/button-group/typedef.d.ts +1 -1
  55. package/dist/ui/components/compare-left-right/CompareLeftRight.svelte.d.ts +5 -5
  56. package/dist/ui/components/drag-drop/DragController.d.ts +1 -1
  57. package/dist/ui/components/drag-drop/DragDropContext.svelte.d.ts +3 -3
  58. package/dist/ui/components/drag-drop/Draggable.svelte.d.ts +20 -20
  59. package/dist/ui/components/drag-drop/DropZone.svelte.d.ts +27 -27
  60. package/dist/ui/components/drag-drop/DropZoneArea.svelte.d.ts +26 -26
  61. package/dist/ui/components/drag-drop/DropZoneList.svelte.d.ts +27 -27
  62. package/dist/ui/components/drag-drop/drag-state.svelte.d.ts +4 -4
  63. package/dist/ui/components/drag-drop/typedef/drag.d.ts +1 -1
  64. package/dist/ui/components/game-box/GameBox.svelte.d.ts +19 -19
  65. package/dist/ui/components/game-box/gamebox.util.d.ts +2 -2
  66. package/dist/ui/components/grid-layers/GridLayers.svelte.d.ts +7 -7
  67. package/dist/ui/components/image-box/ImageBox.svelte.d.ts +14 -14
  68. package/dist/ui/components/presenter/ImageSlide.svelte.d.ts +8 -8
  69. package/dist/ui/components/presenter/Presenter.state.svelte.d.ts +1 -1
  70. package/dist/ui/components/presenter/Presenter.svelte.d.ts +5 -5
  71. package/dist/ui/components/presenter/typedef.d.ts +13 -13
  72. package/dist/ui/components/rows/panel-grid-row/PanelGridRow.svelte.d.ts +7 -7
  73. package/dist/ui/components/rows/panel-row-2/PanelRow2.svelte.d.ts +7 -7
  74. package/dist/ui/components/tab-bar/HkTabBar.svelte.d.ts +10 -10
  75. package/dist/ui/components/tab-bar/HkTabBarSelector.state.svelte.d.ts +1 -1
  76. package/dist/ui/components/tab-bar/HkTabBarSelector.svelte.d.ts +10 -10
  77. package/dist/ui/components/tab-bar/typedef.d.ts +3 -3
  78. package/dist/ui/components/virtual-viewport/VirtualViewport.svelte.d.ts +17 -17
  79. package/dist/ui/dev/blocks/TextBlock.svelte.d.ts +6 -6
  80. package/dist/ui/dev/buttons/CheckButton.svelte.d.ts +11 -11
  81. package/dist/ui/primitives/area/HkArea.svelte.d.ts +6 -6
  82. package/dist/ui/primitives/area/HkGridArea.svelte.d.ts +12 -12
  83. package/dist/ui/primitives/buttons/button/Button.svelte.d.ts +16 -16
  84. package/dist/ui/primitives/buttons/button-icon-steeze/SteezeIconButton.svelte.d.ts +2 -2
  85. package/dist/ui/primitives/buttons/button-submit/SubmitButton.svelte +21 -0
  86. package/dist/ui/primitives/buttons/button-submit/SubmitButton.svelte.d.ts +12 -0
  87. package/dist/ui/primitives/buttons/index.d.ts +2 -1
  88. package/dist/ui/primitives/buttons/index.js +2 -1
  89. package/dist/ui/primitives/icons/HkIcon.svelte.d.ts +4 -4
  90. package/dist/ui/primitives/icons/HkTabIcon.svelte.d.ts +13 -13
  91. package/dist/ui/primitives/icons/SteezeIcon.svelte.d.ts +4 -4
  92. package/dist/ui/primitives/inputs/text-input/TextInput.svelte.d.ts +22 -22
  93. package/dist/ui/primitives/inputs/text-input/assets/IconInvalid.svelte.d.ts +1 -1
  94. package/dist/ui/primitives/inputs/text-input/assets/IconValid.svelte.d.ts +1 -1
  95. package/dist/ui/primitives/panels/panel/Panel.svelte.d.ts +6 -6
  96. package/dist/util/array/index.d.ts +17 -17
  97. package/dist/util/array/index.js +5 -5
  98. package/dist/util/compare/index.d.ts +2 -1
  99. package/dist/util/compare/index.js +1 -0
  100. package/dist/util/exceptions/index.d.ts +3 -2
  101. package/dist/util/exceptions/index.js +13 -9
  102. package/dist/util/expect/arrays.d.ts +1 -0
  103. package/dist/util/expect/arrays.js +1 -0
  104. package/dist/util/expect/primitives.d.ts +18 -0
  105. package/dist/util/expect/primitives.js +18 -0
  106. package/dist/util/function/index.d.ts +14 -1
  107. package/dist/util/geometry/index.d.ts +2 -2
  108. package/dist/util/geometry/index.js +1 -1
  109. package/dist/util/iterate/index.d.ts +7 -7
  110. package/dist/util/object/index.d.ts +13 -13
  111. package/dist/util/singleton/index.d.ts +3 -3
  112. package/dist/util/svelte/loading/loading-tracker.svelte.d.ts +1 -1
  113. package/dist/util/sveltekit/env/all.d.ts +7 -18
  114. package/dist/util/sveltekit/env/all.js +4 -22
  115. package/dist/util/sveltekit/env/parsers.d.ts +23 -37
  116. package/dist/util/sveltekit/env/parsers.js +15 -15
  117. package/dist/util/sveltekit/env/private.d.ts +9 -11
  118. package/dist/util/sveltekit/env/private.js +4 -4
  119. package/dist/util/sveltekit/env/public.d.ts +9 -11
  120. package/dist/util/sveltekit/env/public.js +3 -3
  121. package/dist/util/sveltekit/env-all.d.ts +1 -1
  122. package/dist/util/sveltekit/env-all.js +2 -4
  123. package/dist/util/sveltekit/route-folders/index.d.ts +2 -2
  124. package/dist/util/sveltekit/route-folders.d.ts +1 -0
  125. package/dist/util/{sveltekit.js → sveltekit/route-folders.js} +1 -1
  126. package/dist/util/time/index.d.ts +4 -4
  127. package/dist/valibot/parsers/url.d.ts +3 -3
  128. package/dist/valibot/parsers/url.js +6 -2
  129. package/package.json +1 -1
  130. 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
- /** @type {*} */
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 {*} [config={}] - Service-specific configuration
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 (error.message === 'Shutdown timeout' && options.force) {
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 = any & Record<string, any>;
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 {Function} listener - Log event handler
138
+ * @param {(logEvent: LogEvent) => void} listener - Log event handler
135
139
  *
136
140
  * @returns {Function} Unsubscribe function
137
141
  */
138
- onServiceLogEvent(listener: Function): Function;
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.services.get(dep);
201
- if (depEntry) {
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
- const entry = this.services.get(name);
224
- if (!entry) {
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(`Failed to create instance for '${name}'`, 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.services.get(name);
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.services.get(name);
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.services.get(name);
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 {Function} listener - Log event handler
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(`Error stopping '${name}'`, 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.services.get(name);
703
- if (entry) {
704
- for (const dep of entry.dependencies) {
705
- visit(dep);
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;
@@ -4,7 +4,7 @@
4
4
  export default class LoadingStateMachine extends FiniteStateMachine {
5
5
  constructor();
6
6
  /** The last error */
7
- get error(): Error;
7
+ get error(): Error | null;
8
8
  /**
9
9
  * Transition to timeout state
10
10
  * - Only valid when currently loading
@@ -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: any;
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: any;
32
+ props: Object;
33
33
  }]>;
34
34
  }, {}, "select" | "selected">;
@@ -3,5 +3,5 @@ export type ButtonDef = {
3
3
  value?: any;
4
4
  label?: string;
5
5
  hide?: boolean;
6
- props?: any;
6
+ props?: Object;
7
7
  };
@@ -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<{
@@ -8,7 +8,7 @@ export class DragController {
8
8
  */
9
9
  constructor(event: DragEvent);
10
10
  event: DragEvent;
11
- dataTransfer: DataTransfer;
11
+ dataTransfer: DataTransfer | null;
12
12
  targetElement: HTMLElement;
13
13
  offsetX: number;
14
14
  offsetY: number;
@@ -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<{