iceshrimp/packages/client/src/scripts/extract-url-from-mfm.ts

27 lines
772 B
TypeScript
Raw Normal View History

2023-01-13 13:40:33 +09:00
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 ]
2023-01-13 13:40:33 +09:00
const removeHash = (x: string) => x.replace(/#[^#]*$/, "");
2023-01-13 13:40:33 +09:00
export function extractUrlFromMfm(
nodes: mfm.MfmNode[],
respectSilentFlag = true,
): string[] {
const urlNodes = mfm.extract(nodes, (node) => {
2023-01-13 13:40:33 +09:00
return (
node.type === "url" ||
2023-01-17 04:19:20 +09:00
(node.type === "link" && !(respectSilentFlag && node.props.silent))
2023-01-13 13:40:33 +09:00
);
});
2023-01-13 13:40:33 +09:00
const urls: string[] = unique(urlNodes.map((x) => x.props.url));
return urls.reduce((array, url) => {
const urlWithoutHash = removeHash(url);
2023-01-13 13:40:33 +09:00
if (!array.map((x) => removeHash(x)).includes(urlWithoutHash))
array.push(url);
return array;
}, [] as string[]);
}