From b3e8d7a332ab462e47a372c1319faf8c8af78413 Mon Sep 17 00:00:00 2001 From: Jon Staab Date: Fri, 25 Apr 2025 17:17:18 -0700 Subject: [PATCH] Tweak feed display --- packages/dvm/package.json | 1 + packages/feeds/package.json | 1 + packages/feeds/src/display.ts | 32 ++++++++++++++++---------------- packages/feeds/src/utils.ts | 4 ++-- packages/lib/src/Tools.ts | 15 +++++++++++++++ packages/router/src/index.ts | 4 ++-- 6 files changed, 37 insertions(+), 20 deletions(-) diff --git a/packages/dvm/package.json b/packages/dvm/package.json index ce46d4f..c1e2446 100644 --- a/packages/dvm/package.json +++ b/packages/dvm/package.json @@ -7,6 +7,7 @@ "publishConfig": { "access": "public" }, + "type": "module", "main": "dist/dvm/src/index.js", "types": "dist/dvm/src/index.d.ts", "files": [ diff --git a/packages/feeds/package.json b/packages/feeds/package.json index dddc808..b47cfab 100644 --- a/packages/feeds/package.json +++ b/packages/feeds/package.json @@ -7,6 +7,7 @@ "publishConfig": { "access": "public" }, + "type": "module", "main": "dist/feeds/src/index.js", "types": "dist/feeds/src/index.d.ts", "files": [ diff --git a/packages/feeds/src/display.ts b/packages/feeds/src/display.ts index 4a54798..3906c09 100644 --- a/packages/feeds/src/display.ts +++ b/packages/feeds/src/display.ts @@ -31,7 +31,7 @@ export const displayAddressFeed = (feed: AddressFeed) => { export const displayAuthorFeed = (feed: AuthorFeed) => { const n = getFeedArgs(feed).length - return `events from ${n} replaceable {n === 1 ? 'person' : 'people'}` + return `from ${n} replaceable {n === 1 ? 'person' : 'people'}` } export const displayCreatedAtFeed = (feed: CreatedAtFeed) => { @@ -57,10 +57,10 @@ export const displayCreatedAtFeed = (feed: CreatedAtFeed) => { } if (descriptions.length === 0) { - return "events from any time" + return "from any time" } - return `events ${displayList(descriptions, "or")}` + return displayList(descriptions, "or") } export const displayDVMFeed = (feed: DVMFeed) => { @@ -83,29 +83,29 @@ export const displayDVMFeed = (feed: DVMFeed) => { descriptions.push(parts.join(" ")) } - return `events from DVM requests of ${displayList(descriptions)}` + return `from DVM requests of ${displayList(descriptions)}` } export const displayDifferenceFeed = (feed: DifferenceFeed) => { const [base, ...excluded] = getFeedArgs(feed) - return `all ${displayFeed(base)}, excluding ${displayList(excluded.map(displayFeed))}` + return `${displayFeed(base)}, excluding ${displayList(excluded.map(displayFeed))}` } -export const displayIDFeed = (feed: IDFeed) => `${getFeedArgs(feed).length} events` +export const displayIDFeed = (feed: IDFeed) => `matching ${getFeedArgs(feed).length} IDs` export const displayIntersectionFeed = (feed: IntersectionFeed) => - `events matching ${displayList(getFeedArgs(feed).map(displayFeed))}` + displayList(getFeedArgs(feed).map(displayFeed)) export const displayGlobalFeed = (feed: GlobalFeed) => "anything" export const displayKindFeed = (feed: KindFeed) => - `events of kind ${displayList(getFeedArgs(feed))}` + `of kind ${displayList(getFeedArgs(feed))}` export const displayListFeed = (feed: ListFeed) => { const addresses = uniq(getFeedArgs(feed).flatMap(({addresses}) => addresses)) - return `events from ${addresses.length} list${addresses.length === 1 ? "" : "s"}` + return `from ${addresses.length} list${addresses.length === 1 ? "" : "s"}` } export const displayLabelFeed = (feed: LabelFeed) => { @@ -134,7 +134,7 @@ export const displayLabelFeed = (feed: LabelFeed) => { descriptions.push(parts.join(" ")) } - return `events ${displayList(descriptions)}` + return displayList(descriptions) } export const displayWOTFeed = (feed: WOTFeed) => { @@ -142,25 +142,25 @@ export const displayWOTFeed = (feed: WOTFeed) => { min === max ? `WOT score of ${min}` : `WOT score between ${min} and ${max}`, ) - return `Events from authors with ${displayList(descriptions)}` + return `from authors with ${displayList(descriptions)}` } -export const displayRelayFeed = (feed: RelayFeed) => `events from ${displayList(getFeedArgs(feed))}` +export const displayRelayFeed = (feed: RelayFeed) => `from ${displayList(getFeedArgs(feed))}` export const displayScopeFeed = (feed: ScopeFeed) => - `events from ${displayList(getFeedArgs(feed).map(s => s.toLowerCase()))}` + `from ${displayList(getFeedArgs(feed).map(s => s.toLowerCase()))}` export const displaySearchFeed = (feed: SearchFeed) => - `events matching ${displayList(getFeedArgs(feed).map(term => `"${term}"`))}` + `matching ${displayList(getFeedArgs(feed).map(term => `"${term}"`))}` export const displayTagFeed = (feed: TagFeed) => { const [key, ...values] = getFeedArgs(feed) - return `events with ${key} tag matching ${displayList(values, "or")}` + return `with ${key} tag matching ${displayList(values, "or")}` } export const displayUnionFeed = (feed: UnionFeed) => - `all ${displayList(getFeedArgs(feed).map(displayFeed))}` + displayList(getFeedArgs(feed).map(displayFeed)) export const displayFeed = (feed: Feed): string => { switch (feed[0]) { diff --git a/packages/feeds/src/utils.ts b/packages/feeds/src/utils.ts index afcf2cc..02a6380 100644 --- a/packages/feeds/src/utils.ts +++ b/packages/feeds/src/utils.ts @@ -1,5 +1,5 @@ import {ensureNumber} from "@welshman/lib" -import type {Filter} from "@welshman/util" +import {Filter, unionFilters} from "@welshman/util" import {getTagValues} from "@welshman/util" import { FeedType, @@ -195,7 +195,7 @@ export const feedsFromFilter = ({since, until, ...filter}: Filter) => { export const feedFromFilter = (filter: Filter) => makeIntersectionFeed(...feedsFromFilter(filter)) export const feedFromFilters = (filters: Filter[]) => - makeUnionFeed(...filters.map(filter => feedFromFilter(filter))) + makeUnionFeed(...unionFilters(filters).map(filter => feedFromFilter(filter))) export const walkFeed = (feed: Feed, visit: (feed: Feed) => void) => { visit(feed) diff --git a/packages/lib/src/Tools.ts b/packages/lib/src/Tools.ts index f258ff2..f9bfd78 100644 --- a/packages/lib/src/Tools.ts +++ b/packages/lib/src/Tools.ts @@ -628,6 +628,21 @@ export const groupBy = (f: (x: T) => K, xs: T[]) => { return r } +/** + * Counts array elements by key function + * @param f - Function to generate group key + * @param xs - Array to count entries + * @returns Map of counts + */ +export const countBy = (f: (x: T) => K, xs: T[]) => { + const r = new Map() + for (const [k, items] of groupBy(f, xs)) { + r.set(k, items.length) + } + + return r +} + /** * Creates map from array using key function * @param f - Function to generate key diff --git a/packages/router/src/index.ts b/packages/router/src/index.ts index 614501a..8297216 100644 --- a/packages/router/src/index.ts +++ b/packages/router/src/index.ts @@ -97,7 +97,7 @@ export type Selection = { relays: string[] } -const makeSelection = (relays: string[], weight = 1): Selection => ({ +export const makeSelection = (relays: string[], weight = 1): Selection => ({ relays: relays.filter(isRelayUrl).map(normalizeRelayUrl), weight, }) @@ -322,7 +322,7 @@ export class RouterScenario { } const scoreRelay = (relay: string) => { - const quality = this.router.options.getRelayQuality?.(relay) + const quality = this.router.options.getRelayQuality?.(relay) || 1 const weight = relayWeights.get(relay)! // Log the weight, since it's a straight count which ends up over-weighting hubs.