Add fromRepositoryAndTracker storage adapter
This commit is contained in:
@@ -198,5 +198,51 @@ export const storageAdapters = {
|
|||||||
set: (events: TrustedEvent[]) => repository.load(events),
|
set: (events: TrustedEvent[]) => repository.load(events),
|
||||||
}),
|
}),
|
||||||
}),
|
}),
|
||||||
|
fromRepositoryAndTracker: (
|
||||||
|
repository: Repository,
|
||||||
|
tracker: Tracker,
|
||||||
|
options: StorageAdapterOptions = {}
|
||||||
|
) => ({
|
||||||
|
options,
|
||||||
|
keyPath: 'id',
|
||||||
|
store: custom(setter => {
|
||||||
|
let onUpdate = () => {
|
||||||
|
const events = migrate(repository.dump(), options)
|
||||||
|
|
||||||
|
setter(
|
||||||
|
events.map(event => {
|
||||||
|
const relays = Array.from(tracker.getRelays(event.id))
|
||||||
|
|
||||||
|
return {id: event.id, event, relays}
|
||||||
|
})
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (options.throttle) {
|
||||||
|
onUpdate = throttle(options.throttle, onUpdate)
|
||||||
|
}
|
||||||
|
|
||||||
|
onUpdate()
|
||||||
|
tracker.on('update', onUpdate)
|
||||||
|
repository.on('update', onUpdate)
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
tracker.off('update', onUpdate)
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
set: (items: {event: TrustedEvent, relays: string[]}[]) => {
|
||||||
|
const events: TrustedEvent[] = []
|
||||||
|
const relaysById = new Map<string, Set<string>>()
|
||||||
|
|
||||||
|
for (const {event, relays} of items) {
|
||||||
|
events.push(event)
|
||||||
|
relaysById.set(event.id, new Set(relays))
|
||||||
|
}
|
||||||
|
|
||||||
|
repository.load(events)
|
||||||
|
tracker.load(relaysById)
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user