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[]); }