@likec4/language-server 1.32.2 → 1.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/README.md +27 -1
  2. package/dist/Rpc.d.ts +2 -0
  3. package/dist/Rpc.js +24 -6
  4. package/dist/ast.d.ts +6 -5
  5. package/dist/ast.js +3 -0
  6. package/dist/bundled.mjs +3194 -2547
  7. package/dist/formatting/LikeC4Formatter.d.ts +1 -0
  8. package/dist/formatting/LikeC4Formatter.js +25 -1
  9. package/dist/generated/ast.d.ts +21 -12
  10. package/dist/generated/ast.js +21 -9
  11. package/dist/generated/grammar.js +1 -1
  12. package/dist/index.d.ts +0 -1
  13. package/dist/index.js +1 -2
  14. package/dist/lsp/SemanticTokenProvider.js +1 -1
  15. package/dist/mcp/{LikeC4MCPServerFactory.d.ts → NoopLikeC4MCPServer.d.ts} +1 -9
  16. package/dist/mcp/interfaces.d.ts +11 -0
  17. package/dist/mcp/interfaces.js +0 -0
  18. package/dist/mcp/sseserver/MCPServer.d.ts +1 -1
  19. package/dist/mcp/sseserver/MCPServer.js +5 -5
  20. package/dist/mcp/sseserver/MCPServerFactory.js +30 -58
  21. package/dist/mcp/sseserver/{with-mcp-server.d.ts → WithMCPServer.d.ts} +1 -1
  22. package/dist/mcp/tools/_common.d.ts +68 -0
  23. package/dist/mcp/tools/_common.js +14 -0
  24. package/dist/mcp/tools/list-projects.d.ts +6 -0
  25. package/dist/mcp/tools/list-projects.js +31 -0
  26. package/dist/mcp/tools/open-view.d.ts +10 -0
  27. package/dist/mcp/tools/open-view.js +29 -0
  28. package/dist/mcp/tools/read-element.d.ts +10 -0
  29. package/dist/mcp/tools/read-element.js +135 -0
  30. package/dist/mcp/tools/read-project-elements.d.ts +8 -0
  31. package/dist/mcp/tools/read-project-elements.js +93 -0
  32. package/dist/mcp/tools/read-project-summary.d.ts +8 -0
  33. package/dist/mcp/tools/read-project-summary.js +68 -0
  34. package/dist/mcp/tools/read-view.d.ts +10 -0
  35. package/dist/mcp/tools/read-view.js +164 -0
  36. package/dist/mcp/tools/search-element.d.ts +8 -0
  37. package/dist/mcp/tools/search-element.js +105 -0
  38. package/dist/mcp/utils.d.ts +17 -34
  39. package/dist/mcp/utils.js +41 -101
  40. package/dist/model/builder/MergedSpecification.js +8 -4
  41. package/dist/model/index.d.ts +1 -0
  42. package/dist/model/index.js +1 -0
  43. package/dist/model/model-parser-where.d.ts +1 -0
  44. package/dist/model/model-parser-where.js +30 -24
  45. package/dist/model/model-parser.d.ts +140 -0
  46. package/dist/model/parser/Base.d.ts +30 -2
  47. package/dist/model/parser/Base.js +54 -3
  48. package/dist/model/parser/DeploymentModelParser.d.ts +17 -1
  49. package/dist/model/parser/DeploymentModelParser.js +24 -21
  50. package/dist/model/parser/DeploymentViewParser.d.ts +17 -1
  51. package/dist/model/parser/DeploymentViewParser.js +15 -6
  52. package/dist/model/parser/FqnRefParser.d.ts +17 -1
  53. package/dist/model/parser/FqnRefParser.js +42 -16
  54. package/dist/model/parser/GlobalsParser.d.ts +17 -1
  55. package/dist/model/parser/ImportsParser.d.ts +14 -0
  56. package/dist/model/parser/ModelParser.d.ts +17 -1
  57. package/dist/model/parser/ModelParser.js +22 -14
  58. package/dist/model/parser/PredicatesParser.d.ts +17 -1
  59. package/dist/model/parser/SpecificationParser.d.ts +14 -0
  60. package/dist/model/parser/SpecificationParser.js +16 -11
  61. package/dist/model/parser/ValueConverter.d.ts +4 -0
  62. package/dist/model/parser/ValueConverter.js +12 -0
  63. package/dist/model/parser/ViewsParser.d.ts +17 -1
  64. package/dist/model/parser/ViewsParser.js +21 -7
  65. package/dist/module.d.ts +5 -4
  66. package/dist/module.js +6 -7
  67. package/dist/protocol.d.ts +16 -0
  68. package/dist/protocol.js +4 -0
  69. package/dist/validation/property-checks.js +1 -1
  70. package/dist/views/configurable-layouter.js +22 -28
  71. package/dist/views/likec4-views.d.ts +5 -0
  72. package/dist/views/likec4-views.js +6 -1
  73. package/package.json +20 -19
  74. package/dist/mcp/LikeC4MCPTools.d.ts +0 -96
  75. package/dist/mcp/LikeC4MCPTools.js +0 -290
  76. /package/dist/mcp/{LikeC4MCPServerFactory.js → NoopLikeC4MCPServer.js} +0 -0
  77. /package/dist/mcp/sseserver/{with-mcp-server.js → WithMCPServer.js} +0 -0
