The content of the Kenmei export file as text.
Parsing options.
Parsed Kenmei data.
export function parseKenmeiExport(
fileContent: string,
options: Partial<KenmeiParseOptions> = {},
): KenmeiExport {
const parseOptions = { ...DEFAULT_PARSE_OPTIONS, ...options };
try {
const data = JSON.parse(fileContent);
// Validate the structure of the data
if (parseOptions.validateStructure) {
if (!data.manga || !Array.isArray(data.manga)) {
throw new Error(
"Invalid Kenmei export: missing or invalid manga array",
);
}
// Validate each manga entry
data.manga.forEach((manga: KenmeiManga, index: number) => {
if (!manga.title) {
throw new Error(`Manga at index ${index} is missing a title`);
}
if (!manga.status || !isValidStatus(manga.status)) {
manga.status = parseOptions.defaultStatus;
}
if (typeof manga.chapters_read !== "number") {
manga.chapters_read = 0;
}
});
}
return data as KenmeiExport;
} catch (error) {
if (error instanceof SyntaxError) {
throw new Error("Invalid JSON format in export file");
}
throw error;
}
}
Parse a Kenmei export file.