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
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Manages the lifecycle of chart objects, including loading, parsing, validating, and executing charts.
3
+ *
4
+ * The `ChartManager` class is responsible for:
5
+ * - Loading chart definitions from files in a specified directory.
6
+ * - Parsing file contents into chart diagrams and chart objects.
7
+ * - Validating charts either collectively or individually by name.
8
+ * - Starting chart processes with a given execution context.
9
+ *
10
+ * This class acts as the central point for chart management and orchestration within the application.
11
+ */
12
+ export declare class ChartManager {
13
+ private readonly charts;
14
+ private chartValidator;
15
+ private fileService;
16
+ private chartParser;
17
+ constructor();
18
+ /**
19
+ * Loads chart data from all files within the specified directory and creates charts for each file's content.
20
+ *
21
+ * This method retrieves the contents of all files in the given directory using the file service,
22
+ * then iterates over each file's content to create charts accordingly.
23
+ *
24
+ * @param directory - The path to the directory containing chart files to be loaded.
25
+ * @returns The current instance of {@link ChartManager} to allow method chaining.
26
+ */
27
+ loadCharts(directory: string): ChartManager;
28
+ private createDiagrams;
29
+ private createChart;
30
+ /**
31
+ * Validates all charts managed by this ChartManager instance.
32
+ *
33
+ * Iterates through each chart in the internal collection and applies the chartValidator
34
+ * to ensure each chart meets the required validation criteria.
35
+ *
36
+ * @returns {ChartManager} Returns the current instance to allow method chaining.
37
+ */
38
+ validateCharts(): ChartManager;
39
+ /**
40
+ * Validates a chart by its name using the chart validator.
41
+ *
42
+ * Looks up the chart with the specified name from the internal chart collection.
43
+ * If the chart exists, it is validated using the chart validator.
44
+ *
45
+ * @param name - The name of the chart to validate.
46
+ * @returns The current instance of {@link ChartManager} to allow method chaining.
47
+ */
48
+ validateChartByName(name: string): ChartManager;
49
+ /**
50
+ * Starts the execution process for a chart by its name.
51
+ *
52
+ * Retrieves the chart definition by the provided name, creates a new chart context and instance,
53
+ * and initiates the chart's execution. Throws an error if the chart name is unknown.
54
+ *
55
+ * @param name - The unique name of the chart to start.
56
+ * @param context - A map containing context data to be passed to the chart.
57
+ * @returns A promise that resolves when the chart process has completed.
58
+ * @throws {Error} If the specified chart name does not exist.
59
+ */
60
+ startProcess(name: string, context: Map<String, unknown>): Promise<void>;
61
+ }
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ChartManager = void 0;
4
+ const chart_context_1 = require("../context/chart-context");
5
+ const chart_instance_1 = require("../instance/chart-instance");
6
+ const chart_validator_1 = require("../validation/chart-validator");
7
+ const file_service_1 = require("../../file/file-service");
8
+ const chart_parser_1 = require("../parser/chart-parser");
9
+ /**
10
+ * Manages the lifecycle of chart objects, including loading, parsing, validating, and executing charts.
11
+ *
12
+ * The `ChartManager` class is responsible for:
13
+ * - Loading chart definitions from files in a specified directory.
14
+ * - Parsing file contents into chart diagrams and chart objects.
15
+ * - Validating charts either collectively or individually by name.
16
+ * - Starting chart processes with a given execution context.
17
+ *
18
+ * This class acts as the central point for chart management and orchestration within the application.
19
+ */
20
+ class ChartManager {
21
+ charts = new Map();
22
+ chartValidator;
23
+ fileService;
24
+ chartParser;
25
+ constructor() {
26
+ this.chartValidator = new chart_validator_1.ChartValidator();
27
+ this.fileService = new file_service_1.FileService();
28
+ this.chartParser = new chart_parser_1.ChartParser();
29
+ }
30
+ /**
31
+ * Loads chart data from all files within the specified directory and creates charts for each file's content.
32
+ *
33
+ * This method retrieves the contents of all files in the given directory using the file service,
34
+ * then iterates over each file's content to create charts accordingly.
35
+ *
36
+ * @param directory - The path to the directory containing chart files to be loaded.
37
+ * @returns The current instance of {@link ChartManager} to allow method chaining.
38
+ */
39
+ loadCharts(directory) {
40
+ const contents = this.fileService.getContentFromFiles(directory);
41
+ for (const content of contents) {
42
+ this.createDiagrams(content);
43
+ }
44
+ return this;
45
+ }
46
+ createDiagrams(content) {
47
+ const diagrams = this.chartParser.parseDiagrams(content);
48
+ for (const diagram of diagrams) {
49
+ this.createChart(diagram);
50
+ }
51
+ }
52
+ createChart(diagram) {
53
+ const chart = this.chartParser.parseChart(diagram);
54
+ if (chart) {
55
+ this.charts.set(chart.name, chart);
56
+ }
57
+ }
58
+ /**
59
+ * Validates all charts managed by this ChartManager instance.
60
+ *
61
+ * Iterates through each chart in the internal collection and applies the chartValidator
62
+ * to ensure each chart meets the required validation criteria.
63
+ *
64
+ * @returns {ChartManager} Returns the current instance to allow method chaining.
65
+ */
66
+ validateCharts() {
67
+ this.charts.forEach((value, key) => this.chartValidator.validate(key, value));
68
+ return this;
69
+ }
70
+ /**
71
+ * Validates a chart by its name using the chart validator.
72
+ *
73
+ * Looks up the chart with the specified name from the internal chart collection.
74
+ * If the chart exists, it is validated using the chart validator.
75
+ *
76
+ * @param name - The name of the chart to validate.
77
+ * @returns The current instance of {@link ChartManager} to allow method chaining.
78
+ */
79
+ validateChartByName(name) {
80
+ const chart = this.charts.get(name);
81
+ if (chart) {
82
+ this.chartValidator.validate(name, chart);
83
+ }
84
+ return this;
85
+ }
86
+ /**
87
+ * Starts the execution process for a chart by its name.
88
+ *
89
+ * Retrieves the chart definition by the provided name, creates a new chart context and instance,
90
+ * and initiates the chart's execution. Throws an error if the chart name is unknown.
91
+ *
92
+ * @param name - The unique name of the chart to start.
93
+ * @param context - A map containing context data to be passed to the chart.
94
+ * @returns A promise that resolves when the chart process has completed.
95
+ * @throws {Error} If the specified chart name does not exist.
96
+ */
97
+ async startProcess(name, context) {
98
+ const chart = this.charts.get(name);
99
+ if (!chart) {
100
+ throw new Error(`unknown chart name ${name}`);
101
+ }
102
+ const chartContext = new chart_context_1.ChartContext(context);
103
+ const chartInstance = new chart_instance_1.ChartInstance(chartContext, chart, this);
104
+ return chartInstance.run();
105
+ }
106
+ }
107
+ exports.ChartManager = ChartManager;
108
+ //# sourceMappingURL=chart-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart-manager.js","sourceRoot":"","sources":["../../../../../src/engine/chart/manager/chart-manager.ts"],"names":[],"mappings":";;;AAAA,4DAAsD;AACtD,+DAAyD;AACzD,mEAA6D;AAC7D,0DAAoD;AACpD,yDAAmD;AAInD;;;;;;;;;;GAUG;AACH,MAAa,YAAY;IACN,MAAM,GAAuB,IAAI,GAAG,EAAiB,CAAC;IAE/D,cAAc,CAAiB;IAC/B,WAAW,CAAc;IACzB,WAAW,CAAc;IAEjC;QACE,IAAI,CAAC,cAAc,GAAG,IAAI,gCAAc,EAAE,CAAC;QAC3C,IAAI,CAAC,WAAW,GAAG,IAAI,0BAAW,EAAE,CAAC;QACrC,IAAI,CAAC,WAAW,GAAG,IAAI,0BAAW,EAAE,CAAC;IACvC,CAAC;IAED;;;;;;;;OAQG;IACI,UAAU,CAAC,SAAiB;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;QACjE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;YAC9B,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;SAC9B;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,cAAc,CAAC,OAAe;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAEzD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;YAC9B,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;SAC3B;IACH,CAAC;IAEO,WAAW,CAAC,OAAsB;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAEnD,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SACpC;IACH,CAAC;IAED;;;;;;;OAOG;IACI,cAAc;QACnB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAY,EAAE,GAAW,EAAE,EAAE,CAChD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CACzC,CAAC;QAEF,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;;OAQG;IACI,mBAAmB,CAAC,IAAY;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAEpC,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SAC3C;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;;;;OAUG;IACI,KAAK,CAAC,YAAY,CACvB,IAAY,EACZ,OAA6B;QAE7B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAEpC,IAAI,CAAC,KAAK,EAAE;YACV,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC;SAC/C;QAED,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,aAAa,GAAG,IAAI,8BAAa,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAEnE,OAAO,aAAa,CAAC,GAAG,EAAE,CAAC;IAC7B,CAAC;CACF;AA5GD,oCA4GC"}
@@ -0,0 +1,12 @@
1
+ import { ParsedDiagram } from '../../../interfaces/parsed-diagram.interface';
2
+ import { Chart } from '../chart';
3
+ export declare class ChartParser {
4
+ private readonly xmlParserConfig;
5
+ private parser;
6
+ constructor();
7
+ parseDiagrams(content: string): ParsedDiagram[];
8
+ private extractDiagrams;
9
+ private isValidChart;
10
+ parseChart(diagram: ParsedDiagram): Chart | undefined;
11
+ private isValidDiagram;
12
+ }
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ChartParser = void 0;
4
+ const fast_xml_parser_1 = require("fast-xml-parser");
5
+ const chart_1 = require("../chart");
6
+ class ChartParser {
7
+ xmlParserConfig = {
8
+ ignoreAttributes: false,
9
+ attributeNamePrefix: '',
10
+ };
11
+ parser;
12
+ constructor() {
13
+ this.parser = new fast_xml_parser_1.XMLParser(this.xmlParserConfig);
14
+ }
15
+ parseDiagrams(content) {
16
+ const parsedChart = this.parser.parse(content);
17
+ return this.extractDiagrams(parsedChart);
18
+ }
19
+ extractDiagrams(parsedChart) {
20
+ if (!this.isValidChart(parsedChart)) {
21
+ return [];
22
+ }
23
+ const diagrams = parsedChart.mxfile.diagram;
24
+ if (Array.isArray(diagrams)) {
25
+ return diagrams;
26
+ }
27
+ else {
28
+ return [diagrams];
29
+ }
30
+ }
31
+ isValidChart(parsedChart) {
32
+ return (parsedChart !== undefined &&
33
+ parsedChart !== null &&
34
+ parsedChart.mxfile !== undefined &&
35
+ parsedChart.mxfile.diagram !== undefined);
36
+ }
37
+ parseChart(diagram) {
38
+ if (!this.isValidDiagram(diagram)) {
39
+ return;
40
+ }
41
+ const name = diagram.name;
42
+ const symbols = diagram.mxGraphModel.root.object;
43
+ const parsedSymbols = Array.isArray(symbols)
44
+ ? symbols
45
+ : [symbols];
46
+ return new chart_1.Chart(name, parsedSymbols);
47
+ }
48
+ isValidDiagram(diagram) {
49
+ return (diagram !== undefined &&
50
+ diagram !== null &&
51
+ diagram.name !== undefined &&
52
+ diagram.mxGraphModel !== undefined &&
53
+ diagram.mxGraphModel.root !== undefined &&
54
+ diagram.mxGraphModel.root.object !== undefined);
55
+ }
56
+ }
57
+ exports.ChartParser = ChartParser;
58
+ //# sourceMappingURL=chart-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart-parser.js","sourceRoot":"","sources":["../../../../../src/engine/chart/parser/chart-parser.ts"],"names":[],"mappings":";;;AAAA,qDAAsD;AAItD,oCAA+B;AAE/B,MAAa,WAAW;IACL,eAAe,GAAe;QAC7C,gBAAgB,EAAE,KAAK;QACvB,mBAAmB,EAAE,EAAE;KACxB,CAAC;IAEM,MAAM,CAAY;IAE1B;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,2BAAS,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACpD,CAAC;IAEM,aAAa,CAAC,OAAe;QAClC,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAE/C,OAAO,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC;IAEO,eAAe,CAAC,WAAwB;QAC9C,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE;YACnC,OAAO,EAAE,CAAC;SACX;QACD,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC;QAC5C,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YAC3B,OAAO,QAA2B,CAAC;SACpC;aAAM;YACL,OAAO,CAAC,QAAyB,CAAC,CAAC;SACpC;IACH,CAAC;IAEO,YAAY,CAAC,WAAwB;QAC3C,OAAO,CACL,WAAW,KAAK,SAAS;YACzB,WAAW,KAAK,IAAI;YACpB,WAAW,CAAC,MAAM,KAAK,SAAS;YAChC,WAAW,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS,CACzC,CAAC;IACJ,CAAC;IAEM,UAAU,CAAC,OAAsB;QACtC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE;YACjC,OAAO;SACR;QAED,MAAM,IAAI,GAAW,OAAO,CAAC,IAAI,CAAC;QAClC,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;QACjD,MAAM,aAAa,GAAkB,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;YACzD,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAEd,OAAO,IAAI,aAAK,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IACxC,CAAC;IAEO,cAAc,CAAC,OAAsB;QAC3C,OAAO,CACL,OAAO,KAAK,SAAS;YACrB,OAAO,KAAK,IAAI;YAChB,OAAO,CAAC,IAAI,KAAK,SAAS;YAC1B,OAAO,CAAC,YAAY,KAAK,SAAS;YAClC,OAAO,CAAC,YAAY,CAAC,IAAI,KAAK,SAAS;YACvC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAC/C,CAAC;IACJ,CAAC;CACF;AA/DD,kCA+DC"}
@@ -0,0 +1,7 @@
1
+ import { Chart } from '../chart';
2
+ export declare class ChartValidator {
3
+ private readonly validationRules;
4
+ validate(name: string, chart: Chart): void;
5
+ private validateSymbol;
6
+ private checkValidationRule;
7
+ }
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ChartValidator = void 0;
4
+ const has_connection_source_and_target_value_1 = require("./rules/has-connection-source-and-target-value");
5
+ const has_connection_with_condition_or_default_1 = require("./rules/has-connection-with-condition-or-default");
6
+ const has_single_or_multiple_source_connection_1 = require("./rules/has-single-or-multiple-source-connection");
7
+ const has_no_source_connection_1 = require("./rules/has-no-source-connection");
8
+ const has_single_or_multiple_target_connection_1 = require("./rules/has-single-or-multiple-target-connection");
9
+ const has_single_source_connection_1 = require("./rules/has-single-source-connection");
10
+ const is_single_symbol_1 = require("./rules/is-single-symbol");
11
+ class ChartValidator {
12
+ validationRules = new Map([
13
+ ['start', [new is_single_symbol_1.IsSingleSymbol(), new has_single_source_connection_1.HasSingleSourceConnection()]],
14
+ [
15
+ 'end',
16
+ [
17
+ new has_no_source_connection_1.HasNoSourceConnection(),
18
+ new has_single_or_multiple_target_connection_1.HasSingleOrMultipleTargetConnection(),
19
+ ],
20
+ ],
21
+ ['connection', [new has_connection_source_and_target_value_1.HasConnectionSourceAndTargetValue()]],
22
+ [
23
+ 'process',
24
+ [
25
+ new has_single_source_connection_1.HasSingleSourceConnection(),
26
+ new has_single_or_multiple_target_connection_1.HasSingleOrMultipleTargetConnection(),
27
+ ],
28
+ ],
29
+ [
30
+ 'predefined',
31
+ [
32
+ new has_single_source_connection_1.HasSingleSourceConnection(),
33
+ new has_single_or_multiple_target_connection_1.HasSingleOrMultipleTargetConnection(),
34
+ ],
35
+ ],
36
+ [
37
+ 'decision',
38
+ [
39
+ new has_single_or_multiple_source_connection_1.HasSingleOrMultipleSourceConnection(),
40
+ new has_connection_with_condition_or_default_1.HasConnectionWithConditionOrDefault(),
41
+ new has_single_or_multiple_target_connection_1.HasSingleOrMultipleTargetConnection(),
42
+ ],
43
+ ],
44
+ ]);
45
+ validate(name, chart) {
46
+ for (const symbol of chart.symbols) {
47
+ this.validateSymbol(name, chart, symbol);
48
+ }
49
+ }
50
+ validateSymbol(name, chart, symbol) {
51
+ const rules = this.validationRules.get(symbol.type);
52
+ if (!rules) {
53
+ throw new Error(`no validation rules defined for symbol type ${symbol.type}`);
54
+ }
55
+ for (const rule of rules) {
56
+ this.checkValidationRule(name, chart, symbol, rule);
57
+ }
58
+ }
59
+ checkValidationRule(name, chart, symbol, rule) {
60
+ const isValid = rule.validate(symbol, chart);
61
+ if (!isValid) {
62
+ console.log(`${name} / ${symbol.label} / ${symbol.type}: ${rule.generateValidationMessage()}`);
63
+ }
64
+ }
65
+ }
66
+ exports.ChartValidator = ChartValidator;
67
+ //# sourceMappingURL=chart-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart-validator.js","sourceRoot":"","sources":["../../../../../src/engine/chart/validation/chart-validator.ts"],"names":[],"mappings":";;;AAEA,2GAAiG;AACjG,+GAAqG;AACrG,+GAAqG;AACrG,+EAAuE;AACvE,+GAAqG;AACrG,uFAA+E;AAC/E,+DAAwD;AAIxD,MAAa,cAAc;IACR,eAAe,GAC9B,IAAI,GAAG,CAAoC;QACzC,CAAC,OAAO,EAAE,CAAC,IAAI,iCAAc,EAAE,EAAE,IAAI,wDAAyB,EAAE,CAAC,CAAC;QAClE;YACE,KAAK;YACL;gBACE,IAAI,gDAAqB,EAAE;gBAC3B,IAAI,8EAAmC,EAAE;aAC1C;SACF;QACD,CAAC,YAAY,EAAE,CAAC,IAAI,0EAAiC,EAAE,CAAC,CAAC;QACzD;YACE,SAAS;YACT;gBACE,IAAI,wDAAyB,EAAE;gBAC/B,IAAI,8EAAmC,EAAE;aAC1C;SACF;QACD;YACE,YAAY;YACZ;gBACE,IAAI,wDAAyB,EAAE;gBAC/B,IAAI,8EAAmC,EAAE;aAC1C;SACF;QACD;YACE,UAAU;YACV;gBACE,IAAI,8EAAmC,EAAE;gBACzC,IAAI,8EAAmC,EAAE;gBACzC,IAAI,8EAAmC,EAAE;aAC1C;SACF;KACF,CAAC,CAAC;IAEE,QAAQ,CAAC,IAAY,EAAE,KAAY;QACxC,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE;YAClC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;SAC1C;IACH,CAAC;IAEO,cAAc,CACpB,IAAY,EACZ,KAAY,EACZ,MAAmB;QAEnB,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEpD,IAAI,CAAC,KAAK,EAAE;YACV,MAAM,IAAI,KAAK,CACb,+CAA+C,MAAM,CAAC,IAAI,EAAE,CAC7D,CAAC;SACH;QAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;SACrD;IACH,CAAC;IAEO,mBAAmB,CACzB,IAAY,EACZ,KAAY,EACZ,MAAmB,EACnB,IAAyB;QAEzB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAE7C,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,CAAC,GAAG,CACT,GAAG,IAAI,MAAM,MAAM,CAAC,KAAK,MAAM,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,yBAAyB,EAAE,EAAE,CAClF,CAAC;SACH;IACH,CAAC;CACF;AA1ED,wCA0EC"}
@@ -0,0 +1,6 @@
1
+ import { ChartValidationRule } from '../../../../interfaces/chart-validation-rule.interface';
2
+ import { SymbolConnection } from '../../../../interfaces/symbol-connection.interface';
3
+ export declare class HasConnectionSourceAndTargetValue implements ChartValidationRule {
4
+ validate(symbol: SymbolConnection): boolean;
5
+ generateValidationMessage(): string;
6
+ }
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HasConnectionSourceAndTargetValue = void 0;
4
+ class HasConnectionSourceAndTargetValue {
5
+ validate(symbol) {
6
+ const hasCell = symbol.mxCell !== undefined;
7
+ if (!hasCell) {
8
+ return false;
9
+ }
10
+ const hasSource = symbol.mxCell.source !== undefined && symbol.mxCell.source !== '';
11
+ const hasTarget = symbol.mxCell.target !== undefined && symbol.mxCell.target !== '';
12
+ return hasSource && hasTarget;
13
+ }
14
+ generateValidationMessage() {
15
+ return 'Connection has no target or/and source connected';
16
+ }
17
+ }
18
+ exports.HasConnectionSourceAndTargetValue = HasConnectionSourceAndTargetValue;
19
+ //# sourceMappingURL=has-connection-source-and-target-value.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"has-connection-source-and-target-value.js","sourceRoot":"","sources":["../../../../../../src/engine/chart/validation/rules/has-connection-source-and-target-value.ts"],"names":[],"mappings":";;;AAGA,MAAa,iCAAiC;IACrC,QAAQ,CAAC,MAAwB;QACtC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC;QAE5C,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,KAAK,CAAC;SACd;QAED,MAAM,SAAS,GACb,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,EAAE,CAAC;QACpE,MAAM,SAAS,GACb,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,EAAE,CAAC;QAEpE,OAAO,SAAS,IAAI,SAAS,CAAC;IAChC,CAAC;IAEM,yBAAyB;QAC9B,OAAO,kDAAkD,CAAC;IAC5D,CAAC;CACF;AAnBD,8EAmBC"}
@@ -0,0 +1,7 @@
1
+ import { ChartValidationRule } from '../../../../interfaces/chart-validation-rule.interface';
2
+ import { SymbolChart } from '../../../../types/symbol-chart.type';
3
+ import { Chart } from '../../chart';
4
+ export declare class HasConnectionWithConditionOrDefault implements ChartValidationRule {
5
+ validate(symbol: SymbolChart, chart: Chart): boolean;
6
+ generateValidationMessage(): string;
7
+ }
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HasConnectionWithConditionOrDefault = void 0;
4
+ class HasConnectionWithConditionOrDefault {
5
+ validate(symbol, chart) {
6
+ const id = symbol.id;
7
+ const sourceConnections = chart.symbols
8
+ .filter(symbol => symbol.type === 'connection')
9
+ .map(symbol => symbol)
10
+ .filter(symbol => symbol.mxCell !== undefined && symbol.mxCell.source === id);
11
+ if (sourceConnections.length === 0) {
12
+ return true;
13
+ }
14
+ const connectionsWithDefaultValue = sourceConnections.filter(symbol => symbol.default !== undefined && symbol.default === '1');
15
+ const connectionsWithConditionValue = sourceConnections.filter(symbol => symbol.condition !== undefined && symbol.condition !== '');
16
+ return (connectionsWithDefaultValue.length === 1 &&
17
+ connectionsWithConditionValue.length === sourceConnections.length - 1);
18
+ }
19
+ generateValidationMessage() {
20
+ return 'Each connection for this symbol must have a condition, and at least one must be marked as default';
21
+ }
22
+ }
23
+ exports.HasConnectionWithConditionOrDefault = HasConnectionWithConditionOrDefault;
24
+ //# sourceMappingURL=has-connection-with-condition-or-default.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"has-connection-with-condition-or-default.js","sourceRoot":"","sources":["../../../../../../src/engine/chart/validation/rules/has-connection-with-condition-or-default.ts"],"names":[],"mappings":";;;AAKA,MAAa,mCAAmC;IAGvC,QAAQ,CAAC,MAAmB,EAAE,KAAY;QAC/C,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;QACrB,MAAM,iBAAiB,GAAG,KAAK,CAAC,OAAO;aACpC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC;aAC9C,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAA0B,CAAC;aACzC,MAAM,CACL,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,EAAE,CACrE,CAAC;QAEJ,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE;YAClC,OAAO,IAAI,CAAC;SACb;QAED,MAAM,2BAA2B,GAAG,iBAAiB,CAAC,MAAM,CAC1D,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,KAAK,GAAG,CACjE,CAAC;QAEF,MAAM,6BAA6B,GAAG,iBAAiB,CAAC,MAAM,CAC5D,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS,IAAI,MAAM,CAAC,SAAS,KAAK,EAAE,CACpE,CAAC;QAEF,OAAO,CACL,2BAA2B,CAAC,MAAM,KAAK,CAAC;YACxC,6BAA6B,CAAC,MAAM,KAAK,iBAAiB,CAAC,MAAM,GAAG,CAAC,CACtE,CAAC;IACJ,CAAC;IAEM,yBAAyB;QAC9B,OAAO,mGAAmG,CAAC;IAC7G,CAAC;CACF;AAjCD,kFAiCC"}
@@ -0,0 +1,7 @@
1
+ import { ChartValidationRule } from '../../../../interfaces/chart-validation-rule.interface';
2
+ import { SymbolChart } from '../../../../types/symbol-chart.type';
3
+ import { Chart } from '../../chart';
4
+ export declare class HasNoSourceConnection implements ChartValidationRule {
5
+ validate(symbol: SymbolChart, chart: Chart): boolean;
6
+ generateValidationMessage(): string;
7
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HasNoSourceConnection = void 0;
4
+ class HasNoSourceConnection {
5
+ validate(symbol, chart) {
6
+ const id = symbol.id;
7
+ const sourceConnections = chart.symbols
8
+ .filter(symbol => symbol.type === 'connection')
9
+ .map(symbol => symbol)
10
+ .filter(symbol => symbol.mxCell !== undefined && symbol.mxCell.source === id);
11
+ return sourceConnections.length === 0;
12
+ }
13
+ generateValidationMessage() {
14
+ return 'Symbol should have no source connection';
15
+ }
16
+ }
17
+ exports.HasNoSourceConnection = HasNoSourceConnection;
18
+ //# sourceMappingURL=has-no-source-connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"has-no-source-connection.js","sourceRoot":"","sources":["../../../../../../src/engine/chart/validation/rules/has-no-source-connection.ts"],"names":[],"mappings":";;;AAKA,MAAa,qBAAqB;IACzB,QAAQ,CAAC,MAAmB,EAAE,KAAY;QAC/C,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;QACrB,MAAM,iBAAiB,GAAG,KAAK,CAAC,OAAO;aACpC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC;aAC9C,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAA0B,CAAC;aACzC,MAAM,CACL,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,EAAE,CACrE,CAAC;QAEJ,OAAO,iBAAiB,CAAC,MAAM,KAAK,CAAC,CAAC;IACxC,CAAC;IAEM,yBAAyB;QAC9B,OAAO,yCAAyC,CAAC;IACnD,CAAC;CACF;AAhBD,sDAgBC"}
@@ -0,0 +1,7 @@
1
+ import { ChartValidationRule } from '../../../../interfaces/chart-validation-rule.interface';
2
+ import { SymbolChart } from '../../../../types/symbol-chart.type';
3
+ import { Chart } from '../../chart';
4
+ export declare class HasSingleOrMultipleSourceConnection implements ChartValidationRule {
5
+ validate(symbol: SymbolChart, chart: Chart): boolean;
6
+ generateValidationMessage(): string;
7
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HasSingleOrMultipleSourceConnection = void 0;
4
+ class HasSingleOrMultipleSourceConnection {
5
+ validate(symbol, chart) {
6
+ const id = symbol.id;
7
+ const sourceConnections = chart.symbols
8
+ .filter(symbol => symbol.type === 'connection')
9
+ .map(symbol => symbol)
10
+ .filter(symbol => symbol.mxCell !== undefined && symbol.mxCell.source === id);
11
+ return sourceConnections.length > 0;
12
+ }
13
+ generateValidationMessage() {
14
+ return 'Symbol should have at least one source connection';
15
+ }
16
+ }
17
+ exports.HasSingleOrMultipleSourceConnection = HasSingleOrMultipleSourceConnection;
18
+ //# sourceMappingURL=has-single-or-multiple-source-connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"has-single-or-multiple-source-connection.js","sourceRoot":"","sources":["../../../../../../src/engine/chart/validation/rules/has-single-or-multiple-source-connection.ts"],"names":[],"mappings":";;;AAKA,MAAa,mCAAmC;IAGvC,QAAQ,CAAC,MAAmB,EAAE,KAAY;QAC/C,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;QACrB,MAAM,iBAAiB,GAAG,KAAK,CAAC,OAAO;aACpC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC;aAC9C,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAA0B,CAAC;aACzC,MAAM,CACL,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,EAAE,CACrE,CAAC;QAEJ,OAAO,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC;IACtC,CAAC;IAEM,yBAAyB;QAC9B,OAAO,mDAAmD,CAAC;IAC7D,CAAC;CACF;AAlBD,kFAkBC"}
@@ -0,0 +1,7 @@
1
+ import { ChartValidationRule } from '../../../../interfaces/chart-validation-rule.interface';
2
+ import { SymbolChart } from '../../../../types/symbol-chart.type';
3
+ import { Chart } from '../../chart';
4
+ export declare class HasSingleOrMultipleTargetConnection implements ChartValidationRule {
5
+ validate(symbol: SymbolChart, chart: Chart): boolean;
6
+ generateValidationMessage(): string;
7
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HasSingleOrMultipleTargetConnection = void 0;
4
+ class HasSingleOrMultipleTargetConnection {
5
+ validate(symbol, chart) {
6
+ const id = symbol.id;
7
+ const sourceConnections = chart.symbols
8
+ .filter(symbol => symbol.type === 'connection')
9
+ .map(symbol => symbol)
10
+ .filter(symbol => symbol.mxCell !== undefined && symbol.mxCell.target === id);
11
+ return sourceConnections.length > 0;
12
+ }
13
+ generateValidationMessage() {
14
+ return 'Symbol should have at least one target connection';
15
+ }
16
+ }
17
+ exports.HasSingleOrMultipleTargetConnection = HasSingleOrMultipleTargetConnection;
18
+ //# sourceMappingURL=has-single-or-multiple-target-connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"has-single-or-multiple-target-connection.js","sourceRoot":"","sources":["../../../../../../src/engine/chart/validation/rules/has-single-or-multiple-target-connection.ts"],"names":[],"mappings":";;;AAKA,MAAa,mCAAmC;IAGvC,QAAQ,CAAC,MAAmB,EAAE,KAAY;QAC/C,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;QACrB,MAAM,iBAAiB,GAAG,KAAK,CAAC,OAAO;aACpC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC;aAC9C,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAA0B,CAAC;aACzC,MAAM,CACL,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,EAAE,CACrE,CAAC;QAEJ,OAAO,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC;IACtC,CAAC;IAEM,yBAAyB;QAC9B,OAAO,mDAAmD,CAAC;IAC7D,CAAC;CACF;AAlBD,kFAkBC"}
@@ -0,0 +1,7 @@
1
+ import { ChartValidationRule } from '../../../../interfaces/chart-validation-rule.interface';
2
+ import { SymbolChart } from '../../../../types/symbol-chart.type';
3
+ import { Chart } from '../../chart';
4
+ export declare class HasSingleSourceConnection implements ChartValidationRule {
5
+ validate(symbol: SymbolChart, chart: Chart): boolean;
6
+ generateValidationMessage(): string;
7
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HasSingleSourceConnection = void 0;
4
+ class HasSingleSourceConnection {
5
+ validate(symbol, chart) {
6
+ const id = symbol.id;
7
+ const sourceConnections = chart.symbols
8
+ .filter(symbol => symbol.type === 'connection')
9
+ .map(symbol => symbol)
10
+ .filter(symbol => symbol.mxCell !== undefined && symbol.mxCell.source === id);
11
+ return sourceConnections.length === 1;
12
+ }
13
+ generateValidationMessage() {
14
+ return 'Symbol should have one source connection';
15
+ }
16
+ }
17
+ exports.HasSingleSourceConnection = HasSingleSourceConnection;
18
+ //# sourceMappingURL=has-single-source-connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"has-single-source-connection.js","sourceRoot":"","sources":["../../../../../../src/engine/chart/validation/rules/has-single-source-connection.ts"],"names":[],"mappings":";;;AAKA,MAAa,yBAAyB;IAC7B,QAAQ,CAAC,MAAmB,EAAE,KAAY;QAC/C,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;QACrB,MAAM,iBAAiB,GAAG,KAAK,CAAC,OAAO;aACpC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC;aAC9C,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAA0B,CAAC;aACzC,MAAM,CACL,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,EAAE,CACrE,CAAC;QAEJ,OAAO,iBAAiB,CAAC,MAAM,KAAK,CAAC,CAAC;IACxC,CAAC;IAEM,yBAAyB;QAC9B,OAAO,0CAA0C,CAAC;IACpD,CAAC;CACF;AAhBD,8DAgBC"}
@@ -0,0 +1,7 @@
1
+ import { ChartValidationRule } from '../../../../interfaces/chart-validation-rule.interface';
2
+ import { SymbolChart } from '../../../../types/symbol-chart.type';
3
+ import { Chart } from '../../chart';
4
+ export declare class IsSingleSymbol implements ChartValidationRule {
5
+ validate(symbol: SymbolChart, chart: Chart): boolean;
6
+ generateValidationMessage(): string;
7
+ }
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IsSingleSymbol = void 0;
4
+ class IsSingleSymbol {
5
+ validate(symbol, chart) {
6
+ const type = symbol.type;
7
+ const symbols = chart.symbols.filter(symbol => symbol.type === type);
8
+ return symbols.length === 1;
9
+ }
10
+ generateValidationMessage() {
11
+ return 'Symbol should only appear once';
12
+ }
13
+ }
14
+ exports.IsSingleSymbol = IsSingleSymbol;
15
+ //# sourceMappingURL=is-single-symbol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-single-symbol.js","sourceRoot":"","sources":["../../../../../../src/engine/chart/validation/rules/is-single-symbol.ts"],"names":[],"mappings":";;;AAIA,MAAa,cAAc;IAClB,QAAQ,CAAC,MAAmB,EAAE,KAAY;QAC/C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACzB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAErE,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC;IAC9B,CAAC;IAEM,yBAAyB;QAC9B,OAAO,gCAAgC,CAAC;IAC1C,CAAC;CACF;AAXD,wCAWC"}
@@ -0,0 +1,7 @@
1
+ export declare class FileService {
2
+ private readonly drawIoFileExtension;
3
+ getContentFromFiles(directory: string): string[];
4
+ private getAllChartFiles;
5
+ private collectChartFiles;
6
+ private isDrawIoFile;
7
+ }
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FileService = void 0;
4
+ const fs_1 = require("fs");
5
+ const path_1 = require("path");
6
+ class FileService {
7
+ drawIoFileExtension = '.drawio';
8
+ getContentFromFiles(directory) {
9
+ const files = this.getAllChartFiles(directory);
10
+ return files.map(file => (0, fs_1.readFileSync)(file, 'utf-8'));
11
+ }
12
+ getAllChartFiles(directory) {
13
+ const entries = (0, fs_1.readdirSync)(directory, { withFileTypes: true });
14
+ const files = [];
15
+ for (const entry of entries) {
16
+ this.collectChartFiles(directory, entry, files);
17
+ }
18
+ return files;
19
+ }
20
+ collectChartFiles(directory, entry, files) {
21
+ const fullPath = (0, path_1.join)(directory, entry.name);
22
+ if (entry.isDirectory()) {
23
+ files.push(...this.getAllChartFiles(fullPath));
24
+ }
25
+ else if (this.isDrawIoFile(entry)) {
26
+ files.push(fullPath);
27
+ }
28
+ }
29
+ isDrawIoFile(entry) {
30
+ return entry.isFile() && entry.name.endsWith(this.drawIoFileExtension);
31
+ }
32
+ }
33
+ exports.FileService = FileService;
34
+ //# sourceMappingURL=file-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-service.js","sourceRoot":"","sources":["../../../../src/engine/file/file-service.ts"],"names":[],"mappings":";;;AAAA,2BAAqD;AACrD,+BAA0B;AAE1B,MAAa,WAAW;IACL,mBAAmB,GAAG,SAAS,CAAC;IAE1C,mBAAmB,CAAC,SAAiB;QAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAE/C,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAA,iBAAY,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACxD,CAAC;IAEO,gBAAgB,CAAC,SAAiB;QACxC,MAAM,OAAO,GAAG,IAAA,gBAAW,EAAC,SAAS,EAAE,EAAC,aAAa,EAAE,IAAI,EAAC,CAAC,CAAC;QAC9D,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;YAC3B,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;SACjD;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,iBAAiB,CACvB,SAAiB,EACjB,KAAa,EACb,KAAe;QAEf,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAE7C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE;YACvB,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;SAChD;aAAM,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;YACnC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACtB;IACH,CAAC;IAEO,YAAY,CAAC,KAAa;QAChC,OAAO,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACzE,CAAC;CACF;AArCD,kCAqCC"}