@@ -50,6 +50,8 @@ declare const DocumentParserFromMixins: {
50
50
  parseRelationExprOrWhere(astNode: import("../generated/ast").RelationExprOrWhere): ProjectId;
51
51
  parseRelationExprWhere(astNode: import("../generated/ast").RelationExprWhere): ProjectId;
52
52
  parseRelationExpr(astNode: import("../generated/ast").RelationExpr): ProjectId;
53
+ parseInlineKindCondition(astNode: import("../generated/ast").OutgoingRelationExpr): ProjectId | null;
54
+ wrapInWhere(expr: ProjectId, condition: ProjectId | null): ProjectId;
53
55
  isValid: import("../validation").IsValidFn;
54
56
  readonly services: LikeC4Services;
55
57
  readonly doc: ParsedLikeC4LangiumDocument;
@@ -63,6 +65,7 @@ declare const DocumentParserFromMixins: {
63
65
  getMetadata(metadataAstNode: import("../generated/ast").MetadataProperty | undefined): {
64
66
  [key: string]: string;
65
67
  } | undefined;
68
+ parseMarkdownOrString(markdownOrString: import("../generated/ast").MarkdownOrString | undefined): ProjectId | undefined;
66
69
  convertTags<E extends {
67
70
  tags?: import("../generated/ast").Tags;
68
71
  }>(withTags?: E | undefined): any;
@@ -75,6 +78,19 @@ declare const DocumentParserFromMixins: {
75
78
  parseColorLiteral(astNode: import("../generated/ast").ColorLiteral): ProjectId | undefined;
76
79
  parseElementStyle(elementProps: Array<import("../generated/ast").ElementProperty> | import("../generated/ast").ElementStyleProperty | undefined): import("../ast").ParsedElementStyle;
77
80
  parseStyleProps(styleProps: Array<import("../generated/ast").StyleProperty> | undefined): import("../ast").ParsedElementStyle;
81
+ parseTitleDescriptionTechnology(inlineProps: {
82
+ title?: string | undefined;
83
+ description?: string | undefined;
84
+ technology?: string | undefined;
85
+ }, bodyProps: {
86
+ title?: import("../generated/ast").MarkdownOrString | undefined;
87
+ description?: import("../generated/ast").MarkdownOrString | undefined;
88
+ technology?: import("../generated/ast").MarkdownOrString | undefined;
89
+ }): {
90
+ title?: string;
91
+ description?: ProjectId;
92
+ technology?: string;
93
+ };
78
94
  parseDeploymentView(astNode: import("../generated/ast").DeploymentView): import("../ast").ParsedAstDeploymentView;
79
95
  parseDeploymentViewRule(astRule: import("../generated/ast").DeploymentViewRule): ProjectId;
80
96
  parseDeploymentViewRulePredicate(astRule: import("../generated/ast").DeploymentViewRulePredicate): ProjectId;
@@ -127,6 +143,8 @@ declare const DocumentParserFromMixins: {
127
143
  parseRelationExprOrWhere(astNode: import("../generated/ast").RelationExprOrWhere): ProjectId;
128
144
  parseRelationExprWhere(astNode: import("../generated/ast").RelationExprWhere): ProjectId;
129
145
  parseRelationExpr(astNode: import("../generated/ast").RelationExpr): ProjectId;
146
+ parseInlineKindCondition(astNode: import("../generated/ast").OutgoingRelationExpr): ProjectId | null;
147
+ wrapInWhere(expr: ProjectId, condition: ProjectId | null): ProjectId;
130
148
  isValid: import("../validation").IsValidFn;
131
149
  readonly services: LikeC4Services;
132
150
  readonly doc: ParsedLikeC4LangiumDocument;
@@ -140,6 +158,7 @@ declare const DocumentParserFromMixins: {
140
158
  getMetadata(metadataAstNode: import("../generated/ast").MetadataProperty | undefined): {
141
159
  [key: string]: string;
142
160
  } | undefined;
161
+ parseMarkdownOrString(markdownOrString: import("../generated/ast").MarkdownOrString | undefined): ProjectId | undefined;
143
162
  convertTags<E extends {
144
163
  tags?: import("../generated/ast").Tags;
145
164
  }>(withTags?: E | undefined): any;
@@ -152,6 +171,19 @@ declare const DocumentParserFromMixins: {
152
171
  parseColorLiteral(astNode: import("../generated/ast").ColorLiteral): ProjectId | undefined;
153
172
  parseElementStyle(elementProps: Array<import("../generated/ast").ElementProperty> | import("../generated/ast").ElementStyleProperty | undefined): import("../ast").ParsedElementStyle;
154
173
  parseStyleProps(styleProps: Array<import("../generated/ast").StyleProperty> | undefined): import("../ast").ParsedElementStyle;
174
+ parseTitleDescriptionTechnology(inlineProps: {
175
+ title?: string | undefined;
176
+ description?: string | undefined;
177
+ technology?: string | undefined;
178
+ }, bodyProps: {
179
+ title?: import("../generated/ast").MarkdownOrString | undefined;
180
+ description?: import("../generated/ast").MarkdownOrString | undefined;
181
+ technology?: import("../generated/ast").MarkdownOrString | undefined;
182
+ }): {
183
+ title?: string;
184
+ description?: ProjectId;
185
+ technology?: string;
186
+ };
155
187
  parseDeploymentView(astNode: import("../generated/ast").DeploymentView): import("../ast").ParsedAstDeploymentView;
156
188
  parseDeploymentViewRule(astRule: import("../generated/ast").DeploymentViewRule): ProjectId;
157
189
  parseDeploymentViewRulePredicate(astRule: import("../generated/ast").DeploymentViewRulePredicate): ProjectId;
@@ -181,6 +213,7 @@ declare const DocumentParserFromMixins: {
181
213
  getMetadata(metadataAstNode: import("../generated/ast").MetadataProperty | undefined): {
182
214
  [key: string]: string;
183
215
  } | undefined;
216
+ parseMarkdownOrString(markdownOrString: import("../generated/ast").MarkdownOrString | undefined): ProjectId | undefined;
184
217
  convertTags<E extends {
185
218
  tags?: import("../generated/ast").Tags;
186
219
  }>(withTags?: E | undefined): any;
@@ -193,6 +226,19 @@ declare const DocumentParserFromMixins: {
193
226
  parseColorLiteral(astNode: import("../generated/ast").ColorLiteral): ProjectId | undefined;
194
227
  parseElementStyle(elementProps: Array<import("../generated/ast").ElementProperty> | import("../generated/ast").ElementStyleProperty | undefined): import("../ast").ParsedElementStyle;
195
228
  parseStyleProps(styleProps: Array<import("../generated/ast").StyleProperty> | undefined): import("../ast").ParsedElementStyle;
229
+ parseTitleDescriptionTechnology(inlineProps: {
230
+ title?: string | undefined;
231
+ description?: string | undefined;
232
+ technology?: string | undefined;
233
+ }, bodyProps: {
234
+ title?: import("../generated/ast").MarkdownOrString | undefined;
235
+ description?: import("../generated/ast").MarkdownOrString | undefined;
236
+ technology?: import("../generated/ast").MarkdownOrString | undefined;
237
+ }): {
238
+ title?: string;
239
+ description?: ProjectId;
240
+ technology?: string;
241
+ };
196
242
  };
197
243
  } & {
198
244
  new (...args: any[]): {
@@ -221,6 +267,8 @@ declare const DocumentParserFromMixins: {
221
267
  parseRelationExprOrWhere(astNode: import("../generated/ast").RelationExprOrWhere): ProjectId;
222
268
  parseRelationExprWhere(astNode: import("../generated/ast").RelationExprWhere): ProjectId;
223
269
  parseRelationExpr(astNode: import("../generated/ast").RelationExpr): ProjectId;
270
+ parseInlineKindCondition(astNode: import("../generated/ast").OutgoingRelationExpr): ProjectId | null;
271
+ wrapInWhere(expr: ProjectId, condition: ProjectId | null): ProjectId;
224
272
  isValid: import("../validation").IsValidFn;
225
273
  readonly services: LikeC4Services;
226
274
  readonly doc: ParsedLikeC4LangiumDocument;
@@ -234,6 +282,7 @@ declare const DocumentParserFromMixins: {
234
282
  getMetadata(metadataAstNode: import("../generated/ast").MetadataProperty | undefined): {
235
283
  [key: string]: string;
236
284
  } | undefined;
285
+ parseMarkdownOrString(markdownOrString: import("../generated/ast").MarkdownOrString | undefined): ProjectId | undefined;
237
286
  convertTags<E extends {
238
287
  tags?: import("../generated/ast").Tags;
239
288
  }>(withTags?: E | undefined): any;
@@ -246,6 +295,19 @@ declare const DocumentParserFromMixins: {
246
295
  parseColorLiteral(astNode: import("../generated/ast").ColorLiteral): ProjectId | undefined;
247
296
  parseElementStyle(elementProps: Array<import("../generated/ast").ElementProperty> | import("../generated/ast").ElementStyleProperty | undefined): import("../ast").ParsedElementStyle;
248
297
  parseStyleProps(styleProps: Array<import("../generated/ast").StyleProperty> | undefined): import("../ast").ParsedElementStyle;
298
+ parseTitleDescriptionTechnology(inlineProps: {
299
+ title?: string | undefined;
300
+ description?: string | undefined;
301
+ technology?: string | undefined;
302
+ }, bodyProps: {
303
+ title?: import("../generated/ast").MarkdownOrString | undefined;
304
+ description?: import("../generated/ast").MarkdownOrString | undefined;
305
+ technology?: import("../generated/ast").MarkdownOrString | undefined;
306
+ }): {
307
+ title?: string;
308
+ description?: ProjectId;
309
+ technology?: string;
310
+ };
249
311
  };
250
312
  } & {
251
313
  new (...args: any[]): {
@@ -267,6 +329,8 @@ declare const DocumentParserFromMixins: {
267
329
  parseRelationExprOrWhere(astNode: import("../generated/ast").RelationExprOrWhere): ProjectId;
268
330
  parseRelationExprWhere(astNode: import("../generated/ast").RelationExprWhere): ProjectId;
269
331
  parseRelationExpr(astNode: import("../generated/ast").RelationExpr): ProjectId;
332
+ parseInlineKindCondition(astNode: import("../generated/ast").OutgoingRelationExpr): ProjectId | null;
333
+ wrapInWhere(expr: ProjectId, condition: ProjectId | null): ProjectId;
270
334
  isValid: import("../validation").IsValidFn;
271
335
  readonly services: LikeC4Services;
272
336
  readonly doc: ParsedLikeC4LangiumDocument;
@@ -280,6 +344,7 @@ declare const DocumentParserFromMixins: {
280
344
  getMetadata(metadataAstNode: import("../generated/ast").MetadataProperty | undefined): {
281
345
  [key: string]: string;
282
346
  } | undefined;
347
+ parseMarkdownOrString(markdownOrString: import("../generated/ast").MarkdownOrString | undefined): ProjectId | undefined;
283
348
  convertTags<E extends {
284
349
  tags?: import("../generated/ast").Tags;
285
350
  }>(withTags?: E | undefined): any;
@@ -292,6 +357,19 @@ declare const DocumentParserFromMixins: {
292
357
  parseColorLiteral(astNode: import("../generated/ast").ColorLiteral): ProjectId | undefined;
293
358
  parseElementStyle(elementProps: Array<import("../generated/ast").ElementProperty> | import("../generated/ast").ElementStyleProperty | undefined): import("../ast").ParsedElementStyle;
294
359
  parseStyleProps(styleProps: Array<import("../generated/ast").StyleProperty> | undefined): import("../ast").ParsedElementStyle;
360
+ parseTitleDescriptionTechnology(inlineProps: {
361
+ title?: string | undefined;
362
+ description?: string | undefined;
363
+ technology?: string | undefined;
364
+ }, bodyProps: {
365
+ title?: import("../generated/ast").MarkdownOrString | undefined;
366
+ description?: import("../generated/ast").MarkdownOrString | undefined;
367
+ technology?: import("../generated/ast").MarkdownOrString | undefined;
368
+ }): {
369
+ title?: string;
370
+ description?: ProjectId;
371
+ technology?: string;
372
+ };
295
373
  parseDeployment(): void;
296
374
  parseDeploymentNode(astNode: import("../generated/ast").DeploymentNode): import("../ast").ParsedAstDeployment.Node;
297
375
  parseDeployedInstance(astNode: import("../generated/ast").DeployedInstance): import("../ast").ParsedAstDeployment.Instance;
@@ -321,6 +399,8 @@ declare const DocumentParserFromMixins: {
321
399
  parseRelationExprOrWhere(astNode: import("../generated/ast").RelationExprOrWhere): ProjectId;
322
400
  parseRelationExprWhere(astNode: import("../generated/ast").RelationExprWhere): ProjectId;
323
401
  parseRelationExpr(astNode: import("../generated/ast").RelationExpr): ProjectId;
402
+ parseInlineKindCondition(astNode: import("../generated/ast").OutgoingRelationExpr): ProjectId | null;
403
+ wrapInWhere(expr: ProjectId, condition: ProjectId | null): ProjectId;
324
404
  isValid: import("../validation").IsValidFn;
325
405
  readonly services: LikeC4Services;
326
406
  readonly doc: ParsedLikeC4LangiumDocument;
@@ -334,6 +414,7 @@ declare const DocumentParserFromMixins: {
334
414
  getMetadata(metadataAstNode: import("../generated/ast").MetadataProperty | undefined): {
335
415
  [key: string]: string;
336
416
  } | undefined;
417
+ parseMarkdownOrString(markdownOrString: import("../generated/ast").MarkdownOrString | undefined): ProjectId | undefined;
337
418
  convertTags<E extends {
338
419
  tags?: import("../generated/ast").Tags;
339
420
  }>(withTags?: E | undefined): any;
@@ -346,6 +427,19 @@ declare const DocumentParserFromMixins: {
346
427
  parseColorLiteral(astNode: import("../generated/ast").ColorLiteral): ProjectId | undefined;
347
428
  parseElementStyle(elementProps: Array<import("../generated/ast").ElementProperty> | import("../generated/ast").ElementStyleProperty | undefined): import("../ast").ParsedElementStyle;
348
429
  parseStyleProps(styleProps: Array<import("../generated/ast").StyleProperty> | undefined): import("../ast").ParsedElementStyle;
430
+ parseTitleDescriptionTechnology(inlineProps: {
431
+ title?: string | undefined;
432
+ description?: string | undefined;
433
+ technology?: string | undefined;
434
+ }, bodyProps: {
435
+ title?: import("../generated/ast").MarkdownOrString | undefined;
436
+ description?: import("../generated/ast").MarkdownOrString | undefined;
437
+ technology?: import("../generated/ast").MarkdownOrString | undefined;
438
+ }): {
439
+ title?: string;
440
+ description?: ProjectId;
441
+ technology?: string;
442
+ };
349
443
  };
350
444
  } & {
351
445
  new (...args: any[]): {
@@ -368,6 +462,8 @@ declare const DocumentParserFromMixins: {
368
462
  parseRelationExprOrWhere(astNode: import("../generated/ast").RelationExprOrWhere): ProjectId;
369
463
  parseRelationExprWhere(astNode: import("../generated/ast").RelationExprWhere): ProjectId;
370
464
  parseRelationExpr(astNode: import("../generated/ast").RelationExpr): ProjectId;
465
+ parseInlineKindCondition(astNode: import("../generated/ast").OutgoingRelationExpr): ProjectId | null;
466
+ wrapInWhere(expr: ProjectId, condition: ProjectId | null): ProjectId;
371
467
  isValid: import("../validation").IsValidFn;
372
468
  readonly services: LikeC4Services;
373
469
  readonly doc: ParsedLikeC4LangiumDocument;
@@ -381,6 +477,7 @@ declare const DocumentParserFromMixins: {
381
477
  getMetadata(metadataAstNode: import("../generated/ast").MetadataProperty | undefined): {
382
478
  [key: string]: string;
383
479
  } | undefined;
480
+ parseMarkdownOrString(markdownOrString: import("../generated/ast").MarkdownOrString | undefined): ProjectId | undefined;
384
481
  convertTags<E extends {
385
482
  tags?: import("../generated/ast").Tags;
386
483
  }>(withTags?: E | undefined): any;
@@ -393,6 +490,19 @@ declare const DocumentParserFromMixins: {
393
490
  parseColorLiteral(astNode: import("../generated/ast").ColorLiteral): ProjectId | undefined;
394
491
  parseElementStyle(elementProps: Array<import("../generated/ast").ElementProperty> | import("../generated/ast").ElementStyleProperty | undefined): import("../ast").ParsedElementStyle;
395
492
  parseStyleProps(styleProps: Array<import("../generated/ast").StyleProperty> | undefined): import("../ast").ParsedElementStyle;
493
+ parseTitleDescriptionTechnology(inlineProps: {
494
+ title?: string | undefined;
495
+ description?: string | undefined;
496
+ technology?: string | undefined;
497
+ }, bodyProps: {
498
+ title?: import("../generated/ast").MarkdownOrString | undefined;
499
+ description?: import("../generated/ast").MarkdownOrString | undefined;
500
+ technology?: import("../generated/ast").MarkdownOrString | undefined;
501
+ }): {
502
+ title?: string;
503
+ description?: ProjectId;
504
+ technology?: string;
505
+ };
396
506
  };
397
507
  } & {
398
508
  new (...args: any[]): {
@@ -410,6 +520,7 @@ declare const DocumentParserFromMixins: {
410
520
  getMetadata(metadataAstNode: import("../generated/ast").MetadataProperty | undefined): {
411
521
  [key: string]: string;
412
522
  } | undefined;
523
+ parseMarkdownOrString(markdownOrString: import("../generated/ast").MarkdownOrString | undefined): ProjectId | undefined;
413
524
  convertTags<E extends {
414
525
  tags?: import("../generated/ast").Tags;
415
526
  }>(withTags?: E | undefined): any;
@@ -422,6 +533,19 @@ declare const DocumentParserFromMixins: {
422
533
  parseColorLiteral(astNode: import("../generated/ast").ColorLiteral): ProjectId | undefined;
423
534
  parseElementStyle(elementProps: Array<import("../generated/ast").ElementProperty> | import("../generated/ast").ElementStyleProperty | undefined): import("../ast").ParsedElementStyle;
424
535
  parseStyleProps(styleProps: Array<import("../generated/ast").StyleProperty> | undefined): import("../ast").ParsedElementStyle;
536
+ parseTitleDescriptionTechnology(inlineProps: {
537
+ title?: string | undefined;
538
+ description?: string | undefined;
539
+ technology?: string | undefined;
540
+ }, bodyProps: {
541
+ title?: import("../generated/ast").MarkdownOrString | undefined;
542
+ description?: import("../generated/ast").MarkdownOrString | undefined;
543
+ technology?: import("../generated/ast").MarkdownOrString | undefined;
544
+ }): {
545
+ title?: string;
546
+ description?: ProjectId;
547
+ technology?: string;
548
+ };
425
549
  };
426
550
  } & {
427
551
  new (...args: any[]): {
@@ -439,6 +563,8 @@ declare const DocumentParserFromMixins: {
439
563
  parseRelationExprOrWhere(astNode: import("../generated/ast").RelationExprOrWhere): ProjectId;
440
564
  parseRelationExprWhere(astNode: import("../generated/ast").RelationExprWhere): ProjectId;
441
565
  parseRelationExpr(astNode: import("../generated/ast").RelationExpr): ProjectId;
566
+ parseInlineKindCondition(astNode: import("../generated/ast").OutgoingRelationExpr): ProjectId | null;
567
+ wrapInWhere(expr: ProjectId, condition: ProjectId | null): ProjectId;
442
568
  isValid: import("../validation").IsValidFn;
443
569
  readonly services: LikeC4Services;
444
570
  readonly doc: ParsedLikeC4LangiumDocument;
@@ -452,6 +578,7 @@ declare const DocumentParserFromMixins: {
452
578
  getMetadata(metadataAstNode: import("../generated/ast").MetadataProperty | undefined): {
453
579
  [key: string]: string;
454
580
  } | undefined;
581
+ parseMarkdownOrString(markdownOrString: import("../generated/ast").MarkdownOrString | undefined): ProjectId | undefined;
455
582
  convertTags<E extends {
456
583
  tags?: import("../generated/ast").Tags;
457
584
  }>(withTags?: E | undefined): any;
@@ -464,6 +591,19 @@ declare const DocumentParserFromMixins: {
464
591
  parseColorLiteral(astNode: import("../generated/ast").ColorLiteral): ProjectId | undefined;
465
592
  parseElementStyle(elementProps: Array<import("../generated/ast").ElementProperty> | import("../generated/ast").ElementStyleProperty | undefined): import("../ast").ParsedElementStyle;
466
593
  parseStyleProps(styleProps: Array<import("../generated/ast").StyleProperty> | undefined): import("../ast").ParsedElementStyle;
594
+ parseTitleDescriptionTechnology(inlineProps: {
595
+ title?: string | undefined;
596
+ description?: string | undefined;
597
+ technology?: string | undefined;
598
+ }, bodyProps: {
599
+ title?: import("../generated/ast").MarkdownOrString | undefined;
600
+ description?: import("../generated/ast").MarkdownOrString | undefined;
601
+ technology?: import("../generated/ast").MarkdownOrString | undefined;
602
+ }): {
603
+ title?: string;
604
+ description?: ProjectId;
605
+ technology?: string;
606
+ };
467
607
  };
468
608
  } & typeof BaseParser;
469
609
  export declare class DocumentParser extends DocumentParserFromMixins {
@@ -1,12 +1,22 @@
1
1
  import type * as c4 from '@likec4/core';
2
+ import { type MarkdownOrString } from '@likec4/core';
2
3
  import type { AstNode, URI } from 'langium';
3
4
  import { type ParsedElementStyle, type ParsedLikeC4LangiumDocument, ast } from '../../ast';
4
5
  import type { ProjectConfig } from '../../config';
5
6
  import type { LikeC4Services } from '../../module';
6
7
  import { type IsValidFn } from '../../validation';
7
8
  export type GConstructor<T = {}> = new (...args: any[]) => T;
8
- export declare function toSingleLine<T extends string | undefined | null>(str: T): T;
9
- export declare function removeIndent<T extends string | undefined | null>(str: T): T;
9
+ export declare function toSingleLine(str: string): string;
10
+ export declare function toSingleLine(str: string | undefined | null): string | undefined;
11
+ export declare function toSingleLine(str: ast.MarkdownOrString): MarkdownOrString;
12
+ export declare function toSingleLine(str: ast.MarkdownOrString | undefined | null): MarkdownOrString | undefined;
13
+ export declare function toSingleLine(str: ast.MarkdownOrString | string): MarkdownOrString | string;
14
+ export declare function toSingleLine(str: ast.MarkdownOrString | string | undefined | null): MarkdownOrString | string | undefined;
15
+ export declare function removeIndent(str: string): string;
16
+ export declare function removeIndent(str: string | undefined): string | undefined;
17
+ export declare function removeIndent(str: ast.MarkdownOrString): MarkdownOrString;
18
+ export declare function removeIndent(str: ast.MarkdownOrString | undefined): MarkdownOrString | undefined;
19
+ export declare function removeIndent(str: ast.MarkdownOrString | string): MarkdownOrString | string;
10
20
  export type Base = GConstructor<BaseParser>;
11
21
  export declare class BaseParser {
12
22
  readonly services: LikeC4Services;
@@ -23,6 +33,7 @@ export declare class BaseParser {
23
33
  getMetadata(metadataAstNode: ast.MetadataProperty | undefined): {
24
34
  [key: string]: string;
25
35
  } | undefined;
36
+ parseMarkdownOrString(markdownOrString: ast.MarkdownOrString | undefined): c4.MarkdownOrString | undefined;
26
37
  convertTags<E extends {
27
38
  tags?: ast.Tags;
28
39
  }>(withTags?: E): any;
@@ -35,4 +46,21 @@ export declare class BaseParser {
35
46
  parseColorLiteral(astNode: ast.ColorLiteral): c4.ColorLiteral | undefined;
36
47
  parseElementStyle(elementProps: Array<ast.ElementProperty> | ast.ElementStyleProperty | undefined): ParsedElementStyle;
37
48
  parseStyleProps(styleProps: Array<ast.StyleProperty> | undefined): ParsedElementStyle;
49
+ /**
50
+ * Parses title, description and technology
51
+ * Inline properties (right on node) have higher priority than body properties (inside '{...}')
52
+ */
53
+ parseTitleDescriptionTechnology(inlineProps: {
54
+ title?: string | undefined;
55
+ description?: string | undefined;
56
+ technology?: string | undefined;
57
+ }, bodyProps: {
58
+ title?: ast.MarkdownOrString | undefined;
59
+ description?: ast.MarkdownOrString | undefined;
60
+ technology?: ast.MarkdownOrString | undefined;
61
+ }): {
62
+ title?: string;
63
+ description?: c4.MarkdownOrString;
64
+ technology?: string;
65
+ };
38
66
  }
@@ -6,7 +6,6 @@ import {
6
6
  isArray,
7
7
  isBoolean,
8
8
  isEmpty,
9
- isNonNullish,
10
9
  isNumber,
11
10
  isString,
12
11
  isTruthy,
@@ -21,16 +20,47 @@ import {
21
20
  parseAstOpacityProperty,
22
21
  parseAstPercent,
23
22
  parseAstSizeValue,
23
+ parseMarkdownAsString,
24
24
  toColor
25
25
  } from "../../ast.js";
26
26
  import { projectIdFrom } from "../../utils/index.js";
27
27
  import { readStrictFqn } from "../../utils/elementRef.js";
28
28
  import { checksFromDiagnostics } from "../../validation/index.js";
29
29
  export function toSingleLine(str) {
30
- return isNonNullish(str) ? removeIndent(str).split("\n").join(" ") : void 0;
30
+ if (str === null || str === void 0) {
31
+ return void 0;
32
+ }
33
+ const without = removeIndent(str);
34
+ if (isString(without)) {
35
+ return without.split("\n").join(" ");
36
+ }
37
+ if ("md" in without) {
38
+ return {
39
+ md: without.md.split("\n").join(" ")
40
+ };
41
+ }
42
+ return {
43
+ txt: without.txt.split("\n").join(" ")
44
+ };
31
45
  }
32
46
  export function removeIndent(str) {
33
- return isNonNullish(str) ? stripIndent(str).trim() : void 0;
47
+ if (str === null || str === void 0) {
48
+ return void 0;
49
+ }
50
+ switch (true) {
51
+ case isString(str):
52
+ return stripIndent(str).trim();
53
+ case (ast.isMarkdownOrString(str) && isTruthy(str.markdown)):
54
+ return {
55
+ md: stripIndent(str.markdown).trim()
56
+ };
57
+ case (ast.isMarkdownOrString(str) && isTruthy(str.text)):
58
+ return {
59
+ txt: stripIndent(str.text).trim()
60
+ };
61
+ default:
62
+ return void 0;
63
+ }
34
64
  }
35
65
  export class BaseParser {
36
66
  constructor(services, doc) {
@@ -72,11 +102,18 @@ export class BaseParser {
72
102
  const data = pipe(
73
103
  metadataAstNode.props,
74
104
  map((p) => [p.key, removeIndent(p.value)]),
105
+ map(([key, value]) => [key, value.md || value.txt]),
75
106
  filter(([_, value]) => isTruthy(value)),
76
107
  fromEntries()
77
108
  );
78
109
  return isEmpty(data) ? void 0 : data;
79
110
  }
111
+ parseMarkdownOrString(markdownOrString) {
112
+ if (ast.isMarkdownOrString(markdownOrString)) {
113
+ return removeIndent(markdownOrString);
114
+ }
115
+ return void 0;
116
+ }
80
117
  convertTags(withTags) {
81
118
  return this.parseTags(withTags);
82
119
  }
@@ -258,4 +295,18 @@ export class BaseParser {
258
295
  }
259
296
  return result;
260
297
  }
298
+ /**
299
+ * Parses title, description and technology
300
+ * Inline properties (right on node) have higher priority than body properties (inside '{...}')
301
+ */
302
+ parseTitleDescriptionTechnology(inlineProps, bodyProps) {
303
+ const title = removeIndent(inlineProps.title ?? parseMarkdownAsString(bodyProps.title));
304
+ const description = inlineProps.description ? { txt: removeIndent(inlineProps.description) } : this.parseMarkdownOrString(bodyProps.description);
305
+ const technology = toSingleLine(inlineProps.technology) ?? removeIndent(parseMarkdownAsString(bodyProps.technology));
306
+ return {
307
+ ...isTruthy(title) && { title },
308
+ ...isTruthy(description) && { description },
309
+ ...isTruthy(technology) && { technology }
310
+ };
311
+ }
261
312
  }
@@ -24,7 +24,9 @@ export declare function DeploymentModelParser<TBase extends WithExpressionV2>(B:
24
24
  parseRelationExprWith(astNode: ast.RelationExprWith): c4.RelationExpr.Custom;
25
25
  parseRelationExprOrWhere(astNode: ast.RelationExprOrWhere): c4.RelationExpr.OrWhere;
26
26
  parseRelationExprWhere(astNode: ast.RelationExprWhere): c4.RelationExpr.Where;
27
- parseRelationExpr(astNode: ast.RelationExpr): c4.RelationExpr;
27
+ parseRelationExpr(astNode: ast.RelationExpr): c4.RelationExpr.OrWhere;
28
+ parseInlineKindCondition(astNode: ast.OutgoingRelationExpr): c4.WhereOperator | null;
29
+ wrapInWhere(expr: c4.RelationExpr, condition: c4.WhereOperator | null): c4.RelationExpr.OrWhere;
28
30
  isValid: import("../../validation").IsValidFn;
29
31
  readonly services: import("../..").LikeC4Services;
30
32
  readonly doc: import("../../ast").ParsedLikeC4LangiumDocument;
@@ -38,6 +40,7 @@ export declare function DeploymentModelParser<TBase extends WithExpressionV2>(B:
38
40
  getMetadata(metadataAstNode: ast.MetadataProperty | undefined): {
39
41
  [key: string]: string;
40
42
  } | undefined;
43
+ parseMarkdownOrString(markdownOrString: ast.MarkdownOrString | undefined): c4.MarkdownOrString | undefined;
41
44
  convertTags<E extends {
42
45
  tags?: ast.Tags;
43
46
  }>(withTags?: E | undefined): any;
@@ -50,5 +53,18 @@ export declare function DeploymentModelParser<TBase extends WithExpressionV2>(B:
50
53
  parseColorLiteral(astNode: ast.ColorLiteral): c4.ColorLiteral | undefined;
51
54
  parseElementStyle(elementProps: Array<ast.ElementProperty> | ast.ElementStyleProperty | undefined): import("../../ast").ParsedElementStyle;
52
55
  parseStyleProps(styleProps: Array<ast.StyleProperty> | undefined): import("../../ast").ParsedElementStyle;
56
+ parseTitleDescriptionTechnology(inlineProps: {
57
+ title?: string | undefined;
58
+ description?: string | undefined;
59
+ technology?: string | undefined;
60
+ }, bodyProps: {
61
+ title?: ast.MarkdownOrString | undefined;
62
+ description?: ast.MarkdownOrString | undefined;
63
+ technology?: ast.MarkdownOrString | undefined;
64
+ }): {
65
+ title?: string;
66
+ description?: c4.MarkdownOrString;
67
+ technology?: string;
68
+ };
53
69
  };
54
70
  } & TBase;
@@ -6,7 +6,6 @@ import {
6
6
  } from "../../ast.js";
7
7
  import { logWarnError } from "../../logger.js";
8
8
  import { stringHash } from "../../utils/stringHash.js";
9
- import { removeIndent, toSingleLine } from "./Base.js";
10
9
  function* streamDeploymentModel(doc) {
11
10
  const traverseStack = LinkedList.from(
12
11
  doc.parseResult.value.deployments.flatMap((m) => m.elements)
@@ -74,11 +73,14 @@ export function DeploymentModelParser(B) {
74
73
  astNode.body?.props ?? [],
75
74
  filter(isValid),
76
75
  filter(ast.isElementStringProperty),
77
- mapToObj((p) => [p.key, p.value || void 0])
76
+ mapToObj((p) => [p.key, p.value])
77
+ );
78
+ const { title, ...descAndTech } = this.parseTitleDescriptionTechnology(
79
+ {
80
+ title: astNode.title
81
+ },
82
+ bodyProps
78
83
  );
79
- const title = removeIndent(astNode.title ?? bodyProps.title);
80
- const description = removeIndent(bodyProps.description);
81
- const technology = toSingleLine(bodyProps.technology);
82
84
  const links = this.convertLinks(astNode.body);
83
85
  return {
84
86
  id,
@@ -87,8 +89,7 @@ export function DeploymentModelParser(B) {
87
89
  ...metadata && { metadata },
88
90
  ...tags && { tags },
89
91
  ...links && isNonEmptyArray(links) && { links },
90
- ...isTruthy(technology) && { technology },
91
- ...isTruthy(description) && { description },
92
+ ...descAndTech,
92
93
  style
93
94
  };
94
95
  }
@@ -104,21 +105,22 @@ export function DeploymentModelParser(B) {
104
105
  astNode.body?.props ?? [],
105
106
  filter(isValid),
106
107
  filter(ast.isElementStringProperty),
107
- mapToObj((p) => [p.key, p.value || void 0])
108
+ mapToObj((p) => [p.key, p.value])
109
+ );
110
+ const titleDescAndTech = this.parseTitleDescriptionTechnology(
111
+ {
112
+ title: astNode.title
113
+ },
114
+ bodyProps
108
115
  );
109
- const title = removeIndent(astNode.title ?? bodyProps.title);
110
- const description = removeIndent(bodyProps.description);
111
- const technology = toSingleLine(bodyProps.technology);
112
116
  const links = this.convertLinks(astNode.body);
113
117
  return {
114
118
  id,
115
119
  element: target,
116
120
  ...metadata && { metadata },
117
- ...title && { title },
118
121
  ...tags && { tags },
119
122
  ...links && isNonEmptyArray(links) && { links },
120
- ...isTruthy(technology) && { technology },
121
- ...isTruthy(description) && { description },
123
+ ...titleDescAndTech,
122
124
  style
123
125
  };
124
126
  }
@@ -168,7 +170,7 @@ export function DeploymentModelParser(B) {
168
170
  astNode.body?.props ?? [],
169
171
  filter(ast.isRelationStringProperty),
170
172
  filter((p) => isTruthy(p.value)),
171
- mapToObj((p) => [p.key, p.value || void 0])
173
+ mapToObj((p) => [p.key, p.value])
172
174
  );
173
175
  const navigateTo = pipe(
174
176
  astNode.body?.props ?? [],
@@ -177,9 +179,12 @@ export function DeploymentModelParser(B) {
177
179
  filter(isTruthy),
178
180
  first()
179
181
  );
180
- const title = removeIndent(astNode.title ?? bodyProps.title) ?? "";
181
- const description = removeIndent(astNode.description ?? bodyProps.description);
182
- const technology = toSingleLine(astNode.technology) ?? removeIndent(bodyProps.technology);
182
+ const titleDescAndTech = this.parseTitleDescriptionTechnology(
183
+ {
184
+ title: astNode.title
185
+ },
186
+ bodyProps
187
+ );
183
188
  const styleProp = astNode.body?.props.find(ast.isRelationStyleProperty);
184
189
  const id = stringHash(
185
190
  "deployment",
@@ -191,10 +196,8 @@ export function DeploymentModelParser(B) {
191
196
  id,
192
197
  source,
193
198
  target,
194
- ...title && { title },
199
+ ...titleDescAndTech,
195
200
  ...metadata && { metadata },
196
- ...isTruthy(technology) && { technology },
197
- ...isTruthy(description) && { description },
198
201
  ...kind && { kind },
199
202
  ...tags && { tags },
200
203
  ...isNonEmptyArray(links) && { links },
@@ -22,7 +22,9 @@ export declare function DeploymentViewParser<TBase extends WithExpressionV2 & Wi
22
22
  parseRelationExprWith(astNode: ast.RelationExprWith): c4.RelationExpr.Custom;
23
23
  parseRelationExprOrWhere(astNode: ast.RelationExprOrWhere): c4.RelationExpr.OrWhere;
24
24
  parseRelationExprWhere(astNode: ast.RelationExprWhere): c4.RelationExpr.Where;
25
- parseRelationExpr(astNode: ast.RelationExpr): c4.RelationExpr;
25
+ parseRelationExpr(astNode: ast.RelationExpr): c4.RelationExpr.OrWhere;
26
+ parseInlineKindCondition(astNode: ast.OutgoingRelationExpr): c4.WhereOperator | null;
27
+ wrapInWhere(expr: c4.RelationExpr, condition: c4.WhereOperator | null): c4.RelationExpr.OrWhere;
26
28
  isValid: import("../../validation").IsValidFn;
27
29
  readonly services: import("../..").LikeC4Services;
28
30
  readonly doc: import("../../ast").ParsedLikeC4LangiumDocument;
@@ -36,6 +38,7 @@ export declare function DeploymentViewParser<TBase extends WithExpressionV2 & Wi
36
38
  getMetadata(metadataAstNode: ast.MetadataProperty | undefined): {
37
39
  [key: string]: string;
38
40
  } | undefined;
41
+ parseMarkdownOrString(markdownOrString: ast.MarkdownOrString | undefined): c4.MarkdownOrString | undefined;
39
42
  convertTags<E extends {
40
43
  tags?: ast.Tags;
41
44
  }>(withTags?: E | undefined): any;
@@ -48,6 +51,19 @@ export declare function DeploymentViewParser<TBase extends WithExpressionV2 & Wi
48
51
  parseColorLiteral(astNode: ast.ColorLiteral): c4.ColorLiteral | undefined;
49
52
  parseElementStyle(elementProps: Array<ast.ElementProperty> | ast.ElementStyleProperty | undefined): import("../../ast").ParsedElementStyle;
50
53
  parseStyleProps(styleProps: Array<ast.StyleProperty> | undefined): import("../../ast").ParsedElementStyle;
54
+ parseTitleDescriptionTechnology(inlineProps: {
55
+ title?: string | undefined;
56
+ description?: string | undefined;
57
+ technology?: string | undefined;
58
+ }, bodyProps: {
59
+ title?: ast.MarkdownOrString | undefined;
60
+ description?: ast.MarkdownOrString | undefined;
61
+ technology?: ast.MarkdownOrString | undefined;
62
+ }): {
63
+ title?: string;
64
+ description?: c4.MarkdownOrString;
65
+ technology?: string;
66
+ };
51
67
  parseDeployment(): void;
52
68
  parseDeploymentNode(astNode: ast.DeploymentNode): import("../../ast").ParsedAstDeployment.Node;
53
69
  parseDeployedInstance(astNode: ast.DeployedInstance): import("../../ast").ParsedAstDeployment.Instance;