refactor: refine type definitions
authorJérôme Benoit <jerome.benoit@sap.com>
Thu, 7 Mar 2024 16:12:55 +0000 (17:12 +0100)
committerJérôme Benoit <jerome.benoit@sap.com>
Thu, 7 Mar 2024 16:12:55 +0000 (17:12 +0100)
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com>
17 files changed:
src/types/AutomaticTransactionGenerator.ts
src/types/ChargingStationOcppConfiguration.ts
src/types/ChargingStationTemplate.ts
src/types/MeasurandPerPhaseSampledValueTemplates.ts
src/types/Statistics.ts
src/types/ocpp/1.6/Requests.ts
src/types/ocpp/2.0/Common.ts
src/types/ocpp/2.0/Requests.ts
src/types/ocpp/2.0/Responses.ts
src/types/ocpp/2.0/Variables.ts
src/types/ocpp/Configuration.ts
ui/web/src/components/actions/AddChargingStations.vue
ui/web/src/main.ts
ui/web/src/shims-vue.d.ts
ui/web/src/types/ChargingStationType.ts
ui/web/src/types/ConfigurationType.ts
ui/web/src/views/ChargingStationsView.vue

index 1592c5507fb4d8b7629dd51d1e22cba31971fd88..2ff04c09096a42fcc8e33b2a8bb937fa84fd4cc8 100644 (file)
@@ -1,10 +1,12 @@
+import type { JsonObject } from './JsonType.js'
+
 export enum IdTagDistribution {
   RANDOM = 'random',
   ROUND_ROBIN = 'round-robin',
   CONNECTOR_AFFINITY = 'connector-affinity'
 }
 
