Closed
Description
I felt the need to defragment various threads:
- Detect presence of
approximateSize
: implement manifest functionality deferred-leveldown#35 and detecting approximateSize presence abstract-leveldown#8 - Get an underlying
db
with a certaintype
: Current functionality and the future (hoping on support for all use cases) subleveldown#34 - Exposing sublevels to clients: multilevel(down) and level-manifest compatibility subleveldown#35
- Various: isEmbedded() expose what sort of contract the leveldown can provide. levelup#279
Prior art:
level-manifest
(used bymultilevel
but notmultileveldown
)
Requirements:
- Manifests must be objects (established in isEmbedded() expose what sort of contract the leveldown can provide. levelup#279)
- Declare high-level features as booleans:
- snapshot guarantees (use case: tests, consumers that require consistency)
- exclusive access (use case: live streams, prehooks) (see isEmbedded() expose what sort of contract the leveldown can provide. levelup#279)
- binary keys (use case: tests, deciding on a network transport)
- permanence (use case: packager tests)
- seeking (use case: tests, multiget, skip scans)
- Declare additional methods and properties (that are not part of the abstract API)
- Examples:
approximateSize()
(use case: defer/proxy/expose)- sublevels (use case: exposing them to clients)
- Declare name, return type, sync/callback/promise
- Examples:
- Nice to have: use manifests the other way around, to declare features that a plugin wants
Open questions:
- Should manifests extend manifests from underlying downs? Note that underlying downs can be swapped at runtime.
- In some cases, feature support depends on the runtime environment too. E.g. not all browsers support binary keys in
level-js
. Is that something we want to expose?