@likec4/core 1.31.0 → 1.32.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/README.md +407 -5
- package/dist/builder/index.d.mts +221 -42
- package/dist/builder/index.mjs +118 -65
- package/dist/compute-view/index.d.mts +23 -7
- package/dist/compute-view/index.mjs +11 -6
- package/dist/compute-view/relationships-view/index.d.mts +9 -7
- package/dist/compute-view/relationships-view/index.mjs +3 -2
- package/dist/index.d.mts +10 -14
- package/dist/index.mjs +9 -6
- package/dist/model/index.d.mts +173 -19
- package/dist/model/index.mjs +6 -1
- package/dist/shared/core.BaYE_r29.d.mts +258 -0
- package/dist/shared/core.Bk7wEZFG.mjs +276 -0
- package/dist/shared/core.BrCnZFTn.mjs +32 -0
- package/dist/shared/core.BuO4ncfY.d.mts +146 -0
- package/dist/shared/{core.Bq753SYD.mjs → core.CBpKAlhj.mjs} +2012 -4422
- package/dist/shared/core.CCWXGc6G.d.mts +920 -0
- package/dist/shared/core.CUYDgv2-.mjs +214 -0
- package/dist/shared/{core.Cu-UdkSl.mjs → core.CpXlRyE5.mjs} +7 -494
- package/dist/shared/{core.C-YXI-43.mjs → core.Cy9smucx.mjs} +3 -1
- package/dist/shared/core.CywrQs86.d.mts +31 -0
- package/dist/shared/core.DoK86JEe.mjs +518 -0
- package/dist/shared/core.Dpq3P3YJ.d.mts +1265 -0
- package/dist/shared/{core.D2830qgg.d.mts → core.Pf5I9o0e.d.mts} +1 -1
- package/dist/shared/core.cbA9VZ02.mjs +2681 -0
- package/dist/shared/{core.CQXU9DF7.mjs → core.rmvsy0n3.mjs} +23 -32
- package/dist/types/aux.d.mts +3 -0
- package/dist/types/aux.mjs +1 -0
- package/dist/types/index.d.mts +7 -45
- package/dist/types/index.mjs +130 -3
- package/dist/utils/index.d.mts +221 -53
- package/dist/utils/index.mjs +14 -10
- package/package.json +15 -7
- package/src/builder/Builder.deploymentModel.ts +82 -18
- package/src/builder/Builder.element.ts +40 -20
- package/src/builder/Builder.model.ts +66 -17
- package/src/builder/Builder.ts +168 -76
- package/src/builder/Builder.view-common.ts +35 -17
- package/src/builder/Builder.view-deployment.ts +25 -25
- package/src/builder/Builder.view-element.ts +13 -12
- package/src/builder/Builder.views.ts +12 -7
- package/src/builder/__snapshots__/Builder-style1.spec.ts.snap +62 -34
- package/src/builder/__snapshots__/Builder-style2.compute-model.json5 +319 -0
- package/src/builder/__snapshots__/Builder-style2.spec.ts.snap +45 -24
- package/src/builder/_types.ts +34 -27
- package/src/compute-view/compute-view.ts +31 -34
- package/src/compute-view/deployment-view/__test__/TestHelper.ts +27 -14
- package/src/compute-view/deployment-view/__test__/fixture.ts +15 -13
- package/src/compute-view/deployment-view/_types.ts +10 -10
- package/src/compute-view/deployment-view/clean-connections.ts +5 -7
- package/src/compute-view/deployment-view/compute.ts +16 -13
- package/src/compute-view/deployment-view/memory/memory.ts +5 -6
- package/src/compute-view/deployment-view/predicates/deploymentRefs.ts +4 -5
- package/src/compute-view/deployment-view/predicates/relation-direct.ts +25 -50
- package/src/compute-view/deployment-view/predicates/relation-in-out.ts +5 -7
- package/src/compute-view/deployment-view/predicates/relation-incoming.ts +7 -11
- package/src/compute-view/deployment-view/predicates/relation-outgoing.ts +7 -10
- package/src/compute-view/deployment-view/predicates/utils.ts +37 -31
- package/src/compute-view/deployment-view/predicates/wildcard.ts +3 -2
- package/src/compute-view/deployment-view/stages/stage-final.ts +2 -2
- package/src/compute-view/deployment-view/stages/stage-include.ts +1 -1
- package/src/compute-view/deployment-view/utils.ts +79 -72
- package/src/compute-view/dynamic-view/__test__/fixture.ts +20 -11
- package/src/compute-view/dynamic-view/compute.ts +60 -53
- package/src/compute-view/element-view/__test__/TestHelper.ts +53 -29
- package/src/compute-view/element-view/__test__/__snapshots__/legacy.spec.ts.snap +26 -26
- package/src/compute-view/element-view/__test__/fixture.ts +134 -83
- package/src/compute-view/element-view/_types.ts +14 -19
- package/src/compute-view/element-view/clean-connections.ts +12 -8
- package/src/compute-view/element-view/compute.ts +61 -51
- package/src/compute-view/element-view/memory/NodeGroup.ts +8 -9
- package/src/compute-view/element-view/memory/memory.ts +22 -22
- package/src/compute-view/element-view/memory/stage-include.ts +5 -3
- package/src/compute-view/element-view/predicates/_utils.ts +18 -14
- package/src/compute-view/element-view/predicates/element-expand.ts +4 -5
- package/src/compute-view/element-view/predicates/element-kind-tag.ts +3 -4
- package/src/compute-view/element-view/predicates/element-ref.ts +3 -4
- package/src/compute-view/element-view/predicates/relation-direct.ts +16 -12
- package/src/compute-view/element-view/predicates/relation-in-out.ts +7 -8
- package/src/compute-view/element-view/predicates/relation-in.ts +19 -26
- package/src/compute-view/element-view/predicates/relation-out.ts +20 -21
- package/src/compute-view/element-view/predicates/wildcard.ts +3 -3
- package/src/compute-view/element-view/utils.ts +25 -23
- package/src/compute-view/index.ts +1 -1
- package/src/compute-view/memory/AbstractStageExclude.ts +3 -4
- package/src/compute-view/memory/AbstractStageInclude.ts +1 -1
- package/src/compute-view/memory/_types.ts +3 -2
- package/src/compute-view/relationships-view/_types.ts +3 -4
- package/src/compute-view/relationships-view/compute.ts +8 -11
- package/src/compute-view/relationships-view/layout.ts +6 -6
- package/src/compute-view/relationships-view/utils.ts +4 -4
- package/src/compute-view/utils/ancestorsOfNode.ts +7 -7
- package/src/compute-view/utils/applyCustomElementProperties.ts +16 -8
- package/src/compute-view/utils/applyCustomRelationProperties.ts +19 -9
- package/src/compute-view/utils/applyViewRuleStyles.ts +18 -10
- package/src/compute-view/utils/buildComputedNodes.ts +40 -40
- package/src/compute-view/utils/buildElementNotations.ts +14 -14
- package/src/compute-view/utils/elementExpressionToPredicate.ts +14 -15
- package/src/compute-view/utils/link-nodes-with-edges.ts +6 -4
- package/src/compute-view/utils/merge-props-from-relationships.ts +52 -20
- package/src/compute-view/utils/relationExpressionToPredicates.ts +19 -19
- package/src/compute-view/utils/resolve-extended-views.ts +8 -7
- package/src/compute-view/utils/resolve-global-rules.ts +31 -26
- package/src/compute-view/utils/topological-sort.ts +14 -14
- package/src/compute-view/utils/view-hash.ts +2 -2
- package/src/compute-view/utils/with-readable-edges.ts +9 -5
- package/src/index.ts +0 -32
- package/src/model/DeploymentElementModel.ts +171 -144
- package/src/model/DeploymentModel.ts +88 -65
- package/src/model/ElementModel.ts +85 -74
- package/src/model/LikeC4Model.ts +430 -241
- package/src/model/RelationModel.ts +63 -29
- package/src/model/__test__/fixture.ts +50 -36
- package/src/model/connection/Connection.ts +2 -2
- package/src/model/connection/deployment/DeploymentConnectionModel.ts +21 -24
- package/src/model/connection/deployment/find.ts +1 -1
- package/src/model/connection/model/ConnectionModel.ts +21 -20
- package/src/model/connection/model/find.ts +7 -7
- package/src/model/connection/ops.ts +6 -6
- package/src/model/guards.ts +66 -14
- package/src/model/index.ts +20 -7
- package/src/model/types.ts +41 -97
- package/src/model/view/EdgeModel.ts +47 -41
- package/src/model/view/LikeC4ViewModel.ts +130 -80
- package/src/model/view/NodeModel.ts +102 -96
- package/src/theme/element.ts +1 -1
- package/src/theme/index.ts +9 -9
- package/src/theme/relationships.ts +1 -1
- package/src/types/_common.ts +21 -15
- package/src/types/aux.ts +285 -0
- package/src/types/const.ts +34 -0
- package/src/types/expression-model.ts +292 -0
- package/src/types/expression.ts +311 -0
- package/src/types/fqnRef.ts +88 -0
- package/src/types/geometry.ts +131 -0
- package/src/types/global.ts +10 -8
- package/src/types/index.ts +39 -201
- package/src/types/model-data.ts +52 -84
- package/src/types/model-deployment.ts +87 -0
- package/src/types/model-dump.ts +72 -0
- package/src/types/model-logical.ts +111 -0
- package/src/types/model-spec.ts +81 -0
- package/src/types/operators.ts +51 -52
- package/src/types/scalar.ts +114 -0
- package/src/types/styles.ts +123 -0
- package/src/types/view-changes.ts +4 -5
- package/src/types/view-common.ts +157 -0
- package/src/types/view-computed.ts +113 -0
- package/src/types/view-layouted.ts +82 -0
- package/src/types/view-parsed.deployment.ts +40 -0
- package/src/types/view-parsed.dynamic.ts +78 -0
- package/src/types/view-parsed.element.ts +65 -0
- package/src/types/view.ts +122 -542
- package/src/utils/compare-natural.ts +43 -1
- package/src/utils/getOrCreate.ts +0 -34
- package/src/utils/index.ts +7 -12
- package/src/utils/iterable/filter.ts +1 -1
- package/src/utils/iterable/find.ts +3 -1
- package/src/utils/iterable/head.ts +22 -0
- package/src/utils/iterable/index.ts +1 -0
- package/src/utils/iterable/map.ts +1 -1
- package/src/utils/iterable/reduce.ts +1 -1
- package/src/utils/iterable/some.ts +1 -1
- package/src/utils/memoize-prop.ts +30 -0
- package/src/utils/object-hash.ts +1 -1
- package/src/utils/relations.ts +14 -11
- package/src/utils/string-hash.ts +1 -1
- package/dist/shared/core.CQDU11hR.d.mts +0 -753
- package/dist/shared/core.DJvmfnEi.d.mts +0 -1153
- package/dist/shared/core.DgfwjBtu.mjs +0 -495
- package/dist/shared/core.Dx7siloV.d.mts +0 -146
- package/dist/shared/core.SjLhMA7a.d.mts +0 -62
- package/src/builder/__snapshots__/Builder.spec.ts.snap +0 -374
- package/src/compute-view/element-view/predicates.ts +0 -520
- package/src/compute-view/utils/uniqueTags.ts +0 -21
- package/src/types/deployments.ts +0 -170
- package/src/types/element.ts +0 -109
- package/src/types/expression-v2-model.ts +0 -314
- package/src/types/expression-v2.ts +0 -392
- package/src/types/overview-graph.ts +0 -43
- package/src/types/relation.ts +0 -61
- package/src/types/scalars.ts +0 -39
- package/src/types/theme.ts +0 -82
- package/src/types/view-notation.ts +0 -9
- package/src/utils/graphlib.ts +0 -10
- /package/src/{errors/index.ts → utils/invariant.ts} +0 -0
|
@@ -1,18 +1,16 @@
|
|
|
1
1
|
import { values } from 'remeda'
|
|
2
|
-
import type { LiteralUnion } from 'type-fest'
|
|
3
|
-
import { invariant, nonNullable } from '../errors'
|
|
4
2
|
import {
|
|
5
|
-
type
|
|
6
|
-
type
|
|
7
|
-
type
|
|
8
|
-
type GenericLikeC4ModelData,
|
|
3
|
+
type Any,
|
|
4
|
+
type DeploymentElement,
|
|
5
|
+
type DeploymentRelationship,
|
|
9
6
|
type IteratorLike,
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
FqnRef,
|
|
8
|
+
isDeploymentNode,
|
|
12
9
|
} from '../types'
|
|
10
|
+
import * as aux from '../types/aux'
|
|
11
|
+
import { invariant, nonNullable } from '../utils'
|
|
13
12
|
import { ancestorsFqn, parentFqn, sortParentsFirst } from '../utils/fqn'
|
|
14
13
|
import { getOrCreate } from '../utils/getOrCreate'
|
|
15
|
-
import { isString } from '../utils/guards'
|
|
16
14
|
import { DefaultMap } from '../utils/mnemonist'
|
|
17
15
|
import {
|
|
18
16
|
type DeployedInstancesIterator,
|
|
@@ -25,48 +23,59 @@ import {
|
|
|
25
23
|
NestedElementOfDeployedInstanceModel,
|
|
26
24
|
} from './DeploymentElementModel'
|
|
27
25
|
import type { LikeC4Model } from './LikeC4Model'
|
|
28
|
-
import {
|
|
26
|
+
import {
|
|
27
|
+
type $ModelData,
|
|
28
|
+
type DeploymentOrFqn,
|
|
29
|
+
type ElementOrFqn,
|
|
30
|
+
type IncomingFilter,
|
|
31
|
+
type OutgoingFilter,
|
|
32
|
+
type RelationOrId,
|
|
33
|
+
getId,
|
|
34
|
+
} from './types'
|
|
29
35
|
import type { LikeC4ViewModel } from './view/LikeC4ViewModel'
|
|
30
36
|
|
|
31
|
-
export class LikeC4DeploymentModel<
|
|
32
|
-
readonly #elements = new Map<
|
|
37
|
+
export class LikeC4DeploymentModel<A extends Any = Any> {
|
|
38
|
+
readonly #elements = new Map<aux.DeploymentFqn<A>, DeploymentElementModel<A>>()
|
|
33
39
|
// Parent element for given FQN
|
|
34
|
-
readonly #parents = new Map<
|
|
40
|
+
readonly #parents = new Map<aux.DeploymentFqn<A>, DeploymentNodeModel<A>>()
|
|
35
41
|
// Children elements for given FQN
|
|
36
|
-
readonly #children = new DefaultMap<
|
|
42
|
+
readonly #children = new DefaultMap<aux.DeploymentFqn<A>, Set<DeploymentElementModel<A>>>(() => new Set())
|
|
37
43
|
|
|
38
44
|
// Keep track of instances of the logical element
|
|
39
|
-
readonly #instancesOf = new DefaultMap<
|
|
45
|
+
readonly #instancesOf = new DefaultMap<aux.Fqn<A>, Set<DeployedInstanceModel<A>>>(() => new Set())
|
|
40
46
|
|
|
41
|
-
readonly #rootElements = new Set<DeploymentNodeModel<
|
|
47
|
+
readonly #rootElements = new Set<DeploymentNodeModel<A>>()
|
|
42
48
|
|
|
43
|
-
readonly #relations = new Map<
|
|
49
|
+
readonly #relations = new Map<aux.RelationId, DeploymentRelationModel<A>>()
|
|
44
50
|
|
|
45
51
|
// Incoming to an element or its descendants
|
|
46
|
-
readonly #incoming = new DefaultMap<
|
|
52
|
+
readonly #incoming = new DefaultMap<aux.DeploymentFqn<A>, Set<DeploymentRelationModel<A>>>(() => new Set())
|
|
47
53
|
|
|
48
54
|
// Outgoing from an element or its descendants
|
|
49
|
-
readonly #outgoing = new DefaultMap<
|
|
55
|
+
readonly #outgoing = new DefaultMap<aux.DeploymentFqn<A>, Set<DeploymentRelationModel<A>>>(() => new Set())
|
|
50
56
|
|
|
51
57
|
// Relationships inside the element, among descendants
|
|
52
|
-
readonly #internal = new DefaultMap<
|
|
58
|
+
readonly #internal = new DefaultMap<aux.DeploymentFqn<A>, Set<DeploymentRelationModel<A>>>(() => new Set())
|
|
53
59
|
|
|
54
|
-
// readonly #views = new Map<ViewID, LikeC4ViewModel<
|
|
60
|
+
// readonly #views = new Map<ViewID, LikeC4ViewModel<A>>()
|
|
55
61
|
|
|
56
|
-
readonly #allTags = new DefaultMap<
|
|
57
|
-
new Set()
|
|
62
|
+
readonly #allTags = new DefaultMap<aux.Tag<A>, Set<DeploymentElementModel<A> | DeploymentRelationModel<A>>>(
|
|
63
|
+
() => new Set(),
|
|
58
64
|
)
|
|
59
65
|
|
|
60
66
|
readonly #nestedElementsOfDeployment = new Map<
|
|
61
|
-
`${
|
|
62
|
-
NestedElementOfDeployedInstanceModel<
|
|
67
|
+
`${aux.DeploymentId<A>}@${aux.ElementId<A>}`,
|
|
68
|
+
NestedElementOfDeployedInstanceModel<A>
|
|
63
69
|
>()
|
|
64
70
|
|
|
71
|
+
public readonly $deployments: $ModelData<A>['deployments']
|
|
72
|
+
|
|
65
73
|
constructor(
|
|
66
|
-
public readonly $model: LikeC4Model<
|
|
67
|
-
public readonly $deployments: GenericLikeC4ModelData['deployments'],
|
|
74
|
+
public readonly $model: LikeC4Model<A>,
|
|
68
75
|
) {
|
|
69
|
-
|
|
76
|
+
const $deployments = this.$deployments = $model.$data.deployments
|
|
77
|
+
const elements = values($deployments.elements as Record<string, DeploymentElement<A>>)
|
|
78
|
+
for (const element of sortParentsFirst(elements)) {
|
|
70
79
|
const el = this.addElement(element)
|
|
71
80
|
for (const tag of el.tags) {
|
|
72
81
|
this.#allTags.get(tag).add(el)
|
|
@@ -83,23 +92,23 @@ export class LikeC4DeploymentModel<M extends AnyAux = AnyAux> {
|
|
|
83
92
|
}
|
|
84
93
|
}
|
|
85
94
|
|
|
86
|
-
public element(el:
|
|
95
|
+
public element(el: DeploymentOrFqn<A>): DeploymentElementModel<A> {
|
|
87
96
|
if (el instanceof DeploymentNodeModel || el instanceof DeployedInstanceModel) {
|
|
88
97
|
return el
|
|
89
98
|
}
|
|
90
99
|
const id = getId(el)
|
|
91
100
|
return nonNullable(this.#elements.get(id), `Element ${id} not found`)
|
|
92
101
|
}
|
|
93
|
-
public findElement(el:
|
|
94
|
-
return this.#elements.get(el) ?? null
|
|
102
|
+
public findElement(el: aux.LooseDeploymentId<A>): DeploymentElementModel<A> | null {
|
|
103
|
+
return this.#elements.get(el as aux.DeploymentFqn<A>) ?? null
|
|
95
104
|
}
|
|
96
105
|
|
|
97
|
-
public node(el:
|
|
106
|
+
public node(el: DeploymentOrFqn<A>): DeploymentNodeModel<A> {
|
|
98
107
|
const element = this.element(el)
|
|
99
108
|
invariant(element.isDeploymentNode(), `Element ${element.id} is not a deployment node`)
|
|
100
109
|
return element
|
|
101
110
|
}
|
|
102
|
-
public findNode(el:
|
|
111
|
+
public findNode(el: aux.LooseDeploymentId<A>): DeploymentNodeModel<A> | null {
|
|
103
112
|
const element = this.findElement(el)
|
|
104
113
|
if (!element) {
|
|
105
114
|
return null
|
|
@@ -108,12 +117,12 @@ export class LikeC4DeploymentModel<M extends AnyAux = AnyAux> {
|
|
|
108
117
|
return element
|
|
109
118
|
}
|
|
110
119
|
|
|
111
|
-
public instance(el:
|
|
120
|
+
public instance(el: DeploymentOrFqn<A>): DeployedInstanceModel<A> {
|
|
112
121
|
const element = this.element(el)
|
|
113
122
|
invariant(element.isInstance(), `Element ${element.id} is not a deployed instance`)
|
|
114
123
|
return element
|
|
115
124
|
}
|
|
116
|
-
public findInstance(el:
|
|
125
|
+
public findInstance(el: aux.LooseDeploymentId<A>): DeployedInstanceModel<A> | null {
|
|
117
126
|
const element = this.findElement(el)
|
|
118
127
|
if (!element) {
|
|
119
128
|
return null
|
|
@@ -125,21 +134,21 @@ export class LikeC4DeploymentModel<M extends AnyAux = AnyAux> {
|
|
|
125
134
|
/**
|
|
126
135
|
* Returns the root elements of the model.
|
|
127
136
|
*/
|
|
128
|
-
public roots(): DeploymentNodesIterator<
|
|
137
|
+
public roots(): DeploymentNodesIterator<A> {
|
|
129
138
|
return this.#rootElements.values()
|
|
130
139
|
}
|
|
131
140
|
|
|
132
141
|
/**
|
|
133
142
|
* Returns all elements in the model.
|
|
134
143
|
*/
|
|
135
|
-
public elements(): DeploymentElementsIterator<
|
|
144
|
+
public elements(): DeploymentElementsIterator<A> {
|
|
136
145
|
return this.#elements.values()
|
|
137
146
|
}
|
|
138
147
|
|
|
139
148
|
/**
|
|
140
149
|
* Returns all elements in the model.
|
|
141
150
|
*/
|
|
142
|
-
public *nodes(): DeploymentNodesIterator<
|
|
151
|
+
public *nodes(): DeploymentNodesIterator<A> {
|
|
143
152
|
for (const element of this.#elements.values()) {
|
|
144
153
|
if (element.isDeploymentNode()) {
|
|
145
154
|
yield element
|
|
@@ -148,7 +157,16 @@ export class LikeC4DeploymentModel<M extends AnyAux = AnyAux> {
|
|
|
148
157
|
return
|
|
149
158
|
}
|
|
150
159
|
|
|
151
|
-
public *
|
|
160
|
+
public *nodesOfKind(kind: aux.DeploymentKind<A>): DeploymentNodesIterator<A> {
|
|
161
|
+
for (const node of this.#elements.values()) {
|
|
162
|
+
if (node.isDeploymentNode() && node.kind === kind) {
|
|
163
|
+
yield node
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
public *instances(): DeployedInstancesIterator<A> {
|
|
152
170
|
for (const element of this.#elements.values()) {
|
|
153
171
|
if (element.isInstance()) {
|
|
154
172
|
yield element
|
|
@@ -160,7 +178,7 @@ export class LikeC4DeploymentModel<M extends AnyAux = AnyAux> {
|
|
|
160
178
|
/**
|
|
161
179
|
* Iterate over all instances of the given logical element.
|
|
162
180
|
*/
|
|
163
|
-
public *instancesOf(element:
|
|
181
|
+
public *instancesOf(element: ElementOrFqn<A>): DeployedInstancesIterator<A> {
|
|
164
182
|
const id = getId(element)
|
|
165
183
|
const instances = this.#instancesOf.get(id)
|
|
166
184
|
if (instances) {
|
|
@@ -169,37 +187,39 @@ export class LikeC4DeploymentModel<M extends AnyAux = AnyAux> {
|
|
|
169
187
|
return
|
|
170
188
|
}
|
|
171
189
|
|
|
172
|
-
public deploymentRef(
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
190
|
+
public deploymentRef(
|
|
191
|
+
ref: FqnRef.DeploymentRef<A>,
|
|
192
|
+
): DeploymentElementModel<A> | NestedElementOfDeployedInstanceModel<A> {
|
|
193
|
+
if (FqnRef.isInsideInstanceRef(ref)) {
|
|
194
|
+
const { deployment, element } = ref
|
|
195
|
+
return getOrCreate(this.#nestedElementsOfDeployment, `${deployment}@${element}`, () => {
|
|
196
|
+
return new NestedElementOfDeployedInstanceModel(this.instance(deployment), this.$model.element(element))
|
|
177
197
|
})
|
|
178
198
|
}
|
|
179
|
-
return this.element(ref)
|
|
199
|
+
return this.element(ref.deployment)
|
|
180
200
|
}
|
|
181
201
|
|
|
182
202
|
/**
|
|
183
203
|
* Returns all relationships in the model.
|
|
184
204
|
*/
|
|
185
|
-
public relationships(): IteratorLike<DeploymentRelationModel<
|
|
205
|
+
public relationships(): IteratorLike<DeploymentRelationModel<A>> {
|
|
186
206
|
return this.#relations.values()
|
|
187
207
|
}
|
|
188
208
|
|
|
189
209
|
/**
|
|
190
210
|
* Returns a specific relationship by its ID.
|
|
191
211
|
*/
|
|
192
|
-
public relationship(id:
|
|
193
|
-
return nonNullable(this.#relations.get(id), `DeploymentRelationModel ${id} not found`)
|
|
212
|
+
public relationship(id: RelationOrId): DeploymentRelationModel<A> {
|
|
213
|
+
return nonNullable(this.#relations.get(getId(id)), `DeploymentRelationModel ${id} not found`)
|
|
194
214
|
}
|
|
195
|
-
public findRelationship(id:
|
|
196
|
-
return this.#relations.get(id as
|
|
215
|
+
public findRelationship(id: string): DeploymentRelationModel<A> | null {
|
|
216
|
+
return this.#relations.get(id as aux.RelationId) ?? null
|
|
197
217
|
}
|
|
198
218
|
|
|
199
219
|
/**
|
|
200
220
|
* Returns all deployment views in the model.
|
|
201
221
|
*/
|
|
202
|
-
public *views(): IteratorLike<LikeC4ViewModel<
|
|
222
|
+
public *views(): IteratorLike<LikeC4ViewModel.DeploymentView<A>> {
|
|
203
223
|
for (const view of this.$model.views()) {
|
|
204
224
|
if (view.isDeploymentView()) {
|
|
205
225
|
yield view
|
|
@@ -212,7 +232,7 @@ export class LikeC4DeploymentModel<M extends AnyAux = AnyAux> {
|
|
|
212
232
|
* Returns the parent element of given element.
|
|
213
233
|
* @see ancestors
|
|
214
234
|
*/
|
|
215
|
-
public parent(element:
|
|
235
|
+
public parent(element: DeploymentOrFqn<A>): DeploymentNodeModel<A> | null {
|
|
216
236
|
const id = getId(element)
|
|
217
237
|
return this.#parents.get(id) || null
|
|
218
238
|
}
|
|
@@ -221,7 +241,7 @@ export class LikeC4DeploymentModel<M extends AnyAux = AnyAux> {
|
|
|
221
241
|
* Get all children of the element (only direct children),
|
|
222
242
|
* @see descendants
|
|
223
243
|
*/
|
|
224
|
-
public children(element:
|
|
244
|
+
public children(element: DeploymentOrFqn<A>): ReadonlySet<DeploymentElementModel<A>> {
|
|
225
245
|
const id = getId(element)
|
|
226
246
|
return this.#children.get(id)
|
|
227
247
|
}
|
|
@@ -229,7 +249,7 @@ export class LikeC4DeploymentModel<M extends AnyAux = AnyAux> {
|
|
|
229
249
|
/**
|
|
230
250
|
* Get all sibling (i.e. same parent)
|
|
231
251
|
*/
|
|
232
|
-
public *siblings(element:
|
|
252
|
+
public *siblings(element: DeploymentOrFqn<A>): DeploymentElementsIterator<A> {
|
|
233
253
|
const id = getId(element)
|
|
234
254
|
const siblings = this.parent(element)?.children() ?? this.roots()
|
|
235
255
|
for (const sibling of siblings) {
|
|
@@ -244,8 +264,8 @@ export class LikeC4DeploymentModel<M extends AnyAux = AnyAux> {
|
|
|
244
264
|
* Get all ancestor elements (i.e. parent, parent’s parent, etc.)
|
|
245
265
|
* (from closest to root)
|
|
246
266
|
*/
|
|
247
|
-
public *ancestors(element:
|
|
248
|
-
let id =
|
|
267
|
+
public *ancestors(element: DeploymentOrFqn<A>): DeploymentNodesIterator<A> {
|
|
268
|
+
let id = getId(element)
|
|
249
269
|
let parent
|
|
250
270
|
while (parent = this.#parents.get(id)) {
|
|
251
271
|
yield parent
|
|
@@ -257,7 +277,10 @@ export class LikeC4DeploymentModel<M extends AnyAux = AnyAux> {
|
|
|
257
277
|
/**
|
|
258
278
|
* Get all descendant elements (i.e. children, children’s children, etc.)
|
|
259
279
|
*/
|
|
260
|
-
public *descendants(
|
|
280
|
+
public *descendants(
|
|
281
|
+
element: DeploymentOrFqn<A>,
|
|
282
|
+
sort: 'asc' | 'desc' = 'desc',
|
|
283
|
+
): DeploymentElementsIterator<A> {
|
|
261
284
|
for (const child of this.children(element)) {
|
|
262
285
|
if (sort === 'asc') {
|
|
263
286
|
yield child
|
|
@@ -275,9 +298,9 @@ export class LikeC4DeploymentModel<M extends AnyAux = AnyAux> {
|
|
|
275
298
|
* @see incomers
|
|
276
299
|
*/
|
|
277
300
|
public *incoming(
|
|
278
|
-
element:
|
|
301
|
+
element: DeploymentOrFqn<A>,
|
|
279
302
|
filter: IncomingFilter = 'all',
|
|
280
|
-
): IteratorLike<DeploymentRelationModel<
|
|
303
|
+
): IteratorLike<DeploymentRelationModel<A>> {
|
|
281
304
|
const id = getId(element)
|
|
282
305
|
for (const rel of this.#incoming.get(id)) {
|
|
283
306
|
switch (true) {
|
|
@@ -296,9 +319,9 @@ export class LikeC4DeploymentModel<M extends AnyAux = AnyAux> {
|
|
|
296
319
|
* @see outgoers
|
|
297
320
|
*/
|
|
298
321
|
public *outgoing(
|
|
299
|
-
element:
|
|
322
|
+
element: DeploymentOrFqn<A>,
|
|
300
323
|
filter: OutgoingFilter = 'all',
|
|
301
|
-
): IteratorLike<DeploymentRelationModel<
|
|
324
|
+
): IteratorLike<DeploymentRelationModel<A>> {
|
|
302
325
|
const id = getId(element)
|
|
303
326
|
for (const rel of this.#outgoing.get(id)) {
|
|
304
327
|
switch (true) {
|
|
@@ -312,11 +335,11 @@ export class LikeC4DeploymentModel<M extends AnyAux = AnyAux> {
|
|
|
312
335
|
return
|
|
313
336
|
}
|
|
314
337
|
|
|
315
|
-
private addElement(element: DeploymentElement) {
|
|
338
|
+
private addElement(element: DeploymentElement<A>) {
|
|
316
339
|
if (this.#elements.has(element.id)) {
|
|
317
340
|
throw new Error(`Element ${element.id} already exists`)
|
|
318
341
|
}
|
|
319
|
-
const el =
|
|
342
|
+
const el = isDeploymentNode(element)
|
|
320
343
|
? new DeploymentNodeModel(this, Object.freeze(element))
|
|
321
344
|
: new DeployedInstanceModel(this, Object.freeze(element), this.$model.element(element.element))
|
|
322
345
|
this.#elements.set(el.id, el)
|
|
@@ -332,7 +355,7 @@ export class LikeC4DeploymentModel<M extends AnyAux = AnyAux> {
|
|
|
332
355
|
return el
|
|
333
356
|
}
|
|
334
357
|
|
|
335
|
-
private addRelation(relation:
|
|
358
|
+
private addRelation(relation: DeploymentRelationship<A>) {
|
|
336
359
|
if (this.#relations.has(relation.id)) {
|
|
337
360
|
throw new Error(`Relation ${relation.id} already exists`)
|
|
338
361
|
}
|