@cda/adapter-xma 0.4.3 → 0.6.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 (214) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +54 -20
  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/{mapping → cjs/mapping}/visual-mapping.d.ts +8 -0
  42. package/dist/cjs/mapping/visual-mapping.d.ts.map +1 -0
  43. package/dist/cjs/mapping/visual-mapping.js +51 -0
  44. package/dist/cjs/mapping/visual-mapping.js.map +1 -0
  45. package/dist/cjs/package.json +3 -0
  46. package/dist/cjs/serializer/document-writer.d.ts.map +1 -0
  47. package/dist/cjs/serializer/document-writer.js +143 -0
  48. package/dist/cjs/serializer/document-writer.js.map +1 -0
  49. package/dist/{serializer → cjs/serializer}/graphical-writer.d.ts +8 -6
  50. package/dist/cjs/serializer/graphical-writer.d.ts.map +1 -0
  51. package/dist/cjs/serializer/graphical-writer.js +521 -0
  52. package/dist/cjs/serializer/graphical-writer.js.map +1 -0
  53. package/dist/cjs/serializer/profile-values.d.ts.map +1 -0
  54. package/dist/cjs/serializer/profile-values.js +28 -0
  55. package/dist/cjs/serializer/profile-values.js.map +1 -0
  56. package/dist/cjs/serializer/relationship-writer.d.ts.map +1 -0
  57. package/dist/cjs/serializer/relationship-writer.js +109 -0
  58. package/dist/cjs/serializer/relationship-writer.js.map +1 -0
  59. package/dist/cjs/serializer/rtf.d.ts.map +1 -0
  60. package/dist/cjs/serializer/rtf.js +67 -0
  61. package/dist/cjs/serializer/rtf.js.map +1 -0
  62. package/dist/cjs/serializer/semantic-writer.d.ts.map +1 -0
  63. package/dist/cjs/serializer/semantic-writer.js +170 -0
  64. package/dist/cjs/serializer/semantic-writer.js.map +1 -0
  65. package/dist/cjs/serializer/serialize-xma.d.ts.map +1 -0
  66. package/dist/cjs/serializer/serialize-xma.js +113 -0
  67. package/dist/cjs/serializer/serialize-xma.js.map +1 -0
  68. package/dist/{serializer → cjs/serializer}/view-writer.d.ts +6 -0
  69. package/dist/cjs/serializer/view-writer.d.ts.map +1 -0
  70. package/dist/cjs/serializer/view-writer.js +239 -0
  71. package/dist/cjs/serializer/view-writer.js.map +1 -0
  72. package/dist/esm/diagnostics/diagnostics.d.ts +20 -0
  73. package/dist/esm/diagnostics/diagnostics.d.ts.map +1 -0
  74. package/dist/esm/diagnostics/diagnostics.js.map +1 -0
  75. package/dist/esm/diagnostics/errors.d.ts +13 -0
  76. package/dist/esm/diagnostics/errors.d.ts.map +1 -0
  77. package/dist/esm/diagnostics/errors.js.map +1 -0
  78. package/dist/esm/geometry/bendpoints.d.ts +33 -0
  79. package/dist/esm/geometry/bendpoints.d.ts.map +1 -0
  80. package/dist/{geometry → esm/geometry}/bendpoints.js +6 -2
  81. package/dist/esm/geometry/bendpoints.js.map +1 -0
  82. package/dist/esm/geometry/geometry.d.ts +75 -0
  83. package/dist/esm/geometry/geometry.d.ts.map +1 -0
  84. package/dist/{geometry → esm/geometry}/geometry.js +25 -6
  85. package/dist/esm/geometry/geometry.js.map +1 -0
  86. package/dist/esm/index.d.ts +5 -0
  87. package/dist/esm/index.d.ts.map +1 -0
  88. package/dist/esm/index.js.map +1 -0
  89. package/dist/esm/infrastructure/assert.d.ts +10 -0
  90. package/dist/esm/infrastructure/assert.d.ts.map +1 -0
  91. package/dist/esm/infrastructure/assert.js +15 -0
  92. package/dist/esm/infrastructure/assert.js.map +1 -0
  93. package/dist/esm/infrastructure/id-allocator.d.ts +34 -0
  94. package/dist/esm/infrastructure/id-allocator.d.ts.map +1 -0
  95. package/dist/esm/infrastructure/id-allocator.js.map +1 -0
  96. package/dist/esm/infrastructure/xml-writer.d.ts +20 -0
  97. package/dist/esm/infrastructure/xml-writer.d.ts.map +1 -0
  98. package/dist/{infrastructure → esm/infrastructure}/xml-writer.js +37 -2
  99. package/dist/esm/infrastructure/xml-writer.js.map +1 -0
  100. package/dist/esm/mapping/element-mapping.d.ts +31 -0
  101. package/dist/esm/mapping/element-mapping.d.ts.map +1 -0
  102. package/dist/esm/mapping/element-mapping.js.map +1 -0
  103. package/dist/esm/mapping/generic-relationship-mapping.d.ts +18 -0
  104. package/dist/esm/mapping/generic-relationship-mapping.d.ts.map +1 -0
  105. package/dist/esm/mapping/generic-relationship-mapping.js.map +1 -0
  106. package/dist/esm/mapping/relationship-mapping.d.ts +47 -0
  107. package/dist/esm/mapping/relationship-mapping.d.ts.map +1 -0
  108. package/dist/esm/mapping/relationship-mapping.js.map +1 -0
  109. package/dist/esm/mapping/scheme-mapping.d.ts +38 -0
  110. package/dist/esm/mapping/scheme-mapping.d.ts.map +1 -0
  111. package/dist/esm/mapping/scheme-mapping.js.map +1 -0
  112. package/dist/esm/mapping/visual-mapping.d.ts +32 -0
  113. package/dist/esm/mapping/visual-mapping.d.ts.map +1 -0
  114. package/dist/{mapping → esm/mapping}/visual-mapping.js +8 -0
  115. package/dist/esm/mapping/visual-mapping.js.map +1 -0
  116. package/dist/esm/serializer/document-writer.d.ts +40 -0
  117. package/dist/esm/serializer/document-writer.d.ts.map +1 -0
  118. package/dist/{serializer → esm/serializer}/document-writer.js +5 -0
  119. package/dist/esm/serializer/document-writer.js.map +1 -0
  120. package/dist/esm/serializer/graphical-writer.d.ts +29 -0
  121. package/dist/esm/serializer/graphical-writer.d.ts.map +1 -0
  122. package/dist/{serializer → esm/serializer}/graphical-writer.js +213 -54
  123. package/dist/esm/serializer/graphical-writer.js.map +1 -0
  124. package/dist/esm/serializer/profile-values.d.ts +8 -0
  125. package/dist/esm/serializer/profile-values.d.ts.map +1 -0
  126. package/dist/esm/serializer/profile-values.js.map +1 -0
  127. package/dist/esm/serializer/relationship-writer.d.ts +41 -0
  128. package/dist/esm/serializer/relationship-writer.d.ts.map +1 -0
  129. package/dist/{serializer → esm/serializer}/relationship-writer.js +4 -1
  130. package/dist/esm/serializer/relationship-writer.js.map +1 -0
  131. package/dist/esm/serializer/rtf.d.ts +9 -0
  132. package/dist/esm/serializer/rtf.d.ts.map +1 -0
  133. package/dist/{serializer → esm/serializer}/rtf.js +14 -0
  134. package/dist/esm/serializer/rtf.js.map +1 -0
  135. package/dist/esm/serializer/semantic-writer.d.ts +51 -0
  136. package/dist/esm/serializer/semantic-writer.d.ts.map +1 -0
  137. package/dist/{serializer → esm/serializer}/semantic-writer.js +24 -0
  138. package/dist/esm/serializer/semantic-writer.js.map +1 -0
  139. package/dist/esm/serializer/serialize-xma.d.ts +29 -0
  140. package/dist/esm/serializer/serialize-xma.d.ts.map +1 -0
  141. package/dist/{serializer → esm/serializer}/serialize-xma.js +40 -1
  142. package/dist/esm/serializer/serialize-xma.js.map +1 -0
  143. package/dist/esm/serializer/view-writer.d.ts +33 -0
  144. package/dist/esm/serializer/view-writer.d.ts.map +1 -0
  145. package/dist/esm/serializer/view-writer.js +236 -0
  146. package/dist/esm/serializer/view-writer.js.map +1 -0
  147. package/package.json +20 -9
  148. package/dist/diagnostics/diagnostics.d.ts.map +0 -1
  149. package/dist/diagnostics/diagnostics.js.map +0 -1
  150. package/dist/diagnostics/errors.d.ts.map +0 -1
  151. package/dist/diagnostics/errors.js.map +0 -1
  152. package/dist/geometry/bendpoints.d.ts.map +0 -1
  153. package/dist/geometry/bendpoints.js.map +0 -1
  154. package/dist/geometry/geometry.d.ts +0 -48
  155. package/dist/geometry/geometry.d.ts.map +0 -1
  156. package/dist/geometry/geometry.js.map +0 -1
  157. package/dist/index.d.ts.map +0 -1
  158. package/dist/index.js.map +0 -1
  159. package/dist/infrastructure/id-allocator.d.ts.map +0 -1
  160. package/dist/infrastructure/id-allocator.js.map +0 -1
  161. package/dist/infrastructure/xml-writer.d.ts.map +0 -1
  162. package/dist/infrastructure/xml-writer.js.map +0 -1
  163. package/dist/mapping/element-mapping.d.ts.map +0 -1
  164. package/dist/mapping/element-mapping.js.map +0 -1
  165. package/dist/mapping/generic-relationship-mapping.d.ts.map +0 -1
  166. package/dist/mapping/generic-relationship-mapping.js.map +0 -1
  167. package/dist/mapping/relationship-mapping.d.ts.map +0 -1
  168. package/dist/mapping/relationship-mapping.js.map +0 -1
  169. package/dist/mapping/scheme-mapping.d.ts.map +0 -1
  170. package/dist/mapping/scheme-mapping.js.map +0 -1
  171. package/dist/mapping/visual-mapping.d.ts.map +0 -1
  172. package/dist/mapping/visual-mapping.js.map +0 -1
  173. package/dist/serializer/document-writer.d.ts.map +0 -1
  174. package/dist/serializer/document-writer.js.map +0 -1
  175. package/dist/serializer/graphical-writer.d.ts.map +0 -1
  176. package/dist/serializer/graphical-writer.js.map +0 -1
  177. package/dist/serializer/profile-values.d.ts.map +0 -1
  178. package/dist/serializer/profile-values.js.map +0 -1
  179. package/dist/serializer/relationship-writer.d.ts.map +0 -1
  180. package/dist/serializer/relationship-writer.js.map +0 -1
  181. package/dist/serializer/rtf.d.ts.map +0 -1
  182. package/dist/serializer/rtf.js.map +0 -1
  183. package/dist/serializer/semantic-writer.d.ts.map +0 -1
  184. package/dist/serializer/semantic-writer.js.map +0 -1
  185. package/dist/serializer/serialize-xma.d.ts.map +0 -1
  186. package/dist/serializer/serialize-xma.js.map +0 -1
  187. package/dist/serializer/view-writer.d.ts.map +0 -1
  188. package/dist/serializer/view-writer.js +0 -145
  189. package/dist/serializer/view-writer.js.map +0 -1
  190. /package/dist/{diagnostics → cjs/diagnostics}/diagnostics.d.ts +0 -0
  191. /package/dist/{diagnostics → cjs/diagnostics}/errors.d.ts +0 -0
  192. /package/dist/{geometry → cjs/geometry}/bendpoints.d.ts +0 -0
  193. /package/dist/{index.d.ts → cjs/index.d.ts} +0 -0
  194. /package/dist/{infrastructure → cjs/infrastructure}/id-allocator.d.ts +0 -0
  195. /package/dist/{infrastructure → cjs/infrastructure}/xml-writer.d.ts +0 -0
  196. /package/dist/{mapping → cjs/mapping}/element-mapping.d.ts +0 -0
  197. /package/dist/{mapping → cjs/mapping}/generic-relationship-mapping.d.ts +0 -0
  198. /package/dist/{mapping → cjs/mapping}/relationship-mapping.d.ts +0 -0
  199. /package/dist/{mapping → cjs/mapping}/scheme-mapping.d.ts +0 -0
  200. /package/dist/{serializer → cjs/serializer}/document-writer.d.ts +0 -0
  201. /package/dist/{serializer → cjs/serializer}/profile-values.d.ts +0 -0
  202. /package/dist/{serializer → cjs/serializer}/relationship-writer.d.ts +0 -0
  203. /package/dist/{serializer → cjs/serializer}/rtf.d.ts +0 -0
  204. /package/dist/{serializer → cjs/serializer}/semantic-writer.d.ts +0 -0
  205. /package/dist/{serializer → cjs/serializer}/serialize-xma.d.ts +0 -0
  206. /package/dist/{diagnostics → esm/diagnostics}/diagnostics.js +0 -0
  207. /package/dist/{diagnostics → esm/diagnostics}/errors.js +0 -0
  208. /package/dist/{index.js → esm/index.js} +0 -0
  209. /package/dist/{infrastructure → esm/infrastructure}/id-allocator.js +0 -0
  210. /package/dist/{mapping → esm/mapping}/element-mapping.js +0 -0
  211. /package/dist/{mapping → esm/mapping}/generic-relationship-mapping.js +0 -0
  212. /package/dist/{mapping → esm/mapping}/relationship-mapping.js +0 -0
  213. /package/dist/{mapping → esm/mapping}/scheme-mapping.js +0 -0
  214. /package/dist/{serializer → esm/serializer}/profile-values.js +0 -0
