@likec4/core 1.17.1 → 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.
Files changed (184) hide show
  1. package/LICENSE +1 -1
  2. package/dist/builder/index.d.mts +502 -0
  3. package/dist/builder/index.d.ts +502 -0
  4. package/dist/builder/index.js +871 -0
  5. package/dist/compute-view/index.d.mts +22 -0
  6. package/dist/compute-view/index.d.ts +22 -0
  7. package/dist/compute-view/index.js +78 -0
  8. package/dist/index.d.mts +10 -919
  9. package/dist/index.d.ts +10 -919
  10. package/dist/{index.mjs → index.js} +7 -1688
  11. package/dist/model/index.d.mts +254 -0
  12. package/dist/model/index.d.ts +254 -0
  13. package/dist/model/index.js +1 -0
  14. package/dist/shared/chunk-RAAYCPUM.M-JWF7SS.js +21 -0
  15. package/dist/shared/core.BIfgabEw.d.ts +719 -0
  16. package/dist/shared/core.BZ9Msq7w.d.mts +719 -0
  17. package/dist/shared/{core.CoLQkcYL.d.cts → core.C05RDLhi.d.ts} +460 -362
  18. package/dist/shared/{core.CoLQkcYL.d.mts → core.CmYMqgha.d.mts} +460 -362
  19. package/dist/shared/core.D6-fWbM3.d.ts +127 -0
  20. package/dist/shared/core.D74xkKkG.d.mts +148 -0
  21. package/dist/shared/core.D74xkKkG.d.ts +148 -0
  22. package/dist/shared/core.sLaWHBjR.d.mts +127 -0
  23. package/dist/shared/index.-BdzdI2C.js +7443 -0
  24. package/dist/shared/object_hash.CE_oF3I3.js +1222 -0
  25. package/dist/shared/{core.BXTs-8n7.mjs → view.CyZrG8BJ.js} +108 -47
  26. package/dist/types/index.d.mts +71 -1
  27. package/dist/types/index.d.ts +71 -1
  28. package/dist/types/index.js +20 -0
  29. package/dist/utils/index.d.mts +404 -0
  30. package/dist/utils/index.d.ts +404 -0
  31. package/dist/utils/index.js +330 -0
  32. package/package.json +59 -47
  33. package/src/builder/Builder-style1.test-d.ts +190 -0
  34. package/src/builder/Builder-style2.test-d.ts +175 -0
  35. package/src/builder/Builder.deployment.ts +224 -0
  36. package/src/builder/Builder.deploymentModel.ts +385 -0
  37. package/src/builder/Builder.element.ts +19 -19
  38. package/src/builder/Builder.model.ts +67 -42
  39. package/src/builder/Builder.ts +533 -367
  40. package/src/builder/Builder.view-common.ts +234 -0
  41. package/src/builder/Builder.view-deployment.ts +135 -0
  42. package/src/builder/Builder.view-element.ts +189 -0
  43. package/src/builder/Builder.views.ts +109 -33
  44. package/src/builder/Builder.with.ts +475 -0
  45. package/src/builder/__snapshots__/Builder-style1.spec.ts.snap +374 -0
  46. package/src/builder/__snapshots__/Builder-style2.spec.ts.snap +183 -0
  47. package/src/builder/__snapshots__/Builder.spec.ts.snap +374 -0
  48. package/src/builder/_types.ts +113 -18
  49. package/src/builder/index.ts +10 -4
  50. package/src/colors/index.ts +2 -2
  51. package/src/compute-view/compute-view.ts +83 -0
  52. package/src/compute-view/deployment-view/__test__/TestHelper.ts +236 -0
  53. package/src/compute-view/deployment-view/__test__/fixture.ts +198 -0
  54. package/src/compute-view/deployment-view/_types.ts +37 -0
  55. package/src/compute-view/deployment-view/clean-connections.ts +238 -0
  56. package/src/compute-view/deployment-view/compute.ts +125 -0
  57. package/src/compute-view/deployment-view/memory/index.ts +9 -0
  58. package/src/compute-view/deployment-view/memory/memory.ts +97 -0
  59. package/src/compute-view/deployment-view/predicates/elements.ts +144 -0
  60. package/src/compute-view/deployment-view/predicates/relation-direct.ts +237 -0
  61. package/src/compute-view/deployment-view/predicates/relation-in-out.ts +61 -0
  62. package/src/compute-view/deployment-view/predicates/relation-incoming.ts +95 -0
  63. package/src/compute-view/deployment-view/predicates/relation-outgoing.ts +88 -0
  64. package/src/compute-view/deployment-view/predicates/wildcard.ts +29 -0
  65. package/src/compute-view/deployment-view/stages/stage-exclude.ts +5 -0
  66. package/src/compute-view/deployment-view/stages/stage-final.ts +245 -0
  67. package/src/compute-view/deployment-view/stages/stage-include.ts +95 -0
  68. package/src/compute-view/deployment-view/utils.ts +276 -0
  69. package/src/compute-view/dynamic-view/__test__/fixture.ts +58 -0
  70. package/src/compute-view/dynamic-view/compute.ts +324 -0
  71. package/src/compute-view/element-view/__test__/TestHelper.ts +258 -0
  72. package/src/compute-view/element-view/__test__/__snapshots__/legacy.spec.ts.snap +458 -0
  73. package/src/compute-view/element-view/__test__/fixture.ts +675 -0
  74. package/src/compute-view/element-view/_types.ts +48 -0
  75. package/src/compute-view/element-view/clean-connections.ts +113 -0
  76. package/src/compute-view/element-view/compute.ts +315 -0
  77. package/src/compute-view/element-view/memory/NodeGroup.ts +31 -0
  78. package/src/compute-view/element-view/memory/index.ts +10 -0
  79. package/src/compute-view/element-view/memory/memory.ts +177 -0
  80. package/src/compute-view/element-view/memory/stage-exclude.ts +59 -0
  81. package/src/compute-view/element-view/memory/stage-final.ts +129 -0
  82. package/src/compute-view/element-view/memory/stage-include.ts +128 -0
  83. package/src/compute-view/element-view/predicates/_utils.ts +86 -0
  84. package/src/compute-view/element-view/predicates/element-expand.ts +33 -0
  85. package/src/compute-view/element-view/predicates/element-kind-tag.ts +26 -0
  86. package/src/compute-view/element-view/predicates/element-ref.ts +37 -0
  87. package/src/compute-view/element-view/predicates/relation-direct.ts +309 -0
  88. package/src/compute-view/element-view/predicates/relation-in-out.ts +66 -0
  89. package/src/compute-view/element-view/predicates/relation-in.ts +118 -0
  90. package/src/compute-view/element-view/predicates/relation-out.ts +116 -0
  91. package/src/compute-view/element-view/predicates/wildcard.ts +88 -0
  92. package/src/compute-view/element-view/utils.ts +59 -0
  93. package/src/compute-view/index.ts +4 -0
  94. package/src/compute-view/memory/AbstractMemory.ts +45 -0
  95. package/src/compute-view/memory/AbstractStageExclude.ts +216 -0
  96. package/src/compute-view/memory/AbstractStageInclude.ts +200 -0
  97. package/src/compute-view/memory/_types.ts +147 -0
  98. package/src/compute-view/memory/index.ts +5 -0
  99. package/src/compute-view/memory/ops.ts +43 -0
  100. package/src/compute-view/utils/__snapshots__/sortNodes.spec.ts.snap +113 -0
  101. package/src/compute-view/utils/ancestorsOfNode.ts +19 -0
  102. package/src/compute-view/utils/applyCustomElementProperties.ts +66 -0
  103. package/src/compute-view/utils/applyCustomRelationProperties.ts +41 -0
  104. package/src/compute-view/utils/applyViewRuleStyles.ts +53 -0
  105. package/src/compute-view/utils/buildComputedNodes.ts +148 -0
  106. package/src/compute-view/utils/buildElementNotations.ts +63 -0
  107. package/src/compute-view/utils/elementExpressionToPredicate.ts +50 -0
  108. package/src/compute-view/utils/link-nodes-with-edges.ts +54 -0
  109. package/src/compute-view/utils/merge-props-from-relationships.ts +128 -0
  110. package/src/compute-view/utils/relationExpressionToPredicates.ts +55 -0
  111. package/src/compute-view/utils/resolve-extended-views.ts +69 -0
  112. package/src/compute-view/utils/resolve-global-rules.ts +83 -0
  113. package/src/compute-view/utils/topological-sort.ts +256 -0
  114. package/src/compute-view/utils/uniqueTags.test.ts +42 -0
  115. package/src/compute-view/utils/uniqueTags.ts +21 -0
  116. package/src/compute-view/utils/view-hash.ts +27 -0
  117. package/src/compute-view/utils/with-readable-edges.ts +36 -0
  118. package/src/index.ts +22 -12
  119. package/src/model/DeploymentElementModel.ts +599 -0
  120. package/src/model/DeploymentModel.ts +370 -0
  121. package/src/model/ElementModel.ts +221 -0
  122. package/src/model/LikeC4Model.test-d.ts +152 -0
  123. package/src/model/LikeC4Model.ts +336 -457
  124. package/src/model/RelationModel.ts +85 -0
  125. package/src/model/__test__/fixture.ts +149 -338
  126. package/src/model/connection/Connection.ts +72 -0
  127. package/src/model/connection/deployment/DeploymentConnectionModel.ts +178 -0
  128. package/src/model/connection/deployment/find.ts +120 -0
  129. package/src/model/connection/deployment/index.ts +8 -0
  130. package/src/model/connection/index.ts +22 -0
  131. package/src/model/connection/model/ConnectionModel.ts +157 -0
  132. package/src/model/connection/model/find.ts +117 -0
  133. package/src/model/connection/model/index.ts +8 -0
  134. package/src/model/connection/ops.ts +274 -0
  135. package/src/model/guards.ts +9 -0
  136. package/src/model/index.ts +46 -2
  137. package/src/model/types.ts +112 -15
  138. package/src/model/view/EdgeModel.ts +103 -0
  139. package/src/model/view/LikeC4ViewModel.ts +226 -0
  140. package/src/model/view/NodeModel.ts +229 -0
  141. package/src/types/_common.ts +55 -1
  142. package/src/types/deployments.ts +169 -0
  143. package/src/types/element.ts +9 -5
  144. package/src/types/expression-v2.ts +172 -0
  145. package/src/types/expression.ts +17 -11
  146. package/src/types/global.ts +3 -3
  147. package/src/types/index.ts +220 -12
  148. package/src/types/model.ts +75 -12
  149. package/src/types/operators.ts +1 -1
  150. package/src/types/overview-graph.ts +2 -2
  151. package/src/types/relation.ts +18 -14
  152. package/src/types/theme.ts +0 -1
  153. package/src/types/view-notation.ts +2 -2
  154. package/src/types/view.ts +117 -41
  155. package/src/utils/{commonHead.ts → common-head.ts} +2 -0
  156. package/src/utils/const.ts +1 -0
  157. package/src/utils/fqn.ts +203 -56
  158. package/src/utils/getOrCreate.ts +42 -0
  159. package/src/utils/graphlib.ts +10 -0
  160. package/src/utils/index.ts +74 -6
  161. package/src/utils/iterable/_types.ts +5 -0
  162. package/src/utils/iterable/filter.ts +55 -0
  163. package/src/utils/iterable/flat.ts +17 -0
  164. package/src/utils/iterable/index.ts +12 -0
  165. package/src/utils/iterable/map.ts +40 -0
  166. package/src/utils/iterable/reduce.ts +24 -0
  167. package/src/utils/iterable/some.ts +36 -0
  168. package/src/utils/iterable/to.ts +19 -0
  169. package/src/utils/iterable/unique.ts +29 -0
  170. package/src/utils/object-hash.ts +3 -0
  171. package/src/utils/relations.ts +3 -64
  172. package/src/utils/set.ts +78 -0
  173. package/src/utils/string-hash.ts +16 -0
  174. package/dist/index.cjs +0 -5452
  175. package/dist/index.d.cts +0 -1053
  176. package/dist/shared/core.CoLQkcYL.d.ts +0 -734
  177. package/dist/shared/core.DIYZvpVg.cjs +0 -353
  178. package/dist/types/index.cjs +0 -70
  179. package/dist/types/index.d.cts +0 -2
  180. package/dist/types/index.mjs +0 -1
  181. package/src/builder/Builder.test-d.ts +0 -69
  182. package/src/builder/Builder.view.ts +0 -358
  183. package/src/model/LikeC4DiagramModel.ts +0 -338
  184. package/src/model/LikeC4ViewModel.ts +0 -320
