UNPKG

eksi-sozluk

Version:
200 lines (175 loc) 6.12 kB
const { tags, debeEntries } = require('./lib') const { request } = require('./utils') const { TITLE_TYPES } = require('./enums') const { Entry, User, TitleCollection, EntryCollection, SearchResults, Tag } = require('./models') /** * Eksi Sozluk guest class. * * @ignore */ class EksiGuest { /** * Create an Eksi Sozluk guest session. * * @param {object} httpClient Axios HTTP client. */ constructor (httpClient) { this.httpClient = httpClient this._request = request(httpClient) } /** * Search things. * * @param {string} text Search text. * @returns {Promise.<SearchResults>} A promise for the search results. */ async search (text) { const results = new SearchResults(this._request, text) await results.retrieve() return results } /** * Fetch entry by id. * * @param {number} entryId Entry Id. * @returns {Promise.<Entry>} A promise for the entry. */ async entryById (entryId) { const entry = new Entry(this._request, entryId) await entry.retrieve() return entry } /** * Fetch entries. * * @param {string} title Title itself. * @param {object} options Parameters that user can specify. * @param {number} [options.page=1] Page number. * @param {CollectionType} [options.type] Sorting or filtering type. * @param {string} [options.author] Username, if type is 'author' set this parameter. * @param {string} [options.search] Search text, if type is 'find' set this parameter. * @returns {Promise.<EntryCollection>} A promise for the entries. */ async entries (title, options = {}) { const collection = new EntryCollection(this._request, title, options) await collection.retrieve() return collection } /** * Fetch today in history. * * @param {string} year Which year. * @param {object} options Parameters that user can specify. * @param {number} [options.page=1] Page number. * @returns {Promise.<TitleCollection>} A promise for the titles of today in history. */ async todayInHistory (year, options = {}) { const target = `/basliklar/tarihte-bugun?year=${year}` const collection = new TitleCollection(this._request, target, options) await collection.retrieve() return collection } /** * Fetch untagged titles. * * @param {object} options Parameters that user can specify. * @param {number} [options.page=1] Page number. * @returns {Promise.<TitleCollection>} A promise for untagged titles. */ async untaggedTitles (options = {}) { const target = '/basliklar/basiboslar' const collection = new TitleCollection(this._request, target, options) await collection.retrieve() return collection } /** * Fetch user. * * @param {string} username Username. * @returns {Promise.<User>} A promise for the user. */ async user (username) { const user = new User(this._request, username) await user.retrieve() return user } /** * Fetch tags. * * @returns {Promise.Array<Tag>} A promise for the tags. */ async tags () { return await tags(this._request) } /** * Fetch titles by tag. * * @param {TagName} tagName Tag name. * @param {object} options Parameters that user can specify. * @param {number} [options.page=1] Page number. * @returns {Promise.<TitleCollection>} A promise for the titles of given tag. */ async titlesByTag (tagName, options = {}) { const target = `/basliklar/kanal/${tagName}` const collection = new TitleCollection(this._request, target, options) await collection.retrieve() return collection } /** * Fetch agenda. * * @param {object} options Parameters that user can specify. * @param {number} [options.page=1] Page number. * @returns {Promise.<TitleCollection>} A promise for the agenda titles. */ async agenda (options = {}) { const target = '/basliklar/gundem' const collection = new TitleCollection(this._request, target, options) await collection.retrieve() return collection } /** * Fetch yesterday's top entries. * * @returns {Promise.Array<Entry>} A promise for the yesterday's top entries. */ async debeEntries () { return await debeEntries(this._request) } /** * Fetch questions in agenda. * * @param {object} options Parameters that user can specify. * @param {number} [options.page=1] Page number. * @returns {Promise.<TitleCollection>} A promise for the agenda titles in agenda. */ async questionsInAgenda (options = {}) { const target = '/basliklar/sorunsal' const _options = { ...options, type: TITLE_TYPES.QUESTION } const collection = new TitleCollection(this._request, target, _options) await collection.retrieve() return collection } /** * Fetch questions in today. * * @param {object} options Parameters that user can specify. * @param {number} [options.page=1] Page number. * @returns {Promise.<TitleCollection>} A promise for the agenda titles in today. */ async questionsInToday (options = {}) { const target = '/basliklar/sorunsal-bugun' const _options = { ...options, type: TITLE_TYPES.QUESTION } const collection = new TitleCollection(this._request, target, _options) await collection.retrieve() return collection } } module.exports = EksiGuest