• 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);

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