|
1 | 1 | import { error, type RequestHandler } from "@sveltejs/kit"; |
2 | 2 | import { Feed } from "feed"; |
3 | 3 | import { discoverer } from "$lib/server/package-discoverer"; |
4 | | -import { getPackageReleases } from "../releases"; |
| 4 | +import { getAllPackagesReleases, getPackageReleases } from "../releases"; |
5 | 5 |
|
6 | | -function getBaseFeed(url: URL, title: string) { |
| 6 | +function getBaseFeed(url: URL, title: string, mode: "all" | "single" = "single") { |
7 | 7 | const feed = new Feed({ |
8 | 8 | copyright: "", |
9 | | - description: `The releases feed for ${title}, brought by Svelte Changelog.`, |
| 9 | + description: `The releases feed for ${mode === "single" ? title : "all the packages"}, brought by Svelte Changelog.`, |
10 | 10 | favicon: "https://raw.githubusercontent.com/sveltejs/branding/master/svelte-logo.svg", |
11 | 11 | feedLinks: { |
12 | 12 | xml: url.toString().replace(/[A-z\d]+\.[A-z\d]+$/, "rss.xml"), |
@@ -35,15 +35,30 @@ export function rssHandler(response: (feed: Feed) => Response): RequestHandler { |
35 | 35 | const categorizedPackages = await discoverer.getOrDiscoverCategorized(); |
36 | 36 |
|
37 | 37 | // 2. Get the releases and package info |
38 | | - const packageReleases = await getPackageReleases( |
39 | | - slugPackage, |
40 | | - categorizedPackages, |
41 | | - locals.posthog |
42 | | - ); |
43 | | - if (!packageReleases) error(404); |
| 38 | + let packageName: string; |
| 39 | + let releases: NonNullable<Awaited<ReturnType<typeof getPackageReleases>>>["releases"]; |
| 40 | + if (slugPackage.toLowerCase() === "all") { |
| 41 | + // All releases |
| 42 | + packageName = "All"; |
| 43 | + releases = await getAllPackagesReleases(categorizedPackages, locals.posthog); |
| 44 | + } else { |
| 45 | + // This package releases |
| 46 | + const packageReleases = await getPackageReleases( |
| 47 | + slugPackage, |
| 48 | + categorizedPackages, |
| 49 | + locals.posthog |
| 50 | + ); |
| 51 | + if (!packageReleases) error(404); |
| 52 | + packageName = packageReleases.releasesRepo.pkg.name; |
| 53 | + releases = packageReleases.releases; |
| 54 | + } |
44 | 55 |
|
45 | | - const feed = getBaseFeed(url, `${packageReleases.releasesRepo.pkg.name} releases`); |
46 | | - for (const release of packageReleases.releases) { |
| 56 | + const feed = getBaseFeed( |
| 57 | + url, |
| 58 | + `${packageName} releases`, |
| 59 | + packageName.toLowerCase() === "all" ? "all" : "single" |
| 60 | + ); |
| 61 | + for (const release of releases) { |
47 | 62 | feed.addItem({ |
48 | 63 | author: [ |
49 | 64 | { |
|
0 commit comments