lucass (Lightweight Universal Content Addressable Storage Spec)
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
async // 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 // Hash must be a String. // returns a buffer. async { // 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.
async // Optional args are sent to the hashing function.. async { // Optional args are sent to the hashing function. } async { // Optional array of hashes. Missing hashes will be returned. }
In-Memory Implementation
let store = let hasher = await storelet value = await storeconsole // 'asdf'
Additionally, all methods in the spec are implemented.
Filesystem Implementation
let store = '/var/custom-directory'let hasher = await storelet value = await storeconsole // 'asdf'
Additionally, all methods in the spec are implemented.