diff --git a/README.md b/README.md index c932b2e..d51dac3 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ That's what this library does. ## Usage -To get started, you'll first need to install gun-level. +To get started, you'll first need to install `gun-level`. > If you're unfamiliar with `npm`, you can get started [here](https://docs.npmjs.com/getting-started/what-is-npm) @@ -34,7 +34,7 @@ $ npm install --save gun-level gun Now require them from your node project. ```javascript -// Imports the `Gun` library +// Import the `Gun` library const Gun = require('gun') // Imported for side effects, adds level adapters. @@ -42,7 +42,7 @@ const Gun = require('gun') require('gun-level') ``` -Once they're imported you can create a new database interface: +Once they're imported you can create a new Gun database: ```javascript const gun = new Gun({ @@ -50,7 +50,11 @@ const gun = new Gun({ }) ``` -Sweet, you're set up! However, `gun-level` won't do anything unless you pass it a levelDB instance through the constructor. For that, you'll need to download level: +Sweet, you're set up! However, `gun-level` won't do anything unless you pass it a levelDB instance through the `Gun` constructor. For that, you'll need to download the Node `levelup` package. + +> There are some differences between `levelup` v1 and v2 so be sure to note which version you're using. + +### `levelup` v1 ```sh $ npm install --save levelup leveldown @@ -70,16 +74,45 @@ const levelDB = levelup('data', { }) ``` -Now we pass our new levelDB instance to the `Gun` constructor. +### `levelup` >v2 + +```sh +$ npm install --save levelup leveldown encoding-down +``` ```javascript +// Import the required libraries +const levelup = require('levelup') +const encode = require('encoding-down') +const leveldown = require('leveldown') + +// Create a new level instance which saves +// to the `data/` folder. +const levelDB = levelup( + encode( + leveldown('data'), + { valueEncoding: 'json' } + ) +) +``` + +### Instantiating Gun with Level + +Now we can pass our new levelDB instance to the `Gun` constructor. + +```javascript +const Gun = require('gun') +require('gun-level') + +// ... instantiate LevelDB per above + +// Pass LevelDB instance into Gun const gun = new Gun({ - level: levelDB, - file: false, + level: levelDB }) ``` -Done! Now your gun instance is backed up to levelDB. +Done! Now your `gun` database will store it's graph in your Level DB! Let's try a few things... diff --git a/package.json b/package.json index 852ad41..cac4187 100644 --- a/package.json +++ b/package.json @@ -39,13 +39,14 @@ "babel-plugin-transform-runtime": "^6.23.0", "babel-preset-es2015": "^6.24.1", "babel-register": "^6.24.1", + "encoding-down": "^2.3.4", "eslint": "^4.3.0", "eslint-config-llama": "^3.0.0", "eslint-config-prettier": "^2.3.0", "expect": "^1.20.2", "gun": "^0.8", "husky": "^0.14.3", - "levelup": "^1.3.8", + "levelup": "^2.0.0", "lint-staged": "^4.0.2", "memdown": "^1.2.0", "mocha": "^3.4.2", diff --git a/src/Adapter/spec.js b/src/Adapter/spec.js index f9895a3..bb6b7a8 100644 --- a/src/Adapter/spec.js +++ b/src/Adapter/spec.js @@ -4,6 +4,7 @@ import expect, { spyOn } from 'expect'; import Adapter from './'; import levelup from 'levelup'; import memdown from 'memdown'; +import encode from 'encoding-down'; import Gun from 'gun/gun'; const node = obj => Gun.node.ify(obj, Gun.state.map()); @@ -12,9 +13,7 @@ describe('An adapter', function() { this.timeout(100); let adapter, lex, gun, ctx; - const level = levelup('test', { - db: memdown, - }); + const level = levelup(encode(memdown('test'), { valueEncoding: 'json' })); const context = new Gun({ level }); beforeEach(() => { diff --git a/src/spec.js b/src/spec.js index b630c88..aa4e6cb 100644 --- a/src/spec.js +++ b/src/spec.js @@ -3,6 +3,7 @@ import { describe, it, beforeEach } from 'mocha'; import expect from 'expect'; import memdown from 'memdown'; import levelup from 'levelup'; +import encode from 'encoding-down'; import Gun from 'gun/gun'; import './index'; @@ -15,7 +16,7 @@ let gun, level, key; * @returns {undefined} */ const makeLevel = () => { - level = levelup('test', { db: memdown }); + level = levelup(encode(memdown('test'), { valueEncoding: 'json' })); }; /** @@ -71,9 +72,17 @@ describe('Gun using level', function() { const g = makeGun(); // write initial data - g.get(key).put({ data: true }, () => { + g.get(key).put({ data: true }, res1 => { + if (res1.err) { + throw res1.err; + } + // add to it - g.get(key).put({ success: true }, () => { + g.get(key).put({ success: true }, res2 => { + if (res2.err) { + throw res2.err; + } + // verify data merge makeGun().get(key).val(value => { expect(value).toContain({ success: true, data: true }); diff --git a/yarn.lock b/yarn.lock index 48134cd..fd69742 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6,12 +6,18 @@ abbrev@1: version "1.0.9" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" -abstract-leveldown@2.4.1, abstract-leveldown@~2.4.0: +abstract-leveldown@2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-2.4.1.tgz#b3bfedb884eb693a12775f0c55e9f0a420ccee64" dependencies: xtend "~4.0.0" +abstract-leveldown@^2.7.1, abstract-leveldown@~2.7.0: + version "2.7.2" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz#87a44d7ebebc341d59665204834c8b7e0932cc93" + dependencies: + xtend "~4.0.0" + acorn-jsx@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" @@ -892,11 +898,11 @@ deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" -deferred-leveldown@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-1.2.1.tgz#5d25c3310f5fe909946f6240dc9f90dd109a71ef" +deferred-leveldown@~2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-2.0.2.tgz#6d3dcb066d940f01392cf310c8029a8605e7eef7" dependencies: - abstract-leveldown "~2.4.0" + abstract-leveldown "~2.7.0" define-properties@^1.1.2, define-properties@~1.1.2: version "1.1.2" @@ -952,6 +958,14 @@ elegant-spinner@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" +encoding-down@^2.3.4: + version "2.3.4" + resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-2.3.4.tgz#8ec27729aead0798144a2689fda89f303a93a5e3" + dependencies: + abstract-leveldown "^2.7.1" + level-codec "^8.0.0" + level-errors "^1.0.4" + errno@~0.1.1: version "0.1.4" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" @@ -1702,10 +1716,6 @@ is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -1820,35 +1830,31 @@ kind-of@^3.0.2: dependencies: is-buffer "^1.0.2" -level-codec@~6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-6.1.0.tgz#f5df0a99582f76dac43855151ab6f4e4d0d60045" +level-codec@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-8.0.0.tgz#3a4a0de06dae20c2f5a57b3372c7651e67083e03" -level-errors@^1.0.3, level-errors@~1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-1.0.4.tgz#3585e623974c737a93755492a43c0267cda4425f" +level-errors@^1.0.4, level-errors@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-1.1.1.tgz#52fdc2dbbaf395cf767db843929a38b7015678d2" dependencies: errno "~0.1.1" -level-iterator-stream@~1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz#e43b78b1a8143e6fa97a4f485eb8ea530352f2ed" +level-iterator-stream@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-2.0.0.tgz#e0fe4273a0322177c81bb87684016bb5b90a98b4" dependencies: inherits "^2.0.1" - level-errors "^1.0.3" - readable-stream "^1.0.33" + readable-stream "^2.0.5" xtend "^4.0.0" -levelup@^1.3.8: - version "1.3.8" - resolved "https://registry.yarnpkg.com/levelup/-/levelup-1.3.8.tgz#fb442c488efbea1043f7eb9929a792a74fbd1da6" +levelup@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/levelup/-/levelup-2.0.0.tgz#6a7e2af8e4d63fa17313e922c6c8a5b81cec1d08" dependencies: - deferred-leveldown "~1.2.1" - level-codec "~6.1.0" - level-errors "~1.0.3" - level-iterator-stream "~1.3.0" - prr "~1.0.1" - semver "~5.1.0" + deferred-leveldown "~2.0.2" + level-errors "~1.1.0" + level-iterator-stream "~2.0.0" xtend "~4.0.0" levn@^0.3.0, levn@~0.3.0: @@ -2348,10 +2354,6 @@ prr@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" @@ -2388,15 +2390,6 @@ rc@~1.1.6: minimist "^1.2.0" strip-json-comments "~1.0.4" -readable-stream@^1.0.33: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - "readable-stream@^2.0.0 || ^1.1.13", readable-stream@~2.1.4: version "2.1.5" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" @@ -2420,7 +2413,7 @@ readable-stream@^2.0.2: string_decoder "~0.10.x" util-deprecate "~1.0.1" -readable-stream@^2.2.2: +readable-stream@^2.0.5, readable-stream@^2.2.2: version "2.3.3" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" dependencies: @@ -2594,10 +2587,6 @@ semver@^5.3.0, semver@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" -semver@~5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.1.1.tgz#a3292a373e6f3e0798da0b20641b9a9c5bc47e19" - set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"