Spaces:
Sleeping
Sleeping
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; | |
}; | |