@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,51 @@
1
+ import type { ArchiModel } 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
+ export interface SchemeBuild {
7
+ tag: string;
8
+ /** Ordered per {@link getSchemeCollectionOrder}; only collections that received at least one element are populated. */
9
+ collections: Map<string, {
10
+ name: string;
11
+ children: XmlElement[];
12
+ }>;
13
+ /** `<ArchiMate:Relations name="relations">` children — filled in by `relationship-writer`. */
14
+ relations: XmlElement[];
15
+ }
16
+ export interface SemanticBuildResult {
17
+ schemeBuilds: Map<string, SchemeBuild>;
18
+ /** Archi element id -> its resolved mapping, for elements that mapped successfully (feeds view/graphical writers). */
19
+ mappedElements: Map<string, ElementMappingEntry>;
20
+ /**
21
+ * `<ArchiMate:Junction>`/`<ArchiMate:OrJunction>` elements — these live in a
22
+ * root-level `<ArchiMate:Connectors>` container (a sibling of
23
+ * `AbstractSchemes` under `ArchiMateComponent`), never inside a layer
24
+ * scheme's element collections. Confirmed directly in both fixtures; see
25
+ * `tests/fixtures/README.md`.
26
+ */
27
+ rootConnectorsXml: XmlElement[];
28
+ }
29
+ /**
30
+ * Builds the per-scheme element collections (`<ArchiMate:BusinessActors>`
31
+ * etc.) for every `ArchiElement` in the model, regardless of whether it
32
+ * appears in the (single supported) view — semantic elements are model-wide,
33
+ * not view-scoped.
34
+ */
35
+ export declare function buildSemanticElements(model: ArchiModel, ids: XmaIdRegistry, diagnostics: DiagnosticCollector, language: string): SemanticBuildResult;
36
+ /**
37
+ * Renders a `SchemeBuild`'s children (an optional `nm` profile, then each
38
+ * populated collection in confirmed order, then `Relations` last) — the
39
+ * caller wraps these in the actual `<ArchiMate:{schemeTag} id="...">`
40
+ * element, since only the caller (`document-writer`) knows the scheme's
41
+ * allocated id.
42
+ *
43
+ * Every collection element (including `Relations`) carries its own `id` —
44
+ * confirmed against the real fixture (e.g. `ApplicationComponents id="222"`,
45
+ * `Relations id="72"`), unlike a bare element concept which doesn't need one
46
+ * beyond its own. Previously omitted here; Enterprise Studio rejected the
47
+ * resulting document outright ("could not generate the object: unknown
48
+ * type") rather than merely losing content.
49
+ */
50
+ export declare function renderSchemeChildren(build: SchemeBuild, nameProfile: XmlElement | null, ids: XmaIdRegistry): XmlElement[];
51
+ //# sourceMappingURL=semantic-writer.d.ts.map
@@ -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"}
@@ -13,6 +13,29 @@ import { buildProfileValues } from './profile-values.js';
13
13
  function junctionXmaType(el) {
14
14
  return el.junctionType === 'Or' ? 'OrJunction' : 'Junction';
15
15
  }
