@likec4/language-server 1.45.0 → 1.46.2

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 (45) hide show
  1. package/dist/LikeC4LanguageServices.d.ts +3 -0
  2. package/dist/LikeC4LanguageServices.js +2 -0
  3. package/dist/Rpc.js +13 -2
  4. package/dist/ast.d.ts +10 -0
  5. package/dist/ast.js +7 -0
  6. package/dist/bundled.mjs +3826 -4066
  7. package/dist/filesystem/ChokidarWatcher.js +2 -2
  8. package/dist/filesystem/LikeC4FileSystem.js +5 -1
  9. package/dist/filesystem/index.d.ts +2 -0
  10. package/dist/generated/ast.d.ts +46 -9
  11. package/dist/generated/ast.js +56 -4
  12. package/dist/generated/grammar.js +1 -1
  13. package/dist/generated-lib/icons.js +1 -1
  14. package/dist/lsp/DocumentSymbolProvider.js +12 -1
  15. package/dist/lsp/SemanticTokenProvider.js +36 -29
  16. package/dist/mcp/server/WithMCPServer.js +0 -2
  17. package/dist/mcp/tools/read-deployment.js +18 -0
  18. package/dist/mcp/tools/read-element.js +24 -0
  19. package/dist/model/builder/buildModel.js +70 -1
  20. package/dist/model/fqn-index.js +8 -2
  21. package/dist/model/model-parser.d.ts +3 -0
  22. package/dist/model/model-parser.js +7 -0
  23. package/dist/model/parser/Base.js +8 -3
  24. package/dist/model/parser/GlobalsParser.d.ts +1 -0
  25. package/dist/model/parser/ModelParser.d.ts +2 -1
  26. package/dist/model/parser/ModelParser.js +45 -1
  27. package/dist/model/parser/SpecificationParser.js +1 -1
  28. package/dist/model/parser/ViewsParser.d.ts +1 -0
  29. package/dist/model/parser/ViewsParser.js +13 -0
  30. package/dist/model-change/ModelChanges.js +6 -3
  31. package/dist/validation/index.d.ts +1 -1
  32. package/dist/validation/index.js +11 -1
  33. package/dist/validation/relation.d.ts +1 -0
  34. package/dist/validation/relation.js +87 -1
  35. package/dist/validation/view-checks.d.ts +4 -0
  36. package/dist/validation/view-checks.js +46 -0
  37. package/dist/views/LikeC4ManualLayouts.js +2 -2
  38. package/dist/views/LikeC4Views.js +2 -2
  39. package/dist/workspace/IndexManager.js +10 -1
  40. package/dist/workspace/LangiumDocuments.js +19 -1
  41. package/dist/workspace/ProjectsManager.d.ts +26 -1
  42. package/dist/workspace/ProjectsManager.js +98 -12
  43. package/dist/workspace/WorkspaceManager.js +38 -0
  44. package/lib/package.json +159 -0
  45. package/package.json +22 -22
@@ -5,6 +5,7 @@ import { URI } from 'langium';
5
5
  import type { CancellationToken } from 'vscode-jsonrpc';
6
6
  import type { Range } from 'vscode-languageserver-types';
7
7
  import type { LikeC4ModelBuilder } from './model';
8
+ import type { LikeC4ModelChanges } from './model-change/ModelChanges';
8
9
  import type { LikeC4Services } from './module';
9
10
  import type { Locate } from './protocol';
10
11
  import type { LikeC4Views } from './views/LikeC4Views';
