diff --git a/package-lock.json b/package-lock.json index 6797535e5..cad25b110 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,6 +22,7 @@ "@bpmn-io/element-templates-icons-renderer": "^0.3.0", "@bpmn-io/properties-panel": "^3.15.0", "@bpmn-io/variable-resolver": "^1.2.0", + "@camunda/linting": "^3.12.0", "@rollup/plugin-alias": "^5.1.0", "@rollup/plugin-babel": "^6.0.4", "@rollup/plugin-commonjs": "^25.0.7", @@ -33,6 +34,7 @@ "babel-plugin-istanbul": "^6.1.1", "bpmn-js": "^16.1.0", "bpmn-js-create-append-anything": "^0.4.0", + "bpmn-js-element-templates": "^1.10.0", "bpmn-moddle": "^8.0.1", "camunda-bpmn-js-behaviors": "^1.2.2", "camunda-bpmn-moddle": "^7.0.1", @@ -588,6 +590,18 @@ "diagram-js": ">= 7" } }, + "node_modules/@bpmn-io/element-templates-validator": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@bpmn-io/element-templates-validator/-/element-templates-validator-1.7.0.tgz", + "integrity": "sha512-IBBUyb045OzXJUMN4Xs8FEL6wwykzqYRcAgoC3Krb2gb4d6mbnpe1b8LUutMpz3PYlomVgRXdTkL+zdGwbO7qQ==", + "dev": true, + "dependencies": { + "@camunda/element-templates-json-schema": "^0.16.0", + "@camunda/zeebe-element-templates-json-schema": "^0.17.0", + "json-source-map": "^0.6.1", + "min-dash": "^4.1.1" + } + }, "node_modules/@bpmn-io/extract-process-variables": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@bpmn-io/extract-process-variables/-/extract-process-variables-0.8.0.tgz", @@ -630,6 +644,15 @@ "node": "*" } }, + "node_modules/@bpmn-io/moddle-utils": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@bpmn-io/moddle-utils/-/moddle-utils-0.2.1.tgz", + "integrity": "sha512-iv9zwk7PEGupSq9bkVZNFL0ZmoJLHExlUcjsiYx200Nh3a5mH9BHXF+PLaSaiE4882KVEirklpWf3oQLAmShSA==", + "dev": true, + "dependencies": { + "min-dash": "^4.1.1" + } + }, "node_modules/@bpmn-io/properties-panel": { "version": "3.15.0", "resolved": "https://registry.npmjs.org/@bpmn-io/properties-panel/-/properties-panel-3.15.0.tgz", @@ -663,6 +686,46 @@ "bpmn-js": "*" } }, + "node_modules/@camunda/element-templates-json-schema": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@camunda/element-templates-json-schema/-/element-templates-json-schema-0.16.0.tgz", + "integrity": "sha512-QXlizHS2wh05JZJcVoJHd974SI/bWyGJxrgA8STmqMSUBnslDpCkaCTuxtW9YGsqImOkXKaSYI2843AbMOWBXQ==", + "dev": true + }, + "node_modules/@camunda/linting": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/@camunda/linting/-/linting-3.12.0.tgz", + "integrity": "sha512-lNyPbkVHKWBDgtPOLlA4sTHi+1YCrEMZb9qd7wAW1Ptrau26g/s4J8iuXtGwe4b6SRkIsKF/s0AdweVG733E4w==", + "dev": true, + "dependencies": { + "@bpmn-io/diagram-js-ui": "^0.2.2", + "bpmn-moddle": "^8.0.0", + "bpmnlint": "^9.2.0", + "bpmnlint-plugin-camunda-compat": "^2.13.0", + "bpmnlint-utils": "^1.0.2", + "camunda-bpmn-moddle": "^7.0.1", + "clsx": "^2.0.0", + "min-dash": "^4.0.0", + "min-dom": "^4.1.0", + "modeler-moddle": "^0.2.0", + "semver-compare": "^1.0.0", + "zeebe-bpmn-moddle": "^1.0.0" + }, + "peerDependencies": { + "bpmn-js-properties-panel": ">= 2.0.0" + }, + "peerDependenciesMeta": { + "bpmn-js-properties-panel": { + "optional": true + } + } + }, + "node_modules/@camunda/zeebe-element-templates-json-schema": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@camunda/zeebe-element-templates-json-schema/-/zeebe-element-templates-json-schema-0.17.0.tgz", + "integrity": "sha512-iUGC1NdD/w9exO3Eap1d69EcH+uoff+YX1mswUJDqk6OqeDAfnHayClNdHR24VDctdHuwNrqOdGN+/1E/WsMow==", + "dev": true + }, "node_modules/@codemirror/autocomplete": { "version": "6.11.1", "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.11.1.tgz", @@ -2439,6 +2502,57 @@ "@bpmn-io/element-template-chooser": "^1.0.0" } }, + "node_modules/bpmn-js-element-templates": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/bpmn-js-element-templates/-/bpmn-js-element-templates-1.10.0.tgz", + "integrity": "sha512-Ic+Eq3PvBh2VgkBUwlQd6Fc4DlBNXtf+vRQGzLHGCphgVhOnE3IyN1fZOvV+D5Cu1Fdb7enKGdWQxYy7GOdzNg==", + "dev": true, + "dependencies": { + "@bpmn-io/element-templates-validator": "^1.7.0", + "@bpmn-io/extract-process-variables": "^0.8.0", + "bpmnlint": "^9.2.0", + "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", + "uuid": "^9.0.0" + }, + "engines": { + "node": "*" + }, + "peerDependencies": { + "@bpmn-io/properties-panel": ">= 2.2", + "bpmn-js": ">= 11.5", + "bpmn-js-properties-panel": ">= 2", + "camunda-bpmn-js-behaviors": ">= 1.2.1", + "diagram-js": ">= 11.9" + } + }, + "node_modules/bpmn-js-properties-panel": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/bpmn-js-properties-panel/-/bpmn-js-properties-panel-5.7.0.tgz", + "integrity": "sha512-6dbMf69FthXP+J3rLzN0ot88n55fyoVLMFO0vX2/yI1fgzhvi14TTOvZEYGi7KVvJIQDPV5YYtxSytUL3t0B9A==", + "dev": true, + "peer": true, + "dependencies": { + "@bpmn-io/extract-process-variables": "^0.8.0", + "array-move": "^3.0.1", + "ids": "^1.0.5", + "min-dash": "^4.1.1", + "min-dom": "^4.1.0" + }, + "engines": { + "node": "*" + }, + "peerDependencies": { + "@bpmn-io/properties-panel": ">= 3.7", + "bpmn-js": ">= 11.5", + "camunda-bpmn-js-behaviors": ">= 0.4", + "diagram-js": ">= 11.9" + } + }, "node_modules/bpmn-moddle": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/bpmn-moddle/-/bpmn-moddle-8.0.1.tgz", @@ -2450,6 +2564,61 @@ "moddle-xml": "^10.0.0" } }, + "node_modules/bpmnlint": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/bpmnlint/-/bpmnlint-9.2.0.tgz", + "integrity": "sha512-GJVe6t0lSUTqKH1FeM9ueqop+zZh7Ag4QsWhiHrpU4Zt6XmGIXNfxwLrX8JvqNzxJIdhpF+YRT7rY2qQQhvYBg==", + "dev": true, + "dependencies": { + "@bpmn-io/moddle-utils": "^0.2.0", + "ansi-colors": "^4.1.3", + "bpmn-moddle": "^8.0.1", + "bpmnlint-utils": "^1.1.1", + "cli-table": "^0.3.11", + "color-support": "^1.1.3", + "min-dash": "^4.1.1", + "mri": "^1.2.0", + "pluralize": "^7.0.0", + "tiny-glob": "^0.2.9" + }, + "bin": { + "bpmnlint": "bin/bpmnlint.js" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/bpmnlint-plugin-camunda-compat": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/bpmnlint-plugin-camunda-compat/-/bpmnlint-plugin-camunda-compat-2.13.0.tgz", + "integrity": "sha512-YjgiLMTi7LTT6NmKTQJskLL1j3YacJG3nft45Lo6o4/7ipkC3oJ7E++P5KxzanR7cErEU++TyEpponZafabROw==", + "dev": true, + "dependencies": { + "@bpmn-io/feel-lint": "^1.0.0", + "@bpmn-io/moddle-utils": "^0.2.1", + "bpmnlint-utils": "^1.0.2", + "min-dash": "^4.1.1", + "semver-compare": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/bpmnlint-utils": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bpmnlint-utils/-/bpmnlint-utils-1.1.1.tgz", + "integrity": "sha512-Afdb77FmwNB3INyUfbzXW40yY+mc0qYU3SgDFeI4zTtduiVomOlfqoXiEaUIGI8Hyh7aVYpmf3O97P2w7x0DYQ==", + "dev": true + }, + "node_modules/bpmnlint/node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -2757,6 +2926,18 @@ "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==", "dev": true }, + "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/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -2806,12 +2987,30 @@ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, + "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": "1.4.0", "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", "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/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -4905,6 +5104,18 @@ "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/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", @@ -5827,6 +6038,12 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, + "node_modules/json-source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/json-source-map/-/json-source-map-0.6.1.tgz", + "integrity": "sha512-1QoztHPsMQqhDq0hlXY5ZqcEdUzxQEIxgFkKl4WUp2pgShObl+9ovi4kRh2TfvAfxAoHOJ9vIMEqk3k4iex7tg==", + "dev": true + }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", @@ -6678,6 +6895,21 @@ "saxen": "^8.1.2" } }, + "node_modules/modeler-moddle": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/modeler-moddle/-/modeler-moddle-0.2.0.tgz", + "integrity": "sha512-l8OUpvX94m3spe+RBwWFQ0bGvPBZ3FBCiSY3yNtDk52j0YRj+cnVOxTMQvVM+i6k1T326IfqYM3F9HJfPZtXRw==", + "dev": true + }, + "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", @@ -7440,6 +7672,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "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/preact": { "version": "10.11.3", "resolved": "https://registry.npmjs.org/preact/-/preact-10.11.3.tgz", @@ -7450,6 +7691,15 @@ "url": "https://opencollective.com/preact" } }, + "node_modules/preact-markup": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/preact-markup/-/preact-markup-2.1.1.tgz", + "integrity": "sha512-8JL2p36mzK8XkspOyhBxUSPjYwMxDM0L5BWBZWxsZMVW8WsGQrYQDgVuDKkRspt2hwrle+Cxr/053hpc9BJwfw==", + "dev": true, + "peerDependencies": { + "preact": ">=10" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -8180,6 +8430,12 @@ "semver": "bin/semver.js" } }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", + "dev": true + }, "node_modules/serialize-javascript": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", @@ -8894,6 +9150,16 @@ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true }, + "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", @@ -9226,6 +9492,19 @@ "node": ">= 0.4.0" } }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, "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", @@ -9988,6 +10267,18 @@ "tiny-svg": "^3.0.0" } }, + "@bpmn-io/element-templates-validator": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@bpmn-io/element-templates-validator/-/element-templates-validator-1.7.0.tgz", + "integrity": "sha512-IBBUyb045OzXJUMN4Xs8FEL6wwykzqYRcAgoC3Krb2gb4d6mbnpe1b8LUutMpz3PYlomVgRXdTkL+zdGwbO7qQ==", + "dev": true, + "requires": { + "@camunda/element-templates-json-schema": "^0.16.0", + "@camunda/zeebe-element-templates-json-schema": "^0.17.0", + "json-source-map": "^0.6.1", + "min-dash": "^4.1.1" + } + }, "@bpmn-io/extract-process-variables": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@bpmn-io/extract-process-variables/-/extract-process-variables-0.8.0.tgz", @@ -10024,6 +10315,15 @@ "lezer-feel": "^1.2.0" } }, + "@bpmn-io/moddle-utils": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@bpmn-io/moddle-utils/-/moddle-utils-0.2.1.tgz", + "integrity": "sha512-iv9zwk7PEGupSq9bkVZNFL0ZmoJLHExlUcjsiYx200Nh3a5mH9BHXF+PLaSaiE4882KVEirklpWf3oQLAmShSA==", + "dev": true, + "requires": { + "min-dash": "^4.1.1" + } + }, "@bpmn-io/properties-panel": { "version": "3.15.0", "resolved": "https://registry.npmjs.org/@bpmn-io/properties-panel/-/properties-panel-3.15.0.tgz", @@ -10051,6 +10351,38 @@ "min-dash": "^4.0.0" } }, + "@camunda/element-templates-json-schema": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@camunda/element-templates-json-schema/-/element-templates-json-schema-0.16.0.tgz", + "integrity": "sha512-QXlizHS2wh05JZJcVoJHd974SI/bWyGJxrgA8STmqMSUBnslDpCkaCTuxtW9YGsqImOkXKaSYI2843AbMOWBXQ==", + "dev": true + }, + "@camunda/linting": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/@camunda/linting/-/linting-3.12.0.tgz", + "integrity": "sha512-lNyPbkVHKWBDgtPOLlA4sTHi+1YCrEMZb9qd7wAW1Ptrau26g/s4J8iuXtGwe4b6SRkIsKF/s0AdweVG733E4w==", + "dev": true, + "requires": { + "@bpmn-io/diagram-js-ui": "^0.2.2", + "bpmn-moddle": "^8.0.0", + "bpmnlint": "^9.2.0", + "bpmnlint-plugin-camunda-compat": "^2.13.0", + "bpmnlint-utils": "^1.0.2", + "camunda-bpmn-moddle": "^7.0.1", + "clsx": "^2.0.0", + "min-dash": "^4.0.0", + "min-dom": "^4.1.0", + "modeler-moddle": "^0.2.0", + "semver-compare": "^1.0.0", + "zeebe-bpmn-moddle": "^1.0.0" + } + }, + "@camunda/zeebe-element-templates-json-schema": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@camunda/zeebe-element-templates-json-schema/-/zeebe-element-templates-json-schema-0.17.0.tgz", + "integrity": "sha512-iUGC1NdD/w9exO3Eap1d69EcH+uoff+YX1mswUJDqk6OqeDAfnHayClNdHR24VDctdHuwNrqOdGN+/1E/WsMow==", + "dev": true + }, "@codemirror/autocomplete": { "version": "6.11.1", "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.11.1.tgz", @@ -11408,6 +11740,38 @@ "@bpmn-io/element-template-chooser": "^1.0.0" } }, + "bpmn-js-element-templates": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/bpmn-js-element-templates/-/bpmn-js-element-templates-1.10.0.tgz", + "integrity": "sha512-Ic+Eq3PvBh2VgkBUwlQd6Fc4DlBNXtf+vRQGzLHGCphgVhOnE3IyN1fZOvV+D5Cu1Fdb7enKGdWQxYy7GOdzNg==", + "dev": true, + "requires": { + "@bpmn-io/element-templates-validator": "^1.7.0", + "@bpmn-io/extract-process-variables": "^0.8.0", + "bpmnlint": "^9.2.0", + "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", + "uuid": "^9.0.0" + } + }, + "bpmn-js-properties-panel": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/bpmn-js-properties-panel/-/bpmn-js-properties-panel-5.7.0.tgz", + "integrity": "sha512-6dbMf69FthXP+J3rLzN0ot88n55fyoVLMFO0vX2/yI1fgzhvi14TTOvZEYGi7KVvJIQDPV5YYtxSytUL3t0B9A==", + "dev": true, + "peer": true, + "requires": { + "@bpmn-io/extract-process-variables": "^0.8.0", + "array-move": "^3.0.1", + "ids": "^1.0.5", + "min-dash": "^4.1.1", + "min-dom": "^4.1.0" + } + }, "bpmn-moddle": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/bpmn-moddle/-/bpmn-moddle-8.0.1.tgz", @@ -11419,6 +11783,51 @@ "moddle-xml": "^10.0.0" } }, + "bpmnlint": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/bpmnlint/-/bpmnlint-9.2.0.tgz", + "integrity": "sha512-GJVe6t0lSUTqKH1FeM9ueqop+zZh7Ag4QsWhiHrpU4Zt6XmGIXNfxwLrX8JvqNzxJIdhpF+YRT7rY2qQQhvYBg==", + "dev": true, + "requires": { + "@bpmn-io/moddle-utils": "^0.2.0", + "ansi-colors": "^4.1.3", + "bpmn-moddle": "^8.0.1", + "bpmnlint-utils": "^1.1.1", + "cli-table": "^0.3.11", + "color-support": "^1.1.3", + "min-dash": "^4.1.1", + "mri": "^1.2.0", + "pluralize": "^7.0.0", + "tiny-glob": "^0.2.9" + }, + "dependencies": { + "ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true + } + } + }, + "bpmnlint-plugin-camunda-compat": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/bpmnlint-plugin-camunda-compat/-/bpmnlint-plugin-camunda-compat-2.13.0.tgz", + "integrity": "sha512-YjgiLMTi7LTT6NmKTQJskLL1j3YacJG3nft45Lo6o4/7ipkC3oJ7E++P5KxzanR7cErEU++TyEpponZafabROw==", + "dev": true, + "requires": { + "@bpmn-io/feel-lint": "^1.0.0", + "@bpmn-io/moddle-utils": "^0.2.1", + "bpmnlint-utils": "^1.0.2", + "min-dash": "^4.1.1", + "semver-compare": "^1.0.0" + } + }, + "bpmnlint-utils": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bpmnlint-utils/-/bpmnlint-utils-1.1.1.tgz", + "integrity": "sha512-Afdb77FmwNB3INyUfbzXW40yY+mc0qYU3SgDFeI4zTtduiVomOlfqoXiEaUIGI8Hyh7aVYpmf3O97P2w7x0DYQ==", + "dev": true + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -11619,6 +12028,15 @@ "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==", "dev": true }, + "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" + } + }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -11662,12 +12080,24 @@ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, + "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": "1.4.0", "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", "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 + }, "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -13287,6 +13717,18 @@ "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 + }, + "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", @@ -13944,6 +14386,12 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, + "json-source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/json-source-map/-/json-source-map-0.6.1.tgz", + "integrity": "sha512-1QoztHPsMQqhDq0hlXY5ZqcEdUzxQEIxgFkKl4WUp2pgShObl+9ovi4kRh2TfvAfxAoHOJ9vIMEqk3k4iex7tg==", + "dev": true + }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", @@ -14610,6 +15058,18 @@ "saxen": "^8.1.2" } }, + "modeler-moddle": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/modeler-moddle/-/modeler-moddle-0.2.0.tgz", + "integrity": "sha512-l8OUpvX94m3spe+RBwWFQ0bGvPBZ3FBCiSY3yNtDk52j0YRj+cnVOxTMQvVM+i6k1T326IfqYM3F9HJfPZtXRw==", + "dev": true + }, + "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", @@ -15166,12 +15626,25 @@ } } }, + "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 + }, "preact": { "version": "10.11.3", "resolved": "https://registry.npmjs.org/preact/-/preact-10.11.3.tgz", "integrity": "sha512-eY93IVpod/zG3uMF22Unl8h9KkrcKIRs2EGar8hwLZZDU1lkjph303V9HZBwufh2s736U6VXuhD109LYqPoffg==", "dev": true }, + "preact-markup": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/preact-markup/-/preact-markup-2.1.1.tgz", + "integrity": "sha512-8JL2p36mzK8XkspOyhBxUSPjYwMxDM0L5BWBZWxsZMVW8WsGQrYQDgVuDKkRspt2hwrle+Cxr/053hpc9BJwfw==", + "dev": true, + "requires": {} + }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -15720,6 +16193,12 @@ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true }, + "semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", + "dev": true + }, "serialize-javascript": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", @@ -16278,6 +16757,16 @@ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true }, + "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", @@ -16516,6 +17005,12 @@ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", "dev": true }, + "uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "dev": 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", diff --git a/package.json b/package.json index 0bcc1fd78..3d47b1273 100644 --- a/package.json +++ b/package.json @@ -62,6 +62,7 @@ "@bpmn-io/element-templates-icons-renderer": "^0.3.0", "@bpmn-io/properties-panel": "^3.15.0", "@bpmn-io/variable-resolver": "^1.2.0", + "@camunda/linting": "^3.12.0", "@rollup/plugin-alias": "^5.1.0", "@rollup/plugin-babel": "^6.0.4", "@rollup/plugin-commonjs": "^25.0.7", @@ -73,6 +74,7 @@ "babel-plugin-istanbul": "^6.1.1", "bpmn-js": "^16.1.0", "bpmn-js-create-append-anything": "^0.4.0", + "bpmn-js-element-templates": "^1.10.0", "bpmn-moddle": "^8.0.1", "camunda-bpmn-js-behaviors": "^1.2.2", "camunda-bpmn-moddle": "^7.0.1", diff --git a/test/spec/BpmnPropertiesPanelRenderer.readonly.spec.js b/test/spec/BpmnPropertiesPanelRenderer.readonly.spec.js new file mode 100644 index 000000000..c87863bab --- /dev/null +++ b/test/spec/BpmnPropertiesPanelRenderer.readonly.spec.js @@ -0,0 +1,253 @@ +import TestContainer from 'mocha-test-container-support'; + +import { + cleanup +} from '@testing-library/preact/pure'; + +import { + clearBpmnJS, + setBpmnJS, + insertCoreStyles, + insertBpmnStyles, + enableLogging +} from 'test/TestHelper'; + +import { + query as domQuery +} from 'min-dom'; + +import Modeler from 'bpmn-js/lib/Modeler'; +import NavigatedViewerOriginal from 'bpmn-js/lib/NavigatedViewer'; +import { CloudElementTemplatesLinterPlugin, CloudElementTemplatesPropertiesProviderModule } from 'bpmn-js-element-templates'; +import { Linter } from '@camunda/linting'; + +import BpmnPropertiesPanel from 'src/render'; + +import BpmnPropertiesProvider from 'src/provider/bpmn'; +import ZeebePropertiesProvider from 'src/provider/zeebe'; + +import ZeebeModdle from 'zeebe-bpmn-moddle/resources/zeebe'; + +import TooltipProvider from 'src/contextProvider/zeebe/TooltipProvider'; + +import { + insertCSS +} from '../TestHelper'; + +class NavigatedViewer extends NavigatedViewerOriginal { + _createModdle(options) { + const moddle = super._createModdle(options); + + moddle.ids = { + isIdValid() { + return true; + }, + assigned() { + return false; + } + }; + + return moddle; + } +} + +insertCoreStyles(); +insertBpmnStyles(); + +insertCSS('readonly-properties-panel', ` + .bio-properties-panel input, + .bio-properties-panel textarea, + .bio-properties-panel select, + .bio-properties-panel label { + pointer-events: none; + opacity: 0.75; + } + + .bio-properties-panel button { + display: none; + } + + .bio-properties-panel-add-entry { + display: none!important; + } + + .bio-properties-panel { + cursor: not-allowed; + } + + .bio-properties-panel-group-header { + cursor: default; + } +`); + + +describe('', function() { + + afterEach(() => cleanup()); + + let modelerContainer; + + let propertiesContainer; + + let container; + + beforeEach(function() { + modelerContainer = document.createElement('div'); + modelerContainer.classList.add('modeler-container'); + + propertiesContainer = document.createElement('div'); + propertiesContainer.classList.add('properties-container'); + + container = TestContainer.get(this); + + container.appendChild(modelerContainer); + container.appendChild(propertiesContainer); + }); + + async function createModeler(xml, options = {}, BpmnJS = Modeler) { + const { + shouldImport = true, + additionalModules = [ + BpmnPropertiesPanel, + BpmnPropertiesProvider, + ZeebePropertiesProvider + ], + moddleExtensions = { + zeebe: ZeebeModdle + }, + description = {}, + tooltip = {}, + layout = {} + } = options; + + clearBpmnJS(); + + const modeler = new BpmnJS({ + container: modelerContainer, + keyboard: { + bindTo: document + }, + additionalModules, + moddleExtensions, + propertiesPanel: { + feelTooltipContainer: container, + description, + tooltip, + layout + }, + ...options + }); + + enableLogging && enableLogging(modeler); + + setBpmnJS(modeler); + + if (!shouldImport) { + return { modeler }; + } + + try { + const result = await modeler.importXML(xml); + + addReadonlyAttributeToPropertiesPanelInputs(propertiesContainer); + const propertiesPanel = modeler.get('propertiesPanel'); + propertiesPanel.attachTo(propertiesContainer); + + // Add linting + const templates = modeler.get('elementTemplates').getAll(); + const linter = new Linter({ + modeler: 'web', + plugins: [ CloudElementTemplatesLinterPlugin(templates) ] + }); + await linter.lint(modeler.getDefinitions()); + + return { error: null, warnings: result.warnings, modeler: modeler }; + } catch (err) { + return { error: err, warnings: err.warnings, modeler: modeler }; + } + } + + + it.only('should work with viewer', async function() { + + // given + const diagramXml = require('test/fixtures/service-task.bpmn').default; + + const FakeModelingServicesModule = { + commandStack: [ 'value', { + registerHandler() { } + } ], + bpmnFactory: [ 'value', {} ], + modeling: [ 'value', { + updateProperties() { } + } ], + moddleCopy: [ 'value', {} ] + }; + + // when + const result = await createModeler( + diagramXml, + { + additionalModules: [ + FakeModelingServicesModule, + BpmnPropertiesPanel, + BpmnPropertiesProvider, + ZeebePropertiesProvider, + CloudElementTemplatesPropertiesProviderModule + ], + moddleExtensions: { + zeebe: ZeebeModdle + }, + tooltip: TooltipProvider + }, + NavigatedViewer + ); + + // then + expect(result.error).not.to.exist; + }); + +}); + + +// helpers ///////////////////// + +// eslint-disable-next-line +function getGroup(container, id) { + return domQuery(`[data-group-id="group-${id}"`, container); +} + +// eslint-disable-next-line +function getHeaderName(container) { + return domQuery('.bio-properties-panel-header-label', container).innerText; +} + +// eslint-disable-next-line +function getFeelPopup(container) { + return domQuery('.bio-properties-panel-feel-popup', container); +} + +// eslint-disable-next-line +function getOpenFeelPopup(id, container) { + return container.querySelector(`[data-entry-id="${id}"] .bio-properties-panel-open-feel-popup`); +} + +const addReadonlyAttributeToPropertiesPanelInputs = (targetNode) => { + function addReadonlyAttribute(element) { + element.setAttribute('readonly', 'true'); + } + + const observer = new MutationObserver((mutations) => { + mutations.forEach((mutation) => { + if (mutation.type === 'childList' && mutation.addedNodes.length > 0) { + mutation.addedNodes.forEach((addedNode) => { + const matchingElements = addedNode.querySelectorAll('.bio-properties-panel-input'); + matchingElements.forEach(addReadonlyAttribute); + }); + } + }); + }); + + const observerConfig = { childList: true, subtree: true }; + observer.observe(targetNode, observerConfig); +};