diff --git a/src/collection/objects/_objects.js b/src/collection/objects/_objects.js index a7ecef0..9b01d6d 100644 --- a/src/collection/objects/_objects.js +++ b/src/collection/objects/_objects.js @@ -59,7 +59,7 @@ class Component { }).then((res) => { const obj = parseJson(res, ResConstructor, json); return Promise.resolve({ res, obj }); - }).catch((err) => Promise.reject(err)); + }).catch((err) => Promise.reject(new Error.BadRequest(err))); } catch (err) { return Promise.reject(err); } diff --git a/src/collection/resources/_resources.js b/src/collection/resources/_resources.js index 007df31..7483442 100644 --- a/src/collection/resources/_resources.js +++ b/src/collection/resources/_resources.js @@ -46,7 +46,7 @@ class Components { }).then((res) => { const obj = parseJson(res, ResConstructor, json); return Promise.resolve({ res, obj }); - }).catch((err) => Promise.reject(err)); + }).catch((err) => Promise.reject(new Error.BadRequest(err))); } catch (err) { return Promise.reject(err); } diff --git a/src/utils/error.js b/src/utils/error.js index 79235fb..d4eb3b9 100644 --- a/src/utils/error.js +++ b/src/utils/error.js @@ -1,9 +1,14 @@ /* eslint-disable max-classes-per-file */ class ExtendableError extends Error { - constructor(message) { + constructor(message, metadata) { super(); this.message = message; this.name = this.constructor.name; + Object.entries(metadata).forEach(([key, value]) => { + if (!this[key]) { + this[key] = value; + } + }); } } @@ -31,6 +36,12 @@ class AbstractClass extends ExtendableError { } } +class BadRequest extends ExtendableError { + constructor(requestError) { + super(requestError.response.body.message || 'Bad request', requestError); + } +} + class ImageUpload extends ExtendableError { constructor() { super('Data needs to be an object { buffer: Buffer, filename: String } or an instance File(client).'); @@ -42,5 +53,6 @@ module.exports = { AbstractClass, MethodNeedsArg, NotImplemented, + BadRequest, ImageUpload, };