kitsu-core
Version:
Simple, lightweight & framework agnostic JSON:API (de)serialsation components
31 lines (28 loc) • 1.19 kB
JavaScript
import { deattribute } from './deattribute.mjs';
import { linkRelationships } from './linkRelationships.mjs';
import './filterIncludes.mjs';
import './error.mjs';
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(value, included, previouslyLinked, relationshipCache);
if (value.attributes) value = 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(response.data, response.included);else if (typeof response.data === 'object' && response.data !== null) response.data = linkRelationships(response.data);
delete response.included;
if (response.data?.attributes) response.data = deattribute(response.data);
return response;
}
export { deserialise };