@likec4/core 0.40.0 → 0.41.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 (104) hide show
  1. package/README.md +2 -6
  2. package/dist/cjs/colors/element.d.ts +68 -0
  3. package/dist/{esm/colors.js → cjs/colors/element.js} +9 -23
  4. package/dist/cjs/colors/index.d.ts +132 -0
  5. package/dist/cjs/colors/index.js +27 -0
  6. package/dist/cjs/colors/relationships.d.ts +57 -0
  7. package/dist/cjs/colors/relationships.js +76 -0
  8. package/dist/cjs/index.d.ts +0 -2
  9. package/dist/cjs/index.js +0 -22
  10. package/dist/cjs/types/computed-view.d.ts +10 -7
  11. package/dist/cjs/types/diagram.d.ts +14 -5
  12. package/dist/cjs/types/expression.d.ts +1 -1
  13. package/dist/cjs/types/relation.d.ts +12 -0
  14. package/dist/cjs/types/relation.js +12 -1
  15. package/dist/cjs/types/theme.d.ts +12 -14
  16. package/dist/cjs/types/view.d.ts +7 -4
  17. package/dist/cjs/types/view.js +1 -1
  18. package/dist/cjs/utils/fqn.d.ts +6 -1
  19. package/dist/cjs/utils/fqn.js +17 -4
  20. package/dist/cjs/utils/guards.d.ts +1 -0
  21. package/dist/cjs/utils/guards.js +7 -0
  22. package/dist/cjs/utils/index.d.ts +0 -1
  23. package/dist/cjs/utils/index.js +0 -11
  24. package/dist/esm/colors/element.d.ts +68 -0
  25. package/dist/{cjs/colors.js → esm/colors/element.js} +1 -33
  26. package/dist/esm/colors/index.d.ts +132 -0
  27. package/dist/esm/colors/index.js +9 -0
  28. package/dist/esm/colors/relationships.d.ts +57 -0
  29. package/dist/esm/colors/relationships.js +64 -0
  30. package/dist/esm/index.d.ts +0 -2
  31. package/dist/esm/index.js +1 -3
  32. package/dist/esm/types/computed-view.d.ts +10 -7
  33. package/dist/esm/types/diagram.d.ts +14 -5
  34. package/dist/esm/types/expression.d.ts +1 -1
  35. package/dist/esm/types/relation.d.ts +12 -0
  36. package/dist/esm/types/relation.js +3 -0
  37. package/dist/esm/types/theme.d.ts +12 -14
  38. package/dist/esm/types/view.d.ts +7 -4
  39. package/dist/esm/types/view.js +1 -1
  40. package/dist/esm/utils/fqn.d.ts +6 -1
  41. package/dist/esm/utils/fqn.js +16 -4
  42. package/dist/esm/utils/guards.d.ts +1 -0
  43. package/dist/esm/utils/guards.js +1 -0
  44. package/dist/esm/utils/index.d.ts +0 -1
  45. package/dist/esm/utils/index.js +0 -1
  46. package/package.json +52 -55
  47. package/dist/cjs/colors.d.ts +0 -148
  48. package/dist/cjs/compute-view/EdgeBuilder.d.ts +0 -6
  49. package/dist/cjs/compute-view/EdgeBuilder.js +0 -37
  50. package/dist/cjs/compute-view/compute-ctx.d.ts +0 -20
  51. package/dist/cjs/compute-view/compute-ctx.js +0 -91
  52. package/dist/cjs/compute-view/compute-element-view.d.ts +0 -3
  53. package/dist/cjs/compute-view/compute-element-view.js +0 -100
  54. package/dist/cjs/compute-view/compute-predicates.d.ts +0 -16
  55. package/dist/cjs/compute-view/compute-predicates.js +0 -363
  56. package/dist/cjs/compute-view/compute.d.ts +0 -14
  57. package/dist/cjs/compute-view/compute.js +0 -46
  58. package/dist/cjs/compute-view/index.d.ts +0 -4
  59. package/dist/cjs/compute-view/index.js +0 -49
  60. package/dist/cjs/compute-view/resolve-extended-views.d.ts +0 -6
  61. package/dist/cjs/compute-view/resolve-extended-views.js +0 -53
  62. package/dist/cjs/compute-view/resolve-relative-paths.d.ts +0 -2
  63. package/dist/cjs/compute-view/resolve-relative-paths.js +0 -84
  64. package/dist/cjs/compute-view/utils/anyPossibleRelations.d.ts +0 -2
  65. package/dist/cjs/compute-view/utils/anyPossibleRelations.js +0 -18
  66. package/dist/cjs/compute-view/utils/applyViewRuleStyles.d.ts +0 -2
  67. package/dist/cjs/compute-view/utils/applyViewRuleStyles.js +0 -57
  68. package/dist/cjs/compute-view/utils/sortNodes.d.ts +0 -19
  69. package/dist/cjs/compute-view/utils/sortNodes.js +0 -47
  70. package/dist/cjs/model-index/ModelIndex.d.ts +0 -27
  71. package/dist/cjs/model-index/ModelIndex.js +0 -139
  72. package/dist/cjs/model-index/index.d.ts +0 -1
  73. package/dist/cjs/model-index/index.js +0 -13
  74. package/dist/cjs/utils/compute-node-levels.d.ts +0 -7
  75. package/dist/cjs/utils/compute-node-levels.js +0 -48
  76. package/dist/esm/colors.d.ts +0 -148
  77. package/dist/esm/compute-view/EdgeBuilder.d.ts +0 -6
  78. package/dist/esm/compute-view/EdgeBuilder.js +0 -30
  79. package/dist/esm/compute-view/compute-ctx.d.ts +0 -20
  80. package/dist/esm/compute-view/compute-ctx.js +0 -100
  81. package/dist/esm/compute-view/compute-element-view.d.ts +0 -3
  82. package/dist/esm/compute-view/compute-element-view.js +0 -98
  83. package/dist/esm/compute-view/compute-predicates.d.ts +0 -16
  84. package/dist/esm/compute-view/compute-predicates.js +0 -324
  85. package/dist/esm/compute-view/compute.d.ts +0 -14
  86. package/dist/esm/compute-view/compute.js +0 -36
  87. package/dist/esm/compute-view/index.d.ts +0 -4
  88. package/dist/esm/compute-view/index.js +0 -4
  89. package/dist/esm/compute-view/resolve-extended-views.d.ts +0 -6
  90. package/dist/esm/compute-view/resolve-extended-views.js +0 -41
  91. package/dist/esm/compute-view/resolve-relative-paths.d.ts +0 -2
  92. package/dist/esm/compute-view/resolve-relative-paths.js +0 -76
  93. package/dist/esm/compute-view/utils/anyPossibleRelations.d.ts +0 -2
  94. package/dist/esm/compute-view/utils/anyPossibleRelations.js +0 -12
  95. package/dist/esm/compute-view/utils/applyViewRuleStyles.d.ts +0 -2
  96. package/dist/esm/compute-view/utils/applyViewRuleStyles.js +0 -50
  97. package/dist/esm/compute-view/utils/sortNodes.d.ts +0 -19
  98. package/dist/esm/compute-view/utils/sortNodes.js +0 -37
  99. package/dist/esm/model-index/ModelIndex.d.ts +0 -27
  100. package/dist/esm/model-index/ModelIndex.js +0 -127
  101. package/dist/esm/model-index/index.d.ts +0 -1
  102. package/dist/esm/model-index/index.js +0 -1
  103. package/dist/esm/utils/compute-node-levels.d.ts +0 -7
  104. package/dist/esm/utils/compute-node-levels.js +0 -31
