feat: 💨

This commit is contained in:
codytseng
2025-08-20 21:35:57 +08:00
parent f8735348b5
commit 481d6a1447

View File

@@ -445,14 +445,7 @@ class ClientService extends EventTarget {
const subCloser = this.subscribe(relays, since ? { ...filter, since } : filter, { const subCloser = this.subscribe(relays, since ? { ...filter, since } : filter, {
startLogin, startLogin,
onevent: (evt: NEvent) => { onevent: (evt: NEvent) => {
that.eventDataLoader.prime(evt.id, Promise.resolve(evt)) that.addEventToCache(evt)
if (isReplaceableEvent(evt.kind)) {
const coordinate = getReplaceableCoordinateFromEvent(evt)
const cachedEvent = that.replaceableEventCacheMap.get(coordinate)
if (!cachedEvent || compareEvents(evt, cachedEvent) > 0) {
that.replaceableEventCacheMap.set(coordinate, evt)
}
}
// not eosed yet, push to events // not eosed yet, push to events
if (!eosedAt) { if (!eosedAt) {
return events.push(evt) return events.push(evt)
@@ -560,7 +553,7 @@ class ClientService extends EventTarget {
limit = limit - cachedEvents.length limit = limit - cachedEvents.length
let events = await this.query(urls, { ...filter, until, limit }) let events = await this.query(urls, { ...filter, until, limit })
events.forEach((evt) => { events.forEach((evt) => {
this.eventDataLoader.prime(evt.id, Promise.resolve(evt)) this.addEventToCache(evt)
}) })
events = events.sort((a, b) => b.created_at - a.created_at).slice(0, limit) events = events.sort((a, b) => b.created_at - a.created_at).slice(0, limit)
@@ -641,7 +634,7 @@ class ClientService extends EventTarget {
) )
if (cache) { if (cache) {
events.forEach((evt) => { events.forEach((evt) => {
this.eventDataLoader.prime(evt.id, Promise.resolve(evt)) this.addEventToCache(evt)
}) })
} }
return events return events
@@ -680,6 +673,13 @@ class ClientService extends EventTarget {
addEventToCache(event: NEvent) { addEventToCache(event: NEvent) {
this.eventDataLoader.prime(event.id, Promise.resolve(event)) this.eventDataLoader.prime(event.id, Promise.resolve(event))
if (isReplaceableEvent(event.kind)) {
const coordinate = getReplaceableCoordinateFromEvent(event)
const cachedEvent = this.replaceableEventCacheMap.get(coordinate)
if (!cachedEvent || compareEvents(event, cachedEvent) > 0) {
this.replaceableEventCacheMap.set(coordinate, event)
}
}
} }
private async fetchEventById(relayUrls: string[], id: string): Promise<NEvent | undefined> { private async fetchEventById(relayUrls: string[], id: string): Promise<NEvent | undefined> {
@@ -737,7 +737,7 @@ class ClientService extends EventTarget {
} }
if (event && event.id !== id) { if (event && event.id !== id) {
this.eventDataLoader.prime(event.id, Promise.resolve(event)) this.addEventToCache(event)
} }
return event return event