chartmind 1.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.
Files changed (121) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +140 -0
  3. package/build/src/engine/actions/base-action.d.ts +13 -0
  4. package/build/src/engine/actions/base-action.js +15 -0
  5. package/build/src/engine/actions/base-action.js.map +1 -0
  6. package/build/src/engine/actions/decision-action.d.ts +10 -0
  7. package/build/src/engine/actions/decision-action.js +34 -0
  8. package/build/src/engine/actions/decision-action.js.map +1 -0
  9. package/build/src/engine/actions/end-action.d.ts +6 -0
  10. package/build/src/engine/actions/end-action.js +14 -0
  11. package/build/src/engine/actions/end-action.js.map +1 -0
  12. package/build/src/engine/actions/predefined-process-action.d.ts +7 -0
  13. package/build/src/engine/actions/predefined-process-action.js +21 -0
  14. package/build/src/engine/actions/predefined-process-action.js.map +1 -0
  15. package/build/src/engine/actions/process-action.d.ts +7 -0
  16. package/build/src/engine/actions/process-action.js +26 -0
  17. package/build/src/engine/actions/process-action.js.map +1 -0
  18. package/build/src/engine/actions/start-action.d.ts +6 -0
  19. package/build/src/engine/actions/start-action.js +18 -0
  20. package/build/src/engine/actions/start-action.js.map +1 -0
  21. package/build/src/engine/chart/chart.d.ts +15 -0
  22. package/build/src/engine/chart/chart.js +43 -0
  23. package/build/src/engine/chart/chart.js.map +1 -0
  24. package/build/src/engine/chart/context/chart-context.d.ts +31 -0
  25. package/build/src/engine/chart/context/chart-context.js +44 -0
  26. package/build/src/engine/chart/context/chart-context.js.map +1 -0
  27. package/build/src/engine/chart/instance/chart-instance.d.ts +12 -0
  28. package/build/src/engine/chart/instance/chart-instance.js +49 -0
  29. package/build/src/engine/chart/instance/chart-instance.js.map +1 -0
  30. package/build/src/engine/chart/manager/chart-manager.d.ts +61 -0
  31. package/build/src/engine/chart/manager/chart-manager.js +108 -0
  32. package/build/src/engine/chart/manager/chart-manager.js.map +1 -0
  33. package/build/src/engine/chart/parser/chart-parser.d.ts +12 -0
  34. package/build/src/engine/chart/parser/chart-parser.js +58 -0
  35. package/build/src/engine/chart/parser/chart-parser.js.map +1 -0
  36. package/build/src/engine/chart/validation/chart-validator.d.ts +7 -0
  37. package/build/src/engine/chart/validation/chart-validator.js +67 -0
  38. package/build/src/engine/chart/validation/chart-validator.js.map +1 -0
  39. package/build/src/engine/chart/validation/rules/has-connection-source-and-target-value.d.ts +6 -0
  40. package/build/src/engine/chart/validation/rules/has-connection-source-and-target-value.js +19 -0
  41. package/build/src/engine/chart/validation/rules/has-connection-source-and-target-value.js.map +1 -0
  42. package/build/src/engine/chart/validation/rules/has-connection-with-condition-or-default.d.ts +7 -0
  43. package/build/src/engine/chart/validation/rules/has-connection-with-condition-or-default.js +24 -0
  44. package/build/src/engine/chart/validation/rules/has-connection-with-condition-or-default.js.map +1 -0
  45. package/build/src/engine/chart/validation/rules/has-no-source-connection.d.ts +7 -0
  46. package/build/src/engine/chart/validation/rules/has-no-source-connection.js +18 -0
  47. package/build/src/engine/chart/validation/rules/has-no-source-connection.js.map +1 -0
  48. package/build/src/engine/chart/validation/rules/has-single-or-multiple-source-connection.d.ts +7 -0
  49. package/build/src/engine/chart/validation/rules/has-single-or-multiple-source-connection.js +18 -0
  50. package/build/src/engine/chart/validation/rules/has-single-or-multiple-source-connection.js.map +1 -0
  51. package/build/src/engine/chart/validation/rules/has-single-or-multiple-target-connection.d.ts +7 -0
  52. package/build/src/engine/chart/validation/rules/has-single-or-multiple-target-connection.js +18 -0
  53. package/build/src/engine/chart/validation/rules/has-single-or-multiple-target-connection.js.map +1 -0
  54. package/build/src/engine/chart/validation/rules/has-single-source-connection.d.ts +7 -0
  55. package/build/src/engine/chart/validation/rules/has-single-source-connection.js +18 -0
  56. package/build/src/engine/chart/validation/rules/has-single-source-connection.js.map +1 -0
  57. package/build/src/engine/chart/validation/rules/is-single-symbol.d.ts +7 -0
  58. package/build/src/engine/chart/validation/rules/is-single-symbol.js +15 -0
  59. package/build/src/engine/chart/validation/rules/is-single-symbol.js.map +1 -0
  60. package/build/src/engine/file/file-service.d.ts +7 -0
  61. package/build/src/engine/file/file-service.js +34 -0
  62. package/build/src/engine/file/file-service.js.map +1 -0
  63. package/build/src/engine/registry/executable-registry.d.ts +34 -0
  64. package/build/src/engine/registry/executable-registry.js +49 -0
  65. package/build/src/engine/registry/executable-registry.js.map +1 -0
  66. package/build/src/index.d.ts +4 -0
  67. package/build/src/index.js +10 -0
  68. package/build/src/index.js.map +1 -0
  69. package/build/src/interfaces/action-context.interface.d.ts +8 -0
  70. package/build/src/interfaces/action-context.interface.js +3 -0
  71. package/build/src/interfaces/action-context.interface.js.map +1 -0
  72. package/build/src/interfaces/chart-validation-rule.interface.d.ts +6 -0
  73. package/build/src/interfaces/chart-validation-rule.interface.js +3 -0
  74. package/build/src/interfaces/chart-validation-rule.interface.js.map +1 -0
  75. package/build/src/interfaces/chart.interface.d.ts +5 -0
  76. package/build/src/interfaces/chart.interface.js +3 -0
  77. package/build/src/interfaces/chart.interface.js.map +1 -0
  78. package/build/src/interfaces/executable.interface.d.ts +16 -0
  79. package/build/src/interfaces/executable.interface.js +3 -0
  80. package/build/src/interfaces/executable.interface.js.map +1 -0
  81. package/build/src/interfaces/parsed-chart.interface.d.ts +5 -0
  82. package/build/src/interfaces/parsed-chart.interface.js +3 -0
  83. package/build/src/interfaces/parsed-chart.interface.js.map +1 -0
  84. package/build/src/interfaces/parsed-diagram.interface.d.ts +9 -0
  85. package/build/src/interfaces/parsed-diagram.interface.js +3 -0
  86. package/build/src/interfaces/parsed-diagram.interface.js.map +1 -0
  87. package/build/src/interfaces/symbol-connection.interface.d.ts +7 -0
  88. package/build/src/interfaces/symbol-connection.interface.js +3 -0
  89. package/build/src/interfaces/symbol-connection.interface.js.map +1 -0
  90. package/build/src/interfaces/symbol-decision.interface.d.ts +2 -0
  91. package/build/src/interfaces/symbol-decision.interface.js +3 -0
  92. package/build/src/interfaces/symbol-decision.interface.js.map +1 -0
  93. package/build/src/interfaces/symbol-end.interface.d.ts +2 -0
  94. package/build/src/interfaces/symbol-end.interface.js +3 -0
  95. package/build/src/interfaces/symbol-end.interface.js.map +1 -0
  96. package/build/src/interfaces/symbol-meta.interface.d.ts +4 -0
  97. package/build/src/interfaces/symbol-meta.interface.js +3 -0
  98. package/build/src/interfaces/symbol-meta.interface.js.map +1 -0
  99. package/build/src/interfaces/symbol-predefined-process.interface.d.ts +4 -0
  100. package/build/src/interfaces/symbol-predefined-process.interface.js +3 -0
  101. package/build/src/interfaces/symbol-predefined-process.interface.js.map +1 -0
  102. package/build/src/interfaces/symbol-process.interface.d.ts +4 -0
  103. package/build/src/interfaces/symbol-process.interface.js +3 -0
  104. package/build/src/interfaces/symbol-process.interface.js.map +1 -0
  105. package/build/src/interfaces/symbol-start.interface.d.ts +2 -0
  106. package/build/src/interfaces/symbol-start.interface.js +3 -0
  107. package/build/src/interfaces/symbol-start.interface.js.map +1 -0
  108. package/build/src/interfaces/symbol.interface.d.ts +6 -0
  109. package/build/src/interfaces/symbol.interface.js +3 -0
  110. package/build/src/interfaces/symbol.interface.js.map +1 -0
  111. package/build/src/types/executable-constructor.type.d.ts +1 -0
  112. package/build/src/types/executable-constructor.type.js +3 -0
  113. package/build/src/types/executable-constructor.type.js.map +1 -0
  114. package/build/src/types/symbol-chart.type.d.ts +6 -0
  115. package/build/src/types/symbol-chart.type.js +3 -0
  116. package/build/src/types/symbol-chart.type.js.map +1 -0
  117. package/build/src/types/symbol-type.type.d.ts +1 -0
  118. package/build/src/types/symbol-type.type.js +3 -0
  119. package/build/src/types/symbol-type.type.js.map +1 -0
  120. package/build/tsconfig.tsbuildinfo +1 -0
  121. package/package.json +49 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Timo Martin
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,140 @@
1
+ # 🧠 chartmind
2
+
3
+ [![Code Style: Google][gts-badge-image]][gts-github-url]
4
+
5
+ **chartmind** is a minimalist workflow engine that loads flowcharts from [draw.io (diagrams.net)][drawio-url] and executes the underlying classes sequentially.
6
+
7
+ ---
8
+
9
+ ## Features
10
+ - Custom draw.io symbol library tailored for use with chartmind
11
+ - Interpret flowcharts as executable workflows
12
+ - Support for decisions, loops, custom and predefined actions
13
+ - Built-in validator for flowchart development
14
+
15
+ ---
16
+
17
+ ## Getting Started
18
+
19
+ ### Installation
20
+ ```bash
21
+ npm install --save chartmind
22
+ ```
23
+
24
+ ---
25
+
26
+ ### Import the Provided Symbol Library
27
+
28
+ Download the [symbol library][symbol-library] provided in the project and import it into draw.io.
29
+
30
+ File 🠊 Open Library... 🠊 Select the downloaded `flow-chart.xml` file
31
+
32
+ ---
33
+
34
+ ### Draw Your Flowchart
35
+
36
+ Start by creating your flowchart diagram.
37
+
38
+ **⚠️ Make sure to use only the symbols from the provided symbol library (including the connection symbol), as they already contain the necessary properties to be executable.**
39
+
40
+ The image below shows a minimalist example:
41
+
42
+ ![Minimalist flowchart][docs-flow-chart]
43
+
44
+ Once your diagram is complete, right-click on the process symbol `Increment counter` and choose `Edit Data...`.
45
+ Add a key for your class in the executable field — this will be used to register your class later in the registry.
46
+ Here’s how the configuration window looks:
47
+
48
+ ![Process symbol configuration window][docs-process-symbol-settings]
49
+
50
+ Also, give your flowchart a name so you can reference it later for execution.
51
+ Right-click the toolbar at the bottom of draw.io and select `Rename...`.
52
+ This is what the rename dialog looks like:
53
+
54
+ ![Rename flowchart dialog][docs-rename-flowchart]
55
+
56
+ Save the diagram somewhere in your project, for example under a folder called `charts`.
57
+
58
+ **⚠️ Make sure to save the file with the `.drawio` extension.**
59
+
60
+ ---
61
+
62
+ ### Run the Flowchart
63
+
64
+ Now, implement your classes and register them in the registry. Then you can start the flowchart by its name. The following example demonstrates how:
65
+
66
+ 📄**increment-counter-task.ts**
67
+ ```ts
68
+ import { ChartContext, Executable } from 'chartmind';
69
+
70
+ export class IncrementCounter implements Executable {
71
+ async execute(chartContext: ChartContext): Promise<void> {
72
+ const counter = chartContext.getVariable('counter') as number;
73
+ chartContext.setVariable('counter', counter + 1);
74
+ }
75
+ }
76
+ ```
77
+
78
+ 📄**main.ts**
79
+ ```ts
80
+ import { ChartManager, ExecutableRegistry } from 'chartmind';
81
+ import { IncrementCounter } from './increment-counter';
82
+
83
+ const chartManager = new ChartManager()
84
+ .loadCharts('./charts')
85
+ .validateCharts(); // Optional chart validation
86
+
87
+ ExecutableRegistry.instance
88
+ .addExecutable('increment-counter', IncrementCounter);
89
+
90
+ start();
91
+
92
+ async function start() {
93
+ try {
94
+ const chartName = 'Test Chart';
95
+ const chartContext = new Map<string, unknown>([
96
+ ['counter', 1]
97
+ ]);
98
+
99
+ await chartManager.startProcess(chartName, chartContext);
100
+
101
+ console.log(chartContext.get('counter')); // Output: 2
102
+ } catch(error: unknown) {
103
+ console.log(error);
104
+ }
105
+ }
106
+ ```
107
+
108
+ > 🧪 **Tip:** You can validate your charts before runtime to catch misconfigured symbols early.
109
+
110
+
111
+ ---
112
+
113
+ ## Symbol Properties
114
+
115
+ The following table describes the available symbol properties, on which symbols these can be used, valid values, and descriptions:
116
+
117
+ Name | Symbol(s) | Possible Values | Description | Required
118
+ ---------|------------------------|-------------------------|-----------------------|:----------:
119
+ type | Start, End, Connection, Decision, Process, Predefined process | start, end, connection, decision, process, predefined | Defines how the symbol will be interpreted by the engine. | Always
120
+ condition | Connection | e.g. counter % 2 === 0 or text === 'foo' | Controls the flow from a decision symbol. Every connection must have a condition except the one marked as default. | All outgoing connections from a decision symbol must have a condition, except the one marked as default.
121
+ default | Connection | 1 | Marks a connection as the default path. If all other conditions evaluate to false, this path is taken. Only one default should exist. | At least one outgoing connection from a decision symbol must be marked as the default.
122
+ executable | Process | e.g. increment-counter | Key for the class registered in the registry. | Always
123
+ name | Predefined process | e.g. Test Chart | Name of the flowchart to execute (as defined in draw.io). | Always
124
+
125
+ All of these properties are pre-configured in the provided symbol library.
126
+ Only the `type` field is already filled — the rest must be completed manually for each symbol.
127
+
128
+ ## License
129
+
130
+ This project is licensed under the [MIT License][license].
131
+
132
+
133
+ [license]: LICENSE
134
+ [symbol-library]: flow-chart.xml
135
+ [drawio-url]: https://draw.io
136
+ [docs-flow-chart]: docs/images/flow-chart.png
137
+ [docs-process-symbol-settings]: docs/images/process-symbol-settings.png
138
+ [docs-rename-flowchart]: docs/images/rename-flow-chart.png
139
+ [gts-badge-image]: https://img.shields.io/badge/code%20style-google-blueviolet.svg
140
+ [gts-github-url]: https://github.com/google/gts
@@ -0,0 +1,13 @@
1
+ import { ChartContext } from '../chart/context/chart-context';
2
+ import { ActionContext } from '../../interfaces/action-context.interface';
3
+ import { ChartManager } from '../chart/manager/chart-manager';
4
+ import { SymbolChart } from '../../types/symbol-chart.type';
5
+ import { Chart } from '../chart/chart';
6
+ export declare abstract class BaseAction {
7
+ protected symbol: SymbolChart;
8
+ protected chart: Chart;
9
+ protected chartManager: ChartManager;
10
+ constructor(context: ActionContext);
11
+ abstract execute(chartContext: ChartContext): Promise<void>;
12
+ abstract getNext(chartContext: ChartContext): SymbolChart | undefined;
13
+ }
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseAction = void 0;
4
+ class BaseAction {
5
+ symbol;
6
+ chart;
7
+ chartManager;
8
+ constructor(context) {
9
+ this.symbol = context.symbol;
10
+ this.chart = context.chart;
11
+ this.chartManager = context.chartManager;
12
+ }
13
+ }
14
+ exports.BaseAction = BaseAction;
15
+ //# sourceMappingURL=base-action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-action.js","sourceRoot":"","sources":["../../../../src/engine/actions/base-action.ts"],"names":[],"mappings":";;;AAMA,MAAsB,UAAU;IACpB,MAAM,CAAc;IACpB,KAAK,CAAQ;IACb,YAAY,CAAe;IAErC,YAAY,OAAsB;QAChC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAC3C,CAAC;CAKF;AAdD,gCAcC"}
@@ -0,0 +1,10 @@
1
+ import { SymbolChart } from '../../types/symbol-chart.type';
2
+ import { ChartContext } from '../chart/context/chart-context';
3
+ import { BaseAction } from './base-action';
4
+ export declare class DecisionAction extends BaseAction {
5
+ execute(): Promise<void>;
6
+ getNext(chartContext: ChartContext): SymbolChart | undefined;
7
+ private getEvaluatedConnection;
8
+ private evaluateCondition;
9
+ private getDefaultConnection;
10
+ }
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DecisionAction = void 0;
4
+ const base_action_1 = require("./base-action");
5
+ class DecisionAction extends base_action_1.BaseAction {
6
+ async execute() {
7
+ // console.log(`SymbolEnd ${this.symbol.label} executed.`);
8
+ }
9
+ getNext(chartContext) {
10
+ const connections = this.chart.getConnectionsBySourceId(this.symbol.id);
11
+ const evaluatedConnection = this.getEvaluatedConnection(connections, chartContext);
12
+ if (evaluatedConnection && evaluatedConnection.mxCell.target) {
13
+ return this.chart.getSymbolById(evaluatedConnection.mxCell.target);
14
+ }
15
+ const defaultConnection = this.getDefaultConnection(connections);
16
+ if (defaultConnection && defaultConnection.mxCell.target) {
17
+ return this.chart.getSymbolById(defaultConnection.mxCell.target);
18
+ }
19
+ return undefined;
20
+ }
21
+ getEvaluatedConnection(connections, chartContext) {
22
+ return connections.find(connection => connection.default !== '1' &&
23
+ this.evaluateCondition(connection.condition, chartContext));
24
+ }
25
+ evaluateCondition(condition, chartContext) {
26
+ chartContext.context.forEach((value, key) => (condition = condition.replaceAll(key.toString(), String(value))));
27
+ return eval(condition);
28
+ }
29
+ getDefaultConnection(connections) {
30
+ return connections.find(connections => connections.default === '1');
31
+ }
32
+ }
33
+ exports.DecisionAction = DecisionAction;
34
+ //# sourceMappingURL=decision-action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decision-action.js","sourceRoot":"","sources":["../../../../src/engine/actions/decision-action.ts"],"names":[],"mappings":";;;AAGA,+CAAyC;AAEzC,MAAa,cAAe,SAAQ,wBAAU;IACrC,KAAK,CAAC,OAAO;QAClB,2DAA2D;IAC7D,CAAC;IAEM,OAAO,CAAC,YAA0B;QACvC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAExE,MAAM,mBAAmB,GAAG,IAAI,CAAC,sBAAsB,CACrD,WAAW,EACX,YAAY,CACb,CAAC;QACF,IAAI,mBAAmB,IAAI,mBAAmB,CAAC,MAAM,CAAC,MAAM,EAAE;YAC5D,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;SACpE;QAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QACjE,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE;YACxD,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;SAClE;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,sBAAsB,CAC5B,WAA+B,EAC/B,YAA0B;QAE1B,OAAO,WAAW,CAAC,IAAI,CACrB,UAAU,CAAC,EAAE,CACX,UAAU,CAAC,OAAO,KAAK,GAAG;YAC1B,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,SAAS,EAAE,YAAY,CAAC,CAC7D,CAAC;IACJ,CAAC;IAEO,iBAAiB,CACvB,SAAiB,EACjB,YAA0B;QAE1B,YAAY,CAAC,OAAO,CAAC,OAAO,CAC1B,CAAC,KAAc,EAAE,GAAW,EAAE,EAAE,CAC9B,CAAC,SAAS,GAAG,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CACpE,CAAC;QAEF,OAAO,IAAI,CAAC,SAAS,CAAY,CAAC;IACpC,CAAC;IAEO,oBAAoB,CAC1B,WAA+B;QAE/B,OAAO,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,WAAW,CAAC,OAAO,KAAK,GAAG,CAAC,CAAC;IACtE,CAAC;CACF;AApDD,wCAoDC"}
@@ -0,0 +1,6 @@
1
+ import { SymbolChart } from '../../types/symbol-chart.type';
2
+ import { BaseAction } from './base-action';
3
+ export declare class EndAction extends BaseAction {
4
+ execute(): Promise<void>;
5
+ getNext(): SymbolChart | undefined;
6
+ }
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EndAction = void 0;
4
+ const base_action_1 = require("./base-action");
5
+ class EndAction extends base_action_1.BaseAction {
6
+ async execute() {
7
+ // console.log(`SymbolEnd ${this.symbol.label} executed.`);
8
+ }
9
+ getNext() {
10
+ return undefined;
11
+ }
12
+ }
13
+ exports.EndAction = EndAction;
14
+ //# sourceMappingURL=end-action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"end-action.js","sourceRoot":"","sources":["../../../../src/engine/actions/end-action.ts"],"names":[],"mappings":";;;AACA,+CAAyC;AAEzC,MAAa,SAAU,SAAQ,wBAAU;IAChC,KAAK,CAAC,OAAO;QAClB,2DAA2D;IAC7D,CAAC;IAEM,OAAO;QACZ,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AARD,8BAQC"}
@@ -0,0 +1,7 @@
1
+ import { SymbolChart } from '../../types/symbol-chart.type';
2
+ import { ChartContext } from '../chart/context/chart-context';
3
+ import { BaseAction } from './base-action';
4
+ export declare class PredefinedProcessAction extends BaseAction {
5
+ execute(chartContext: ChartContext): Promise<void>;
6
+ getNext(): SymbolChart | undefined;
7
+ }
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PredefinedProcessAction = void 0;
4
+ const base_action_1 = require("./base-action");
5
+ class PredefinedProcessAction extends base_action_1.BaseAction {
6
+ async execute(chartContext) {
7
+ const predefinedProcess = this.symbol;
8
+ const name = predefinedProcess.name;
9
+ return this.chartManager.startProcess(name, chartContext.context);
10
+ // console.log(`SymbolPredefinedProcess ${this.symbol.label} executed.`);
11
+ }
12
+ getNext() {
13
+ const connection = this.chart.getConnectionBySourceId(this.symbol.id);
14
+ if (!connection || !connection.mxCell.target) {
15
+ return undefined;
16
+ }
17
+ return this.chart.getSymbolById(connection.mxCell.target);
18
+ }
19
+ }
20
+ exports.PredefinedProcessAction = PredefinedProcessAction;
21
+ //# sourceMappingURL=predefined-process-action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"predefined-process-action.js","sourceRoot":"","sources":["../../../../src/engine/actions/predefined-process-action.ts"],"names":[],"mappings":";;;AAGA,+CAAyC;AAEzC,MAAa,uBAAwB,SAAQ,wBAAU;IAC9C,KAAK,CAAC,OAAO,CAAC,YAA0B;QAC7C,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAiC,CAAC;QACjE,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC;QAEpC,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QAElE,yEAAyE;IAC3E,CAAC;IAEM,OAAO;QACZ,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAEtE,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE;YAC5C,OAAO,SAAS,CAAC;SAClB;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5D,CAAC;CACF;AAnBD,0DAmBC"}
@@ -0,0 +1,7 @@
1
+ import { ChartContext } from '../chart/context/chart-context';
2
+ import { BaseAction } from './base-action';
3
+ import { SymbolChart } from '../../types/symbol-chart.type';
4
+ export declare class ProcessAction extends BaseAction {
5
+ execute(chartContext: ChartContext): Promise<void>;
6
+ getNext(): SymbolChart | undefined;
7
+ }
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ProcessAction = void 0;
4
+ const base_action_1 = require("./base-action");
5
+ const executable_registry_1 = require("../registry/executable-registry");
6
+ class ProcessAction extends base_action_1.BaseAction {
7
+ async execute(chartContext) {
8
+ const processSymbol = this.symbol;
9
+ const executableName = processSymbol.executable;
10
+ const Executable = executable_registry_1.ExecutableRegistry.instance.getExecutableByName(executableName);
11
+ if (Executable) {
12
+ const instance = new Executable();
13
+ return instance.execute(chartContext);
14
+ }
15
+ // console.log(`SymbolProcess ${this.symbol.label} executed.`);
16
+ }
17
+ getNext() {
18
+ const connection = this.chart.getConnectionBySourceId(this.symbol.id);
19
+ if (!connection || !connection.mxCell.target) {
20
+ return undefined;
21
+ }
22
+ return this.chart.getSymbolById(connection.mxCell.target);
23
+ }
24
+ }
25
+ exports.ProcessAction = ProcessAction;
26
+ //# sourceMappingURL=process-action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-action.js","sourceRoot":"","sources":["../../../../src/engine/actions/process-action.ts"],"names":[],"mappings":";;;AACA,+CAAyC;AAEzC,yEAAmE;AAGnE,MAAa,aAAc,SAAQ,wBAAU;IACpC,KAAK,CAAC,OAAO,CAAC,YAA0B;QAC7C,MAAM,aAAa,GAAG,IAAI,CAAC,MAAuB,CAAC;QACnD,MAAM,cAAc,GAAG,aAAa,CAAC,UAAU,CAAC;QAChD,MAAM,UAAU,GACd,wCAAkB,CAAC,QAAQ,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC;QAElE,IAAI,UAAU,EAAE;YACd,MAAM,QAAQ,GAAG,IAAI,UAAU,EAAE,CAAC;YAClC,OAAO,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;SACvC;QAED,+DAA+D;IACjE,CAAC;IAEM,OAAO;QACZ,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAEtE,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE;YAC5C,OAAO,SAAS,CAAC;SAClB;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5D,CAAC;CACF;AAxBD,sCAwBC"}
@@ -0,0 +1,6 @@
1
+ import { SymbolChart } from '../../types/symbol-chart.type';
2
+ import { BaseAction } from './base-action';
3
+ export declare class StartAction extends BaseAction {
4
+ execute(): Promise<void>;
5
+ getNext(): SymbolChart | undefined;
6
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StartAction = void 0;
4
+ const base_action_1 = require("./base-action");
5
+ class StartAction extends base_action_1.BaseAction {
6
+ async execute() {
7
+ // console.log(`SymbolStart ${this.symbol.label} executed.`);
8
+ }
9
+ getNext() {
10
+ const connection = this.chart.getConnectionBySourceId(this.symbol.id);
11
+ if (!connection || !connection.mxCell.target) {
12
+ return undefined;
13
+ }
14
+ return this.chart.getSymbolById(connection.mxCell.target);
15
+ }
16
+ }
17
+ exports.StartAction = StartAction;
18
+ //# sourceMappingURL=start-action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start-action.js","sourceRoot":"","sources":["../../../../src/engine/actions/start-action.ts"],"names":[],"mappings":";;;AACA,+CAAyC;AAEzC,MAAa,WAAY,SAAQ,wBAAU;IAClC,KAAK,CAAC,OAAO;QAClB,6DAA6D;IAC/D,CAAC;IAEM,OAAO;QACZ,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAEtE,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE;YAC5C,OAAO,SAAS,CAAC;SAClB;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5D,CAAC;CACF;AAdD,kCAcC"}
@@ -0,0 +1,15 @@
1
+ import { SymbolConnection } from '../../interfaces/symbol-connection.interface';
2
+ import { SymbolStart } from '../../interfaces/symbol-start.interface';
3
+ import { SymbolChart } from '../../types/symbol-chart.type';
4
+ export declare class Chart {
5
+ private _name;
6
+ private _symbols;
7
+ constructor(name: string, symbols: SymbolChart[]);
8
+ get name(): string;
9
+ get symbols(): SymbolChart[];
10
+ getStartSymbol(): SymbolStart | undefined;
11
+ getSymbolById(id: string): SymbolChart | undefined;
12
+ getConnectionsBySourceId(id: string): SymbolConnection[];
13
+ getConnectionByTargetId(id: string): SymbolConnection | undefined;
14
+ getConnectionBySourceId(id: string): SymbolConnection | undefined;
15
+ }
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Chart = void 0;
4
+ class Chart {
5
+ _name;
6
+ _symbols;
7
+ constructor(name, symbols) {
8
+ this._name = name;
9
+ this._symbols = symbols;
10
+ }
11
+ get name() {
12
+ return this._name;
13
+ }
14
+ get symbols() {
15
+ return this._symbols;
16
+ }
17
+ getStartSymbol() {
18
+ return this.symbols.find(symbol => symbol.type === 'start');
19
+ }
20
+ getSymbolById(id) {
21
+ return this.symbols.find(symbol => symbol.id === id);
22
+ }
23
+ getConnectionsBySourceId(id) {
24
+ return this.symbols
25
+ .filter(symbol => symbol.type === 'connection')
26
+ .map(symbol => symbol)
27
+ .filter(symbol => symbol.mxCell.source === id);
28
+ }
29
+ getConnectionByTargetId(id) {
30
+ return this.symbols
31
+ .filter(symbol => symbol.type === 'connection')
32
+ .map(symbol => symbol)
33
+ .find(symbol => symbol.mxCell.target === id);
34
+ }
35
+ getConnectionBySourceId(id) {
36
+ return this.symbols
37
+ .filter(symbol => symbol.type === 'connection')
38
+ .map(symbol => symbol)
39
+ .find(symbol => symbol.mxCell.source === id);
40
+ }
41
+ }
42
+ exports.Chart = Chart;
43
+ //# sourceMappingURL=chart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart.js","sourceRoot":"","sources":["../../../../src/engine/chart/chart.ts"],"names":[],"mappings":";;;AAIA,MAAa,KAAK;IACR,KAAK,CAAS;IACd,QAAQ,CAAgB;IAEhC,YAAY,IAAY,EAAE,OAAsB;QAC9C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,CAAC;IAED,IAAW,IAAI;QACb,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAEM,cAAc;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;IAC9D,CAAC;IAEM,aAAa,CAAC,EAAU;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACvD,CAAC;IAEM,wBAAwB,CAAC,EAAU;QACxC,OAAO,IAAI,CAAC,OAAO;aAChB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC;aAC9C,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAA0B,CAAC;aACzC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC;IACnD,CAAC;IAEM,uBAAuB,CAAC,EAAU;QACvC,OAAO,IAAI,CAAC,OAAO;aAChB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC;aAC9C,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAA0B,CAAC;aACzC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC;IACjD,CAAC;IAEM,uBAAuB,CAAC,EAAU;QACvC,OAAO,IAAI,CAAC,OAAO;aAChB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC;aAC9C,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAA0B,CAAC;aACzC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC;IACjD,CAAC;CACF;AA7CD,sBA6CC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Represents a context for storing and retrieving chart-related variables.
3
+ *
4
+ * The `ChartContext` class encapsulates a map-based context that allows
5
+ * variables to be set and retrieved by name. This is useful for managing
6
+ * state or configuration relevant to chart components.
7
+ */
8
+ export declare class ChartContext {
9
+ private _context;
10
+ constructor(context: Map<String, unknown>);
11
+ /**
12
+ * Gets the underlying context map containing all variables.
13
+ *
14
+ * @returns The map of variable names to their corresponding values.
15
+ */
16
+ get context(): Map<String, unknown>;
17
+ /**
18
+ * Sets a variable in the context.
19
+ *
20
+ * @param name - The name of the variable to set.
21
+ * @param value - The value to associate with the variable name.
22
+ */
23
+ setVariable(name: string, value: unknown): void;
24
+ /**
25
+ * Retrieves the value of a variable from the context.
26
+ *
27
+ * @param name - The name of the variable to retrieve.
28
+ * @returns The value associated with the variable name, or `undefined` if not found.
29
+ */
30
+ getVariable(name: string): unknown;
31
+ }
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ChartContext = void 0;
4
+ /**
5
+ * Represents a context for storing and retrieving chart-related variables.
6
+ *
7
+ * The `ChartContext` class encapsulates a map-based context that allows
8
+ * variables to be set and retrieved by name. This is useful for managing
9
+ * state or configuration relevant to chart components.
10
+ */
11
+ class ChartContext {
12
+ _context;
13
+ constructor(context) {
14
+ this._context = context;
15
+ }
16
+ /**
17
+ * Gets the underlying context map containing all variables.
18
+ *
19
+ * @returns The map of variable names to their corresponding values.
20
+ */
21
+ get context() {
22
+ return this._context;
23
+ }
24
+ /**
25
+ * Sets a variable in the context.
26
+ *
27
+ * @param name - The name of the variable to set.
28
+ * @param value - The value to associate with the variable name.
29
+ */
30
+ setVariable(name, value) {
31
+ this._context.set(name, value);
32
+ }
33
+ /**
34
+ * Retrieves the value of a variable from the context.
35
+ *
36
+ * @param name - The name of the variable to retrieve.
37
+ * @returns The value associated with the variable name, or `undefined` if not found.
38
+ */
39
+ getVariable(name) {
40
+ return this._context.get(name);
41
+ }
42
+ }
43
+ exports.ChartContext = ChartContext;
44
+ //# sourceMappingURL=chart-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart-context.js","sourceRoot":"","sources":["../../../../../src/engine/chart/context/chart-context.ts"],"names":[],"mappings":";;;AAAA;;;;;;GAMG;AACH,MAAa,YAAY;IACf,QAAQ,CAAuB;IAEvC,YAAY,OAA6B;QACvC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,CAAC;IAED;;;;OAIG;IACH,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED;;;;;OAKG;IACI,WAAW,CAAC,IAAY,EAAE,KAAc;QAC7C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACjC,CAAC;IAED;;;;;OAKG;IACI,WAAW,CAAC,IAAY;QAC7B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;CACF;AAnCD,oCAmCC"}
@@ -0,0 +1,12 @@
1
+ import { ChartContext } from '../context/chart-context';
2
+ import { ChartManager } from '../manager/chart-manager';
3
+ import { Chart } from '../chart';
4
+ export declare class ChartInstance {
5
+ private readonly actions;
6
+ private chartContext;
7
+ private chart;
8
+ private chartManager;
9
+ constructor(chartContext: ChartContext, chart: Chart, chartManager: ChartManager);
10
+ run(): Promise<void>;
11
+ private executeSymbol;
12
+ }
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ChartInstance = void 0;
4
+ const decision_action_1 = require("../../actions/decision-action");
5
+ const end_action_1 = require("../../actions/end-action");
6
+ const process_action_1 = require("../../actions/process-action");
7
+ const start_action_1 = require("../../actions/start-action");
8
+ const predefined_process_action_1 = require("../../actions/predefined-process-action");
9
+ class ChartInstance {
10
+ actions = new Map([
11
+ ['start', (context) => new start_action_1.StartAction(context)],
12
+ ['end', (context) => new end_action_1.EndAction(context)],
13
+ ['process', (context) => new process_action_1.ProcessAction(context)],
14
+ [
15
+ 'predefined',
16
+ (context) => new predefined_process_action_1.PredefinedProcessAction(context),
17
+ ],
18
+ ['decision', (context) => new decision_action_1.DecisionAction(context)],
19
+ ]);
20
+ chartContext;
21
+ chart;
22
+ chartManager;
23
+ constructor(chartContext, chart, chartManager) {
24
+ this.chartContext = chartContext;
25
+ this.chart = chart;
26
+ this.chartManager = chartManager;
27
+ }
28
+ async run() {
29
+ let next = this.chart.getStartSymbol();
30
+ while (next) {
31
+ next = await this.executeSymbol(next);
32
+ }
33
+ }
34
+ async executeSymbol(next) {
35
+ const action = this.actions.get(next.type);
36
+ if (!action) {
37
+ throw new Error(`no action defined for symbol type ${next.type}`);
38
+ }
39
+ const actionInstance = action({
40
+ symbol: next,
41
+ chart: this.chart,
42
+ chartManager: this.chartManager,
43
+ });
44
+ await actionInstance.execute(this.chartContext);
45
+ return actionInstance.getNext(this.chartContext);
46
+ }
47
+ }
48
+ exports.ChartInstance = ChartInstance;
49
+ //# sourceMappingURL=chart-instance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart-instance.js","sourceRoot":"","sources":["../../../../../src/engine/chart/instance/chart-instance.ts"],"names":[],"mappings":";;;AACA,mEAA6D;AAC7D,yDAAmD;AACnD,iEAA2D;AAC3D,6DAAuD;AAGvD,uFAAgF;AAMhF,MAAa,aAAa;IACP,OAAO,GAGpB,IAAI,GAAG,CAAqD;QAC9D,CAAC,OAAO,EAAE,CAAC,OAAsB,EAAE,EAAE,CAAC,IAAI,0BAAW,CAAC,OAAO,CAAC,CAAC;QAC/D,CAAC,KAAK,EAAE,CAAC,OAAsB,EAAE,EAAE,CAAC,IAAI,sBAAS,CAAC,OAAO,CAAC,CAAC;QAC3D,CAAC,SAAS,EAAE,CAAC,OAAsB,EAAE,EAAE,CAAC,IAAI,8BAAa,CAAC,OAAO,CAAC,CAAC;QACnE;YACE,YAAY;YACZ,CAAC,OAAsB,EAAE,EAAE,CAAC,IAAI,mDAAuB,CAAC,OAAO,CAAC;SACjE;QACD,CAAC,UAAU,EAAE,CAAC,OAAsB,EAAE,EAAE,CAAC,IAAI,gCAAc,CAAC,OAAO,CAAC,CAAC;KACtE,CAAC,CAAC;IAEK,YAAY,CAAe;IAC3B,KAAK,CAAQ;IACb,YAAY,CAAe;IAEnC,YACE,YAA0B,EAC1B,KAAY,EACZ,YAA0B;QAE1B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;IAEM,KAAK,CAAC,GAAG;QACd,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;QAEvC,OAAO,IAAI,EAAE;YACX,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;SACvC;IACH,CAAC;IAEO,KAAK,CAAC,aAAa,CACzB,IAAiB;QAEjB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE3C,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,qCAAqC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;SACnE;QAED,MAAM,cAAc,GAAG,MAAM,CAAC;YAC5B,MAAM,EAAE,IAAI;YACZ,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,YAAY,EAAE,IAAI,CAAC,YAAY;SAChC,CAAC,CAAC;QAEH,MAAM,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAChD,OAAO,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACnD,CAAC;CACF;AAvDD,sCAuDC"}