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..c98920ae 100644 --- a/components/bpmn-q/.gitignore +++ b/components/bpmn-q/.gitignore @@ -1,3 +1,4 @@ node_modules/* public/* -!public/index.html \ No newline at end of file +!public/index.html +bpmnlint-plugin-custom/node_modules/* \ No newline at end of file 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 44357cf8..daec9ec6 100644 --- a/components/bpmn-q/modeler-component/QuantumWorkflowModeler.js +++ b/components/bpmn-q/modeler-component/QuantumWorkflowModeler.js @@ -9,17 +9,19 @@ 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'; /** * The Quantum Workflow modeler HTML web component which contains the bpmn-js modeler to model BPMN diagrams, an editor @@ -66,7 +68,7 @@ export class QuantumWorkflowModeler extends HTMLElement { event.preventDefault(); return event.returnValue = ''; }; - addEventListener("beforeunload", beforeUnloadListener, {capture: true}); + addEventListener("beforeunload", beforeUnloadListener, { capture: true }); } @@ -80,10 +82,116 @@ 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; + var propertiesElement = document.getElementById("properties"); + + propertiesElement.addEventListener("mousemove", function (e) { + var rect = this.getBoundingClientRect(); + var x = e.clientX - rect.left; + var y = e.clientY - rect.top; + + var 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) { + var rect = panel.getBoundingClientRect(); + var x = event.clientX - rect.left; + + var 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; + }); } /** @@ -121,7 +229,7 @@ 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; @@ -182,4 +290,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 58822c38..288375b2 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 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 063bb656..2f31d19b 100644 --- a/components/bpmn-q/modeler-component/editor/config/EditorConfigManager.js +++ b/components/bpmn-q/modeler-component/editor/config/EditorConfigManager.js @@ -4,7 +4,7 @@ import { saveFileFormats, transformedWorkflowHandlers, autoSaveFile } from '../E // 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, autoSaveFileOption: autoSaveFile.INTERVAL, fileFormat: saveFileFormats.BPMN @@ -55,7 +55,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; diff --git a/components/bpmn-q/modeler-component/editor/config/GeneralTab.js b/components/bpmn-q/modeler-component/editor/config/GeneralTab.js index 2c6555c8..06d964fe 100644 --- a/components/bpmn-q/modeler-component/editor/config/GeneralTab.js +++ b/components/bpmn-q/modeler-component/editor/config/GeneralTab.js @@ -1,5 +1,5 @@ -import React, {useState} from 'react'; -import {getModeler} from "../ModelerHandler"; +import React, { useState } from 'react'; +import { getModeler } from "../ModelerHandler"; import * as editorConfig from "./EditorConfigManager"; import { autoSaveFile, saveFileFormats, transformedWorkflowHandlers } from '../EditorConstants'; @@ -31,9 +31,19 @@ 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.setAutoSaveFileOption(autoSaveFileOption); @@ -46,37 +56,68 @@ export default function EditorTab() {

Workflow Engine configuration:

- - - - + + + +
Camunda Engine Endpoint - setCamundaEndpoint(event.target.value)}/> -
Camunda Engine Endpoint + setCamundaEndpoint(event.target.value)} /> +

Handle for transformed workflows:

- - - + + - + + + +
Transformed Workflow Handler - +
Transformed Workflow Handler + -
+

Download workflow:

+ + + + + + + + + +
Download file name + setFileName(event.target.value)} /> +
Download file format + + +

Auto save file:

@@ -106,4 +147,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/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/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/util/IoUtilities.js b/components/bpmn-q/modeler-component/editor/util/IoUtilities.js index b6ab909d..a9636e6a 100644 --- a/components/bpmn-q/modeler-component/editor/util/IoUtilities.js +++ b/components/bpmn-q/modeler-component/editor/util/IoUtilities.js @@ -33,7 +33,7 @@ export async function saveXmlAsLocalFile(xml, fileName = editorConfig.getFileNam 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(); @@ -72,7 +72,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; } @@ -97,7 +97,7 @@ export async function loadDiagram(xml, modeler, dispatchEvent = true) { } catch (err) { console.error(err); - return {error: err}; + return { error: err }; } } @@ -134,7 +134,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 @@ -165,7 +165,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); @@ -176,11 +176,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' }; } } @@ -229,7 +229,7 @@ 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); }; } 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 94c3cc17..0c86058f 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 @@ -20,6 +20,15 @@ export default class CustomRulesProvider extends BpmnRules { const canCreate = this.canCreate.bind(this); let autosaveTimeout = 0; + // 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) */ @@ -86,7 +95,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' }; } } @@ -137,20 +146,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/framework-config/config-manager.js b/components/bpmn-q/modeler-component/extensions/quantme/framework-config/config-manager.js index 112b82bb..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 @@ -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; } @@ -210,8 +210,8 @@ export function setQRMUserName(userName) { export function getGitHubToken() { if (config.githubToken === undefined) { setGitHubToken( - getPluginConfig('quantme').githubToken - || defaultConfig.githubToken); + getPluginConfig('quantme').githubToken + || defaultConfig.githubToken); } return config.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; } 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: 'image/svg+xml' } + '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 = 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 +2646,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 +3005,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", @@ -3105,6 +3443,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 +3577,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 +3941,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 +4063,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 +4611,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", @@ -4356,6 +4904,22 @@ "webpack": ">=4.0.0 <6.0.0" } }, + "node_modules/cli-table": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.11.tgz", + "integrity": "sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==", + "dev": true, + "dependencies": { + "colors": "1.0.3" + }, + "engines": { + "node": ">= 0.2.0" + } + }, + "node_modules/client": { + "resolved": "client", + "link": true + }, "node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -4414,12 +4978,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 +5834,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 +5869,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 +5945,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 +8349,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 +8387,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 +8455,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 +8667,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 +9063,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 +9766,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 +10214,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 +10541,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 +10623,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 +10658,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 +10696,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 +10916,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 +11268,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 +11466,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 +12177,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 +12990,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 +13114,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 +14088,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 +14420,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 +14450,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 +14701,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 +14783,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 +15298,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 +17926,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 +18279,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", @@ -17625,6 +18633,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 +18728,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 +19010,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 +19098,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 +19836,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 +20050,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 +20111,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 +20829,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 +20855,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 +20911,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 +22786,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 +22820,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 +22879,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 +23038,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 +23327,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 +23835,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 +24195,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 +24474,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 +24538,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 +24563,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 +24595,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 +24767,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 +25047,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 +25198,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 +25740,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 +26344,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 +26448,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 +27218,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 +27515,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 +27536,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 +27710,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 +27776,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 +28143,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..388a747f 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", @@ -110,6 +111,12 @@ "webpack": "^5.75.0", "webpack-cli": "^5.0.0", "webpack-dev-server": "^4.11.1", - "xmlbuilder": "^15.1.1" + "xmlbuilder": "^15.1.1", + "bpmn-js-bpmnlint": "^0.14.0", + "bpmnlint": "^6.3.0", + "bpmnlint-loader": "^0.1.4", + "bpmnlint-plugin-camunda": "^0.4.2", + "bpmnlint-plugin-custom": "file:bpmnlint-plugin-custom", + "client": "file:client" } } 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/webpack.config.js b/components/bpmn-q/webpack.config.js index 38ade980..002e5368 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/, @@ -65,6 +69,7 @@ module.exports = { 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, @@ -77,7 +82,7 @@ module.exports = { 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',