@likec4/core 1.18.0 → 1.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/dist/builder/index.d.mts +502 -0
- package/dist/builder/index.d.ts +502 -0
- package/dist/builder/index.js +871 -0
- package/dist/compute-view/index.d.mts +9 -78
- package/dist/compute-view/index.d.ts +9 -78
- package/dist/compute-view/index.js +78 -0
- package/dist/index.d.mts +9 -730
- package/dist/index.d.ts +9 -730
- package/dist/{index.mjs → index.js} +7 -784
- package/dist/model/index.d.mts +218 -606
- package/dist/model/index.d.ts +218 -606
- package/dist/model/index.js +1 -0
- package/dist/shared/chunk-RAAYCPUM.M-JWF7SS.js +21 -0
- package/dist/shared/core.BIfgabEw.d.ts +719 -0
- package/dist/shared/core.BZ9Msq7w.d.mts +719 -0
- package/dist/shared/{core.DMYY7C8s.d.mts → core.C05RDLhi.d.ts} +179 -230
- package/dist/shared/{core.DMYY7C8s.d.ts → core.CmYMqgha.d.mts} +179 -230
- package/dist/shared/core.D6-fWbM3.d.ts +127 -0
- package/dist/shared/core.D74xkKkG.d.mts +148 -0
- package/dist/shared/core.D74xkKkG.d.ts +148 -0
- package/dist/shared/core.sLaWHBjR.d.mts +127 -0
- package/dist/shared/index.-BdzdI2C.js +7443 -0
- package/dist/shared/object_hash.CE_oF3I3.js +1222 -0
- package/dist/shared/view.CyZrG8BJ.js +354 -0
- package/dist/types/index.d.mts +4 -2
- package/dist/types/index.d.ts +4 -2
- package/dist/types/index.js +20 -0
- package/dist/utils/index.d.mts +404 -0
- package/dist/utils/index.d.ts +404 -0
- package/dist/utils/index.js +330 -0
- package/package.json +47 -33
- package/src/builder/Builder-style1.test-d.ts +190 -0
- package/src/builder/Builder-style2.test-d.ts +175 -0
- package/src/builder/Builder.deployment.ts +25 -20
- package/src/builder/Builder.deploymentModel.ts +80 -55
- package/src/builder/Builder.element.ts +2 -0
- package/src/builder/Builder.model.ts +57 -43
- package/src/builder/Builder.ts +412 -431
- package/src/builder/Builder.view-common.ts +234 -0
- package/src/builder/Builder.view-deployment.ts +135 -0
- package/src/builder/Builder.view-element.ts +189 -0
- package/src/builder/Builder.views.ts +109 -33
- package/src/builder/Builder.with.ts +475 -0
- package/src/builder/__snapshots__/Builder-style1.spec.ts.snap +374 -0
- package/src/builder/__snapshots__/Builder-style2.spec.ts.snap +183 -0
- package/src/builder/__snapshots__/Builder.spec.ts.snap +374 -0
- package/src/builder/_types.ts +28 -5
- package/src/builder/index.ts +10 -4
- package/src/colors/index.ts +2 -2
- package/src/compute-view/compute-view.ts +45 -54
- package/src/compute-view/deployment-view/__test__/TestHelper.ts +236 -0
- package/src/compute-view/deployment-view/__test__/fixture.ts +50 -62
- package/src/compute-view/deployment-view/_types.ts +26 -18
- package/src/compute-view/deployment-view/clean-connections.ts +173 -164
- package/src/compute-view/deployment-view/compute.ts +51 -37
- package/src/compute-view/deployment-view/memory/index.ts +9 -0
- package/src/compute-view/deployment-view/memory/memory.ts +97 -0
- package/src/compute-view/deployment-view/predicates/elements.ts +144 -0
- package/src/compute-view/deployment-view/predicates/relation-direct.ts +183 -76
- package/src/compute-view/deployment-view/predicates/relation-in-out.ts +38 -20
- package/src/compute-view/deployment-view/predicates/relation-incoming.ts +72 -23
- package/src/compute-view/deployment-view/predicates/relation-outgoing.ts +61 -22
- package/src/compute-view/deployment-view/predicates/wildcard.ts +15 -15
- package/src/compute-view/deployment-view/stages/stage-exclude.ts +5 -0
- package/src/compute-view/deployment-view/stages/stage-final.ts +245 -0
- package/src/compute-view/deployment-view/stages/stage-include.ts +95 -0
- package/src/compute-view/deployment-view/utils.ts +95 -31
- package/src/compute-view/dynamic-view/__test__/fixture.ts +4 -4
- package/src/compute-view/dynamic-view/compute.ts +59 -45
- package/src/compute-view/element-view/__test__/TestHelper.ts +258 -0
- package/src/compute-view/element-view/__test__/__snapshots__/legacy.spec.ts.snap +64 -62
- package/src/compute-view/element-view/__test__/fixture.ts +147 -117
- package/src/compute-view/element-view/_types.ts +48 -0
- package/src/compute-view/element-view/clean-connections.ts +113 -0
- package/src/compute-view/element-view/compute.ts +264 -683
- package/src/compute-view/element-view/memory/NodeGroup.ts +31 -0
- package/src/compute-view/element-view/memory/index.ts +10 -0
- package/src/compute-view/element-view/memory/memory.ts +177 -0
- package/src/compute-view/element-view/memory/stage-exclude.ts +59 -0
- package/src/compute-view/element-view/memory/stage-final.ts +129 -0
- package/src/compute-view/element-view/memory/stage-include.ts +128 -0
- package/src/compute-view/element-view/predicates/_utils.ts +86 -0
- package/src/compute-view/element-view/predicates/element-expand.ts +33 -0
- package/src/compute-view/element-view/predicates/element-kind-tag.ts +26 -0
- package/src/compute-view/element-view/predicates/element-ref.ts +37 -0
- package/src/compute-view/element-view/predicates/relation-direct.ts +309 -0
- package/src/compute-view/element-view/predicates/relation-in-out.ts +66 -0
- package/src/compute-view/element-view/predicates/relation-in.ts +118 -0
- package/src/compute-view/element-view/predicates/relation-out.ts +116 -0
- package/src/compute-view/element-view/predicates/wildcard.ts +88 -0
- package/src/compute-view/element-view/utils.ts +59 -0
- package/src/compute-view/index.ts +3 -4
- package/src/compute-view/memory/AbstractMemory.ts +45 -0
- package/src/compute-view/memory/AbstractStageExclude.ts +216 -0
- package/src/compute-view/memory/AbstractStageInclude.ts +200 -0
- package/src/compute-view/memory/_types.ts +147 -0
- package/src/compute-view/memory/index.ts +5 -0
- package/src/compute-view/memory/ops.ts +43 -0
- package/src/compute-view/utils/buildComputedNodes.ts +4 -4
- package/src/compute-view/utils/elementExpressionToPredicate.ts +1 -3
- package/src/compute-view/utils/link-nodes-with-edges.ts +3 -7
- package/src/compute-view/utils/{derive-edge-props-from-relationships.ts → merge-props-from-relationships.ts} +54 -23
- package/src/compute-view/utils/relationExpressionToPredicates.ts +2 -2
- package/src/compute-view/utils/resolve-extended-views.ts +44 -40
- package/src/compute-view/utils/resolve-global-rules.ts +6 -6
- package/src/compute-view/utils/topological-sort.ts +167 -71
- package/src/compute-view/utils/with-readable-edges.ts +14 -9
- package/src/index.ts +22 -16
- package/src/model/DeploymentElementModel.ts +150 -85
- package/src/model/DeploymentModel.ts +27 -21
- package/src/model/ElementModel.ts +51 -25
- package/src/model/LikeC4Model.test-d.ts +4 -3
- package/src/model/LikeC4Model.ts +98 -42
- package/src/model/RelationModel.ts +5 -4
- package/src/model/__test__/fixture.ts +5 -9
- package/src/model/connection/Connection.ts +72 -0
- package/src/model/connection/deployment/DeploymentConnectionModel.ts +178 -0
- package/src/model/connection/{deployment.ts → deployment/find.ts} +14 -18
- package/src/model/connection/deployment/index.ts +8 -0
- package/src/model/connection/index.ts +22 -0
- package/src/model/connection/model/ConnectionModel.ts +157 -0
- package/src/model/connection/{model.ts → model/find.ts} +43 -49
- package/src/model/connection/model/index.ts +8 -0
- package/src/model/connection/ops.ts +274 -0
- package/src/model/guards.ts +9 -0
- package/src/model/index.ts +45 -3
- package/src/model/types.ts +35 -18
- package/src/model/view/EdgeModel.ts +6 -6
- package/src/model/view/LikeC4ViewModel.ts +14 -8
- package/src/model/view/NodeModel.ts +6 -5
- package/src/types/_common.ts +53 -1
- package/src/types/deployments.ts +88 -156
- package/src/types/element.ts +2 -2
- package/src/types/expression-v2.ts +172 -0
- package/src/types/expression.ts +9 -5
- package/src/types/global.ts +3 -3
- package/src/types/index.ts +220 -13
- package/src/types/model.ts +28 -24
- package/src/types/operators.ts +1 -1
- package/src/types/relation.ts +14 -10
- package/src/types/theme.ts +0 -1
- package/src/types/view.ts +20 -18
- package/src/utils/const.ts +1 -0
- package/src/utils/fqn.ts +140 -49
- package/src/utils/getOrCreate.ts +1 -1
- package/src/utils/index.ts +74 -9
- package/src/utils/iterable/_types.ts +5 -0
- package/src/utils/iterable/filter.ts +55 -0
- package/src/utils/iterable/flat.ts +17 -0
- package/src/utils/iterable/index.ts +12 -0
- package/src/utils/iterable/map.ts +40 -0
- package/src/utils/iterable/reduce.ts +24 -0
- package/src/utils/iterable/some.ts +36 -0
- package/src/utils/iterable/to.ts +19 -0
- package/src/utils/iterable/unique.ts +29 -0
- package/src/utils/relations.ts +3 -64
- package/src/utils/set.ts +11 -9
- package/src/utils/string-hash.ts +1 -1
- package/dist/compute-view/index.mjs +0 -79
- package/dist/model/index.mjs +0 -2
- package/dist/shared/core.BBgiAAv1.mjs +0 -144
- package/dist/shared/core.BPyJvuMU.mjs +0 -2420
- package/dist/shared/core.BQ4AbfvB.mjs +0 -9228
- package/dist/shared/core.k12s_keD.mjs +0 -203
- package/dist/types/index.mjs +0 -21
- package/src/builder/Builder.test-d.ts +0 -124
- package/src/builder/Builder.view.ts +0 -543
- package/src/compute-view/LikeC4ModelGraph.ts +0 -330
- package/src/compute-view/deployment-view/Memory.ts +0 -108
- package/src/compute-view/deployment-view/Stage.ts +0 -145
- package/src/compute-view/deployment-view/predicates/deployment-ref.ts +0 -146
- package/src/compute-view/element-view/predicates.ts +0 -517
- package/src/compute-view/utils/sortNodes.ts +0 -101
- package/src/model/connection/ConnectionModel.ts +0 -94
- package/src/model/connection/DeploymentConnectionModel.ts +0 -99
package/src/types/deployments.ts
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
import type { MergeExclusive, Simplify, Tagged
|
|
1
|
+
import type { MergeExclusive, Simplify, Tagged } from 'type-fest'
|
|
2
2
|
import type { IconUrl, NonEmptyArray } from './_common'
|
|
3
3
|
import type { ElementShape, ElementStyle, Fqn, Link, Tag } from './element'
|
|
4
|
-
import type {
|
|
4
|
+
import type { AbstractRelation, RelationId } from './relation'
|
|
5
5
|
import type { Color } from './theme'
|
|
6
|
-
import type { ViewId } from './view'
|
|
7
6
|
|
|
8
7
|
export type DeploymentNodeKind<Kinds extends string = string> = Tagged<Kinds, 'DeploymentNodeKind'>
|
|
9
8
|
|
|
10
|
-
export type
|
|
9
|
+
export type DeploymentElementStyle = ElementStyle & {
|
|
11
10
|
readonly icon?: IconUrl
|
|
12
11
|
readonly shape?: ElementShape
|
|
13
12
|
readonly color?: Color
|
|
@@ -16,7 +15,7 @@ export type PhysicalElementStyle = ElementStyle & {
|
|
|
16
15
|
export interface DeploymentNodeKindSpecification {
|
|
17
16
|
readonly technology?: string
|
|
18
17
|
readonly notation?: string
|
|
19
|
-
readonly style:
|
|
18
|
+
readonly style: DeploymentElementStyle
|
|
20
19
|
}
|
|
21
20
|
|
|
22
21
|
export interface DeploymentNode {
|
|
@@ -28,7 +27,7 @@ export interface DeploymentNode {
|
|
|
28
27
|
readonly technology?: string | null
|
|
29
28
|
readonly tags?: NonEmptyArray<Tag> | null
|
|
30
29
|
readonly links?: NonEmptyArray<Link> | null
|
|
31
|
-
readonly style?:
|
|
30
|
+
readonly style?: DeploymentElementStyle
|
|
32
31
|
readonly notation?: string
|
|
33
32
|
readonly metadata?: Record<string, string>
|
|
34
33
|
}
|
|
@@ -45,7 +44,7 @@ export interface DeployedInstance {
|
|
|
45
44
|
readonly technology?: string | null
|
|
46
45
|
readonly tags?: NonEmptyArray<Tag> | null
|
|
47
46
|
readonly links?: NonEmptyArray<Link> | null
|
|
48
|
-
readonly style?:
|
|
47
|
+
readonly style?: DeploymentElementStyle
|
|
49
48
|
readonly notation?: string
|
|
50
49
|
readonly metadata?: Record<string, string>
|
|
51
50
|
}
|
|
@@ -61,6 +60,11 @@ export namespace DeploymentElement {
|
|
|
61
60
|
}
|
|
62
61
|
}
|
|
63
62
|
|
|
63
|
+
export type PredicateSelector =
|
|
64
|
+
| 'children' // ele.*
|
|
65
|
+
| 'expanded' // ele._
|
|
66
|
+
| 'descendants' // ele.**
|
|
67
|
+
|
|
64
68
|
export interface DeploymentRef {
|
|
65
69
|
// Reference to DeploymentNode or DeployedInstance
|
|
66
70
|
readonly id: Fqn
|
|
@@ -68,170 +72,98 @@ export interface DeploymentRef {
|
|
|
68
72
|
readonly element?: Fqn
|
|
69
73
|
}
|
|
70
74
|
|
|
71
|
-
// export namespace DeploymentRef {
|
|
72
|
-
// export interface Node {
|
|
73
|
-
// readonly id: Fqn
|
|
74
|
-
// }
|
|
75
|
-
// export interface Instance {
|
|
76
|
-
// readonly id: Fqn
|
|
77
|
-
// readonly element?: Fqn
|
|
78
|
-
// }
|
|
79
|
-
// export interface LogicalElement {
|
|
80
|
-
// readonly element: Fqn
|
|
81
|
-
// }
|
|
82
|
-
|
|
83
|
-
// export const isDeploymentElement = (ref: DeploymentRef): ref is Node | Instance => {
|
|
84
|
-
// return 'id' in ref
|
|
85
|
-
// }
|
|
86
|
-
|
|
87
|
-
// export const isLogicalElement = (ref: DeploymentRef): ref is LogicalElement => {
|
|
88
|
-
// return 'element' in ref && !('id' in ref)
|
|
89
|
-
// }
|
|
90
|
-
// }
|
|
91
|
-
// export type DeploymentRef = ExclusiveUnion<{
|
|
92
|
-
// Node: DeploymentRef.Node
|
|
93
|
-
// Instance: DeploymentRef.Instance
|
|
94
|
-
// Element: DeploymentRef.LogicalElement
|
|
95
|
-
// }>
|
|
96
|
-
|
|
97
75
|
/**
|
|
98
76
|
* NOTE:
|
|
99
77
|
*/
|
|
100
|
-
export interface DeploymentRelation {
|
|
78
|
+
export interface DeploymentRelation extends AbstractRelation {
|
|
101
79
|
readonly id: RelationId
|
|
102
80
|
readonly source: DeploymentRef
|
|
103
81
|
readonly target: DeploymentRef
|
|
104
|
-
readonly title?: string
|
|
105
|
-
readonly tags?: NonEmptyArray<Tag> | null
|
|
106
|
-
readonly description?: string
|
|
107
|
-
readonly technology?: string
|
|
108
|
-
readonly kind?: RelationshipKind
|
|
109
|
-
readonly color?: Color
|
|
110
|
-
readonly line?: RelationshipLineType
|
|
111
|
-
readonly head?: RelationshipArrowType
|
|
112
|
-
readonly tail?: RelationshipArrowType
|
|
113
|
-
readonly links?: NonEmptyArray<Link> | null
|
|
114
|
-
// Link to dynamic view
|
|
115
|
-
readonly navigateTo?: ViewId
|
|
116
|
-
readonly metadata?: { [key: string]: string }
|
|
117
82
|
}
|
|
118
|
-
// export interface DeploymentRelation
|
|
119
83
|
|
|
120
|
-
//
|
|
121
|
-
//
|
|
122
|
-
//
|
|
123
|
-
//
|
|
124
|
-
//
|
|
125
|
-
//
|
|
126
|
-
//
|
|
127
|
-
//
|
|
128
|
-
|
|
84
|
+
// export namespace DeploymentRelationExpression {
|
|
85
|
+
// // type LogicalRefEndpoint = {
|
|
86
|
+
// // logicalRef: ElementRefExpr
|
|
87
|
+
// // }
|
|
88
|
+
// // export type DirectEndpoint = ExclusiveUnion<{
|
|
89
|
+
// // DeploymentElementExpression: DeploymentElementExpression
|
|
90
|
+
// // Logical: LogicalRefEndpoint
|
|
91
|
+
// // }>
|
|
92
|
+
|
|
93
|
+
// // export const isLogicalEndpoint = (expr: DirectEndpoint): expr is LogicalRefEndpoint => {
|
|
94
|
+
// // return 'logicalRef' in expr
|
|
95
|
+
// // }
|
|
96
|
+
|
|
97
|
+
// export type Direct = {
|
|
98
|
+
// source: FqnExpression.Element
|
|
99
|
+
// target: FqnExpression.Element
|
|
100
|
+
// isBidirectional?: boolean
|
|
129
101
|
// }
|
|
130
|
-
|
|
131
|
-
//
|
|
132
|
-
//
|
|
102
|
+
// export const isDirect = (expr: DeploymentExpression): expr is Direct => {
|
|
103
|
+
// return 'source' in expr && 'target' in expr
|
|
104
|
+
// }
|
|
105
|
+
// export type Incoming = {
|
|
106
|
+
// incoming: FqnExpression.Element
|
|
107
|
+
// }
|
|
108
|
+
// export const isIncoming = (expr: DeploymentExpression): expr is Incoming => {
|
|
109
|
+
// return 'incoming' in expr
|
|
110
|
+
// }
|
|
111
|
+
// export type Outgoing = {
|
|
112
|
+
// outgoing: FqnExpression.Element
|
|
113
|
+
// }
|
|
114
|
+
// export const isOutgoing = (expr: DeploymentExpression): expr is Outgoing => {
|
|
115
|
+
// return 'outgoing' in expr
|
|
116
|
+
// }
|
|
117
|
+
// export type InOut = {
|
|
118
|
+
// inout: FqnExpression.Element
|
|
119
|
+
// }
|
|
120
|
+
// export const isInOut = (expr: DeploymentExpression): expr is InOut => {
|
|
121
|
+
// return 'inout' in expr
|
|
133
122
|
// }
|
|
134
123
|
// }
|
|
135
124
|
|
|
136
|
-
type
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
>
|
|
143
|
-
|
|
144
|
-
type ExclusiveUnion<Expressions> = Expressions extends object ? {
|
|
145
|
-
[Name in keyof Expressions]: Simplify<Omit<AllNever<Expressions>, keyof Expressions[Name]> & Expressions[Name]>
|
|
146
|
-
}[keyof Expressions]
|
|
147
|
-
: Expressions
|
|
148
|
-
|
|
149
|
-
export namespace DeploymentRelationExpression {
|
|
150
|
-
// type LogicalRefEndpoint = {
|
|
151
|
-
// logicalRef: ElementRefExpr
|
|
152
|
-
// }
|
|
153
|
-
// export type DirectEndpoint = ExclusiveUnion<{
|
|
154
|
-
// DeploymentElementExpression: DeploymentElementExpression
|
|
155
|
-
// Logical: LogicalRefEndpoint
|
|
156
|
-
// }>
|
|
157
|
-
|
|
158
|
-
// export const isLogicalEndpoint = (expr: DirectEndpoint): expr is LogicalRefEndpoint => {
|
|
159
|
-
// return 'logicalRef' in expr
|
|
160
|
-
// }
|
|
161
|
-
|
|
162
|
-
export type Direct = {
|
|
163
|
-
source: DeploymentElementExpression
|
|
164
|
-
target: DeploymentElementExpression
|
|
165
|
-
isBidirectional?: boolean
|
|
166
|
-
}
|
|
167
|
-
export const isDirect = (expr: DeploymentExpression): expr is Direct => {
|
|
168
|
-
return 'source' in expr && 'target' in expr
|
|
169
|
-
}
|
|
170
|
-
export type Incoming = {
|
|
171
|
-
incoming: DeploymentElementExpression
|
|
172
|
-
}
|
|
173
|
-
export const isIncoming = (expr: DeploymentExpression): expr is Incoming => {
|
|
174
|
-
return 'incoming' in expr
|
|
175
|
-
}
|
|
176
|
-
export type Outgoing = {
|
|
177
|
-
outgoing: DeploymentElementExpression
|
|
178
|
-
}
|
|
179
|
-
export const isOutgoing = (expr: DeploymentExpression): expr is Outgoing => {
|
|
180
|
-
return 'outgoing' in expr
|
|
181
|
-
}
|
|
182
|
-
export type InOut = {
|
|
183
|
-
inout: DeploymentElementExpression
|
|
184
|
-
}
|
|
185
|
-
export const isInOut = (expr: DeploymentExpression): expr is InOut => {
|
|
186
|
-
return 'inout' in expr
|
|
187
|
-
}
|
|
188
|
-
}
|
|
125
|
+
// export type DeploymentRelationExpression = ExclusiveUnion<{
|
|
126
|
+
// Direct: DeploymentRelationExpression.Direct
|
|
127
|
+
// Incoming: DeploymentRelationExpression.Incoming
|
|
128
|
+
// Outgoing: DeploymentRelationExpression.Outgoing
|
|
129
|
+
// InOut: DeploymentRelationExpression.InOut
|
|
130
|
+
// }>
|
|
189
131
|
|
|
190
|
-
export
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
export type Ref = {
|
|
199
|
-
ref: DeploymentRef
|
|
200
|
-
selector?:
|
|
201
|
-
| 'children' // ele.*
|
|
202
|
-
| 'expanded' // ele._
|
|
203
|
-
| 'descendants' // ele.**
|
|
204
|
-
}
|
|
205
|
-
export const isRef = (expr: DeploymentExpression): expr is Ref => {
|
|
206
|
-
return 'ref' in expr
|
|
207
|
-
}
|
|
132
|
+
// export namespace DeploymentElementExpression {
|
|
133
|
+
// export type Ref = {
|
|
134
|
+
// ref: DeploymentRef
|
|
135
|
+
// selector?: PredicateSelector
|
|
136
|
+
// }
|
|
137
|
+
// export const isRef = (expr: DeploymentExpression): expr is Ref => {
|
|
138
|
+
// return 'ref' in expr
|
|
139
|
+
// }
|
|
208
140
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
}
|
|
141
|
+
// export type Wildcard = {
|
|
142
|
+
// wildcard: true
|
|
143
|
+
// }
|
|
144
|
+
// export const isWildcard = (expr: DeploymentExpression): expr is Wildcard => {
|
|
145
|
+
// return 'wildcard' in expr && expr.wildcard === true
|
|
146
|
+
// }
|
|
147
|
+
// }
|
|
216
148
|
|
|
217
|
-
export type DeploymentElementExpression = ExclusiveUnion<{
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
}>
|
|
149
|
+
// export type DeploymentElementExpression = ExclusiveUnion<{
|
|
150
|
+
// DeploymentRef: DeploymentElementExpression.Ref
|
|
151
|
+
// Wildcard: DeploymentElementExpression.Wildcard
|
|
152
|
+
// }>
|
|
221
153
|
|
|
222
|
-
export type DeploymentExpression = ExclusiveUnion<{
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
}>
|
|
154
|
+
// export type DeploymentExpression = ExclusiveUnion<{
|
|
155
|
+
// Element: DeploymentElementExpression
|
|
156
|
+
// Relation: DeploymentRelationExpression
|
|
157
|
+
// }>
|
|
226
158
|
|
|
227
|
-
export namespace DeploymentExpression {
|
|
228
|
-
|
|
229
|
-
|
|
159
|
+
// export namespace DeploymentExpression {
|
|
160
|
+
// export type Element = DeploymentElementExpression
|
|
161
|
+
// export type Relation = DeploymentRelationExpression
|
|
230
162
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
}
|
|
163
|
+
// export const isElement = (expr: DeploymentExpression): expr is DeploymentElementExpression => {
|
|
164
|
+
// return DeploymentElementExpression.isRef(expr) || DeploymentElementExpression.isWildcard(expr)
|
|
165
|
+
// }
|
|
166
|
+
// export const isRelation = (expr: DeploymentExpression): expr is DeploymentRelationExpression => {
|
|
167
|
+
// return !DeploymentExpression.isElement(expr)
|
|
168
|
+
// }
|
|
169
|
+
// }
|
package/src/types/element.ts
CHANGED
|
@@ -28,8 +28,8 @@ export const ElementShapes = [
|
|
|
28
28
|
] as const
|
|
29
29
|
|
|
30
30
|
export type ElementShape = TupleToUnion<typeof ElementShapes>
|
|
31
|
-
export const DefaultThemeColor = 'primary'
|
|
32
|
-
export const DefaultElementShape = 'rectangle'
|
|
31
|
+
export const DefaultThemeColor: ThemeColor = 'primary'
|
|
32
|
+
export const DefaultElementShape: ElementShape = 'rectangle'
|
|
33
33
|
|
|
34
34
|
export interface ElementStyle {
|
|
35
35
|
readonly border?: BorderStyle
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { invariant } from '../errors'
|
|
2
|
+
import type { ExclusiveUnion } from './_common'
|
|
3
|
+
import type { DeploymentRef as DeploymentModelRef, PredicateSelector } from './deployments'
|
|
4
|
+
import type { Fqn } from './element'
|
|
5
|
+
|
|
6
|
+
export namespace FqnRef {
|
|
7
|
+
/**
|
|
8
|
+
* Represents a reference to an instance within a deployment.
|
|
9
|
+
*
|
|
10
|
+
* @template D - The type representing the deployment fqn. Defaults to `Fqn`.
|
|
11
|
+
* @template M - The type representing the model fqn. Defaults to `Fqn`.
|
|
12
|
+
*
|
|
13
|
+
* @property {D} deployment - TThe fully qualified name (FQN) of the deployed instance.
|
|
14
|
+
* @property {M} element - The element reference within the deployment.
|
|
15
|
+
*/
|
|
16
|
+
export type InsideInstanceRef<D = Fqn, M = Fqn> = {
|
|
17
|
+
deployment: D
|
|
18
|
+
element: M
|
|
19
|
+
}
|
|
20
|
+
export const isInsideInstanceRef = (ref: FqnRef): ref is InsideInstanceRef => {
|
|
21
|
+
return 'deployment' in ref && 'element' in ref
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Represents a reference to a deployment element.
|
|
26
|
+
*
|
|
27
|
+
* @template F - The type of the fully qualified name (FQN) of the deployment element. Defaults to `Fqn`.
|
|
28
|
+
* @property {F} deployment - The fully qualified name (FQN) of the deployment element.
|
|
29
|
+
*/
|
|
30
|
+
export type DeploymentElementRef<F = Fqn> = {
|
|
31
|
+
deployment: F
|
|
32
|
+
}
|
|
33
|
+
export const isDeploymentElementRef = (ref: FqnRef): ref is DeploymentElementRef => {
|
|
34
|
+
return 'deployment' in ref && !('element' in ref)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export type DeploymentRef<D = Fqn, M = Fqn> = DeploymentElementRef<D> | InsideInstanceRef<D, M>
|
|
38
|
+
export const isDeploymentRef = (ref: FqnRef): ref is DeploymentRef => {
|
|
39
|
+
return !isModelRef(ref)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Reference to logical model element
|
|
44
|
+
*/
|
|
45
|
+
export type ModelRef<F = Fqn> = {
|
|
46
|
+
model: F
|
|
47
|
+
}
|
|
48
|
+
export const isModelRef = (ref: FqnRef): ref is ModelRef => {
|
|
49
|
+
return 'model' in ref
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export const toDeploymentRef = (ref: FqnRef): DeploymentModelRef => {
|
|
53
|
+
invariant(isDeploymentRef(ref), 'Expected DeploymentRef')
|
|
54
|
+
return isInsideInstanceRef(ref)
|
|
55
|
+
? {
|
|
56
|
+
id: ref.deployment,
|
|
57
|
+
element: ref.element,
|
|
58
|
+
}
|
|
59
|
+
: {
|
|
60
|
+
id: ref.deployment,
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export type FqnRef<D = Fqn, M = Fqn> = ExclusiveUnion<{
|
|
66
|
+
InsideInstanceRef: FqnRef.InsideInstanceRef<D, M>
|
|
67
|
+
DeploymentRef: FqnRef.DeploymentRef<D>
|
|
68
|
+
ModelRef: FqnRef.ModelRef<M>
|
|
69
|
+
}>
|
|
70
|
+
|
|
71
|
+
export namespace FqnExpr {
|
|
72
|
+
export type Wildcard = {
|
|
73
|
+
wildcard: true
|
|
74
|
+
}
|
|
75
|
+
export const isWildcard = (expr: ExpressionV2): expr is Wildcard => {
|
|
76
|
+
return 'wildcard' in expr && expr.wildcard === true
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export type ModelRef<M = Fqn> = {
|
|
80
|
+
ref: FqnRef.ModelRef<M>
|
|
81
|
+
selector?: PredicateSelector
|
|
82
|
+
}
|
|
83
|
+
export const isModelRef = (ref: ExpressionV2): ref is ModelRef => {
|
|
84
|
+
return 'ref' in ref && FqnRef.isModelRef(ref.ref)
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export type DeploymentRef<D = Fqn, M = Fqn> = {
|
|
88
|
+
ref: FqnRef.DeploymentRef<D> | FqnRef.InsideInstanceRef<D, M>
|
|
89
|
+
selector?: PredicateSelector
|
|
90
|
+
}
|
|
91
|
+
export const isDeploymentRef = (ref: ExpressionV2): ref is FqnExpr.DeploymentRef => {
|
|
92
|
+
return 'ref' in ref && FqnRef.isDeploymentRef(ref.ref)
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export type NonWildcard<D = Fqn, M = Fqn> = ExclusiveUnion<{
|
|
96
|
+
ModelRef: ModelRef<M>
|
|
97
|
+
DeploymentRef: DeploymentRef<D, M>
|
|
98
|
+
}>
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export type FqnExpr<D = Fqn, M = Fqn> = ExclusiveUnion<{
|
|
102
|
+
Wildcard: FqnExpr.Wildcard
|
|
103
|
+
ModelRef: FqnExpr.ModelRef<M>
|
|
104
|
+
DeploymentRef: FqnExpr.DeploymentRef<D, M>
|
|
105
|
+
}>
|
|
106
|
+
|
|
107
|
+
export namespace RelationExpr {
|
|
108
|
+
export type Direct<D = Fqn, M = Fqn> = {
|
|
109
|
+
source: FqnExpr<D, M>
|
|
110
|
+
target: FqnExpr<D, M>
|
|
111
|
+
isBidirectional?: boolean
|
|
112
|
+
}
|
|
113
|
+
export const isDirect = (expr: ExpressionV2): expr is Direct => {
|
|
114
|
+
return 'source' in expr && 'target' in expr
|
|
115
|
+
}
|
|
116
|
+
export type Incoming<D = Fqn, M = Fqn> = {
|
|
117
|
+
incoming: FqnExpr<D, M>
|
|
118
|
+
}
|
|
119
|
+
export const isIncoming = (expr: ExpressionV2): expr is Incoming => {
|
|
120
|
+
return 'incoming' in expr
|
|
121
|
+
}
|
|
122
|
+
export type Outgoing<D = Fqn, M = Fqn> = {
|
|
123
|
+
outgoing: FqnExpr<D, M>
|
|
124
|
+
}
|
|
125
|
+
export const isOutgoing = (expr: ExpressionV2): expr is Outgoing => {
|
|
126
|
+
return 'outgoing' in expr
|
|
127
|
+
}
|
|
128
|
+
export type InOut<D = Fqn, M = Fqn> = {
|
|
129
|
+
inout: FqnExpr<D, M>
|
|
130
|
+
}
|
|
131
|
+
export const isInOut = (expr: ExpressionV2): expr is InOut => {
|
|
132
|
+
return 'inout' in expr
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
export type RelationExpr<D = Fqn, M = Fqn> = ExclusiveUnion<{
|
|
137
|
+
Direct: RelationExpr.Direct<D, M>
|
|
138
|
+
Incoming: RelationExpr.Incoming<D, M>
|
|
139
|
+
Outgoing: RelationExpr.Outgoing<D, M>
|
|
140
|
+
InOut: RelationExpr.InOut<D, M>
|
|
141
|
+
}>
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Represents a version 2 expression which can be one of several types.
|
|
145
|
+
*
|
|
146
|
+
* @template D - The type for the deployment FQN, defaults to `Fqn`.
|
|
147
|
+
* @template M - The type for the model FQN, defaults to `Fqn`.
|
|
148
|
+
*/
|
|
149
|
+
export type ExpressionV2<D = Fqn, M = Fqn> = ExclusiveUnion<{
|
|
150
|
+
Wildcard: FqnExpr.Wildcard
|
|
151
|
+
ModelRef: FqnExpr.ModelRef<M>
|
|
152
|
+
DeploymentRef: FqnExpr.DeploymentRef<D, M>
|
|
153
|
+
Direct: RelationExpr.Direct<D, M>
|
|
154
|
+
Incoming: RelationExpr.Incoming<D, M>
|
|
155
|
+
Outgoing: RelationExpr.Outgoing<D, M>
|
|
156
|
+
InOut: RelationExpr.InOut<D, M>
|
|
157
|
+
}>
|
|
158
|
+
|
|
159
|
+
export namespace ExpressionV2 {
|
|
160
|
+
export const isFqnExpr = (expr: ExpressionV2): expr is FqnExpr => {
|
|
161
|
+
return FqnExpr.isWildcard(expr)
|
|
162
|
+
|| FqnExpr.isModelRef(expr)
|
|
163
|
+
|| FqnExpr.isDeploymentRef(expr)
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
export const isRelation = (expr: ExpressionV2): expr is RelationExpr => {
|
|
167
|
+
return RelationExpr.isDirect(expr)
|
|
168
|
+
|| RelationExpr.isIncoming(expr)
|
|
169
|
+
|| RelationExpr.isOutgoing(expr)
|
|
170
|
+
|| RelationExpr.isInOut(expr)
|
|
171
|
+
}
|
|
172
|
+
}
|
package/src/types/expression.ts
CHANGED
|
@@ -82,12 +82,16 @@ export function isElementTagExpr(expr: Expression): expr is ElementTagExpr {
|
|
|
82
82
|
return 'elementTag' in expr && 'isEqual' in expr
|
|
83
83
|
}
|
|
84
84
|
|
|
85
|
-
export type
|
|
85
|
+
export type NonWilcard =
|
|
86
86
|
| ElementRefExpr
|
|
87
|
-
| WildcardExpr
|
|
88
87
|
| ElementKindExpr
|
|
89
88
|
| ElementTagExpr
|
|
90
89
|
| ExpandedElementExpr
|
|
90
|
+
|
|
91
|
+
export type ElementExpression =
|
|
92
|
+
| NonWilcard
|
|
93
|
+
| WildcardExpr
|
|
94
|
+
|
|
91
95
|
export function isElement(expr: Expression): expr is ElementExpression {
|
|
92
96
|
return isElementRef(expr)
|
|
93
97
|
|| isWildcard(expr)
|
|
@@ -111,12 +115,12 @@ export function isElementPredicateExpr(expr: Expression): expr is ElementPredica
|
|
|
111
115
|
return isElement(expr) || isElementWhere(expr) || isCustomElement(expr)
|
|
112
116
|
}
|
|
113
117
|
|
|
114
|
-
export interface
|
|
118
|
+
export interface DirectRelationExpr extends Omit<BaseExpr, 'source' | 'target'> {
|
|
115
119
|
source: ElementExpression
|
|
116
120
|
target: ElementExpression
|
|
117
121
|
isBidirectional?: boolean
|
|
118
122
|
}
|
|
119
|
-
export function isRelation(expr: Expression): expr is
|
|
123
|
+
export function isRelation(expr: Expression): expr is DirectRelationExpr {
|
|
120
124
|
return 'source' in expr && 'target' in expr
|
|
121
125
|
}
|
|
122
126
|
|
|
@@ -140,7 +144,7 @@ export function isOutgoing(expr: Expression): expr is OutgoingExpr {
|
|
|
140
144
|
return 'outgoing' in expr
|
|
141
145
|
}
|
|
142
146
|
|
|
143
|
-
export type RelationExpression =
|
|
147
|
+
export type RelationExpression = DirectRelationExpr | InOutExpr | IncomingExpr | OutgoingExpr
|
|
144
148
|
|
|
145
149
|
export function isRelationExpression(expr: Expression): expr is RelationExpression {
|
|
146
150
|
return isRelation(expr) || isInOut(expr) || isIncoming(expr) || isOutgoing(expr)
|
package/src/types/global.ts
CHANGED
|
@@ -13,7 +13,7 @@ export type GlobalStyleID = Tagged<string, 'GlobalStyleID'>
|
|
|
13
13
|
export type GlobalStyles = NonEmptyTuple<ViewRuleStyle>
|
|
14
14
|
|
|
15
15
|
export interface ModelGlobals {
|
|
16
|
-
predicates: Record<GlobalPredicateId, GlobalPredicates>
|
|
17
|
-
dynamicPredicates: Record<GlobalPredicateId, GlobalDynamicPredicates>
|
|
18
|
-
styles: Record<GlobalStyleID, GlobalStyles>
|
|
16
|
+
readonly predicates: Record<GlobalPredicateId, GlobalPredicates>
|
|
17
|
+
readonly dynamicPredicates: Record<GlobalPredicateId, GlobalDynamicPredicates>
|
|
18
|
+
readonly styles: Record<GlobalStyleID, GlobalStyles>
|
|
19
19
|
}
|