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