posts.put('1337', post, function (err) { if (err) throw err posts.byTitle.get('a title', console.log) posts.byLength.get('11!a title', console.log) posts.byAuthor.get('julian!a title', console.log) })
test('multilevel', function (t) { t.plan(3) var posts = sub(level(), 'posts', { valueEncoding: 'json' }) var idb = sub(level(), 'title') var byTitle = AutoIndex(posts, idb, keyReducer('title')) var server = multilevel.server(byTitle) var client = multilevel.client(byTitle.manifest) server.pipe(client.createRpcStream()).pipe(server) var post = { title: 'a title', body: 'lorem ipsum' } posts.put('1337', post, function (err) { t.error(err) client.get('a title', function (err, _post) { t.error(err) t.deepEqual(_post, post) }) }) })
tape('subleveldown on deferred multileveldown client', function (t) { t.plan(5) var db = factory() var stream = multileveldown.server(db) var client = multileveldown.client() var sub1 = sub(client, 'test', { valueEncoding: 'json' }) var sub2 = sub(client, 'test') t.is(client.isOpen(), false) stream.pipe(client.createRpcStream()).pipe(stream) sub1.put('hello', { test: 'world' }, function (err) { t.error(err, 'no err') sub1.createReadStream().pipe(concat(function (entries) { t.same(entries, [{ key: 'hello', value: { test: 'world' } }]) })) sub2.createReadStream().pipe(concat(function (entries) { t.same(entries, [{ key: 'hello', value: '{"test":"world"}' }]) })) db.createReadStream().pipe(concat(function (entries) { t.same(entries, [{ key: '!test!hello', value: '{"test":"world"}' }]) })) }) })
var sub2 = sub(client, 'test') sub1.put('hello', { test: 'world' }, function (err) { t.error(err, 'no err')
test('empty index keys', function (t) { t.plan(3) var db = level() var posts = sub(db, 'posts', { valueEncoding: 'json' }) var idb = sub(db, 'title') posts.byEmpty = AutoIndex(posts, idb, function (value) { return [].join('!') }) posts.put('1337', { title: 'a title', body: 'lorem ipsum' }, function (err) { t.error(err) posts.del('1337', function (err) { t.error(err) posts.byEmpty.createReadStream() .on('data', function () { t.fail() }) .on('end', function () { t.ok(true) }) }) }) })
posts.put('1337', { id: '1337', title: 'a title',
test('safe-deep-access', function (t) { t.plan(5) var db = MemDB() var posts = sub(db, 'posts', { valueEncoding: 'json' }) var idb = sub(db, 'index') Index(posts, idb) .by('Title', 'title') .by('Length', ['body.length']) .by('Author', ['author', 'title']) var post = { title: 'a title', author: 'julian' } posts.put('1337', post, function (err) { t.error(err) posts.byTitle.get('a title', onPost) posts.byAuthor.get('julian!a title', onPost) function onPost (err, _post) { t.error(err) t.deepEqual(_post, post) } }) })
posts.put('1337', post, function (err) { t.error(err)
tape('multileveldown server on deferred subleveldown', function (t) { t.plan(4) var db = factory() var sub1 = sub(db, 'test1') var sub2 = sub(db, 'test2') var stream = multileveldown.server(sub1) var client = multileveldown.client() stream.pipe(client.createRpcStream()).pipe(stream) client.put('from', 'client', function (err) { t.error(err, 'no err') sub2.put('from', 'server', function (err) { t.error(err, 'no err') client.createReadStream().pipe(concat(function (entries) { t.same(entries, [{ key: 'from', value: 'client' }]) })) db.createReadStream().pipe(concat(function (entries) { t.same(entries, [ { key: '!test1!from', value: 'client' }, { key: '!test2!from', value: 'server' } ]) })) }) }) })
posts.put('1337', { title: 'a title', body: 'lorem ipsum'
posts.put('1337', post, function (err) { t.error(err)
test('key encoding', function (t) { t.plan(3) var db = level() var index = { // value encoding should match keyEncoding of indexd db title: sub(db, 'title', { valueEncoding: bytewise }), len: sub(db, 'length', { valueEncoding: bytewise }) } var posts = sub(db, 'posts', { valueEncoding: 'json', keyEncoding: bytewise }) posts.byTitle = AutoIndex(posts, index.title, keyReducer('title')) posts.byLength = AutoIndex(posts, index.len, function (post) { return post.body.length }) var post = { title: 'a title', body: 'lorem ipsum' } var key = ['1337'] posts.put(key, post, function (err) { t.error(err) index.title.get('a title', function (err, _key) { t.error(err) t.deepEqual(_key, key) }) }) })
posts.put('1337', post, function (err) { t.error(err)