@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
@@ -1,53 +1,58 @@
1
- import type { Element, Fqn, Relation } from '../types'
2
- import type { AnyTypes, AnyTypesNested, Types, TypesNested } from './_types'
3
- import type { Builder } from './Builder'
4
- import type { AddElementHelpers } from './Builder.element'
1
+ import type { Element, Fqn, ModelRelation } from '../types'
2
+ import type { AnyTypes, AnyTypesNested, Invalid, Types, ValidId } from './_types'
3
+ import { Builder } from './Builder'
4
+ import type { AddElement } from './Builder.element'
5
5
 
6
- export interface ModelBuilder<T extends AnyTypes> {
7
- addElement(element: Element): Builder<T>
8
- addRelation(relation: Omit<Relation, 'id'>): Builder<T>
6
+ export interface ModelBuilder<T extends AnyTypes> extends Builder<T> {
7
+ __addElement(element: Element): Builder<T>
8
+ __addRelation(relation: Omit<ModelRelation, 'id'>): Builder<T>
9
9
  /**
10
10
  * Create a fully qualified name from an id (for nested models)
11
11
  */
12
- fqn(id: string): Fqn
13
- addSourcelessRelation(relation: Omit<Relation, 'id' | 'source'>): Builder<T>
12
+ __fqn(id: string): Fqn
13
+ __addSourcelessRelation(relation: Omit<ModelRelation, 'id' | 'source'>): Builder<T>
14
14
  }
15
15
 
16
16
  export function model<
17
17
  A extends AnyTypes,
18
- B extends AnyTypes
18
+ >(): (input: Builder<A>) => Builder<A>
19
+
20
+ export function model<
21
+ A extends AnyTypes,
22
+ B extends AnyTypes,
19
23
  >(
20
- op1: (input: ModelBuilder<A>) => ModelBuilder<B>
24
+ op1: (input: ModelBuilder<A>) => ModelBuilder<B>,
21
25
  ): (input: Builder<A>) => Builder<B>
26
+
22
27
  export function model<
23
28
  A extends AnyTypes,
24
29
  B extends AnyTypes,
25
- C extends AnyTypes
30
+ C extends AnyTypes,
26
31
  >(
27
32
  op1: (input: ModelBuilder<A>) => ModelBuilder<B>,
28
- op2: (input: ModelBuilder<B>) => ModelBuilder<C>
33
+ op2: (input: ModelBuilder<B>) => ModelBuilder<C>,
29
34
  ): (input: Builder<A>) => Builder<C>
30
35
  export function model<
31
36
  A extends AnyTypes,
32
37
  B extends AnyTypes,
33
38
  C extends AnyTypes,
34
- D extends AnyTypes
39
+ D extends AnyTypes,
35
40
  >(
36
41
  op1: (input: ModelBuilder<A>) => ModelBuilder<B>,
37
42
  op2: (input: ModelBuilder<B>) => ModelBuilder<C>,
38
- op3: (input: ModelBuilder<C>) => ModelBuilder<D>
43
+ op3: (input: ModelBuilder<C>) => ModelBuilder<D>,
39
44
  ): (input: Builder<A>) => Builder<D>
40
45
  export function model<
41
46
  A extends AnyTypes,
42
47
  B extends AnyTypes,
43
48
  C extends AnyTypes,
44
49
  D extends AnyTypes,
45
- E extends AnyTypes
50
+ E extends AnyTypes,
46
51
  >(
47
52
  op1: (input: ModelBuilder<A>) => ModelBuilder<B>,
48
53
  op2: (input: ModelBuilder<B>) => ModelBuilder<C>,
49
54
  op3: (input: ModelBuilder<C>) => ModelBuilder<D>,
50
- op4: (input: ModelBuilder<D>) => ModelBuilder<E>
55
+ op4: (input: ModelBuilder<D>) => ModelBuilder<E>,
51
56
  ): (input: Builder<A>) => Builder<E>
52
57
  export function model<
53
58
  A extends AnyTypes,
@@ -55,13 +60,13 @@ export function model<
55
60
  C extends AnyTypes,
56
61
  D extends AnyTypes,
57
62
  E extends AnyTypes,
58
- F extends AnyTypes
63
+ F extends AnyTypes,
59
64
  >(
60
65
  op1: (input: ModelBuilder<A>) => ModelBuilder<B>,
61
66
  op2: (input: ModelBuilder<B>) => ModelBuilder<C>,
62
67
  op3: (input: ModelBuilder<C>) => ModelBuilder<D>,
63
68
  op4: (input: ModelBuilder<D>) => ModelBuilder<E>,
64
- op5: (input: ModelBuilder<E>) => ModelBuilder<F>
69
+ op5: (input: ModelBuilder<E>) => ModelBuilder<F>,
65
70
  ): (input: Builder<A>) => Builder<F>
66
71
  export function model<
67
72
  A extends AnyTypes,
@@ -70,14 +75,14 @@ export function model<
70
75
  D extends AnyTypes,
71
76
  E extends AnyTypes,
72
77
  F extends AnyTypes,
73
- G extends AnyTypes
78
+ G extends AnyTypes,
74
79
  >(
75
80
  op1: (input: ModelBuilder<A>) => ModelBuilder<B>,
76
81
  op2: (input: ModelBuilder<B>) => ModelBuilder<C>,
77
82
  op3: (input: ModelBuilder<C>) => ModelBuilder<D>,
78
83
  op4: (input: ModelBuilder<D>) => ModelBuilder<E>,
79
84
  op5: (input: ModelBuilder<E>) => ModelBuilder<F>,
80
- op6: (input: ModelBuilder<F>) => ModelBuilder<G>
85
+ op6: (input: ModelBuilder<F>) => ModelBuilder<G>,
81
86
  ): (input: Builder<A>) => Builder<G>
82
87
  export function model<
83
88
  A extends AnyTypes,
@@ -87,7 +92,7 @@ export function model<
87
92
  E extends AnyTypes,
88
93
  F extends AnyTypes,
89
94
  G extends AnyTypes,
90
- H extends AnyTypes
95
+ H extends AnyTypes,
91
96
  >(
92
97
  op1: (input: ModelBuilder<A>) => ModelBuilder<B>,
93
98
  op2: (input: ModelBuilder<B>) => ModelBuilder<C>,
@@ -95,7 +100,7 @@ export function model<
95
100
  op4: (input: ModelBuilder<D>) => ModelBuilder<E>,
96
101
  op5: (input: ModelBuilder<E>) => ModelBuilder<F>,
97
102
  op6: (input: ModelBuilder<F>) => ModelBuilder<G>,
98
- op7: (input: ModelBuilder<G>) => ModelBuilder<H>
103
+ op7: (input: ModelBuilder<G>) => ModelBuilder<H>,
99
104
  ): (input: Builder<A>) => Builder<H>
100
105
  export function model<
101
106
  A extends AnyTypes,
@@ -106,7 +111,7 @@ export function model<
106
111
  F extends AnyTypes,
107
112
  G extends AnyTypes,
108
113
  H extends AnyTypes,
109
- I extends AnyTypes
114
+ I extends AnyTypes,
110
115
  >(
111
116
  op1: (input: ModelBuilder<A>) => ModelBuilder<B>,
112
117
  op2: (input: ModelBuilder<B>) => ModelBuilder<C>,
@@ -115,7 +120,7 @@ export function model<
115
120
  op5: (input: ModelBuilder<E>) => ModelBuilder<F>,
116
121
  op6: (input: ModelBuilder<F>) => ModelBuilder<G>,
117
122
  op7: (input: ModelBuilder<G>) => ModelBuilder<H>,
118
- op8: (input: ModelBuilder<H>) => ModelBuilder<I>
123
+ op8: (input: ModelBuilder<H>) => ModelBuilder<I>,
119
124
  ): (input: Builder<A>) => Builder<I>
120
125
  export function model<
121
126
  A extends AnyTypes,
@@ -127,7 +132,7 @@ export function model<
127
132
  G extends AnyTypes,
128
133
  H extends AnyTypes,
129
134
  I extends AnyTypes,
130
- J extends AnyTypes
135
+ J extends AnyTypes,
131
136
  >(
132
137
  op1: (input: ModelBuilder<A>) => ModelBuilder<B>,
133
138
  op2: (input: ModelBuilder<B>) => ModelBuilder<C>,
@@ -137,7 +142,7 @@ export function model<
137
142
  op6: (input: ModelBuilder<F>) => ModelBuilder<G>,
138
143
  op7: (input: ModelBuilder<G>) => ModelBuilder<H>,
139
144
  op8: (input: ModelBuilder<H>) => ModelBuilder<I>,
140
- op9: (input: ModelBuilder<I>) => ModelBuilder<J>
145
+ op9: (input: ModelBuilder<I>) => ModelBuilder<J>,
141
146
  ): (input: Builder<A>) => Builder<J>
142
147
  export function model<
143
148
  A extends AnyTypes,
@@ -150,7 +155,7 @@ export function model<
150
155
  H extends AnyTypes,
151
156
  I extends AnyTypes,
152
157
  J extends AnyTypes,
153
- K extends AnyTypes
158
+ K extends AnyTypes,
154
159
  >(
155
160
  op1: (input: ModelBuilder<A>) => ModelBuilder<B>,
156
161
  op2: (input: ModelBuilder<B>) => ModelBuilder<C>,
@@ -161,7 +166,7 @@ export function model<
161
166
  op7: (input: ModelBuilder<G>) => ModelBuilder<H>,
162
167
  op8: (input: ModelBuilder<H>) => ModelBuilder<I>,
163
168
  op9: (input: ModelBuilder<I>) => ModelBuilder<J>,
164
- op10: (input: ModelBuilder<J>) => ModelBuilder<K>
169
+ op10: (input: ModelBuilder<J>) => ModelBuilder<K>,
165
170
  ): (input: Builder<A>) => Builder<K>
166
171
  export function model<
167
172
  A extends AnyTypes,
@@ -175,7 +180,7 @@ export function model<
175
180
  I extends AnyTypes,
176
181
  J extends AnyTypes,
177
182
  K extends AnyTypes,
178
- L extends AnyTypes
183
+ L extends AnyTypes,
179
184
  >(
180
185
  op1: (input: ModelBuilder<A>) => ModelBuilder<B>,
181
186
  op2: (input: ModelBuilder<B>) => ModelBuilder<C>,
@@ -187,7 +192,7 @@ export function model<
187
192
  op8: (input: ModelBuilder<H>) => ModelBuilder<I>,
188
193
  op9: (input: ModelBuilder<I>) => ModelBuilder<J>,
189
194
  op10: (input: ModelBuilder<J>) => ModelBuilder<K>,
190
- op11: (input: ModelBuilder<K>) => ModelBuilder<L>
195
+ op11: (input: ModelBuilder<K>) => ModelBuilder<L>,
191
196
  ): (input: Builder<A>) => Builder<L>
192
197
  export function model<
193
198
  A extends AnyTypes,
@@ -202,7 +207,7 @@ export function model<
202
207
  J extends AnyTypes,
203
208
  K extends AnyTypes,
204
209
  L extends AnyTypes,
205
- M extends AnyTypes
210
+ M extends AnyTypes,
206
211
  >(
207
212
  op1: (input: ModelBuilder<A>) => ModelBuilder<B>,
208
213
  op2: (input: ModelBuilder<B>) => ModelBuilder<C>,
@@ -215,7 +220,7 @@ export function model<
215
220
  op9: (input: ModelBuilder<I>) => ModelBuilder<J>,
216
221
  op10: (input: ModelBuilder<J>) => ModelBuilder<K>,
217
222
  op11: (input: ModelBuilder<K>) => ModelBuilder<L>,
218
- op12: (input: ModelBuilder<L>) => ModelBuilder<M>
223
+ op12: (input: ModelBuilder<L>) => ModelBuilder<M>,
219
224
  ): (input: Builder<A>) => Builder<M>
220
225
  export function model<
221
226
  A extends AnyTypes,
@@ -231,7 +236,7 @@ export function model<
231
236
  K extends AnyTypes,
232
237
  L extends AnyTypes,
233
238
  M extends AnyTypes,
234
- N extends AnyTypes
239
+ N extends AnyTypes,
235
240
  >(
236
241
  op1: (input: ModelBuilder<A>) => ModelBuilder<B>,
237
242
  op2: (input: ModelBuilder<B>) => ModelBuilder<C>,
@@ -245,7 +250,7 @@ export function model<
245
250
  op10: (input: ModelBuilder<J>) => ModelBuilder<K>,
246
251
  op11: (input: ModelBuilder<K>) => ModelBuilder<L>,
247
252
  op12: (input: ModelBuilder<L>) => ModelBuilder<M>,
248
- op13: (input: ModelBuilder<M>) => ModelBuilder<N>
253
+ op13: (input: ModelBuilder<M>) => ModelBuilder<N>,
249
254
  ): (input: Builder<A>) => Builder<N>
250
255
  export function model<
251
256
  A extends AnyTypes,
@@ -262,7 +267,7 @@ export function model<
262
267
  L extends AnyTypes,
263
268
  M extends AnyTypes,
264
269
  N extends AnyTypes,
265
- O extends AnyTypes
270
+ O extends AnyTypes,
266
271
  >(
267
272
  op1: (input: ModelBuilder<A>) => ModelBuilder<B>,
268
273
  op2: (input: ModelBuilder<B>) => ModelBuilder<C>,
@@ -277,7 +282,7 @@ export function model<
277
282
  op11: (input: ModelBuilder<K>) => ModelBuilder<L>,
278
283
  op12: (input: ModelBuilder<L>) => ModelBuilder<M>,
279
284
  op13: (input: ModelBuilder<M>) => ModelBuilder<N>,
280
- op14: (input: ModelBuilder<N>) => ModelBuilder<O>
285
+ op14: (input: ModelBuilder<N>) => ModelBuilder<O>,
281
286
  ): (input: Builder<A>) => Builder<O>
282
287
  export function model<
283
288
  A extends AnyTypes,
@@ -295,7 +300,7 @@ export function model<
295
300
  M extends AnyTypes,
296
301
  N extends AnyTypes,
297
302
  O extends AnyTypes,
298
- P extends AnyTypes
303
+ P extends AnyTypes,
299
304
  >(
300
305
  op1: (input: ModelBuilder<A>) => ModelBuilder<B>,
301
306
  op2: (input: ModelBuilder<B>) => ModelBuilder<C>,
@@ -311,7 +316,7 @@ export function model<
311
316
  op12: (input: ModelBuilder<L>) => ModelBuilder<M>,
312
317
  op13: (input: ModelBuilder<M>) => ModelBuilder<N>,
313
318
  op14: (input: ModelBuilder<N>) => ModelBuilder<O>,
314
- op15: (input: ModelBuilder<O>) => ModelBuilder<P>
319
+ op15: (input: ModelBuilder<O>) => ModelBuilder<P>,
315
320
  ): (input: Builder<A>) => Builder<P>
316
321
 
317
322
  export function model(...ops: any[]) {
@@ -327,20 +332,40 @@ export function model(...ops: any[]) {
327
332
  export type RelationshipHelper<Props = unknown> = <
328
333
  T extends AnyTypes,
329
334
  From extends string & T['Fqn'],
330
- To extends string & T['Fqn']
335
+ To extends string & T['Fqn'],
331
336
  >(
332
337
  from: From,
333
338
  to: To,
334
- titleOrProps?: string | Props
339
+ titleOrProps?: string | Props,
335
340
  ) => (builder: ModelBuilder<T>) => ModelBuilder<T>
336
341
 
337
342
  export type NestedRelationshipHelper<Props = unknown> = <T extends AnyTypesNested, To extends string & T['Fqn']>(
338
343
  to: To,
339
- titleOrProps?: string | Props
344
+ titleOrProps?: string | Props,
340
345
  ) => (builder: ModelBuilder<T>) => ModelBuilder<T>
341
346
 
347
+ type AddElementHelper<T = unknown> = <const Id extends string>(
348
+ id: ValidId<Id>,
349
+ titleOrProps?: string | T,
350
+ ) => AddElement<Id>
351
+
352
+ export type AddElementHelpers<T extends AnyTypes> = T extends
353
+ Types<infer Kinds extends string, any, any, any, any, any, any, any> ? {
354
+ [Kind in Kinds]: AddElementHelper<T['NewElementProps']>
355
+ }
356
+ : Invalid<'No Element Kinds'>
357
+
342
358
  export type ModelHelpers<T extends AnyTypes> = AddElementHelpers<T> & {
343
359
  model: typeof model
344
360
  rel: RelationshipHelper<T['NewRelationshipProps']>
345
361
  relTo: NestedRelationshipHelper<T['NewRelationshipProps']>
346
362
  }
363
+
364
+ export type ModelBuilderFunction<A extends AnyTypes, B extends AnyTypes> = (
365
+ helpers: ModelHelpers<A> & {
366
+ _: ModelHelpers<A>['model']
367
+ },
368
+ add: ModelHelpers<A>['model'],
369
+ ) =>
370
+ | ((builder: ModelBuilder<A>) => ModelBuilder<B>)
371
+ | ((builder: Builder<A>) => Builder<B>)