Add error handling to JSON schemas file reading
[e-mobility-charging-stations-simulator.git] / src / charging-station / ocpp / 2.0 / OCPP20ServiceUtils.ts
index 63e43115dabaf6db2ccdba3c3dee653b91948bb9..2c7d3df3191f2246eb3086e4bb02d003ef241663 100644 (file)
@@ -1,5 +1,30 @@
 // Partial Copyright Jerome Benoit. 2021-2023. All Rights Reserved.
 
+import fs from 'node:fs';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+
+import type { JSONSchemaType } from 'ajv';
+
+import { FileType } from '../../../types/FileType';
+import type { JsonType } from '../../../types/JsonType';
+import { OCPPVersion } from '../../../types/ocpp/OCPPVersion';
+import FileUtils from '../../../utils/FileUtils';
 import { OCPPServiceUtils } from '../OCPPServiceUtils';
 
-export class OCPP20ServiceUtils extends OCPPServiceUtils {}
+export class OCPP20ServiceUtils extends OCPPServiceUtils {
+  public static parseJsonSchemaFile<T extends JsonType>(relativePath: string): JSONSchemaType<T> {
+    const filePath = path.resolve(path.dirname(fileURLToPath(import.meta.url)), relativePath);
+    try {
+      return JSON.parse(fs.readFileSync(filePath, 'utf8')) as JSONSchemaType<T>;
+    } catch (error) {
+      FileUtils.handleFileException(
+        OCPPServiceUtils.logPrefix(OCPPVersion.VERSION_20),
+        FileType.JsonSchema,
+        filePath,
+        error as NodeJS.ErrnoException,
+        { throwError: false }
+      );
+    }
+  }
+}