fix: fix template name consistency
authorJérôme Benoit <jerome.benoit@sap.com>
Wed, 6 Mar 2024 12:35:44 +0000 (13:35 +0100)
committerJérôme Benoit <jerome.benoit@sap.com>
Wed, 6 Mar 2024 12:35:44 +0000 (13:35 +0100)
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com>
src/charging-station/Bootstrap.ts
src/charging-station/ChargingStation.ts
src/utils/Utils.ts
src/utils/index.ts

index 05fffa5b517692a2ff510b73d5376a66485dd3cd..bd7fda2da58b59f5dad6973a5e2240437d54a7c8 100644 (file)
@@ -1,7 +1,7 @@
 // Partial Copyright Jerome Benoit. 2021-2024. All Rights Reserved.
 
 import { EventEmitter } from 'node:events'
-import { dirname, extname, join, parse } from 'node:path'
+import { dirname, extname, join } from 'node:path'
 import process, { exit } from 'node:process'
 import { fileURLToPath } from 'node:url'
 import { isMainThread } from 'node:worker_threads'
@@ -36,6 +36,7 @@ import {
 import {
   Configuration,
   Constants,
+  buildTemplateName,
   buildTemplateStatisticsPayload,
   formatDurationMilliSeconds,
   generateUUID,
@@ -208,9 +209,7 @@ export class Bootstrap extends EventEmitter {
         // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
         for (const stationTemplateUrl of Configuration.getStationTemplateUrls()!) {
           try {
-            const nbStations =
-              this.templateStatistics.get(parse(stationTemplateUrl.file).name)?.configured ??
-              stationTemplateUrl.numberOfStations
+            const nbStations = stationTemplateUrl.numberOfStations
             for (let index = 1; index <= nbStations; index++) {
               await this.addChargingStation(index, stationTemplateUrl.file)
             }
@@ -495,10 +494,7 @@ export class Bootstrap extends EventEmitter {
       const stationTemplateUrls = Configuration.getStationTemplateUrls()!
       if (isNotEmptyArray(stationTemplateUrls)) {
         for (const stationTemplateUrl of stationTemplateUrls) {
-          const templateName = join(
-            parse(stationTemplateUrl.file).dir,
-            parse(stationTemplateUrl.file).name
-          )
+          const templateName = buildTemplateName(stationTemplateUrl.file)
           this.templateStatistics.set(templateName, {
             configured: stationTemplateUrl.numberOfStations,
             added: 0,
@@ -539,7 +535,7 @@ export class Bootstrap extends EventEmitter {
 
   public async addChargingStation (
     index: number,
-    stationTemplateFile: string,
+    templateFile: string,
     options?: ChargingStationOptions
   ): Promise<void> {
     await this.workerImplementation?.addElement({
@@ -548,12 +544,12 @@ export class Bootstrap extends EventEmitter {
         dirname(fileURLToPath(import.meta.url)),
         'assets',
         'station-templates',
-        stationTemplateFile
+        templateFile
       ),
       options
     })
     // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
-    const templateStatistics = this.templateStatistics.get(parse(stationTemplateFile).name)!
+    const templateStatistics = this.templateStatistics.get(buildTemplateName(templateFile))!
     ++templateStatistics.added
     templateStatistics.indexes.add(index)
   }
index 82fba5adad98c6629a6579b8e7c8516df38bb7bb..f79a59cea3943c2c9a79ca7c6cde8b37582b3d85 100644 (file)
@@ -3,7 +3,7 @@
 import { createHash } from 'node:crypto'
 import { EventEmitter } from 'node:events'
 import { type FSWatcher, existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs'
-import { dirname, join, parse } from 'node:path'
+import { dirname, join } from 'node:path'
 import { URL } from 'node:url'
 import { parentPort } from 'node:worker_threads'
 
@@ -131,6 +131,7 @@ import {
   buildEvsesStatus,
   buildStartedMessage,
   buildStoppedMessage,
+  buildTemplateName,
   buildUpdatedMessage,
   clone,
   convertToBoolean,
@@ -1163,7 +1164,7 @@ export class ChargingStation extends EventEmitter {
     const stationInfo = stationTemplateToStationInfo(stationTemplate)
     stationInfo.hashId = getHashId(this.index, stationTemplate)
     stationInfo.templateIndex = this.index
-    stationInfo.templateName = parse(this.templateFile).name
+    stationInfo.templateName = buildTemplateName(this.templateFile)
     stationInfo.chargingStationId = getChargingStationId(this.index, stationTemplate)
     createSerialNumber(stationTemplate, stationInfo)
     stationInfo.voltageOut = this.getVoltageOut(stationInfo)
@@ -1223,7 +1224,7 @@ export class ChargingStation extends EventEmitter {
         }
         // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
         if (stationInfo.templateName == null) {
-          stationInfo.templateName = parse(this.templateFile).name
+          stationInfo.templateName = buildTemplateName(this.templateFile)
         }
       }
     }
index abfac5e4873c98af8a4afa225ed1568fa4c9cec8..c39c95e67a35503c2e237efe2eca78ae8e287e3f 100644 (file)
@@ -1,5 +1,7 @@
 import { getRandomValues, randomBytes, randomInt, randomUUID } from 'node:crypto'
+import { dirname, isAbsolute, join, parse, relative, resolve } from 'node:path'
 import { env, nextTick } from 'node:process'
+import { fileURLToPath } from 'node:url'
 
 import {
   formatDuration,
@@ -207,6 +209,17 @@ export const getRandomFloatFluctuatedRounded = (
   )
 }
 
+export const buildTemplateName = (templateFile: string): string => {
+  if (isAbsolute(templateFile)) {
+    templateFile = relative(
+      resolve(join(dirname(fileURLToPath(import.meta.url)), 'assets', 'station-templates')),
+      templateFile
+    )
+  }
+  const templateFileParsedPath = parse(templateFile)
+  return join(templateFileParsedPath.dir, templateFileParsedPath.name)
+}
+
 export const extractTimeSeriesValues = (timeSeries: TimestampedData[]): number[] => {
   return timeSeries.map(timeSeriesItem => timeSeriesItem.value)
 }
index 1bc4fe7e0d64d5b4a161b476194d56d863eaa3b6..fdcb6fa28545a84c272123ca31fe4ac05e592008 100644 (file)
@@ -29,6 +29,7 @@ export {
 } from './MessageChannelUtils.js'
 export {
   JSONStringifyWithMapSupport,
+  buildTemplateName,
   clone,
   convertToBoolean,
   convertToDate,