diff --git a/src/oplog/OperationsLog.js b/src/oplog/OperationsLog.js index 1fece18..d50a2e0 100644 --- a/src/oplog/OperationsLog.js +++ b/src/oplog/OperationsLog.js @@ -29,7 +29,7 @@ class OperationsLog { let node, logHash; return this._log.add(entry) .then((op) => node = op) - .then(() => this._padOperation(node)) + .then(() => Object.assign(node.payload, { hash: node.hash })) .then(() => Log.getIpfsHash(this._ipfs, this._log)) .then((hash) => logHash = hash) .then(() => this._lastWrite = logHash) @@ -56,8 +56,8 @@ class OperationsLog { .then((other) => this._log.join(other)) .then((merged) => newItems = merged) .then(() => Cache.set(this.dbname, hash)) - .then(() => newItems.map((f) => this._padOperation(f))) - .then((items) => items.map((f) => f.payload)) + .then(() => newItems.forEach((f) => Object.assign(f.payload, { hash: f.hash }))) + .then(() => newItems.map((f) => f.payload)) } delete() { @@ -66,8 +66,6 @@ class OperationsLog { _padOperation(node) { Object.assign(node.payload, { hash: node.hash }); - if(node.payload.key === null) - Object.assign(node.payload, { key: node.hash }); return node; } } diff --git a/src/stores/eventlog/EventIndex.js b/src/stores/eventlog/EventIndex.js index 446324f..55cbf1e 100644 --- a/src/stores/eventlog/EventIndex.js +++ b/src/stores/eventlog/EventIndex.js @@ -13,12 +13,12 @@ class EventIndex { let handled = []; updated.forEach((item) => { - if(handled.indexOf(item.key) === -1) { - handled.push(item.key); + if(handled.indexOf(item.hash) === -1) { + handled.push(item.hash); if(item.op === 'ADD') { - this._index[item.key] = item - } else if(item.op === 'DELETE') { - delete this._index[item.key]; + this._index[item.hash] = item + } else if(item.op === 'DEL') { + delete this._index[item.value]; } } }); diff --git a/src/stores/eventlog/EventStore.js b/src/stores/eventlog/EventStore.js index bebee31..8a4192b 100644 --- a/src/stores/eventlog/EventStore.js +++ b/src/stores/eventlog/EventStore.js @@ -20,7 +20,7 @@ class EventStore extends Store { } remove(hash) { - return this._addOperation('DELETE', hash); + return this._addOperation('DEL', null, hash); } iterator(options) { @@ -48,14 +48,15 @@ class EventStore extends Store { if(!opts) opts = {}; const amount = opts.limit ? (opts.limit > -1 ? opts.limit : this._index.get().length) : 1; // Return 1 if no limit is provided + const operations = this._index.get(); let result = []; if(opts.gt || opts.gte) { // Greater than case - result = this._read(this._index.get(), opts.gt ? opts.gt : opts.gte, amount, opts.gte ? true : false) + result = this._read(operations, opts.gt ? opts.gt : opts.gte, amount, opts.gte ? true : false) } else { // Lower than and lastN case, search latest first by reversing the sequence - result = this._read(this._index.get().reverse(), opts.lt ? opts.lt : opts.lte, amount, opts.lte || !opts.lt).reverse() + result = this._read(operations.reverse(), opts.lt ? opts.lt : opts.lte, amount, opts.lte || !opts.lt).reverse() } if(opts.reverse) result.reverse(); @@ -63,9 +64,9 @@ class EventStore extends Store { return result.toArray(); } - _read(ops, key, amount, inclusive) { + _read(ops, hash, amount, inclusive) { return Lazy(ops) - .skipWhile((f) => key && f.key !== key) + .skipWhile((f) => hash && f.hash !== hash) .drop(inclusive ? 0 : 1) .take(amount); } diff --git a/test/client.test.js b/test/client.test.js index b62cd95..60c6ac0 100644 --- a/test/client.test.js +++ b/test/client.test.js @@ -215,7 +215,7 @@ describe('Orbit Client', function() { await(db.add('hello3')); const items = db.iterator().collect(); assert.equal(items.length, 1); - assert.equal(items[0].key.startsWith('Qm'), true); + assert.equal(items[0].key, null); assert.equal(items[0].hash.startsWith('Qm'), true); assert.equal(items[0].value, 'hello3'); done(); @@ -250,10 +250,10 @@ describe('Orbit Client', function() { const iter = db.iterator(); const next = iter.next().value; assert.notEqual(next, null); - assert.notEqual(next.key, null); - assert.equal(next.key.startsWith('Qm'), true); + assert.equal(next.key, null); assert.equal(next.hash.startsWith('Qm'), true); assert.equal(next.value, 'hello4'); + assert.notEqual(next.meta.ts, null); done(); })); @@ -272,7 +272,7 @@ describe('Orbit Client', function() { const iter = db.iterator(); const first = iter.next().value; const second = iter.next().value; - assert.equal(first.key, items[items.length - 1]); + assert.equal(first.hash, items[items.length - 1]); assert.equal(second, null); assert.equal(first.value, 'hello4'); done(); @@ -306,7 +306,7 @@ describe('Orbit Client', function() { const iter = db.iterator({ limit: 1 }); const first = iter.next().value; const second = iter.next().value; - assert.equal(first.key, _.last(items)); + assert.equal(first.hash, _.last(items)); assert.equal(second, null); done(); })); @@ -315,7 +315,7 @@ describe('Orbit Client', function() { const iter = db.iterator({ limit: 1 }); const first = iter.next().value; const second = iter.next().value; - assert.equal(first.key, _.last(items)); + assert.equal(first.hash, _.last(items)); assert.equal(second, null); done(); })); @@ -326,9 +326,9 @@ describe('Orbit Client', function() { const second = iter.next().value; const third = iter.next().value; const fourth = iter.next().value; - assert.equal(first.key, items[items.length - 3]); - assert.equal(second.key, items[items.length - 2]); - assert.equal(third.key, items[items.length - 1]); + assert.equal(first.hash, items[items.length - 3]); + assert.equal(second.hash, items[items.length - 2]); + assert.equal(third.hash, items[items.length - 1]); assert.equal(fourth, null); done(); })); @@ -336,7 +336,7 @@ describe('Orbit Client', function() { it('returns all items', async((done) => { const messages = db.iterator({ limit: -1 }) .collect() - .map((e) => e.key); + .map((e) => e.hash); messages.reverse(); assert.equal(messages.length, items.length); @@ -347,7 +347,7 @@ describe('Orbit Client', function() { it('returns all items when limit is bigger than -1', async((done) => { const messages = db.iterator({ limit: -300 }) .collect() - .map((e) => e.key); + .map((e) => e.hash); assert.equal(messages.length, items.length); assert.equal(messages[0], items[0]); @@ -357,7 +357,7 @@ describe('Orbit Client', function() { it('returns all items when limit is bigger than number of items', async((done) => { const messages = db.iterator({ limit: 300 }) .collect() - .map((e) => e.key); + .map((e) => e.hash); assert.equal(messages.length, items.length); assert.equal(messages[0], items[0]); @@ -369,7 +369,7 @@ describe('Orbit Client', function() { it('returns all items reversed', async((done) => { const messages = db.iterator({ limit: -1, reverse: true }) .collect() - .map((e) => e.key); + .map((e) => e.hash); assert.equal(messages.length, items.length); assert.equal(messages[0], items[0]); @@ -382,7 +382,7 @@ describe('Orbit Client', function() { it('returns 1 item when gte is the head', async((done) => { const messages = db.iterator({ gte: _.last(items), limit: -1 }) .collect() - .map((e) => e.key); + .map((e) => e.hash); assert.equal(messages.length, 1); assert.equal(messages[0], _.last(items)); @@ -399,7 +399,7 @@ describe('Orbit Client', function() { const gte = items[items.length - 2]; const messages = db.iterator({ gte: gte, limit: -1 }) .collect() - .map((e) => e.key); + .map((e) => e.hash); assert.equal(messages.length, 2); assert.equal(messages[0], items[items.length - 2]); @@ -410,7 +410,7 @@ describe('Orbit Client', function() { it('returns all items when gte is the root item', async((done) => { const messages = db.iterator({ gte: items[0], limit: -1 }) .collect() - .map((e) => e.key); + .map((e) => e.hash); assert.equal(messages.length, items.length); assert.equal(messages[0], items[0]); @@ -421,7 +421,7 @@ describe('Orbit Client', function() { it('returns items when gt is the root item', async((done) => { const messages = db.iterator({ gt: items[0], limit: -1 }) .collect() - .map((e) => e.key); + .map((e) => e.hash); assert.equal(messages.length, itemCount - 1); assert.equal(messages[0], items[1]); @@ -432,13 +432,13 @@ describe('Orbit Client', function() { it('returns items when gt is defined', async((done) => { const messages = db.iterator({ limit: -1}) .collect() - .map((e) => e.key); + .map((e) => e.hash); const gt = messages[2]; const messages2 = db.iterator({ gt: gt, limit: 100 }) .collect() - .map((e) => e.key); + .map((e) => e.hash); assert.equal(messages2.length, 2); assert.equal(messages2[0], messages[messages.length - 2]); @@ -451,7 +451,7 @@ describe('Orbit Client', function() { it('returns one item after head when lt is the head', async((done) => { const messages = db.iterator({ lt: _.last(items) }) .collect() - .map((e) => e.key); + .map((e) => e.hash); assert.equal(messages.length, 1); assert.equal(messages[0], items[items.length - 2]); @@ -461,7 +461,7 @@ describe('Orbit Client', function() { it('returns all items when lt is head and limit is -1', async((done) => { const messages = db.iterator({ lt: _.last(items), limit: -1 }) .collect() - .map((e) => e.key); + .map((e) => e.hash); assert.equal(messages.length, items.length - 1); assert.equal(messages[0], items[0]); @@ -472,7 +472,7 @@ describe('Orbit Client', function() { it('returns 3 items when lt is head and limit is 3', async((done) => { const messages = db.iterator({ lt: _.last(items), limit: 3 }) .collect() - .map((e) => e.key); + .map((e) => e.hash); assert.equal(messages.length, 3); assert.equal(messages[0], items[items.length - 4]); @@ -489,7 +489,7 @@ describe('Orbit Client', function() { it('returns one item when lte is the root item', async((done) => { const messages = db.iterator({ lte: items[0] }) .collect() - .map((e) => e.key); + .map((e) => e.hash); assert.equal(messages.length, 1); assert.equal(messages[0], items[0]); @@ -499,7 +499,7 @@ describe('Orbit Client', function() { it('returns all items when lte is the head', async((done) => { const messages = db.iterator({ lte: _.last(items), limit: -1 }) .collect() - .map((e) => e.key); + .map((e) => e.hash); assert.equal(messages.length, itemCount); assert.equal(messages[0], items[0]); @@ -510,7 +510,7 @@ describe('Orbit Client', function() { it('returns 3 items when lte is the head', async((done) => { const messages = db.iterator({ lte: _.last(items), limit: 3 }) .collect() - .map((e) => e.key); + .map((e) => e.hash); assert.equal(messages.length, 3); assert.equal(messages[0], items[items.length - 3]);