@likec4/core 1.12.1 → 1.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +777 -251
- package/dist/index.d.cts +301 -32
- package/dist/index.d.mts +301 -32
- package/dist/index.d.ts +301 -32
- package/dist/index.mjs +774 -252
- package/dist/shared/{core.BvFch1jG.mjs → core.BJDxVHFh.mjs} +19 -19
- package/dist/shared/{core.dY8efyk0.d.ts → core.C4jDMQ1i.d.cts} +242 -238
- package/dist/shared/{core.dY8efyk0.d.cts → core.C4jDMQ1i.d.mts} +242 -238
- package/dist/shared/{core.dY8efyk0.d.mts → core.C4jDMQ1i.d.ts} +242 -238
- package/dist/shared/{core.CTiE4teS.cjs → core.IR7XOEkQ.cjs} +19 -18
- package/dist/types/index.cjs +1 -1
- package/dist/types/index.d.cts +1 -1
- package/dist/types/index.d.mts +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.mjs +1 -1
- package/package.json +4 -3
- package/src/builder/Builder.element.ts +221 -0
- package/src/builder/Builder.model.ts +346 -0
- package/src/builder/Builder.test-d.ts +69 -0
- package/src/builder/Builder.ts +574 -0
- package/src/builder/Builder.view.ts +358 -0
- package/src/builder/Builder.views.ts +318 -0
- package/src/builder/_types.ts +195 -0
- package/src/builder/index.ts +5 -0
- package/src/index.ts +4 -0
- package/src/model/LikeC4DiagramModel.ts +5 -5
- package/src/model/LikeC4Model.ts +63 -46
- package/src/model/LikeC4ViewModel.ts +7 -7
- package/src/model/__test__/fixture.ts +5 -0
- package/src/types/element.ts +19 -11
- package/src/types/model.ts +13 -8
- package/src/types/relation.ts +1 -1
- package/src/types/view-changes.ts +6 -2
- package/src/types/view.ts +53 -22
- package/src/utils/fqn.ts +12 -11
|
@@ -0,0 +1,346 @@
|
|
|
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'
|
|
5
|
+
|
|
6
|
+
export interface ModelBuilder<T extends AnyTypes> {
|
|
7
|
+
addElement(element: Element): Builder<T>
|
|
8
|
+
addRelation(relation: Omit<Relation, 'id'>): Builder<T>
|
|
9
|
+
/**
|
|
10
|
+
* Create a fully qualified name from an id (for nested models)
|
|
11
|
+
*/
|
|
12
|
+
fqn(id: string): Fqn
|
|
13
|
+
addSourcelessRelation(relation: Omit<Relation, 'id' | 'source'>): Builder<T>
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export function model<
|
|
17
|
+
A extends AnyTypes,
|
|
18
|
+
B extends AnyTypes
|
|
19
|
+
>(
|
|
20
|
+
op1: (input: ModelBuilder<A>) => ModelBuilder<B>
|
|
21
|
+
): (input: Builder<A>) => Builder<B>
|
|
22
|
+
export function model<
|
|
23
|
+
A extends AnyTypes,
|
|
24
|
+
B extends AnyTypes,
|
|
25
|
+
C extends AnyTypes
|
|
26
|
+
>(
|
|
27
|
+
op1: (input: ModelBuilder<A>) => ModelBuilder<B>,
|
|
28
|
+
op2: (input: ModelBuilder<B>) => ModelBuilder<C>
|
|
29
|
+
): (input: Builder<A>) => Builder<C>
|
|
30
|
+
export function model<
|
|
31
|
+
A extends AnyTypes,
|
|
32
|
+
B extends AnyTypes,
|
|
33
|
+
C extends AnyTypes,
|
|
34
|
+
D extends AnyTypes
|
|
35
|
+
>(
|
|
36
|
+
op1: (input: ModelBuilder<A>) => ModelBuilder<B>,
|
|
37
|
+
op2: (input: ModelBuilder<B>) => ModelBuilder<C>,
|
|
38
|
+
op3: (input: ModelBuilder<C>) => ModelBuilder<D>
|
|
39
|
+
): (input: Builder<A>) => Builder<D>
|
|
40
|
+
export function model<
|
|
41
|
+
A extends AnyTypes,
|
|
42
|
+
B extends AnyTypes,
|
|
43
|
+
C extends AnyTypes,
|
|
44
|
+
D extends AnyTypes,
|
|
45
|
+
E extends AnyTypes
|
|
46
|
+
>(
|
|
47
|
+
op1: (input: ModelBuilder<A>) => ModelBuilder<B>,
|
|
48
|
+
op2: (input: ModelBuilder<B>) => ModelBuilder<C>,
|
|
49
|
+
op3: (input: ModelBuilder<C>) => ModelBuilder<D>,
|
|
50
|
+
op4: (input: ModelBuilder<D>) => ModelBuilder<E>
|
|
51
|
+
): (input: Builder<A>) => Builder<E>
|
|
52
|
+
export function model<
|
|
53
|
+
A extends AnyTypes,
|
|
54
|
+
B extends AnyTypes,
|
|
55
|
+
C extends AnyTypes,
|
|
56
|
+
D extends AnyTypes,
|
|
57
|
+
E extends AnyTypes,
|
|
58
|
+
F extends AnyTypes
|
|
59
|
+
>(
|
|
60
|
+
op1: (input: ModelBuilder<A>) => ModelBuilder<B>,
|
|
61
|
+
op2: (input: ModelBuilder<B>) => ModelBuilder<C>,
|
|
62
|
+
op3: (input: ModelBuilder<C>) => ModelBuilder<D>,
|
|
63
|
+
op4: (input: ModelBuilder<D>) => ModelBuilder<E>,
|
|
64
|
+
op5: (input: ModelBuilder<E>) => ModelBuilder<F>
|
|
65
|
+
): (input: Builder<A>) => Builder<F>
|
|
66
|
+
export function model<
|
|
67
|
+
A extends AnyTypes,
|
|
68
|
+
B extends AnyTypes,
|
|
69
|
+
C extends AnyTypes,
|
|
70
|
+
D extends AnyTypes,
|
|
71
|
+
E extends AnyTypes,
|
|
72
|
+
F extends AnyTypes,
|
|
73
|
+
G extends AnyTypes
|
|
74
|
+
>(
|
|
75
|
+
op1: (input: ModelBuilder<A>) => ModelBuilder<B>,
|
|
76
|
+
op2: (input: ModelBuilder<B>) => ModelBuilder<C>,
|
|
77
|
+
op3: (input: ModelBuilder<C>) => ModelBuilder<D>,
|
|
78
|
+
op4: (input: ModelBuilder<D>) => ModelBuilder<E>,
|
|
79
|
+
op5: (input: ModelBuilder<E>) => ModelBuilder<F>,
|
|
80
|
+
op6: (input: ModelBuilder<F>) => ModelBuilder<G>
|
|
81
|
+
): (input: Builder<A>) => Builder<G>
|
|
82
|
+
export function model<
|
|
83
|
+
A extends AnyTypes,
|
|
84
|
+
B extends AnyTypes,
|
|
85
|
+
C extends AnyTypes,
|
|
86
|
+
D extends AnyTypes,
|
|
87
|
+
E extends AnyTypes,
|
|
88
|
+
F extends AnyTypes,
|
|
89
|
+
G extends AnyTypes,
|
|
90
|
+
H extends AnyTypes
|
|
91
|
+
>(
|
|
92
|
+
op1: (input: ModelBuilder<A>) => ModelBuilder<B>,
|
|
93
|
+
op2: (input: ModelBuilder<B>) => ModelBuilder<C>,
|
|
94
|
+
op3: (input: ModelBuilder<C>) => ModelBuilder<D>,
|
|
95
|
+
op4: (input: ModelBuilder<D>) => ModelBuilder<E>,
|
|
96
|
+
op5: (input: ModelBuilder<E>) => ModelBuilder<F>,
|
|
97
|
+
op6: (input: ModelBuilder<F>) => ModelBuilder<G>,
|
|
98
|
+
op7: (input: ModelBuilder<G>) => ModelBuilder<H>
|
|
99
|
+
): (input: Builder<A>) => Builder<H>
|
|
100
|
+
export function model<
|
|
101
|
+
A extends AnyTypes,
|
|
102
|
+
B extends AnyTypes,
|
|
103
|
+
C extends AnyTypes,
|
|
104
|
+
D extends AnyTypes,
|
|
105
|
+
E extends AnyTypes,
|
|
106
|
+
F extends AnyTypes,
|
|
107
|
+
G extends AnyTypes,
|
|
108
|
+
H extends AnyTypes,
|
|
109
|
+
I extends AnyTypes
|
|
110
|
+
>(
|
|
111
|
+
op1: (input: ModelBuilder<A>) => ModelBuilder<B>,
|
|
112
|
+
op2: (input: ModelBuilder<B>) => ModelBuilder<C>,
|
|
113
|
+
op3: (input: ModelBuilder<C>) => ModelBuilder<D>,
|
|
114
|
+
op4: (input: ModelBuilder<D>) => ModelBuilder<E>,
|
|
115
|
+
op5: (input: ModelBuilder<E>) => ModelBuilder<F>,
|
|
116
|
+
op6: (input: ModelBuilder<F>) => ModelBuilder<G>,
|
|
117
|
+
op7: (input: ModelBuilder<G>) => ModelBuilder<H>,
|
|
118
|
+
op8: (input: ModelBuilder<H>) => ModelBuilder<I>
|
|
119
|
+
): (input: Builder<A>) => Builder<I>
|
|
120
|
+
export function model<
|
|
121
|
+
A extends AnyTypes,
|
|
122
|
+
B extends AnyTypes,
|
|
123
|
+
C extends AnyTypes,
|
|
124
|
+
D extends AnyTypes,
|
|
125
|
+
E extends AnyTypes,
|
|
126
|
+
F extends AnyTypes,
|
|
127
|
+
G extends AnyTypes,
|
|
128
|
+
H extends AnyTypes,
|
|
129
|
+
I extends AnyTypes,
|
|
130
|
+
J extends AnyTypes
|
|
131
|
+
>(
|
|
132
|
+
op1: (input: ModelBuilder<A>) => ModelBuilder<B>,
|
|
133
|
+
op2: (input: ModelBuilder<B>) => ModelBuilder<C>,
|
|
134
|
+
op3: (input: ModelBuilder<C>) => ModelBuilder<D>,
|
|
135
|
+
op4: (input: ModelBuilder<D>) => ModelBuilder<E>,
|
|
136
|
+
op5: (input: ModelBuilder<E>) => ModelBuilder<F>,
|
|
137
|
+
op6: (input: ModelBuilder<F>) => ModelBuilder<G>,
|
|
138
|
+
op7: (input: ModelBuilder<G>) => ModelBuilder<H>,
|
|
139
|
+
op8: (input: ModelBuilder<H>) => ModelBuilder<I>,
|
|
140
|
+
op9: (input: ModelBuilder<I>) => ModelBuilder<J>
|
|
141
|
+
): (input: Builder<A>) => Builder<J>
|
|
142
|
+
export function model<
|
|
143
|
+
A extends AnyTypes,
|
|
144
|
+
B extends AnyTypes,
|
|
145
|
+
C extends AnyTypes,
|
|
146
|
+
D extends AnyTypes,
|
|
147
|
+
E extends AnyTypes,
|
|
148
|
+
F extends AnyTypes,
|
|
149
|
+
G extends AnyTypes,
|
|
150
|
+
H extends AnyTypes,
|
|
151
|
+
I extends AnyTypes,
|
|
152
|
+
J extends AnyTypes,
|
|
153
|
+
K extends AnyTypes
|
|
154
|
+
>(
|
|
155
|
+
op1: (input: ModelBuilder<A>) => ModelBuilder<B>,
|
|
156
|
+
op2: (input: ModelBuilder<B>) => ModelBuilder<C>,
|
|
157
|
+
op3: (input: ModelBuilder<C>) => ModelBuilder<D>,
|
|
158
|
+
op4: (input: ModelBuilder<D>) => ModelBuilder<E>,
|
|
159
|
+
op5: (input: ModelBuilder<E>) => ModelBuilder<F>,
|
|
160
|
+
op6: (input: ModelBuilder<F>) => ModelBuilder<G>,
|
|
161
|
+
op7: (input: ModelBuilder<G>) => ModelBuilder<H>,
|
|
162
|
+
op8: (input: ModelBuilder<H>) => ModelBuilder<I>,
|
|
163
|
+
op9: (input: ModelBuilder<I>) => ModelBuilder<J>,
|
|
164
|
+
op10: (input: ModelBuilder<J>) => ModelBuilder<K>
|
|
165
|
+
): (input: Builder<A>) => Builder<K>
|
|
166
|
+
export function model<
|
|
167
|
+
A extends AnyTypes,
|
|
168
|
+
B extends AnyTypes,
|
|
169
|
+
C extends AnyTypes,
|
|
170
|
+
D extends AnyTypes,
|
|
171
|
+
E extends AnyTypes,
|
|
172
|
+
F extends AnyTypes,
|
|
173
|
+
G extends AnyTypes,
|
|
174
|
+
H extends AnyTypes,
|
|
175
|
+
I extends AnyTypes,
|
|
176
|
+
J extends AnyTypes,
|
|
177
|
+
K extends AnyTypes,
|
|
178
|
+
L extends AnyTypes
|
|
179
|
+
>(
|
|
180
|
+
op1: (input: ModelBuilder<A>) => ModelBuilder<B>,
|
|
181
|
+
op2: (input: ModelBuilder<B>) => ModelBuilder<C>,
|
|
182
|
+
op3: (input: ModelBuilder<C>) => ModelBuilder<D>,
|
|
183
|
+
op4: (input: ModelBuilder<D>) => ModelBuilder<E>,
|
|
184
|
+
op5: (input: ModelBuilder<E>) => ModelBuilder<F>,
|
|
185
|
+
op6: (input: ModelBuilder<F>) => ModelBuilder<G>,
|
|
186
|
+
op7: (input: ModelBuilder<G>) => ModelBuilder<H>,
|
|
187
|
+
op8: (input: ModelBuilder<H>) => ModelBuilder<I>,
|
|
188
|
+
op9: (input: ModelBuilder<I>) => ModelBuilder<J>,
|
|
189
|
+
op10: (input: ModelBuilder<J>) => ModelBuilder<K>,
|
|
190
|
+
op11: (input: ModelBuilder<K>) => ModelBuilder<L>
|
|
191
|
+
): (input: Builder<A>) => Builder<L>
|
|
192
|
+
export function model<
|
|
193
|
+
A extends AnyTypes,
|
|
194
|
+
B extends AnyTypes,
|
|
195
|
+
C extends AnyTypes,
|
|
196
|
+
D extends AnyTypes,
|
|
197
|
+
E extends AnyTypes,
|
|
198
|
+
F extends AnyTypes,
|
|
199
|
+
G extends AnyTypes,
|
|
200
|
+
H extends AnyTypes,
|
|
201
|
+
I extends AnyTypes,
|
|
202
|
+
J extends AnyTypes,
|
|
203
|
+
K extends AnyTypes,
|
|
204
|
+
L extends AnyTypes,
|
|
205
|
+
M extends AnyTypes
|
|
206
|
+
>(
|
|
207
|
+
op1: (input: ModelBuilder<A>) => ModelBuilder<B>,
|
|
208
|
+
op2: (input: ModelBuilder<B>) => ModelBuilder<C>,
|
|
209
|
+
op3: (input: ModelBuilder<C>) => ModelBuilder<D>,
|
|
210
|
+
op4: (input: ModelBuilder<D>) => ModelBuilder<E>,
|
|
211
|
+
op5: (input: ModelBuilder<E>) => ModelBuilder<F>,
|
|
212
|
+
op6: (input: ModelBuilder<F>) => ModelBuilder<G>,
|
|
213
|
+
op7: (input: ModelBuilder<G>) => ModelBuilder<H>,
|
|
214
|
+
op8: (input: ModelBuilder<H>) => ModelBuilder<I>,
|
|
215
|
+
op9: (input: ModelBuilder<I>) => ModelBuilder<J>,
|
|
216
|
+
op10: (input: ModelBuilder<J>) => ModelBuilder<K>,
|
|
217
|
+
op11: (input: ModelBuilder<K>) => ModelBuilder<L>,
|
|
218
|
+
op12: (input: ModelBuilder<L>) => ModelBuilder<M>
|
|
219
|
+
): (input: Builder<A>) => Builder<M>
|
|
220
|
+
export function model<
|
|
221
|
+
A extends AnyTypes,
|
|
222
|
+
B extends AnyTypes,
|
|
223
|
+
C extends AnyTypes,
|
|
224
|
+
D extends AnyTypes,
|
|
225
|
+
E extends AnyTypes,
|
|
226
|
+
F extends AnyTypes,
|
|
227
|
+
G extends AnyTypes,
|
|
228
|
+
H extends AnyTypes,
|
|
229
|
+
I extends AnyTypes,
|
|
230
|
+
J extends AnyTypes,
|
|
231
|
+
K extends AnyTypes,
|
|
232
|
+
L extends AnyTypes,
|
|
233
|
+
M extends AnyTypes,
|
|
234
|
+
N extends AnyTypes
|
|
235
|
+
>(
|
|
236
|
+
op1: (input: ModelBuilder<A>) => ModelBuilder<B>,
|
|
237
|
+
op2: (input: ModelBuilder<B>) => ModelBuilder<C>,
|
|
238
|
+
op3: (input: ModelBuilder<C>) => ModelBuilder<D>,
|
|
239
|
+
op4: (input: ModelBuilder<D>) => ModelBuilder<E>,
|
|
240
|
+
op5: (input: ModelBuilder<E>) => ModelBuilder<F>,
|
|
241
|
+
op6: (input: ModelBuilder<F>) => ModelBuilder<G>,
|
|
242
|
+
op7: (input: ModelBuilder<G>) => ModelBuilder<H>,
|
|
243
|
+
op8: (input: ModelBuilder<H>) => ModelBuilder<I>,
|
|
244
|
+
op9: (input: ModelBuilder<I>) => ModelBuilder<J>,
|
|
245
|
+
op10: (input: ModelBuilder<J>) => ModelBuilder<K>,
|
|
246
|
+
op11: (input: ModelBuilder<K>) => ModelBuilder<L>,
|
|
247
|
+
op12: (input: ModelBuilder<L>) => ModelBuilder<M>,
|
|
248
|
+
op13: (input: ModelBuilder<M>) => ModelBuilder<N>
|
|
249
|
+
): (input: Builder<A>) => Builder<N>
|
|
250
|
+
export function model<
|
|
251
|
+
A extends AnyTypes,
|
|
252
|
+
B extends AnyTypes,
|
|
253
|
+
C extends AnyTypes,
|
|
254
|
+
D extends AnyTypes,
|
|
255
|
+
E extends AnyTypes,
|
|
256
|
+
F extends AnyTypes,
|
|
257
|
+
G extends AnyTypes,
|
|
258
|
+
H extends AnyTypes,
|
|
259
|
+
I extends AnyTypes,
|
|
260
|
+
J extends AnyTypes,
|
|
261
|
+
K extends AnyTypes,
|
|
262
|
+
L extends AnyTypes,
|
|
263
|
+
M extends AnyTypes,
|
|
264
|
+
N extends AnyTypes,
|
|
265
|
+
O extends AnyTypes
|
|
266
|
+
>(
|
|
267
|
+
op1: (input: ModelBuilder<A>) => ModelBuilder<B>,
|
|
268
|
+
op2: (input: ModelBuilder<B>) => ModelBuilder<C>,
|
|
269
|
+
op3: (input: ModelBuilder<C>) => ModelBuilder<D>,
|
|
270
|
+
op4: (input: ModelBuilder<D>) => ModelBuilder<E>,
|
|
271
|
+
op5: (input: ModelBuilder<E>) => ModelBuilder<F>,
|
|
272
|
+
op6: (input: ModelBuilder<F>) => ModelBuilder<G>,
|
|
273
|
+
op7: (input: ModelBuilder<G>) => ModelBuilder<H>,
|
|
274
|
+
op8: (input: ModelBuilder<H>) => ModelBuilder<I>,
|
|
275
|
+
op9: (input: ModelBuilder<I>) => ModelBuilder<J>,
|
|
276
|
+
op10: (input: ModelBuilder<J>) => ModelBuilder<K>,
|
|
277
|
+
op11: (input: ModelBuilder<K>) => ModelBuilder<L>,
|
|
278
|
+
op12: (input: ModelBuilder<L>) => ModelBuilder<M>,
|
|
279
|
+
op13: (input: ModelBuilder<M>) => ModelBuilder<N>,
|
|
280
|
+
op14: (input: ModelBuilder<N>) => ModelBuilder<O>
|
|
281
|
+
): (input: Builder<A>) => Builder<O>
|
|
282
|
+
export function model<
|
|
283
|
+
A extends AnyTypes,
|
|
284
|
+
B extends AnyTypes,
|
|
285
|
+
C extends AnyTypes,
|
|
286
|
+
D extends AnyTypes,
|
|
287
|
+
E extends AnyTypes,
|
|
288
|
+
F extends AnyTypes,
|
|
289
|
+
G extends AnyTypes,
|
|
290
|
+
H extends AnyTypes,
|
|
291
|
+
I extends AnyTypes,
|
|
292
|
+
J extends AnyTypes,
|
|
293
|
+
K extends AnyTypes,
|
|
294
|
+
L extends AnyTypes,
|
|
295
|
+
M extends AnyTypes,
|
|
296
|
+
N extends AnyTypes,
|
|
297
|
+
O extends AnyTypes,
|
|
298
|
+
P extends AnyTypes
|
|
299
|
+
>(
|
|
300
|
+
op1: (input: ModelBuilder<A>) => ModelBuilder<B>,
|
|
301
|
+
op2: (input: ModelBuilder<B>) => ModelBuilder<C>,
|
|
302
|
+
op3: (input: ModelBuilder<C>) => ModelBuilder<D>,
|
|
303
|
+
op4: (input: ModelBuilder<D>) => ModelBuilder<E>,
|
|
304
|
+
op5: (input: ModelBuilder<E>) => ModelBuilder<F>,
|
|
305
|
+
op6: (input: ModelBuilder<F>) => ModelBuilder<G>,
|
|
306
|
+
op7: (input: ModelBuilder<G>) => ModelBuilder<H>,
|
|
307
|
+
op8: (input: ModelBuilder<H>) => ModelBuilder<I>,
|
|
308
|
+
op9: (input: ModelBuilder<I>) => ModelBuilder<J>,
|
|
309
|
+
op10: (input: ModelBuilder<J>) => ModelBuilder<K>,
|
|
310
|
+
op11: (input: ModelBuilder<K>) => ModelBuilder<L>,
|
|
311
|
+
op12: (input: ModelBuilder<L>) => ModelBuilder<M>,
|
|
312
|
+
op13: (input: ModelBuilder<M>) => ModelBuilder<N>,
|
|
313
|
+
op14: (input: ModelBuilder<N>) => ModelBuilder<O>,
|
|
314
|
+
op15: (input: ModelBuilder<O>) => ModelBuilder<P>
|
|
315
|
+
): (input: Builder<A>) => Builder<P>
|
|
316
|
+
|
|
317
|
+
export function model(...ops: any[]) {
|
|
318
|
+
return (input: Builder<any>) => {
|
|
319
|
+
let builder = input
|
|
320
|
+
for (const op of ops) {
|
|
321
|
+
builder = op(builder)
|
|
322
|
+
}
|
|
323
|
+
return builder
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
export type RelationshipHelper<Props = unknown> = <
|
|
328
|
+
T extends AnyTypes,
|
|
329
|
+
From extends string & T['Fqn'],
|
|
330
|
+
To extends string & T['Fqn']
|
|
331
|
+
>(
|
|
332
|
+
from: From,
|
|
333
|
+
to: To,
|
|
334
|
+
titleOrProps?: string | Props
|
|
335
|
+
) => (builder: ModelBuilder<T>) => ModelBuilder<T>
|
|
336
|
+
|
|
337
|
+
export type NestedRelationshipHelper<Props = unknown> = <T extends AnyTypesNested, To extends string & T['Fqn']>(
|
|
338
|
+
to: To,
|
|
339
|
+
titleOrProps?: string | Props
|
|
340
|
+
) => (builder: ModelBuilder<T>) => ModelBuilder<T>
|
|
341
|
+
|
|
342
|
+
export type ModelHelpers<T extends AnyTypes> = AddElementHelpers<T> & {
|
|
343
|
+
model: typeof model
|
|
344
|
+
rel: RelationshipHelper<T['NewRelationshipProps']>
|
|
345
|
+
relTo: NestedRelationshipHelper<T['NewRelationshipProps']>
|
|
346
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { expectTypeOf, test } from 'vitest'
|
|
2
|
+
import type { ParsedLikeC4Model } from '../types'
|
|
3
|
+
import { Builder } from './Builder'
|
|
4
|
+
|
|
5
|
+
test('should have types', () => {
|
|
6
|
+
const {
|
|
7
|
+
model: {
|
|
8
|
+
model,
|
|
9
|
+
actor,
|
|
10
|
+
system,
|
|
11
|
+
component,
|
|
12
|
+
relTo
|
|
13
|
+
},
|
|
14
|
+
views: {
|
|
15
|
+
views,
|
|
16
|
+
view,
|
|
17
|
+
viewOf,
|
|
18
|
+
$include
|
|
19
|
+
},
|
|
20
|
+
builder
|
|
21
|
+
} = Builder.forSpecification({
|
|
22
|
+
elements: {
|
|
23
|
+
actor: {
|
|
24
|
+
style: {
|
|
25
|
+
shape: 'person'
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
system: {},
|
|
29
|
+
component: {}
|
|
30
|
+
},
|
|
31
|
+
relationships: {
|
|
32
|
+
like: {},
|
|
33
|
+
dislike: {}
|
|
34
|
+
},
|
|
35
|
+
tags: ['tag1', 'tag2', 'tag1']
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
const m = builder
|
|
39
|
+
.with(
|
|
40
|
+
model(
|
|
41
|
+
actor('alice'),
|
|
42
|
+
actor('bob'),
|
|
43
|
+
system('cloud').with(
|
|
44
|
+
component('backend').with(
|
|
45
|
+
component('api'),
|
|
46
|
+
component('db')
|
|
47
|
+
),
|
|
48
|
+
component('frontend').with(
|
|
49
|
+
relTo('cloud.backend.api')
|
|
50
|
+
)
|
|
51
|
+
)
|
|
52
|
+
),
|
|
53
|
+
views(
|
|
54
|
+
view('index', $include('*')),
|
|
55
|
+
viewOf('cloud', 'cloud', $include('*'))
|
|
56
|
+
)
|
|
57
|
+
)
|
|
58
|
+
.build()
|
|
59
|
+
|
|
60
|
+
expectTypeOf(m).toEqualTypeOf(
|
|
61
|
+
{} as ParsedLikeC4Model<
|
|
62
|
+
'actor' | 'system' | 'component',
|
|
63
|
+
'like' | 'dislike',
|
|
64
|
+
'tag1' | 'tag2',
|
|
65
|
+
'alice' | 'bob' | 'cloud' | 'cloud.backend' | 'cloud.backend.api' | 'cloud.backend.db' | 'cloud.frontend',
|
|
66
|
+
'index' | 'cloud'
|
|
67
|
+
>
|
|
68
|
+
)
|
|
69
|
+
})
|