@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
|
@@ -1,79 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
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
|
-
}
|
|
1
|
+
export { C as ComputeViewResult, c as computeView, a as computeViews, u as unsafeComputeView } from '../shared/core.BZ9Msq7w.mjs';
|
|
2
|
+
import { L as LikeC4View, C as ComputedView, a as ComputedLikeC4Model } from '../shared/core.CmYMqgha.mjs';
|
|
3
|
+
import 'type-fest';
|
|
4
|
+
import '../shared/core.D74xkKkG.mjs';
|
|
77
5
|
|
|
78
6
|
/**
|
|
79
7
|
* Resolve rules of extended views
|
|
@@ -85,7 +13,10 @@ declare function resolveRulesExtendedViews<V extends Record<any, LikeC4View>>(un
|
|
|
85
13
|
* Convert hashed edge ids to human-readable
|
|
86
14
|
* Mostly for testing purposes
|
|
87
15
|
*/
|
|
88
|
-
declare function withReadableEdges<T extends ComputedView>({ edges, nodes, ...view }: T): T
|
|
16
|
+
declare function withReadableEdges<T extends ComputedView>({ edges, nodes, ...view }: T, separator?: string): T & {
|
|
17
|
+
nodeIds: string[];
|
|
18
|
+
edgeIds: string[];
|
|
19
|
+
};
|
|
89
20
|
declare function viewsWithReadableEdges<M extends ComputedLikeC4Model>({ views, ...model }: M): M;
|
|
90
21
|
|
|
91
|
-
export {
|
|
22
|
+
export { resolveRulesExtendedViews, viewsWithReadableEdges, withReadableEdges };
|
|
@@ -1,79 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
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
|
-
}
|
|
1
|
+
export { C as ComputeViewResult, c as computeView, a as computeViews, u as unsafeComputeView } from '../shared/core.BIfgabEw.js';
|
|
2
|
+
import { L as LikeC4View, C as ComputedView, a as ComputedLikeC4Model } from '../shared/core.C05RDLhi.js';
|
|
3
|
+
import 'type-fest';
|
|
4
|
+
import '../shared/core.D74xkKkG.js';
|
|
77
5
|
|
|
78
6
|
/**
|
|
79
7
|
* Resolve rules of extended views
|
|
@@ -85,7 +13,10 @@ declare function resolveRulesExtendedViews<V extends Record<any, LikeC4View>>(un
|
|
|
85
13
|
* Convert hashed edge ids to human-readable
|
|
86
14
|
* Mostly for testing purposes
|
|
87
15
|
*/
|
|
88
|
-
declare function withReadableEdges<T extends ComputedView>({ edges, nodes, ...view }: T): T
|
|
16
|
+
declare function withReadableEdges<T extends ComputedView>({ edges, nodes, ...view }: T, separator?: string): T & {
|
|
17
|
+
nodeIds: string[];
|
|
18
|
+
edgeIds: string[];
|
|
19
|
+
};
|
|
89
20
|
declare function viewsWithReadableEdges<M extends ComputedLikeC4Model>({ views, ...model }: M): M;
|
|
90
21
|
|
|
91
|
-
export {
|
|
22
|
+
export { resolveRulesExtendedViews, viewsWithReadableEdges, withReadableEdges };
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { G as Graph, r, w as willCreateCycle, t as topologicalSortExports, l, i as i$1 } from '../shared/index.-BdzdI2C.js';
|
|
2
|
+
export { c as computeView, a as computeViews, u as unsafeComputeView } from '../shared/index.-BdzdI2C.js';
|
|
3
|
+
import { i as isExtendsElementView, a as isElementView } from '../shared/view.CyZrG8BJ.js';
|
|
4
|
+
import { i, m } from '../shared/object_hash.CE_oF3I3.js';
|
|
5
|
+
import { u } from '../shared/chunk-RAAYCPUM.M-JWF7SS.js';
|
|
6
|
+
|
|
7
|
+
function y(...t){return u(f,t)}function f(t,e){if(!i(e,1))return {...t};if(!i(e,2)){let{[e[0]]:r,...m}=t;return m}let o={...t};for(let r of e)delete o[r];return o}
|
|
8
|
+
|
|
9
|
+
function resolveRulesExtendedViews(unresolvedViews) {
|
|
10
|
+
const g = new Graph({
|
|
11
|
+
type: "directed"
|
|
12
|
+
});
|
|
13
|
+
const extendedViews = [];
|
|
14
|
+
for (const view of r(unresolvedViews)) {
|
|
15
|
+
g.addNode(view.id, { view });
|
|
16
|
+
if (isExtendsElementView(view)) {
|
|
17
|
+
extendedViews.push(view);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
if (extendedViews.length === 0) {
|
|
21
|
+
return unresolvedViews;
|
|
22
|
+
}
|
|
23
|
+
for (const view of extendedViews) {
|
|
24
|
+
if (!g.hasNode(view.extends)) {
|
|
25
|
+
console.warn(`View "${view.id}" extends from "${view.extends}" which does not exist`);
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
if (willCreateCycle(g, view.id, view.extends)) {
|
|
29
|
+
console.warn(`View "${view.id}" extends from "${view.extends}" which creates a cycle`);
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
g.addDirectedEdge(view.id, view.extends);
|
|
33
|
+
}
|
|
34
|
+
const sorted = topologicalSortExports.topologicalSort(g).reverse();
|
|
35
|
+
return sorted.reduce((acc, id) => {
|
|
36
|
+
const view = g.getNodeAttribute(id, "view");
|
|
37
|
+
if (!isExtendsElementView(view)) {
|
|
38
|
+
acc[view.id] = view;
|
|
39
|
+
return acc;
|
|
40
|
+
}
|
|
41
|
+
const extendsFrom = acc[view.extends];
|
|
42
|
+
if (!extendsFrom || !isElementView(extendsFrom)) {
|
|
43
|
+
return acc;
|
|
44
|
+
}
|
|
45
|
+
acc[view.id] = {
|
|
46
|
+
...extendsFrom,
|
|
47
|
+
...view,
|
|
48
|
+
rules: [...extendsFrom.rules, ...view.rules]
|
|
49
|
+
};
|
|
50
|
+
return acc;
|
|
51
|
+
}, {});
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function withReadableEdges({ edges, nodes, ...view }, separator = ":") {
|
|
55
|
+
const edgeids = l(edges, (e) => [e.id, `${e.source}${separator}${e.target}`]);
|
|
56
|
+
return {
|
|
57
|
+
...view,
|
|
58
|
+
edges: edges.map((e) => ({
|
|
59
|
+
...e,
|
|
60
|
+
id: edgeids[e.id]
|
|
61
|
+
})),
|
|
62
|
+
nodes: nodes.map((n) => ({
|
|
63
|
+
...n,
|
|
64
|
+
inEdges: m(n.inEdges, (e) => edgeids[e]),
|
|
65
|
+
outEdges: m(n.outEdges, (e) => edgeids[e])
|
|
66
|
+
})),
|
|
67
|
+
nodeIds: nodes.map((n) => n.id),
|
|
68
|
+
edgeIds: edges.map((e) => edgeids[e.id])
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
function viewsWithReadableEdges({ views, ...model }) {
|
|
72
|
+
return {
|
|
73
|
+
...model,
|
|
74
|
+
views: i$1(views, (v) => y(withReadableEdges(v), ["nodeIds", "edgeIds"]))
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export { resolveRulesExtendedViews, viewsWithReadableEdges, withReadableEdges };
|