npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

picobuf

v0.0.7

Published

A powerful and flexible library for working with Protocol Buffers in JavaScript

Downloads

24

Readme

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

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.