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

30 lines
785 B
TypeScript
Raw Normal View History

2023-07-20 04:17:05 +09:00
import { unique } from "@/scripts/array";
2023-11-27 18:17:53 +09:00
import * as mfm from "mfm-js";
2023-07-20 04:17:05 +09:00
// 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));
2023-12-29 05:53:16 +09:00
return urls.reduce(
(array, url) => {
const urlWithoutHash = removeHash(url);
if (!array.map((x) => removeHash(x)).includes(urlWithoutHash))
array.push(url);
return array;
},
[] as string[],
);
2023-07-20 04:17:05 +09:00
}