modarb-be / src /helpers /serialize.ts
moahmedwafy's picture
fix: serializer
a916ce0
raw
history blame
1.3 kB
import { plainToClass } from "class-transformer";
import { Document } from "mongoose";
/**
* Serializes the given object or array of objects into the specified class type.
*
* @template T - The class type to serialize the object(s) into.
* @param serializable - The object or array of objects to be serialized.
* @param serializer - The class constructor function for the target serialization type.
* @returns The serialized object(s) of type T or an array of serialized objects of type T.
*/
export const serialize = <T>(
serializable:
| Record<string, any>
| Record<string, any>[]
| Document
| Document[],
serializer: new () => T
): T | T[] => {
if (!serializable) return serializable as T | T[];
// If the serializable object is a Document, convert it to a JSON object.
if (serializable.hasOwnProperty("toJSON"))
serializable = (serializable as Document).toJSON();
serializable = JSON.parse(JSON.stringify(serializable));
// If the serializable object is an array, serialize each item in the array.
if (Array.isArray(serializable)) {
return serializable.map((item) => serialize(item, serializer)) as T[];
}
// Serialize the object and return it.
return plainToClass(serializer, serializable, {
excludeExtraneousValues: true,
}) as T;
};