@onify/flow-extensions 4.0.0 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,6 +1,15 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
+ # 5.0.0
5
+
6
+ - Turn into module with exports for node
7
+ - Add type declaration
8
+
9
+ # 4.1.0
10
+
11
+ - Support sequence flow properties and take execution listener. Requires `bpmn-elements >= 9.2`
12
+
4
13
  # 4.0.0
5
14
 
6
15
  - make sure sub-process extensions are only triggered once. Sub process activities unintentionally trigger formatting since events bubble
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  Onify Flow Extensions
2
2
  =====================
3
3
 
4
- [![Built latest](https://github.com/onify/flow-extensions/actions/workflows/build-latest.yaml/badge.svg)](https://github.com/onify/flow-extensions/actions/workflows/build-latest.yaml)
4
+ [![Built latest](https://github.com/onify/flow-extensions/actions/workflows/build-latest.yaml/badge.svg)](https://github.com/onify/flow-extensions/actions/workflows/build-latest.yaml)[![Coverage Status](https://coveralls.io/repos/github/onify/flow-extensions/badge.svg?branch=default)](https://coveralls.io/github/onify/flow-extensions?branch=default)
5
5
 
6
6
  # Api
7
7
 
@@ -120,3 +120,92 @@ function getModdleContext(source, options) {
120
120
  return bpmnModdle.fromXML(Buffer.isBuffer(source) ? source.toString() : source.trim());
121
121
  }
122
122
  ```
123
+
124
+ ## Extend sequence flow with properties and take listeners
125
+
126
+ ```js
127
+ const {OnifySequenceFlow, extensions} = require('@onify/flow-extensions');
128
+ const FlowScripts = require('@onify/flow-extensions/dist/src/FlowScripts');
129
+ const {Engine} = require('bpmn-engine');
130
+ const Elements = require('bpmn-elements');
131
+
132
+ const source = `
133
+ <?xml version="1.0" encoding="UTF-8"?>
134
+ <definitions
135
+ id="Def_0"
136
+ xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
137
+ xmlns:camunda="http://camunda.org/schema/1.0/bpmn"
138
+ targetNamespace="http://bpmn.io/schema/bpmn">
139
+ <process id="Process_1kk79yr" isExecutable="true">
140
+ <startEvent id="start" />
141
+ <sequenceFlow id="to-script" sourceRef="start" targetRef="script">
142
+ <extensionElements>
143
+ <camunda:properties>
144
+ <camunda:property name="source" value="\${content.id}" />
145
+ </camunda:properties>
146
+ <camunda:executionListener event="take">
147
+ <camunda:script scriptFormat="js">environment.output.fields = listener.fields; next();</camunda:script>
148
+ <camunda:field name="taken">
149
+ <camunda:expression>\${true}</camunda:expression>
150
+ </camunda:field>
151
+ <camunda:field name="bar">
152
+ <camunda:string>baz</camunda:string>
153
+ </camunda:field>
154
+ </camunda:executionListener>
155
+ </extensionElements>
156
+ </sequenceFlow>
157
+ <sequenceFlow id="to-end" sourceRef="script" targetRef="end">
158
+ <extensionElements>
159
+ <camunda:properties>
160
+ <camunda:property name="foo" value="bar" />
161
+ </camunda:properties>
162
+ </extensionElements>
163
+ </sequenceFlow>
164
+ <scriptTask id="script" name="script" scriptFormat="js">
165
+ <script>next(null, { foo: environment.variables.required.input });</script>
166
+ </scriptTask>
167
+ <boundaryEvent id="catch-err" attachedToRef="script">
168
+ <errorEventDefinition />
169
+ </boundaryEvent>
170
+ <endEvent id="end-err">
171
+ <extensionElements>
172
+ <camunda:executionListener event="start">
173
+ <camunda:script scriptFormat="js">
174
+ environment.output.failedBy = content.inbound[0].properties.error;
175
+ if (next) next();
176
+ </camunda:script>
177
+ </camunda:executionListener>
178
+ </extensionElements>
179
+ </endEvent>
180
+ <sequenceFlow id="to-end-err" sourceRef="catch-err" targetRef="end-err">
181
+ <extensionElements>
182
+ <camunda:properties>
183
+ <camunda:property name="error" value="\${content.output}" />
184
+ </camunda:properties>
185
+ </extensionElements>
186
+ </sequenceFlow>
187
+ <endEvent id="end" />
188
+ </process>
189
+ </definitions>`;
190
+
191
+ const engine = new Engine({
192
+ name: 'sequence flow extension',
193
+ source,
194
+ moddleOptions: {
195
+ camunda: require('camunda-bpmn-moddle/resources/camunda.json'),
196
+ },
197
+ extensions: {
198
+ onify: extensions,
199
+ },
200
+ scripts: new FlowScripts('sequence flow extension'),
201
+ elements: {
202
+ ...Elements,
203
+ SequenceFlow: OnifySequenceFlow,
204
+ },
205
+ });
206
+
207
+ engine.execute((err, instance) => {
208
+ if (err) throw err;
209
+ console.log(instance.name, instance.environment.output);
210
+ });
211
+ ```
@@ -62,6 +62,8 @@ class ScriptListener extends Listener {
62
62
  id: this.id,
63
63
  resolveExpression
64
64
  });
65
+ const listenerFields = this._getFields(environment, scope);
66
+ if (listenerFields) scope.listener.fields = listenerFields;
65
67
  const script = this.environment.scripts.getScript(this.extension.scriptFormat, {
66
68
  id: this.id
67
69
  });
@@ -109,23 +111,27 @@ class ExecutionListeners {
109
111
  this.activity = activity;
110
112
  this.context = context;
111
113
  this.listeners = [];
112
- this.onStart = false;
113
- this.onEnd = false;
114
114
  }
115
115
  get length() {
116
116
  return this.listeners.length;
117
117
  }
118
+ get onStart() {
119
+ return this.listeners.some(l => l.event === 'start');
120
+ }
121
+ get onEnd() {
122
+ return this.listeners.some(l => l.event === 'end');
123
+ }
124
+ get onTake() {
125
+ return this.listeners.some(l => l.event === 'take');
126
+ }
118
127
  add(extension, pos) {
119
128
  const {
120
- event,
121
129
  script,
122
130
  expression
123
131
  } = extension;
124
132
  if (!script && !expression) return;
125
133
  const list = this.listeners;
126
134
  if (script && (script.value || script.resource)) list.push(new ScriptListener(this.activity, this.context, extension, pos));else if (expression) list.push(new ExpressionListener(this.activity, this.context, extension));
127
- if (event === 'start') this.onStart = true;
128
- if (event === 'end') this.onEnd = true;
129
135
  }
130
136
  async execute(event, message) {
131
137
  const found = this.listeners.filter(l => l.event === event);
@@ -80,7 +80,7 @@ FlowScripts.prototype.register = function register({
80
80
  resource = behaviour.resource;
81
81
  }
82
82
  }
83
- if (!language) language = 'javascript';
83
+ if (!language) return;
84
84
  if (!['js', 'javascript'].includes(language.toLowerCase().trim())) return;
85
85
  language = 'javascript';
86
86
  const name = this._name;
@@ -20,6 +20,7 @@ class OnifyElementExtensions {
20
20
  const activity = this.activity;
21
21
  const broker = activity.broker;
22
22
  const formatQ = activity.broker.getQueue('format-run-q');
23
+ const executionListeners = this.extensions.listeners;
23
24
  if (message.fields.redelivered && message.fields.routingKey === 'run.start') {
24
25
  activity.on('start', elementApi => {
25
26
  this._formatOnEnter(broker, formatQ, elementApi);
@@ -59,7 +60,6 @@ class OnifyElementExtensions {
59
60
  }, {
60
61
  consumerTag: '_onify-extension-on-executed'
61
62
  });
62
- const executionListeners = this.extensions.listeners;
63
63
  if (executionListeners !== null && executionListeners !== void 0 && executionListeners.onStart) {
64
64
  activity.on('start', async elementApi => {
65
65
  if (activity.isSubProcess && activity.id !== elementApi.id) return;
@@ -211,11 +211,12 @@ class OnifyElementExtensions {
211
211
  assignToOutput,
212
212
  resultVariable
213
213
  } = elementApi.content;
214
- if (output === undefined || output === null) return result;
215
- if (assignToOutput && typeof output === 'object') {
216
- Object.assign(this.activity.environment.output, output);
217
- } else if (resultVariable) {
218
- elementApi.environment.output[resultVariable] = output;
214
+ if (output !== undefined && output !== null) {
215
+ if (assignToOutput && typeof output === 'object') {
216
+ Object.assign(this.activity.environment.output, output);
217
+ } else if (resultVariable) {
218
+ elementApi.environment.output[resultVariable] = output;
219
+ }
219
220
  }
220
221
  return result;
221
222
  }
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.OnifySequenceFlow = void 0;
7
+ var _bpmnElements = require("bpmn-elements");
8
+ var _getExtensions = require("./getExtensions.js");
9
+ class OnifySequenceFlow extends _bpmnElements.SequenceFlow {
10
+ constructor(flowDef, context) {
11
+ super(flowDef, context);
12
+ this.extensions = (0, _getExtensions.getExtensions)(this, context);
13
+ this._activate();
14
+ }
15
+ _activate() {
16
+ var _this$extensions$list;
17
+ if (!((_this$extensions$list = this.extensions.listeners) !== null && _this$extensions$list !== void 0 && _this$extensions$list.onTake)) return;
18
+ this.broker.subscribeTmp('event', 'flow.take', (_, msg) => {
19
+ this._executeListeners(msg);
20
+ }, {
21
+ noAck: true,
22
+ consumerTag: '_onify-execution-listener'
23
+ });
24
+ }
25
+ async _executeListeners(message) {
26
+ try {
27
+ await this.extensions.listeners.execute('take', message);
28
+ } catch (err) {
29
+ this.logger.error(`<${this.id}> execution listener error: ${err}`);
30
+ }
31
+ }
32
+ evaluate(fromMessage, callback) {
33
+ const properties = this.extensions.properties;
34
+ if (!properties) return super.evaluate(fromMessage, callback);
35
+ super.evaluate(fromMessage, (err, result) => {
36
+ if (err) return callback(err);
37
+ try {
38
+ let overriddenResult = result ? {} : false;
39
+ if (result) {
40
+ overriddenResult = {
41
+ ...(typeof result === 'object' && result),
42
+ properties: properties.resolve(this.getApi(fromMessage))
43
+ };
44
+ }
45
+ return callback(err, overriddenResult);
46
+ } catch (formatErr) {
47
+ return callback(formatErr);
48
+ }
49
+ });
50
+ }
51
+ }
52
+ exports.OnifySequenceFlow = OnifySequenceFlow;
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getExtensions = getExtensions;
7
+ var _formatters = require("./formatters.js");
8
+ var _IO = require("./IO.js");
9
+ var _Connector = _interopRequireDefault(require("./Connector.js"));
10
+ var _ExecutionListeners = _interopRequireDefault(require("./ExecutionListeners.js"));
11
+ var _IOForm = _interopRequireDefault(require("./IOForm.js"));
12
+ var _IOProperties = _interopRequireDefault(require("./IOProperties.js"));
13
+ var _ServiceExpression = _interopRequireDefault(require("./ServiceExpression.js"));
14
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+ function getExtensions(element, context) {
16
+ var _element$behaviour$ex, _ext$values, _ext$fields;
17
+ const result = {};
18
+ switch (element.type) {
19
+ case 'bpmn:SequenceFlow':
20
+ break;
21
+ case 'bpmn:Process':
22
+ result.format = new _formatters.FormatProcess(element);
23
+ break;
24
+ default:
25
+ result.format = new _formatters.FormatActivity(element);
26
+ }
27
+ let listenerPosition = 0;
28
+ const listeners = new _ExecutionListeners.default(element, context);
29
+ const expression = element.behaviour.expression;
30
+ if (expression) result.Service = _ServiceExpression.default;
31
+ const extensions = (_element$behaviour$ex = element.behaviour.extensionElements) === null || _element$behaviour$ex === void 0 ? void 0 : _element$behaviour$ex.values;
32
+ if (extensions) {
33
+ for (const ext of extensions) {
34
+ switch (ext.$type) {
35
+ case 'camunda:Properties':
36
+ if ((_ext$values = ext.values) !== null && _ext$values !== void 0 && _ext$values.length) result.properties = new _IOProperties.default(element, ext);
37
+ break;
38
+ case 'camunda:InputOutput':
39
+ result.io = new _IO.InputOutput(element.id, ext, context);
40
+ break;
41
+ case 'camunda:FormData':
42
+ if ((_ext$fields = ext.fields) !== null && _ext$fields !== void 0 && _ext$fields.length) result.form = new _IOForm.default(element, ext);
43
+ break;
44
+ case 'camunda:Connector':
45
+ {
46
+ const {
47
+ connectorId,
48
+ inputOutput
49
+ } = ext;
50
+ const io = inputOutput && new _IO.InputOutput(`${element.id}/${ext.$type.toLowerCase()}`, inputOutput, context);
51
+ result.Service = _Connector.default.bind(_Connector.default, connectorId, io);
52
+ break;
53
+ }
54
+ case 'camunda:ExecutionListener':
55
+ listeners.add(ext, listenerPosition++);
56
+ break;
57
+ }
58
+ }
59
+ }
60
+ if (listeners.length) result.listeners = listeners;
61
+ return result;
62
+ }
package/dist/index.js CHANGED
@@ -3,10 +3,17 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ Object.defineProperty(exports, "OnifySequenceFlow", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _OnifySequenceFlow.OnifySequenceFlow;
10
+ }
11
+ });
6
12
  exports.extendFn = extendFn;
7
13
  exports.extensions = extensions;
8
- var _OnifyProcessExtensions = require("./src/OnifyProcessExtensions.js");
9
- var _OnifyElementExtensions = require("./src/OnifyElementExtensions.js");
14
+ var _OnifyProcessExtensions = require("./OnifyProcessExtensions.js");
15
+ var _OnifyElementExtensions = require("./OnifyElementExtensions.js");
16
+ var _OnifySequenceFlow = require("./OnifySequenceFlow.js");
10
17
  function extensions(element, context) {
11
18
  if (element.type === 'bpmn:Process') return new _OnifyProcessExtensions.OnifyProcessExtensions(element, context);
12
19
  return new _OnifyElementExtensions.OnifyElementExtensions(element, context);
package/index.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ declare module '@onify/flow-extensions' {
2
+ import { SequenceFlow, ElementBase, Context, IExtension } from 'bpmn-elements';
3
+ import { extendFn as extendFunction } from 'moddle-context-serializer';
4
+
5
+ export class OnifySequenceFlow extends SequenceFlow {}
6
+ export function extensions(element: ElementBase, context: Context): IExtension;
7
+ export const extendFn: extendFunction;
8
+ }
package/package.json CHANGED
@@ -1,20 +1,23 @@
1
1
  {
2
2
  "name": "@onify/flow-extensions",
3
- "version": "4.0.0",
3
+ "version": "5.0.0",
4
4
  "description": "Onify Flow extensions",
5
+ "type": "module",
5
6
  "module": "index.js",
6
7
  "main": "dist/index.js",
8
+ "types": "./index.d.ts",
7
9
  "sideEffects": false,
8
- "directories": {
9
- "test": "test"
10
+ "exports": {
11
+ "import": "./src/index.js",
12
+ "require": "./dist/index.js"
10
13
  },
11
14
  "scripts": {
12
- "test": "mocha",
13
- "posttest": "npm run dist && eslint . --cache",
15
+ "test": "mocha -R dot",
16
+ "posttest": "npm run lint && npm run dist",
17
+ "lint": "eslint . --cache",
14
18
  "prepare": "npm run dist",
15
- "predist": "node -e \"fs.rmdirSync('./dist/src', {recursive: true});\"",
16
- "dist": "babel index.js -d dist && babel src -d dist/src && babel test/helpers/FlowScripts.js -d dist/src",
17
- "test:lcov": "c8 mocha -R dot && c8 report --reporter lcov && npm run posttest",
19
+ "dist": "babel src -d dist && babel test/helpers/FlowScripts.js -d dist",
20
+ "test:lcov": "c8 -r lcov mocha && npm run lint",
18
21
  "cov:html": "c8 mocha -R dot && c8 report --reporter html"
19
22
  },
20
23
  "keywords": [
@@ -35,39 +38,38 @@
35
38
  "license": "MIT",
36
39
  "devDependencies": {
37
40
  "@aircall/expression-parser": "^1.0.4",
38
- "@babel/cli": "^7.20.7",
39
- "@babel/core": "^7.20.12",
40
- "@babel/preset-env": "^7.20.2",
41
- "@babel/register": "^7.18.9",
41
+ "@babel/cli": "^7.21.5",
42
+ "@babel/core": "^7.21.8",
43
+ "@babel/preset-env": "^7.21.5",
44
+ "@babel/register": "^7.21.0",
42
45
  "bpmn-elements-8-1": "npm:bpmn-elements@8.1",
43
- "bpmn-engine": "^15.1.2",
46
+ "bpmn-engine": "^16.0.0",
44
47
  "bpmn-engine-14": "npm:bpmn-engine@14",
45
- "bpmn-moddle": "^7.1.3",
46
- "c8": "^7.12.0",
48
+ "bpmn-moddle": "^8.0.1",
49
+ "c8": "^7.13.0",
47
50
  "camunda-bpmn-moddle": "^7.0.1",
48
51
  "chai": "^4.3.7",
49
- "chronokinesis": "^4.0.1",
52
+ "chronokinesis": "^5.0.2",
50
53
  "debug": "^4.3.4",
51
- "eslint": "^8.32.0",
54
+ "eslint": "^8.39.0",
52
55
  "mocha": "^10.2.0",
53
56
  "mocha-cakes-2": "^3.3.0",
54
- "moddle-context-serializer": "^3.1.1"
57
+ "moddle-context-serializer": "^3.2.2"
55
58
  },
56
59
  "dependencies": {
57
- "cron-parser": "^4.7.1"
60
+ "cron-parser": "^4.8.1"
58
61
  },
59
62
  "files": [
60
63
  "src",
61
- "index.js",
62
- "dist/src",
63
- "dist/index.js"
64
+ "dist",
65
+ "index.d.ts"
64
66
  ],
65
67
  "c8": {
66
68
  "exclude": [
67
69
  "dist",
68
70
  "test",
69
- ".mocharc.js",
70
- "babel.config.js"
71
+ ".mocharc.cjs",
72
+ "babel.config.cjs"
71
73
  ]
72
74
  }
73
75
  }
@@ -49,6 +49,8 @@ class ScriptListener extends Listener {
49
49
  execute(api) {
50
50
  const environment = this.environment;
51
51
  const scope = this._getScope(api, {id: this.id, resolveExpression});
52
+ const listenerFields = this._getFields(environment, scope);
53
+ if (listenerFields) scope.listener.fields = listenerFields;
52
54
  const script = this.environment.scripts.getScript(this.extension.scriptFormat, {id: this.id});
53
55
 
54
56
  return new Promise((resolve, reject) => {
@@ -97,22 +99,26 @@ export default class ExecutionListeners {
97
99
  this.activity = activity;
98
100
  this.context = context;
99
101
  this.listeners = [];
100
- this.onStart = false;
101
- this.onEnd = false;
102
102
  }
103
103
  get length() {
104
104
  return this.listeners.length;
105
105
  }
106
+ get onStart() {
107
+ return this.listeners.some((l) => l.event === 'start');
108
+ }
109
+ get onEnd() {
110
+ return this.listeners.some((l) => l.event === 'end');
111
+ }
112
+ get onTake() {
113
+ return this.listeners.some((l) => l.event === 'take');
114
+ }
106
115
  add(extension, pos) {
107
- const {event, script, expression} = extension;
116
+ const {script, expression} = extension;
108
117
  if (!script && !expression) return;
109
118
 
110
119
  const list = this.listeners;
111
120
  if (script && (script.value || script.resource)) list.push(new ScriptListener(this.activity, this.context, extension, pos));
112
121
  else if (expression) list.push(new ExpressionListener(this.activity, this.context, extension));
113
-
114
- if (event === 'start') this.onStart = true;
115
- if (event === 'end') this.onEnd = true;
116
122
  }
117
123
  async execute(event, message) {
118
124
  const found = this.listeners.filter((l) => l.event === event);
@@ -13,6 +13,7 @@ export class OnifyElementExtensions {
13
13
  const activity = this.activity;
14
14
  const broker = activity.broker;
15
15
  const formatQ = activity.broker.getQueue('format-run-q');
16
+ const executionListeners = this.extensions.listeners;
16
17
 
17
18
  if (message.fields.redelivered && message.fields.routingKey === 'run.start') {
18
19
  activity.on('start', (elementApi) => {
@@ -38,7 +39,6 @@ export class OnifyElementExtensions {
38
39
  broker.publish('format', 'run.end.complete', {...format}, {persistent: false});
39
40
  }, {consumerTag: '_onify-extension-on-executed'});
40
41
 
41
- const executionListeners = this.extensions.listeners;
42
42
  if (executionListeners?.onStart) {
43
43
  activity.on('start', async (elementApi) => {
44
44
  if (activity.isSubProcess && activity.id !== elementApi.id) return;
@@ -137,12 +137,12 @@ export class OnifyElementExtensions {
137
137
 
138
138
  const {output, assignToOutput, resultVariable} = elementApi.content;
139
139
 
140
- if (output === undefined || output === null) return result;
141
-
142
- if (assignToOutput && typeof output === 'object') {
143
- Object.assign(this.activity.environment.output, output);
144
- } else if (resultVariable) {
145
- elementApi.environment.output[resultVariable] = output;
140
+ if (output !== undefined && output !== null) {
141
+ if (assignToOutput && typeof output === 'object') {
142
+ Object.assign(this.activity.environment.output, output);
143
+ } else if (resultVariable) {
144
+ elementApi.environment.output[resultVariable] = output;
145
+ }
146
146
  }
147
147
 
148
148
  return result;
@@ -0,0 +1,45 @@
1
+ import {SequenceFlow} from 'bpmn-elements';
2
+ import {getExtensions} from './getExtensions.js';
3
+
4
+ export class OnifySequenceFlow extends SequenceFlow {
5
+ constructor(flowDef, context) {
6
+ super(flowDef, context);
7
+ this.extensions = getExtensions(this, context);
8
+ this._activate();
9
+ }
10
+ _activate() {
11
+ if (!this.extensions.listeners?.onTake) return;
12
+
13
+ this.broker.subscribeTmp('event', 'flow.take', (_, msg) => {
14
+ this._executeListeners(msg);
15
+ }, {noAck: true, consumerTag: '_onify-execution-listener'});
16
+ }
17
+ async _executeListeners(message) {
18
+ try {
19
+ await this.extensions.listeners.execute('take', message);
20
+ } catch (err) {
21
+ this.logger.error(`<${this.id}> execution listener error: ${err}`);
22
+ }
23
+ }
24
+ evaluate(fromMessage, callback) {
25
+ const properties = this.extensions.properties;
26
+ if (!properties) return super.evaluate(fromMessage, callback);
27
+
28
+ super.evaluate(fromMessage, (err, result) => {
29
+ if (err) return callback(err);
30
+
31
+ try {
32
+ let overriddenResult = result ? {} : false;
33
+ if (result) {
34
+ overriddenResult = {
35
+ ...(typeof result === 'object' && result),
36
+ properties: properties.resolve(this.getApi(fromMessage)),
37
+ };
38
+ }
39
+ return callback(err, overriddenResult);
40
+ } catch (formatErr) {
41
+ return callback(formatErr);
42
+ }
43
+ });
44
+ }
45
+ }
@@ -7,39 +7,47 @@ import IOProperties from './IOProperties.js';
7
7
  import ServiceExpression from './ServiceExpression.js';
8
8
 
9
9
  export function getExtensions(element, context) {
10
- const result = {
11
- format: element.type === 'bpmn:Process' ? new FormatProcess(element) : new FormatActivity(element),
12
- };
10
+ const result = {};
11
+
12
+ switch (element.type) {
13
+ case 'bpmn:SequenceFlow':
14
+ break;
15
+ case 'bpmn:Process':
16
+ result.format = new FormatProcess(element);
17
+ break;
18
+ default:
19
+ result.format = new FormatActivity(element);
20
+ }
21
+
22
+ let listenerPosition = 0;
23
+ const listeners = new ExecutionListeners(element, context);
13
24
 
14
25
  const expression = element.behaviour.expression;
15
26
  if (expression) result.Service = ServiceExpression;
16
27
 
17
28
  const extensions = element.behaviour.extensionElements?.values;
18
- if (!extensions) return result;
19
-
20
- const listeners = new ExecutionListeners(element, context);
21
-
22
- let listener = 0;
23
- for (const ext of extensions) {
24
- switch (ext.$type) {
25
- case 'camunda:Properties':
26
- if (ext.values?.length) result.properties = new IOProperties(element, ext);
27
- break;
28
- case 'camunda:InputOutput':
29
- result.io = new InputOutput(element.id, ext, context);
30
- break;
31
- case 'camunda:FormData':
32
- if (ext.fields?.length) result.form = new IOForm(element, ext);
33
- break;
34
- case 'camunda:Connector': {
35
- const {connectorId, inputOutput} = ext;
36
- const io = inputOutput && new InputOutput(`${element.id}/${ext.$type.toLowerCase()}`, inputOutput, context);
37
- result.Service = Connector.bind(Connector, connectorId, io);
38
- break;
29
+ if (extensions) {
30
+ for (const ext of extensions) {
31
+ switch (ext.$type) {
32
+ case 'camunda:Properties':
33
+ if (ext.values?.length) result.properties = new IOProperties(element, ext);
34
+ break;
35
+ case 'camunda:InputOutput':
36
+ result.io = new InputOutput(element.id, ext, context);
37
+ break;
38
+ case 'camunda:FormData':
39
+ if (ext.fields?.length) result.form = new IOForm(element, ext);
40
+ break;
41
+ case 'camunda:Connector': {
42
+ const {connectorId, inputOutput} = ext;
43
+ const io = inputOutput && new InputOutput(`${element.id}/${ext.$type.toLowerCase()}`, inputOutput, context);
44
+ result.Service = Connector.bind(Connector, connectorId, io);
45
+ break;
46
+ }
47
+ case 'camunda:ExecutionListener':
48
+ listeners.add(ext, listenerPosition++);
49
+ break;
39
50
  }
40
- case 'camunda:ExecutionListener':
41
- listeners.add(ext, listener++);
42
- break;
43
51
  }
44
52
  }
45
53
 
@@ -1,9 +1,11 @@
1
- import {OnifyProcessExtensions} from './src/OnifyProcessExtensions.js';
2
- import {OnifyElementExtensions} from './src/OnifyElementExtensions.js';
1
+ import {OnifyProcessExtensions} from './OnifyProcessExtensions.js';
2
+ import {OnifyElementExtensions} from './OnifyElementExtensions.js';
3
+ import {OnifySequenceFlow} from './OnifySequenceFlow.js';
3
4
 
4
5
  export {
5
6
  extensions,
6
7
  extendFn,
8
+ OnifySequenceFlow,
7
9
  };
8
10
 
9
11
  function extensions(element, context) {
@@ -1,54 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.getExtensions = getExtensions;
7
- var _formatters = require("./formatters.js");
8
- var _IO = require("./IO.js");
9
- var _Connector = _interopRequireDefault(require("./Connector.js"));
10
- var _ExecutionListeners = _interopRequireDefault(require("./ExecutionListeners.js"));
11
- var _IOForm = _interopRequireDefault(require("./IOForm.js"));
12
- var _IOProperties = _interopRequireDefault(require("./IOProperties.js"));
13
- var _ServiceExpression = _interopRequireDefault(require("./ServiceExpression.js"));
14
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
- function getExtensions(element, context) {
16
- var _element$behaviour$ex, _ext$values, _ext$fields;
17
- const result = {
18
- format: element.type === 'bpmn:Process' ? new _formatters.FormatProcess(element) : new _formatters.FormatActivity(element)
19
- };
20
- const expression = element.behaviour.expression;
21
- if (expression) result.Service = _ServiceExpression.default;
22
- const extensions = (_element$behaviour$ex = element.behaviour.extensionElements) === null || _element$behaviour$ex === void 0 ? void 0 : _element$behaviour$ex.values;
23
- if (!extensions) return result;
24
- const listeners = new _ExecutionListeners.default(element, context);
25
- let listener = 0;
26
- for (const ext of extensions) {
27
- switch (ext.$type) {
28
- case 'camunda:Properties':
29
- if ((_ext$values = ext.values) !== null && _ext$values !== void 0 && _ext$values.length) result.properties = new _IOProperties.default(element, ext);
30
- break;
31
- case 'camunda:InputOutput':
32
- result.io = new _IO.InputOutput(element.id, ext, context);
33
- break;
34
- case 'camunda:FormData':
35
- if ((_ext$fields = ext.fields) !== null && _ext$fields !== void 0 && _ext$fields.length) result.form = new _IOForm.default(element, ext);
36
- break;
37
- case 'camunda:Connector':
38
- {
39
- const {
40
- connectorId,
41
- inputOutput
42
- } = ext;
43
- const io = inputOutput && new _IO.InputOutput(`${element.id}/${ext.$type.toLowerCase()}`, inputOutput, context);
44
- result.Service = _Connector.default.bind(_Connector.default, connectorId, io);
45
- break;
46
- }
47
- case 'camunda:ExecutionListener':
48
- listeners.add(ext, listener++);
49
- break;
50
- }
51
- }
52
- if (listeners.length) result.listeners = listeners;
53
- return result;
54
- }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes