@cda/adapter-xma 0.1.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 (78) hide show
  1. package/README.md +192 -0
  2. package/dist/diagnostics/diagnostics.d.ts +20 -0
  3. package/dist/diagnostics/diagnostics.d.ts.map +1 -0
  4. package/dist/diagnostics/diagnostics.js +19 -0
  5. package/dist/diagnostics/diagnostics.js.map +1 -0
  6. package/dist/diagnostics/errors.d.ts +13 -0
  7. package/dist/diagnostics/errors.d.ts.map +1 -0
  8. package/dist/diagnostics/errors.js +20 -0
  9. package/dist/diagnostics/errors.js.map +1 -0
  10. package/dist/geometry/bendpoints.d.ts +33 -0
  11. package/dist/geometry/bendpoints.d.ts.map +1 -0
  12. package/dist/geometry/bendpoints.js +44 -0
  13. package/dist/geometry/bendpoints.js.map +1 -0
  14. package/dist/geometry/geometry.d.ts +36 -0
  15. package/dist/geometry/geometry.d.ts.map +1 -0
  16. package/dist/geometry/geometry.js +41 -0
  17. package/dist/geometry/geometry.js.map +1 -0
  18. package/dist/index.d.ts +5 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +3 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/infrastructure/id-allocator.d.ts +34 -0
  23. package/dist/infrastructure/id-allocator.d.ts.map +1 -0
  24. package/dist/infrastructure/id-allocator.js +54 -0
  25. package/dist/infrastructure/id-allocator.js.map +1 -0
  26. package/dist/infrastructure/xml-writer.d.ts +20 -0
  27. package/dist/infrastructure/xml-writer.d.ts.map +1 -0
  28. package/dist/infrastructure/xml-writer.js +54 -0
  29. package/dist/infrastructure/xml-writer.js.map +1 -0
  30. package/dist/mapping/element-mapping.d.ts +31 -0
  31. package/dist/mapping/element-mapping.d.ts.map +1 -0
  32. package/dist/mapping/element-mapping.js +112 -0
  33. package/dist/mapping/element-mapping.js.map +1 -0
  34. package/dist/mapping/relationship-mapping.d.ts +21 -0
  35. package/dist/mapping/relationship-mapping.d.ts.map +1 -0
  36. package/dist/mapping/relationship-mapping.js +45 -0
  37. package/dist/mapping/relationship-mapping.js.map +1 -0
  38. package/dist/mapping/scheme-mapping.d.ts +38 -0
  39. package/dist/mapping/scheme-mapping.d.ts.map +1 -0
  40. package/dist/mapping/scheme-mapping.js +39 -0
  41. package/dist/mapping/scheme-mapping.js.map +1 -0
  42. package/dist/mapping/visual-mapping.d.ts +24 -0
  43. package/dist/mapping/visual-mapping.d.ts.map +1 -0
  44. package/dist/mapping/visual-mapping.js +39 -0
  45. package/dist/mapping/visual-mapping.js.map +1 -0
  46. package/dist/serializer/document-writer.d.ts +19 -0
  47. package/dist/serializer/document-writer.d.ts.map +1 -0
  48. package/dist/serializer/document-writer.js +126 -0
  49. package/dist/serializer/document-writer.js.map +1 -0
  50. package/dist/serializer/graphical-writer.d.ts +25 -0
  51. package/dist/serializer/graphical-writer.d.ts.map +1 -0
  52. package/dist/serializer/graphical-writer.js +287 -0
  53. package/dist/serializer/graphical-writer.js.map +1 -0
  54. package/dist/serializer/profile-values.d.ts +8 -0
  55. package/dist/serializer/profile-values.d.ts.map +1 -0
  56. package/dist/serializer/profile-values.js +25 -0
  57. package/dist/serializer/profile-values.js.map +1 -0
  58. package/dist/serializer/relationship-writer.d.ts +15 -0
  59. package/dist/serializer/relationship-writer.d.ts.map +1 -0
  60. package/dist/serializer/relationship-writer.js +83 -0
  61. package/dist/serializer/relationship-writer.js.map +1 -0
  62. package/dist/serializer/rtf.d.ts +9 -0
  63. package/dist/serializer/rtf.d.ts.map +1 -0
  64. package/dist/serializer/rtf.js +50 -0
  65. package/dist/serializer/rtf.js.map +1 -0
  66. package/dist/serializer/semantic-writer.d.ts +36 -0
  67. package/dist/serializer/semantic-writer.d.ts.map +1 -0
  68. package/dist/serializer/semantic-writer.js +91 -0
  69. package/dist/serializer/semantic-writer.js.map +1 -0
  70. package/dist/serializer/serialize-xma.d.ts +29 -0
  71. package/dist/serializer/serialize-xma.d.ts.map +1 -0
  72. package/dist/serializer/serialize-xma.js +80 -0
  73. package/dist/serializer/serialize-xma.js.map +1 -0
  74. package/dist/serializer/view-writer.d.ts +26 -0
  75. package/dist/serializer/view-writer.d.ts.map +1 -0
  76. package/dist/serializer/view-writer.js +147 -0
  77. package/dist/serializer/view-writer.js.map +1 -0
  78. package/package.json +58 -0
