@likec4/core 1.17.0 → 1.18.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.
Files changed (112) hide show
  1. package/dist/compute-view/index.d.mts +91 -0
  2. package/dist/compute-view/index.d.ts +91 -0
  3. package/dist/compute-view/index.mjs +79 -0
  4. package/dist/index.d.mts +248 -435
  5. package/dist/index.d.ts +248 -435
  6. package/dist/index.mjs +418 -1322
  7. package/dist/model/index.d.mts +642 -0
  8. package/dist/model/index.d.ts +642 -0
  9. package/dist/model/index.mjs +2 -0
  10. package/dist/shared/core.BBgiAAv1.mjs +144 -0
  11. package/dist/shared/core.BPyJvuMU.mjs +2420 -0
  12. package/dist/shared/core.BQ4AbfvB.mjs +9228 -0
  13. package/dist/shared/{core.CoLQkcYL.d.ts → core.DMYY7C8s.d.mts} +398 -249
  14. package/dist/shared/{core.CoLQkcYL.d.cts → core.DMYY7C8s.d.ts} +398 -249
  15. package/dist/shared/core.k12s_keD.mjs +203 -0
  16. package/dist/types/index.d.mts +69 -1
  17. package/dist/types/index.d.ts +69 -1
  18. package/dist/types/index.mjs +21 -1
  19. package/package.json +40 -42
  20. package/src/builder/Builder.deployment.ts +219 -0
  21. package/src/builder/Builder.deploymentModel.ts +360 -0
  22. package/src/builder/Builder.element.ts +17 -19
  23. package/src/builder/Builder.model.ts +13 -2
  24. package/src/builder/Builder.test-d.ts +59 -4
  25. package/src/builder/Builder.ts +238 -53
  26. package/src/builder/Builder.view.ts +238 -53
  27. package/src/builder/_types.ts +87 -15
  28. package/src/compute-view/LikeC4ModelGraph.ts +330 -0
  29. package/src/compute-view/compute-view.ts +92 -0
  30. package/src/compute-view/deployment-view/Memory.ts +108 -0
  31. package/src/compute-view/deployment-view/Stage.ts +145 -0
  32. package/src/compute-view/deployment-view/__test__/fixture.ts +210 -0
  33. package/src/compute-view/deployment-view/_types.ts +29 -0
  34. package/src/compute-view/deployment-view/clean-connections.ts +229 -0
  35. package/src/compute-view/deployment-view/compute.ts +111 -0
  36. package/src/compute-view/deployment-view/predicates/deployment-ref.ts +146 -0
  37. package/src/compute-view/deployment-view/predicates/relation-direct.ts +130 -0
  38. package/src/compute-view/deployment-view/predicates/relation-in-out.ts +43 -0
  39. package/src/compute-view/deployment-view/predicates/relation-incoming.ts +46 -0
  40. package/src/compute-view/deployment-view/predicates/relation-outgoing.ts +49 -0
  41. package/src/compute-view/deployment-view/predicates/wildcard.ts +29 -0
  42. package/src/compute-view/deployment-view/utils.ts +212 -0
  43. package/src/compute-view/dynamic-view/__test__/fixture.ts +58 -0
  44. package/src/compute-view/dynamic-view/compute.ts +310 -0
  45. package/src/compute-view/element-view/__test__/__snapshots__/legacy.spec.ts.snap +456 -0
  46. package/src/compute-view/element-view/__test__/fixture.ts +645 -0
  47. package/src/compute-view/element-view/compute.ts +734 -0
  48. package/src/compute-view/element-view/predicates.ts +517 -0
  49. package/src/compute-view/index.ts +5 -0
  50. package/src/compute-view/utils/__snapshots__/sortNodes.spec.ts.snap +113 -0
  51. package/src/compute-view/utils/ancestorsOfNode.ts +19 -0
  52. package/src/compute-view/utils/applyCustomElementProperties.ts +66 -0
  53. package/src/compute-view/utils/applyCustomRelationProperties.ts +41 -0
  54. package/src/compute-view/utils/applyViewRuleStyles.ts +53 -0
  55. package/src/compute-view/utils/buildComputedNodes.ts +148 -0
  56. package/src/compute-view/utils/buildElementNotations.ts +63 -0
  57. package/src/compute-view/utils/derive-edge-props-from-relationships.ts +97 -0
  58. package/src/compute-view/utils/elementExpressionToPredicate.ts +52 -0
  59. package/src/compute-view/utils/link-nodes-with-edges.ts +58 -0
  60. package/src/compute-view/utils/relationExpressionToPredicates.ts +55 -0
  61. package/src/compute-view/utils/resolve-extended-views.ts +65 -0
  62. package/src/compute-view/utils/resolve-global-rules.ts +83 -0
  63. package/src/compute-view/utils/sortNodes.ts +101 -0
  64. package/src/compute-view/utils/topological-sort.ts +160 -0
  65. package/src/compute-view/utils/uniqueTags.test.ts +42 -0
  66. package/src/compute-view/utils/uniqueTags.ts +21 -0
  67. package/src/compute-view/utils/view-hash.ts +27 -0
  68. package/src/compute-view/utils/with-readable-edges.ts +31 -0
  69. package/src/index.ts +5 -1
  70. package/src/model/DeploymentElementModel.ts +534 -0
  71. package/src/model/DeploymentModel.ts +364 -0
  72. package/src/model/ElementModel.ts +195 -0
  73. package/src/model/LikeC4Model.test-d.ts +151 -0
  74. package/src/model/LikeC4Model.ts +280 -457
  75. package/src/model/RelationModel.ts +84 -0
  76. package/src/model/__test__/fixture.ts +153 -338
  77. package/src/model/connection/ConnectionModel.ts +94 -0
  78. package/src/model/connection/DeploymentConnectionModel.ts +99 -0
  79. package/src/model/connection/deployment.ts +124 -0
  80. package/src/model/connection/model.ts +123 -0
  81. package/src/model/index.ts +4 -2
  82. package/src/model/types.ts +95 -15
  83. package/src/model/view/EdgeModel.ts +103 -0
  84. package/src/model/view/LikeC4ViewModel.ts +220 -0
  85. package/src/model/view/NodeModel.ts +228 -0
  86. package/src/types/_common.ts +2 -0
  87. package/src/types/deployments.ts +237 -0
  88. package/src/types/element.ts +7 -3
  89. package/src/types/expression.ts +8 -6
  90. package/src/types/index.ts +1 -0
  91. package/src/types/model.ts +68 -9
  92. package/src/types/overview-graph.ts +2 -2
  93. package/src/types/relation.ts +4 -4
  94. package/src/types/view-notation.ts +2 -2
  95. package/src/types/view.ts +104 -30
  96. package/src/utils/{commonHead.ts → common-head.ts} +2 -0
  97. package/src/utils/fqn.ts +83 -27
  98. package/src/utils/getOrCreate.ts +42 -0
  99. package/src/utils/graphlib.ts +10 -0
  100. package/src/utils/index.ts +4 -1
  101. package/src/utils/object-hash.ts +3 -0
  102. package/src/utils/set.ts +76 -0
  103. package/src/utils/string-hash.ts +16 -0
  104. package/dist/index.cjs +0 -5452
  105. package/dist/index.d.cts +0 -1052
  106. package/dist/shared/core.CoLQkcYL.d.mts +0 -734
  107. package/dist/shared/core.v5DxGcX6.mjs +0 -293
  108. package/dist/shared/core.zN6ZscFQ.cjs +0 -353
  109. package/dist/types/index.cjs +0 -70
  110. package/dist/types/index.d.cts +0 -2
  111. package/src/model/LikeC4DiagramModel.ts +0 -338
  112. package/src/model/LikeC4ViewModel.ts +0 -320
