0.5.0 • Published 5 months ago

capnp-schema-gen v0.5.0

Weekly downloads
-
License
MIT
Repository
github
Last release
5 months ago

capnp-schema-gen

npm downloads Module type: ESM

A Cap'n Proto schema and setter function generator compatible with Pooya Parsa's capnp-es.

Given an arbitrary JavaScript object:

const data = {
  name: 'John', 
  email: 'john@doe.com', 
  friends: [
    { 
      name: 'Jane',
      email: 'jane@doe.com'
    }
  ]
}

You can generate an inferred Cap'n Proto schema:

const schema = generateSchema('Person', data)

console.log(schema)
@0xe3603ad8685d0f0c;

struct Person {
  name @0 :Text;
  email @1 :Text;
  friends @2 :List(PersonFriendsItem);
}

struct PersonFriendsItem {
  name @0 :Text;
  email @1 :Text;
}

And an accompanying setter function:

const setter = generateSetterFunction(data)

console.log(setter)
function setter(capnp, schemaClass, data) {
  const message = new capnp.Message();
  const obj = message.initRoot(schemaClass);
  if (typeof data.name !== 'undefined') {
    obj.name = data.name;
  }
  if (typeof data.email !== 'undefined') {
    obj.email = data.email;
  }
  const friendsList = obj._initFriends(data.friends.length);
  for (let i = 0; i < data.friends.length; i++) {
    if (data.friends[i] !== null && typeof data.friends[i] === 'object') {
      const friendsItem = friendsList.get(i);
      if (typeof data.friends[i].name !== 'undefined') {
        friendsItem.name = data.friends[i].name;
      }
      if (typeof data.friends[i].email !== 'undefined') {
        friendsItem.email = data.friends[i].email;
      }
    }
  }
  return message.toArrayBuffer();
}

License

MIT

0.5.0

5 months ago

0.4.0

5 months ago

0.3.0

5 months ago

0.2.0

5 months ago

0.1.0

5 months ago