@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.
- package/LICENSE +21 -0
- package/README.md +54 -20
- package/dist/cjs/diagnostics/diagnostics.d.ts.map +1 -0
- package/dist/cjs/diagnostics/diagnostics.js +23 -0
- package/dist/cjs/diagnostics/diagnostics.js.map +1 -0
- package/dist/cjs/diagnostics/errors.d.ts.map +1 -0
- package/dist/cjs/diagnostics/errors.js +24 -0
- package/dist/cjs/diagnostics/errors.js.map +1 -0
- package/dist/cjs/geometry/bendpoints.d.ts.map +1 -0
- package/dist/cjs/geometry/bendpoints.js +51 -0
- package/dist/cjs/geometry/bendpoints.js.map +1 -0
- package/dist/cjs/geometry/geometry.d.ts +75 -0
- package/dist/cjs/geometry/geometry.d.ts.map +1 -0
- package/dist/cjs/geometry/geometry.js +77 -0
- package/dist/cjs/geometry/geometry.js.map +1 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +9 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/infrastructure/assert.d.ts +10 -0
- package/dist/cjs/infrastructure/assert.d.ts.map +1 -0
- package/dist/cjs/infrastructure/assert.js +18 -0
- package/dist/cjs/infrastructure/assert.js.map +1 -0
- package/dist/cjs/infrastructure/id-allocator.d.ts.map +1 -0
- package/dist/cjs/infrastructure/id-allocator.js +59 -0
- package/dist/cjs/infrastructure/id-allocator.js.map +1 -0
- package/dist/cjs/infrastructure/xml-writer.d.ts.map +1 -0
- package/dist/cjs/infrastructure/xml-writer.js +94 -0
- package/dist/cjs/infrastructure/xml-writer.js.map +1 -0
- package/dist/cjs/mapping/element-mapping.d.ts.map +1 -0
- package/dist/cjs/mapping/element-mapping.js +117 -0
- package/dist/cjs/mapping/element-mapping.js.map +1 -0
- package/dist/cjs/mapping/generic-relationship-mapping.d.ts.map +1 -0
- package/dist/cjs/mapping/generic-relationship-mapping.js +71 -0
- package/dist/cjs/mapping/generic-relationship-mapping.js.map +1 -0
- package/dist/cjs/mapping/relationship-mapping.d.ts.map +1 -0
- package/dist/cjs/mapping/relationship-mapping.js +697 -0
- package/dist/cjs/mapping/relationship-mapping.js.map +1 -0
- package/dist/cjs/mapping/scheme-mapping.d.ts.map +1 -0
- package/dist/cjs/mapping/scheme-mapping.js +42 -0
- package/dist/cjs/mapping/scheme-mapping.js.map +1 -0
- package/dist/{mapping → cjs/mapping}/visual-mapping.d.ts +8 -0
- package/dist/cjs/mapping/visual-mapping.d.ts.map +1 -0
- package/dist/cjs/mapping/visual-mapping.js +51 -0
- package/dist/cjs/mapping/visual-mapping.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/serializer/document-writer.d.ts.map +1 -0
- package/dist/cjs/serializer/document-writer.js +143 -0
- package/dist/cjs/serializer/document-writer.js.map +1 -0
- package/dist/{serializer → cjs/serializer}/graphical-writer.d.ts +8 -6
- package/dist/cjs/serializer/graphical-writer.d.ts.map +1 -0
- package/dist/cjs/serializer/graphical-writer.js +521 -0
- package/dist/cjs/serializer/graphical-writer.js.map +1 -0
- package/dist/cjs/serializer/profile-values.d.ts.map +1 -0
- package/dist/cjs/serializer/profile-values.js +28 -0
- package/dist/cjs/serializer/profile-values.js.map +1 -0
- package/dist/cjs/serializer/relationship-writer.d.ts.map +1 -0
- package/dist/cjs/serializer/relationship-writer.js +109 -0
- package/dist/cjs/serializer/relationship-writer.js.map +1 -0
- package/dist/cjs/serializer/rtf.d.ts.map +1 -0
- package/dist/cjs/serializer/rtf.js +67 -0
- package/dist/cjs/serializer/rtf.js.map +1 -0
- package/dist/cjs/serializer/semantic-writer.d.ts.map +1 -0
- package/dist/cjs/serializer/semantic-writer.js +170 -0
- package/dist/cjs/serializer/semantic-writer.js.map +1 -0
- package/dist/cjs/serializer/serialize-xma.d.ts.map +1 -0
- package/dist/cjs/serializer/serialize-xma.js +113 -0
- package/dist/cjs/serializer/serialize-xma.js.map +1 -0
- package/dist/{serializer → cjs/serializer}/view-writer.d.ts +6 -0
- package/dist/cjs/serializer/view-writer.d.ts.map +1 -0
- package/dist/cjs/serializer/view-writer.js +239 -0
- package/dist/cjs/serializer/view-writer.js.map +1 -0
- package/dist/esm/diagnostics/diagnostics.d.ts +20 -0
- package/dist/esm/diagnostics/diagnostics.d.ts.map +1 -0
- package/dist/esm/diagnostics/diagnostics.js.map +1 -0
- package/dist/esm/diagnostics/errors.d.ts +13 -0
- package/dist/esm/diagnostics/errors.d.ts.map +1 -0
- package/dist/esm/diagnostics/errors.js.map +1 -0
- package/dist/esm/geometry/bendpoints.d.ts +33 -0
- package/dist/esm/geometry/bendpoints.d.ts.map +1 -0
- package/dist/{geometry → esm/geometry}/bendpoints.js +6 -2
- package/dist/esm/geometry/bendpoints.js.map +1 -0
- package/dist/esm/geometry/geometry.d.ts +75 -0
- package/dist/esm/geometry/geometry.d.ts.map +1 -0
- package/dist/{geometry → esm/geometry}/geometry.js +25 -6
- package/dist/esm/geometry/geometry.js.map +1 -0
- package/dist/esm/index.d.ts +5 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/infrastructure/assert.d.ts +10 -0
- package/dist/esm/infrastructure/assert.d.ts.map +1 -0
- package/dist/esm/infrastructure/assert.js +15 -0
- package/dist/esm/infrastructure/assert.js.map +1 -0
- package/dist/esm/infrastructure/id-allocator.d.ts +34 -0
- package/dist/esm/infrastructure/id-allocator.d.ts.map +1 -0
- package/dist/esm/infrastructure/id-allocator.js.map +1 -0
- package/dist/esm/infrastructure/xml-writer.d.ts +20 -0
- package/dist/esm/infrastructure/xml-writer.d.ts.map +1 -0
- package/dist/{infrastructure → esm/infrastructure}/xml-writer.js +37 -2
- package/dist/esm/infrastructure/xml-writer.js.map +1 -0
- package/dist/esm/mapping/element-mapping.d.ts +31 -0
- package/dist/esm/mapping/element-mapping.d.ts.map +1 -0
- package/dist/esm/mapping/element-mapping.js.map +1 -0
- package/dist/esm/mapping/generic-relationship-mapping.d.ts +18 -0
- package/dist/esm/mapping/generic-relationship-mapping.d.ts.map +1 -0
- package/dist/esm/mapping/generic-relationship-mapping.js.map +1 -0
- package/dist/esm/mapping/relationship-mapping.d.ts +47 -0
- package/dist/esm/mapping/relationship-mapping.d.ts.map +1 -0
- package/dist/esm/mapping/relationship-mapping.js.map +1 -0
- package/dist/esm/mapping/scheme-mapping.d.ts +38 -0
- package/dist/esm/mapping/scheme-mapping.d.ts.map +1 -0
- package/dist/esm/mapping/scheme-mapping.js.map +1 -0
- package/dist/esm/mapping/visual-mapping.d.ts +32 -0
- package/dist/esm/mapping/visual-mapping.d.ts.map +1 -0
- package/dist/{mapping → esm/mapping}/visual-mapping.js +8 -0
- package/dist/esm/mapping/visual-mapping.js.map +1 -0
- package/dist/esm/serializer/document-writer.d.ts +40 -0
- package/dist/esm/serializer/document-writer.d.ts.map +1 -0
- package/dist/{serializer → esm/serializer}/document-writer.js +5 -0
- package/dist/esm/serializer/document-writer.js.map +1 -0
- package/dist/esm/serializer/graphical-writer.d.ts +29 -0
- package/dist/esm/serializer/graphical-writer.d.ts.map +1 -0
- package/dist/{serializer → esm/serializer}/graphical-writer.js +213 -54
- package/dist/esm/serializer/graphical-writer.js.map +1 -0
- package/dist/esm/serializer/profile-values.d.ts +8 -0
- package/dist/esm/serializer/profile-values.d.ts.map +1 -0
- package/dist/esm/serializer/profile-values.js.map +1 -0
- package/dist/esm/serializer/relationship-writer.d.ts +41 -0
- package/dist/esm/serializer/relationship-writer.d.ts.map +1 -0
- package/dist/{serializer → esm/serializer}/relationship-writer.js +4 -1
- package/dist/esm/serializer/relationship-writer.js.map +1 -0
- package/dist/esm/serializer/rtf.d.ts +9 -0
- package/dist/esm/serializer/rtf.d.ts.map +1 -0
- package/dist/{serializer → esm/serializer}/rtf.js +14 -0
- package/dist/esm/serializer/rtf.js.map +1 -0
- package/dist/esm/serializer/semantic-writer.d.ts +51 -0
- package/dist/esm/serializer/semantic-writer.d.ts.map +1 -0
- package/dist/{serializer → esm/serializer}/semantic-writer.js +24 -0
- package/dist/esm/serializer/semantic-writer.js.map +1 -0
- package/dist/esm/serializer/serialize-xma.d.ts +29 -0
- package/dist/esm/serializer/serialize-xma.d.ts.map +1 -0
- package/dist/{serializer → esm/serializer}/serialize-xma.js +40 -1
- package/dist/esm/serializer/serialize-xma.js.map +1 -0
- package/dist/esm/serializer/view-writer.d.ts +33 -0
- package/dist/esm/serializer/view-writer.d.ts.map +1 -0
- package/dist/esm/serializer/view-writer.js +236 -0
- package/dist/esm/serializer/view-writer.js.map +1 -0
- package/package.json +20 -9
- package/dist/diagnostics/diagnostics.d.ts.map +0 -1
- package/dist/diagnostics/diagnostics.js.map +0 -1
- package/dist/diagnostics/errors.d.ts.map +0 -1
- package/dist/diagnostics/errors.js.map +0 -1
- package/dist/geometry/bendpoints.d.ts.map +0 -1
- package/dist/geometry/bendpoints.js.map +0 -1
- package/dist/geometry/geometry.d.ts +0 -48
- package/dist/geometry/geometry.d.ts.map +0 -1
- package/dist/geometry/geometry.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/infrastructure/id-allocator.d.ts.map +0 -1
- package/dist/infrastructure/id-allocator.js.map +0 -1
- package/dist/infrastructure/xml-writer.d.ts.map +0 -1
- package/dist/infrastructure/xml-writer.js.map +0 -1
- package/dist/mapping/element-mapping.d.ts.map +0 -1
- package/dist/mapping/element-mapping.js.map +0 -1
- package/dist/mapping/generic-relationship-mapping.d.ts.map +0 -1
- package/dist/mapping/generic-relationship-mapping.js.map +0 -1
- package/dist/mapping/relationship-mapping.d.ts.map +0 -1
- package/dist/mapping/relationship-mapping.js.map +0 -1
- package/dist/mapping/scheme-mapping.d.ts.map +0 -1
- package/dist/mapping/scheme-mapping.js.map +0 -1
- package/dist/mapping/visual-mapping.d.ts.map +0 -1
- package/dist/mapping/visual-mapping.js.map +0 -1
- package/dist/serializer/document-writer.d.ts.map +0 -1
- package/dist/serializer/document-writer.js.map +0 -1
- package/dist/serializer/graphical-writer.d.ts.map +0 -1
- package/dist/serializer/graphical-writer.js.map +0 -1
- package/dist/serializer/profile-values.d.ts.map +0 -1
- package/dist/serializer/profile-values.js.map +0 -1
- package/dist/serializer/relationship-writer.d.ts.map +0 -1
- package/dist/serializer/relationship-writer.js.map +0 -1
- package/dist/serializer/rtf.d.ts.map +0 -1
- package/dist/serializer/rtf.js.map +0 -1
- package/dist/serializer/semantic-writer.d.ts.map +0 -1
- package/dist/serializer/semantic-writer.js.map +0 -1
- package/dist/serializer/serialize-xma.d.ts.map +0 -1
- package/dist/serializer/serialize-xma.js.map +0 -1
- package/dist/serializer/view-writer.d.ts.map +0 -1
- package/dist/serializer/view-writer.js +0 -145
- package/dist/serializer/view-writer.js.map +0 -1
- /package/dist/{diagnostics → cjs/diagnostics}/diagnostics.d.ts +0 -0
- /package/dist/{diagnostics → cjs/diagnostics}/errors.d.ts +0 -0
- /package/dist/{geometry → cjs/geometry}/bendpoints.d.ts +0 -0
- /package/dist/{index.d.ts → cjs/index.d.ts} +0 -0
- /package/dist/{infrastructure → cjs/infrastructure}/id-allocator.d.ts +0 -0
- /package/dist/{infrastructure → cjs/infrastructure}/xml-writer.d.ts +0 -0
- /package/dist/{mapping → cjs/mapping}/element-mapping.d.ts +0 -0
- /package/dist/{mapping → cjs/mapping}/generic-relationship-mapping.d.ts +0 -0
- /package/dist/{mapping → cjs/mapping}/relationship-mapping.d.ts +0 -0
- /package/dist/{mapping → cjs/mapping}/scheme-mapping.d.ts +0 -0
- /package/dist/{serializer → cjs/serializer}/document-writer.d.ts +0 -0
- /package/dist/{serializer → cjs/serializer}/profile-values.d.ts +0 -0
- /package/dist/{serializer → cjs/serializer}/relationship-writer.d.ts +0 -0
- /package/dist/{serializer → cjs/serializer}/rtf.d.ts +0 -0
- /package/dist/{serializer → cjs/serializer}/semantic-writer.d.ts +0 -0
- /package/dist/{serializer → cjs/serializer}/serialize-xma.d.ts +0 -0
- /package/dist/{diagnostics → esm/diagnostics}/diagnostics.js +0 -0
- /package/dist/{diagnostics → esm/diagnostics}/errors.js +0 -0
- /package/dist/{index.js → esm/index.js} +0 -0
- /package/dist/{infrastructure → esm/infrastructure}/id-allocator.js +0 -0
- /package/dist/{mapping → esm/mapping}/element-mapping.js +0 -0
- /package/dist/{mapping → esm/mapping}/generic-relationship-mapping.js +0 -0
- /package/dist/{mapping → esm/mapping}/relationship-mapping.js +0 -0
- /package/dist/{mapping → esm/mapping}/scheme-mapping.js +0 -0
- /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"}
|