UNPKG

@yuna0x0/anilist-node

Version:

A lightweight Node.js wrapper for the AniList API

230 lines (205 loc) 8.27 kB
const filterBuilder = require("./utils/filters"); /** * Search for items on AniList * @since 1.7.0 * @memberof AniList */ class Search { /** * @description This constructor is meant for internal use and is apart of initializing. You cannot access this * through the AniList class and are not expect to. * @param { Utilities } utilities - The AniList Utilities class. * @hideconstructor */ constructor(utilities) { this.util = utilities; } /** * Search for a specific character * @param {String} term - Required. The term to lookup. (ie: "Myne" or "Chise Hatori") * @param {Number} page - Which page of the results to look at. Will default to 1 if not provided. * @param {Number} amount - The amount of results per page. AniList will cap this at 25 and function will default to 5 if not provided. * @return { SearchEntry } * @since 1.7.0 */ character(term, page = 1, amount = 5) { if (!term) { throw new Error("Search term was not provided!"); } //Validate all type conditions. if (typeof term !== "string") { throw new Error("Term is not a string"); } if (typeof page !== "number") { throw new Error("Page number is not a number"); } if (typeof amount !== "number") { throw new Error("Amount is not a number"); } return this.util.send( `query ($page: Int, $perPage: Int, $search: String) { Page (page: $page, perPage: $perPage) { pageInfo { total currentPage lastPage hasNextPage perPage } characters (search: $search) { id name { english: full } } } }`, { search: term, page: page, perPage: amount } ); } /** * Search for a specific studio * @param {String} term - Required. The term to lookup. (ie: "White Fox") * @param {Number} page - Which page of the results to look at. Will default to 1 if not provided. * @param {Number} amount - The amount of results per page. AniList will cap this at 25 and function will default to 5 if not provided. * @return { SearchEntry } * @since 1.7.0 */ studio(term, page = 1, amount = 5) { if (!term) { throw new Error("Search term was not provided!"); } //Validate all type conditions. if (typeof term !== "string") { throw new Error("Term is not a string"); } if (typeof page !== "number") { throw new Error("Page number is not a number"); } if (typeof amount !== "number") { throw new Error("Amount is not a number"); } return this.util.send( `query ($page: Int, $perPage: Int, $search: String) { Page (page: $page, perPage: $perPage) { pageInfo { total currentPage lastPage hasNextPage perPage } studios (search: $search) { id name } } }`, { search: term, page: page, perPage: amount } ); } /** * Search for a specific staff member * @param {String} term - Required. The term to lookup. (ie: "Yuka Iguchi") * @param {Number} page - Which page of the results to look at. Will default to 1 if not provided. * @param {Number} amount - The amount of results per page. AniList will cap this at 25 and function will default to 5 if not provided. * @return { SearchEntry } * @since 1.7.0 */ staff(term, page = 1, amount = 5) { if (!term) { throw new Error("Search term was not provided!"); } //Validate all type conditions. if (typeof term !== "string") { throw new Error("Term is not a string"); } if (typeof page !== "number") { throw new Error("Page number is not a number"); } if (typeof amount !== "number") { throw new Error("Amount is not a number"); } return this.util.send( `query ($page: Int, $perPage: Int, $search: String) { Page (page: $page, perPage: $perPage) { pageInfo { total currentPage lastPage hasNextPage perPage } staff (search: $search) { id name { english: full } } } }`, { search: term, page: page, perPage: amount } ); } /** * Search for a specific user * @param {String} term - Required. The term to lookup. (ie: "AurelicButter") * @param {Number} page - Which page of the results to look at. Will default to 1 if not provided. * @param {Number} amount - The amount of results per page. AniList will cap this at 25 and function will default to 5 if not provided. * @return { SearchEntry } * @since 1.7.0 */ user(term, page = 1, amount = 5) { if (!term) { throw new Error("Search term was not provided!"); } //Validate all type conditions. if (typeof term !== "string") { throw new Error("Term is not a string"); } if (typeof page !== "number") { throw new Error("Page number is not a number"); } if (typeof amount !== "number") { throw new Error("Amount is not a number"); } return this.util.send( `query ($page: Int, $perPage: Int, $search: String) { Page (page: $page, perPage: $perPage) { pageInfo { total currentPage lastPage hasNextPage perPage } users (search: $search) { id name } } }`, { search: term, page: page, perPage: amount } ); } /** * Search for a specific anime * @param {String} term - The term to lookup. (ie: "Log Horizon"). For no term, input a null value * @param {Object} filter - A key-value paired object to filter search data. * @param {Number} page - Which page of the results to look at. Will default to 1 if not provided. * @param {Number} amount - The amount of results per page. AniList will cap this at 25 and function will default to 5 if not provided. * @return { SearchEntry } * @since 1.7.0 */ anime(term = null, filter = null, page = 1, amount = 5) { if (term && typeof term !== "string") { throw new Error("Search term is not a string"); } if (typeof page !== "number") { throw new Error("Page number is not a number"); } if (typeof amount !== "number") { throw new Error("Amount is not a number"); } let query = filterBuilder("anime", filter); query += "id title { romaji english native userPreferred } } } }"; return this.util.send(query, { search: term, page: page, perPage: amount }); } /** * Search for a specific manga * @param {String} term - The term to lookup. (ie: "Mahoutsukai no Yome"). For no term, input a null value. * @param {Object} filter - A key-value paired object to filter search data. * @param {Number} page - Which page of the results to look at. Will default to 1 if not provided. * @param {Number} amount - The amount of results per page. AniList will cap this at 25 and function will default to 5 if not provided. * @return { SearchEntry } * @since 1.7.0 */ manga(term = null, filter = null, page = 1, amount = 5) { if (term && typeof term !== "string") { throw new Error("Search term is not a string"); } if (typeof page !== "number") { throw new Error("Page number is not a number"); } if (typeof amount !== "number") { throw new Error("Amount is not a number"); } let query = filterBuilder("manga", filter); query += "id title { romaji english native userPreferred } } } }"; return this.util.send(query, { search: term, page: page, perPage: amount }); } /** * Search for a specific activity * @param {Number} activityID - The activityID to lookup. (ie: 152876349). For no term, input a null value. * @param {Object} filter - A key-value paired object to filter search data. * @param {Number} page - Which page of the results to look at. Will default to 1 if not provided. * @param {Number} amount - The amount of results per page. AniList will cap this at 25 and function will default to 5 if not provided. * @return { ActivityEntry } * @since 1.7.0 */ activity(activityID = null, filter = null, page = 1, amount = 5) { if (activityID && typeof activityID !== "number") { throw new Error("activityID is not a number."); } if (typeof page !== "number") { throw new Error("Page number is not a number"); } if (typeof amount !== "number") { throw new Error("Amount is not a number"); } let query = filterBuilder("activity", filter); query += `... on ListActivity { id type createdAt likeCount } ... on TextActivity { id type createdAt likeCount } ... on MessageActivity { id type createdAt likeCount }}}}`; return this.util.send(query, { id: activityID, page: page, perPage: amount }); } } module.exports = Search;