@likec4/core 1.31.0 → 1.32.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 (186) hide show
  1. package/README.md +407 -5
  2. package/dist/builder/index.d.mts +221 -42
  3. package/dist/builder/index.mjs +118 -65
  4. package/dist/compute-view/index.d.mts +23 -7
  5. package/dist/compute-view/index.mjs +11 -6
  6. package/dist/compute-view/relationships-view/index.d.mts +9 -7
  7. package/dist/compute-view/relationships-view/index.mjs +3 -2
  8. package/dist/index.d.mts +10 -14
  9. package/dist/index.mjs +9 -6
  10. package/dist/model/index.d.mts +173 -19
  11. package/dist/model/index.mjs +6 -1
  12. package/dist/shared/core.BaYE_r29.d.mts +258 -0
  13. package/dist/shared/core.Bk7wEZFG.mjs +276 -0
  14. package/dist/shared/core.BrCnZFTn.mjs +32 -0
  15. package/dist/shared/core.BuO4ncfY.d.mts +146 -0
  16. package/dist/shared/{core.Bq753SYD.mjs → core.CBpKAlhj.mjs} +2012 -4422
  17. package/dist/shared/core.CCWXGc6G.d.mts +920 -0
  18. package/dist/shared/core.CUYDgv2-.mjs +214 -0
  19. package/dist/shared/{core.Cu-UdkSl.mjs → core.CpXlRyE5.mjs} +7 -494
  20. package/dist/shared/{core.C-YXI-43.mjs → core.Cy9smucx.mjs} +3 -1
  21. package/dist/shared/core.CywrQs86.d.mts +31 -0
  22. package/dist/shared/core.DoK86JEe.mjs +518 -0
  23. package/dist/shared/core.Dpq3P3YJ.d.mts +1265 -0
  24. package/dist/shared/{core.D2830qgg.d.mts → core.Pf5I9o0e.d.mts} +1 -1
  25. package/dist/shared/core.cbA9VZ02.mjs +2681 -0
  26. package/dist/shared/{core.CQXU9DF7.mjs → core.rmvsy0n3.mjs} +23 -32
  27. package/dist/types/aux.d.mts +3 -0
  28. package/dist/types/aux.mjs +1 -0
  29. package/dist/types/index.d.mts +7 -45
  30. package/dist/types/index.mjs +130 -3
  31. package/dist/utils/index.d.mts +221 -53
  32. package/dist/utils/index.mjs +14 -10
  33. package/package.json +15 -7
  34. package/src/builder/Builder.deploymentModel.ts +82 -18
  35. package/src/builder/Builder.element.ts +40 -20
  36. package/src/builder/Builder.model.ts +66 -17
  37. package/src/builder/Builder.ts +168 -76
  38. package/src/builder/Builder.view-common.ts +35 -17
  39. package/src/builder/Builder.view-deployment.ts +25 -25
  40. package/src/builder/Builder.view-element.ts +13 -12
  41. package/src/builder/Builder.views.ts +12 -7
  42. package/src/builder/__snapshots__/Builder-style1.spec.ts.snap +62 -34
  43. package/src/builder/__snapshots__/Builder-style2.compute-model.json5 +319 -0
  44. package/src/builder/__snapshots__/Builder-style2.spec.ts.snap +45 -24
  45. package/src/builder/_types.ts +34 -27
  46. package/src/compute-view/compute-view.ts +31 -34
  47. package/src/compute-view/deployment-view/__test__/TestHelper.ts +27 -14
  48. package/src/compute-view/deployment-view/__test__/fixture.ts +15 -13
  49. package/src/compute-view/deployment-view/_types.ts +10 -10
  50. package/src/compute-view/deployment-view/clean-connections.ts +5 -7
  51. package/src/compute-view/deployment-view/compute.ts +16 -13
  52. package/src/compute-view/deployment-view/memory/memory.ts +5 -6
  53. package/src/compute-view/deployment-view/predicates/deploymentRefs.ts +4 -5
  54. package/src/compute-view/deployment-view/predicates/relation-direct.ts +25 -50
  55. package/src/compute-view/deployment-view/predicates/relation-in-out.ts +5 -7
  56. package/src/compute-view/deployment-view/predicates/relation-incoming.ts +7 -11
  57. package/src/compute-view/deployment-view/predicates/relation-outgoing.ts +7 -10
  58. package/src/compute-view/deployment-view/predicates/utils.ts +37 -31
  59. package/src/compute-view/deployment-view/predicates/wildcard.ts +3 -2
  60. package/src/compute-view/deployment-view/stages/stage-final.ts +2 -2
  61. package/src/compute-view/deployment-view/stages/stage-include.ts +1 -1
  62. package/src/compute-view/deployment-view/utils.ts +79 -72
  63. package/src/compute-view/dynamic-view/__test__/fixture.ts +20 -11
  64. package/src/compute-view/dynamic-view/compute.ts +60 -53
  65. package/src/compute-view/element-view/__test__/TestHelper.ts +53 -29
  66. package/src/compute-view/element-view/__test__/__snapshots__/legacy.spec.ts.snap +26 -26
  67. package/src/compute-view/element-view/__test__/fixture.ts +134 -83
  68. package/src/compute-view/element-view/_types.ts +14 -19
  69. package/src/compute-view/element-view/clean-connections.ts +12 -8
  70. package/src/compute-view/element-view/compute.ts +61 -51
  71. package/src/compute-view/element-view/memory/NodeGroup.ts +8 -9
  72. package/src/compute-view/element-view/memory/memory.ts +22 -22
  73. package/src/compute-view/element-view/memory/stage-include.ts +5 -3
  74. package/src/compute-view/element-view/predicates/_utils.ts +18 -14
  75. package/src/compute-view/element-view/predicates/element-expand.ts +4 -5
  76. package/src/compute-view/element-view/predicates/element-kind-tag.ts +3 -4
  77. package/src/compute-view/element-view/predicates/element-ref.ts +3 -4
  78. package/src/compute-view/element-view/predicates/relation-direct.ts +16 -12
  79. package/src/compute-view/element-view/predicates/relation-in-out.ts +7 -8
  80. package/src/compute-view/element-view/predicates/relation-in.ts +19 -26
  81. package/src/compute-view/element-view/predicates/relation-out.ts +20 -21
  82. package/src/compute-view/element-view/predicates/wildcard.ts +3 -3
  83. package/src/compute-view/element-view/utils.ts +25 -23
  84. package/src/compute-view/index.ts +1 -1
  85. package/src/compute-view/memory/AbstractStageExclude.ts +3 -4
  86. package/src/compute-view/memory/AbstractStageInclude.ts +1 -1
  87. package/src/compute-view/memory/_types.ts +3 -2
  88. package/src/compute-view/relationships-view/_types.ts +3 -4
  89. package/src/compute-view/relationships-view/compute.ts +8 -11
  90. package/src/compute-view/relationships-view/layout.ts +6 -6
  91. package/src/compute-view/relationships-view/utils.ts +4 -4
  92. package/src/compute-view/utils/ancestorsOfNode.ts +7 -7
  93. package/src/compute-view/utils/applyCustomElementProperties.ts +16 -8
  94. package/src/compute-view/utils/applyCustomRelationProperties.ts +19 -9
  95. package/src/compute-view/utils/applyViewRuleStyles.ts +18 -10
  96. package/src/compute-view/utils/buildComputedNodes.ts +40 -40
  97. package/src/compute-view/utils/buildElementNotations.ts +14 -14
  98. package/src/compute-view/utils/elementExpressionToPredicate.ts +14 -15
  99. package/src/compute-view/utils/link-nodes-with-edges.ts +6 -4
  100. package/src/compute-view/utils/merge-props-from-relationships.ts +52 -20
  101. package/src/compute-view/utils/relationExpressionToPredicates.ts +19 -19
  102. package/src/compute-view/utils/resolve-extended-views.ts +8 -7
  103. package/src/compute-view/utils/resolve-global-rules.ts +31 -26
  104. package/src/compute-view/utils/topological-sort.ts +14 -14
  105. package/src/compute-view/utils/view-hash.ts +2 -2
  106. package/src/compute-view/utils/with-readable-edges.ts +9 -5
  107. package/src/index.ts +0 -32
  108. package/src/model/DeploymentElementModel.ts +171 -144
  109. package/src/model/DeploymentModel.ts +88 -65
  110. package/src/model/ElementModel.ts +85 -74
  111. package/src/model/LikeC4Model.ts +430 -241
  112. package/src/model/RelationModel.ts +63 -29
  113. package/src/model/__test__/fixture.ts +50 -36
  114. package/src/model/connection/Connection.ts +2 -2
  115. package/src/model/connection/deployment/DeploymentConnectionModel.ts +21 -24
  116. package/src/model/connection/deployment/find.ts +1 -1
  117. package/src/model/connection/model/ConnectionModel.ts +21 -20
  118. package/src/model/connection/model/find.ts +7 -7
  119. package/src/model/connection/ops.ts +6 -6
  120. package/src/model/guards.ts +66 -14
  121. package/src/model/index.ts +20 -7
  122. package/src/model/types.ts +41 -97
  123. package/src/model/view/EdgeModel.ts +47 -41
  124. package/src/model/view/LikeC4ViewModel.ts +130 -80
  125. package/src/model/view/NodeModel.ts +102 -96
  126. package/src/theme/element.ts +1 -1
  127. package/src/theme/index.ts +9 -9
  128. package/src/theme/relationships.ts +1 -1
  129. package/src/types/_common.ts +21 -15
  130. package/src/types/aux.ts +285 -0
  131. package/src/types/const.ts +34 -0
  132. package/src/types/expression-model.ts +292 -0
  133. package/src/types/expression.ts +311 -0
  134. package/src/types/fqnRef.ts +88 -0
  135. package/src/types/geometry.ts +131 -0
  136. package/src/types/global.ts +10 -8
  137. package/src/types/index.ts +39 -201
  138. package/src/types/model-data.ts +52 -84
  139. package/src/types/model-deployment.ts +87 -0
  140. package/src/types/model-dump.ts +72 -0
  141. package/src/types/model-logical.ts +111 -0
  142. package/src/types/model-spec.ts +81 -0
  143. package/src/types/operators.ts +51 -52
  144. package/src/types/scalar.ts +114 -0
  145. package/src/types/styles.ts +123 -0
  146. package/src/types/view-changes.ts +4 -5
  147. package/src/types/view-common.ts +157 -0
  148. package/src/types/view-computed.ts +113 -0
  149. package/src/types/view-layouted.ts +82 -0
  150. package/src/types/view-parsed.deployment.ts +40 -0
  151. package/src/types/view-parsed.dynamic.ts +78 -0
  152. package/src/types/view-parsed.element.ts +65 -0
  153. package/src/types/view.ts +122 -542
  154. package/src/utils/compare-natural.ts +43 -1
  155. package/src/utils/getOrCreate.ts +0 -34
  156. package/src/utils/index.ts +7 -12
  157. package/src/utils/iterable/filter.ts +1 -1
  158. package/src/utils/iterable/find.ts +3 -1
  159. package/src/utils/iterable/head.ts +22 -0
  160. package/src/utils/iterable/index.ts +1 -0
  161. package/src/utils/iterable/map.ts +1 -1
  162. package/src/utils/iterable/reduce.ts +1 -1
  163. package/src/utils/iterable/some.ts +1 -1
  164. package/src/utils/memoize-prop.ts +30 -0
  165. package/src/utils/object-hash.ts +1 -1
  166. package/src/utils/relations.ts +14 -11
  167. package/src/utils/string-hash.ts +1 -1
  168. package/dist/shared/core.CQDU11hR.d.mts +0 -753
  169. package/dist/shared/core.DJvmfnEi.d.mts +0 -1153
  170. package/dist/shared/core.DgfwjBtu.mjs +0 -495
  171. package/dist/shared/core.Dx7siloV.d.mts +0 -146
  172. package/dist/shared/core.SjLhMA7a.d.mts +0 -62
  173. package/src/builder/__snapshots__/Builder.spec.ts.snap +0 -374
  174. package/src/compute-view/element-view/predicates.ts +0 -520
  175. package/src/compute-view/utils/uniqueTags.ts +0 -21
  176. package/src/types/deployments.ts +0 -170
  177. package/src/types/element.ts +0 -109
  178. package/src/types/expression-v2-model.ts +0 -314
  179. package/src/types/expression-v2.ts +0 -392
  180. package/src/types/overview-graph.ts +0 -43
  181. package/src/types/relation.ts +0 -61
  182. package/src/types/scalars.ts +0 -39
  183. package/src/types/theme.ts +0 -82
  184. package/src/types/view-notation.ts +0 -9
  185. package/src/utils/graphlib.ts +0 -10
  186. /package/src/{errors/index.ts → utils/invariant.ts} +0 -0
