Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions builder/example/helpers.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ exports.mapStruct = (record, context) => [
{ name: record.name, age: record.age }
]

exports.triggerCollection = async (db, key, record, context) => {
exports.triggerCollection = async (db, key, isDelete, context) => {
const info = (await db.get('@example/collection1-info')) || { count: 0 }
const existing = await db.get('@example/collection1', key)
if (existing && record) return
await db.insert('@example/collection1-info', { count: record ? info.count + 1 : info.count - 1 })
if (existing && !isDelete) return
await db.insert('@example/collection1-info', { count: isDelete ? info.count - 1 : info.count + 1 })
}
8 changes: 4 additions & 4 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -457,8 +457,8 @@ class HyperDB {
}

// TODO: needs to wait for pending inserts/deletes and then lock all future ones whilst it runs
_runTrigger (collection, key, doc) {
return collection.trigger(this, key, doc, this.context)
_runTrigger (collection, key, isDelete) {
return collection.trigger(this, key, isDelete, this.context)
}

async delete (collectionName, doc) {
Expand All @@ -478,7 +478,7 @@ class HyperDB {

try {
prevValue = await this.engineSnapshot.get(key)
if (collection.trigger !== null) await this._runTrigger(collection, doc, null)
if (collection.trigger !== null) await this._runTrigger(collection, doc, true)

if (prevValue === null) {
this.updates.delete(key)
Expand Down Expand Up @@ -522,7 +522,7 @@ class HyperDB {

try {
prevValue = await this.engineSnapshot.get(key)
if (collection.trigger !== null) await this._runTrigger(collection, doc, doc)
if (collection.trigger !== null) await this._runTrigger(collection, doc, false)

if (prevValue !== null && b4a.equals(value, prevValue)) {
this.updates.delete(key)
Expand Down
10 changes: 4 additions & 6 deletions test/helpers/helpers.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,13 @@ exports.mapNameToLowerCase = (record, context) => {
return name ? [name] : []
}

exports.triggerCountMembers = async (db, key, record) => {
exports.triggerCountMembers = async (db, key, isDelete, context) => {
const digest = (await db.get('@example/digest')) || { count: 0 }

const prev = !!(await db.get('@example/members', key))
const next = !!record
const existing = await db.get('@example/members', key)
if (existing && !isDelete) return

if (prev === next) return

digest.count += next ? 1 : -1
digest.count += isDelete ? -1 : 1

await db.insert('@example/digest', digest)
}