pg-transactional-outbox
Version:
A PostgreSQL based transactional outbox and inbox pattern implementation to support exactly once message processing (with at least once message delivery).
54 lines • 2.18 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ensureExtendedError = exports.MessageError = exports.TransactionalOutboxInboxError = void 0;
/** An error that was raised from the transactional outbox/inbox library. Includes an error code. */
class TransactionalOutboxInboxError extends Error {
constructor(message, errorCode, innerError) {
super(message);
this.errorCode = errorCode;
this.name = this.constructor.name;
this.innerError = ensureError(innerError);
}
}
exports.TransactionalOutboxInboxError = TransactionalOutboxInboxError;
/** An error that was raised when handling an outbox/inbox message. */
class MessageError extends TransactionalOutboxInboxError {
constructor(message, errorCode, messageObject, innerError) {
super(message, errorCode, innerError);
this.messageObject = messageObject;
this.name = this.constructor.name;
}
}
exports.MessageError = MessageError;
/**
* Returns the error as verified Error object or wraps the input as
* ExtendedError with error code and potential innerError.
* @param error The error variable to check
* @param fallbackErrorCode The error code to use if the message is not already a TransactionalOutboxInboxError.
* @param message The message object to use if the message is not a TransactionalOutboxInboxError.
* @returns The error if the input was already an error otherwise a wrapped error. Enriched with the error code property.
*/
const ensureExtendedError = (error, fallbackErrorCode, message) => {
if (error instanceof TransactionalOutboxInboxError) {
return error;
}
const err = ensureError(error);
if (message) {
return new MessageError(err.message, fallbackErrorCode, message, err);
}
else {
err.errorCode = fallbackErrorCode;
return err;
}
};
exports.ensureExtendedError = ensureExtendedError;
const ensureError = (error) => {
if (error === null || error === undefined) {
return undefined;
}
if (error instanceof Error) {
return error;
}
return new Error(String(error));
};
//# sourceMappingURL=error.js.map