diff --git a/package.json b/package.json index c4660d6..d3d5298 100644 --- a/package.json +++ b/package.json @@ -34,16 +34,17 @@ }, "homepage": "https://github.com/ipfs/interface-datastore#readme", "devDependencies": { - "aegir": "^12.2.0", + "aegir": "^15.1.0", "chai": "^4.1.2", "dirty-chai": "^2.0.1", - "flow-bin": "^0.60.1" + "flow-bin": "~0.60.1" }, "dependencies": { - "async": "^2.6.0", - "pull-defer": "^0.2.2", - "pull-stream": "^3.6.1", - "uuid": "^3.1.0" + "async": "^2.6.1", + "err-code": "^1.1.2", + "pull-defer": "~0.2.3", + "pull-stream": "^3.6.9", + "uuid": "^3.3.2" }, "engines": { "node": ">=6.0.0", diff --git a/src/errors.js b/src/errors.js new file mode 100644 index 0000000..14ca3ef --- /dev/null +++ b/src/errors.js @@ -0,0 +1,23 @@ +'use strict' + +const errcode = require('err-code') + +module.exports.dbOpenFailedError = (err) => { + err = err || new Error('Cannot open database') + return errcode(err, 'ERR_DB_OPEN_FAILED') +} + +module.exports.dbDeleteFailedError = (err) => { + err = err || new Error('Delete failed') + return errcode(err, 'ERR_DB_DELETE_FAILED') +} + +module.exports.dbWriteFailedError = (err) => { + err = err || new Error('Write failed') + return errcode(err, 'ERR_DB_WRITE_FAILED') +} + +module.exports.notFoundError = (err) => { + err = err || new Error('Not Found') + return errcode(err, 'ERR_NOT_FOUND') +} diff --git a/src/index.js b/src/index.js index f1bcc5f..d2fba21 100644 --- a/src/index.js +++ b/src/index.js @@ -4,10 +4,12 @@ const Key = require('./key') const MemoryDatastore = require('./memory') const utils = require('./utils') +const Errors = require('./errors') exports.Key = Key exports.MemoryDatastore = MemoryDatastore exports.utils = utils +exports.Errors = Errors /* :: // -- Basics diff --git a/src/memory.js b/src/memory.js index 2a9805e..9ae1a24 100644 --- a/src/memory.js +++ b/src/memory.js @@ -10,6 +10,9 @@ const asyncFilter = require('./utils').asyncFilter const asyncSort = require('./utils').asyncSort const Key = require('./key') +// Errors +const Errors = require('./errors') + class MemoryDatastore { /* :: data: {[key: string]: Buffer} */ @@ -34,7 +37,7 @@ class MemoryDatastore { } if (!exists) { - return callback(new Error('No value')) + return callback(Errors.notFoundError()) } callback(null, this.data[key.toString()]) diff --git a/src/tests.js b/src/tests.js index 2d6927a..90b0938 100644 --- a/src/tests.js +++ b/src/tests.js @@ -111,6 +111,15 @@ module.exports = (test/* : Test */) => { }) ], done) }) + + it('should return error with missing key', (done) => { + const k = new Key('/does/not/exist') + check(store).get(k, (err) => { + expect(err).to.exist() + expect(err).to.have.property('code', 'ERR_NOT_FOUND') + done() + }) + }) }) describe('delete', () => {