@cda/adapter-xma 0.4.2 → 0.5.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 (213) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +31 -6
  3. package/dist/cjs/diagnostics/diagnostics.d.ts.map +1 -0
  4. package/dist/cjs/diagnostics/diagnostics.js +23 -0
  5. package/dist/cjs/diagnostics/diagnostics.js.map +1 -0
  6. package/dist/cjs/diagnostics/errors.d.ts.map +1 -0
  7. package/dist/cjs/diagnostics/errors.js +24 -0
  8. package/dist/cjs/diagnostics/errors.js.map +1 -0
  9. package/dist/cjs/geometry/bendpoints.d.ts.map +1 -0
  10. package/dist/cjs/geometry/bendpoints.js +51 -0
  11. package/dist/cjs/geometry/bendpoints.js.map +1 -0
  12. package/dist/cjs/geometry/geometry.d.ts +75 -0
  13. package/dist/cjs/geometry/geometry.d.ts.map +1 -0
  14. package/dist/cjs/geometry/geometry.js +77 -0
  15. package/dist/cjs/geometry/geometry.js.map +1 -0
  16. package/dist/cjs/index.d.ts.map +1 -0
  17. package/dist/cjs/index.js +9 -0
  18. package/dist/cjs/index.js.map +1 -0
  19. package/dist/cjs/infrastructure/assert.d.ts +10 -0
  20. package/dist/cjs/infrastructure/assert.d.ts.map +1 -0
  21. package/dist/cjs/infrastructure/assert.js +18 -0
  22. package/dist/cjs/infrastructure/assert.js.map +1 -0
  23. package/dist/cjs/infrastructure/id-allocator.d.ts.map +1 -0
  24. package/dist/cjs/infrastructure/id-allocator.js +59 -0
  25. package/dist/cjs/infrastructure/id-allocator.js.map +1 -0
  26. package/dist/cjs/infrastructure/xml-writer.d.ts.map +1 -0
  27. package/dist/cjs/infrastructure/xml-writer.js +94 -0
  28. package/dist/cjs/infrastructure/xml-writer.js.map +1 -0
  29. package/dist/cjs/mapping/element-mapping.d.ts.map +1 -0
  30. package/dist/cjs/mapping/element-mapping.js +117 -0
  31. package/dist/cjs/mapping/element-mapping.js.map +1 -0
  32. package/dist/cjs/mapping/generic-relationship-mapping.d.ts.map +1 -0
  33. package/dist/cjs/mapping/generic-relationship-mapping.js +71 -0
  34. package/dist/cjs/mapping/generic-relationship-mapping.js.map +1 -0
  35. package/dist/cjs/mapping/relationship-mapping.d.ts.map +1 -0
  36. package/dist/cjs/mapping/relationship-mapping.js +697 -0
  37. package/dist/cjs/mapping/relationship-mapping.js.map +1 -0
  38. package/dist/cjs/mapping/scheme-mapping.d.ts.map +1 -0
  39. package/dist/cjs/mapping/scheme-mapping.js +42 -0
  40. package/dist/cjs/mapping/scheme-mapping.js.map +1 -0
  41. package/dist/cjs/mapping/visual-mapping.d.ts.map +1 -0
  42. package/dist/cjs/mapping/visual-mapping.js +43 -0
  43. package/dist/cjs/mapping/visual-mapping.js.map +1 -0
  44. package/dist/cjs/package.json +3 -0
  45. package/dist/cjs/serializer/document-writer.d.ts.map +1 -0
  46. package/dist/cjs/serializer/document-writer.js +138 -0
  47. package/dist/cjs/serializer/document-writer.js.map +1 -0
  48. package/dist/cjs/serializer/graphical-writer.d.ts.map +1 -0
  49. package/dist/cjs/serializer/graphical-writer.js +464 -0
  50. package/dist/cjs/serializer/graphical-writer.js.map +1 -0
  51. package/dist/cjs/serializer/profile-values.d.ts.map +1 -0
  52. package/dist/cjs/serializer/profile-values.js +28 -0
  53. package/dist/cjs/serializer/profile-values.js.map +1 -0
  54. package/dist/cjs/serializer/relationship-writer.d.ts.map +1 -0
  55. package/dist/cjs/serializer/relationship-writer.js +109 -0
  56. package/dist/cjs/serializer/relationship-writer.js.map +1 -0
  57. package/dist/cjs/serializer/rtf.d.ts.map +1 -0
  58. package/dist/cjs/serializer/rtf.js +67 -0
  59. package/dist/cjs/serializer/rtf.js.map +1 -0
  60. package/dist/cjs/serializer/semantic-writer.d.ts.map +1 -0
  61. package/dist/cjs/serializer/semantic-writer.js +170 -0
  62. package/dist/cjs/serializer/semantic-writer.js.map +1 -0
  63. package/dist/cjs/serializer/serialize-xma.d.ts.map +1 -0
  64. package/dist/cjs/serializer/serialize-xma.js +113 -0
  65. package/dist/cjs/serializer/serialize-xma.js.map +1 -0
  66. package/dist/cjs/serializer/view-writer.d.ts.map +1 -0
  67. package/dist/cjs/serializer/view-writer.js +148 -0
  68. package/dist/cjs/serializer/view-writer.js.map +1 -0
  69. package/dist/esm/diagnostics/diagnostics.d.ts +20 -0
  70. package/dist/esm/diagnostics/diagnostics.d.ts.map +1 -0
  71. package/dist/esm/diagnostics/diagnostics.js.map +1 -0
  72. package/dist/esm/diagnostics/errors.d.ts +13 -0
  73. package/dist/esm/diagnostics/errors.d.ts.map +1 -0
  74. package/dist/esm/diagnostics/errors.js.map +1 -0
  75. package/dist/esm/geometry/bendpoints.d.ts +33 -0
  76. package/dist/esm/geometry/bendpoints.d.ts.map +1 -0
  77. package/dist/{geometry → esm/geometry}/bendpoints.js +6 -2
  78. package/dist/esm/geometry/bendpoints.js.map +1 -0
  79. package/dist/esm/geometry/geometry.d.ts +75 -0
  80. package/dist/esm/geometry/geometry.d.ts.map +1 -0
  81. package/dist/{geometry → esm/geometry}/geometry.js +25 -6
  82. package/dist/esm/geometry/geometry.js.map +1 -0
  83. package/dist/esm/index.d.ts +5 -0
  84. package/dist/esm/index.d.ts.map +1 -0
  85. package/dist/esm/index.js.map +1 -0
  86. package/dist/esm/infrastructure/assert.d.ts +10 -0
  87. package/dist/esm/infrastructure/assert.d.ts.map +1 -0
  88. package/dist/esm/infrastructure/assert.js +15 -0
  89. package/dist/esm/infrastructure/assert.js.map +1 -0
  90. package/dist/esm/infrastructure/id-allocator.d.ts +34 -0
  91. package/dist/esm/infrastructure/id-allocator.d.ts.map +1 -0
  92. package/dist/esm/infrastructure/id-allocator.js.map +1 -0
  93. package/dist/esm/infrastructure/xml-writer.d.ts +20 -0
  94. package/dist/esm/infrastructure/xml-writer.d.ts.map +1 -0
  95. package/dist/{infrastructure → esm/infrastructure}/xml-writer.js +37 -2
  96. package/dist/esm/infrastructure/xml-writer.js.map +1 -0
  97. package/dist/esm/mapping/element-mapping.d.ts +31 -0
  98. package/dist/esm/mapping/element-mapping.d.ts.map +1 -0
  99. package/dist/esm/mapping/element-mapping.js.map +1 -0
  100. package/dist/esm/mapping/generic-relationship-mapping.d.ts +18 -0
  101. package/dist/esm/mapping/generic-relationship-mapping.d.ts.map +1 -0
  102. package/dist/esm/mapping/generic-relationship-mapping.js.map +1 -0
  103. package/dist/esm/mapping/relationship-mapping.d.ts +47 -0
  104. package/dist/esm/mapping/relationship-mapping.d.ts.map +1 -0
  105. package/dist/esm/mapping/relationship-mapping.js.map +1 -0
  106. package/dist/esm/mapping/scheme-mapping.d.ts +38 -0
  107. package/dist/esm/mapping/scheme-mapping.d.ts.map +1 -0
  108. package/dist/esm/mapping/scheme-mapping.js.map +1 -0
  109. package/dist/esm/mapping/visual-mapping.d.ts +24 -0
  110. package/dist/esm/mapping/visual-mapping.d.ts.map +1 -0
  111. package/dist/esm/mapping/visual-mapping.js.map +1 -0
  112. package/dist/esm/serializer/document-writer.d.ts +40 -0
  113. package/dist/esm/serializer/document-writer.d.ts.map +1 -0
  114. package/dist/esm/serializer/document-writer.js.map +1 -0
  115. package/dist/esm/serializer/graphical-writer.d.ts +27 -0
  116. package/dist/esm/serializer/graphical-writer.d.ts.map +1 -0
  117. package/dist/{serializer → esm/serializer}/graphical-writer.js +156 -40
  118. package/dist/esm/serializer/graphical-writer.js.map +1 -0
  119. package/dist/esm/serializer/profile-values.d.ts +8 -0
  120. package/dist/esm/serializer/profile-values.d.ts.map +1 -0
  121. package/dist/esm/serializer/profile-values.js.map +1 -0
  122. package/dist/esm/serializer/relationship-writer.d.ts +41 -0
  123. package/dist/esm/serializer/relationship-writer.d.ts.map +1 -0
  124. package/dist/{serializer → esm/serializer}/relationship-writer.js +4 -1
  125. package/dist/esm/serializer/relationship-writer.js.map +1 -0
  126. package/dist/esm/serializer/rtf.d.ts +9 -0
  127. package/dist/esm/serializer/rtf.d.ts.map +1 -0
  128. package/dist/{serializer → esm/serializer}/rtf.js +14 -0
  129. package/dist/esm/serializer/rtf.js.map +1 -0
  130. package/dist/esm/serializer/semantic-writer.d.ts +51 -0
  131. package/dist/esm/serializer/semantic-writer.d.ts.map +1 -0
  132. package/dist/{serializer → esm/serializer}/semantic-writer.js +24 -0
  133. package/dist/esm/serializer/semantic-writer.js.map +1 -0
  134. package/dist/esm/serializer/serialize-xma.d.ts +29 -0
  135. package/dist/esm/serializer/serialize-xma.d.ts.map +1 -0
  136. package/dist/{serializer → esm/serializer}/serialize-xma.js +40 -1
  137. package/dist/esm/serializer/serialize-xma.js.map +1 -0
  138. package/dist/esm/serializer/view-writer.d.ts +27 -0
  139. package/dist/esm/serializer/view-writer.d.ts.map +1 -0
  140. package/dist/esm/serializer/view-writer.js.map +1 -0
  141. package/package.json +19 -8
  142. package/dist/diagnostics/diagnostics.d.ts.map +0 -1
  143. package/dist/diagnostics/diagnostics.js.map +0 -1
  144. package/dist/diagnostics/errors.d.ts.map +0 -1
  145. package/dist/diagnostics/errors.js.map +0 -1
  146. package/dist/geometry/bendpoints.d.ts.map +0 -1
  147. package/dist/geometry/bendpoints.js.map +0 -1
  148. package/dist/geometry/geometry.d.ts +0 -48
  149. package/dist/geometry/geometry.d.ts.map +0 -1
  150. package/dist/geometry/geometry.js.map +0 -1
  151. package/dist/index.d.ts.map +0 -1
  152. package/dist/index.js.map +0 -1
  153. package/dist/infrastructure/id-allocator.d.ts.map +0 -1
  154. package/dist/infrastructure/id-allocator.js.map +0 -1
  155. package/dist/infrastructure/xml-writer.d.ts.map +0 -1
  156. package/dist/infrastructure/xml-writer.js.map +0 -1
  157. package/dist/mapping/element-mapping.d.ts.map +0 -1
  158. package/dist/mapping/element-mapping.js.map +0 -1
  159. package/dist/mapping/generic-relationship-mapping.d.ts.map +0 -1
  160. package/dist/mapping/generic-relationship-mapping.js.map +0 -1
  161. package/dist/mapping/relationship-mapping.d.ts.map +0 -1
  162. package/dist/mapping/relationship-mapping.js.map +0 -1
  163. package/dist/mapping/scheme-mapping.d.ts.map +0 -1
  164. package/dist/mapping/scheme-mapping.js.map +0 -1
  165. package/dist/mapping/visual-mapping.d.ts.map +0 -1
  166. package/dist/mapping/visual-mapping.js.map +0 -1
  167. package/dist/serializer/document-writer.d.ts.map +0 -1
  168. package/dist/serializer/document-writer.js.map +0 -1
  169. package/dist/serializer/graphical-writer.d.ts.map +0 -1
  170. package/dist/serializer/graphical-writer.js.map +0 -1
  171. package/dist/serializer/profile-values.d.ts.map +0 -1
  172. package/dist/serializer/profile-values.js.map +0 -1
  173. package/dist/serializer/relationship-writer.d.ts.map +0 -1
  174. package/dist/serializer/relationship-writer.js.map +0 -1
  175. package/dist/serializer/rtf.d.ts.map +0 -1
  176. package/dist/serializer/rtf.js.map +0 -1
  177. package/dist/serializer/semantic-writer.d.ts.map +0 -1
  178. package/dist/serializer/semantic-writer.js.map +0 -1
  179. package/dist/serializer/serialize-xma.d.ts.map +0 -1
  180. package/dist/serializer/serialize-xma.js.map +0 -1
  181. package/dist/serializer/view-writer.d.ts.map +0 -1
  182. package/dist/serializer/view-writer.js.map +0 -1
  183. /package/dist/{diagnostics → cjs/diagnostics}/diagnostics.d.ts +0 -0
  184. /package/dist/{diagnostics → cjs/diagnostics}/errors.d.ts +0 -0
  185. /package/dist/{geometry → cjs/geometry}/bendpoints.d.ts +0 -0
  186. /package/dist/{index.d.ts → cjs/index.d.ts} +0 -0
  187. /package/dist/{infrastructure → cjs/infrastructure}/id-allocator.d.ts +0 -0
  188. /package/dist/{infrastructure → cjs/infrastructure}/xml-writer.d.ts +0 -0
  189. /package/dist/{mapping → cjs/mapping}/element-mapping.d.ts +0 -0
  190. /package/dist/{mapping → cjs/mapping}/generic-relationship-mapping.d.ts +0 -0
  191. /package/dist/{mapping → cjs/mapping}/relationship-mapping.d.ts +0 -0
  192. /package/dist/{mapping → cjs/mapping}/scheme-mapping.d.ts +0 -0
  193. /package/dist/{mapping → cjs/mapping}/visual-mapping.d.ts +0 -0
  194. /package/dist/{serializer → cjs/serializer}/document-writer.d.ts +0 -0
  195. /package/dist/{serializer → cjs/serializer}/graphical-writer.d.ts +0 -0
  196. /package/dist/{serializer → cjs/serializer}/profile-values.d.ts +0 -0
  197. /package/dist/{serializer → cjs/serializer}/relationship-writer.d.ts +0 -0
  198. /package/dist/{serializer → cjs/serializer}/rtf.d.ts +0 -0
  199. /package/dist/{serializer → cjs/serializer}/semantic-writer.d.ts +0 -0
  200. /package/dist/{serializer → cjs/serializer}/serialize-xma.d.ts +0 -0
  201. /package/dist/{serializer → cjs/serializer}/view-writer.d.ts +0 -0
  202. /package/dist/{diagnostics → esm/diagnostics}/diagnostics.js +0 -0
  203. /package/dist/{diagnostics → esm/diagnostics}/errors.js +0 -0
  204. /package/dist/{index.js → esm/index.js} +0 -0
  205. /package/dist/{infrastructure → esm/infrastructure}/id-allocator.js +0 -0
  206. /package/dist/{mapping → esm/mapping}/element-mapping.js +0 -0
  207. /package/dist/{mapping → esm/mapping}/generic-relationship-mapping.js +0 -0
  208. /package/dist/{mapping → esm/mapping}/relationship-mapping.js +0 -0
  209. /package/dist/{mapping → esm/mapping}/scheme-mapping.js +0 -0
  210. /package/dist/{mapping → esm/mapping}/visual-mapping.js +0 -0
  211. /package/dist/{serializer → esm/serializer}/document-writer.js +0 -0
  212. /package/dist/{serializer → esm/serializer}/profile-values.js +0 -0
  213. /package/dist/{serializer → esm/serializer}/view-writer.js +0 -0
