rsshub
Version:
Make RSS Great Again!
68 lines (67 loc) • 2.16 kB
JavaScript
import { t as rofetch } from "./ofetch-C3ts-Hud.mjs";
import { t as parseDate } from "./parse-date-Cr0wQjV_.mjs";
import { t as cache_default } from "./cache-BkqOokyU.mjs";
import { gunzip } from "node:zlib";
import { load } from "cheerio";
import markdownit from "markdown-it";
import { promisify } from "node:util";
//#region lib/routes/typeless/changelog.ts
const gunzip$1 = promisify(gunzip);
const md = markdownit({
breaks: true,
html: true
});
const route = {
path: "/changelog",
example: "/typeless/changelog",
categories: ["program-update"],
radar: [{ source: [
"www.typeless.com/help/release-notes/*",
"www.typeless.com/help/release-notes",
"www.typeless.com"
] }],
name: "Changelog",
maintainers: ["TonyRL"],
handler,
url: "www.typeless.com/help/release-notes"
};
async function handler() {
const baseUrl = "https://www.typeless.com";
const items = (await Promise.all([
"macos",
"windows",
"ios",
"android"
].map(async (platform) => {
const $ = load(await rofetch(`${baseUrl}/help/release-notes/${platform}`));
const pageProps = JSON.parse($("#__NEXT_DATA__").text()).props.pageProps;
return cache_default.tryGet(`typeless:changelog:${platform}:${pageProps.updatedAt}`, async () => {
const compressedData = pageProps.compressedData;
const decodedString = Buffer.from(compressedData, "base64");
const decompressed = await gunzip$1(decodedString);
const changelogData = JSON.parse(decompressed.toString("utf-8"));
return {
appPlatform: pageProps.platform,
decompressedData: Object.values(changelogData)
};
});
}))).flatMap((platform) => platform.decompressedData.map((item) => {
const features = item.features[0];
return {
title: features.title,
description: md.render(features.content),
pubDate: parseDate(item.date),
link: features.learnMore ? `${baseUrl}${features.learnMore}` : void 0,
category: [platform.appPlatform],
guid: `typeless:${platform.appPlatform}:${item.version}`
};
}));
return {
title: "Typeless app release notes",
link: `${baseUrl}/help/release-notes`,
image: `${baseUrl}/logo_500.png`,
item: items
};
}
//#endregion
export { route };