Compile intersections

This commit is contained in:
Jon Staab
2024-04-29 12:51:47 -07:00
parent b88c074d86
commit 00b142243b
8 changed files with 71 additions and 12 deletions
+34 -2
View File
@@ -76,7 +76,7 @@ export const calculateFilterGroup = ({since, until, limit, search, ...filter}: F
return group.sort().join("-")
}
export const mergeFilters = (filters: Filter[]) => {
export const unionFilters = (filters: Filter[]) => {
const result = []
for (const group of Object.values(groupBy(calculateFilterGroup, filters))) {
@@ -96,6 +96,38 @@ export const mergeFilters = (filters: Filter[]) => {
return result
}
export const intersectFilters = (groups: Filter[][]) => {
let result = groups[0]
for (const filters of groups.slice(1)) {
result = result.flatMap(f1 => {
return filters.map(f2 => {
const f3: Filter = {}
for (const k of uniq([...Object.keys(f1), ...Object.keys(f2)]) as (keyof Filter)[]) {
if (k === 'since' || k === 'limit') {
f3[k] = Math.max(f1[k] || 0, f2[k] || 0)
} else if (k === 'until') {
f3[k] = Math.min(f1[k] || f2[k] || 0, f2[k] || f1[k] || 0)
} else if (k === 'search') {
if (f1[k] && f2[k] && f1[k] !== f2[k]) {
f3[k] = [f1[k], f2[k]].join(' ')
} else {
f3[k] = f1[k] || f2[k]
}
} else {
f3[k] = uniq([...(f1[k] || []), ...(f2[k] || [])]) as any[]
}
}
return f3
})
})
}
return unionFilters(result)
}
export const getIdFilters = (idsOrAddresses: Iterable<string>) => {
const ids = []
const aFilters = []
@@ -114,7 +146,7 @@ export const getIdFilters = (idsOrAddresses: Iterable<string>) => {
}
}
const filters = mergeFilters(aFilters)
const filters = unionFilters(aFilters)
if (ids.length > 0) {
filters.push({ids})
+4
View File
@@ -1,5 +1,9 @@
import {normalizeUrl, stripProtocol} from '@welshman/lib'
export const LOCAL_RELAY_URL = "local://welshman.relay"
export const BOGUS_RELAY_URL = "bogus://welshman.relay"
export const isShareableRelayUrl = (url: string) =>
Boolean(
typeof url === 'string' &&
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@welshman/util",
"version": "0.0.2",
"version": "0.0.3",
"author": "hodlbod",
"license": "MIT",
"description": "A collection of nostr-related utilities.",