rudeshark.net/packages/client/src/scripts/extract-url-from-mfm.ts
ThatOneCalculator abf47e54f3
clean up w/ rome
2023-01-16 11:19:20 -08:00

27 lines
772 B
TypeScript

import * as mfm from "mfm-js";
import { unique } from "@/scripts/array";
// unique without hash
// [ http://a/#1, http://a/#2, http://b/#3 ] => [ http://a/#1, http://b/#3 ]
const removeHash = (x: string) => x.replace(/#[^#]*$/, "");
export function extractUrlFromMfm(
nodes: mfm.MfmNode[],
respectSilentFlag = true,
): string[] {
const urlNodes = mfm.extract(nodes, (node) => {
return (
node.type === "url" ||
(node.type === "link" && !(respectSilentFlag && node.props.silent))
);
});
const urls: string[] = unique(urlNodes.map((x) => x.props.url));
return urls.reduce((array, url) => {
const urlWithoutHash = removeHash(url);
if (!array.map((x) => removeHash(x)).includes(urlWithoutHash))
array.push(url);
return array;
}, [] as string[]);
}