Giter Club home page Giter Club logo

cabs's Introduction

cabs

A Content Addressable Blob Store for Node.

NPM

This implements something similar to the object store from git (the .git/objects folder). By default blobs stored by cabs are sha256 hashed and stored in subdirectories to avoid putting too many files in a single directory. The hashing algorithm and depth of the directories are configurable.

write

Cabs.write(path[, hashFunction, limit]);

Pipe in a blob stream (e.g. fs.createReadStream), get back objects for the various pieces stored. Each object has a hash of the block, as well as the starting and ending locations within the stream. You may optionally pass a string representing the hash function to use (default sha256) and number representing the block size (defaults to 5 MB).

To learn more about hashing algorithm tradeoffs read the comments on this issue.

read

Cabs.read(path);

Pipe in the objects from write, returns a readable stream of the blob.

example

var fs = require('fs')
var Cabs = require('cabs')

/** stream a movie into cabs, store hashes in hashes.json **/
fs.createReadStream('movie.avi')
  .pipe(Cabs.write('./storage'))
  .pipe(fs.createWriteStream('hashes.json'));
  
/** later, to retrieve the movie, stream the hashes into cabs **/
fs.createReadStream('hashes.json')
  .pipe(Cabs.read('./storage))
  .pipe(fs.createWriteStream('movie-copy.avi'));

Low Level Class

you also have access to the base Cabs class located at cabs.Cabs, initialize it with a location and optionally an options object wtih a string representing the hash function to use (Defaults to sha256), the block size limit (defaults to 5 MB) and the depth of folders to use.

var store = new Cabs('./location');
// or
var store = new Cabs({
  path: './location',
  hashFunction: 'sha256',
  limit: 5 * 1024 *1024
  depth: 3
});

store.write(buffer, callback);
//stores buffer, callback is called with the hash

store.read(hash, callback);
//calls the callback with the blob

store.rm(hash, callback);
//removes the file with the given hash

store.destroy(callback);
//deletes all the files related to the store, just a shortcut to rimraf so beware.

store.readStream();
//same as Cabs.read

store.writeStream();
//same as Cabs.write

store.has(hash, callback);
//calls callback with true if it exists, otherwise false

store.check(hash, callback);
//similar to has but throws an error if the file doesn't exist
//or it's hash doesn't match it's address hash

store.writeFile();
//write to a single file on disc.  Will only ever emit a single string
//the hash for the combined file you streamed in.
//unlike writeStream which chunks a big file into multiple smaller ones
//which can be handled in memory, this method buffers to disk.

cabs's People

Contributors

calvinmetcalf avatar max-mapper avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.