]> Piment Noir Git Repositories - e-mobility-charging-stations-simulator.git/commitdiff
refactor(ocpp): use union types in common code where possible
authorJérôme Benoit <jerome.benoit@sap.com>
Mon, 16 Mar 2026 12:27:33 +0000 (13:27 +0100)
committerJérôme Benoit <jerome.benoit@sap.com>
Mon, 16 Mar 2026 12:27:33 +0000 (13:27 +0100)
- OCPPServiceUtils: use SampledValue union in generic constraints
  instead of inline OCPP16SampledValue | OCPP20SampledValue union;
  use StatusNotificationRequest union in satisfies check
- BroadcastChannel: use MeterValuesRequest/Response unions instead
  of OCPP20-specific types in version-dispatched handleMeterValues

Stack-specific types remain in version-switch branches where
TypeScript requires narrowed types for array push operations.

src/charging-station/broadcast-channel/ChargingStationWorkerBroadcastChannel.ts
src/charging-station/ocpp/OCPPServiceUtils.ts

index de73e686ceef127c05e9ef62616da61ef444c635..3b173a76fd971100873289987a6dff3883ae8537 100644 (file)
@@ -36,8 +36,6 @@ import {
   type OCPP20GetCertificateStatusResponse,
   type OCPP20LogStatusNotificationRequest,
   type OCPP20LogStatusNotificationResponse,
-  type OCPP20MeterValuesRequest,
-  type OCPP20MeterValuesResponse,
   type OCPP20NotifyCustomerInformationRequest,
   type OCPP20NotifyCustomerInformationResponse,
   type OCPP20NotifyReportRequest,
@@ -467,12 +465,12 @@ export class ChargingStationWorkerBroadcastChannel extends WorkerBroadcastChanne
   ): Promise<MeterValuesResponse> {
     if (this.chargingStation.stationInfo?.ocppVersion === OCPPVersion.VERSION_201) {
       return await this.chargingStation.ocppRequestService.requestHandler<
-        OCPP20MeterValuesRequest,
-        OCPP20MeterValuesResponse
+        MeterValuesRequest,
+        MeterValuesResponse
       >(
         this.chargingStation,
         RequestCommand.METER_VALUES,
-        requestPayload as OCPP20MeterValuesRequest,
+        requestPayload as MeterValuesRequest,
         this.requestParams
       )
     }
index 0de76ab226562e2065869d0c757566582e0ecb14..f41c24af16df5a3d37725d4f42b32c2a6698fac4 100644 (file)
@@ -41,7 +41,6 @@ import {
   type OCPP20ConnectorStatusEnumType,
   type OCPP20MeterValue,
   type OCPP20SampledValue,
-  type OCPP20StatusNotificationRequest,
   OCPPVersion,
   RequestCommand,
   type SampledValue,
@@ -127,7 +126,7 @@ const buildStatusNotificationRequest = (
         connectorStatus: status as OCPP20ConnectorStatusEnumType,
         evseId: resolvedEvseId,
         timestamp: new Date(),
-      } satisfies OCPP20StatusNotificationRequest
+      } satisfies StatusNotificationRequest
     }
     default:
       throw new OCPPError(
@@ -526,7 +525,7 @@ const buildVoltageMeasurandValue = (
   }
 }
 
-const addMainVoltageToMeterValue = <TSampledValue extends OCPP16SampledValue | OCPP20SampledValue>(
+const addMainVoltageToMeterValue = <TSampledValue extends SampledValue>(
   chargingStation: ChargingStation,
   meterValue: { sampledValue: TSampledValue[] },
   voltageData: { template: SampledValueTemplate; value: number },
@@ -551,7 +550,7 @@ const addMainVoltageToMeterValue = <TSampledValue extends OCPP16SampledValue | O
   }
 }
 
-const addPhaseVoltageToMeterValue = <TSampledValue extends OCPP16SampledValue | OCPP20SampledValue>(
+const addPhaseVoltageToMeterValue = <TSampledValue extends SampledValue>(
   chargingStation: ChargingStation,
   connectorId: number,
   meterValue: { sampledValue: TSampledValue[] },
@@ -600,21 +599,19 @@ const addPhaseVoltageToMeterValue = <TSampledValue extends OCPP16SampledValue |
   )
 }
 
-const addLineToLineVoltageToMeterValue = <
-  TSampledValue extends OCPP16SampledValue | OCPP20SampledValue
->(
-    chargingStation: ChargingStation,
-    connectorId: number,
-    meterValue: { sampledValue: TSampledValue[] },
-    mainVoltageData: { template: SampledValueTemplate; value: number },
-    phase: number,
-    buildVersionedSampledValue: (
-      sampledValueTemplate: SampledValueTemplate,
-      value: number,
-      context?: MeterValueContext,
-      phase?: MeterValuePhase
-    ) => TSampledValue
-  ): void => {
+const addLineToLineVoltageToMeterValue = <TSampledValue extends SampledValue>(
+  chargingStation: ChargingStation,
+  connectorId: number,
+  meterValue: { sampledValue: TSampledValue[] },
+  mainVoltageData: { template: SampledValueTemplate; value: number },
+  phase: number,
+  buildVersionedSampledValue: (
+    sampledValueTemplate: SampledValueTemplate,
+    value: number,
+    context?: MeterValueContext,
+    phase?: MeterValuePhase
+  ) => TSampledValue
+): void => {
   const stationInfo = chargingStation.stationInfo
   if (stationInfo?.phaseLineToLineVoltageMeterValues !== true) {
     return