• Parse a Kenmei export file.

    Parameters

    • fileContent: string

      The content of the Kenmei export file as text.

    • options: Partial<KenmeiParseOptions> = {}

      Parsing options.

    Returns KenmeiExport

    Parsed Kenmei data.

    Error if the file cannot be parsed.

    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;
    }
    }