diff --git a/lib/JSONAPISerializer.js b/lib/JSONAPISerializer.js index 2bb24ba..492e292 100644 --- a/lib/JSONAPISerializer.js +++ b/lib/JSONAPISerializer.js @@ -2,7 +2,7 @@ const { pick, isEmpty, omit, - isPlainObject, + omitBy, transform, get, set, @@ -678,15 +678,18 @@ module.exports = class JSONAPISerializer { const serializedRelationship = { type }; // Support for unpopulated relationships (an id, or array of ids) - if (!isPlainObject(rData)) { + if (typeof rData !== 'object') { serializedRelationship.id = rData.toString(); } else { // Relationship has been populated serializedRelationship.id = rData[rOptions.id].toString(); - included.set( - `${type}-${serializedRelationship.id}`, - this.serializeResource(type, rData, rOptions, included, extraData) - ); + const filteredKeys = Object.keys(omitBy(rData, x => !x)); + if (!(filteredKeys.length === 1 && filteredKeys[0] === 'id')) { + included.set( + `${type}-${serializedRelationship.id}`, + this.serializeResource(type, rData, rOptions, included, extraData) + ); + } } return serializedRelationship; } @@ -746,7 +749,7 @@ module.exports = class JSONAPISerializer { converted = transform( data, (result, value, key) => { - if (typeof value === 'object') { + if (value && typeof value === 'object') { result[this._convertCase(key, convertCaseOptions)] = this._convertCase( value, convertCaseOptions diff --git a/lib/helpers.js b/lib/helpers.js index 7fe6dea..8c0e9ac 100644 --- a/lib/helpers.js +++ b/lib/helpers.js @@ -2,6 +2,7 @@ const { pick, isEmpty, omit, + omitBy, isPlainObject, transform, toKebabCase, @@ -23,6 +24,7 @@ module.exports = { pick, isEmpty, omit, + omitBy, isPlainObject, transform, toKebabCase,