@@ -0,0 +1,330 @@
1
+ import { T as requireIterator, S as requireForeach, R as getDefaultExportFromCjs, b as t, W as n, f as commonAncestor, h as compareFqnHierarchically } from '../shared/object_hash.CE_oF3I3.js';
2
+ export { D as DefaultMap, e as ancestorsFqn, c as commonHead, g as compareByFqnHierarchically, d as compareNatural, H as difference, I as equalsSet, v as getOrCreate, i as hasAtLeast, j as hierarchyDistance, k as hierarchyLevel, y as ifilter, z as iflat, A as imap, J as intersection, o as isAncestor, q as isDescendantOf, B as isIterable, w as isNonEmptyArray, a as isSameHierarchy, x as isString, C as isome, E as iunique, n as nameFromFqn, N as objectHash, p as parentFqn, s as sortByFqnHierarchically, r as sortNaturalByFqn, u as sortParentsFirst, M as stringHash, K as symmetricDifference, F as toArray, G as toSet, L as union } from '../shared/object_hash.CE_oF3I3.js';
3
+ import { i as invariant } from '../shared/chunk-RAAYCPUM.M-JWF7SS.js';
4
+
5
+ function o(r,n){let e=Math.ceil(r),t=Math.floor(n);if(t<e)throw new RangeError(`randomInteger: The range [${r.toString()},${n.toString()}] contains no integer`);return Math.floor(Math.random()*(t-e+1)+e)}
6
+
7
+ /**
8
+ * Mnemonist Linked List
9
+ * ======================
10
+ *
11
+ * Singly linked list implementation. Uses raw JavaScript objects as nodes
12
+ * as benchmarks proved it was the fastest thing to do.
13
+ */
14
+
15
+ var linkedList$1;
16
+ var hasRequiredLinkedList;
17
+
18
+ function requireLinkedList () {
19
+ if (hasRequiredLinkedList) return linkedList$1;
20
+ hasRequiredLinkedList = 1;
21
+ var Iterator = requireIterator(),
22
+ forEach = requireForeach();
23
+
24
+ /**
25
+ * Linked List.
26
+ *
27
+ * @constructor
28
+ */
29
+ function LinkedList() {
30
+ this.clear();
31
+ }
32
+
33
+ /**
34
+ * Method used to clear the list.
35
+ *
36
+ * @return {undefined}
37
+ */
38
+ LinkedList.prototype.clear = function() {
39
+
40
+ // Properties
41
+ this.head = null;
42
+ this.tail = null;
43
+ this.size = 0;
44
+ };
45
+
46
+ /**
47
+ * Method used to get the first item of the list.
48
+ *
49
+ * @return {any}
50
+ */
51
+ LinkedList.prototype.first = function() {
52
+ return this.head ? this.head.item : undefined;
53
+ };
54
+ LinkedList.prototype.peek = LinkedList.prototype.first;
55
+
56
+ /**
57
+ * Method used to get the last item of the list.
58
+ *
59
+ * @return {any}
60
+ */
61
+ LinkedList.prototype.last = function() {
62
+ return this.tail ? this.tail.item : undefined;
63
+ };
64
+
65
+ /**
66
+ * Method used to add an item at the end of the list.
67
+ *
68
+ * @param {any} item - The item to add.
69
+ * @return {number}
70
+ */
71
+ LinkedList.prototype.push = function(item) {
72
+ var node = {item: item, next: null};
73
+
74
+ if (!this.head) {
75
+ this.head = node;
76
+ this.tail = node;
77
+ }
78
+ else {
79
+ this.tail.next = node;
80
+ this.tail = node;
81
+ }
82
+
83
+ this.size++;
84
+
85
+ return this.size;
86
+ };
87
+
88
+ /**
89
+ * Method used to add an item at the beginning of the list.
90
+ *
91
+ * @param {any} item - The item to add.
92
+ * @return {number}
93
+ */
94
+ LinkedList.prototype.unshift = function(item) {
95
+ var node = {item: item, next: null};
96
+
97
+ if (!this.head) {
98
+ this.head = node;
99
+ this.tail = node;
100
+ }
101
+ else {
102
+ if (!this.head.next)
103
+ this.tail = this.head;
104
+ node.next = this.head;
105
+ this.head = node;
106
+ }
107
+
108
+ this.size++;
109
+
110
+ return this.size;
111
+ };
112
+
113
+ /**
114
+ * Method used to retrieve & remove the first item of the list.
115
+ *
116
+ * @return {any}
117
+ */
118
+ LinkedList.prototype.shift = function() {
119
+ if (!this.size)
120
+ return undefined;
121
+
122
+ var node = this.head;
123
+
124
+ this.head = node.next;
125
+ this.size--;
126
+
127
+ return node.item;
128
+ };
129
+
130
+ /**
131
+ * Method used to iterate over the list.
132
+ *
133
+ * @param {function} callback - Function to call for each item.
134
+ * @param {object} scope - Optional scope.
135
+ * @return {undefined}
136
+ */
137
+ LinkedList.prototype.forEach = function(callback, scope) {
138
+ if (!this.size)
139
+ return;
140
+
141
+ scope = arguments.length > 1 ? scope : this;
142
+
143
+ var n = this.head,
144
+ i = 0;
145
+
146
+ while (n) {
147
+ callback.call(scope, n.item, i, this);
148
+ n = n.next;
149
+ i++;
150
+ }
151
+ };
152
+
153
+ /**
154
+ * Method used to convert the list into an array.
155
+ *
156
+ * @return {array}
157
+ */
158
+ LinkedList.prototype.toArray = function() {
159
+ if (!this.size)
160
+ return [];
161
+
162
+ var array = new Array(this.size);
163
+
164
+ for (var i = 0, l = this.size, n = this.head; i < l; i++) {
165
+ array[i] = n.item;
166
+ n = n.next;
167
+ }
168
+
169
+ return array;
170
+ };
171
+
172
+ /**
173
+ * Method used to create an iterator over a list's values.
174
+ *
175
+ * @return {Iterator}
176
+ */
177
+ LinkedList.prototype.values = function() {
178
+ var n = this.head;
179
+
180
+ return new Iterator(function() {
181
+ if (!n)
182
+ return {
183
+ done: true
184
+ };
185
+
186
+ var value = n.item;
187
+ n = n.next;
188
+
189
+ return {
190
+ value: value,
191
+ done: false
192
+ };
193
+ });
194
+ };
195
+
196
+ /**
197
+ * Method used to create an iterator over a list's entries.
198
+ *
199
+ * @return {Iterator}
200
+ */
201
+ LinkedList.prototype.entries = function() {
202
+ var n = this.head,
203
+ i = 0;
204
+
205
+ return new Iterator(function() {
206
+ if (!n)
207
+ return {
208
+ done: true
209
+ };
210
+
211
+ var value = n.item;
212
+ n = n.next;
213
+ i++;
214
+
215
+ return {
216
+ value: [i - 1, value],
217
+ done: false
218
+ };
219
+ });
220
+ };
221
+
222
+ /**
223
+ * Attaching the #.values method to Symbol.iterator if possible.
224
+ */
225
+ if (typeof Symbol !== 'undefined')
226
+ LinkedList.prototype[Symbol.iterator] = LinkedList.prototype.values;
227
+
228
+ /**
229
+ * Convenience known methods.
230
+ */
231
+ LinkedList.prototype.toString = function() {
232
+ return this.toArray().join(',');
233
+ };
234
+
235
+ LinkedList.prototype.toJSON = function() {
236
+ return this.toArray();
237
+ };
238
+
239
+ LinkedList.prototype.inspect = function() {
240
+ var array = this.toArray();
241
+
242
+ // Trick so that node displays the name of the constructor
243
+ Object.defineProperty(array, 'constructor', {
244
+ value: LinkedList,
245
+ enumerable: false
246
+ });
247
+
248
+ return array;
249
+ };
250
+
251
+ if (typeof Symbol !== 'undefined')
252
+ LinkedList.prototype[Symbol.for('nodejs.util.inspect.custom')] = LinkedList.prototype.inspect;
253
+
254
+ /**
255
+ * Static @.from function taking an arbitrary iterable & converting it into
256
+ * a list.
257
+ *
258
+ * @param {Iterable} iterable - Target iterable.
259
+ * @return {LinkedList}
260
+ */
261
+ LinkedList.from = function(iterable) {
262
+ var list = new LinkedList();
263
+
264
+ forEach(iterable, function(value) {
265
+ list.push(value);
266
+ });
267
+
268
+ return list;
269
+ };
270
+
271
+ /**
272
+ * Exporting.
273
+ */
274
+ linkedList$1 = LinkedList;
275
+ return linkedList$1;
276
+ }
277
+
278
+ var linkedListExports = requireLinkedList();
279
+ const linkedList = /*@__PURE__*/getDefaultExportFromCjs(linkedListExports);
280
+
281
+ function ireduce(arg1, arg2, arg3) {
282
+ const reducer = n(arg3) ? arg2 : arg1;
283
+ const initialValue = arg3 ?? arg2;
284
+ invariant(t(reducer));
285
+ function _reduce(iter) {
286
+ let acc = initialValue;
287
+ for (const value of iter) {
288
+ acc = reducer(acc, value);
289
+ }
290
+ return acc;
291
+ }
292
+ return n(arg3) ? _reduce(arg1) : _reduce;
293
+ }
294
+
295
+ const DELAY = "LIKEC4_DELAY";
296
+ function delay(...args) {
297
+ let ms = 100;
298
+ if (args.length === 2) {
299
+ ms = o(args[0], args[1]);
300
+ } else if (args.length === 1) {
301
+ ms = args[0];
302
+ }
303
+ return new Promise((resolve) => {
304
+ setTimeout(() => {
305
+ resolve(DELAY);
306
+ }, ms ?? 100);
307
+ });
308
+ }
309
+
310
+ const compareRelations = (a, b) => {
311
+ const parentA = commonAncestor(a.source, a.target);
312
+ const parentB = commonAncestor(b.source, b.target);
313
+ if (parentA && !parentB) {
314
+ return 1;
315
+ }
316
+ if (!parentA && parentB) {
317
+ return -1;
318
+ }
319
+ const compareParents = parentA && parentB ? compareFqnHierarchically(parentA, parentB) : 0;
320
+ if (compareParents !== 0) {
321
+ return compareParents;
322
+ }
323
+ const compareSource = compareFqnHierarchically(a.source, b.source);
324
+ if (compareSource !== 0) {
325
+ return compareSource;
326
+ }
327
+ return compareFqnHierarchically(a.target, b.target);
328
+ };
329
+
330
+ export { linkedList as LinkedList, commonAncestor, compareFqnHierarchically, compareRelations, delay, ireduce };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@likec4/core",
3
- "version": "1.17.1",
3
+ "version": "1.19.0",
4
4
  "license": "MIT",
