Skip to content
This repository was archived by the owner on Mar 23, 2023. It is now read-only.

Commit d16e212

Browse files
authored
fix: swap leveldown/level.js for level (#20)
The `level` module bundles `leveldown`, `encoding-down` and `levelup`, as well as subsituting `level.js` for `leveldown` in the browser. This change uses `level` over all those other modules.
1 parent 41e9bd7 commit d16e212

File tree

6 files changed

+34
-54
lines changed

6 files changed

+34
-54
lines changed

README.md

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,14 @@
2121
## Table of Contents
2222

2323
- [js-datastore-level](#js-datastore-level)
24-
- [Lead Maintainer](#lead-maintainer)
25-
- [Table of Contents](#table-of-contents)
26-
- [Install](#install)
27-
- [Usage](#usage)
28-
- [Browser Shimming Leveldown](#browser-shimming-leveldown)
29-
- [Database names](#database-names)
30-
- [Contribute](#contribute)
31-
- [License](#license)
24+
- [Lead Maintainer](#Lead-Maintainer)
25+
- [Table of Contents](#Table-of-Contents)
26+
- [Install](#Install)
27+
- [Usage](#Usage)
28+
- [Browser Shimming Leveldown](#Browser-Shimming-Leveldown)
29+
- [Database names](#Database-names)
30+
- [Contribute](#Contribute)
31+
- [License](#License)
3232

3333
## Install
3434

@@ -41,18 +41,20 @@ $ npm install datastore-level
4141
```js
4242
const LevelStore = require('datastore-level')
4343

44-
// Default using leveldown as backend
44+
// Default using level as backend for node or the browser
4545
const store = new LevelStore('path/to/store')
4646

47-
// use in the browser with level.js
48-
const browserStore = new LevelStore('my/db/name', {db: require('level-js')})
49-
5047
// another leveldown compliant backend like memdown
51-
const memStore = new LevelStore('my/mem/store', {db: require('memdown')})
48+
const memStore = new LevelStore('my/mem/store', {
49+
db: require('level-mem')
50+
})
5251
```
5352

5453
### Browser Shimming Leveldown
55-
As `leveldown` does not work in the browser, `LevelStore` takes advantage of the browser property in package.json to shim `level-js` in its place. Most modern bundlers such as webpack, will see the shim and replace it for use in the browser. If you are using a bundler that does not support pkg.browser, you will need to handle the shimming yourself, as was the case with versions of `LevelStore` 0.7.0 and earlier.
54+
55+
`LevelStore` uses the `level` module to automatically use `level.js` if a modern bundler is used which can detect bundle targets based on the `pkg.browser` property in your `package.json`.
56+
57+
If you are using a bundler that does not support `pkg.browser`, you will need to handle the shimming yourself, as was the case with versions of `LevelStore` 0.7.0 and earlier.
5658

5759
### Database names
5860

package.json

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,6 @@
44
"description": "Datastore implementation with level(up|down) backend",
55
"leadMaintainer": "Pedro Teixeira <pedro@protocol.ai>",
66
"main": "src/index.js",
7-
"browser": {
8-
"leveldown": "level-js"
9-
},
107
"scripts": {
118
"test": "aegir test",
129
"test:node": "aegir test -t node",
@@ -41,18 +38,15 @@
4138
"homepage": "https://github.com/ipfs/js-datastore-level#readme",
4239
"dependencies": {
4340
"datastore-core": "~0.7.0",
44-
"encoding-down": "^6.0.2",
4541
"interface-datastore": "~0.7.0",
46-
"level-js": "^4.0.1",
47-
"leveldown": "^5.0.0",
48-
"levelup": "^4.0.1"
42+
"level": "^5.0.1"
4943
},
5044
"devDependencies": {
5145
"aegir": "^19.0.3",
5246
"chai": "^4.2.0",
5347
"cids": "~0.7.1",
5448
"dirty-chai": "^2.0.1",
55-
"memdown": "^4.0.0",
49+
"level-mem": "^4.0.0",
5650
"rimraf": "^2.6.2"
5751
},
5852
"contributors": [

src/index.js

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
'use strict'
22

3-
const levelup = require('levelup')
43
const { Key, Errors, utils } = require('interface-datastore')
5-
const encode = require('encoding-down')
6-
74
const { filter, map, take, sortAll } = utils
85

96
/**
@@ -17,22 +14,14 @@ class LevelDatastore {
1714
database = opts.db
1815
delete opts.db
1916
} else {
20-
// Default to leveldown db
21-
database = require('leveldown')
17+
database = require('level')
2218
}
2319

24-
this.db = levelup(
25-
encode(database(path), { valueEncoding: 'binary' }),
26-
Object.assign({}, opts, {
27-
compression: false // same default as go
28-
}),
29-
(err) => {
30-
// Prevent an uncaught exception error on duplicate locks
31-
if (err) {
32-
throw err
33-
}
34-
}
35-
)
20+
this.db = database(path, {
21+
...opts,
22+
valueEncoding: 'binary',
23+
compression: false // same default as go
24+
})
3625
}
3726

3827
async open () {

test/browser.js

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,7 @@
33

44
const { MountDatastore } = require('datastore-core')
55
const { Key } = require('interface-datastore')
6-
7-
// leveldown will be swapped for level-js
8-
const leveljs = require('leveldown')
9-
6+
const leveljs = require('level')
107
const LevelStore = require('../src')
118

129
describe('LevelDatastore', () => {

test/index.spec.js

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
const chai = require('chai')
55
chai.use(require('dirty-chai'))
66
const expect = chai.expect
7-
const memdown = require('memdown')
8-
const LevelDown = require('leveldown')
7+
const levelmem = require('level-mem')
8+
const level = require('level')
99
const os = require('os')
1010
const LevelStore = require('../src')
1111

@@ -15,7 +15,6 @@ describe('LevelDatastore', () => {
1515
const levelStore = new LevelStore('init-default')
1616
await levelStore.open()
1717

18-
expect(levelStore.db.db.db instanceof LevelDown).to.equal(true)
1918
expect(levelStore.db.options).to.include({
2019
createIfMissing: true,
2120
errorIfExists: false
@@ -27,22 +26,21 @@ describe('LevelDatastore', () => {
2726

2827
it('should be able to override the database', async () => {
2928
const levelStore = new LevelStore('init-default', {
30-
db: memdown,
29+
db: levelmem,
3130
createIfMissing: true,
3231
errorIfExists: true
3332
})
3433

3534
await levelStore.open()
3635

37-
expect(levelStore.db.db.db instanceof memdown).to.equal(true)
3836
expect(levelStore.db.options).to.include({
3937
createIfMissing: true,
4038
errorIfExists: true
4139
})
4240
})
4341
})
4442

45-
;[memdown, LevelDown].forEach(database => {
43+
;[levelmem, level].forEach(database => {
4644
describe(`interface-datastore ${database.name}`, () => {
4745
require('interface-datastore/src/tests')({
4846
setup: () => new LevelStore(`${os.tmpdir()}/datastore-level-test-${Math.random()}`, { db: database }),

test/node.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ describe('LevelDatastore', () => {
1717
describe('interface-datastore (leveldown)', () => {
1818
const dir = utils.tmpdir()
1919
require('interface-datastore/src/tests')({
20-
setup: () => new LevelStore(dir, { db: require('leveldown') }),
20+
setup: () => new LevelStore(dir, { db: require('level') }),
2121
teardown: () => promisify(rimraf)(dir)
2222
})
2323
})
@@ -34,17 +34,17 @@ describe('LevelDatastore', () => {
3434
return new MountDatastore([{
3535
prefix: new Key('/a'),
3636
datastore: new LevelStore(dirs[0], {
37-
db: require('leveldown')
37+
db: require('level')
3838
})
3939
}, {
4040
prefix: new Key('/q'),
4141
datastore: new LevelStore(dirs[1], {
42-
db: require('leveldown')
42+
db: require('level')
4343
})
4444
}, {
4545
prefix: new Key('/z'),
4646
datastore: new LevelStore(dirs[2], {
47-
db: require('leveldown')
47+
db: require('level')
4848
})
4949
}])
5050
},
@@ -56,7 +56,7 @@ describe('LevelDatastore', () => {
5656

5757
it.skip('interop with go', async () => {
5858
const store = new LevelStore(path.join(__dirname, 'test-repo', 'datastore'), {
59-
db: require('leveldown')
59+
db: require('level')
6060
})
6161

6262
let cids = []

0 commit comments

Comments
 (0)