-export interface AutomaticTransactionGeneratorConfiguration {
+export interface AutomaticTransactionGeneratorConfiguration extends JsonObject {
   enable: boolean
   minDuration: number
   maxDuration: number
index 2ea2c53e5e12677132557991a0cd4d0f890c91e1..fdf03a40574765aa9fd7247f13edb18305c23554 100644 (file)
@@ -1,10 +1,11 @@
+import type { JsonObject } from './JsonType.js'
 import type { OCPPConfigurationKey } from './ocpp/Configuration.js'
 
-export type ConfigurationKey = OCPPConfigurationKey & {
+export interface ConfigurationKey extends OCPPConfigurationKey {
   visible?: boolean
   reboot?: boolean
 }
 
-export interface ChargingStationOcppConfiguration {
+export interface ChargingStationOcppConfiguration extends JsonObject {
   configurationKey?: ConfigurationKey[]
 }
index d17fd58f3a3f2ad998dbb5583b808d0289458061..d20dfdc1dca6026a08edde3e7ccac9e951ecb6aa 100644 (file)
@@ -6,6 +6,7 @@ import type { AutomaticTransactionGeneratorConfiguration } from './AutomaticTran
 import type { ChargingStationOcppConfiguration } from './ChargingStationOcppConfiguration.js'
 import type { ConnectorStatus } from './ConnectorStatus.js'
 import type { EvseTemplate } from './Evse.js'
+import type { JsonObject } from './JsonType.js'
 import type { OCPPProtocol } from './ocpp/OCPPProtocol.js'
 import type { OCPPVersion } from './ocpp/OCPPVersion.js'
 import type {
@@ -41,7 +42,7 @@ export enum Voltage {
 
 export type WsOptions = ClientOptions & ClientRequestArgs
 
-export interface FirmwareUpgrade {
+export interface FirmwareUpgrade extends JsonObject {
   versionUpgrade?: {
     patternGroup?: number
     step?: number
@@ -50,7 +51,7 @@ export interface FirmwareUpgrade {
   failureStatus?: FirmwareStatus
 }
 
-interface CommandsSupport {
+interface CommandsSupport extends JsonObject {
   incomingCommands: Record<IncomingRequestCommand, boolean>
   outgoingCommands?: Record<RequestCommand, boolean>
 }
index 5da56b48ba4ca5dced29af98bc19cd27d5a0de4e..99572673edbfaa7d36450b860b8f190d13522d4c 100644 (file)
@@ -1,6 +1,6 @@
 import type { SampledValue } from './ocpp/MeterValues.js'
 
-export type SampledValueTemplate = SampledValue & {
+export interface SampledValueTemplate extends SampledValue {
   fluctuationPercent?: number
   minimumValue?: number
 }
index 0c7375d9c0ade1d0dcd8b19b856f6f439479af47..ecb3c2bfc4afa4746d7e7698eee144d9a10c2cae 100644 (file)
@@ -23,14 +23,14 @@ export type StatisticsData = Partial<{
   stdDevTimeMeasurement: number
 }>
 
-export type Statistics = {
+export interface Statistics extends WorkerData {
   id: string
   name: string
   uri: string
   createdAt: Date
   updatedAt?: Date
   statisticsData: Map<string | RequestCommand | IncomingRequestCommand, StatisticsData>
-} & WorkerData
+}
 
 export interface InternalTemplateStatistics {
   configured: number
index 32d9757f4cea58be69ca349976cbc760709933c2..26dd03f79570fbfdaefedb8347843495ed67ab8b 100644 (file)
@@ -148,9 +148,9 @@ export enum OCPP16FirmwareStatus {
   Installed = 'Installed'
 }
 
-export type OCPP16FirmwareStatusNotificationRequest = {
+export interface OCPP16FirmwareStatusNotificationRequest extends JsonObject {
   status: OCPP16FirmwareStatus
-} & JsonObject
+}
 
 export interface GetDiagnosticsRequest extends JsonObject {
   location: string
index 9d13b2a829aa295cb6cffd86b0409d5cb1b419f9..785c604646654b509a803ff4ec57140a397a7a38 100644 (file)
@@ -94,33 +94,33 @@ export enum CertificateSigningUseEnumType {
 
 export type CertificateSignedStatusEnumType = GenericStatusEnumType
 
-export type CertificateHashDataType = {
+export interface CertificateHashDataType extends JsonObject {
   hashAlgorithm: HashAlgorithmEnumType
   issuerNameHash: string
   issuerKeyHash: string
   serialNumber: string
-} & JsonObject
+}
 
-export type CertificateHashDataChainType = {
+export interface CertificateHashDataChainType extends JsonObject {
   certificateType: GetCertificateIdUseEnumType
   certificateHashData: CertificateHashDataType
   childCertificateHashData?: CertificateHashDataType
-} & JsonObject
+}
 
-export type OCSPRequestDataType = {
+export interface OCSPRequestDataType extends JsonObject {
   hashAlgorithm: HashAlgorithmEnumType
   issuerNameHash: string
   issuerKeyHash: string
   serialNumber: string
   responderURL: string
-} & JsonObject
+}
 
-export type StatusInfoType = {
+export interface StatusInfoType extends JsonObject {
   reasonCode: string
   additionalInfo?: string
-} & JsonObject
+}
 
-export type EVSEType = {
+export interface EVSEType extends JsonObject {
   id: number
   connectorId?: string
-} & JsonObject
+}
index ef7a5161b3797282425947b30d5e0c30c85bddaa..d2c87287315cd52a25672555b80b3067864b87ae 100644 (file)
@@ -19,40 +19,40 @@ export enum OCPP20IncomingRequestCommand {
   REQUEST_STOP_TRANSACTION = 'RequestStopTransaction'
 }
 
-type ModemType = {
+interface ModemType extends JsonObject {
   iccid?: string
   imsi?: string
-} & JsonObject
+}
 
-type ChargingStationType = {
+interface ChargingStationType extends JsonObject {
   serialNumber?: string
   model: string
   vendorName: string
   firmwareVersion?: string
   modem?: ModemType
-} & JsonObject
+}
 
-export type OCPP20BootNotificationRequest = {
+export interface OCPP20BootNotificationRequest extends JsonObject {
   reason: BootReasonEnumType
   chargingStation: ChargingStationType
-} & JsonObject
+}
 
 export type OCPP20HeartbeatRequest = EmptyObject
 
 export type OCPP20ClearCacheRequest = EmptyObject
 
-export type OCPP20StatusNotificationRequest = {
+export interface OCPP20StatusNotificationRequest extends JsonObject {
   timestamp: Date
   connectorStatus: OCPP20ConnectorStatusEnumType
   evseId: number
   connectorId: number
-} & JsonObject
+}
 
-export type OCPP20SetVariablesRequest = {
+export interface OCPP20SetVariablesRequest extends JsonObject {
   setVariableData: OCPP20SetVariableDataType[]
-} & JsonObject
+}
 
-export type OCPP20InstallCertificateRequest = {
+export interface OCPP20InstallCertificateRequest extends JsonObject {
   certificateType: InstallCertificateUseEnumType
   certificate: string
-} & JsonObject
+}
index dbeb1e3ffd556d00e8cf9d3614ece82c00f765bc..51d6ad4444683a011aa62b0aaf0f317558dcf898 100644 (file)
@@ -8,29 +8,29 @@ import type { EmptyObject } from '../../EmptyObject.js'
 import type { JsonObject } from '../../JsonType.js'
 import type { RegistrationStatusEnumType } from '../Common.js'
 
-export type OCPP20BootNotificationResponse = {
+export interface OCPP20BootNotificationResponse extends JsonObject {
   currentTime: Date
   status: RegistrationStatusEnumType
   interval: number
   statusInfo?: StatusInfoType
-} & JsonObject
+}
 
-export type OCPP20HeartbeatResponse = {
+export interface OCPP20HeartbeatResponse extends JsonObject {
   currentTime: Date
-} & JsonObject
+}
 
-export type OCPP20ClearCacheResponse = {
+export interface OCPP20ClearCacheResponse extends JsonObject {
   status: GenericStatusEnumType
   statusInfo?: StatusInfoType
-} & JsonObject
+}
 
 export type OCPP20StatusNotificationResponse = EmptyObject
 
-export type OCPP20SetVariablesResponse = {
+export interface OCPP20SetVariablesResponse extends JsonObject {
   setVariableResult: OCPP20SetVariableResultType[]
-} & JsonObject
+}
 
-export type OCPP20InstallCertificateResponse = {
+export interface OCPP20InstallCertificateResponse extends JsonObject {
   status: InstallCertificateStatusEnumType
   statusInfo?: StatusInfoType
-} & JsonObject
+}
index b5cd53e5620d001b9a1e39c71185b064b7fe9309..439abf35c71c39ebe7029d0f47ceff2bd643346c 100644 (file)
@@ -69,11 +69,11 @@ enum AttributeEnumType {
   MaxSet = 'MaxSet'
 }
 
-type ComponentType = {
+interface ComponentType extends JsonObject {
   name: string | OCPP20ComponentName
   instance?: string
   evse?: EVSEType
-} & JsonObject
+}
 
 type VariableName =
   | string
@@ -81,17 +81,17 @@ type VariableName =
   | OCPP20OptionalVariableName
   | OCPP20VendorVariableName
 
-type VariableType = {
+interface VariableType extends JsonObject {
   name: VariableName
   instance?: string
-} & JsonObject
+}
 
-export type OCPP20SetVariableDataType = {
+export interface OCPP20SetVariableDataType extends JsonObject {
   attributeType?: AttributeEnumType
   attributeValue: string
   component: ComponentType
   variable: VariableType
-} & JsonObject
+}
 
 enum SetVariableStatusEnumType {
   Accepted = 'Accepted',
@@ -102,15 +102,15 @@ enum SetVariableStatusEnumType {
   RebootRequired = 'RebootRequired'
 }
 
-export type OCPP20SetVariableResultType = {
+export interface OCPP20SetVariableResultType extends JsonObject {
   attributeType?: AttributeEnumType
   attributeStatus: SetVariableStatusEnumType
   component: ComponentType
   variable: VariableType
   attributeStatusInfo?: StatusInfoType
-} & JsonObject
+}
 
-export type OCPP20ComponentVariableType = {
+export interface OCPP20ComponentVariableType extends JsonObject {
   component: ComponentType
   variable?: VariableType
-} & JsonObject
+}
index ac8a094508bfa15fe57eac1a2a1bdda844c1f145..c174234812421c929e78f82bbbafdcceff45cdbe 100644 (file)
@@ -44,8 +44,8 @@ export enum ConnectorPhaseRotation {
 
 export type ConfigurationKeyType = string | StandardParametersKey | VendorParametersKey
 
-export type OCPPConfigurationKey = {
+export interface OCPPConfigurationKey extends JsonObject {
   key: ConfigurationKeyType
   readonly: boolean
   value?: string
-} & JsonObject
+}
index f638232b0162e52b44c23b1ced17c76f48b6b52e..6e3c2932e79002627a43feacb60d61d81cc5d41c 100644 (file)
@@ -118,7 +118,7 @@ const state = ref<{
   enableStatistics: false
 })
 
-watch(getCurrentInstance()?.appContext.config.globalProperties.$templates, () => {
+watch(getCurrentInstance()!.appContext.config.globalProperties.$templates, () => {
   state.value.renderTemplates = randomUUID()
 })
 </script>
index 640adf9f6fd9e225ea6991a3271b13f78f8f1f01..f69f2c46d240cbd763a1716f3b1e7c3283c53269 100644 (file)
@@ -1,6 +1,6 @@
 import { type App as AppType, createApp, ref } from 'vue'
 import ToastPlugin from 'vue-toast-notification'
-import type { ChargingStationData, ConfigurationData } from '@/types'
+import type { ChargingStationData, ConfigurationData, UIServerConfigurationSection } from '@/types'
 import { router } from '@/router'
 import { UIClient, getFromLocalStorage, setToLocalStorage } from '@/composables'
 import App from '@/App.vue'
@@ -30,13 +30,15 @@ const initializeApp = (app: AppType, config: ConfigurationData) => {
   if (
     getFromLocalStorage<number | undefined>('uiServerConfigurationIndex', undefined) == null ||
     getFromLocalStorage<number>('uiServerConfigurationIndex', 0) >
-      app.config.globalProperties.$configuration.value.uiServer.length - 1
+      (app.config.globalProperties.$configuration.value.uiServer as UIServerConfigurationSection[])
+        .length -
+        1
   ) {
     setToLocalStorage<number>('uiServerConfigurationIndex', 0)
   }
   if (app.config.globalProperties.$uiClient == null) {
     app.config.globalProperties.$uiClient = UIClient.getInstance(
-      app.config.globalProperties.$configuration.value.uiServer[
+      (app.config.globalProperties.$configuration.value.uiServer as UIServerConfigurationSection[])[
         getFromLocalStorage<number>('uiServerConfigurationIndex', 0)
       ]
     )
index 1b934bffe0795fdb8767d94225cfa14f9a9bcd5e..6f0d76e38bac14a980a967753b9db65609cc0a46 100644 (file)
@@ -6,9 +6,9 @@ declare module 'vue' {
     RouterView: (typeof import('vue-router'))['RouterView']
   }
   interface ComponentCustomProperties {
-    $configuration: Ref<import('@/types').ConfigurationData>
-    $templates: Ref<string[]>
-    $chargingStations: Ref<import('@/types').ChargingStationData[]>
+    $configuration: import('vue').Ref<import('@/types').ConfigurationData>
+    $templates: import('vue').Ref<string[]>
+    $chargingStations: import('vue').Ref<import('@/types').ChargingStationData[]>
     $uiClient: import('@/composables').UIClient
   }
 }
index 6814737e811106b70d9212e61cff24a9b007500a..167e3a1a8498b79c272bd3792be6ced370e32199 100644 (file)
@@ -6,7 +6,7 @@ export enum IdTagDistribution {
   CONNECTOR_AFFINITY = 'connector-affinity'
 }
 
-export interface AutomaticTransactionGeneratorConfiguration {
+export interface AutomaticTransactionGeneratorConfiguration extends JsonObject {
   enable: boolean
   minDuration: number
   maxDuration: number
@@ -19,12 +19,12 @@ export interface AutomaticTransactionGeneratorConfiguration {
   idTagDistribution?: IdTagDistribution
 }
 
-export interface ChargingStationAutomaticTransactionGeneratorConfiguration {
+export interface ChargingStationAutomaticTransactionGeneratorConfiguration extends JsonObject {
   automaticTransactionGenerator?: AutomaticTransactionGeneratorConfiguration
   automaticTransactionGeneratorStatuses?: Status[]
 }
 
-export type ChargingStationData = {
+export interface ChargingStationData extends JsonObject {
   started: boolean
   stationInfo: ChargingStationInfo
   connectors: ConnectorStatus[]
@@ -50,7 +50,7 @@ export enum OCPP16FirmwareStatus {
   Installed = 'Installed'
 }
 
-export interface FirmwareUpgrade {
+export interface FirmwareUpgrade extends JsonObject {
   versionUpgrade?: {
     patternGroup?: number
     step?: number
@@ -74,7 +74,7 @@ export interface ChargingStationOptions extends JsonObject {
   stopTransactionsOnStopped?: boolean
 }
 
-export type ChargingStationInfo = {
+export interface ChargingStationInfo extends JsonObject {
   hashId: string
   templateIndex: number
   templateName: string
@@ -137,20 +137,20 @@ export type ChargingStationInfo = {
   messageTriggerSupport?: Record<MessageTrigger, boolean>
 }
 
-export interface ChargingStationOcppConfiguration {
+export interface ChargingStationOcppConfiguration extends JsonObject {
   configurationKey?: ConfigurationKey[]
 }
 
-export type ConfigurationKey = OCPPConfigurationKey & {
+export interface ConfigurationKey extends OCPPConfigurationKey {
   visible?: boolean
   reboot?: boolean
 }
 
-export type OCPPConfigurationKey = {
+export interface OCPPConfigurationKey extends JsonObject {
   key: string
   readonly: boolean
   value?: string
-} & JsonObject
+}
 
 export enum OCPP16IncomingRequestCommand {
   RESET = 'Reset',
@@ -216,7 +216,7 @@ export const MessageTrigger = {
 } as const
 export type MessageTrigger = OCPP16MessageTrigger
 
-type CommandsSupport = {
+interface CommandsSupport extends JsonObject {
   incomingCommands: Record<IncomingRequestCommand, boolean>
   outgoingCommands?: Record<RequestCommand, boolean>
 }
@@ -250,7 +250,7 @@ export enum AmpereUnits {
   AMPERE = 'A'
 }
 
-export type ConnectorStatus = {
+export interface ConnectorStatus extends JsonObject {
   availability: AvailabilityType
   bootStatus?: ChargePointStatus
   status?: ChargePointStatus
@@ -266,7 +266,7 @@ export type ConnectorStatus = {
   transactionEnergyActiveImportRegisterValue?: number // In Wh
 }
 
-export type EvseStatus = {
+export interface EvseStatus extends JsonObject {
   availability: AvailabilityType
   connectors?: ConnectorStatus[]
 }
@@ -291,7 +291,7 @@ export enum OCPP16ChargePointStatus {
 }
 export type ChargePointStatus = OCPP16ChargePointStatus
 
-export type Status = {
+export interface Status extends JsonObject {
   start?: boolean
   startDate?: Date
   lastRunDate?: Date
index 18ea267a5e16052c1e58ff4afd9ee5d5c826ba46..1c8de85bc20c623f1656104b01bebf1397f22407 100644 (file)
@@ -1,10 +1,10 @@
 import type { AuthenticationType, Protocol, ProtocolVersion } from './UIProtocol'
 
-export type ConfigurationData = {
+export interface ConfigurationData {
   uiServer: UIServerConfigurationSection | UIServerConfigurationSection[]
 }
 
-export type UIServerConfigurationSection = {
+export interface UIServerConfigurationSection {
   name?: string
   host: string
   port: number
index 320731f71df5b4c2fd5a48727f272d957d481fe2..56200d2eccd672b4ab0012dad6f77efe1720caed 100644 (file)
               if (
                 getFromLocalStorage<number>('uiServerConfigurationIndex', 0) !== state.uiServerIndex
               ) {
-                $uiClient.setConfiguration($configuration.value.uiServer[state.uiServerIndex])
+                $uiClient.setConfiguration(
+                  ($configuration.value.uiServer as UIServerConfigurationSection[])[
+                    state.uiServerIndex
+                  ]
+                )
                 registerWSEventListeners()
                 $uiClient.registerWSEventListener(
                   'open',
@@ -33,7 +37,7 @@
                       0
                     )
                     $uiClient.setConfiguration(
-                      $configuration.value.uiServer[
+                      ($configuration.value.uiServer as UIServerConfigurationSection[])[
                         getFromLocalStorage<number>('uiServerConfigurationIndex', 0)
                       ]
                     )
 import { computed, getCurrentInstance, onMounted, onUnmounted, ref, watch } from 'vue'
 import { useToast } from 'vue-toast-notification'
 import CSTable from '@/components/charging-stations/CSTable.vue'
-import type { ResponsePayload, SimulatorState, UIServerConfigurationSection } from '@/types'
+import type {
+  ChargingStationData,
+  ResponsePayload,
+  SimulatorState,
+  UIServerConfigurationSection
+} from '@/types'
 import Container from '@/components/Container.vue'
 import ReloadButton from '@/components/buttons/ReloadButton.vue'
 import {
@@ -164,7 +173,7 @@ const clearToggleButtons = (): void => {
 
 const app = getCurrentInstance()
 
-watch(app?.appContext.config.globalProperties.$chargingStations, () => {
+watch(app!.appContext.config.globalProperties.$chargingStations, () => {
   state.value.renderChargingStations = randomUUID()
 })
 
@@ -213,7 +222,7 @@ const getTemplates = (): void => {
       .listTemplates()
       .then((response: ResponsePayload) => {
         if (app != null) {
-          app.appContext.config.globalProperties.$templates.value = response.templates
+          app.appContext.config.globalProperties.$templates.value = response.templates as string[]
         }
       })
       .catch((error: Error) => {
@@ -234,7 +243,8 @@ const getChargingStations = (): void => {
       .listChargingStations()
       .then((response: ResponsePayload) => {
         if (app != null) {
-          app.appContext.config.globalProperties.$chargingStations.value = response.chargingStations
+          app.appContext.config.globalProperties.$chargingStations.value =
+            response.chargingStations as ChargingStationData[]
         }
       })
       .catch((error: Error) => {
@@ -274,13 +284,13 @@ onUnmounted(() => {
   unregisterWSEventListeners()
 })
 
-const uiServerConfigurations: { index: number; configuration: UIServerConfigurationSection }[] =
-  app?.appContext.config.globalProperties.$configuration.value.uiServer.map(
-    (configuration: UIServerConfigurationSection, index: number) => ({
-      index,
-      configuration
-    })
-  )
+const uiServerConfigurations: { index: number; configuration: UIServerConfigurationSection }[] = (
+  app?.appContext.config.globalProperties.$configuration.value
+    .uiServer as UIServerConfigurationSection[]
+).map((configuration: UIServerConfigurationSection, index: number) => ({
+  index,
+  configuration
+}))
 
 const startSimulator = (): void => {
   uiClient