@@ -30,8 +30,18 @@ export default class PolymorphicSerializer<
30
30
) : Promise < Partial < DataDocument < PrimaryType > > > {
31
31
if ( Array . isArray ( data ) ) {
32
32
const documents = await Promise . all (
33
- data . map ( ( d ) => {
34
- return this . serializeSingle ( d , options ) ;
33
+ Object . values (
34
+ data . reduce ( ( acc , d ) => {
35
+ // group data by type
36
+ const type = d [ this . key ] ;
37
+ if ( ! acc [ type ] ) {
38
+ acc [ type ] = [ ] ;
39
+ }
40
+ acc [ type ] . push ( d ) ;
41
+ return acc ;
42
+ } , { } as Record < keyof PrimaryType , PrimaryType [ ] > )
43
+ ) . map ( ( d ) => {
44
+ return this . serializeType ( d , options ) ;
35
45
} )
36
46
) ;
37
47
@@ -46,7 +56,7 @@ export default class PolymorphicSerializer<
46
56
return result ;
47
57
} ) ;
48
58
} else if ( data ) {
49
- return this . serializeSingle ( data , options ) ;
59
+ return this . serializeType ( data , options ) ;
50
60
}
51
61
52
62
return Object . values ( this . serialisers ) [ 0 ] . serialize ( data , options ) ;
@@ -76,11 +86,11 @@ export default class PolymorphicSerializer<
76
86
return super . createResource ( data , options , helpers , relatorDataCache ) ;
77
87
}
78
88
79
- private async serializeSingle (
80
- data : PrimaryType ,
81
- options ?: Partial < SerializerOptions < PrimaryType > >
89
+ private async serializeType < T extends PrimaryType > (
90
+ data : SingleOrArray < T > ,
91
+ options ?: Partial < SerializerOptions < T > >
82
92
) {
83
- const serializer = this . getSerializerForData ( data ) ;
93
+ const serializer = this . getSerializerForData ( Array . isArray ( data ) ? data [ 0 ] : data ) ;
84
94
if ( serializer ) {
85
95
return serializer . serialize ( data , options ) ;
86
96
}
0 commit comments