UNPKG

nhentai-api-tiffceet-patch

Version:
97 lines (85 loc) 1.83 kB
/** * @module Search */ import Book from './book'; /** * Search object from API. * @global * @typedef {object} APISearch * @property {APIBook[]} result Search results. * @property {number|string} num_pages Number of search pages available. * @property {number|string} per_page Number of books per page. */ class Search { /** * Parse search object into class instance. * @param {APISearch} search Search object. */ static parse(search) { return new this({ pages: search.num_pages ? +search.num_pages : 1, perPage: search.per_page ? +search.per_page : search.result.length, books: search.result.map(Book.parse.bind(Book)), }); } /** * Page ID. * @type {number} */ page = 1; /** * Books per page. * @type {number} */ perPage = 0; /** * Books array. * @type {Book[]} */ books = []; /** * Pages count. * @type {number} */ pages = 1; /** * Create search. * @param {object} [params] Search parameters. * @param {number} [params.page=1] Search page ID. * @param {number} [params.pages=1] Search pages count. * @param {number} [params.perPage=0] Search books per page. * @param {Book[]} [params.books=[]] Books array. */ constructor({ page = 1, pages = 1, perPage = 0, books = [], }) { if (Array.isArray(books)) books.forEach(this.pushBook.bind(this)); Object.assign(this, { page, pages, perPage, }); } /** * Push book to books array. * @private * @param {Book} book Book. * @returns {boolean} Whatever was book added or not. */ pushBook(book) { if (book instanceof Book) { this.books.push(book); return true; } return false; } } export default Search;