@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
@@ -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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relationship-writer.js","sourceRoot":"","sources":["../../../src/serializer/relationship-writer.ts"],"names":[],"mappings":"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"}
@@ -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"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toRtfDocument = toRtfDocument;
4
+ /**
5
+ * Deterministic, dependency-free RTF encoding for Archi `documentation`
6
+ * text, used as the `doc` profile value's content.
7
+ *
8
+ * RTF control characters (`\\`, `{`, `}`) are escaped, line breaks become
9
+ * `\par`, and every non-ASCII / control code unit is escaped as a signed
10
+ * `\uN?` Unicode destination (RTF 1.5+, one fallback byte per `\uc1`) rather
11
+ * than interpolated raw — this keeps the output valid RTF regardless of
12
+ * source locale (Spanish, accented Latin text, etc.) without guessing a
13
+ * target ANSI code page.
14
+ */
15
+ /**
16
+ * Iterates by UTF-16 code unit (not by Unicode code point) deliberately: a
17
+ * character outside the Basic Multilingual Plane (e.g. an emoji) is stored
18
+ * in JS strings as a surrogate pair, and this naturally emits it as two
19
+ * consecutive `\uN?` escapes, one per surrogate half — the standard,
20
+ * widely-implemented RTF technique for supplementary-plane characters
21
+ * (RTF's own `\u` model is itself UTF-16-code-unit-based). This is not
22
+ * splitting one character across two escapes by accident; recombining a
23
+ * code point first and emitting one escape would be the non-standard
24
+ * choice. No fixture contains an astral character in documentation text to
25
+ * confirm this against directly, but the signed-16-bit conversion below is
26
+ * applied uniformly and correctly regardless of whether a given code unit
27
+ * happens to be a surrogate half.
28
+ */
29
+ function escapeRtfBody(text) {
30
+ const normalized = text.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
31
+ const out = [];
32
+ for (let i = 0; i < normalized.length; i += 1) {
33
+ const ch = normalized[i];
34
+ const code = normalized.charCodeAt(i);
35
+ if (ch === '\n') {
36
+ out.push('\\par\n');
37
+ }
38
+ else if (ch === '\\') {
39
+ out.push('\\\\');
40
+ }
41
+ else if (ch === '{') {
42
+ out.push('\\{');
43
+ }
44
+ else if (ch === '}') {
45
+ out.push('\\}');
46
+ }
47
+ else if (code >= 0x20 && code <= 0x7e) {
48
+ out.push(ch);
49
+ }
50
+ else {
51
+ const signed = code > 0x7fff ? code - 0x10000 : code;
52
+ out.push(`\\u${signed}?`);
53
+ }
54
+ }
55
+ return out.join('');
56
+ }
57
+ /**
58
+ * Wraps escaped documentation text into an RTF document, matching the exact
59
+ * minimal shape confirmed by both reference fixtures: `{\rtf1 <text>}`, with
60
+ * no additional header control words — the reference tool emits nothing
61
+ * beyond that, and RTF 1.5+'s `\uN` Unicode escapes are valid on their own
62
+ * (the per-`\u` fallback byte count defaults to 1 with no `\ucN` present).
63
+ */
64
+ function toRtfDocument(text) {
65
+ return `{\\rtf1 ${escapeRtfBody(text)}}`;
66
+ }
67
+ //# sourceMappingURL=rtf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rtf.js","sourceRoot":"","sources":["../../../src/serializer/rtf.ts"],"names":[],"mappings":";;AAwDA,sCAEC;AA1DD;;;;;;;;;;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,SAAgB,aAAa,CAAC,IAAY;IACxC,OAAO,WAAW,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;AAC3C,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic-writer.d.ts","sourceRoot":"","sources":["../../../src/serializer/semantic-writer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAgB,MAAM,0BAA0B,CAAC;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAElE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAkD,KAAK,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAGzH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,uHAAuH;IACvH,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,UAAU,EAAE,CAAA;KAAE,CAAC,CAAC;IACnE,8FAA8F;IAC9F,SAAS,EAAE,UAAU,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACvC,sHAAsH;IACtH,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IACjD;;;;;;OAMG;IACH,iBAAiB,EAAE,UAAU,EAAE,CAAC;CACjC;AAgGD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,UAAU,EACjB,GAAG,EAAE,aAAa,EAClB,WAAW,EAAE,mBAAmB,EAChC,QAAQ,EAAE,MAAM,GACf,mBAAmB,CA6CrB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,GAAG,IAAI,EAAE,GAAG,EAAE,aAAa,GAAG,UAAU,EAAE,CAgBzH"}
@@ -0,0 +1,170 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildSemanticElements = buildSemanticElements;
4
+ exports.renderSchemeChildren = renderSchemeChildren;
5
+ const xml_writer_js_1 = require("../infrastructure/xml-writer.js");
6
+ const element_mapping_js_1 = require("../mapping/element-mapping.js");
7
+ const profile_values_js_1 = require("./profile-values.js");
8
+ /**
9
+ * `ArchiElement.type` is always the literal string `"Junction"` for both
10
+ * AND and OR junctions — the And/Or distinction lives in the separate
11
+ * `junctionType` field. Confirmed directly in both fixtures: XMA has two
12
+ * distinct element tags for this, `Junction` (AND) and `OrJunction` (OR),
13
+ * each living in the root `Connectors` container. This resolves the XMA tag
14
+ * for a Junction element; unlike every other type, it can't be a static
15
+ * `ELEMENT_MAPPINGS` table entry keyed by `archiType` alone.
16
+ */
17
+ function junctionXmaType(el) {
18
+ return el.junctionType === 'Or' ? 'OrJunction' : 'Junction';
19
+ }
20
+ /**
21
+ * `archi-semantic-core` already defaults an unrecognized native junction
22
+ * `type` attribute to `'And'` rather than guessing (see its `junctionType`
23
+ * doc comment) — but it also preserves the original value verbatim in
24
+ * `rawJunctionType` specifically so a downstream consumer can tell "really
25
+ * absent/empty, the documented default" apart from "an unrecognized value
26
+ * that got silently defaulted". This reports the latter as a warning
27
+ * instead of drawing an `And` Junction with no indication anything was
28
+ * guessed.
29
+ */
30
+ function reportUnrecognizedJunctionType(el, diagnostics) {
31
+ if (el.junctionType !== 'And')
32
+ return;
33
+ const raw = el.rawJunctionType ?? '';
34
+ if (raw === '' || raw === 'or')
35
+ return;
36
+ diagnostics.warning({
37
+ code: 'unrecognized-junction-type',
38
+ message: `Junction "${el.name ?? el.id}" has an unrecognized native type value ("${raw}") — treated as AND (Archi's documented default for an unrecognized value), not necessarily what was intended.`,
39
+ entityId: el.id,
40
+ entityType: 'ArchiElement',
41
+ });
42
+ }
43
+ /**
44
+ * A `Junction`'s own `category`/`hasIcon` are never read: `graphical-writer`
45
+ * draws Junctions via a dedicated, colorless node form (confirmed in both
46
+ * fixtures — no `MM_Color`/`MM_Colors`, `mm_graphicType="3"` instead of the
47
+ * usual `"5"`) before ever consulting `CATEGORY_FILL_COLOR`. `category`
48
+ * still needs *some* valid value to satisfy `ElementMappingEntry`'s type;
49
+ * `'Grouping'` is used as an inert placeholder, not a claim about Junction's
50
+ * real presentation category.
51
+ */
52
+ function junctionMappingEntry(el) {
53
+ const xmaType = junctionXmaType(el);
54
+ return {
55
+ archiType: 'Junction',
56
+ xmaType,
57
+ scheme: 'root',
58
+ collectionTag: 'Connectors',
59
+ collectionName: 'connectors',
60
+ category: 'Grouping',
61
+ hasIcon: false,
62
+ };
63
+ }
64
+ function getOrCreateScheme(schemeBuilds, tag) {
65
+ let build = schemeBuilds.get(tag);
66
+ if (!build) {
67
+ build = { tag, collections: new Map(), relations: [] };
68
+ schemeBuilds.set(tag, build);
69
+ }
70
+ return build;
71
+ }
72
+ function reportUnsupportedElement(element, diagnostics) {
73
+ diagnostics.error({
74
+ code: 'unsupported-element-type',
75
+ message: `Archi element type "${element.type}" has no confirmed XMA mapping and would be silently lost.`,
76
+ entityId: element.id,
77
+ entityType: 'ArchiElement',
78
+ });
79
+ }
80
+ function reportAncillaryLossWarnings(el, diagnostics) {
81
+ if (el.properties.length > 0) {
82
+ diagnostics.warning({
83
+ code: 'unsupported-properties',
84
+ message: `Element "${el.name ?? el.id}" has ${el.properties.length} propert${el.properties.length === 1 ? 'y' : 'ies'} not represented in XMA v0.1.`,
85
+ entityId: el.id,
86
+ entityType: 'ArchiElement',
87
+ });
88
+ }
89
+ if (el.profiles.length > 0) {
90
+ diagnostics.warning({
91
+ code: 'unsupported-profile',
92
+ message: `Element "${el.name ?? el.id}" references ${el.profiles.length} profile(s)/specialization(s) not represented in XMA v0.1.`,
93
+ entityId: el.id,
94
+ entityType: 'ArchiElement',
95
+ });
96
+ }
97
+ }
98
+ /**
99
+ * Builds the per-scheme element collections (`<ArchiMate:BusinessActors>`
100
+ * etc.) for every `ArchiElement` in the model, regardless of whether it
101
+ * appears in the (single supported) view — semantic elements are model-wide,
102
+ * not view-scoped.
103
+ */
104
+ function buildSemanticElements(model, ids, diagnostics, language) {
105
+ const schemeBuilds = new Map();
106
+ const mappedElements = new Map();
107
+ const rootConnectorsXml = [];
108
+ for (const el of model.elements) {
109
+ if (el.type === 'Junction') {
110
+ const mapping = junctionMappingEntry(el);
111
+ mappedElements.set(el.id, mapping);
112
+ reportAncillaryLossWarnings(el, diagnostics);
113
+ reportUnrecognizedJunctionType(el, diagnostics);
114
+ const xmaId = ids.idFor(el.id);
115
+ rootConnectorsXml.push((0, xml_writer_js_1.element)(`ArchiMate:${mapping.xmaType}`, [['id', String(xmaId)]], [
116
+ (0, profile_values_js_1.buildProfileValues)(language, el.name ?? '', el.documentation),
117
+ ]));
118
+ continue;
119
+ }
120
+ const mapping = (0, element_mapping_js_1.lookupElementMapping)(el.type);
121
+ if (!mapping) {
122
+ reportUnsupportedElement(el, diagnostics);
123
+ continue;
124
+ }
125
+ mappedElements.set(el.id, mapping);
126
+ reportAncillaryLossWarnings(el, diagnostics);
127
+ const scheme = getOrCreateScheme(schemeBuilds, mapping.scheme);
128
+ let collection = scheme.collections.get(mapping.collectionTag);
129
+ if (!collection) {
130
+ collection = { name: mapping.collectionName, children: [] };
131
+ scheme.collections.set(mapping.collectionTag, collection);
132
+ }
133
+ const xmaId = ids.idFor(el.id);
134
+ const concept = (0, xml_writer_js_1.element)(`ArchiMate:${mapping.xmaType}`, [['id', String(xmaId)]], [(0, profile_values_js_1.buildProfileValues)(language, el.name ?? '', el.documentation)]);
135
+ collection.children.push(concept);
136
+ }
137
+ return { schemeBuilds, mappedElements, rootConnectorsXml };
138
+ }
139
+ /**
140
+ * Renders a `SchemeBuild`'s children (an optional `nm` profile, then each
141
+ * populated collection in confirmed order, then `Relations` last) — the
142
+ * caller wraps these in the actual `<ArchiMate:{schemeTag} id="...">`
143
+ * element, since only the caller (`document-writer`) knows the scheme's
144
+ * allocated id.
145
+ *
146
+ * Every collection element (including `Relations`) carries its own `id` —
147
+ * confirmed against the real fixture (e.g. `ApplicationComponents id="222"`,
148
+ * `Relations id="72"`), unlike a bare element concept which doesn't need one
149
+ * beyond its own. Previously omitted here; Enterprise Studio rejected the
150
+ * resulting document outright ("could not generate the object: unknown
151
+ * type") rather than merely losing content.
152
+ */
153
+ function renderSchemeChildren(build, nameProfile, ids) {
154
+ const children = [];
155
+ if (nameProfile) {
156
+ children.push(nameProfile);
157
+ }
158
+ for (const { tag, name } of (0, element_mapping_js_1.getSchemeCollectionOrder)(build.tag)) {
159
+ const collection = build.collections.get(tag);
160
+ if (!collection || collection.children.length === 0) {
161
+ continue;
162
+ }
163
+ children.push((0, xml_writer_js_1.element)(`ArchiMate:${tag}`, [['name', name], ['id', String(ids.fresh())]], collection.children));
164
+ }
165
+ if (build.relations.length > 0) {
166
+ children.push((0, xml_writer_js_1.element)('ArchiMate:Relations', [['name', 'relations'], ['id', String(ids.fresh())]], build.relations));
167
+ }
168
+ return children;
169
+ }
170
+ //# sourceMappingURL=semantic-writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic-writer.js","sourceRoot":"","sources":["../../../src/serializer/semantic-writer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialize-xma.d.ts","sourceRoot":"","sources":["../../../src/serializer/serialize-xma.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAG3D,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAQxF,MAAM,WAAW,mBAAmB;IAClC,2IAA2I;IAC3I,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iJAAiJ;IACjJ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6IAA6I;IAC7I,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA6GD;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,MAAM,CAMrF;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,aAAa,EAAE,CAEnG"}
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.serializeXma = serializeXma;
4
+ exports.inspectXmaSupport = inspectXmaSupport;
5
+ const xml_writer_js_1 = require("../infrastructure/xml-writer.js");
6
+ const id_allocator_js_1 = require("../infrastructure/id-allocator.js");
7
+ const diagnostics_js_1 = require("../diagnostics/diagnostics.js");
8
+ const errors_js_1 = require("../diagnostics/errors.js");
9
+ const semantic_writer_js_1 = require("./semantic-writer.js");
10
+ const relationship_writer_js_1 = require("./relationship-writer.js");
11
+ const view_writer_js_1 = require("./view-writer.js");
12
+ const graphical_writer_js_1 = require("./graphical-writer.js");
13
+ const document_writer_js_1 = require("./document-writer.js");
14
+ const DEFAULT_PACKAGE_NAME = 'CDA XMA Package';
15
+ const REQUIRED_MODEL_ARRAY_FIELDS = [
16
+ 'elements',
17
+ 'relationships',
18
+ 'views',
19
+ 'diagramObjects',
20
+ 'diagramConnections',
21
+ 'notes',
22
+ 'folders',
23
+ ];
24
+ /**
25
+ * `ArchiModel`'s shape is only enforced by TypeScript at compile time. A
26
+ * caller passing `null`/`undefined`, or an object missing a collection,
27
+ * would otherwise hit the first `.map()`/`.filter()` deep inside a writer
28
+ * and get a raw `Cannot read properties of undefined` — not an actionable
29
+ * error for a public library API. This is a caller-contract violation, not
30
+ * a "construct XMA can't represent" diagnostic, so it throws directly
31
+ * instead of going through `DiagnosticCollector`/`XmaSerializationError`.
32
+ */
33
+ function assertValidModelShape(model) {
34
+ if (typeof model !== 'object' || model === null) {
35
+ throw new TypeError(`serializeXma: expected an ArchiModel object, got ${model === null ? 'null' : typeof model}.`);
36
+ }
37
+ if (typeof model.metadata !== 'object' || model.metadata === null) {
38
+ throw new TypeError('serializeXma: model.metadata is missing or invalid — expected an ArchiModel.');
39
+ }
40
+ for (const field of REQUIRED_MODEL_ARRAY_FIELDS) {
41
+ if (!Array.isArray(model[field])) {
42
+ throw new TypeError(`serializeXma: model.${field} is missing or not an array — expected an ArchiModel.`);
43
+ }
44
+ }
45
+ }
46
+ function planXmaDocument(model, options) {
47
+ assertValidModelShape(model);
48
+ const diagnostics = new diagnostics_js_1.DiagnosticCollector();
49
+ const language = options?.language ?? 'en';
50
+ const modelName = options?.modelName ?? model.metadata.name;
51
+ const packageName = options?.packageName ?? DEFAULT_PACKAGE_NAME;
52
+ const allocator = new id_allocator_js_1.XmaIdAllocator();
53
+ const ids = new id_allocator_js_1.XmaIdRegistry(allocator);
54
+ const { schemeBuilds, mappedElements, rootConnectorsXml } = (0, semantic_writer_js_1.buildSemanticElements)(model, ids, diagnostics, language);
55
+ const elementIndex = new Map(model.elements.map((e) => [e.id, e]));
56
+ const relationshipIndex = new Map(model.relationships.map((r) => [r.id, r]));
57
+ const { mappedRelationships, rootRelationsXml } = (0, relationship_writer_js_1.buildSemanticRelationships)(model, ids, elementIndex, relationshipIndex, mappedElements, schemeBuilds, diagnostics);
58
+ const builtViews = model.views.map((view) => {
59
+ // A fresh RefObjects registry per view — confirmed against the sabsa
60
+ // fixture (38 views): each `AllView`'s `RefObjects` is self-contained,
61
+ // so an element referenced from multiple views gets its own ref id in
62
+ // each one (840 total Ref elements for 735 distinct semantic targets in
63
+ // sabsa.xma, never a ref id reused across two views). A shared registry
64
+ // would leave every view after the first missing Ref entries for
65
+ // elements first seen in an earlier view.
66
+ const refIds = new id_allocator_js_1.XmaIdRegistry(allocator);
67
+ const viewResult = (0, view_writer_js_1.buildView)(model, view, ids, refIds, mappedElements, mappedRelationships, diagnostics, language);
68
+ const { diagramXml } = (0, graphical_writer_js_1.buildGraphicalModule)(model, view, ids, refIds, allocator, mappedElements, mappedRelationships, viewResult, diagnostics);
69
+ return { view, viewResult, graphicalDiagramXml: diagramXml };
70
+ });
71
+ if (diagnostics.hasErrors) {
72
+ return { diagnostics: diagnostics.all, documentXml: null };
73
+ }
74
+ const documentXml = (0, document_writer_js_1.buildXmaDocument)({
75
+ modelName,
76
+ packageName,
77
+ language,
78
+ ids,
79
+ schemeBuilds,
80
+ folders: model.folders,
81
+ views: builtViews,
82
+ rootConnectorsXml,
83
+ rootRelationsXml,
84
+ });
85
+ return { diagnostics: diagnostics.all, documentXml };
86
+ }
87
+ /**
88
+ * Serializes an `ArchiModel` (from `@cda/archi-semantic-core`) into an XMA
89
+ * document string.
90
+ *
91
+ * Strict by default: if any construct in the model would be silently lost
92
+ * (an unsupported element/relationship type, a second view, incomplete
93
+ * geometry, ...) this throws `XmaSerializationError` carrying the full
94
+ * structured diagnostic list, rather than producing an approximate or
95
+ * partial XMA document. Use `inspectXmaSupport` to preview what would be
96
+ * unsupported without throwing.
97
+ */
98
+ function serializeXma(model, options) {
99
+ const { diagnostics, documentXml } = planXmaDocument(model, options);
100
+ if (documentXml === null) {
101
+ throw new errors_js_1.XmaSerializationError(diagnostics);
102
+ }
103
+ return (0, xml_writer_js_1.renderXmlDocument)(documentXml);
104
+ }
105
+ /**
106
+ * Non-mutating diagnostic pass: reports every construct in `model` that
107
+ * `serializeXma` would refuse to convert, without throwing and without
108
+ * requiring the model to be fully convertible.
109
+ */
110
+ function inspectXmaSupport(model, options) {
111
+ return planXmaDocument(model, options).diagnostics;
112
+ }
113
+ //# sourceMappingURL=serialize-xma.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialize-xma.js","sourceRoot":"","sources":["../../../src/serializer/serialize-xma.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,8 @@ import type { ElementMappingEntry } from '../mapping/element-mapping.js';
6
6
  import type { ResolvedRelationshipMapping } from './relationship-writer.js';
