Skip to content

Commit 8a7d453

Browse files
committed
fix(kitsu-core): prevent empty relationships from being stripped during serialisation
Closes #517
1 parent 0dda0fe commit 8a7d453

1 file changed

Lines changed: 4 additions & 1 deletion

File tree

  • packages/kitsu-core/src/serialise

packages/kitsu-core/src/serialise/index.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ function isValid (isArray, type, payload, method) {
4343
* @private
4444
*/
4545
function 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
*/
119121
function 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

Comments
 (0)