@@ -4,10 +4,13 @@ import type { ElementExpression, Expression } from './expression';
4
4
  import type { IconUrl, NonEmptyArray } from './_common';
5
5
  import type { ThemeColor } from './theme';
6
6
  export type ViewID = Opaque<string, 'ViewID'>;
7
- export interface ViewRuleExpression {
8
- isInclude: boolean;
9
- exprs: Expression[];
10
- }
7
+ export type ViewRuleExpression = {
8
+ include: Expression[];
9
+ exclude?: never;
10
+ } | {
11
+ include?: never;
12
+ exclude: Expression[];
13
+ };
11
14
  export declare function isViewRuleExpression(rule: ViewRule): rule is ViewRuleExpression;
12
15
  export interface ViewRuleStyle {
13
16
  targets: ElementExpression[];
@@ -1,5 +1,5 @@
1
1
  export function isViewRuleExpression(rule) {
2
- return "exprs" in rule && "isInclude" in rule;
2
+ return "include" in rule && Array.isArray(rule.include) || "exclude" in rule && Array.isArray(rule.exclude);
3
3
  }
4
4
  export function isViewRuleStyle(rule) {
5
5
  return "style" in rule && "targets" in rule;
@@ -5,13 +5,18 @@ export declare function isAncestor<E extends {
5
5
  }>(...args: [ancestor: Fqn, another: Fqn] | [ancestor: E, another: E]): boolean;
6
6
  export declare function isSameHierarchy<E extends {
7
7
  id: Fqn;
8
- }>(...args: [one: Fqn, another: Fqn] | [one: E, another: E]): boolean;
8
+ }>(one: E | Fqn, another: E | Fqn): boolean;
9
9
  export declare function isDescendantOf<E extends {
10
10
  id: Fqn;
11
11
  }>(ancestors: E[]): (e: E) => boolean;
12
12
  export declare function notDescendantOf(ancestors: Element[]): (e: Element) => boolean;
13
13
  export declare function commonAncestor(first: Fqn, second: Fqn): Fqn | null;
14
14
  export declare function parentFqn(fqn: Fqn): Fqn | null;
15
+ /**
16
+ * Get all ancestor elements (i.e. parent, parent’s parent, etc.)
17
+ * (from closest to root)
18
+ */
19
+ export declare function ancestorsFqn(fqn: Fqn): Fqn[];
15
20
  /**
16
21
  * Compares two fully qualified names (fqns) hierarchically based on their depth.
17
22
  * From parent nodes to leaves
@@ -13,10 +13,10 @@ export function isAncestor(...args) {
13
13
  const another = isString(args[1]) ? args[1] : args[1].id;
14
14
  return another.startsWith(ancestor + ".");
15
15
  }
16
- export function isSameHierarchy(...args) {
17
- const one = isString(args[0]) ? args[0] : args[0].id;
18
- const another = isString(args[1]) ? args[1] : args[1].id;
19
- return one === another || another.startsWith(one + ".") || one.startsWith(another + ".");
16
+ export function isSameHierarchy(one, another) {
17
+ const first = isString(one) ? one : one.id;
18
+ const second = isString(another) ? another : another.id;
19
+ return first === second || second.startsWith(first + ".") || first.startsWith(second + ".");
20
20
  }
21
21
  export function isDescendantOf(ancestors) {
22
22
  const predicates = ancestors.flatMap((a) => [(e) => e.id === a.id, (e) => isAncestor(a, e)]);
@@ -52,6 +52,18 @@ export function parentFqn(fqn) {
52
52
  }
53
53
  return null;
54
54
  }
55
+ export function ancestorsFqn(fqn) {
56
+ const path = fqn.split(".");
57
+ path.pop();
58
+ if (path.length === 0) {
59
+ return [];
60
+ }
61
+ return path.reduce((acc, _, idx) => {
62
+ const ancestor = path.slice(0, idx + 1).join(".");
63
+ acc.unshift(ancestor);
64
+ return acc;
65
+ }, []);
66
+ }
55
67
  export function compareFqnHierarchically(a, b) {
56
68
  const depthA = a.split(".").length;
57
69
  const depthB = b.split(".").length;
@@ -1,3 +1,4 @@
1
1
  import type { NonEmptyArray } from '../types';
2
+ export { hasAtLeast } from 'remeda';
2
3
  export declare function isString(value: unknown): value is string;
3
4
  export declare function isNonEmptyArray<A>(arr: ArrayLike<A>): arr is NonEmptyArray<A>;
@@ -1,3 +1,4 @@
1
+ export { hasAtLeast } from "remeda";
1
2
  export function isString(value) {
2
3
  return value != null && typeof value === "string";
3
4
  }
@@ -1,4 +1,3 @@
1
1
  export * from './fqn';
2
2
  export * from './guards';
3
- export * from './compute-node-levels';
4
3
  export * from './relations';
@@ -1,4 +1,3 @@
1
1
  export * from "./fqn.js";
2
2
  export * from "./guards.js";
3
- export * from "./compute-node-levels.js";
4
3
  export * from "./relations.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@likec4/core",
3
- "version": "0.40.0",
3
+ "version": "0.41.0",
4
4
  "license": "MIT",
5
5
  "homepage": "https://likec4.dev",
6
6
  "author": "Denis Davydkov <denis@davydkov.com>",
@@ -11,91 +11,88 @@
11
11
  },
12
12
  "bugs": "https://github.com/likec4/likec4/issues",
13
13
  "scripts": {
14
- "typecheck": "tsc --emitDeclarationOnly",
15
- "build:watch": "tsc --watch",
14
+ "typecheck": "tsc --noEmit",
16
15
  "build": "unbuild",
17
- "prepack": "unbuild",
16
+ "prepack": "run clean && run build",
18
17
  "lint": "run -T eslint src/ --fix",
19
18
  "test": "run -T vitest run",
20
- "test:watch": "run -T vitest",
21
19
  "clean": "run -T rimraf dist"
22
20
  },
23
21
  "files": [
24
22
  "dist",
25
- "!**/__test__/",
26
- "!**/*.spec.*"
23
+ "!**/*.spec.*",
24
+ "!**/*.map"
27
25
  ],
