Package Exports
- reachdown
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (reachdown) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
reachdown
Get the inner db of an
(abstract-)level(up|down)
onion.
Useful for modules likesubleveldown
to peel off redundant layers.
Example
const reachdown = require('reachdown')
const db = require('level')('example')
Get the innermost db
, which in this case is a leveldown
instance in node or level-js
in browsers:
const down = reachdown(db)
Get a specific layer by type:
const enc = reachdown(db, 'encoding-down')
const down = reachdown(enc)
const levelup = reachdown(db, 'levelup') // levelup === db
Use a visitor function:
const down = reachdown(db, function (db, type) {
return db.someProperty && type !== 'levelup'
})
API
db = reachdown(db[, visit][, strict = false])
The db
argument is required and must be a recent-ish levelup
, abstract-leveldown
or subleveldown
instance. The visit
argument can be:
- A string, to find the first
db
with a matching type - A function, to find the first
db
for whichvisit
returns a truthy value - Omitted or falsy, to find the innermost
db
.
If visit
is non-falsy and no matching db
is found, reachdown
returns null
unless strict
is false
in which case it returns the innermost db
.
bool = reachdown.is(db, visit)
Utility to determine the type of db
without reaching down. The visit
argument is the same as above, i.e. a string or a function. Example:
if (reachdown.is(db, 'levelup')) {
// ..
}
Which is the same as the following, except that reachdown.is(..)
also works on older versions that don't have a type
property:
if (db.type === 'levelup') {
// ..
}
Supported Types
levelup
(>= 0.0.2 only if db is open, otherwise >= 2.0.0)encoding-down
(>= 1)deferred-leveldown
(>= 0.3.0 only if db is open, otherwise >= 2.0.0)subleveldown
(>= 4)multileveldown
(TBD)- Yours?
Implementations of abstract-leveldown
can declare a type like so:
MyLeveldown.prototype.type = 'my-leveldown'
So that consumers can find that layer:
var down = MyLeveldown()
var db = levelup(down)
reachdown(db, 'my-leveldown') === down
Install
With npm do:
npm install reachdown
License
MIT © 2019-present Vincent Weevers