This document describes breaking changes and how to upgrade. For a complete list of changes including minor and patch releases, please refer to the CHANGELOG
.
Legacy range options have been removed (Level/community#86). If you previously did:
db.iterator({ start: 'a', end: 'z' })
An error would now be thrown and you must instead do:
db.iterator({ gte: 'a', lte: 'z' })
This release also drops support of legacy runtime environments (Level/community#98):
- Node.js 6 and 8
- Internet Explorer 11
- Safari 9-11
- Stock Android browser (AOSP).
Lastly, and less likely to be a breaking change, the immediate
browser shim for process.nextTick()
has been replaced with the smaller queue-microtask
.
Support of keys & values other than strings and Buffers has been dropped. Internally memdown
now stores keys & values as Buffers which solves a number of compatibility issues (#186). If you pass in a key or value that isn't a string or Buffer, it will be irreversibly stringified.
This is an upgrade to abstract-leveldown@6
which solves long-standing issues around serialization and type support.
Previously, range options like lt
were passed through as-is by abstract-leveldown
, unlike keys. This makes no difference for memdown
as it does not serialize anything.
Because null
, undefined
, zero-length strings and zero-length buffers are significant types in encodings like bytewise
and charwise
, they became valid as range options in abstract-leveldown
. This means db.iterator({ gt: undefined })
is not the same as db.iterator({})
.
For memdown
, when used by itself, the behavior of null
, undefined
, zero-length strings and zero-length buffers is undefined.
In addition to rejecting null
and undefined
as keys, abstract-leveldown
now also rejects these types as values, due to preexisting significance in streams and iterators.
Though this was already the case, abstract-leveldown
has replaced the behavior with an explicit Array.isArray()
check and a new error message.
IE10 has been dropped.
Dropped support for node 4. No other breaking changes.
This release drops Node.js 0.12, brings memdown
up to par with latest levelup
(v2) and abstract-leveldown
(v4), simplifies serialization and removes global state.
Targets latest levelup
Usage has changed to:
const levelup = require('levelup')
const memdown = require('memdown')
const db = levelup(memdown())
From the old:
const db = levelup('mydb', { db: memdown })
This means that in addition to Buffers, you can store any JS type without the need for encoding-down
. This release also makes behavior consistent in Node.js and browsers. Please refer to the README for a detailed explanation.
If you previously did this to make a global store:
const db = levelup('mydb', { db: memdown })
You must now attach the store to a global yourself (if you desire global state):
const db = window.mydb = levelup(memdown())
Instead of skipping null
operations, db.batch([null])
will throw an error courtesy of abstract-leveldown
.