fix: ensure null or undefined checks in condition
authorJérôme Benoit <jerome.benoit@sap.com>
Mon, 7 Aug 2023 22:10:53 +0000 (00:10 +0200)
committerJérôme Benoit <jerome.benoit@sap.com>
Mon, 7 Aug 2023 22:10:53 +0000 (00:10 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com>
src/charging-station/AutomaticTransactionGenerator.ts
src/charging-station/ChargingStation.ts
src/charging-station/Helpers.ts
src/charging-station/ocpp/OCPPServiceUtils.ts
src/charging-station/ui-server/UIWebSocketServer.ts
src/utils/Configuration.ts

index 1cf949d7545f4b970c438b4e2813349180767c19..e53026babedf21fccc915c88c022eabd3622bd02 100644 (file)
@@ -230,18 +230,18 @@ export class AutomaticTransactionGenerator extends AsyncResource {
             ),
           );
           logger.info(
-            `${this.logPrefix(connectorId)} transaction started with id ${this.chargingStation
-              .getConnectorStatus(connectorId)
-              ?.transactionId?.toString()} and will stop in ${formatDurationMilliSeconds(
-              waitTrxEnd,
-            )}`,
+            `${this.logPrefix(
+              connectorId,
+            )} transaction started with id ${this.chargingStation.getConnectorStatus(connectorId)
+              ?.transactionId} and will stop in ${formatDurationMilliSeconds(waitTrxEnd)}`,
           );
           await sleep(waitTrxEnd);
           // Stop transaction
           logger.info(
-            `${this.logPrefix(connectorId)} stop transaction with id ${this.chargingStation
-              .getConnectorStatus(connectorId)
-              ?.transactionId?.toString()}`,
+            `${this.logPrefix(
+              connectorId,
+            )} stop transaction with id ${this.chargingStation.getConnectorStatus(connectorId)
+              ?.transactionId}`,
           );
           await this.stopTransaction(connectorId);
         }
@@ -249,11 +249,10 @@ export class AutomaticTransactionGenerator extends AsyncResource {
         ++this.connectorsStatus.get(connectorId)!.skippedConsecutiveTransactions!;
         ++this.connectorsStatus.get(connectorId)!.skippedTransactions!;
         logger.info(
-          `${this.logPrefix(connectorId)} skipped consecutively ${this.connectorsStatus
-            .get(connectorId)
-            ?.skippedConsecutiveTransactions?.toString()}/${this.connectorsStatus
-            .get(connectorId)
-            ?.skippedTransactions?.toString()} transaction(s)`,
+          `${this.logPrefix(connectorId)} skipped consecutively ${this.connectorsStatus.get(
+            connectorId,
+          )?.skippedConsecutiveTransactions}/${this.connectorsStatus.get(connectorId)
+            ?.skippedTransactions} transaction(s)`,
         );
       }
       this.connectorsStatus.get(connectorId)!.lastRunDate = new Date();
@@ -460,7 +459,7 @@ export class AutomaticTransactionGenerator extends AsyncResource {
       const transactionId = this.chargingStation.getConnectorStatus(connectorId)?.transactionId;
       logger.warn(
         `${this.logPrefix(connectorId)} stopping a not started transaction${
-          !isNullOrUndefined(transactionId) ? ` with id ${transactionId?.toString()}` : ''
+          !isNullOrUndefined(transactionId) ? ` with id ${transactionId}` : ''
         }`,
       );
     }
