Commit 19f8415bfb3ca6c771792dd025ec7db5b6927e03
handle keys and values in a way that will be familiar to leveldbers
Dominic Tarr committed on 8/18/2016, 6:20:56 AMParent: 1a10bc9d9fd3eba08dd44cd0ee208bdc2651f38f
Files changed
index.js | changed |
index.js | ||
---|---|---|
@@ -2,8 +2,10 @@ | ||
2 | 2 … | |
3 | 3 … | var isBuffer = Buffer.isBuffer |
4 | 4 … | var Notify = require('pull-notify') |
5 | 5 … | var Live = require('pull-live') |
6 … | +var pull = require('pull-stream/pull') | |
7 … | +var Map = require('pull-stream/throughs/map') | |
6 | 8 … | |
7 | 9 … | var Blocks = require('block-reader') |
8 | 10 … | |
9 | 11 … | function frame (data) { |
@@ -22,8 +24,16 @@ | ||
22 | 24 … | } |
23 | 25 … | return b |
24 | 26 … | } |
25 | 27 … | |
28 … | +function format (opts) { | |
29 … | + var keys = opts.keys === true //default to false | |
30 … | + var values = opts.value !== false //default to true | |
31 … | + return Map(function (data) { | |
32 … | + return keys && values ? data : values ? data.value : data.key | |
33 … | + }) | |
34 … | +} | |
35 … | + | |
26 | 36 … | module.exports = function (file, length) { |
27 | 37 … | |
28 | 38 … | var notify = Notify() |
29 | 39 … | length = length || 1024 |
@@ -61,31 +71,32 @@ | ||
61 | 71 … | var next = reverse ? (opts && opts.max || blocks.size()) : (opts && opts.min || 0) |
62 | 72 … | var diff = reverse ? -1 : 1 |
63 | 73 … | var get = reverse ? log.getPrevious : log.get |
64 | 74 … | |
65 | - return function (abort, cb) { | |
75 … | + return pull(function (abort, cb) { | |
66 | 76 … | if(abort) cb(abort) |
67 | 77 … | else if(reverse && next <= 0) |
68 | 78 … | cb(true) |
69 | 79 … | else |
70 | 80 … | get(next, function (err, value) { |
71 | 81 … | if(err) return cb(true) //err) |
72 | 82 … | else if(!value || !value.length) return cb(true) |
73 | 83 … | else { |
84 … | + var _offset = next | |
74 | 85 … | next = next + (value.length + 8)*diff |
75 | - cb(null, value) | |
86 … | + cb(null, {key: _offset, value: value}) | |
76 | 87 … | } |
77 | 88 … | }) |
78 | - } | |
89 … | + }, format(opts)) | |
79 | 90 … | }, function (opts) { |
80 | - return notify.listen() | |
91 … | + return pull(notify.listen(), format(opts)) | |
81 | 92 … | }), |
82 | 93 … | //if value is an array of buffers, then treat that as a batch. |
83 | 94 … | append: function (value, cb) { |
84 | 95 … | if(!isBuffer(value)) throw new Error('value must be a buffer') |
85 | 96 … | queue.push({value: value, cb: function (err, offset) { |
86 | 97 … | if(err) return cb(err) |
87 | - notify(value) | |
98 … | + notify({key: offset, value: value}) | |
88 | 99 … | cb(null, offset) |
89 | 100 … | }}) |
90 | 101 … | write() |
91 | 102 … | }, |
@@ -109,5 +120,4 @@ | ||
109 | 120 … | }, |
110 | 121 … | } |
111 | 122 … | } |
112 | 123 … | |
113 | - |
Built with git-ssb-web