kitsu-core
Version:
Simple, lightweight & framework agnostic JSON:API (de)serialsation components
33 lines (29 loc) • 1.29 kB
JavaScript
var deattribute = require('./deattribute.js');
var linkRelationships = require('./linkRelationships.js');
require('./filterIncludes.js');
require('./error.js');
function deserialiseArray(response) {
const previouslyLinked = {};
const relationshipCache = {};
for (let value of response.data) {
const included = [...response.data.map(item => ({
...item,
relationships: {
...item.relationships
}
})), ...(response.included || [])];
value = linkRelationships.linkRelationships(value, included, previouslyLinked, relationshipCache);
if (value.attributes) value = deattribute.deattribute(value);
response.data[response.data.indexOf(value)] = value;
}
return response;
}
function deserialise(response) {
if (!response) return;
if (Array.isArray(response.data)) response = deserialiseArray(response);else if (response.included) response.data = linkRelationships.linkRelationships(response.data, response.included);else if (typeof response.data === 'object' && response.data !== null) response.data = linkRelationships.linkRelationships(response.data);
delete response.included;
if (response.data?.attributes) response.data = deattribute.deattribute(response.data);
return response;
}
exports.deserialise = deserialise;
;