@likec4/language-server 1.39.5 → 1.41.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/ast.d.ts +4 -2
- package/dist/bundled.mjs +3438 -3428
- package/dist/formatting/LikeC4Formatter.mjs +14 -8
- package/dist/generated/ast.d.ts +22 -5
- package/dist/generated/ast.mjs +28 -2
- package/dist/generated/grammar.mjs +1 -1
- package/dist/logger.d.ts +1 -1
- package/dist/logger.mjs +3 -0
- package/dist/lsp/CompletionProvider.mjs +34 -3
- package/dist/lsp/HoverProvider.mjs +14 -2
- package/dist/lsp/SemanticTokenProvider.mjs +1 -1
- package/dist/model/builder/MergedSpecification.d.ts +1 -1
- package/dist/model/builder/MergedSpecification.mjs +39 -35
- package/dist/model/builder/buildModel.mjs +2 -1
- package/dist/model/model-parser.d.ts +72 -45
- package/dist/model/parser/Base.d.ts +13 -7
- package/dist/model/parser/Base.mjs +27 -16
- package/dist/model/parser/DeploymentModelParser.d.ts +8 -5
- package/dist/model/parser/DeploymentModelParser.mjs +47 -45
- package/dist/model/parser/DeploymentViewParser.d.ts +8 -5
- package/dist/model/parser/DeploymentViewParser.mjs +1 -2
- package/dist/model/parser/FqnRefParser.d.ts +10 -6
- package/dist/model/parser/FqnRefParser.mjs +12 -4
- package/dist/model/parser/GlobalsParser.d.ts +8 -5
- package/dist/model/parser/GlobalsParser.mjs +5 -3
- package/dist/model/parser/ImportsParser.d.ts +8 -5
- package/dist/model/parser/ImportsParser.mjs +4 -2
- package/dist/model/parser/ModelParser.d.ts +8 -5
- package/dist/model/parser/ModelParser.mjs +31 -36
- package/dist/model/parser/PredicatesParser.d.ts +8 -5
- package/dist/model/parser/SpecificationParser.d.ts +8 -5
- package/dist/model/parser/SpecificationParser.mjs +15 -21
- package/dist/model/parser/ValueConverter.mjs +1 -1
- package/dist/model/parser/ViewsParser.d.ts +8 -5
- package/dist/model/parser/ViewsParser.mjs +5 -5
- package/dist/test/testServices.mjs +22 -24
- package/dist/validation/{dynamic-view-step.d.ts → dynamic-view.d.ts} +2 -1
- package/dist/validation/{dynamic-view-step.mjs → dynamic-view.mjs} +19 -0
- package/dist/validation/index.d.ts +1 -1
- package/dist/validation/index.mjs +4 -2
- package/package.json +8 -8
package/dist/logger.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type Logger, type Sink, type TextFormatter } from '@likec4/log';
|
|
2
2
|
import type { Connection } from 'vscode-languageserver';
|
|
3
3
|
export declare const logger: Logger;
|
|
4
|
+
export { logger as serverLogger, };
|
|
4
5
|
export declare function logError(err: unknown): void;
|
|
5
6
|
/**
|
|
6
7
|
* Logs an error as warning (not critical)
|
|
@@ -14,4 +15,3 @@ type LspConnectionSinkProps = {
|
|
|
14
15
|
};
|
|
15
16
|
export declare function getLspConnectionSink(connection: Connection, props?: LspConnectionSinkProps): Sink;
|
|
16
17
|
export declare function getTelemetrySink(connection: Connection): Sink;
|
|
17
|
-
export {};
|
package/dist/logger.mjs
CHANGED
|
@@ -52,9 +52,10 @@ export class LikeC4CompletionProvider extends DefaultCompletionProvider {
|
|
|
52
52
|
].join("\n")
|
|
53
53
|
});
|
|
54
54
|
break;
|
|
55
|
-
case ["title", "description", "technology"].includes(keyword.value):
|
|
55
|
+
case ["title", "description", "technology", "link"].includes(keyword.value):
|
|
56
56
|
acceptor(context, {
|
|
57
57
|
label: keyword.value,
|
|
58
|
+
detail: `Insert ${keyword.value} property`,
|
|
58
59
|
kind: CompletionItemKind.Property,
|
|
59
60
|
insertTextFormat: InsertTextFormat.Snippet,
|
|
60
61
|
insertText: `${keyword.value} '\${0}'`
|
|
@@ -91,7 +92,7 @@ export class LikeC4CompletionProvider extends DefaultCompletionProvider {
|
|
|
91
92
|
acceptor(context, {
|
|
92
93
|
label: keyword.value,
|
|
93
94
|
detail: `Insert group block`,
|
|
94
|
-
kind: CompletionItemKind.
|
|
95
|
+
kind: CompletionItemKind.Module,
|
|
95
96
|
insertTextFormat: InsertTextFormat.Snippet,
|
|
96
97
|
insertText: [
|
|
97
98
|
"group '${1:Title}' {",
|
|
@@ -100,6 +101,19 @@ export class LikeC4CompletionProvider extends DefaultCompletionProvider {
|
|
|
100
101
|
].join("\n")
|
|
101
102
|
});
|
|
102
103
|
break;
|
|
104
|
+
case ["par", "parallel"].includes(keyword.value):
|
|
105
|
+
acceptor(context, {
|
|
106
|
+
label: keyword.value,
|
|
107
|
+
detail: `Insert block of parallel steps`,
|
|
108
|
+
kind: CompletionItemKind.Module,
|
|
109
|
+
insertTextFormat: InsertTextFormat.Snippet,
|
|
110
|
+
insertText: [
|
|
111
|
+
`${keyword.value} {`,
|
|
112
|
+
" $0",
|
|
113
|
+
"}"
|
|
114
|
+
].join("\n")
|
|
115
|
+
});
|
|
116
|
+
break;
|
|
103
117
|
case (keyword.value === "dynamic" && AstUtils.hasContainerOfType(context.node, ast.isModelViews)):
|
|
104
118
|
acceptor(context, {
|
|
105
119
|
label: keyword.value,
|
|
@@ -160,11 +174,28 @@ export class LikeC4CompletionProvider extends DefaultCompletionProvider {
|
|
|
160
174
|
case keyword.value === "autoLayout":
|
|
161
175
|
acceptor(context, {
|
|
162
176
|
label: keyword.value,
|
|
163
|
-
kind: CompletionItemKind.
|
|
177
|
+
kind: CompletionItemKind.Property,
|
|
164
178
|
insertTextFormat: InsertTextFormat.Snippet,
|
|
165
179
|
insertText: "autoLayout ${1|TopBottom,BottomTop,LeftRight,RightLeft|}$0"
|
|
166
180
|
});
|
|
167
181
|
break;
|
|
182
|
+
case keyword.value === "mode":
|
|
183
|
+
acceptor(context, {
|
|
184
|
+
label: keyword.value,
|
|
185
|
+
kind: CompletionItemKind.Property,
|
|
186
|
+
insertTextFormat: InsertTextFormat.Snippet,
|
|
187
|
+
insertText: "mode ${1|sequence,diagram|}$0"
|
|
188
|
+
});
|
|
189
|
+
break;
|
|
190
|
+
case ["include", "exclude"].includes(keyword.value):
|
|
191
|
+
acceptor(context, {
|
|
192
|
+
label: keyword.value,
|
|
193
|
+
kind: CompletionItemKind.Operator,
|
|
194
|
+
detail: `Insert ${keyword.value} predicate`,
|
|
195
|
+
insertTextFormat: InsertTextFormat.PlainText,
|
|
196
|
+
insertText: `${keyword.value} `
|
|
197
|
+
});
|
|
198
|
+
break;
|
|
168
199
|
default:
|
|
169
200
|
acceptor(context, {
|
|
170
201
|
label: keyword.value,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FqnRef } from "@likec4/core";
|
|
1
|
+
import { FqnRef, preferSummary } from "@likec4/core";
|
|
2
2
|
import { AstUtils } from "langium";
|
|
3
3
|
import { AstNodeHoverProvider } from "langium/lsp";
|
|
4
4
|
import { ast } from "../ast.mjs";
|
|
@@ -27,6 +27,10 @@ export class LikeC4HoverProvider extends AstNodeHoverProvider {
|
|
|
27
27
|
lines.push(`### ${el.title}`);
|
|
28
28
|
}
|
|
29
29
|
lines.push("deployment node `" + el.kind + "` ");
|
|
30
|
+
const summary = preferSummary(el);
|
|
31
|
+
if (summary) {
|
|
32
|
+
lines.push("", summary.md ?? summary.txt);
|
|
33
|
+
}
|
|
30
34
|
return {
|
|
31
35
|
contents: {
|
|
32
36
|
kind: "markdown",
|
|
@@ -79,7 +83,15 @@ export class LikeC4HoverProvider extends AstNodeHoverProvider {
|
|
|
79
83
|
if (!el) {
|
|
80
84
|
return;
|
|
81
85
|
}
|
|
82
|
-
const lines = [
|
|
86
|
+
const lines = [
|
|
87
|
+
el.id,
|
|
88
|
+
`### ${el.title}`,
|
|
89
|
+
"element kind `" + el.kind + "` "
|
|
90
|
+
];
|
|
91
|
+
const summary = preferSummary(el);
|
|
92
|
+
if (summary) {
|
|
93
|
+
lines.push("", summary.md ?? summary.txt);
|
|
94
|
+
}
|
|
83
95
|
return {
|
|
84
96
|
contents: {
|
|
85
97
|
kind: "markdown",
|
|
@@ -281,7 +281,7 @@ export class LikeC4SemanticTokenProvider extends AbstractSemanticTokenProvider {
|
|
|
281
281
|
}
|
|
282
282
|
return "prune";
|
|
283
283
|
}
|
|
284
|
-
if (ast.isColorProperty(node) || ast.isShapeProperty(node) || ast.isArrowProperty(node) || ast.isLineProperty(node) || ast.isBorderProperty(node) || ast.isSizeProperty(node)) {
|
|
284
|
+
if (ast.isColorProperty(node) || ast.isShapeProperty(node) || ast.isArrowProperty(node) || ast.isLineProperty(node) || ast.isBorderProperty(node) || ast.isSizeProperty(node) || ast.isDynamicViewDisplayVariantProperty(node)) {
|
|
285
285
|
acceptor({
|
|
286
286
|
node,
|
|
287
287
|
property: "key",
|
|
@@ -16,7 +16,7 @@ export declare class MergedSpecification {
|
|
|
16
16
|
/**
|
|
17
17
|
* Converts a parsed model into a C4 model element.
|
|
18
18
|
*/
|
|
19
|
-
toModelElement: ({ tags, links, style: { color, shape, icon, opacity, border, size, multiple, padding, textSize, }, id, kind, title, description, technology, metadata, }: ParsedAstElement) => c4.Element | null;
|
|
19
|
+
toModelElement: ({ tags, links, style: { color, shape, icon, opacity, border, size, multiple, padding, textSize, }, id, kind, title, description, technology, summary, metadata, }: ParsedAstElement) => c4.Element | null;
|
|
20
20
|
/**
|
|
21
21
|
* Converts a parsed model into a C4 model relation.
|
|
22
22
|
*/
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import { FqnRef } from "@likec4/core/types";
|
|
2
|
-
import { MultiMap, nameFromFqn } from "@likec4/core/utils";
|
|
1
|
+
import { FqnRef, omitUndefined } from "@likec4/core/types";
|
|
2
|
+
import { isNonEmptyArray, MultiMap, nameFromFqn } from "@likec4/core/utils";
|
|
3
3
|
import {
|
|
4
|
-
isBoolean,
|
|
5
4
|
isEmpty,
|
|
6
5
|
isNonNullish,
|
|
7
|
-
|
|
6
|
+
unique
|
|
8
7
|
} from "remeda";
|
|
9
8
|
import { logger, logWarnError } from "../../logger.mjs";
|
|
10
9
|
import { assignTagColors } from "./assignTagColors.mjs";
|
|
@@ -66,6 +65,7 @@ export class MergedSpecification {
|
|
|
66
65
|
title,
|
|
67
66
|
description,
|
|
68
67
|
technology,
|
|
68
|
+
summary,
|
|
69
69
|
metadata
|
|
70
70
|
}) => {
|
|
71
71
|
try {
|
|
@@ -85,30 +85,38 @@ export class MergedSpecification {
|
|
|
85
85
|
padding ??= __kind.style.padding;
|
|
86
86
|
textSize ??= __kind.style.textSize;
|
|
87
87
|
description ??= __kind.description;
|
|
88
|
+
summary ??= __kind.summary;
|
|
88
89
|
links ??= __kind.links;
|
|
89
90
|
title = title === nameFromFqn(id) && __kind.title ? __kind.title : title;
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
91
|
+
if (__kind.tags && isNonEmptyArray(__kind.tags)) {
|
|
92
|
+
tags = tags ? unique([
|
|
93
|
+
...__kind.tags,
|
|
94
|
+
...tags
|
|
95
|
+
]) : __kind.tags;
|
|
96
|
+
}
|
|
97
|
+
return omitUndefined({
|
|
98
|
+
metadata: metadata && !isEmpty(metadata) ? metadata : void 0,
|
|
99
|
+
color,
|
|
100
|
+
notation: __kind?.notation,
|
|
101
|
+
shape,
|
|
102
|
+
icon,
|
|
103
|
+
style: omitUndefined({
|
|
104
|
+
border,
|
|
105
|
+
size,
|
|
106
|
+
padding,
|
|
107
|
+
textSize,
|
|
108
|
+
multiple,
|
|
109
|
+
opacity
|
|
110
|
+
}),
|
|
111
|
+
links,
|
|
112
|
+
tags,
|
|
113
|
+
summary,
|
|
114
|
+
technology,
|
|
115
|
+
description,
|
|
108
116
|
title,
|
|
109
117
|
kind,
|
|
110
118
|
id
|
|
111
|
-
};
|
|
119
|
+
});
|
|
112
120
|
} catch (e) {
|
|
113
121
|
logWarnError(e);
|
|
114
122
|
}
|
|
@@ -166,28 +174,24 @@ export class MergedSpecification {
|
|
|
166
174
|
return null;
|
|
167
175
|
}
|
|
168
176
|
let {
|
|
169
|
-
|
|
170
|
-
notation = __kind.notation,
|
|
177
|
+
id,
|
|
171
178
|
style,
|
|
172
179
|
title,
|
|
173
|
-
description,
|
|
174
180
|
...rest
|
|
175
181
|
} = parsed;
|
|
176
|
-
description ??= __kind.description;
|
|
177
182
|
title = title === nameFromFqn(parsed.id) && __kind.title ? __kind.title : title;
|
|
178
|
-
return {
|
|
183
|
+
return omitUndefined({
|
|
184
|
+
...__kind,
|
|
179
185
|
...rest,
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
...notation && { notation },
|
|
183
|
-
...technology && { technology },
|
|
184
|
-
style: {
|
|
186
|
+
title,
|
|
187
|
+
style: omitUndefined({
|
|
185
188
|
border: "dashed",
|
|
186
189
|
opacity: 10,
|
|
187
190
|
...__kind.style,
|
|
188
191
|
...style
|
|
189
|
-
}
|
|
190
|
-
|
|
192
|
+
}),
|
|
193
|
+
id
|
|
194
|
+
});
|
|
191
195
|
} catch (e) {
|
|
192
196
|
logWarnError(e);
|
|
193
197
|
}
|
|
@@ -21,6 +21,7 @@ import {
|
|
|
21
21
|
keys,
|
|
22
22
|
map,
|
|
23
23
|
mapValues,
|
|
24
|
+
omitBy,
|
|
24
25
|
pipe,
|
|
25
26
|
prop,
|
|
26
27
|
reduce
|
|
@@ -153,7 +154,7 @@ export function buildModelData(project, docs) {
|
|
|
153
154
|
title = "Landscape view";
|
|
154
155
|
}
|
|
155
156
|
return {
|
|
156
|
-
...model,
|
|
157
|
+
...omitBy(model, (v) => v === void 0),
|
|
157
158
|
[_stage]: "parsed",
|
|
158
159
|
docUri,
|
|
159
160
|
description,
|
|
@@ -75,16 +75,19 @@ declare const DocumentParserFromMixins: {
|
|
|
75
75
|
parseColorLiteral(astNode: import("../generated/ast").ColorLiteral): ProjectId | undefined;
|
|
76
76
|
parseElementStyle(elementProps: Array<import("../generated/ast").ElementProperty> | import("../generated/ast").ElementStyleProperty | undefined): import("../ast").ParsedElementStyle;
|
|
77
77
|
parseStyleProps(styleProps: Array<import("../generated/ast").StyleProperty> | undefined): import("../ast").ParsedElementStyle;
|
|
78
|
-
|
|
79
|
-
title?: string | undefined;
|
|
80
|
-
description?: string | undefined;
|
|
81
|
-
technology?: string | undefined;
|
|
82
|
-
}, bodyProps: {
|
|
78
|
+
parseBaseProps(props: {
|
|
83
79
|
title?: import("../generated/ast").MarkdownOrString | undefined;
|
|
80
|
+
summary?: import("../generated/ast").MarkdownOrString | undefined;
|
|
84
81
|
description?: import("../generated/ast").MarkdownOrString | undefined;
|
|
85
82
|
technology?: import("../generated/ast").MarkdownOrString | undefined;
|
|
83
|
+
}, override?: {
|
|
84
|
+
title?: string | undefined;
|
|
85
|
+
summary?: string | undefined;
|
|
86
|
+
description?: string | undefined;
|
|
87
|
+
technology?: string | undefined;
|
|
86
88
|
}): {
|
|
87
89
|
title?: string;
|
|
90
|
+
summary?: ProjectId;
|
|
88
91
|
description?: ProjectId;
|
|
89
92
|
technology?: string;
|
|
90
93
|
};
|
|
@@ -165,16 +168,19 @@ declare const DocumentParserFromMixins: {
|
|
|
165
168
|
parseColorLiteral(astNode: import("../generated/ast").ColorLiteral): ProjectId | undefined;
|
|
166
169
|
parseElementStyle(elementProps: Array<import("../generated/ast").ElementProperty> | import("../generated/ast").ElementStyleProperty | undefined): import("../ast").ParsedElementStyle;
|
|
167
170
|
parseStyleProps(styleProps: Array<import("../generated/ast").StyleProperty> | undefined): import("../ast").ParsedElementStyle;
|
|
168
|
-
|
|
169
|
-
title?: string | undefined;
|
|
170
|
-
description?: string | undefined;
|
|
171
|
-
technology?: string | undefined;
|
|
172
|
-
}, bodyProps: {
|
|
171
|
+
parseBaseProps(props: {
|
|
173
172
|
title?: import("../generated/ast").MarkdownOrString | undefined;
|
|
173
|
+
summary?: import("../generated/ast").MarkdownOrString | undefined;
|
|
174
174
|
description?: import("../generated/ast").MarkdownOrString | undefined;
|
|
175
175
|
technology?: import("../generated/ast").MarkdownOrString | undefined;
|
|
176
|
+
}, override?: {
|
|
177
|
+
title?: string | undefined;
|
|
178
|
+
summary?: string | undefined;
|
|
179
|
+
description?: string | undefined;
|
|
180
|
+
technology?: string | undefined;
|
|
176
181
|
}): {
|
|
177
182
|
title?: string;
|
|
183
|
+
summary?: ProjectId;
|
|
178
184
|
description?: ProjectId;
|
|
179
185
|
technology?: string;
|
|
180
186
|
};
|
|
@@ -217,16 +223,19 @@ declare const DocumentParserFromMixins: {
|
|
|
217
223
|
parseColorLiteral(astNode: import("../generated/ast").ColorLiteral): ProjectId | undefined;
|
|
218
224
|
parseElementStyle(elementProps: Array<import("../generated/ast").ElementProperty> | import("../generated/ast").ElementStyleProperty | undefined): import("../ast").ParsedElementStyle;
|
|
219
225
|
parseStyleProps(styleProps: Array<import("../generated/ast").StyleProperty> | undefined): import("../ast").ParsedElementStyle;
|
|
220
|
-
|
|
221
|
-
title?: string | undefined;
|
|
222
|
-
description?: string | undefined;
|
|
223
|
-
technology?: string | undefined;
|
|
224
|
-
}, bodyProps: {
|
|
226
|
+
parseBaseProps(props: {
|
|
225
227
|
title?: import("../generated/ast").MarkdownOrString | undefined;
|
|
228
|
+
summary?: import("../generated/ast").MarkdownOrString | undefined;
|
|
226
229
|
description?: import("../generated/ast").MarkdownOrString | undefined;
|
|
227
230
|
technology?: import("../generated/ast").MarkdownOrString | undefined;
|
|
231
|
+
}, override?: {
|
|
232
|
+
title?: string | undefined;
|
|
233
|
+
summary?: string | undefined;
|
|
234
|
+
description?: string | undefined;
|
|
235
|
+
technology?: string | undefined;
|
|
228
236
|
}): {
|
|
229
237
|
title?: string;
|
|
238
|
+
summary?: ProjectId;
|
|
230
239
|
description?: ProjectId;
|
|
231
240
|
technology?: string;
|
|
232
241
|
};
|
|
@@ -283,16 +292,19 @@ declare const DocumentParserFromMixins: {
|
|
|
283
292
|
parseColorLiteral(astNode: import("../generated/ast").ColorLiteral): ProjectId | undefined;
|
|
284
293
|
parseElementStyle(elementProps: Array<import("../generated/ast").ElementProperty> | import("../generated/ast").ElementStyleProperty | undefined): import("../ast").ParsedElementStyle;
|
|
285
294
|
parseStyleProps(styleProps: Array<import("../generated/ast").StyleProperty> | undefined): import("../ast").ParsedElementStyle;
|
|
286
|
-
|
|
287
|
-
title?: string | undefined;
|
|
288
|
-
description?: string | undefined;
|
|
289
|
-
technology?: string | undefined;
|
|
290
|
-
}, bodyProps: {
|
|
295
|
+
parseBaseProps(props: {
|
|
291
296
|
title?: import("../generated/ast").MarkdownOrString | undefined;
|
|
297
|
+
summary?: import("../generated/ast").MarkdownOrString | undefined;
|
|
292
298
|
description?: import("../generated/ast").MarkdownOrString | undefined;
|
|
293
299
|
technology?: import("../generated/ast").MarkdownOrString | undefined;
|
|
300
|
+
}, override?: {
|
|
301
|
+
title?: string | undefined;
|
|
302
|
+
summary?: string | undefined;
|
|
303
|
+
description?: string | undefined;
|
|
304
|
+
technology?: string | undefined;
|
|
294
305
|
}): {
|
|
295
306
|
title?: string;
|
|
307
|
+
summary?: ProjectId;
|
|
296
308
|
description?: ProjectId;
|
|
297
309
|
technology?: string;
|
|
298
310
|
};
|
|
@@ -342,16 +354,19 @@ declare const DocumentParserFromMixins: {
|
|
|
342
354
|
parseColorLiteral(astNode: import("../generated/ast").ColorLiteral): ProjectId | undefined;
|
|
343
355
|
parseElementStyle(elementProps: Array<import("../generated/ast").ElementProperty> | import("../generated/ast").ElementStyleProperty | undefined): import("../ast").ParsedElementStyle;
|
|
344
356
|
parseStyleProps(styleProps: Array<import("../generated/ast").StyleProperty> | undefined): import("../ast").ParsedElementStyle;
|
|
345
|
-
|
|
346
|
-
title?: string | undefined;
|
|
347
|
-
description?: string | undefined;
|
|
348
|
-
technology?: string | undefined;
|
|
349
|
-
}, bodyProps: {
|
|
357
|
+
parseBaseProps(props: {
|
|
350
358
|
title?: import("../generated/ast").MarkdownOrString | undefined;
|
|
359
|
+
summary?: import("../generated/ast").MarkdownOrString | undefined;
|
|
351
360
|
description?: import("../generated/ast").MarkdownOrString | undefined;
|
|
352
361
|
technology?: import("../generated/ast").MarkdownOrString | undefined;
|
|
362
|
+
}, override?: {
|
|
363
|
+
title?: string | undefined;
|
|
364
|
+
summary?: string | undefined;
|
|
365
|
+
description?: string | undefined;
|
|
366
|
+
technology?: string | undefined;
|
|
353
367
|
}): {
|
|
354
368
|
title?: string;
|
|
369
|
+
summary?: ProjectId;
|
|
355
370
|
description?: ProjectId;
|
|
356
371
|
technology?: string;
|
|
357
372
|
};
|
|
@@ -409,16 +424,19 @@ declare const DocumentParserFromMixins: {
|
|
|
409
424
|
parseColorLiteral(astNode: import("../generated/ast").ColorLiteral): ProjectId | undefined;
|
|
410
425
|
parseElementStyle(elementProps: Array<import("../generated/ast").ElementProperty> | import("../generated/ast").ElementStyleProperty | undefined): import("../ast").ParsedElementStyle;
|
|
411
426
|
parseStyleProps(styleProps: Array<import("../generated/ast").StyleProperty> | undefined): import("../ast").ParsedElementStyle;
|
|
412
|
-
|
|
413
|
-
title?: string | undefined;
|
|
414
|
-
description?: string | undefined;
|
|
415
|
-
technology?: string | undefined;
|
|
416
|
-
}, bodyProps: {
|
|
427
|
+
parseBaseProps(props: {
|
|
417
428
|
title?: import("../generated/ast").MarkdownOrString | undefined;
|
|
429
|
+
summary?: import("../generated/ast").MarkdownOrString | undefined;
|
|
418
430
|
description?: import("../generated/ast").MarkdownOrString | undefined;
|
|
419
431
|
technology?: import("../generated/ast").MarkdownOrString | undefined;
|
|
432
|
+
}, override?: {
|
|
433
|
+
title?: string | undefined;
|
|
434
|
+
summary?: string | undefined;
|
|
435
|
+
description?: string | undefined;
|
|
436
|
+
technology?: string | undefined;
|
|
420
437
|
}): {
|
|
421
438
|
title?: string;
|
|
439
|
+
summary?: ProjectId;
|
|
422
440
|
description?: ProjectId;
|
|
423
441
|
technology?: string;
|
|
424
442
|
};
|
|
@@ -469,16 +487,19 @@ declare const DocumentParserFromMixins: {
|
|
|
469
487
|
parseColorLiteral(astNode: import("../generated/ast").ColorLiteral): ProjectId | undefined;
|
|
470
488
|
parseElementStyle(elementProps: Array<import("../generated/ast").ElementProperty> | import("../generated/ast").ElementStyleProperty | undefined): import("../ast").ParsedElementStyle;
|
|
471
489
|
parseStyleProps(styleProps: Array<import("../generated/ast").StyleProperty> | undefined): import("../ast").ParsedElementStyle;
|
|
472
|
-
|
|
473
|
-
title?: string | undefined;
|
|
474
|
-
description?: string | undefined;
|
|
475
|
-
technology?: string | undefined;
|
|
476
|
-
}, bodyProps: {
|
|
490
|
+
parseBaseProps(props: {
|
|
477
491
|
title?: import("../generated/ast").MarkdownOrString | undefined;
|
|
492
|
+
summary?: import("../generated/ast").MarkdownOrString | undefined;
|
|
478
493
|
description?: import("../generated/ast").MarkdownOrString | undefined;
|
|
479
494
|
technology?: import("../generated/ast").MarkdownOrString | undefined;
|
|
495
|
+
}, override?: {
|
|
496
|
+
title?: string | undefined;
|
|
497
|
+
summary?: string | undefined;
|
|
498
|
+
description?: string | undefined;
|
|
499
|
+
technology?: string | undefined;
|
|
480
500
|
}): {
|
|
481
501
|
title?: string;
|
|
502
|
+
summary?: ProjectId;
|
|
482
503
|
description?: ProjectId;
|
|
483
504
|
technology?: string;
|
|
484
505
|
};
|
|
@@ -509,16 +530,19 @@ declare const DocumentParserFromMixins: {
|
|
|
509
530
|
parseColorLiteral(astNode: import("../generated/ast").ColorLiteral): ProjectId | undefined;
|
|
510
531
|
parseElementStyle(elementProps: Array<import("../generated/ast").ElementProperty> | import("../generated/ast").ElementStyleProperty | undefined): import("../ast").ParsedElementStyle;
|
|
511
532
|
parseStyleProps(styleProps: Array<import("../generated/ast").StyleProperty> | undefined): import("../ast").ParsedElementStyle;
|
|
512
|
-
|
|
513
|
-
title?: string | undefined;
|
|
514
|
-
description?: string | undefined;
|
|
515
|
-
technology?: string | undefined;
|
|
516
|
-
}, bodyProps: {
|
|
533
|
+
parseBaseProps(props: {
|
|
517
534
|
title?: import("../generated/ast").MarkdownOrString | undefined;
|
|
535
|
+
summary?: import("../generated/ast").MarkdownOrString | undefined;
|
|
518
536
|
description?: import("../generated/ast").MarkdownOrString | undefined;
|
|
519
537
|
technology?: import("../generated/ast").MarkdownOrString | undefined;
|
|
538
|
+
}, override?: {
|
|
539
|
+
title?: string | undefined;
|
|
540
|
+
summary?: string | undefined;
|
|
541
|
+
description?: string | undefined;
|
|
542
|
+
technology?: string | undefined;
|
|
520
543
|
}): {
|
|
521
544
|
title?: string;
|
|
545
|
+
summary?: ProjectId;
|
|
522
546
|
description?: ProjectId;
|
|
523
547
|
technology?: string;
|
|
524
548
|
};
|
|
@@ -564,16 +588,19 @@ declare const DocumentParserFromMixins: {
|
|
|
564
588
|
parseColorLiteral(astNode: import("../generated/ast").ColorLiteral): ProjectId | undefined;
|
|
565
589
|
parseElementStyle(elementProps: Array<import("../generated/ast").ElementProperty> | import("../generated/ast").ElementStyleProperty | undefined): import("../ast").ParsedElementStyle;
|
|
566
590
|
parseStyleProps(styleProps: Array<import("../generated/ast").StyleProperty> | undefined): import("../ast").ParsedElementStyle;
|
|
567
|
-
|
|
568
|
-
title?: string | undefined;
|
|
569
|
-
description?: string | undefined;
|
|
570
|
-
technology?: string | undefined;
|
|
571
|
-
}, bodyProps: {
|
|
591
|
+
parseBaseProps(props: {
|
|
572
592
|
title?: import("../generated/ast").MarkdownOrString | undefined;
|
|
593
|
+
summary?: import("../generated/ast").MarkdownOrString | undefined;
|
|
573
594
|
description?: import("../generated/ast").MarkdownOrString | undefined;
|
|
574
595
|
technology?: import("../generated/ast").MarkdownOrString | undefined;
|
|
596
|
+
}, override?: {
|
|
597
|
+
title?: string | undefined;
|
|
598
|
+
summary?: string | undefined;
|
|
599
|
+
description?: string | undefined;
|
|
600
|
+
technology?: string | undefined;
|
|
575
601
|
}): {
|
|
576
602
|
title?: string;
|
|
603
|
+
summary?: ProjectId;
|
|
577
604
|
description?: ProjectId;
|
|
578
605
|
technology?: string;
|
|
579
606
|
};
|
|
@@ -44,19 +44,25 @@ export declare class BaseParser {
|
|
|
44
44
|
parseElementStyle(elementProps: Array<ast.ElementProperty> | ast.ElementStyleProperty | undefined): ParsedElementStyle;
|
|
45
45
|
parseStyleProps(styleProps: Array<ast.StyleProperty> | undefined): ParsedElementStyle;
|
|
46
46
|
/**
|
|
47
|
-
*
|
|
48
|
-
*
|
|
47
|
+
* Parse base properties: title, description and technology
|
|
48
|
+
*
|
|
49
|
+
* @param props - body properties (inside '{...}')
|
|
50
|
+
* @param override - optional, inline properties (right on the node)
|
|
51
|
+
* have higher priority and override body properties
|
|
49
52
|
*/
|
|
50
|
-
|
|
51
|
-
title?: string | undefined;
|
|
52
|
-
description?: string | undefined;
|
|
53
|
-
technology?: string | undefined;
|
|
54
|
-
}, bodyProps: {
|
|
53
|
+
parseBaseProps(props: {
|
|
55
54
|
title?: ast.MarkdownOrString | undefined;
|
|
55
|
+
summary?: ast.MarkdownOrString | undefined;
|
|
56
56
|
description?: ast.MarkdownOrString | undefined;
|
|
57
57
|
technology?: ast.MarkdownOrString | undefined;
|
|
58
|
+
}, override?: {
|
|
59
|
+
title?: string | undefined;
|
|
60
|
+
summary?: string | undefined;
|
|
61
|
+
description?: string | undefined;
|
|
62
|
+
technology?: string | undefined;
|
|
58
63
|
}): {
|
|
59
64
|
title?: string;
|
|
65
|
+
summary?: c4.MarkdownOrString;
|
|
60
66
|
description?: c4.MarkdownOrString;
|
|
61
67
|
technology?: string;
|
|
62
68
|
};
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
GlobalFqn,
|
|
3
|
+
isNonEmptyArray,
|
|
4
|
+
nonexhaustive,
|
|
5
|
+
nonNullable,
|
|
6
|
+
omitUndefined
|
|
7
|
+
} from "@likec4/core";
|
|
2
8
|
import {
|
|
3
9
|
filter,
|
|
4
10
|
flatMap,
|
|
@@ -23,10 +29,11 @@ import {
|
|
|
23
29
|
parseMarkdownAsString,
|
|
24
30
|
toColor
|
|
25
31
|
} from "../../ast.mjs";
|
|
26
|
-
import {
|
|
32
|
+
import { serverLogger } from "../../logger.mjs";
|
|
27
33
|
import { projectIdFrom } from "../../utils/index.mjs";
|
|
28
34
|
import { readStrictFqn } from "../../utils/elementRef.mjs";
|
|
29
35
|
import { checksFromDiagnostics } from "../../validation/index.mjs";
|
|
36
|
+
const logger = serverLogger.getChild("BaseParser");
|
|
30
37
|
export function toSingleLine(str) {
|
|
31
38
|
if (str === null || str === void 0) {
|
|
32
39
|
return void 0;
|
|
@@ -104,10 +111,9 @@ export class BaseParser {
|
|
|
104
111
|
metadataAstNode.props,
|
|
105
112
|
map((p) => [p.key, removeIndent(p.value)]),
|
|
106
113
|
map(([key, value]) => [key, value.md || value.txt]),
|
|
107
|
-
filter(([_, value]) => isTruthy(value))
|
|
108
|
-
fromEntries()
|
|
114
|
+
filter(([_, value]) => isTruthy(value))
|
|
109
115
|
);
|
|
110
|
-
return
|
|
116
|
+
return data.length > 0 ? fromEntries(data) : void 0;
|
|
111
117
|
}
|
|
112
118
|
parseMarkdownOrString(markdownOrString) {
|
|
113
119
|
if (ast.isMarkdownOrString(markdownOrString)) {
|
|
@@ -315,17 +321,22 @@ export class BaseParser {
|
|
|
315
321
|
return result;
|
|
316
322
|
}
|
|
317
323
|
/**
|
|
318
|
-
*
|
|
319
|
-
*
|
|
324
|
+
* Parse base properties: title, description and technology
|
|
325
|
+
*
|
|
326
|
+
* @param props - body properties (inside '{...}')
|
|
327
|
+
* @param override - optional, inline properties (right on the node)
|
|
328
|
+
* have higher priority and override body properties
|
|
320
329
|
*/
|
|
321
|
-
|
|
322
|
-
const title = removeIndent(
|
|
323
|
-
const description =
|
|
324
|
-
const
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
+
parseBaseProps(props, override) {
|
|
331
|
+
const title = removeIndent(override?.title ?? parseMarkdownAsString(props.title));
|
|
332
|
+
const description = override?.description ? { txt: removeIndent(override.description) } : this.parseMarkdownOrString(props.description);
|
|
333
|
+
const summary = override?.summary ? { txt: removeIndent(override.summary) } : this.parseMarkdownOrString(props.summary);
|
|
334
|
+
const technology = toSingleLine(override?.technology) ?? removeIndent(parseMarkdownAsString(props.technology));
|
|
335
|
+
return omitUndefined({
|
|
336
|
+
title,
|
|
337
|
+
summary,
|
|
338
|
+
description,
|
|
339
|
+
technology
|
|
340
|
+
});
|
|
330
341
|
}
|
|
331
342
|
}
|
|
@@ -50,16 +50,19 @@ export declare function DeploymentModelParser<TBase extends WithExpressionV2>(B:
|
|
|
50
50
|
parseColorLiteral(astNode: ast.ColorLiteral): c4.ColorLiteral | undefined;
|
|
51
51
|
parseElementStyle(elementProps: Array<ast.ElementProperty> | ast.ElementStyleProperty | undefined): import("../../ast").ParsedElementStyle;
|
|
52
52
|
parseStyleProps(styleProps: Array<ast.StyleProperty> | undefined): import("../../ast").ParsedElementStyle;
|
|
53
|
-
|
|
54
|
-
title?: string | undefined;
|
|
55
|
-
description?: string | undefined;
|
|
56
|
-
technology?: string | undefined;
|
|
57
|
-
}, bodyProps: {
|
|
53
|
+
parseBaseProps(props: {
|
|
58
54
|
title?: ast.MarkdownOrString | undefined;
|
|
55
|
+
summary?: ast.MarkdownOrString | undefined;
|
|
59
56
|
description?: ast.MarkdownOrString | undefined;
|
|
60
57
|
technology?: ast.MarkdownOrString | undefined;
|
|
58
|
+
}, override?: {
|
|
59
|
+
title?: string | undefined;
|
|
60
|
+
summary?: string | undefined;
|
|
61
|
+
description?: string | undefined;
|
|
62
|
+
technology?: string | undefined;
|
|
61
63
|
}): {
|
|
62
64
|
title?: string;
|
|
65
|
+
summary?: c4.MarkdownOrString;
|
|
63
66
|
description?: c4.MarkdownOrString;
|
|
64
67
|
technology?: string;
|
|
65
68
|
};
|