UNPKG

@ehubbell/serializers

Version:

A collection of data serializers for various projects.

113 lines (112 loc) 3.95 kB
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 };