@ehubbell/serializers
Version:
A collection of data serializers for various projects.
108 lines (107 loc) • 3.94 kB
JavaScript
;
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const transforms = require("./transforms-1dc8edc7.cjs");
const formatLookup$1 = (type) => {
switch (type) {
case "camel":
return transforms.dashToCamel;
case "dash":
return transforms.camelToDash;
case "underscore":
return transforms.camelToUnderscore;
}
};
const serializeArray = (type = "dash", data = [], attrs = []) => {
const serializedData = [];
data.map((v) => serializedData.push(serializeAttrs(type, v, attrs)));
return serializedData;
};
const serialize = (type = "dash", data = {}, attrs = []) => {
const serializedData = {};
Object.assign(serializedData, serializeAttrs(type, data, attrs));
return serializedData;
};
const serializeAttrs = (type = "dash", data = {}, attrs = []) => {
const formatter = formatLookup$1(type);
const serializedData = {};
Object.keys(data).map((key) => {
if (attrs.length === 0)
return serializedData[formatter(key)] = data[key];
if (transforms.isArray(data[key]) && transforms.isObject(data[key][0])) {
const arrayData = data[key];
const arrayAttrs = attrs.filter((v) => v.split(".")[0] === key).map((v) => {
const paths = v.split(".");
paths.shift();
return paths.join(".");
});
const formattedAttrs = !transforms.isEmpty(arrayAttrs[0]) ? arrayAttrs : [];
if (!attrs.includes(key) && transforms.isEmpty(arrayAttrs))
return;
return serializedData[formatter(key)] = arrayData.map((v) => serializeAttrs(type, v, formattedAttrs));
}
if (transforms.isArray(data[key])) {
if (transforms.isEmpty(data[key]))
return;
if (!attrs.includes(key))
return;
return serializedData[formatter(key)] = data[key];
}
if (transforms.isObject(data[key]) && data[key] !== null) {
const objectData = data[key];
const objectAttrs = attrs.filter((v) => v.split(".")[0] === key);
const formattedAttrs = objectAttrs.filter((v) => v.includes(".")).map((v) => {
const paths = v.split(".");
paths.shift();
return paths.join(".");
});
if (transforms.isEmpty(objectAttrs))
return;
return serializedData[formatter(key)] = serializeAttrs(type, objectData, formattedAttrs);
}
if (attrs.includes(key))
return serializedData[formatter(key)] = data[key];
});
return serializedData;
};
const formatLookup = (type) => {
switch (type) {
case "camel":
return transforms.dashToCamel;
case "dash":
return transforms.camelToDash;
case "underscore":
return transforms.camelToUnderscore;
}
};
const jsonApiSerializeArray = (data = []) => {
const serializedData = [];
data.map((d) => serializedData.push(jsonApiSerializeAttrs(d)));
return { data: { attributes: serializedData } };
};
const jsonApiSerialize = (data = {}) => {
const serializedData = jsonApiSerializeAttrs(data);
return { data: { attributes: serializedData } };
};
const jsonApiSerializeAttrs = (data = {}) => {
const formatter = formatLookup("camel");
const serializedAttrs = {};
Object.keys(data).map((key) => {
if (transforms.isArray(data[key]) && transforms.isObject(data[key][0])) {
return serializedAttrs[formatter(key)] = data[key].map(jsonApiSerializeAttrs);
}
if (transforms.isArray(data[key])) {
return serializedAttrs[formatter(key)] = data[key];
}
if (transforms.isObject(data[key])) {
return serializedAttrs[formatter(key)] = jsonApiSerializeAttrs(data[key]);
}
return serializedAttrs[formatter(key)] = data[key];
});
return serializedAttrs;
};
exports.jsonApiSerialize = jsonApiSerialize;
exports.jsonApiSerializeArray = jsonApiSerializeArray;
exports.jsonApiSerializeAttrs = jsonApiSerializeAttrs;
exports.serialize = serialize;
exports.serializeArray = serializeArray;
exports.serializeAttrs = serializeAttrs;