refactor: use optimizer compress

This commit is contained in:
kieran 2024-09-18 13:39:26 +01:00
parent b26eb5007f
commit b38b6b27ef
No known key found for this signature in database
GPG Key ID: DE71CEB3925BE941
2 changed files with 21 additions and 28 deletions

View File

@ -133,35 +133,25 @@ export class QueryManager extends EventEmitter<QueryManagerEvents> {
if (this.#system.requestRouter) { if (this.#system.requestRouter) {
filters = this.#system.requestRouter.forAllRequest(filters); filters = this.#system.requestRouter.forAllRequest(filters);
} }
const expanded = filters.flatMap(a => this.#system.optimizer.expandFilter(a));
const qSend = this.#groupFlatByRelay(expanded);
qSend.forEach(a => (a.syncFrom = syncFrom));
await Promise.all(qSend.map(a => this.#sendToRelays(q, a)));
}
#groupFlatByRelay(filters: Array<FlatReqFilter>) { const compressed = this.#system.optimizer.compress(filters).reduce(
const relayMerged = filters.reduce((acc, v) => { (acc, v) => {
const relay = v.relay ?? ""; for (const r of v.relays ?? [""]) {
// delete relay from filter acc[r] ??= [];
delete v.relay; acc[r].push(v);
const existing = acc.get(relay); }
if (existing) { return acc;
existing.push(v); },
} else { {} as Record<string, Array<ReqFilter>>,
acc.set(relay, [v]); );
} const qSend = Object.entries(compressed).map(([k, v]) => {
return acc; return {
}, new Map<string, Array<FlatReqFilter>>());
const ret = [];
for (const [k, v] of relayMerged.entries()) {
const filters = this.#system.optimizer.flatMerge(v);
ret.push({
relay: k, relay: k,
filters, filters: v,
} as BuiltRawReqFilter); syncFrom,
} } as BuiltRawReqFilter;
return ret; });
await Promise.all(qSend.map(a => this.#sendToRelays(q, a)));
} }
async #sendToRelays(q: Query, qSend: BuiltRawReqFilter) { async #sendToRelays(q: Query, qSend: BuiltRawReqFilter) {

View File

@ -424,7 +424,10 @@ export class Query extends EventEmitter<QueryEvents> {
: this.#setupNewTrace(c, q); : this.#setupNewTrace(c, q);
//always replace filters array //always replace filters array
qt.filters = [...q.filters]; qt.filters = q.filters.map(a => {
delete a["relays"];
return a;
});
if (q.syncFrom !== undefined) { if (q.syncFrom !== undefined) {
c.request(["SYNC", qt.id, q.syncFrom, ...qt.filters], () => qt.sentToRelay()); c.request(["SYNC", qt.id, q.syncFrom, ...qt.filters], () => qt.sentToRelay());