@irfanshadikrishad/anilist
Version:
Minimalist unofficial AniList CLI for Anime and Manga Enthusiasts
118 lines (117 loc) • 5.11 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import { parseStringPromise } from "xml2js";
class Validate {
/**
* Validate importable JSON file
* @param data string
* @returns boolean
*/
static Import_JSON(data) {
return (Array.isArray(data) &&
data.every((item) => typeof item === "object" && item !== null && "id" in item));
}
/**
* Validate if MyAnimeList Anime XML file is valid or not
* @param xmlData string
* @returns boolean
*/
static Import_AnimeXML(xmlData) {
return __awaiter(this, void 0, void 0, function* () {
try {
const result = yield parseStringPromise(xmlData, { explicitArray: false });
if (!result || !result.myanimelist) {
console.error("Invalid XML structure: Missing 'myanimelist' root element.");
return false;
}
const animeList = result.myanimelist.anime;
if (!animeList) {
console.error("Invalid XML structure: Missing 'anime' elements.");
return false;
}
const animeArray = Array.isArray(animeList) ? animeList : [animeList];
const isValid = animeArray.every((anime) => {
const isValidId = anime.series_animedb_id && !isNaN(Number(anime.series_animedb_id));
const hasRequiredFields = anime.series_title && anime.my_status;
return isValidId && hasRequiredFields;
});
if (!isValid) {
console.error("Validation failed: Some anime entries are missing required fields or have invalid IDs.");
}
return isValid;
}
catch (error) {
console.error("Error parsing or validating XML:", error);
return false;
}
});
}
/**
* Validate if MyAnimeList Anime XML file is valid or not
* @param xmlData string
* @returns boolean
*/
static Import_MangaXML(xmlData) {
return __awaiter(this, void 0, void 0, function* () {
try {
const result = yield parseStringPromise(xmlData, { explicitArray: false });
if (!result || !result.myanimelist) {
console.error("Invalid XML structure: Missing 'myanimelist' root element.");
return false;
}
const mangaList = result.myanimelist.manga;
if (!mangaList) {
console.error("Invalid XML structure: Missing 'manga' elements.");
return false;
}
const mangaArray = Array.isArray(mangaList) ? mangaList : [mangaList];
const isValid = mangaArray.every((manga) => {
const isValidId = manga.manga_mangadb_id && !isNaN(Number(manga.manga_mangadb_id));
const hasRequiredFields = manga.manga_title && manga.my_status;
return isValidId && hasRequiredFields;
});
if (!isValid) {
console.error("Validation failed: Some manga entries are missing required fields or have invalid IDs.");
}
return isValid;
}
catch (error) {
console.error("Error parsing or validating XML:", error);
return false;
}
});
}
/**
* Validate AniDB json-large file
* @param file string of anidb json-large
* @returns boolean
*/
static Import_AniDBJSONLarge(file) {
return __awaiter(this, void 0, void 0, function* () {
try {
if (!(file === null || file === void 0 ? void 0 : file.trim())) {
console.error("File content is empty or invalid.");
return false;
}
const obj3ct = JSON.parse(file);
if (!obj3ct || !Array.isArray(obj3ct.anime)) {
console.error("Invalid JSON structure: Missing or malformed 'anime' array.");
return false;
}
return true;
}
catch (error) {
console.error("Failed to parse JSON file:", error);
return false;
}
});
}
}
export { Validate };