1.0.6 • Published 6 years ago

raisin-bran v1.0.6

Weekly downloads
25
License
-
Repository
-
Last release
6 years ago

Simple javascript serialization deserialization library

I had trouble finding a simple library to convert my graphql responses from json into mobx classes.

  • more examples can be seen in test/test.js
  • see src/Entity.js for an example on how to extend Serializable for more customizability

npm i --save raisin-bran

examples:

with decorate:

import rb from 'raisin-bran'

class User {};

rb.Serializable.decorate(User, {
  id: String,
  friends: [User]
});

const gqlResponseSchema = {
  result: {
    users: [User]
  }
};

const graphqlResponse = {
  result: {
    users: [{
      id: 1,
      name: 'albus dumbledore',
      friends: [{
        id: 2,
        name: 'harry potter',
      }],
    },{
      id: 3,
      name: 'hermione granger'
    }]
  }
};


const deserialized = rb.deserialize(graphqlResponse, gqlSchema);

console.log(deserialized.result.users[0] instanceof User) //true

const serialized = rb.serialize(deserialized, gqlSchema);

With Serializable

import raisinBran from 'raisin-bran'

class User {};

const userSerializer = new raisinBran.Serializable();
userSerializer.define(
  {
    id: String,
    name: String,
    friends: [userSerializer]
   }, //first arg is schema
  (context, json) => new User() //second arg is factory method, if we wanted we could do lookups in an entity store so that all users with id: n have the same instance
);

const graphqlResponse = {
  result: {
    users: [{
      id: 1,
      name: 'albus dumbledore',
      friends: [{
        id: 2,
        name: 'harry potter',
      }],
    },{
      id: 3,
      name: 'hermione granger'
    }]
  }
};

const gqlSchema = {
  result: {
    users: [userSerializer]
  }
};

const deserialized = raisinBran.deserialize(graphqlResponse, gqlSchema);

console.log(deserialized.result.users[0] instanceof User) //true

const serialized = raisinBran.serialize(deserialized, gqlSchema);

With Entity

class User {};
raisinBran.Entity.decorate(User, {
  id: String,
  friends: [User]
});

const jim = new User();
jim.id = 'asdf';
jim.friends = [jim];
const serialized = raisinBran.serialize(jim);
t.deepEqual(serialized, {id: 'asdf', friends: [{id: 'asdf'}]});
const deserialized = raisinBran.deserialize(serialized, User);
t.is(true, deserialized instanceof User);
t.is(true, deserialized.friends[0] instanceof User);
1.0.6

6 years ago

1.0.5

6 years ago

1.0.4

6 years ago

1.0.3

6 years ago

1.0.2

6 years ago

1.0.1

6 years ago