@@ -718,6 +718,50 @@ declare module 'mongoose' {
718718 : BufferToBinary < T [ K ] > ;
719719 } : T ;
720720
721+ export type ObjectIdToString < T > = T extends TreatAsPrimitives ? T : T extends Record < string , any > ? {
722+ [ K in keyof T ] : T [ K ] extends mongodb . ObjectId
723+ ? string
724+ : T [ K ] extends ( mongodb . ObjectId | null | undefined )
725+ ? string | null | undefined
726+ : T [ K ] extends Types . DocumentArray < infer ItemType >
727+ ? Types . DocumentArray < ObjectIdToString < ItemType > >
728+ : T [ K ] extends Types . Subdocument < unknown , unknown , infer SubdocType >
729+ ? HydratedSingleSubdocument < ObjectIdToString < SubdocType > >
730+ : ObjectIdToString < T [ K ] > ;
731+ } : T ;
732+
733+ export type DateToString < T > = T extends TreatAsPrimitives ? T : T extends Record < string , any > ? {
734+ [ K in keyof T ] : T [ K ] extends NativeDate
735+ ? string
736+ : T [ K ] extends ( NativeDate | null | undefined )
737+ ? string | null | undefined
738+ : T [ K ] extends Types . DocumentArray < infer ItemType >
739+ ? Types . DocumentArray < DateToString < ItemType > >
740+ : T [ K ] extends Types . Subdocument < unknown , unknown , infer SubdocType >
741+ ? HydratedSingleSubdocument < DateToString < SubdocType > >
742+ : DateToString < T [ K ] > ;
743+ } : T ;
744+
745+ export type SubdocsToPOJOs < T > = T extends TreatAsPrimitives ? T : T extends Record < string , any > ? {
746+ [ K in keyof T ] : T [ K ] extends NativeDate
747+ ? string
748+ : T [ K ] extends ( NativeDate | null | undefined )
749+ ? string | null | undefined
750+ : T [ K ] extends Types . DocumentArray < infer ItemType >
751+ ? ItemType
752+ : T [ K ] extends Types . Subdocument < unknown , unknown , infer SubdocType >
753+ ? SubdocType
754+ : SubdocsToPOJOs < T [ K ] > ;
755+ } : T ;
756+
757+ export type JSONSerialized < T > = SubdocsToPOJOs <
758+ FlattenMaps <
759+ ObjectIdToString <
760+ DateToString < T >
761+ >
762+ >
763+ > ;
764+
721765 /**
722766 * Separate type is needed for properties of union type (for example, Types.DocumentArray | undefined) to apply conditional check to each member of it
723767 * https://www.typescriptlang.org/docs/handbook/2/conditional-types.html#distributive-conditional-types
0 commit comments