picobuf
TypeScript icon, indicating that this package has built-in type declarations

0.0.7 • Public • Published

Picobuf

good things come in small packets

npm pipeline license downloads

Gitlab Github Twitter Discord

Picobuf is a powerful and flexible library for working with Protocol Buffers in JavaScript. It makes it easy to define models, enums, and services, and provides an intuitive API for encoding and decoding messages. Check out the documentation to learn more.

Features

  • Versatile Data Modeling: Define your data structures using simple or composite fields, with support for lists and foreign keys.
  • Encoding: Built-in support for MsgPack and JSON, or bring your own encoder.
  • Object Mode: Or don't encode the data, rather use Picobuf just for data validation.
  • Validation: Rest easy knowing all of your nested data meets the defined model's schema.
  • Data types as God intended: String, Boolean, Number, Integer, Float, JSON, Buffer and Foreign relations
  • Enums: Tightly manage your data with enumerated fields, ensuring data integrity and simplifying validation.
  • Service Methods: Define arbitrary service methods and decouple your data models from the rest of your application.
  • Isomorphic: Picobuf works in both Node.js and the browser.
  • Extendable: Expand your possibilities with custom field types and validation rules.

Installation

Install the package with:

npm install picobuf

Usage

First, import the Picobuf library.

import Picobuf from 'picobuf'

or

const Picobuf = require('picobuf')

Then define your models, enums or services.

// create a picobuf instance
const picobuf = new Picobuf({ User: { name: 'string' }})

// or destructure the named model
const { User } = new Picobuf({ User: { name: 'string' }})

// create an instance of the model
const user = User.create({ name: 'Alice' })

// validate this data (throws an error if invalid)
User.validate(user)

// encode
const encoded = User.encode(user)

// decode
const decoded = User.decode(encoded)

// Enums
const { Types } = new Picobuf({ enums: { Types: { values: ['SEN', 'ACK'] }}})
// or
const Types = pb.createEnum('Types', ['SEN', 'ACK'])

console.log(Types.SEN) // => 'SEN'
console.log(Types.getIndex('SEN')) // => 0
// incorrect enum will throw an error
console.log(Types.SEND) // => Invalid enum "SEND"

// Services
const { echo } = new Picobuf({ services: {
  echo: {
    ping: { // echo.ping service method
      request: 'User', // string reference to model
      response: User, // direct use of model instance
    }
  }
}})
const data = { name: 'Bob' }
const encoded = echo.ping.request.encode(data)
const decoded = echo.ping.request.decode(encoded)

Documentation

Picobuf class diagram

Tests

In order to run the test suite, simply clone the repository and install its dependencies:

git clone https://gitlab.com/basedwon/picobuf.git
cd picobuf
npm install

To run the tests:

npm test

Testing in the browser: coming soon...

Contributing

Thank you! Please see our contributing guidelines for details.

Donations

If you find this project useful and want to help support further development, please send us some coin. We greatly appreciate any and all contributions. Thank you!

Bitcoin (BTC):

1JUb1yNFH6wjGekRUW6Dfgyg4J4h6wKKdF

Monero (XMR):

46uV2fMZT3EWkBrGUgszJCcbqFqEvqrB4bZBJwsbx7yA8e2WBakXzJSUK8aqT4GoqERzbg4oKT2SiPeCgjzVH6VpSQ5y7KQ

License

Picobuf is MIT licensed.

Package Sidebar

Install

npm i picobuf

Weekly Downloads

2

Version

0.0.7

License

MIT

Unpacked Size

835 kB

Total Files

35

Last publish

Collaborators

  • basedwon