talyssonoc/structure

View on GitHub
packages/structure/src/serialization/index.js

Summary

Maintainability
A
0 mins
Test Coverage
const { SCHEMA } = require('../symbols');

function serialize(structure) {
  if (structure == null) {
    return structure;
  }

  return serializeStructure(structure);
}

function serializeStructure(structure) {
  const schema = structure[SCHEMA];

  const serializedStructure = Object.create(null);

  for (let attributeDefinition of schema.attributeDefinitions) {
    let attributeValue = structure[attributeDefinition.name];

    if (attributeDefinition.shouldSerialize(attributeValue)) {
      serializedStructure[attributeDefinition.name] = serializeAttribute(
        attributeValue,
        attributeDefinition
      );
    }
  }

  return serializedStructure;
}

function serializeAttribute(attributeValue, attributeDefinition) {
  if (attributeDefinition.itemsAreStructures) {
    return attributeValue.map(serialize);
  }

  if (attributeDefinition.isNestedSchema) {
    return serialize(attributeValue);
  }

  return attributeValue;
}

exports.serialize = serialize;