diff --git a/.flowconfig b/.flowconfig index 7b7b4bb..34e5c77 100644 --- a/.flowconfig +++ b/.flowconfig @@ -2,6 +2,7 @@ .*/radium/.* .*/standard-changelog/.* .*/conventional-changelog-core/.* +.*/node_modules/.* [include] diff --git a/appveyor.yml b/appveyor.yml new file mode 100644 index 0000000..5906a34 --- /dev/null +++ b/appveyor.yml @@ -0,0 +1,27 @@ +version: "{build}" + +environment: + matrix: + - nodejs_version: "6" + +matrix: + fast_finish: true + +install: + # Install Node.js + - ps: Install-Product node $env:nodejs_version + + # Upgrade npm + - npm install -g npm + + # Output our current versions for debugging + - node --version + - npm --version + + # Install our package dependencies + - npm install + +test_script: + - npm run test + +build: off \ No newline at end of file diff --git a/package.json b/package.json index b44dca2..b9b3fca 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "main": "src/index.js", "scripts": { "lint": "aegir-lint", - "test": "aegir-test --env node", + "test": "aegir-test --env node --timeout 20000", "flow": "flow", "release": "aegir-release --env node --docs", "release-minor": "aegir-release --type minor --env node --docs", @@ -33,13 +33,13 @@ "homepage": "https://github.com/ipfs/js-datastore-fs#readme", "dependencies": { "datastore-core": "^0.3.0", + "glob": "^7.1.2", "graceful-fs": "^4.1.11", "interface-datastore": "^0.3.0", "level-js": "^2.2.4", "leveldown": "^1.7.2", "levelup": "^1.3.8", "mkdirp": "^0.5.1", - "pull-glob": "^1.0.6", "pull-stream": "^3.6.0", "write-file-atomic": "^2.1.0" }, @@ -57,4 +57,4 @@ "David Dias ", "Friedel Ziegelmayer " ] -} \ No newline at end of file +} diff --git a/src/index.js b/src/index.js index cdc520e..7f6d1ec 100644 --- a/src/index.js +++ b/src/index.js @@ -5,7 +5,7 @@ const fs = require('graceful-fs') const pull = require('pull-stream') -const glob = require('pull-glob') +const glob = require('glob') const setImmediate = require('async/setImmediate') const waterfall = require('async/series') const each = require('async/each') @@ -136,7 +136,9 @@ class FsDatastore { throw new Error(`Invalid extension: ${path.extname(file)}`) } - return new Key(file.slice(this.path.length, -ext.length)) + let keyname = file.slice(this.path.length, -ext.length) + keyname = keyname.split(path.sep).join('/') + return new Key(keyname) } /** @@ -259,7 +261,13 @@ class FsDatastore { * @returns {PullStream} */ query (q /* : Query */) /* : QueryResult */ { - let tasks = [glob(path.join(this.path, '**', '*' + this.opts.extension))] + // glob expects a POSIX path + let prefix = q.prefix || '**' + let pattern = + path.join(this.path, prefix, '*' + this.opts.extension) + .split(path.sep) + .join('/') + let tasks = [pull.values(glob.sync(pattern))] if (!q.keysOnly) { tasks.push(pull.asyncMap((f, cb) => { @@ -277,19 +285,10 @@ class FsDatastore { tasks.push(pull.map(f => ({ key: this._decode(f) }))) } - let filters = [] - - if (q.prefix != null) { - const prefix = q.prefix - filters.push((e, cb) => cb(null, e.key.toString().startsWith(prefix))) - } - if (q.filters != null) { - filters = filters.concat(q.filters) + tasks = tasks.concat(q.filters.map(f => asyncFilter(f))) } - tasks = tasks.concat(filters.map(f => asyncFilter(f))) - if (q.orders != null) { tasks = tasks.concat(q.orders.map(o => asyncSort(o))) } diff --git a/test/index.spec.js b/test/index.spec.js index 7c3f106..f9211a8 100644 --- a/test/index.spec.js +++ b/test/index.spec.js @@ -91,7 +91,7 @@ describe('FsDatastore', () => { }) it('query', (done) => { - const fs = new FsStore(path.join(__dirname, 'test-repo/blocks')) + const fs = new FsStore(path.join(__dirname, 'test-repo', 'blocks')) pull( fs.query({}), @@ -139,9 +139,8 @@ describe('FsDatastore', () => { } }) }) - - // TODO: depends on sharding query fix - describe.skip('interface-datastore (sharding(fs))', () => { + + describe('interface-datastore (sharding(fs))', () => { const dir = utils.tmpdir() require('interface-datastore/src/tests')({