mirror of
https://git.joinsharkey.org/Sharkey/Sharkey.git
synced 2024-11-30 04:23:08 +02:00
38 lines
923 B
TypeScript
38 lines
923 B
TypeScript
|
/*
|
||
|
* SPDX-FileCopyrightText: syuilo and other misskey contributors
|
||
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||
|
*/
|
||
|
|
||
|
import JSON5 from 'json5';
|
||
|
import { addTheme, getThemes } from '@/theme-store.js';
|
||
|
import { Theme, applyTheme, validateTheme } from '@/scripts/theme.js';
|
||
|
|
||
|
export function parseThemeCode(code: string): Theme {
|
||
|
let theme;
|
||
|
|
||
|
try {
|
||
|
theme = JSON5.parse(code);
|
||
|
} catch (err) {
|
||
|
throw new Error('Failed to parse theme json');
|
||
|
}
|
||
|
if (!validateTheme(theme)) {
|
||
|
throw new Error('This theme is invaild');
|
||
|
}
|
||
|
if (getThemes().some(t => t.id === theme.id)) {
|
||
|
throw new Error('This theme is already installed');
|
||
|
}
|
||
|
|
||
|
return theme;
|
||
|
}
|
||
|
|
||
|
export function previewTheme(code: string): void {
|
||
|
const theme = parseThemeCode(code);
|
||
|
if (theme) applyTheme(theme, false);
|
||
|
}
|
||
|
|
||
|
export async function installTheme(code: string): Promise<void> {
|
||
|
const theme = parseThemeCode(code);
|
||
|
if (!theme) return;
|
||
|
await addTheme(theme);
|
||
|
}
|