Re-factor the BaseException.name handling, and clean-up some code

Once we're finally able to get rid of SystemJS, which is unfortunately still blocked on [bug 1247687](https://bugzilla.mozilla.org/show_bug.cgi?id=1247687), we might also want to clean-up (or even completely remove) the `BaseException` abstraction and simply extend `Error` directly instead.

At that point we'd need to (explicitly) set the `name` on each class anyway, so this patch is essentially preparing for future clean-up. Furthermore, after the `BaseException` abstraction was added there's been *multiple* issues filed about third-party minification breaking our code since `this.constructor.name` is not guaranteed to always do what you intended.

While hard-coding the strings indeed feels quite unfortunate, it's likely the "best" solution to avoid the problem described above.
This commit is contained in:
Jonas Jenwald 2021-08-09 12:02:49 +02:00
parent 745d5cc819
commit 6167566f1b
8 changed files with 67 additions and 40 deletions

View file

@ -459,12 +459,12 @@ function shadow(obj, prop, value) {
*/
const BaseException = (function BaseExceptionClosure() {
// eslint-disable-next-line no-shadow
function BaseException(message) {
function BaseException(message, name) {
if (this.constructor === BaseException) {
unreachable("Cannot initialize BaseException.");
}
this.message = message;
this.name = this.constructor.name;
this.name = name;
}
BaseException.prototype = new Error();
BaseException.constructor = BaseException;
@ -474,25 +474,33 @@ const BaseException = (function BaseExceptionClosure() {
class PasswordException extends BaseException {
constructor(msg, code) {
super(msg);
super(msg, "PasswordException");
this.code = code;
}
}
class UnknownErrorException extends BaseException {
constructor(msg, details) {
super(msg);
super(msg, "UnknownErrorException");
this.details = details;
}
}
class InvalidPDFException extends BaseException {}
class InvalidPDFException extends BaseException {
constructor(msg) {
super(msg, "InvalidPDFException");
}
}
class MissingPDFException extends BaseException {}
class MissingPDFException extends BaseException {
constructor(msg) {
super(msg, "MissingPDFException");
}
}
class UnexpectedResponseException extends BaseException {
constructor(msg, status) {
super(msg);
super(msg, "UnexpectedResponseException");
this.status = status;
}
}
@ -500,12 +508,20 @@ class UnexpectedResponseException extends BaseException {
/**
* Error caused during parsing PDF data.
*/
class FormatError extends BaseException {}
class FormatError extends BaseException {
constructor(msg) {
super(msg, "FormatError");
}
}
/**
* Error used to indicate task cancellation.
*/
class AbortException extends BaseException {}
class AbortException extends BaseException {
constructor(msg) {
super(msg, "AbortException");
}
}
const NullCharactersRegExp = /\x00/g;