multidat
Manage multiple dat instances in multiple locations.
Usage
var Multidat = require('multidat')
var toilet = require('toiletdb')
var db = toilet('/tmp/dat')
Multidat(db, function (err, multidat) {
if (err) throw err
multidat.create(opts, function (err, dat) {
if (err) throw err
var dats = multidat.list()
console.log(dats)
multidat.close(dat.archive.key, function (err) {
if (err) throw err
console.log()
})
})
})
Error handling
If there is an error initializing a dat, instead of the whole process failing, an error object with attached .dir
property will be pushed into the list of dats instead. That means when consuming multidat.list()
, you should check for errors:
var dats = multidat.list()
dats.forEach(function (dat) {
if (dat instanceof Error) {
var err = dat
console.log('failed to initialize dat in %s: %s', err.dir, err.message)
}
})
This way you can decide for yourself whether an individual initialization failure should cause the whole process to fail or not.
API
Multidat(db, opts, callback(err, multidat))
Creat a new Multidat instance. Takes a toiletdb
instance and a callback.
Options:
Dat
: Use provided dat factory instead of dat-node
multidat.create(opts, callback(err, dat))
Create a new dat
archive.
dats = multidat.list()
List all available dat
archives.
multidat.close(key, callback(err))
Close and remove a dat
archive.
multidat.readManifest(dat, callback(err, manifest))
Read the dat.json
file from the dat
archive. This method is expected to be
deprecated once dat
archives provide a built-in method to return archives.
Why?
This package exists to manage multiple dat
archives in different directories.
The dat-node package is mostly stateless; all state is persisted
into the archives themselves. This package acts as a layer on top to keep track
of where archives are located and manage them between sessions.
When not to use this
If you're running a server, it's usually enough to run mafintosh/hypercore-archiver which is more consistent and simpler. If you're building a tool that only needs to manage a single dat archive at the time it's recommended to use datproject/dat-node instead.
See Also
- datproject/dat-node
- mafintosh/hyperdrive
- mafintosh/hypercore-archiver
- datproject/multidrive
- juliangruber/hyperdrive-stats
- juliangruber/dat-encoding