Use welshman summarize instead of flotilla having its own copy

This commit is contained in:
Coracle-Bot 2026-09-09 22:31:04 +00:00
parent 9c5110d5c1
commit 9b0d8a5533
3 changed files with 9 additions and 49 deletions

View file

@ -83,7 +83,7 @@
"@vite-pwa/assets-generator": "^1.0.2",
"@vite-pwa/sveltekit": "^1.1.0",
"@welshman/app": "^0.10.3",
"@welshman/content": "^0.10.3",
"@welshman/content": "^0.10.5",
"@welshman/domain": "^0.10.3",
"@welshman/editor": "^0.10.3",
"@welshman/feeds": "^0.10.3",

Binary file not shown.

View file

@ -1,54 +1,15 @@
import {ParsedType, isImage, parse} from "@welshman/content"
import type {Parsed} from "@welshman/content"
import {ParsedType, parse, renderAsText, summarize} from "@welshman/content"
import type {Parsed, SummaryName} from "@welshman/content"
import type {TrustedEvent} from "@welshman/util"
import {profiles} from "@app/core"
// Welshman's text renderer resolves an entity or a link to the string it links to, so anything
// reading a message as text rather than rendering it as components gets a hundred characters of
// bech32 where a quote was. Everything that is not prose is named instead.
export const renderNode = (parsed: Parsed): string => {
switch (parsed.type) {
case ParsedType.Address:
return "another post"
case ParsedType.Cashu:
return "a cashu token"
case ParsedType.Code:
return parsed.value
case ParsedType.Command:
return parsed.raw
case ParsedType.Ellipsis:
return "…"
case ParsedType.Email:
return parsed.value
case ParsedType.Emoji:
return parsed.value.name
case ParsedType.Event:
return "another message"
case ParsedType.Invoice:
return "a lightning invoice"
case ParsedType.Link: {
const {host} = parsed.value.url
const summaryName: SummaryName = parsed =>
parsed.type === ParsedType.Profile ? profiles.get().display(parsed.value.pubkey).get() : undefined
return isImage(parsed) ? "an image" : `a link to ${host}`
}
case ParsedType.LinkGrid:
return "some images"
case ParsedType.Newline:
return parsed.value
case ParsedType.Profile:
return profiles.get().display(parsed.value.pubkey).get()
case ParsedType.Room:
return parsed.value.room
case ParsedType.Text:
return parsed.value
case ParsedType.Topic:
return parsed.value
}
}
const renderSummary = (parsed: Parsed[]) =>
renderAsText(summarize(parsed, summaryName)).toString().trim()
export const renderNodes = (parsed: Parsed[]) => parsed.map(renderNode).join("")
export const renderEventAsText = (event: TrustedEvent) => renderNodes(parse(event)).trim()
export const renderEventAsText = (event: TrustedEvent) => renderSummary(parse(event))
const splitLines = (parsed: Parsed[]) => {
const lines: Parsed[][] = [[]]
@ -71,7 +32,6 @@ const hasProse = (line: Parsed[]) =>
// nothing about the reply. The first line carrying words of its own is what the message is about.
export const renderEventAsSummary = (event: TrustedEvent) => {
const lines = splitLines(parse(event))
const line = lines.find(hasProse) || lines[0] || []
return renderNodes(line).trim()
return renderSummary(lines.find(hasProse) || lines[0] || [])
}