A continuation of Level/subleveldown#34. cc @ralphtheninja
Background
Modules like subleveldown and multileveldown have to peel off layers (levelup, deferred-leveldown and/or encoding-down) from an input db to get to the inner db, which they then rewrap with those same layers.
That process ain't pretty, so I wrote reachdown to hide that ugliness. It currently has to feature-detect deferred-leveldown and encoding-down, and this may clash with another abstract-leveldown implementation at some point. To counter that, we can add a type property across the board:
MyLeveldown.prototype.type = 'my-leveldown'
Note: with that in place, the unwrapping (or even merely the fact that we have to unwrap) still isn't very clean, but IMO it's acceptable as a medium-term solution because there's a plan to merge level(up) functionality into abstract-leveldown (#58) which ultimately removes the need to unwrap.
Tasks
Add type
Use reachdown utility
A continuation of Level/subleveldown#34. cc @ralphtheninja
Background
Modules like
subleveldownandmultileveldownhave to peel off layers (levelup,deferred-leveldownand/orencoding-down) from an input db to get to the inner db, which they then rewrap with those same layers.That process ain't pretty, so I wrote
reachdownto hide that ugliness. It currently has to feature-detectdeferred-leveldownandencoding-down, and this may clash with anotherabstract-leveldownimplementation at some point. To counter that, we can add atypeproperty across the board:Note: with that in place, the unwrapping (or even merely the fact that we have to unwrap) still isn't very clean, but IMO it's acceptable as a medium-term solution because there's a plan to merge
level(up)functionality intoabstract-leveldown(#58) which ultimately removes the need to unwrap.Tasks
Add
typelevelupdeferred-leveldownencoding-downsubleveldown(already had it)multileveldownRelease: not ourslevel-js(not needed now)leveldown(not needed now)memdown(not needed now)rocksdbUse
reachdownutilitysubleveldown(reachdownitself was adapted from code insubleveldown)multileveldownRelease: not ourslevel-benchlevel-test(in its tests)