From caccc43f03db54a39f35490e6127960f315a599e Mon Sep 17 00:00:00 2001 From: Jon Staab Date: Mon, 9 Dec 2024 14:03:51 -0800 Subject: [PATCH] Add fromRepositoryAndTracker storage adapter --- packages/app/src/storage.ts | 46 +++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/packages/app/src/storage.ts b/packages/app/src/storage.ts index b531dae..204ef40 100644 --- a/packages/app/src/storage.ts +++ b/packages/app/src/storage.ts @@ -198,5 +198,51 @@ export const storageAdapters = { 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>() + + for (const {event, relays} of items) { + events.push(event) + relaysById.set(event.id, new Set(relays)) + } + + repository.load(events) + tracker.load(relaysById) + }, + }), + }) }