@agilewallaby/c4-model 0.0.1 → 1.0.1
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/README.md +22 -6
- package/package.json +1 -1
- package/src/index.d.ts +2 -0
- package/src/index.js +2 -0
- package/src/index.js.map +1 -1
- package/src/lib/component.d.ts +3 -5
- package/src/lib/component.js +3 -8
- package/src/lib/component.js.map +1 -1
- package/src/lib/container.d.ts +19 -5
- package/src/lib/container.js +38 -10
- package/src/lib/container.js.map +1 -1
- package/src/lib/core.d.ts +14 -1
- package/src/lib/core.js +35 -3
- package/src/lib/core.js.map +1 -1
- package/src/lib/model.d.ts +30 -0
- package/src/lib/model.js +56 -3
- package/src/lib/model.js.map +1 -1
- package/src/lib/person.d.ts +3 -1
- package/src/lib/person.js +9 -0
- package/src/lib/person.js.map +1 -1
- package/src/lib/softwareSystem.d.ts +19 -6
- package/src/lib/softwareSystem.js +35 -11
- package/src/lib/softwareSystem.js.map +1 -1
- package/src/lib/structurizrDslWriter.d.ts +20 -0
- package/src/lib/structurizrDslWriter.js +166 -0
- package/src/lib/structurizrDslWriter.js.map +1 -0
- package/src/lib/views.d.ts +38 -0
- package/src/lib/views.js +76 -0
- package/src/lib/views.js.map +1 -0
package/README.md
CHANGED
|
@@ -1,11 +1,27 @@
|
|
|
1
|
-
# c4-model
|
|
1
|
+
# `@agilewallaby/c4-model`
|
|
2
2
|
|
|
3
|
-
This library
|
|
3
|
+
This is an opinionated Typescript library for generating C4 models in code, and then exporting the
|
|
4
|
+
model to one or more supported formats for consumption by a rendering mechanism.
|
|
4
5
|
|
|
5
|
-
|
|
6
|
+
Currently supported output formats are:
|
|
6
7
|
|
|
7
|
-
|
|
8
|
+
* [Structurizr DSL](https://github.com/structurizr/dsl/blob/master/docs/language-reference.md): only the
|
|
9
|
+
static views are supported, e.g. system landscape, system context, container, and component diagrams.
|
|
10
|
+
Deployment and dynamic diagrams may be supported in the future.
|
|
8
11
|
|
|
9
|
-
|
|
12
|
+
Other formats that may be supported in the future:
|
|
10
13
|
|
|
11
|
-
|
|
14
|
+
* The [YAML format](https://backstage.io/docs/features/software-catalog/descriptor-format) specified by
|
|
15
|
+
[Spotify Backstage](https://backstage.io/) for documenting systems in the [Software Catalog](https://backstage.io/docs/features/software-catalog/).
|
|
16
|
+
|
|
17
|
+
## Usage
|
|
18
|
+
|
|
19
|
+
The core of this library is the `Model` class. From here you can 'define' instances of `SoftwareSystem`
|
|
20
|
+
and `Person`. They can also be defined through a `Group`;
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
import { Model } from '@agilewallaby/c4-model'
|
|
24
|
+
|
|
25
|
+
const model = new Model("myModel")
|
|
26
|
+
const system1 = model.defineSoftwareSystem("system1")
|
|
27
|
+
```
|
package/package.json
CHANGED
package/src/index.d.ts
CHANGED
package/src/index.js
CHANGED
|
@@ -2,4 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const tslib_1 = require("tslib");
|
|
4
4
|
tslib_1.__exportStar(require("./lib/model"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./lib/views"), exports);
|
|
6
|
+
tslib_1.__exportStar(require("./lib/structurizrDslWriter"), exports);
|
|
5
7
|
//# 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":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/c4-model/src/index.ts"],"names":[],"mappings":";;;AAAA,sDAA2B;AAC3B,sDAA2B;AAC3B,qEAA0C"}
|
package/src/lib/component.d.ts
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
import { Element, Reference,
|
|
1
|
+
import { Element, Reference, TechnicalElement, TechnologyDefinition } from "./core";
|
|
2
2
|
export interface ComponentDefinition extends TechnologyDefinition {
|
|
3
3
|
}
|
|
4
|
-
export declare class Component extends
|
|
4
|
+
export declare class Component extends TechnicalElement {
|
|
5
5
|
readonly name: string;
|
|
6
|
-
private _relationships;
|
|
7
6
|
constructor(name: string, definition?: ComponentDefinition);
|
|
8
|
-
|
|
9
|
-
get relationships(): ReadonlyArray<Relationship>;
|
|
7
|
+
getChildElements(): ReadonlyArray<Element>;
|
|
10
8
|
}
|
|
11
9
|
export declare class ReferencedComponent extends Reference<undefined> {
|
|
12
10
|
}
|
package/src/lib/component.js
CHANGED
|
@@ -2,18 +2,13 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ReferencedComponent = exports.Component = void 0;
|
|
4
4
|
const core_1 = require("./core");
|
|
5
|
-
class Component extends core_1.
|
|
5
|
+
class Component extends core_1.TechnicalElement {
|
|
6
6
|
constructor(name, definition) {
|
|
7
7
|
super(name, ["Component"], definition);
|
|
8
8
|
this.name = name;
|
|
9
|
-
this._relationships = [];
|
|
10
9
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
this._relationships.push(relationship);
|
|
14
|
-
}
|
|
15
|
-
get relationships() {
|
|
16
|
-
return this._relationships;
|
|
10
|
+
getChildElements() {
|
|
11
|
+
return [];
|
|
17
12
|
}
|
|
18
13
|
}
|
|
19
14
|
exports.Component = Component;
|
package/src/lib/component.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component.js","sourceRoot":"","sources":["../../../../../libs/c4-model/src/lib/component.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"component.js","sourceRoot":"","sources":["../../../../../libs/c4-model/src/lib/component.ts"],"names":[],"mappings":";;;AAAA,iCAAmF;AAKnF,MAAa,SAAU,SAAQ,uBAAgB;IAE7C,YAAqC,IAAY,EAAE,UAAgC;QACjF,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC,CAAA;QADH,SAAI,GAAJ,IAAI,CAAQ;IAEjD,CAAC;IAEM,gBAAgB;QACrB,OAAO,EAAE,CAAA;IACX,CAAC;CACF;AATD,8BASC;AAED,MAAa,mBAAoB,SAAQ,gBAAoB;CAC5D;AADD,kDACC"}
|
package/src/lib/container.d.ts
CHANGED
|
@@ -1,16 +1,30 @@
|
|
|
1
|
-
import { Element,
|
|
1
|
+
import { Element, Group, Reference, TechnicalElement, TechnologyDefinition } from "./core";
|
|
2
2
|
import { Component, ComponentDefinition, ReferencedComponent } from "./component";
|
|
3
3
|
export interface ContainerDefinition extends TechnologyDefinition {
|
|
4
4
|
}
|
|
5
|
-
|
|
5
|
+
interface DefineComponent {
|
|
6
|
+
defineComponent(name: string, definition?: ComponentDefinition): Component;
|
|
7
|
+
}
|
|
8
|
+
export declare class ContainerGroup extends Group<Container> implements DefineComponent {
|
|
9
|
+
readonly name: string;
|
|
10
|
+
private readonly container;
|
|
11
|
+
private _components;
|
|
12
|
+
constructor(name: string, container: DefineComponent);
|
|
13
|
+
defineComponent(name: string, definition?: ComponentDefinition): Component;
|
|
14
|
+
getComponents(): ReadonlyArray<Component>;
|
|
15
|
+
}
|
|
16
|
+
export declare class Container extends TechnicalElement implements DefineComponent {
|
|
6
17
|
readonly name: string;
|
|
7
|
-
private _relationships;
|
|
8
18
|
private _components;
|
|
19
|
+
private _groups;
|
|
9
20
|
constructor(name: string, definition?: ContainerDefinition);
|
|
10
|
-
uses(otherElement: RelationshipTarget, definition?: TechnologyDefinition): void;
|
|
11
|
-
get relationships(): ReadonlyArray<Relationship>;
|
|
12
21
|
defineComponent(name: string, definition?: ComponentDefinition): Component;
|
|
22
|
+
addGroup(groupName: string): ContainerGroup;
|
|
23
|
+
getGroups(): ReadonlyArray<ContainerGroup>;
|
|
24
|
+
getComponentsNotInGroups(): ReadonlyArray<Component>;
|
|
25
|
+
getChildElements(): ReadonlyArray<Element>;
|
|
13
26
|
}
|
|
14
27
|
export declare class ReferencedContainer extends Reference<Component> {
|
|
15
28
|
referenceComponent(name: string): ReferencedComponent;
|
|
16
29
|
}
|
|
30
|
+
export {};
|
package/src/lib/container.js
CHANGED
|
@@ -1,21 +1,31 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ReferencedContainer = exports.Container = void 0;
|
|
3
|
+
exports.ReferencedContainer = exports.Container = exports.ContainerGroup = void 0;
|
|
4
4
|
const core_1 = require("./core");
|
|
5
5
|
const component_1 = require("./component");
|
|
6
|
-
class
|
|
7
|
-
constructor(name,
|
|
8
|
-
super(name
|
|
6
|
+
class ContainerGroup extends core_1.Group {
|
|
7
|
+
constructor(name, container) {
|
|
8
|
+
super(name);
|
|
9
9
|
this.name = name;
|
|
10
|
-
this.
|
|
10
|
+
this.container = container;
|
|
11
11
|
this._components = new Map();
|
|
12
12
|
}
|
|
13
|
-
|
|
14
|
-
const
|
|
15
|
-
this.
|
|
13
|
+
defineComponent(name, definition) {
|
|
14
|
+
const component = this.container.defineComponent(name, definition);
|
|
15
|
+
this._components.set(name, component);
|
|
16
|
+
return component;
|
|
17
|
+
}
|
|
18
|
+
getComponents() {
|
|
19
|
+
return Array.from(this._components.values());
|
|
16
20
|
}
|
|
17
|
-
|
|
18
|
-
|
|
21
|
+
}
|
|
22
|
+
exports.ContainerGroup = ContainerGroup;
|
|
23
|
+
class Container extends core_1.TechnicalElement {
|
|
24
|
+
constructor(name, definition) {
|
|
25
|
+
super(name, ["Container"], definition);
|
|
26
|
+
this.name = name;
|
|
27
|
+
this._components = new Map();
|
|
28
|
+
this._groups = new Map();
|
|
19
29
|
}
|
|
20
30
|
defineComponent(name, definition) {
|
|
21
31
|
if (this._components.has(name)) {
|
|
@@ -25,6 +35,24 @@ class Container extends core_1.Element {
|
|
|
25
35
|
this._components.set(name, component);
|
|
26
36
|
return component;
|
|
27
37
|
}
|
|
38
|
+
addGroup(groupName) {
|
|
39
|
+
let group = this._groups.get(groupName);
|
|
40
|
+
if (!group) {
|
|
41
|
+
group = new ContainerGroup(groupName, this);
|
|
42
|
+
this._groups.set(groupName, group);
|
|
43
|
+
}
|
|
44
|
+
return group;
|
|
45
|
+
}
|
|
46
|
+
getGroups() {
|
|
47
|
+
return Array.from(this._groups.values());
|
|
48
|
+
}
|
|
49
|
+
getComponentsNotInGroups() {
|
|
50
|
+
const componentsInGroups = this.getGroups().flatMap(group => group.getComponents());
|
|
51
|
+
return Array.from(this._components.values()).filter(component => !componentsInGroups.includes(component));
|
|
52
|
+
}
|
|
53
|
+
getChildElements() {
|
|
54
|
+
return Array.from(this._components.values());
|
|
55
|
+
}
|
|
28
56
|
}
|
|
29
57
|
exports.Container = Container;
|
|
30
58
|
class ReferencedContainer extends core_1.Reference {
|
package/src/lib/container.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../../../../libs/c4-model/src/lib/container.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../../../../libs/c4-model/src/lib/container.ts"],"names":[],"mappings":"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"}
|
package/src/lib/core.d.ts
CHANGED
|
@@ -13,7 +13,14 @@ export declare abstract class Element {
|
|
|
13
13
|
readonly name: string;
|
|
14
14
|
readonly description?: string;
|
|
15
15
|
readonly tags: ReadonlyArray<string>;
|
|
16
|
+
private _relationships;
|
|
16
17
|
constructor(name: string, defaultTags?: string[], definition?: Definition);
|
|
18
|
+
get canonicalName(): string;
|
|
19
|
+
uses(otherElement: RelationshipTarget, definition?: TechnologyDefinition): void;
|
|
20
|
+
get relationships(): ReadonlyArray<Relationship>;
|
|
21
|
+
abstract getChildElements(): ReadonlyArray<Element>;
|
|
22
|
+
getRelationshipsInHierarchy(): ReadonlyArray<Relationship>;
|
|
23
|
+
getChildElementNames(path?: string): ReadonlyArray<string>;
|
|
17
24
|
}
|
|
18
25
|
export declare abstract class TechnicalElement extends Element {
|
|
19
26
|
readonly technology?: string;
|
|
@@ -31,8 +38,14 @@ export declare class Reference<T> {
|
|
|
31
38
|
readonly name: string;
|
|
32
39
|
private readonly _references;
|
|
33
40
|
constructor(name: string);
|
|
41
|
+
get canonicalName(): string;
|
|
34
42
|
protected referenceChild(name: string, createChild: (childName: string) => Reference<T>): Reference<T>;
|
|
35
43
|
get references(): ReadonlyArray<Reference<T>>;
|
|
36
|
-
|
|
44
|
+
getChildElementNames(path?: string): ReadonlyArray<string>;
|
|
37
45
|
}
|
|
38
46
|
export type RelationshipTarget = Person | SoftwareSystem | ReferencedSoftwareSystem | Container | ReferencedContainer | Component | ReferencedComponent;
|
|
47
|
+
export declare class Group<T> {
|
|
48
|
+
readonly name: string;
|
|
49
|
+
constructor(name: string);
|
|
50
|
+
addToGroup(groupCollection: string, groupMember: T): void;
|
|
51
|
+
}
|
package/src/lib/core.js
CHANGED
|
@@ -1,13 +1,34 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Reference = exports.Relationship = exports.TechnicalElement = exports.Element = void 0;
|
|
3
|
+
exports.Group = exports.Reference = exports.Relationship = exports.TechnicalElement = exports.Element = void 0;
|
|
4
4
|
class Element {
|
|
5
5
|
constructor(name, defaultTags = [], definition) {
|
|
6
6
|
var _a;
|
|
7
7
|
this.name = name;
|
|
8
|
+
this._relationships = [];
|
|
8
9
|
this.description = definition === null || definition === void 0 ? void 0 : definition.description;
|
|
9
10
|
this.tags = ((_a = definition === null || definition === void 0 ? void 0 : definition.tags) !== null && _a !== void 0 ? _a : []).concat(["Element"]).concat(defaultTags);
|
|
10
11
|
}
|
|
12
|
+
get canonicalName() {
|
|
13
|
+
return this.name.toLowerCase();
|
|
14
|
+
}
|
|
15
|
+
uses(otherElement, definition) {
|
|
16
|
+
const relationship = new Relationship(this, otherElement, definition);
|
|
17
|
+
this._relationships.push(relationship);
|
|
18
|
+
}
|
|
19
|
+
get relationships() {
|
|
20
|
+
return this._relationships;
|
|
21
|
+
}
|
|
22
|
+
getRelationshipsInHierarchy() {
|
|
23
|
+
return this._relationships.concat(this.getChildElements().flatMap(element => element.getRelationshipsInHierarchy()));
|
|
24
|
+
}
|
|
25
|
+
getChildElementNames(path) {
|
|
26
|
+
const result = Array.from(this.getChildElements()).flatMap(reference => {
|
|
27
|
+
const currentPath = `${path ? path : '' + this.name}.${reference.name}`;
|
|
28
|
+
return [currentPath, ...reference.getChildElementNames(currentPath)];
|
|
29
|
+
});
|
|
30
|
+
return result;
|
|
31
|
+
}
|
|
11
32
|
}
|
|
12
33
|
exports.Element = Element;
|
|
13
34
|
class TechnicalElement extends Element {
|
|
@@ -33,6 +54,9 @@ class Reference {
|
|
|
33
54
|
this.name = name;
|
|
34
55
|
this._references = new Map();
|
|
35
56
|
}
|
|
57
|
+
get canonicalName() {
|
|
58
|
+
return this.name.toLowerCase();
|
|
59
|
+
}
|
|
36
60
|
referenceChild(name, createChild) {
|
|
37
61
|
let reference = this._references.get(name);
|
|
38
62
|
if (!reference) {
|
|
@@ -44,13 +68,21 @@ class Reference {
|
|
|
44
68
|
get references() {
|
|
45
69
|
return Array.from(this._references.values());
|
|
46
70
|
}
|
|
47
|
-
|
|
71
|
+
getChildElementNames(path) {
|
|
48
72
|
const result = Array.from(this._references.values()).flatMap(reference => {
|
|
49
73
|
const currentPath = `${path ? path : '' + this.name}.${reference.name}`;
|
|
50
|
-
return [currentPath, ...reference.
|
|
74
|
+
return [currentPath, ...reference.getChildElementNames(currentPath)];
|
|
51
75
|
});
|
|
52
76
|
return result;
|
|
53
77
|
}
|
|
54
78
|
}
|
|
55
79
|
exports.Reference = Reference;
|
|
80
|
+
class Group {
|
|
81
|
+
constructor(name) {
|
|
82
|
+
this.name = name;
|
|
83
|
+
}
|
|
84
|
+
addToGroup(groupCollection, groupMember) {
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
exports.Group = Group;
|
|
56
88
|
//# sourceMappingURL=core.js.map
|
package/src/lib/core.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../../../../libs/c4-model/src/lib/core.ts"],"names":[],"mappings":";;;AAcA,MAAsB,OAAO;
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../../../../libs/c4-model/src/lib/core.ts"],"names":[],"mappings":"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"}
|
package/src/lib/model.d.ts
CHANGED
|
@@ -1,5 +1,27 @@
|
|
|
1
|
+
import { Group } from './core';
|
|
1
2
|
import { ReferencedSoftwareSystem, SoftwareSystem, SoftwareSystemDefinition } from './softwareSystem';
|
|
2
3
|
import { Person, PersonDefinition, ReferencedPerson } from './person';
|
|
4
|
+
interface DefineSoftwareSystem {
|
|
5
|
+
defineSoftwareSystem(name: string, definition?: SoftwareSystemDefinition): SoftwareSystem;
|
|
6
|
+
}
|
|
7
|
+
interface DefinePerson {
|
|
8
|
+
definePerson(name: string, definition?: PersonDefinition): Person;
|
|
9
|
+
}
|
|
10
|
+
export declare class ModelGroup extends Group<SoftwareSystem | Person> implements DefineSoftwareSystem, DefinePerson {
|
|
11
|
+
readonly name: string;
|
|
12
|
+
private readonly model;
|
|
13
|
+
private softwareSystems;
|
|
14
|
+
private people;
|
|
15
|
+
constructor(name: string, model: DefineSoftwareSystem & DefinePerson);
|
|
16
|
+
defineSoftwareSystem(name: string, definition?: SoftwareSystemDefinition): SoftwareSystem;
|
|
17
|
+
definePerson(name: string, definition?: PersonDefinition): Person;
|
|
18
|
+
getSoftwareSystems(): ReadonlyArray<SoftwareSystem>;
|
|
19
|
+
getPeople(): ReadonlyArray<Person>;
|
|
20
|
+
}
|
|
21
|
+
export interface ModelDefinitions {
|
|
22
|
+
defineSoftwareSystem(name: string, definition?: SoftwareSystemDefinition): SoftwareSystem;
|
|
23
|
+
definePerson(name: string, definition?: PersonDefinition): Person;
|
|
24
|
+
}
|
|
3
25
|
export declare class Model {
|
|
4
26
|
name: string;
|
|
5
27
|
constructor(name: string);
|
|
@@ -7,10 +29,18 @@ export declare class Model {
|
|
|
7
29
|
private referencedSoftwareSystems;
|
|
8
30
|
private people;
|
|
9
31
|
private referencedPeople;
|
|
32
|
+
private groups;
|
|
10
33
|
defineSoftwareSystem(name: string, definition?: SoftwareSystemDefinition): SoftwareSystem;
|
|
34
|
+
addGroup(groupName: string): Group<SoftwareSystem | Person> & ModelDefinitions;
|
|
11
35
|
referenceSoftwareSystem(name: string): ReferencedSoftwareSystem;
|
|
12
36
|
definePerson(name: string, definition?: PersonDefinition): Person;
|
|
13
37
|
referencePerson(name: string): ReferencedPerson;
|
|
14
38
|
validate(): void;
|
|
39
|
+
getPeople(): ReadonlyArray<Person>;
|
|
40
|
+
getSoftwareSystems(): ReadonlyArray<SoftwareSystem>;
|
|
41
|
+
getPeopleNotInGroups(): ReadonlyArray<Person>;
|
|
42
|
+
getSoftwareSystemsNotInGroups(): ReadonlyArray<SoftwareSystem>;
|
|
43
|
+
getGroups(): ReadonlyArray<ModelGroup>;
|
|
15
44
|
}
|
|
16
45
|
export declare function buildModel(modelName: string, globPath?: string): Promise<Model>;
|
|
46
|
+
export {};
|
package/src/lib/model.js
CHANGED
|
@@ -1,11 +1,38 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.buildModel = exports.Model = void 0;
|
|
3
|
+
exports.buildModel = exports.Model = exports.ModelGroup = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const glob_1 = require("glob");
|
|
6
6
|
const path_1 = require("path");
|
|
7
|
+
const core_1 = require("./core");
|
|
7
8
|
const softwareSystem_1 = require("./softwareSystem");
|
|
8
9
|
const person_1 = require("./person");
|
|
10
|
+
class ModelGroup extends core_1.Group {
|
|
11
|
+
constructor(name, model) {
|
|
12
|
+
super(name);
|
|
13
|
+
this.name = name;
|
|
14
|
+
this.model = model;
|
|
15
|
+
this.softwareSystems = new Map();
|
|
16
|
+
this.people = new Map();
|
|
17
|
+
}
|
|
18
|
+
defineSoftwareSystem(name, definition) {
|
|
19
|
+
const softwareSystem = this.model.defineSoftwareSystem(name, definition);
|
|
20
|
+
this.softwareSystems.set(name, softwareSystem);
|
|
21
|
+
return softwareSystem;
|
|
22
|
+
}
|
|
23
|
+
definePerson(name, definition) {
|
|
24
|
+
const person = this.model.definePerson(name, definition);
|
|
25
|
+
this.people.set(name, person);
|
|
26
|
+
return person;
|
|
27
|
+
}
|
|
28
|
+
getSoftwareSystems() {
|
|
29
|
+
return Array.from(this.softwareSystems.values());
|
|
30
|
+
}
|
|
31
|
+
getPeople() {
|
|
32
|
+
return Array.from(this.people.values());
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.ModelGroup = ModelGroup;
|
|
9
36
|
class Model {
|
|
10
37
|
constructor(name) {
|
|
11
38
|
this.name = name;
|
|
@@ -13,6 +40,7 @@ class Model {
|
|
|
13
40
|
this.referencedSoftwareSystems = new Map();
|
|
14
41
|
this.people = new Map();
|
|
15
42
|
this.referencedPeople = new Map();
|
|
43
|
+
this.groups = new Map();
|
|
16
44
|
}
|
|
17
45
|
defineSoftwareSystem(name, definition) {
|
|
18
46
|
if (this.softwareSystems.has(name)) {
|
|
@@ -22,6 +50,14 @@ class Model {
|
|
|
22
50
|
this.softwareSystems.set(name, system);
|
|
23
51
|
return system;
|
|
24
52
|
}
|
|
53
|
+
addGroup(groupName) {
|
|
54
|
+
let group = this.groups.get(groupName);
|
|
55
|
+
if (!group) {
|
|
56
|
+
group = new ModelGroup(groupName, this);
|
|
57
|
+
this.groups.set(groupName, group);
|
|
58
|
+
}
|
|
59
|
+
return group;
|
|
60
|
+
}
|
|
25
61
|
referenceSoftwareSystem(name) {
|
|
26
62
|
let system = this.referencedSoftwareSystems.get(name);
|
|
27
63
|
if (!system) {
|
|
@@ -55,13 +91,30 @@ class Model {
|
|
|
55
91
|
if (undefinedPeople.length > 0) {
|
|
56
92
|
throw Error(`People named '${undefinedPeople.join("', '")}' are referenced but not defined.`);
|
|
57
93
|
}
|
|
58
|
-
const definedElements = Array.from(this.softwareSystems.values()).flatMap(system => system.
|
|
59
|
-
const referencedElements = Array.from(this.referencedSoftwareSystems.values()).flatMap(system => system.
|
|
94
|
+
const definedElements = Array.from(this.softwareSystems.values()).flatMap(system => system.getChildElementNames());
|
|
95
|
+
const referencedElements = Array.from(this.referencedSoftwareSystems.values()).flatMap(system => system.getChildElementNames());
|
|
60
96
|
const undefinedElements = referencedElements.filter(name => !definedElements.includes(name));
|
|
61
97
|
if (undefinedElements.length > 0) {
|
|
62
98
|
throw Error(`Elements named '${undefinedElements.join("', '")}' are referenced but not defined.`);
|
|
63
99
|
}
|
|
64
100
|
}
|
|
101
|
+
getPeople() {
|
|
102
|
+
return Array.from(this.people.values());
|
|
103
|
+
}
|
|
104
|
+
getSoftwareSystems() {
|
|
105
|
+
return Array.from(this.softwareSystems.values());
|
|
106
|
+
}
|
|
107
|
+
getPeopleNotInGroups() {
|
|
108
|
+
const peopleInGroups = Array.from(this.groups.values()).flatMap(group => group.getPeople());
|
|
109
|
+
return Array.from(this.people.values()).filter(person => !peopleInGroups.includes(person));
|
|
110
|
+
}
|
|
111
|
+
getSoftwareSystemsNotInGroups() {
|
|
112
|
+
const systemsInGroups = Array.from(this.groups.values()).flatMap(group => group.getSoftwareSystems());
|
|
113
|
+
return Array.from(this.softwareSystems.values()).filter(system => !systemsInGroups.includes(system));
|
|
114
|
+
}
|
|
115
|
+
getGroups() {
|
|
116
|
+
return Array.from(this.groups.values());
|
|
117
|
+
}
|
|
65
118
|
}
|
|
66
119
|
exports.Model = Model;
|
|
67
120
|
function buildModel(modelName, globPath = 'c4.dsl.ts') {
|
package/src/lib/model.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../../../../libs/c4-model/src/lib/model.ts"],"names":[],"mappings":";;;;AAAA,+BAA2B;AAC3B,+BAA2B;AAE3B,qDAAsG;AACtG,qCAAqE;
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../../../../libs/c4-model/src/lib/model.ts"],"names":[],"mappings":"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"}
|
package/src/lib/person.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import { Definition, Element, Reference } from './core';
|
|
1
|
+
import { Definition, Element, Reference, RelationshipTarget } from './core';
|
|
2
2
|
export interface PersonDefinition extends Definition {
|
|
3
3
|
}
|
|
4
4
|
export declare class Person extends Element {
|
|
5
5
|
readonly name: string;
|
|
6
6
|
constructor(name: string, definition?: PersonDefinition);
|
|
7
|
+
getChildElements(): ReadonlyArray<Element>;
|
|
8
|
+
uses(otherElement: RelationshipTarget, definition?: Definition): void;
|
|
7
9
|
}
|
|
8
10
|
export declare class ReferencedPerson extends Reference<undefined> {
|
|
9
11
|
}
|
package/src/lib/person.js
CHANGED
|
@@ -7,6 +7,15 @@ class Person extends core_1.Element {
|
|
|
7
7
|
super(name, ["Person"], definition);
|
|
8
8
|
this.name = name;
|
|
9
9
|
}
|
|
10
|
+
getChildElements() {
|
|
11
|
+
return [];
|
|
12
|
+
}
|
|
13
|
+
uses(otherElement, definition) {
|
|
14
|
+
super.uses(otherElement, definition);
|
|
15
|
+
// base(this).uses(otherElement, definition)
|
|
16
|
+
// const relationship = new Relationship(this, otherElement, definition)
|
|
17
|
+
// this._relationships.push(relationship)
|
|
18
|
+
}
|
|
10
19
|
}
|
|
11
20
|
exports.Person = Person;
|
|
12
21
|
class ReferencedPerson extends core_1.Reference {
|
package/src/lib/person.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"person.js","sourceRoot":"","sources":["../../../../../libs/c4-model/src/lib/person.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"person.js","sourceRoot":"","sources":["../../../../../libs/c4-model/src/lib/person.ts"],"names":[],"mappings":";;;AAAA,iCAAyF;AAKzF,MAAa,MAAO,SAAQ,cAAO;IACjC,YAAqC,IAAY,EAAE,UAA6B;QAC9E,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC,CAAA;QADA,SAAI,GAAJ,IAAI,CAAQ;IAEjD,CAAC;IAEM,gBAAgB;QACrB,OAAO,EAAE,CAAA;IACX,CAAC;IAEe,IAAI,CAAC,YAAgC,EAAE,UAAuB;QAC5E,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAA;QACpC,4CAA4C;QAC5C,wEAAwE;QACxE,yCAAyC;IAC3C,CAAC;CACF;AAfD,wBAeC;AAED,MAAa,gBAAiB,SAAQ,gBAAoB;CACzD;AADD,4CACC"}
|
|
@@ -1,20 +1,33 @@
|
|
|
1
|
-
import { Definition, Element,
|
|
1
|
+
import { Definition, Element, Group, Reference } from './core';
|
|
2
2
|
import { Container, ContainerDefinition, ReferencedContainer } from './container';
|
|
3
3
|
export interface SoftwareSystemDefinition extends Definition {
|
|
4
4
|
}
|
|
5
|
+
interface DefineContainer {
|
|
6
|
+
defineContainer(name: string, definition?: ContainerDefinition): Container;
|
|
7
|
+
}
|
|
5
8
|
export interface SoftwareSystemReference {
|
|
6
9
|
name: string;
|
|
7
10
|
}
|
|
8
|
-
export declare class
|
|
11
|
+
export declare class SoftwareSystemGroup extends Group<Container> implements DefineContainer {
|
|
12
|
+
readonly name: string;
|
|
13
|
+
private readonly softwareSystem;
|
|
14
|
+
private _containers;
|
|
15
|
+
constructor(name: string, softwareSystem: DefineContainer);
|
|
16
|
+
defineContainer(name: string, definition?: ContainerDefinition): Container;
|
|
17
|
+
getContainers(): ReadonlyArray<Container>;
|
|
18
|
+
}
|
|
19
|
+
export declare class SoftwareSystem extends Element implements DefineContainer {
|
|
9
20
|
readonly name: string;
|
|
10
|
-
private _relationships;
|
|
11
21
|
private _containers;
|
|
22
|
+
private _groups;
|
|
12
23
|
constructor(name: string, definition?: SoftwareSystemDefinition);
|
|
13
|
-
uses(otherElement: RelationshipTarget, definition?: TechnologyDefinition): void;
|
|
14
|
-
get relationships(): ReadonlyArray<Relationship>;
|
|
15
24
|
defineContainer(name: string, definition?: ContainerDefinition): Container;
|
|
16
|
-
|
|
25
|
+
addGroup(groupName: string): SoftwareSystemGroup;
|
|
26
|
+
getGroups(): ReadonlyArray<SoftwareSystemGroup>;
|
|
27
|
+
getChildElements(): ReadonlyArray<Element>;
|
|
28
|
+
getContainersNotInGroups(): ReadonlyArray<Container>;
|
|
17
29
|
}
|
|
18
30
|
export declare class ReferencedSoftwareSystem extends Reference<Container> {
|
|
19
31
|
referenceContainer(name: string): ReferencedContainer;
|
|
20
32
|
}
|
|
33
|
+
export {};
|
|
@@ -1,21 +1,31 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ReferencedSoftwareSystem = exports.SoftwareSystem = void 0;
|
|
3
|
+
exports.ReferencedSoftwareSystem = exports.SoftwareSystem = exports.SoftwareSystemGroup = void 0;
|
|
4
4
|
const core_1 = require("./core");
|
|
5
5
|
const container_1 = require("./container");
|
|
6
|
+
class SoftwareSystemGroup extends core_1.Group {
|
|
7
|
+
constructor(name, softwareSystem) {
|
|
8
|
+
super(name);
|
|
9
|
+
this.name = name;
|
|
10
|
+
this.softwareSystem = softwareSystem;
|
|
11
|
+
this._containers = new Map();
|
|
12
|
+
}
|
|
13
|
+
defineContainer(name, definition) {
|
|
14
|
+
const container = this.softwareSystem.defineContainer(name, definition);
|
|
15
|
+
this._containers.set(name, container);
|
|
16
|
+
return container;
|
|
17
|
+
}
|
|
18
|
+
getContainers() {
|
|
19
|
+
return Array.from(this._containers.values());
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.SoftwareSystemGroup = SoftwareSystemGroup;
|
|
6
23
|
class SoftwareSystem extends core_1.Element {
|
|
7
24
|
constructor(name, definition) {
|
|
8
25
|
super(name, ["Software System"], definition);
|
|
9
26
|
this.name = name;
|
|
10
|
-
this._relationships = [];
|
|
11
27
|
this._containers = new Map();
|
|
12
|
-
|
|
13
|
-
uses(otherElement, definition) {
|
|
14
|
-
const relationship = new core_1.Relationship(this, otherElement, definition);
|
|
15
|
-
this._relationships.push(relationship);
|
|
16
|
-
}
|
|
17
|
-
get relationships() {
|
|
18
|
-
return this._relationships;
|
|
28
|
+
this._groups = new Map();
|
|
19
29
|
}
|
|
20
30
|
defineContainer(name, definition) {
|
|
21
31
|
if (this._containers.has(name)) {
|
|
@@ -25,9 +35,23 @@ class SoftwareSystem extends core_1.Element {
|
|
|
25
35
|
this._containers.set(name, container);
|
|
26
36
|
return container;
|
|
27
37
|
}
|
|
38
|
+
addGroup(groupName) {
|
|
39
|
+
let group = this._groups.get(groupName);
|
|
40
|
+
if (!group) {
|
|
41
|
+
group = new SoftwareSystemGroup(groupName, this);
|
|
42
|
+
this._groups.set(groupName, group);
|
|
43
|
+
}
|
|
44
|
+
return group;
|
|
45
|
+
}
|
|
46
|
+
getGroups() {
|
|
47
|
+
return Array.from(this._groups.values());
|
|
48
|
+
}
|
|
28
49
|
getChildElements() {
|
|
29
|
-
|
|
30
|
-
|
|
50
|
+
return Array.from(this._containers.values());
|
|
51
|
+
}
|
|
52
|
+
getContainersNotInGroups() {
|
|
53
|
+
const containersInGroups = Array.from(this._groups.values()).flatMap((group) => group.getContainers());
|
|
54
|
+
return Array.from(this._containers.values()).filter((container) => !containersInGroups.includes(container));
|
|
31
55
|
}
|
|
32
56
|
}
|
|
33
57
|
exports.SoftwareSystem = SoftwareSystem;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"softwareSystem.js","sourceRoot":"","sources":["../../../../../libs/c4-model/src/lib/softwareSystem.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"softwareSystem.js","sourceRoot":"","sources":["../../../../../libs/c4-model/src/lib/softwareSystem.ts"],"names":[],"mappings":";;;AAAA,iCAA8D;AAC9D,2CAAiF;AAajF,MAAa,mBAAoB,SAAQ,YAAgB;IAGvD,YAA4C,IAAY,EACrC,cAA+B;QAChD,KAAK,CAAC,IAAI,CAAC,CAAA;QAF+B,SAAI,GAAJ,IAAI,CAAQ;QACrC,mBAAc,GAAd,cAAc,CAAiB;QAH1C,gBAAW,GAAG,IAAI,GAAG,EAAqB,CAAA;IAKlD,CAAC;IAEM,eAAe,CAAC,IAAY,EAAE,UAAgC;QACnE,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;IAClB,CAAC;IAEM,aAAa;QAClB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAA;IAC9C,CAAC;CACF;AAjBD,kDAiBC;AAED,MAAa,cAAe,SAAQ,cAAO;IAKzC,YAAqC,IAAY,EAAE,UAAqC;QACtF,KAAK,CAAC,IAAI,EAAE,CAAC,iBAAiB,CAAC,EAAE,UAAU,CAAC,CAAA;QADT,SAAI,GAAJ,IAAI,CAAQ;QAHzC,gBAAW,GAAG,IAAI,GAAG,EAAqB,CAAC;QAC3C,YAAO,GAAG,IAAI,GAAG,EAA+B,CAAA;IAIxD,CAAC;IAEM,eAAe,CAAC,IAAY,EAAE,UAAgC;QACnE,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YAC9B,MAAM,KAAK,CAAC,sBAAsB,IAAI,4HAA4H,CAAC,CAAA;SACpK;QAED,MAAM,SAAS,GAAG,IAAI,qBAAS,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;QAEjD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAEtC,OAAO,SAAS,CAAA;IAClB,CAAC;IAEM,QAAQ,CAAC,SAAiB;QAC/B,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QACvC,IAAI,CAAC,KAAK,EAAE;YACV,KAAK,GAAG,IAAI,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;YAChD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;SACnC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAEM,SAAS;QACd,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAC1C,CAAC;IAEM,gBAAgB;QACrB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAA;IAC9C,CAAC;IAEM,wBAAwB;QAC7B,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;IAC7G,CAAC;CACF;AA1CD,wCA0CC;AAED,MAAa,wBAAyB,SAAQ,gBAAoB;IAEzD,kBAAkB,CAAC,IAAY;QACpC,MAAM,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,+BAAmB,CAAC,IAAI,CAAC,CAAC,CAAA;QACrG,OAAO,kBAAyC,CAAA;IAClD,CAAC;CACF;AAND,4DAMC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Model } from "./model";
|
|
2
|
+
import { Views } from './views';
|
|
3
|
+
export declare class StructurizrDSLWriter {
|
|
4
|
+
private readonly model;
|
|
5
|
+
private readonly views;
|
|
6
|
+
constructor(model: Model, views: Views);
|
|
7
|
+
private writeElement;
|
|
8
|
+
private writeComponent;
|
|
9
|
+
private writeContainerGroup;
|
|
10
|
+
private writeContainer;
|
|
11
|
+
private writeSoftwareSystemGroup;
|
|
12
|
+
private writeSoftwareSystem;
|
|
13
|
+
private writeRelationships;
|
|
14
|
+
private writeModelGroup;
|
|
15
|
+
private writeModel;
|
|
16
|
+
private writeView;
|
|
17
|
+
private writeViews;
|
|
18
|
+
write(): string;
|
|
19
|
+
private writeLine;
|
|
20
|
+
}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StructurizrDSLWriter = void 0;
|
|
4
|
+
const INDENT_SIZE = 2;
|
|
5
|
+
class StructurizrDSLWriter {
|
|
6
|
+
constructor(model, views) {
|
|
7
|
+
this.model = model;
|
|
8
|
+
this.views = views;
|
|
9
|
+
}
|
|
10
|
+
writeElement(elementType, element, level, closeElement = true) {
|
|
11
|
+
let elementDsl = "";
|
|
12
|
+
elementDsl += this.writeLine(`${element.canonicalName} = ${elementType} "${element.name}" {`, level);
|
|
13
|
+
if (element.description) {
|
|
14
|
+
elementDsl += this.writeLine(`description "${element.description}"`, level + 1);
|
|
15
|
+
}
|
|
16
|
+
elementDsl += this.writeLine(`tags ${element.tags.map(tag => `"${tag}"`).join(" ")}`, level + 1);
|
|
17
|
+
if (closeElement) {
|
|
18
|
+
elementDsl += this.writeLine(`}`, level);
|
|
19
|
+
}
|
|
20
|
+
return elementDsl;
|
|
21
|
+
}
|
|
22
|
+
writeComponent(component, level) {
|
|
23
|
+
let componentDsl = "";
|
|
24
|
+
componentDsl += this.writeElement("component", component, level, false);
|
|
25
|
+
componentDsl += this.writeLine(`technology "${component.technology}"`, level + 1);
|
|
26
|
+
componentDsl += this.writeLine(`}`, level);
|
|
27
|
+
return componentDsl;
|
|
28
|
+
}
|
|
29
|
+
writeContainerGroup(group, level) {
|
|
30
|
+
let containerGroupDsl = "";
|
|
31
|
+
containerGroupDsl += this.writeLine(`${group.name} = group "${group.name}" {`, level);
|
|
32
|
+
group.getComponents().forEach(component => {
|
|
33
|
+
containerGroupDsl += this.writeComponent(component, level + 1);
|
|
34
|
+
});
|
|
35
|
+
containerGroupDsl += this.writeLine(`}`, level);
|
|
36
|
+
return containerGroupDsl;
|
|
37
|
+
}
|
|
38
|
+
writeContainer(container, level) {
|
|
39
|
+
let containerDsl = "";
|
|
40
|
+
containerDsl += this.writeElement("container", container, level, false);
|
|
41
|
+
containerDsl += this.writeLine(`technology "${container.technology}"`, level + 1);
|
|
42
|
+
container.getComponentsNotInGroups().forEach((component) => {
|
|
43
|
+
containerDsl += this.writeComponent(component, level + 1);
|
|
44
|
+
});
|
|
45
|
+
container.getGroups().forEach((group) => {
|
|
46
|
+
containerDsl += this.writeContainerGroup(group, level + 1);
|
|
47
|
+
});
|
|
48
|
+
containerDsl += this.writeLine(`}`, level);
|
|
49
|
+
return containerDsl;
|
|
50
|
+
}
|
|
51
|
+
writeSoftwareSystemGroup(group, level) {
|
|
52
|
+
let softwareSystemGroupDsl = "";
|
|
53
|
+
softwareSystemGroupDsl += this.writeLine(`${group.name} = group "${group.name}" {`, level);
|
|
54
|
+
group.getContainers().forEach(container => {
|
|
55
|
+
softwareSystemGroupDsl += this.writeContainer(container, level + 1);
|
|
56
|
+
});
|
|
57
|
+
softwareSystemGroupDsl += this.writeLine(`}`, level);
|
|
58
|
+
return softwareSystemGroupDsl;
|
|
59
|
+
}
|
|
60
|
+
writeSoftwareSystem(softwareSystem, level) {
|
|
61
|
+
let softwareSystemDsl = "";
|
|
62
|
+
softwareSystemDsl += this.writeElement("softwareSystem", softwareSystem, level, false);
|
|
63
|
+
softwareSystem.getContainersNotInGroups().forEach((container) => {
|
|
64
|
+
softwareSystemDsl += this.writeContainer(container, level + 1);
|
|
65
|
+
});
|
|
66
|
+
softwareSystem.getGroups().forEach((group) => {
|
|
67
|
+
softwareSystemDsl += this.writeSoftwareSystemGroup(group, level + 1);
|
|
68
|
+
});
|
|
69
|
+
softwareSystemDsl += this.writeLine(`}`, level);
|
|
70
|
+
return softwareSystemDsl;
|
|
71
|
+
}
|
|
72
|
+
writeRelationships(elements, level) {
|
|
73
|
+
let relationshipsDsl = "";
|
|
74
|
+
elements.forEach(element => {
|
|
75
|
+
element.getRelationshipsInHierarchy().forEach(relationship => {
|
|
76
|
+
var _a;
|
|
77
|
+
relationshipsDsl += this.writeLine(`${relationship.source.canonicalName} -> ${relationship.destination.canonicalName} "${(_a = relationship.description) !== null && _a !== void 0 ? _a : "uses"}" {`, level);
|
|
78
|
+
if (relationship.technology) {
|
|
79
|
+
relationshipsDsl += this.writeLine(`technology "${relationship.technology}"`, level + 1);
|
|
80
|
+
}
|
|
81
|
+
relationshipsDsl += this.writeLine(`tags ${relationship.tags.map(tag => `"${tag}"`).join(" ")}`, level + 1);
|
|
82
|
+
relationshipsDsl += this.writeLine(`}`, level);
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
return relationshipsDsl;
|
|
86
|
+
}
|
|
87
|
+
writeModelGroup(group, level) {
|
|
88
|
+
let modelGroupDsl = "";
|
|
89
|
+
modelGroupDsl += this.writeLine(`${group.name} = group "${group.name}" {`, level);
|
|
90
|
+
group.getPeople().forEach(person => {
|
|
91
|
+
modelGroupDsl += this.writeElement("person", person, level + 1);
|
|
92
|
+
});
|
|
93
|
+
group.getSoftwareSystems().forEach(softwareSystem => {
|
|
94
|
+
modelGroupDsl += this.writeSoftwareSystem(softwareSystem, level + 1);
|
|
95
|
+
});
|
|
96
|
+
modelGroupDsl += this.writeLine(`}`, level);
|
|
97
|
+
return modelGroupDsl;
|
|
98
|
+
}
|
|
99
|
+
writeModel(model, level) {
|
|
100
|
+
let modelDsl = "";
|
|
101
|
+
modelDsl += this.writeLine(`model {`, level);
|
|
102
|
+
modelDsl += this.writeLine('// Elements', level + 1);
|
|
103
|
+
model.getPeopleNotInGroups().forEach(person => {
|
|
104
|
+
modelDsl += this.writeElement("person", person, level + 1);
|
|
105
|
+
});
|
|
106
|
+
model.getSoftwareSystemsNotInGroups().forEach(softwareSystem => {
|
|
107
|
+
modelDsl += this.writeSoftwareSystem(softwareSystem, level + 1);
|
|
108
|
+
});
|
|
109
|
+
model.getGroups().forEach(group => {
|
|
110
|
+
modelDsl += this.writeModelGroup(group, level + 1);
|
|
111
|
+
});
|
|
112
|
+
modelDsl += this.writeLine('// Relationships', level + 1);
|
|
113
|
+
modelDsl += this.writeRelationships(model.getPeople().concat(model.getSoftwareSystems()), level + 1);
|
|
114
|
+
modelDsl += this.writeLine(`}`, level);
|
|
115
|
+
return modelDsl;
|
|
116
|
+
}
|
|
117
|
+
writeView(view, viewType, level) {
|
|
118
|
+
let viewDsl = this.writeLine(`${viewType}${view.subject ? ' "' + view.subject.canonicalName + '"' : ""} "${view.key}" "${view.description}" {`, level);
|
|
119
|
+
if (view.title) {
|
|
120
|
+
viewDsl += this.writeLine(`title "${view.title}"`, level + 1);
|
|
121
|
+
}
|
|
122
|
+
view.scopes.forEach(scope => {
|
|
123
|
+
viewDsl += this.writeLine(`${scope}`, level + 1);
|
|
124
|
+
});
|
|
125
|
+
viewDsl += this.writeLine(`}`, level);
|
|
126
|
+
return viewDsl;
|
|
127
|
+
}
|
|
128
|
+
writeViews(views, level) {
|
|
129
|
+
let viewDsl = "";
|
|
130
|
+
viewDsl += this.writeLine(`views {`, level);
|
|
131
|
+
viewDsl += this.writeLine('// System Landscape Views', level + 1);
|
|
132
|
+
views.systemLandscapeViews.forEach(view => {
|
|
133
|
+
viewDsl += this.writeView(view, "systemLandscape", level + 1);
|
|
134
|
+
});
|
|
135
|
+
viewDsl += this.writeLine('// System Context Views', level + 1);
|
|
136
|
+
views.systemContextViews.forEach(view => {
|
|
137
|
+
viewDsl += this.writeView(view, "systemContext", level + 1);
|
|
138
|
+
});
|
|
139
|
+
viewDsl += this.writeLine('// Container Views', level + 1);
|
|
140
|
+
views.containerViews.forEach(view => {
|
|
141
|
+
viewDsl += this.writeView(view, "container", level + 1);
|
|
142
|
+
});
|
|
143
|
+
viewDsl += this.writeLine('// Component Views', level + 1);
|
|
144
|
+
views.componentViews.forEach(view => {
|
|
145
|
+
viewDsl += this.writeView(view, "component", level + 1);
|
|
146
|
+
});
|
|
147
|
+
viewDsl += this.writeLine(`theme default`, level + 1);
|
|
148
|
+
viewDsl += this.writeLine(`}`, level);
|
|
149
|
+
return viewDsl;
|
|
150
|
+
}
|
|
151
|
+
write() {
|
|
152
|
+
let dsl = "";
|
|
153
|
+
this.model.validate();
|
|
154
|
+
dsl += this.writeLine(`workspace "${this.model.name}" {`, 0);
|
|
155
|
+
dsl += this.writeModel(this.model, 1);
|
|
156
|
+
dsl += this.writeViews(this.views, 1);
|
|
157
|
+
dsl += this.writeLine(`}`, 0);
|
|
158
|
+
return dsl;
|
|
159
|
+
}
|
|
160
|
+
writeLine(line, level) {
|
|
161
|
+
const indent = " ".repeat(level * INDENT_SIZE);
|
|
162
|
+
return `${indent}${line}\n`;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
exports.StructurizrDSLWriter = StructurizrDSLWriter;
|
|
166
|
+
//# sourceMappingURL=structurizrDslWriter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structurizrDslWriter.js","sourceRoot":"","sources":["../../../../../libs/c4-model/src/lib/structurizrDslWriter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Container } from './container';
|
|
2
|
+
import { Element } from './core';
|
|
3
|
+
import { SoftwareSystem } from './softwareSystem';
|
|
4
|
+
interface ViewDefinition<T extends Element> {
|
|
5
|
+
subject?: T;
|
|
6
|
+
description: string;
|
|
7
|
+
title?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare class View<T extends Element> {
|
|
10
|
+
readonly key: string;
|
|
11
|
+
readonly subject?: T;
|
|
12
|
+
readonly description: string;
|
|
13
|
+
readonly title?: string;
|
|
14
|
+
private _scopes;
|
|
15
|
+
constructor(key: string, viewDefinition: ViewDefinition<T>);
|
|
16
|
+
includeAll(): void;
|
|
17
|
+
includeElement(element: T): void;
|
|
18
|
+
includeExpression(expression: string): void;
|
|
19
|
+
excludeAll(): void;
|
|
20
|
+
excludeElement(element: T): void;
|
|
21
|
+
excludeExpression(expression: string): void;
|
|
22
|
+
get scopes(): ReadonlyArray<string>;
|
|
23
|
+
}
|
|
24
|
+
export declare class Views {
|
|
25
|
+
private readonly _systemLandscapeViews;
|
|
26
|
+
private readonly _systemContextViews;
|
|
27
|
+
private readonly _containerViews;
|
|
28
|
+
private readonly _componentViews;
|
|
29
|
+
addSystemLandscapeView(key: string, definition: ViewDefinition<Element>): View<Element>;
|
|
30
|
+
addSystemContextView(key: string, definition: ViewDefinition<SoftwareSystem>): View<SoftwareSystem>;
|
|
31
|
+
addContainerView(key: string, definition: ViewDefinition<SoftwareSystem>): View<SoftwareSystem>;
|
|
32
|
+
addComponentView(key: string, definition: ViewDefinition<Container>): View<Container>;
|
|
33
|
+
get systemLandscapeViews(): ReadonlyArray<View<Element>>;
|
|
34
|
+
get systemContextViews(): ReadonlyArray<View<SoftwareSystem>>;
|
|
35
|
+
get containerViews(): ReadonlyArray<View<SoftwareSystem>>;
|
|
36
|
+
get componentViews(): ReadonlyArray<View<Container>>;
|
|
37
|
+
}
|
|
38
|
+
export {};
|
package/src/lib/views.js
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Views = exports.View = void 0;
|
|
4
|
+
class View {
|
|
5
|
+
constructor(key, viewDefinition) {
|
|
6
|
+
this.key = key;
|
|
7
|
+
this._scopes = [];
|
|
8
|
+
this.description = viewDefinition.description;
|
|
9
|
+
this.subject = viewDefinition.subject;
|
|
10
|
+
this.title = viewDefinition.title;
|
|
11
|
+
}
|
|
12
|
+
includeAll() {
|
|
13
|
+
this._scopes.push("include *");
|
|
14
|
+
}
|
|
15
|
+
includeElement(element) {
|
|
16
|
+
this._scopes.push(`include ${element.canonicalName}`);
|
|
17
|
+
}
|
|
18
|
+
includeExpression(expression) {
|
|
19
|
+
this._scopes.push(`include ${expression}`);
|
|
20
|
+
}
|
|
21
|
+
excludeAll() {
|
|
22
|
+
this._scopes.push("exclude *");
|
|
23
|
+
}
|
|
24
|
+
excludeElement(element) {
|
|
25
|
+
this._scopes.push(`exclude ${element.canonicalName}`);
|
|
26
|
+
}
|
|
27
|
+
excludeExpression(expression) {
|
|
28
|
+
this._scopes.push(`exclude ${expression}`);
|
|
29
|
+
}
|
|
30
|
+
get scopes() {
|
|
31
|
+
return this._scopes;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.View = View;
|
|
35
|
+
class Views {
|
|
36
|
+
constructor() {
|
|
37
|
+
this._systemLandscapeViews = new Map();
|
|
38
|
+
this._systemContextViews = new Map();
|
|
39
|
+
this._containerViews = new Map();
|
|
40
|
+
this._componentViews = new Map();
|
|
41
|
+
}
|
|
42
|
+
addSystemLandscapeView(key, definition) {
|
|
43
|
+
const view = new View(key, { subject: undefined, description: definition.description, title: definition.title });
|
|
44
|
+
this._systemLandscapeViews.set(key, view);
|
|
45
|
+
return view;
|
|
46
|
+
}
|
|
47
|
+
addSystemContextView(key, definition) {
|
|
48
|
+
const view = new View(key, definition);
|
|
49
|
+
this._systemContextViews.set(key, view);
|
|
50
|
+
return view;
|
|
51
|
+
}
|
|
52
|
+
addContainerView(key, definition) {
|
|
53
|
+
const view = new View(key, definition);
|
|
54
|
+
this._containerViews.set(key, view);
|
|
55
|
+
return view;
|
|
56
|
+
}
|
|
57
|
+
addComponentView(key, definition) {
|
|
58
|
+
const view = new View(key, definition);
|
|
59
|
+
this._componentViews.set(key, view);
|
|
60
|
+
return view;
|
|
61
|
+
}
|
|
62
|
+
get systemLandscapeViews() {
|
|
63
|
+
return Array.from(this._systemLandscapeViews.values());
|
|
64
|
+
}
|
|
65
|
+
get systemContextViews() {
|
|
66
|
+
return Array.from(this._systemContextViews.values());
|
|
67
|
+
}
|
|
68
|
+
get containerViews() {
|
|
69
|
+
return Array.from(this._containerViews.values());
|
|
70
|
+
}
|
|
71
|
+
get componentViews() {
|
|
72
|
+
return Array.from(this._componentViews.values());
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
exports.Views = Views;
|
|
76
|
+
//# sourceMappingURL=views.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"views.js","sourceRoot":"","sources":["../../../../../libs/c4-model/src/lib/views.ts"],"names":[],"mappings":";;;AAWA,MAAa,IAAI;IAQf,YAA4B,GAAW,EAAE,cAAiC;QAA9C,QAAG,GAAH,GAAG,CAAQ;QAF/B,YAAO,GAAa,EAAE,CAAA;QAG5B,IAAI,CAAC,WAAW,GAAG,cAAc,CAAC,WAAW,CAAA;QAC7C,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,OAAO,CAAA;QACrC,IAAI,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAA;IACnC,CAAC;IAEM,UAAU;QACf,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IAChC,CAAC;IAEM,cAAc,CAAC,OAAU;QAC9B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,aAAa,EAAE,CAAC,CAAA;IACvD,CAAC;IAEM,iBAAiB,CAAC,UAAkB;QACzC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,UAAU,EAAE,CAAC,CAAA;IAC5C,CAAC;IAEM,UAAU;QACf,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IAChC,CAAC;IAEM,cAAc,CAAC,OAAU;QAC9B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,aAAa,EAAE,CAAC,CAAA;IACvD,CAAC;IAEM,iBAAiB,CAAC,UAAkB;QACzC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,UAAU,EAAE,CAAC,CAAA;IAC5C,CAAC;IAED,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;CACF;AAzCD,oBAyCC;AAED,MAAa,KAAK;IAAlB;QAEmB,0BAAqB,GAAG,IAAI,GAAG,EAAyB,CAAA;QACxD,wBAAmB,GAAG,IAAI,GAAG,EAAgC,CAAA;QAC7D,oBAAe,GAAG,IAAI,GAAG,EAAgC,CAAA;QACzD,oBAAe,GAAG,IAAI,GAAG,EAA2B,CAAA;IAyCvE,CAAC;IAvCQ,sBAAsB,CAAC,GAAW,EAAE,UAAmC;QAC5E,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,CAAC,WAAW,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAC,CAAC,CAAA;QAC/G,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QACzC,OAAO,IAAI,CAAA;IACb,CAAC;IAEM,oBAAoB,CAAC,GAAW,EAAE,UAA0C;QACjF,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAA;QACtC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QACvC,OAAO,IAAI,CAAA;IACb,CAAC;IAEM,gBAAgB,CAAC,GAAW,EAAE,UAA0C;QAC7E,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAA;QACtC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QACnC,OAAO,IAAI,CAAA;IACb,CAAC;IAEM,gBAAgB,CAAC,GAAW,EAAE,UAAqC;QACxE,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAA;QACtC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QACnC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAW,oBAAoB;QAC7B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,CAAC,CAAA;IACxD,CAAC;IAED,IAAW,kBAAkB;QAC3B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAA;IACtD,CAAC;IAED,IAAW,cAAc;QACvB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAA;IAClD,CAAC;IAED,IAAW,cAAc;QACvB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAA;IAClD,CAAC;CACF;AA9CD,sBA8CC"}
|