@@ -1,16 +1,48 @@
1
1
  import { element, textElement } from '../infrastructure/xml-writer.js';
2
2
  import { XmaIdRegistry } from '../infrastructure/id-allocator.js';
3
- import { CATEGORY_FILL_COLOR, DEFAULT_FONT_NAME, DEFAULT_FONT_SIZE, DEFAULT_LINE_COLOR, DEFAULT_OPACITY, GROUP_FILL_COLOR, NOTE_FILL_COLOR, CANVAS_EXTENT, parseArchiHexColor } from '../mapping/visual-mapping.js';
4
- import { scaleRect, scalePoint, hasCompleteBounds } from '../geometry/geometry.js';
3
+ import { assertDefined } from '../infrastructure/assert.js';
4
+ import { CATEGORY_FILL_COLOR, DEFAULT_FONT_NAME, DEFAULT_FONT_SIZE, DEFAULT_LINE_COLOR, DEFAULT_OPACITY, GROUP_FILL_COLOR, NOTE_FILL_COLOR, VIEW_REFERENCE_FILL_COLOR, CANVAS_EXTENT, parseArchiHexColor } from '../mapping/visual-mapping.js';
5
+ import { scaleRect, scalePoint, hasCompleteBounds, toRect } from '../geometry/geometry.js';
5
6
  import { resolveBendpoint } from '../geometry/bendpoints.js';
