UNPKG

slash-create

Version:

Create and sync Discord slash commands!

62 lines (61 loc) 2.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DiscordRESTError = void 0; /** An Discord error from a request. */ class DiscordRESTError extends Error { /** * @param req A client request * @param res An incoming message from the server * @param response A response's body * @param stack The error stack */ constructor(req, res, response, stack) { super(); this.req = req; this.res = res; this.response = response; this.code = res.status; let message = response?.message || 'Unknown error'; if (response?.errors) message += '\n ' + this.flattenErrors(response.errors).join('\n '); else if (response) { const errors = this.flattenErrors(response); if (errors.length > 0) message += '\n ' + errors.join('\n '); } this.message = message; if (stack) this.stack = this.name + ': ' + this.message + '\n' + stack; else { // Set stack before capturing to avoid TS error this.stack = ''; Error.captureStackTrace(this, DiscordRESTError); } } get name() { return `${this.constructor.name} [${this.code}]`; } flattenErrors(errors, keyPrefix = '') { let messages = []; for (const fieldName in errors) { if (!(fieldName in errors) || fieldName === 'message' || fieldName === 'code') { continue; } if (fieldName === '_errors') { messages = messages.concat(errors._errors.map((obj) => `${keyPrefix ? `${keyPrefix}: ` : ''}${obj.message}`)); continue; } if (errors[fieldName]._errors) { messages = messages.concat(errors[fieldName]._errors.map((obj) => `${keyPrefix + fieldName}: ${obj.message}`)); } else if (Array.isArray(errors[fieldName])) { messages = messages.concat(errors[fieldName].map((str) => `${keyPrefix + fieldName}: ${str}`)); } else if (typeof errors[fieldName] === 'object') { messages = messages.concat(this.flattenErrors(errors[fieldName], keyPrefix + fieldName + '.')); } } return messages; } } exports.DiscordRESTError = DiscordRESTError;