From a5e4b9851bd7f531f1b49eb0233b38a357b10097 Mon Sep 17 00:00:00 2001 From: Remco Haszing Date: Mon, 2 Sep 2024 16:46:12 +0200 Subject: [PATCH] Define custom error types (#186) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We currently decorate plain Error objects. TypeScript doesn’t like this. We better use custom error types. --- src/InconsistentResponseError.js | 5 +---- src/PollingTimeoutError.js | 7 +++++++ src/Transloadit.js | 13 ++++--------- src/TransloaditError.js | 10 ++++++++++ 4 files changed, 22 insertions(+), 13 deletions(-) create mode 100644 src/PollingTimeoutError.js create mode 100644 src/TransloaditError.js diff --git a/src/InconsistentResponseError.js b/src/InconsistentResponseError.js index e018728..b9dea30 100644 --- a/src/InconsistentResponseError.js +++ b/src/InconsistentResponseError.js @@ -1,8 +1,5 @@ class InconsistentResponseError extends Error { - constructor(message) { - super(message) - this.name = 'InconsistentResponseError' - } + name = 'InconsistentResponseError' } module.exports = InconsistentResponseError diff --git a/src/PollingTimeoutError.js b/src/PollingTimeoutError.js new file mode 100644 index 0000000..1a497ff --- /dev/null +++ b/src/PollingTimeoutError.js @@ -0,0 +1,7 @@ +class PollingTimeoutError extends Error { + name = 'PollingTimeoutError' + + code = 'POLLING_TIMED_OUT' +} + +module.exports = PollingTimeoutError diff --git a/src/Transloadit.js b/src/Transloadit.js index 54a64d0..84a7ec2 100644 --- a/src/Transloadit.js +++ b/src/Transloadit.js @@ -11,6 +11,8 @@ const pMap = require('p-map') const InconsistentResponseError = require('./InconsistentResponseError') const PaginationStream = require('./PaginationStream') +const PollingTimeoutError = require('./PollingTimeoutError') +const TransloaditError = require('./TransloaditError') const pkg = require('../package.json') const tus = require('./tus') @@ -60,12 +62,7 @@ function checkResult(result) { // In case server returned a successful HTTP status code, but an `error` in the JSON object // This happens sometimes when createAssembly with an invalid file (IMPORT_FILE_ERROR) if (typeof result === 'object' && result !== null && typeof result.error === 'string') { - const err = new Error('Error in response') - // Mimic got HTTPError structure - err.response = { - body: result, - } - throw decorateHttpError(err, result) + throw decorateHttpError(new TransloaditError('Error in response', result), result) } } @@ -285,9 +282,7 @@ class TransloaditClient { const nowMs = getHrTimeMs() if (timeout != null && nowMs - startTimeMs >= timeout) { - const err = new Error('Polling timed out') - err.code = 'POLLING_TIMED_OUT' - throw err + throw new PollingTimeoutError('Polling timed out') } await new Promise((resolve) => setTimeout(resolve, interval)) } diff --git a/src/TransloaditError.js b/src/TransloaditError.js new file mode 100644 index 0000000..d2b4097 --- /dev/null +++ b/src/TransloaditError.js @@ -0,0 +1,10 @@ +class TransloaditError extends Error { + name = 'TransloaditError' + + constructor(message, body) { + super(message) + this.response = { body } + } +} + +module.exports = TransloaditError