]> Piment Noir Git Repositories - e-mobility-charging-stations-simulator.git/commitdiff
refactor: eliminate explicit `any` from `once()` and `toHandler()` with proper generics
authorJérôme Benoit <jerome.benoit@sap.com>
Fri, 27 Mar 2026 14:56:48 +0000 (15:56 +0100)
committerJérôme Benoit <jerome.benoit@sap.com>
Fri, 27 Mar 2026 14:56:48 +0000 (15:56 +0100)
src/charging-station/ocpp/2.0/OCPP20IncomingRequestService.ts
src/utils/Utils.ts

index fe1d2e2e5a3e76d81555da0b08a0251e9b3cff09..eaaef1719d81dffe05718bf50a896c992ea5c49e 100644 (file)
@@ -3668,11 +3668,11 @@ export class OCPP20IncomingRequestService extends OCPPIncomingRequestService {
     )
   }
 
-  private toHandler (
-    // eslint-disable-next-line @typescript-eslint/no-explicit-any
-    handler: (chargingStation: ChargingStation, commandPayload: any) => JsonType | Promise<JsonType>
+  // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters -- bridges contravariant handler signatures into IncomingRequestHandler
+  private toHandler<P extends JsonType, R extends JsonType>(
+    handler: (chargingStation: ChargingStation, commandPayload: P) => Promise<R> | R
   ): IncomingRequestHandler {
-    return handler as IncomingRequestHandler
+    return handler as unknown as IncomingRequestHandler
   }
 
   private triggerAllEvseStatusNotifications (
index 1d79ac8962007bc33acfc2e8f340a6a6136f8db3..71159ee761371ee5af3cc5d1c9bf7043e6f6a3ed 100644 (file)
@@ -30,17 +30,15 @@ export const logPrefix = (prefixString = ''): string => {
   return `${new Date().toLocaleString()}${prefixString}`
 }
 
-// eslint-disable-next-line @typescript-eslint/no-explicit-any
-export const once = <T extends (...args: any[]) => any>(fn: T): T => {
+export const once = <A extends unknown[], R>(fn: (...args: A) => R): ((...args: A) => R) => {
   let hasBeenCalled = false
-  let result: ReturnType<T>
+  let result!: R
   let thrownError: Error | undefined
-  // eslint-disable-next-line @typescript-eslint/no-explicit-any
-  return function (this: any, ...args: Parameters<T>): ReturnType<T> {
+  return (...args: A): R => {
     if (!hasBeenCalled) {
       hasBeenCalled = true
       try {
-        result = fn.apply(this, args) as ReturnType<T>
+        result = fn(...args)
       } catch (err) {
         thrownError = err as Error
       }
@@ -48,9 +46,8 @@ export const once = <T extends (...args: any[]) => any>(fn: T): T => {
     if (thrownError != null) {
       throw thrownError
     }
-    // eslint-disable-next-line @typescript-eslint/no-unsafe-return
     return result
-  } as T
+  }
 }
 
 export const has = (property: PropertyKey, object: unknown): boolean => {