@@ -477,7 +476,7 @@ export class AutomaticTransactionGenerator extends AsyncResource {
   private logPrefix = (connectorId?: number): string => {
     return logPrefix(
       ` ${this.chargingStation.stationInfo.chargingStationId} | ATG${
-        !isNullOrUndefined(connectorId) ? ` on connector #${connectorId!.toString()}` : ''
+        !isNullOrUndefined(connectorId) ? ` on connector #${connectorId}` : ''
       }:`,
     );
   };
index 3cf7c60e22de46f98f0b350507f7407a06e15cc1..1e3cebf513b6570f4e1af8bf4c8efe064a5e5516 100644 (file)
@@ -366,7 +366,7 @@ export class ChargingStation {
   public getMaximumPower(stationInfo?: ChargingStationInfo): number {
     const localStationInfo = stationInfo ?? this.stationInfo;
     return (
-      (localStationInfo['maxPower' as keyof ChargingStationInfo] as number) ??
+      (localStationInfo?.['maxPower' as keyof ChargingStationInfo] as number) ??
       localStationInfo.maximumPower
     );
   }
@@ -1509,7 +1509,7 @@ export class ChargingStation {
           for (let connectorId = 0; connectorId <= configuredMaxConnectors; connectorId++) {
             if (
               connectorId === 0 &&
-              (!stationTemplate?.Connectors[connectorId] ||
+              (!stationTemplate?.Connectors?.[connectorId] ||
                 this.getUseConnectorId0(stationTemplate) === false)
             ) {
               continue;
index bb3bb5af51d540396337e41ef3194cf703d4932d..068bc6c970afeaa9e402cc4f69086ccafae59ded 100644 (file)
@@ -262,7 +262,7 @@ export const checkConnectorsConfiguration = (
   checkConfiguredMaxConnectors(configuredMaxConnectors, logPrefix, templateFile);
   const templateMaxConnectors = getMaxNumberOfConnectors(stationTemplate.Connectors!);
   checkTemplateMaxConnectors(templateMaxConnectors, logPrefix, templateFile);
-  const templateMaxAvailableConnectors = stationTemplate.Connectors![0]
+  const templateMaxAvailableConnectors = stationTemplate.Connectors?.[0]
     ? templateMaxConnectors - 1
     : templateMaxConnectors;
   if (
@@ -645,7 +645,7 @@ const getConfiguredMaxNumberOfConnectors = (stationTemplate: ChargingStationTemp
   } else if (isUndefined(stationTemplate.numberOfConnectors) === false) {
     configuredMaxNumberOfConnectors = stationTemplate.numberOfConnectors as number;
   } else if (stationTemplate.Connectors && !stationTemplate.Evses) {
-    configuredMaxNumberOfConnectors = stationTemplate.Connectors[0]
+    configuredMaxNumberOfConnectors = stationTemplate.Connectors?.[0]
       ? getMaxNumberOfConnectors(stationTemplate.Connectors) - 1
       : getMaxNumberOfConnectors(stationTemplate.Connectors);
   } else if (stationTemplate.Evses && !stationTemplate.Connectors) {
@@ -709,7 +709,7 @@ const warnDeprecatedTemplateKey = (
   templateFile: string,
   logMsgToAppend = '',
 ): void => {
-  if (!isUndefined(template[key as keyof ChargingStationTemplate])) {
+  if (!isUndefined(template?.[key as keyof ChargingStationTemplate])) {
     const logMsg = `Deprecated template key '${key}' usage in file '${templateFile}'${
       isNotEmptyString(logMsgToAppend) ? `. ${logMsgToAppend}` : ''
     }`;
@@ -723,7 +723,7 @@ const convertDeprecatedTemplateKey = (
   deprecatedKey: string,
   key?: string,
 ): void => {
-  if (!isUndefined(template[deprecatedKey as keyof ChargingStationTemplate])) {
+  if (!isUndefined(template?.[deprecatedKey as keyof ChargingStationTemplate])) {
     if (!isUndefined(key)) {
       (template as unknown as Record<string, unknown>)[key!] =
         template[deprecatedKey as keyof ChargingStationTemplate];
index d3930db4244b11502ccea147df11e641af5b5d0b..b4a7e3241a94aaa58204b15d782a19ea910950db 100644 (file)
@@ -88,9 +88,9 @@ export class OCPPServiceUtils {
       return true;
     } else if (
       isRequestCommand === true &&
-      chargingStation.stationInfo?.commandsSupport?.outgoingCommands
+      chargingStation.stationInfo?.commandsSupport?.outgoingCommands?.[command]
     ) {
-      return chargingStation.stationInfo?.commandsSupport?.outgoingCommands[command] ?? false;
+      return chargingStation.stationInfo?.commandsSupport?.outgoingCommands[command];
     }
     logger.error(`${chargingStation.logPrefix()} Unknown outgoing OCPP command '${command}'`);
     return false;
@@ -109,9 +109,9 @@ export class OCPPServiceUtils {
       return true;
     } else if (
       isIncomingRequestCommand === true &&
-      chargingStation.stationInfo?.commandsSupport?.incomingCommands
+      chargingStation.stationInfo?.commandsSupport?.incomingCommands?.[command]
     ) {
-      return chargingStation.stationInfo?.commandsSupport?.incomingCommands[command] ?? false;
+      return chargingStation.stationInfo?.commandsSupport?.incomingCommands[command];
     }
     logger.error(`${chargingStation.logPrefix()} Unknown incoming OCPP command '${command}'`);
     return false;
@@ -124,8 +124,11 @@ export class OCPPServiceUtils {
     const isMessageTrigger = Object.values(MessageTrigger).includes(messageTrigger);
     if (isMessageTrigger === true && !chargingStation.stationInfo?.messageTriggerSupport) {
       return true;
-    } else if (isMessageTrigger === true && chargingStation.stationInfo?.messageTriggerSupport) {
-      return chargingStation.stationInfo?.messageTriggerSupport[messageTrigger] ?? false;
+    } else if (
+      isMessageTrigger === true &&
+      chargingStation.stationInfo?.messageTriggerSupport?.[messageTrigger]
+    ) {
+      return chargingStation.stationInfo?.messageTriggerSupport[messageTrigger];
     }
     logger.error(
       `${chargingStation.logPrefix()} Unknown incoming OCPP message trigger '${messageTrigger}'`,
@@ -377,7 +380,7 @@ export class OCPPServiceUtils {
         return sampledValueTemplates[index];
       } else if (
         !phase &&
-        !sampledValueTemplates[index].phase &&
+        !sampledValueTemplates[index]?.phase &&
         sampledValueTemplates[index]?.measurand === measurand &&
         getConfigurationKey(
           chargingStation,
@@ -387,8 +390,8 @@ export class OCPPServiceUtils {
         return sampledValueTemplates[index];
       } else if (
         measurand === MeterValueMeasurand.ENERGY_ACTIVE_IMPORT_REGISTER &&
-        (!sampledValueTemplates[index].measurand ||
-          sampledValueTemplates[index].measurand === measurand)
+        (!sampledValueTemplates[index]?.measurand ||
+          sampledValueTemplates[index]?.measurand === measurand)
       ) {
         return sampledValueTemplates[index];
       }
index 5651ab5a405f3d98c00f0688ff7f493ab7da8a71..e322ef8db9901889344e41f9b97d41d1616c7bb3 100644 (file)
@@ -118,7 +118,7 @@ export class UIWebSocketServer extends AbstractUIServer {
   }
 
   public sendResponse(response: ProtocolResponse): void {
-    const responseId = response[0];
+    const responseId = response?.[0];
     try {
       if (this.hasResponseHandler(responseId)) {
         const ws = this.responseHandlers.get(responseId) as WebSocket;
@@ -203,7 +203,7 @@ export class UIWebSocketServer extends AbstractUIServer {
       return false;
     }
 
-    if (validateUUID(request[0]) === false) {
+    if (validateUUID(request?.[0]) === false) {
       logger.error(
         `${this.logPrefix(
           moduleName,
index b9fc7bd67ca8a778a30c632f55f1806119766960..9a4db77fddbe19345c1a921b08abef43f630f2c9 100644 (file)
@@ -75,9 +75,7 @@ export class Configuration {
   }
 
   public static getAutoReconnectMaxRetries(): number | undefined {
-    if (hasOwnProp(Configuration.getConfigurationData(), 'autoReconnectMaxRetries')) {
-      return Configuration.getConfigurationData()?.autoReconnectMaxRetries;
-    }
+    return Configuration.getConfigurationData()?.autoReconnectMaxRetries;
   }
 
   public static getStationTemplateUrls(): StationTemplateUrl[] | undefined {
@@ -88,7 +86,7 @@ export class Configuration {
   public static getSupervisionUrls(): string | string[] | undefined {
     if (
       !isUndefined(
-        Configuration.getConfigurationData()!['supervisionURLs' as keyof ConfigurationData],
+        Configuration.getConfigurationData()?.['supervisionURLs' as keyof ConfigurationData],
       )
     ) {
       Configuration.getConfigurationData()!.supervisionUrls = Configuration.getConfigurationData()![
@@ -323,15 +321,15 @@ export class Configuration {
       "Use 'stationTemplateUrls' instead",
     );
     !isUndefined(
-      Configuration.getConfigurationData()!['stationTemplateURLs' as keyof ConfigurationData],
+      Configuration.getConfigurationData()?.['stationTemplateURLs' as keyof ConfigurationData],
     ) &&
       (Configuration.getConfigurationData()!.stationTemplateUrls =
         Configuration.getConfigurationData()![
           'stationTemplateURLs' as keyof ConfigurationData
         ] as StationTemplateUrl[]);
-    Configuration.getConfigurationData()!.stationTemplateUrls.forEach(
+    Configuration.getConfigurationData()?.stationTemplateUrls.forEach(
       (stationTemplateUrl: StationTemplateUrl) => {
-        if (!isUndefined(stationTemplateUrl['numberOfStation' as keyof StationTemplateUrl])) {
+        if (!isUndefined(stationTemplateUrl?.['numberOfStation' as keyof StationTemplateUrl])) {
           console.error(
             `${chalk.green(Configuration.logPrefix())} ${chalk.red(
               `Deprecated configuration key 'numberOfStation' usage for template file '${stationTemplateUrl.file}' in 'stationTemplateUrls'. Use 'numberOfStations' instead`,
@@ -483,14 +481,16 @@ export class Configuration {
   ) {
     if (
       sectionName &&
-      !isUndefined(Configuration.getConfigurationData()![sectionName as keyof ConfigurationData]) &&
+      !isUndefined(
+        Configuration.getConfigurationData()?.[sectionName as keyof ConfigurationData],
+      ) &&
       !isUndefined(
         (
-          Configuration.getConfigurationData()![sectionName as keyof ConfigurationData] as Record<
+          Configuration.getConfigurationData()?.[sectionName as keyof ConfigurationData] as Record<
             string,
             unknown
           >
-        )[key],
+        )?.[key],
       )
     ) {
       console.error(
@@ -501,7 +501,7 @@ export class Configuration {
         )}`,
       );
     } else if (
-      !isUndefined(Configuration.getConfigurationData()![key as keyof ConfigurationData])
+      !isUndefined(Configuration.getConfigurationData()?.[key as keyof ConfigurationData])
     ) {
       console.error(
         `${chalk.green(Configuration.logPrefix())} ${chalk.red(