16
+ /**
17
+ * `archi-semantic-core` already defaults an unrecognized native junction
18
+ * `type` attribute to `'And'` rather than guessing (see its `junctionType`
19
+ * doc comment) — but it also preserves the original value verbatim in
20
+ * `rawJunctionType` specifically so a downstream consumer can tell "really
21
+ * absent/empty, the documented default" apart from "an unrecognized value
22
+ * that got silently defaulted". This reports the latter as a warning
23
+ * instead of drawing an `And` Junction with no indication anything was
24
+ * guessed.
25
+ */
26
+ function reportUnrecognizedJunctionType(el, diagnostics) {
27
+ if (el.junctionType !== 'And')
28
+ return;
29
+ const raw = el.rawJunctionType ?? '';
30
+ if (raw === '' || raw === 'or')
31
+ return;
32
+ diagnostics.warning({
33
+ code: 'unrecognized-junction-type',
34
+ 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.`,
35
+ entityId: el.id,
36
+ entityType: 'ArchiElement',
37
+ });
38
+ }
16
39
  /**
17
40
  * A `Junction`'s own `category`/`hasIcon` are never read: `graphical-writer`
18
41
  * draws Junctions via a dedicated, colorless node form (confirmed in both
@@ -83,6 +106,7 @@ export function buildSemanticElements(model, ids, diagnostics, language) {
83
106
  const mapping = junctionMappingEntry(el);
84
107
  mappedElements.set(el.id, mapping);
85
108
  reportAncillaryLossWarnings(el, diagnostics);
109
+ reportUnrecognizedJunctionType(el, diagnostics);
86
110
  const xmaId = ids.idFor(el.id);
87
111
  rootConnectorsXml.push(element(`ArchiMate:${mapping.xmaType}`, [['id', String(xmaId)]], [
88
112
  buildProfileValues(language, el.name ?? '', el.documentation),
@@ -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,29 @@
1
+ import type { ArchiModel } from '@cda/archi-semantic-core';
2
+ import { type XmaDiagnostic } from '../diagnostics/diagnostics.js';
3
+ export interface XmaSerializeOptions {
4
+ /** BCP-47-ish language code applied to every `xml:lang` and the default `MM_Language`. Defaults to `'en'`. Never inferred from content. */
5
+ language?: string;
6
+ /** The root `MM_ModelPackage`'s display name. Defaults to a neutral, deterministic placeholder (no machine/user identity is ever fabricated). */
7
+ packageName?: string;
8
+ /** The model's display name (used for both the `ArchiMateMM_Model` and root component profile values). Defaults to `model.metadata.name`. */
9
+ modelName?: string;
10
+ }
11
+ /**
12
+ * Serializes an `ArchiModel` (from `@cda/archi-semantic-core`) into an XMA
13
+ * document string.
14
+ *
15
+ * Strict by default: if any construct in the model would be silently lost
16
+ * (an unsupported element/relationship type, a second view, incomplete
17
+ * geometry, ...) this throws `XmaSerializationError` carrying the full
18
+ * structured diagnostic list, rather than producing an approximate or
19
+ * partial XMA document. Use `inspectXmaSupport` to preview what would be
20
+ * unsupported without throwing.
21
+ */
22
+ export declare function serializeXma(model: ArchiModel, options?: XmaSerializeOptions): string;
23
+ /**
24
+ * Non-mutating diagnostic pass: reports every construct in `model` that
25
+ * `serializeXma` would refuse to convert, without throwing and without
26
+ * requiring the model to be fully convertible.
27
+ */
28
+ export declare function inspectXmaSupport(model: ArchiModel, options?: XmaSerializeOptions): XmaDiagnostic[];
29
+ //# sourceMappingURL=serialize-xma.d.ts.map
@@ -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"}
@@ -8,19 +8,58 @@ import { buildView } from './view-writer.js';
8
8
  import { buildGraphicalModule } from './graphical-writer.js';
9
9
  import { buildXmaDocument } from './document-writer.js';
10
10
  const DEFAULT_PACKAGE_NAME = 'CDA XMA Package';
11
+ const REQUIRED_MODEL_ARRAY_FIELDS = [
12
+ 'elements',
13
+ 'relationships',
14
+ 'views',
15
+ 'diagramObjects',
16
+ 'diagramConnections',
17
+ 'notes',
18
+ 'folders',
19
+ ];
20
+ /**
21
+ * `ArchiModel`'s shape is only enforced by TypeScript at compile time. A
22
+ * caller passing `null`/`undefined`, or an object missing a collection,
23
+ * would otherwise hit the first `.map()`/`.filter()` deep inside a writer
24
+ * and get a raw `Cannot read properties of undefined` — not an actionable
25
+ * error for a public library API. This is a caller-contract violation, not
26
+ * a "construct XMA can't represent" diagnostic, so it throws directly
27
+ * instead of going through `DiagnosticCollector`/`XmaSerializationError`.
28
+ */
29
+ function assertValidModelShape(model) {
30
+ if (typeof model !== 'object' || model === null) {
31
+ throw new TypeError(`serializeXma: expected an ArchiModel object, got ${model === null ? 'null' : typeof model}.`);
32
+ }
33
+ if (typeof model.metadata !== 'object' || model.metadata === null) {
34
+ throw new TypeError('serializeXma: model.metadata is missing or invalid — expected an ArchiModel.');
35
+ }
36
+ for (const field of REQUIRED_MODEL_ARRAY_FIELDS) {
37
+ if (!Array.isArray(model[field])) {
38
+ throw new TypeError(`serializeXma: model.${field} is missing or not an array — expected an ArchiModel.`);
39
+ }
40
+ }
41
+ }
11
42
  function planXmaDocument(model, options) {
43
+ assertValidModelShape(model);
12
44
  const diagnostics = new DiagnosticCollector();
13
45
  const language = options?.language ?? 'en';
14
46
  const modelName = options?.modelName ?? model.metadata.name;
15
47
  const packageName = options?.packageName ?? DEFAULT_PACKAGE_NAME;
16
48
  const allocator = new XmaIdAllocator();
17
49
  const ids = new XmaIdRegistry(allocator);
18
- const refIds = new XmaIdRegistry(allocator);
19
50
  const { schemeBuilds, mappedElements, rootConnectorsXml } = buildSemanticElements(model, ids, diagnostics, language);
20
51
  const elementIndex = new Map(model.elements.map((e) => [e.id, e]));
21
52
  const relationshipIndex = new Map(model.relationships.map((r) => [r.id, r]));
22
53
  const { mappedRelationships, rootRelationsXml } = buildSemanticRelationships(model, ids, elementIndex, relationshipIndex, mappedElements, schemeBuilds, diagnostics);
23
54
  const builtViews = model.views.map((view) => {
55
+ // A fresh RefObjects registry per view — confirmed against the sabsa
56
+ // fixture (38 views): each `AllView`'s `RefObjects` is self-contained,
57
+ // so an element referenced from multiple views gets its own ref id in
58
+ // each one (840 total Ref elements for 735 distinct semantic targets in
59
+ // sabsa.xma, never a ref id reused across two views). A shared registry
60
+ // would leave every view after the first missing Ref entries for
61
+ // elements first seen in an earlier view.
62
+ const refIds = new XmaIdRegistry(allocator);
24
63
  const viewResult = buildView(model, view, ids, refIds, mappedElements, mappedRelationships, diagnostics, language);
25
64
  const { diagramXml } = buildGraphicalModule(model, view, ids, refIds, allocator, mappedElements, mappedRelationships, viewResult, diagnostics);
26
65
  return { view, viewResult, graphicalDiagramXml: diagramXml };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialize-xma.js","sourceRoot":"","sources":["../../../src/serializer/serialize-xma.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type { ArchiModel, ArchiView } 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 { ResolvedRelationshipMapping } from './relationship-writer.js';
7
+ export interface ViewBuildResult {
8
+ viewGraphicsXml: XmlElement[];
9
+ /** `<ArchiMate:ViewEdge>` elements for this view's purely-visual connections — see the connection loop below. */
10
+ viewEdgesXml: XmlElement[];
11
+ refObjectsXml: XmlElement[];
12
+ /** Ids of diagram objects that passed validation and should be drawn (element-backed nodes only). */
13
+ validElementNodeObjectIds: Set<string>;
14
+ /** Ids of Group diagram objects that passed validation and should be drawn. */
15
+ validGroupObjectIds: Set<string>;
16
+ /** Ids of notes that passed validation and should be drawn. */
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>;
22
+ }
23
+ /**
24
+ * Builds one `AllView`'s `ViewGraphics` (Notes/Groups) and `RefObjects`
25
+ * (the three-layer view-reference indirection — see module docs on
26
+ * `graphical-writer.ts`). Also validates every diagram object/note/connection
27
+ * in the view, since geometry and view membership are model-wide
28
+ * preservation guarantees, not just node drawing concerns. Nested diagram
29
+ * objects (a `parentId` or non-empty `childrenIds`) are valid here — see
30
+ * `graphical-writer.ts`'s recursive node building for how nesting is drawn.
31
+ */
32
+ export declare function buildView(model: ArchiModel, view: ArchiView, ids: XmaIdRegistry, refIds: XmaIdRegistry, mappedElements: ReadonlyMap<string, ElementMappingEntry>, mappedRelationships: ReadonlyMap<string, ResolvedRelationshipMapping>, diagnostics: DiagnosticCollector, language: string): ViewBuildResult;
33
+ //# sourceMappingURL=view-writer.d.ts.map
@@ -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"}
@@ -0,0 +1,236 @@
1
+ import { element } from '../infrastructure/xml-writer.js';
2
+ import { buildProfileValues } from './profile-values.js';
3
+ import { hasCompleteBounds } from '../geometry/geometry.js';
4
+ /**
5
+ * Builds one `AllView`'s `ViewGraphics` (Notes/Groups) and `RefObjects`
6
+ * (the three-layer view-reference indirection — see module docs on
7
+ * `graphical-writer.ts`). Also validates every diagram object/note/connection
8
+ * in the view, since geometry and view membership are model-wide
9
+ * preservation guarantees, not just node drawing concerns. Nested diagram
10
+ * objects (a `parentId` or non-empty `childrenIds`) are valid here — see
11
+ * `graphical-writer.ts`'s recursive node building for how nesting is drawn.
12
+ */
13
+ export function buildView(model, view, ids, refIds, mappedElements, mappedRelationships, diagnostics, language) {
14
+ const viewGraphicsXml = [];
15
+ const viewEdgesXml = [];
16
+ const refObjectsXml = [];
17
+ const validElementNodeObjectIds = new Set();
18
+ const validGroupObjectIds = new Set();
19
+ const validNoteIds = new Set();
20
+ const validViewReferenceObjectIds = new Set();
21
+ const viewEdgeSemanticIds = new Map();
22
+ const viewIds = new Set(model.views.map((v) => v.id));
23
+ const diagramObjectById = new Map(model.diagramObjects.map((o) => [o.id, o]));
24
+ /**
25
+ * Resolves the semantic XMA id a diagram object (or note) uses for its
26
+ * *own* node's `mm_semanticObject` — confirmed (across an
27
+ * element-backed/Group/Note/DiagramModelReference mix, in two independent
28
+ * fixtures) to be exactly the value an `ArchiMate:ViewEdge`'s `from`/`to`
29
+ * references for that same object. `undefined` when the id isn't a
30
+ * validated, drawable object/note in this view.
31
+ */
32
+ function resolveObjectSemanticId(objectOrNoteId) {
33
+ if (validElementNodeObjectIds.has(objectOrNoteId)) {
34
+ const archimateElementId = diagramObjectById.get(objectOrNoteId)?.archimateElementId;
35
+ return archimateElementId ? refIds.get(archimateElementId) : undefined;
36
+ }
37
+ if (validGroupObjectIds.has(objectOrNoteId) || validNoteIds.has(objectOrNoteId)) {
38
+ return ids.get(objectOrNoteId);
39
+ }
40
+ if (validViewReferenceObjectIds.has(objectOrNoteId)) {
41
+ const referencedModelId = diagramObjectById.get(objectOrNoteId)?.referencedModelId;
42
+ return referencedModelId ? refIds.get(referencedModelId) : undefined;
43
+ }
44
+ return undefined;
45
+ }
46
+ for (const obj of model.diagramObjects) {
47
+ if (obj.viewId !== view.id) {
48
+ continue;
49
+ }
50
+ if (obj.referencedModelId !== null) {
51
+ // Corrected finding: an earlier version of this comment claimed "no
52
+ // trace whatsoever" of a DiagramModelReference in the real XMA export,
53
+ // based on grepping for Archi's own string id — which can never match
54
+ // anything, since XMA never reuses Archi's ids (see id-allocator.ts).
55
+ // That verification method was broken, not the underlying claim.
56
+ // Re-verified directly against agile-manifesto.xma: both
57
+ // DiagramModelReference objects there ARE drawn, as an
58
+ // `mm_concept="AllView"`/`mm_graphicType="3"` node whose
59
+ // `mm_semanticObject` resolves — via an `ArchiMate:AllViewRef`, the
60
+ // same Ref-layer indirection used for every other element/relationship
61
+ // — to the *referenced view's own* `ArchiMate:AllView` id (no new
62
+ // semantic concept is minted for the reference itself). See
63
+ // `graphical-writer.ts`'s `buildViewReferenceNode`.
64
+ //
65
+ // This only resolves when the reference targets another `ArchiView` in
66
+ // *this* model. `referencedModelId` can also point at a Sketch/Canvas
67
+ // view (per `archi-semantic-core`'s docs on the field) — archi-mate has
68
+ // no XMA representation at all, so that case remains genuinely
69
+ // unsupported.
70
+ if (!hasCompleteBounds(obj.bounds)) {
71
+ diagnostics.error({
72
+ code: 'missing-bounds',
73
+ message: `Diagram object "${obj.id}" has incomplete geometry (x/y/width/height) and cannot be positioned in XMA.`,
74
+ entityId: obj.id,
75
+ entityType: 'ArchiDiagramObject',
76
+ });
77
+ continue;
78
+ }
79
+ if (!viewIds.has(obj.referencedModelId)) {
80
+ diagnostics.warning({
81
+ code: 'unsupported-diagram-model-reference',
82
+ message: `Diagram object "${obj.id}" references a view/model ("${obj.referencedModelId}") not among this model's own ArchiMate views (e.g. a Sketch/Canvas) — not representable in XMA and was omitted.`,
83
+ entityId: obj.id,
84
+ entityType: 'ArchiDiagramObject',
85
+ });
86
+ continue;
87
+ }
88
+ if (!refIds.has(obj.referencedModelId)) {
89
+ const refId = refIds.idFor(obj.referencedModelId);
90
+ refObjectsXml.push(element('ArchiMate:AllViewRef', [
91
+ ['id', String(refId)],
92
+ ['to', String(ids.idFor(obj.referencedModelId))],
93
+ ]));
94
+ }
95
+ validViewReferenceObjectIds.add(obj.id);
96
+ continue;
97
+ }
98
+ if (obj.archimateElementId === null) {
99
+ if (obj.xsiType !== 'archimate:Group') {
100
+ diagnostics.error({
101
+ code: 'unsupported-diagram-object',
102
+ message: `Diagram object "${obj.id}" (${obj.xsiType}) has no backing semantic element and is not a recognized Group — not supported in XMA v0.1.`,
103
+ entityId: obj.id,
104
+ entityType: 'ArchiDiagramObject',
105
+ });
106
+ continue;
107
+ }
108
+ if (!hasCompleteBounds(obj.bounds)) {
109
+ diagnostics.error({
110
+ code: 'missing-bounds',
111
+ message: `Group "${obj.id}" has incomplete geometry (x/y/width/height) and cannot be positioned in XMA.`,
112
+ entityId: obj.id,
113
+ entityType: 'ArchiDiagramObject',
114
+ });
115
+ continue;
116
+ }
117
+ const groupXmaId = ids.idFor(obj.id);
118
+ viewGraphicsXml.push(element('ArchiMate:ViewGraphic', [['id', String(groupXmaId)]], [
119
+ buildProfileValues(language, obj.name ?? '', obj.documentation),
120
+ ]));
121
+ validGroupObjectIds.add(obj.id);
122
+ continue;
123
+ }
124
+ // Element-backed diagram object.
125
+ if (!hasCompleteBounds(obj.bounds)) {
126
+ diagnostics.error({
127
+ code: 'missing-bounds',
128
+ message: `Diagram object "${obj.id}" has incomplete geometry (x/y/width/height) and cannot be positioned in XMA.`,
129
+ entityId: obj.id,
130
+ entityType: 'ArchiDiagramObject',
131
+ });
132
+ continue;
133
+ }
134
+ const mapping = mappedElements.get(obj.archimateElementId);
135
+ if (!mapping) {
136
+ // The backing element already produced an unsupported-element-type diagnostic.
137
+ continue;
138
+ }
139
+ if (!refIds.has(obj.archimateElementId)) {
140
+ const refId = refIds.idFor(obj.archimateElementId);
141
+ refObjectsXml.push(element(`ArchiMate:${mapping.xmaType}Ref`, [
142
+ ['id', String(refId)],
143
+ ['to', String(ids.idFor(obj.archimateElementId))],
144
+ ]));
145
+ }
146
+ validElementNodeObjectIds.add(obj.id);
147
+ }
148
+ for (const note of model.notes) {
149
+ if (note.viewId !== view.id) {
150
+ continue;
151
+ }
152
+ if (note.parentId !== null) {
153
+ // Unlike nested ArchiDiagramObjects (supported — see graphical-writer.ts's
154
+ // buildNodeTree), a nested Note has no fixture evidence: only one instance
155
+ // exists across all four fixtures, not enough to confirm its representation.
156
+ diagnostics.error({
157
+ code: 'unsupported-nested-diagram-object',
158
+ message: `Note "${note.id}" is nested inside another diagram object — not supported in XMA v0.1.`,
159
+ entityId: note.id,
160
+ entityType: 'ArchiNote',
161
+ });
162
+ continue;
163
+ }
164
+ if (!hasCompleteBounds(note.bounds)) {
165
+ diagnostics.error({
166
+ code: 'missing-bounds',
167
+ message: `Note "${note.id}" has incomplete geometry (x/y/width/height) and cannot be positioned in XMA.`,
168
+ entityId: note.id,
169
+ entityType: 'ArchiNote',
170
+ });
171
+ continue;
172
+ }
173
+ const noteXmaId = ids.idFor(note.id);
174
+ viewGraphicsXml.push(element('ArchiMate:ViewGraphic', [['id', String(noteXmaId)]], [buildProfileValues(language, note.content ?? '')]));
175
+ validNoteIds.add(note.id);
176
+ }
177
+ for (const connection of model.diagramConnections) {
178
+ if (connection.viewId !== view.id) {
179
+ continue;
180
+ }
181
+ if (connection.archimateRelationshipId === null) {
182
+ // A purely-visual connection (no underlying ArchiMate relationship).
183
+ // Confirmed against two independent real instances — agile-manifesto
184
+ // (between two DiagramModelReferences) and sabsa (between a
185
+ // Note/Group and a BusinessRole element) — that Archi represents
186
+ // this as an ArchiMate:ViewEdge, whose from/to are exactly each
187
+ // endpoint's own semantic id (the same value already used as that
188
+ // endpoint's own node's mm_semanticObject — see
189
+ // resolveObjectSemanticId above). Falls back to the pre-existing
190
+ // diagnostic when either endpoint isn't itself a drawable object —
191
+ // that remains a genuinely unsupported case, not guessed either way.
192
+ const fromSemanticId = resolveObjectSemanticId(connection.sourceId);
193
+ const toSemanticId = resolveObjectSemanticId(connection.targetId);
194
+ if (fromSemanticId === undefined || toSemanticId === undefined) {
195
+ diagnostics.error({
196
+ code: 'unsupported-connection-no-relationship',
197
+ message: `Connection "${connection.id}" has no underlying semantic relationship (a purely visual connector) and at least one endpoint is not a drawable object — not supported in XMA v0.1.`,
198
+ entityId: connection.id,
199
+ entityType: 'ArchiDiagramConnection',
200
+ });
201
+ continue;
202
+ }
203
+ const viewEdgeId = ids.idFor(connection.id);
204
+ viewEdgesXml.push(element('ArchiMate:ViewEdge', [
205
+ ['id', String(viewEdgeId)],
206
+ ['from', String(fromSemanticId)],
207
+ ['to', String(toSemanticId)],
208
+ ]));
209
+ viewEdgeSemanticIds.set(connection.id, viewEdgeId);
210
+ continue;
211
+ }
212
+ const mapping = mappedRelationships.get(connection.archimateRelationshipId);
213
+ if (!mapping) {
214
+ // The underlying relationship already produced its own diagnostic.
215
+ continue;
216
+ }
217
+ if (!refIds.has(connection.archimateRelationshipId)) {
218
+ const refId = refIds.idFor(connection.archimateRelationshipId);
219
+ refObjectsXml.push(element(`ArchiMate:${mapping.xmaType}Ref`, [
220
+ ['id', String(refId)],
221
+ ['to', String(ids.idFor(connection.archimateRelationshipId))],
222
+ ]));
223
+ }
224
+ }
225
+ return {
226
+ viewGraphicsXml,
227
+ viewEdgesXml,
228
+ refObjectsXml,
229
+ validElementNodeObjectIds,
230
+ validGroupObjectIds,
231
+ validNoteIds,
232
+ validViewReferenceObjectIds,
233
+ viewEdgeSemanticIds,
234
+ };
235
+ }
236
+ //# sourceMappingURL=view-writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view-writer.js","sourceRoot":"","sources":["../../../src/serializer/view-writer.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cda/adapter-xma",
3
- "version": "0.4.3",
3
+ "version": "0.6.0",
4
4
  "description": "XMA output adapter for the Continuous-Driven Architecture (CDA) ecosystem. Serializes the ArchiModel produced by @cda/archi-semantic-core into an XMA document.",