7
+ /**
8
+ * Converts a diagram object's/note's `bounds` into a `Rect`, re-checking
9
+ * completeness explicitly rather than trusting it across the function
10
+ * boundary from view-writer's earlier validation pass via an unchecked
11
+ * cast. `bounds` is only ever incomplete here if that invariant is somehow
12
+ * violated — in which case this reports the same `missing-bounds`
13
+ * diagnostic view-writer would have, instead of emitting `NaN`/`null`
14
+ * arithmetic into the output.
15
+ */
16
+ function resolveDrawableBounds(bounds, diagnostics, entityId, entityType) {
17
+ if (!hasCompleteBounds(bounds)) {
18
+ diagnostics.error({
19
+ code: 'missing-bounds',
20
+ message: `"${entityId}" has incomplete geometry (x/y/width/height) and cannot be positioned in XMA.`,
21
+ entityId,
22
+ entityType,
23
+ });
24
+ return null;
25
+ }
26
+ return toRect(bounds);
27
+ }
6
28
  function colorElement(name, rgb, id) {
7
29
  const attrs = [['id', String(id)]];
8
30
  if (name !== null) {
9
31
  attrs.push(['name', name]);
10
32
  }
11
33
  // Only regular styled colors carry r/g/b; a bare default (e.g. relationship line color) omits them — confirmed shape.
34
+ // A zero-valued channel is itself omitted rather than written as "0" —
35
+ // confirmed against the sabsa fixture's one explicit connection lineColor
36
+ // override (#ff0000): its MM_Color is `mm_r="255"` alone, g/b entirely
37
+ // absent, not `mm_g="0" mm_b="0"`. Same omit-when-zero convention already
38
+ // confirmed for bounds x/y in geometry.ts.
12
39
  if (rgb) {
13
- attrs.push(['mm_r', String(rgb.r)], ['mm_g', String(rgb.g)], ['mm_b', String(rgb.b)]);
40
+ if (rgb.r !== 0)
41
+ attrs.push(['mm_r', String(rgb.r)]);
42
+ if (rgb.g !== 0)
43
+ attrs.push(['mm_g', String(rgb.g)]);
44
+ if (rgb.b !== 0)
45
+ attrs.push(['mm_b', String(rgb.b)]);
14
46
  }
15
47
  return element('MM_Diagram:MM_Color', attrs);
16
48
  }
@@ -26,17 +58,20 @@ function rectElement(id, rect) {
26
58
  }
27
59
  /**
28
60
  * Resolves a node's effective fill/line/font, applying explicit Archi
29
- * styling only where mechanically lossless (a direct hex RGB copy, or a
30
- * verbatim font-name substitution into the same structural slot) per
31
- * v0.1 policy, everything else explicit (font size, bold/italic, line
32
- * width, font color) is diagnosed as an unsupported style override rather
33
- * than guessed.
61
+ * styling only where mechanically lossless (a direct hex RGB copy, a
62
+ * verbatim font-name substitution into the same structural slot, or the
63
+ * confirmed font-size formula) — per v0.1 policy, everything else explicit
64
+ * (bold/italic, line width, font color) is diagnosed as an unsupported
65
+ * style override rather than guessed.
34
66
  */
