@ehubbell/serializers
Version:
A collection of data serializers for various projects.
113 lines (112 loc) • 4.35 kB
JavaScript
;
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const transforms = require("./transforms-1dc8edc7.cjs");
const formatLookup = (type) => {
switch (type) {
case "camel":
return transforms.dashToCamel;
case "underscore":
return transforms.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 (transforms.isArray(data[key])) {
return normalizedAttrs[formatter(key)] = data[key].map((v) => normalizeAttrs(v, attrs2));
}
if (transforms.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[transforms.dashToCamel(key)] = data[key];
}
});
return normalizedAttrs;
};
const jsonApiNormalizeRelationships = (data = [], included) => {
const normalizedAttrs = {};
Object.keys(data).map((key) => {
const relationship = data[key].data;
if (transforms.isArray(relationship)) {
return normalizedAttrs[transforms.dashToCamel(key)] = relationship.map((v) => jsonApiNormalizeRelationship(v, included));
}
if (transforms.isObject(relationship)) {
return normalizedAttrs[transforms.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[transforms.dashToCamel(key)] = parseInt(meta[key]));
return normalizedMeta;
};
exports.jsonApiNormalize = jsonApiNormalize;
exports.jsonApiNormalizeArray = jsonApiNormalizeArray;
exports.jsonApiNormalizeAttrs = jsonApiNormalizeAttrs;
exports.jsonApiNormalizeMeta = jsonApiNormalizeMeta;
exports.jsonApiNormalizeRelationship = jsonApiNormalizeRelationship;
exports.jsonApiNormalizeRelationships = jsonApiNormalizeRelationships;
exports.normalize = normalize;
exports.normalizeArray = normalizeArray;
exports.normalizeAttrs = normalizeAttrs;
exports.normalizeMeta = normalizeMeta;