refactor: use optimizer compress
This commit is contained in:
parent
b26eb5007f
commit
b38b6b27ef
@ -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) {
|
||||
|
@ -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());
|
||||
|
Loading…
x
Reference in New Issue
Block a user