Skip to content

Commit e670fee

Browse files
author
abluchet
committed
Use random-access-storage
1 parent cc55345 commit e670fee

File tree

7 files changed

+421
-41
lines changed

7 files changed

+421
-41
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
node_modules

.travis.yml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
language: node_js
2+
addons:
3+
chrome: stable
4+
apt:
5+
packages:
6+
- xvfb
7+
os:
8+
- linux
9+
before_install:
10+
- npm install browser-run browserify -g
11+
- export DISPLAY=':99.0'
12+
- Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
13+
node_js:
14+
- "8"

index.js

Lines changed: 38 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
var Abstract = require('abstract-random-access')
1+
var Abstract = require('random-access-storage')
22
var inherits = require('inherits')
33
var nextTick = require('next-tick')
44
var once = require('once')
@@ -11,11 +11,11 @@ var DELIM = '\0'
1111
module.exports = function (dbname, xopts) {
1212
if (!xopts) xopts = {}
1313
var idb = xopts.idb || (typeof window !== 'undefined'
14-
? window.indexedDB || window.mozIndexedDB
15-
|| window.webkitIndexedDB || window.msIndexedDB
14+
? window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB
1615
: null)
1716
if (!idb) throw new Error('indexedDB not present and not given')
18-
var db = null, dbqueue = []
17+
var db = null
18+
var dbqueue = []
1919
if (typeof idb.open === 'function') {
2020
var req = idb.open(dbname)
2121
req.addEventListener('upgradeneeded', function () {
@@ -63,73 +63,73 @@ Store.prototype._blocks = function (i, j) {
6363
return blocks(this.size, i, j)
6464
}
6565

66-
Store.prototype._read = function (offset, length, cb) {
66+
Store.prototype._read = function (req) {
6767
var self = this
68-
cb = once(cb)
6968
var buffers = []
7069
self._store('readonly', function (err, store) {
71-
if ((self.length || 0) < offset+length) {
72-
return cb(new Error('Could not satisfy length'))
70+
if ((self.length || 0) < req.offset + req.size) {
71+
return req.callback(new Error('Could not satisfy length'), null)
7372
}
74-
if (err) return cb(err)
75-
var offsets = self._blocks(offset, offset+length)
73+
if (err) return req.callback(err)
74+
var offsets = self._blocks(req.offset, req.offset + req.size)
7675
var pending = offsets.length + 1
7776
var firstBlock = offsets.length > 0 ? offsets[0].block : 0
78-
var j = 0
7977
for (var i = 0; i < offsets.length; i++) (function (o) {
8078
var key = self.name + DELIM + o.block
8179
backify(store.get(key), function (err, ev) {
82-
if (err) return cb(err)
83-
buffers[o.block-firstBlock] = ev.target.result
84-
? bufferFrom(ev.target.result.subarray(o.start,o.end))
85-
: bufferAlloc(o.end-o.start)
86-
if (--pending === 0) cb(null, Buffer.concat(buffers))
80+
if (err) return req.callback(err)
81+
buffers[o.block - firstBlock] = ev.target.result
82+
? bufferFrom(ev.target.result.subarray(o.start, o.end))
83+
: bufferAlloc(o.end - o.start)
84+
if (--pending === 0) req.callback(null, Buffer.concat(buffers))
8785
})
8886
})(offsets[i])
89-
if (--pending === 0) cb(null, Buffer.concat(buffers))
87+
if (--pending === 0) req.callback(null, Buffer.concat(buffers))
9088
})
9189
}
9290

93-
Store.prototype._write = function (offset, buf, cb) {
91+
Store.prototype._write = function (req) {
9492
var self = this
95-
cb = once(cb)
9693
self._store('readwrite', function (err, store) {
97-
if (err) return cb(err)
98-
var offsets = self._blocks(offset, offset + buf.length)
94+
if (err) return req.callback(err)
95+
var offsets = self._blocks(req.offset, req.offset + req.data.length)
9996
var pending = 1
10097
var buffers = {}
101-
for (var i = 0; i < offsets.length; i++) (function (o,i) {
102-
if (o.end-o.start === self.size) return
98+
for (var i = 0; i < offsets.length; i++) (function (o, i) {
99+
if (o.end - o.start === self.size) return
103100
pending++
104101
var key = self.name + DELIM + o.block
105102
backify(store.get(key), function (err, ev) {
106-
if (err) return cb(err)
103+
if (err) return req.callback(err)
107104
buffers[i] = bufferFrom(ev.target.result || bufferAlloc(self.size))
108105
if (--pending === 0) write(store, offsets, buffers)
109106
})
110-
})(offsets[i],i)
107+
})(offsets[i], i)
111108
if (--pending === 0) write(store, offsets, buffers)
112109
})
110+
113111
function write (store, offsets, buffers) {
112+
var block
114113
for (var i = 0, j = 0; i < offsets.length; i++) {
115114
var o = offsets[i]
116115
var len = o.end - o.start
117116
if (len === self.size) {
118-
block = buf.slice(j,j+len)
117+
block = req.data.slice(j, j + len)
119118
} else {
120119
block = buffers[i]
121-
buf.copy(block, o.start, j, j+len)
120+
req.data.copy(block, o.start, j, j + len)
122121
}
123-
store.put(block,self.name + DELIM + o.block)
122+
store.put(block, self.name + DELIM + o.block)
124123
j += len
125124
}
126-
var length = Math.max(self.length || 0, offset + buf.length)
127-
store.put(length, self.name + DELIM + "length")
125+
126+
var length = Math.max(self.length || 0, req.offset + req.data.length)
127+
store.put(length, self.name + DELIM + 'length')
128128
store.transaction.addEventListener('complete', function () {
129129
self.length = length
130-
cb(null)
130+
req.callback(null)
131131
})
132-
store.transaction.addEventListener('error', cb)
132+
store.transaction.addEventListener('error', req.callback)
133133
}
134134
}
135135

@@ -144,13 +144,15 @@ Store.prototype._store = function (mode, cb) {
144144
})
145145
}
146146

147-
Store.prototype._open = function(cb) {
147+
Store.prototype._open = function (req) {
148148
var self = this
149-
this._getdb(function(db) {
149+
this._getdb(function (db) {
150150
self._store('readonly', function (err, store) {
151-
backify(store.get(self.name + DELIM + "length"), function(err, ev) {
151+
if (err) return req.callback(err)
152+
backify(store.get(self.name + DELIM + 'length'), function (err, ev) {
153+
if (err) return req.callback(err)
152154
self.length = ev.target.result || 0
153-
cb(null)
155+
req.callback(null)
154156
})
155157
})
156158
})

0 commit comments

Comments
 (0)