Socket
Book a DemoInstallSign in
Socket

lucass

Package Overview
Dependencies
Maintainers
1
Versions
11
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

lucass

[![Coverage Status](https://coveralls.io/repos/github/mikeal/lucass/badge.svg?branch=master)](https://coveralls.io/github/mikeal/lucass?branch=master) [![Build Status](https://travis-ci.org/mikeal/lucass.svg?branch=master)](https://travis-ci.org/mikeal/lu

latest
Source
npmnpm
Version
4.1.0
Version published
Maintainers
1
Created
Source

lucass (Lightweight Universal Content Addressable Storage Spec)

Coverage Status Build Status dependencies Status

semantic-release Greenkeeper badge Commitizen friendly JavaScript Style Guide

There are a bunch of content addressable stores out there, and even some abstract store specs. A few things that are different about lucass:

  • There is NO requirement that implementations use a specific hashing method, only that the method they use is consistent.
    • This means that there can be many more types of implementations but that they aren't compatible by default. Users of each implementation may need to configure the hashing methods.
  • Requires support for both Buffers and Streams as values.

This module contains compliance tests and two reference implementations (filesystem and inmemory).

Spec

class Store {
  async set (value, cb) {
    // value is either a Buffer or a Stream, both must be supported.
    // cb(Error, Hash)
    // Hash must be consistent. Data written with Buffer or Stream should
    // be identical.
    // Hash must be a String.
  }
  async get (hash, cb) {
    // Hash must be a String.
    // returns a buffer.
  }
  async hash (value, cb) {
    // Identical method signature to set but MUST NOT store the value.
  }
}

There are also optional APIs. These are not required as they may not be possible on top of certain storage but may be required by certain users of an implementation.

class Store {
  async set (value, ...args) {
    // Optional args are sent to the hashing function..
  }
  async hash (value, ...args) {
    // Optional args are sent to the hashing function.
  }
  async missing (hashes) {
    // Optional array of hashes. Missing hashes will be returned.
  }
}

In-Memory Implementation

let store = require('lucass/inmemory')()
let hasher = await store.set(Buffer.from('asdf'))
let value = await store.getBuffer(hash)
console.log(value.toString()) // 'asdf'

Additionally, all methods in the spec are implemented.

Filesystem Implementation

let store = require('lucass/fs')('/var/custom-directory')
let hasher = await store.set(Buffer.from('asdf'))
let value = await store.getBuffer(hash)
console.log(value.toString()) // 'asdf'

Additionally, all methods in the spec are implemented.

FAQs

Package last updated on 06 Aug 2017

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts