@likec4/core 1.30.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 +10 -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.CAcZ6_cP.mjs → core.CBpKAlhj.mjs} +1742 -4128
- 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 +19 -10
- 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 +182 -137
- package/src/model/DeploymentModel.ts +88 -65
- package/src/model/ElementModel.ts +92 -72
- package/src/model/LikeC4Model.ts +430 -241
- package/src/model/RelationModel.ts +69 -26
- 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.CZR9J1Qx.d.mts +0 -146
- package/dist/shared/core.CiFKryGW.d.mts +0 -745
- package/dist/shared/core.DJvmfnEi.d.mts +0 -1153
- package/dist/shared/core.DgfwjBtu.mjs +0 -495
- 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
|
@@ -2,8 +2,8 @@ import Graph from 'graphology'
|
|
|
2
2
|
import { topologicalSort as topsort } from 'graphology-dag/topological-sort'
|
|
3
3
|
import willCreateCycle from 'graphology-dag/will-create-cycle'
|
|
4
4
|
import { forEach, map, partition, pipe, takeWhile } from 'remeda'
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
5
|
+
import type { AnyAux, ComputedEdge, ComputedNode, NodeId } from '../../types'
|
|
6
|
+
import { invariant, nonNullable } from '../../utils'
|
|
7
7
|
import { ancestorsOfNode } from './ancestorsOfNode'
|
|
8
8
|
|
|
9
9
|
/**
|
|
@@ -41,7 +41,7 @@ function ensureParentsFirst<T extends { id: string; parent: string | null }>(
|
|
|
41
41
|
/**
|
|
42
42
|
* Side effect, mutates node.children field to preserve same order as in the input
|
|
43
43
|
*/
|
|
44
|
-
function updateChildren(nodes: ComputedNode[]) {
|
|
44
|
+
function updateChildren<A extends AnyAux = AnyAux>(nodes: ComputedNode<A>[]): ComputedNode<A>[] {
|
|
45
45
|
nodes.forEach(parent => {
|
|
46
46
|
if (parent.children.length > 0) {
|
|
47
47
|
parent.children = nodes.reduce((acc, n) => {
|
|
@@ -55,15 +55,15 @@ function updateChildren(nodes: ComputedNode[]) {
|
|
|
55
55
|
return nodes
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
type TopologicalSortParam = {
|
|
59
|
-
nodes: ReadonlyMap<
|
|
60
|
-
edges: Iterable<ComputedEdge
|
|
58
|
+
type TopologicalSortParam<A extends AnyAux> = {
|
|
59
|
+
nodes: ReadonlyMap<string, ComputedNode<A>>
|
|
60
|
+
edges: Iterable<ComputedEdge<A>>
|
|
61
61
|
}
|
|
62
|
-
export function topologicalSort(
|
|
63
|
-
param: TopologicalSortParam
|
|
62
|
+
export function topologicalSort<A extends AnyAux>(
|
|
63
|
+
param: TopologicalSortParam<A>,
|
|
64
64
|
): {
|
|
65
|
-
nodes: ComputedNode[]
|
|
66
|
-
edges: ComputedEdge[]
|
|
65
|
+
nodes: ComputedNode<A>[]
|
|
66
|
+
edges: ComputedEdge<A>[]
|
|
67
67
|
} {
|
|
68
68
|
let nodes = ensureParentsFirst([...param.nodes.values()])
|
|
69
69
|
let edges = [...param.edges]
|
|
@@ -74,7 +74,7 @@ export function topologicalSort(
|
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
-
const getNode = (id:
|
|
77
|
+
const getNode = (id: string) => nonNullable(param.nodes.get(id))
|
|
78
78
|
// const nodeLevel = (id: string) => getNode(id).level + 1
|
|
79
79
|
//
|
|
80
80
|
|
|
@@ -140,9 +140,9 @@ export function topologicalSort(
|
|
|
140
140
|
// // }
|
|
141
141
|
// // return Math.min(nodes.indexOf(a.source), nodes.indexOf(a.target)) - Math.min(nodes.indexOf(b.source), nodes.indexOf(b.target))
|
|
142
142
|
// })
|
|
143
|
-
const sortedEdges = [] as ComputedEdge[]
|
|
143
|
+
const sortedEdges = [] as ComputedEdge<A>[]
|
|
144
144
|
|
|
145
|
-
const addEdgeToGraph = (edge: ComputedEdge) => {
|
|
145
|
+
const addEdgeToGraph = (edge: ComputedEdge<A>) => {
|
|
146
146
|
g.mergeNode(edge.source)
|
|
147
147
|
g.mergeNode(edge.target)
|
|
148
148
|
sortedEdges.push(edge)
|
|
@@ -221,7 +221,7 @@ export function topologicalSort(
|
|
|
221
221
|
// }
|
|
222
222
|
|
|
223
223
|
const sortedIds = topsort(g)
|
|
224
|
-
let sorted = [] as ComputedNode[]
|
|
224
|
+
let sorted = [] as ComputedNode<A>[]
|
|
225
225
|
let unsorted = nodes.slice()
|
|
226
226
|
for (const sortedId of sortedIds) {
|
|
227
227
|
const indx = unsorted.findIndex(n => n.id === sortedId)
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { isTruthy, map, mapToObj, pick, pipe } from 'remeda'
|
|
2
2
|
import type { SetOptional } from 'type-fest'
|
|
3
3
|
import type { ComputedView } from '../../types'
|
|
4
|
-
import { objectHash } from '../../utils
|
|
4
|
+
import { objectHash } from '../../utils'
|
|
5
5
|
|
|
6
6
|
export function calcViewLayoutHash<V extends ComputedView>(view: SetOptional<V, 'hash'>): V {
|
|
7
7
|
const tohash = {
|
|
8
8
|
id: view.id,
|
|
9
|
-
__: view.
|
|
9
|
+
__: view._type ?? 'element',
|
|
10
10
|
autoLayout: view.autoLayout,
|
|
11
11
|
nodes: pipe(
|
|
12
12
|
view.nodes,
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { map, mapToObj, mapValues, omit } from 'remeda'
|
|
2
|
-
import type { ComputedLikeC4ModelData } from '../../types'
|
|
3
|
-
import type { ComputedView, EdgeId } from '../../types/view'
|
|
2
|
+
import type { AnyAux, ComputedLikeC4ModelData, ComputedView, EdgeId } from '../../types'
|
|
4
3
|
|
|
5
4
|
/**
|
|
6
5
|
* Convert hashed edge ids to human-readable
|
|
7
6
|
* Mostly for testing purposes
|
|
8
7
|
*/
|
|
9
|
-
export function withReadableEdges<
|
|
8
|
+
export function withReadableEdges<V extends ComputedView<any>>(
|
|
9
|
+
{ edges, nodes, ...view }: V,
|
|
10
|
+
separator = ':',
|
|
11
|
+
): V & {
|
|
10
12
|
nodeIds: string[]
|
|
11
13
|
edgeIds: string[]
|
|
12
14
|
} {
|
|
@@ -28,9 +30,11 @@ export function withReadableEdges<T extends ComputedView>({ edges, nodes, ...vie
|
|
|
28
30
|
} as any
|
|
29
31
|
}
|
|
30
32
|
|
|
31
|
-
export function viewsWithReadableEdges<
|
|
33
|
+
export function viewsWithReadableEdges<A extends AnyAux>(
|
|
34
|
+
{ views, ...model }: ComputedLikeC4ModelData<A>,
|
|
35
|
+
): ComputedLikeC4ModelData<A> {
|
|
32
36
|
return {
|
|
33
37
|
...model,
|
|
34
|
-
views: mapValues(views, v => omit(withReadableEdges(v), ['nodeIds', 'edgeIds'])),
|
|
38
|
+
views: mapValues(views as Record<string, ComputedView<A>>, v => omit(withReadableEdges(v), ['nodeIds', 'edgeIds'])),
|
|
35
39
|
} as any
|
|
36
40
|
}
|
package/src/index.ts
CHANGED
|
@@ -5,38 +5,6 @@ export {
|
|
|
5
5
|
RelationshipColors,
|
|
6
6
|
} from './theme'
|
|
7
7
|
|
|
8
|
-
export {
|
|
9
|
-
invariant,
|
|
10
|
-
nonexhaustive,
|
|
11
|
-
nonNullable,
|
|
12
|
-
} from './errors'
|
|
13
|
-
|
|
14
|
-
export {
|
|
15
|
-
type AnyAux,
|
|
16
|
-
type Aux,
|
|
17
|
-
Connection,
|
|
18
|
-
ConnectionModel,
|
|
19
|
-
DeployedInstanceModel,
|
|
20
|
-
DeploymentConnectionModel,
|
|
21
|
-
type DeploymentElementModel,
|
|
22
|
-
DeploymentNodeModel,
|
|
23
|
-
DeploymentRelationModel,
|
|
24
|
-
EdgeModel,
|
|
25
|
-
ElementModel,
|
|
26
|
-
LikeC4DeploymentModel,
|
|
27
|
-
LikeC4Model,
|
|
28
|
-
LikeC4ViewModel,
|
|
29
|
-
NodeModel,
|
|
30
|
-
RelationshipModel,
|
|
31
|
-
} from './model'
|
|
32
8
|
export * from './types'
|
|
33
9
|
|
|
34
10
|
export * from './utils'
|
|
35
|
-
|
|
36
|
-
export {
|
|
37
|
-
computeView,
|
|
38
|
-
computeViews,
|
|
39
|
-
unsafeComputeView,
|
|
40
|
-
} from './compute-view'
|
|
41
|
-
|
|
42
|
-
export type { ComputeViewResult } from './compute-view'
|