@@ -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,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":"AAmCA;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Deterministic, dependency-free RTF encoding for Archi `documentation`
3
+ * text, used as the `doc` profile value's content.
4
+ *
5
+ * RTF control characters (`\\`, `{`, `}`) are escaped, line breaks become
6
+ * `\par`, and every non-ASCII / control code unit is escaped as a signed
7
+ * `\uN?` Unicode destination (RTF 1.5+, one fallback byte per `\uc1`) rather
8
+ * than interpolated raw — this keeps the output valid RTF regardless of
9
+ * source locale (Spanish, accented Latin text, etc.) without guessing a
10
+ * target ANSI code page.
11
+ */
12
+ function escapeRtfBody(text) {
13
+ const normalized = text.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
14
+ const out = [];
15
+ for (let i = 0; i < normalized.length; i += 1) {
16
+ const ch = normalized[i];
17
+ const code = normalized.charCodeAt(i);
18
+ if (ch === '\n') {
19
+ out.push('\\par\n');
20
+ }
21
+ else if (ch === '\\') {
22
+ out.push('\\\\');
23
+ }
24
+ else if (ch === '{') {
25
+ out.push('\\{');
26
+ }
27
+ else if (ch === '}') {
28
+ out.push('\\}');
29
+ }
30
+ else if (code >= 0x20 && code <= 0x7e) {
31
+ out.push(ch);
32
+ }
33
+ else {
34
+ const signed = code > 0x7fff ? code - 0x10000 : code;
35
+ out.push(`\\u${signed}?`);
36
+ }
37
+ }
38
+ return out.join('');
39
+ }
40
+ /**
41
+ * Wraps escaped documentation text into an RTF document, matching the exact
42
+ * minimal shape confirmed by both reference fixtures: `{\rtf1 <text>}`, with
43
+ * no additional header control words — the reference tool emits nothing
44
+ * beyond that, and RTF 1.5+'s `\uN` Unicode escapes are valid on their own
45
+ * (the per-`\u` fallback byte count defaults to 1 with no `\ucN` present).
46
+ */
47
+ export function toRtfDocument(text) {
48
+ return `{\\rtf1 ${escapeRtfBody(text)}}`;
49
+ }
50
+ //# sourceMappingURL=rtf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rtf.js","sourceRoot":"","sources":["../../src/serializer/rtf.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;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"}
@@ -0,0 +1,36 @@
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
+ /**
22
+ * Builds the per-scheme element collections (`<ArchiMate:BusinessActors>`
23
+ * etc.) for every `ArchiElement` in the model, regardless of whether it
24
+ * appears in the (single supported) view — semantic elements are model-wide,
25
+ * not view-scoped.
26
+ */
27
+ export declare function buildSemanticElements(model: ArchiModel, ids: XmaIdRegistry, diagnostics: DiagnosticCollector, language: string): SemanticBuildResult;
28
+ /**
29
+ * Renders a `SchemeBuild`'s children (an optional `nm` profile, then each
30
+ * populated collection in confirmed order, then `Relations` last) — the
31
+ * caller wraps these in the actual `<ArchiMate:{schemeTag} id="...">`
32
+ * element, since only the caller (`document-writer`) knows the scheme's
33
+ * allocated id.
34
+ */
35
+ export declare function renderSchemeChildren(build: SchemeBuild, nameProfile: XmlElement | null): XmlElement[];
36
+ //# 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;CAClD;AAuCD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,UAAU,EACjB,GAAG,EAAE,aAAa,EAClB,WAAW,EAAE,mBAAmB,EAChC,QAAQ,EAAE,MAAM,GACf,mBAAmB,CA8BrB;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,GAAG,IAAI,GAAG,UAAU,EAAE,CAgBrG"}
@@ -0,0 +1,91 @@
1
+ import { element } from '../infrastructure/xml-writer.js';
2
+ import { getSchemeCollectionOrder, lookupElementMapping } from '../mapping/element-mapping.js';
3
+ import { buildProfileValues } from './profile-values.js';
4
+ function getOrCreateScheme(schemeBuilds, tag) {
5
+ let build = schemeBuilds.get(tag);
6
+ if (!build) {
7
+ build = { tag, collections: new Map(), relations: [] };
8
+ schemeBuilds.set(tag, build);
9
+ }
10
+ return build;
11
+ }
12
+ function reportUnsupportedElement(element, diagnostics) {
13
+ diagnostics.error({
14
+ code: 'unsupported-element-type',
15
+ message: `Archi element type "${element.type}" has no confirmed XMA mapping and would be silently lost.`,
16
+ entityId: element.id,
17
+ entityType: 'ArchiElement',
18
+ });
19
+ }
20
+ function reportAncillaryLossWarnings(el, diagnostics) {
21
+ if (el.properties.length > 0) {
22
+ diagnostics.warning({
23
+ code: 'unsupported-properties',
24
+ message: `Element "${el.name ?? el.id}" has ${el.properties.length} propert${el.properties.length === 1 ? 'y' : 'ies'} not represented in XMA v0.1.`,
25
+ entityId: el.id,
26
+ entityType: 'ArchiElement',
27
+ });
28
+ }
29
+ if (el.profiles.length > 0) {
30
+ diagnostics.warning({
31
+ code: 'unsupported-profile',
32
+ message: `Element "${el.name ?? el.id}" references ${el.profiles.length} profile(s)/specialization(s) not represented in XMA v0.1.`,
33
+ entityId: el.id,
34
+ entityType: 'ArchiElement',
35
+ });
36
+ }
37
+ }
38
+ /**
39
+ * Builds the per-scheme element collections (`<ArchiMate:BusinessActors>`
40
+ * etc.) for every `ArchiElement` in the model, regardless of whether it
41
+ * appears in the (single supported) view — semantic elements are model-wide,
42
+ * not view-scoped.
43
+ */
44
+ export function buildSemanticElements(model, ids, diagnostics, language) {
45
+ const schemeBuilds = new Map();
46
+ const mappedElements = new Map();
47
+ for (const el of model.elements) {
48
+ const mapping = lookupElementMapping(el.type);
49
+ if (!mapping) {
50
+ reportUnsupportedElement(el, diagnostics);
51
+ continue;
52
+ }
53
+ mappedElements.set(el.id, mapping);
54
+ reportAncillaryLossWarnings(el, diagnostics);
55
+ const scheme = getOrCreateScheme(schemeBuilds, mapping.scheme);
56
+ let collection = scheme.collections.get(mapping.collectionTag);
57
+ if (!collection) {
58
+ collection = { name: mapping.collectionName, children: [] };
59
+ scheme.collections.set(mapping.collectionTag, collection);
60
+ }
61
+ const xmaId = ids.idFor(el.id);
62
+ const concept = element(`ArchiMate:${mapping.xmaType}`, [['id', String(xmaId)]], [buildProfileValues(language, el.name ?? '', el.documentation)]);
63
+ collection.children.push(concept);
64
+ }
65
+ return { schemeBuilds, mappedElements };
66
+ }
67
+ /**
68
+ * Renders a `SchemeBuild`'s children (an optional `nm` profile, then each
69
+ * populated collection in confirmed order, then `Relations` last) — the
70
+ * caller wraps these in the actual `<ArchiMate:{schemeTag} id="...">`
71
+ * element, since only the caller (`document-writer`) knows the scheme's
72
+ * allocated id.
73
+ */
74
+ export function renderSchemeChildren(build, nameProfile) {
75
+ const children = [];
76
+ if (nameProfile) {
77
+ children.push(nameProfile);
78
+ }
79
+ for (const { tag, name } of getSchemeCollectionOrder(build.tag)) {
80
+ const collection = build.collections.get(tag);
81
+ if (!collection || collection.children.length === 0) {
82
+ continue;
83
+ }
84
+ children.push(element(`ArchiMate:${tag}`, [['name', name]], collection.children));
85
+ }
86
+ if (build.relations.length > 0) {
87
+ children.push(element('ArchiMate:Relations', [['name', 'relations']], build.relations));
88
+ }
89
+ return children;
90
+ }
91
+ //# 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,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,EAAa,MAAM,0BAA0B,CAAC;AAGtE,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;AA8ED;;;;;;;;;;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,80 @@
1
+ import { renderXmlDocument } from '../infrastructure/xml-writer.js';
2
+ import { XmaIdAllocator, XmaIdRegistry } from '../infrastructure/id-allocator.js';
3
+ import { DiagnosticCollector } from '../diagnostics/diagnostics.js';
4
+ import { XmaSerializationError } from '../diagnostics/errors.js';
5
+ import { buildSemanticElements } from './semantic-writer.js';
6
+ import { buildSemanticRelationships } from './relationship-writer.js';
7
+ import { buildView } from './view-writer.js';
8
+ import { buildGraphicalModule } from './graphical-writer.js';
9
+ import { buildXmaDocument } from './document-writer.js';
10
+ const DEFAULT_PACKAGE_NAME = 'CDA XMA Package';
11
+ function planXmaDocument(model, options) {
12
+ const diagnostics = new DiagnosticCollector();
13
+ const language = options?.language ?? 'en';
14
+ const modelName = options?.modelName ?? model.metadata.name;
15
+ const packageName = options?.packageName ?? DEFAULT_PACKAGE_NAME;
16
+ const allocator = new XmaIdAllocator();
17
+ const ids = new XmaIdRegistry(allocator);
18
+ const refIds = new XmaIdRegistry(allocator);
19
+ const { schemeBuilds, mappedElements } = buildSemanticElements(model, ids, diagnostics, language);
20
+ const elementIndex = new Map(model.elements.map((e) => [e.id, e]));
21
+ const relationshipIndex = new Map(model.relationships.map((r) => [r.id, r]));
22
+ const mappedRelationships = buildSemanticRelationships(model, ids, elementIndex, relationshipIndex, mappedElements, schemeBuilds, diagnostics);
23
+ let view = null;
24
+ let viewResult = null;
25
+ let graphicalDiagramXml = null;
26
+ if (model.views.length > 1) {
27
+ diagnostics.error({
28
+ code: 'unsupported-multiple-views',
29
+ message: `Model has ${model.views.length} views; XMA v0.1 supports serializing exactly one view. Split the model or remove extra views before converting.`,
30
+ });
31
+ }
32
+ else if (model.views.length === 1) {
33
+ view = model.views[0];
34
+ viewResult = buildView(model, view, ids, refIds, mappedElements, mappedRelationships, diagnostics, language);
35
+ const graphicalResult = buildGraphicalModule(model, view, ids, refIds, allocator, mappedElements, mappedRelationships, viewResult, diagnostics);
36
+ graphicalDiagramXml = graphicalResult.diagramXml;
37
+ }
38
+ if (diagnostics.hasErrors) {
39
+ return { diagnostics: diagnostics.all, documentXml: null };
40
+ }
41
+ const documentXml = buildXmaDocument({
42
+ modelName,
43
+ packageName,
44
+ language,
45
+ ids,
46
+ schemeBuilds,
47
+ folders: model.folders,
48
+ view,
49
+ viewResult,
50
+ graphicalDiagramXml,
51
+ });
52
+ return { diagnostics: diagnostics.all, documentXml };
53
+ }
54
+ /**
55
+ * Serializes an `ArchiModel` (from `@cda/archi-semantic-core`) into an XMA
56
+ * document string.
57
+ *
58
+ * Strict by default: if any construct in the model would be silently lost
59
+ * (an unsupported element/relationship type, a second view, incomplete
60
+ * geometry, ...) this throws `XmaSerializationError` carrying the full
61
+ * structured diagnostic list, rather than producing an approximate or
62
+ * partial XMA document. Use `inspectXmaSupport` to preview what would be
63
+ * unsupported without throwing.
64
+ */
65
+ export function serializeXma(model, options) {
66
+ const { diagnostics, documentXml } = planXmaDocument(model, options);
67
+ if (documentXml === null) {
68
+ throw new XmaSerializationError(diagnostics);
69
+ }
70
+ return renderXmlDocument(documentXml);
71
+ }
72
+ /**
73
+ * Non-mutating diagnostic pass: reports every construct in `model` that
74
+ * `serializeXma` would refuse to convert, without throwing and without
75
+ * requiring the model to be fully convertible.
76
+ */
77
+ export function inspectXmaSupport(model, options) {
78
+ return planXmaDocument(model, options).diagnostics;
79
+ }
80
+ //# 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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"}
@@ -0,0 +1,26 @@
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 { RelationshipMappingEntry } from '../mapping/relationship-mapping.js';
7
+ export interface ViewBuildResult {
8
+ viewGraphicsXml: XmlElement[];
9
+ refObjectsXml: XmlElement[];
10
+ /** Ids of diagram objects that passed validation and should be drawn (element-backed nodes only). */
11
+ validElementNodeObjectIds: Set<string>;
12
+ /** Ids of Group diagram objects that passed validation and should be drawn. */
13
+ validGroupObjectIds: Set<string>;
14
+ /** Ids of notes that passed validation and should be drawn. */
15
+ validNoteIds: Set<string>;
16
+ }
17
+ /**
18
+ * Builds the `AllView`'s `ViewGraphics` (Notes/Groups) and `RefObjects`
19
+ * (the three-layer view-reference indirection — see module docs on
20
+ * `graphical-writer.ts`) for the single supported view. Also validates
21
+ * every diagram object/note/connection in the view, since geometry and view
22
+ * membership are model-wide preservation guarantees, not just node drawing
23
+ * concerns.
24
+ */
25
+ export declare function buildView(model: ArchiModel, view: ArchiView, ids: XmaIdRegistry, refIds: XmaIdRegistry, mappedElements: ReadonlyMap<string, ElementMappingEntry>, mappedRelationships: ReadonlyMap<string, RelationshipMappingEntry>, diagnostics: DiagnosticCollector, language: string): ViewBuildResult;
26
+ //# 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,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAInF,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,UAAU,EAAE,CAAC;IAC9B,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;CAC3B;AAMD;;;;;;;GAOG;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,wBAAwB,CAAC,EAClE,WAAW,EAAE,mBAAmB,EAChC,QAAQ,EAAE,MAAM,GACf,eAAe,CAiJjB"}
@@ -0,0 +1,147 @@
1
+ import { element } from '../infrastructure/xml-writer.js';
2
+ import { buildProfileValues } from './profile-values.js';
3
+ import { hasCompleteBounds } from '../geometry/geometry.js';
4
+ function hasNesting(parentId, childrenIds) {
5
+ return parentId !== null || childrenIds.length > 0;
6
+ }
7
+ /**
8
+ * Builds the `AllView`'s `ViewGraphics` (Notes/Groups) and `RefObjects`
9
+ * (the three-layer view-reference indirection — see module docs on
10
+ * `graphical-writer.ts`) for the single supported view. Also validates
11
+ * every diagram object/note/connection in the view, since geometry and view
12
+ * membership are model-wide preservation guarantees, not just node drawing
13
+ * concerns.
14
+ */
15
+ export function buildView(model, view, ids, refIds, mappedElements, mappedRelationships, diagnostics, language) {
16
+ const viewGraphicsXml = [];
17
+ const refObjectsXml = [];
18
+ const validElementNodeObjectIds = new Set();
19
+ const validGroupObjectIds = new Set();
20
+ const validNoteIds = new Set();
21
+ for (const obj of model.diagramObjects) {
22
+ if (obj.viewId !== view.id) {
23
+ continue;
24
+ }
25
+ if (hasNesting(obj.parentId, obj.childrenIds)) {
26
+ diagnostics.error({
27
+ code: 'unsupported-nested-diagram-object',
28
+ message: `Diagram object "${obj.id}" is nested (has a parent or children) — nested diagram objects are not supported in XMA v0.1.`,
29
+ entityId: obj.id,
30
+ entityType: 'ArchiDiagramObject',
31
+ });
32
+ continue;
33
+ }
34
+ if (obj.referencedModelId !== null) {
35
+ diagnostics.error({
36
+ code: 'unsupported-diagram-model-reference',
37
+ message: `Diagram object "${obj.id}" is a view-reference (DiagramModelReference) — not supported in XMA v0.1.`,
38
+ entityId: obj.id,
39
+ entityType: 'ArchiDiagramObject',
40
+ });
41
+ continue;
42
+ }
43
+ if (obj.archimateElementId === null) {
44
+ if (obj.xsiType !== 'archimate:Group') {
45
+ diagnostics.error({
46
+ code: 'unsupported-diagram-object',
47
+ message: `Diagram object "${obj.id}" (${obj.xsiType}) has no backing semantic element and is not a recognized Group — not supported in XMA v0.1.`,
48
+ entityId: obj.id,
49
+ entityType: 'ArchiDiagramObject',
50
+ });
51
+ continue;
52
+ }
53
+ if (!hasCompleteBounds(obj.bounds)) {
54
+ diagnostics.error({
55
+ code: 'missing-bounds',
56
+ message: `Group "${obj.id}" has incomplete geometry (x/y/width/height) and cannot be positioned in XMA.`,
57
+ entityId: obj.id,
58
+ entityType: 'ArchiDiagramObject',
59
+ });
60
+ continue;
61
+ }
62
+ const groupXmaId = ids.idFor(obj.id);
63
+ viewGraphicsXml.push(element('ArchiMate:ViewGraphic', [['id', String(groupXmaId)]], [
64
+ buildProfileValues(language, obj.name ?? '', obj.documentation),
65
+ ]));
66
+ validGroupObjectIds.add(obj.id);
67
+ continue;
68
+ }
69
+ // Element-backed diagram object.
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
+ const mapping = mappedElements.get(obj.archimateElementId);
80
+ if (!mapping) {
81
+ // The backing element already produced an unsupported-element-type diagnostic.
82
+ continue;
83
+ }
84
+ if (!refIds.has(obj.archimateElementId)) {
85
+ const refId = refIds.idFor(obj.archimateElementId);
86
+ refObjectsXml.push(element(`ArchiMate:${mapping.xmaType}Ref`, [
87
+ ['id', String(refId)],
88
+ ['to', String(ids.idFor(obj.archimateElementId))],
89
+ ]));
90
+ }
91
+ validElementNodeObjectIds.add(obj.id);
92
+ }
93
+ for (const note of model.notes) {
94
+ if (note.viewId !== view.id) {
95
+ continue;
96
+ }
97
+ if (note.parentId !== null) {
98
+ diagnostics.error({
99
+ code: 'unsupported-nested-diagram-object',
100
+ message: `Note "${note.id}" is nested inside another diagram object — not supported in XMA v0.1.`,
101
+ entityId: note.id,
102
+ entityType: 'ArchiNote',
103
+ });
104
+ continue;
105
+ }
106
+ if (!hasCompleteBounds(note.bounds)) {
107
+ diagnostics.error({
108
+ code: 'missing-bounds',
109
+ message: `Note "${note.id}" has incomplete geometry (x/y/width/height) and cannot be positioned in XMA.`,
110
+ entityId: note.id,
111
+ entityType: 'ArchiNote',
112
+ });
113
+ continue;
114
+ }
115
+ const noteXmaId = ids.idFor(note.id);
116
+ viewGraphicsXml.push(element('ArchiMate:ViewGraphic', [['id', String(noteXmaId)]], [buildProfileValues(language, note.content ?? '')]));
117
+ validNoteIds.add(note.id);
118
+ }
119
+ for (const connection of model.diagramConnections) {
120
+ if (connection.viewId !== view.id) {
121
+ continue;
122
+ }
123
+ if (connection.archimateRelationshipId === null) {
124
+ diagnostics.error({
125
+ code: 'unsupported-connection-no-relationship',
126
+ message: `Connection "${connection.id}" has no underlying semantic relationship (a purely visual connector) — not supported in XMA v0.1.`,
127
+ entityId: connection.id,
128
+ entityType: 'ArchiDiagramConnection',
129
+ });
130
+ continue;
131
+ }
132
+ const mapping = mappedRelationships.get(connection.archimateRelationshipId);
133
+ if (!mapping) {
134
+ // The underlying relationship already produced its own diagnostic.
135
+ continue;
136
+ }
137
+ if (!refIds.has(connection.archimateRelationshipId)) {
138
+ const refId = refIds.idFor(connection.archimateRelationshipId);
139
+ refObjectsXml.push(element(`ArchiMate:${mapping.xmaType}Ref`, [
140
+ ['id', String(refId)],
141
+ ['to', String(ids.idFor(connection.archimateRelationshipId))],
142
+ ]));
143
+ }
144
+ }
145
+ return { viewGraphicsXml, refObjectsXml, validElementNodeObjectIds, validGroupObjectIds, validNoteIds };
146
+ }
147
+ //# 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 ADDED
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "@cda/adapter-xma",
3
+ "version": "0.1.0",
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
+ "keywords": [
6
+ "archimate",
7
+ "xma",
8
+ "enterprise-architecture",
9
+ "cda",
10
+ "typescript"
11
+ ],
12
+ "license": "MIT",
13
+ "type": "module",
14
+ "engines": {
15
+ "node": "^20.0.0 || ^22.0.0 || >=24.0.0"
16
+ },
17
+ "main": "./dist/index.js",
18
+ "types": "./dist/index.d.ts",
19
+ "exports": {
20
+ ".": {
21
+ "types": "./dist/index.d.ts",
22
+ "import": "./dist/index.js"
23
+ }
24
+ },
25
+ "files": [
26
+ "dist"
27
+ ],
28
+ "publishConfig": {
29
+ "access": "public",
30
+ "provenance": true
31
+ },
32
+ "sideEffects": false,
33
+ "scripts": {
34
+ "typecheck": "tsc --noEmit",
35
+ "build": "tsc -p tsconfig.build.json",
36
+ "test": "vitest run",
37
+ "test:watch": "vitest",
38
+ "prepublishOnly": "npm run typecheck && npm run build && npm test"
39
+ },
40
+ "peerDependencies": {
41
+ "@cda/archi-semantic-core": ">=0.4.1"
42
+ },
43
+ "devDependencies": {
44
+ "@cda/archi-semantic-core": "^0.4.2",
45
+ "@types/node": "^24.0.0",
46
+ "fast-xml-parser": "^5.10.1",
47
+ "typescript": "5.9.3",
48
+ "vitest": "^4.1.10"
49
+ },
50
+ "repository": {
51
+ "type": "git",
52
+ "url": "git+https://github.com/Continuous-DrivenArchitecture/adapter-xma.git"
53
+ },
54
+ "homepage": "https://github.com/Continuous-DrivenArchitecture/adapter-xma#readme",
55
+ "bugs": {
56
+ "url": "https://github.com/Continuous-DrivenArchitecture/adapter-xma/issues"
57
+ }
58
+ }