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) {
|
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) {
|
||||||
|
@ -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());
|
||||||
|
Loading…
x
Reference in New Issue
Block a user