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 toNumber
0x02
- UTF-8 string - mapped toString
0x03
- Embedded document - mapped toObject
0x04
- Array - mapped toArray
0x05
- Binary data - mapped to Node.jsBuffer
(with propertysubtype
)0x06
- Undefined - mapped toundefined
0x07
- ObjectId - mapped toexports.ObjectId
0x08
- Boolean - mapped totrue
orfalse
0x09
- UTC datetime - mapped toDate
0x0A
- Null value - mapped tonull
0x0B
- Regular expression - mapped toRegExp
(Note: only flags g, i, and m are supported)0x0C
- DBPointer - currently unmapped0x0D
- JavaScript code - mapped toFunction
orObject
with propertycode
0x0E
- Symbol - mapped toString
0x0F
- JavaScript code w/ scope - mapped toFunction
orObject
with propertiescode
andscope
0x10
- 32-bit Integer - mapped toNumber
0x11
- Timestamp - mapped toexports.Timestamp
0x12
- 64-bit integer - mapped toexports.Long
0xFF
- 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.