bpmn-elements
Version:
Executable workflow elements based on BPMN 2.0
78 lines (77 loc) • 2.55 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.RunError = exports.BpmnError = exports.ActivityError = void 0;
exports.makeErrorFromMessage = makeErrorFromMessage;
var _messageHelper = require("../messageHelper.js");
class ActivityError extends Error {
constructor(description, sourceMessage, inner) {
super(description);
this.type = 'ActivityError';
this.name = this.constructor.name;
this.description = description;
if (sourceMessage) this.source = (0, _messageHelper.cloneMessage)(sourceMessage, sourceMessage.content?.error && {
error: undefined
});
if (inner) {
this.inner = inner;
if (inner.name) this.name = inner.name;
if (inner.code) this.code = inner.code;
}
}
}
exports.ActivityError = ActivityError;
class RunError extends ActivityError {
constructor(...args) {
super(...args);
this.type = 'RunError';
}
}
exports.RunError = RunError;
class BpmnError extends Error {
constructor(description, behaviour, sourceMessage, inner) {
super(description);
this.type = 'BpmnError';
this.name = behaviour?.name ?? this.constructor.name;
this.description = description;
this.code = behaviour?.errorCode?.toString() ?? behaviour?.code;
this.id = behaviour?.id;
if (sourceMessage) this.source = (0, _messageHelper.cloneMessage)(sourceMessage, sourceMessage.content?.error && {
error: undefined
});
if (inner) this.inner = inner;
}
}
exports.BpmnError = BpmnError;
function makeErrorFromMessage(errorMessage) {
const {
content
} = errorMessage;
if (isKnownError(content)) return content;
const {
error
} = content;
if (!error) return new Error(`Malformatted error message with routing key ${errorMessage.fields?.routingKey}`);
if (isKnownError(error)) return error;
switch (error.type) {
case 'ActivityError':
return new ActivityError(error.message || error.description, error.source, error.inner ? error.inner : {
code: error.code,
name: error.name
});
case 'RunError':
return new RunError(error.message || error.description, error.source, error.inner ? error.inner : {
code: error.code,
name: error.name
});
case 'BpmnError':
return new BpmnError(error.message || error.description, error, error.source);
}
return error;
}
function isKnownError(test) {
if (test instanceof ActivityError) return test;
if (test instanceof BpmnError) return test;
if (test instanceof Error) return test;
}