wallet-storage-client
Version:
Client only Wallet Storage
103 lines • 4.07 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.WalletError = void 0;
/**
* Derived class constructors should use the derived class name as the value for `name`,
* and an internationalizable constant string for `message`.
*
* If a derived class intends to wrap another WalletError, the public property should
* be named `walletError` and will be recovered by `fromUnknown`.
*
* Optionaly, the derived class `message` can include template parameters passed in
* to the constructor. See WERR_MISSING_PARAMETER for an example.
*
* To avoid derived class name colisions, packages should include a package specific
* identifier after the 'WERR_' prefix. e.g. 'WERR_FOO_' as the prefix for Foo package error
* classes.
*/
class WalletError extends Error {
constructor(name, message, stack, details) {
super(message);
this.details = details;
// Facilitates detection of Error objects from non-error return values.
this.isError = true;
this.name = name;
if (stack)
this.stack = stack;
}
/**
* Error class compatible accessor for `code`.
*/
get code() { return this.name; }
set code(v) { this.name = v; }
/**
* Error class compatible accessor for `description`.
*/
get description() { return this.message; }
set description(v) { this.message = v; }
/**
* Recovers all public fields from WalletError derived error classes and relevant Error derived errors.
*
* Critical client data fields are preserved across HTTP DojoExpress / DojoExpressClient encoding.
*/
static fromUnknown(err) {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let name = 'WERR_UNKNOWN';
let message = '';
let stack;
const details = {};
if (err !== null && typeof err === 'object') {
if (err["name"] === "Error" || err["name"] === "FetchError")
name = err["code"] || err["status"] || "WERR_UNKNOWN";
else
name = err["name"] || err["code"] || err["status"] || "WERR_UNKNOWN";
if (typeof name !== 'string')
name = "WERR_UNKNOWN";
message = err["message"] || err["description"] || '';
if (typeof message !== 'string')
message = "WERR_UNKNOWN";
if (typeof err["stack"] === 'string')
stack = err["stack"];
if (typeof err["sql"] === 'string')
details.sql = err["sql"];
if (typeof err["sqlMessage"] === 'string')
details.sqlMessage = err["sqlMessage"];
}
const e = new WalletError(name, message, stack, Object.keys(details).length > 0 ? details : undefined);
if (err !== null && typeof err === 'object') {
for (const [key, value] of Object.entries(err)) {
if (key !== 'walletError' && typeof value !== 'string' && typeof value !== 'number' && !Array.isArray(value))
continue;
switch (key) {
case 'walletError':
e[key] = WalletError.fromUnknown(value);
break;
case 'status': break;
case 'name': break;
case 'code': break;
case 'message': break;
case 'description': break;
case 'stack': break;
case 'sql': break;
case 'sqlMessage': break;
default:
e[key] = value;
break;
}
}
}
return e;
}
/**
* @returns standard HTTP error status object with status property set to 'error'.
*/
asStatus() {
return {
status: 'error',
code: this.name,
description: this.message
};
}
}
exports.WalletError = WalletError;
//# sourceMappingURL=WalletError.js.map