@agilewallaby/c4-model 1.1.0 → 2.0.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/package.json +14 -4
- package/src/component.js +3 -6
- package/src/component.js.map +1 -1
- package/src/container.js +11 -13
- package/src/container.js.map +1 -1
- package/src/core.js +23 -22
- package/src/core.js.map +1 -1
- package/src/generateDiagrams.js +44 -52
- package/src/generateDiagrams.js.map +1 -1
- package/src/index.js +8 -11
- package/src/index.js.map +1 -1
- package/src/model.js +49 -56
- package/src/model.js.map +1 -1
- package/src/person.js +3 -6
- package/src/person.js.map +1 -1
- package/src/softwareSystem.js +11 -13
- package/src/softwareSystem.js.map +1 -1
- package/src/structurizrDslWriter.js +4 -7
- package/src/structurizrDslWriter.js.map +1 -1
- package/src/views.js +11 -14
- package/src/views.js.map +1 -1
- package/CLAUDE.md +0 -45
package/package.json
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agilewallaby/c4-model",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
|
+
"files": [
|
|
5
|
+
"src",
|
|
6
|
+
"README.md"
|
|
7
|
+
],
|
|
4
8
|
"publishConfig": {
|
|
5
9
|
"access": "public"
|
|
6
10
|
},
|
|
@@ -14,8 +18,14 @@
|
|
|
14
18
|
"testcontainers": "^10.28.0",
|
|
15
19
|
"tslib": "^2.3.0"
|
|
16
20
|
},
|
|
17
|
-
"type": "
|
|
21
|
+
"type": "module",
|
|
18
22
|
"main": "./src/index.js",
|
|
19
|
-
"
|
|
20
|
-
"
|
|
23
|
+
"types": "./src/index.d.ts",
|
|
24
|
+
"exports": {
|
|
25
|
+
".": {
|
|
26
|
+
"import": "./src/index.js",
|
|
27
|
+
"types": "./src/index.d.ts"
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"module": "./src/index.js"
|
|
21
31
|
}
|
package/src/component.js
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const core_1 = require("./core");
|
|
5
|
-
class Component extends core_1.TechnicalElement {
|
|
1
|
+
import { TechnicalElement } from './core';
|
|
2
|
+
export class Component extends TechnicalElement {
|
|
3
|
+
name;
|
|
6
4
|
constructor(name, definition) {
|
|
7
5
|
super(name, ['Component'], definition);
|
|
8
6
|
this.name = name;
|
|
@@ -11,5 +9,4 @@ class Component extends core_1.TechnicalElement {
|
|
|
11
9
|
return [];
|
|
12
10
|
}
|
|
13
11
|
}
|
|
14
|
-
exports.Component = Component;
|
|
15
12
|
//# sourceMappingURL=component.js.map
|
package/src/component.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component.js","sourceRoot":"","sources":["../../../../libs/c4-model/src/component.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"component.js","sourceRoot":"","sources":["../../../../libs/c4-model/src/component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,gBAAgB,EAAwB,MAAM,QAAQ,CAAA;AAIxE,MAAM,OAAO,SAAU,SAAQ,gBAAgB;IAEd;IAD7B,YAC6B,IAAY,EACrC,UAAgC;QAEhC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC,CAAA;QAHb,SAAI,GAAJ,IAAI,CAAQ;IAIzC,CAAC;IAEM,gBAAgB;QACnB,OAAO,EAAE,CAAA;IACb,CAAC;CACJ"}
|
package/src/container.js
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.Container = exports.ContainerGroup = void 0;
|
|
4
|
-
const core_1 = require("./core");
|
|
5
|
-
const component_1 = require("./component");
|
|
1
|
+
import { Group, TechnicalElement } from './core';
|
|
2
|
+
import { Component } from './component';
|
|
6
3
|
// TODO: This will be a Group<Container> if that is added back in
|
|
7
|
-
class ContainerGroup extends
|
|
4
|
+
export class ContainerGroup extends Group {
|
|
5
|
+
name;
|
|
6
|
+
container;
|
|
7
|
+
_components = new Map();
|
|
8
8
|
constructor(name, container) {
|
|
9
9
|
super(name);
|
|
10
10
|
this.name = name;
|
|
11
11
|
this.container = container;
|
|
12
|
-
this._components = new Map();
|
|
13
12
|
}
|
|
14
13
|
defineComponent(name, definition) {
|
|
15
14
|
const component = this.container.defineComponent(name, definition);
|
|
@@ -20,19 +19,19 @@ class ContainerGroup extends core_1.Group {
|
|
|
20
19
|
return Array.from(this._components.values());
|
|
21
20
|
}
|
|
22
21
|
}
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
export class Container extends TechnicalElement {
|
|
23
|
+
name;
|
|
24
|
+
_components = new Map();
|
|
25
|
+
_groups = new Map();
|
|
25
26
|
constructor(name, definition) {
|
|
26
27
|
super(name, ['Container'], definition);
|
|
27
28
|
this.name = name;
|
|
28
|
-
this._components = new Map();
|
|
29
|
-
this._groups = new Map();
|
|
30
29
|
}
|
|
31
30
|
defineComponent(name, definition) {
|
|
32
31
|
if (this._components.has(name)) {
|
|
33
32
|
throw Error(`A Component named '${name}' is defined elsewhere in this Container. A Component can be defined only once.`);
|
|
34
33
|
}
|
|
35
|
-
const component = new
|
|
34
|
+
const component = new Component(name, definition);
|
|
36
35
|
this._components.set(name, component);
|
|
37
36
|
return component;
|
|
38
37
|
}
|
|
@@ -55,5 +54,4 @@ class Container extends core_1.TechnicalElement {
|
|
|
55
54
|
return Array.from(this._components.values());
|
|
56
55
|
}
|
|
57
56
|
}
|
|
58
|
-
exports.Container = Container;
|
|
59
57
|
//# sourceMappingURL=container.js.map
|
package/src/container.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../../../libs/c4-model/src/container.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../../../libs/c4-model/src/container.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,EAAE,gBAAgB,EAAwB,MAAM,QAAQ,CAAA;AAC/E,OAAO,EAAE,SAAS,EAAuB,MAAM,aAAa,CAAA;AAQ5D,iEAAiE;AACjE,MAAM,OAAO,cAAe,SAAQ,KAAK;IAIR;IACR;IAJb,WAAW,GAAG,IAAI,GAAG,EAAqB,CAAA;IAElD,YAC6B,IAAY,EACpB,SAA0B;QAE3C,KAAK,CAAC,IAAI,CAAC,CAAA;QAHc,SAAI,GAAJ,IAAI,CAAQ;QACpB,cAAS,GAAT,SAAS,CAAiB;IAG/C,CAAC;IAEM,eAAe,CAAC,IAAY,EAAE,UAAgC;QACjE,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;QAClE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;QACrC,OAAO,SAAS,CAAA;IACpB,CAAC;IAEM,aAAa;QAChB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAA;IAChD,CAAC;CACJ;AAED,MAAM,OAAO,SAAU,SAAQ,gBAAgB;IAKd;IAJrB,WAAW,GAAG,IAAI,GAAG,EAAqB,CAAA;IAC1C,OAAO,GAAG,IAAI,GAAG,EAA0B,CAAA;IAEnD,YAC6B,IAAY,EACrC,UAAgC;QAEhC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC,CAAA;QAHb,SAAI,GAAJ,IAAI,CAAQ;IAIzC,CAAC;IAEM,eAAe,CAAC,IAAY,EAAE,UAAgC;QACjE,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,MAAM,KAAK,CAAC,sBAAsB,IAAI,iFAAiF,CAAC,CAAA;QAC5H,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;QAEjD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;QAErC,OAAO,SAAS,CAAA;IACpB,CAAC;IAEM,QAAQ,CAAC,SAAiB;QAC7B,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QACvC,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,KAAK,GAAG,IAAI,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;YAC3C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;QACtC,CAAC;QACD,OAAO,KAAK,CAAA;IAChB,CAAC;IAEM,SAAS;QACZ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAC5C,CAAC;IAEM,wBAAwB;QAC3B,MAAM,kBAAkB,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,CAAA;QACrF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,kBAAkB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAA;IAC/G,CAAC;IAEM,gBAAgB;QACnB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAA;IAChD,CAAC;CACJ"}
|
package/src/core.js
CHANGED
|
@@ -1,17 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { camelCase } from 'change-case';
|
|
2
|
+
export class Element {
|
|
3
|
+
name;
|
|
4
|
+
description;
|
|
5
|
+
tags;
|
|
6
|
+
_relationships = [];
|
|
6
7
|
constructor(name, defaultTags = [], definition) {
|
|
7
|
-
var _a;
|
|
8
8
|
this.name = name;
|
|
9
|
-
this.
|
|
10
|
-
this.
|
|
11
|
-
this.tags = ((_a = definition === null || definition === void 0 ? void 0 : definition.tags) !== null && _a !== void 0 ? _a : []).concat(['Element']).concat(defaultTags);
|
|
9
|
+
this.description = definition?.description;
|
|
10
|
+
this.tags = (definition?.tags ?? []).concat(['Element']).concat(defaultTags);
|
|
12
11
|
}
|
|
13
12
|
get canonicalName() {
|
|
14
|
-
return
|
|
13
|
+
return camelCase(this.name);
|
|
15
14
|
}
|
|
16
15
|
uses(otherElement, definition) {
|
|
17
16
|
const relationship = new Relationship(this, otherElement, definition);
|
|
@@ -31,29 +30,31 @@ class Element {
|
|
|
31
30
|
return result;
|
|
32
31
|
}
|
|
33
32
|
}
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
export class TechnicalElement extends Element {
|
|
34
|
+
technology;
|
|
36
35
|
constructor(name, defaultTags = [], definition) {
|
|
37
36
|
super(name, defaultTags, definition);
|
|
38
|
-
this.technology = definition
|
|
37
|
+
this.technology = definition?.technology;
|
|
39
38
|
}
|
|
40
39
|
}
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
export class Relationship {
|
|
41
|
+
source;
|
|
42
|
+
destination;
|
|
43
|
+
description;
|
|
44
|
+
tags;
|
|
45
|
+
technology;
|
|
43
46
|
constructor(source, destination, definition) {
|
|
44
|
-
var _a;
|
|
45
47
|
this.source = source;
|
|
46
48
|
this.destination = destination;
|
|
47
|
-
this.description = definition
|
|
48
|
-
this.technology = definition
|
|
49
|
-
this.tags = (
|
|
49
|
+
this.description = definition?.description;
|
|
50
|
+
this.technology = definition?.technology;
|
|
51
|
+
this.tags = (definition?.tags ?? []).concat(['Relationship']);
|
|
50
52
|
}
|
|
51
53
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
+
export class Group {
|
|
55
|
+
name;
|
|
54
56
|
constructor(name) {
|
|
55
57
|
this.name = name;
|
|
56
58
|
}
|
|
57
59
|
}
|
|
58
|
-
exports.Group = Group;
|
|
59
60
|
//# sourceMappingURL=core.js.map
|
package/src/core.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../../../libs/c4-model/src/core.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../../../libs/c4-model/src/core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAWvC,MAAM,OAAgB,OAAO;IAOL;IANJ,WAAW,CAAS;IACpB,IAAI,CAAuB;IAEnC,cAAc,GAAmB,EAAE,CAAA;IAE3C,YACoB,IAAY,EAC5B,cAAwB,EAAE,EAC1B,UAAuB;QAFP,SAAI,GAAJ,IAAI,CAAQ;QAI5B,IAAI,CAAC,WAAW,GAAG,UAAU,EAAE,WAAW,CAAA;QAC1C,IAAI,CAAC,IAAI,GAAG,CAAC,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;IAChF,CAAC;IAED,IAAW,aAAa;QACpB,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC/B,CAAC;IAEM,IAAI,CAAC,YAAqB,EAAE,UAAiC;QAChE,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,EAAE,YAAY,EAAE,UAAU,CAAC,CAAA;QACrE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IAC1C,CAAC;IAED,IAAW,aAAa;QACpB,OAAO,IAAI,CAAC,cAAc,CAAA;IAC9B,CAAC;IAIM,2BAA2B;QAC9B,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,2BAA2B,EAAE,CAAC,CAAC,CAAA;IAC1H,CAAC;IAEM,oBAAoB,CAAC,IAAa;QACrC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;YACrE,MAAM,WAAW,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,EAAE,CAAA;YACvE,OAAO,CAAC,WAAW,EAAE,GAAG,SAAS,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,CAAA;QACxE,CAAC,CAAC,CAAA;QACF,OAAO,MAAM,CAAA;IACjB,CAAC;CACJ;AAED,MAAM,OAAgB,gBAAiB,SAAQ,OAAO;IAClC,UAAU,CAAS;IAEnC,YAAY,IAAY,EAAE,cAAwB,EAAE,EAAE,UAAiC;QACnF,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,CAAC,CAAA;QACpC,IAAI,CAAC,UAAU,GAAG,UAAU,EAAE,UAAU,CAAA;IAC5C,CAAC;CACJ;AAED,MAAM,OAAO,YAAY;IAMD;IACA;IANJ,WAAW,CAAS;IACpB,IAAI,CAAuB;IAC3B,UAAU,CAAS;IAEnC,YACoB,MAAe,EACf,WAAoB,EACpC,UAAiC;QAFjB,WAAM,GAAN,MAAM,CAAS;QACf,gBAAW,GAAX,WAAW,CAAS;QAGpC,IAAI,CAAC,WAAW,GAAG,UAAU,EAAE,WAAW,CAAA;QAC1C,IAAI,CAAC,UAAU,GAAG,UAAU,EAAE,UAAU,CAAA;QACxC,IAAI,CAAC,IAAI,GAAG,CAAC,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC,CAAA;IACjE,CAAC;CACJ;AAED,MAAM,OAAO,KAAK;IACqB;IAAnC,YAAmC,IAAY;QAAZ,SAAI,GAAJ,IAAI,CAAQ;IAAG,CAAC;CAItD"}
|
package/src/generateDiagrams.js
CHANGED
|
@@ -1,55 +1,47 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as os from 'os';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
import { GenericContainer, Wait } from 'testcontainers';
|
|
5
|
+
import { buildModelWithCatalog } from './model';
|
|
6
|
+
import { StructurizrDSLWriter } from './structurizrDslWriter';
|
|
7
|
+
export async function generateDiagrams(options) {
|
|
8
|
+
const { views: viewsFactory, outputDir, ...buildOptions } = options;
|
|
9
|
+
// a) Build model + catalog
|
|
10
|
+
const { model, catalog } = await buildModelWithCatalog(buildOptions);
|
|
11
|
+
// b) Build views from catalog via callback
|
|
12
|
+
const views = viewsFactory(catalog);
|
|
13
|
+
// c) Generate DSL string
|
|
14
|
+
const dsl = new StructurizrDSLWriter(model, views).write();
|
|
15
|
+
// d) Write DSL to a temp directory (resolve symlinks so Docker bind mounts work on macOS)
|
|
16
|
+
const tmpDir = await fs.promises.mkdtemp(path.join(fs.realpathSync(os.tmpdir()), 'c4-diagrams-'));
|
|
17
|
+
await fs.promises.writeFile(path.join(tmpDir, 'workspace.dsl'), dsl, 'utf8');
|
|
18
|
+
// e) Run Structurizr CLI container to export .mmd files
|
|
19
|
+
await new GenericContainer('structurizr/structurizr')
|
|
20
|
+
.withBindMounts([{ source: tmpDir, target: '/workspace', mode: 'rw' }])
|
|
21
|
+
.withCommand(['export', '-w', '/workspace/workspace.dsl', '-f', 'mermaid', '-o', '/workspace'])
|
|
22
|
+
.withWaitStrategy(Wait.forOneShotStartup())
|
|
23
|
+
.start();
|
|
24
|
+
// f) Copy .mmd files to outputDir
|
|
25
|
+
await fs.promises.mkdir(outputDir, { recursive: true });
|
|
26
|
+
const tmpFiles = await fs.promises.readdir(tmpDir);
|
|
27
|
+
const mmdFiles = tmpFiles.filter((f) => f.endsWith('.mmd'));
|
|
28
|
+
for (const file of mmdFiles) {
|
|
29
|
+
await fs.promises.copyFile(path.join(tmpDir, file), path.join(outputDir, file));
|
|
30
|
+
}
|
|
31
|
+
const generatedFiles = mmdFiles.map((f) => path.join(outputDir, f));
|
|
32
|
+
// g) For each .mmd file, render to .png via minlag/mermaid-cli container
|
|
33
|
+
for (const file of mmdFiles) {
|
|
34
|
+
const baseName = path.basename(file, '.mmd');
|
|
35
|
+
const pngFile = `${baseName}.png`;
|
|
36
|
+
await new GenericContainer('minlag/mermaid-cli')
|
|
37
|
+
.withBindMounts([{ source: tmpDir, target: '/data', mode: 'rw' }])
|
|
38
|
+
.withCommand(['-i', `/data/${file}`, '-o', `/data/${pngFile}`])
|
|
39
|
+
.withWaitStrategy(Wait.forOneShotStartup())
|
|
30
40
|
.start();
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
yield fs.promises.copyFile(path.join(tmpDir, file), path.join(outputDir, file));
|
|
37
|
-
}
|
|
38
|
-
const generatedFiles = mmdFiles.map((f) => path.join(outputDir, f));
|
|
39
|
-
// g) For each .mmd file, render to .png via minlag/mermaid-cli container
|
|
40
|
-
for (const file of mmdFiles) {
|
|
41
|
-
const baseName = path.basename(file, '.mmd');
|
|
42
|
-
const pngFile = `${baseName}.png`;
|
|
43
|
-
yield new testcontainers_1.GenericContainer('minlag/mermaid-cli')
|
|
44
|
-
.withBindMounts([{ source: tmpDir, target: '/data', mode: 'rw' }])
|
|
45
|
-
.withCommand(['-i', `/data/${file}`, '-o', `/data/${pngFile}`])
|
|
46
|
-
.withWaitStrategy(testcontainers_1.Wait.forOneShotStartup())
|
|
47
|
-
.start();
|
|
48
|
-
yield fs.promises.copyFile(path.join(tmpDir, pngFile), path.join(outputDir, pngFile));
|
|
49
|
-
generatedFiles.push(path.join(outputDir, pngFile));
|
|
50
|
-
}
|
|
51
|
-
// h) Return all generated file paths
|
|
52
|
-
return generatedFiles;
|
|
53
|
-
});
|
|
41
|
+
await fs.promises.copyFile(path.join(tmpDir, pngFile), path.join(outputDir, pngFile));
|
|
42
|
+
generatedFiles.push(path.join(outputDir, pngFile));
|
|
43
|
+
}
|
|
44
|
+
// h) Return all generated file paths
|
|
45
|
+
return generatedFiles;
|
|
54
46
|
}
|
|
55
47
|
//# sourceMappingURL=generateDiagrams.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateDiagrams.js","sourceRoot":"","sources":["../../../../libs/c4-model/src/generateDiagrams.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"generateDiagrams.js","sourceRoot":"","sources":["../../../../libs/c4-model/src/generateDiagrams.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAE5B,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAEvD,OAAO,EAAqB,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAQ7D,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAQ,OAAuC;IACjF,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,YAAY,EAAE,GAAG,OAAO,CAAA;IAEnE,2BAA2B;IAC3B,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,qBAAqB,CAAQ,YAAY,CAAC,CAAA;IAE3E,2CAA2C;IAC3C,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;IAEnC,yBAAyB;IACzB,MAAM,GAAG,GAAG,IAAI,oBAAoB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,KAAK,EAAE,CAAA;IAE1D,0FAA0F;IAC1F,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC,CAAA;IACjG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,CAAA;IAE5E,wDAAwD;IACxD,MAAM,IAAI,gBAAgB,CAAC,yBAAyB,CAAC;SAChD,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;SACtE,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,0BAA0B,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;SAC9F,gBAAgB,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAC1C,KAAK,EAAE,CAAA;IAEZ,kCAAkC;IAClC,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACvD,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IAClD,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA;IAE3D,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC1B,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAA;IACnF,CAAC;IAED,MAAM,cAAc,GAAa,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAA;IAE7E,yEAAyE;IACzE,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QAC5C,MAAM,OAAO,GAAG,GAAG,QAAQ,MAAM,CAAA;QACjC,MAAM,IAAI,gBAAgB,CAAC,oBAAoB,CAAC;aAC3C,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;aACjE,WAAW,CAAC,CAAC,IAAI,EAAE,SAAS,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,OAAO,EAAE,CAAC,CAAC;aAC9D,gBAAgB,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;aAC1C,KAAK,EAAE,CAAA;QAEZ,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAA;QACrF,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAA;IACtD,CAAC;IAED,qCAAqC;IACrC,OAAO,cAAc,CAAA;AACzB,CAAC"}
|
package/src/index.js
CHANGED
|
@@ -1,12 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
tslib_1.__exportStar(require("./views"), exports);
|
|
10
|
-
tslib_1.__exportStar(require("./structurizrDslWriter"), exports);
|
|
11
|
-
tslib_1.__exportStar(require("./generateDiagrams"), exports);
|
|
1
|
+
export * from './model';
|
|
2
|
+
export * from './person';
|
|
3
|
+
export * from './softwareSystem';
|
|
4
|
+
export * from './container';
|
|
5
|
+
export * from './component';
|
|
6
|
+
export * from './views';
|
|
7
|
+
export * from './structurizrDslWriter';
|
|
8
|
+
export * from './generateDiagrams';
|
|
12
9
|
//# sourceMappingURL=index.js.map
|
package/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/c4-model/src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/c4-model/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA;AACxB,cAAc,kBAAkB,CAAA;AAChC,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,SAAS,CAAA;AACvB,cAAc,wBAAwB,CAAA;AACtC,cAAc,oBAAoB,CAAA"}
|
package/src/model.js
CHANGED
|
@@ -1,22 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const path_1 = require("path");
|
|
9
|
-
const core_1 = require("./core");
|
|
10
|
-
const softwareSystem_1 = require("./softwareSystem");
|
|
11
|
-
const person_1 = require("./person");
|
|
1
|
+
import { glob } from 'glob';
|
|
2
|
+
import { join, dirname } from 'path';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
5
|
+
import { Group } from './core';
|
|
6
|
+
import { SoftwareSystem } from './softwareSystem';
|
|
7
|
+
import { Person } from './person';
|
|
12
8
|
// TODO: This will be a Group of type <SoftwareSystem | Person> if that is added back in
|
|
13
|
-
class ModelGroup extends
|
|
9
|
+
export class ModelGroup extends Group {
|
|
10
|
+
name;
|
|
11
|
+
model;
|
|
12
|
+
softwareSystems = new Map();
|
|
13
|
+
people = new Map();
|
|
14
14
|
constructor(name, model) {
|
|
15
15
|
super(name);
|
|
16
16
|
this.name = name;
|
|
17
17
|
this.model = model;
|
|
18
|
-
this.softwareSystems = new Map();
|
|
19
|
-
this.people = new Map();
|
|
20
18
|
}
|
|
21
19
|
defineSoftwareSystem(name, definition) {
|
|
22
20
|
const softwareSystem = this.model.defineSoftwareSystem(name, definition);
|
|
@@ -35,19 +33,19 @@ class ModelGroup extends core_1.Group {
|
|
|
35
33
|
return Array.from(this.people.values());
|
|
36
34
|
}
|
|
37
35
|
}
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
export class Model {
|
|
37
|
+
name;
|
|
40
38
|
constructor(name) {
|
|
41
39
|
this.name = name;
|
|
42
|
-
this.softwareSystems = new Map();
|
|
43
|
-
this.people = new Map();
|
|
44
|
-
this.groups = new Map();
|
|
45
40
|
}
|
|
41
|
+
softwareSystems = new Map();
|
|
42
|
+
people = new Map();
|
|
43
|
+
groups = new Map();
|
|
46
44
|
defineSoftwareSystem(name, definition) {
|
|
47
45
|
if (this.softwareSystems.has(name)) {
|
|
48
46
|
throw Error(`A SoftwareSystem named '${name}' is defined elsewhere in this Model. A SoftwareSystem can be defined only once.`);
|
|
49
47
|
}
|
|
50
|
-
const system = new
|
|
48
|
+
const system = new SoftwareSystem(name, definition);
|
|
51
49
|
this.softwareSystems.set(name, system);
|
|
52
50
|
return system;
|
|
53
51
|
}
|
|
@@ -64,7 +62,7 @@ class Model {
|
|
|
64
62
|
if (this.people.has(name)) {
|
|
65
63
|
throw Error(`A Person named '${name}' is defined elsewhere in this Model. A Person can be defined only once.`);
|
|
66
64
|
}
|
|
67
|
-
const person = new
|
|
65
|
+
const person = new Person(name, definition);
|
|
68
66
|
this.people.set(name, person);
|
|
69
67
|
return person;
|
|
70
68
|
}
|
|
@@ -87,42 +85,37 @@ class Model {
|
|
|
87
85
|
return Array.from(this.groups.values());
|
|
88
86
|
}
|
|
89
87
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
if (!module.c4Module) {
|
|
105
|
-
continue;
|
|
106
|
-
}
|
|
107
|
-
const instance = module.c4Module;
|
|
108
|
-
const local = instance.registerDefinitions(model);
|
|
109
|
-
rootCatalog[instance.key] = local;
|
|
110
|
-
registrations.push({ instance, key: instance.key, local });
|
|
111
|
-
}
|
|
112
|
-
if (registrations.length === 0) {
|
|
113
|
-
throw new Error(`No c4Module exports found in any ${globPath} files`);
|
|
114
|
-
}
|
|
115
|
-
// Phase 2: each module receives its own slice (local) and every other module's slice (dependencies) to build relationships
|
|
116
|
-
for (const { instance, key, local } of registrations) {
|
|
117
|
-
const dependencies = Object.fromEntries(Object.entries(rootCatalog).filter(([k]) => k !== key));
|
|
118
|
-
instance.buildRelationships(local, dependencies);
|
|
88
|
+
export async function buildModelWithCatalog(options = {}) {
|
|
89
|
+
const { modelName = 'model', globPath = 'c4.dsl.ts', searchRoot = __dirname } = options;
|
|
90
|
+
const model = new Model(modelName);
|
|
91
|
+
const result = await glob(`**/${globPath}`, { cwd: searchRoot });
|
|
92
|
+
if (result.length === 0) {
|
|
93
|
+
throw new Error(`No ${globPath} files found`);
|
|
94
|
+
}
|
|
95
|
+
const modules = await Promise.all(result.map((file) => import(join(searchRoot, file))));
|
|
96
|
+
const registrations = [];
|
|
97
|
+
const rootCatalog = {};
|
|
98
|
+
// Phase 1: each module registers its own definitions; results are nested under the module's key
|
|
99
|
+
for (const module of modules) {
|
|
100
|
+
if (!module.c4Module) {
|
|
101
|
+
continue;
|
|
119
102
|
}
|
|
120
|
-
|
|
121
|
-
|
|
103
|
+
const instance = module.c4Module;
|
|
104
|
+
const local = instance.registerDefinitions(model);
|
|
105
|
+
rootCatalog[instance.key] = local;
|
|
106
|
+
registrations.push({ instance, key: instance.key, local });
|
|
107
|
+
}
|
|
108
|
+
if (registrations.length === 0) {
|
|
109
|
+
throw new Error(`No c4Module exports found in any ${globPath} files`);
|
|
110
|
+
}
|
|
111
|
+
// Phase 2: each module receives its own slice (local) and every other module's slice (dependencies) to build relationships
|
|
112
|
+
for (const { instance, key, local } of registrations) {
|
|
113
|
+
const dependencies = Object.fromEntries(Object.entries(rootCatalog).filter(([k]) => k !== key));
|
|
114
|
+
instance.buildRelationships(local, dependencies);
|
|
115
|
+
}
|
|
116
|
+
return { model, catalog: rootCatalog };
|
|
122
117
|
}
|
|
123
|
-
function buildModel() {
|
|
124
|
-
return
|
|
125
|
-
return (yield buildModelWithCatalog(options)).model;
|
|
126
|
-
});
|
|
118
|
+
export async function buildModel(options = {}) {
|
|
119
|
+
return (await buildModelWithCatalog(options)).model;
|
|
127
120
|
}
|
|
128
121
|
//# sourceMappingURL=model.js.map
|
package/src/model.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../../../libs/c4-model/src/model.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../../../libs/c4-model/src/model.ts"],"names":[],"mappings":"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"}
|
package/src/person.js
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const core_1 = require("./core");
|
|
5
|
-
class Person extends core_1.Element {
|
|
1
|
+
import { Element } from './core';
|
|
2
|
+
export class Person extends Element {
|
|
3
|
+
name;
|
|
6
4
|
constructor(name, definition) {
|
|
7
5
|
super(name, ['Person'], definition);
|
|
8
6
|
this.name = name;
|
|
@@ -11,5 +9,4 @@ class Person extends core_1.Element {
|
|
|
11
9
|
return [];
|
|
12
10
|
}
|
|
13
11
|
}
|
|
14
|
-
exports.Person = Person;
|
|
15
12
|
//# sourceMappingURL=person.js.map
|
package/src/person.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"person.js","sourceRoot":"","sources":["../../../../libs/c4-model/src/person.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"person.js","sourceRoot":"","sources":["../../../../libs/c4-model/src/person.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,OAAO,EAAE,MAAM,QAAQ,CAAA;AAI5C,MAAM,OAAO,MAAO,SAAQ,OAAO;IAEF;IAD7B,YAC6B,IAAY,EACrC,UAA6B;QAE7B,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC,CAAA;QAHV,SAAI,GAAJ,IAAI,CAAQ;IAIzC,CAAC;IAEM,gBAAgB;QACnB,OAAO,EAAE,CAAA;IACb,CAAC;CACJ"}
|
package/src/softwareSystem.js
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.SoftwareSystem = exports.SoftwareSystemGroup = void 0;
|
|
4
|
-
const core_1 = require("./core");
|
|
5
|
-
const container_1 = require("./container");
|
|
1
|
+
import { Element, Group } from './core';
|
|
2
|
+
import { Container } from './container';
|
|
6
3
|
// TODO: This will be a Group<Container> if that is added back in
|
|
7
|
-
class SoftwareSystemGroup extends
|
|
4
|
+
export class SoftwareSystemGroup extends Group {
|
|
5
|
+
name;
|
|
6
|
+
softwareSystem;
|
|
7
|
+
_containers = new Map();
|
|
8
8
|
constructor(name, softwareSystem) {
|
|
9
9
|
super(name);
|
|
10
10
|
this.name = name;
|
|
11
11
|
this.softwareSystem = softwareSystem;
|
|
12
|
-
this._containers = new Map();
|
|
13
12
|
}
|
|
14
13
|
defineContainer(name, definition) {
|
|
15
14
|
const container = this.softwareSystem.defineContainer(name, definition);
|
|
@@ -20,19 +19,19 @@ class SoftwareSystemGroup extends core_1.Group {
|
|
|
20
19
|
return Array.from(this._containers.values());
|
|
21
20
|
}
|
|
22
21
|
}
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
export class SoftwareSystem extends Element {
|
|
23
|
+
name;
|
|
24
|
+
_containers = new Map();
|
|
25
|
+
_groups = new Map();
|
|
25
26
|
constructor(name, definition) {
|
|
26
27
|
super(name, ['Software System'], definition);
|
|
27
28
|
this.name = name;
|
|
28
|
-
this._containers = new Map();
|
|
29
|
-
this._groups = new Map();
|
|
30
29
|
}
|
|
31
30
|
defineContainer(name, definition) {
|
|
32
31
|
if (this._containers.has(name)) {
|
|
33
32
|
throw Error(`A Container named '${name}' is defined elsewhere in this SoftwareSystem. A Container can be defined only once.`);
|
|
34
33
|
}
|
|
35
|
-
const container = new
|
|
34
|
+
const container = new Container(name, definition);
|
|
36
35
|
this._containers.set(name, container);
|
|
37
36
|
return container;
|
|
38
37
|
}
|
|
@@ -55,5 +54,4 @@ class SoftwareSystem extends core_1.Element {
|
|
|
55
54
|
return Array.from(this._containers.values()).filter((container) => !containersInGroups.includes(container));
|
|
56
55
|
}
|
|
57
56
|
}
|
|
58
|
-
exports.SoftwareSystem = SoftwareSystem;
|
|
59
57
|
//# sourceMappingURL=softwareSystem.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"softwareSystem.js","sourceRoot":"","sources":["../../../../libs/c4-model/src/softwareSystem.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"softwareSystem.js","sourceRoot":"","sources":["../../../../libs/c4-model/src/softwareSystem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AACnD,OAAO,EAAE,SAAS,EAAuB,MAAM,aAAa,CAAA;AAY5D,iEAAiE;AACjE,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAIb;IACR;IAJb,WAAW,GAAG,IAAI,GAAG,EAAqB,CAAA;IAElD,YAC6B,IAAY,EACpB,cAA+B;QAEhD,KAAK,CAAC,IAAI,CAAC,CAAA;QAHc,SAAI,GAAJ,IAAI,CAAQ;QACpB,mBAAc,GAAd,cAAc,CAAiB;IAGpD,CAAC;IAEM,eAAe,CAAC,IAAY,EAAE,UAAgC;QACjE,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;QACvE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;QACrC,OAAO,SAAS,CAAA;IACpB,CAAC;IAEM,aAAa;QAChB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAA;IAChD,CAAC;CACJ;AAED,MAAM,OAAO,cAAe,SAAQ,OAAO;IAKV;IAJrB,WAAW,GAAG,IAAI,GAAG,EAAqB,CAAA;IAC1C,OAAO,GAAG,IAAI,GAAG,EAA+B,CAAA;IAExD,YAC6B,IAAY,EACrC,UAAqC;QAErC,KAAK,CAAC,IAAI,EAAE,CAAC,iBAAiB,CAAC,EAAE,UAAU,CAAC,CAAA;QAHnB,SAAI,GAAJ,IAAI,CAAQ;IAIzC,CAAC;IAEM,eAAe,CAAC,IAAY,EAAE,UAAgC;QACjE,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,MAAM,KAAK,CAAC,sBAAsB,IAAI,sFAAsF,CAAC,CAAA;QACjI,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;QAEjD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;QAErC,OAAO,SAAS,CAAA;IACpB,CAAC;IAEM,QAAQ,CAAC,SAAiB;QAC7B,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QACvC,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,KAAK,GAAG,IAAI,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;YAChD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;QACtC,CAAC;QACD,OAAO,KAAK,CAAA;IAChB,CAAC;IAEM,SAAS;QACZ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAC5C,CAAC;IAEM,gBAAgB;QACnB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAA;IAChD,CAAC;IAEM,wBAAwB;QAC3B,MAAM,kBAAkB,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,CAAA;QACtG,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,kBAAkB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAA;IAC/G,CAAC;CACJ"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.StructurizrDSLWriter = void 0;
|
|
4
1
|
const INDENT_SIZE = 2;
|
|
5
|
-
class StructurizrDSLWriter {
|
|
2
|
+
export class StructurizrDSLWriter {
|
|
3
|
+
model;
|
|
4
|
+
views;
|
|
6
5
|
constructor(model, views) {
|
|
7
6
|
this.model = model;
|
|
8
7
|
this.views = views;
|
|
@@ -73,9 +72,8 @@ class StructurizrDSLWriter {
|
|
|
73
72
|
let relationshipsDsl = '';
|
|
74
73
|
elements.forEach((element) => {
|
|
75
74
|
element.getRelationshipsInHierarchy().forEach((relationship) => {
|
|
76
|
-
var _a;
|
|
77
75
|
const tech = relationship.technology ? ` "${relationship.technology}"` : '';
|
|
78
|
-
relationshipsDsl += this.writeLine(`${relationship.source.canonicalName} -> ${relationship.destination.canonicalName} "${
|
|
76
|
+
relationshipsDsl += this.writeLine(`${relationship.source.canonicalName} -> ${relationship.destination.canonicalName} "${relationship.description ?? 'uses'}"${tech} {`, level);
|
|
79
77
|
relationshipsDsl += this.writeLine(`tags ${relationship.tags.map((tag) => `"${tag}"`).join(' ')}`, level + 1);
|
|
80
78
|
relationshipsDsl += this.writeLine(`}`, level);
|
|
81
79
|
});
|
|
@@ -161,5 +159,4 @@ class StructurizrDSLWriter {
|
|
|
161
159
|
return `${indent}${line}\n`;
|
|
162
160
|
}
|
|
163
161
|
}
|
|
164
|
-
exports.StructurizrDSLWriter = StructurizrDSLWriter;
|
|
165
162
|
//# sourceMappingURL=structurizrDslWriter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"structurizrDslWriter.js","sourceRoot":"","sources":["../../../../libs/c4-model/src/structurizrDslWriter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"structurizrDslWriter.js","sourceRoot":"","sources":["../../../../libs/c4-model/src/structurizrDslWriter.ts"],"names":[],"mappings":"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"}
|
package/src/views.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
export class View {
|
|
2
|
+
key;
|
|
3
|
+
subject;
|
|
4
|
+
description;
|
|
5
|
+
title;
|
|
6
|
+
_scopes = [];
|
|
5
7
|
constructor(key, viewDefinition) {
|
|
6
8
|
this.key = key;
|
|
7
|
-
this._scopes = [];
|
|
8
9
|
this.description = viewDefinition.description;
|
|
9
10
|
this.subject = viewDefinition.subject;
|
|
10
11
|
this.title = viewDefinition.title;
|
|
@@ -31,14 +32,11 @@ class View {
|
|
|
31
32
|
return this._scopes;
|
|
32
33
|
}
|
|
33
34
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
this._containerViews = new Map();
|
|
40
|
-
this._componentViews = new Map();
|
|
41
|
-
}
|
|
35
|
+
export class Views {
|
|
36
|
+
_systemLandscapeViews = new Map();
|
|
37
|
+
_systemContextViews = new Map();
|
|
38
|
+
_containerViews = new Map();
|
|
39
|
+
_componentViews = new Map();
|
|
42
40
|
addSystemLandscapeView(key, definition) {
|
|
43
41
|
const view = new View(key, { subject: undefined, description: definition.description, title: definition.title });
|
|
44
42
|
this._systemLandscapeViews.set(key, view);
|
|
@@ -72,5 +70,4 @@ class Views {
|
|
|
72
70
|
return Array.from(this._componentViews.values());
|
|
73
71
|
}
|
|
74
72
|
}
|
|
75
|
-
exports.Views = Views;
|
|
76
73
|
//# sourceMappingURL=views.js.map
|
package/src/views.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"views.js","sourceRoot":"","sources":["../../../../libs/c4-model/src/views.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"views.js","sourceRoot":"","sources":["../../../../libs/c4-model/src/views.ts"],"names":[],"mappings":"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"}
|
package/CLAUDE.md
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
# c4-model
|
|
2
|
-
|
|
3
|
-
## About
|
|
4
|
-
|
|
5
|
-
TypeScript library for defining C4 architecture models and generating Structurizr DSL.
|
|
6
|
-
|
|
7
|
-
## Structurizr DSL Reference
|
|
8
|
-
|
|
9
|
-
Structurizr DSL docs are available locally at `docs/structurizr/` (run
|
|
10
|
-
`pnpm fetch-structurizr-docs` to populate). When working on `structurizrDslWriter.ts`,
|
|
11
|
-
read the relevant files from that directory. If not present locally, source is:
|
|
12
|
-
https://github.com/structurizr/structurizr.github.io/tree/main/dsl
|
|
13
|
-
|
|
14
|
-
## Running tasks
|
|
15
|
-
|
|
16
|
-
```sh
|
|
17
|
-
pnpm exec nx run c4-model:test
|
|
18
|
-
pnpm exec nx run c4-model:build
|
|
19
|
-
pnpm exec nx run c4-model:lint
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
## Architecture
|
|
23
|
-
|
|
24
|
-
- `core.ts` — Base classes: `Element`, `TechnicalElement`, `Relationship`, `Reference`, `Group`
|
|
25
|
-
- `model.ts` — `Model` class, `C4Module` interface, `buildModel()` two-phase loader
|
|
26
|
-
- `person.ts` / `softwareSystem.ts` / `container.ts` / `component.ts` — C4 element types
|
|
27
|
-
- `views.ts` — View definitions (system landscape, context, container, component)
|
|
28
|
-
- `structurizrDslWriter.ts` — Generates Structurizr DSL from a Model + Views
|
|
29
|
-
|
|
30
|
-
## C4Module pattern
|
|
31
|
-
|
|
32
|
-
Modules are defined in `c4.dsl.ts` files discovered by `buildModel()` via glob. Each exports a `c4Module`:
|
|
33
|
-
|
|
34
|
-
```ts
|
|
35
|
-
export const c4Module: C4Module<RootCatalog, LocalCatalog> = {
|
|
36
|
-
key: 'myModule',
|
|
37
|
-
registerDefinitions(model) { /* define elements, return catalog */ },
|
|
38
|
-
buildRelationships(local, dependencies) { /* wire up cross-module relationships */ },
|
|
39
|
-
}
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
- **Phase 1**: All modules register definitions; results stored in a root catalog keyed by module key
|
|
43
|
-
- **Phase 2**: Each module receives its own catalog and all other modules' catalogs to build relationships
|
|
44
|
-
- `CatalogKeyOf` and `Dependencies` utility types ensure type-safe keys and dependency access
|
|
45
|
-
- See `libs/c4-model-examples` for integration tests using `buildModel()`
|