@@ -43,6 +43,8 @@ function isValid (isArray, type, payload, method) {
4343 * @private
4444 */
4545function serialiseRelationOne ( node , nodeType ) {
46+ // Handle empty to-one relationship
47+ if ( node === null ) return node
4648 let relation = { }
4749 for ( const prop of Object . keys ( node ) ) {
4850 if ( [ 'id' , 'type' ] . includes ( prop ) ) relation [ prop ] = node [ prop ]
@@ -117,6 +119,8 @@ function serialiseAttr (node, key, data) {
117119 * @private
118120 */
119121function hasID ( node ) {
122+ // Handle empty to-one and to-many relationships
123+ if ( node ?. data === null || ( Array . isArray ( node ?. data ) && node ?. data ?. length === 0 ) ) return true
120124 if ( ! node . data ) return false
121125 // Check if relationship is to-many
122126 const nodeData = Array . isArray ( node . data ) ? node . data [ 0 ] : node . data
@@ -168,7 +172,6 @@ function serialiseRootObject (type, payload, method, options) {
168172 // 1. Skip null nodes, 2. Only grab objects, 3. Filter to only serialise relationable objects
169173 if ( node !== null && node ?. constructor === Object && hasID ( node ) ) {
170174 data = serialiseRelation ( node , nodeType , key , data )
171-
172175 // 1. Don't place id/key inside attributes object
173176 } else if ( key !== 'id' && key !== 'type' ) {
174177 data = serialiseAttr ( node , key , data )
0 commit comments