memory-blob-store
Advanced tools
19
index.js
@@ -28,7 +28,8 @@ const stream = require('stream'); | ||
const ws = new stream.Writable(); | ||
self.readers[key] = self.readers[key] || {}; | ||
if (self.writing[key]) { | ||
self._closeReaders(key); | ||
} | ||
self.readers[key] = {}; | ||
self.readers[key] = []; | ||
self.writing[key] = true; | ||
@@ -58,4 +59,4 @@ | ||
function _writeToReaders(key, buffer) { | ||
for (let i = 0; this.readers[key].length; i += 1) { | ||
this.readers[i].push(buffer); | ||
for (let i = 0; i < this.readers[key].length; i += 1) { | ||
this.readers[key][i].push(buffer); | ||
} | ||
@@ -66,2 +67,6 @@ } | ||
function _closeReaders(key) { | ||
if(!this.readers[key]) { | ||
return null; | ||
} | ||
for (let i = 0; this.readers[key].length; i += 1) { | ||
@@ -102,11 +107,15 @@ this.readers[key][i].push(null); | ||
const rs = new stream.Readable(); | ||
self.readers[key] = self.readers[key] || {}; | ||
rs.push(self.store[key]); | ||
if (!self.writing[key]) { | ||
rs.push(null); | ||
delete self.readers[key]; | ||
} else { | ||
self.readers[key].push(rs); | ||
} | ||
if (!self.store[key]) { | ||
timers.setImmediate(rs.emit.bind(rs), 'error', new Error('Blob does not exist.')); | ||
} | ||
rs._read = function noop() {}; | ||
@@ -113,0 +122,0 @@ return rs; |
{ | ||
"name": "memory-blob-store", | ||
"version": "3.0.0", | ||
"version": "4.0.0", | ||
"description": "An in-memory blob store", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
@@ -19,1 +19,24 @@ const abstractBlobTests = require('abstract-blob-store/tests'); | ||
abstractBlobTests(test, common); | ||
test('handles multiple readers during write stream', function(t) { | ||
var key = 'foobar'; | ||
var data = ['x', 'y', 'z']; | ||
var index = 0; | ||
t.plan(data.length * 2); | ||
setup(null, function (e, store) { | ||
var ws = store.createWriteStream(key); | ||
var rs1 = store.createReadStream(key); | ||
var rs2 = store.createReadStream(key); | ||
rs1.on('data', function(d) { | ||
t.equal(d.toString(), data[index | 0], 'Received data during write'); | ||
index += .5; | ||
}); | ||
rs2.on('data', function(d) { | ||
t.equal(d.toString(), data[index | 0], 'Received data during write'); | ||
index += .5; | ||
}); | ||
for(var i = 0; i < data.length; i++) { | ||
ws.write(data[i]); | ||
} | ||
}); | ||
}); |
89367
0.79%147
20.49%