@@ -14,6 +15,7 @@ export interface LikeC4LanguageServices {
14
15
  readonly builder: LikeC4ModelBuilder;
15
16
  readonly workspaceUri: URI;
16
17
  readonly projectsManager: ProjectsManager;
18
+ readonly editor: LikeC4ModelChanges;
17
19
  /**
18
20
  * Returns all projects with relevant documents
19
21
  */
@@ -61,6 +63,7 @@ export interface LikeC4LanguageServices {
61
63
  export declare class DefaultLikeC4LanguageServices implements LikeC4LanguageServices {
62
64
  private services;
63
65
  readonly builder: LikeC4ModelBuilder;
66
+ readonly editor: LikeC4ModelChanges;
64
67
  readonly projectsManager: ProjectsManager;
65
68
  constructor(services: LikeC4Services);
66
69
  get views(): LikeC4Views;
@@ -13,11 +13,13 @@ const logger = mainLogger.getChild('LanguageServices');
13
13
  export class DefaultLikeC4LanguageServices {
14
14
  services;
15
15
  builder;
16
+ editor;
16
17
  projectsManager;
17
18
  constructor(services) {
18
19
  this.services = services;
19
20
  this.builder = services.likec4.ModelBuilder;
20
21
  this.projectsManager = services.shared.workspace.ProjectsManager;
22
+ this.editor = services.likec4.ModelChanges;
21
23
  }
22
24
  get views() {
23
25
  return this.services.likec4.Views;
package/dist/Rpc.js CHANGED
@@ -25,7 +25,12 @@ export class Rpc extends ADisposable {
25
25
  const LangiumDocuments = this.services.shared.workspace.LangiumDocuments;
26
26
  const DocumentBuilder = this.services.shared.workspace.DocumentBuilder;
27
27
  const notifyModelParsed = funnel((batch) => {
28
- logger.debug `send onDidChangeModel ${batch > 1 ? '(' + batch + ' batched)' : ''}`;
28
+ if (batch > 1) {
29
+ logger.debug `send ${'onDidChangeModel'} (${batch} batched)`;
30
+ }
31
+ else {
32
+ logger.debug `send ${'onDidChangeModel'}`;
33
+ }
29
34
  connection.sendNotification(DidChangeModelNotification.type, '').catch(error => {
30
35
  logger.warn(`[ServerRpc] error sending onDidChangeModel:`, { error });
31
36
  return;
@@ -183,7 +188,13 @@ export class Rpc extends ADisposable {
183
188
  }
184
189
  }), connection.onRequest(ChangeView.req, async (request, _cancelToken) => {
185
190
  logger.debug `received request ${'changeView'} of ${request.viewId} from project ${request.projectId}`;
186
- return await likec4Services.ModelChanges.applyChange(request);
191
+ const loc = await likec4Services.ModelChanges.applyChange(request);
192
+ const op = request.change.op;
193
+ if (request.projectId &&
194
+ (op === 'save-view-snapshot' || op === 'reset-manual-layout')) {
195
+ await projects.rebuidProject(request.projectId);
196
+ }
197
+ return loc;
187
198
  }), connection.onRequest(FetchTelemetryMetrics.req, async (cancelToken) => {
188
199
  const projectsIds = [...projects.all];
189
200
  const promises = projectsIds.map(async (projectId) => {
package/dist/ast.d.ts CHANGED
@@ -90,6 +90,15 @@ export interface ParsedAstExtend {
90
90
  [key: string]: string | string[];
91
91
  };
92
92
  }
93
+ export interface ParsedAstExtendRelation {
94
+ id: c4.RelationId;
95
+ astPath: string;
96
+ tags?: c4.NonEmptyArray<c4.Tag> | null;
97
+ links?: c4.NonEmptyArray<c4.Link> | null;
98
+ metadata?: {
99
+ [key: string]: string | string[];
100
+ };
101
+ }
93
102
  export interface ParsedAstRelation {
94
103
  id: c4.RelationId;
95
104
  astPath: string;
@@ -179,6 +188,7 @@ export interface LikeC4DocumentProps {
179
188
  c4Elements?: ParsedAstElement[];
180
189
  c4ExtendElements?: ParsedAstExtend[];
181
190
  c4ExtendDeployments?: ParsedAstExtend[];
191
+ c4ExtendRelations?: ParsedAstExtendRelation[];
182
192
  c4Relations?: ParsedAstRelation[];
183
193
  c4Globals?: ParsedAstGlobals;
184
194
  c4Views?: ParsedAstView[];
package/dist/ast.js CHANGED
@@ -1,3 +1,9 @@
1
+ // SPDX-License-Identifier: MIT
2
+ //
3
+ // Copyright (c) 2023-2025 Denis Davydkov
4
+ // Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
5
+ //
6
+ // Portions of this file have been modified by NVIDIA CORPORATION & AFFILIATES.
1
7
  import { invariant, MultiMap, nonexhaustive } from '@likec4/core/utils';
2
8
  import { AstUtils, DocumentState } from 'langium';
3
9
  import { clamp, isNullish, isTruthy } from 'remeda';
@@ -42,6 +48,7 @@ export function isParsedLikeC4LangiumDocument(doc) {
42
48
  && !!doc.c4Elements
43
49
  && !!doc.c4ExtendElements
44
50
  && !!doc.c4ExtendDeployments
51
+ && !!doc.c4ExtendRelations
45
52
  && !!doc.c4Relations
46
53
  && !!doc.c4Views
47
54
  && !!doc.c4Deployments