diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
new file mode 100644
index 00000000..b364ad1e
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -0,0 +1,27 @@
+---
+name: Bug report
+about: Describe an occurring bug
+title: ''
+labels: ''
+assignees: ''
+
+---
+
+**Current Behavior:**
+
+
+**Expected Behavior:**
+
+
+**Steps to Reproduce:**
+
+
+ 1.
+ 1.
+ 1.
+
+**Other Information:**
+
+
+**System Information:**
+
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
new file mode 100644
index 00000000..657f5cc8
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -0,0 +1,30 @@
+---
+name: Feature request
+about: Describe the feature
+title: ''
+labels: ''
+assignees: ''
+
+---
+
+**Problem Statement:**
+
+
+**Sketch (Optional):**
+
+
+**References (Optional):**
+
+
+**Expected Behavior:**
+
+
+**Tasks:**
+
+
+- [ ] Task 1
+- [ ] Task 2
+- [ ] Task 3
+
+**Other Information:**
+
diff --git a/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md
new file mode 100644
index 00000000..a64d8338
--- /dev/null
+++ b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md
@@ -0,0 +1,11 @@
+#### Short Description
+
+
+#### Proposed Changes
+
+
+ *
+ *
+ *
+
+**Fixes**: #
\ No newline at end of file
diff --git a/components/bpmn-q/.bpmnlintrc b/components/bpmn-q/.bpmnlintrc
new file mode 100644
index 00000000..e153bd98
--- /dev/null
+++ b/components/bpmn-q/.bpmnlintrc
@@ -0,0 +1,12 @@
+{
+ "extends": [
+ "plugin:camunda/recommended",
+ "plugin:custom/recommended"
+ ],
+ "rules": {
+ "custom/quantme-tasks": "warn",
+ "custom/subprocess-connected-end-event": "warn",
+ "custom/subprocess-required-start-event": "warn",
+ "camunda/no-collapsed-sub-processes": "off"
+ }
+}
\ No newline at end of file
diff --git a/components/bpmn-q/.gitignore b/components/bpmn-q/.gitignore
index a19b1ae8..010d43cb 100644
--- a/components/bpmn-q/.gitignore
+++ b/components/bpmn-q/.gitignore
@@ -1,3 +1,5 @@
node_modules/*
public/*
-!public/index.html
\ No newline at end of file
+!public/index.html
+!public/src
+bpmnlint-plugin-custom/node_modules/*
diff --git a/components/bpmn-q/bpmnlint-plugin-custom/index.js b/components/bpmn-q/bpmnlint-plugin-custom/index.js
new file mode 100644
index 00000000..450b234d
--- /dev/null
+++ b/components/bpmn-q/bpmnlint-plugin-custom/index.js
@@ -0,0 +1,15 @@
+module.exports = {
+ configs: {
+ recommended: {
+ rules: {
+ }
+ },
+ all: {
+ rules: {
+ 'quantme-tasks': 'warn',
+ 'subprocess-required-start-event': 'warn',
+ 'subprocess-connected-end-event': 'warn'
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/components/bpmn-q/bpmnlint-plugin-custom/package.json b/components/bpmn-q/bpmnlint-plugin-custom/package.json
new file mode 100644
index 00000000..8142026d
--- /dev/null
+++ b/components/bpmn-q/bpmnlint-plugin-custom/package.json
@@ -0,0 +1,26 @@
+{
+ "name": "bpmnlint-plugin-custom",
+ "version": "0.0.0",
+ "description": "The bpmnlint custom plug-in",
+ "main": "index.js",
+ "scripts": {
+ "all": "npm test",
+ "test": "mocha test.js"
+ },
+ "keywords": [
+ "bpmnlint",
+ "plugin"
+ ],
+ "devDependencies": {
+ "bpmnlint": "^7.2.1",
+ "chai": "^4.2.0",
+ "mocha": "^9.1.3"
+ },
+ "dependencies": {
+ "bpmnlint-utils": "^1.0.2"
+ },
+ "files": [
+ "rules",
+ "index.js"
+ ]
+}
diff --git a/components/bpmn-q/bpmnlint-plugin-custom/rules/quantme-tasks.js b/components/bpmn-q/bpmnlint-plugin-custom/rules/quantme-tasks.js
new file mode 100644
index 00000000..b986503d
--- /dev/null
+++ b/components/bpmn-q/bpmnlint-plugin-custom/rules/quantme-tasks.js
@@ -0,0 +1,20 @@
+let QuantMEAttributeChecker = require('../../modeler-component/extensions/quantme/replacement/QuantMEAttributeChecker');
+
+/**
+ * Rule that reports QuantME tasks for which no suited replacement model exists
+ */
+module.exports = function() {
+
+ function check(node, reporter) {
+ if (node.$type && node.$type.startsWith('quantme:')) {
+ if (!QuantMEAttributeChecker.requiredAttributesAvailable(node)) {
+ reporter.report(node.id, 'Not all required attributes are set. Unable to replace task!');
+ return;
+ }
+ }
+ }
+
+ return {
+ check: check
+ };
+};
\ No newline at end of file
diff --git a/components/bpmn-q/bpmnlint-plugin-custom/rules/subprocess-connected-end-event.js b/components/bpmn-q/bpmnlint-plugin-custom/rules/subprocess-connected-end-event.js
new file mode 100644
index 00000000..d7f2740e
--- /dev/null
+++ b/components/bpmn-q/bpmnlint-plugin-custom/rules/subprocess-connected-end-event.js
@@ -0,0 +1,46 @@
+const {
+ is,
+ isAny
+} = require('bpmnlint-utils');
+
+
+/**
+ * A rule that checks the presence of an end event per scope.
+ */
+module.exports = function () {
+
+ function hasEndEvent(node) {
+ const flowElements = node.flowElements || [];
+
+ return (
+ flowElements.some(node => is(node, 'bpmn:EndEvent'))
+ );
+ }
+
+ function hasConnectedEndEvent(node) {
+ const flowElements = node.flowElements || [];
+
+ return (
+ flowElements.some(node => { const incomingflow = node.incoming || []; return is(node, 'bpmn:EndEvent') && incomingflow.length === 0; })
+ );
+
+ }
+
+ function check(node, reporter) {
+ console.log(node)
+ if (!isAny(node, ['bpmn:SubProcess'])) {
+ return;
+ }
+
+ if (!hasEndEvent(node)) {
+
+ reporter.report(node.id, 'Subprocess is missing end event');
+ }
+
+ if (hasConnectedEndEvent(node)) {
+ reporter.report(node.id, 'Each end event must have at least one incoming flow');
+ }
+ }
+
+ return { check };
+};
\ No newline at end of file
diff --git a/components/bpmn-q/bpmnlint-plugin-custom/rules/subprocess-required-start-event.js b/components/bpmn-q/bpmnlint-plugin-custom/rules/subprocess-required-start-event.js
new file mode 100644
index 00000000..bbb06d17
--- /dev/null
+++ b/components/bpmn-q/bpmnlint-plugin-custom/rules/subprocess-required-start-event.js
@@ -0,0 +1,38 @@
+const {
+ is
+} = require('bpmnlint-utils');
+
+
+/**
+ * A rule that checks that start events inside a normal sub-processes
+ * are blank (do not have an event definition).
+ */
+module.exports = function () {
+
+ function check(node, reporter) {
+
+ if (!is(node, 'bpmn:SubProcess') || node.triggeredByEvent) {
+ return;
+ }
+
+ const flowElements = node.flowElements || [];
+
+ flowElements.forEach(function (flowElement) {
+
+ if (!is(flowElement, 'bpmn:StartEvent')) {
+ return false;
+ }
+
+ const eventDefinitions = flowElement.eventDefinitions || [];
+
+ if (eventDefinitions.length > 0) {
+ reporter.report(flowElement.id, 'Start event must be blank', ['eventDefinitions']);
+ }
+ });
+ }
+
+ return {
+ check
+ };
+
+};
\ No newline at end of file
diff --git a/components/bpmn-q/client/index.js b/components/bpmn-q/client/index.js
new file mode 100644
index 00000000..01847a26
--- /dev/null
+++ b/components/bpmn-q/client/index.js
@@ -0,0 +1,22 @@
+/**
+ * Copyright (c) 2021 Institute of Architecture of Application Systems -
+ * University of Stuttgart
+ *
+ * This program and the accompanying materials are made available under the
+ * terms the Apache Software License 2.0
+ * which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+import { registerBpmnJSPlugin } from 'camunda-modeler-plugin-helpers';
+
+import customLinterConfig from '../.bpmnlintrc';
+
+registerBpmnJSPlugin({
+ __init__: [
+ function(linting) {
+ linting.setLinterConfig(customLinterConfig);
+ }
+ ]
+});
diff --git a/components/bpmn-q/modeler-component/QuantumWorkflowModeler.js b/components/bpmn-q/modeler-component/QuantumWorkflowModeler.js
index 53d6d4be..ce9da905 100644
--- a/components/bpmn-q/modeler-component/QuantumWorkflowModeler.js
+++ b/components/bpmn-q/modeler-component/QuantumWorkflowModeler.js
@@ -6,17 +6,20 @@ import './editor/resources/styling/editor-ui.css';
import './editor/ui/notifications/Notifications.css';
import './editor/ui/notifications/Notification.css';
import './editor/resources/styling/camunda-styles/style.css';
+import 'bpmn-js-bpmnlint/dist/assets/css/bpmn-js-bpmnlint.css';
+import './modeler.css';
import React from 'react';
-import {createRoot} from 'react-dom/client';
+import { createRoot } from 'react-dom/client';
import ButtonToolbar from "./editor/ui/ButtonToolbar";
-import {createNewDiagram, loadDiagram} from "./editor/util/IoUtilities";
+import { createNewDiagram, loadDiagram } from "./editor/util/IoUtilities";
import NotificationHandler from "./editor/ui/notifications/NotificationHandler";
-import {createModeler, getModeler} from "./editor/ModelerHandler";
-import {getPluginButtons, getStyles, getTransformationButtons} from "./editor/plugin/PluginHandler";
-import {getPluginConfig, setPluginConfig} from "./editor/plugin/PluginConfigHandler";
+import { createModeler, getModeler } from "./editor/ModelerHandler";
+import { getPluginButtons, getTransformationButtons } from "./editor/plugin/PluginHandler";
+import { getPluginConfig, setPluginConfig } from "./editor/plugin/PluginConfigHandler";
import * as editorConfig from './editor/config/EditorConfigManager';
-import {initEditorEventHandler} from './editor/events/EditorEventHandler';
+import { initEditorEventHandler } from './editor/events/EditorEventHandler';
+import $ from 'jquery';
/**
* The Quantum Workflow modeler HTML web component which contains the bpmn-js modeler to model BPMN diagrams, an editor
@@ -63,7 +66,7 @@ export class QuantumWorkflowModeler extends HTMLElement {
event.preventDefault();
return event.returnValue = '';
};
- addEventListener("beforeunload", beforeUnloadListener, {capture: true});
+ addEventListener("beforeunload", beforeUnloadListener, { capture: true });
}
@@ -75,12 +78,164 @@ export class QuantumWorkflowModeler extends HTMLElement {
-
`;
+
+ let panel = document.getElementById("properties");
+ let maindiv = document.getElementById("main-div");
+
+ let isResizing = false;
+ let startX;
+ let startWidth;
+ let width = panel.style.width;
+ let propertiesElement = document.getElementById("properties");
+
+ propertiesElement.addEventListener("mousemove", function (e) {
+ let rect = this.getBoundingClientRect();
+ let x = e.clientX - rect.left;
+ let y = e.clientY - rect.top;
+
+ let borderSize = 5;
+
+ if (
+ x < borderSize ||
+ x > rect.width - borderSize ||
+ y < borderSize ||
+ y > rect.height - borderSize
+ ) {
+ this.style.cursor = "w-resize";
+ } else {
+ this.style.cursor = "default";
+
+ }
+ });
+
+
+ // Mouse down event listener
+ panel.addEventListener('mousedown', handleMouseDown);
+
+ panel.addEventListener("mouseup", function () {
+ this.style.cursor = "default";
+ });
+
+ // Mouse move event listener
+ document.addEventListener('mousemove', handleMouseMove);
+
+ // Mouse up event listener
+ document.addEventListener('mouseup', handleMouseUp);
+
+ // Mouse down handler
+ function handleMouseDown(event) {
+ let rect = panel.getBoundingClientRect();
+ let x = event.clientX - rect.left;
+
+ let borderSize = 5;
+
+ if (
+ x < borderSize ||
+ x > rect.width - borderSize
+ ) {
+
+ isResizing = true;
+ }
+ startX = event.clientX;
+ startWidth = parseFloat(panel.style.width);
+ }
+ let isCollapsed = false;
+ const resizeButton = document.createElement('button');
+ resizeButton.className = "fa fa-angle-right resize";
+ maindiv.appendChild(resizeButton);
+
+ // Mouse move handler
+ function handleMouseMove(event) {
+ if (!isResizing) { maindiv.style.cursor = "default"; return; }
+ maindiv.style.cursor = "w-resize";
+ panel.style.cursor = "w-resize";
+ const deltaX = event.clientX - startX;
+ let newWidth = startWidth - deltaX;
+
+ // enable to completely hide the panel
+ if (newWidth < 20) {
+ newWidth = 0;
+ isCollapsed = true;
+ resizeButton.className = "fa fa-angle-left resize";
+ }
+ panel.style.width = `${newWidth}px`;
+ }
+
+ // Mouse up handler
+ function handleMouseUp() {
+ panel.style.cursor = "default";
+ isResizing = false;
+ }
+
+
+ resizeButton.addEventListener('click', function () {
+ let offsetWidth = panel.offsetWidth;
+ if (isCollapsed) {
+ panel.style.display = 'block';
+ panel.style.width = offsetWidth;
+ if (panel.offsetWidth < parseInt(width, 10)) {
+ panel.style.width = width;
+ }
+ resizeButton.className = "fa fa-angle-right resize";
+ } else {
+ panel.style.display = 'none';
+ resizeButton.className = "fa fa-angle-left resize";
+ }
+
+ isCollapsed = !isCollapsed;
+ });
+
+ let editor = document.getElementById('editor');
+ let dragging = false;
+ let aceEditor = ace.edit(editor);
+
+
+ $("#editor_dragbar").mousedown(function (e) {
+ e.preventDefault();
+ dragging = true;
+
+ let editorElement = $("#editor");
+ let editor_wrap = $("#editor_wrap");
+ let dragbar = $("#editor_dragbar");
+ let startY = e.pageY;
+ let startTop = parseInt(editorElement.css("top"));
+ let startHeight = editor_wrap.height();
+
+ $(document).mousemove(function (e) {
+ if (!dragging) return;
+
+ let actualY = e.pageY;
+ let deltaY = startY - actualY;
+ let newTop = startTop - deltaY;
+ let newHeight = startHeight + deltaY;
+ const viewportHeight = window.innerHeight;
+ const heightInVh = (newHeight / viewportHeight) * 100;
+
+ // since we move the editor element up we need to add the actual height of the
+ // wrapper element
+ const editorHeight = 2 * newHeight;
+ if (newHeight >= 75 && heightInVh <= 89) {
+ editorElement.css("top", newTop + "px");
+ editor_wrap.css("height", newHeight + "px");
+ editorElement.css("height", editorHeight + "px");
+ dragbar.css("top", newTop - dragbar.height() + "px");
+ aceEditor.resize();
+ }
+ });
+ });
+
+ $(document).mouseup(function (e) {
+ if (dragging) {
+ dragging = false;
+ $(document).unbind("mousemove");
+ }
+ });
}
/**
@@ -118,10 +273,15 @@ export class QuantumWorkflowModeler extends HTMLElement {
// integrate the React ButtonToolbar into its DOM container
const root = createRoot(document.getElementById('button-container'));
root.render(
);
+ transformButtons={transformationButtons} />);
// load initial workflow
this.workflowModel = this.workflowModel || getPluginConfig('editor').defaultWorkflow;
+ getModeler().on('commandStack.changed', function () {
+ getModeler().saveXML({ format: true }).then(function (result) {
+ modeler.xml = result;
+ })
+ });
if (this.workflowModel) {
loadDiagram(this.workflowModel, getModeler()).then();
} else {
@@ -179,4 +339,4 @@ export class QuantumWorkflowModeler extends HTMLElement {
}
}
-window.customElements.define('quantum-workflow-modeler', QuantumWorkflowModeler);
\ No newline at end of file
+window.customElements.define('quantum-workflow-modeler', QuantumWorkflowModeler);
diff --git a/components/bpmn-q/modeler-component/editor/EditorConstants.js b/components/bpmn-q/modeler-component/editor/EditorConstants.js
index 85155ba1..3ede37e5 100644
--- a/components/bpmn-q/modeler-component/editor/EditorConstants.js
+++ b/components/bpmn-q/modeler-component/editor/EditorConstants.js
@@ -2,7 +2,7 @@
// supported options to handle a transformed workflow
export const transformedWorkflowHandlers = {
NEW_TAB: 'Open in new Tab',
- SAVE_AS_FILE: 'Save as File',
+ SAVE_AS_FILE: 'Save as File'
};
// workflow event types dispatched by the EditorEventHandler
@@ -10,5 +10,13 @@ export const workflowEventTypes = {
LOADED: 'quantum-workflow-loaded', // New Workflow loaded in modeler
SAVED: 'quantum-workflow-saved', // Workflow saved
TRANSFORMED: 'quantum-workflow-transformed', // Workflow transformed
- DEPLOYED: 'quantum-workflow-deployed', // Workflow deployed to workflow engine
+ DEPLOYED: 'quantum-workflow-deployed' // Workflow deployed to workflow engine
+};
+
+// supported save file options
+export const saveFileFormats = {
+ ALL: 'all',
+ BPMN: '.bpmn',
+ PNG: '.png',
+ SVG: '.svg'
};
\ No newline at end of file
diff --git a/components/bpmn-q/modeler-component/editor/ModelerHandler.js b/components/bpmn-q/modeler-component/editor/ModelerHandler.js
index 35702179..ebcb98fc 100644
--- a/components/bpmn-q/modeler-component/editor/ModelerHandler.js
+++ b/components/bpmn-q/modeler-component/editor/ModelerHandler.js
@@ -7,8 +7,12 @@ import {
} from "bpmn-js-properties-panel";
import CamundaExtensionModule from 'camunda-bpmn-moddle/resources/camunda.json';
import CustomPopupMenuModule from "./popup/";
-import {getAdditionalModules, getModdleExtension} from "./plugin/PluginHandler";
+import { getAdditionalModules, getModdleExtension } from "./plugin/PluginHandler";
+import ModelerRulesModule from "./rules/";
+import LintModule from 'bpmn-js-bpmnlint';
+import bpmnlintConfig from '../../.bpmnlintrc';
+import Clipboard from 'diagram-js/lib/features/clipboard/Clipboard';
let camundaModdleDescriptor = require('camunda-bpmn-moddle/resources/camunda.json');
/**
@@ -35,7 +39,10 @@ export function createModeler(containerId, propertiesParentId) {
},
additionalModules: getModules(),
keyboard: {
- bindTo: document
+ bindTo: document
+ },
+ linting: {
+ bpmnlint: bpmnlintConfig
},
moddleExtensions: getExtensions(),
});
@@ -122,6 +129,9 @@ export function getModeler() {
*/
function getModules() {
const pluginModules = getAdditionalModules();
+ var clipboardModule = {
+ 'clipboard': [ 'value', new Clipboard() ]
+ };
let additionalModules = [
BpmnPalletteModule,
BpmnPropertiesPanelModule,
@@ -129,6 +139,9 @@ function getModules() {
CamundaPlatformPropertiesProviderModule,
CamundaExtensionModule,
CustomPopupMenuModule,
+ LintModule,
+ clipboardModule,
+ ModelerRulesModule
].concat(pluginModules);
console.log('\n Additional modules of the modeler: ');
diff --git a/components/bpmn-q/modeler-component/editor/config/EditorConfigManager.js b/components/bpmn-q/modeler-component/editor/config/EditorConfigManager.js
index c7cd1b1f..1339fedd 100644
--- a/components/bpmn-q/modeler-component/editor/config/EditorConfigManager.js
+++ b/components/bpmn-q/modeler-component/editor/config/EditorConfigManager.js
@@ -1,11 +1,12 @@
-import {getPluginConfig} from '../plugin/PluginConfigHandler';
-import {transformedWorkflowHandlers} from '../EditorConstants';
+import { getPluginConfig } from '../plugin/PluginConfigHandler';
+import { saveFileFormats, transformedWorkflowHandlers } from '../EditorConstants';
// default configurations of the editor
const defaultConfig = {
camundaEndpoint: process.env.CAMUNDA_ENDPOINT,
- fileName: 'quantum-workflow-model.bpmn',
+ fileName: process.env.DOWNLOAD_FILE_NAME,
transformedWorkflowHandler: transformedWorkflowHandlers.NEW_TAB,
+ fileFormat: saveFileFormats.BPMN
};
let config = {};
@@ -53,7 +54,7 @@ export function getFileName() {
* @param fileName the new file name
*/
export function setFileName(fileName) {
- if (fileName !== null && fileName !== undefined && /^[a-zA-Z0-9-_]+\.bpmn$/.test(fileName)) {
+ if (fileName !== null && fileName !== undefined) {
// remove trailing slashes
config.fileName = fileName;
@@ -88,6 +89,33 @@ export function setTransformedWorkflowHandler(transformedWorkflowHandler) {
}
}
+/**
+ * Get the file format
+ *
+ * @return {string} the currently specified handler id
+ */
+export function getFileFormat() {
+ if (config.fileFormat === undefined) {
+ const fileFormat = saveFileFormats[getPluginConfig('editor').fileFormat];
+ setFileFormat(fileFormat || defaultConfig.fileFormat);
+ }
+ return config.fileFormat;
+}
+
+/**
+ * Set the format of the downloaded file
+ *
+ * @param fileFormat the file format
+ */
+export function setFileFormat(fileFormat) {
+ if (fileFormat !== null && fileFormat !== undefined
+ // check that the new value is a valid handler id
+ && Object.values(saveFileFormats).includes(fileFormat)) {
+
+ config.fileFormat = fileFormat;
+ }
+}
+
/**
* Resets the current editor configs
*/
diff --git a/components/bpmn-q/modeler-component/editor/config/EditorTab.js b/components/bpmn-q/modeler-component/editor/config/EditorTab.js
index fe8c9d42..38ed8bc6 100644
--- a/components/bpmn-q/modeler-component/editor/config/EditorTab.js
+++ b/components/bpmn-q/modeler-component/editor/config/EditorTab.js
@@ -1,7 +1,7 @@
-import React, {useState} from 'react';
-import {getModeler} from "../ModelerHandler";
+import React, { useState } from 'react';
+import { getModeler } from "../ModelerHandler";
import * as editorConfig from "./EditorConfigManager";
-import {transformedWorkflowHandlers} from '../EditorConstants';
+import { transformedWorkflowHandlers, saveFileFormats } from '../EditorConstants';
/**
* Tab for the ConfigModal. Used to allow the configurations of the editor configs, namely the camunda endpoint and the
@@ -14,6 +14,8 @@ export default function EditorTab() {
const [camundaEndpoint, setCamundaEndpoint] = useState(editorConfig.getCamundaEndpoint());
const [workflowHandler, setWorkflowHandler] = useState(editorConfig.getTransformedWorkflowHandler());
+ const [fileName, setFileName] = useState(editorConfig.getFileName());
+ const [fileFormat, setFileFormat] = useState(editorConfig.getFileFormat());
const modeler = getModeler();
@@ -28,11 +30,23 @@ export default function EditorTab() {
});
}
+ // register listener for editor action to get changes on the camunda endpoint
+ if (!editorActions._actions.hasOwnProperty('fileNameChanged')) {
+ editorActions.register({
+ fileNameChanged: function (fileName) {
+ modeler.config.fileName = fileName;
+ }
+ });
+ }
+
// save values of the tab entries in the editor config
EditorTab.prototype.onClose = () => {
modeler.config.camundaEndpoint = camundaEndpoint;
+ modeler.config.fileName = fileName;
editorConfig.setCamundaEndpoint(camundaEndpoint);
editorConfig.setTransformedWorkflowHandler(workflowHandler);
+ editorConfig.setFileName(fileName);
+ editorConfig.setFileFormat(fileFormat);
};
// return tab which contains entries to change the camunda endpoint and the workflow handler
@@ -40,37 +54,68 @@ export default function EditorTab() {
Workflow Engine configuration:
Handle for transformed workflows:
-
- Transformed Workflow Handler |
-
-
+ |
+ Transformed Workflow Handler |
+
+
+
+ |
+
+
+
+ Download workflow:
+
>);
@@ -80,4 +125,5 @@ EditorTab.prototype.config = () => {
const modeler = getModeler();
modeler.config.camundaEndpoint = editorConfig.getCamundaEndpoint();
+ modeler.config.fileName = editorConfig.getFileName();
};
\ No newline at end of file
diff --git a/components/bpmn-q/modeler-component/editor/resources/icons/upload-icon.png b/components/bpmn-q/modeler-component/editor/resources/icons/upload-icon.png
new file mode 100644
index 00000000..91305169
Binary files /dev/null and b/components/bpmn-q/modeler-component/editor/resources/icons/upload-icon.png differ
diff --git a/components/bpmn-q/modeler-component/editor/resources/icons/xml-viewer-icon.png b/components/bpmn-q/modeler-component/editor/resources/icons/xml-viewer-icon.png
new file mode 100644
index 00000000..95f342f3
Binary files /dev/null and b/components/bpmn-q/modeler-component/editor/resources/icons/xml-viewer-icon.png differ
diff --git a/components/bpmn-q/modeler-component/editor/resources/styling/editor-ui.css b/components/bpmn-q/modeler-component/editor/resources/styling/editor-ui.css
index 205a93c4..6ac30c6e 100644
--- a/components/bpmn-q/modeler-component/editor/resources/styling/editor-ui.css
+++ b/components/bpmn-q/modeler-component/editor/resources/styling/editor-ui.css
@@ -193,4 +193,39 @@
.qwm-tmp {
background: url("../icons/save-outline-icon.png") no-repeat center center;
-}
\ No newline at end of file
+}
+
+#editor {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+}
+
+.ace_print-margin {
+ display: none;
+}
+
+.qwm-icon-upload:before {
+ content: "";
+ width: 15px;
+ height: 18px;
+ margin-top: 0px;
+ background-size: contain;
+ background-image: url("../icons/upload-icon.png");
+ background-repeat: no-repeat;
+ display: inline-block;
+ float: left;
+}
+
+.qwm-icon-xml-viewer:before {
+ content: "";
+ width: 20px;
+ height: 18px;
+ margin-top: 0px;
+ background-size: contain;
+ background-image: url("../icons/xml-viewer-icon.png");
+ background-repeat: no-repeat;
+ display: inline-block;
+ float: left;
+}
+
diff --git a/components/bpmn-q/modeler-component/editor/resources/styling/modeler.css b/components/bpmn-q/modeler-component/editor/resources/styling/modeler.css
index 68f18c5e..92f15955 100644
--- a/components/bpmn-q/modeler-component/editor/resources/styling/modeler.css
+++ b/components/bpmn-q/modeler-component/editor/resources/styling/modeler.css
@@ -1,11 +1,11 @@
.qwm-content,
-.qwm-content > div {
+.qwm-content>div {
width: 100%;
height: 100%;
overflow: hidden;
}
-.qwm-content > .qwm-message {
+.qwm-content>.qwm-message {
text-align: center;
display: table;
@@ -13,7 +13,7 @@
color: #111;
}
-.qwm-content > .qwm-message .qwm-note {
+.qwm-content>.qwm-message .qwm-note {
vertical-align: middle;
text-align: center;
display: table-cell;
@@ -58,11 +58,12 @@
list-style: none;
}
-.qwm-buttons > li {
+.qwm-buttons>li {
display: inline-block;
margin-right: 10px;
}
-.qwm-buttons > li > a {
+
+.qwm-buttons>li>a {
background: #DDD;
border: solid 1px #666;
display: inline-block;
@@ -77,6 +78,73 @@
opacity: 1.0;
}
+.bjs-breadcrumbs {
+ position: absolute;
+ display: none;
+ flex-wrap: wrap;
+ align-items: center;
+ top: 20px;
+ left: 20px;
+ padding: 0px;
+ margin: 0px;
+ font-size: 20px;
+ line-height: normal;
+}
+
+.bjs-breadcrumbs-shown .bjs-breadcrumbs {
+ display: flex;
+}
+
+.djs-palette-shown .bjs-breadcrumbs {
+ left: 90px;
+}
+
+.djs-palette-shown.djs-palette-two-column .bjs-breadcrumbs {
+ left: 140px;
+}
+
+.bjs-breadcrumbs li {
+ display: inline-flex;
+ padding-bottom: 5px;
+ font-size: 17px;
+ font-family: Arial, serif;
+ font-weight: bold;
+}
+
+.bjs-breadcrumbs li a {
+ cursor: pointer;
+ color: blue
+}
+
+.bjs-breadcrumbs li:last-of-type a {
+ color: inherit;
+ cursor: default;
+}
+
+.bjs-breadcrumbs li:not(:first-child)::before {
+ content: url('data:image/svg+xml;utf8,');
+ padding: 0 8px;
+ color: var(--breadcrumbs-arrow-color);
+ height: 1em;
+}
+
+.bjs-breadcrumbs .bjs-crumb {
+ display: inline-block;
+ max-width: 200px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+.bjs-drilldown-empty {
+ display: none;
+}
+
+.selected .bjs-drilldown-empty {
+ display: inherit;
+}
+
.bjs-drilldown {
- display: none
+ position: relative;
+ top: 10px;
}
\ No newline at end of file
diff --git a/components/bpmn-q/modeler-component/editor/rules/ModelerRules.js b/components/bpmn-q/modeler-component/editor/rules/ModelerRules.js
new file mode 100644
index 00000000..7be4e38b
--- /dev/null
+++ b/components/bpmn-q/modeler-component/editor/rules/ModelerRules.js
@@ -0,0 +1,21 @@
+import BpmnRules from 'bpmn-js/lib/features/rules/BpmnRules';
+import { getModeler } from '../ModelerHandler';
+import { saveModelerAsLocalFile } from '../util/IoUtilities';
+
+/**
+ * Contains the rules for the modeler.
+ */
+export default class ModelerRules extends BpmnRules {
+
+ constructor(eventBus) {
+ super(eventBus);
+ eventBus.on('saveFile', function(context) {
+ saveModelerAsLocalFile(getModeler());
+ });
+ }
+}
+
+ModelerRules.$inject = [
+ 'eventBus',
+];
+
diff --git a/components/bpmn-q/modeler-component/editor/rules/index.js b/components/bpmn-q/modeler-component/editor/rules/index.js
new file mode 100644
index 00000000..2fc8f2d1
--- /dev/null
+++ b/components/bpmn-q/modeler-component/editor/rules/index.js
@@ -0,0 +1,6 @@
+import ModelerRules from './ModelerRules';
+
+export default {
+ __init__: ['modelerRules'],
+ modelerRules: ["type", ModelerRules]
+};
\ No newline at end of file
diff --git a/components/bpmn-q/modeler-component/editor/shortcut/ShortcutModal.js b/components/bpmn-q/modeler-component/editor/shortcut/ShortcutModal.js
index 028423ae..a23bde56 100644
--- a/components/bpmn-q/modeler-component/editor/shortcut/ShortcutModal.js
+++ b/components/bpmn-q/modeler-component/editor/shortcut/ShortcutModal.js
@@ -43,6 +43,10 @@ export default function ShortcutModal({ onClose }) {
Search |
ctrl + F |
+
+ Download |
+ ctrl + S |
+
Redo |
ctrl + Y |
@@ -73,7 +77,7 @@ export default function ShortcutModal({ onClose }) {
Replace Tool |
- R |
+ R |
Space Tool |
diff --git a/components/bpmn-q/modeler-component/editor/ui/ButtonToolbar.js b/components/bpmn-q/modeler-component/editor/ui/ButtonToolbar.js
index d0a2ba5e..2e2ac26b 100644
--- a/components/bpmn-q/modeler-component/editor/ui/ButtonToolbar.js
+++ b/components/bpmn-q/modeler-component/editor/ui/ButtonToolbar.js
@@ -5,8 +5,9 @@ import NewDiagramButton from "./NewDiagramButton";
import DeploymentButton from "./DeploymentButton";
import ConfigPlugin from "../config/ConfigPlugin";
import TransformationToolbarButton from "./TransformationToolbarButton";
+import UploadButton from "./UploadButton";
import ShortcutPlugin from "../shortcut/ShortcutPlugin";
-
+import XMLViewerButton from "./XMLViewerButton";
/**
* React component which displays the toolbar of the modeler
@@ -32,6 +33,8 @@ export default function ButtonToolbar(props) {
+
+
diff --git a/components/bpmn-q/modeler-component/editor/ui/SaveButton.js b/components/bpmn-q/modeler-component/editor/ui/SaveButton.js
index 0f9195c1..a3450209 100644
--- a/components/bpmn-q/modeler-component/editor/ui/SaveButton.js
+++ b/components/bpmn-q/modeler-component/editor/ui/SaveButton.js
@@ -1,5 +1,5 @@
import React from "react";
-import {saveModelerAsLocalFile} from "../util/IoUtilities";
+import { saveModelerAsLocalFile } from "../util/IoUtilities";
/**
* React button which saves the current workflow to the users local file system when clicked
@@ -10,14 +10,19 @@ import {saveModelerAsLocalFile} from "../util/IoUtilities";
*/
export default function SaveButton(props) {
- const {modeler} = props;
+ const { modeler } = props;
return (
-
- );
+
+
+
+ )
}
\ No newline at end of file
diff --git a/components/bpmn-q/modeler-component/editor/ui/UploadButton.js b/components/bpmn-q/modeler-component/editor/ui/UploadButton.js
new file mode 100644
index 00000000..fd1b8a45
--- /dev/null
+++ b/components/bpmn-q/modeler-component/editor/ui/UploadButton.js
@@ -0,0 +1,21 @@
+import React from "react";
+import { uploadToGitHub } from '../../extensions/quantme/qrm-manager/git-handler';
+import { getModeler } from "../ModelerHandler";
+
+/**
+ * React button which uploads the current workflow to GitHub.
+ *
+ * @returns {JSX.Element}
+ * @constructor
+ */
+export default function UploadButton() {
+
+ return (
+
+ );
+}
\ No newline at end of file
diff --git a/components/bpmn-q/modeler-component/editor/ui/XMLViewerButton.js b/components/bpmn-q/modeler-component/editor/ui/XMLViewerButton.js
new file mode 100644
index 00000000..aa59adfd
--- /dev/null
+++ b/components/bpmn-q/modeler-component/editor/ui/XMLViewerButton.js
@@ -0,0 +1,63 @@
+import React, { useState } from "react";
+import { getModeler } from "../ModelerHandler";
+import ace from "ace-builds";
+import { loadDiagram } from "../util/IoUtilities";
+
+/**
+ * React button which enables the XML Viewer.
+ *
+ * @returns {JSX.Element}
+ * @constructor
+ */
+export default function XMLViewerButton() {
+
+ const [enabledXMLView, setEnabledXMLView] = useState(false);
+ function enableXMLViewer(enabledXMLView) {
+ let modelerContainer = document.getElementById('modeler-container');
+ let editor = document.getElementById('editor');
+ let editorWrap = document.getElementById('editor_wrap');
+ let panel = document.getElementById("properties");
+ let aceEditor = ace.edit(editor);
+ if (!enabledXMLView) {
+ modelerContainer.style.height = '93vh';
+ editor.style.display = 'block';
+ editor.style.height = '93vh';
+ panel.style.display = 'none';
+ editorWrap.style.display = 'block';
+
+ // Dynamically set the value of the editor
+ let xml = getModeler().xml;
+ if (xml.xml != undefined) {
+ xml = xml.xml;
+ }
+ aceEditor.setValue(xml);
+ } else {
+ modelerContainer.style.height = '98vh';
+ editor.style.display = 'none';
+ panel.style.display = 'block';
+ editorWrap.style.display = 'none';
+
+
+ aceEditor.getSession().on('change', function () {
+ update();
+ });
+
+ function update() {
+ let xml = aceEditor.getSession().getValue();
+ loadDiagram(xml, getModeler());
+ }
+ }
+
+ setEnabledXMLView(!enabledXMLView)
+
+ }
+
+ return (
+
+ );
+}
\ No newline at end of file
diff --git a/components/bpmn-q/modeler-component/editor/util/IoUtilities.js b/components/bpmn-q/modeler-component/editor/util/IoUtilities.js
index 3a5a26f5..db34386b 100644
--- a/components/bpmn-q/modeler-component/editor/util/IoUtilities.js
+++ b/components/bpmn-q/modeler-component/editor/util/IoUtilities.js
@@ -1,5 +1,6 @@
-import {transformedWorkflowHandlers, workflowEventTypes} from '../EditorConstants';
-import {dispatchWorkflowEvent} from '../events/EditorEventHandler';
+import { file } from 'jszip';
+import { transformedWorkflowHandlers, workflowEventTypes, saveFileFormats } from '../EditorConstants';
+import { dispatchWorkflowEvent } from '../events/EditorEventHandler';
const editorConfig = require('../config/EditorConfigManager');
@@ -29,10 +30,10 @@ const NEW_DIAGRAM_XML = '\n' +
* @returns {Promise}
*/
export async function saveXmlAsLocalFile(xml, fileName = editorConfig.getFileName()) {
- const bpmnFile = await new File([xml], fileName, {type: 'text/xml'});
+ const bpmnFile = await new File([xml], fileName, { type: 'text/xml' });
const link = document.createElement('a');
- link.download = fileName;
+ link.download = fileName + '.bpmn';
link.href = URL.createObjectURL(bpmnFile);
link.click();
@@ -46,9 +47,18 @@ export async function saveXmlAsLocalFile(xml, fileName = editorConfig.getFileNam
* @param fileName The name of the file.
* @returns {Promise}
*/
-export async function saveModelerAsLocalFile(modeler, fileName = editorConfig.getFileName()) {
+export async function saveModelerAsLocalFile(modeler, fileName = editorConfig.getFileName(), fileFormat = editorConfig.getFileFormat()) {
const xml = await getXml(modeler);
- return saveXmlAsLocalFile(xml, fileName);
+
+ if (fileFormat === saveFileFormats.BPMN || fileFormat === saveFileFormats.ALL) {
+ await openFileDialog(xml, fileName, saveFileFormats.BPMN);
+ }
+
+ if (fileFormat === saveFileFormats.ALL || fileFormat === saveFileFormats.SVG || fileFormat === saveFileFormats.PNG) {
+ await saveWorkflowAsSVG(modeler, fileName, fileFormat);
+ }
+
+ return;
}
/**
@@ -58,7 +68,7 @@ export async function saveModelerAsLocalFile(modeler, fileName = editorConfig.ge
* @returns {Promise<*>} The xml diagram.
*/
export async function getXml(modeler) {
- const {xml} = await modeler.saveXML({format: true});
+ const { xml } = await modeler.saveXML({ format: true });
return xml;
}
@@ -71,19 +81,21 @@ export async function getXml(modeler) {
* @returns {Promise} Undefined, if an error occurred during import.
*/
export async function loadDiagram(xml, modeler, dispatchEvent = true) {
+ if (xml !== '') {
+ try {
+ const result = await modeler.importXML(xml);
+ modeler.xml = xml;
- try {
- const result = await modeler.importXML(xml);
-
- if (dispatchEvent) {
- dispatchWorkflowEvent(workflowEventTypes.LOADED, xml, editorConfig.getFileName());
- }
+ if (dispatchEvent) {
+ dispatchWorkflowEvent(workflowEventTypes.LOADED, xml, editorConfig.getFileName());
+ }
- return result;
- } catch (err) {
- console.error(err);
+ return result;
+ } catch (err) {
+ console.error(err);
- return {error: err};
+ return { error: err };
+ }
}
}
@@ -120,7 +132,7 @@ export async function deployWorkflowToCamunda(workflowName, workflowXml, viewMap
}
// add diagram to the body
- const bpmnFile = new File([workflowXml], fileName, {type: 'text/xml'});
+ const bpmnFile = new File([workflowXml], fileName, { type: 'text/xml' });
form.append('data', bpmnFile);
// upload all provided views
@@ -151,7 +163,7 @@ export async function deployWorkflowToCamunda(workflowName, workflowXml, viewMap
// abort if there is not exactly one deployed process definition
if (Object.values(result['deployedProcessDefinitions'] || {}).length !== 1) {
console.error('Invalid size of deployed process definitions list: ' + Object.values(result['deployedProcessDefinitions'] || {}).length);
- return {status: 'failed'};
+ return { status: 'failed' };
}
dispatchWorkflowEvent(workflowEventTypes.DEPLOYED, workflowXml, workflowName);
@@ -162,11 +174,11 @@ export async function deployWorkflowToCamunda(workflowName, workflowXml, viewMap
};
} else {
console.error('Deployment of workflow returned invalid status code: %s', response.status);
- return {status: 'failed'};
+ return { status: 'failed' };
}
} catch (error) {
console.error('Error while executing post to deploy workflow: ' + error);
- return {status: 'failed'};
+ return { status: 'failed' };
}
}
@@ -215,6 +227,89 @@ export function openInNewTab(workflowXml, fileName) {
newWindow.onload = function () {
// Pass the XML string to the new window using postMessage
- newWindow.postMessage({workflow: workflowXml, name: fileName}, window.location.href);
+ newWindow.postMessage({ workflow: workflowXml, name: fileName }, window.location.href);
};
+}
+
+export async function saveWorkflowAsSVG(modeler, fileName, fileFormat) {
+ modeler.saveSVG({ format: true }, function (error, svg) {
+ if (error) {
+ return;
+ }
+
+ if (fileFormat === saveFileFormats.ALL || fileFormat === saveFileFormats.SVG) {
+ openFileDialog(svg, fileName, saveFileFormats.SVG)
+ }
+ if (fileFormat === saveFileFormats.ALL || fileFormat === saveFileFormats.PNG) {
+ convertSvgToPng(svg, fileName, saveFileFormats.PNG);
+ }
+ });
+}
+
+// Function to convert SVG to PNG using an external library
+function convertSvgToPng(svg, fileName, fileFormat) {
+ var img = new Image();
+ img.onload = function () {
+ var canvas = document.createElement('canvas');
+ canvas.width = img.width;
+ canvas.height = img.height;
+ var ctx = canvas.getContext('2d');
+ ctx.drawImage(img, 0, 0, img.width, img.height);
+ var pngDataUrl = canvas.toDataURL('image/png');
+ downloadPng(pngDataUrl, fileName, fileFormat);
+ };
+ img.src = 'data:image/svg+xml;base64,' + btoa(unescape(encodeURIComponent(svg)));
+}
+
+// Function to initiate the PNG download
+function downloadPng(pngDataUrl, fileName, fileFormat) {
+ openFileUrlDialog(pngDataUrl, fileName, fileFormat);
+}
+
+async function openFileDialog(content, fileName, fileFormat) {
+ let suggestedName = fileName;
+ if (suggestedName.includes('.bpmn')) {
+ suggestedName = fileName.split('.bpmn')[0];
+ }
+ let fileHandle = await window.showSaveFilePicker({
+ startIn: 'downloads', suggestedName: suggestedName + fileFormat, types: [
+ {
+ description: "BPMN file",
+ accept: { "text/plain": [".bpmn"] },
+ },
+ {
+ description: "SVG file",
+ accept: { "text/plain": [".svg"] },
+ }
+ ]
+ });
+ writeFile(fileHandle, content);
+}
+
+async function openFileUrlDialog(content, fileName, fileFormat) {
+ let suggestedName = fileName;
+ if (suggestedName.includes('.bpmn')) {
+ suggestedName = fileName.split('.bpmn')[0];
+ }
+ let fileHandle = await window.showSaveFilePicker({
+ startIn: 'downloads', suggestedName: suggestedName + fileFormat, types: [
+ {
+ description: "PNG file",
+ accept: { "text/plain": [".png"] },
+ }
+ ]
+ });
+ writeURLToFile(fileHandle, content);
+}
+
+async function writeFile(fileHandle, contents) {
+ const writable = await fileHandle.createWritable();
+ await writable.write(contents);
+ await writable.close();
+}
+
+async function writeURLToFile(fileHandle, url) {
+ const writable = await fileHandle.createWritable();
+ const response = await fetch(url);
+ await response.body.pipeTo(writable);
}
\ No newline at end of file
diff --git a/components/bpmn-q/modeler-component/editor/util/TransformationUtilities.js b/components/bpmn-q/modeler-component/editor/util/TransformationUtilities.js
index b8e8173f..f283945c 100644
--- a/components/bpmn-q/modeler-component/editor/util/TransformationUtilities.js
+++ b/components/bpmn-q/modeler-component/editor/util/TransformationUtilities.js
@@ -48,14 +48,17 @@ export function insertShape(definitions, parent, newElement, idMap, replace, mod
idMap[newElement['id']] = element.id;
// if the element is a subprocess, check if it is expanded in the replacement fragment and expand the new element
- if (newElement.$type === 'bpmn:SubProcess') {
+ if (['bpmn:SubProcess', 'quantme:QuantumHardwareSelectionSubprocess', 'quantme:CircuitCuttingSubprocess'].includes(newElement.$type)) {
// get the shape element related to the subprocess
let shape = getDi(element);
- if (shape && shape.isExpanded) {
+ 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;
- }
+ }*/
// preserve messages defined in ReceiveTasks
} else if (newElement.$type === 'bpmn:ReceiveTask' && newElement.messageRef) {
diff --git a/components/bpmn-q/modeler-component/extensions/data-extension/rules/DataFlowRulesProvider.js b/components/bpmn-q/modeler-component/extensions/data-extension/rules/DataFlowRulesProvider.js
index b01d2991..63cb439a 100644
--- a/components/bpmn-q/modeler-component/extensions/data-extension/rules/DataFlowRulesProvider.js
+++ b/components/bpmn-q/modeler-component/extensions/data-extension/rules/DataFlowRulesProvider.js
@@ -4,7 +4,9 @@ import {
isAny
} from 'bpmn-js/lib/features/modeling/util/ModelingUtil';
import * as consts from '../Constants';
-import {isConnectedWith} from '../../../editor/util/ModellingUtilities';
+import { isConnectedWith } from '../../../editor/util/ModellingUtilities';
+import { getModeler } from '../../../editor/ModelerHandler';
+import ace from 'ace-builds';
/**
* Custom rules provider for the DataFlow elements. Extends the BpmnRules.
@@ -18,6 +20,15 @@ export default class CustomRulesProvider extends BpmnRules {
const canConnect = this.canConnect.bind(this);
const canCreate = this.canCreate.bind(this);
+ // persist into local storage whenever
+ // copy took place
+ eventBus.on('copyPaste.elementsCopied', event => {
+ const { tree } = event;
+
+ // persist in local storage, encoded as json
+ localStorage.setItem('bpmnClipboard', JSON.stringify(tree));
+ });
+
/**
* Fired during creation of a new connection (while you selected the target of a connection)
*/
@@ -56,6 +67,22 @@ export default class CustomRulesProvider extends BpmnRules {
context.position
);
});
+
+ // update xml viewer on diagram change
+ eventBus.on("commandStack.changed", function () {
+ let editor = document.getElementById('editor');
+ let aceEditor = ace.edit(editor);
+ let modeler = getModeler();
+ if (modeler) {
+ modeler.saveXML({ format: true }).then(function (result) {
+ if (result.xml != undefined) {
+ result = result.xml;
+ }
+ aceEditor.setValue(result);
+ })
+ }
+ });
+
}
/**
@@ -78,7 +105,7 @@ export default class CustomRulesProvider extends BpmnRules {
// test connection via sequence flow
if (this.canConnectSequenceFlow(source, target)) {
- return {type: 'bpmn:SequenceFlow'};
+ return { type: 'bpmn:SequenceFlow' };
}
}
@@ -129,20 +156,20 @@ export default class CustomRulesProvider extends BpmnRules {
if (isAny(source, [consts.DATA_MAP_OBJECT]) &&
isAny(target, [consts.DATA_MAP_OBJECT])) {
console.log('Create connection between DataMapObjects with ' + consts.OUTPUT_TRANSFORMATION_ASSOCIATION);
- return {type: consts.OUTPUT_TRANSFORMATION_ASSOCIATION};
+ return { type: consts.OUTPUT_TRANSFORMATION_ASSOCIATION };
}
// the normal rules for a DataObject
if (isAny(source, [consts.DATA_MAP_OBJECT]) && isAny(target, ['bpmn:Activity', 'bpmn:ThrowEvent'])) {
console.log('Map to act');
- return {type: 'bpmn:DataInputAssociation'};
+ return { type: 'bpmn:DataInputAssociation' };
}
if (isAny(target, [consts.DATA_MAP_OBJECT]) && isAny(source, ['bpmn:ThrowEvent'])) {
console.log('Map to act');
return false;
}
if (isAny(target, [consts.DATA_MAP_OBJECT]) && isAny(source, ['bpmn:Activity', 'bpmn:CatchEvent'])) {
- return {type: 'bpmn:DataOutputAssociation'};
+ return { type: 'bpmn:DataOutputAssociation' };
}
if (isAny(source, [consts.DATA_MAP_OBJECT]) && isAny(target, ['bpmn:CatchEvent'])) {
return false;
diff --git a/components/bpmn-q/modeler-component/extensions/data-extension/transformation/TransformationManager.js b/components/bpmn-q/modeler-component/extensions/data-extension/transformation/TransformationManager.js
index 0390b9ba..9671fcb8 100644
--- a/components/bpmn-q/modeler-component/extensions/data-extension/transformation/TransformationManager.js
+++ b/components/bpmn-q/modeler-component/extensions/data-extension/transformation/TransformationManager.js
@@ -1,6 +1,6 @@
-import {is} from 'bpmn-js/lib/util/ModelUtil';
-import {getXml, loadDiagram} from '../../../editor/util/IoUtilities';
-import {createLightweightModeler} from '../../../editor/ModelerHandler';
+import { is } from 'bpmn-js/lib/util/ModelUtil';
+import { getXml } from '../../../editor/util/IoUtilities';
+import { createTempModelerFromXml } from '../../../editor/ModelerHandler';
import * as consts from '../Constants';
import {
getAllElementsForProcess,
@@ -14,6 +14,7 @@ import {
addFormField, findSequenceFlowConnection, getDocumentation,
getRootProcess, setDocumentation,
} from '../../../editor/util/ModellingUtilities';
+import { layout } from '../../quantme/replacement/layouter/Layouter';
/**
* Replace data flow extensions with camunda bpmn elements so that it complies with the standard
@@ -22,8 +23,7 @@ import {
* @returns {Promise<{xml: *, status: string}|{cause: string, status: string}>}
*/
export async function startDataFlowReplacementProcess(xml) {
- let modeler = await createLightweightModeler();
- await loadDiagram(xml, modeler);
+ let modeler = await createTempModelerFromXml(xml);
let elementRegistry = modeler.get('elementRegistry');
let modeling = modeler.get('modeling');
@@ -36,7 +36,7 @@ export async function startDataFlowReplacementProcess(xml) {
if (typeof rootProcess === '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!' };
}
// Mark process as executable
@@ -133,12 +133,12 @@ export async function startDataFlowReplacementProcess(xml) {
for (let c of businessObject.get(consts.CONTENT)) {
let formField =
- {
- 'defaultValue': c.value,
- 'id': name + '.' + c.name,
- 'label': name + '.' + c.name,
- 'type': 'string'
- };
+ {
+ 'defaultValue': c.value,
+ 'id': name + '.' + c.name,
+ 'label': name + '.' + c.name,
+ 'type': 'string'
+ };
addFormField(activity.id, formField, elementRegistry, moddle, modeling);
}
@@ -195,10 +195,10 @@ export async function startDataFlowReplacementProcess(xml) {
}
}
- // layout(modeling, elementRegistry, rootProcess);
+ layout(modeling, elementRegistry, rootProcess);
const transformedXML = await getXml(modeler);
- return {status: 'transformed', xml: transformedXML};
+ return { status: 'transformed', xml: transformedXML };
}
/**
@@ -261,11 +261,11 @@ function transformDataMapObjects(rootProcess, definitions, processContextVariabl
const dataDoc = createDataMapObjectDocs(dataMapObjectBo);
setDocumentation(result.element, currentDoc.concat(dataDoc), bpmnFactory);
} else {
- return {success: false, failedData: dataMapObjectBo};
+ return { success: false, failedData: dataMapObjectBo };
}
}
- return {success: true};
+ return { success: true };
}
/**
@@ -292,10 +292,10 @@ function transformDataStoreMaps(rootProcess, definitions, processContextVariable
if (!result.success) {
// break transformation and propagate failure
- return {success: false, failedData: dataElement.element};
+ return { success: false, failedData: dataElement.element };
}
}
- return {success: true};
+ return { success: true };
}
/**
@@ -336,9 +336,9 @@ export function transformDataStoreMap(dataStoreMap, parentElement, definitions,
const dataDoc = createDataStoreMapDocs(dataStoreMap);
setDocumentation(result.element, currentDoc.concat(dataDoc), bpmnFactory);
} else {
- return {success: false, failedData: dataStoreMap};
+ return { success: false, failedData: dataStoreMap };
}
- return {success: true};
+ return { success: true };
}
@@ -371,13 +371,13 @@ function transformTransformationTask(rootProcess, definitions, processContextVar
const result = insertShape(definitions, serviceTask.parent, serviceTask, {}, true, modeler, transformationTask);
if (!result.success) {
- return {success: false, failedData: transformationTask};
+ return { success: false, failedData: transformationTask };
}
// add parameters attribute as camunda map to service task inputs
addCamundaInputMapParameter(result.element.businessObject, consts.PARAMETERS, transformationTask.get(consts.PARAMETERS), bpmnFactory);
}
- return {success: true};
+ return { success: true };
}
/**
@@ -419,7 +419,7 @@ export function createProcessContextVariablesTask(processContextVariables, rootP
}
}
- return {success: true};
+ return { success: true };
}
/**
@@ -458,15 +458,15 @@ function getProcessContextVariablesTask(startEventElement, parent, bpmnFactory,
const newTaskElement = modeling.createShape({
type: 'bpmn:Task',
businessObject: processVariablesTaskBo,
- }, {x: startEventElement.x, y: startEventElement.y + Y_OFFSET_TASK}, parent, {});
+ }, { x: startEventElement.x, y: startEventElement.y + Y_OFFSET_TASK }, parent, {});
modeling.updateProperties(newTaskElement, processVariablesTaskBo);
// move start event to the left to create space for the new task
- modeling.moveElements([startEventElement], {x: -120, y: 0});
+ modeling.moveElements([startEventElement], { x: -120, y: 0 });
// connect new Task with activities which were connected with the start event
- modeling.connect(startEventElement, newTaskElement, {type: 'bpmn:SequenceFlow'});
+ modeling.connect(startEventElement, newTaskElement, { type: 'bpmn:SequenceFlow' });
for (let outgoingConnectionBo of outgoingFlowElements) {
const outgoingConnectionElement = elementRegistry.get(outgoingConnectionBo.id);
const target = outgoingConnectionElement.target;
diff --git a/components/bpmn-q/modeler-component/extensions/planqk/PlanQKReplaceMenuProvider.js b/components/bpmn-q/modeler-component/extensions/planqk/PlanQKReplaceMenuProvider.js
index ba1a57f8..0b276c90 100644
--- a/components/bpmn-q/modeler-component/extensions/planqk/PlanQKReplaceMenuProvider.js
+++ b/components/bpmn-q/modeler-component/extensions/planqk/PlanQKReplaceMenuProvider.js
@@ -1,8 +1,8 @@
import * as planqkReplaceOptions from './PlanQKReplaceOptions';
-import {is} from 'bpmn-js/lib/util/ModelUtil';
+import { is } from 'bpmn-js/lib/util/ModelUtil';
import * as consts from './utilities/Constants';
-import {createMenuEntries, createMoreOptionsEntryWithReturn} from "../../editor/util/PopupMenuUtilities";
-import {getPluginConfig} from "../../editor/plugin/PluginConfigHandler";
+import { createMenuEntries, createMoreOptionsEntryWithReturn } from "../../editor/util/PopupMenuUtilities";
+import { getPluginConfig } from "../../editor/plugin/PluginConfigHandler";
import * as planqkConsts from './utilities/Constants';
import { filter } from 'min-dash';
import { isDifferentType } from 'bpmn-js/lib/features/popup-menu/util/TypeUtil';
@@ -37,7 +37,7 @@ export default class PlanQKMenuProvider {
getPopupMenuEntries(element) {
const self = this;
return function (entries) {
-
+
// do not show entries for extension elements of other plugins
if (!(element.type.startsWith('bpmn') || element.type.startsWith('planqk'))) {
return entries;
@@ -45,7 +45,8 @@ export default class PlanQKMenuProvider {
// add replacement entries for the active service subscription as replacements for a PlanQK service task
if (is(element, consts.PLANQK_SERVICE_TASK)) {
- return self.createPlanQKServiceTaskEntries(element, self.activeSubscriptions);
+ let serviceTaskEntries = self.createTaskEntries(element, self.activeSubscriptions);
+ return Object.assign(serviceTaskEntries, entries);
}
// add replacement entries for the available data pools as replacements for a PlanQK data pool
@@ -84,9 +85,10 @@ export default class PlanQKMenuProvider {
const replaceElement = this.replaceElement;
const activeSubscriptions = this.activeSubscriptions;
const self = this;
-
let options = self.createPlanQKServiceTaskEntries(element, activeSubscriptions);
- options = Object.assign(createMenuEntries(element, planqkReplaceOptions.TASK, translate, replaceElement), options);
+ if (element.type !== consts.PLANQK_SERVICE_TASK) {
+ options = Object.assign(createMenuEntries(element, planqkReplaceOptions.TASK, translate, replaceElement), options);
+ }
return {
['replace-by-more-planqk-task-options']: createMoreOptionsEntryWithReturn(
@@ -146,7 +148,7 @@ export default class PlanQKMenuProvider {
// replace selected element if it is not already a PlanQK service task
let newElement;
if (element.type !== planqkConsts.PLANQK_SERVICE_TASK) {
- newElement = replaceElement(element, {type: planqkConsts.PLANQK_SERVICE_TASK});
+ newElement = replaceElement(element, { type: planqkConsts.PLANQK_SERVICE_TASK });
}
let serviceElement = newElement || element;
@@ -193,9 +195,9 @@ export default class PlanQKMenuProvider {
for (let dataPool of dataPools) {
if (element.businessObject.name !== dataPool.name) {
dataPoolEntries['replace-with-' + dataPool.id + ' (2)'] = this.createNewDataPoolEntry(element, dataPool);
- }
+ }
}
-
+
return dataPoolEntries;
}
diff --git a/components/bpmn-q/modeler-component/extensions/planqk/exec-completion/PlanQKServiceTaskCompletion.js b/components/bpmn-q/modeler-component/extensions/planqk/exec-completion/PlanQKServiceTaskCompletion.js
index bb1651e6..76950303 100644
--- a/components/bpmn-q/modeler-component/extensions/planqk/exec-completion/PlanQKServiceTaskCompletion.js
+++ b/components/bpmn-q/modeler-component/extensions/planqk/exec-completion/PlanQKServiceTaskCompletion.js
@@ -1,5 +1,5 @@
import * as consts from "../utilities/Constants";
-import {getXml} from "../../../editor/util/IoUtilities";
+import { getXml } from "../../../editor/util/IoUtilities";
import {
setInputParameter,
getDefinitionsFromXml,
@@ -10,13 +10,14 @@ import {
getCamundaInputOutput,
} from "../../../editor/util/ModellingUtilities";
-import {createTempModelerFromXml} from '../../../editor/ModelerHandler';
-import {insertShape} from "../../../editor/util/TransformationUtilities";
+import { createTempModelerFromXml } from '../../../editor/ModelerHandler';
+import { insertShape } from "../../../editor/util/TransformationUtilities";
import * as dataConsts from '../../data-extension/Constants';
import {
createProcessContextVariablesTask,
transformDataStoreMap
} from '../../data-extension/transformation/TransformationManager';
+import { layout } from '../../quantme/replacement/layouter/Layouter';
/**
* Replace custom PlanQK extensions with camunda bpmn elements
@@ -27,6 +28,7 @@ import {
export async function startPlanqkReplacementProcess(xml) {
let modeler = await createTempModelerFromXml(xml);
let elementRegistry = modeler.get('elementRegistry');
+ let modeling = modeler.get('modeling');
// get root element of the current diagram
const definitions = modeler.getDefinitions();
@@ -36,7 +38,7 @@ export async function startPlanqkReplacementProcess(xml) {
if (typeof rootProcess === '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!' };
}
// Mark process as executable
@@ -73,7 +75,7 @@ export async function startPlanqkReplacementProcess(xml) {
// check if transformation is necessary
if (isTransformed) {
- return {status: 'transformed', xml: xml};
+ return { status: 'transformed', xml: xml };
}
const processContextVariables = {};
@@ -101,10 +103,10 @@ export async function startPlanqkReplacementProcess(xml) {
createProcessContextVariablesTask(processContextVariables, rootProcess, definitions, modeler);
}
- // layout(modeling, elementRegistry, rootProcess);
+ layout(modeling, elementRegistry, rootProcess);
const transformedXml = await getXml(modeler);
- return {status: 'transformed', xml: transformedXml};
+ return { status: 'transformed', xml: transformedXml };
}
/**
@@ -204,7 +206,7 @@ async function replaceByDataStore(definitions, dataPool, parentProcess, processC
// add data pool link to details attribute of data pool
const parameters = dataPool.get(dataConsts.DETAILS) || [];
- const linkParam = bpmnFactory.create(dataConsts.KEY_VALUE_ENTRY, {name: consts.DATA_POOL_LINK, value: dataPool.get(consts.DATA_POOL_LINK)});
+ const linkParam = bpmnFactory.create(dataConsts.KEY_VALUE_ENTRY, { name: consts.DATA_POOL_LINK, value: dataPool.get(consts.DATA_POOL_LINK) });
parameters.push(linkParam);
// transform data pool like data store map
@@ -230,7 +232,7 @@ export function getPlanqkServiceTasks(process, elementRegistry) {
for (let i = 0; i < flowElements.length; i++) {
let flowElement = flowElements[i];
if (flowElement.$type && flowElement.$type === consts.PLANQK_SERVICE_TASK) {
- planqkServiceTasks.push({task: flowElement, parent: processBo});
+ planqkServiceTasks.push({ task: flowElement, parent: processBo });
}
// recursively retrieve service tasks if subprocess is found
@@ -258,7 +260,7 @@ export function getPlanqkDataPools(process, elementRegistry) {
for (let i = 0; i < flowElements.length; i++) {
let flowElement = flowElements[i];
if (flowElement.$type && flowElement.$type === consts.PLANQK_DATA_POOL) {
- planqkDataPools.push({pool: flowElement, parent: processBo});
+ planqkDataPools.push({ pool: flowElement, parent: processBo });
}
// recursively retrieve service tasks if subprocess is found
diff --git a/components/bpmn-q/modeler-component/extensions/qhana/transformation/QHAnaTransformationHandler.js b/components/bpmn-q/modeler-component/extensions/qhana/transformation/QHAnaTransformationHandler.js
index 133ff4aa..6c13c7b0 100644
--- a/components/bpmn-q/modeler-component/extensions/qhana/transformation/QHAnaTransformationHandler.js
+++ b/components/bpmn-q/modeler-component/extensions/qhana/transformation/QHAnaTransformationHandler.js
@@ -1,12 +1,13 @@
-import {getXml} from '../../../editor/util/IoUtilities';
-import {createTempModelerFromXml} from '../../../editor/ModelerHandler';
+import { getXml } from '../../../editor/util/IoUtilities';
+import { createTempModelerFromXml } from '../../../editor/ModelerHandler';
import {
addCamundaInputParameter,
getRootProcess,
} from '../../../editor/util/ModellingUtilities';
-import {getAllElementsInProcess, insertShape} from '../../../editor/util/TransformationUtilities';
+import { getAllElementsInProcess, insertShape } from '../../../editor/util/TransformationUtilities';
import * as consts from '../QHAnaConstants';
import * as qhanaConsts from '../QHAnaConstants';
+import { layout } from '../../quantme/replacement/layouter/Layouter';
/**
* Replace QHAna extensions with camunda bpmn elements so that it complies with the standard
@@ -17,6 +18,7 @@ import * as qhanaConsts from '../QHAnaConstants';
export async function startQHAnaReplacementProcess(xml) {
let modeler = await createTempModelerFromXml(xml);
let elementRegistry = modeler.get('elementRegistry');
+ let modeling = modeler.get('modeling');
// get root element of the current diagram
const definitions = modeler.getDefinitions();
@@ -27,7 +29,7 @@ export async function startQHAnaReplacementProcess(xml) {
if (typeof rootProcess === '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!' };
}
// Mark process as executable
@@ -43,7 +45,7 @@ export async function startQHAnaReplacementProcess(xml) {
// skip transformation if no QHAna service tasks and no QHAna service step tasks exist in the process
if ((!qhanaServiceTasks || !qhanaServiceTasks.length) && (!qhanaServiceStepTasks || !qhanaServiceStepTasks.length)) {
- return {status: 'transformed', xml: xml};
+ return { status: 'transformed', xml: xml };
}
// replace each qhana:QHAnaServiceTask with a ServiceTask with external implementation
@@ -79,8 +81,9 @@ export async function startQHAnaReplacementProcess(xml) {
}
const transformedXml = await getXml(modeler);
+ layout(modeling, elementRegistry, rootProcess);
// await saveResultXmlFn(transformedXml);
- return {status: 'transformed', xml: transformedXml};
+ return { status: 'transformed', xml: transformedXml };
}
@@ -99,7 +102,7 @@ async function replaceQHAnaServiceTaskByServiceTask(definitions, qhanaServiceTas
// create a BPMN service task with implementation external
const topic = 'qhana-plugin.' + qhanaServiceTask.get(qhanaConsts.IDENTIFIER);
- const newServiceTask = bpmnFactory.create('bpmn:ServiceTask', {type: 'external', topic: topic});
+ const newServiceTask = bpmnFactory.create('bpmn:ServiceTask', { type: 'external', topic: topic });
let result = insertShape(definitions, parentProcess, newServiceTask, {}, true, modeler, qhanaServiceTask);
@@ -130,7 +133,7 @@ async function replaceQHAnaServiceStepTaskByServiceTask(definitions, qhanaServic
// create a BPMN service task with implementation external and the topic defined in the next step attribute
const topic = 'plugin-step.' + consts.NEXT_STEP;
- const newServiceTask = bpmnFactory.create('bpmn:ServiceTask', {type: 'external', topic: topic});
+ const newServiceTask = bpmnFactory.create('bpmn:ServiceTask', { type: 'external', topic: topic });
let result = insertShape(definitions, parentProcess, newServiceTask, {}, true, modeler, qhanaServiceTask);
diff --git a/components/bpmn-q/modeler-component/extensions/quantme/QuantMEPlugin.js b/components/bpmn-q/modeler-component/extensions/quantme/QuantMEPlugin.js
index 226698da..7a99ad35 100644
--- a/components/bpmn-q/modeler-component/extensions/quantme/QuantMEPlugin.js
+++ b/components/bpmn-q/modeler-component/extensions/quantme/QuantMEPlugin.js
@@ -6,6 +6,7 @@ import OpenToscaTab from "./configTabs/OpenToscaTab";
import NisqAnalyzerTab from "./configTabs/NisqAnalyzerTab";
import QrmDataTab from "./configTabs/QrmDataTab";
import HybridRuntimeTab from "./configTabs/HybridRuntimeTab";
+import UploadTab from "./configTabs/UploadTab";
import {getQRMs} from "./qrm-manager";
import {startQuantmeReplacementProcess} from "./replacement/QuantMETransformator";
import * as camundaConfig from "../../editor/config/EditorConfigManager";
@@ -53,6 +54,11 @@ export default {
tabId: 'HybridRuntimesTab',
tabTitle: 'Hybrid Runtimes',
configTab: HybridRuntimeTab,
+ },
+ {
+ tabId: 'UploadTab',
+ tabTitle: 'Upload data',
+ configTab: UploadTab,
}
],
name: 'quantme',
diff --git a/components/bpmn-q/modeler-component/extensions/quantme/configTabs/QrmDataTab.js b/components/bpmn-q/modeler-component/extensions/quantme/configTabs/QrmDataTab.js
index e08c01a2..6a2b7068 100644
--- a/components/bpmn-q/modeler-component/extensions/quantme/configTabs/QrmDataTab.js
+++ b/components/bpmn-q/modeler-component/extensions/quantme/configTabs/QrmDataTab.js
@@ -14,7 +14,7 @@ export default function QrmDataTab() {
const [githubRepositoryName, setGithubRepositoryName] = useState(config.getQRMRepositoryName());
const [githubUsername, setGithubUsername] = useState(config.getQRMRepositoryUserName());
const [githubRepositoryPath, setGithubRepositoryPath] = useState(config.getQRMRepositoryPath());
-
+ const [githubToken, setGitHubToken] = useState(config.getGitHubToken());
const modeler = getModeler();
const editorActions = modeler.get('editorActions');
@@ -41,15 +41,24 @@ export default function QrmDataTab() {
}
});
}
+ if (!editorActions._actions.hasOwnProperty('githubTokenChanged')) {
+ editorActions.register({
+ githubTokenChanged: function (githubToken) {
+ self.modeler.config.githubToken = githubToken;
+ }
+ });
+ }
// save changed config entries on close
QrmDataTab.prototype.onClose = () => {
modeler.config.githubRepositoryName = githubRepositoryName;
modeler.config.githubUsername = githubUsername;
modeler.config.githubRepositoryPath = githubRepositoryPath;
+ modeler.config.githubToken = githubToken;
config.setQRMRepositoryName(githubRepositoryName);
config.setQRMUserName(githubUsername);
config.setQRMRepositoryPath(githubRepositoryPath);
+ config.setGitHubToken(githubToken);
};
return <>
@@ -88,6 +97,21 @@ export default function QrmDataTab() {
+ GitHub Authentication
+
>;
}
@@ -97,4 +121,6 @@ QrmDataTab.prototype.config = () => {
modeler.config.githubRepositoryName = config.getQRMRepositoryName();
modeler.config.githubUsername = config.getQRMRepositoryUserName();
modeler.config.githubRepositoryPath = config.getQRMRepositoryPath();
+ modeler.config.githubToken = config.getGitHubToken();
+
};
\ No newline at end of file
diff --git a/components/bpmn-q/modeler-component/extensions/quantme/configTabs/UploadTab.js b/components/bpmn-q/modeler-component/extensions/quantme/configTabs/UploadTab.js
new file mode 100644
index 00000000..66624d03
--- /dev/null
+++ b/components/bpmn-q/modeler-component/extensions/quantme/configTabs/UploadTab.js
@@ -0,0 +1,123 @@
+import React, {useState} from 'react';
+import {getModeler} from "../../../editor/ModelerHandler";
+import * as config from "../framework-config/config-manager";
+
+/**
+ * React component specifying a tab for the configuration dialog of the modeler. The tab allows the user to change the
+ * QRM data.
+ *
+ * @return {JSX.Element} The tab as a React component
+ * @constructor
+ */
+export default function UploadTab() {
+
+ const [uploadGithubRepositoryName, setUploadGithubRepositoryName] = useState(config.getUploadGithubRepositoryName());
+ const [uploadGithubOwner, setUploadGithubOwner] = useState(config.getUploadGithubRepositoryOwner());
+ const [uploadFileName, setUploadFileName] = useState(config.getUploadFileName());
+ const [uploadBranchName, setUploadBranchName] = useState(config.getUploadBranchName());
+ const modeler = getModeler();
+
+ const editorActions = modeler.get('editorActions');
+
+ // register editor action listener for changes in config entries
+ if (!editorActions._actions.hasOwnProperty('uploadGithubRepositoryNameChanged')) {
+ editorActions.register({
+ uploadGithubRepositoryNameChanged: function (uploadGithubRepositoryName) {
+ self.modeler.config.uploadGithubRepositoryName = uploadGithubRepositoryName;
+ }
+ });
+ }
+ if (!editorActions._actions.hasOwnProperty('uploadGithubRepositoryOwnerChanged')) {
+ editorActions.register({
+ uploadGithubRepositoryOwnerChanged: function (uploadGithubRepositoryOwner) {
+ self.modeler.config.uploadGithubRepositoryOwner = uploadGithubRepositoryOwner;
+ }
+ });
+ }
+ if (!editorActions._actions.hasOwnProperty('uploadFileNameChanged')) {
+ editorActions.register({
+ uploadFileNameChanged: function (uploadFileName) {
+ self.modeler.config.uploadFileName = uploadFileName;
+ }
+ });
+ }
+
+ if (!editorActions._actions.hasOwnProperty('uploadBranchNameChanged')) {
+ editorActions.register({
+ uploadBranchNameChanged: function (uploadBranchName) {
+ self.modeler.config.uploadBranchName = uploadBranchName;
+ }
+ });
+ }
+
+ // save changed config entries on close
+ UploadTab.prototype.onClose = () => {
+ modeler.config.uploadGithubRepositoryName = uploadGithubRepositoryName;
+ modeler.config.uploadGithubRepositoryOwner = uploadGithubOwner;
+ modeler.config.uploadFileName = uploadFileName;
+ modeler.config.uploadBranchName = uploadBranchName;
+
+ config.setUploadGithubRepositoryName(uploadGithubRepositoryName);
+ config.setUploadGithubRepositoryOwner(uploadGithubOwner);
+ config.setUploadFileName(uploadFileName);
+ config.setUploadBranchName(uploadBranchName);
+
+ };
+
+ return <>
+ Upload Data
+
+ >;
+}
+
+UploadTab.prototype.config = () => {
+ const modeler = getModeler();
+
+ modeler.config.uploadGithubRepositoryName = config.getUploadGithubRepositoryName();
+ modeler.config.uploadGithubRepositoryOwner = config.getUploadGithubRepositoryOwner();
+ modeler.config.uploadFileName = config.getUploadFileName();
+ modeler.config.uploadBranchName = config.getUploadBranchName();
+};
\ No newline at end of file
diff --git a/components/bpmn-q/modeler-component/extensions/quantme/framework-config/config-manager.js b/components/bpmn-q/modeler-component/extensions/quantme/framework-config/config-manager.js
index 11f1a52a..74aec1f0 100644
--- a/components/bpmn-q/modeler-component/extensions/quantme/framework-config/config-manager.js
+++ b/components/bpmn-q/modeler-component/extensions/quantme/framework-config/config-manager.js
@@ -10,7 +10,7 @@
*/
import defaultConfig from "./config";
-import {getPluginConfig} from '../../../editor/plugin/PluginConfigHandler';
+import { getPluginConfig } from '../../../editor/plugin/PluginConfigHandler';
let config = {};
@@ -20,8 +20,8 @@ let config = {};
export function getQuantMEDataConfigurationsEndpoint() {
if (config.quantmeDataConfigurationsEndpoint === undefined) {
setQuantMEDataConfigurationsEndpoint(
- getPluginConfig('quantme').quantmeDataConfigurationsEndpoint
- || defaultConfig.quantmeDataConfigurationsEndpoint);
+ getPluginConfig('quantme').quantmeDataConfigurationsEndpoint
+ || defaultConfig.quantmeDataConfigurationsEndpoint);
}
return config.quantmeDataConfigurationsEndpoint;
}
@@ -41,8 +41,8 @@ export function setQuantMEDataConfigurationsEndpoint(dataConfigurationsEndpoint)
export function getNisqAnalyzerEndpoint() {
if (config.nisqAnalyzerEndpoint === undefined) {
setNisqAnalyzerEndpoint(
- getPluginConfig('quantme').nisqAnalyzerEndpoint
- || defaultConfig.nisqAnalyzerEndpoint);
+ getPluginConfig('quantme').nisqAnalyzerEndpoint
+ || defaultConfig.nisqAnalyzerEndpoint);
}
return config.nisqAnalyzerEndpoint;
}
@@ -62,8 +62,8 @@ export function setNisqAnalyzerEndpoint(nisqAnalyzerEndpoint) {
export function getTransformationFrameworkEndpoint() {
if (config.transformationFrameworkEndpoint === undefined) {
setTransformationFrameworkEndpoint(
- getPluginConfig('quantme').transformationFrameworkEndpoint
- || defaultConfig.transformationFrameworkEndpoint);
+ getPluginConfig('quantme').transformationFrameworkEndpoint
+ || defaultConfig.transformationFrameworkEndpoint);
}
return config.transformationFrameworkEndpoint;
}
@@ -85,8 +85,8 @@ export function setTransformationFrameworkEndpoint(transformationFrameworkEndpoi
export function getOpenTOSCAEndpoint() {
if (config.opentoscaEndpoint === undefined) {
setOpenTOSCAEndpoint(
- getPluginConfig('quantme').opentoscaEndpoint
- || defaultConfig.opentoscaEndpoint);
+ getPluginConfig('quantme').opentoscaEndpoint
+ || defaultConfig.opentoscaEndpoint);
}
return config.opentoscaEndpoint;
}
@@ -110,8 +110,8 @@ export function setOpenTOSCAEndpoint(opentoscaEndpoint) {
export function getWineryEndpoint() {
if (config.wineryEndpoint === undefined) {
setWineryEndpoint(
- getPluginConfig('quantme').wineryEndpoint
- || defaultConfig.wineryEndpoint);
+ getPluginConfig('quantme').wineryEndpoint
+ || defaultConfig.wineryEndpoint);
}
return config.wineryEndpoint;
}
@@ -135,8 +135,8 @@ export function setWineryEndpoint(wineryEndpoint) {
export function getQRMRepositoryPath() {
if (config.githubRepositoryPath === undefined) {
setQRMRepositoryPath(
- getPluginConfig('quantme').githubRepositoryPath
- || defaultConfig.githubRepositoryPath);
+ getPluginConfig('quantme').githubRepositoryPath
+ || defaultConfig.githubRepositoryPath);
}
return config.githubRepositoryPath;
}
@@ -160,8 +160,8 @@ export function setQRMRepositoryPath(repositoryPath) {
export function getQRMRepositoryName() {
if (config.githubRepositoryName === undefined) {
setQRMRepositoryName(
- getPluginConfig('quantme').githubRepositoryName
- || defaultConfig.githubRepositoryName);
+ getPluginConfig('quantme').githubRepositoryName
+ || defaultConfig.githubRepositoryName);
}
return config.githubRepositoryName;
}
@@ -185,8 +185,8 @@ export function setQRMRepositoryName(repositoryName) {
export function getQRMRepositoryUserName() {
if (config.githubUsername === undefined) {
setQRMUserName(
- getPluginConfig('quantme').githubUsername
- || defaultConfig.githubUsername);
+ getPluginConfig('quantme').githubUsername
+ || defaultConfig.githubUsername);
}
return config.githubUsername;
}
@@ -207,11 +207,11 @@ export function setQRMUserName(userName) {
*
* @return {string} the specified username
*/
-export function getGithubToken() {
+export function getGitHubToken() {
if (config.githubToken === undefined) {
- setGithubToken(
- getPluginConfig('quantme').githubToken
- || defaultConfig.githubToken);
+ setGitHubToken(
+ getPluginConfig('quantme').githubToken
+ || defaultConfig.githubToken);
}
return config.githubToken;
}
@@ -221,7 +221,7 @@ export function getGithubToken() {
*
* @param githubToken the username
*/
-export function setGithubToken(githubToken) {
+export function setGitHubToken(githubToken) {
if (githubToken !== null && githubToken !== undefined) {
config.githubToken = githubToken;
}
@@ -235,8 +235,8 @@ export function setGithubToken(githubToken) {
export function getQiskitRuntimeHandlerEndpoint() {
if (config.qiskitRuntimeHandlerEndpoint === undefined) {
setQiskitRuntimeHandlerEndpoint(
- getPluginConfig('quantme').qiskitRuntimeHandlerEndpoint
- || defaultConfig.qiskitRuntimeHandlerEndpoint);
+ getPluginConfig('quantme').qiskitRuntimeHandlerEndpoint
+ || defaultConfig.qiskitRuntimeHandlerEndpoint);
}
return config.qiskitRuntimeHandlerEndpoint;
}
@@ -260,8 +260,8 @@ export function setQiskitRuntimeHandlerEndpoint(endpoint) {
export function getScriptSplitterEndpoint() {
if (config.scriptSplitterEndpoint === undefined) {
setScriptSplitterEndpoint(
- getPluginConfig('quantme').scriptSplitterEndpoint
- || defaultConfig.scriptSplitterEndpoint);
+ getPluginConfig('quantme').scriptSplitterEndpoint
+ || defaultConfig.scriptSplitterEndpoint);
}
return config.scriptSplitterEndpoint;
}
@@ -285,8 +285,8 @@ export function setScriptSplitterEndpoint(endpoint) {
export function getScriptSplitterThreshold() {
if (config.scriptSplitterThreshold === undefined) {
setScriptSplitterThreshold(
- getPluginConfig('quantme').scriptSplitterThreshold
- || defaultConfig.scriptSplitterThreshold);
+ getPluginConfig('quantme').scriptSplitterThreshold
+ || defaultConfig.scriptSplitterThreshold);
}
return config.scriptSplitterThreshold;
}
@@ -310,8 +310,8 @@ export function setScriptSplitterThreshold(threshold) {
export function getHybridRuntimeProvenance() {
if (config.hybridRuntimeProvenance === undefined) {
setHybridRuntimeProvenance(
- getPluginConfig('quantme').hybridRuntimeProvenance
- || defaultConfig.hybridRuntimeProvenance);
+ getPluginConfig('quantme').hybridRuntimeProvenance
+ || defaultConfig.hybridRuntimeProvenance);
}
return config.hybridRuntimeProvenance;
}
@@ -335,8 +335,8 @@ export function setHybridRuntimeProvenance(hybridRuntimeProvenance) {
export function getAWSRuntimeHandlerEndpoint() {
if (config.awsRuntimeHandlerEndpoint === undefined) {
setAWSRuntimeHandlerEndpoint(
- getPluginConfig('quantme').awsRuntimeHandlerEndpoint
- || defaultConfig.awsRuntimeHandlerEndpoint);
+ getPluginConfig('quantme').awsRuntimeHandlerEndpoint
+ || defaultConfig.awsRuntimeHandlerEndpoint);
}
return config.awsRuntimeHandlerEndpoint;
}
@@ -352,6 +352,82 @@ export function setAWSRuntimeHandlerEndpoint(endpoint) {
}
}
+/**
+ * Get the upload Github Repository Name
+ */
+export function getUploadGithubRepositoryName() {
+ if (config.uploadGithubRepositoryName === undefined) {
+ setUploadGithubRepositoryName(defaultConfig.uploadGithubRepositoryName);
+ }
+ return config.uploadGithubRepositoryName;
+}
+
+/**
+ * Set the upload Github Repositoryname
+ */
+export function setUploadGithubRepositoryName(uploadGithubRepositoryName) {
+ if (uploadGithubRepositoryName !== null && uploadGithubRepositoryName !== undefined) {
+ config.uploadGithubRepositoryName = uploadGithubRepositoryName;
+ }
+}
+
+/**
+ * Get the Upload Github ReposÃtory Owner
+ */
+export function getUploadGithubRepositoryOwner() {
+ if (config.uploadGithubRepositoryOwner === undefined) {
+ setUploadGithubRepositoryOwner(defaultConfig.uploadGithubRepositoryOwner);
+ }
+ return config.uploadGithubRepositoryOwner;
+}
+
+/**
+ * Set the Upload Github Repository User
+ */
+export function setUploadGithubRepositoryOwner(uploadGithubRepositoryOwner) {
+ if (uploadGithubRepositoryOwner !== null && uploadGithubRepositoryOwner !== undefined) {
+ config.uploadGithubRepositoryOwner = uploadGithubRepositoryOwner;
+ }
+}
+
+/**
+ * Get the Upload File Name
+ */
+export function getUploadFileName() {
+ if (config.uploadFileName === undefined) {
+ setUploadFileName(defaultConfig.uploadFileName);
+ }
+ return config.uploadFileName;
+}
+
+/**
+ * Set the Upload File Name
+ */
+export function setUploadFileName(uploadFileName) {
+ if (uploadFileName !== null && uploadFileName !== undefined) {
+ config.uploadFileName = uploadFileName;
+ }
+}
+
+/**
+ * Get the Upload Branch Name
+ */
+export function getUploadBranchName() {
+ if (config.uploadBranchName === undefined) {
+ setUploadBranchName(defaultConfig.uploadBranchName);
+ }
+ return config.uploadBranchName;
+}
+
+/**
+ * Set the Upload Branch Name
+ */
+export function setUploadBranchName(uploadBranchName) {
+ if (uploadBranchName !== null && uploadBranchName !== undefined) {
+ config.uploadBranchName = uploadBranchName;
+ }
+}
+
/**
* Reset all saved endpoints and configuration values back to default or the value of the respective plugin config
* by setting this.comfig to an empty js object.
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 05ead47b..10fba564 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
@@ -15,6 +15,7 @@ const defaultConfig = {
opentoscaEndpoint: process.env.OPENTOSCA_ENDPOINT,
wineryEndpoint: process.env.WINERY_ENDPOINT,
nisqAnalyzerEndpoint: process.env.NISQ_ANALYZER_ENDPOINT,
+ githubToken: process.env.GITHUB_TOKEN,
transformationFrameworkEndpoint: process.env.TRANSFORMATION_FRAMEWORK_ENDPOINT,
qiskitRuntimeHandlerEndpoint: process.env.QISKIT_RUNTIME_HANDLER_ENDPOINT,
awsRuntimeHandlerEndpoint: process.env.AWS_RUNTIME_HANDLER_ENDPOINT,
@@ -23,7 +24,10 @@ const defaultConfig = {
githubRepositoryName: process.env.QRM_REPONAME,
githubUsername: process.env.QRM_USERNAME,
githubRepositoryPath: process.env.QRM_REPOPATH,
- githubToken: process.env.GITHUB_TOKEN,
- hybridRuntimeProvenance: process.env.PROVENANCE_COLLECTION
+ hybridRuntimeProvenance: process.env.PROVENANCE_COLLECTION,
+ uploadGithubRepositoryName: process.env.UPLOAD_GITHUB_REPO,
+ uploadGithubRepositoryOwner: process.env.UPLOAD_GITHUB_USER,
+ uploadFileName: process.env.UPLOAD_FILE_NAME,
+ uploadBranchName: process.env.UPLOAD_BRANCH_NAME
};
export default defaultConfig;
\ No newline at end of file
diff --git a/components/bpmn-q/modeler-component/extensions/quantme/modeling/BpmnEditorActions.js b/components/bpmn-q/modeler-component/extensions/quantme/modeling/BpmnEditorActions.js
index e2e70672..be72fae4 100644
--- a/components/bpmn-q/modeler-component/extensions/quantme/modeling/BpmnEditorActions.js
+++ b/components/bpmn-q/modeler-component/extensions/quantme/modeling/BpmnEditorActions.js
@@ -158,6 +158,10 @@ BpmnEditorActions.prototype._registerDefaultActions = function(injector) {
eventBus.fire('removeSelection', context);
});
+ this._registerAction('downloadFiles', function(event) {
+ eventBus.fire('saveFile', {});
+ });
+
this._registerAction('undoOperation', function(event) {
let context = {};
eventBus.fire('undo', context);
diff --git a/components/bpmn-q/modeler-component/extensions/quantme/modeling/BpmnKeyboardBindings.js b/components/bpmn-q/modeler-component/extensions/quantme/modeling/BpmnKeyboardBindings.js
index a62bacde..0f19b051 100644
--- a/components/bpmn-q/modeler-component/extensions/quantme/modeling/BpmnKeyboardBindings.js
+++ b/components/bpmn-q/modeler-component/extensions/quantme/modeling/BpmnKeyboardBindings.js
@@ -1,6 +1,7 @@
import inherits from 'inherits-browser';
import KeyboardBindings from 'diagram-js/lib/features/keyboard/KeyboardBindings';
+import { getModeler } from '../../../editor/ModelerHandler';
/**
* @typedef {import('didi').Injector} Injector
@@ -61,7 +62,7 @@ BpmnKeyboardBindings.prototype.registerBindings = function(keyboard, editorActio
});
// search labels
- // F
+ // CTRL + F
addListener('find', function(context) {
var event = context.keyEvent;
@@ -131,7 +132,7 @@ BpmnKeyboardBindings.prototype.registerBindings = function(keyboard, editorActio
return true;
}
});
-
+
// delete selected element
// D
addListener('removeSelection', function(context) {
@@ -145,7 +146,7 @@ BpmnKeyboardBindings.prototype.registerBindings = function(keyboard, editorActio
});
// undo operation
- // U
+ // CTRL + U
addListener('undoOperation', function(context) {
var event = context.keyEvent;
@@ -157,7 +158,7 @@ BpmnKeyboardBindings.prototype.registerBindings = function(keyboard, editorActio
});
// redo operation
- // R
+ // CTRL + R
addListener('redoOperation', function(context) {
var event = context.keyEvent;
@@ -168,4 +169,72 @@ BpmnKeyboardBindings.prototype.registerBindings = function(keyboard, editorActio
}
});
-};
\ No newline at end of file
+ // download files
+ // CTRL + S
+ addListener('downloadFiles', function(context) {
+ var event = context.keyEvent;
+ if (keyboard.isKey(['s', 'S'], event) && keyboard.isCmd(event)) {
+ event.preventDefault();
+ editorActions.trigger('downloadFiles');
+ return true;
+ }
+ });
+
+ // copy bpmn objects
+ addListener('copy', function(context) {
+
+ // retrieve from local storage
+ const serializedCopy = localStorage.getItem('bpmnClipboard');
+
+ if (!serializedCopy) {
+ return;
+ }
+
+ // parse tree, reinstantiating contained objects
+ const parsedCopy = JSON.parse(serializedCopy, createReviver(getModeler().get('moddle')));
+
+ // put into clipboard
+ getModeler().get('clipboard').set(parsedCopy);
+ });
+
+ /**
+ * A factory function that returns a reviver to be
+ * used with JSON#parse to reinstantiate moddle instances.
+ *
+ * @param {Moddle} moddle
+ *
+ * @return {Function}
+ */
+function createReviver(moddle) {
+
+ var elCache = {};
+
+ return function(key, object) {
+
+ if (typeof object === 'object' && typeof object.$type === 'string') {
+
+ var objectId = object.id;
+
+ if (objectId && elCache[objectId]) {
+ return elCache[objectId];
+ }
+
+ var type = object.$type;
+ var attrs = Object.assign({}, object);
+
+ delete attrs.$type;
+
+ var newEl = moddle.create(type, attrs);
+
+ if (objectId) {
+ elCache[objectId] = newEl;
+ }
+
+ return newEl;
+ }
+
+ return object;
+ };
+}
+
+};
diff --git a/components/bpmn-q/modeler-component/extensions/quantme/modeling/QuantMESVGMap.js b/components/bpmn-q/modeler-component/extensions/quantme/modeling/QuantMESVGMap.js
index 75ba342a..c5f61a2c 100644
--- a/components/bpmn-q/modeler-component/extensions/quantme/modeling/QuantMESVGMap.js
+++ b/components/bpmn-q/modeler-component/extensions/quantme/modeling/QuantMESVGMap.js
@@ -27,7 +27,7 @@ export function getQuantMESVG(svgId) {
'SUBPROCESS_TYPE_CIRCUIT_CUTTING':{ transform: 'matrix(0.23, 0, 0, 0.23, 4, 3)', viewBox: '0 0 144 144', svg: '' },
'TASK_TYPE_PARAMETER_OPTIMIZATION':{ transform: 'matrix(0.22, 0, 0, 0.22, 4, 3)', viewBox: '0 0 125 113', svg: '' },
'TASK_TYPE_VQA':{ transform: 'matrix(0.25, 0, 0, 0.25, 3, 2)', viewBox: '0 0 189 98',svg: '' },
- 'TASK_TYPE_RESULT_EVALUATION':{ transform: 'matrix(0.35, 0, 0, 0.35, 4, -3)', viewBox: '0 0 188.96001 98.400002', svg: '' }
+ 'TASK_TYPE_RESULT_EVALUATION':{ transform: 'matrix(0.35, 0, 0, 0.35, 4, -3)', viewBox: '0 0 188.96001 98.400002', svg: '' }
};
return quantMESVGMap[svgId];
diff --git a/components/bpmn-q/modeler-component/extensions/quantme/modeling/properties-provider/QuantMEPropertyEntries.js b/components/bpmn-q/modeler-component/extensions/quantme/modeling/properties-provider/QuantMEPropertyEntries.js
index 4b2a7d21..7b329b50 100644
--- a/components/bpmn-q/modeler-component/extensions/quantme/modeling/properties-provider/QuantMEPropertyEntries.js
+++ b/components/bpmn-q/modeler-component/extensions/quantme/modeling/properties-provider/QuantMEPropertyEntries.js
@@ -856,7 +856,7 @@ export function MaxNumberOfCutsEntry({ element }) {
return response.json()).then(data => { defaultBranch = data.default_branch; if (branchName === '') { branchName = defaultBranch; } });
+
+ // Construct the API request to get the file's SHA
+ const apiUrl = `https://api.github.com/repos/${githubRepoOwner}/${githubRepo}/contents/${fileName}.bpmn?ref=${branchName}`;
+
+ // check if branch exists
+ let includesBranch = false;
+ const apiBranchUrl = `https://api.github.com/repos/${githubRepoOwner}/${githubRepo}/branches`;
+ await fetch(apiBranchUrl, request)
+ .then(response => response.json()).then(data => {
+ includesBranch = data.some(element => element.name === branchName);
+ });
+
+ if (!includesBranch) {
+ const apiBranchShaUrl = `https://api.github.com/repos/${githubRepoOwner}/${githubRepo}/branches/${defaultBranch}`;
+ let sha = '';
+ await fetch(apiBranchShaUrl, request)
+ .then(response => response.json()).then(data => {
+ sha = data.commit.sha;
+ });
+ await createNewBranch(githubRepoOwner, githubRepo, githubToken, branchName, sha);
+ }
+
+ // Get the file's SHA
+ await fetch(apiUrl, request)
+ .then(response => response.json())
+ .then(fileData => {
+ let updateUrl = apiUrl;
+ if (fileData.message !== 'Not Found') {
+ updateUrl = `https://api.github.com/repos/${githubRepoOwner}/${githubRepo}/contents/${fileName}.bpmn?sha=${fileData.sha}`;
+ }
+
+ const commitMessage = 'Update file';
+
+ const updateRequest = {
+ method: 'PUT',
+ headers: {
+ 'Authorization': `Token ${accessToken}`,
+ 'Content-Type': '*/*'
+ },
+ body: JSON.stringify({
+ message: commitMessage,
+ content: encodedXml,
+ sha: fileData.sha,
+ branch: branchName
+ })
+ };
+
+ // Update the file
+ return fetch(updateUrl, updateRequest);
+ })
+ .then(response => {
+ console.log('Upload successful:', response);
+ })
+ .catch(error => {
+ console.error('Upload failed:', error);
+ });
+};
/**
* Get the URLs to all folders in the given public repository
@@ -20,28 +104,28 @@ import fetch from 'node-fetch';
* @param token github Token that can be used to authenticate
*/
export const getFoldersInRepository = async function (userName, repoName, repoPath, token) {
- const directoryURLs = [];
- const headers = {};
- if (token) {
- headers['Authorization'] = `Token ${token}`;
- }
+ const directoryURLs = [];
+ const headers = {};
+ if (token) {
+ headers['Authorization'] = `Token ${token}`;
+ }
- let response = await fetch(`https://api.github.com/repos/${userName}/${repoName}/contents/${repoPath}?ref=HEAD`, {
- headers: headers
- });
- const contents = await response.json();
+ let response = await fetch(`https://api.github.com/repos/${userName}/${repoName}/contents/${repoPath}?ref=HEAD`, {
+ headers: headers
+ });
+ const contents = await response.json();
- if (response.status !== 200) {
- throw 'Status code not equal to 200: ' + response.status;
- }
+ if (response.status !== 200) {
+ throw 'Status code not equal to 200: ' + response.status;
+ }
- for (let i = 0; i < contents.length; i++) {
- let item = contents[i];
- if (item.type === 'dir') {
- directoryURLs.push(item.url);
- }
+ for (let i = 0; i < contents.length; i++) {
+ let item = contents[i];
+ if (item.type === 'dir') {
+ directoryURLs.push(item.url);
}
- return directoryURLs;
+ }
+ return directoryURLs;
};
/**
@@ -51,8 +135,8 @@ export const getFoldersInRepository = async function (userName, repoName, repoPa
* @returns the content of the given file
*/
export const getFileContent = async function (fileURL) {
- let response = await fetch(fileURL);
- return await response.text();
+ let response = await fetch(fileURL);
+ return await response.text();
};
/**
@@ -62,21 +146,49 @@ export const getFileContent = async function (fileURL) {
* @param token github Token that can be used to authenticate
*/
export const getFilesInFolder = async function (folderURL, token) {
- const fileURLs = [];
- const headers = {};
- if (token) {
- headers['Authorization'] = `Token ${token}`;
+ const fileURLs = [];
+ const headers = {};
+ if (token) {
+ headers['Authorization'] = `Token ${token}`;
+ }
+ let response = await fetch(folderURL, {
+ headers: headers
+ });
+ const contents = await response.json();
+
+ for (let i = 0; i < contents.length; i++) {
+ let item = contents[i];
+ if (item.type === 'file') {
+ fileURLs.push({ name: item.name, download_url: item.download_url });
}
- let response = await fetch(folderURL, {
- headers: headers
- });
- const contents = await response.json();
+ }
+ return fileURLs;
+};
+
+async function createNewBranch(repositoryOwner, repositoryName, accessToken, newBranchName, commitSHA) {
+ try {
+ const response = await fetch(
+ `https://api.github.com/repos/${repositoryOwner}/${repositoryName}/git/refs`,
+ {
+ method: 'POST',
+ headers: {
+ Authorization: `Bearer ${accessToken}`,
+ 'Content-Type': 'application/json',
+ },
+ body: JSON.stringify({
+ ref: `refs/heads/${newBranchName}`,
+ sha: commitSHA,
+ }),
+ }
+ );
- for (let i = 0; i < contents.length; i++) {
- let item = contents[i];
- if (item.type === 'file') {
- fileURLs.push({ name: item.name, download_url: item.download_url });
- }
+ if (response.ok) {
+ console.log(`New branch "${newBranchName}" created successfully!`);
+ } else {
+ const errorData = await response.json();
+ console.error(`Failed to create new branch: ${errorData.message}`);
}
- return fileURLs;
-};
\ No newline at end of file
+ } catch (error) {
+ console.error(error);
+ }
+}
diff --git a/components/bpmn-q/modeler-component/extensions/quantme/qrm-manager/qrm-handler.js b/components/bpmn-q/modeler-component/extensions/quantme/qrm-manager/qrm-handler.js
index 558df497..f5b30c73 100644
--- a/components/bpmn-q/modeler-component/extensions/quantme/qrm-manager/qrm-handler.js
+++ b/components/bpmn-q/modeler-component/extensions/quantme/qrm-manager/qrm-handler.js
@@ -21,9 +21,12 @@ export const getCurrentQRMs = async function () {
// get all folders of the defined QRM repository which could contain a QRM
let folders = [];
+ let repoPath = config.getQRMRepositoryPath().replace(/^\/|\/$/g, '');
+ let QRMs = [];
+
+
try {
- let repoPath = config.getQRMRepositoryPath().replace(/^\/|\/$/g, '');
- folders = await gitHandler.getFoldersInRepository(config.getQRMRepositoryUserName(), config.getQRMRepositoryName(), repoPath, config.getGithubToken());
+ folders = await gitHandler.getFoldersInRepository(config.getQRMRepositoryUserName(), config.getQRMRepositoryName(), repoPath, config.getGitHubToken());
} catch (error) {
throw 'Unable to load QRMs from Github repository with username \''
+ config.getQRMRepositoryUserName() + '\', repository name \'' + config.getQRMRepositoryName() + '\', and path \''
@@ -32,9 +35,9 @@ export const getCurrentQRMs = async function () {
// filter invalid folders and retrieve QRMs
console.log('Found %i folders with QRM candidates!', folders.length);
- let QRMs = [];
+
for (let i = 0; i < folders.length; i++) {
- let qrm = await getQRM(config.getQRMRepositoryUserName(), config.getQRMRepositoryName(), folders[i], config.getGithubToken());
+ let qrm = await getQRM(config.getQRMRepositoryUserName(), config.getQRMRepositoryName(), folders[i], config.getGitHubToken());
if (qrm != null) {
QRMs.push(qrm);
} else {
@@ -42,6 +45,7 @@ export const getCurrentQRMs = async function () {
}
}
+
return QRMs;
};
@@ -51,7 +55,7 @@ export const getCurrentQRMs = async function () {
* @param userName the Github username to which the QRM repository belongs
* @param repoName the Github repository name to load the QRMs from
* @param qrmUrl the URL to the folder containing the potential QRM
- * @param token github Token that can be used to authenticate
+ * @param token the Github token to authenticate requests
* @returns the QRM if it is valid or null otherwise
*/
async function getQRM(userName, repoName, qrmUrl, token) {
@@ -89,4 +93,4 @@ async function getQRM(userName, repoName, qrmUrl, token) {
'detector': await gitHandler.getFileContent(detectorUrl),
'replacement': await gitHandler.getFileContent(replacementUrl)
};
-}
+}
\ No newline at end of file
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 f76bebc4..ef1035d5 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
@@ -54,7 +54,7 @@ function layoutProcess(modeling, elementRegistry, process) {
} else {
// layout elements in subprocess
- if (flowElements[i].$type === 'bpmn: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;
diff --git a/components/bpmn-q/modeler-component/modeler.css b/components/bpmn-q/modeler-component/modeler.css
new file mode 100644
index 00000000..15488b09
--- /dev/null
+++ b/components/bpmn-q/modeler-component/modeler.css
@@ -0,0 +1,54 @@
+.resize {
+ position: absolute;
+ bottom: 45px;
+ right: 0;
+}
+
+.xml-viewer-button {
+ position: absolute;
+ bottom: 45px;
+ left: 20px;
+ z-index: 2;
+}
+
+.ace_editor.ace-tm {
+ width: 99%;
+ top: 0%;
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ z-index: 1;
+}
+
+#properties {
+ cursor: default;
+}
+
+#properties::before {
+ content: '';
+ position: absolute;
+ cursor: w-resize;
+}
+
+body {
+ overflow-y: hidden;
+}
+
+#editor_wrap {
+ position: relative;
+ border-bottom: 1px solid #222222;
+}
+
+#editor_dragbar {
+ position: absolute;
+ top: 200;
+ /* Adjust the initial top position as needed */
+ left: 0;
+ right: 0;
+ background-color: #222222;
+ height: 3px;
+ cursor: row-resize;
+ opacity: 1;
+ z-index: 3;
+}
\ No newline at end of file
diff --git a/components/bpmn-q/package-lock.json b/components/bpmn-q/package-lock.json
index 91a545e7..41f5694e 100644
--- a/components/bpmn-q/package-lock.json
+++ b/components/bpmn-q/package-lock.json
@@ -10,6 +10,7 @@
"license": "Apache-2.0",
"dependencies": {
"@bpmn-io/properties-panel": "^1.3.1",
+ "ace-builds": "^1.23.0",
"autoprefixer": "^10.4.13",
"bpmn-font": "^0.12.0",
"bpmn-js": "^11.1.1",
@@ -52,12 +53,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",
@@ -100,6 +107,325 @@
"xmlbuilder": "^15.1.1"
}
},
+ "bpmnlint-plugin-custom": {
+ "version": "0.0.0",
+ "dev": true,
+ "dependencies": {
+ "bpmnlint-utils": "^1.0.2"
+ },
+ "devDependencies": {
+ "bpmnlint": "^7.2.1",
+ "chai": "^4.2.0",
+ "mocha": "^9.1.3"
+ }
+ },
+ "bpmnlint-plugin-custom/node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "bpmnlint-plugin-custom/node_modules/bpmn-moddle": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/bpmn-moddle/-/bpmn-moddle-7.1.3.tgz",
+ "integrity": "sha512-ZcBfw0NSOdYTSXFKEn7MOXHItz7VfLZTrFYKO8cK6V8ZzGjCcdiLIOiw7Lctw1PJsihhLiZQS8Htj2xKf+NwCg==",
+ "dev": true,
+ "dependencies": {
+ "min-dash": "^3.5.2",
+ "moddle": "^5.0.2",
+ "moddle-xml": "^9.0.6"
+ }
+ },
+ "bpmnlint-plugin-custom/node_modules/bpmnlint": {
+ "version": "7.8.0",
+ "resolved": "https://registry.npmjs.org/bpmnlint/-/bpmnlint-7.8.0.tgz",
+ "integrity": "sha512-hzmDB/yMzv90bRYkey6lvJ5fyqSCBPdIMRLBzWSvqpH/XvSasaRo3Gibp1oX3dJg1JyHeZw4EnJZdhP55CzGWQ==",
+ "dev": true,
+ "dependencies": {
+ "@philippfromme/moddle-helpers": "^0.1.0",
+ "ansi-colors": "^4.1.1",
+ "bpmn-moddle": "^7.1.2",
+ "bpmnlint-utils": "^1.0.2",
+ "cli-table": "^0.3.9",
+ "color-support": "^1.1.3",
+ "min-dash": "^3.8.0",
+ "mri": "^1.2.0",
+ "pluralize": "^7.0.0",
+ "tiny-glob": "^0.2.9"
+ },
+ "bin": {
+ "bpmnlint": "bin/bpmnlint.js"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "bpmnlint-plugin-custom/node_modules/debug": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
+ "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "bpmnlint-plugin-custom/node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "bpmnlint-plugin-custom/node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "bpmnlint-plugin-custom/node_modules/glob": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
+ "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "bpmnlint-plugin-custom/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "bpmnlint-plugin-custom/node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "bpmnlint-plugin-custom/node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "bpmnlint-plugin-custom/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
+ },
+ "bpmnlint-plugin-custom/node_modules/mocha": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz",
+ "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==",
+ "dev": true,
+ "dependencies": {
+ "@ungap/promise-all-settled": "1.1.2",
+ "ansi-colors": "4.1.1",
+ "browser-stdout": "1.3.1",
+ "chokidar": "3.5.3",
+ "debug": "4.3.3",
+ "diff": "5.0.0",
+ "escape-string-regexp": "4.0.0",
+ "find-up": "5.0.0",
+ "glob": "7.2.0",
+ "growl": "1.10.5",
+ "he": "1.2.0",
+ "js-yaml": "4.1.0",
+ "log-symbols": "4.1.0",
+ "minimatch": "4.2.1",
+ "ms": "2.1.3",
+ "nanoid": "3.3.1",
+ "serialize-javascript": "6.0.0",
+ "strip-json-comments": "3.1.1",
+ "supports-color": "8.1.1",
+ "which": "2.0.2",
+ "workerpool": "6.2.0",
+ "yargs": "16.2.0",
+ "yargs-parser": "20.2.4",
+ "yargs-unparser": "2.0.0"
+ },
+ "bin": {
+ "_mocha": "bin/_mocha",
+ "mocha": "bin/mocha"
+ },
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mochajs"
+ }
+ },
+ "bpmnlint-plugin-custom/node_modules/mocha/node_modules/minimatch": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz",
+ "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "bpmnlint-plugin-custom/node_modules/mocha/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true
+ },
+ "bpmnlint-plugin-custom/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"
+ }
+ },
+ "bpmnlint-plugin-custom/node_modules/moddle-xml": {
+ "version": "9.0.6",
+ "resolved": "https://registry.npmjs.org/moddle-xml/-/moddle-xml-9.0.6.tgz",
+ "integrity": "sha512-tl0reHpsY/aKlLGhXeFlQWlYAQHFxTkFqC8tq8jXRYpQSnLVw13T6swMaourLd7EXqHdWsc+5ggsB+fEep6xZQ==",
+ "dev": true,
+ "dependencies": {
+ "min-dash": "^3.5.2",
+ "moddle": "^5.0.2",
+ "saxen": "^8.1.2"
+ }
+ },
+ "bpmnlint-plugin-custom/node_modules/nanoid": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz",
+ "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==",
+ "dev": true,
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "bpmnlint-plugin-custom/node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "bpmnlint-plugin-custom/node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "bpmnlint-plugin-custom/node_modules/serialize-javascript": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
+ "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
+ "dev": true,
+ "dependencies": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "bpmnlint-plugin-custom/node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "bpmnlint-plugin-custom/node_modules/workerpool": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz",
+ "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==",
+ "dev": true
+ },
+ "client": {
+ "dev": true
+ },
+ "edbpmnlint-plugin-custom": {
+ "extraneous": true
+ },
"node_modules/@ampproject/remapping": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
@@ -2321,6 +2647,13 @@
"node": ">= 8"
}
},
+ "node_modules/@philippfromme/moddle-helpers": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@philippfromme/moddle-helpers/-/moddle-helpers-0.1.0.tgz",
+ "integrity": "sha512-eKnrt2mCtcYFhweNr20mOWSG0431BPPFnhYJEQd+D2/5ssWPaHVEEgD3YnUOmbg1gdRQdVe2rrxcdEvvPugB/A==",
+ "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.",
+ "dev": true
+ },
"node_modules/@sindresorhus/is": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz",
@@ -2673,6 +3006,12 @@
"@types/node": "*"
}
},
+ "node_modules/@ungap/promise-all-settled": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz",
+ "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==",
+ "dev": true
+ },
"node_modules/@webassemblyjs/ast": {
"version": "1.11.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz",
@@ -2871,6 +3210,11 @@
"node": ">= 0.6"
}
},
+ "node_modules/ace-builds": {
+ "version": "1.23.0",
+ "resolved": "https://registry.npmjs.org/ace-builds/-/ace-builds-1.23.0.tgz",
+ "integrity": "sha512-PKRuQaQkjIhg1zeqJPW1QFtJO2fx13Nlv7N/VLhQS/kIQ/2aGAgWvYVcE9X64gbSiLzPdY3jcxv5wJJpLj1gLw=="
+ },
"node_modules/acorn": {
"version": "8.8.2",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
@@ -3105,6 +3449,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",
@@ -3230,6 +3583,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",
@@ -3585,6 +3947,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",
@@ -3633,6 +4069,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.0.2",
+ "resolved": "https://registry.npmjs.org/bpmnlint-utils/-/bpmnlint-utils-1.0.2.tgz",
+ "integrity": "sha512-+ti0VICOpgYpQgzpF0mwXqDX4NhrQCc2YKy28VjPu7v9sXpdpWEylP+iBw6WlheJFRcXoZh2q/QRLb5DMB3naQ==",
+ "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",
@@ -4095,6 +4617,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",
@@ -4347,15 +4901,31 @@
"integrity": "sha512-WuWE1nyTNAyW5T7oNyys2EN0cfP2fdRxhxnIQWiAp0bMabPdHhoGxM8A6YL2GhqwgrPnnaemVE7nv5XJ2Fhh2w==",
"dev": true,
"dependencies": {
- "del": "^4.1.1"
+ "del": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "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": ">=10.0.0"
- },
- "peerDependencies": {
- "webpack": ">=4.0.0 <6.0.0"
+ "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",
@@ -4414,12 +4984,30 @@
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
},
+ "node_modules/color-support": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
+ "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
+ "dev": true,
+ "bin": {
+ "color-support": "bin.js"
+ }
+ },
"node_modules/colorette": {
"version": "2.0.19",
"resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz",
"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",
@@ -5252,6 +5840,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",
@@ -5281,6 +5875,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",
@@ -5345,6 +5951,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",
@@ -7715,6 +8355,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",
@@ -7747,6 +8393,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",
@@ -7809,6 +8461,15 @@
"lodash": "^4.17.15"
}
},
+ "node_modules/growl": {
+ "version": "1.10.5",
+ "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
+ "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.x"
+ }
+ },
"node_modules/hammerjs": {
"version": "2.0.8",
"resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz",
@@ -8012,6 +8673,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",
@@ -8402,6 +9069,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",
@@ -9096,6 +9772,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",
@@ -9538,6 +10220,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",
@@ -9828,6 +10547,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",
@@ -9897,6 +10629,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",
@@ -9923,6 +10664,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",
@@ -9955,6 +10702,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",
@@ -10137,6 +10922,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",
@@ -10476,6 +11274,15 @@
"run-queue": "^1.0.3"
}
},
+ "node_modules/mri": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
+ "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
@@ -10665,6 +11472,27 @@
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz",
"integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w=="
},
+ "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,
+ "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-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",
@@ -11355,6 +12183,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",
@@ -12159,6 +12996,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",
@@ -12210,6 +13120,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",
@@ -13171,6 +14094,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",
@@ -13471,6 +14426,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",
@@ -13492,6 +14456,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",
@@ -13734,6 +14707,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",
@@ -13806,6 +14789,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",
@@ -14312,6 +15304,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",
@@ -16930,6 +17932,12 @@
"fastq": "^1.6.0"
}
},
+ "@philippfromme/moddle-helpers": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@philippfromme/moddle-helpers/-/moddle-helpers-0.1.0.tgz",
+ "integrity": "sha512-eKnrt2mCtcYFhweNr20mOWSG0431BPPFnhYJEQd+D2/5ssWPaHVEEgD3YnUOmbg1gdRQdVe2rrxcdEvvPugB/A==",
+ "dev": true
+ },
"@sindresorhus/is": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz",
@@ -17277,6 +18285,12 @@
"@types/node": "*"
}
},
+ "@ungap/promise-all-settled": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz",
+ "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==",
+ "dev": true
+ },
"@webassemblyjs/ast": {
"version": "1.11.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz",
@@ -17449,6 +18463,11 @@
"negotiator": "0.6.3"
}
},
+ "ace-builds": {
+ "version": "1.23.0",
+ "resolved": "https://registry.npmjs.org/ace-builds/-/ace-builds-1.23.0.tgz",
+ "integrity": "sha512-PKRuQaQkjIhg1zeqJPW1QFtJO2fx13Nlv7N/VLhQS/kIQ/2aGAgWvYVcE9X64gbSiLzPdY3jcxv5wJJpLj1gLw=="
+ },
"acorn": {
"version": "8.8.2",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
@@ -17625,6 +18644,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",
@@ -17714,6 +18739,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",
@@ -17990,6 +19021,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",
@@ -18005,31 +19109,339 @@
}
}
},
- "bpmn-js-properties-panel": {
- "version": "1.20.3",
- "resolved": "https://registry.npmjs.org/bpmn-js-properties-panel/-/bpmn-js-properties-panel-1.20.3.tgz",
- "integrity": "sha512-6IsmR7wCQw/uEk/1Wp46gWHzY96x2KslEVnUa/NOh07ZGunfImOYdKD5M/09nIxn+3JroeS+Rb++k75edbleMA==",
- "requires": {
- "@bpmn-io/element-templates-validator": "^0.13.0",
- "@bpmn-io/extract-process-variables": "^0.8.0",
- "array-move": "^3.0.1",
- "classnames": "^2.3.1",
- "ids": "^1.0.0",
- "min-dash": "^4.0.0",
- "min-dom": "^4.0.3",
- "preact-markup": "^2.1.1",
- "semver-compare": "^1.0.0"
- }
- },
- "bpmn-moddle": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/bpmn-moddle/-/bpmn-moddle-8.0.1.tgz",
- "integrity": "sha512-mwZcrWhi52+JH5Oq58WwKYcUxQ1ZMiDQuzt1bpqiqEEFFnQLqCgtLwEXQuDXFmAuQPdMAghyPzqdOZQqIQVesw==",
- "requires": {
- "min-dash": "^4.0.0",
- "moddle": "^6.0.0",
- "moddle-xml": "^10.0.0"
- }
+ "bpmn-js-properties-panel": {
+ "version": "1.20.3",
+ "resolved": "https://registry.npmjs.org/bpmn-js-properties-panel/-/bpmn-js-properties-panel-1.20.3.tgz",
+ "integrity": "sha512-6IsmR7wCQw/uEk/1Wp46gWHzY96x2KslEVnUa/NOh07ZGunfImOYdKD5M/09nIxn+3JroeS+Rb++k75edbleMA==",
+ "requires": {
+ "@bpmn-io/element-templates-validator": "^0.13.0",
+ "@bpmn-io/extract-process-variables": "^0.8.0",
+ "array-move": "^3.0.1",
+ "classnames": "^2.3.1",
+ "ids": "^1.0.0",
+ "min-dash": "^4.0.0",
+ "min-dom": "^4.0.3",
+ "preact-markup": "^2.1.1",
+ "semver-compare": "^1.0.0"
+ }
+ },
+ "bpmn-moddle": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/bpmn-moddle/-/bpmn-moddle-8.0.1.tgz",
+ "integrity": "sha512-mwZcrWhi52+JH5Oq58WwKYcUxQ1ZMiDQuzt1bpqiqEEFFnQLqCgtLwEXQuDXFmAuQPdMAghyPzqdOZQqIQVesw==",
+ "requires": {
+ "min-dash": "^4.0.0",
+ "moddle": "^6.0.0",
+ "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",
+ "requires": {
+ "bpmnlint": "^7.2.1",
+ "bpmnlint-utils": "^1.0.2",
+ "chai": "^4.2.0",
+ "mocha": "^9.1.3"
+ },
+ "dependencies": {
+ "argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "bpmn-moddle": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/bpmn-moddle/-/bpmn-moddle-7.1.3.tgz",
+ "integrity": "sha512-ZcBfw0NSOdYTSXFKEn7MOXHItz7VfLZTrFYKO8cK6V8ZzGjCcdiLIOiw7Lctw1PJsihhLiZQS8Htj2xKf+NwCg==",
+ "dev": true,
+ "requires": {
+ "min-dash": "^3.5.2",
+ "moddle": "^5.0.2",
+ "moddle-xml": "^9.0.6"
+ }
+ },
+ "bpmnlint": {
+ "version": "7.8.0",
+ "resolved": "https://registry.npmjs.org/bpmnlint/-/bpmnlint-7.8.0.tgz",
+ "integrity": "sha512-hzmDB/yMzv90bRYkey6lvJ5fyqSCBPdIMRLBzWSvqpH/XvSasaRo3Gibp1oX3dJg1JyHeZw4EnJZdhP55CzGWQ==",
+ "dev": true,
+ "requires": {
+ "@philippfromme/moddle-helpers": "^0.1.0",
+ "ansi-colors": "^4.1.1",
+ "bpmn-moddle": "^7.1.2",
+ "bpmnlint-utils": "^1.0.2",
+ "cli-table": "^0.3.9",
+ "color-support": "^1.1.3",
+ "min-dash": "^3.8.0",
+ "mri": "^1.2.0",
+ "pluralize": "^7.0.0",
+ "tiny-glob": "^0.2.9"
+ }
+ },
+ "debug": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
+ "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true
+ },
+ "find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
+ "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "requires": {
+ "argparse": "^2.0.1"
+ }
+ },
+ "locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^5.0.0"
+ }
+ },
+ "min-dash": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/min-dash/-/min-dash-3.8.1.tgz",
+ "integrity": "sha512-evumdlmIlg9mbRVPbC4F5FuRhNmcMS5pvuBUbqb1G9v09Ro0ImPEgz5n3khir83lFok1inKqVDjnKEg3GpDxQg==",
+ "dev": true
+ },
+ "mocha": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz",
+ "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==",
+ "dev": true,
+ "requires": {
+ "@ungap/promise-all-settled": "1.1.2",
+ "ansi-colors": "4.1.1",
+ "browser-stdout": "1.3.1",
+ "chokidar": "3.5.3",
+ "debug": "4.3.3",
+ "diff": "5.0.0",
+ "escape-string-regexp": "4.0.0",
+ "find-up": "5.0.0",
+ "glob": "7.2.0",
+ "growl": "1.10.5",
+ "he": "1.2.0",
+ "js-yaml": "4.1.0",
+ "log-symbols": "4.1.0",
+ "minimatch": "4.2.1",
+ "ms": "2.1.3",
+ "nanoid": "3.3.1",
+ "serialize-javascript": "6.0.0",
+ "strip-json-comments": "3.1.1",
+ "supports-color": "8.1.1",
+ "which": "2.0.2",
+ "workerpool": "6.2.0",
+ "yargs": "16.2.0",
+ "yargs-parser": "20.2.4",
+ "yargs-unparser": "2.0.0"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz",
+ "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "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": "9.0.6",
+ "resolved": "https://registry.npmjs.org/moddle-xml/-/moddle-xml-9.0.6.tgz",
+ "integrity": "sha512-tl0reHpsY/aKlLGhXeFlQWlYAQHFxTkFqC8tq8jXRYpQSnLVw13T6swMaourLd7EXqHdWsc+5ggsB+fEep6xZQ==",
+ "dev": true,
+ "requires": {
+ "min-dash": "^3.5.2",
+ "moddle": "^5.0.2",
+ "saxen": "^8.1.2"
+ }
+ },
+ "nanoid": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz",
+ "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==",
+ "dev": true
+ },
+ "p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "requires": {
+ "yocto-queue": "^0.1.0"
+ }
+ },
+ "p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^3.0.2"
+ }
+ },
+ "serialize-javascript": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
+ "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
+ "dev": true,
+ "requires": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "workerpool": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz",
+ "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==",
+ "dev": true
+ }
+ }
+ },
+ "bpmnlint-utils": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bpmnlint-utils/-/bpmnlint-utils-1.0.2.tgz",
+ "integrity": "sha512-+ti0VICOpgYpQgzpF0mwXqDX4NhrQCc2YKy28VjPu7v9sXpdpWEylP+iBw6WlheJFRcXoZh2q/QRLb5DMB3naQ==",
+ "dev": true
},
"brace-expansion": {
"version": "1.1.11",
@@ -18435,6 +19847,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",
@@ -18624,6 +20061,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",
@@ -18673,12 +20122,24 @@
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
},
+ "color-support": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
+ "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
+ "dev": true
+ },
"colorette": {
"version": "2.0.19",
"resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz",
"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",
@@ -19379,6 +20840,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",
@@ -19399,6 +20866,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",
@@ -19446,6 +20922,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",
@@ -21297,6 +22797,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",
@@ -21325,6 +22831,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",
@@ -21378,6 +22890,12 @@
"lodash": "^4.17.15"
}
},
+ "growl": {
+ "version": "1.10.5",
+ "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
+ "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
+ "dev": true
+ },
"hammerjs": {
"version": "2.0.8",
"resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz",
@@ -21531,6 +23049,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",
@@ -21814,6 +23338,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",
@@ -22316,6 +23846,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",
@@ -22670,6 +24206,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",
@@ -22919,6 +24485,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",
@@ -22973,6 +24549,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",
@@ -22992,6 +24574,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",
@@ -23018,6 +24606,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",
@@ -23156,6 +24778,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",
@@ -23426,6 +25058,12 @@
"run-queue": "^1.0.3"
}
},
+ "mri": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
+ "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==",
+ "dev": true
+ },
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
@@ -23571,6 +25209,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",
@@ -24093,6 +25751,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",
@@ -24691,6 +26355,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",
@@ -24738,6 +26459,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",
@@ -25498,6 +27229,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",
@@ -25763,6 +27526,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",
@@ -25778,6 +27547,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",
@@ -25946,6 +27721,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",
@@ -26002,6 +27787,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",
@@ -26363,6 +28154,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",
diff --git a/components/bpmn-q/package.json b/components/bpmn-q/package.json
index 7bbe734c..1d7f909d 100644
--- a/components/bpmn-q/package.json
+++ b/components/bpmn-q/package.json
@@ -3,7 +3,7 @@
"version": "0.1.8",
"description": "",
"package name": "@PlanQK/workflow-modeler",
- "main": "public/index.js",
+ "main": "index.js",
"files": [
"public/**/*",
"!public/index.html"
@@ -12,7 +12,8 @@
"test": "karma start",
"test:watch": "npm test -- --auto-watch --no-single-run",
"build": "webpack",
- "dev": "webpack-dev-server --open"
+ "dev": "webpack-dev-server",
+ "dev-open": "webpack-dev-server --open"
},
"author": "",
"license": "Apache-2.0",
@@ -23,6 +24,7 @@
},
"dependencies": {
"@bpmn-io/properties-panel": "^1.3.1",
+ "ace-builds": "^1.23.0",
"autoprefixer": "^10.4.13",
"bpmn-font": "^0.12.0",
"bpmn-js": "^11.1.1",
@@ -42,8 +44,8 @@
"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",
@@ -65,12 +67,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",
diff --git a/components/bpmn-q/public/index.html b/components/bpmn-q/public/index.html
index 206d6868..b3b752f2 100644
--- a/components/bpmn-q/public/index.html
+++ b/components/bpmn-q/public/index.html
@@ -1,167 +1,181 @@
+
+
Workflow Modeler
+
-
-
-
-
-
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/bpmn-q/test/tests/dataflow/DataFlowWorkflows.js b/components/bpmn-q/test/tests/dataflow/DataFlowWorkflows.js
index 67238daf..07cfc78e 100644
--- a/components/bpmn-q/test/tests/dataflow/DataFlowWorkflows.js
+++ b/components/bpmn-q/test/tests/dataflow/DataFlowWorkflows.js
@@ -27,7 +27,7 @@ export const MULTI_IO_WORKFLOW = ' ]+>[\s\S]*?<\/bpmndi:BPMNDiagram>/g, '');
+
+ expect(workflowWithoutDiagramElements).to.equal(UNTRANSFORMED_BPMN_WORKFLOW);
});
it('Should transform all input and output data map objects', async function () {
- setPluginConfig([{name: 'dataflow'}]);
+ setPluginConfig([{ name: 'dataflow' }]);
const result = await startDataFlowReplacementProcess(MULTI_IO_WORKFLOW);
@@ -207,7 +210,7 @@ describe('Test the TransformationManager of the data flow extension.', function
});
it('Should created documentation in transformed data map objects', async function () {
- setPluginConfig([{name: 'dataflow'}]);
+ setPluginConfig([{ name: 'dataflow' }]);
const result = await startDataFlowReplacementProcess(DOCUMENTATION_WORKFLOW);
@@ -246,7 +249,7 @@ describe('Test the TransformationManager of the data flow extension.', function
});
it('Should not create a task for publishing global process variables', async function () {
- setPluginConfig([{name: 'dataflow'}]);
+ setPluginConfig([{ name: 'dataflow' }]);
const result = await startDataFlowReplacementProcess(ONLY_LOCAL_VARS_WORKFLOW);
@@ -265,7 +268,7 @@ describe('Test the TransformationManager of the data flow extension.', function
});
it('Should create a task for process variables because a DataMapObject is used before its initialization', async function () {
- setPluginConfig([{name: 'dataflow'}]);
+ setPluginConfig([{ name: 'dataflow' }]);
const result = await startDataFlowReplacementProcess(USED_BEFORE_INIT_WORKFLOW);
@@ -294,7 +297,7 @@ describe('Test the TransformationManager of the data flow extension.', function
});
it('Should create a task for process variables for each start event', async function () {
- setPluginConfig([{name: 'dataflow'}]);
+ setPluginConfig([{ name: 'dataflow' }]);
const result = await startDataFlowReplacementProcess(MULTIPLE_START_EVENTS_WORKFLOW);
@@ -336,7 +339,7 @@ describe('Test the TransformationManager of the data flow extension.', function
});
it('Should create a task for process variables inside the subprocess', async function () {
- setPluginConfig([{name: 'dataflow'}]);
+ setPluginConfig([{ name: 'dataflow' }]);
const result = await startDataFlowReplacementProcess(SUBPROCESS_WORKFLOW);
@@ -379,7 +382,7 @@ describe('Test the TransformationManager of the data flow extension.', function
});
it('Should transform split and merged DataMapObjects', async function () {
- setPluginConfig([{name: 'dataflow'}]);
+ setPluginConfig([{ name: 'dataflow' }]);
const result = await startDataFlowReplacementProcess(SPLIT_MERGE_WORKFLOW);
@@ -463,7 +466,7 @@ describe('Test the TransformationManager of the data flow extension.', function
});
it('Should add TransformationAssociation expressions to the input', async function () {
- setPluginConfig([{name: 'dataflow'}]);
+ setPluginConfig([{ name: 'dataflow' }]);
const result = await startDataFlowReplacementProcess(INPUT_TRANSFORMATION_ASSOCIATION);
diff --git a/components/bpmn-q/test/tests/editor/editor.spec.js b/components/bpmn-q/test/tests/editor/editor.spec.js
index 395951a7..b243ce98 100644
--- a/components/bpmn-q/test/tests/editor/editor.spec.js
+++ b/components/bpmn-q/test/tests/editor/editor.spec.js
@@ -49,11 +49,11 @@ describe('Test editor functions', function () {
});
afterEach('reset fileName', function () {
- editorConfig.setFileName('quantum-workflow-model.bpmn');
+ editorConfig.setFileName('quantum-workflow-model');
});
it('Should configure fileName', function () {
- const newFileName = 'new-file.bpmn';
+ const newFileName = 'new-file';
setPluginConfig([{name: 'editor', config: {fileName: newFileName}}]);
const endpointConfig = editorConfig.getFileName();
@@ -70,7 +70,7 @@ describe('Test editor functions', function () {
const endpointConfig = editorConfig.getFileName();
- expect(endpointConfig).to.equal('quantum-workflow-model.bpmn');
+ expect(endpointConfig).to.equal('quantum-workflow-model');
});
it('Should use default camundaEndpoint if no pluginConfig is defined', function () {
@@ -78,7 +78,7 @@ describe('Test editor functions', function () {
const endpointConfig = editorConfig.getFileName();
- expect(endpointConfig).to.equal('quantum-workflow-model.bpmn');
+ expect(endpointConfig).to.equal('quantum-workflow-model');
});
});
});
diff --git a/components/bpmn-q/test/tests/editor/plugin.spec.js b/components/bpmn-q/test/tests/editor/plugin.spec.js
index adf87c37..271ea7c8 100644
--- a/components/bpmn-q/test/tests/editor/plugin.spec.js
+++ b/components/bpmn-q/test/tests/editor/plugin.spec.js
@@ -54,7 +54,7 @@ describe('Test plugins', function () {
expect(extensions['planqk']).to.not.be.undefined;
expect(transfButtons.length).to.equal(3);
expect(buttons.length).to.equal(2);
- expect(tabs.length).to.equal(8);
+ expect(tabs.length).to.equal(9);
expect(styles.length).to.equal(3);
});
});
diff --git a/components/bpmn-q/webpack.config.js b/components/bpmn-q/webpack.config.js
index 20aee90c..85d9aaa8 100644
--- a/components/bpmn-q/webpack.config.js
+++ b/components/bpmn-q/webpack.config.js
@@ -1,6 +1,6 @@
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const path = require('path');
-const webpack = require('webpack')
+const webpack = require('webpack');
module.exports = {
entry: {
@@ -29,6 +29,10 @@ module.exports = {
"less-loader",
],
},
+ {
+ test: /\.bpmnlintrc$/i,
+ use: 'bpmnlint-loader',
+ },
{
test: /\.jsx?$/,
exclude: /node_modules/,
@@ -61,27 +65,32 @@ module.exports = {
AWS_RUNTIME_HANDLER_ENDPOINT: 'http://localhost:8890',
CAMUNDA_ENDPOINT: 'http://localhost:8080/engine-rest',
DATA_CONFIG: 'http://localhost:8100/data-objects',
+ GITHUB_TOKEN: '',
+ NISQ_ANALYZER_ENDPOINT: 'http://localhost:8098/nisq-analyzer',
+ OPENTOSCA_ENDPOINT: 'http://localhost:1337/csars',
+ PROVENANCE_COLLECTION: false,
+ DOWNLOAD_FILE_NAME: 'quantum-workflow-model',
ENABLE_DATA_FLOW_PLUGIN: true,
ENABLE_PLANQK_PLUGIN: true,
ENABLE_QHANA_PLUGIN: true,
ENABLE_QUANTME_PLUGIN: true,
- GITHUB_TOKEN: '',
- OPENTOSCA_ENDPOINT: 'http://localhost:1337/csars',
- NISQ_ANALYZER_ENDPOINT: 'http://localhost:8098/nisq-analyzer',
QISKIT_RUNTIME_HANDLER_ENDPOINT: 'http://localhost:8889',
QHANA_GET_PLUGIN_URL: 'http://localhost:5006/api/plugins/',
QHANA_LIST_PLUGINS_URL: 'http://localhost:5006/api/plugins/?item-count=100',
QRM_USERNAME: '',
- QRM_REPONAME: '',
+ QRM_REPONAME: '',
QRM_REPOPATH: '',
SERVICE_DATA_CONFIG: 'http://localhost:8000/service-task',
SCRIPT_SPLITTER_ENDPOINT: 'http://localhost:8891',
SCRIPT_SPLITTER_THRESHOLD: 5,
TRANSFORMATION_FRAMEWORK_ENDPOINT: 'http://localhost:8888',
- WINERY_ENDPOINT: 'http://localhost:8081/winery',
- PROVENANCE_COLLECTION: false
+ UPLOAD_BRANCH_NAME: '',
+ UPLOAD_FILE_NAME: 'workflow',
+ UPLOAD_GITHUB_REPO: '',
+ UPLOAD_GITHUB_USER: '',
+ WINERY_ENDPOINT: 'http://localhost:8081/winery'
})
],
mode: 'development',
- devtool: 'source-map',
+ devtool: 'source-map'
};