UNPKG

rsshub

Version:
77 lines (75 loc) 3.07 kB
import "./esm-shims-CzJ_djXG.mjs"; import "./config-C37vj7VH.mjs"; import "./dist-BInvbO1W.mjs"; import "./logger-Czu8UMNd.mjs"; import { t as ofetch_default } from "./ofetch-BIyrKU3Y.mjs"; import { t as parseDate } from "./parse-date-BrP7mxXf.mjs"; import markdownit from "markdown-it"; //#region lib/routes/jetbrains/comments.ts const md = markdownit({ html: true }); const rootUrl = "https://youtrack.jetbrains.com"; const apiUrl = `${rootUrl}/api`; const ACTIVITY_CATEGORIES = "IssueCreatedCategory,CommentsCategory"; const ACTIVITY_FIELDS = "activities(author(name),category(id),id,issue(description),timestamp,added(author(name),created,id,text,usesMarkdown))"; const ISSUE_FIELDS = "summary"; const route = { path: "/youtrack/comments/:issueId", categories: ["programming"], example: "/jetbrains/youtrack/comments/IJPL-174543", parameters: { issueId: "Issue ID (e.g., IJPL-174543)" }, radar: [{ source: ["youtrack.jetbrains.com/issue/:issueId"], target: "/youtrack/comments/:issueId" }], name: "YouTrack Issue Comments", maintainers: ["NekoAria"], handler }; function processIssueCreated(activity, issueId) { const description = md.render(activity.issue.description); return { title: `${activity.author.name} created issue ${issueId}`, author: activity.author.name, pubDate: parseDate(activity.timestamp), link: `${rootUrl}/issue/${issueId}#focus=Comments-${activity.id}`, description, guid: `${issueId}-comment-${activity.id}` }; } function processComment(activity, issueId) { const comment = activity.added[0]; const author = comment.author || activity.author; const description = comment.usesMarkdown ? md.render(comment.text) : comment.text; return { title: `${author.name} commented on ${issueId}`, author: author.name, pubDate: parseDate(comment.created || activity.timestamp), link: `${rootUrl}/issue/${issueId}#focus=Comments-${activity.id}`, description, guid: `${issueId}-comment-${activity.id}` }; } function processActivity(activity, issueId) { switch (activity.category.id) { case "IssueCreatedCategory": return processIssueCreated(activity, issueId); case "CommentsCategory": return processComment(activity, issueId); default: return null; } } async function handler(ctx) { const issueId = ctx.req.param("issueId"); const limit = ctx.req.query("limit") ? Number.parseInt(ctx.req.query("limit")) : 100; const issueInfo = await ofetch_default(`${apiUrl}/issues/${issueId}`, { query: { fields: ISSUE_FIELDS } }); const items = (await ofetch_default(`${apiUrl}/issues/${issueId}/activitiesPage`, { query: { categories: ACTIVITY_CATEGORIES, fields: ACTIVITY_FIELDS } })).activities.map((activity) => processActivity(activity, issueId)).filter((item) => item !== null).toSorted((a, b) => new Date(b.pubDate).getTime() - new Date(a.pubDate).getTime()).slice(0, limit); return { title: `YouTrack ${issueId} - ${issueInfo.summary}`, link: `${rootUrl}/issue/${issueId}`, description: `Comments and activities for YouTrack issue ${issueId}`, item: items }; } //#endregion export { route };