1
0
Fork 0
mirror of https://github.com/codedread/bitjs synced 2025-10-05 18:34:17 +02:00
No description
Find a file
2020-04-01 23:08:09 -07:00
archive Start on Issue #16. Make BitStream a module, but provide a Web Worker version of BitStream via a build step 2020-04-01 23:08:09 -07:00
build Start on Issue #16. Make BitStream a module, but provide a Web Worker version of BitStream via a build step 2020-04-01 23:08:09 -07:00
docs Update link in unrar doc to bitjs on github. 2017-02-21 18:24:17 -08:00
file Add bz2 and pdf to file sniffer. Allow multiple signatures per file type. 2020-03-19 09:22:19 -07:00
image/webp-shim Add file comments to webp-shim.js 2020-03-16 23:36:47 -07:00
io Start on Issue #16. Make BitStream a module, but provide a Web Worker version of BitStream via a build step 2020-04-01 23:08:09 -07:00
tests Start on Issue #16. Make BitStream a module, but provide a Web Worker version of BitStream via a build step 2020-04-01 23:08:09 -07:00
LICENSE Accidentally didn't add the updated files. 2016-04-19 18:00:27 -07:00
README.md Add several more image and archive formats to the File Sniffer. 2020-03-16 23:36:28 -07:00

bitjs: Binary Tools for JavaScript

Introduction

A set of tools to handle binary data in JS (using Typed Arrays).

Example Usage

bitjs.io

This namespace includes stream objects for reading and writing binary data at the bit and byte level: BitStream, ByteStream.

var bstream = new bitjs.io.BitStream(someArrayBuffer, true, offset, length);
var crc = bstream.readBits(12); // read in 12 bits as CRC, advancing the pointer
var flagbits = bstream.peekBits(6); // look ahead at next 6 bits, but do not advance the pointer

bitjs.archive

This namespace includes objects for unarchiving binary data in popular archive formats (zip, rar, tar) providing unzip, unrar and untar capabilities via JavaScript in the browser. The unarchiving actually happens inside a Web Worker.

var unzipper = new bitjs.archive.Unzipper(zipFileArrayBuffer);
unzipper.addEventListener('progress', updateProgress);
unzipper.addEventListener('extract', receiveOneFile);
unzipper.addEventListener('finish', displayZipContents);
unzipper.start();

function updateProgress(e) {
  // e.totalCompressedBytesRead has how many bytes have been unzipped so far
}

function receiveOneFile(e) {
  // e.unarchivedFile.filename: string
  // e.unarchivedFile.fileData: Uint8Array
}

function displayZipContents() {
  // Now sort your received files and show them or whatever...
}

The unarchivers also support streaming, if you are receiving the zipped file from a slow place (a Cloud API, for instance). For example:

var unzipper = new bitjs.archive.Unzipper(anArrayBufferWithStartingBytes);
unzipper.addEventListener('progress', updateProgress);
unzipper.addEventListener('extract', receiveOneFile);
unzipper.addEventListener('finish', displayZipContents);
unzipper.start();
...
// after some time
unzipper.update(anArrayBufferWithMoreBytes);
...
// after some more time
unzipper.update(anArrayBufferWithYetMoreBytes);

bitjs.image

This namespace includes code for dealing with binary images. It includes a module for converting WebP images into alternative raster graphics formats (PNG/JPG).

import {convertWebPtoPNG, convertWebPtoJPG} from './bitjs/image/webp-shim/webp-shim.js';

// convertWebPtoPNG() takes in an ArrayBuffer containing the bytes of a WebP
// image and returns a Promise that resolves with an ArrayBuffer containing the
// bytes of an equivalent PNG image.
convertWebPtoPNG(webpBuffer).then(pngBuf => {
  const pngUrl = URL.createObjectURL(new Blob([pngBuf], {type: 'image/png'}));
  someImgElement.setAttribute(src, pngUrl);
});

bitjs.file

This namespace includes code for dealing with files. It includes a sniffer which detects the type of file, given an ArrayBuffer.

let mimeType = bitjs.file.findMimeType(someArrayBuffer);

Tests

Reference

  • UnRar: A work-in-progress description of the RAR file format.

History

This project grew out of another project of mine, kthoom (a comic book reader implemented in the browser). This repository was automatically exported from my original repository on GoogleCode and has undergone considerable changes and improvements since then, including adding streaming support, starter RarVM support, tests, many bug fixes, and updating the code to ES6.