@likec4/core 1.31.0 → 1.32.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.
Files changed (185) hide show
  1. package/README.md +407 -5
  2. package/dist/builder/index.d.mts +221 -42
  3. package/dist/builder/index.mjs +118 -65
  4. package/dist/compute-view/index.d.mts +23 -7
  5. package/dist/compute-view/index.mjs +11 -6
  6. package/dist/compute-view/relationships-view/index.d.mts +9 -7
  7. package/dist/compute-view/relationships-view/index.mjs +3 -2
  8. package/dist/index.d.mts +10 -14
  9. package/dist/index.mjs +9 -6
  10. package/dist/model/index.d.mts +173 -19
  11. package/dist/model/index.mjs +6 -1
  12. package/dist/shared/core.BaYE_r29.d.mts +258 -0
  13. package/dist/shared/core.Bk7wEZFG.mjs +276 -0
  14. package/dist/shared/core.BrCnZFTn.mjs +32 -0
  15. package/dist/shared/core.BuO4ncfY.d.mts +146 -0
  16. package/dist/shared/{core.Bq753SYD.mjs → core.CBpKAlhj.mjs} +2012 -4422
  17. package/dist/shared/core.CUYDgv2-.mjs +214 -0
  18. package/dist/shared/{core.Cu-UdkSl.mjs → core.CpXlRyE5.mjs} +7 -494
  19. package/dist/shared/{core.C-YXI-43.mjs → core.Cy9smucx.mjs} +3 -1
  20. package/dist/shared/core.CywrQs86.d.mts +31 -0
  21. package/dist/shared/core.DXzRBkuI.d.mts +1264 -0
  22. package/dist/shared/core.DoK86JEe.mjs +518 -0
  23. package/dist/shared/{core.D2830qgg.d.mts → core.Pf5I9o0e.d.mts} +1 -1
  24. package/dist/shared/core.cbA9VZ02.mjs +2681 -0
  25. package/dist/shared/{core.CQXU9DF7.mjs → core.rmvsy0n3.mjs} +23 -32
  26. package/dist/shared/core.znRaUX_A.d.mts +920 -0
  27. package/dist/types/aux.d.mts +3 -0
  28. package/dist/types/aux.mjs +1 -0
  29. package/dist/types/index.d.mts +7 -45
  30. package/dist/types/index.mjs +130 -3
  31. package/dist/utils/index.d.mts +221 -53
  32. package/dist/utils/index.mjs +14 -10
  33. package/package.json +16 -8
  34. package/src/builder/Builder.deploymentModel.ts +82 -18
  35. package/src/builder/Builder.element.ts +40 -20
  36. package/src/builder/Builder.model.ts +66 -17
  37. package/src/builder/Builder.ts +168 -76
  38. package/src/builder/Builder.view-common.ts +35 -17
  39. package/src/builder/Builder.view-deployment.ts +25 -25
  40. package/src/builder/Builder.view-element.ts +13 -12
  41. package/src/builder/Builder.views.ts +12 -7
  42. package/src/builder/__snapshots__/Builder-style1.spec.ts.snap +62 -34
  43. package/src/builder/__snapshots__/Builder-style2.compute-model.json5 +319 -0
  44. package/src/builder/__snapshots__/Builder-style2.spec.ts.snap +45 -24
  45. package/src/builder/_types.ts +34 -27
  46. package/src/compute-view/compute-view.ts +31 -34
  47. package/src/compute-view/deployment-view/__test__/TestHelper.ts +27 -14
  48. package/src/compute-view/deployment-view/__test__/fixture.ts +15 -13
  49. package/src/compute-view/deployment-view/_types.ts +10 -10
  50. package/src/compute-view/deployment-view/clean-connections.ts +5 -7
  51. package/src/compute-view/deployment-view/compute.ts +16 -13
  52. package/src/compute-view/deployment-view/memory/memory.ts +5 -6
  53. package/src/compute-view/deployment-view/predicates/deploymentRefs.ts +4 -5
  54. package/src/compute-view/deployment-view/predicates/relation-direct.ts +25 -50
  55. package/src/compute-view/deployment-view/predicates/relation-in-out.ts +5 -7
  56. package/src/compute-view/deployment-view/predicates/relation-incoming.ts +7 -11
  57. package/src/compute-view/deployment-view/predicates/relation-outgoing.ts +7 -10
  58. package/src/compute-view/deployment-view/predicates/utils.ts +37 -31
  59. package/src/compute-view/deployment-view/predicates/wildcard.ts +3 -2
  60. package/src/compute-view/deployment-view/stages/stage-final.ts +2 -2
  61. package/src/compute-view/deployment-view/stages/stage-include.ts +1 -1
  62. package/src/compute-view/deployment-view/utils.ts +79 -72
  63. package/src/compute-view/dynamic-view/__test__/fixture.ts +20 -11
  64. package/src/compute-view/dynamic-view/compute.ts +60 -53
  65. package/src/compute-view/element-view/__test__/TestHelper.ts +53 -29
  66. package/src/compute-view/element-view/__test__/__snapshots__/legacy.spec.ts.snap +26 -26
  67. package/src/compute-view/element-view/__test__/fixture.ts +134 -83
  68. package/src/compute-view/element-view/_types.ts +14 -19
  69. package/src/compute-view/element-view/clean-connections.ts +12 -8
  70. package/src/compute-view/element-view/compute.ts +61 -51
  71. package/src/compute-view/element-view/memory/NodeGroup.ts +8 -9
  72. package/src/compute-view/element-view/memory/memory.ts +22 -22
  73. package/src/compute-view/element-view/memory/stage-include.ts +5 -3
  74. package/src/compute-view/element-view/predicates/_utils.ts +18 -14
  75. package/src/compute-view/element-view/predicates/element-expand.ts +4 -5
  76. package/src/compute-view/element-view/predicates/element-kind-tag.ts +3 -4
  77. package/src/compute-view/element-view/predicates/element-ref.ts +3 -4
  78. package/src/compute-view/element-view/predicates/relation-direct.ts +16 -12
  79. package/src/compute-view/element-view/predicates/relation-in-out.ts +7 -8
  80. package/src/compute-view/element-view/predicates/relation-in.ts +19 -26
  81. package/src/compute-view/element-view/predicates/relation-out.ts +20 -21
  82. package/src/compute-view/element-view/predicates/wildcard.ts +3 -3
  83. package/src/compute-view/element-view/utils.ts +25 -23
  84. package/src/compute-view/index.ts +1 -1
  85. package/src/compute-view/memory/AbstractStageExclude.ts +3 -4
  86. package/src/compute-view/memory/AbstractStageInclude.ts +1 -1
  87. package/src/compute-view/memory/_types.ts +3 -2
  88. package/src/compute-view/relationships-view/_types.ts +3 -4
  89. package/src/compute-view/relationships-view/compute.ts +8 -11
  90. package/src/compute-view/relationships-view/layout.ts +6 -6
  91. package/src/compute-view/relationships-view/utils.ts +4 -4
  92. package/src/compute-view/utils/ancestorsOfNode.ts +7 -7
  93. package/src/compute-view/utils/applyCustomElementProperties.ts +16 -8
  94. package/src/compute-view/utils/applyCustomRelationProperties.ts +19 -9
  95. package/src/compute-view/utils/applyViewRuleStyles.ts +18 -10
  96. package/src/compute-view/utils/buildComputedNodes.ts +40 -40
  97. package/src/compute-view/utils/buildElementNotations.ts +14 -14
  98. package/src/compute-view/utils/elementExpressionToPredicate.ts +14 -15
  99. package/src/compute-view/utils/link-nodes-with-edges.ts +6 -4
  100. package/src/compute-view/utils/merge-props-from-relationships.ts +52 -20
  101. package/src/compute-view/utils/relationExpressionToPredicates.ts +19 -19
  102. package/src/compute-view/utils/resolve-extended-views.ts +8 -7
  103. package/src/compute-view/utils/resolve-global-rules.ts +31 -26
  104. package/src/compute-view/utils/topological-sort.ts +14 -14
  105. package/src/compute-view/utils/view-hash.ts +2 -2
  106. package/src/compute-view/utils/with-readable-edges.ts +9 -5
  107. package/src/index.ts +0 -32
  108. package/src/model/DeploymentElementModel.ts +171 -144
  109. package/src/model/DeploymentModel.ts +88 -65
  110. package/src/model/ElementModel.ts +85 -74
  111. package/src/model/LikeC4Model.ts +430 -241
  112. package/src/model/RelationModel.ts +63 -29
  113. package/src/model/__test__/fixture.ts +50 -36
  114. package/src/model/connection/Connection.ts +2 -2
  115. package/src/model/connection/deployment/DeploymentConnectionModel.ts +21 -24
  116. package/src/model/connection/deployment/find.ts +1 -1
  117. package/src/model/connection/model/ConnectionModel.ts +21 -20
  118. package/src/model/connection/model/find.ts +7 -7
  119. package/src/model/connection/ops.ts +6 -6
  120. package/src/model/guards.ts +66 -14
  121. package/src/model/index.ts +20 -7
  122. package/src/model/types.ts +41 -97
  123. package/src/model/view/EdgeModel.ts +47 -41
  124. package/src/model/view/LikeC4ViewModel.ts +130 -80
  125. package/src/model/view/NodeModel.ts +102 -96
  126. package/src/theme/element.ts +1 -1
  127. package/src/theme/index.ts +9 -9
  128. package/src/theme/relationships.ts +1 -1
  129. package/src/types/_common.ts +21 -15
  130. package/src/types/aux.ts +285 -0
  131. package/src/types/const.ts +34 -0
  132. package/src/types/expression-model.ts +292 -0
  133. package/src/types/expression.ts +311 -0
  134. package/src/types/fqnRef.ts +88 -0
  135. package/src/types/geometry.ts +131 -0
  136. package/src/types/global.ts +10 -8
  137. package/src/types/index.ts +39 -201
  138. package/src/types/model-data.ts +52 -84
  139. package/src/types/model-deployment.ts +87 -0
  140. package/src/types/model-dump.ts +72 -0
  141. package/src/types/model-logical.ts +111 -0
  142. package/src/types/model-spec.ts +81 -0
  143. package/src/types/operators.ts +51 -52
  144. package/src/types/scalar.ts +114 -0
  145. package/src/types/{theme.ts → styles.ts} +55 -15
  146. package/src/types/view-changes.ts +4 -5
  147. package/src/types/view-common.ts +157 -0
  148. package/src/types/view-computed.ts +113 -0
  149. package/src/types/view-layouted.ts +82 -0
  150. package/src/types/view-parsed.deployment.ts +40 -0
  151. package/src/types/view-parsed.dynamic.ts +78 -0
  152. package/src/types/view-parsed.element.ts +65 -0
  153. package/src/types/view.ts +122 -542
  154. package/src/utils/compare-natural.ts +43 -1
  155. package/src/utils/getOrCreate.ts +0 -34
  156. package/src/utils/index.ts +7 -12
  157. package/src/utils/iterable/filter.ts +1 -1
  158. package/src/utils/iterable/find.ts +3 -1
  159. package/src/utils/iterable/head.ts +22 -0
  160. package/src/utils/iterable/index.ts +1 -0
  161. package/src/utils/iterable/map.ts +1 -1
  162. package/src/utils/iterable/reduce.ts +1 -1
  163. package/src/utils/iterable/some.ts +1 -1
  164. package/src/utils/memoize-prop.ts +30 -0
  165. package/src/utils/object-hash.ts +1 -1
  166. package/src/utils/relations.ts +14 -11
  167. package/src/utils/string-hash.ts +1 -1
  168. package/dist/shared/core.CQDU11hR.d.mts +0 -753
  169. package/dist/shared/core.DJvmfnEi.d.mts +0 -1153
  170. package/dist/shared/core.DgfwjBtu.mjs +0 -495
  171. package/dist/shared/core.Dx7siloV.d.mts +0 -146
  172. package/dist/shared/core.SjLhMA7a.d.mts +0 -62
  173. package/src/builder/__snapshots__/Builder.spec.ts.snap +0 -374
  174. package/src/compute-view/element-view/predicates.ts +0 -520
  175. package/src/compute-view/utils/uniqueTags.ts +0 -21
  176. package/src/types/deployments.ts +0 -170
  177. package/src/types/element.ts +0 -109
  178. package/src/types/expression-v2-model.ts +0 -314
  179. package/src/types/expression-v2.ts +0 -392
  180. package/src/types/overview-graph.ts +0 -43
  181. package/src/types/relation.ts +0 -61
  182. package/src/types/scalars.ts +0 -39
  183. package/src/types/view-notation.ts +0 -9
  184. package/src/utils/graphlib.ts +0 -10
  185. /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 { invariant, nonNullable } from '../../errors'
6
- import type { ComputedEdge, ComputedNode, Fqn, NodeId } from '../../types'
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<Fqn, ComputedNode>
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: Fqn) => nonNullable(param.nodes.get(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/object-hash'
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.__ ?? 'element',
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<T extends ComputedView>({ edges, nodes, ...view }: T, separator = ':'): T & {
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<M extends ComputedLikeC4ModelData>({ views, ...model }: M): M {
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'