@@ -0,0 +1,91 @@
1
+ import { SetOptional } from 'type-fest';
2
+ import { P as ParsedLikeC4Model, C as ComputedLikeC4ModelFromParsed, L as LikeC4View, a as ComputedView, M as ModelGlobals, E as Element, F as Fqn, R as Relation, b as RelationId, c as ComputedLikeC4Model } from '../shared/core.DMYY7C8s.mjs';
3
+
4
+ type ComputeViewResult<V extends ComputedView = ComputedView> = {
5
+ isSuccess: true;
6
+ error?: undefined;
7
+ view: V;
8
+ } | {
9
+ isSuccess: false;
10
+ error: Error;
11
+ view: undefined;
12
+ };
13
+ type ComputeViewFn = <V extends LikeC4View>(viewsource: V) => ComputeViewResult<ComputedView>;
14
+ type Params$1 = SetOptional<ParsedLikeC4Model, 'views'>;
15
+ declare function mkComputeView(model: Params$1): ComputeViewFn;
16
+ declare function computeViews<const P extends ParsedLikeC4Model<any, any, any, any, any, any>>(parsed: P): ComputedLikeC4ModelFromParsed<P>;
17
+
18
+ type Params = {
19
+ elements: Record<Fqn, Element>;
20
+ relations: Record<RelationId, Relation>;
21
+ globals?: ModelGlobals;
22
+ };
23
+ type RelationEdge = {
24
+ source: Element;
25
+ target: Element;
26
+ relations: Relation[];
27
+ };
28
+ type FqnOrElement = Fqn | Element;
29
+ type FqnsOrElements = ReadonlyArray<Fqn> | ReadonlyArray<Element>;
30
+ /**
31
+ * Used only for views calculations.
32
+ * Subject to change.
33
+ */
34
+ declare class LikeC4ModelGraph {
35
+ #private;
36
+ readonly globals: ModelGlobals;
37
+ constructor({ elements, relations, globals }: Params);
38
+ get rootElements(): Element[];
39
+ get elements(): Element[];
40
+ element(id: Fqn): Element;
41
+ connectedRelations(id: Fqn): Relation[];
42
+ children(id: Fqn): Element[];
43
+ descendants(id: Fqn): Element[];
44
+ private descendantsDfs;
45
+ siblings(element: Fqn | Element): Element[];
46
+ /**
47
+ * Get all ancestor elements (i.e. parent, parent’s parent, etc.)
48
+ * (from closest to root)
49
+ */
50
+ ancestors(element: Fqn | Element): Array<Element>;
51
+ /**
52
+ * Resolve siblings of the element and its ancestors
53
+ * (from closest to root)
54
+ */
55
+ ascendingSiblings(element: Fqn | Element): ReadonlyArray<Element>;
56
+ incoming(element: Fqn | Element): ReadonlySet<Relation>;
57
+ outgoing(element: Fqn | Element): ReadonlySet<Relation>;
58
+ /**
59
+ * Resolve all RelationEdges between element and others (any direction)
60
+ */
61
+ anyEdgesBetween(_element: Fqn | Element, others: ReadonlyArray<Fqn> | ReadonlyArray<Element>): Array<RelationEdge>;
62
+ /**
63
+ * Resolve all RelationEdges between elements (any direction)
64
+ */
65
+ edgesWithin<T extends Fqn[] | Element[]>(elements: T): Array<RelationEdge>;
66
+ /**
67
+ * Get directed RelationEdge between source and target if exists
68
+ */
69
+ edgesBetween(_sources: FqnOrElement | FqnsOrElements, _targets: FqnOrElement | FqnsOrElements): RelationEdge[];
70
+ private addElement;
71
+ private addRelation;
72
+ private _childrenOf;
73
+ private _incomingTo;
74
+ private _outgoingFrom;
75
+ private _internalOf;
76
+ }
77
+
78
+ /**
79
+ * Resolve rules of extended views
80
+ * (Removes invalid views)
81
+ */
82
+ declare function resolveRulesExtendedViews<V extends Record<any, LikeC4View>>(unresolvedViews: V): V;
83
+
84
+ /**
85
+ * Convert hashed edge ids to human-readable
86
+ * Mostly for testing purposes
87
+ */
88
+ declare function withReadableEdges<T extends ComputedView>({ edges, nodes, ...view }: T): T;
89
+ declare function viewsWithReadableEdges<M extends ComputedLikeC4Model>({ views, ...model }: M): M;
90
+
91
+ export { LikeC4ModelGraph, computeViews, mkComputeView, resolveRulesExtendedViews, viewsWithReadableEdges, withReadableEdges };
@@ -0,0 +1,91 @@
1
+ import { SetOptional } from 'type-fest';
2
+ import { P as ParsedLikeC4Model, C as ComputedLikeC4ModelFromParsed, L as LikeC4View, a as ComputedView, M as ModelGlobals, E as Element, F as Fqn, R as Relation, b as RelationId, c as ComputedLikeC4Model } from '../shared/core.DMYY7C8s.js';
3
+
4
+ type ComputeViewResult<V extends ComputedView = ComputedView> = {
5
+ isSuccess: true;
6
+ error?: undefined;
7
+ view: V;
8
+ } | {
9
+ isSuccess: false;
10
+ error: Error;
11
+ view: undefined;
12
+ };
13
+ type ComputeViewFn = <V extends LikeC4View>(viewsource: V) => ComputeViewResult<ComputedView>;
14
+ type Params$1 = SetOptional<ParsedLikeC4Model, 'views'>;
15
+ declare function mkComputeView(model: Params$1): ComputeViewFn;
16
+ declare function computeViews<const P extends ParsedLikeC4Model<any, any, any, any, any, any>>(parsed: P): ComputedLikeC4ModelFromParsed<P>;
17
+
18
+ type Params = {
19
+ elements: Record<Fqn, Element>;
20
+ relations: Record<RelationId, Relation>;
21
+ globals?: ModelGlobals;
22
+ };
23
+ type RelationEdge = {
24
+ source: Element;
25
+ target: Element;
26
+ relations: Relation[];
27
+ };
28
+ type FqnOrElement = Fqn | Element;
29
+ type FqnsOrElements = ReadonlyArray<Fqn> | ReadonlyArray<Element>;
30
+ /**
31
+ * Used only for views calculations.
32
+ * Subject to change.
33
+ */
34
+ declare class LikeC4ModelGraph {
35
+ #private;
36
+ readonly globals: ModelGlobals;
37
+ constructor({ elements, relations, globals }: Params);
38
+ get rootElements(): Element[];
39
+ get elements(): Element[];
40
+ element(id: Fqn): Element;
41
+ connectedRelations(id: Fqn): Relation[];
42
+ children(id: Fqn): Element[];
43
+ descendants(id: Fqn): Element[];
44
+ private descendantsDfs;
45
+ siblings(element: Fqn | Element): Element[];
46
+ /**
47
+ * Get all ancestor elements (i.e. parent, parent’s parent, etc.)
48
+ * (from closest to root)
49
+ */
50
+ ancestors(element: Fqn | Element): Array<Element>;
51
+ /**
52
+ * Resolve siblings of the element and its ancestors
53
+ * (from closest to root)
54
+ */
55
+ ascendingSiblings(element: Fqn | Element): ReadonlyArray<Element>;
56
+ incoming(element: Fqn | Element): ReadonlySet<Relation>;
57
+ outgoing(element: Fqn | Element): ReadonlySet<Relation>;
58
+ /**
59
+ * Resolve all RelationEdges between element and others (any direction)
60
+ */
61
+ anyEdgesBetween(_element: Fqn | Element, others: ReadonlyArray<Fqn> | ReadonlyArray<Element>): Array<RelationEdge>;
62
+ /**
63
+ * Resolve all RelationEdges between elements (any direction)
64
+ */
65
+ edgesWithin<T extends Fqn[] | Element[]>(elements: T): Array<RelationEdge>;
66
+ /**
67
+ * Get directed RelationEdge between source and target if exists
68
+ */
69
+ edgesBetween(_sources: FqnOrElement | FqnsOrElements, _targets: FqnOrElement | FqnsOrElements): RelationEdge[];
70
+ private addElement;
71
+ private addRelation;
72
+ private _childrenOf;
73
+ private _incomingTo;
74
+ private _outgoingFrom;
75
+ private _internalOf;
76
+ }
77
+
78
+ /**
79
+ * Resolve rules of extended views
80
+ * (Removes invalid views)
81
+ */
82
+ declare function resolveRulesExtendedViews<V extends Record<any, LikeC4View>>(unresolvedViews: V): V;
83
+
84
+ /**
85
+ * Convert hashed edge ids to human-readable
86
+ * Mostly for testing purposes
87
+ */
88
+ declare function withReadableEdges<T extends ComputedView>({ edges, nodes, ...view }: T): T;
89
+ declare function viewsWithReadableEdges<M extends ComputedLikeC4Model>({ views, ...model }: M): M;
90
+
91
+ export { LikeC4ModelGraph, computeViews, mkComputeView, resolveRulesExtendedViews, viewsWithReadableEdges, withReadableEdges };
@@ -0,0 +1,79 @@
1
+ import { G as Graph, i as isAcyclic, d, f as findCycles, a, p as postorder, l, m, b as i } from '../shared/core.BQ4AbfvB.mjs';
2
+ export { L as LikeC4ModelGraph, c as computeViews, e as mkComputeView } from '../shared/core.BQ4AbfvB.mjs';
3
+ import { r } from '../shared/core.BPyJvuMU.mjs';
4
+ import { i as isExtendsElementView } from '../shared/core.k12s_keD.mjs';
5
+ import '../shared/core.BBgiAAv1.mjs';
6
+
7
+ function resolveRulesExtendedViews(unresolvedViews) {
8
+ const g = new Graph({
9
+ directed: true,
10
+ multigraph: false,
11
+ compound: false
12
+ });
13
+ for (const view of r(unresolvedViews)) {
14
+ g.setNode(view.id, view.id);
15
+ if (isExtendsElementView(view)) {
16
+ g.setEdge(view.id, view.extends);
17
+ }
18
+ }
19
+ if (g.edgeCount() === 0) {
20
+ return unresolvedViews;
21
+ }
22
+ while (!isAcyclic(g)) {
23
+ const firstCycle = d(findCycles(g));
24
+ if (!firstCycle) {
25
+ break;
26
+ }
27
+ const cycledNode = a(firstCycle);
28
+ if (!cycledNode) {
29
+ break;
30
+ }
31
+ g.removeNode(cycledNode);
32
+ }
33
+ const ordered = postorder(g, g.sources());
34
+ return ordered.reduce((acc, id) => {
35
+ const view = unresolvedViews[id];
36
+ if (!view) {
37
+ return acc;
38
+ }
39
+ if (isExtendsElementView(view)) {
40
+ const extendsFrom = acc[view.extends];
41
+ if (!extendsFrom) {
42
+ console.warn(`View "${view.id}" extends from "${view.extends}" which does not exist`);
43
+ return acc;
44
+ }
45
+ return Object.assign(acc, {
46
+ [view.id]: {
47
+ ...extendsFrom,
48
+ ...view,
49
+ rules: [...extendsFrom.rules, ...view.rules]
50
+ }
51
+ });
52
+ }
53
+ return Object.assign(acc, { [view.id]: view });
54
+ }, {});
55
+ }
56
+
57
+ function withReadableEdges({ edges, nodes, ...view }) {
58
+ const edgeids = l(edges, (e) => [e.id, `${e.source}:${e.target}`]);
59
+ return {
60
+ ...view,
61
+ edges: edges.map((e) => ({
62
+ ...e,
63
+ id: edgeids[e.id]
64
+ })),
65
+ nodes: nodes.map((n) => ({
66
+ ...n,
67
+ inEdges: m(n.inEdges, (e) => edgeids[e]),
68
+ outEdges: m(n.outEdges, (e) => edgeids[e])
69
+ }))
70
+ };
71
+ }
72
+ function viewsWithReadableEdges({ views, ...model }) {
73
+ return {
74
+ ...model,
75
+ views: i(views, withReadableEdges)
76
+ };
77
+ }
78
+
79
+ export { resolveRulesExtendedViews, viewsWithReadableEdges, withReadableEdges };