@ehubbell/serializers
Version:
A collection of data serializers for various projects.
113 lines (112 loc) • 3.95 kB
JavaScript
import { i as isArray, a as isObject, d as dashToUnderscore, b as dashToCamel } from "./transforms-a21adc9e.js";
const formatLookup = (type) => {
switch (type) {
case "camel":
return dashToCamel;
case "underscore":
return dashToUnderscore;
}
};
const normalizeArray = (type = "camel", data = [], included = [], meta = {}) => {
const normalizedArray = { data: [], meta: {} };
data.map((v) => normalizedArray.data.push(normalizeAttrs(type, v, included)));
normalizedArray.meta = normalizeMeta(meta);
return normalizedArray;
};
const normalize = (type = "camel", data, attrs2 = []) => {
const normalizedData = { data: {} };
Object.assign(normalizedData.data, normalizeAttrs(type, data, attrs2));
return normalizedData;
};
const normalizeAttrs = (type, data, attrs2 = []) => {
const formatter = formatLookup(type);
const normalizedAttrs = {};
Object.keys(data).map((key) => {
if (attrs2.includes(key))
return;
if (isArray(data[key])) {
return normalizedAttrs[formatter(key)] = data[key].map((v) => normalizeAttrs(v, attrs2));
}
if (isObject(data[key])) {
return normalizedAttrs[formatter(key)] = normalizeAttrs(data[key], attrs2);
}
return normalizedAttrs[formatter(key)] = data[key];
});
return normalizedAttrs;
};
const normalizeMeta = (meta) => {
const formatter = formatLookup("camel");
const normalizedMeta = {};
Object.keys(meta).map((key) => normalizedMeta[formatter(key)] = parseInt(meta[key]));
return normalizedMeta;
};
const attrs = {
type: { normalize: false, serialize: false },
updatedAt: { serialize: false },
createdAt: { serialize: false }
};
const checkAttrs = (key) => {
const keys = Object.keys(attrs);
return keys.includes(key) ? attrs[key] : {};
};
const jsonApiNormalizeArray = (data = [], included = [], meta = {}) => {
const normalizedArray = { data: [], meta: {} };
data.map((v) => normalizedArray.data.push(jsonApiNormalizeAttrs(v, included)));
normalizedArray.meta = jsonApiNormalizeMeta(meta);
return normalizedArray;
};
const jsonApiNormalize = (data = {}, included = []) => {
const normalizedData = { data: {} };
normalizedData.data = jsonApiNormalizeAttrs(data, included);
return normalizedData;
};
const jsonApiNormalizeAttrs = (data = {}, included = []) => {
const normalizedAttrs = {};
Object.keys(data).map((key) => {
if (checkAttrs(key).normalize === false)
return;
switch (key) {
case "attributes":
return Object.assign(normalizedAttrs, jsonApiNormalizeAttrs(data[key], included));
case "relationships":
return Object.assign(normalizedAttrs, jsonApiNormalizeRelationships(data[key], included));
default:
return normalizedAttrs[dashToCamel(key)] = data[key];
}
});
return normalizedAttrs;
};
const jsonApiNormalizeRelationships = (data = [], included) => {
const normalizedAttrs = {};
Object.keys(data).map((key) => {
const relationship = data[key].data;
if (isArray(relationship)) {
return normalizedAttrs[dashToCamel(key)] = relationship.map((v) => jsonApiNormalizeRelationship(v, included));
}
if (isObject(relationship)) {
return normalizedAttrs[dashToCamel(key)] = jsonApiNormalizeRelationship(relationship, included);
}
});
return normalizedAttrs;
};
const jsonApiNormalizeRelationship = (data, included = []) => {
const relationship = included.find((v) => v.type === data.type && v.id === data.id);
return jsonApiNormalizeAttrs(relationship);
};
const jsonApiNormalizeMeta = (meta = {}) => {
const normalizedMeta = {};
Object.keys(meta).map((key) => normalizedMeta[dashToCamel(key)] = parseInt(meta[key]));
return normalizedMeta;
};
export {
jsonApiNormalize,
jsonApiNormalizeArray,
jsonApiNormalizeAttrs,
jsonApiNormalizeMeta,
jsonApiNormalizeRelationship,
jsonApiNormalizeRelationships,
normalize,
normalizeArray,
normalizeAttrs,
normalizeMeta
};