UNPKG

@ehubbell/serializers

Version:

A collection of data serializers for various projects.

108 lines (107 loc) 3.94 kB
"use strict"; 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;