Add helper to serialize to JSON object with a map
authorJérôme Benoit <jerome.benoit@sap.com>
Mon, 29 Aug 2022 18:18:49 +0000 (20:18 +0200)
committerJérôme Benoit <jerome.benoit@sap.com>
Mon, 29 Aug 2022 18:18:49 +0000 (20:18 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com>
src/performance/storage/JsonFileStorage.ts
src/utils/Utils.ts

index d1c294d8185e2d4526b2eeeec3e29f31f0f21220..2cdab50560fda0cd5e744d8265c4f1f49edeef61 100644 (file)
@@ -7,6 +7,7 @@ import lockfile from 'proper-lockfile';
 import { FileType } from '../../types/FileType';
 import type Statistics from '../../types/Statistics';
 import FileUtils from '../../utils/FileUtils';
+import Utils from '../../utils/Utils';
 import { Storage } from './Storage';
 
 export class JsonFileStorage extends Storage {
@@ -30,19 +31,7 @@ export class JsonFileStorage extends Storage {
           performanceRecords.push(performanceStatistics);
           fs.writeFileSync(
             this.dbName,
-            JSON.stringify(
-              performanceRecords,
-              (key, value) => {
-                if (value instanceof Map) {
-                  return {
-                    dataType: 'Map',
-                    value: [...value],
-                  };
-                }
-                return value as Statistics;
-              },
-              2
-            ),
+            Utils.JSONStringifyWithMapSupport(performanceRecords, 2),
             'utf8'
           );
         } catch (error) {
index 1ad1a7924bb0b5e4eb5e8fc7778a9d89f953eda6..5b66368fa87f264dc8a2d93c72c2a6c55ad809cc 100644 (file)
@@ -238,4 +238,23 @@ export default class Utils {
   public static secureRandom(): number {
     return crypto.randomBytes(4).readUInt32LE() / 0x100000000;
   }
+
+  public static JSONStringifyWithMapSupport(
+    obj: Record<string, unknown> | Record<string, unknown>[],
+    space?: number
+  ): string {
+    return JSON.stringify(
+      obj,
+      (key, value: Record<string, unknown>) => {
+        if (value instanceof Map) {
+          return {
+            dataType: 'Map',
+            value: [...value],
+          };
+        }
+        return value;
+      },
+      space
+    );
+  }
 }