Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | import { Metadata } from "./metadata";
import { Language } from "../../constants/languages";
import { API_PATHS } from "../../constants/url";
export interface Author {
readonly name: string;
readonly email?: string;
readonly url: string;
}
export interface CatalogPackage {
name: string;
languages?: Partial<Record<Language, Record<string, unknown>>>;
version: string;
major: number;
description: string;
author: Author | string;
keywords?: string[];
metadata: Metadata;
}
export interface Packages {
packages: CatalogPackage[];
}
const EMPTY_CATALOG = { packages: [] };
/**
* Fetch the catalog of all packages from the backend.
*/
export const fetchPackages = async (): Promise<Packages> => {
const response = await fetch(API_PATHS.CATALOG_SUFFIX);
if (!response.ok) {
console.error(response.statusText);
console.warn(
"Failed to fetch package catalog. Falling back to empty package list."
);
return EMPTY_CATALOG;
}
return response.json().catch((err) => {
console.error(err);
console.warn(
"Invalid package catalog response. Falling back to empty package list."
);
return EMPTY_CATALOG;
});
};
|