graph-denormalizer

1.0.20 • Public • Published

Install

npm install --save graph-denormalizer

Test

npm run test

Usage

Example 1

import graphDenormalizerHof from 'graph-denormalizer'

const typeFn = (typeInput, ele) => typeInput === ele.category

const config = {
  typeFn,
  nodeIdAttr: 'this_id',
  node1IdAttrOnEdge: 'parentId',
  node2IdAttrOnEdge: 'childId',
  isDirectedGraph: false,
}

const configuredGraphDenormalizerHof = graphDenormalizer(config)

const nodes = [
    {this_id: 1, category: 'a'},
    {this_id: 2, category: 'b'},
    {this_id: 3, category: 'b'},
    {this_id: 4, category: 'c'},
    {this_id: 5, category: 'd'}
]

const edges = [
  {parentId: 1, childId: 2},
  {parentId: 1, childId: 3},
  {parentId: 1, childId: 4},
  {parentId: 2, childId: 5}
]

const graphDenormalizer = configuredGraphDenormalizerHof({nodes, edges})

Input

const nestSpec = {
  a: {
    b: {
      d: null,
    },
    c: {
      d: null,
    },
  },
}

const result = graphDenormalizer(nestSpec)

Output


{
  a: [
    {
      this_id: 1,
      category: 'a',
      b: [
        {
          this_id: 2,
          category: 'b',
          d: [
            {
              this_id: 5,
              category: 'd',
            }
          ]
        },
        {
          this_id: 3,
          category: 'b',
          d: [],
        },
      ],
      c: [
        {
          this_id: 4,
          category: 'c',
          d: []
        }
      ]
    }
  ]
}

Example 2

import graphDenormalizerHof from 'graph-denormalizer'

const typeFn = (typeInput, ele) => typeInput === ele.assignmentType.name

const config = {
  typeFn,
  nodeIdAttr: 'id',
  node1IdAttrOnEdge: 'assignment1Id',
  node2IdAttrOnEdge: 'assignment2Id',
  isDirectedGraph: false,
}

const configuredGraphDenormalizerHof = graphDenormalizerHof(config)

const nodes = [
    {id: 1, name: 'Hostos', assignmentType: {id: 1, name: 'site'}},
    {id: 2, name: '101', assignmentType: {id: 2, name: 'route'}},
    {id: 3, name: '102', assignmentType: {id: 2, name: 'route'}},
    {id: 4, name: 'Team 1', assignmentType: {id: 3, name: 'team'}},    
]

const edges = [
  {assignment1Id: 1, assignment2Id: 2},
  {assignment1Id: 1, assignment2Id: 3},
  {assignment1Id: 4, assignment2Id: 2},  
]

const graphDenormalizer = configuredGraphDenormalizerHof({nodes, edges})

Input

const nestSpec = {
  site: {
    route: {
      team: null,
    },
  }
}

const result = graphDenormalizer(nestSpec)

Output

{
  site: [
    {
      id: 1,
      name: 'Hostos',
      assignmentType: {id: 1, name: 'site'},
      route: [
        {
          id: 2,
          name: '101',
          assignmentType: {id: 2, name: 'route'},
          team: [
            {
              id: 4,
              name: 'Team 1',
              assignmentType: {id: 4, name: 'team'},
            }
          ]
        },
        {
          id: 3,
          name: '102',
          assignmentType: {id: 3, name: 'route'},
          team: []
        }
      ]
    }
  ]
}

Package Sidebar

Install

npm i graph-denormalizer

Weekly Downloads

0

Version

1.0.20

License

ISC

Last publish

Collaborators

  • marcello.sachs