46 lines
1.2 KiB
TypeScript
46 lines
1.2 KiB
TypeScript
|
|
export interface ZenTheme {
|
|
name: string
|
|
description: string
|
|
image: string
|
|
downloadUrl: string
|
|
id: string
|
|
homepage?: string
|
|
readme: string
|
|
preferences: {
|
|
[key: string]: string
|
|
},
|
|
author: string
|
|
}
|
|
|
|
const THEME_API = "https://zen-browser.github.io/theme-store/themes.json";
|
|
const CACHE_OPTIONS = { cache: "force-cache" } as RequestInit;
|
|
|
|
export async function getAllThemes() {
|
|
// Fetch from the API
|
|
const response = await fetch(THEME_API, CACHE_OPTIONS);
|
|
const themes = await response.json();
|
|
// transform in to a ZenTheme[] as it is currently an object
|
|
let themesArray: ZenTheme[] = [];
|
|
for (let key in themes) {
|
|
themesArray.push(themes[key]);
|
|
}
|
|
return themesArray;
|
|
}
|
|
|
|
export function getThemesFromSearch(themes: ZenTheme[], query: string): ZenTheme[] {
|
|
return themes.filter((theme) => theme.name.toLowerCase().includes(query.toLowerCase()));
|
|
}
|
|
|
|
export async function getThemeFromId(id: string) {
|
|
return (await getAllThemes()).find((theme) => theme.id === id);
|
|
}
|
|
|
|
export async function getThemeMarkdown(theme: ZenTheme) {
|
|
return (await fetch(theme.readme, CACHE_OPTIONS)).text();
|
|
}
|
|
|
|
export function getThemeAuthorLink(theme: ZenTheme): string {
|
|
return `https://github.com/${theme.author}`;
|
|
}
|