UNPKG

@esponjosin/pokeapi.js

Version:

pokeapi.js is a module that obtains the data from the page https://pokeapi.co and that allows the user to interact with the page in an easier way

84 lines (62 loc) 2.74 kB
const got = require('got'), path = require('path'), pError = require(path.resolve(__dirname, './Error.js')), Promise = require("bluebird"), Utils = new (require(path.resolve(__dirname, '../Utils/Utils.js'))); class Move { constructor(name, url, cacheDir, data = false) { /** * @private */ Object.defineProperties(this, { "url": { value: url, writable: false }, "cacheDir": { value: cacheDir, writable: false }, "name": { value: name, writable: false }, "data": { value: data, writable: false } }) } toString() { return this.name; } getInfo() { let self = this; if(self.data) return self.data; return new Promise(async (resolve, reject) => { if(Utils.findCache(self.name, self.cacheDir)) return resolve(await Utils.getCache(self.name, self.cacheDir)) let res = await got(self.url, { responseType: 'json' }).catch(e => false) if(!res) return reject(new pError('getInfo Moves', 'Could not get movement information')) let info = { id: res.body.id, name: Utils.upperFirst(res.body.name), accuracy: res.body.accuracy || 0, power: res.body.power || 0, pp: res.body.pp || 0, class: res.body.damage_class.name } if(res.body.target) info.target = res.body.target.name; if(res.body.effect_entries && res.body.effect_entries.findIndex(x => x.language.name == 'en') !== -1) info.effect = res.body.effect_entries[res.body.effect_entries.findIndex(x => x.language.name == 'en')].effect; if(res.body.flavor_text_entries && res.body.flavor_text_entries.findIndex(x => x.language.name == 'en') !== -1) info.flavor_effect = res.body.flavor_text_entries[res.body.flavor_text_entries.findIndex(x => x.language.name == 'en')].flavor_text; Utils.createCache(self.name, info.id, self.cacheDir, JSON.stringify(info)) return resolve(info) }) } } module.exports = (name, url, dir, data) => new ( eval(`class ${name.split(' ').join('_').split('-').join('_')} extends Move { constructor(name, url, dir, data) { super(name, url, dir, data) } }; ${name.split(' ').join('_').split('-').join('_')}`))(name, url, dir, data)