35
67
  function resolveNodeVisuals(style, defaultFill, diagnostics, entityId, entityType) {
36
68
  let fill = defaultFill;
37
69
  let line = DEFAULT_LINE_COLOR;
38
70
  let fontName = DEFAULT_FONT_NAME;
39
- let fillOpacity = DEFAULT_OPACITY;
71
+ let fontSize = DEFAULT_FONT_SIZE;
72
+ // Never reassigned: alpha has zero fixture evidence, so it's diagnosed
73
+ // (see below) rather than applied — fillOpacity always stays the default.
74
+ const fillOpacity = DEFAULT_OPACITY;
40
75
  if (style) {
41
76
  if (style.fillColor !== null) {
42
77
  const parsed = parseArchiHexColor(style.fillColor);
@@ -70,7 +105,16 @@ function resolveNodeVisuals(style, defaultFill, diagnostics, entityId, entityTyp
70
105
  fontName = style.fontName;
71
106
  }
72
107
  if (style.alpha !== null) {
73
- fillOpacity = style.alpha;
108
+ // Not applied: zero occurrences of an explicit `alpha` in any of the
109
+ // four reference fixtures — no evidence for how (or whether) it maps
110
+ // to `mm_fillOpacity`, so per v0.1 policy this is diagnosed like every
111
+ // other unconfirmed style override, not guessed.
112
+ diagnostics.warning({
113
+ code: 'unsupported-style-alpha',
114
+ message: 'Explicit fill opacity (alpha) has no confirmed XMA representation and was not applied (default used).',
115
+ entityId,
116
+ entityType,
117
+ });
74
118
  }
75
119
  if (style.fontColor !== null) {
76
120
  diagnostics.warning({
@@ -81,12 +125,10 @@ function resolveNodeVisuals(style, defaultFill, diagnostics, entityId, entityTyp
81
125
  });
82
126
  }
83
127
  if (style.fontSize !== null) {
84
- diagnostics.warning({
85
- code: 'unsupported-style-font-size',
86
- message: 'Explicit font size has no confirmed XMA scaling formula and was not applied (default used).',
87
- entityId,
88
- entityType,
89
- });
128
+ // `mm_fontSize = floor(pt) * 20` — confirmed by both data points in
129
+ // the agile-manifesto fixture: an 11.25pt override -> mm_fontSize=220,
130
+ // a 14.25pt override -> mm_fontSize=280.
131
+ fontSize = Math.floor(style.fontSize) * 20;
90
132
  }
91
133
  if (style.fontStyle !== null && (style.fontStyle.bold || style.fontStyle.italic)) {
92
134
  diagnostics.warning({
@@ -105,10 +147,10 @@ function resolveNodeVisuals(style, defaultFill, diagnostics, entityId, entityTyp
105
147
  });
106
148
  }
107
149
  }
108
- return { fill, line, fontName, fillOpacity };
150
+ return { fill, line, fontName, fontSize, fillOpacity };
109
151
  }
110
- function buildLabelDecoration(id, fontName, extraAttrs = []) {
111
- return element('MM_Diagram:MM_Decoration', [['id', String(id)], ['mm_fontSize', String(DEFAULT_FONT_SIZE)], ['mm_graphicType', '2'], ['mm_concept', 'label'], ...extraAttrs], [textElement('mm_font', fontName)]);
152
+ function buildLabelDecoration(id, fontName, fontSize, extraAttrs = []) {
153
+ return element('MM_Diagram:MM_Decoration', [['id', String(id)], ['mm_fontSize', String(fontSize)], ['mm_graphicType', '2'], ['mm_concept', 'label'], ...extraAttrs], [textElement('mm_font', fontName)]);
112
154
  }
113
155
  function buildIconDecoration(id) {
114
156
  return element('MM_Diagram:MM_Decoration', [
@@ -131,7 +173,7 @@ function buildStyledNode(ids, nodeXmaId, concept, semanticObject, hasIcon, visua
131
173
  if (hasIcon) {
132
174
  graphicsChildren.push(buildIconDecoration(ids.fresh()));
133
175
  }
134
- graphicsChildren.push(buildLabelDecoration(ids.fresh(), visuals.fontName, labelExtraAttrs));
176
+ graphicsChildren.push(buildLabelDecoration(ids.fresh(), visuals.fontName, visuals.fontSize, labelExtraAttrs));
135
177
  graphicsChildren.push(...nestedChildrenXml);
136
178
  const attrs = [
137
179
  ['id', String(nodeXmaId)],
@@ -150,6 +192,34 @@ function buildStyledNode(ids, nodeXmaId, concept, semanticObject, hasIcon, visua
150
192
  ]);
151
193
  }
152
194
  const JUNCTION_XMA_TYPES = new Set(['Junction', 'OrJunction']);
195
+ /**
196
+ * A Junction carries no fill/line/font styling at all in either fixture
197
+ * (see `buildJunctionNode`) — so unlike `resolveNodeVisuals`'s per-field
198
+ * diagnostics for a regular node, any style override at all on a Junction
199
+ * diagram object is unsupported. Previously this was discarded with no
200
+ * indication anything was dropped.
201
+ */
202
+ function reportUnsupportedJunctionStyle(obj, diagnostics) {
203
+ const style = obj.style;
204
+ if (!style)
205
+ return;
206
+ const hasOverride = style.fillColor !== null ||
207
+ style.lineColor !== null ||
208
+ style.fontColor !== null ||
209
+ style.fontName !== null ||
210
+ style.fontSize !== null ||
211
+ style.lineWidth !== null ||
212
+ style.alpha !== null ||
213
+ (style.fontStyle !== null && (style.fontStyle.bold || style.fontStyle.italic));
214
+ if (!hasOverride)
215
+ return;
216
+ diagnostics.warning({
217
+ code: 'unsupported-style-junction',
218
+ 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.`,
219
+ entityId: obj.id,
220
+ entityType: 'ArchiDiagramObject',
221
+ });
222
+ }
153
223
  /**
154
224
  * Builds a `Junction`/`OrJunction` node — confirmed structurally different
155
225
  * from every other element node: `mm_graphicType="3"` (not `"5"`), and no
@@ -167,8 +237,37 @@ function buildJunctionNode(ids, nodeXmaId, concept, semanticObject, bounds) {
167
237
  ['mm_semanticObject', String(semanticObject)],
168
238
  ], [
169
239
  element('MM_Diagram:MM_Graphics', [['name', 'mm_graphics'], ['id', String(ids.fresh())]], [
170
- buildLabelDecoration(ids.fresh(), DEFAULT_FONT_NAME),
240
+ buildLabelDecoration(ids.fresh(), DEFAULT_FONT_NAME, DEFAULT_FONT_SIZE),
241
+ ]),
242
+ rectElement(ids.fresh(), bounds),
243
+ ]);
244
+ }
245
+ /**
246
+ * Builds a `DiagramModelReference` ("insert view as reference") node —
247
+ * confirmed against both instances in the agile-manifesto fixture:
248
+ * `mm_graphicType="3"` (like Junction, not the usual `"5"`), but *unlike*
249
+ * Junction it does carry an icon decoration and a fixed fill/line color
250
+ * (`VIEW_REFERENCE_FILL_COLOR`/`DEFAULT_LINE_COLOR` — no `style` element on
251
+ * either source object, so this is the construct's fixed default, not a
252
+ * style-resolution result). `semanticObject` is the Ref id pointing at the
253
+ * *referenced view's own* `ArchiMate:AllView` — see `view-writer.ts`.
254
+ */
255
+ function buildViewReferenceNode(ids, nodeXmaId, semanticObject, bounds, nestedChildrenXml = []) {
256
+ return element('MM_Diagram:MM_Node', [
257
+ ['id', String(nodeXmaId)],
258
+ ['mm_graphicType', '3'],
259
+ ['mm_concept', 'AllView'],
260
+ ['mm_lineOpacity', String(DEFAULT_OPACITY)],
261
+ ['mm_fillOpacity', String(DEFAULT_OPACITY)],
262
+ ['mm_semanticObject', String(semanticObject)],
263
+ ], [
264
+ element('MM_Diagram:MM_Graphics', [['name', 'mm_graphics'], ['id', String(ids.fresh())]], [
265
+ buildIconDecoration(ids.fresh()),
266
+ buildLabelDecoration(ids.fresh(), DEFAULT_FONT_NAME, DEFAULT_FONT_SIZE),
267
+ ...nestedChildrenXml,
171
268
  ]),
269
+ colorElement('mm_lineColor', DEFAULT_LINE_COLOR, ids.fresh()),
270
+ element('MM_Diagram:MM_Colors', [['name', 'mm_fillColors'], ['id', String(ids.fresh())]], [colorElement(null, VIEW_REFERENCE_FILL_COLOR, ids.fresh())]),
172
271
  rectElement(ids.fresh(), bounds),
173
272
  ]);
174
273
  }
@@ -180,12 +279,14 @@ function buildJunctionNode(ids, nodeXmaId, concept, semanticObject, bounds) {
180
279
  * objects"), and one `MM_DirectedRel` per drawable connection.
181
280
  *
182
281
  * `mm_fromx`/`mm_fromy`/`mm_tox`/`mm_toy` (manual connector anchor
183
- * metadata) are deliberately omitted — exactly one fixture exhibited them,
184
- * which is not enough evidence to derive a general formula or confirm
185
- * they're mandatory for import (see project docs, "unresolved
186
- * reverse-engineering limitations"). If a future fixture proves them
187
- * required, add that behavior here, isolated from the rest of this
188
- * function.
282
+ * metadata) are deliberately omitted — present on only a minority of
283
+ * connections in three of the four fixtures (5/93 in agile-manifesto, 1/3
284
+ * in relaciones, 15/346 in sabsa), never on all of them, which isn't
285
+ * enough evidence to derive a general formula for which connections get
286
+ * one or confirm they're mandatory for import (see project docs,
287
+ * "unresolved reverse-engineering limitations"). If a future fixture
288
+ * proves them required, add that behavior here, isolated from the rest of
289
+ * this function.
189
290
  */
190
291
  export function buildGraphicalModule(model, view, ids, refIds, allocator, mappedElements, mappedRelationships, viewResult, diagnostics) {
191
292
  const diagramObjectById = new Map(model.diagramObjects.map((o) => [o.id, o]));
@@ -201,28 +302,56 @@ export function buildGraphicalModule(model, view, ids, refIds, allocator, mapped
201
302
  * children this way). Returns `null` for an object this pass can't draw
202
303
  * (already diagnosed elsewhere).
203
304
  */
204
- function buildNodeTree(objId) {
305
+ function buildNodeTree(objId, ancestorIds = new Set()) {
205
306
  const obj = diagramObjectById.get(objId);
206
307
  if (!obj)
207
308
  return null;
309
+ if (ancestorIds.has(objId)) {
310
+ diagnostics.error({
311
+ code: 'cyclic-diagram-object-nesting',
312
+ message: `Diagram object "${objId}" is its own descendant (a cyclic parent/child chain) and cannot be drawn.`,
313
+ entityId: objId,
314
+ entityType: 'ArchiDiagramObject',
315
+ });
316
+ return null;
317
+ }
318
+ const nextAncestorIds = new Set(ancestorIds).add(objId);
208
319
  const nestedChildrenXml = obj.childrenIds
209
- .map((childId) => buildNodeTree(childId))
320
+ .map((childId) => buildNodeTree(childId, nextAncestorIds))
210
321
  .filter((xml) => xml !== null);
211
322
  if (viewResult.validElementNodeObjectIds.has(objId) && obj.archimateElementId) {
212
- const mapping = mappedElements.get(obj.archimateElementId);
213
- const refId = refIds.get(obj.archimateElementId);
323
+ const mapping = assertDefined(mappedElements.get(obj.archimateElementId), `no mapping for element "${obj.archimateElementId}" (view-writer should have skipped diagram object "${obj.id}")`);
324
+ const refId = assertDefined(refIds.get(obj.archimateElementId), `no ref id registered for element "${obj.archimateElementId}" (view-writer should have registered it before graphical-writer runs)`);
214
325
  const nodeXmaId = nodeIds.idFor(obj.id);
326
+ const bounds = resolveDrawableBounds(obj.bounds, diagnostics, obj.id, 'ArchiDiagramObject');
327
+ if (!bounds)
328
+ return null;
215
329
  if (JUNCTION_XMA_TYPES.has(mapping.xmaType)) {
216
- return buildJunctionNode(ids, nodeXmaId, mapping.xmaType, refId, obj.bounds);
330
+ reportUnsupportedJunctionStyle(obj, diagnostics);
331
+ return buildJunctionNode(ids, nodeXmaId, mapping.xmaType, refId, bounds);
217
332
  }
218
333
  const visuals = resolveNodeVisuals(obj.style, CATEGORY_FILL_COLOR[mapping.category], diagnostics, obj.id, 'ArchiDiagramObject');
219
- return buildStyledNode(ids, nodeXmaId, mapping.xmaType, refId, mapping.hasIcon, visuals, obj.bounds, null, [], nestedChildrenXml);
334
+ return buildStyledNode(ids, nodeXmaId, mapping.xmaType, refId, mapping.hasIcon, visuals, bounds, null, [], nestedChildrenXml);
220
335
  }
221
336
  if (viewResult.validGroupObjectIds.has(objId)) {
222
- const groupSemanticId = ids.get(obj.id);
337
+ const groupSemanticId = assertDefined(ids.get(obj.id), `no semantic id registered for group "${obj.id}" (view-writer should have registered it before graphical-writer runs)`);
223
338
  const visuals = resolveNodeVisuals(obj.style, GROUP_FILL_COLOR, diagnostics, obj.id, 'ArchiDiagramObject');
224
339
  const nodeXmaId = nodeIds.idFor(obj.id);
225
- return buildStyledNode(ids, nodeXmaId, 'ViewGraphic', groupSemanticId, false, visuals, obj.bounds, 'group', [['mm_frameStrategy', '12']], nestedChildrenXml);
340
+ const bounds = resolveDrawableBounds(obj.bounds, diagnostics, obj.id, 'ArchiDiagramObject');
341
+ if (!bounds)
342
+ return null;
343
+ return buildStyledNode(ids, nodeXmaId, 'ViewGraphic', groupSemanticId, false, visuals, bounds, 'group', [['mm_frameStrategy', '12']], nestedChildrenXml);
344
+ }
345
+ if (viewResult.validViewReferenceObjectIds.has(objId)) {
346
+ if (obj.referencedModelId === null) {
347
+ throw new Error(`Internal invariant violation: diagram object "${obj.id}" is in validViewReferenceObjectIds but has no referencedModelId.`);
348
+ }
349
+ const refId = assertDefined(refIds.get(obj.referencedModelId), `no ref id registered for referenced view "${obj.referencedModelId}" (view-writer should have registered it before graphical-writer runs)`);
350
+ const nodeXmaId = nodeIds.idFor(obj.id);
351
+ const bounds = resolveDrawableBounds(obj.bounds, diagnostics, obj.id, 'ArchiDiagramObject');
352
+ if (!bounds)
353
+ return null;
354
+ return buildViewReferenceNode(ids, nodeXmaId, refId, bounds, nestedChildrenXml);
226
355
  }
227
356
  return null;
228
357
  }
@@ -237,10 +366,13 @@ export function buildGraphicalModule(model, view, ids, refIds, allocator, mapped
237
366
  const note = noteById.get(noteId);
238
367
  if (!note)
239
368
  continue;
240
- const noteSemanticId = ids.get(note.id);
369
+ const bounds = resolveDrawableBounds(note.bounds, diagnostics, note.id, 'ArchiNote');
370
+ if (!bounds)
371
+ continue;
372
+ const noteSemanticId = assertDefined(ids.get(note.id), `no semantic id registered for note "${note.id}" (view-writer should have registered it before graphical-writer runs)`);
241
373
  const visuals = resolveNodeVisuals(note.style, NOTE_FILL_COLOR, diagnostics, note.id, 'ArchiNote');
242
374
  const nodeXmaId = nodeIds.idFor(note.id);
243
- canvasChildren.push(buildStyledNode(ids, nodeXmaId, 'ViewGraphic', noteSemanticId, false, visuals, note.bounds, null));
375
+ canvasChildren.push(buildStyledNode(ids, nodeXmaId, 'ViewGraphic', noteSemanticId, false, visuals, bounds, null));
244
376
  }
245
377
  const connectionById = new Map(model.diagramConnections.map((c) => [c.id, c]));
246
378
  for (const connId of view.diagramConnectionIds) {
@@ -248,11 +380,27 @@ export function buildGraphicalModule(model, view, ids, refIds, allocator, mapped
248
380
  if (!connection || connection.viewId !== view.id)
249
381
  continue;
250
382
  const relId = connection.archimateRelationshipId;
251
- if (!relId)
252
- continue; // already diagnosed by view-writer
253
- const mapping = mappedRelationships.get(relId);
254
- if (!mapping)
255
- continue; // already diagnosed by relationship-writer
383
+ let xmaType;
384
+ let semanticObjectId;
385
+ if (relId) {
386
+ const mapping = mappedRelationships.get(relId);
387
+ if (!mapping)
388
+ continue; // already diagnosed by relationship-writer
389
+ xmaType = mapping.xmaType;
390
+ semanticObjectId = assertDefined(refIds.get(relId), `no ref id registered for relationship "${relId}" (view-writer should have registered it before graphical-writer runs)`);
391
+ }
392
+ else {
393
+ // A purely-visual connection (no underlying ArchiMate relationship) —
394
+ // view-writer already resolved this to a ViewEdge if both endpoints
395
+ // had a semantic id to reference; otherwise it already diagnosed the
396
+ // unsupported-connection-no-relationship error, so there's nothing to
397
+ // draw here.
398
+ const viewEdgeSemanticId = viewResult.viewEdgeSemanticIds.get(connection.id);
399
+ if (viewEdgeSemanticId === undefined)
400
+ continue;
401
+ xmaType = 'ViewEdge';
402
+ semanticObjectId = viewEdgeSemanticId;
403
+ }
256
404
  const sourceNodeXmaId = nodeIds.get(connection.sourceId);
257
405
  const targetNodeXmaId = nodeIds.get(connection.targetId);
258
406
  if (sourceNodeXmaId === undefined || targetNodeXmaId === undefined) {
@@ -282,8 +430,10 @@ export function buildGraphicalModule(model, view, ids, refIds, allocator, mapped
282
430
  }
283
431
  const points = [];
284
432
  if (connection.bendpoints.length > 0 && sourceObj && targetObj && hasCompleteBounds(sourceObj.bounds) && hasCompleteBounds(targetObj.bounds)) {
433
+ const sourceRect = toRect(sourceObj.bounds);
434
+ const targetRect = toRect(targetObj.bounds);
285
435
  for (const bp of connection.bendpoints) {
286
- const resolution = resolveBendpoint(bp, sourceObj.bounds, targetObj.bounds);
436
+ const resolution = resolveBendpoint(bp, sourceRect, targetRect);
287
437
  if (!resolution) {
288
438
  diagnostics.error({
289
439
  code: 'unresolvable-bendpoint',
@@ -310,30 +460,39 @@ export function buildGraphicalModule(model, view, ids, refIds, allocator, mapped
310
460
  points.push(element('MM_Diagram:MM_Point', [['id', String(ids.fresh())], ['mm_x', String(scaled.x)], ['mm_y', String(scaled.y)]]));
311
461
  }
312
462
  }
313
- const relRefId = refIds.get(relId);
314
463
  const directedRelChildren = [];
315
464
  if (points.length > 0) {
316
465
  directedRelChildren.push(element('MM_Diagram:MM_MultiLine', [['name', 'mm_line'], ['id', String(ids.fresh())]], points));
317
466
  }
467
+ // Confirmed against the sabsa fixture's one explicit connection
468
+ // lineColor override (#ff0000): the DirectedRel's MM_Color carries the
469
+ // parsed RGB, in the exact same structural slot as a node's line color.
470
+ let connectionLineColor = null;
318
471
  if (connection.style?.lineColor) {
319
- diagnostics.warning({
320
- code: 'unsupported-style-connection-line-color',
321
- message: 'Explicit connection line color has no confirmed XMA representation and was not applied.',
322
- entityId: connection.id,
323
- entityType: 'ArchiDiagramConnection',
324
- });
472
+ const parsed = parseArchiHexColor(connection.style.lineColor);
473
+ if (parsed) {
474
+ connectionLineColor = parsed;
475
+ }
476
+ else {
477
+ diagnostics.warning({
478
+ code: 'unsupported-style-connection-line-color',
479
+ message: `Connection line color "${connection.style.lineColor}" is not a recognized hex color and was not applied.`,
480
+ entityId: connection.id,
481
+ entityType: 'ArchiDiagramConnection',
482
+ });
483
+ }
325
484
  }
326
485
  directedRelChildren.push(element('MM_Diagram:MM_Graphics', [['name', 'mm_graphics'], ['id', String(ids.fresh())]], [
327
- buildLabelDecoration(ids.fresh(), DEFAULT_FONT_NAME),
486
+ buildLabelDecoration(ids.fresh(), DEFAULT_FONT_NAME, DEFAULT_FONT_SIZE),
328
487
  ]));
329
- directedRelChildren.push(colorElement('mm_lineColor', null, ids.fresh()));
488
+ directedRelChildren.push(colorElement('mm_lineColor', connectionLineColor, ids.fresh()));
330
489
  canvasChildren.push(element('MM_Diagram:MM_DirectedRel', [
331
490
  ['id', String(ids.fresh())],
332
491
  ['mm_from', String(sourceNodeXmaId)],
333
492
  ['mm_to', String(targetNodeXmaId)],
334
493
  ['mm_graphicType', '7'],
335
- ['mm_concept', mapping.xmaType],
336
- ['mm_semanticObject', String(relRefId)],
494
+ ['mm_concept', xmaType],
495
+ ['mm_semanticObject', String(semanticObjectId)],
337
496
  ], directedRelChildren));
338
497
  }
339
498
  const canvasSemanticId = ids.idFor(view.id);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphical-writer.js","sourceRoot":"","sources":["../../../src/serializer/graphical-writer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { XmlElement } from '../infrastructure/xml-writer.js';
2
+ /**
3
+ * Builds an `<MM_ProfileValues>` block: a `nm` (display name) value, and
4
+ * optionally a `doc` (RTF documentation) value — confirmed order and shape
5
+ * from both reference fixtures (`nm` always precedes `doc`).
6
+ */
7
+ export declare function buildProfileValues(language: string, name: string, documentation?: string | null): XmlElement;
8
+ //# sourceMappingURL=profile-values.d.ts.map
@@ -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 @@
1
+ {"version":3,"file":"profile-values.js","sourceRoot":"","sources":["../../../src/serializer/profile-values.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAgB,EAAE,IAAY,EAAE,aAA6B;IAC9F,MAAM,QAAQ,GAAiB;QAC7B,WAAW,CAAC,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,WAAW,CAAC,UAAU,EAAE,aAAa,CAAC,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,OAAO,CAAC,kBAAkB,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AAC1D,CAAC"}
@@ -0,0 +1,41 @@
1
+ import type { ArchiModel, ArchiElement, ArchiRelationship } from '@cda/archi-semantic-core';
2
+ import type { XmlElement } from '../infrastructure/xml-writer.js';
3
+ import type { XmaIdRegistry } from '../infrastructure/id-allocator.js';
4
+ import type { DiagnosticCollector } from '../diagnostics/diagnostics.js';
5
+ import type { ElementMappingEntry } from '../mapping/element-mapping.js';
6
+ import type { SchemeBuild } from './semantic-writer.js';
7
+ /** What downstream (view-writer, graphical-writer) actually needs from a resolved relationship mapping. */
8
+ export interface ResolvedRelationshipMapping {
9
+ xmaType: string;
10
+ }
11
+ export interface SemanticRelationshipsResult {
12
+ mappedRelationships: Map<string, ResolvedRelationshipMapping>;
13
+ /**
14
+ * Relations whose source element has no scheme of its own — in practice
15
+ * only a `Junction`/`OrJunction` source (see `junctionMappingEntry` in
16
+ * `semantic-writer.ts`, whose `scheme` is the `'root'` sentinel). These
17
+ * live in the root-level `<ArchiMate:Relations>` container (a sibling of
18
+ * `AbstractSchemes`), confirmed against the agile-manifesto fixture
19
+ * (source id 17, a Junction, whose own InfluenceRelation sits in the
20
+ * document root's `Relations`, not inside any of the 8 layer schemes).
21
+ */
22
+ rootRelationsXml: XmlElement[];
23
+ }
24
+ /**
25
+ * Builds the semantic `<ArchiMate:{RelationshipType} from="..." to="..."/>`
26
+ * elements for every `ArchiRelationship` that resolves either to a confirmed
27
+ * exact-triple mapping or a confirmed generic form. Every relation — exact
28
+ * or generic — is appended to its **source element's own scheme's**
29
+ * `Relations` collection (falling back to the root-level container only
30
+ * when the source has no scheme, i.e. a Junction/OrJunction). Confirmed
31
+ * against the agile-manifesto fixture by cross-referencing three generic-form
32
+ * relations' `from` ids against their defining element: an
33
+ * `ElementElementAssociation` sourced from an `ApplicationComponent` sits in
34
+ * `ApplicationScheme`'s `Relations`; a `GroupingElementComposition` sourced
35
+ * from a `Grouping` sits in `CompositeScheme`'s; an `InfluenceRelation`
36
+ * sourced from a `Junction` sits in the root's. Everything unmapped is
37
+ * diagnosed, never guessed — see `mapping/relationship-mapping.ts` and
38
+ * `mapping/generic-relationship-mapping.ts`.
39
+ */
40
+ export declare function buildSemanticRelationships(model: ArchiModel, ids: XmaIdRegistry, elementIndex: ReadonlyMap<string, ArchiElement>, relationshipIndex: ReadonlyMap<string, ArchiRelationship>, mappedElements: ReadonlyMap<string, ElementMappingEntry>, schemeBuilds: Map<string, SchemeBuild>, diagnostics: DiagnosticCollector): SemanticRelationshipsResult;
41
+ //# sourceMappingURL=relationship-writer.d.ts.map
@@ -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"}
@@ -1,4 +1,5 @@
1
1
  import { element } from '../infrastructure/xml-writer.js';
2
+ import { assertDefined } from '../infrastructure/assert.js';
2
3
  import { lookupRelationshipMapping } from '../mapping/relationship-mapping.js';
3
4
  import { lookupGenericRelationshipMapping } from '../mapping/generic-relationship-mapping.js';
4
5
  function getOrCreateScheme(schemeBuilds, tag) {
@@ -89,7 +90,9 @@ export function buildSemanticRelationships(model, ids, elementIndex, relationshi
89
90
  ['from', String(ids.idFor(sourceEl.id))],
90
91
  ['to', String(ids.idFor(targetEl.id))],
91
92
  ]);
92
- const schemeTag = exactMapping ? exactMapping.scheme : mappedElements.get(sourceEl.id).scheme;
93
+ const schemeTag = exactMapping
94
+ ? exactMapping.scheme
95
+ : assertDefined(mappedElements.get(sourceEl.id), `no mapping for source element "${sourceEl.id}" (checked present earlier in this same function)`).scheme;
93
96
  if (schemeTag === 'root') {
94
97
  rootRelationsXml.push(relationXml);
95
98
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relationship-writer.js","sourceRoot":"","sources":["../../../src/serializer/relationship-writer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAG1D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAE,gCAAgC,EAAE,MAAM,4CAA4C,CAAC;AAS9F,SAAS,iBAAiB,CAAC,YAAsC,EAAE,GAAW;IAC5E,IAAI,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,KAAK,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,GAAG,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;QACvD,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAgBD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,0BAA0B,CACxC,KAAiB,EACjB,GAAkB,EAClB,YAA+C,EAC/C,iBAAyD,EACzD,cAAwD,EACxD,YAAsC,EACtC,WAAgC;IAEhC,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAuC,CAAC;IAC3E,MAAM,gBAAgB,GAAiB,EAAE,CAAC;IAE1C,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAEhD,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC3B,MAAM,sBAAsB,GAC1B,CAAC,CAAC,QAAQ,IAAI,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC3G,WAAW,CAAC,KAAK,CAAC;gBAChB,IAAI,EAAE,sBAAsB,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC,iCAAiC;gBACtG,OAAO,EAAE,sBAAsB;oBAC7B,CAAC,CAAC,iBAAiB,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,mHAAmH;oBAC1J,CAAC,CAAC,iBAAiB,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,uEAAuE;gBAChH,QAAQ,EAAE,GAAG,CAAC,EAAE;gBAChB,UAAU,EAAE,mBAAmB;aAChC,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;YACzE,2EAA2E;YAC3E,+DAA+D;YAC/D,WAAW,CAAC,KAAK,CAAC;gBAChB,IAAI,EAAE,wCAAwC;gBAC9C,OAAO,EAAE,iBAAiB,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,0DAA0D;gBACxG,QAAQ,EAAE,GAAG,CAAC,EAAE;gBAChB,UAAU,EAAE,mBAAmB;aAChC,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,MAAM,YAAY,GAAG,yBAAyB,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;QACvF,MAAM,cAAc,GAAG,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,gCAAgC,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC3H,MAAM,OAAO,GAA4C,YAAY,IAAI,cAAc,CAAC;QACxF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,WAAW,CAAC,KAAK,CAAC;gBAChB,IAAI,EAAE,0BAA0B;gBAChC,OAAO,EAAE,iBAAiB,GAAG,CAAC,IAAI,UAAU,QAAQ,CAAC,IAAI,OAAO,QAAQ,CAAC,IAAI,gCAAgC;gBAC7G,QAAQ,EAAE,GAAG,CAAC,EAAE;gBAChB,UAAU,EAAE,mBAAmB;aAChC,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,WAAW,CAAC,OAAO,CAAC;gBAClB,IAAI,EAAE,wBAAwB;gBAC9B,OAAO,EAAE,iBAAiB,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,UAAU,CAAC,MAAM,WAAW,GAAG,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,+BAA+B;gBAC7J,QAAQ,EAAE,GAAG,CAAC,EAAE;gBAChB,UAAU,EAAE,mBAAmB;aAChC,CAAC,CAAC;QACL,CAAC;QACD,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,WAAW,CAAC,OAAO,CAAC;gBAClB,IAAI,EAAE,qBAAqB;gBAC3B,OAAO,EAAE,iBAAiB,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,gBAAgB,GAAG,CAAC,QAAQ,CAAC,MAAM,4DAA4D;gBAC3I,QAAQ,EAAE,GAAG,CAAC,EAAE;gBAChB,UAAU,EAAE,mBAAmB;aAChC,CAAC,CAAC;QACL,CAAC;QAED,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAEzC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChC,MAAM,WAAW,GAAG,OAAO,CAAC,aAAa,OAAO,CAAC,OAAO,EAAE,EAAE;YAC1D,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;YACxC,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;SACvC,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,YAAY;YAC5B,CAAC,CAAC,YAAY,CAAC,MAAM;YACrB,CAAC,CAAC,aAAa,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,kCAAkC,QAAQ,CAAC,EAAE,mDAAmD,CAAC,CAAC,MAAM,CAAC;QAC5J,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;YACzB,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,iBAAiB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;YAC1D,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,CAAC;AACnD,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Wraps escaped documentation text into an RTF document, matching the exact
3
+ * minimal shape confirmed by both reference fixtures: `{\rtf1 <text>}`, with
4
+ * no additional header control words — the reference tool emits nothing
5
+ * beyond that, and RTF 1.5+'s `\uN` Unicode escapes are valid on their own
6
+ * (the per-`\u` fallback byte count defaults to 1 with no `\ucN` present).
7
+ */
8
+ export declare function toRtfDocument(text: string): string;
9
+ //# sourceMappingURL=rtf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rtf.d.ts","sourceRoot":"","sources":["../../../src/serializer/rtf.ts"],"names":[],"mappings":"AAiDA;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD"}
@@ -9,6 +9,20 @@
9
9
  * source locale (Spanish, accented Latin text, etc.) without guessing a
10
10
  * target ANSI code page.
11
11
  */
12
+ /**
13
+ * Iterates by UTF-16 code unit (not by Unicode code point) deliberately: a
14
+ * character outside the Basic Multilingual Plane (e.g. an emoji) is stored
15
+ * in JS strings as a surrogate pair, and this naturally emits it as two
16
+ * consecutive `\uN?` escapes, one per surrogate half — the standard,
17
+ * widely-implemented RTF technique for supplementary-plane characters
18
+ * (RTF's own `\u` model is itself UTF-16-code-unit-based). This is not
19
+ * splitting one character across two escapes by accident; recombining a
20
+ * code point first and emitting one escape would be the non-standard
21
+ * choice. No fixture contains an astral character in documentation text to
22
+ * confirm this against directly, but the signed-16-bit conversion below is
23
+ * applied uniformly and correctly regardless of whether a given code unit
24
+ * happens to be a surrogate half.
25
+ */
12
26
  function escapeRtfBody(text) {
13
27
  const normalized = text.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
14
28
  const out = [];
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rtf.js","sourceRoot":"","sources":["../../../src/serializer/rtf.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH;;;;;;;;;;;;;GAaG;AACH,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACpE,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9C,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACtC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YAChB,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtB,CAAC;aAAM,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YACvB,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnB,CAAC;aAAM,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACtB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC;aAAM,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACtB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC;aAAM,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;YACxC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;YACrD,GAAG,CAAC,IAAI,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACtB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,WAAW,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;AAC3C,CAAC"}