From c36a350b83ab671e5d1bf3e23a281b892e594d3f Mon Sep 17 00:00:00 2001 From: LaviniaStiliadou Date: Sun, 4 Jun 2023 22:25:59 +0200 Subject: [PATCH 01/15] expand/collapse subprocess based on replacement in QRM --- .../editor/util/TransformationUtilities.js | 34 +++++---- .../replacement/QuantMETransformator.js | 69 +++++++++++++++---- components/bpmn-q/package-lock.json | 46 +++++++++++-- components/bpmn-q/package.json | 20 +++--- 4 files changed, 121 insertions(+), 48 deletions(-) diff --git a/components/bpmn-q/modeler-component/editor/util/TransformationUtilities.js b/components/bpmn-q/modeler-component/editor/util/TransformationUtilities.js index f283945c..000a5b8e 100644 --- a/components/bpmn-q/modeler-component/editor/util/TransformationUtilities.js +++ b/components/bpmn-q/modeler-component/editor/util/TransformationUtilities.js @@ -1,5 +1,5 @@ -import {isFlowLikeElement} from './ModellingUtilities'; -import {getDi, is} from 'bpmn-js/lib/util/ModelUtil'; +import { isFlowLikeElement } from './ModellingUtilities'; +import { getDi, is } from 'bpmn-js/lib/util/ModelUtil'; /** * Insert the given element and all child elements into the diagram @@ -30,18 +30,18 @@ export function insertShape(definitions, parent, newElement, idMap, replace, mod if (replace) { // replace old element to retain attached sequence flow, associations, data objects, ... - element = bpmnReplace.replaceElement(elementRegistry.get(oldElement.id), {type: newElement.$type}); + element = bpmnReplace.replaceElement(elementRegistry.get(oldElement.id), { type: newElement.$type }); } else { // create new shape for this element - element = modeling.createShape({type: newElement.$type}, {x: 50, y: 50}, parent, {}); + element = modeling.createShape({ type: newElement.$type }, { x: 50, y: 50 }, parent, {}); } } else { // create connection between two previously created elements let sourceElement = elementRegistry.get(idMap[newElement.sourceRef.id]); let targetElement = elementRegistry.get(idMap[newElement.targetRef.id]); - element = modeling.connect(sourceElement, targetElement, {type: newElement.$type}); + element = modeling.connect(sourceElement, targetElement, { type: newElement.$type }); } // store id to create sequence flows @@ -52,13 +52,11 @@ export function insertShape(definitions, parent, newElement, idMap, replace, mod // get the shape element related to the subprocess let shape = getDi(element); - shape.isExpanded = true; - // TODO: fix the following if, as the access to the DI of the new element is not possible with the current BPMN-JS version - /*if (shape && shape.isExpanded) { - // expand the new element - elementRegistry.get(element.id).businessObject.di.isExpanded = true; - }*/ + // expand the replacement subprocess if the detector subprocess was expanded + if (shape && (newElement.isExpanded === 'true')) { + shape.isExpanded = true; + } // preserve messages defined in ReceiveTasks } else if (newElement.$type === 'bpmn:ReceiveTask' && newElement.messageRef) { @@ -71,21 +69,21 @@ export function insertShape(definitions, parent, newElement, idMap, replace, mod let message = bpmnFactory.create('bpmn:Message'); message.name = oldMessage.name; definitions.rootElements.push(message); - modeling.updateProperties(element, {'messageRef': message}); + modeling.updateProperties(element, { 'messageRef': message }); // store id if other receive tasks reference the same message idMap[oldMessage.id] = message.id; } else { // reuse already created message and add it to receive task - modeling.updateProperties(element, {'messageRef': idMap[oldMessage.id]}); + modeling.updateProperties(element, { 'messageRef': idMap[oldMessage.id] }); } } // add element to which a boundary event is attached if (newElement.$type === 'bpmn:BoundaryEvent') { let hostElement = elementRegistry.get(idMap[newElement.attachedToRef.id]); - modeling.updateProperties(element, {'attachedToRef': hostElement.businessObject}); + modeling.updateProperties(element, { 'attachedToRef': hostElement.businessObject }); element.host = hostElement; } @@ -109,7 +107,7 @@ export function insertShape(definitions, parent, newElement, idMap, replace, mod } // return success flag and idMap with id mappings of this element and all children - return {success: success, idMap: idMap, element: element}; + return { success: success, idMap: idMap, element: element }; } /** @@ -162,7 +160,7 @@ export function insertChildElements(definitions, parent, newElement, idMap, mode } } - return {success: success, idMap: idMap, element: parent}; + return { success: success, idMap: idMap, element: parent }; } /** @@ -229,7 +227,7 @@ export function getAllElementsInProcess(processBo, elementRegistry, elementType) for (let i = 0; i < flowElementBos.length; i++) { let flowElementBo = flowElementBos[i]; if (flowElementBo.$type && flowElementBo.$type === elementType) { - elements.push({element: flowElementBo, parent: processElement}); + elements.push({ element: flowElementBo, parent: processElement }); } // recursively retrieve service tasks if subprocess is found @@ -258,7 +256,7 @@ export function getAllElementsForProcess(processBo, elementRegistry, elementType for (let i = 0; i < flowElements.length; i++) { let flowElement = flowElements[i]; if (is(flowElement, elementType)) { - elements.push({element: flowElement, parent: processElement}); + elements.push({ element: flowElement, parent: processElement }); } } return elements; diff --git a/components/bpmn-q/modeler-component/extensions/quantme/replacement/QuantMETransformator.js b/components/bpmn-q/modeler-component/extensions/quantme/replacement/QuantMETransformator.js index 751b477e..70467694 100644 --- a/components/bpmn-q/modeler-component/extensions/quantme/replacement/QuantMETransformator.js +++ b/components/bpmn-q/modeler-component/extensions/quantme/replacement/QuantMETransformator.js @@ -9,22 +9,24 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {layout} from './layouter/Layouter'; -import {matchesQRM} from './QuantMEMatcher'; -import {addQuantMEInputParameters} from './InputOutputHandler'; +import { layout } from './layouter/Layouter'; +import { matchesQRM } from './QuantMEMatcher'; +import { addQuantMEInputParameters } from './InputOutputHandler'; import * as Constants from '../Constants'; -import {replaceHardwareSelectionSubprocess} from './hardware-selection/QuantMEHardwareSelectionHandler'; -import {replaceCuttingSubprocess} from './circuit-cutting/QuantMECuttingHandler'; -import {insertShape} from '../../../editor/util/TransformationUtilities'; -import {createTempModelerFromXml} from '../../../editor/ModelerHandler'; +import { replaceHardwareSelectionSubprocess } from './hardware-selection/QuantMEHardwareSelectionHandler'; +import { replaceCuttingSubprocess } from './circuit-cutting/QuantMECuttingHandler'; +import { insertShape } from '../../../editor/util/TransformationUtilities'; +import { createTempModelerFromXml } from '../../../editor/ModelerHandler'; import { getCamundaInputOutput, getDefinitionsFromXml, getRootProcess, getSingleFlowElement } from '../../../editor/util/ModellingUtilities'; -import {getXml} from '../../../editor/util/IoUtilities'; +import { getXml } from '../../../editor/util/IoUtilities'; +const { DOMParser } = require('xmldom'); +const xmlParser = require('xml-js'); /** * Initiate the replacement process for the QuantME tasks that are contained in the current process model * @@ -43,14 +45,14 @@ export async function startQuantmeReplacementProcess(xml, currentQRMs, endpointC console.log(rootElement); if (typeof rootElement === 'undefined') { console.log('Unable to retrieve root process element from definitions!'); - return {status: 'failed', cause: 'Unable to retrieve root process element from definitions!'}; + return { status: 'failed', cause: 'Unable to retrieve root process element from definitions!' }; } // get all QuantME modeling constructs from the process let replacementConstructs = getQuantMETasks(rootElement, elementRegistry); console.log('Process contains ' + replacementConstructs.length + ' QuantME modeling constructs to replace...'); if (!replacementConstructs || !replacementConstructs.length) { - return {status: 'transformed', xml: xml}; + return { status: 'transformed', xml: xml }; } // check for available replacement models for all QuantME modeling constructs @@ -113,8 +115,23 @@ export async function startQuantmeReplacementProcess(xml, currentQRMs, endpointC // layout diagram after successful transformation layout(modeling, elementRegistry, rootElement); let updated_xml = await getXml(modeler); - console.log(updated_xml); - return {status: 'transformed', xml: updated_xml}; + + // Parse the XML string into a JavaScript object + let xmlDoc = xmlParser.xml2js(updated_xml, { compact: true }); + + // Get all bpmndi:BPMNDiagram elements + let bpmnDiagrams = xmlDoc['bpmn:definitions']['bpmndi:BPMNDiagram']; + + // Remove all bpmndi:BPMNDiagram elements except the first one + if (Array.isArray(bpmnDiagrams)) { + if (bpmnDiagrams.length > 1) { + xmlDoc['bpmn:definitions']['bpmndi:BPMNDiagram'] = bpmnDiagrams.slice(0, 1); + } + } + + // Serialize the modified JavaScript object back to XML string + let modifiedXmlString = xmlParser.js2xml(xmlDoc, { compact: true }); + return { status: 'transformed', xml: modifiedXmlString }; } /** @@ -130,7 +147,7 @@ export function getQuantMETasks(process, elementRegistry) { for (let i = 0; i < flowElements.length; i++) { let flowElement = flowElements[i]; if (flowElement.$type && flowElement.$type.startsWith('quantme:')) { - quantmeTasks.push({task: flowElement, parent: processBo}); + quantmeTasks.push({ task: flowElement, parent: processBo }); } // recursively retrieve QuantME tasks if subprocess is found @@ -160,7 +177,6 @@ async function getMatchingQRM(task, currentQRMs) { */ async function replaceByFragment(definitions, task, parent, replacement, modeler) { let bpmnFactory = modeler.get('bpmnFactory'); - if (!replacement) { console.log('Replacement fragment is undefined. Aborting replacement!'); return false; @@ -175,6 +191,31 @@ async function replaceByFragment(definitions, task, parent, replacement, modeler } console.log('Replacement element: ', replacementElement); + + if (['bpmn:SubProcess', 'quantme:QuantumHardwareSelectionSubprocess', 'quantme:CircuitCuttingSubprocess'].includes(replacementElement.$type)) { + + // Create a DOM parser + const parser = new DOMParser(); + + // Parse the XML string + const xmlDoc = parser.parseFromString(replacement, 'text/xml'); + + const bpmndiNamespace = 'http://www.omg.org/spec/BPMN/20100524/DI'; + const bpmndiShapes = xmlDoc.getElementsByTagNameNS(bpmndiNamespace, 'BPMNShape'); + + let isExpanded = null; + + for (let i = 0; i < bpmndiShapes.length; i++) { + const bpmnElement = bpmndiShapes[i].getAttribute('bpmnElement'); + if (bpmnElement === replacementElement.id) { + isExpanded = bpmndiShapes[i].getAttribute('isExpanded'); + replacementElement.isExpanded = isExpanded; + break; + } + } + } + + let result = insertShape(definitions, parent, replacementElement, {}, true, modeler, task); // add all attributes of the replaced QuantME task to the input parameters of the replacement fragment diff --git a/components/bpmn-q/package-lock.json b/components/bpmn-q/package-lock.json index b3723a14..020a564e 100644 --- a/components/bpmn-q/package-lock.json +++ b/components/bpmn-q/package-lock.json @@ -1,12 +1,12 @@ { "name": "@planqk/quantum-workflow-modeler", - "version": "0.1.7", + "version": "0.1.8", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@planqk/quantum-workflow-modeler", - "version": "0.1.7", + "version": "0.1.8", "license": "Apache-2.0", "dependencies": { "@bpmn-io/properties-panel": "^1.3.1", @@ -37,7 +37,9 @@ "timers": "^0.1.1", "tiny-svg": "^3.0.0", "webpack": "^5.75.0", - "whatwg-fetch": "^3.6.2" + "whatwg-fetch": "^3.6.2", + "xml-js": "^1.6.11", + "xpath": "^0.0.32" }, "devDependencies": { "@babel/core": "^7.20.12", @@ -13544,8 +13546,7 @@ "node_modules/sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, "node_modules/saxen": { "version": "8.1.2", @@ -16168,6 +16169,17 @@ "node": ">=0.10.0" } }, + "node_modules/xml-js": { + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", + "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", + "dependencies": { + "sax": "^1.2.4" + }, + "bin": { + "xml-js": "bin/cli.js" + } + }, "node_modules/xmlbuilder": { "version": "15.1.1", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", @@ -16187,6 +16199,14 @@ "node": ">=0.1" } }, + "node_modules/xpath": { + "version": "0.0.32", + "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.32.tgz", + "integrity": "sha512-rxMJhSIoiO8vXcWvSifKqhvV96GjiD5wYb8/QHdoRyQvraTpp4IEv944nhGausZZ3u7dhQXteZuZbaqfpB7uYw==", + "engines": { + "node": ">=0.6.0" + } + }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -26773,8 +26793,7 @@ "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, "saxen": { "version": "8.1.2", @@ -28810,6 +28829,14 @@ "integrity": "sha512-dTaaRwm4ccF8UF15/PLT3pNNlZP04qko/FUcr0QBppYLk8+J7xA9gg2vI2X4Kr1PcJAVxwI9NdADex29FX2QVQ==", "dev": true }, + "xml-js": { + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", + "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", + "requires": { + "sax": "^1.2.4" + } + }, "xmlbuilder": { "version": "15.1.1", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", @@ -28822,6 +28849,11 @@ "integrity": "sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ==", "dev": true }, + "xpath": { + "version": "0.0.32", + "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.32.tgz", + "integrity": "sha512-rxMJhSIoiO8vXcWvSifKqhvV96GjiD5wYb8/QHdoRyQvraTpp4IEv944nhGausZZ3u7dhQXteZuZbaqfpB7uYw==" + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", diff --git a/components/bpmn-q/package.json b/components/bpmn-q/package.json index 388a747f..cbc656c1 100644 --- a/components/bpmn-q/package.json +++ b/components/bpmn-q/package.json @@ -43,15 +43,17 @@ "min-dash": "^4.0.0", "min-dom": "^4.1.0", "node-fetch": "^2.1.2", - "process": "^0.11.10", "prefix-css-loader": "^1.0.0", + "process": "^0.11.10", "react": "^18.2.0", "react-dom": "^18.2.0", "stream": "^0.0.2", "timers": "^0.1.1", "tiny-svg": "^3.0.0", "webpack": "^5.75.0", - "whatwg-fetch": "^3.6.2" + "whatwg-fetch": "^3.6.2", + "xml-js": "^1.6.11", + "xpath": "^0.0.32" }, "devDependencies": { "@babel/core": "^7.20.12", @@ -66,12 +68,18 @@ "babel-loader": "^9.1.2", "babel-plugin-transform-react-remove-prop-types": "^0.4.24", "babelify": "^10.0.0", + "bpmn-js-bpmnlint": "^0.14.0", + "bpmnlint": "^6.3.0", + "bpmnlint-loader": "^0.1.4", + "bpmnlint-plugin-camunda": "^0.4.2", + "bpmnlint-plugin-custom": "file:bpmnlint-plugin-custom", "browserify": "^14.5.0", "browserify-css": "^0.15.0", "canvg-browser": "^1.0.0", "chai": "^4.3.7", "chai-xml": "^0.4.0", "clean-webpack-plugin": "^4.0.0", + "client": "file:client", "copy-webpack-plugin": "^4.6.0", "css-loader": "^6.7.2", "cssify": "^1.0.3", @@ -111,12 +119,6 @@ "webpack": "^5.75.0", "webpack-cli": "^5.0.0", "webpack-dev-server": "^4.11.1", - "xmlbuilder": "^15.1.1", - "bpmn-js-bpmnlint": "^0.14.0", - "bpmnlint": "^6.3.0", - "bpmnlint-loader": "^0.1.4", - "bpmnlint-plugin-camunda": "^0.4.2", - "bpmnlint-plugin-custom": "file:bpmnlint-plugin-custom", - "client": "file:client" + "xmlbuilder": "^15.1.1" } } From d51f165eb3314d31339314c0ab10142328880095 Mon Sep 17 00:00:00 2001 From: LaviniaStiliadou Date: Sun, 4 Jun 2023 22:48:57 +0200 Subject: [PATCH 02/15] remove isExpanded attribute from shapes --- .../quantme/replacement/QuantMETransformator.js | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/components/bpmn-q/modeler-component/extensions/quantme/replacement/QuantMETransformator.js b/components/bpmn-q/modeler-component/extensions/quantme/replacement/QuantMETransformator.js index 70467694..12f753a7 100644 --- a/components/bpmn-q/modeler-component/extensions/quantme/replacement/QuantMETransformator.js +++ b/components/bpmn-q/modeler-component/extensions/quantme/replacement/QuantMETransformator.js @@ -122,6 +122,8 @@ export async function startQuantmeReplacementProcess(xml, currentQRMs, endpointC // Get all bpmndi:BPMNDiagram elements let bpmnDiagrams = xmlDoc['bpmn:definitions']['bpmndi:BPMNDiagram']; + let subprocesses = xmlDoc['bpmn:definitions']['bpmn:process']['bpmn:subProcess']; + // Remove all bpmndi:BPMNDiagram elements except the first one if (Array.isArray(bpmnDiagrams)) { if (bpmnDiagrams.length > 1) { @@ -129,8 +131,17 @@ export async function startQuantmeReplacementProcess(xml, currentQRMs, endpointC } } + // Remove the isExpanded attribute from the shapes + if (Array.isArray(subprocesses)) { + for (let i = 0; i < subprocesses.length; i++) { + let subprocessAttributes = subprocesses[i]['_attributes']; + delete subprocessAttributes.isExpanded; + } + } + // Serialize the modified JavaScript object back to XML string let modifiedXmlString = xmlParser.js2xml(xmlDoc, { compact: true }); + return { status: 'transformed', xml: modifiedXmlString }; } @@ -191,9 +202,9 @@ async function replaceByFragment(definitions, task, parent, replacement, modeler } console.log('Replacement element: ', replacementElement); - + if (['bpmn:SubProcess', 'quantme:QuantumHardwareSelectionSubprocess', 'quantme:CircuitCuttingSubprocess'].includes(replacementElement.$type)) { - + // Create a DOM parser const parser = new DOMParser(); From 3f283b76b2e9993959704f2cb2e692b3e7a7677f Mon Sep 17 00:00:00 2001 From: LaviniaStiliadou Date: Tue, 20 Jun 2023 12:04:18 +0200 Subject: [PATCH 03/15] handle different namespace --- .../replacement/QuantMETransformator.js | 61 +++++++++++++------ 1 file changed, 42 insertions(+), 19 deletions(-) diff --git a/components/bpmn-q/modeler-component/extensions/quantme/replacement/QuantMETransformator.js b/components/bpmn-q/modeler-component/extensions/quantme/replacement/QuantMETransformator.js index 12f753a7..aa7390df 100644 --- a/components/bpmn-q/modeler-component/extensions/quantme/replacement/QuantMETransformator.js +++ b/components/bpmn-q/modeler-component/extensions/quantme/replacement/QuantMETransformator.js @@ -118,29 +118,46 @@ export async function startQuantmeReplacementProcess(xml, currentQRMs, endpointC // Parse the XML string into a JavaScript object let xmlDoc = xmlParser.xml2js(updated_xml, { compact: true }); - - // Get all bpmndi:BPMNDiagram elements - let bpmnDiagrams = xmlDoc['bpmn:definitions']['bpmndi:BPMNDiagram']; - - let subprocesses = xmlDoc['bpmn:definitions']['bpmn:process']['bpmn:subProcess']; - - // Remove all bpmndi:BPMNDiagram elements except the first one - if (Array.isArray(bpmnDiagrams)) { - if (bpmnDiagrams.length > 1) { - xmlDoc['bpmn:definitions']['bpmndi:BPMNDiagram'] = bpmnDiagrams.slice(0, 1); + const bpmnNamespace = 'http://www.omg.org/spec/BPMN/20100524/MODEL'; + const diagramNamespace = 'http://www.omg.org/spec/BPMN/20100524/DI'; + + // retrieve the namespace prefixes from the rootElement + let prefixes = Object.entries(rootElement.$parent.$attrs); + const foundBpmnPair = prefixes.find(pair => pair[1] === bpmnNamespace); + const foundDiagramPair = prefixes.find(pair => pair[1] === diagramNamespace); + let modifiedXmlString = updated_xml; + if (foundBpmnPair && foundDiagramPair) { + + // Remove xmlns: prefix from the key + const bpmnPrefix = foundBpmnPair[0].replace(/^xmlns:/, ''); + const diagramPrefix = foundDiagramPair[0].replace(/^xmlns:/, ''); + + // Get all BPMNDiagram elements + const definitionsElement = xmlDoc[bpmnPrefix + ':definitions']; + + let subprocesses = definitionsElement[bpmnPrefix + ':process'][bpmnPrefix + ':subProcess']; + let bpmnDiagrams = definitionsElement[diagramPrefix + ':BPMNDiagram']; + + // Remove all bpmndi:BPMNDiagram elements except the first one + if (Array.isArray(bpmnDiagrams)) { + if (bpmnDiagrams.length > 1) { + xmlDoc[bpmnPrefix + ':definitions'][diagramPrefix + ':BPMNDiagram'] = bpmnDiagrams.slice(0, 1); + } } - } - // Remove the isExpanded attribute from the shapes - if (Array.isArray(subprocesses)) { - for (let i = 0; i < subprocesses.length; i++) { - let subprocessAttributes = subprocesses[i]['_attributes']; - delete subprocessAttributes.isExpanded; + // Remove the isExpanded attribute from the shapes + if (Array.isArray(subprocesses)) { + for (let i = 0; i < subprocesses.length; i++) { + let subprocessAttributes = subprocesses[i]['_attributes']; + delete subprocessAttributes.isExpanded; + } } + + // Serialize the modified JavaScript object back to XML string + modifiedXmlString = xmlParser.js2xml(xmlDoc, { compact: true }); } - // Serialize the modified JavaScript object back to XML string - let modifiedXmlString = xmlParser.js2xml(xmlDoc, { compact: true }); + return { status: 'transformed', xml: modifiedXmlString }; } @@ -193,6 +210,8 @@ async function replaceByFragment(definitions, task, parent, replacement, modeler return false; } + console.log(task) + // get the root process of the replacement fragment let replacementProcess = getRootProcess(await getDefinitionsFromXml(replacement)); let replacementElement = getSingleFlowElement(replacementProcess); @@ -215,11 +234,15 @@ async function replaceByFragment(definitions, task, parent, replacement, modeler const bpmndiShapes = xmlDoc.getElementsByTagNameNS(bpmndiNamespace, 'BPMNShape'); let isExpanded = null; - + console.log(bpmndiShapes) for (let i = 0; i < bpmndiShapes.length; i++) { const bpmnElement = bpmndiShapes[i].getAttribute('bpmnElement'); + console.log(bpmnElement) if (bpmnElement === replacementElement.id) { + console.log(replacementElement) isExpanded = bpmndiShapes[i].getAttribute('isExpanded'); + console.log(isExpanded); + console.log(bpmnElement) replacementElement.isExpanded = isExpanded; break; } From b74f7dcc0ef9e57846dc246c6f88a92e92c41ebf Mon Sep 17 00:00:00 2001 From: LaviniaStiliadou Date: Tue, 20 Jun 2023 12:08:39 +0200 Subject: [PATCH 04/15] Update package-lock.json --- components/bpmn-q/package-lock.json | 1194 ++++++++++++++++++++++++++- 1 file changed, 1186 insertions(+), 8 deletions(-) diff --git a/components/bpmn-q/package-lock.json b/components/bpmn-q/package-lock.json index a3774125..5ec80c0e 100644 --- a/components/bpmn-q/package-lock.json +++ b/components/bpmn-q/package-lock.json @@ -54,12 +54,18 @@ "babel-loader": "^9.1.2", "babel-plugin-transform-react-remove-prop-types": "^0.4.24", "babelify": "^10.0.0", + "bpmn-js-bpmnlint": "^0.14.0", + "bpmnlint": "^6.3.0", + "bpmnlint-loader": "^0.1.4", + "bpmnlint-plugin-camunda": "^0.4.2", + "bpmnlint-plugin-custom": "file:bpmnlint-plugin-custom", "browserify": "^14.5.0", "browserify-css": "^0.15.0", "canvg-browser": "^1.0.0", "chai": "^4.3.7", "chai-xml": "^0.4.0", "clean-webpack-plugin": "^4.0.0", + "client": "file:client", "copy-webpack-plugin": "^4.6.0", "css-loader": "^6.7.2", "cssify": "^1.0.3", @@ -102,6 +108,12 @@ "xmlbuilder": "^15.1.1" } }, + "bpmnlint-plugin-custom": { + "dev": true + }, + "client": { + "dev": true + }, "node_modules/@ampproject/remapping": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", @@ -3107,6 +3119,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/array-flatten": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", @@ -3232,6 +3253,15 @@ "get-intrinsic": "^1.1.3" } }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/asn1.js": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", @@ -3587,6 +3617,80 @@ "tiny-svg": "^3.0.0" } }, + "node_modules/bpmn-js-bpmnlint": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/bpmn-js-bpmnlint/-/bpmn-js-bpmnlint-0.14.0.tgz", + "integrity": "sha512-Vfs2WJwqsIOkbSRft68IIpekQwcOKSn9I3sTtaA7ejszwS5ZGng8R7e27vc0pmZpM5A+8BnuoVIHG+rcStgApA==", + "dev": true, + "dependencies": { + "diagram-js": "^5.0.2", + "min-dash": "^3.5.2", + "min-dom": "^3.1.1" + }, + "peerDependencies": { + "bpmnlint": "^3.2.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" + } + }, + "node_modules/bpmn-js-bpmnlint/node_modules/component-event": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/component-event/-/component-event-0.1.4.tgz", + "integrity": "sha512-GMwOG8MnUHP1l8DZx1ztFO0SJTFnIzZnBDkXAj8RM2ntV2A6ALlDxgbMY1Fvxlg6WPQ+5IM/a6vg4PEYbjg/Rw==", + "dev": true + }, + "node_modules/bpmn-js-bpmnlint/node_modules/diagram-js": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/diagram-js/-/diagram-js-5.1.1.tgz", + "integrity": "sha512-SLxHOfEDLBC7LBjQFmXyvQXt4P5yZYFnTvhsCZZtJyQCadrVs71cUlchMmH+kUS/zaga/BkPWFbnV1d+4MsF8A==", + "dev": true, + "dependencies": { + "css.escape": "^1.5.1", + "didi": "^4.0.0", + "hammerjs": "^2.0.1", + "inherits": "^2.0.1", + "min-dash": "^3.5.0", + "min-dom": "^3.0.0", + "object-refs": "^0.3.0", + "path-intersection": "^1.0.2", + "tiny-svg": "^2.2.1" + } + }, + "node_modules/bpmn-js-bpmnlint/node_modules/didi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/didi/-/didi-4.0.0.tgz", + "integrity": "sha512-AzMElh8mCHOPWPCWfGjoJRla31fMXUT6+287W5ef3IPmtuBcyG9+MkFS7uPP6v3t2Cl086KwWfRB9mESa0OsHQ==", + "dev": true + }, + "node_modules/bpmn-js-bpmnlint/node_modules/min-dash": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/min-dash/-/min-dash-3.8.1.tgz", + "integrity": "sha512-evumdlmIlg9mbRVPbC4F5FuRhNmcMS5pvuBUbqb1G9v09Ro0ImPEgz5n3khir83lFok1inKqVDjnKEg3GpDxQg==", + "dev": true + }, + "node_modules/bpmn-js-bpmnlint/node_modules/min-dom": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/min-dom/-/min-dom-3.2.1.tgz", + "integrity": "sha512-v6YCmnDzxk4rRJntWTUiwggLupPw/8ZSRqUq0PDaBwVZEO/wYzCH4SKVBV+KkEvf3u0XaWHly5JEosPtqRATZA==", + "dev": true, + "dependencies": { + "component-event": "^0.1.4", + "domify": "^1.3.1", + "indexof": "0.0.1", + "matches-selector": "^1.2.0", + "min-dash": "^3.8.1" + } + }, + "node_modules/bpmn-js-bpmnlint/node_modules/path-intersection": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/path-intersection/-/path-intersection-1.1.1.tgz", + "integrity": "sha512-EdeUuXCm0+tb/2gv8PmRhd9fYYOtbDeTYkwCnzkBuAEjevEZi2mWUi1DVFF5nqSObYsxKcchvKUhnRULWOFreQ==", + "dev": true + }, + "node_modules/bpmn-js-bpmnlint/node_modules/tiny-svg": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/tiny-svg/-/tiny-svg-2.2.4.tgz", + "integrity": "sha512-NOi39lBknf4UdDEahNkbEAJnzhu1ZcN2j75IS2vLRmIhsfxdZpTChfLKBcN1ShplVmPIXJAIafk6YY5/Aa80lQ==", + "dev": true + }, "node_modules/bpmn-js-cli": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/bpmn-js-cli/-/bpmn-js-cli-2.3.0.tgz", @@ -3635,6 +3739,92 @@ "moddle-xml": "^10.0.0" } }, + "node_modules/bpmnlint": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/bpmnlint/-/bpmnlint-6.5.0.tgz", + "integrity": "sha512-plF2kcTqcQ7gyusnR9gQhDd04Ld/rJ0b9k8HGa5Bg3m88w8hf6O2AJ5JHpITttncJzNNxFvNXzYmJVOhIgqB2g==", + "dev": true, + "dependencies": { + "bpmn-moddle": "^6.0.0", + "bpmnlint-utils": "^1.0.1", + "chalk": "^2.4.2", + "cli-table": "^0.3.1", + "meow": "^5.0.0", + "pluralize": "^7.0.0", + "tiny-glob": "^0.2.8" + }, + "bin": { + "bpmnlint": "bin/bpmnlint.js" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/bpmnlint-loader": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/bpmnlint-loader/-/bpmnlint-loader-0.1.6.tgz", + "integrity": "sha512-/XmvV70NT1uTpjtC6C5bTJvWFR6v5RFxLzUCuP0ScKKlTf6me9rYgV0sAXdbW2011vFSFfD8DJHTi+D3gnSUww==", + "dev": true, + "peerDependencies": { + "bpmnlint": "*" + } + }, + "node_modules/bpmnlint-plugin-camunda": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/bpmnlint-plugin-camunda/-/bpmnlint-plugin-camunda-0.4.2.tgz", + "integrity": "sha512-gp/m8/+HNSw9Gi6lVMe2SgkXAL/KHRlBe5f3aDqsVx7IVR/y7pQWiknT0VIVaLCLZmox3BBQ0WK3GwtQrI9lug==", + "dev": true, + "dependencies": { + "bpmnlint-utils": "^1.0.2" + } + }, + "node_modules/bpmnlint-plugin-custom": { + "resolved": "bpmnlint-plugin-custom", + "link": true + }, + "node_modules/bpmnlint-utils": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bpmnlint-utils/-/bpmnlint-utils-1.1.1.tgz", + "integrity": "sha512-Afdb77FmwNB3INyUfbzXW40yY+mc0qYU3SgDFeI4zTtduiVomOlfqoXiEaUIGI8Hyh7aVYpmf3O97P2w7x0DYQ==", + "dev": true + }, + "node_modules/bpmnlint/node_modules/bpmn-moddle": { + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/bpmn-moddle/-/bpmn-moddle-6.0.7.tgz", + "integrity": "sha512-MD649c7/I7+AKl3OGLs8ed8guzKuIRIJhOvLeVBSyCHtd41iB8ZRi+NL2UeC8pNgpqcjMsZG3ye++x3fh6MQ+g==", + "dev": true, + "dependencies": { + "min-dash": "^3.0.0", + "moddle": "^5.0.1", + "moddle-xml": "^8.0.8" + } + }, + "node_modules/bpmnlint/node_modules/min-dash": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/min-dash/-/min-dash-3.8.1.tgz", + "integrity": "sha512-evumdlmIlg9mbRVPbC4F5FuRhNmcMS5pvuBUbqb1G9v09Ro0ImPEgz5n3khir83lFok1inKqVDjnKEg3GpDxQg==", + "dev": true + }, + "node_modules/bpmnlint/node_modules/moddle": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/moddle/-/moddle-5.0.4.tgz", + "integrity": "sha512-Kjb+hjuzO+YlojNGxEUXvdhLYTHTtAABDlDcJTtTcn5MbJF9Zkv4I1Fyvp3Ypmfgg1EfHDZ3PsCQTuML9JD6wg==", + "dev": true, + "dependencies": { + "min-dash": "^3.0.0" + } + }, + "node_modules/bpmnlint/node_modules/moddle-xml": { + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/moddle-xml/-/moddle-xml-8.0.8.tgz", + "integrity": "sha512-JzW8wUCH7Qze7eh0T8A1exi7QJg6hRgq+uw8goHNP5Q7pWTGrLj83S+NgA/94M2I0JmqnK9hw3sCbyiKVOjc4Q==", + "dev": true, + "dependencies": { + "min-dash": "^3.0.0", + "moddle": "^5.0.1", + "saxen": "^8.1.2" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -4097,6 +4287,38 @@ "node": ">=6" } }, + "node_modules/camelcase-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", + "integrity": "sha512-Ej37YKYbFUI8QiYlvj9YHb6/Z60dZyPJW0Cs8sFilMbd2lP0bw3ylAq9yJkK4lcTA2dID5fG8LjmJYbO7kWb7Q==", + "dev": true, + "dependencies": { + "camelcase": "^4.1.0", + "map-obj": "^2.0.0", + "quick-lru": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/camelcase-keys/node_modules/camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/camelcase-keys/node_modules/quick-lru": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", + "integrity": "sha512-tRS7sTgyxMXtLum8L65daJnHUhfDUgboRdcWW2bR9vBfrj2+O5HSMbQOJfJJjIVSPFqbBCF37FpwWXGitDc5tA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/camunda-bpmn-js-behaviors": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/camunda-bpmn-js-behaviors/-/camunda-bpmn-js-behaviors-0.5.0.tgz", @@ -4358,6 +4580,22 @@ "webpack": ">=4.0.0 <6.0.0" } }, + "node_modules/cli-table": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.11.tgz", + "integrity": "sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==", + "dev": true, + "dependencies": { + "colors": "1.0.3" + }, + "engines": { + "node": ">= 0.2.0" + } + }, + "node_modules/client": { + "resolved": "client", + "link": true + }, "node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -4422,6 +4660,15 @@ "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", "dev": true }, + "node_modules/colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, "node_modules/combine-source-map": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", @@ -5254,6 +5501,12 @@ "url": "https://github.com/sponsors/fb55" } }, + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "dev": true + }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -5283,6 +5536,18 @@ "node": ">= 0.12.0" } }, + "node_modules/currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==", + "dev": true, + "dependencies": { + "array-find-index": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/custom-event": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", @@ -5347,6 +5612,40 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/decamelize-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", + "dev": true, + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decamelize-keys/node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/decode-uri-component": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", @@ -7717,6 +8016,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/globalyzer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", + "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", + "dev": true + }, "node_modules/globby": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", @@ -7749,6 +8054,12 @@ "node": ">=4" } }, + "node_modules/globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "dev": true + }, "node_modules/gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", @@ -8014,6 +8325,12 @@ "node": ">=0.10.0" } }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, "node_modules/hpack.js": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", @@ -8404,6 +8721,15 @@ "node": ">=0.8.19" } }, + "node_modules/indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/indexof": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", @@ -9098,6 +9424,12 @@ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -9540,6 +9872,43 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, + "node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", @@ -9830,6 +10199,19 @@ "loose-envify": "cli.js" } }, + "node_modules/loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==", + "dev": true, + "dependencies": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/loupe": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", @@ -9899,6 +10281,15 @@ "dev": true, "peer": true }, + "node_modules/map-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", + "integrity": "sha512-TzQSV2DiMYgoF5RycneKVUzIa9bQsj/B3tTgsE3dOGqlzHnGIDaC7XBE7grnA+8kZPnfqSGFe95VHc2oc0VFUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/matcher": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", @@ -9925,6 +10316,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/matches-selector": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/matches-selector/-/matches-selector-1.2.0.tgz", + "integrity": "sha512-c4vLwYWyl+Ji+U43eU/G5FwxWd4ZH0ePUsFs5y0uwD9HUEFBXUQ1zUUan+78IpRD+y4pUfG0nAzNM292K7ItvA==", + "dev": true + }, "node_modules/md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -9957,6 +10354,44 @@ "node": ">= 4.0.0" } }, + "node_modules/meow": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-5.0.0.tgz", + "integrity": "sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig==", + "dev": true, + "dependencies": { + "camelcase-keys": "^4.0.0", + "decamelize-keys": "^1.0.0", + "loud-rejection": "^1.0.0", + "minimist-options": "^3.0.1", + "normalize-package-data": "^2.3.4", + "read-pkg-up": "^3.0.0", + "redent": "^2.0.0", + "trim-newlines": "^2.0.0", + "yargs-parser": "^10.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/meow/node_modules/camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/meow/node_modules/yargs-parser": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "dev": true, + "dependencies": { + "camelcase": "^4.1.0" + } + }, "node_modules/merge": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/merge/-/merge-2.1.1.tgz", @@ -10139,6 +10574,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/minimist-options": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz", + "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", + "dev": true, + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0" + }, + "engines": { + "node": ">= 4" + } + }, "node_modules/mississippi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", @@ -10667,17 +11115,38 @@ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "node_modules/normalize-range": { - "version": "0.1.2", + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", "engines": { @@ -11357,6 +11826,15 @@ "node": ">=8" } }, + "node_modules/pluralize": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", + "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/postcss": { "version": "8.4.21", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", @@ -12161,6 +12639,79 @@ "readable-stream": "^2.0.2" } }, + "node_modules/read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", + "dev": true, + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", + "dev": true, + "dependencies": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", @@ -12212,6 +12763,19 @@ "node": ">= 10.13.0" } }, + "node_modules/redent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", + "integrity": "sha512-XNwrTx77JQCEMXTeb8movBKuK75MgH0RZkujNuDKCezemx/voapl9i2gCSi8WWm8+ox5ycJi1gxF22fR7c0Ciw==", + "dev": true, + "dependencies": { + "indent-string": "^3.0.0", + "strip-indent": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -13172,6 +13736,38 @@ "deprecated": "See https://github.com/lydell/source-map-url#deprecated", "dev": true }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "dev": true + }, "node_modules/spdy": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", @@ -13472,6 +14068,15 @@ "node": ">=8" } }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/strip-css-comments": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-css-comments/-/strip-css-comments-3.0.0.tgz", @@ -13493,6 +14098,15 @@ "node": ">=6" } }, + "node_modules/strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -13735,6 +14349,16 @@ "node": ">=0.6.0" } }, + "node_modules/tiny-glob": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", + "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", + "dev": true, + "dependencies": { + "globalyzer": "0.1.0", + "globrex": "^0.1.2" + } + }, "node_modules/tiny-svg": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/tiny-svg/-/tiny-svg-3.0.1.tgz", @@ -13807,6 +14431,15 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, + "node_modules/trim-newlines": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", + "integrity": "sha512-MTBWv3jhVjTU7XR3IQHllbiJs8sc75a80OEhB6or/q7pLTWgQ0bMGQXXYQSrSuXe6WiKWDZ5txXY5P59a/coVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/ts-node": { "version": "10.9.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", @@ -14313,6 +14946,16 @@ "dev": true, "peer": true }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -17645,6 +18288,12 @@ "is-array-buffer": "^3.0.1" } }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", + "dev": true + }, "array-flatten": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", @@ -17734,6 +18383,12 @@ "get-intrinsic": "^1.1.3" } }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true + }, "asn1.js": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", @@ -18010,6 +18665,79 @@ "tiny-svg": "^3.0.0" } }, + "bpmn-js-bpmnlint": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/bpmn-js-bpmnlint/-/bpmn-js-bpmnlint-0.14.0.tgz", + "integrity": "sha512-Vfs2WJwqsIOkbSRft68IIpekQwcOKSn9I3sTtaA7ejszwS5ZGng8R7e27vc0pmZpM5A+8BnuoVIHG+rcStgApA==", + "dev": true, + "requires": { + "diagram-js": "^5.0.2", + "min-dash": "^3.5.2", + "min-dom": "^3.1.1" + }, + "dependencies": { + "component-event": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/component-event/-/component-event-0.1.4.tgz", + "integrity": "sha512-GMwOG8MnUHP1l8DZx1ztFO0SJTFnIzZnBDkXAj8RM2ntV2A6ALlDxgbMY1Fvxlg6WPQ+5IM/a6vg4PEYbjg/Rw==", + "dev": true + }, + "diagram-js": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/diagram-js/-/diagram-js-5.1.1.tgz", + "integrity": "sha512-SLxHOfEDLBC7LBjQFmXyvQXt4P5yZYFnTvhsCZZtJyQCadrVs71cUlchMmH+kUS/zaga/BkPWFbnV1d+4MsF8A==", + "dev": true, + "requires": { + "css.escape": "^1.5.1", + "didi": "^4.0.0", + "hammerjs": "^2.0.1", + "inherits": "^2.0.1", + "min-dash": "^3.5.0", + "min-dom": "^3.0.0", + "object-refs": "^0.3.0", + "path-intersection": "^1.0.2", + "tiny-svg": "^2.2.1" + } + }, + "didi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/didi/-/didi-4.0.0.tgz", + "integrity": "sha512-AzMElh8mCHOPWPCWfGjoJRla31fMXUT6+287W5ef3IPmtuBcyG9+MkFS7uPP6v3t2Cl086KwWfRB9mESa0OsHQ==", + "dev": true + }, + "min-dash": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/min-dash/-/min-dash-3.8.1.tgz", + "integrity": "sha512-evumdlmIlg9mbRVPbC4F5FuRhNmcMS5pvuBUbqb1G9v09Ro0ImPEgz5n3khir83lFok1inKqVDjnKEg3GpDxQg==", + "dev": true + }, + "min-dom": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/min-dom/-/min-dom-3.2.1.tgz", + "integrity": "sha512-v6YCmnDzxk4rRJntWTUiwggLupPw/8ZSRqUq0PDaBwVZEO/wYzCH4SKVBV+KkEvf3u0XaWHly5JEosPtqRATZA==", + "dev": true, + "requires": { + "component-event": "^0.1.4", + "domify": "^1.3.1", + "indexof": "0.0.1", + "matches-selector": "^1.2.0", + "min-dash": "^3.8.1" + } + }, + "path-intersection": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/path-intersection/-/path-intersection-1.1.1.tgz", + "integrity": "sha512-EdeUuXCm0+tb/2gv8PmRhd9fYYOtbDeTYkwCnzkBuAEjevEZi2mWUi1DVFF5nqSObYsxKcchvKUhnRULWOFreQ==", + "dev": true + }, + "tiny-svg": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/tiny-svg/-/tiny-svg-2.2.4.tgz", + "integrity": "sha512-NOi39lBknf4UdDEahNkbEAJnzhu1ZcN2j75IS2vLRmIhsfxdZpTChfLKBcN1ShplVmPIXJAIafk6YY5/Aa80lQ==", + "dev": true + } + } + }, "bpmn-js-cli": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/bpmn-js-cli/-/bpmn-js-cli-2.3.0.tgz", @@ -18051,6 +18779,85 @@ "moddle-xml": "^10.0.0" } }, + "bpmnlint": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/bpmnlint/-/bpmnlint-6.5.0.tgz", + "integrity": "sha512-plF2kcTqcQ7gyusnR9gQhDd04Ld/rJ0b9k8HGa5Bg3m88w8hf6O2AJ5JHpITttncJzNNxFvNXzYmJVOhIgqB2g==", + "dev": true, + "requires": { + "bpmn-moddle": "^6.0.0", + "bpmnlint-utils": "^1.0.1", + "chalk": "^2.4.2", + "cli-table": "^0.3.1", + "meow": "^5.0.0", + "pluralize": "^7.0.0", + "tiny-glob": "^0.2.8" + }, + "dependencies": { + "bpmn-moddle": { + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/bpmn-moddle/-/bpmn-moddle-6.0.7.tgz", + "integrity": "sha512-MD649c7/I7+AKl3OGLs8ed8guzKuIRIJhOvLeVBSyCHtd41iB8ZRi+NL2UeC8pNgpqcjMsZG3ye++x3fh6MQ+g==", + "dev": true, + "requires": { + "min-dash": "^3.0.0", + "moddle": "^5.0.1", + "moddle-xml": "^8.0.8" + } + }, + "min-dash": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/min-dash/-/min-dash-3.8.1.tgz", + "integrity": "sha512-evumdlmIlg9mbRVPbC4F5FuRhNmcMS5pvuBUbqb1G9v09Ro0ImPEgz5n3khir83lFok1inKqVDjnKEg3GpDxQg==", + "dev": true + }, + "moddle": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/moddle/-/moddle-5.0.4.tgz", + "integrity": "sha512-Kjb+hjuzO+YlojNGxEUXvdhLYTHTtAABDlDcJTtTcn5MbJF9Zkv4I1Fyvp3Ypmfgg1EfHDZ3PsCQTuML9JD6wg==", + "dev": true, + "requires": { + "min-dash": "^3.0.0" + } + }, + "moddle-xml": { + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/moddle-xml/-/moddle-xml-8.0.8.tgz", + "integrity": "sha512-JzW8wUCH7Qze7eh0T8A1exi7QJg6hRgq+uw8goHNP5Q7pWTGrLj83S+NgA/94M2I0JmqnK9hw3sCbyiKVOjc4Q==", + "dev": true, + "requires": { + "min-dash": "^3.0.0", + "moddle": "^5.0.1", + "saxen": "^8.1.2" + } + } + } + }, + "bpmnlint-loader": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/bpmnlint-loader/-/bpmnlint-loader-0.1.6.tgz", + "integrity": "sha512-/XmvV70NT1uTpjtC6C5bTJvWFR6v5RFxLzUCuP0ScKKlTf6me9rYgV0sAXdbW2011vFSFfD8DJHTi+D3gnSUww==", + "dev": true, + "requires": {} + }, + "bpmnlint-plugin-camunda": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/bpmnlint-plugin-camunda/-/bpmnlint-plugin-camunda-0.4.2.tgz", + "integrity": "sha512-gp/m8/+HNSw9Gi6lVMe2SgkXAL/KHRlBe5f3aDqsVx7IVR/y7pQWiknT0VIVaLCLZmox3BBQ0WK3GwtQrI9lug==", + "dev": true, + "requires": { + "bpmnlint-utils": "^1.0.2" + } + }, + "bpmnlint-plugin-custom": { + "version": "file:bpmnlint-plugin-custom" + }, + "bpmnlint-utils": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bpmnlint-utils/-/bpmnlint-utils-1.1.1.tgz", + "integrity": "sha512-Afdb77FmwNB3INyUfbzXW40yY+mc0qYU3SgDFeI4zTtduiVomOlfqoXiEaUIGI8Hyh7aVYpmf3O97P2w7x0DYQ==", + "dev": true + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -18455,6 +19262,31 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, + "camelcase-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", + "integrity": "sha512-Ej37YKYbFUI8QiYlvj9YHb6/Z60dZyPJW0Cs8sFilMbd2lP0bw3ylAq9yJkK4lcTA2dID5fG8LjmJYbO7kWb7Q==", + "dev": true, + "requires": { + "camelcase": "^4.1.0", + "map-obj": "^2.0.0", + "quick-lru": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==", + "dev": true + }, + "quick-lru": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", + "integrity": "sha512-tRS7sTgyxMXtLum8L65daJnHUhfDUgboRdcWW2bR9vBfrj2+O5HSMbQOJfJJjIVSPFqbBCF37FpwWXGitDc5tA==", + "dev": true + } + } + }, "camunda-bpmn-js-behaviors": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/camunda-bpmn-js-behaviors/-/camunda-bpmn-js-behaviors-0.5.0.tgz", @@ -18644,6 +19476,18 @@ "del": "^4.1.1" } }, + "cli-table": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.11.tgz", + "integrity": "sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==", + "dev": true, + "requires": { + "colors": "1.0.3" + } + }, + "client": { + "version": "file:client" + }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -18699,6 +19543,12 @@ "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", "dev": true }, + "colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==", + "dev": true + }, "combine-source-map": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", @@ -19399,6 +20249,12 @@ "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "dev": true }, + "css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "dev": true + }, "cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -19419,6 +20275,15 @@ "through2": "^2.0.0" } }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==", + "dev": true, + "requires": { + "array-find-index": "^1.0.1" + } + }, "custom-event": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", @@ -19466,6 +20331,30 @@ "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true }, + "decamelize-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", + "dev": true, + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true + } + } + }, "decode-uri-component": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", @@ -21317,6 +22206,12 @@ "define-properties": "^1.1.3" } }, + "globalyzer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", + "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", + "dev": true + }, "globby": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", @@ -21345,6 +22240,12 @@ } } }, + "globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "dev": true + }, "gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", @@ -21551,6 +22452,12 @@ "parse-passwd": "^1.0.0" } }, + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, "hpack.js": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", @@ -21834,6 +22741,12 @@ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true }, + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==", + "dev": true + }, "indexof": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", @@ -22336,6 +23249,12 @@ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, "json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -22690,6 +23609,36 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true + } + } + }, "loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", @@ -22939,6 +23888,16 @@ "js-tokens": "^3.0.0 || ^4.0.0" } }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==", + "dev": true, + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, "loupe": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", @@ -22993,6 +23952,12 @@ "dev": true, "peer": true }, + "map-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", + "integrity": "sha512-TzQSV2DiMYgoF5RycneKVUzIa9bQsj/B3tTgsE3dOGqlzHnGIDaC7XBE7grnA+8kZPnfqSGFe95VHc2oc0VFUQ==", + "dev": true + }, "matcher": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", @@ -23012,6 +23977,12 @@ } } }, + "matches-selector": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/matches-selector/-/matches-selector-1.2.0.tgz", + "integrity": "sha512-c4vLwYWyl+Ji+U43eU/G5FwxWd4ZH0ePUsFs5y0uwD9HUEFBXUQ1zUUan+78IpRD+y4pUfG0nAzNM292K7ItvA==", + "dev": true + }, "md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -23038,6 +24009,40 @@ "fs-monkey": "^1.0.3" } }, + "meow": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-5.0.0.tgz", + "integrity": "sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig==", + "dev": true, + "requires": { + "camelcase-keys": "^4.0.0", + "decamelize-keys": "^1.0.0", + "loud-rejection": "^1.0.0", + "minimist-options": "^3.0.1", + "normalize-package-data": "^2.3.4", + "read-pkg-up": "^3.0.0", + "redent": "^2.0.0", + "trim-newlines": "^2.0.0", + "yargs-parser": "^10.0.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==", + "dev": true + }, + "yargs-parser": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, "merge": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/merge/-/merge-2.1.1.tgz", @@ -23176,6 +24181,16 @@ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true }, + "minimist-options": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz", + "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0" + } + }, "mississippi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", @@ -23591,6 +24606,26 @@ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -24113,6 +25148,12 @@ "find-up": "^4.0.0" } }, + "pluralize": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", + "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", + "dev": true + }, "postcss": { "version": "8.4.21", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", @@ -24711,6 +25752,63 @@ "readable-stream": "^2.0.2" } }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true + } + } + }, "readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", @@ -24758,6 +25856,16 @@ "resolve": "^1.20.0" } }, + "redent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", + "integrity": "sha512-XNwrTx77JQCEMXTeb8movBKuK75MgH0RZkujNuDKCezemx/voapl9i2gCSi8WWm8+ox5ycJi1gxF22fR7c0Ciw==", + "dev": true, + "requires": { + "indent-string": "^3.0.0", + "strip-indent": "^2.0.0" + } + }, "regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -25517,6 +26625,38 @@ "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", "dev": true }, + "spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "dev": true + }, "spdy": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", @@ -25782,6 +26922,12 @@ "ansi-regex": "^5.0.1" } }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true + }, "strip-css-comments": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-css-comments/-/strip-css-comments-3.0.0.tgz", @@ -25797,6 +26943,12 @@ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true }, + "strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==", + "dev": true + }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -25965,6 +27117,16 @@ "process": "~0.11.0" } }, + "tiny-glob": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", + "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", + "dev": true, + "requires": { + "globalyzer": "0.1.0", + "globrex": "^0.1.2" + } + }, "tiny-svg": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/tiny-svg/-/tiny-svg-3.0.1.tgz", @@ -26021,6 +27183,12 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, + "trim-newlines": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", + "integrity": "sha512-MTBWv3jhVjTU7XR3IQHllbiJs8sc75a80OEhB6or/q7pLTWgQ0bMGQXXYQSrSuXe6WiKWDZ5txXY5P59a/coVA==", + "dev": true + }, "ts-node": { "version": "10.9.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", @@ -26382,6 +27550,16 @@ "dev": true, "peer": true }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", From 1ad15b6435d3d20a32b1d00878c7b57699ea63d1 Mon Sep 17 00:00:00 2001 From: LaviniaStiliadou Date: Sat, 24 Jun 2023 00:42:06 +0200 Subject: [PATCH 05/15] set isExpanded of nested subprocess --- .../replacement/QuantMETransformator.js | 44 ++++++++++++++++--- 1 file changed, 38 insertions(+), 6 deletions(-) diff --git a/components/bpmn-q/modeler-component/extensions/quantme/replacement/QuantMETransformator.js b/components/bpmn-q/modeler-component/extensions/quantme/replacement/QuantMETransformator.js index aa7390df..d7554a32 100644 --- a/components/bpmn-q/modeler-component/extensions/quantme/replacement/QuantMETransformator.js +++ b/components/bpmn-q/modeler-component/extensions/quantme/replacement/QuantMETransformator.js @@ -130,7 +130,7 @@ export async function startQuantmeReplacementProcess(xml, currentQRMs, endpointC // Remove xmlns: prefix from the key const bpmnPrefix = foundBpmnPair[0].replace(/^xmlns:/, ''); - const diagramPrefix = foundDiagramPair[0].replace(/^xmlns:/, ''); + const diagramPrefix = foundDiagramPair[0].replace(/^xmlns:/, ''); // Get all BPMNDiagram elements const definitionsElement = xmlDoc[bpmnPrefix + ':definitions']; @@ -234,16 +234,18 @@ async function replaceByFragment(definitions, task, parent, replacement, modeler const bpmndiShapes = xmlDoc.getElementsByTagNameNS(bpmndiNamespace, 'BPMNShape'); let isExpanded = null; - console.log(bpmndiShapes) for (let i = 0; i < bpmndiShapes.length; i++) { const bpmnElement = bpmndiShapes[i].getAttribute('bpmnElement'); - console.log(bpmnElement) if (bpmnElement === replacementElement.id) { - console.log(replacementElement) isExpanded = bpmndiShapes[i].getAttribute('isExpanded'); - console.log(isExpanded); - console.log(bpmnElement) replacementElement.isExpanded = isExpanded; + + // check the children of each replacementElement + for (let j = 0; j < replacementElement.flowElements.length; j++) { + if (['bpmn:SubProcess', 'quantme:QuantumHardwareSelectionSubprocess', 'quantme:CircuitCuttingSubprocess'].includes(replacementElement.flowElements[j].$type)) { + isChildExpanded(replacementElement.flowElements[j], bpmndiShapes); + } + } break; } } @@ -258,3 +260,33 @@ async function replaceByFragment(definitions, task, parent, replacement, modeler return result['success']; } + +/** + * Recursively checks the children of an element and updates the isExpanded attribute. + * @param {*} element + * @param {*} bpmndiShapes the diagram elements + */ +function isChildExpanded(element, bpmndiShapes) { + if (element.flowElements !== undefined) { + for (let i = 0; i < element.flowElements.length; i++) { + const child = element.flowElements[i]; + if (['bpmn:SubProcess', 'quantme:QuantumHardwareSelectionSubprocess', 'quantme:CircuitCuttingSubprocess'].includes(child.$type)) { + if (isChildExpanded(child, bpmndiShapes)) { + return true; + } + } + } + } + + for (let i = 0; i < bpmndiShapes.length; i++) { + const bpmnElement = bpmndiShapes[i].getAttribute('bpmnElement'); + if (bpmnElement === element.id && ['bpmn:SubProcess', 'quantme:QuantumHardwareSelectionSubprocess', 'quantme:CircuitCuttingSubprocess'].includes(element.$type)) { + let isExpanded = bpmndiShapes[i].getAttribute('isExpanded'); + element.isExpanded = isExpanded; + return true; + + } + } + + return false; +} \ No newline at end of file From 5d2b5359a933e8b3e91789c63e8c62a2139caeee Mon Sep 17 00:00:00 2001 From: LaviniaStiliadou Date: Sat, 24 Jun 2023 02:59:42 +0200 Subject: [PATCH 06/15] remove isExpand attribute also from nested subprocess, --- .../replacement/QuantMETransformator.js | 80 ++++++++++++++----- 1 file changed, 60 insertions(+), 20 deletions(-) diff --git a/components/bpmn-q/modeler-component/extensions/quantme/replacement/QuantMETransformator.js b/components/bpmn-q/modeler-component/extensions/quantme/replacement/QuantMETransformator.js index d7554a32..32e1daa7 100644 --- a/components/bpmn-q/modeler-component/extensions/quantme/replacement/QuantMETransformator.js +++ b/components/bpmn-q/modeler-component/extensions/quantme/replacement/QuantMETransformator.js @@ -120,22 +120,28 @@ export async function startQuantmeReplacementProcess(xml, currentQRMs, endpointC let xmlDoc = xmlParser.xml2js(updated_xml, { compact: true }); const bpmnNamespace = 'http://www.omg.org/spec/BPMN/20100524/MODEL'; const diagramNamespace = 'http://www.omg.org/spec/BPMN/20100524/DI'; + const quantmeNamespace = 'https://github.com/UST-QuAntiL/QuantME-Quantum4BPMN'; // retrieve the namespace prefixes from the rootElement let prefixes = Object.entries(rootElement.$parent.$attrs); const foundBpmnPair = prefixes.find(pair => pair[1] === bpmnNamespace); const foundDiagramPair = prefixes.find(pair => pair[1] === diagramNamespace); + const foundQuantMEPair = prefixes.find(pair => pair[1] === quantmeNamespace); let modifiedXmlString = updated_xml; - if (foundBpmnPair && foundDiagramPair) { + if (foundBpmnPair && foundDiagramPair && foundQuantMEPair) { // Remove xmlns: prefix from the key const bpmnPrefix = foundBpmnPair[0].replace(/^xmlns:/, ''); const diagramPrefix = foundDiagramPair[0].replace(/^xmlns:/, ''); + const quantmePrefix = foundQuantMEPair[0].replace(/^xmlns:/, ''); // Get all BPMNDiagram elements const definitionsElement = xmlDoc[bpmnPrefix + ':definitions']; + let process = definitionsElement[bpmnPrefix + ':process']; - let subprocesses = definitionsElement[bpmnPrefix + ':process'][bpmnPrefix + ':subProcess']; + let subprocesses = process[bpmnPrefix + ':subProcess']; + let quantmeCuttingSubprocess = process[quantmePrefix + 'circuitCuttingSubprocess']; + let quantmeHardwareSelectionSubprocess = process[quantmePrefix + 'quantumHardwareSelectionSubprocess']; let bpmnDiagrams = definitionsElement[diagramPrefix + ':BPMNDiagram']; // Remove all bpmndi:BPMNDiagram elements except the first one @@ -145,13 +151,9 @@ export async function startQuantmeReplacementProcess(xml, currentQRMs, endpointC } } - // Remove the isExpanded attribute from the shapes - if (Array.isArray(subprocesses)) { - for (let i = 0; i < subprocesses.length; i++) { - let subprocessAttributes = subprocesses[i]['_attributes']; - delete subprocessAttributes.isExpanded; - } - } + process[bpmnPrefix + ':subProcess'] = removeIsExpandedAttribute(subprocesses, bpmnPrefix, quantmePrefix); + process[quantmePrefix + ':quantumHardwareSelectionSubprocess'] = removeIsExpandedAttribute(quantmeHardwareSelectionSubprocess, bpmnPrefix, quantmePrefix); + process[quantmePrefix + ':circuitCuttingSubprocess'] = removeIsExpandedAttribute(quantmeCuttingSubprocess, bpmnPrefix, quantmePrefix); // Serialize the modified JavaScript object back to XML string modifiedXmlString = xmlParser.js2xml(xmlDoc, { compact: true }); @@ -210,8 +212,6 @@ async function replaceByFragment(definitions, task, parent, replacement, modeler return false; } - console.log(task) - // get the root process of the replacement fragment let replacementProcess = getRootProcess(await getDefinitionsFromXml(replacement)); let replacementElement = getSingleFlowElement(replacementProcess); @@ -267,26 +267,66 @@ async function replaceByFragment(definitions, task, parent, replacement, modeler * @param {*} bpmndiShapes the diagram elements */ function isChildExpanded(element, bpmndiShapes) { + + for (let i = 0; i < bpmndiShapes.length; i++) { + const bpmnElement = bpmndiShapes[i].getAttribute('bpmnElement'); + if (bpmnElement === element.id && ['bpmn:SubProcess', 'quantme:QuantumHardwareSelectionSubprocess', 'quantme:CircuitCuttingSubprocess'].includes(element.$type)) { + let isExpanded = bpmndiShapes[i].getAttribute('isExpanded'); + if (isExpanded) { + element.isExpanded = isExpanded; + } + } + } + if (element.flowElements !== undefined) { for (let i = 0; i < element.flowElements.length; i++) { const child = element.flowElements[i]; if (['bpmn:SubProcess', 'quantme:QuantumHardwareSelectionSubprocess', 'quantme:CircuitCuttingSubprocess'].includes(child.$type)) { if (isChildExpanded(child, bpmndiShapes)) { - return true; + return true; } } } } - for (let i = 0; i < bpmndiShapes.length; i++) { - const bpmnElement = bpmndiShapes[i].getAttribute('bpmnElement'); - if (bpmnElement === element.id && ['bpmn:SubProcess', 'quantme:QuantumHardwareSelectionSubprocess', 'quantme:CircuitCuttingSubprocess'].includes(element.$type)) { - let isExpanded = bpmndiShapes[i].getAttribute('isExpanded'); - element.isExpanded = isExpanded; - return true; + return false; +} + +/** + * Recursively removes the isExpanded attribute from the bpmn shapes. + * @param {*} subprocessElements + * @param {*} bpmnPrefix + * @param {*} quantmePrefix + * @returns the updated subprocess elements + */ +function removeIsExpandedAttribute(subprocessElements, bpmnPrefix, quantmePrefix) { + if (Array.isArray(subprocessElements)) { + for (let i = 0; i < subprocessElements.length; i++) { + let subprocess = subprocessElements[i]; + + let subprocessAttributes = subprocess['_attributes']; + delete subprocessAttributes.isExpanded; + let subprocesses = subprocess[bpmnPrefix + ':subProcess']; + if (subprocesses !== undefined) { + let attributes = subprocesses['_attributes']; + delete attributes.isExpanded; + removeIsExpandedAttribute(subprocesses, bpmnPrefix, quantmePrefix); + } + let quantmeCuttingSubprocess = subprocess[quantmePrefix + ':circuitCuttingSubprocess']; + + if (quantmeCuttingSubprocess !== undefined) { + let attributes = quantmeCuttingSubprocess['_attributes']; + delete attributes.isExpanded; + removeIsExpandedAttribute(quantmeCuttingSubprocess, bpmnPrefix, quantmePrefix); + } + let quantmeHardwareSelectionSubprocess = subprocess[quantmePrefix + ':quantumHardwareSelectionSubprocess']; + if (quantmeHardwareSelectionSubprocess !== undefined) { + let attributes = quantmeHardwareSelectionSubprocess['_attributes']; + delete attributes.isExpanded; + removeIsExpandedAttribute(quantmeHardwareSelectionSubprocess, bpmnPrefix, quantmePrefix); + } } + return subprocessElements; } - - return false; } \ No newline at end of file From c2e9d56122453e3fd9260cce4ebaf8aab24778f7 Mon Sep 17 00:00:00 2001 From: LaviniaStiliadou Date: Sat, 24 Jun 2023 03:07:03 +0200 Subject: [PATCH 07/15] fix test --- .../quantme/replacement/QuantMETransformator.js | 13 +++++++++---- .../tests/quantme/quantme-transformation.spec.js | 2 +- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/components/bpmn-q/modeler-component/extensions/quantme/replacement/QuantMETransformator.js b/components/bpmn-q/modeler-component/extensions/quantme/replacement/QuantMETransformator.js index 32e1daa7..fa8ef2b3 100644 --- a/components/bpmn-q/modeler-component/extensions/quantme/replacement/QuantMETransformator.js +++ b/components/bpmn-q/modeler-component/extensions/quantme/replacement/QuantMETransformator.js @@ -151,10 +151,15 @@ export async function startQuantmeReplacementProcess(xml, currentQRMs, endpointC } } - process[bpmnPrefix + ':subProcess'] = removeIsExpandedAttribute(subprocesses, bpmnPrefix, quantmePrefix); - process[quantmePrefix + ':quantumHardwareSelectionSubprocess'] = removeIsExpandedAttribute(quantmeHardwareSelectionSubprocess, bpmnPrefix, quantmePrefix); - process[quantmePrefix + ':circuitCuttingSubprocess'] = removeIsExpandedAttribute(quantmeCuttingSubprocess, bpmnPrefix, quantmePrefix); - + if (subprocesses !== undefined) { + process[bpmnPrefix + ':subProcess'] = removeIsExpandedAttribute(subprocesses, bpmnPrefix, quantmePrefix); + } + if (quantmeHardwareSelectionSubprocess !== undefined) { + process[quantmePrefix + ':quantumHardwareSelectionSubprocess'] = removeIsExpandedAttribute(quantmeHardwareSelectionSubprocess, bpmnPrefix, quantmePrefix); + } + if (quantmeCuttingSubprocess) { + process[quantmePrefix + ':circuitCuttingSubprocess'] = removeIsExpandedAttribute(quantmeCuttingSubprocess, bpmnPrefix, quantmePrefix); + } // Serialize the modified JavaScript object back to XML string modifiedXmlString = xmlParser.js2xml(xmlDoc, { compact: true }); } diff --git a/components/bpmn-q/test/tests/quantme/quantme-transformation.spec.js b/components/bpmn-q/test/tests/quantme/quantme-transformation.spec.js index 0f6ae96c..e2de51ed 100644 --- a/components/bpmn-q/test/tests/quantme/quantme-transformation.spec.js +++ b/components/bpmn-q/test/tests/quantme/quantme-transformation.spec.js @@ -31,7 +31,7 @@ describe('Test the QuantMETransformator of the QuantME extension.', function () }); chai.expect(result.status).to.equal('transformed'); - + console.log(result.xml); // check that all extension elements are replaced chai.expect(result.xml).to.not.contain(' Date: Thu, 13 Jul 2023 14:38:16 +0200 Subject: [PATCH 08/15] remove isexpanded from nested subprocess --- .../replacement/QuantMETransformator.js | 51 ++++++++++--------- 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/components/bpmn-q/modeler-component/extensions/quantme/replacement/QuantMETransformator.js b/components/bpmn-q/modeler-component/extensions/quantme/replacement/QuantMETransformator.js index fa8ef2b3..237c6eee 100644 --- a/components/bpmn-q/modeler-component/extensions/quantme/replacement/QuantMETransformator.js +++ b/components/bpmn-q/modeler-component/extensions/quantme/replacement/QuantMETransformator.js @@ -299,39 +299,42 @@ function isChildExpanded(element, bpmndiShapes) { /** * Recursively removes the isExpanded attribute from the bpmn shapes. - * @param {*} subprocessElements - * @param {*} bpmnPrefix - * @param {*} quantmePrefix - * @returns the updated subprocess elements + * + * @param subprocessElements + * @param bpmnPrefix + * @param quantmePrefix + * @returns the modified subprocess elements */ function removeIsExpandedAttribute(subprocessElements, bpmnPrefix, quantmePrefix) { if (Array.isArray(subprocessElements)) { for (let i = 0; i < subprocessElements.length; i++) { let subprocess = subprocessElements[i]; - - let subprocessAttributes = subprocess['_attributes']; - delete subprocessAttributes.isExpanded; + deleteAttribute(subprocess, bpmnPrefix, quantmePrefix); let subprocesses = subprocess[bpmnPrefix + ':subProcess']; - if (subprocesses !== undefined) { - let attributes = subprocesses['_attributes']; - delete attributes.isExpanded; - removeIsExpandedAttribute(subprocesses, bpmnPrefix, quantmePrefix); - } + deleteAttribute(subprocesses, bpmnPrefix, quantmePrefix); let quantmeCuttingSubprocess = subprocess[quantmePrefix + ':circuitCuttingSubprocess']; - - if (quantmeCuttingSubprocess !== undefined) { - let attributes = quantmeCuttingSubprocess['_attributes']; - delete attributes.isExpanded; - removeIsExpandedAttribute(quantmeCuttingSubprocess, bpmnPrefix, quantmePrefix); - } + deleteAttribute(quantmeCuttingSubprocess, bpmnPrefix, quantmePrefix); let quantmeHardwareSelectionSubprocess = subprocess[quantmePrefix + ':quantumHardwareSelectionSubprocess']; - if (quantmeHardwareSelectionSubprocess !== undefined) { - let attributes = quantmeHardwareSelectionSubprocess['_attributes']; - delete attributes.isExpanded; - removeIsExpandedAttribute(quantmeHardwareSelectionSubprocess, bpmnPrefix, quantmePrefix); - } - + deleteAttribute(quantmeHardwareSelectionSubprocess, bpmnPrefix, quantmePrefix); } return subprocessElements; + } else { + let subprocesses = subprocessElements[bpmnPrefix + ':subProcess']; + deleteAttribute(subprocesses, bpmnPrefix, quantmePrefix); + let quantmeCuttingSubprocess = subprocessElements[quantmePrefix + ':circuitCuttingSubprocess']; + deleteAttribute(quantmeCuttingSubprocess, bpmnPrefix, quantmePrefix); + let quantmeHardwareSelectionSubprocess = subprocessElements[quantmePrefix + ':quantumHardwareSelectionSubprocess']; + deleteAttribute(quantmeHardwareSelectionSubprocess, bpmnPrefix, quantmePrefix); + return subprocessElements; + } +} + +function deleteAttribute(element, bpmnPrefix, quantmePrefix) { + if (element !== undefined) { + let attributes = element['_attributes']; + if (attributes !== undefined) { + delete attributes.isExpanded; + } + removeIsExpandedAttribute(element, bpmnPrefix, quantmePrefix); } } \ No newline at end of file From 42c954fe005b9bfac9f3602d1f8c882e752cb6c6 Mon Sep 17 00:00:00 2001 From: LaviniaStiliadou Date: Sun, 23 Jul 2023 17:23:47 +0200 Subject: [PATCH 09/15] fix collapsed subprocess --- .../replacement/QuantMETransformator.js | 37 +++++- .../test/tests/helpers/DiagramHelper.js | 1 + .../quantme/quantme-transformation.spec.js | 125 +++++++++++++++--- 3 files changed, 140 insertions(+), 23 deletions(-) diff --git a/components/bpmn-q/modeler-component/extensions/quantme/replacement/QuantMETransformator.js b/components/bpmn-q/modeler-component/extensions/quantme/replacement/QuantMETransformator.js index 237c6eee..a17c1d2f 100644 --- a/components/bpmn-q/modeler-component/extensions/quantme/replacement/QuantMETransformator.js +++ b/components/bpmn-q/modeler-component/extensions/quantme/replacement/QuantMETransformator.js @@ -144,10 +144,37 @@ export async function startQuantmeReplacementProcess(xml, currentQRMs, endpointC let quantmeHardwareSelectionSubprocess = process[quantmePrefix + 'quantumHardwareSelectionSubprocess']; let bpmnDiagrams = definitionsElement[diagramPrefix + ':BPMNDiagram']; - // Remove all bpmndi:BPMNDiagram elements except the first one + let subprocessBpmnElement = []; + + // remove additional planes & extract bpmnElement + for (let i = 0; i < bpmnDiagrams.length; i++) { + let bpmnPlane = JSON.parse(JSON.stringify(bpmnDiagrams[i])); + subprocessBpmnElement.push(bpmnPlane['bpmndi:BPMNPlane']['_attributes']['bpmnElement']); + } + + let shapes = JSON.parse(JSON.stringify(bpmnDiagrams[0]['bpmndi:BPMNPlane']))['bpmndi:BPMNShape']; + for (let i = 0; i < shapes.length; i++) { + let shape = shapes[i]; + let bpmnShape = shape._attributes.bpmnElement; + let height = bpmnDiagrams[0]['bpmndi:BPMNPlane']['bpmndi:BPMNShape'][i]['dc:Bounds']['_attributes'].height; + if (height === 10 || height === '10') { + bpmnDiagrams[0]['bpmndi:BPMNPlane']['bpmndi:BPMNShape'][i]['dc:Bounds']['_attributes'].height = 80; + bpmnDiagrams[0]['bpmndi:BPMNPlane']['bpmndi:BPMNShape'][i]['dc:Bounds']['_attributes'].width = 100; + } + } + + // Remove all bpmndi:BPMNDiagram elements which do not contain bpmn shapes if (Array.isArray(bpmnDiagrams)) { if (bpmnDiagrams.length > 1) { - xmlDoc[bpmnPrefix + ':definitions'][diagramPrefix + ':BPMNDiagram'] = bpmnDiagrams.slice(0, 1); + + // extract the diagrams with shapes + let diagram = []; + for (let i = 0; i < bpmnDiagrams.length; i++) { + if (bpmnDiagrams[i]['bpmndi:BPMNPlane']['bpmndi:BPMNShape'] !== undefined) { + diagram.push(bpmnDiagrams[i]); + } + } + xmlDoc[bpmnPrefix + ':definitions'][diagramPrefix + ':BPMNDiagram'] = diagram; } } @@ -160,12 +187,12 @@ export async function startQuantmeReplacementProcess(xml, currentQRMs, endpointC if (quantmeCuttingSubprocess) { process[quantmePrefix + ':circuitCuttingSubprocess'] = removeIsExpandedAttribute(quantmeCuttingSubprocess, bpmnPrefix, quantmePrefix); } + // Serialize the modified JavaScript object back to XML string modifiedXmlString = xmlParser.js2xml(xmlDoc, { compact: true }); } - return { status: 'transformed', xml: modifiedXmlString }; } @@ -272,9 +299,9 @@ async function replaceByFragment(definitions, task, parent, replacement, modeler * @param {*} bpmndiShapes the diagram elements */ function isChildExpanded(element, bpmndiShapes) { - for (let i = 0; i < bpmndiShapes.length; i++) { const bpmnElement = bpmndiShapes[i].getAttribute('bpmnElement'); + if (bpmnElement === element.id && ['bpmn:SubProcess', 'quantme:QuantumHardwareSelectionSubprocess', 'quantme:CircuitCuttingSubprocess'].includes(element.$type)) { let isExpanded = bpmndiShapes[i].getAttribute('isExpanded'); if (isExpanded) { @@ -337,4 +364,4 @@ function deleteAttribute(element, bpmnPrefix, quantmePrefix) { } removeIsExpandedAttribute(element, bpmnPrefix, quantmePrefix); } -} \ No newline at end of file +} diff --git a/components/bpmn-q/test/tests/helpers/DiagramHelper.js b/components/bpmn-q/test/tests/helpers/DiagramHelper.js index 0cb1845e..4a6b5755 100644 --- a/components/bpmn-q/test/tests/helpers/DiagramHelper.js +++ b/components/bpmn-q/test/tests/helpers/DiagramHelper.js @@ -286,4 +286,5 @@ export const validQuantMEDiagram = ' ]*>/g; + const matches = xmlString.match(regexPattern); + + + let expanded = []; + + // Regular expression pattern to extract bpmndi:BPMNShape elements + const shapeRegexPattern = /]*>/g; + + // Regular expression pattern to extract isExpanded attribute value + const isExpandedRegexPattern = /isExpanded="([^"]+)"/; + + // Extract the bpmndi:BPMNShape elements using the regular expression + const shapeMatches = xmlString.match(shapeRegexPattern); + + // Loop through the shape matches and extract the isExpanded attribute + for (let i = 0; i < shapeMatches.length; i++) { + const shapeMatch = shapeMatches[i]; + + // Extract the bpmnElement attribute value + const bpmnElementMatch = shapeMatch.match(/bpmnElement="([^"]+)"/); + if (bpmnElementMatch && bpmnElementMatch.length > 1) { + const bpmnElement = bpmnElementMatch[1]; + + // Extract the isExpanded attribute value + const isExpandedMatch = shapeMatch.match(isExpandedRegexPattern); + let positionCircuitCutting = xmlString.search('circuitCuttingSubprocess id="' + bpmnElement + '"'); + let positionSubProcess = xmlString.search('subProcess id="' + bpmnElement + '"'); + + if (positionCircuitCutting > -1 || positionSubProcess > -1) { + if (isExpandedMatch && isExpandedMatch.length > 1) { + const isExpanded = isExpandedMatch[1]; + + if (isExpanded !== undefined) { + expanded.push(isExpanded); + } + } else { + expanded.push('false'); + } + } + } + } + return expanded; +} \ No newline at end of file From b73fee4addf4ae509395b9950fdadcc7bb41cb68 Mon Sep 17 00:00:00 2001 From: LaviniaStiliadou Date: Tue, 25 Jul 2023 14:55:29 +0200 Subject: [PATCH 10/15] change repo for maxcut qrm --- .../test/tests/quantme/quantme-transformation.spec.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/components/bpmn-q/test/tests/quantme/quantme-transformation.spec.js b/components/bpmn-q/test/tests/quantme/quantme-transformation.spec.js index da7be934..34e34da5 100644 --- a/components/bpmn-q/test/tests/quantme/quantme-transformation.spec.js +++ b/components/bpmn-q/test/tests/quantme/quantme-transformation.spec.js @@ -10,7 +10,7 @@ describe('Test the QuantMETransformator of the QuantME extension.', function () describe('Transformation of QuantME extensions', function () { - it('should create a valid transformed workflow die zweite', async function () { + it('should create a valid native workflow model after two transformations', async function () { setPluginConfig([{ name: 'dataflow' }, { name: 'quantme', @@ -26,8 +26,8 @@ describe('Test the QuantMETransformator of the QuantME extension.', function () let qrms = await updateQRMs(); chai.expect(qrms.length).to.equal(10); - config.setQRMUserName('LaviniaStiliadou'); - config.setQRMRepositoryName('QuantMEUseCase'); + config.setQRMUserName('UST-QuAntiL'); + config.setQRMRepositoryName('QuantME-UseCases'); config.setQRMRepositoryPath('2023-icwe/part2'); let qrmMaxCut = await updateQRMs(); From 744f05f3e23ae8e8861ba5f5e5e2756b40a68f99 Mon Sep 17 00:00:00 2001 From: LaviniaStiliadou Date: Tue, 22 Aug 2023 11:25:09 +0200 Subject: [PATCH 11/15] fix replacement of collapsed subprocess --- .../editor/ModelerHandler.js | 22 ++++++++ .../replacement/QuantMETransformator.js | 21 +++++-- .../quantme/replacement/layouter/Layouter.js | 56 +++++++++---------- 3 files changed, 62 insertions(+), 37 deletions(-) diff --git a/components/bpmn-q/modeler-component/editor/ModelerHandler.js b/components/bpmn-q/modeler-component/editor/ModelerHandler.js index ebcb98fc..3cd40180 100644 --- a/components/bpmn-q/modeler-component/editor/ModelerHandler.js +++ b/components/bpmn-q/modeler-component/editor/ModelerHandler.js @@ -117,6 +117,28 @@ export async function createTempModelerFromXml(xml) { return undefined; } +/** + * Creates a modeler with all additional modules and extension moddles from all active plugins which is not + * saved in as the current modeler instance and load the given xml into it. + * + * @param xml the xml representing the BPMN diagram to load + * + * @returns the created modeler + */ +export async function createModelerFromXml(xml) { + // create new modeler with the custom QuantME extensions + const bpmnModeler = createModeler(); + + // import the xml containing the definitions + try { + await bpmnModeler.importXML(xml); + return bpmnModeler; + } catch (err) { + console.error(err); + } + return undefined; +} + /** * Returns the current modeler instance rendered into the UI of the Quantum Workflow Modeler */ diff --git a/components/bpmn-q/modeler-component/extensions/quantme/replacement/QuantMETransformator.js b/components/bpmn-q/modeler-component/extensions/quantme/replacement/QuantMETransformator.js index a17c1d2f..ffb4eb50 100644 --- a/components/bpmn-q/modeler-component/extensions/quantme/replacement/QuantMETransformator.js +++ b/components/bpmn-q/modeler-component/extensions/quantme/replacement/QuantMETransformator.js @@ -16,7 +16,7 @@ import * as Constants from '../Constants'; import { replaceHardwareSelectionSubprocess } from './hardware-selection/QuantMEHardwareSelectionHandler'; import { replaceCuttingSubprocess } from './circuit-cutting/QuantMECuttingHandler'; import { insertShape } from '../../../editor/util/TransformationUtilities'; -import { createTempModelerFromXml } from '../../../editor/ModelerHandler'; +import { createModelerFromXml } from '../../../editor/ModelerHandler'; import { getCamundaInputOutput, getDefinitionsFromXml, @@ -35,13 +35,13 @@ const xmlParser = require('xml-js'); * @param endpointConfig endpoints of the services required for the dynamic hardware selection */ export async function startQuantmeReplacementProcess(xml, currentQRMs, endpointConfig) { - let modeler = await createTempModelerFromXml(xml); + let modeler = await createModelerFromXml(xml); let modeling = modeler.get('modeling'); let elementRegistry = modeler.get('elementRegistry'); // get root element of the current diagram - const definitions = modeler.getDefinitions(); - const rootElement = getRootProcess(definitions); + let definitions = modeler.getDefinitions(); + let rootElement = getRootProcess(definitions); console.log(rootElement); if (typeof rootElement === 'undefined') { console.log('Unable to retrieve root process element from definitions!'); @@ -113,7 +113,7 @@ export async function startQuantmeReplacementProcess(xml, currentQRMs, endpointC } // layout diagram after successful transformation - layout(modeling, elementRegistry, rootElement); + //layout(modeling, elementRegistry, rootElement); let updated_xml = await getXml(modeler); // Parse the XML string into a JavaScript object @@ -191,9 +191,18 @@ export async function startQuantmeReplacementProcess(xml, currentQRMs, endpointC // Serialize the modified JavaScript object back to XML string modifiedXmlString = xmlParser.js2xml(xmlDoc, { compact: true }); } + modeler = await createModelerFromXml(modifiedXmlString); + modeling = modeler.get('modeling'); + elementRegistry = modeler.get('elementRegistry'); + + // get root element of the current diagram + definitions = modeler.getDefinitions(); + rootElement = getRootProcess(definitions); + layout(modeling, elementRegistry, rootElement); + let updated_xml2 = await getXml(modeler); - return { status: 'transformed', xml: modifiedXmlString }; + return { status: 'transformed', xml: updated_xml2 }; } /** diff --git a/components/bpmn-q/modeler-component/extensions/quantme/replacement/layouter/Layouter.js b/components/bpmn-q/modeler-component/extensions/quantme/replacement/layouter/Layouter.js index ef1035d5..27f70df1 100644 --- a/components/bpmn-q/modeler-component/extensions/quantme/replacement/layouter/Layouter.js +++ b/components/bpmn-q/modeler-component/extensions/quantme/replacement/layouter/Layouter.js @@ -9,8 +9,8 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {getDi, is} from 'bpmn-js/lib/util/ModelUtil'; -import {isFlowLikeElement} from '../../../../editor/util/ModellingUtilities'; +import { getDi, is } from 'bpmn-js/lib/util/ModelUtil'; +import { isFlowLikeElement } from '../../../../editor/util/ModellingUtilities'; // space between multiple boundary events of a task/subprocess let BOUNDARY_EVENT_MARGIN = '10'; @@ -56,15 +56,6 @@ function layoutProcess(modeling, elementRegistry, process) { // layout elements in subprocess if (['bpmn:SubProcess', 'quantme:QuantumHardwareSelectionSubprocess', 'quantme:CircuitCuttingSubprocess'].includes(flowElements[i].$type)) { console.log('Flow element is subprocess. Layouting contained elements...'); - const flowElement = elementRegistry.get(flowElements[i].id); - let oldBounds = getDi(flowElement).bounds; - modeling.resizeShape(elementRegistry.get(flowElements[i].id), { - x: oldBounds.x, - y: oldBounds.y, - height: 10, - width: 10 - }); - layoutProcess(modeling, elementRegistry, elementRegistry.get(flowElements[i].id).businessObject); } @@ -97,7 +88,7 @@ function layoutProcess(modeling, elementRegistry, process) { nodes.push(elementRegistry.get(artifact.id)); if (artifact.$type === 'bpmn:Association') { - edges.push({id: artifact.id, sourceId: artifact.sourceRef.id, targetId: artifact.targetRef.id}); + edges.push({ id: artifact.id, sourceId: artifact.sourceRef.id, targetId: artifact.targetRef.id }); } } } @@ -140,7 +131,7 @@ function layoutBoundaryEvents(modeling, elementRegistry) { let offset = (attachedToElementBoundaries.length + 1) * (parseInt(boundaryEventBounds.width) + parseInt(BOUNDARY_EVENT_MARGIN)); let to_move_x = bottomOfAttached - offset; let to_move_y = attachedToBounds.y - boundaryEventBounds.y + attachedToBounds.height - boundaryEventBounds.height / 2; - modeling.moveShape(boundaryEventShape, {x: to_move_x, y: to_move_y}); + modeling.moveShape(boundaryEventShape, { x: to_move_x, y: to_move_y }); // update list for the next boundary event attachedToElementBoundaries.push(boundaryEventShape.id); @@ -155,7 +146,7 @@ function layoutBoundaryEvents(modeling, elementRegistry) { let sourceX = boundaryEventBounds.x + boundaryEventBounds.width / 2; let sourceY = boundaryEventBounds.y + boundaryEventBounds.height; waypoints.shift(); - waypoints.unshift({x: sourceX, y: sourceY}); + waypoints.unshift({ x: sourceX, y: sourceY }); // update diagram modeling.updateWaypoints(connectionShape, waypoints); @@ -234,7 +225,7 @@ function adaptLabels(modeling, connection) { // place the first label of the given connection let firstLabel = connection.labels[0]; let middle = getMiddleOfLocation(connection, firstLabel); - modeling.moveElements([firstLabel], {x: middle.x - firstLabel.x, y: middle.y - firstLabel.y}); + modeling.moveElements([firstLabel], { x: middle.x - firstLabel.x, y: middle.y - firstLabel.y }); } // TODO: handle cases with multiple labels defined for the connection @@ -255,11 +246,11 @@ function getMiddleOfLocation(connection, label) { let middlePoint2 = waypoints[middleWaypointIndex]; if (middlePoint1.x === middlePoint2.x) { - return {x: middlePoint1.x - LABEL_MARGIN - parseInt(label.width), y: (middlePoint1.y + middlePoint2.y) / 2}; + return { x: middlePoint1.x - LABEL_MARGIN - parseInt(label.width), y: (middlePoint1.y + middlePoint2.y) / 2 }; } if (middlePoint1.y === middlePoint2.y) { - return {x: (middlePoint1.x + middlePoint2.x) / 2, y: middlePoint1.y - LABEL_MARGIN - parseInt(label.height)}; + return { x: (middlePoint1.x + middlePoint2.x) / 2, y: middlePoint1.y - LABEL_MARGIN - parseInt(label.height) }; } return { @@ -356,7 +347,7 @@ function getEdgeFromFlowElement(elementRegistry, flowElement) { sourceElement = sourceElement.attachedToRef; } - return {id: flowElement.id, sourceId: sourceElement.id, targetId: flowElement.targetRef.id}; + return { id: flowElement.id, sourceId: sourceElement.id, targetId: flowElement.targetRef.id }; } /** @@ -372,14 +363,14 @@ function layoutWithDagre(modeling, elementRegistry, dagre, tasks, flows, options console.log('Adding %i tasks to the graph for layouting: ', tasks.length); for (let i = 0; i < tasks.length; i++) { let task = tasks[i]; - g.setNode(task.id, {label: task.id, width: task.width, height: task.height}); + g.setNode(task.id, { label: task.id, width: task.width, height: task.height }); } // add flows as edges to the graph console.log('Adding %i flows to the graph for layouting: ', flows.length); for (let i = 0; i < flows.length; i++) { let flow = flows[i]; - g.setEdge(flow['sourceId'], flow['targetId'], {label: flow['id']}); + g.setEdge(flow['sourceId'], flow['targetId'], { label: flow['id'] }); } // layout the graph @@ -393,7 +384,7 @@ function layoutWithDagre(modeling, elementRegistry, dagre, tasks, flows, options // determine new position of task and move it there let to_move_x = node.x - element.x - element.width / 2; let to_move_y = node.y - element.y - element.height / 2; - let delta_string = {x: to_move_x, y: to_move_y}; + let delta_string = { x: to_move_x, y: to_move_y }; modeling.moveElements([element], delta_string); }); @@ -402,18 +393,21 @@ function layoutWithDagre(modeling, elementRegistry, dagre, tasks, flows, options let edge = g.edge(e); let points = edge.points; let element = elementRegistry.get(edge.label); - let waypoints = element.waypoints; + if (element !== undefined) { + let waypoints = element.waypoints; - while (waypoints.length > 0) { - waypoints.pop(); - } + while (waypoints.length > 0) { + waypoints.pop(); + } - for (let pointsIndex = 0; pointsIndex < points.length; pointsIndex++) { - let point; - point = {x: points[pointsIndex].x, y: points[pointsIndex].y}; - waypoints.push(point); - } + for (let pointsIndex = 0; pointsIndex < points.length; pointsIndex++) { + let point; + point = { x: points[pointsIndex].x, y: points[pointsIndex].y }; + waypoints.push(point); + } - element.waypoints = waypoints; + element.waypoints = waypoints; + } }); + } From 944eb573301aaf2000bd9bb70861c5f839d0e046 Mon Sep 17 00:00:00 2001 From: mbeisel Date: Tue, 22 Aug 2023 13:10:23 +0200 Subject: [PATCH 12/15] enable setting camunda_endpoint via env_vars --- .../extensions/quantme/framework-config/config.js | 1 + components/bpmn-q/webpack.config.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/components/bpmn-q/modeler-component/extensions/quantme/framework-config/config.js b/components/bpmn-q/modeler-component/extensions/quantme/framework-config/config.js index 10fba564..dce7ec7a 100644 --- a/components/bpmn-q/modeler-component/extensions/quantme/framework-config/config.js +++ b/components/bpmn-q/modeler-component/extensions/quantme/framework-config/config.js @@ -14,6 +14,7 @@ const defaultConfig = { quantmeDataConfigurationsEndpoint: process.env.DATA_CONFIG, opentoscaEndpoint: process.env.OPENTOSCA_ENDPOINT, wineryEndpoint: process.env.WINERY_ENDPOINT, + camundaEndpoint: process.env.CAMUNDA_ENDPOINT, nisqAnalyzerEndpoint: process.env.NISQ_ANALYZER_ENDPOINT, githubToken: process.env.GITHUB_TOKEN, transformationFrameworkEndpoint: process.env.TRANSFORMATION_FRAMEWORK_ENDPOINT, diff --git a/components/bpmn-q/webpack.config.js b/components/bpmn-q/webpack.config.js index 85d9aaa8..c7343108 100644 --- a/components/bpmn-q/webpack.config.js +++ b/components/bpmn-q/webpack.config.js @@ -63,7 +63,7 @@ module.exports = { // use the default values if environment variable does not exist new webpack.EnvironmentPlugin({ AWS_RUNTIME_HANDLER_ENDPOINT: 'http://localhost:8890', - CAMUNDA_ENDPOINT: 'http://localhost:8080/engine-rest', + CAMUNDA_ENDPOINT: 'http://localhost:8090/engine-rest', DATA_CONFIG: 'http://localhost:8100/data-objects', GITHUB_TOKEN: '', NISQ_ANALYZER_ENDPOINT: 'http://localhost:8098/nisq-analyzer', From 7578d3458e419b4db683dcc0a594cc88ca37e536 Mon Sep 17 00:00:00 2001 From: LaviniaStiliadou Date: Tue, 22 Aug 2023 13:42:09 +0200 Subject: [PATCH 13/15] remove top-level isexpanded attribute --- .../quantme/replacement/QuantMETransformator.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/components/bpmn-q/modeler-component/extensions/quantme/replacement/QuantMETransformator.js b/components/bpmn-q/modeler-component/extensions/quantme/replacement/QuantMETransformator.js index ffb4eb50..db464ffa 100644 --- a/components/bpmn-q/modeler-component/extensions/quantme/replacement/QuantMETransformator.js +++ b/components/bpmn-q/modeler-component/extensions/quantme/replacement/QuantMETransformator.js @@ -151,7 +151,7 @@ export async function startQuantmeReplacementProcess(xml, currentQRMs, endpointC let bpmnPlane = JSON.parse(JSON.stringify(bpmnDiagrams[i])); subprocessBpmnElement.push(bpmnPlane['bpmndi:BPMNPlane']['_attributes']['bpmnElement']); } - + let shapes = JSON.parse(JSON.stringify(bpmnDiagrams[0]['bpmndi:BPMNPlane']))['bpmndi:BPMNShape']; for (let i = 0; i < shapes.length; i++) { let shape = shapes[i]; @@ -342,6 +342,13 @@ function isChildExpanded(element, bpmndiShapes) { * @returns the modified subprocess elements */ function removeIsExpandedAttribute(subprocessElements, bpmnPrefix, quantmePrefix) { + + // remove top-level isExpanded attribute from shape + if (subprocessElements['_attributes'] !== undefined) { + let parentAttributes = subprocessElements['_attributes']; + delete parentAttributes.isExpanded; + } + if (Array.isArray(subprocessElements)) { for (let i = 0; i < subprocessElements.length; i++) { let subprocess = subprocessElements[i]; From cd65db09a54add5c44fb63f5c0a321cc23b34c3f Mon Sep 17 00:00:00 2001 From: Benjamin Weder Date: Fri, 25 Aug 2023 12:49:22 +0200 Subject: [PATCH 14/15] Remove unused method and fix method comment --- .../modeler-component/editor/ModelerHandler.js | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/components/bpmn-q/modeler-component/editor/ModelerHandler.js b/components/bpmn-q/modeler-component/editor/ModelerHandler.js index 3cd40180..57c55399 100644 --- a/components/bpmn-q/modeler-component/editor/ModelerHandler.js +++ b/components/bpmn-q/modeler-component/editor/ModelerHandler.js @@ -84,17 +84,6 @@ export function createTempModeler() { }); } -/** - * Create a Modeler with only Camunda native extensions and no additional modules - * - * @returns the created bpmn-js modeler - */ -export function createLightweightModeler() { - return new BpmnModeler({ - moddleExtensions: getExtensions(), - }); -} - /** * Creates a modeler with all additional modules and extension moddles from all active plugins which is not * saved in as the current modeler instance and load the given xml into it. @@ -118,8 +107,8 @@ export async function createTempModelerFromXml(xml) { } /** - * Creates a modeler with all additional modules and extension moddles from all active plugins which is not - * saved in as the current modeler instance and load the given xml into it. + * Creates a modeler with all additional modules and extension moddles from all active plugins which is + * saved as the current modeler instance and load the given xml into it. * * @param xml the xml representing the BPMN diagram to load * From 14a209a33dea21363c1869fbae95ffda5a68454f Mon Sep 17 00:00:00 2001 From: Benjamin Weder Date: Fri, 25 Aug 2023 12:56:26 +0200 Subject: [PATCH 15/15] Fix typo in method name --- .../test/tests/quantme/quantme-transformation.spec.js | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/components/bpmn-q/test/tests/quantme/quantme-transformation.spec.js b/components/bpmn-q/test/tests/quantme/quantme-transformation.spec.js index 34e34da5..f569fd92 100644 --- a/components/bpmn-q/test/tests/quantme/quantme-transformation.spec.js +++ b/components/bpmn-q/test/tests/quantme/quantme-transformation.spec.js @@ -38,7 +38,7 @@ describe('Test the QuantMETransformator of the QuantME extension.', function () let qrmsFirstTransformation = qrms.slice(0, 5).concat(qrms.slice(6)).concat(qrmMaxCut); let expectedExpandedAttributes = []; for (let i = 0; i < qrmsFirstTransformation.length; i++) { - let expandedAttributes = extractisExpandedAttribute(qrmsFirstTransformation[i].replacement); + let expandedAttributes = extractIsExpandedAttribute(qrmsFirstTransformation[i].replacement); expectedExpandedAttributes = expectedExpandedAttributes.concat(expandedAttributes); } const result = await startQuantmeReplacementProcess(validQuantMESubprocessDiagram, qrmsFirstTransformation, { @@ -48,14 +48,14 @@ describe('Test the QuantMETransformator of the QuantME extension.', function () }); chai.expect(result.status).to.equal('transformed'); - let expandedFirstTransformation = extractisExpandedAttribute(result.xml); + let expandedFirstTransformation = extractIsExpandedAttribute(result.xml); chai.expect(expandedFirstTransformation).to.deep.equal(expectedExpandedAttributes); chai.expect(result.status).to.equal('transformed'); expectedExpandedAttributes = []; allQrms = allQrms.concat(qrms.slice(5, 6)); for (let i = 0; i < allQrms.length; i++) { - let expandedAttributes = extractisExpandedAttribute(allQrms[i].replacement); + let expandedAttributes = extractIsExpandedAttribute(allQrms[i].replacement); expectedExpandedAttributes = expectedExpandedAttributes.concat(expandedAttributes); } @@ -66,7 +66,7 @@ describe('Test the QuantMETransformator of the QuantME extension.', function () }); chai.expect(transformationResult.status).to.equal('transformed'); - let expandedSecondTransformation = extractisExpandedAttribute(transformationResult.xml); + let expandedSecondTransformation = extractIsExpandedAttribute(transformationResult.xml); chai.expect(expandedSecondTransformation).to.deep.equal(expectedExpandedAttributes); // check that all extension elements are replaced @@ -95,7 +95,7 @@ describe('Test the QuantMETransformator of the QuantME extension.', function () }); }); -function extractisExpandedAttribute(xmlString) { +function extractIsExpandedAttribute(xmlString) { // Create a DOMParser instance const parser = new DOMParser(); @@ -105,7 +105,6 @@ function extractisExpandedAttribute(xmlString) { const regexPattern = /\<\w+:subProcess[^>]*>/g; const matches = xmlString.match(regexPattern); - let expanded = []; // Regular expression pattern to extract bpmndi:BPMNShape elements