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) {
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 relayMerged = filters.reduce((acc, v) => {
const relay = v.relay ?? "";
// delete relay from filter
delete v.relay;
const existing = acc.get(relay);
if (existing) {
existing.push(v);
} else {
acc.set(relay, [v]);
}
return acc;
}, new Map<string, Array<FlatReqFilter>>());
const ret = [];
for (const [k, v] of relayMerged.entries()) {
const filters = this.#system.optimizer.flatMerge(v);
ret.push({
const compressed = this.#system.optimizer.compress(filters).reduce(
(acc, v) => {
for (const r of v.relays ?? [""]) {
acc[r] ??= [];
acc[r].push(v);
}
return acc;
},
{} as Record<string, Array<ReqFilter>>,
);
const qSend = Object.entries(compressed).map(([k, v]) => {
return {
relay: k,
filters,
} as BuiltRawReqFilter);
}
return ret;
filters: v,
syncFrom,
} as BuiltRawReqFilter;
});
await Promise.all(qSend.map(a => this.#sendToRelays(q, a)));
}
async #sendToRelays(q: Query, qSend: BuiltRawReqFilter) {

View File

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