5
5
  "keywords": [
6
6
  "archimate",
@@ -14,12 +14,14 @@
14
14
  "engines": {
15
15
  "node": "^20.0.0 || ^22.0.0 || >=24.0.0"
16
16
  },
17
- "main": "./dist/index.js",
18
- "types": "./dist/index.d.ts",
17
+ "main": "./dist/cjs/index.js",
18
+ "module": "./dist/esm/index.js",
19
+ "types": "./dist/esm/index.d.ts",
19
20
  "exports": {
20
21
  ".": {
21
- "types": "./dist/index.d.ts",
22
- "import": "./dist/index.js"
22
+ "types": "./dist/esm/index.d.ts",
23
+ "import": "./dist/esm/index.js",
24
+ "require": "./dist/cjs/index.js"
23
25
  }
24
26
  },
25
27
  "files": [
@@ -32,24 +34,33 @@
32
34
  "sideEffects": false,
33
35
  "scripts": {
34
36
  "typecheck": "tsc --noEmit",
35
- "build": "tsc -p tsconfig.build.json",
37
+ "lint": "eslint .",
38
+ "build": "tsc -p tsconfig.build.esm.json && tsc -p tsconfig.build.cjs.json && node scripts/write-cjs-package-json.mjs",
36
39
  "test": "vitest run",
37
40
  "test:watch": "vitest",
38
- "prepublishOnly": "npm run typecheck && npm run build && npm test"
41
+ "test:coverage": "vitest run --coverage",
42
+ "prepublishOnly": "npm run typecheck && npm run lint && npm run build && npm test",
43
+ "prepare": "husky"
39
44
  },
40
45
  "peerDependencies": {
41
- "@cda/archi-semantic-core": ">=0.4.1"
46
+ "@cda/archi-semantic-core": "^0.4.1"
42
47
  },
43
48
  "devDependencies": {
44
- "@cda/archi-semantic-core": "^0.4.2",
49
+ "@cda/archi-semantic-core": "^0.4.3",
50
+ "@eslint/js": "^10.0.1",
45
51
  "@semantic-release/changelog": "^7.0.0",
46
52
  "@semantic-release/git": "^11.0.1",
47
53
  "@semantic-release/github": "^12.0.9",
48
54
  "@types/node": "^24.0.0",
55
+ "@vitest/coverage-v8": "^4.1.11",
49
56
  "conventional-changelog-conventionalcommits": "^9.3.1",
57
+ "eslint": "^10.8.1",
50
58
  "fast-xml-parser": "^5.10.1",
59
+ "globals": "^17.11.0",
60
+ "husky": "^9.1.7",
51
61
  "semantic-release": "^25.0.9",
52
62
  "typescript": "5.9.3",
63
+ "typescript-eslint": "^8.67.0",
53
64
  "vitest": "^4.1.10"
54
65
  },
55
66
  "repository": {
@@ -1 +0,0 @@
1
- {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/diagnostics/diagnostics.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,SAAS,CAAC;AAExD,MAAM,WAAW,aAAa;IAC5B,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,qBAAqB,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,uGAAuG;IACvG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qFAAqF;IACrF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,kEAAkE;AAClE,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuB;IAE7C,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,GAAG,IAAI;IAIxD,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,GAAG,IAAI;IAI1D,IAAI,GAAG,IAAI,aAAa,EAAE,CAEzB;IAED,IAAI,SAAS,IAAI,OAAO,CAEvB;CACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/diagnostics/diagnostics.ts"],"names":[],"mappings":"AAaA,kEAAkE;AAClE,MAAM,OAAO,mBAAmB;IAAhC;QACmB,UAAK,GAAoB,EAAE,CAAC;IAiB/C,CAAC;IAfC,KAAK,CAAC,UAA2C;QAC/C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,CAAC,UAA2C;QACjD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,GAAG;QACL,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;IACxD,CAAC;CACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/diagnostics/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD;;;;;;GAMG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,WAAW,EAAE,aAAa,EAAE,CAAC;gBAE1B,WAAW,EAAE,aAAa,EAAE;CAYzC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/diagnostics/errors.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAG9C,YAAY,WAA4B;QACtC,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,MAAM,CAAC;QAC5E,KAAK,CACH,6BAA6B,UAAU,uEAAuE;YAC5G,WAAW;iBACR,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC;iBACrC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;iBACtC,IAAI,CAAC,IAAI,CAAC,CAChB,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;QACpC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;CACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"bendpoints.d.ts","sourceRoot":"","sources":["../../src/geometry/bendpoints.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAKjD,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,aAAa,GAAG,aAAa,CAAC;AAExE,MAAM,WAAW,mBAAmB;IAClC,sEAAsE;IACtE,KAAK,EAAE,KAAK,CAAC;IACb,SAAS,EAAE,kBAAkB,CAAC;IAC9B,wGAAwG;IACxG,QAAQ,CAAC,EAAE;QACT,UAAU,EAAE,KAAK,CAAC;QAClB,UAAU,EAAE,KAAK,CAAC;KACnB,CAAC;CACH;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE;IAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EACrG,YAAY,EAAE,IAAI,EAClB,YAAY,EAAE,IAAI,GACjB,mBAAmB,GAAG,IAAI,CAgC5B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"bendpoints.js","sourceRoot":"","sources":["../../src/geometry/bendpoints.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAe/B;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,gBAAgB,CAC9B,SAAqG,EACrG,YAAkB,EAClB,YAAkB;IAElB,MAAM,eAAe,GAAG,SAAS,CAAC,MAAM,KAAK,IAAI,IAAI,SAAS,CAAC,MAAM,KAAK,IAAI,CAAC;IAC/E,MAAM,eAAe,GAAG,SAAS,CAAC,IAAI,KAAK,IAAI,IAAI,SAAS,CAAC,IAAI,KAAK,IAAI,CAAC;IAE3E,IAAI,CAAC,eAAe,IAAI,CAAC,eAAe,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;IAC5C,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;IAE5C,MAAM,UAAU,GAAiB,eAAe;QAC9C,CAAC,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC,GAAI,SAAS,CAAC,MAAiB,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC,GAAI,SAAS,CAAC,MAAiB,EAAE;QACxG,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,UAAU,GAAiB,eAAe;QAC9C,CAAC,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC,GAAI,SAAS,CAAC,IAAe,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC,GAAI,SAAS,CAAC,IAAe,EAAE;QACpG,CAAC,CAAC,IAAI,CAAC;IAET,IAAI,UAAU,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QACrD,IAAI,MAAM,GAAG,iBAAiB,IAAI,MAAM,GAAG,iBAAiB,EAAE,CAAC;YAC7D,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,CAAC;QACxF,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IAClD,CAAC;IAED,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;IACzD,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,UAAmB,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;AAClE,CAAC"}