28
26
  "type": "module",
29
27
  "sideEffects": false,
30
- "main": "./dist/cjs/index.js",
31
- "types": "./dist/cjs/index.d.ts",
32
28
  "exports": {
33
29
  ".": {
34
- "import": {
35
- "types": "./dist/esm/index.d.ts",
36
- "default": "./dist/esm/index.js"
37
- },
38
- "require": {
39
- "types": "./dist/cjs/index.d.ts",
40
- "default": "./dist/cjs/index.js"
41
- }
30
+ "types": "./dist/types/index.d.ts",
31
+ "import": "./dist/esm/index.js",
32
+ "require": "./dist/cjs/index.js"
42
33
  },
43
34
  "./colors": {
44
- "import": {
45
- "types": "./dist/esm/colors.d.ts",
46
- "default": "./dist/esm/colors.js"
47
- },
48
- "require": {
49
- "types": "./dist/cjs/colors.d.ts",
50
- "default": "./dist/cjs/colors.js"
51
- }
52
- },
53
- "./errors": {
54
- "import": {
55
- "types": "./dist/esm/errors/index.d.ts",
56
- "default": "./dist/esm/errors/index.js"
57
- },
58
- "require": {
59
- "types": "./dist/cjs/errors/index.d.ts",
60
- "default": "./dist/cjs/errors/index.js"
61
- }
35
+ "types": "./dist/types/colors/index.d.ts",
36
+ "import": "./dist/esm/colors/index.js",
37
+ "require": "./dist/cjs/colors/index.js"
62
38
  },
63
39
  "./types": {
64
- "import": {
65
- "types": "./dist/esm/types/index.d.ts",
66
- "default": "./dist/esm/types/index.js"
67
- },
68
- "require": {
69
- "types": "./dist/cjs/types/index.d.ts",
70
- "default": "./dist/cjs/types/index.js"
71
- }
40
+ "types": "./dist/types/types/index.d.ts",
41
+ "import": "./dist/esm/types/index.js",
42
+ "require": "./dist/cjs/types/index.js"
72
43
  },
73
44
  "./utils": {
74
- "import": {
75
- "types": "./dist/esm/utils/index.d.ts",
76
- "default": "./dist/esm/utils/index.js"
77
- },
78
- "require": {
79
- "types": "./dist/cjs/utils/index.d.ts",
80
- "default": "./dist/cjs/utils/index.js"
81
- }
45
+ "types": "./dist/types/utils/index.d.ts",
46
+ "import": "./dist/esm/utils/index.js",
47
+ "require": "./dist/cjs/utils/index.js"
82
48
  }
83
49
  },