5
5
  "homepage": "https://likec4.dev",
6
6
  "author": "Denis Davydkov <denis@davydkov.com>",
@@ -29,68 +29,80 @@
29
29
  "sideEffects": false,
30
30
  "exports": {
31
31
  ".": {
32
- "import": {
33
- "types": "./dist/index.d.mts",
34
- "default": "./dist/index.mjs"
35
- },
36
- "require": {
37
- "types": "./dist/index.d.cts",
38
- "default": "./dist/index.cjs"
32
+ "development": "./src/index.ts",
33
+ "default": {
34
+ "types": "./dist/index.d.ts",
35
+ "import": "./dist/index.js",
36
+ "default": "./dist/index.js"
37
+ }
38
+ },
39
+ "./builder": {
40
+ "development": "./src/builder/index.ts",
41
+ "default": {
42
+ "types": "./dist/builder/index.d.ts",
43
+ "import": "./dist/builder/index.js",
44
+ "default": "./dist/builder/index.js"
45
+ }
46
+ },
47
+ "./compute-view": {
48
+ "development": "./src/compute-view/index.ts",
49
+ "default": {
50
+ "types": "./dist/compute-view/index.d.ts",
51
+ "import": "./dist/compute-view/index.js",
52
+ "default": "./dist/compute-view/index.js"
53
+ }
54
+ },
55
+ "./model": {
56
+ "development": "./src/model/index.ts",
57
+ "default": {
58
+ "types": "./dist/model/index.d.ts",
59
+ "import": "./dist/model/index.js",
60
+ "default": "./dist/model/index.js"
61
+ }
62
+ },
63
+ "./utils": {
64
+ "development": "./src/utils/index.ts",
65
+ "default": {
66
+ "types": "./dist/utils/index.d.ts",
67
+ "import": "./dist/utils/index.js",
68
+ "default": "./dist/utils/index.js"
39
69
  }
40
70
  },
41
71
  "./types": {
42
- "import": {
43
- "types": "./dist/types/index.d.mts",
44
- "default": "./dist/types/index.mjs"
45
- },
46
- "require": {
47
- "types": "./dist/types/index.d.cts",
48
- "default": "./dist/types/index.cjs"
72
+ "development": "./src/types/index.ts",
73
+ "default": {
74
+ "types": "./dist/types/index.d.ts",
75
+ "import": "./dist/types/index.js",
76
+ "default": "./dist/types/index.js"
49
77
  }
50
78
  }
51
79
  },
52
80
  "publishConfig": {
53
81
  "registry": "https://registry.npmjs.org",
54
- "access": "public",
55
- "exports": {
56
- ".": {
57
- "import": {
58
- "types": "./dist/index.d.mts",
59
- "default": "./dist/index.mjs"
60
- },
61
- "require": {
62
- "types": "./dist/index.d.cts",
63
- "default": "./dist/index.cjs"
64
- }
65
- },
66
- "./types": {
67
- "import": {
68
- "types": "./dist/types/index.d.mts",
69
- "default": "./dist/types/index.mjs"
70
- },
71
- "require": {
72
- "types": "./dist/types/index.d.cts",
73
- "default": "./dist/types/index.cjs"
74
- }
75
- }
76
- }
82
+ "access": "public"
77
83
  },
78
84
  "dependencies": {
79
- "defu": "^6.1.4",
80
- "type-fest": "4.27.1"
85
+ "type-fest": "4.28.1"
81
86
  },
82
87
  "devDependencies": {
83
- "@likec4/tsconfig": "1.17.1",
84
- "@mantine/colors-generator": "7.14.1",
88
+ "@likec4/tsconfig": "1.19.0",
89
+ "@mantine/colors-generator": "7.15.2",
85
90
  "@types/natural-compare-lite": "^1.4.2",
91
+ "@types/object-hash": "^3.0.6",
86
92
  "chroma-js": "^3.1.2",
87
- "execa": "^9.3.1",
93
+ "defu": "^6.1.4",
94
+ "graphology": "^0.25.4",
95
+ "graphology-dag": "^0.4.1",
96
+ "graphology-types": "^0.24.8",
97
+ "mnemonist": "^0.39.8",
88
98
  "natural-compare-lite": "^1.4.0",
89
- "remeda": "^2.17.3",
90
- "turbo": "^2.3.1",
99
+ "object-hash": "^3.0.0",
100
+ "obliterator": "^2.0.4",
101
+ "remeda": "^2.17.4",
102
+ "turbo": "^2.3.3",
91
103
  "typescript": "^5.7.2",
92
- "unbuild": "^3.0.0-rc.11",
93
- "vitest": "^2.1.5"
104
+ "unbuild": "^3.1.0",
105
+ "vitest": "^2.1.8"
94
106
  },
95
107
  "packageManager": "yarn@4.5.3"
96
108
  }
@@ -0,0 +1,190 @@
1
+ import { expectTypeOf, test } from 'vitest'
2
+ import type { LikeC4Model } from '../model/LikeC4Model'
3
+ import type { ParsedLikeC4Model } from '../types'
4
+ import { Builder } from './Builder'
5
+
6
+ test('Builder types - style 1', () => {
7
+ const {
8
+ model: {
9
+ model,
10
+ actor,
11
+ system,
12
+ component,
13
+ relTo,
14
+ },
15
+ deployment: {
16
+ deployment,
17
+ instanceOf,
18
+ env,
19
+ vm,
20
+ },
21
+ views: {
22
+ deploymentView,
23
+ views,
24
+ view,
25
+ viewOf,
26
+ $rules,
27
+ $include,
28
+ },
29
+ builder,
30
+ } = Builder.forSpecification({
31
+ elements: {
32
+ actor: {
33
+ style: {
34
+ shape: 'person',
35
+ },
36
+ },
37
+ system: {},
38
+ component: {},
39
+ },
40
+ deployments: {
41
+ env: {},
42
+ vm: {},
43
+ },
44
+ relationships: {
45
+ like: {},
46
+ dislike: {},
47
+ },
48
+ tags: ['tag1', 'tag2', 'tag1'],
49
+ })
50
+
51
+ const m = builder
52
+ .with(
53
+ model(
54
+ actor('alice'),
55
+ actor('bob'),
56
+ system('cloud').with(
57
+ component('backend').with(
58
+ component('api'),
59
+ component('db'),
60
+ ),
61
+ component('frontend').with(
62
+ relTo('cloud.backend.api'),
63
+ ),
64
+ ),
65
+ ),
66
+ deployment(
67
+ env('prod').with(
68
+ vm('vm1'),
69
+ ),
70
+ env('prod.vm2'),
71
+ env('dev').with(
72
+ vm('vm1'),
73
+ instanceOf('cloud.backend.api'),
74
+ instanceOf(
75
+ 'wrong',
76
+ // @ts-expect-error
77
+ 'non-existing',
78
+ ),
79
+ vm('vm2'),
80
+ ),
81
+ ),
82
+ views(
83
+ view(
84
+ 'view',
85
+ // @ts-expect-error
86
+ $include('wrong'),
87
+ ), // rules inside
88
+ view(
89
+ 'view',
90
+ // @ts-expect-error #tag22 is not defined
91
+ $include('cloud.backend', {
92
+ where: 'tag is #tag22',
93
+ }),
94
+ ),
95
+ // using with
96
+ view('view').with(
97
+ // @ts-expect-error
98
+ $include('wrong'),
99
+ // @ts-expect-error
100
+ $style('wrong', { color: 'red' }),
101
+ ),
102
+ ),
103
+ views(
104
+ viewOf('view-of', 'cloud.backend.api'),
105
+ // @ts-expect-error
106
+ viewOf('view-of', 'wrong'),
107
+ viewOf(
108
+ 'view-of',
109
+ 'cloud.backend.api',
110
+ $rules(
111
+ $include('* -> *'),
112
+ // @ts-expect-error
113
+ $include('wrong'),
114
+ ),
115
+ ),
116
+ viewOf(
117
+ 'view-of',
118
+ // @ts-expect-error
119
+ '-cloud.backend.api',
120
+ 'Title',
121
+ ),
122
+ viewOf(
123
+ 'view-of',
124
+ // @ts-expect-error
125
+ '-cloud.backend.api',
126
+ $rules(),
127
+ ),
128
+ viewOf(
129
+ 'view-of',
130
+ 'cloud.backend.api',
131
+ { title: 'asdasd' },
132
+ $rules(
133
+ $include('* -> *'),
134
+ // @ts-expect-error
135
+ $include('wrong'),
136
+ ),
137
+ ),
138
+ ),
139
+ views(
140
+ deploymentView(
141
+ 'deployment',
142
+ $rules(
143
+ // @ts-expect-error
144
+ $include('pr'),
145
+ ),
146
+ ),
147
+ deploymentView(
148
+ 'deployment',
149
+ 'Title',
150
+ $rules(
151
+ // @ts-expect-error
152
+ $include('pr'),
153
+ ),
154
+ ),
155
+ deploymentView('deployment').with(
156
+ // @ts-expect-error
157
+ $include('pr'),
158
+ ),
159
+ ),
160
+ )
161
+
162
+ expectTypeOf(m.Types.Fqn).toEqualTypeOf(
163
+ '' as 'alice' | 'bob' | 'cloud' | 'cloud.backend' | 'cloud.backend.api' | 'cloud.backend.db' | 'cloud.frontend',
164
+ )
165
+ expectTypeOf(m.Types.ViewId).toEqualTypeOf(
166
+ '' as 'view' | 'view-of' | 'deployment',
167
+ )
168
+ expectTypeOf(m.Types.DeploymentFqn).toEqualTypeOf(
169
+ '' as 'prod' | 'dev' | 'prod.vm1' | 'prod.vm2' | 'dev.vm1' | 'dev.vm2' | 'dev.api' | 'dev.wrong',
170
+ )
171
+
172
+ expectTypeOf(m.build()).toEqualTypeOf(
173
+ {} as ParsedLikeC4Model<
174
+ 'actor' | 'system' | 'component',
175
+ 'like' | 'dislike',
176
+ 'tag1' | 'tag2',
177
+ 'alice' | 'bob' | 'cloud' | 'cloud.backend' | 'cloud.backend.api' | 'cloud.backend.db' | 'cloud.frontend',
178
+ 'view' | 'view-of' | 'deployment',
179
+ 'prod' | 'dev' | 'prod.vm1' | 'prod.vm2' | 'dev.vm1' | 'dev.vm2' | 'dev.api' | 'dev.wrong'
180
+ >,
181
+ )
182
+
183
+ expectTypeOf(m.toLikeC4Model()).toEqualTypeOf(
184
+ {} as LikeC4Model.Computed<
185
+ 'alice' | 'bob' | 'cloud' | 'cloud.backend' | 'cloud.backend.api' | 'cloud.backend.db' | 'cloud.frontend',
186
+ 'prod' | 'dev' | 'prod.vm1' | 'prod.vm2' | 'dev.vm1' | 'dev.vm2' | 'dev.api' | 'dev.wrong',
187
+ 'view' | 'view-of' | 'deployment'
188
+ >,
189
+ )
190
+ })