@@ -1,8 +1,12 @@
1
- import { r as requireForeach, p as requireIterator, v as n } from '../shared/core.Cu-UdkSl.mjs';
2
- export { S as Stack, c as commonHead, h as difference, j as equalsSet, g as getOrCreate, i as hasAtLeast, a as ifind, b as iflat, k as intersection, d as isIterable, e as isome, f as iunique, o as objectHash, n as stringHash, s as symmetricDifference, u as union } from '../shared/core.Cu-UdkSl.mjs';
3
- import { j as getDefaultExportFromCjs, h as t, m as commonAncestor, q as compareFqnHierarchically } from '../shared/core.CQXU9DF7.mjs';
4
- export { D as DefaultMap, l as ancestorsFqn, o as compareByFqnHierarchically, k as compareNatural, r as hierarchyDistance, u as hierarchyLevel, c as ifilter, d as imap, a as isAncestor, i as isDescendantOf, e as isNonEmptyArray, g as isSameHierarchy, x as isString, n as nameFromFqn, p as parentFqn, v as sortByFqnHierarchically, w as sortNaturalByFqn, s as sortParentsFirst, b as toArray, t as toSet } from '../shared/core.CQXU9DF7.mjs';
5
- import { i as invariant } from '../shared/core.C-YXI-43.mjs';
1
+ import { i as invariant } from '../shared/core.Cy9smucx.mjs';
2
+ export { n as nonNullable, a as nonexhaustive } from '../shared/core.Cy9smucx.mjs';
3
+ import { r as requireForeach, a as requireIterator, n } from '../shared/core.CpXlRyE5.mjs';
4
+ export { S as Stack, c as commonHead, e as iflat, i as isIterable, b as iunique, o as objectHash } from '../shared/core.CpXlRyE5.mjs';
5
+ import { g as getDefaultExportFromCjs, t, k as commonAncestor, q as compareFqnHierarchically } from '../shared/core.rmvsy0n3.mjs';
6
+ export { D as DefaultMap, l as ancestorsFqn, h as compareByFqnHierarchically, m as compareNatural, o as compareNaturalHierarchically, r as hierarchyDistance, u as hierarchyLevel, b as ifilter, a as isAncestor, i as isDescendantOf, c as isNonEmptyArray, d as isSameHierarchy, w as isString, n as nameFromFqn, p as parentFqn, j as sortByFqnHierarchically, v as sortNaturalByFqn, s as sortParentsFirst } from '../shared/core.rmvsy0n3.mjs';
7
+ export { d as difference, j as equalsSet, g as getOrCreate, i as hasAtLeast, c as ifind, e as ihead, a as intersection, b as isome, f as memoizeProp, k as stringHash, s as symmetricDifference, u as union } from '../shared/core.DoK86JEe.mjs';
8
+ export { i as imap, a as toArray, t as toSet } from '../shared/core.BrCnZFTn.mjs';
9
+ import '../shared/core.DbRvwARP.mjs';
6
10
 
