Hi,
I am currently trying to make programmatic changes to a moddle typesafe. Here is an example of what I came up with so far:
import { Element } from "bpmn-js/lib/model/Types";
import { useService } from "bpmn-js-properties-panel";
import Modeling from "bpmn-js/lib/features/modeling/Modeling";
import { getBusinessObject, is } from "bpmn-js/lib/util/ModelUtil";
import BPMNModdle, { ModdleElement } from "bpmn-moddle";
const removeSpecificExecutionListener = (element: Element): void => {
const moddle: BPMNModdle = useService("moddle");
const modeling: Modeling = useService("modeling");
const businessObject: ModdleElement = getBusinessObject(element);
const extensionElements =
businessObject.extensionElements || moddle.create("bpmn:ExtensionElements"); // What type is this?
const values: ModdleElement[] | undefined = extensionElements.get("values");
if (values?.length) {
const index = values.findIndex(
(value) =>
is(value, "camunda:ExecutionListener") &&
value.get("event") === "start" &&
value
.get("fields")
.some(
(field: ModdleElement) =>
field.get("name") === "hideExecutionListener" &&
field.get("string") === "true",
),
);
if (index > -1) {
extensionElements.get("values").splice(index, 1);
}
}
modeling.updateProperties(element, {
extensionElements,
});
};
These are my questions regarding this example:
What type should const extensionElements
be?
Is ModdleElement[] | undefined
the correct type for extensionElements? It feels like ModdleElement provides no information about the correctness of the model and there is no autocompletion. Did I import the correct type import BPMNModdle, { ModdleElement } from "bpmn-moddle";
?
Is there a guide on what types to import when working with the bpmn libraries and typescript?