"use strict"; 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()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Artist = void 0; const Song_1 = require("../Songs/Song"); const Constants_1 = require("../Constants"); class Artist { constructor(client, res, partial = false) { var _a; this.client = client; this.partial = partial; this.name = res.name; this.id = +res.id; this.url = res.url; this.thumbnail = res.image_url; this.image = res.header_image_url; this.iq = (_a = +res.iq) !== null && _a !== void 0 ? _a : 0; this.verified = { normal: res.is_verified, meme: res.is_meme_verified, }; this.socialmedia = { facebook: res.facebook_name || undefined, twitter: res.twitter_name || undefined, }; this.raw = res; } /** * Fetches the songs of the Artist (Requires Key) * @example const Songs = await Artist.songs(); */ songs(options = {}) { var _a, _b; return __awaiter(this, void 0, void 0, function* () { if (!this.client.key) { throw new Error(Constants_1.Constants.REQUIRES_KEY); } if (typeof options !== "object") { throw new Error("'options' must be a type of 'object'"); } const per_page = (_a = options.per_page) !== null && _a !== void 0 ? _a : 20; const sort = options.sort && Constants_1.Constants.ARTIST_SORTS.includes(options.sort) ? options.sort : "title"; const page = (_b = options.page) !== null && _b !== void 0 ? _b : 1; const data = yield this.client.api.get(`/songs?page=${page}&per_page=${per_page}&sort=${sort}`); const parsed = JSON.parse(data); return parsed.songs.map((s) => new Song_1.Song(this.client, s, true)); }); } /** * Fetches All Information about the Artist and updates all the existing Properties (Requires Key) * @example const NewArtist = await Artist.fetch(); */ fetch() { return __awaiter(this, void 0, void 0, function* () { if (!this.client.key) { throw new Error(Constants_1.Constants.REQUIRES_KEY); } const data = yield this.client.api.get(`/artists/${this.id}`); const parsed = JSON.parse(data); this.socialmedia.facebook = parsed.artist.facebook_name; this.socialmedia.twitter = parsed.artist.twitter_name; this.raw = parsed.artist; this.partial = false; return new Artist(this.client, parsed.artist, false); }); } } exports.Artist = Artist;