7
11
  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)}
8
12
 
@@ -1287,8 +1291,8 @@ function delay(...args) {
1287
1291
  }
1288
1292
 
1289
1293
  const compareRelations = (a, b) => {
1290
- const parentA = commonAncestor(a.source, a.target);
1291
- const parentB = commonAncestor(b.source, b.target);
1294
+ const parentA = commonAncestor(a.source.model, a.target.model);
1295
+ const parentB = commonAncestor(b.source.model, b.target.model);
1292
1296
  if (parentA && !parentB) {
1293
1297
  return 1;
1294
1298
  }
@@ -1299,11 +1303,11 @@ const compareRelations = (a, b) => {
1299
1303
  if (compareParents !== 0) {
1300
1304
  return compareParents;
1301
1305
  }
1302
- const compareSource = compareFqnHierarchically(a.source, b.source);
1306
+ const compareSource = compareFqnHierarchically(a.source.model, b.source.model);
1303
1307
  if (compareSource !== 0) {
1304
1308
  return compareSource;
1305
1309
  }
1306
- return compareFqnHierarchically(a.target, b.target);
1310
+ return compareFqnHierarchically(a.target.model, b.target.model);
1307
1311
  };
1308
1312
 
1309
- export { biMap as BiMap, defaultWeakMap as DefaultWeakMap, linkedList as LinkedList, multiMap as MultiMap, queue as Queue, commonAncestor, compareFqnHierarchically, compareRelations, delay, ireduce };
1313
+ export { biMap as BiMap, defaultWeakMap as DefaultWeakMap, linkedList as LinkedList, multiMap as MultiMap, queue as Queue, commonAncestor, compareFqnHierarchically, compareRelations, delay, invariant, ireduce };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@likec4/core",
3
- "version": "1.31.0",
3
+ "version": "1.32.0",
4
4
  "license": "MIT",
5
5
  "homepage": "https://likec4.dev",
6
6
  "author": "Denis Davydkov <denis@davydkov.com>",
@@ -69,6 +69,14 @@
69
69
  "default": "./dist/utils/index.mjs"
70
70
  }
