UNPKG

@ehubbell/serializers

Version:

A collection of data serializers for various projects.

113 lines (112 loc) 4.35 kB
"use strict"; 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;