Buffalo is a lightweight BSON and Mongo Wire Protocol library for Node.js. It was built as the underlying engine for Mongolian DeadBeef.
The motivation is to make a fast and simple parser and serializer for BSON.
DISCLAIMER: The API is experimental. I will be adding, removing, and changing the API in the interest of a solid API. Use at your own risk
You can either clone the source and install with npm link, or install the latest published version from npm with
npm install buffalo.
Run the tests with npm test.
Buffalo exposes two methods:
exports.parse = function(buffer) { ... }
exports.serialize = function(object) { ... }
And several types:
exports.Long // goog.math.Long - http://closure-library.googlecode.com/svn/docs/class_goog_math_Long.html
exports.ObjectId = function(buffer) // buffer must be a 12-byte Buffer, accessible via the bytes property
exports.ObjectId = function(string) // string must be a 24-char hex string
exports.ObjectId = function(number) // generate an ObjectId from a timestamp number
exports.ObjectId = function(date) // generate an ObjectId from a date
exports.ObjectId = function() // generates an ObjectId
exports.Timestamp // under construction
The BSON types are mapped as follows:
0x01- Floating point - mapped toNumber0x02- UTF-8 string - mapped toString0x03- Embedded document - mapped toObject0x04- Array - mapped toArray0x05- Binary data - mapped to Node.jsBuffer(with propertysubtype)0x06- Undefined - mapped toundefined0x07- ObjectId - mapped toexports.ObjectId0x08- Boolean - mapped totrueorfalse0x09- UTC datetime - mapped toDate0x0A- Null value - mapped tonull0x0B- Regular expression - mapped toRegExp(Note: only flags g, i, and m are supported)0x0C- DBPointer - currently unmapped0x0D- JavaScript code - mapped toFunctionorObjectwith propertycode0x0E- Symbol - mapped toString0x0F- JavaScript code w/ scope - mapped toFunctionorObjectwith propertiescodeandscope0x10- 32-bit Integer - mapped toNumber0x11- Timestamp - mapped toexports.Timestamp0x12- 64-bit integer - mapped toexports.Long0xFF- Min key - currently unmapped0x7F- Max key - currently unmapped
var BSON = require('buffalo')
// Parse a Buffer
var object = BSON.parse(buffer)
// Serialize an object
var buffer = BSON.serialize(object)
Try it out and send me feedback! Unit tests and documentation are good, too.
Buffalo is open source software under the zlib license.
