From 1c9957c9d3ed3c53fa84677b51da5ac9570ee38a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C3=ABl=20Minelli?= <michael@minelli.me>
Date: Wed, 21 Feb 2024 21:26:58 +0100
Subject: [PATCH] DojoModelsHelper => Add a function to serialize objects with
 LazyVal

---
 ExpressAPI/src/helpers/DojoModelsHelper.ts | 33 ++++++++++++++++++++++
 1 file changed, 33 insertions(+)
 create mode 100644 ExpressAPI/src/helpers/DojoModelsHelper.ts

diff --git a/ExpressAPI/src/helpers/DojoModelsHelper.ts b/ExpressAPI/src/helpers/DojoModelsHelper.ts
new file mode 100644
index 0000000..8fa9e5f
--- /dev/null
+++ b/ExpressAPI/src/helpers/DojoModelsHelper.ts
@@ -0,0 +1,33 @@
+import LazyVal from '../shared/helpers/LazyVal';
+
+
+class DojoModelsHelper {
+    /**
+     * Get a full serializable object from a given object that contains LazyVal instances
+     *
+     * @param obj
+     * @param depth The depth of the search for LazyVal instances
+     */
+    async getFullSerializableObject<T extends NonNullable<unknown>>(obj: T, depth: number = 0): Promise<unknown> {
+        /* eslint-disable-next-line  @typescript-eslint/no-explicit-any */
+        const result: any = {};
+
+        for ( const key in obj ) {
+            let value: unknown = obj[key];
+            if ( value instanceof LazyVal ) {
+                value = await (obj[key] as LazyVal<unknown>).value;
+            }
+
+            if ( typeof value === 'object' && obj[key] !== null && depth > 0 ) {
+                result[key] = await this.getFullSerializableObject(value as NonNullable<unknown>, depth - 1);
+            } else {
+                result[key] = value;
+            }
+        }
+
+        return result;
+    }
+}
+
+
+export default new DojoModelsHelper();
\ No newline at end of file
-- 
GitLab