18 lines
843 B
JavaScript
18 lines
843 B
JavaScript
import promiseLimit from "promise-limit";
|
|
import { toArray, unique } from "../../../prelude/array.js";
|
|
import { isMention } from "../type.js";
|
|
import Resolver from "../resolver.js";
|
|
import { resolvePerson } from "./person.js";
|
|
import { RecursionLimiter } from "../../../models/repositories/user-profile.js";
|
|
export async function extractApMentions(tags, limiter = new RecursionLimiter()) {
|
|
const hrefs = unique(extractApMentionObjects(tags).map((x)=>x.href));
|
|
const resolver = new Resolver();
|
|
const limit = promiseLimit(2);
|
|
const mentionedUsers = (await Promise.all(hrefs.map((x)=>limit(()=>resolvePerson(x, resolver, limiter).catch(()=>null))))).filter((x)=>x != null);
|
|
return mentionedUsers;
|
|
}
|
|
export function extractApMentionObjects(tags) {
|
|
if (tags == null) return [];
|
|
return toArray(tags).filter(isMention);
|
|
}
|