Package Exports
- compact-encoding
- compact-encoding/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (compact-encoding) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
compact-encoding
A series of compact encoding schemes for building small and fast parsers and serializers
npm install compact-encodingUsage
const cenc = require('compact-encoding')
const state = { start: 0, end: 0, buffer: null }
// use preencode to figure out how big a buffer is needed
cenc.uint.preencode(state, 42)
cenc.string.preencode(state, 'hi')
console.log(state) // { start: 0, end: 4, buffer: null }
state.buffer = Buffer.allocUnsafe(state.end)
// then use encode to actually encode it to the buffer
cenc.uint.encode(state, 42)
cenc.string.encode(state, 'hi')
// to decode it simply use decode instead
state.start = 0
cenc.uint.decode(state) // 42
cenc.string.decode(state) // 'hi'Encoder API
state
Should be an object that looks like this { start, end, buffer }.
You can also get a blank state object using cenc.state().
startis the byte offset to start encoding/decoding at.endis the byte offset indicating the end of the buffer.buffershould be either a Node.js Buffer or Uint8Array.
enc.preencode(state, val)
Does a fast preencode dry-run that only sets state.end. Use this to figure out how big of a buffer you need.
enc.encode(state, val)
Encodes val into state.buffer at position state.start.
Updates state.start to point after the encoded value when done.
val = enc.decode(state)
Decodes a value from state.buffer as position state.start.
Updates state.start to point after the decoded value when done in the buffer.
Helpers
If you are just encoding to a buffer or decoding from one you can use the encode and decode helpers
to reduce your boilerplate
const buf = cenc.encode(cenc.bool, true)
const bool = cenc.decode(cenc.bool, buf)Bundled encodings
The following encodings are bundled as they are primitives that can be used to build others on top. Feel free to PR more that are missing.
cenc.uint- Encodes a uint using compact-uint.cenc.uint8- Encodes a fixed size uint8.cenc.uint16- Encodes a fixed size uint16. Useful for things like ports.cenc.uint24- Encodes a fixed size uint24. Useful for message framing.cenc.uint32- Encodes a fixed size uint32. Useful for very large message framing.cenc.uint40- Encodes a fixed size uint40.cenc.uint48- Encodes a fixed size uint48.cenc.uint56- Encodes a fixed size uint56.cenc.uint64- Encodes a fixed size uint64.cenc.int- Encodes an int usingcenc.uintwith ZigZag encoding.cenc.int8- Encodes a fixed size int8 usingcenc.uint8with ZigZag encoding.cenc.int16- Encodes a fixed size int16 usingcenc.uint16with ZigZag encoding.cenc.int24- Encodes a fixed size int24 usingcenc.uint24with ZigZag encoding.cenc.int32- Encodes a fixed size int32 usingcenc.uint32with ZigZag encoding.cenc.int40- Encodes a fixed size int40 usingcenc.uint40with ZigZag encoding.cenc.int48- Encodes a fixed size int48 usingcenc.uint48with ZigZag encoding.cenc.int56- Encodes a fixed size int56 usingcenc.uint56with ZigZag encoding.cenc.int64- Encodes a fixed size int64 usingcenc.uint64with ZigZag encoding.cenc.lexint- Encodes an int using lexicographic-integer encoding so that encoded values are lexicographically sorted in ascending numerical order.cenc.float32- Encodes a fixed size float32.cenc.float64- Encodes a fixed size float64.cenc.buffer- Encodes a buffer with its length uint prefixed. When decoding an empty buffer,nullis returned.cenc.raw- Pass through encodes a buffer, i.e. a basic copy.cenc.uint8array- Encodes a uint8array with its element length uint prefixed.cenc.uint16array- Encodes a uint16array with its element length uint prefixed.cenc.uint32array- Encodes a uint32array with its element length uint prefixed.cenc.int8array- Encodes a int8array with its element length uint prefixed.cenc.int16array- Encodes a int16array with its element length uint prefixed.cenc.int32array- Encodes a int32array with its element length uint prefixed.cenc.float32array- Encodes a float32array with its element length uint prefixed.cenc.float64array- Encodes a float64array with its element length uint prefixed.cenc.bool- Encodes a boolean as 1 or 0.cenc.string,cenc.utf8- Encodes a utf-8 string, similar to buffer.cenc.ascii- Encodes an ascii string.cenc.hex- Encodes a hex string.cenc.base64- Encodes a base64 string.cenc.utf16le,cenc.ucs2- Encodes a utf16le string.cenc.fixed32- Encodes a fixed 32 byte buffer.cenc.fixed64- Encodes a fixed 64 byte buffer.cenc.fixed(n)- Makes a fixed sized encoder.cenc.array(enc)- Makes an array encoder from another encoder. Arrays are uint prefixed with their length.cenc.from(enc)- Makes a compact encoder from a codec or abstract-encoding.
License
MIT