71
71
  },
72
+ "./types/aux": {
73
+ "sources": "./src/types/aux.ts",
74
+ "default": {
75
+ "types": "./dist/types/aux.d.mts",
76
+ "import": "./dist/types/aux.mjs",
77
+ "default": "./dist/types/aux.mjs"
78
+ }
79
+ },
72
80
  "./types": {
73
81
  "sources": "./src/types/index.ts",
74
82
  "default": {
@@ -85,11 +93,11 @@
85
93
  "access": "public"
86
94
  },
87
95
  "dependencies": {
88
- "type-fest": "^4.40.0"
96
+ "type-fest": "^4.41.0"
89
97
  },
90
98
  "devDependencies": {
91
99
  "@dagrejs/dagre": "1.1.4",
92
- "@mantine/colors-generator": "8.0.1",
100
+ "@mantine/colors-generator": "8.1.0",
93
101
  "@types/natural-compare-lite": "^1.4.2",
94
102
  "@types/object-hash": "^3.0.6",
95
103
  "chroma-js": "^3.1.2",
@@ -102,12 +110,12 @@
102
110
  "natural-compare-lite": "^1.4.0",
103
111
  "object-hash": "^3.0.0",
104
112
  "obliterator": "^2.0.5",
105
- "remeda": "^2.21.3",
106
- "turbo": "^2.5.2",
113
+ "remeda": "^2.23.0",
114
+ "turbo": "^2.5.4",
107
115
  "typescript": "^5.8.3",
108
116
  "unbuild": "^3.5.0",
109
- "vitest": "^3.1.2",
110
- "@likec4/tsconfig": "1.31.0"
117
+ "vitest": "^3.2.3",
118
+ "@likec4/tsconfig": "1.32.0"
111
119
  },
112
120
  "scripts": {
113
121
  "typecheck": "tsc -b --verbose",
@@ -1,16 +1,16 @@
1
1
  import type { LastArrayElement, Split } from 'type-fest'
2
- import type { DeploymentElement, DeploymentRelation, Fqn } from '../types'
2
+ import type { DeploymentElement, DeploymentFqn, DeploymentRelationship } from '../types'
3
3
  import type { AnyTypes, Invalid, Types, ValidId } from './_types'
4
4
  import type { Builder } from './Builder'
5
5
  import type { AddDeploymentNode } from './Builder.deployment'
6
6
 
7
7
  export interface DeploymentModelBuilder<T extends AnyTypes> extends Builder<T> {
8
8
  __addDeployment(node: DeploymentElement): Builder<T>
9
- __addDeploymentRelation(rel: Omit<DeploymentRelation, 'id'>): Builder<T>
9
+ __addDeploymentRelation(rel: Omit<DeploymentRelationship, 'id'>): Builder<T>
10
10
  /**
11
11
  * Create a fully qualified name from an id (for nested models)
12
12
  */
13
- __fqn(id: string): Fqn
13
+ __deploymentFqn(id: string): DeploymentFqn
14
14
  }
15
15
 
16
16
  export function deployment<A extends AnyTypes>(): (input: Builder<A>) => Builder<A>
@@ -328,7 +328,23 @@ export function deployment(...ops: any[]) {
328
328
  type NameFromFqn<FQN extends string> = LastArrayElement<Split<FQN, '.'>>
329
329
 
330
330
  export type AddDeployedInstance<Props = unknown> = {
331
- // instanceOf(target, titleOrProps?)
331
+ /**
332
+ * @example
333
+ * ```ts
334
+ * builder.deployment(({ node, instanceOf }, _) =>
335
+ * _(
336
+ * node('node1').with(
337
+ * // Only FQN of the element
338
+ * instanceOf('cloud.backend'),
339
+ * // ID, FQN of the element and additional props
340
+ * instanceOf('b2', 'cloud.backend', {
341
+ * tags: ['tag2'],
342
+ * }),
343
+ * ),
344
+ * )
345
+ * )
346
+ * ```
347
+ */
332
348
  <
333
349
  const T extends AnyTypes,
334
350
  Id extends string & T['Fqn'],
@@ -336,7 +352,23 @@ export type AddDeployedInstance<Props = unknown> = {
336
352
  target: Id,
337
353
  ): (builder: DeploymentModelBuilder<T>) => DeploymentModelBuilder<Types.AddDeploymentFqn<T, NameFromFqn<Id>>>
338
354
 
339
- // instanceOf(id, target, titleOrProps?)
355
+ /**
356
+ * @example
357
+ * ```ts
358
+ * builder.deployment(({ node, instanceOf }, _) =>
359
+ * _(
360
+ * node('node1').with(
361
+ * // Only FQN of the element
362
+ * instanceOf('cloud.backend'),
363
+ * // ID, FQN of the element and additional props
364
+ * instanceOf('b2', 'cloud.backend', {
365
+ * tags: ['tag2'],
366
+ * }),
367
+ * ),
368
+ * )
369
+ * )
370
+ * ```
371
+ */
340
372
  <
341
373
  const Id extends string,
342
374
  T extends AnyTypes,
@@ -348,10 +380,32 @@ export type AddDeployedInstance<Props = unknown> = {
348
380
  ): (builder: DeploymentModelBuilder<T>) => DeploymentModelBuilder<Types.AddDeploymentFqn<T, Id>>
349
381
  }
350
382
 
351
- type AddDeploymentNodeHelper<T = unknown> = <const Id extends string>(
352
- id: ValidId<Id>,
353
- titleOrProps?: string | T,
354
- ) => AddDeploymentNode<Id>
383
+ type AddDeploymentNodeHelper<T = unknown> =
384
+ /**
385
+ * Adds deployment model
386
+ *
387
+ * @example
388
+ * builder.deployment(({ node }, _) =>
389
+ * _(
390
+ * node('node1').with(
391
+ * node('child1')
392
+ * ),
393
+ * )
394
+ * )
395
+ *
396
+ * @example
397
+ * builder.deployment((_,d) =>
398
+ * d(
399
+ * _.node('node1').with(
400
+ * _.node('child1')
401
+ * ),
402
+ * )
403
+ * )
404
+ */
405
+ <const Id extends string>(
406
+ id: ValidId<Id>,
407
+ titleOrProps?: string | T,
408
+ ) => AddDeploymentNode<Id>
355
409
 
356
410
  export type AddDeploymentNodeHelpers<T extends AnyTypes> = T extends
357
411
  Types<any, any, any, any, any, any, infer Kinds extends string, any> ? {
@@ -359,15 +413,25 @@ export type AddDeploymentNodeHelpers<T extends AnyTypes> = T extends
359
413
  }
360
414
  : Invalid<'No Deployment Kinds'>
361
415
 
362
- export type AddDeploymentRelation<Props = unknown> = <
363
- T extends AnyTypes,
364
- Source extends string & T['DeploymentFqn'],
365
- Target extends string & T['DeploymentFqn'],
366
- >(
367
- source: Source,
368
- target: Target,
369
- titleOrProps?: string | Props,
370
- ) => (builder: DeploymentModelBuilder<T>) => DeploymentModelBuilder<T>
416
+ export type AddDeploymentRelation<Props = unknown> =
417
+ /**
418
+ * @example
419
+ * ```ts
420
+ * rel('source.deployment', 'target.deployment', {
421
+ * title: 'title',
422
+ * tags: ['tag1'],
423
+ * })
424
+ * ```
425
+ */
426
+ <
427
+ T extends AnyTypes,
428
+ Source extends string & T['DeploymentFqn'],
429
+ Target extends string & T['DeploymentFqn'],
430
+ >(
431
+ source: Source,
432
+ target: Target,
433
+ titleOrProps?: string | Props,
434
+ ) => (builder: DeploymentModelBuilder<T>) => DeploymentModelBuilder<T>
371
435
 
372
436
  export type DeloymentModelHelpers<T extends AnyTypes> = AddDeploymentNodeHelpers<T> & {
373
437
  instanceOf: AddDeployedInstance<T['NewDeploymentNodeProps']>
@@ -55,35 +55,55 @@ type FromNested<T extends AnyTypes, N> = N extends TypesNested<any, any, infer F
55
55
  * Chainable builder to create element
56
56
  */
57
57
  export interface AddElement<Id extends string> {
58
+ /**
59
+ * @example
60
+ * ```ts
61
+ * el('a')
62
+ * ```
63
+ */
58
64
  <T extends AnyTypes>(builder: ModelBuilder<T>): ModelBuilder<Types.AddFqn<T, Id>>
59
65
 
66
+ /**
67
+ * @example
68
+ * ```ts
69
+ * el('a').with()
70
+ * ```
71
+ */
60
72
  with<T extends AnyTypes>(): (builder: ModelBuilder<T>) => ModelBuilder<Types.AddFqn<T, Id>>
61
73
 
74
+ /**
75
+ * @example
76
+ * ```ts
77
+ * el('a').with(
78
+ * relTo('b')
79
+ * )
80
+ * ```
81
+ */
62
82
  with<
63
83
  T extends AnyTypes,
64
- A extends AnyTypes
84
+ A extends AnyTypes,
65
85
  >(
66
- op1: (input: ModelBuilder<ToNested<T, Id>>) => ModelBuilder<A>
86
+ op1: (input: ModelBuilder<ToNested<T, Id>>) => ModelBuilder<A>,
67
87
  ): (builder: ModelBuilder<T>) => ModelBuilder<FromNested<T, A>>
68
88
 
69
89
  with<
70
90
  T extends AnyTypes,
71
91
  A extends AnyTypes,
72
- B extends AnyTypes
92
+ B extends AnyTypes,
73
93
  >(
74
94
  op1: (input: ModelBuilder<ToNested<T, Id>>) => ModelBuilder<A>,
75
- op2: (input: ModelBuilder<A>) => ModelBuilder<B>
95
+ op2: (input: ModelBuilder<A>) => ModelBuilder<B>,
76
96
  ): (builder: ModelBuilder<T>) => ModelBuilder<FromNested<T, B>>
77
97
 
78
98
  with<
79
99
  T extends AnyTypes,
80
100
  A extends AnyTypes,
81
101
  B extends AnyTypes,
82
- C extends AnyTypes
102
+ C extends AnyTypes,
83
103
  >(
84
104
  op1: (input: ModelBuilder<ToNested<T, Id>>) => ModelBuilder<A>,
85
105
  op2: (input: ModelBuilder<A>) => ModelBuilder<B>,
86
- op3: (input: ModelBuilder<B>) => ModelBuilder<C>
106
+ op3: (input: ModelBuilder<B>) => ModelBuilder<C>,
87
107
  ): (builder: ModelBuilder<T>) => ModelBuilder<FromNested<T, C>>
88
108
 
89
109
  with<
@@ -91,12 +111,12 @@ export interface AddElement<Id extends string> {
91
111
  A extends AnyTypes,
92
112
  B extends AnyTypes,
93
113
  C extends AnyTypes,
94
- D extends AnyTypes
114
+ D extends AnyTypes,
95
115
  >(
96
116
  op1: (input: ModelBuilder<ToNested<T, Id>>) => ModelBuilder<A>,
97
117
  op2: (input: ModelBuilder<A>) => ModelBuilder<B>,
98
118
  op3: (input: ModelBuilder<B>) => ModelBuilder<C>,
99
- op4: (input: ModelBuilder<C>) => ModelBuilder<D>
119
+ op4: (input: ModelBuilder<C>) => ModelBuilder<D>,
100
120
  ): (builder: ModelBuilder<T>) => ModelBuilder<FromNested<T, D>>
101
121
 
102
122
  with<
@@ -105,13 +125,13 @@ export interface AddElement<Id extends string> {
105
125
  B extends AnyTypes,
106
126
  C extends AnyTypes,
107
127
  D extends AnyTypes,
108
- E extends AnyTypes
128
+ E extends AnyTypes,
109
129
  >(
110
130
  op1: (input: ModelBuilder<ToNested<T, Id>>) => ModelBuilder<A>,
111
131
  op2: (input: ModelBuilder<A>) => ModelBuilder<B>,
112
132
  op3: (input: ModelBuilder<B>) => ModelBuilder<C>,
113
133
  op4: (input: ModelBuilder<C>) => ModelBuilder<D>,
114
- op5: (input: ModelBuilder<D>) => ModelBuilder<E>
134
+ op5: (input: ModelBuilder<D>) => ModelBuilder<E>,
115
135
  ): (builder: ModelBuilder<T>) => ModelBuilder<FromNested<T, E>>
116
136
 
117
137
  with<
@@ -121,14 +141,14 @@ export interface AddElement<Id extends string> {
121
141
  C extends AnyTypes,
122
142
  D extends AnyTypes,
123
143
  E extends AnyTypes,
124
- F extends AnyTypes
144
+ F extends AnyTypes,
125
145
  >(
126
146
  op1: (input: ModelBuilder<ToNested<T, Id>>) => ModelBuilder<A>,
127
147
  op2: (input: ModelBuilder<A>) => ModelBuilder<B>,
128
148
  op3: (input: ModelBuilder<B>) => ModelBuilder<C>,
129
149
  op4: (input: ModelBuilder<C>) => ModelBuilder<D>,
130
150
  op5: (input: ModelBuilder<D>) => ModelBuilder<E>,
131
- op6: (input: ModelBuilder<E>) => ModelBuilder<F>
151
+ op6: (input: ModelBuilder<E>) => ModelBuilder<F>,
132
152
  ): (builder: ModelBuilder<T>) => ModelBuilder<FromNested<T, F>>
133
153
 
134
154
  with<
@@ -139,7 +159,7 @@ export interface AddElement<Id extends string> {
139
159
  D extends AnyTypes,
140
160
  E extends AnyTypes,
141
161
  F extends AnyTypes,
142
- G extends AnyTypes
162
+ G extends AnyTypes,
143
163
  >(
144
164
  op1: (input: ModelBuilder<ToNested<T, Id>>) => ModelBuilder<A>,
145
165
  op2: (input: ModelBuilder<A>) => ModelBuilder<B>,
@@ -147,7 +167,7 @@ export interface AddElement<Id extends string> {
147
167
  op4: (input: ModelBuilder<C>) => ModelBuilder<D>,
148
168
  op5: (input: ModelBuilder<D>) => ModelBuilder<E>,
149
169
  op6: (input: ModelBuilder<E>) => ModelBuilder<F>,
150
- op7: (input: ModelBuilder<F>) => ModelBuilder<G>
170
+ op7: (input: ModelBuilder<F>) => ModelBuilder<G>,
151
171
  ): (builder: ModelBuilder<T>) => ModelBuilder<FromNested<T, G>>
152
172
 
153
173
  with<
@@ -159,7 +179,7 @@ export interface AddElement<Id extends string> {
159
179
  E extends AnyTypes,
160
180
  F extends AnyTypes,
161
181
  G extends AnyTypes,
162
- H extends AnyTypes
182
+ H extends AnyTypes,
163
183
  >(
164
184
  op1: (input: ModelBuilder<ToNested<T, Id>>) => ModelBuilder<A>,
165
185
  op2: (input: ModelBuilder<A>) => ModelBuilder<B>,
@@ -168,7 +188,7 @@ export interface AddElement<Id extends string> {
168
188
  op5: (input: ModelBuilder<D>) => ModelBuilder<E>,
169
189
  op6: (input: ModelBuilder<E>) => ModelBuilder<F>,
170
190
  op7: (input: ModelBuilder<F>) => ModelBuilder<G>,
171
- op8: (input: ModelBuilder<G>) => ModelBuilder<H>
191
+ op8: (input: ModelBuilder<G>) => ModelBuilder<H>,
172
192
  ): (builder: ModelBuilder<T>) => ModelBuilder<FromNested<T, H>>
173
193
 
174
194
  with<
@@ -181,7 +201,7 @@ export interface AddElement<Id extends string> {
181
201
  F extends AnyTypes,
182
202
  G extends AnyTypes,
183
203
  H extends AnyTypes,
184
- I extends AnyTypes
204
+ I extends AnyTypes,
185
205
  >(
186
206
  op1: (input: ModelBuilder<ToNested<T, Id>>) => ModelBuilder<A>,
187
207
  op2: (input: ModelBuilder<A>) => ModelBuilder<B>,
@@ -191,7 +211,7 @@ export interface AddElement<Id extends string> {
191
211
  op6: (input: ModelBuilder<E>) => ModelBuilder<F>,
192
212
  op7: (input: ModelBuilder<F>) => ModelBuilder<G>,
193
213
  op8: (input: ModelBuilder<G>) => ModelBuilder<H>,
194
- op9: (input: ModelBuilder<H>) => ModelBuilder<I>
214
+ op9: (input: ModelBuilder<H>) => ModelBuilder<I>,
195
215
  ): (builder: ModelBuilder<T>) => ModelBuilder<FromNested<T, I>>
196
216
 
197
217
  with<
@@ -205,7 +225,7 @@ export interface AddElement<Id extends string> {
205
225
  G extends AnyTypes,
206
226
  H extends AnyTypes,
207
227
  I extends AnyTypes,
208
- J extends AnyTypes
228
+ J extends AnyTypes,
209
229
  >(
210
230
  op1: (input: ModelBuilder<ToNested<T, Id>>) => ModelBuilder<A>,
211
231
  op2: (input: ModelBuilder<A>) => ModelBuilder<B>,
@@ -216,6 +236,6 @@ export interface AddElement<Id extends string> {
216
236
  op7: (input: ModelBuilder<F>) => ModelBuilder<G>,
217
237
  op8: (input: ModelBuilder<G>) => ModelBuilder<H>,
218
238
  op9: (input: ModelBuilder<H>) => ModelBuilder<I>,
219
- op10: (input: ModelBuilder<I>) => ModelBuilder<J>
239
+ op10: (input: ModelBuilder<I>) => ModelBuilder<J>,
220
240
  ): (builder: ModelBuilder<T>) => ModelBuilder<FromNested<T, J>>
221
241
  }
@@ -403,25 +403,74 @@ export function model(...ops: any[]) {
403
403
  }
404
404
  }
405
405
 
406
- export type RelationshipHelper<Props = unknown> = <
407
- T extends AnyTypes,
408
- From extends string & T['Fqn'],
409
- To extends string & T['Fqn'],
410
- >(
411
- from: From,
412
- to: To,
413
- titleOrProps?: string | Props,
414
- ) => (builder: ModelBuilder<T>) => ModelBuilder<T>
406
+ export type RelationshipHelper<Props = unknown> =
407
+ /**
408
+ * @example
409
+ * ```ts
410
+ * rel('a', 'b')
411
+ * ```
412
+ *
413
+ * @example
414
+ * ```ts
415
+ * rel('a', 'b', {
416
+ * title: 'title',
417
+ * tags: ['tag1'],
418
+ * })
419
+ * ```
420
+ */
421
+ <
422
+ T extends AnyTypes,
423
+ From extends string & T['Fqn'],
424
+ To extends string & T['Fqn'],
425
+ >(
426
+ from: From,
427
+ to: To,
428
+ titleOrProps?: string | Props,
429
+ ) => (builder: ModelBuilder<T>) => ModelBuilder<T>
415
430
 
416
- export type NestedRelationshipHelper<Props = unknown> = <T extends AnyTypesNested, To extends string & T['Fqn']>(
417
- to: To,
418
- titleOrProps?: string | Props,
419
- ) => (builder: ModelBuilder<T>) => ModelBuilder<T>
431
+ export type NestedRelationshipHelper<Props = unknown> =
432
+ /**
433
+ * @example
434
+ * ```ts
435
+ * el('a').with(
436
+ * relTo('b')
437
+ * )
438
+ * ```
439
+ *
440
+ * @example
441
+ * ```ts
442
+ * el('a').with(
443
+ * relTo('b', {
444
+ * title: 'title',
445
+ * tags: ['tag1'],
446
+ * })
447
+ * )
448
+ * ```
449
+ */
450
+ <T extends AnyTypesNested, To extends string & T['Fqn']>(
451
+ to: To,
452
+ titleOrProps?: string | Props,
453
+ ) => (builder: ModelBuilder<T>) => ModelBuilder<T>
420
454
 
421
- type AddElementHelper<T = unknown> = <const Id extends string>(
422
- id: ValidId<Id>,
423
- titleOrProps?: string | T,
424
- ) => AddElement<Id>
455
+ type AddElementHelper<T = unknown> =
456
+ /**
457
+ * @example
458
+ * ```ts
459
+ * el('some.id')
460
+ * ```
461
+ *
462
+ * @example
463
+ * ```ts
464
+ * el('some.id', {
465
+ * title: 'title',
466
+ * tags: ['tag1'],
467
+ * })
468
+ * ```
469
+ */
470
+ <const Id extends string>(
471
+ id: ValidId<Id>,
472
+ titleOrProps?: string | T,
473
+ ) => AddElement<Id>
425
474
 
426
475
  export type AddElementHelpers<T extends AnyTypes> = T extends
427
476
  Types<infer Kinds extends string, any, any, any, any, any, any, any> ? {