@airb/buffer

Buffer for JavaScript

Usage no npm install needed!

<script type="module">
  import airbBuffer from 'https://cdn.skypack.dev/@airb/buffer';
</script>

README

buffer

Buffer encode/decode for JavaScript

API

buffer.form

import buffer from '@airb/buffer';

// transform string
let utf8 = buffer.from('✓ à la mode 中国');
let base64 = buffer.from('4pyTIMOgIGxhIG1vZGUg5Lit5Zu9', 'base64');

// toSring
utf8.toString('base64'); // 4pyTIMOgIGxhIG1vZGUg5Lit5Zu9
base64.toString(); // ✓ à la mode 中国

// write and read
let bf = buffer();

// write
bf.write('bit', [1, 0, 1, 0]);
bf.write('int', 12);
bf.write('int', -12);
bf.write('uint', 12);
bf.write('uint', -12);
bf.write('float', 0.25);
bf.write('float', -300.15);
bf.write('double', 0.25);
bf.write('double', -300.15);
bf.write('string', 'abc');
bf.write('string', '中国');
bf.write('bytes', Buffer.from('abc中国'));

// length
bf.length // number
bf.buffer // Uint8Array

// read
bf.read('bit'); // [1, 0, 1, 0]
bf.read('int'); // 12
bf.read('int'); // -12
bf.read('uint'); // 12
bf.read('uint'); // -12
bf.read('float'); // 0.25
bf.read('float'); // -300.15
bf.read('double'); // 0.25
bf.read('double'); // -300.15
bf.read('string'); // 'abc'
bf.read('string'); // '中国'
bf.read('bytes'); // [...Buffer.from('abc中国')]

// reread
bf.read('bit'); // undefined
bf.read('bit', 0); // [1, 0, 1, 0]
bf.read('uint', 4); // -12
bf.read('float'); // 0.25

base64

import base64 from '@airb/buffer/base64';

// encode/decode
base64.encode('✓ à la mode 中国'); // '4pyTIMOgIGxhIG1vZGUg5Lit5Zu9'
base64.decode('4pyTIMOgIGxhIG1vZGUg5Lit5Zu9'); // '✓ à la mode 中国'

TypedBuffer

import TypedBuffer from '@airb/buffer/TypedBuffer';

// create typed buffer
const bf = new TypedBuffer();

// add type
bf.add('body', { list: 'uint[]' });
bf.add('status', { code: 'uint', message: 'string', data: 'body' });


// encode
bf.encode('body', { list: [1] }); // Uint8Array [ 0, 1, 1 ]
bf.encode('status', { code: 1, data: { list: [1, 2] } }); // Uint8Array [ 0, 4, 0, 2, 1, 2, 2, 1 ]

// decode
bf.decode('body', [ 0, 1, 1 ]); // { list: [1] }
bf.decode('status', [ 0, 4, 0, 2, 1, 2, 2, 1 ]); // { code: 1, data: { list: [1, 2] } }