Module

Identy.Normalizer

Package
purescript-identy
Repository
oreshinya/purescript-identy

#normalize Source

normalize :: forall a. ReadForeign a => Foreign -> E a

Normalize nested entity to identy-style, then decode normalized foreign.

When should you use this ?

API in the world often respond nested-style object like this:

{
  id: "1",
  name: "User Name",
  comments: [
    { id: "2", body: "Comment Body 2" },
    { id: "1", body: "Comment Body 1" }
  ]
}

normalize formats object from nested-style to identy-style.

{
  entities: {
    user: { 1: { id: "1", name: "User Name" } },
    comment: { 1: { id: "1", body: "Comment Body 1" }, 2: { id: "2", body: "Comment Body 2" } }
  },
  associations: {
    userComments: { 1: [ "2", "1" ] } // from parent user id to comment ids.
  },
  result: "1" // This is root entity id. In this case, user id.
}

result has root entity id. Therefore, if a response is single entity, result is an id of its entity, if a response is array of entity, result is ids of entities.

Prerequisite:

Each entity need a property typename that is set type name with upper camel case.

For example:

{
  id: "1",
  name: "User Name",
  typename: "User"
  comments: [
    { id: "2", body: "Comment Body 2", typename: "Comment" },
    { id: "1", body: "Comment Body 1", typename: "Comment" }
  ]
}

Note:

Essentially, such formatting for clients is the work of API server.

If it's possible, receive identy-style JSON directly from API server.