UNPKG

rsshub

Version:
102 lines (100 loc) 3.6 kB
import { n as init_esm_shims, t as __dirname } from "./esm-shims-CzJ_djXG.mjs"; import "./config-C37vj7VH.mjs"; import "./dist-BInvbO1W.mjs"; import "./logger-Czu8UMNd.mjs"; import "./ofetch-BIyrKU3Y.mjs"; import { t as parseDate } from "./parse-date-BrP7mxXf.mjs"; import { t as md5 } from "./md5-C8GRvctM.mjs"; import "./helpers-DxBp0Pty.mjs"; import { t as art } from "./render-BQo6B4tL.mjs"; import { t as got_default } from "./got-KxxWdaxq.mjs"; import path from "node:path"; import { load } from "cheerio"; //#region lib/routes/github/pulse.ts init_esm_shims(); const route = { path: "/pulse/:user/:repo/:period?", categories: ["programming"], example: "/github/pulse/DIYgod/RSSHub", parameters: { user: "User name", repo: "Repo name", period: "Time frame, selected from a repository's Pulse/Insights page. Possible values are: `daily`, `halfweekly`, `weekly`, or `monthly`. Default: `weekly`. If your RSS client supports it, consider aligning the polling frequency of the feed to the period." }, features: { requireConfig: false, requirePuppeteer: false, antiCrawler: false, supportBT: false, supportPodcast: false, supportScihub: false }, radar: [{ source: ["github.com/:user/:repo/pulse", "github.com/:user/:repo/pulse/:period"] }], name: "Repo Pulse", maintainers: ["jameschensmith"], handler }; async function handler(ctx) { const { user, repo, period } = ctx.req.param(); const periods = [ "daily", "halfweekly", "weekly", "monthly" ]; const pulsePeriod = periods.includes(period) ? period : periods[2]; const link = `https://github.com/${user}/${repo}/pulse/${pulsePeriod}`; const { data: pulsePage } = await got_default(link); const $ = load(pulsePage); const $mainSections = $("main .Layout-main").children(); const [periodFrom, periodTo] = $mainSections.eq(0).find("h2").text().split("–"); const overviewItems = $mainSections.eq(1).find("ul ul li").toArray().map((el) => $(el).text()); const $commitActivity = $mainSections.eq(2); let commitActivity; const $contributionData = $commitActivity.find(".js-pulse-contribution-data"); if ($contributionData.length) commitActivity = (await got_default(`https://github.com${$contributionData.attr("data-pulse-diffstat-summary-url")}`)).data; else commitActivity = $commitActivity.text(); const $githubActivity = $mainSections.eq(3); let githubActivity; const $sections = $githubActivity.find("h3"); if ($sections.length) githubActivity = $sections.toArray().map((section) => { const $section = $(section); const $sectionSiblings = $section.nextUntil("h3"); const $paragraph = $section.nextUntil("ul"); const $list = $sectionSiblings.last(); return { heading: $section.text(), paragraph: $paragraph.length > 0 ? $paragraph.text() : void 0, items: $list.children().toArray().map((item) => { const $item = $(item); const $link = $item.find("a"); const $details = $item.find("p"); const $relativeTime = $details.find("relative-time"); $relativeTime.replaceWith($relativeTime.attr("datetime")); return { link: { text: $link.text(), url: $link.attr("href") }, details: $details.text() }; }) }; }); return { title: `${user}/${repo} ${pulsePeriod} Pulse`, link, item: [{ guid: md5(`${user}${repo}${period}${periodFrom}${periodTo}`), title: `${periodFrom} - ${periodTo}`, description: art(path.join(__dirname, "templates/pulse-description-eccd13db.art"), { overviewItems, commitActivity, githubActivity }), pubDate: parseDate(periodTo) }] }; } //#endregion export { route };