@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,358 @@
|
|
|
1
|
+
import { isArray, isString, map } from 'remeda'
|
|
2
|
+
import type { LiteralUnion, Simplify, Tagged } from 'type-fest'
|
|
3
|
+
import {
|
|
4
|
+
type AutoLayoutDirection,
|
|
5
|
+
type CustomElementExpr,
|
|
6
|
+
type CustomRelationExpr,
|
|
7
|
+
type ElementExpression as C4ElementExpression,
|
|
8
|
+
type Expression as C4Expression,
|
|
9
|
+
type Fqn,
|
|
10
|
+
isElementPredicateExpr,
|
|
11
|
+
type NonEmptyArray,
|
|
12
|
+
type ViewRuleStyle,
|
|
13
|
+
type WhereOperator
|
|
14
|
+
} from '../types'
|
|
15
|
+
import type { AnyTypes, Types } from './_types'
|
|
16
|
+
import type { views, ViewsBuilder as Builder } from './Builder.views'
|
|
17
|
+
|
|
18
|
+
export interface ViewBuilder<T extends AnyTypes> {
|
|
19
|
+
include(...exprs: C4Expression[]): ViewBuilder<T>
|
|
20
|
+
exclude(...exprs: C4Expression[]): ViewBuilder<T>
|
|
21
|
+
style(rule: ViewRuleStyle): ViewBuilder<T>
|
|
22
|
+
autoLayout(layout: AutoLayoutDirection): ViewBuilder<T>
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export namespace ViewPredicate {
|
|
26
|
+
export type ElementExpr<Fqn extends string> = '*' | Fqn | `${Fqn}.*` | `${Fqn}._`
|
|
27
|
+
|
|
28
|
+
type AllExpression<ElementExpr extends string> =
|
|
29
|
+
| ElementExpr
|
|
30
|
+
| `-> ${ElementExpr} ->`
|
|
31
|
+
| `-> ${ElementExpr}`
|
|
32
|
+
| `${ElementExpr} ->`
|
|
33
|
+
| `${ElementExpr} ${'->' | '<->'} ${ElementExpr}`
|
|
34
|
+
|
|
35
|
+
export type Expression<T extends AnyTypes> = T extends Types<any, infer F extends string, any, any, any, any>
|
|
36
|
+
? AllExpression<ViewPredicate.ElementExpr<F>>
|
|
37
|
+
: never
|
|
38
|
+
|
|
39
|
+
export type WhereTag<Tag extends string> = `tag ${'is' | 'is not'} #${Tag}`
|
|
40
|
+
export type WhereKind<Kind extends string> = `kind ${'is' | 'is not'} ${Kind}`
|
|
41
|
+
|
|
42
|
+
export type WhereEq<Types extends AnyTypes> =
|
|
43
|
+
| ViewPredicate.WhereTag<Types['Tag']>
|
|
44
|
+
| ViewPredicate.WhereKind<Types['ElementKind']>
|
|
45
|
+
|
|
46
|
+
export type WhereOperator<Types extends AnyTypes> = ViewPredicate.WhereEq<Types> | {
|
|
47
|
+
and: NonEmptyArray<ViewPredicate.WhereOperator<Types>>
|
|
48
|
+
or?: never
|
|
49
|
+
not?: never
|
|
50
|
+
} | {
|
|
51
|
+
or: NonEmptyArray<ViewPredicate.WhereOperator<Types>>
|
|
52
|
+
and?: never
|
|
53
|
+
not?: never
|
|
54
|
+
} | {
|
|
55
|
+
not: ViewPredicate.WhereOperator<Types>
|
|
56
|
+
and?: never
|
|
57
|
+
or?: never
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export type Custom<Types extends AnyTypes> = {
|
|
61
|
+
where?: ViewPredicate.WhereOperator<Types>
|
|
62
|
+
with?: Simplify<
|
|
63
|
+
Omit<CustomElementExpr['custom'] & CustomRelationExpr['customRelation'], 'expr' | 'relation' | 'navigateTo'> & {
|
|
64
|
+
navigateTo?: Types['ViewId']
|
|
65
|
+
}
|
|
66
|
+
>
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export type ViewRuleBuilderOp<Types extends AnyTypes> = (b: ViewBuilder<Types>) => ViewBuilder<Types>
|
|
71
|
+
|
|
72
|
+
export interface AddViewHelper<Props = unknown> {
|
|
73
|
+
// <
|
|
74
|
+
// const Id extends string,
|
|
75
|
+
// T extends AnyTypes
|
|
76
|
+
// >(
|
|
77
|
+
// id: Id
|
|
78
|
+
// ): (builder: Builder<T>) => Builder<Types.AddView<T, Id>>
|
|
79
|
+
|
|
80
|
+
<
|
|
81
|
+
const Id extends string,
|
|
82
|
+
T extends AnyTypes
|
|
83
|
+
>(
|
|
84
|
+
id: Id,
|
|
85
|
+
builder: (b: ViewBuilder<T>) => ViewBuilder<T>
|
|
86
|
+
): (builder: Builder<T>) => Builder<Types.AddView<T, Id>>
|
|
87
|
+
|
|
88
|
+
<
|
|
89
|
+
const Id extends string,
|
|
90
|
+
T extends AnyTypes
|
|
91
|
+
>(
|
|
92
|
+
id: Id,
|
|
93
|
+
propsOrTitle: Props | string
|
|
94
|
+
): (builder: Builder<T>) => Builder<Types.AddView<T, Id>>
|
|
95
|
+
|
|
96
|
+
<
|
|
97
|
+
const Id extends string,
|
|
98
|
+
T extends AnyTypes
|
|
99
|
+
>(
|
|
100
|
+
id: Id,
|
|
101
|
+
propsOrTitle: Props | string | undefined,
|
|
102
|
+
builder: (b: ViewBuilder<T>) => ViewBuilder<T>
|
|
103
|
+
): (builder: Builder<T>) => Builder<Types.AddView<T, Id>>
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export interface AddViewOfHelper<Props = unknown> {
|
|
107
|
+
<
|
|
108
|
+
const Id extends string,
|
|
109
|
+
T extends AnyTypes,
|
|
110
|
+
Of extends string & T['Fqn']
|
|
111
|
+
>(
|
|
112
|
+
id: Id,
|
|
113
|
+
of: Of
|
|
114
|
+
): (builder: Builder<T>) => Builder<Types.AddView<T, Id>>
|
|
115
|
+
|
|
116
|
+
<
|
|
117
|
+
const Id extends string,
|
|
118
|
+
T extends AnyTypes,
|
|
119
|
+
Of extends string & T['Fqn']
|
|
120
|
+
>(
|
|
121
|
+
id: Id,
|
|
122
|
+
of: Of,
|
|
123
|
+
builder: (b: ViewBuilder<T>) => ViewBuilder<T>
|
|
124
|
+
): (builder: Builder<T>) => Builder<Types.AddView<T, Id>>
|
|
125
|
+
|
|
126
|
+
<
|
|
127
|
+
const Id extends string,
|
|
128
|
+
T extends AnyTypes,
|
|
129
|
+
Of extends string & T['Fqn']
|
|
130
|
+
>(
|
|
131
|
+
id: Id,
|
|
132
|
+
of: Of,
|
|
133
|
+
propsOrTitle: Props | string
|
|
134
|
+
): (builder: Builder<T>) => Builder<Types.AddView<T, Id>>
|
|
135
|
+
|
|
136
|
+
<
|
|
137
|
+
const Id extends string,
|
|
138
|
+
T extends AnyTypes,
|
|
139
|
+
Of extends string & T['Fqn']
|
|
140
|
+
>(
|
|
141
|
+
id: Id,
|
|
142
|
+
of: Of,
|
|
143
|
+
propsOrTitle: Props | string | undefined,
|
|
144
|
+
builder: (b: ViewBuilder<T>) => ViewBuilder<T>
|
|
145
|
+
): (builder: Builder<T>) => Builder<Types.AddView<T, Id>>
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// To hook types
|
|
149
|
+
type TypedC4Expression<Types extends AnyTypes> = Tagged<C4Expression, 'typed', Types>
|
|
150
|
+
|
|
151
|
+
function parseWhere(where: ViewPredicate.WhereOperator<AnyTypes>): WhereOperator<any, any> {
|
|
152
|
+
if (isString(where)) {
|
|
153
|
+
const op = where as LiteralUnion<ViewPredicate.WhereEq<AnyTypes>, string>
|
|
154
|
+
switch (true) {
|
|
155
|
+
case op.startsWith('tag is not #'):
|
|
156
|
+
return {
|
|
157
|
+
tag: {
|
|
158
|
+
neq: op.replace('tag is not #', '')
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
case op.startsWith('tag is #'):
|
|
162
|
+
return {
|
|
163
|
+
tag: {
|
|
164
|
+
eq: op.replace('tag is #', '')
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
case op.startsWith('kind is not '):
|
|
168
|
+
return {
|
|
169
|
+
kind: {
|
|
170
|
+
neq: op.replace('kind is not ', '')
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
case op.startsWith('kind is '):
|
|
174
|
+
return {
|
|
175
|
+
kind: {
|
|
176
|
+
eq: op.replace('kind is ', '')
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
default:
|
|
180
|
+
throw new Error(`Unknown where operator: ${where}`)
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
if (where.and) {
|
|
185
|
+
return {
|
|
186
|
+
and: map(where.and, parseWhere)
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
if (where.or) {
|
|
190
|
+
return {
|
|
191
|
+
or: map(where.or, parseWhere)
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
if (where.not) {
|
|
195
|
+
return {
|
|
196
|
+
not: parseWhere(where.not)
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
throw new Error(`Unknown where operator: ${where}`)
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
function $include<Types extends AnyTypes>(
|
|
204
|
+
...args:
|
|
205
|
+
| [ViewPredicate.Expression<Types>]
|
|
206
|
+
| [TypedC4Expression<Types>]
|
|
207
|
+
| [ViewPredicate.Expression<Types>, ViewPredicate.Custom<Types>]
|
|
208
|
+
): (b: ViewBuilder<Types>) => ViewBuilder<Types> {
|
|
209
|
+
return (b) => {
|
|
210
|
+
let expr = $expr(args[0]) as C4Expression
|
|
211
|
+
const isElement = isElementPredicateExpr(expr)
|
|
212
|
+
if (args.length === 2) {
|
|
213
|
+
const condition = args[1].where ? parseWhere(args[1].where) : undefined
|
|
214
|
+
if (condition) {
|
|
215
|
+
expr = {
|
|
216
|
+
where: {
|
|
217
|
+
expr: expr as any,
|
|
218
|
+
condition
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
const custom = args[1].with
|
|
224
|
+
if (custom) {
|
|
225
|
+
if (isElement) {
|
|
226
|
+
expr = {
|
|
227
|
+
custom: {
|
|
228
|
+
...custom,
|
|
229
|
+
expr: expr as any
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
} else {
|
|
233
|
+
expr = {
|
|
234
|
+
customRelation: {
|
|
235
|
+
...custom,
|
|
236
|
+
relation: expr as any
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
b.include(expr)
|
|
243
|
+
return b
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
function $exclude<Types extends AnyTypes>(
|
|
248
|
+
...args:
|
|
249
|
+
| [ViewPredicate.Expression<Types>]
|
|
250
|
+
| [TypedC4Expression<Types>]
|
|
251
|
+
| [ViewPredicate.Expression<Types>, ViewPredicate.Custom<Types>]
|
|
252
|
+
): (b: ViewBuilder<Types>) => ViewBuilder<Types> {
|
|
253
|
+
return (b) => {
|
|
254
|
+
let expr = $expr(args[0]) as C4Expression
|
|
255
|
+
if (args.length === 2 && args[1].where) {
|
|
256
|
+
const condition = parseWhere(args[1].where)
|
|
257
|
+
expr = {
|
|
258
|
+
where: {
|
|
259
|
+
expr: expr as any,
|
|
260
|
+
condition
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
b.exclude(expr)
|
|
265
|
+
return b
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
function $expr<Types extends AnyTypes>(expr: ViewPredicate.Expression<Types> | C4Expression): TypedC4Expression<Types> {
|
|
270
|
+
if (!isString(expr)) {
|
|
271
|
+
return expr as TypedC4Expression<Types>
|
|
272
|
+
}
|
|
273
|
+
if (expr === '*') {
|
|
274
|
+
return { wildcard: true } as TypedC4Expression<Types>
|
|
275
|
+
}
|
|
276
|
+
if (expr.startsWith('->')) {
|
|
277
|
+
if (expr.endsWith('->')) {
|
|
278
|
+
return {
|
|
279
|
+
inout: $expr(expr.replace(/->/g, '').trim()) as any
|
|
280
|
+
} as TypedC4Expression<Types>
|
|
281
|
+
}
|
|
282
|
+
return {
|
|
283
|
+
incoming: $expr(expr.replace('-> ', '')) as any
|
|
284
|
+
} as TypedC4Expression<Types>
|
|
285
|
+
}
|
|
286
|
+
if (expr.endsWith(' ->')) {
|
|
287
|
+
return {
|
|
288
|
+
outgoing: $expr(expr.replace(' ->', '')) as any
|
|
289
|
+
} as TypedC4Expression<Types>
|
|
290
|
+
}
|
|
291
|
+
if (expr.includes(' <-> ')) {
|
|
292
|
+
const [source, target] = expr.split(' <-> ')
|
|
293
|
+
return {
|
|
294
|
+
source: $expr(source) as any,
|
|
295
|
+
target: $expr(target) as any,
|
|
296
|
+
isBidirectional: true
|
|
297
|
+
} as TypedC4Expression<Types>
|
|
298
|
+
}
|
|
299
|
+
if (expr.includes(' -> ')) {
|
|
300
|
+
const [source, target] = expr.split(' -> ')
|
|
301
|
+
return {
|
|
302
|
+
source: $expr(source) as any,
|
|
303
|
+
target: $expr(target) as any
|
|
304
|
+
} as TypedC4Expression<Types>
|
|
305
|
+
}
|
|
306
|
+
if (expr.endsWith('._')) {
|
|
307
|
+
return {
|
|
308
|
+
expanded: expr.replace('._', '') as Fqn
|
|
309
|
+
} as TypedC4Expression<Types>
|
|
310
|
+
}
|
|
311
|
+
if (expr.endsWith('.*')) {
|
|
312
|
+
return {
|
|
313
|
+
element: expr.replace('.*', '') as Fqn,
|
|
314
|
+
isDescedants: true
|
|
315
|
+
} as TypedC4Expression<Types>
|
|
316
|
+
}
|
|
317
|
+
return {
|
|
318
|
+
element: expr as any as Fqn,
|
|
319
|
+
isDescedants: false
|
|
320
|
+
} as TypedC4Expression<Types>
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
function $style<Types extends AnyTypes>(
|
|
324
|
+
element: ViewPredicate.ElementExpr<Types['Fqn']> | NonEmptyArray<ViewPredicate.ElementExpr<Types['Fqn']>>,
|
|
325
|
+
{ notation, ...style }: ViewRuleStyle['style'] & { notation?: string }
|
|
326
|
+
): (b: ViewBuilder<Types>) => ViewBuilder<Types> {
|
|
327
|
+
return (b) =>
|
|
328
|
+
b.style({
|
|
329
|
+
targets: (isArray(element) ? element : [element]).map(e => $expr(e) as C4ElementExpression),
|
|
330
|
+
...notation ? { notation } : {},
|
|
331
|
+
style: {
|
|
332
|
+
...style
|
|
333
|
+
}
|
|
334
|
+
})
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
function $autoLayout<Types extends AnyTypes>(
|
|
338
|
+
layout: AutoLayoutDirection
|
|
339
|
+
): (b: ViewBuilder<Types>) => ViewBuilder<Types> {
|
|
340
|
+
return (b) => b.autoLayout(layout)
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
function $rules<T extends AnyTypes>(...rules: ViewRuleBuilderOp<T>[]): (b: ViewBuilder<T>) => ViewBuilder<T> {
|
|
344
|
+
return (b) => rules.reduce((b, rule) => rule(b), b)
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
export { $autoLayout, $exclude, $expr, $include, $rules, $style }
|
|
348
|
+
|
|
349
|
+
export type ViewHelpers<T = unknown> = {
|
|
350
|
+
views: typeof views
|
|
351
|
+
view: AddViewHelper<T>
|
|
352
|
+
viewOf: AddViewOfHelper<T>
|
|
353
|
+
$include: typeof $include
|
|
354
|
+
$exclude: typeof $exclude
|
|
355
|
+
$style: typeof $style
|
|
356
|
+
$rules: typeof $rules
|
|
357
|
+
$autoLayout: typeof $autoLayout
|
|
358
|
+
}
|
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
import type { LikeC4View } from '../types'
|
|
2
|
+
import type { AnyTypes } from './_types'
|
|
3
|
+
import type { Builder } from './Builder'
|
|
4
|
+
|
|
5
|
+
export interface ViewsBuilder<T extends AnyTypes> {
|
|
6
|
+
addView(view: LikeC4View): Builder<T>
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export function views<
|
|
10
|
+
A extends AnyTypes,
|
|
11
|
+
B extends AnyTypes
|
|
12
|
+
>(
|
|
13
|
+
op1: (input: ViewsBuilder<A>) => ViewsBuilder<B>
|
|
14
|
+
): (input: Builder<A>) => Builder<B>
|
|
15
|
+
export function views<
|
|
16
|
+
A extends AnyTypes,
|
|
17
|
+
B extends AnyTypes,
|
|
18
|
+
C extends AnyTypes
|
|
19
|
+
>(
|
|
20
|
+
op1: (input: ViewsBuilder<A>) => ViewsBuilder<B>,
|
|
21
|
+
op2: (input: ViewsBuilder<B>) => ViewsBuilder<C>
|
|
22
|
+
): (input: Builder<A>) => Builder<C>
|
|
23
|
+
export function views<
|
|
24
|
+
A extends AnyTypes,
|
|
25
|
+
B extends AnyTypes,
|
|
26
|
+
C extends AnyTypes,
|
|
27
|
+
D extends AnyTypes
|
|
28
|
+
>(
|
|
29
|
+
op1: (input: ViewsBuilder<A>) => ViewsBuilder<B>,
|
|
30
|
+
op2: (input: ViewsBuilder<B>) => ViewsBuilder<C>,
|
|
31
|
+
op3: (input: ViewsBuilder<C>) => ViewsBuilder<D>
|
|
32
|
+
): (input: Builder<A>) => Builder<D>
|
|
33
|
+
export function views<
|
|
34
|
+
A extends AnyTypes,
|
|
35
|
+
B extends AnyTypes,
|
|
36
|
+
C extends AnyTypes,
|
|
37
|
+
D extends AnyTypes,
|
|
38
|
+
E extends AnyTypes
|
|
39
|
+
>(
|
|
40
|
+
op1: (input: ViewsBuilder<A>) => ViewsBuilder<B>,
|
|
41
|
+
op2: (input: ViewsBuilder<B>) => ViewsBuilder<C>,
|
|
42
|
+
op3: (input: ViewsBuilder<C>) => ViewsBuilder<D>,
|
|
43
|
+
op4: (input: ViewsBuilder<D>) => ViewsBuilder<E>
|
|
44
|
+
): (input: Builder<A>) => Builder<E>
|
|
45
|
+
export function views<
|
|
46
|
+
A extends AnyTypes,
|
|
47
|
+
B extends AnyTypes,
|
|
48
|
+
C extends AnyTypes,
|
|
49
|
+
D extends AnyTypes,
|
|
50
|
+
E extends AnyTypes,
|
|
51
|
+
F extends AnyTypes
|
|
52
|
+
>(
|
|
53
|
+
op1: (input: ViewsBuilder<A>) => ViewsBuilder<B>,
|
|
54
|
+
op2: (input: ViewsBuilder<B>) => ViewsBuilder<C>,
|
|
55
|
+
op3: (input: ViewsBuilder<C>) => ViewsBuilder<D>,
|
|
56
|
+
op4: (input: ViewsBuilder<D>) => ViewsBuilder<E>,
|
|
57
|
+
op5: (input: ViewsBuilder<E>) => ViewsBuilder<F>
|
|
58
|
+
): (input: Builder<A>) => Builder<F>
|
|
59
|
+
export function views<
|
|
60
|
+
A extends AnyTypes,
|
|
61
|
+
B extends AnyTypes,
|
|
62
|
+
C extends AnyTypes,
|
|
63
|
+
D extends AnyTypes,
|
|
64
|
+
E extends AnyTypes,
|
|
65
|
+
F extends AnyTypes,
|
|
66
|
+
G extends AnyTypes
|
|
67
|
+
>(
|
|
68
|
+
op1: (input: ViewsBuilder<A>) => ViewsBuilder<B>,
|
|
69
|
+
op2: (input: ViewsBuilder<B>) => ViewsBuilder<C>,
|
|
70
|
+
op3: (input: ViewsBuilder<C>) => ViewsBuilder<D>,
|
|
71
|
+
op4: (input: ViewsBuilder<D>) => ViewsBuilder<E>,
|
|
72
|
+
op5: (input: ViewsBuilder<E>) => ViewsBuilder<F>,
|
|
73
|
+
op6: (input: ViewsBuilder<F>) => ViewsBuilder<G>
|
|
74
|
+
): (input: Builder<A>) => Builder<G>
|
|
75
|
+
export function views<
|
|
76
|
+
A extends AnyTypes,
|
|
77
|
+
B extends AnyTypes,
|
|
78
|
+
C extends AnyTypes,
|
|
79
|
+
D extends AnyTypes,
|
|
80
|
+
E extends AnyTypes,
|
|
81
|
+
F extends AnyTypes,
|
|
82
|
+
G extends AnyTypes,
|
|
83
|
+
H extends AnyTypes
|
|
84
|
+
>(
|
|
85
|
+
op1: (input: ViewsBuilder<A>) => ViewsBuilder<B>,
|
|
86
|
+
op2: (input: ViewsBuilder<B>) => ViewsBuilder<C>,
|
|
87
|
+
op3: (input: ViewsBuilder<C>) => ViewsBuilder<D>,
|
|
88
|
+
op4: (input: ViewsBuilder<D>) => ViewsBuilder<E>,
|
|
89
|
+
op5: (input: ViewsBuilder<E>) => ViewsBuilder<F>,
|
|
90
|
+
op6: (input: ViewsBuilder<F>) => ViewsBuilder<G>,
|
|
91
|
+
op7: (input: ViewsBuilder<G>) => ViewsBuilder<H>
|
|
92
|
+
): (input: Builder<A>) => Builder<H>
|
|
93
|
+
export function views<
|
|
94
|
+
A extends AnyTypes,
|
|
95
|
+
B extends AnyTypes,
|
|
96
|
+
C extends AnyTypes,
|
|
97
|
+
D extends AnyTypes,
|
|
98
|
+
E extends AnyTypes,
|
|
99
|
+
F extends AnyTypes,
|
|
100
|
+
G extends AnyTypes,
|
|
101
|
+
H extends AnyTypes,
|
|
102
|
+
I extends AnyTypes
|
|
103
|
+
>(
|
|
104
|
+
op1: (input: ViewsBuilder<A>) => ViewsBuilder<B>,
|
|
105
|
+
op2: (input: ViewsBuilder<B>) => ViewsBuilder<C>,
|
|
106
|
+
op3: (input: ViewsBuilder<C>) => ViewsBuilder<D>,
|
|
107
|
+
op4: (input: ViewsBuilder<D>) => ViewsBuilder<E>,
|
|
108
|
+
op5: (input: ViewsBuilder<E>) => ViewsBuilder<F>,
|
|
109
|
+
op6: (input: ViewsBuilder<F>) => ViewsBuilder<G>,
|
|
110
|
+
op7: (input: ViewsBuilder<G>) => ViewsBuilder<H>,
|
|
111
|
+
op8: (input: ViewsBuilder<H>) => ViewsBuilder<I>
|
|
112
|
+
): (input: Builder<A>) => Builder<I>
|
|
113
|
+
export function views<
|
|
114
|
+
A extends AnyTypes,
|
|
115
|
+
B extends AnyTypes,
|
|
116
|
+
C extends AnyTypes,
|
|
117
|
+
D extends AnyTypes,
|
|
118
|
+
E extends AnyTypes,
|
|
119
|
+
F extends AnyTypes,
|
|
120
|
+
G extends AnyTypes,
|
|
121
|
+
H extends AnyTypes,
|
|
122
|
+
I extends AnyTypes,
|
|
123
|
+
J extends AnyTypes
|
|
124
|
+
>(
|
|
125
|
+
op1: (input: ViewsBuilder<A>) => ViewsBuilder<B>,
|
|
126
|
+
op2: (input: ViewsBuilder<B>) => ViewsBuilder<C>,
|
|
127
|
+
op3: (input: ViewsBuilder<C>) => ViewsBuilder<D>,
|
|
128
|
+
op4: (input: ViewsBuilder<D>) => ViewsBuilder<E>,
|
|
129
|
+
op5: (input: ViewsBuilder<E>) => ViewsBuilder<F>,
|
|
130
|
+
op6: (input: ViewsBuilder<F>) => ViewsBuilder<G>,
|
|
131
|
+
op7: (input: ViewsBuilder<G>) => ViewsBuilder<H>,
|
|
132
|
+
op8: (input: ViewsBuilder<H>) => ViewsBuilder<I>,
|
|
133
|
+
op9: (input: ViewsBuilder<I>) => ViewsBuilder<J>
|
|
134
|
+
): (input: Builder<A>) => Builder<J>
|
|
135
|
+
export function views<
|
|
136
|
+
A extends AnyTypes,
|
|
137
|
+
B extends AnyTypes,
|
|
138
|
+
C extends AnyTypes,
|
|
139
|
+
D extends AnyTypes,
|
|
140
|
+
E extends AnyTypes,
|
|
141
|
+
F extends AnyTypes,
|
|
142
|
+
G extends AnyTypes,
|
|
143
|
+
H extends AnyTypes,
|
|
144
|
+
I extends AnyTypes,
|
|
145
|
+
J extends AnyTypes,
|
|
146
|
+
K extends AnyTypes
|
|
147
|
+
>(
|
|
148
|
+
op1: (input: ViewsBuilder<A>) => ViewsBuilder<B>,
|
|
149
|
+
op2: (input: ViewsBuilder<B>) => ViewsBuilder<C>,
|
|
150
|
+
op3: (input: ViewsBuilder<C>) => ViewsBuilder<D>,
|
|
151
|
+
op4: (input: ViewsBuilder<D>) => ViewsBuilder<E>,
|
|
152
|
+
op5: (input: ViewsBuilder<E>) => ViewsBuilder<F>,
|
|
153
|
+
op6: (input: ViewsBuilder<F>) => ViewsBuilder<G>,
|
|
154
|
+
op7: (input: ViewsBuilder<G>) => ViewsBuilder<H>,
|
|
155
|
+
op8: (input: ViewsBuilder<H>) => ViewsBuilder<I>,
|
|
156
|
+
op9: (input: ViewsBuilder<I>) => ViewsBuilder<J>,
|
|
157
|
+
op10: (input: ViewsBuilder<J>) => ViewsBuilder<K>
|
|
158
|
+
): (input: Builder<A>) => Builder<K>
|
|
159
|
+
export function views<
|
|
160
|
+
A extends AnyTypes,
|
|
161
|
+
B extends AnyTypes,
|
|
162
|
+
C extends AnyTypes,
|
|
163
|
+
D extends AnyTypes,
|
|
164
|
+
E extends AnyTypes,
|
|
165
|
+
F extends AnyTypes,
|
|
166
|
+
G extends AnyTypes,
|
|
167
|
+
H extends AnyTypes,
|
|
168
|
+
I extends AnyTypes,
|
|
169
|
+
J extends AnyTypes,
|
|
170
|
+
K extends AnyTypes,
|
|
171
|
+
L extends AnyTypes
|
|
172
|
+
>(
|
|
173
|
+
op1: (input: ViewsBuilder<A>) => ViewsBuilder<B>,
|
|
174
|
+
op2: (input: ViewsBuilder<B>) => ViewsBuilder<C>,
|
|
175
|
+
op3: (input: ViewsBuilder<C>) => ViewsBuilder<D>,
|
|
176
|
+
op4: (input: ViewsBuilder<D>) => ViewsBuilder<E>,
|
|
177
|
+
op5: (input: ViewsBuilder<E>) => ViewsBuilder<F>,
|
|
178
|
+
op6: (input: ViewsBuilder<F>) => ViewsBuilder<G>,
|
|
179
|
+
op7: (input: ViewsBuilder<G>) => ViewsBuilder<H>,
|
|
180
|
+
op8: (input: ViewsBuilder<H>) => ViewsBuilder<I>,
|
|
181
|
+
op9: (input: ViewsBuilder<I>) => ViewsBuilder<J>,
|
|
182
|
+
op10: (input: ViewsBuilder<J>) => ViewsBuilder<K>,
|
|
183
|
+
op11: (input: ViewsBuilder<K>) => ViewsBuilder<L>
|
|
184
|
+
): (input: Builder<A>) => Builder<L>
|
|
185
|
+
export function views<
|
|
186
|
+
A extends AnyTypes,
|
|
187
|
+
B extends AnyTypes,
|
|
188
|
+
C extends AnyTypes,
|
|
189
|
+
D extends AnyTypes,
|
|
190
|
+
E extends AnyTypes,
|
|
191
|
+
F extends AnyTypes,
|
|
192
|
+
G extends AnyTypes,
|
|
193
|
+
H extends AnyTypes,
|
|
194
|
+
I extends AnyTypes,
|
|
195
|
+
J extends AnyTypes,
|
|
196
|
+
K extends AnyTypes,
|
|
197
|
+
L extends AnyTypes,
|
|
198
|
+
M extends AnyTypes
|
|
199
|
+
>(
|
|
200
|
+
op1: (input: ViewsBuilder<A>) => ViewsBuilder<B>,
|
|
201
|
+
op2: (input: ViewsBuilder<B>) => ViewsBuilder<C>,
|
|
202
|
+
op3: (input: ViewsBuilder<C>) => ViewsBuilder<D>,
|
|
203
|
+
op4: (input: ViewsBuilder<D>) => ViewsBuilder<E>,
|
|
204
|
+
op5: (input: ViewsBuilder<E>) => ViewsBuilder<F>,
|
|
205
|
+
op6: (input: ViewsBuilder<F>) => ViewsBuilder<G>,
|
|
206
|
+
op7: (input: ViewsBuilder<G>) => ViewsBuilder<H>,
|
|
207
|
+
op8: (input: ViewsBuilder<H>) => ViewsBuilder<I>,
|
|
208
|
+
op9: (input: ViewsBuilder<I>) => ViewsBuilder<J>,
|
|
209
|
+
op10: (input: ViewsBuilder<J>) => ViewsBuilder<K>,
|
|
210
|
+
op11: (input: ViewsBuilder<K>) => ViewsBuilder<L>,
|
|
211
|
+
op12: (input: ViewsBuilder<L>) => ViewsBuilder<M>
|
|
212
|
+
): (input: Builder<A>) => Builder<M>
|
|
213
|
+
export function views<
|
|
214
|
+
A extends AnyTypes,
|
|
215
|
+
B extends AnyTypes,
|
|
216
|
+
C extends AnyTypes,
|
|
217
|
+
D extends AnyTypes,
|
|
218
|
+
E extends AnyTypes,
|
|
219
|
+
F extends AnyTypes,
|
|
220
|
+
G extends AnyTypes,
|
|
221
|
+
H extends AnyTypes,
|
|
222
|
+
I extends AnyTypes,
|
|
223
|
+
J extends AnyTypes,
|
|
224
|
+
K extends AnyTypes,
|
|
225
|
+
L extends AnyTypes,
|
|
226
|
+
M extends AnyTypes,
|
|
227
|
+
N extends AnyTypes
|
|
228
|
+
>(
|
|
229
|
+
op1: (input: ViewsBuilder<A>) => ViewsBuilder<B>,
|
|
230
|
+
op2: (input: ViewsBuilder<B>) => ViewsBuilder<C>,
|
|
231
|
+
op3: (input: ViewsBuilder<C>) => ViewsBuilder<D>,
|
|
232
|
+
op4: (input: ViewsBuilder<D>) => ViewsBuilder<E>,
|
|
233
|
+
op5: (input: ViewsBuilder<E>) => ViewsBuilder<F>,
|
|
234
|
+
op6: (input: ViewsBuilder<F>) => ViewsBuilder<G>,
|
|
235
|
+
op7: (input: ViewsBuilder<G>) => ViewsBuilder<H>,
|
|
236
|
+
op8: (input: ViewsBuilder<H>) => ViewsBuilder<I>,
|
|
237
|
+
op9: (input: ViewsBuilder<I>) => ViewsBuilder<J>,
|
|
238
|
+
op10: (input: ViewsBuilder<J>) => ViewsBuilder<K>,
|
|
239
|
+
op11: (input: ViewsBuilder<K>) => ViewsBuilder<L>,
|
|
240
|
+
op12: (input: ViewsBuilder<L>) => ViewsBuilder<M>,
|
|
241
|
+
op13: (input: ViewsBuilder<M>) => ViewsBuilder<N>
|
|
242
|
+
): (input: Builder<A>) => Builder<N>
|
|
243
|
+
export function views<
|
|
244
|
+
A extends AnyTypes,
|
|
245
|
+
B extends AnyTypes,
|
|
246
|
+
C extends AnyTypes,
|
|
247
|
+
D extends AnyTypes,
|
|
248
|
+
E extends AnyTypes,
|
|
249
|
+
F extends AnyTypes,
|
|
250
|
+
G extends AnyTypes,
|
|
251
|
+
H extends AnyTypes,
|
|
252
|
+
I extends AnyTypes,
|
|
253
|
+
J extends AnyTypes,
|
|
254
|
+
K extends AnyTypes,
|
|
255
|
+
L extends AnyTypes,
|
|
256
|
+
M extends AnyTypes,
|
|
257
|
+
N extends AnyTypes,
|
|
258
|
+
O extends AnyTypes
|
|
259
|
+
>(
|
|
260
|
+
op1: (input: ViewsBuilder<A>) => ViewsBuilder<B>,
|
|
261
|
+
op2: (input: ViewsBuilder<B>) => ViewsBuilder<C>,
|
|
262
|
+
op3: (input: ViewsBuilder<C>) => ViewsBuilder<D>,
|
|
263
|
+
op4: (input: ViewsBuilder<D>) => ViewsBuilder<E>,
|
|
264
|
+
op5: (input: ViewsBuilder<E>) => ViewsBuilder<F>,
|
|
265
|
+
op6: (input: ViewsBuilder<F>) => ViewsBuilder<G>,
|
|
266
|
+
op7: (input: ViewsBuilder<G>) => ViewsBuilder<H>,
|
|
267
|
+
op8: (input: ViewsBuilder<H>) => ViewsBuilder<I>,
|
|
268
|
+
op9: (input: ViewsBuilder<I>) => ViewsBuilder<J>,
|
|
269
|
+
op10: (input: ViewsBuilder<J>) => ViewsBuilder<K>,
|
|
270
|
+
op11: (input: ViewsBuilder<K>) => ViewsBuilder<L>,
|
|
271
|
+
op12: (input: ViewsBuilder<L>) => ViewsBuilder<M>,
|
|
272
|
+
op13: (input: ViewsBuilder<M>) => ViewsBuilder<N>,
|
|
273
|
+
op14: (input: ViewsBuilder<N>) => ViewsBuilder<O>
|
|
274
|
+
): (input: Builder<A>) => Builder<O>
|
|
275
|
+
export function views<
|
|
276
|
+
A extends AnyTypes,
|
|
277
|
+
B extends AnyTypes,
|
|
278
|
+
C extends AnyTypes,
|
|
279
|
+
D extends AnyTypes,
|
|
280
|
+
E extends AnyTypes,
|
|
281
|
+
F extends AnyTypes,
|
|
282
|
+
G extends AnyTypes,
|
|
283
|
+
H extends AnyTypes,
|
|
284
|
+
I extends AnyTypes,
|
|
285
|
+
J extends AnyTypes,
|
|
286
|
+
K extends AnyTypes,
|
|
287
|
+
L extends AnyTypes,
|
|
288
|
+
M extends AnyTypes,
|
|
289
|
+
N extends AnyTypes,
|
|
290
|
+
O extends AnyTypes,
|
|
291
|
+
P extends AnyTypes
|
|
292
|
+
>(
|
|
293
|
+
op1: (input: ViewsBuilder<A>) => ViewsBuilder<B>,
|
|
294
|
+
op2: (input: ViewsBuilder<B>) => ViewsBuilder<C>,
|
|
295
|
+
op3: (input: ViewsBuilder<C>) => ViewsBuilder<D>,
|
|
296
|
+
op4: (input: ViewsBuilder<D>) => ViewsBuilder<E>,
|
|
297
|
+
op5: (input: ViewsBuilder<E>) => ViewsBuilder<F>,
|
|
298
|
+
op6: (input: ViewsBuilder<F>) => ViewsBuilder<G>,
|
|
299
|
+
op7: (input: ViewsBuilder<G>) => ViewsBuilder<H>,
|
|
300
|
+
op8: (input: ViewsBuilder<H>) => ViewsBuilder<I>,
|
|
301
|
+
op9: (input: ViewsBuilder<I>) => ViewsBuilder<J>,
|
|
302
|
+
op10: (input: ViewsBuilder<J>) => ViewsBuilder<K>,
|
|
303
|
+
op11: (input: ViewsBuilder<K>) => ViewsBuilder<L>,
|
|
304
|
+
op12: (input: ViewsBuilder<L>) => ViewsBuilder<M>,
|
|
305
|
+
op13: (input: ViewsBuilder<M>) => ViewsBuilder<N>,
|
|
306
|
+
op14: (input: ViewsBuilder<N>) => ViewsBuilder<O>,
|
|
307
|
+
op15: (input: ViewsBuilder<O>) => ViewsBuilder<P>
|
|
308
|
+
): (input: Builder<A>) => Builder<P>
|
|
309
|
+
|
|
310
|
+
export function views(...ops: any[]) {
|
|
311
|
+
return (input: Builder<any>) => {
|
|
312
|
+
let builder = input
|
|
313
|
+
for (const op of ops) {
|
|
314
|
+
builder = op(builder)
|
|
315
|
+
}
|
|
316
|
+
return builder
|
|
317
|
+
}
|
|
318
|
+
}
|