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

buffo

v0.1.3

Published

Binary encoding for Javascript objects.

Downloads

19

Readme

buffo

Build Status NPM version Dependency Status devDependency Status

Binary encoding for Javascript objects.

Transcode all types of JSON values to and from a binary format, including Buffer, Date, RegExp and more. Originally created to stream worker commands over pipes between processes.

:warning: Early release, handle with care :sunglasses:

Supported types

  • String (utf8)
  • Boolean
  • Number (incl NaN, Infinity)
  • Object
  • Array
  • Buffer (fastest)
  • TypedArray (all types, very fast)
  • Date
  • RegExp
  • null
  • undefined
  • arguments (arrives as Array)

Array and Object can hold any of the other types. Serialisation of Object reads enumerable properties, but ignores functions.

Next:

  • Error (needs special case)
  • Set (like Array)
  • Map (keys would be tricky)

Install

$ npm install buffo

Usage

Single value

Write a value to a Buffer, later decode the Buffer back to a value.

var buffo = require('buffo');

var buffer = buffo.encode(sourceValue);
var outputValue = buffo.parse(buffer);

Stream

Create encoder and decoder Transform streams and connect them over some binary pipe. Then write or pipe JavaScript objects and they magically reappear at the other end.

Keep in mind that due to the nature of node's object-streams you cannot send null or undefined as root value as they will terminate the Transform stream (they work fine nested in Arrays or Objects).

var buffo = require('buffo');

// sender
var encoding = buffo.encodeStream();
encoding.pipe(process.stdout);
encoding.write(myValue);

// receiver
var decoding = buffo.decodeStream();
process.stdin.pipe(decoding).on('data', function(data) {
    // received a value
});

(note this stdin/stdout example is blocking on Linux, so from inter-process stream better use net or file-descriptor streams)

Speed & reliability

Performance fair but unclear, varies a lot per data type. Reliability unproven but hopeful.

If you need maximum speed and don't need the fancy types use good ol' line separated JSON.

Todo

  • Look into statemachine for decoder.
  • Verify and expand more v8 optimisations.
  • Extract optimiser workbench to own project.

Build

Install development dependencies in your git checkout:

$ npm install

Build and run tests using grunt:

$ grunt test

See the Gruntfile.js for additional commands.

Contributions

They are welcome but please discuss in the issues before you commit to large changes. If you send a PR make sure you code is idiomatic and linted.

History

  • 0.1.0 - First main release.
  • 0.0.x - Dev releases.

License

Copyright (c) 2014 Bart van der Schoor @ Bartvds

Licensed under the MIT license.