84
50
  "publishConfig": {
85
51
  "registry": "https://registry.npmjs.org",
86
- "access": "public"
52
+ "access": "public",
53
+ "main": "./dist/cjs/index.js",
54
+ "module": "./dist/esm/index.js",
55
+ "types": "./dist/types/index.d.ts",
56
+ "exports": {
57
+ ".": {
58
+ "types": "./dist/types/index.d.ts",
59
+ "import": "./dist/esm/index.js",
60
+ "require": "./dist/cjs/index.js"
61
+ },
62
+ "./colors": {
63
+ "types": "./dist/types/colors/index.d.ts",
64
+ "import": "./dist/esm/colors/index.js",
65
+ "require": "./dist/cjs/colors/index.js"
66
+ },
67
+ "./types": {
68
+ "types": "./dist/types/types/index.d.ts",
69
+ "import": "./dist/esm/types/index.js",
70
+ "require": "./dist/cjs/types/index.js"
71
+ },
72
+ "./utils": {
73
+ "types": "./dist/types/utils/index.d.ts",
74
+ "import": "./dist/esm/utils/index.js",
75
+ "require": "./dist/cjs/utils/index.js"
76
+ }
77
+ }
87
78
  },
88
79
  "dependencies": {
89
- "@dagrejs/graphlib": "^2.1.13",
90
80
  "rambdax": "^9.1.1",
91
- "remeda": "^1.27.0",
81
+ "remeda": "^1.27.1",
92
82
  "safe-stable-stringify": "^2.4.3",
93
83
  "ts-custom-error": "^3.3.1"
94
84
  },