@@ -0,0 +1,464 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildGraphicalModule = buildGraphicalModule;
4
+ const xml_writer_js_1 = require("../infrastructure/xml-writer.js");
5
+ const id_allocator_js_1 = require("../infrastructure/id-allocator.js");
6
+ const assert_js_1 = require("../infrastructure/assert.js");
7
+ const visual_mapping_js_1 = require("../mapping/visual-mapping.js");
8
+ const geometry_js_1 = require("../geometry/geometry.js");
9
+ const bendpoints_js_1 = require("../geometry/bendpoints.js");
10
+ /**
11
+ * Converts a diagram object's/note's `bounds` into a `Rect`, re-checking
12
+ * completeness explicitly rather than trusting it across the function
13
+ * boundary from view-writer's earlier validation pass via an unchecked
14
+ * cast. `bounds` is only ever incomplete here if that invariant is somehow
15
+ * violated — in which case this reports the same `missing-bounds`
16
+ * diagnostic view-writer would have, instead of emitting `NaN`/`null`
17
+ * arithmetic into the output.
18
+ */
19
+ function resolveDrawableBounds(bounds, diagnostics, entityId, entityType) {
20
+ if (!(0, geometry_js_1.hasCompleteBounds)(bounds)) {
21
+ diagnostics.error({
22
+ code: 'missing-bounds',
23
+ message: `"${entityId}" has incomplete geometry (x/y/width/height) and cannot be positioned in XMA.`,
24
+ entityId,
25
+ entityType,
26
+ });
27
+ return null;
28
+ }
29
+ return (0, geometry_js_1.toRect)(bounds);
30
+ }
31
+ function colorElement(name, rgb, id) {
32
+ const attrs = [['id', String(id)]];
33
+ if (name !== null) {
34
+ attrs.push(['name', name]);
35
+ }
36
+ // Only regular styled colors carry r/g/b; a bare default (e.g. relationship line color) omits them — confirmed shape.
37
+ // A zero-valued channel is itself omitted rather than written as "0" —
38
+ // confirmed against the sabsa fixture's one explicit connection lineColor
39
+ // override (#ff0000): its MM_Color is `mm_r="255"` alone, g/b entirely
40
+ // absent, not `mm_g="0" mm_b="0"`. Same omit-when-zero convention already
41
+ // confirmed for bounds x/y in geometry.ts.
42
+ if (rgb) {
43
+ if (rgb.r !== 0)
44
+ attrs.push(['mm_r', String(rgb.r)]);
45
+ if (rgb.g !== 0)
46
+ attrs.push(['mm_g', String(rgb.g)]);
47
+ if (rgb.b !== 0)
48
+ attrs.push(['mm_b', String(rgb.b)]);
49
+ }
50
+ return (0, xml_writer_js_1.element)('MM_Diagram:MM_Color', attrs);
51
+ }
52
+ function rectElement(id, rect) {
53
+ const scaled = (0, geometry_js_1.scaleRect)(rect);
54
+ return (0, xml_writer_js_1.element)('MM_Rect', [
55
+ ['name', 'mm_rect'],
56
+ ['x', String(scaled.x)],
57
+ ['y', String(scaled.y)],
58
+ ['w', String(scaled.width)],
59
+ ['h', String(scaled.height)],
60
+ ]);
61
+ }
62
+ /**
63
+ * Resolves a node's effective fill/line/font, applying explicit Archi
64
+ * styling only where mechanically lossless (a direct hex RGB copy, a
65
+ * verbatim font-name substitution into the same structural slot, or the
66
+ * confirmed font-size formula) — per v0.1 policy, everything else explicit
67
+ * (bold/italic, line width, font color) is diagnosed as an unsupported
68
+ * style override rather than guessed.
69
+ */
70
+ function resolveNodeVisuals(style, defaultFill, diagnostics, entityId, entityType) {
71
+ let fill = defaultFill;
72
+ let line = visual_mapping_js_1.DEFAULT_LINE_COLOR;
73
+ let fontName = visual_mapping_js_1.DEFAULT_FONT_NAME;
74
+ let fontSize = visual_mapping_js_1.DEFAULT_FONT_SIZE;
75
+ // Never reassigned: alpha has zero fixture evidence, so it's diagnosed
76
+ // (see below) rather than applied — fillOpacity always stays the default.
77
+ const fillOpacity = visual_mapping_js_1.DEFAULT_OPACITY;
78
+ if (style) {
79
+ if (style.fillColor !== null) {
80
+ const parsed = (0, visual_mapping_js_1.parseArchiHexColor)(style.fillColor);
81
+ if (parsed) {
82
+ fill = parsed;
83
+ }
84
+ else {
85
+ diagnostics.warning({
86
+ code: 'unsupported-style-fill-color',
87
+ message: `Fill color "${style.fillColor}" is not a recognized hex color and was not applied.`,
88
+ entityId,
89
+ entityType,
90
+ });
91
+ }
92
+ }
93
+ if (style.lineColor !== null) {
94
+ const parsed = (0, visual_mapping_js_1.parseArchiHexColor)(style.lineColor);
95
+ if (parsed) {
96
+ line = parsed;
97
+ }
98
+ else {
99
+ diagnostics.warning({
100
+ code: 'unsupported-style-line-color',
101
+ message: `Line color "${style.lineColor}" is not a recognized hex color and was not applied.`,
102
+ entityId,
103
+ entityType,
104
+ });
105
+ }
106
+ }
107
+ if (style.fontName !== null) {
108
+ fontName = style.fontName;
109
+ }
110
+ if (style.alpha !== null) {
111
+ // Not applied: zero occurrences of an explicit `alpha` in any of the
112
+ // four reference fixtures — no evidence for how (or whether) it maps
113
+ // to `mm_fillOpacity`, so per v0.1 policy this is diagnosed like every
114
+ // other unconfirmed style override, not guessed.
115
+ diagnostics.warning({
116
+ code: 'unsupported-style-alpha',
117
+ message: 'Explicit fill opacity (alpha) has no confirmed XMA representation and was not applied (default used).',
118
+ entityId,
119
+ entityType,
120
+ });
121
+ }
122
+ if (style.fontColor !== null) {
123
+ diagnostics.warning({
124
+ code: 'unsupported-style-font-color',
125
+ message: 'Explicit font color has no confirmed XMA representation and was not applied.',
126
+ entityId,
127
+ entityType,
128
+ });
129
+ }
130
+ if (style.fontSize !== null) {
131
+ // `mm_fontSize = floor(pt) * 20` — confirmed by both data points in
132
+ // the agile-manifesto fixture: an 11.25pt override -> mm_fontSize=220,
133
+ // a 14.25pt override -> mm_fontSize=280.
134
+ fontSize = Math.floor(style.fontSize) * 20;
135
+ }
136
+ if (style.fontStyle !== null && (style.fontStyle.bold || style.fontStyle.italic)) {
137
+ diagnostics.warning({
138
+ code: 'unsupported-style-font-style',
139
+ message: 'Explicit bold/italic font style has no confirmed XMA representation and was not applied.',
140
+ entityId,
141
+ entityType,
142
+ });
143
+ }
144
+ if (style.lineWidth !== null) {
145
+ diagnostics.warning({
146
+ code: 'unsupported-style-line-width',
147
+ message: 'Explicit line width has no confirmed XMA representation and was not applied.',
148
+ entityId,
149
+ entityType,
150
+ });
151
+ }
152
+ }
153
+ return { fill, line, fontName, fontSize, fillOpacity };
154
+ }
155
+ function buildLabelDecoration(id, fontName, fontSize, extraAttrs = []) {
156
+ return (0, xml_writer_js_1.element)('MM_Diagram:MM_Decoration', [['id', String(id)], ['mm_fontSize', String(fontSize)], ['mm_graphicType', '2'], ['mm_concept', 'label'], ...extraAttrs], [(0, xml_writer_js_1.textElement)('mm_font', fontName)]);
157
+ }
158
+ function buildIconDecoration(id) {
159
+ return (0, xml_writer_js_1.element)('MM_Diagram:MM_Decoration', [
160
+ ['id', String(id)],
161
+ ['mm_graphicType', '2'],
162
+ ['mm_concept', 'icon'],
163
+ ]);
164
+ }
165
+ /**
166
+ * Builds a fully-styled `MM_Node` for an element-backed diagram object, a
167
+ * Group, or a Note/ViewGraphic. `nestedChildrenXml` are already-built child
168
+ * `MM_Node`s (from nested diagram objects) — confirmed to nest as siblings
169
+ * of the icon/label `MM_Decoration`s inside the same `MM_Graphics`, after
170
+ * them, in both fixtures. Their `MM_Rect` bounds are used as-is (the same
171
+ * ×3 scale as every other node) — confirmed to already be relative to the
172
+ * parent in both Archi and XMA, so no offset math is needed.
173
+ */
174
+ function buildStyledNode(ids, nodeXmaId, concept, semanticObject, hasIcon, visuals, bounds, symbolName, labelExtraAttrs = [], nestedChildrenXml = []) {
175
+ const graphicsChildren = [];
176
+ if (hasIcon) {
177
+ graphicsChildren.push(buildIconDecoration(ids.fresh()));
178
+ }
179
+ graphicsChildren.push(buildLabelDecoration(ids.fresh(), visuals.fontName, visuals.fontSize, labelExtraAttrs));
180
+ graphicsChildren.push(...nestedChildrenXml);
181
+ const attrs = [
182
+ ['id', String(nodeXmaId)],
183
+ ['mm_graphicType', '5'],
184
+ ['mm_concept', concept],
185
+ ];
186
+ if (symbolName) {
187
+ attrs.push(['mm_symbolName', symbolName]);
188
+ }
189
+ attrs.push(['mm_lineOpacity', String(visual_mapping_js_1.DEFAULT_OPACITY)], ['mm_fillOpacity', String(visuals.fillOpacity)], ['mm_semanticObject', String(semanticObject)]);
190
+ return (0, xml_writer_js_1.element)('MM_Diagram:MM_Node', attrs, [
191
+ (0, xml_writer_js_1.element)('MM_Diagram:MM_Graphics', [['name', 'mm_graphics'], ['id', String(ids.fresh())]], graphicsChildren),
192
+ colorElement('mm_lineColor', visuals.line, ids.fresh()),
193
+ (0, xml_writer_js_1.element)('MM_Diagram:MM_Colors', [['name', 'mm_fillColors'], ['id', String(ids.fresh())]], [colorElement(null, visuals.fill, ids.fresh())]),
194
+ rectElement(ids.fresh(), bounds),
195
+ ]);
196
+ }
197
+ const JUNCTION_XMA_TYPES = new Set(['Junction', 'OrJunction']);
198
+ /**
199
+ * A Junction carries no fill/line/font styling at all in either fixture
200
+ * (see `buildJunctionNode`) — so unlike `resolveNodeVisuals`'s per-field
201
+ * diagnostics for a regular node, any style override at all on a Junction
202
+ * diagram object is unsupported. Previously this was discarded with no
203
+ * indication anything was dropped.
204
+ */
205
+ function reportUnsupportedJunctionStyle(obj, diagnostics) {
206
+ const style = obj.style;
207
+ if (!style)
208
+ return;
209
+ const hasOverride = style.fillColor !== null ||
210
+ style.lineColor !== null ||
211
+ style.fontColor !== null ||
212
+ style.fontName !== null ||
213
+ style.fontSize !== null ||
214
+ style.lineWidth !== null ||
215
+ style.alpha !== null ||
216
+ (style.fontStyle !== null && (style.fontStyle.bold || style.fontStyle.italic));
217
+ if (!hasOverride)
218
+ return;
219
+ diagnostics.warning({
220
+ code: 'unsupported-style-junction',
221
+ message: `Diagram object "${obj.id}" is a Junction with an explicit style override — Junctions have no confirmed styling representation in XMA (drawn with a fixed, colorless form) and the override was not applied.`,
222
+ entityId: obj.id,
223
+ entityType: 'ArchiDiagramObject',
224
+ });
225
+ }
226
+ /**
227
+ * Builds a `Junction`/`OrJunction` node — confirmed structurally different
228
+ * from every other element node: `mm_graphicType="3"` (not `"5"`), and no
229
+ * `MM_Color`/`MM_Colors` at all (a Junction carries no fill/line styling in
230
+ * either fixture). Fabricating a color here would contradict that evidence,
231
+ * not fill a gap in it.
232
+ */
233
+ function buildJunctionNode(ids, nodeXmaId, concept, semanticObject, bounds) {
234
+ return (0, xml_writer_js_1.element)('MM_Diagram:MM_Node', [
235
+ ['id', String(nodeXmaId)],
236
+ ['mm_graphicType', '3'],
237
+ ['mm_concept', concept],
238
+ ['mm_lineOpacity', String(visual_mapping_js_1.DEFAULT_OPACITY)],
239
+ ['mm_fillOpacity', String(visual_mapping_js_1.DEFAULT_OPACITY)],
240
+ ['mm_semanticObject', String(semanticObject)],
241
+ ], [
242
+ (0, xml_writer_js_1.element)('MM_Diagram:MM_Graphics', [['name', 'mm_graphics'], ['id', String(ids.fresh())]], [
243
+ buildLabelDecoration(ids.fresh(), visual_mapping_js_1.DEFAULT_FONT_NAME, visual_mapping_js_1.DEFAULT_FONT_SIZE),
244
+ ]),
245
+ rectElement(ids.fresh(), bounds),
246
+ ]);
247
+ }
248
+ /**
249
+ * Builds the `GraphicalModule`'s `MM_Diagram` for one view: a Canvas node
250
+ * wrapping one `MM_Node` per drawable diagram object/group/note (nested
251
+ * diagram objects recursively nested inside their parent's `MM_Node`, via
252
+ * `buildNodeTree` — see `tests/fixtures/README.md`, "Nested diagram
253
+ * objects"), and one `MM_DirectedRel` per drawable connection.
254
+ *
255
+ * `mm_fromx`/`mm_fromy`/`mm_tox`/`mm_toy` (manual connector anchor
256
+ * metadata) are deliberately omitted — exactly one fixture exhibited them,
257
+ * which is not enough evidence to derive a general formula or confirm
258
+ * they're mandatory for import (see project docs, "unresolved
259
+ * reverse-engineering limitations"). If a future fixture proves them
260
+ * required, add that behavior here, isolated from the rest of this
261
+ * function.
262
+ */
263
+ function buildGraphicalModule(model, view, ids, refIds, allocator, mappedElements, mappedRelationships, viewResult, diagnostics) {
264
+ const diagramObjectById = new Map(model.diagramObjects.map((o) => [o.id, o]));
265
+ const noteById = new Map(model.notes.map((n) => [n.id, n]));
266
+ const nodeIds = new id_allocator_js_1.XmaIdRegistry(allocator);
267
+ const canvasChildren = [];
268
+ /**
269
+ * Builds one diagram object's node, recursively building and nesting its
270
+ * children first (bottom-up) — confirmed structure: a child `MM_Node`
271
+ * nests as a sibling of its parent's icon/label decorations, inside the
272
+ * same `MM_Graphics`, up to 3 levels deep in the sabsa fixture. Applies
273
+ * equally to element-backed objects and Groups (both confirmed to nest
274
+ * children this way). Returns `null` for an object this pass can't draw
275
+ * (already diagnosed elsewhere).
276
+ */
277
+ function buildNodeTree(objId, ancestorIds = new Set()) {
278
+ const obj = diagramObjectById.get(objId);
279
+ if (!obj)
280
+ return null;
281
+ if (ancestorIds.has(objId)) {
282
+ diagnostics.error({
283
+ code: 'cyclic-diagram-object-nesting',
284
+ message: `Diagram object "${objId}" is its own descendant (a cyclic parent/child chain) and cannot be drawn.`,
285
+ entityId: objId,
286
+ entityType: 'ArchiDiagramObject',
287
+ });
288
+ return null;
289
+ }
290
+ const nextAncestorIds = new Set(ancestorIds).add(objId);
291
+ const nestedChildrenXml = obj.childrenIds
292
+ .map((childId) => buildNodeTree(childId, nextAncestorIds))
293
+ .filter((xml) => xml !== null);
294
+ if (viewResult.validElementNodeObjectIds.has(objId) && obj.archimateElementId) {
295
+ const mapping = (0, assert_js_1.assertDefined)(mappedElements.get(obj.archimateElementId), `no mapping for element "${obj.archimateElementId}" (view-writer should have skipped diagram object "${obj.id}")`);
296
+ const refId = (0, assert_js_1.assertDefined)(refIds.get(obj.archimateElementId), `no ref id registered for element "${obj.archimateElementId}" (view-writer should have registered it before graphical-writer runs)`);
297
+ const nodeXmaId = nodeIds.idFor(obj.id);
298
+ const bounds = resolveDrawableBounds(obj.bounds, diagnostics, obj.id, 'ArchiDiagramObject');
299
+ if (!bounds)
300
+ return null;
301
+ if (JUNCTION_XMA_TYPES.has(mapping.xmaType)) {
302
+ reportUnsupportedJunctionStyle(obj, diagnostics);
303
+ return buildJunctionNode(ids, nodeXmaId, mapping.xmaType, refId, bounds);
304
+ }
305
+ const visuals = resolveNodeVisuals(obj.style, visual_mapping_js_1.CATEGORY_FILL_COLOR[mapping.category], diagnostics, obj.id, 'ArchiDiagramObject');
306
+ return buildStyledNode(ids, nodeXmaId, mapping.xmaType, refId, mapping.hasIcon, visuals, bounds, null, [], nestedChildrenXml);
307
+ }
308
+ if (viewResult.validGroupObjectIds.has(objId)) {
309
+ const groupSemanticId = (0, assert_js_1.assertDefined)(ids.get(obj.id), `no semantic id registered for group "${obj.id}" (view-writer should have registered it before graphical-writer runs)`);
310
+ const visuals = resolveNodeVisuals(obj.style, visual_mapping_js_1.GROUP_FILL_COLOR, diagnostics, obj.id, 'ArchiDiagramObject');
311
+ const nodeXmaId = nodeIds.idFor(obj.id);
312
+ const bounds = resolveDrawableBounds(obj.bounds, diagnostics, obj.id, 'ArchiDiagramObject');
313
+ if (!bounds)
314
+ return null;
315
+ return buildStyledNode(ids, nodeXmaId, 'ViewGraphic', groupSemanticId, false, visuals, bounds, 'group', [['mm_frameStrategy', '12']], nestedChildrenXml);
316
+ }
317
+ return null;
318
+ }
319
+ for (const objId of view.diagramObjectIds) {
320
+ const nodeXml = buildNodeTree(objId);
321
+ if (nodeXml)
322
+ canvasChildren.push(nodeXml);
323
+ }
324
+ for (const noteId of view.noteIds) {
325
+ if (!viewResult.validNoteIds.has(noteId))
326
+ continue;
327
+ const note = noteById.get(noteId);
328
+ if (!note)
329
+ continue;
330
+ const bounds = resolveDrawableBounds(note.bounds, diagnostics, note.id, 'ArchiNote');
331
+ if (!bounds)
332
+ continue;
333
+ const noteSemanticId = (0, assert_js_1.assertDefined)(ids.get(note.id), `no semantic id registered for note "${note.id}" (view-writer should have registered it before graphical-writer runs)`);
334
+ const visuals = resolveNodeVisuals(note.style, visual_mapping_js_1.NOTE_FILL_COLOR, diagnostics, note.id, 'ArchiNote');
335
+ const nodeXmaId = nodeIds.idFor(note.id);
336
+ canvasChildren.push(buildStyledNode(ids, nodeXmaId, 'ViewGraphic', noteSemanticId, false, visuals, bounds, null));
337
+ }
338
+ const connectionById = new Map(model.diagramConnections.map((c) => [c.id, c]));
339
+ for (const connId of view.diagramConnectionIds) {
340
+ const connection = connectionById.get(connId);
341
+ if (!connection || connection.viewId !== view.id)
342
+ continue;
343
+ const relId = connection.archimateRelationshipId;
344
+ if (!relId)
345
+ continue; // already diagnosed by view-writer
346
+ const mapping = mappedRelationships.get(relId);
347
+ if (!mapping)
348
+ continue; // already diagnosed by relationship-writer
349
+ const sourceNodeXmaId = nodeIds.get(connection.sourceId);
350
+ const targetNodeXmaId = nodeIds.get(connection.targetId);
351
+ if (sourceNodeXmaId === undefined || targetNodeXmaId === undefined) {
352
+ diagnostics.error({
353
+ code: 'unsupported-connection-invalid-endpoint',
354
+ message: `Connection "${connection.id}" has a source/target diagram object that was not drawable.`,
355
+ entityId: connection.id,
356
+ entityType: 'ArchiDiagramConnection',
357
+ });
358
+ continue;
359
+ }
360
+ const sourceObj = diagramObjectById.get(connection.sourceId);
361
+ const targetObj = diagramObjectById.get(connection.targetId);
362
+ // A connection between a diagram object and its own visual parent is
363
+ // already conveyed by the nesting itself — confirmed against both
364
+ // fixtures: e.g. agile-manifesto's two BusinessProcessBusinessFunction-
365
+ // Composition relations exist in the semantic Relations collection (so
366
+ // they're still emitted below via relationship-writer/view-writer) but
367
+ // have zero MM_DirectedRel graphics; sabsa's ElementGroupingComposition
368
+ // (Grouping as target, not a nesting pair) is drawn normally while its
369
+ // GroupingElementComposition (Grouping as source, always a nesting pair
370
+ // in both fixtures) never is. Applies regardless of relationship type —
371
+ // nesting evidence isn't type-specific, only "is this endpoint the
372
+ // other's visual parent" is.
373
+ if (sourceObj && targetObj && (sourceObj.parentId === targetObj.id || targetObj.parentId === sourceObj.id)) {
374
+ continue;
375
+ }
376
+ const points = [];
377
+ if (connection.bendpoints.length > 0 && sourceObj && targetObj && (0, geometry_js_1.hasCompleteBounds)(sourceObj.bounds) && (0, geometry_js_1.hasCompleteBounds)(targetObj.bounds)) {
378
+ const sourceRect = (0, geometry_js_1.toRect)(sourceObj.bounds);
379
+ const targetRect = (0, geometry_js_1.toRect)(targetObj.bounds);
380
+ for (const bp of connection.bendpoints) {
381
+ const resolution = (0, bendpoints_js_1.resolveBendpoint)(bp, sourceRect, targetRect);
382
+ if (!resolution) {
383
+ diagnostics.error({
384
+ code: 'unresolvable-bendpoint',
385
+ message: `Connection "${connection.id}" has a bendpoint with neither source- nor target-relative offsets set.`,
386
+ entityId: connection.id,
387
+ entityType: 'ArchiDiagramConnection',
388
+ });
389
+ continue;
390
+ }
391
+ if (resolution.mismatch) {
392
+ // Not a data-loss case: resolution.point (the source-relative form,
393
+ // used below regardless) is a perfectly usable point — this is a
394
+ // small precision disagreement in Archi's own stored offsets, not a
395
+ // construct XMA has no representation for. Warning, not an error
396
+ // that discards the whole document.
397
+ diagnostics.warning({
398
+ code: 'bendpoint-endpoint-mismatch',
399
+ message: `Connection "${connection.id}" has a bendpoint whose source-relative and target-relative offsets disagree materially (source: ${resolution.mismatch.fromSource.x},${resolution.mismatch.fromSource.y}; target: ${resolution.mismatch.fromTarget.x},${resolution.mismatch.fromTarget.y}); used the source-relative point.`,
400
+ entityId: connection.id,
401
+ entityType: 'ArchiDiagramConnection',
402
+ });
403
+ }
404
+ const scaled = (0, geometry_js_1.scalePoint)(resolution.point);
405
+ points.push((0, xml_writer_js_1.element)('MM_Diagram:MM_Point', [['id', String(ids.fresh())], ['mm_x', String(scaled.x)], ['mm_y', String(scaled.y)]]));
406
+ }
407
+ }
408
+ const relRefId = (0, assert_js_1.assertDefined)(refIds.get(relId), `no ref id registered for relationship "${relId}" (view-writer should have registered it before graphical-writer runs)`);
409
+ const directedRelChildren = [];
410
+ if (points.length > 0) {
411
+ directedRelChildren.push((0, xml_writer_js_1.element)('MM_Diagram:MM_MultiLine', [['name', 'mm_line'], ['id', String(ids.fresh())]], points));
412
+ }
413
+ // Confirmed against the sabsa fixture's one explicit connection
414
+ // lineColor override (#ff0000): the DirectedRel's MM_Color carries the
415
+ // parsed RGB, in the exact same structural slot as a node's line color.
416
+ let connectionLineColor = null;
417
+ if (connection.style?.lineColor) {
418
+ const parsed = (0, visual_mapping_js_1.parseArchiHexColor)(connection.style.lineColor);
419
+ if (parsed) {
420
+ connectionLineColor = parsed;
421
+ }
422
+ else {
423
+ diagnostics.warning({
424
+ code: 'unsupported-style-connection-line-color',
425
+ message: `Connection line color "${connection.style.lineColor}" is not a recognized hex color and was not applied.`,
426
+ entityId: connection.id,
427
+ entityType: 'ArchiDiagramConnection',
428
+ });
429
+ }
430
+ }
431
+ directedRelChildren.push((0, xml_writer_js_1.element)('MM_Diagram:MM_Graphics', [['name', 'mm_graphics'], ['id', String(ids.fresh())]], [
432
+ buildLabelDecoration(ids.fresh(), visual_mapping_js_1.DEFAULT_FONT_NAME, visual_mapping_js_1.DEFAULT_FONT_SIZE),
433
+ ]));
434
+ directedRelChildren.push(colorElement('mm_lineColor', connectionLineColor, ids.fresh()));
435
+ canvasChildren.push((0, xml_writer_js_1.element)('MM_Diagram:MM_DirectedRel', [
436
+ ['id', String(ids.fresh())],
437
+ ['mm_from', String(sourceNodeXmaId)],
438
+ ['mm_to', String(targetNodeXmaId)],
439
+ ['mm_graphicType', '7'],
440
+ ['mm_concept', mapping.xmaType],
441
+ ['mm_semanticObject', String(relRefId)],
442
+ ], directedRelChildren));
443
+ }
444
+ const canvasSemanticId = ids.idFor(view.id);
445
+ const canvasNode = (0, xml_writer_js_1.element)('MM_Diagram:MM_Node', [
446
+ ['name', 'mm_canvas'],
447
+ ['id', String(ids.fresh())],
448
+ ['mm_graphicType', '5'],
449
+ ['mm_concept', 'Canvas'],
450
+ ['mm_semanticObject', String(canvasSemanticId)],
451
+ ], [
452
+ (0, xml_writer_js_1.element)('MM_Diagram:MM_Graphics', [['name', 'mm_graphics'], ['id', String(ids.fresh())]], canvasChildren),
453
+ (0, xml_writer_js_1.element)('MM_Rect', [
454
+ ['name', 'mm_rect'],
455
+ ['x', '0'],
456
+ ['y', '0'],
457
+ ['w', String(visual_mapping_js_1.CANVAS_EXTENT)],
458
+ ['h', String(visual_mapping_js_1.CANVAS_EXTENT)],
459
+ ]),
460
+ ]);
461
+ const diagramXml = (0, xml_writer_js_1.element)('MM_Diagram:MM_Diagram', [['name', 'root'], ['id', String(ids.fresh())]], [canvasNode]);
462
+ return { diagramXml };
463
+ }
464
+ //# sourceMappingURL=graphical-writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphical-writer.js","sourceRoot":"","sources":["../../../src/serializer/graphical-writer.ts"],"names":[],"mappings":";;AA2UA,oDA8PC;AAhkBD,mEAAuE;AACvE,uEAAuF;AACvF,2DAA4D;AAI5D,oEAA8N;AAC9N,yDAAsG;AACtG,6DAA6D;AAO7D;;;;;;;;GAQG;AACH,SAAS,qBAAqB,CAC5B,MAA0B,EAC1B,WAAgC,EAChC,QAAgB,EAChB,UAAkB;IAElB,IAAI,CAAC,IAAA,+BAAiB,EAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,WAAW,CAAC,KAAK,CAAC;YAChB,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,IAAI,QAAQ,+EAA+E;YACpG,QAAQ;YACR,UAAU;SACX,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,IAAA,oBAAM,EAAC,MAAM,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,YAAY,CAAC,IAAmB,EAAE,GAAe,EAAE,EAAU;IACpE,MAAM,KAAK,GAA4B,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5D,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAC7B,CAAC;IACD,sHAAsH;IACtH,uEAAuE;IACvE,0EAA0E;IAC1E,uEAAuE;IACvE,0EAA0E;IAC1E,2CAA2C;IAC3C,IAAI,GAAG,EAAE,CAAC;QACR,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,IAAA,uBAAO,EAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,WAAW,CAAC,EAAU,EAAE,IAAU;IACzC,MAAM,MAAM,GAAG,IAAA,uBAAS,EAAC,IAAI,CAAC,CAAC;IAC/B,OAAO,IAAA,uBAAO,EAAC,SAAS,EAAE;QACxB,CAAC,MAAM,EAAE,SAAS,CAAC;QACnB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;KAC7B,CAAC,CAAC;AACL,CAAC;AAUD;;;;;;;GAOG;AACH,SAAS,kBAAkB,CACzB,KAAwB,EACxB,WAAgB,EAChB,WAAgC,EAChC,QAAgB,EAChB,UAAkB;IAElB,IAAI,IAAI,GAAG,WAAW,CAAC;IACvB,IAAI,IAAI,GAAG,sCAAkB,CAAC;IAC9B,IAAI,QAAQ,GAAG,qCAAiB,CAAC;IACjC,IAAI,QAAQ,GAAG,qCAAiB,CAAC;IACjC,uEAAuE;IACvE,0EAA0E;IAC1E,MAAM,WAAW,GAAG,mCAAe,CAAC;IAEpC,IAAI,KAAK,EAAE,CAAC;QACV,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,IAAA,sCAAkB,EAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACnD,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,GAAG,MAAM,CAAC;YAChB,CAAC;iBAAM,CAAC;gBACN,WAAW,CAAC,OAAO,CAAC;oBAClB,IAAI,EAAE,8BAA8B;oBACpC,OAAO,EAAE,eAAe,KAAK,CAAC,SAAS,sDAAsD;oBAC7F,QAAQ;oBACR,UAAU;iBACX,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,IAAA,sCAAkB,EAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACnD,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,GAAG,MAAM,CAAC;YAChB,CAAC;iBAAM,CAAC;gBACN,WAAW,CAAC,OAAO,CAAC;oBAClB,IAAI,EAAE,8BAA8B;oBACpC,OAAO,EAAE,eAAe,KAAK,CAAC,SAAS,sDAAsD;oBAC7F,QAAQ;oBACR,UAAU;iBACX,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YAC5B,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAC5B,CAAC;QACD,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YACzB,qEAAqE;YACrE,qEAAqE;YACrE,uEAAuE;YACvE,iDAAiD;YACjD,WAAW,CAAC,OAAO,CAAC;gBAClB,IAAI,EAAE,yBAAyB;gBAC/B,OAAO,EAAE,uGAAuG;gBAChH,QAAQ;gBACR,UAAU;aACX,CAAC,CAAC;QACL,CAAC;QACD,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YAC7B,WAAW,CAAC,OAAO,CAAC;gBAClB,IAAI,EAAE,8BAA8B;gBACpC,OAAO,EAAE,8EAA8E;gBACvF,QAAQ;gBACR,UAAU;aACX,CAAC,CAAC;QACL,CAAC;QACD,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YAC5B,oEAAoE;YACpE,uEAAuE;YACvE,yCAAyC;YACzC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;QAC7C,CAAC;QACD,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YACjF,WAAW,CAAC,OAAO,CAAC;gBAClB,IAAI,EAAE,8BAA8B;gBACpC,OAAO,EAAE,0FAA0F;gBACnG,QAAQ;gBACR,UAAU;aACX,CAAC,CAAC;QACL,CAAC;QACD,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YAC7B,WAAW,CAAC,OAAO,CAAC;gBAClB,IAAI,EAAE,8BAA8B;gBACpC,OAAO,EAAE,8EAA8E;gBACvF,QAAQ;gBACR,UAAU;aACX,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;AACzD,CAAC;AAED,SAAS,oBAAoB,CAAC,EAAU,EAAE,QAAgB,EAAE,QAAgB,EAAE,aAAsC,EAAE;IACpH,OAAO,IAAA,uBAAO,EACZ,0BAA0B,EAC1B,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,aAAa,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,gBAAgB,EAAE,GAAG,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,EAAE,GAAG,UAAU,CAAC,EACxH,CAAC,IAAA,2BAAW,EAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CACnC,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,EAAU;IACrC,OAAO,IAAA,uBAAO,EAAC,0BAA0B,EAAE;QACzC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC,gBAAgB,EAAE,GAAG,CAAC;QACvB,CAAC,YAAY,EAAE,MAAM,CAAC;KACvB,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,eAAe,CACtB,GAAkB,EAClB,SAAiB,EACjB,OAAe,EACf,cAAsB,EACtB,OAAgB,EAChB,OAAwB,EACxB,MAAY,EACZ,UAAyB,EACzB,kBAA2C,EAAE,EAC7C,oBAAkC,EAAE;IAEpC,MAAM,gBAAgB,GAAiB,EAAE,CAAC;IAC1C,IAAI,OAAO,EAAE,CAAC;QACZ,gBAAgB,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD,gBAAgB,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC;IAC9G,gBAAgB,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,CAAC;IAE5C,MAAM,KAAK,GAA4B;QACrC,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QACzB,CAAC,gBAAgB,EAAE,GAAG,CAAC;QACvB,CAAC,YAAY,EAAE,OAAO,CAAC;KACxB,CAAC;IACF,IAAI,UAAU,EAAE,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,KAAK,CAAC,IAAI,CACR,CAAC,gBAAgB,EAAE,MAAM,CAAC,mCAAe,CAAC,CAAC,EAC3C,CAAC,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,EAC/C,CAAC,mBAAmB,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,CAC9C,CAAC;IAEF,OAAO,IAAA,uBAAO,EAAC,oBAAoB,EAAE,KAAK,EAAE;QAC1C,IAAA,uBAAO,EAAC,wBAAwB,EAAE,CAAC,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC;QAC3G,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;QACvD,IAAA,uBAAO,EACL,sBAAsB,EACtB,CAAC,CAAC,MAAM,EAAE,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EACxD,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAChD;QACD,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC;KACjC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC;AAE/D;;;;;;GAMG;AACH,SAAS,8BAA8B,CAAC,GAAuB,EAAE,WAAgC;IAC/F,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;IACxB,IAAI,CAAC,KAAK;QAAE,OAAO;IACnB,MAAM,WAAW,GACf,KAAK,CAAC,SAAS,KAAK,IAAI;QACxB,KAAK,CAAC,SAAS,KAAK,IAAI;QACxB,KAAK,CAAC,SAAS,KAAK,IAAI;QACxB,KAAK,CAAC,QAAQ,KAAK,IAAI;QACvB,KAAK,CAAC,QAAQ,KAAK,IAAI;QACvB,KAAK,CAAC,SAAS,KAAK,IAAI;QACxB,KAAK,CAAC,KAAK,KAAK,IAAI;QACpB,CAAC,KAAK,CAAC,SAAS,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IACjF,IAAI,CAAC,WAAW;QAAE,OAAO;IACzB,WAAW,CAAC,OAAO,CAAC;QAClB,IAAI,EAAE,4BAA4B;QAClC,OAAO,EAAE,mBAAmB,GAAG,CAAC,EAAE,oLAAoL;QACtN,QAAQ,EAAE,GAAG,CAAC,EAAE;QAChB,UAAU,EAAE,oBAAoB;KACjC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,SAAS,iBAAiB,CAAC,GAAkB,EAAE,SAAiB,EAAE,OAAe,EAAE,cAAsB,EAAE,MAAY;IACrH,OAAO,IAAA,uBAAO,EACZ,oBAAoB,EACpB;QACE,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QACzB,CAAC,gBAAgB,EAAE,GAAG,CAAC;QACvB,CAAC,YAAY,EAAE,OAAO,CAAC;QACvB,CAAC,gBAAgB,EAAE,MAAM,CAAC,mCAAe,CAAC,CAAC;QAC3C,CAAC,gBAAgB,EAAE,MAAM,CAAC,mCAAe,CAAC,CAAC;QAC3C,CAAC,mBAAmB,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;KAC9C,EACD;QACE,IAAA,uBAAO,EAAC,wBAAwB,EAAE,CAAC,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE;YACxF,oBAAoB,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,qCAAiB,EAAE,qCAAiB,CAAC;SACxE,CAAC;QACF,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC;KACjC,CACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAgB,oBAAoB,CAClC,KAAiB,EACjB,IAAe,EACf,GAAkB,EAClB,MAAqB,EACrB,SAAyB,EACzB,cAAwD,EACxD,mBAAqE,EACrE,UAA2B,EAC3B,WAAgC;IAEhC,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAA6B,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1G,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAoB,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/E,MAAM,OAAO,GAAG,IAAI,+BAAa,CAAC,SAAS,CAAC,CAAC;IAE7C,MAAM,cAAc,GAAiB,EAAE,CAAC;IAExC;;;;;;;;OAQG;IACH,SAAS,aAAa,CAAC,KAAa,EAAE,cAAmC,IAAI,GAAG,EAAE;QAChF,MAAM,GAAG,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QAEtB,IAAI,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,WAAW,CAAC,KAAK,CAAC;gBAChB,IAAI,EAAE,+BAA+B;gBACrC,OAAO,EAAE,mBAAmB,KAAK,4EAA4E;gBAC7G,QAAQ,EAAE,KAAK;gBACf,UAAU,EAAE,oBAAoB;aACjC,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAExD,MAAM,iBAAiB,GAAG,GAAG,CAAC,WAAW;aACtC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;aACzD,MAAM,CAAC,CAAC,GAAG,EAAqB,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC;QAEpD,IAAI,UAAU,CAAC,yBAAyB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,kBAAkB,EAAE,CAAC;YAC9E,MAAM,OAAO,GAAG,IAAA,yBAAa,EAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,2BAA2B,GAAG,CAAC,kBAAkB,sDAAsD,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;YAC7L,MAAM,KAAK,GAAG,IAAA,yBAAa,EAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,qCAAqC,GAAG,CAAC,kBAAkB,wEAAwE,CAAC,CAAC;YACrM,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACxC,MAAM,MAAM,GAAG,qBAAqB,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,EAAE,oBAAoB,CAAC,CAAC;YAC5F,IAAI,CAAC,MAAM;gBAAE,OAAO,IAAI,CAAC;YACzB,IAAI,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC5C,8BAA8B,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;gBACjD,OAAO,iBAAiB,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;YAC3E,CAAC;YACD,MAAM,OAAO,GAAG,kBAAkB,CAAC,GAAG,CAAC,KAAK,EAAE,uCAAmB,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,EAAE,oBAAoB,CAAC,CAAC;YAChI,OAAO,eAAe,CACpB,GAAG,EACH,SAAS,EACT,OAAO,CAAC,OAAO,EACf,KAAK,EACL,OAAO,CAAC,OAAO,EACf,OAAO,EACP,MAAM,EACN,IAAI,EACJ,EAAE,EACF,iBAAiB,CAClB,CAAC;QACJ,CAAC;QAED,IAAI,UAAU,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9C,MAAM,eAAe,GAAG,IAAA,yBAAa,EAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,wCAAwC,GAAG,CAAC,EAAE,wEAAwE,CAAC,CAAC;YAC/K,MAAM,OAAO,GAAG,kBAAkB,CAAC,GAAG,CAAC,KAAK,EAAE,oCAAgB,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,EAAE,oBAAoB,CAAC,CAAC;YAC3G,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACxC,MAAM,MAAM,GAAG,qBAAqB,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,EAAE,oBAAoB,CAAC,CAAC;YAC5F,IAAI,CAAC,MAAM;gBAAE,OAAO,IAAI,CAAC;YACzB,OAAO,eAAe,CACpB,GAAG,EACH,SAAS,EACT,aAAa,EACb,eAAe,EACf,KAAK,EACL,OAAO,EACP,MAAM,EACN,OAAO,EACP,CAAC,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC,EAC5B,iBAAiB,CAClB,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,OAAO;YAAE,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QAClC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,SAAS;QACnD,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,MAAM,MAAM,GAAG,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;QACrF,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,MAAM,cAAc,GAAG,IAAA,yBAAa,EAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,uCAAuC,IAAI,CAAC,EAAE,wEAAwE,CAAC,CAAC;QAC/K,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,mCAAe,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;QACnG,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzC,cAAc,CAAC,IAAI,CACjB,eAAe,CAAC,GAAG,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAC7F,CAAC;IACJ,CAAC;IAED,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/E,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC/C,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,IAAI,CAAC,EAAE;YAAE,SAAS;QAC3D,MAAM,KAAK,GAAG,UAAU,CAAC,uBAAuB,CAAC;QACjD,IAAI,CAAC,KAAK;YAAE,SAAS,CAAC,mCAAmC;QACzD,MAAM,OAAO,GAAG,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO;YAAE,SAAS,CAAC,2CAA2C;QAEnE,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACzD,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACzD,IAAI,eAAe,KAAK,SAAS,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;YACnE,WAAW,CAAC,KAAK,CAAC;gBAChB,IAAI,EAAE,yCAAyC;gBAC/C,OAAO,EAAE,eAAe,UAAU,CAAC,EAAE,6DAA6D;gBAClG,QAAQ,EAAE,UAAU,CAAC,EAAE;gBACvB,UAAU,EAAE,wBAAwB;aACrC,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,MAAM,SAAS,GAAG,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC7D,MAAM,SAAS,GAAG,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAE7D,qEAAqE;QACrE,kEAAkE;QAClE,wEAAwE;QACxE,uEAAuE;QACvE,uEAAuE;QACvE,wEAAwE;QACxE,uEAAuE;QACvE,wEAAwE;QACxE,wEAAwE;QACxE,mEAAmE;QACnE,6BAA6B;QAC7B,IAAI,SAAS,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,QAAQ,KAAK,SAAS,CAAC,EAAE,IAAI,SAAS,CAAC,QAAQ,KAAK,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;YAC3G,SAAS;QACX,CAAC;QAED,MAAM,MAAM,GAAiB,EAAE,CAAC;QAChC,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,IAAI,SAAS,IAAI,IAAA,+BAAiB,EAAC,SAAS,CAAC,MAAM,CAAC,IAAI,IAAA,+BAAiB,EAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7I,MAAM,UAAU,GAAG,IAAA,oBAAM,EAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAC5C,MAAM,UAAU,GAAG,IAAA,oBAAM,EAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAC5C,KAAK,MAAM,EAAE,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;gBACvC,MAAM,UAAU,GAAG,IAAA,gCAAgB,EAAC,EAAE,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;gBAChE,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,WAAW,CAAC,KAAK,CAAC;wBAChB,IAAI,EAAE,wBAAwB;wBAC9B,OAAO,EAAE,eAAe,UAAU,CAAC,EAAE,yEAAyE;wBAC9G,QAAQ,EAAE,UAAU,CAAC,EAAE;wBACvB,UAAU,EAAE,wBAAwB;qBACrC,CAAC,CAAC;oBACH,SAAS;gBACX,CAAC;gBACD,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;oBACxB,oEAAoE;oBACpE,iEAAiE;oBACjE,oEAAoE;oBACpE,iEAAiE;oBACjE,oCAAoC;oBACpC,WAAW,CAAC,OAAO,CAAC;wBAClB,IAAI,EAAE,6BAA6B;wBACnC,OAAO,EAAE,eAAe,UAAU,CAAC,EAAE,oGAAoG,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,aAAa,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,oCAAoC;wBAClU,QAAQ,EAAE,UAAU,CAAC,EAAE;wBACvB,UAAU,EAAE,wBAAwB;qBACrC,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM,MAAM,GAAG,IAAA,wBAAU,EAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAC5C,MAAM,CAAC,IAAI,CAAC,IAAA,uBAAO,EAAC,qBAAqB,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACrI,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,IAAA,yBAAa,EAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,0CAA0C,KAAK,wEAAwE,CAAC,CAAC;QAC3K,MAAM,mBAAmB,GAAiB,EAAE,CAAC;QAC7C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,mBAAmB,CAAC,IAAI,CAAC,IAAA,uBAAO,EAAC,yBAAyB,EAAE,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QAC3H,CAAC;QACD,gEAAgE;QAChE,uEAAuE;QACvE,wEAAwE;QACxE,IAAI,mBAAmB,GAAe,IAAI,CAAC;QAC3C,IAAI,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,IAAA,sCAAkB,EAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAC9D,IAAI,MAAM,EAAE,CAAC;gBACX,mBAAmB,GAAG,MAAM,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACN,WAAW,CAAC,OAAO,CAAC;oBAClB,IAAI,EAAE,yCAAyC;oBAC/C,OAAO,EAAE,0BAA0B,UAAU,CAAC,KAAK,CAAC,SAAS,sDAAsD;oBACnH,QAAQ,EAAE,UAAU,CAAC,EAAE;oBACvB,UAAU,EAAE,wBAAwB;iBACrC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,mBAAmB,CAAC,IAAI,CACtB,IAAA,uBAAO,EAAC,wBAAwB,EAAE,CAAC,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE;YACxF,oBAAoB,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,qCAAiB,EAAE,qCAAiB,CAAC;SACxE,CAAC,CACH,CAAC;QACF,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,mBAAmB,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAEzF,cAAc,CAAC,IAAI,CACjB,IAAA,uBAAO,EACL,2BAA2B,EAC3B;YACE,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;YAC3B,CAAC,SAAS,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;YACpC,CAAC,OAAO,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;YAClC,CAAC,gBAAgB,EAAE,GAAG,CAAC;YACvB,CAAC,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC;YAC/B,CAAC,mBAAmB,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;SACxC,EACD,mBAAmB,CACpB,CACF,CAAC;IACJ,CAAC;IAED,MAAM,gBAAgB,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5C,MAAM,UAAU,GAAG,IAAA,uBAAO,EACxB,oBAAoB,EACpB;QACE,CAAC,MAAM,EAAE,WAAW,CAAC;QACrB,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QAC3B,CAAC,gBAAgB,EAAE,GAAG,CAAC;QACvB,CAAC,YAAY,EAAE,QAAQ,CAAC;QACxB,CAAC,mBAAmB,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC;KAChD,EACD;QACE,IAAA,uBAAO,EAAC,wBAAwB,EAAE,CAAC,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC;QACzG,IAAA,uBAAO,EAAC,SAAS,EAAE;YACjB,CAAC,MAAM,EAAE,SAAS,CAAC;YACnB,CAAC,GAAG,EAAE,GAAG,CAAC;YACV,CAAC,GAAG,EAAE,GAAG,CAAC;YACV,CAAC,GAAG,EAAE,MAAM,CAAC,iCAAa,CAAC,CAAC;YAC5B,CAAC,GAAG,EAAE,MAAM,CAAC,iCAAa,CAAC,CAAC;SAC7B,CAAC;KACH,CACF,CAAC;IAEF,MAAM,UAAU,GAAG,IAAA,uBAAO,EAAC,uBAAuB,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEnH,OAAO,EAAE,UAAU,EAAE,CAAC;AACxB,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile-values.d.ts","sourceRoot":"","sources":["../../../src/serializer/profile-values.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAIlE;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,UAAU,CAkB5G"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildProfileValues = buildProfileValues;
4
+ const xml_writer_js_1 = require("../infrastructure/xml-writer.js");
5
+ const rtf_js_1 = require("./rtf.js");
6
+ /**
7
+ * Builds an `<MM_ProfileValues>` block: a `nm` (display name) value, and
8
+ * optionally a `doc` (RTF documentation) value — confirmed order and shape
9
+ * from both reference fixtures (`nm` always precedes `doc`).
10
+ */
11
+ function buildProfileValues(language, name, documentation) {
12
+ const children = [
13
+ (0, xml_writer_js_1.textElement)('MM_Value', name, [
14
+ ['name', 'nm'],
15
+ ['type', 'string'],
16
+ ['xml:lang', language],
17
+ ]),
18
+ ];
19
+ if (documentation) {
20
+ children.push((0, xml_writer_js_1.textElement)('MM_Value', (0, rtf_js_1.toRtfDocument)(documentation), [
21
+ ['name', 'doc'],
22
+ ['type', 'rtf'],
23
+ ['xml:lang', language],
24
+ ]));
25
+ }
26
+ return (0, xml_writer_js_1.element)('MM_ProfileValues', undefined, children);
27
+ }
28
+ //# sourceMappingURL=profile-values.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile-values.js","sourceRoot":"","sources":["../../../src/serializer/profile-values.ts"],"names":[],"mappings":";;AASA,gDAkBC;AA1BD,mEAAuE;AACvE,qCAAyC;AAEzC;;;;GAIG;AACH,SAAgB,kBAAkB,CAAC,QAAgB,EAAE,IAAY,EAAE,aAA6B;IAC9F,MAAM,QAAQ,GAAiB;QAC7B,IAAA,2BAAW,EAAC,UAAU,EAAE,IAAI,EAAE;YAC5B,CAAC,MAAM,EAAE,IAAI,CAAC;YACd,CAAC,MAAM,EAAE,QAAQ,CAAC;YAClB,CAAC,UAAU,EAAE,QAAQ,CAAC;SACvB,CAAC;KACH,CAAC;IACF,IAAI,aAAa,EAAE,CAAC;QAClB,QAAQ,CAAC,IAAI,CACX,IAAA,2BAAW,EAAC,UAAU,EAAE,IAAA,sBAAa,EAAC,aAAa,CAAC,EAAE;YACpD,CAAC,MAAM,EAAE,KAAK,CAAC;YACf,CAAC,MAAM,EAAE,KAAK,CAAC;YACf,CAAC,UAAU,EAAE,QAAQ,CAAC;SACvB,CAAC,CACH,CAAC;IACJ,CAAC;IACD,OAAO,IAAA,uBAAO,EAAC,kBAAkB,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AAC1D,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relationship-writer.d.ts","sourceRoot":"","sources":["../../../src/serializer/relationship-writer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE5F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAEvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAGzE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,2GAA2G;AAC3G,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,MAAM,CAAC;CACjB;AAWD,MAAM,WAAW,2BAA2B;IAC1C,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAC;IAC9D;;;;;;;;OAQG;IACH,gBAAgB,EAAE,UAAU,EAAE,CAAC;CAChC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,UAAU,EACjB,GAAG,EAAE,aAAa,EAClB,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,EAC/C,iBAAiB,EAAE,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,EACzD,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,mBAAmB,CAAC,EACxD,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EACtC,WAAW,EAAE,mBAAmB,GAC/B,2BAA2B,CAqF7B"}
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildSemanticRelationships = buildSemanticRelationships;
4
+ const xml_writer_js_1 = require("../infrastructure/xml-writer.js");
5
+ const assert_js_1 = require("../infrastructure/assert.js");
6
+ const relationship_mapping_js_1 = require("../mapping/relationship-mapping.js");
7
+ const generic_relationship_mapping_js_1 = require("../mapping/generic-relationship-mapping.js");
8
+ function getOrCreateScheme(schemeBuilds, tag) {
9
+ let build = schemeBuilds.get(tag);
10
+ if (!build) {
11
+ build = { tag, collections: new Map(), relations: [] };
12
+ schemeBuilds.set(tag, build);
13
+ }
14
+ return build;
15
+ }
16
+ /**
17
+ * Builds the semantic `<ArchiMate:{RelationshipType} from="..." to="..."/>`
18
+ * elements for every `ArchiRelationship` that resolves either to a confirmed
19
+ * exact-triple mapping or a confirmed generic form. Every relation — exact
20
+ * or generic — is appended to its **source element's own scheme's**
21
+ * `Relations` collection (falling back to the root-level container only
22
+ * when the source has no scheme, i.e. a Junction/OrJunction). Confirmed
23
+ * against the agile-manifesto fixture by cross-referencing three generic-form
24
+ * relations' `from` ids against their defining element: an
25
+ * `ElementElementAssociation` sourced from an `ApplicationComponent` sits in
26
+ * `ApplicationScheme`'s `Relations`; a `GroupingElementComposition` sourced
27
+ * from a `Grouping` sits in `CompositeScheme`'s; an `InfluenceRelation`
28
+ * sourced from a `Junction` sits in the root's. Everything unmapped is
29
+ * diagnosed, never guessed — see `mapping/relationship-mapping.ts` and
30
+ * `mapping/generic-relationship-mapping.ts`.
31
+ */
32
+ function buildSemanticRelationships(model, ids, elementIndex, relationshipIndex, mappedElements, schemeBuilds, diagnostics) {
33
+ const mappedRelationships = new Map();
34
+ const rootRelationsXml = [];
35
+ for (const rel of model.relationships) {
36
+ const sourceEl = elementIndex.get(rel.sourceId);
37
+ const targetEl = elementIndex.get(rel.targetId);
38
+ if (!sourceEl || !targetEl) {
39
+ const endpointIsRelationship = (!sourceEl && relationshipIndex.has(rel.sourceId)) || (!targetEl && relationshipIndex.has(rel.targetId));
40
+ diagnostics.error({
41
+ code: endpointIsRelationship ? 'unsupported-relationship-endpoint' : 'dangling-relationship-reference',
42
+ message: endpointIsRelationship
43
+ ? `Relationship "${rel.type}" (${rel.id}) has another relationship as an endpoint — relationship-to-relationship endpoints are not supported in XMA v0.1.`
44
+ : `Relationship "${rel.type}" (${rel.id}) references a source/target id not found among the model's elements.`,
45
+ entityId: rel.id,
46
+ entityType: 'ArchiRelationship',
47
+ });
48
+ continue;
49
+ }
50
+ if (!mappedElements.has(sourceEl.id) || !mappedElements.has(targetEl.id)) {
51
+ // The endpoint element itself already produced an unsupported-element-type
52
+ // diagnostic; this is the knock-on effect on the relationship.
53
+ diagnostics.error({
54
+ code: 'unsupported-relationship-endpoint-type',
55
+ message: `Relationship "${rel.type}" (${rel.id}) has an endpoint whose element type has no XMA mapping.`,
56
+ entityId: rel.id,
57
+ entityType: 'ArchiRelationship',
58
+ });
59
+ continue;
60
+ }
61
+ const exactMapping = (0, relationship_mapping_js_1.lookupRelationshipMapping)(rel.type, sourceEl.type, targetEl.type);
62
+ const genericMapping = exactMapping ? undefined : (0, generic_relationship_mapping_js_1.lookupGenericRelationshipMapping)(rel.type, sourceEl.type, targetEl.type);
63
+ const mapping = exactMapping ?? genericMapping;
64
+ if (!mapping) {
65
+ diagnostics.error({
66
+ code: 'unsupported-relationship',
67
+ message: `Relationship "${rel.type}" from ${sourceEl.type} to ${targetEl.type} has no confirmed XMA mapping.`,
68
+ entityId: rel.id,
69
+ entityType: 'ArchiRelationship',
70
+ });
71
+ continue;
72
+ }
73
+ if (rel.properties.length > 0) {
74
+ diagnostics.warning({
75
+ code: 'unsupported-properties',
76
+ message: `Relationship "${rel.name ?? rel.id}" has ${rel.properties.length} propert${rel.properties.length === 1 ? 'y' : 'ies'} not represented in XMA v0.1.`,
77
+ entityId: rel.id,
78
+ entityType: 'ArchiRelationship',
79
+ });
80
+ }
81
+ if (rel.profiles.length > 0) {
82
+ diagnostics.warning({
83
+ code: 'unsupported-profile',
84
+ message: `Relationship "${rel.name ?? rel.id}" references ${rel.profiles.length} profile(s)/specialization(s) not represented in XMA v0.1.`,
85
+ entityId: rel.id,
86
+ entityType: 'ArchiRelationship',
87
+ });
88
+ }
89
+ mappedRelationships.set(rel.id, mapping);
90
+ const xmaId = ids.idFor(rel.id);
91
+ const relationXml = (0, xml_writer_js_1.element)(`ArchiMate:${mapping.xmaType}`, [
92
+ ['id', String(xmaId)],
93
+ ['from', String(ids.idFor(sourceEl.id))],
94
+ ['to', String(ids.idFor(targetEl.id))],
95
+ ]);
96
+ const schemeTag = exactMapping
97
+ ? exactMapping.scheme
98
+ : (0, assert_js_1.assertDefined)(mappedElements.get(sourceEl.id), `no mapping for source element "${sourceEl.id}" (checked present earlier in this same function)`).scheme;
99
+ if (schemeTag === 'root') {
100
+ rootRelationsXml.push(relationXml);
101
+ }
102
+ else {
103
+ const scheme = getOrCreateScheme(schemeBuilds, schemeTag);
104
+ scheme.relations.push(relationXml);
105
+ }
106
+ }
107
+ return { mappedRelationships, rootRelationsXml };
108
+ }
109
+ //# sourceMappingURL=relationship-writer.js.map