applesauce-core
Advanced tools
Comparing version 0.0.0-next-20250213173056 to 0.0.0-next-20250213191824
@@ -1,2 +0,2 @@ | ||
import { BehaviorSubject, Observable } from "rxjs"; | ||
import { Observable } from "rxjs"; | ||
import { Filter, NostrEvent } from "nostr-tools"; | ||
@@ -23,3 +23,3 @@ import { EventStore } from "../event-store/event-store.js"; | ||
queries: LRU<Query<any>>; | ||
observables: WeakMap<Query<any>, Observable<any> | BehaviorSubject<any>>; | ||
observables: WeakMap<Query<any>, Observable<any>>; | ||
/** Creates a cached query */ | ||
@@ -29,3 +29,3 @@ createQuery<T extends unknown, Args extends Array<any>>(queryConstructor: (...args: Args) => { | ||
run: (events: EventStore, store: QueryStore) => Observable<T>; | ||
}, ...args: Args): Observable<T>; | ||
}, ...args: Args): Observable<T | undefined>; | ||
/** Creates a query and waits for the next value */ | ||
@@ -39,3 +39,3 @@ executeQuery<T extends unknown, Args extends Array<any>>(queryConstructor: (...args: Args) => { | ||
/** Creates a MultipleEventsQuery */ | ||
events(ids: string[]): Observable<Record<string, import("nostr-tools").Event>>; | ||
events(ids: string[]): Observable<Record<string, import("nostr-tools").Event> | undefined>; | ||
/** Creates a ReplaceableQuery */ | ||
@@ -48,9 +48,9 @@ replaceable(kind: number, pubkey: string, d?: string): Observable<import("nostr-tools").Event | undefined>; | ||
identifier?: string; | ||
}[]): Observable<Record<string, import("nostr-tools").Event>>; | ||
}[]): Observable<Record<string, import("nostr-tools").Event> | undefined>; | ||
/** Creates a TimelineQuery */ | ||
timeline(filters: Filter | Filter[], keepOldVersions?: boolean): Observable<import("nostr-tools").Event[]>; | ||
timeline(filters: Filter | Filter[], keepOldVersions?: boolean): Observable<import("nostr-tools").Event[] | undefined>; | ||
/** Creates a ProfileQuery */ | ||
profile(pubkey: string): Observable<import("../helpers/profile.js").ProfileContent | undefined>; | ||
/** Creates a ReactionsQuery */ | ||
reactions(event: NostrEvent): Observable<import("nostr-tools").Event[]>; | ||
reactions(event: NostrEvent): Observable<import("nostr-tools").Event[] | undefined>; | ||
/** Creates a MailboxesQuery */ | ||
@@ -62,4 +62,4 @@ mailboxes(pubkey: string): Observable<{ | ||
/** Creates a ThreadQuery */ | ||
thread(root: string | EventPointer | AddressPointer): Observable<Queries.Thread>; | ||
thread(root: string | EventPointer | AddressPointer): Observable<Queries.Thread | undefined>; | ||
} | ||
export { Queries }; |
@@ -1,2 +0,2 @@ | ||
import { filter, ReplaySubject, share, timer } from "rxjs"; | ||
import { filter, ReplaySubject, share, startWith, timer } from "rxjs"; | ||
import { LRU } from "../helpers/lru.js"; | ||
@@ -24,10 +24,11 @@ import * as Queries from "../queries/index.js"; | ||
} | ||
if (!this.observables.has(query)) { | ||
let observable = this.observables.get(query); | ||
if (!observable) { | ||
const observable = query | ||
.run(this.store, this) | ||
.pipe(share({ connector: () => new ReplaySubject(1), resetOnComplete: () => timer(60_000) })); | ||
.pipe(startWith(undefined), share({ connector: () => new ReplaySubject(1), resetOnComplete: () => timer(60_000) })); | ||
this.observables.set(query, observable); | ||
return observable; | ||
} | ||
return this.observables.get(query); | ||
return observable; | ||
} | ||
@@ -34,0 +35,0 @@ /** Creates a query and waits for the next value */ |
{ | ||
"name": "applesauce-core", | ||
"version": "0.0.0-next-20250213173056", | ||
"version": "0.0.0-next-20250213191824", | ||
"description": "", | ||
@@ -5,0 +5,0 @@ "type": "module", |
196746
4751
126
126