]> Piment Noir Git Repositories - e-mobility-charging-stations-simulator.git/commitdiff
refactor(ui-common): derive UIServerConfigurationSection from Zod schema
authorJérôme Benoit <jerome.benoit@sap.com>
Thu, 16 Apr 2026 16:20:47 +0000 (18:20 +0200)
committerJérôme Benoit <jerome.benoit@sap.com>
Thu, 16 Apr 2026 16:20:47 +0000 (18:20 +0200)
Make uiServerConfigSchema the single source of truth for the UI server
configuration shape. The hand-written interface in ConfigurationType.ts
is removed; UIServerConfigurationSection is now inferred via z.infer<>.

- Tighten schema: protocol and version use z.enum() instead of z.string()
  (follows existing z.enum(AuthenticationType) pattern, Zod v4)
- Export UIServerConfigurationSection as the primary inferred type
- Export UIServerConfig as a backward-compat alias
- ConfigurationType.ts imports UIServerConfigurationSection from schema.ts
  and re-exports only ConfigurationData
- CLI defaults.ts uses Protocol.UI and ProtocolVersion['0.0.1'] enum values
  instead of plain string literals to satisfy the tightened type
- CLI lifecycle.test.ts updated to use enum values in typed config literal

Zero duplicate field definitions. All quality gates pass.

ui/cli/src/config/defaults.ts
ui/cli/tests/lifecycle.test.ts
ui/common/src/config/schema.ts
ui/common/src/types/ConfigurationType.ts

index 075fbabf74346af10c4efd662878ff80e69870a4..5e16be882ab6e4d8ee9bc5599d529cc04f147093 100644 (file)
@@ -1,5 +1,7 @@
+import { Protocol, ProtocolVersion } from 'ui-common'
+
 export const DEFAULT_HOST = 'localhost'
 export const DEFAULT_PORT = 8080
-export const DEFAULT_PROTOCOL = 'ui'
-export const DEFAULT_VERSION = '0.0.1'
+export const DEFAULT_PROTOCOL = Protocol.UI
+export const DEFAULT_VERSION = ProtocolVersion['0.0.1']
 export const DEFAULT_SECURE = false
index d5f4a4ad83181fc4a3b4bd1e809167bc8d7c3dc8..3f12b313502951c02036207421325cfd99e3cf18 100644 (file)
@@ -36,9 +36,15 @@ await describe('lifecycle', async () => {
   })
 
   await it('should reject executeCommand with NaN timeout', async () => {
+    const { Protocol, ProtocolVersion } = await import('ui-common')
     await assert.rejects(
       executeCommand({
-        config: { host: 'localhost', port: 8080, protocol: 'ui', version: '0.0.1' },
+        config: {
+          host: 'localhost',
+          port: 8080,
+          protocol: Protocol.UI,
+          version: ProtocolVersion['0.0.1'],
+        },
         formatter: { error: () => undefined, output: () => undefined },
         payload: {},
         procedureName: 'listChargingStations' as never,
index 34e9f8527d4a6fcd1f17d196b2f12fe0aa73aa2f..c94d57f78d3aa192f54305b726361a654d9e1cbc 100644 (file)
@@ -1,6 +1,6 @@
 import { z } from 'zod'
 
-import { AuthenticationType } from '../types/UIProtocol.js'
+import { AuthenticationType, Protocol, ProtocolVersion } from '../types/UIProtocol.js'
 
 export const authenticationConfigSchema = z
   .object({
@@ -29,9 +29,9 @@ export const uiServerConfigSchema = z.object({
   host: z.string().min(1),
   name: z.string().optional(),
   port: z.number().int().min(1).max(65535),
-  protocol: z.string().min(1),
+  protocol: z.enum(Protocol),
   secure: z.boolean().optional(),
-  version: z.string().min(1),
+  version: z.enum(ProtocolVersion),
 })
 
 export const configurationSchema = z.object({
@@ -39,4 +39,5 @@ export const configurationSchema = z.object({
 })
 
 export type Configuration = z.infer<typeof configurationSchema>
-export type UIServerConfig = z.infer<typeof uiServerConfigSchema>
+export type UIServerConfig = UIServerConfigurationSection
+export type UIServerConfigurationSection = z.infer<typeof uiServerConfigSchema>
index 084449d8e5b1c3aab6ba9193f64ec5039bba7b99..5c75b5d351f343cbdfcfc714b0fc28cb3d0170ad 100644 (file)
@@ -1,21 +1,6 @@
-import type { AuthenticationType, Protocol, ProtocolVersion } from './UIProtocol.js'
+import type { UIServerConfigurationSection } from '../config/schema.js'
 
 export interface ConfigurationData {
   theme?: string
   uiServer: UIServerConfigurationSection | UIServerConfigurationSection[]
 }
-
-export interface UIServerConfigurationSection {
-  authentication?: {
-    enabled: boolean
-    password?: string
-    type: AuthenticationType
-    username?: string
-  }
-  host: string
-  name?: string
-  port: number
-  protocol: Protocol
-  secure?: boolean
-  version: ProtocolVersion
-}