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