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);
if (!parseOptions.validateStructure) return data as KenmeiExport;
// Quick shape check
if (!data?.manga || !Array.isArray(data.manga)) {
throw new Error("Invalid Kenmei export: missing or invalid manga array");
}
// Validate and normalize each manga entry
for (const [index, manga] of data.manga.entries()) {
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.