7
7
  export interface ViewBuildResult {
8
8
  viewGraphicsXml: XmlElement[];
9
+ /** `<ArchiMate:ViewEdge>` elements for this view's purely-visual connections — see the connection loop below. */
10
+ viewEdgesXml: XmlElement[];
9
11
  refObjectsXml: XmlElement[];
10
12
  /** Ids of diagram objects that passed validation and should be drawn (element-backed nodes only). */
11
13
  validElementNodeObjectIds: Set<string>;
@@ -13,6 +15,10 @@ export interface ViewBuildResult {
13
15
  validGroupObjectIds: Set<string>;
14
16
  /** Ids of notes that passed validation and should be drawn. */
15
17
  validNoteIds: Set<string>;
18
+ /** Ids of DiagramModelReference objects that passed validation and should be drawn. */
19
+ validViewReferenceObjectIds: Set<string>;
20
+ /** Archi connection id -> its ArchiMate:ViewEdge's own semantic XMA id, for graphical-writer's mm_semanticObject. */
21
+ viewEdgeSemanticIds: Map<string, number>;
16
22
  }
17
23
  /**
18
24
  * Builds one `AllView`'s `ViewGraphics` (Notes/Groups) and `RefObjects`
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view-writer.d.ts","sourceRoot":"","sources":["../../../src/serializer/view-writer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAElE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAI5E,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,UAAU,EAAE,CAAC;IAC9B,iHAAiH;IACjH,YAAY,EAAE,UAAU,EAAE,CAAC;IAC3B,aAAa,EAAE,UAAU,EAAE,CAAC;IAC5B,qGAAqG;IACrG,yBAAyB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACvC,+EAA+E;IAC/E,mBAAmB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACjC,+DAA+D;IAC/D,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B,uFAAuF;IACvF,2BAA2B,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACzC,qHAAqH;IACrH,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1C;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CACvB,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE,SAAS,EACf,GAAG,EAAE,aAAa,EAClB,MAAM,EAAE,aAAa,EACrB,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,mBAAmB,CAAC,EACxD,mBAAmB,EAAE,WAAW,CAAC,MAAM,EAAE,2BAA2B,CAAC,EACrE,WAAW,EAAE,mBAAmB,EAChC,QAAQ,EAAE,MAAM,GACf,eAAe,CAiPjB"}