95
85
  "devDependencies": {
86
+ "execa": "^8.0.1",
96
87
  "typescript": "^5.2.2",
97
88
  "unbuild": "^2.0.0",
98
89
  "vitest": "^0.34.6"
99
90
  },
100
- "packageManager": "yarn@3.6.3"
91
+ "packageManager": "yarn@3.6.4",
92
+ "volta": {
93
+ "extends": "../../package.json"
94
+ },
95
+ "main": "./dist/cjs/index.js",
96
+ "module": "./dist/esm/index.js",
97
+ "types": "./dist/types/index.d.ts"
101
98
  }
@@ -1,148 +0,0 @@
1
- export declare const RelationColors: {
2
- readonly lineColor: "#b1b1b1";
3
- readonly labelColor: "#b1b1b1";
4
- };
5
- export declare const Colors: {
6
- readonly primary: {
7
- fill: "#3b82f6";
8
- stroke: "#2563eb";
9
- hiContrast: "#eff6ff";
10
- loContrast: "#bfdbfe";
11
- };
12
- readonly blue: {
13
- fill: "#3b82f6";
14
- stroke: "#2563eb";
15
- hiContrast: "#eff6ff";
16
- loContrast: "#bfdbfe";
17
- };
18
- readonly secondary: {
19
- fill: "#0284c7";
20
- stroke: "#0369a1";
21
- hiContrast: "#f0f9ff";
22
- loContrast: "#e0f2fe";
23
- };
24
- readonly sky: {
25
- fill: "#0284c7";
26
- stroke: "#0369a1";
27
- hiContrast: "#f0f9ff";
28
- loContrast: "#e0f2fe";
29
- };
30
- readonly muted: {
31
- fill: "#64748b";
32
- stroke: "#475569";
33
- hiContrast: "#f8fafc";
34
- loContrast: "#e2e8f0";
35
- };
36
- readonly slate: {
37
- fill: "#64748b";
38
- stroke: "#475569";
39
- hiContrast: "#f8fafc";
40
- loContrast: "#e2e8f0";
41
- };
42
- readonly gray: {
43
- readonly fill: "#737373";
44
- readonly stroke: "#525252";
45
- readonly hiContrast: "#fafafa";
46
- readonly loContrast: "#e5e5e5";
47
- };
48
- readonly red: {
49
- readonly fill: "#b54548";
50
- readonly stroke: "#8c333a";
51
- readonly hiContrast: "#f8fafc";
52
- readonly loContrast: "#F9C6C6";
53
- };
54
- readonly green: {
55
- readonly fill: "#428a4f";
56
- readonly stroke: "#2d5d39";
57
- readonly hiContrast: "#f8fafc";
58
- readonly loContrast: "#c2f0c2";
59
- };
60
- readonly amber: {
61
- readonly fill: "#d97706";
62
- readonly stroke: "#b45309";
63
- readonly hiContrast: "#f8fafc";
64
- readonly loContrast: "#ffe0c2";
65
- };
66
- readonly indigo: {
67
- readonly fill: "#6366f1";
68
- readonly stroke: "#4f46e5";
69
- readonly hiContrast: "#eef2ff";
70
- readonly loContrast: "#c7d2fe";
71
- };
72
- };
73
- export declare const defaultTheme: {
74
- readonly font: "Helvetica";
75
- readonly shadow: "#0a0a0a";
76
- readonly relation: {
77
- readonly lineColor: "#b1b1b1";
78
- readonly labelColor: "#b1b1b1";
79
- };
80
- readonly colors: {
81
- readonly primary: {
82
- fill: "#3b82f6";
83
- stroke: "#2563eb";
84
- hiContrast: "#eff6ff";
85
- loContrast: "#bfdbfe";
86
- };
87
- readonly blue: {
88
- fill: "#3b82f6";
89
- stroke: "#2563eb";
90
- hiContrast: "#eff6ff";
91
- loContrast: "#bfdbfe";
92
- };
93
- readonly secondary: {
94
- fill: "#0284c7";
95
- stroke: "#0369a1";
96
- hiContrast: "#f0f9ff";
97
- loContrast: "#e0f2fe";
98
- };
99
- readonly sky: {
100
- fill: "#0284c7";
101
- stroke: "#0369a1";
102
- hiContrast: "#f0f9ff";
103
- loContrast: "#e0f2fe";
104
- };
105
- readonly muted: {
106
- fill: "#64748b";
107
- stroke: "#475569";
108
- hiContrast: "#f8fafc";
109
- loContrast: "#e2e8f0";
110
- };
111
- readonly slate: {
112
- fill: "#64748b";
113
- stroke: "#475569";
114
- hiContrast: "#f8fafc";
115
- loContrast: "#e2e8f0";
116
- };
117
- readonly gray: {
118
- readonly fill: "#737373";
119
- readonly stroke: "#525252";
120
- readonly hiContrast: "#fafafa";
121
- readonly loContrast: "#e5e5e5";
122
- };
123
- readonly red: {
124
- readonly fill: "#b54548";
125
- readonly stroke: "#8c333a";
126
- readonly hiContrast: "#f8fafc";
127
- readonly loContrast: "#F9C6C6";
128
- };
129
- readonly green: {
130
- readonly fill: "#428a4f";
131
- readonly stroke: "#2d5d39";
132
- readonly hiContrast: "#f8fafc";
133
- readonly loContrast: "#c2f0c2";
134
- };
135
- readonly amber: {
136
- readonly fill: "#d97706";
137
- readonly stroke: "#b45309";
138
- readonly hiContrast: "#f8fafc";
139
- readonly loContrast: "#ffe0c2";
140
- };
141
- readonly indigo: {
142
- readonly fill: "#6366f1";
143
- readonly stroke: "#4f46e5";
144
- readonly hiContrast: "#eef2ff";
145
- readonly loContrast: "#c7d2fe";
146
- };
147
- };
148
- };
@@ -1,6 +0,0 @@
1
- import type { ComputedEdge, Fqn, Relation } from '../types';
2
- export declare class EdgeBuilder {
3
- private _relationsObj;
4
- add(source: Fqn, target: Fqn, relation: Relation): this;
5
- build(): ComputedEdge[];
6
- }
@@ -1,37 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.EdgeBuilder = void 0;
7
- var _rambdax = require("rambdax");
8
- var _utils = require("../utils");
9
- class EdgeBuilder {
10
- _relationsObj = {};
11
- add(source, target, relation) {
12
- const bySource = this._relationsObj[source] ?? {};
13
- const relations = bySource[target] ?? [];
14
- relations.push(relation);
15
- bySource[target] = relations;
16
- this._relationsObj[source] = bySource;
17
- return this;
18
- }
19
- build() {
20
- return (0, _rambdax.keys)(this._relationsObj).flatMap(source => {
21
- const targets = this._relationsObj[source] ?? {};
22
- return (0, _rambdax.keys)(targets).map(target => {
23
- const relations = (targets[target] ?? []).sort(_utils.compareRelations);
24
- const label = relations.find(r => r.title !== "")?.title ?? null;
25
- return {
26
- id: `${source}:${target}`,
27
- parent: (0, _utils.commonAncestor)(source, target),
28
- source,
29
- target,
30
- label,
31
- relations: (0, _rambdax.pluck)("id", relations)
32
- };
33
- });
34
- }).sort(_utils.compareRelations).reverse();
35
- }
36
- }
37
- exports.EdgeBuilder = EdgeBuilder;
@@ -1,20 +0,0 @@
1
- import type { ModelIndex } from '../model-index';
2
- import type { Fqn, Element, Relation, ViewRuleExpression, ElementView } from '../types';
3
- export type ComputeCtxPatch = {
4
- elements?: Element[];
5
- relations?: Relation[];
6
- implicits?: Element[];
7
- };
8
- export declare class ComputeCtx {
9
- index: ModelIndex;
10
- root: Fqn | null;
11
- elements: ReadonlySet<Element>;
12
- relations: ReadonlySet<Relation>;
13
- implicits: ReadonlySet<Element>;
14
- readonly allElements: ReadonlySet<Element>;
15
- constructor(index: ModelIndex, root: Fqn | null, elements?: ReadonlySet<Element>, relations?: ReadonlySet<Relation>, implicits?: ReadonlySet<Element>);
16
- include({ elements, relations, implicits }: ComputeCtxPatch): ComputeCtx;
17
- exclude({ elements, relations, implicits }: ComputeCtxPatch): ComputeCtx;
18
- processViewRules(viewRules: ViewRuleExpression[]): ComputeCtx;
19
- static create(view: ElementView, index: ModelIndex): ComputeCtx;
20
- }
@@ -1,91 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.ComputeCtx = void 0;
7
- var _rambdax = require("rambdax");
8
- var _types = require("../types");
9
- var _computePredicates = require("./compute-predicates");
10
- var _errors = require("../errors");
11
- class ComputeCtx {
12
- constructor(index, root, elements = /* @__PURE__ */new Set(), relations = /* @__PURE__ */new Set(), implicits = /* @__PURE__ */new Set()) {
13
- this.index = index;
14
- this.root = root;
15
- this.elements = elements;
16
- this.relations = relations;
17
- this.implicits = implicits;
18
- this.allElements = /* @__PURE__ */new Set([...this.elements, ...this.implicits]);
19
- }
20
- allElements;
21
- include({
22
- elements,
23
- relations,
24
- implicits
25
- }) {
26
- return new ComputeCtx(this.index, this.root, elements ? /* @__PURE__ */new Set([...this.elements, ...elements]) : this.elements, relations ? /* @__PURE__ */new Set([...this.relations, ...relations]) : this.relations, implicits ? /* @__PURE__ */new Set([...this.implicits, ...implicits]) : this.implicits);
27
- }
28
- exclude({
29
- elements,
30
- relations,
31
- implicits
32
- }) {
33
- let newImplicits = implicits ? new Set((0, _rambdax.difference)([...this.implicits], implicits)) : this.implicits;
34
- if (elements) {
35
- newImplicits = new Set((0, _rambdax.difference)([...newImplicits], elements));
36
- }
37
- return new ComputeCtx(this.index, this.root, elements ? new Set((0, _rambdax.difference)([...this.elements], elements)) : this.elements, relations ? new Set((0, _rambdax.difference)([...this.relations], relations)) : this.relations, newImplicits);
38
- }
39
- processViewRules(viewRules) {
40
- let ctx = this;
41
- for (const {
42
- isInclude,
43
- exprs
44
- } of viewRules) {
45
- for (const expr of exprs) {
46
- if (_types.Expr.isElementKindExpr(expr) || _types.Expr.isElementTagExpr(expr)) {
47
- ctx = isInclude ? (0, _computePredicates.includeElementKindOrTag)(ctx, expr) : (0, _computePredicates.excludeElementKindOrTag)(ctx, expr);
48
- continue;
49
- }
50
- if (_types.Expr.isElementRef(expr)) {
51
- ctx = isInclude ? (0, _computePredicates.includeElementRef)(ctx, expr) : (0, _computePredicates.excludeElementRef)(ctx, expr);
52
- continue;
53
- }
54
- if (_types.Expr.isWildcard(expr)) {
55
- ctx = isInclude ? (0, _computePredicates.includeWildcardRef)(ctx, expr) : (0, _computePredicates.excludeWildcardRef)(ctx, expr);
56
- continue;
57
- }
58
- if (_types.Expr.isIncoming(expr)) {
59
- ctx = isInclude ? (0, _computePredicates.includeIncomingExpr)(ctx, expr) : (0, _computePredicates.excludeIncomingExpr)(ctx, expr);
60
- continue;
61
- }
62
- if (_types.Expr.isOutgoing(expr)) {
63
- ctx = isInclude ? (0, _computePredicates.includeOutgoingExpr)(ctx, expr) : (0, _computePredicates.excludeOutgoingExpr)(ctx, expr);
64
- continue;
65
- }
66
- if (_types.Expr.isInOut(expr)) {
67
- ctx = isInclude ? (0, _computePredicates.includeInOutExpr)(ctx, expr) : (0, _computePredicates.excludeInOutExpr)(ctx, expr);
68
- continue;
69
- }
70
- if (_types.Expr.isRelation(expr)) {
71
- ctx = isInclude ? (0, _computePredicates.includeRelationExpr)(ctx, expr) : (0, _computePredicates.excludeRelationExpr)(ctx, expr);
72
- continue;
73
- }
74
- (0, _errors.nonexhaustive)(expr);
75
- }
76
- }
77
- return ctx;
78
- }
79
- static create(view, index) {
80
- const rootElement = (0, _types.isStrictElementView)(view) ? view.viewOf : null;
81
- let ctx = new ComputeCtx(index, rootElement);
82
- const rulesInclude = view.rules.filter(_types.isViewRuleExpression);
83
- if (rootElement && rulesInclude.length == 0) {
84
- ctx = ctx.include({
85
- elements: [index.find(rootElement)]
86
- });
87
- }
88
- return ctx.processViewRules(rulesInclude);
89
- }
90
- }
91
- exports.ComputeCtx = ComputeCtx;
@@ -1,3 +0,0 @@
1
- import type { ModelIndex } from '../model-index';
2
- import { type ComputedView, type ElementView } from '../types';
3
- export declare function computeElementView(view: ElementView, index: ModelIndex): ComputedView;
@@ -1,100 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.computeElementView = computeElementView;
7
- var _remeda = require("remeda");
8
- var _errors = require("../errors");
9
- var _types = require("../types");
10
- var _utils = require("../utils");
11
- var _EdgeBuilder = require("./EdgeBuilder");
12
- var _computeCtx = require("./compute-ctx");
13
- var _applyViewRuleStyles = require("./utils/applyViewRuleStyles");
14
- var _sortNodes = require("./utils/sortNodes");
15
- function reduceToMap(elementsIterator) {
16
- return Array.from(elementsIterator).sort(_utils.compareByFqnHierarchically).reduce((map, {
17
- id,
18
- color,
19
- shape,
20
- ...el
21
- }) => {
22
- let parent = (0, _utils.parentFqn)(id);
23
- let level = 0;
24
- while (parent) {
25
- if (map.has(parent)) {
26
- break;
27
- }
28
- parent = (0, _utils.parentFqn)(parent);
29
- }
30
- if (parent) {
31
- const parentNd = (0, _errors.nonNullable)(map.get(parent));
32
- parentNd.children.push(id);
33
- level = parentNd.level + 1;
34
- }
35
- const node = {
36
- ...el,
37
- id,
38
- parent,
39
- level,
40
- color: color ?? _types.DefaultThemeColor,
41
- shape: shape ?? _types.DefaultElementShape,
42
- children: [],
43
- inEdges: [],
44
- outEdges: []
45
- };
46
- map.set(id, node);
47
- return map;
48
- }, /* @__PURE__ */new Map());
49
- }
50
- const keepOriginalSortFromView = (_nodes, ctx) => {
51
- const nodes = [...ctx.allElements].flatMap(e => _nodes.get(e.id) || []);
52
- for (const node of nodes) {
53
- node.children = nodes.flatMap(n => n.parent === node.id ? n.id : []);
54
- }
55
- return nodes;
56
- };
57
- function computeElementView(view, index) {
58
- const ctx = _computeCtx.ComputeCtx.create(view, index);
59
- const leafsFirst = [...ctx.allElements].sort((a, b) => -1 * (0, _utils.compareByFqnHierarchically)(a, b));
60
- const elementsWithRelations = /* @__PURE__ */new Set();
61
- const edgeBuilder = new _EdgeBuilder.EdgeBuilder();
62
- const anscestorOf = id => e => e.id === id || (0, _utils.isAncestor)(e.id, id);
63
- const sortedRelations = [...ctx.relations];
64
- for (const rel of sortedRelations) {
65
- const source = (0, _remeda.find)(leafsFirst, anscestorOf(rel.source));
66
- if (!source) {
67
- continue;
68
- }
69
- const target = (0, _remeda.find)(leafsFirst, (0, _remeda.allPass)([anscestorOf(rel.target), e => !(0, _utils.isSameHierarchy)(e, source)]));
70
- if (!target) {
71
- continue;
72
- }
73
- elementsWithRelations.add(source);
74
- elementsWithRelations.add(target);
75
- edgeBuilder.add(source.id, target.id, rel);
76
- }
77
- const nodesMap = reduceToMap( /* @__PURE__ */new Set([...ctx.elements, ...elementsWithRelations]));
78
- const edges = edgeBuilder.build().map(edge => {
79
- while (edge.parent) {
80
- if (nodesMap.has(edge.parent)) {
81
- break;
82
- }
83
- edge.parent = (0, _utils.parentFqn)(edge.parent);
84
- }
85
- (0, _errors.nonNullable)(nodesMap.get(edge.source)).outEdges.push(edge.id);
86
- (0, _errors.nonNullable)(nodesMap.get(edge.target)).inEdges.push(edge.id);
87
- return edge;
88
- });
89
- const nodes = (0, _applyViewRuleStyles.applyViewRuleStyles)(view.rules.filter(_types.isViewRuleStyle), (0, _sortNodes.sortNodes)(keepOriginalSortFromView(nodesMap, ctx), edges)
90
- // map(e => nodesMap.get(e.id)!, Array.from(elements))
91
- );
92
-
93
- const autoLayoutRule = view.rules.find(_types.isViewRuleAutoLayout);
94
- return {
95
- ...view,
96
- autoLayout: autoLayoutRule?.autoLayout ?? "TB",
97
- nodes,
98
- edges
99
- };
100
- }