@likec4/core 1.10.0 → 1.11.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 +610 -223
- package/dist/index.d.cts +202 -221
- package/dist/index.d.mts +202 -221
- package/dist/index.d.ts +202 -221
- package/dist/index.mjs +611 -225
- package/dist/shared/{core.DeifT5lC.mjs → core.CUlHblBQ.mjs} +5 -5
- package/dist/shared/{core.CpR2fq5B.d.cts → core.aVt8heZL.d.cts} +199 -354
- package/dist/shared/{core.CpR2fq5B.d.mts → core.aVt8heZL.d.mts} +199 -354
- package/dist/shared/{core.CpR2fq5B.d.ts → core.aVt8heZL.d.ts} +199 -354
- package/dist/types/index.cjs +1 -2
- package/dist/types/index.d.cts +2 -1
- package/dist/types/index.d.mts +2 -1
- package/dist/types/index.d.ts +2 -1
- package/dist/types/index.mjs +1 -1
- package/package.json +14 -10
- package/src/index.ts +2 -0
- package/src/model/LikeC4DiagramModel.ts +338 -0
- package/src/model/LikeC4Model.ts +227 -145
- package/src/model/LikeC4ViewModel.ts +45 -43
- package/src/model/index.ts +3 -2
- package/src/model/types.ts +13 -0
- package/src/types/_common.ts +2 -0
- package/src/types/index.ts +0 -2
- package/src/types/model.ts +10 -1
- package/src/utils/promises.ts +13 -2
- package/src/model/__test__/LikeC4Model.spec.ts +0 -79
- package/src/utils/compare-natural.spec.ts +0 -37
- package/src/utils/fqn.spec.ts +0 -202
- package/src/utils/relations.spec.ts +0 -266
- package/dist/shared/{core.Db3ntVII.cjs → core.D78YmZ_A.cjs} +4 -4
|
@@ -28,6 +28,10 @@ function t(...a){return u(e,a)}var e=(a,o)=>o.every(l=>l(a));
|
|
|
28
28
|
|
|
29
29
|
function y(...a){return u(r,a)}var r=(a,o)=>o.some(e=>e(a));
|
|
30
30
|
|
|
31
|
+
const DefaultLineStyle = "dashed";
|
|
32
|
+
const DefaultArrowType = "normal";
|
|
33
|
+
const DefaultRelationshipColor = "gray";
|
|
34
|
+
|
|
31
35
|
function AsFqn(name, parent) {
|
|
32
36
|
return parent ? parent + "." + name : name;
|
|
33
37
|
}
|
|
@@ -175,10 +179,6 @@ function whereOperatorAsPredicate(operator) {
|
|
|
175
179
|
}
|
|
176
180
|
}
|
|
177
181
|
|
|
178
|
-
const DefaultLineStyle = "dashed";
|
|
179
|
-
const DefaultArrowType = "normal";
|
|
180
|
-
const DefaultRelationshipColor = "gray";
|
|
181
|
-
|
|
182
182
|
const ThemeColors = [
|
|
183
183
|
"amber",
|
|
184
184
|
"blue",
|
|
@@ -260,4 +260,4 @@ function getBBoxCenter({
|
|
|
260
260
|
};
|
|
261
261
|
}
|
|
262
262
|
|
|
263
|
-
export { getBBoxCenter as $, AsFqn as A, BorderStyles as B,
|
|
263
|
+
export { getBBoxCenter as $, AsFqn as A, BorderStyles as B, isKindEqual as C, DefaultRelationshipColor as D, ElementShapes as E, isNotOperator as F, isAndOperator as G, isOrOperator as H, whereOperatorAsPredicate as I, DefaultLineStyle as J, DefaultArrowType as K, isThemeColor as L, isViewRulePredicate as M, isViewRuleStyle as N, isViewRuleAutoLayout as O, isDynamicViewIncludeRule as P, isDynamicViewParallelSteps as Q, isDynamicView as R, isElementView as S, isExtendsElementView as T, isScopedElementView as U, StepEdgeId as V, isStepEdgeId as W, extractStep as X, getParallelStepsPrefix as Y, isComputedDynamicView as Z, isComputedElementView as _, DefaultElementShape as a, DefaultThemeColor as b, expression as c, nonexhaustive as d, e$1 as e, isElementRef as f, isExpandedElementExpr as g, isCustomElement as h, invariant as i, isWildcard as j, isElementKindExpr as k, isElementTagExpr as l, isElement as m, nonNullable as n, isElementWhere as o, isElementPredicateExpr as p, isRelation as q, isInOut as r, isIncoming as s, isOutgoing as t, u, isRelationExpression as v, isRelationWhere as w, isCustomRelationExpr as x, isRelationPredicateExpr as y, isTagEqual as z };
|
|
@@ -1,168 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
Matches any [primitive value](https://developer.mozilla.org/en-US/docs/Glossary/Primitive).
|
|
3
|
-
|
|
4
|
-
@category Type
|
|
5
|
-
*/
|
|
6
|
-
type Primitive =
|
|
7
|
-
| null
|
|
8
|
-
| undefined
|
|
9
|
-
| string
|
|
10
|
-
| number
|
|
11
|
-
| boolean
|
|
12
|
-
| symbol
|
|
13
|
-
| bigint;
|
|
14
|
-
|
|
15
|
-
declare global {
|
|
16
|
-
// eslint-disable-next-line @typescript-eslint/consistent-type-definitions -- It has to be an `interface` so that it can be merged.
|
|
17
|
-
interface SymbolConstructor {
|
|
18
|
-
readonly observable: symbol;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
Allows creating a union type by combining primitive types and literal types without sacrificing auto-completion in IDEs for the literal type part of the union.
|
|
24
|
-
|
|
25
|
-
Currently, when a union type of a primitive type is combined with literal types, TypeScript loses all information about the combined literals. Thus, when such type is used in an IDE with autocompletion, no suggestions are made for the declared literals.
|
|
26
|
-
|
|
27
|
-
This type is a workaround for [Microsoft/TypeScript#29729](https://github.com/Microsoft/TypeScript/issues/29729). It will be removed as soon as it's not needed anymore.
|
|
28
|
-
|
|
29
|
-
@example
|
|
30
|
-
```
|
|
31
|
-
import type {LiteralUnion} from 'type-fest';
|
|
32
|
-
|
|
33
|
-
// Before
|
|
34
|
-
|
|
35
|
-
type Pet = 'dog' | 'cat' | string;
|
|
36
|
-
|
|
37
|
-
const pet: Pet = '';
|
|
38
|
-
// Start typing in your TypeScript-enabled IDE.
|
|
39
|
-
// You **will not** get auto-completion for `dog` and `cat` literals.
|
|
40
|
-
|
|
41
|
-
// After
|
|
42
|
-
|
|
43
|
-
type Pet2 = LiteralUnion<'dog' | 'cat', string>;
|
|
44
|
-
|
|
45
|
-
const pet: Pet2 = '';
|
|
46
|
-
// You **will** get auto-completion for `dog` and `cat` literals.
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
@category Type
|
|
50
|
-
*/
|
|
51
|
-
type LiteralUnion<
|
|
52
|
-
LiteralType,
|
|
53
|
-
BaseType extends Primitive,
|
|
54
|
-
> = LiteralType | (BaseType & Record<never, never>);
|
|
55
|
-
|
|
56
|
-
declare const tag: unique symbol;
|
|
57
|
-
|
|
58
|
-
type TagContainer<Token> = {
|
|
59
|
-
readonly [tag]: Token;
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
type Tag$1<Token extends PropertyKey, TagMetadata> = TagContainer<{[K in Token]: TagMetadata}>;
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
Attach a "tag" to an arbitrary type. This allows you to create distinct types, that aren't assignable to one another, for distinct concepts in your program that should not be interchangeable, even if their runtime values have the same type. (See examples.)
|
|
66
|
-
|
|
67
|
-
A type returned by `Tagged` can be passed to `Tagged` again, to create a type with multiple tags.
|
|
68
|
-
|
|
69
|
-
[Read more about tagged types.](https://medium.com/@KevinBGreene/surviving-the-typescript-ecosystem-branding-and-type-tagging-6cf6e516523d)
|
|
70
|
-
|
|
71
|
-
A tag's name is usually a string (and must be a string, number, or symbol), but each application of a tag can also contain an arbitrary type as its "metadata". See {@link GetTagMetadata} for examples and explanation.
|
|
72
|
-
|
|
73
|
-
A type `A` returned by `Tagged` is assignable to another type `B` returned by `Tagged` if and only if:
|
|
74
|
-
- the underlying (untagged) type of `A` is assignable to the underlying type of `B`;
|
|
75
|
-
- `A` contains at least all the tags `B` has;
|
|
76
|
-
- and the metadata type for each of `A`'s tags is assignable to the metadata type of `B`'s corresponding tag.
|
|
77
|
-
|
|
78
|
-
There have been several discussions about adding similar features to TypeScript. Unfortunately, nothing has (yet) moved forward:
|
|
79
|
-
- [Microsoft/TypeScript#202](https://github.com/microsoft/TypeScript/issues/202)
|
|
80
|
-
- [Microsoft/TypeScript#4895](https://github.com/microsoft/TypeScript/issues/4895)
|
|
81
|
-
- [Microsoft/TypeScript#33290](https://github.com/microsoft/TypeScript/pull/33290)
|
|
82
|
-
|
|
83
|
-
@example
|
|
84
|
-
```
|
|
85
|
-
import type {Tagged} from 'type-fest';
|
|
86
|
-
|
|
87
|
-
type AccountNumber = Tagged<number, 'AccountNumber'>;
|
|
88
|
-
type AccountBalance = Tagged<number, 'AccountBalance'>;
|
|
89
|
-
|
|
90
|
-
function createAccountNumber(): AccountNumber {
|
|
91
|
-
// As you can see, casting from a `number` (the underlying type being tagged) is allowed.
|
|
92
|
-
return 2 as AccountNumber;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
function getMoneyForAccount(accountNumber: AccountNumber): AccountBalance {
|
|
96
|
-
return 4 as AccountBalance;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
// This will compile successfully.
|
|
100
|
-
getMoneyForAccount(createAccountNumber());
|
|
101
|
-
|
|
102
|
-
// But this won't, because it has to be explicitly passed as an `AccountNumber` type!
|
|
103
|
-
// Critically, you could not accidentally use an `AccountBalance` as an `AccountNumber`.
|
|
104
|
-
getMoneyForAccount(2);
|
|
105
|
-
|
|
106
|
-
// You can also use tagged values like their underlying, untagged type.
|
|
107
|
-
// I.e., this will compile successfully because an `AccountNumber` can be used as a regular `number`.
|
|
108
|
-
// In this sense, the underlying base type is not hidden, which differentiates tagged types from opaque types in other languages.
|
|
109
|
-
const accountNumber = createAccountNumber() + 2;
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
@example
|
|
113
|
-
```
|
|
114
|
-
import type {Tagged} from 'type-fest';
|
|
115
|
-
|
|
116
|
-
// You can apply multiple tags to a type by using `Tagged` repeatedly.
|
|
117
|
-
type Url = Tagged<string, 'URL'>;
|
|
118
|
-
type SpecialCacheKey = Tagged<Url, 'SpecialCacheKey'>;
|
|
119
|
-
|
|
120
|
-
// You can also pass a union of tag names, so this is equivalent to the above, although it doesn't give you the ability to assign distinct metadata to each tag.
|
|
121
|
-
type SpecialCacheKey2 = Tagged<string, 'URL' | 'SpecialCacheKey'>;
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
@category Type
|
|
125
|
-
*/
|
|
126
|
-
type Tagged<Type, TagName extends PropertyKey, TagMetadata = never> = Type & Tag$1<TagName, TagMetadata>;
|
|
127
|
-
|
|
128
|
-
/**
|
|
129
|
-
Revert a tagged type back to its original type by removing all tags.
|
|
130
|
-
|
|
131
|
-
Why is this necessary?
|
|
132
|
-
|
|
133
|
-
1. Use a `Tagged` type as object keys
|
|
134
|
-
2. Prevent TS4058 error: "Return type of exported function has or is using name X from external module Y but cannot be named"
|
|
135
|
-
|
|
136
|
-
@example
|
|
137
|
-
```
|
|
138
|
-
import type {Tagged, UnwrapTagged} from 'type-fest';
|
|
139
|
-
|
|
140
|
-
type AccountType = Tagged<'SAVINGS' | 'CHECKING', 'AccountType'>;
|
|
141
|
-
|
|
142
|
-
const moneyByAccountType: Record<UnwrapTagged<AccountType>, number> = {
|
|
143
|
-
SAVINGS: 99,
|
|
144
|
-
CHECKING: 0.1
|
|
145
|
-
};
|
|
146
|
-
|
|
147
|
-
// Without UnwrapTagged, the following expression would throw a type error.
|
|
148
|
-
const money = moneyByAccountType.SAVINGS; // TS error: Property 'SAVINGS' does not exist
|
|
149
|
-
|
|
150
|
-
// Attempting to pass an non-Tagged type to UnwrapTagged will raise a type error.
|
|
151
|
-
type WontWork = UnwrapTagged<string>;
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
@category Type
|
|
155
|
-
*/
|
|
156
|
-
type UnwrapTagged<TaggedType extends Tag$1<PropertyKey, any>> =
|
|
157
|
-
RemoveAllTags<TaggedType>;
|
|
158
|
-
|
|
159
|
-
type RemoveAllTags<T> = T extends Tag$1<PropertyKey, any>
|
|
160
|
-
? {
|
|
161
|
-
[ThisTag in keyof T[typeof tag]]: T extends Tagged<infer Type, ThisTag, T[typeof tag][ThisTag]>
|
|
162
|
-
? RemoveAllTags<Type>
|
|
163
|
-
: never
|
|
164
|
-
}[keyof T[typeof tag]]
|
|
165
|
-
: T;
|
|
1
|
+
import { LiteralUnion, Tagged, UnwrapTagged } from 'type-fest';
|
|
166
2
|
|
|
167
3
|
declare const ThemeColors: readonly ["amber", "blue", "gray", "slate", "green", "indigo", "muted", "primary", "red", "secondary", "sky"];
|
|
168
4
|
type ThemeColor = typeof ThemeColors[number];
|
|
@@ -199,6 +35,7 @@ interface LikeC4Theme {
|
|
|
199
35
|
}
|
|
200
36
|
|
|
201
37
|
type NonEmptyArray<T> = [T, ...T[]];
|
|
38
|
+
type NonEmptyReadonlyArray<T> = readonly [T, ...T[]];
|
|
202
39
|
type IconUrl = Tagged<string, 'IconUrl'>;
|
|
203
40
|
type CustomColor = string;
|
|
204
41
|
type Point = readonly [x: number, y: number];
|
|
@@ -302,6 +139,194 @@ type Filterable<FTag extends string = string, FKind extends string = string> = {
|
|
|
302
139
|
type OperatorPredicate<V extends Filterable> = (value: V) => boolean;
|
|
303
140
|
declare function whereOperatorAsPredicate<FTag extends string = string, FKind extends string = string>(operator: WhereOperator<FTag, FKind>): OperatorPredicate<Filterable<FTag, FKind>>;
|
|
304
141
|
|
|
142
|
+
type RelationID = Tagged<string, 'RelationID'>;
|
|
143
|
+
type RelationshipKind = Tagged<string, 'RelationshipKind'>;
|
|
144
|
+
type RelationshipLineType = 'dashed' | 'solid' | 'dotted';
|
|
145
|
+
type RelationshipArrowType = 'none' | 'normal' | 'onormal' | 'dot' | 'odot' | 'diamond' | 'odiamond' | 'crow' | 'open' | 'vee';
|
|
146
|
+
declare const DefaultLineStyle = "dashed";
|
|
147
|
+
declare const DefaultArrowType = "normal";
|
|
148
|
+
declare const DefaultRelationshipColor = "gray";
|
|
149
|
+
interface Relation {
|
|
150
|
+
readonly id: RelationID;
|
|
151
|
+
readonly source: Fqn;
|
|
152
|
+
readonly target: Fqn;
|
|
153
|
+
readonly title: string;
|
|
154
|
+
readonly description?: string;
|
|
155
|
+
readonly technology?: string;
|
|
156
|
+
readonly tags?: NonEmptyArray<Tag>;
|
|
157
|
+
readonly kind?: RelationshipKind;
|
|
158
|
+
readonly color?: Color;
|
|
159
|
+
readonly line?: RelationshipLineType;
|
|
160
|
+
readonly head?: RelationshipArrowType;
|
|
161
|
+
readonly tail?: RelationshipArrowType;
|
|
162
|
+
readonly links?: NonEmptyArray<Link>;
|
|
163
|
+
readonly navigateTo?: ViewID;
|
|
164
|
+
readonly metadata?: {
|
|
165
|
+
[key: string]: string;
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
interface RelationshipKindSpecification {
|
|
169
|
+
readonly technology?: string;
|
|
170
|
+
readonly notation?: string;
|
|
171
|
+
readonly color?: Color;
|
|
172
|
+
readonly line?: RelationshipLineType;
|
|
173
|
+
readonly head?: RelationshipArrowType;
|
|
174
|
+
readonly tail?: RelationshipArrowType;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
interface BaseExpr {
|
|
178
|
+
where?: never;
|
|
179
|
+
element?: never;
|
|
180
|
+
custom?: never;
|
|
181
|
+
expanded?: never;
|
|
182
|
+
elementKind?: never;
|
|
183
|
+
elementTag?: never;
|
|
184
|
+
isEqual?: never;
|
|
185
|
+
isDescedants?: never;
|
|
186
|
+
wildcard?: never;
|
|
187
|
+
source?: never;
|
|
188
|
+
target?: never;
|
|
189
|
+
inout?: never;
|
|
190
|
+
incoming?: never;
|
|
191
|
+
outgoing?: never;
|
|
192
|
+
customRelation?: never;
|
|
193
|
+
}
|
|
194
|
+
interface ElementRefExpr extends Omit<BaseExpr, 'element' | 'isDescedants'> {
|
|
195
|
+
element: Fqn;
|
|
196
|
+
isDescedants?: boolean;
|
|
197
|
+
}
|
|
198
|
+
declare function isElementRef(expr: Expression): expr is ElementRefExpr;
|
|
199
|
+
interface ExpandedElementExpr extends Omit<BaseExpr, 'expanded'> {
|
|
200
|
+
expanded: Fqn;
|
|
201
|
+
}
|
|
202
|
+
declare function isExpandedElementExpr(expr: Expression): expr is ExpandedElementExpr;
|
|
203
|
+
interface CustomElementExpr extends Omit<BaseExpr, 'custom'> {
|
|
204
|
+
custom: {
|
|
205
|
+
expr: ElementExpression | ElementWhereExpr;
|
|
206
|
+
title?: string;
|
|
207
|
+
description?: string;
|
|
208
|
+
technology?: string;
|
|
209
|
+
notation?: string;
|
|
210
|
+
shape?: ElementShape;
|
|
211
|
+
color?: Color;
|
|
212
|
+
icon?: IconUrl;
|
|
213
|
+
border?: BorderStyle;
|
|
214
|
+
opacity?: number;
|
|
215
|
+
navigateTo?: ViewID;
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
declare function isCustomElement(expr: Expression): expr is CustomElementExpr;
|
|
219
|
+
interface WildcardExpr extends Omit<BaseExpr, 'wildcard'> {
|
|
220
|
+
wildcard: true;
|
|
221
|
+
}
|
|
222
|
+
declare function isWildcard(expr: Expression): expr is WildcardExpr;
|
|
223
|
+
interface ElementKindExpr extends Omit<BaseExpr, 'elementKind' | 'isEqual'> {
|
|
224
|
+
elementKind: ElementKind;
|
|
225
|
+
isEqual: boolean;
|
|
226
|
+
}
|
|
227
|
+
declare function isElementKindExpr(expr: Expression): expr is ElementKindExpr;
|
|
228
|
+
interface ElementTagExpr extends Omit<BaseExpr, 'elementTag' | 'isEqual'> {
|
|
229
|
+
elementTag: Tag;
|
|
230
|
+
isEqual: boolean;
|
|
231
|
+
}
|
|
232
|
+
declare function isElementTagExpr(expr: Expression): expr is ElementTagExpr;
|
|
233
|
+
type ElementExpression = ElementRefExpr | WildcardExpr | ElementKindExpr | ElementTagExpr | ExpandedElementExpr;
|
|
234
|
+
declare function isElement(expr: Expression): expr is ElementExpression;
|
|
235
|
+
interface ElementWhereExpr extends Omit<BaseExpr, 'where'> {
|
|
236
|
+
where: {
|
|
237
|
+
expr: ElementExpression;
|
|
238
|
+
condition: WhereOperator<string, string>;
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
declare function isElementWhere(expr: Expression): expr is ElementWhereExpr;
|
|
242
|
+
type ElementPredicateExpression = ElementExpression | ElementWhereExpr | CustomElementExpr;
|
|
243
|
+
declare function isElementPredicateExpr(expr: Expression): expr is ElementPredicateExpression;
|
|
244
|
+
interface RelationExpr extends Omit<BaseExpr, 'source' | 'target'> {
|
|
245
|
+
source: ElementExpression;
|
|
246
|
+
target: ElementExpression;
|
|
247
|
+
isBidirectional?: boolean;
|
|
248
|
+
}
|
|
249
|
+
declare function isRelation(expr: Expression): expr is RelationExpr;
|
|
250
|
+
interface InOutExpr extends Omit<BaseExpr, 'inout'> {
|
|
251
|
+
inout: ElementExpression;
|
|
252
|
+
}
|
|
253
|
+
declare function isInOut(expr: Expression): expr is InOutExpr;
|
|
254
|
+
interface IncomingExpr extends Omit<BaseExpr, 'incoming'> {
|
|
255
|
+
incoming: ElementExpression;
|
|
256
|
+
}
|
|
257
|
+
declare function isIncoming(expr: Expression): expr is IncomingExpr;
|
|
258
|
+
interface OutgoingExpr extends Omit<BaseExpr, 'outgoing'> {
|
|
259
|
+
outgoing: ElementExpression;
|
|
260
|
+
}
|
|
261
|
+
declare function isOutgoing(expr: Expression): expr is OutgoingExpr;
|
|
262
|
+
type RelationExpression = RelationExpr | InOutExpr | IncomingExpr | OutgoingExpr;
|
|
263
|
+
declare function isRelationExpression(expr: Expression): expr is RelationExpression;
|
|
264
|
+
interface RelationWhereExpr extends Omit<BaseExpr, 'where'> {
|
|
265
|
+
where: {
|
|
266
|
+
expr: RelationExpression;
|
|
267
|
+
condition: WhereOperator<string, string>;
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
declare function isRelationWhere(expr: Expression): expr is RelationWhereExpr;
|
|
271
|
+
interface CustomRelationExpr extends Omit<BaseExpr, 'customRelation'> {
|
|
272
|
+
customRelation: {
|
|
273
|
+
relation: RelationExpression | RelationWhereExpr;
|
|
274
|
+
title?: string;
|
|
275
|
+
description?: string;
|
|
276
|
+
technology?: string;
|
|
277
|
+
notation?: string;
|
|
278
|
+
navigateTo?: ViewID;
|
|
279
|
+
notes?: string;
|
|
280
|
+
color?: Color;
|
|
281
|
+
line?: RelationshipLineType;
|
|
282
|
+
head?: RelationshipArrowType;
|
|
283
|
+
tail?: RelationshipArrowType;
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
declare function isCustomRelationExpr(expr: Expression): expr is CustomRelationExpr;
|
|
287
|
+
type RelationPredicateExpression = RelationExpression | RelationWhereExpr | CustomRelationExpr;
|
|
288
|
+
declare function isRelationPredicateExpr(expr: Expression): expr is RelationPredicateExpression;
|
|
289
|
+
type Expression = ElementPredicateExpression | RelationPredicateExpression;
|
|
290
|
+
|
|
291
|
+
type expression_CustomElementExpr = CustomElementExpr;
|
|
292
|
+
type expression_CustomRelationExpr = CustomRelationExpr;
|
|
293
|
+
type expression_ElementExpression = ElementExpression;
|
|
294
|
+
type expression_ElementKindExpr = ElementKindExpr;
|
|
295
|
+
type expression_ElementPredicateExpression = ElementPredicateExpression;
|
|
296
|
+
type expression_ElementRefExpr = ElementRefExpr;
|
|
297
|
+
type expression_ElementTagExpr = ElementTagExpr;
|
|
298
|
+
type expression_ElementWhereExpr = ElementWhereExpr;
|
|
299
|
+
type expression_ExpandedElementExpr = ExpandedElementExpr;
|
|
300
|
+
type expression_Expression = Expression;
|
|
301
|
+
type expression_InOutExpr = InOutExpr;
|
|
302
|
+
type expression_IncomingExpr = IncomingExpr;
|
|
303
|
+
type expression_OutgoingExpr = OutgoingExpr;
|
|
304
|
+
type expression_RelationExpr = RelationExpr;
|
|
305
|
+
type expression_RelationExpression = RelationExpression;
|
|
306
|
+
type expression_RelationPredicateExpression = RelationPredicateExpression;
|
|
307
|
+
type expression_RelationWhereExpr = RelationWhereExpr;
|
|
308
|
+
type expression_WildcardExpr = WildcardExpr;
|
|
309
|
+
declare const expression_isCustomElement: typeof isCustomElement;
|
|
310
|
+
declare const expression_isCustomRelationExpr: typeof isCustomRelationExpr;
|
|
311
|
+
declare const expression_isElement: typeof isElement;
|
|
312
|
+
declare const expression_isElementKindExpr: typeof isElementKindExpr;
|
|
313
|
+
declare const expression_isElementPredicateExpr: typeof isElementPredicateExpr;
|
|
314
|
+
declare const expression_isElementRef: typeof isElementRef;
|
|
315
|
+
declare const expression_isElementTagExpr: typeof isElementTagExpr;
|
|
316
|
+
declare const expression_isElementWhere: typeof isElementWhere;
|
|
317
|
+
declare const expression_isExpandedElementExpr: typeof isExpandedElementExpr;
|
|
318
|
+
declare const expression_isInOut: typeof isInOut;
|
|
319
|
+
declare const expression_isIncoming: typeof isIncoming;
|
|
320
|
+
declare const expression_isOutgoing: typeof isOutgoing;
|
|
321
|
+
declare const expression_isRelation: typeof isRelation;
|
|
322
|
+
declare const expression_isRelationExpression: typeof isRelationExpression;
|
|
323
|
+
declare const expression_isRelationPredicateExpr: typeof isRelationPredicateExpr;
|
|
324
|
+
declare const expression_isRelationWhere: typeof isRelationWhere;
|
|
325
|
+
declare const expression_isWildcard: typeof isWildcard;
|
|
326
|
+
declare namespace expression {
|
|
327
|
+
export { type expression_CustomElementExpr as CustomElementExpr, type expression_CustomRelationExpr as CustomRelationExpr, type expression_ElementExpression as ElementExpression, type expression_ElementKindExpr as ElementKindExpr, type expression_ElementPredicateExpression as ElementPredicateExpression, type expression_ElementRefExpr as ElementRefExpr, type expression_ElementTagExpr as ElementTagExpr, type expression_ElementWhereExpr as ElementWhereExpr, type expression_ExpandedElementExpr as ExpandedElementExpr, type expression_Expression as Expression, type expression_InOutExpr as InOutExpr, type expression_IncomingExpr as IncomingExpr, type expression_OutgoingExpr as OutgoingExpr, type expression_RelationExpr as RelationExpr, type expression_RelationExpression as RelationExpression, type expression_RelationPredicateExpression as RelationPredicateExpression, type expression_RelationWhereExpr as RelationWhereExpr, type expression_WildcardExpr as WildcardExpr, expression_isCustomElement as isCustomElement, expression_isCustomRelationExpr as isCustomRelationExpr, expression_isElement as isElement, expression_isElementKindExpr as isElementKindExpr, expression_isElementPredicateExpr as isElementPredicateExpr, expression_isElementRef as isElementRef, expression_isElementTagExpr as isElementTagExpr, expression_isElementWhere as isElementWhere, expression_isExpandedElementExpr as isExpandedElementExpr, expression_isInOut as isInOut, expression_isIncoming as isIncoming, expression_isOutgoing as isOutgoing, expression_isRelation as isRelation, expression_isRelationExpression as isRelationExpression, expression_isRelationPredicateExpr as isRelationPredicateExpr, expression_isRelationWhere as isRelationWhere, expression_isWildcard as isWildcard };
|
|
328
|
+
}
|
|
329
|
+
|
|
305
330
|
type ElementNotation = {
|
|
306
331
|
kinds: ElementKind[];
|
|
307
332
|
shape: ElementShape;
|
|
@@ -561,194 +586,6 @@ type ViewManualLayout = {
|
|
|
561
586
|
}>;
|
|
562
587
|
};
|
|
563
588
|
|
|
564
|
-
type RelationID = Tagged<string, 'RelationID'>;
|
|
565
|
-
type RelationshipKind = Tagged<string, 'RelationshipKind'>;
|
|
566
|
-
type RelationshipLineType = 'dashed' | 'solid' | 'dotted';
|
|
567
|
-
type RelationshipArrowType = 'none' | 'normal' | 'onormal' | 'dot' | 'odot' | 'diamond' | 'odiamond' | 'crow' | 'open' | 'vee';
|
|
568
|
-
declare const DefaultLineStyle = "dashed";
|
|
569
|
-
declare const DefaultArrowType = "normal";
|
|
570
|
-
declare const DefaultRelationshipColor = "gray";
|
|
571
|
-
interface Relation {
|
|
572
|
-
readonly id: RelationID;
|
|
573
|
-
readonly source: Fqn;
|
|
574
|
-
readonly target: Fqn;
|
|
575
|
-
readonly title: string;
|
|
576
|
-
readonly description?: string;
|
|
577
|
-
readonly technology?: string;
|
|
578
|
-
readonly tags?: NonEmptyArray<Tag>;
|
|
579
|
-
readonly kind?: RelationshipKind;
|
|
580
|
-
readonly color?: Color;
|
|
581
|
-
readonly line?: RelationshipLineType;
|
|
582
|
-
readonly head?: RelationshipArrowType;
|
|
583
|
-
readonly tail?: RelationshipArrowType;
|
|
584
|
-
readonly links?: NonEmptyArray<Link>;
|
|
585
|
-
readonly navigateTo?: ViewID;
|
|
586
|
-
readonly metadata?: {
|
|
587
|
-
[key: string]: string;
|
|
588
|
-
};
|
|
589
|
-
}
|
|
590
|
-
interface RelationshipKindSpecification {
|
|
591
|
-
readonly technology?: string;
|
|
592
|
-
readonly notation?: string;
|
|
593
|
-
readonly color?: Color;
|
|
594
|
-
readonly line?: RelationshipLineType;
|
|
595
|
-
readonly head?: RelationshipArrowType;
|
|
596
|
-
readonly tail?: RelationshipArrowType;
|
|
597
|
-
}
|
|
598
|
-
|
|
599
|
-
interface BaseExpr {
|
|
600
|
-
where?: never;
|
|
601
|
-
element?: never;
|
|
602
|
-
custom?: never;
|
|
603
|
-
expanded?: never;
|
|
604
|
-
elementKind?: never;
|
|
605
|
-
elementTag?: never;
|
|
606
|
-
isEqual?: never;
|
|
607
|
-
isDescedants?: never;
|
|
608
|
-
wildcard?: never;
|
|
609
|
-
source?: never;
|
|
610
|
-
target?: never;
|
|
611
|
-
inout?: never;
|
|
612
|
-
incoming?: never;
|
|
613
|
-
outgoing?: never;
|
|
614
|
-
customRelation?: never;
|
|
615
|
-
}
|
|
616
|
-
interface ElementRefExpr extends Omit<BaseExpr, 'element' | 'isDescedants'> {
|
|
617
|
-
element: Fqn;
|
|
618
|
-
isDescedants?: boolean;
|
|
619
|
-
}
|
|
620
|
-
declare function isElementRef(expr: Expression): expr is ElementRefExpr;
|
|
621
|
-
interface ExpandedElementExpr extends Omit<BaseExpr, 'expanded'> {
|
|
622
|
-
expanded: Fqn;
|
|
623
|
-
}
|
|
624
|
-
declare function isExpandedElementExpr(expr: Expression): expr is ExpandedElementExpr;
|
|
625
|
-
interface CustomElementExpr extends Omit<BaseExpr, 'custom'> {
|
|
626
|
-
custom: {
|
|
627
|
-
expr: ElementExpression | ElementWhereExpr;
|
|
628
|
-
title?: string;
|
|
629
|
-
description?: string;
|
|
630
|
-
technology?: string;
|
|
631
|
-
notation?: string;
|
|
632
|
-
shape?: ElementShape;
|
|
633
|
-
color?: Color;
|
|
634
|
-
icon?: IconUrl;
|
|
635
|
-
border?: BorderStyle;
|
|
636
|
-
opacity?: number;
|
|
637
|
-
navigateTo?: ViewID;
|
|
638
|
-
};
|
|
639
|
-
}
|
|
640
|
-
declare function isCustomElement(expr: Expression): expr is CustomElementExpr;
|
|
641
|
-
interface WildcardExpr extends Omit<BaseExpr, 'wildcard'> {
|
|
642
|
-
wildcard: true;
|
|
643
|
-
}
|
|
644
|
-
declare function isWildcard(expr: Expression): expr is WildcardExpr;
|
|
645
|
-
interface ElementKindExpr extends Omit<BaseExpr, 'elementKind' | 'isEqual'> {
|
|
646
|
-
elementKind: ElementKind;
|
|
647
|
-
isEqual: boolean;
|
|
648
|
-
}
|
|
649
|
-
declare function isElementKindExpr(expr: Expression): expr is ElementKindExpr;
|
|
650
|
-
interface ElementTagExpr extends Omit<BaseExpr, 'elementTag' | 'isEqual'> {
|
|
651
|
-
elementTag: Tag;
|
|
652
|
-
isEqual: boolean;
|
|
653
|
-
}
|
|
654
|
-
declare function isElementTagExpr(expr: Expression): expr is ElementTagExpr;
|
|
655
|
-
type ElementExpression = ElementRefExpr | WildcardExpr | ElementKindExpr | ElementTagExpr | ExpandedElementExpr;
|
|
656
|
-
declare function isElement(expr: Expression): expr is ElementExpression;
|
|
657
|
-
interface ElementWhereExpr extends Omit<BaseExpr, 'where'> {
|
|
658
|
-
where: {
|
|
659
|
-
expr: ElementExpression;
|
|
660
|
-
condition: WhereOperator<string, string>;
|
|
661
|
-
};
|
|
662
|
-
}
|
|
663
|
-
declare function isElementWhere(expr: Expression): expr is ElementWhereExpr;
|
|
664
|
-
type ElementPredicateExpression = ElementExpression | ElementWhereExpr | CustomElementExpr;
|
|
665
|
-
declare function isElementPredicateExpr(expr: Expression): expr is ElementPredicateExpression;
|
|
666
|
-
interface RelationExpr extends Omit<BaseExpr, 'source' | 'target'> {
|
|
667
|
-
source: ElementExpression;
|
|
668
|
-
target: ElementExpression;
|
|
669
|
-
isBidirectional?: boolean;
|
|
670
|
-
}
|
|
671
|
-
declare function isRelation(expr: Expression): expr is RelationExpr;
|
|
672
|
-
interface InOutExpr extends Omit<BaseExpr, 'inout'> {
|
|
673
|
-
inout: ElementExpression;
|
|
674
|
-
}
|
|
675
|
-
declare function isInOut(expr: Expression): expr is InOutExpr;
|
|
676
|
-
interface IncomingExpr extends Omit<BaseExpr, 'incoming'> {
|
|
677
|
-
incoming: ElementExpression;
|
|
678
|
-
}
|
|
679
|
-
declare function isIncoming(expr: Expression): expr is IncomingExpr;
|
|
680
|
-
interface OutgoingExpr extends Omit<BaseExpr, 'outgoing'> {
|
|
681
|
-
outgoing: ElementExpression;
|
|
682
|
-
}
|
|
683
|
-
declare function isOutgoing(expr: Expression): expr is OutgoingExpr;
|
|
684
|
-
type RelationExpression = RelationExpr | InOutExpr | IncomingExpr | OutgoingExpr;
|
|
685
|
-
declare function isRelationExpression(expr: Expression): expr is RelationExpression;
|
|
686
|
-
interface RelationWhereExpr extends Omit<BaseExpr, 'where'> {
|
|
687
|
-
where: {
|
|
688
|
-
expr: RelationExpression;
|
|
689
|
-
condition: WhereOperator<string, string>;
|
|
690
|
-
};
|
|
691
|
-
}
|
|
692
|
-
declare function isRelationWhere(expr: Expression): expr is RelationWhereExpr;
|
|
693
|
-
interface CustomRelationExpr extends Omit<BaseExpr, 'customRelation'> {
|
|
694
|
-
customRelation: {
|
|
695
|
-
relation: RelationExpression | RelationWhereExpr;
|
|
696
|
-
title?: string;
|
|
697
|
-
description?: string;
|
|
698
|
-
technology?: string;
|
|
699
|
-
notation?: string;
|
|
700
|
-
navigateTo?: ViewID;
|
|
701
|
-
notes?: string;
|
|
702
|
-
color?: Color;
|
|
703
|
-
line?: RelationshipLineType;
|
|
704
|
-
head?: RelationshipArrowType;
|
|
705
|
-
tail?: RelationshipArrowType;
|
|
706
|
-
};
|
|
707
|
-
}
|
|
708
|
-
declare function isCustomRelationExpr(expr: Expression): expr is CustomRelationExpr;
|
|
709
|
-
type RelationPredicateExpression = RelationExpression | RelationWhereExpr | CustomRelationExpr;
|
|
710
|
-
declare function isRelationPredicateExpr(expr: Expression): expr is RelationPredicateExpression;
|
|
711
|
-
type Expression = ElementPredicateExpression | RelationPredicateExpression;
|
|
712
|
-
|
|
713
|
-
type expression_CustomElementExpr = CustomElementExpr;
|
|
714
|
-
type expression_CustomRelationExpr = CustomRelationExpr;
|
|
715
|
-
type expression_ElementExpression = ElementExpression;
|
|
716
|
-
type expression_ElementKindExpr = ElementKindExpr;
|
|
717
|
-
type expression_ElementPredicateExpression = ElementPredicateExpression;
|
|
718
|
-
type expression_ElementRefExpr = ElementRefExpr;
|
|
719
|
-
type expression_ElementTagExpr = ElementTagExpr;
|
|
720
|
-
type expression_ElementWhereExpr = ElementWhereExpr;
|
|
721
|
-
type expression_ExpandedElementExpr = ExpandedElementExpr;
|
|
722
|
-
type expression_Expression = Expression;
|
|
723
|
-
type expression_InOutExpr = InOutExpr;
|
|
724
|
-
type expression_IncomingExpr = IncomingExpr;
|
|
725
|
-
type expression_OutgoingExpr = OutgoingExpr;
|
|
726
|
-
type expression_RelationExpr = RelationExpr;
|
|
727
|
-
type expression_RelationExpression = RelationExpression;
|
|
728
|
-
type expression_RelationPredicateExpression = RelationPredicateExpression;
|
|
729
|
-
type expression_RelationWhereExpr = RelationWhereExpr;
|
|
730
|
-
type expression_WildcardExpr = WildcardExpr;
|
|
731
|
-
declare const expression_isCustomElement: typeof isCustomElement;
|
|
732
|
-
declare const expression_isCustomRelationExpr: typeof isCustomRelationExpr;
|
|
733
|
-
declare const expression_isElement: typeof isElement;
|
|
734
|
-
declare const expression_isElementKindExpr: typeof isElementKindExpr;
|
|
735
|
-
declare const expression_isElementPredicateExpr: typeof isElementPredicateExpr;
|
|
736
|
-
declare const expression_isElementRef: typeof isElementRef;
|
|
737
|
-
declare const expression_isElementTagExpr: typeof isElementTagExpr;
|
|
738
|
-
declare const expression_isElementWhere: typeof isElementWhere;
|
|
739
|
-
declare const expression_isExpandedElementExpr: typeof isExpandedElementExpr;
|
|
740
|
-
declare const expression_isInOut: typeof isInOut;
|
|
741
|
-
declare const expression_isIncoming: typeof isIncoming;
|
|
742
|
-
declare const expression_isOutgoing: typeof isOutgoing;
|
|
743
|
-
declare const expression_isRelation: typeof isRelation;
|
|
744
|
-
declare const expression_isRelationExpression: typeof isRelationExpression;
|
|
745
|
-
declare const expression_isRelationPredicateExpr: typeof isRelationPredicateExpr;
|
|
746
|
-
declare const expression_isRelationWhere: typeof isRelationWhere;
|
|
747
|
-
declare const expression_isWildcard: typeof isWildcard;
|
|
748
|
-
declare namespace expression {
|
|
749
|
-
export { type expression_CustomElementExpr as CustomElementExpr, type expression_CustomRelationExpr as CustomRelationExpr, type expression_ElementExpression as ElementExpression, type expression_ElementKindExpr as ElementKindExpr, type expression_ElementPredicateExpression as ElementPredicateExpression, type expression_ElementRefExpr as ElementRefExpr, type expression_ElementTagExpr as ElementTagExpr, type expression_ElementWhereExpr as ElementWhereExpr, type expression_ExpandedElementExpr as ExpandedElementExpr, type expression_Expression as Expression, type expression_InOutExpr as InOutExpr, type expression_IncomingExpr as IncomingExpr, type expression_OutgoingExpr as OutgoingExpr, type expression_RelationExpr as RelationExpr, type expression_RelationExpression as RelationExpression, type expression_RelationPredicateExpression as RelationPredicateExpression, type expression_RelationWhereExpr as RelationWhereExpr, type expression_WildcardExpr as WildcardExpr, expression_isCustomElement as isCustomElement, expression_isCustomRelationExpr as isCustomRelationExpr, expression_isElement as isElement, expression_isElementKindExpr as isElementKindExpr, expression_isElementPredicateExpr as isElementPredicateExpr, expression_isElementRef as isElementRef, expression_isElementTagExpr as isElementTagExpr, expression_isElementWhere as isElementWhere, expression_isExpandedElementExpr as isExpandedElementExpr, expression_isInOut as isInOut, expression_isIncoming as isIncoming, expression_isOutgoing as isOutgoing, expression_isRelation as isRelation, expression_isRelationExpression as isRelationExpression, expression_isRelationPredicateExpr as isRelationPredicateExpr, expression_isRelationWhere as isRelationWhere, expression_isWildcard as isWildcard };
|
|
750
|
-
}
|
|
751
|
-
|
|
752
589
|
/**
|
|
753
590
|
* Parsed elements, relations, and views.
|
|
754
591
|
*/
|
|
@@ -766,8 +603,16 @@ interface ParsedLikeC4Model {
|
|
|
766
603
|
* Same as `ParsedLikeC4Model` but with computed views.
|
|
767
604
|
*/
|
|
768
605
|
interface ComputedLikeC4Model extends Omit<ParsedLikeC4Model, 'views'> {
|
|
606
|
+
__?: never;
|
|
769
607
|
views: Record<ViewID, ComputedView>;
|
|
770
608
|
}
|
|
609
|
+
/**
|
|
610
|
+
* Same as `ParsedLikeC4Model` but with layouted views (DiagramView)
|
|
611
|
+
*/
|
|
612
|
+
interface LayoutedLikeC4Model extends Omit<ParsedLikeC4Model, 'views'> {
|
|
613
|
+
__: 'layouted';
|
|
614
|
+
views: Record<ViewID, DiagramView>;
|
|
615
|
+
}
|
|
771
616
|
|
|
772
617
|
/**
|
|
773
618
|
* OverviewGraph is a graph representation of all views in a model
|
|
@@ -830,4 +675,4 @@ declare namespace ViewChange {
|
|
|
830
675
|
}
|
|
831
676
|
type ViewChange = ViewChange.ChangeElementStyle | ViewChange.SaveManualLayout | ViewChange.ChangeAutoLayout;
|
|
832
677
|
|
|
833
|
-
export {
|
|
678
|
+
export { isElement as $, AsFqn as A, BorderStyles as B, type ComputedView as C, type DiagramView as D, type EdgeId as E, type Fqn as F, isElementRef as G, type HexColorLiteral as H, type IconUrl as I, type ExpandedElementExpr as J, isExpandedElementExpr as K, type LayoutedLikeC4Model as L, type CustomElementExpr as M, type NodeId as N, isCustomElement as O, type Point as P, isWildcard as Q, type RelationID as R, type ElementKindExpr as S, type ThemeColorValues as T, isElementKindExpr as U, type ViewID as V, type WildcardExpr as W, type XYPoint as X, type ElementTagExpr as Y, isElementTagExpr as Z, type ElementExpression as _, type Tag as a, type DynamicViewStep as a$, type ElementWhereExpr as a0, isElementWhere as a1, type ElementPredicateExpression as a2, isElementPredicateExpr as a3, type RelationExpr as a4, isRelation as a5, type InOutExpr as a6, isInOut as a7, type IncomingExpr as a8, isIncoming as a9, type RelationshipLineType as aA, type RelationshipArrowType as aB, DefaultLineStyle as aC, DefaultArrowType as aD, DefaultRelationshipColor as aE, type RelationshipKindSpecification as aF, type ThemeColor as aG, type ColorLiteral as aH, isThemeColor as aI, type ElementThemeColorValues as aJ, type ElementThemeColors as aK, type RelationshipThemeColorValues as aL, type RelationshipThemeColors as aM, type LikeC4Theme as aN, type ViewRulePredicate as aO, isViewRulePredicate as aP, type ViewRuleStyle as aQ, isViewRuleStyle as aR, type AutoLayoutDirection as aS, type ViewRuleAutoLayout as aT, isViewRuleAutoLayout as aU, type ViewRule as aV, type BasicView as aW, type BasicElementView as aX, type ScopedElementView as aY, type ExtendsElementView as aZ, type ElementView as a_, type OutgoingExpr as aa, isOutgoing as ab, type RelationExpression as ac, isRelationExpression as ad, type RelationWhereExpr as ae, isRelationWhere as af, type CustomRelationExpr as ag, isCustomRelationExpr as ah, type RelationPredicateExpression as ai, isRelationPredicateExpr as aj, type Expression as ak, type ParsedLikeC4Model as al, type EqualOperator as am, type TagEqual as an, isTagEqual as ao, type KindEqual as ap, isKindEqual as aq, type NotOperator as ar, isNotOperator as as, type AndOperator as at, isAndOperator as au, type OrOperator as av, isOrOperator as aw, type WhereOperator as ax, whereOperatorAsPredicate as ay, OverviewGraph as az, type ComputedNode as b, type DynamicViewParallelSteps as b0, type DynamicViewStepOrParallel as b1, type DynamicViewIncludeRule as b2, isDynamicViewIncludeRule as b3, type DynamicViewRule as b4, type DynamicView as b5, isDynamicViewParallelSteps as b6, type CustomColorDefinitions as b7, type LikeC4View as b8, isDynamicView as b9, isElementView as ba, isExtendsElementView as bb, isScopedElementView as bc, type StepEdgeIdLiteral as bd, StepEdgeId as be, isStepEdgeId as bf, extractStep as bg, getParallelStepsPrefix as bh, type ViewWithHash as bi, type ViewWithNotation as bj, type ComputedElementView as bk, type ComputedDynamicView as bl, isComputedDynamicView as bm, isComputedElementView as bn, type BBox as bo, getBBoxCenter as bp, type ViewManualLayout as bq, ViewChange as br, type ElementNotation as bs, type ElementKind as c, type ElementShape as d, type Color as e, type ComputedEdge as f, type ComputedLikeC4Model as g, type Element as h, type Relation as i, type RelationshipKind as j, type DiagramNode as k, type DiagramEdge as l, type NonEmptyArray as m, expression as n, type NonEmptyReadonlyArray as o, type CustomColor as p, type BorderStyle as q, ElementShapes as r, DefaultThemeColor as s, DefaultElementShape as t, type ElementStyle as u, type TagSpec as v, type Link as w, type ElementKindSpecificationStyle as x, type ElementKindSpecification as y, type ElementRefExpr as z };
|