mirror of https://codeberg.org/pzp/pzp-db.git
new API onRecordDeletedOrErased
This commit is contained in:
parent
f8a2006eb1
commit
7d5588ef4d
19
lib/index.js
19
lib/index.js
|
@ -197,6 +197,8 @@ function initDB(peer, config) {
|
|||
const encryptionFormats = new Map()
|
||||
/** @type {Obz<Rec>} */
|
||||
const onRecordAdded = Obz()
|
||||
/** @type {Obz<MsgID>} */
|
||||
const onRecordDeletedOrErased = Obz()
|
||||
|
||||
const codec = {
|
||||
/**
|
||||
|
@ -879,7 +881,7 @@ function initDB(peer, config) {
|
|||
* @param {{
|
||||
* keypair?: Keypair;
|
||||
* encryptionFormat?: string;
|
||||
* data: any;
|
||||
* data: Record<string, any>;
|
||||
* domain: string;
|
||||
* account: string;
|
||||
* tangles?: Array<MsgID>;
|
||||
|
@ -1036,7 +1038,12 @@ function initDB(peer, config) {
|
|||
}
|
||||
recs[seq] = null
|
||||
log.onDrain(() => {
|
||||
log.del(offset, cb)
|
||||
log.del(offset, (err) => {
|
||||
// prettier-ignore
|
||||
if (err) return cb(new Error('del() failed to write to disk', { cause: err }))
|
||||
queueMicrotask(() => onRecordDeletedOrErased.set(msgID))
|
||||
cb()
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -1126,7 +1133,12 @@ function initDB(peer, config) {
|
|||
}
|
||||
recs[seq] = rec
|
||||
log.onDrain(() => {
|
||||
log.overwrite(offset, rec, cb)
|
||||
log.overwrite(offset, rec, (err) => {
|
||||
// prettier-ignore
|
||||
if (err) return cb(new Error('erase() failed to write to disk', { cause: err }))
|
||||
queueMicrotask(() => onRecordDeletedOrErased.set(msgID))
|
||||
cb()
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -1180,6 +1192,7 @@ function initDB(peer, config) {
|
|||
getMinDepth: getMinGhostDepth,
|
||||
},
|
||||
onRecordAdded,
|
||||
onRecordDeletedOrErased,
|
||||
getTangle,
|
||||
msgs,
|
||||
records,
|
||||
|
|
|
@ -0,0 +1,56 @@
|
|||
const test = require('node:test')
|
||||
const assert = require('node:assert')
|
||||
const path = require('node:path')
|
||||
const os = require('node:os')
|
||||
const p = require('node:util').promisify
|
||||
const rimraf = require('rimraf')
|
||||
const Keypair = require('ppppp-keypair')
|
||||
const { createPeer } = require('./util')
|
||||
|
||||
const DIR = path.join(os.tmpdir(), 'ppppp-db-on-record-deleted-or-erased')
|
||||
rimraf.sync(DIR)
|
||||
|
||||
test('onRecordDeletedOrErased()', async (t) => {
|
||||
const peer = createPeer({
|
||||
keypair: Keypair.generate('ed25519', 'alice'),
|
||||
path: DIR,
|
||||
})
|
||||
|
||||
await peer.db.loaded()
|
||||
|
||||
const id = await p(peer.db.account.create)({
|
||||
subdomain: 'person',
|
||||
_nonce: 'alice',
|
||||
})
|
||||
|
||||
const msgIDs = []
|
||||
for (let i = 0; i < 5; i++) {
|
||||
const rec = await p(peer.db.feed.publish)({
|
||||
account: id,
|
||||
domain: 'post',
|
||||
data: { text: 'm' + i },
|
||||
})
|
||||
msgIDs.push(rec.id)
|
||||
}
|
||||
|
||||
const listened1 = []
|
||||
const remove1 = peer.db.onRecordDeletedOrErased((msgID) => {
|
||||
listened1.push(msgID)
|
||||
})
|
||||
assert.deepEqual(listened1, [], '(nothing)')
|
||||
await p(peer.db.erase)(msgIDs[2])
|
||||
assert.deepEqual(listened1, [msgIDs[2]], 'erased')
|
||||
remove1()
|
||||
|
||||
const listened2 = []
|
||||
const remove2 = peer.db.onRecordDeletedOrErased((msgID) => {
|
||||
listened2.push(msgID)
|
||||
})
|
||||
assert.deepEqual(listened2, [msgIDs[2]], 'erased')
|
||||
await p(peer.db.del)(msgIDs[1])
|
||||
assert.deepEqual(listened2, [msgIDs[2], msgIDs[1]], 'erased and deleted')
|
||||
remove2()
|
||||
|
||||
assert.deepEqual(listened1, [msgIDs[2]], 'erased') // still the same
|
||||
await p(peer.close)(true)
|
||||
})
|
Loading…
Reference in New Issue