@likec4/language-server 1.43.0 → 1.45.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 (301) hide show
  1. package/browser/package.json +1 -1
  2. package/browser-worker/package.json +1 -1
  3. package/dist/LikeC4LanguageServices.d.ts +13 -34
  4. package/dist/LikeC4LanguageServices.js +152 -0
  5. package/dist/Rpc.js +257 -0
  6. package/dist/ast.d.ts +5 -1
  7. package/dist/ast.js +257 -0
  8. package/dist/browser-worker.js +4 -0
  9. package/dist/browser.js +35 -0
  10. package/dist/bundled.js +44 -0
  11. package/dist/bundled.mjs +3568 -3900
  12. package/dist/documentation/documentation-provider.js +51 -0
  13. package/dist/documentation/index.js +1 -0
  14. package/dist/empty.js +2 -0
  15. package/dist/filesystem/ChokidarWatcher.d.ts +2 -0
  16. package/dist/filesystem/ChokidarWatcher.js +108 -0
  17. package/dist/filesystem/FileSystemWatcher.js +14 -0
  18. package/dist/filesystem/LikeC4FileSystem.d.ts +1 -2
  19. package/dist/filesystem/LikeC4FileSystem.js +126 -0
  20. package/dist/filesystem/index.d.ts +26 -0
  21. package/dist/filesystem/index.js +29 -0
  22. package/dist/formatting/LikeC4Formatter.js +637 -0
  23. package/dist/formatting/utils.js +18 -0
  24. package/dist/generated/ast.js +2155 -0
  25. package/dist/generated/{grammar.mjs → grammar.js} +6 -2
  26. package/dist/generated/module.d.ts +6 -1
  27. package/dist/generated/module.js +27 -0
  28. package/dist/generated-lib/{icons.mjs → icons.js} +11 -7
  29. package/dist/index.d.ts +10 -1
  30. package/dist/index.js +55 -0
  31. package/dist/{likec4lib.mjs → likec4lib.js} +3 -3
  32. package/dist/logger.js +81 -0
  33. package/dist/lsp/CodeActionProvider.d.ts +14 -0
  34. package/dist/lsp/CodeActionProvider.js +33 -0
  35. package/dist/lsp/CodeLensProvider.js +44 -0
  36. package/dist/lsp/CompletionProvider.d.ts +3 -1
  37. package/dist/lsp/CompletionProvider.js +200 -0
  38. package/dist/lsp/DocumentHighlightProvider.js +10 -0
  39. package/dist/lsp/DocumentLinkProvider.js +58 -0
  40. package/dist/lsp/DocumentSymbolProvider.js +306 -0
  41. package/dist/lsp/HoverProvider.js +106 -0
  42. package/dist/lsp/RenameProvider.js +6 -0
  43. package/dist/lsp/SemanticTokenProvider.js +257 -0
  44. package/dist/lsp/index.d.ts +1 -0
  45. package/dist/lsp/index.js +9 -0
  46. package/dist/mcp/MCPServerFactory.js +73 -0
  47. package/dist/mcp/NoopLikeC4MCPServer.js +17 -0
  48. package/dist/mcp/interfaces.js +5 -0
  49. package/dist/mcp/server/StdioLikeC4MCPServer.js +51 -0
  50. package/dist/mcp/server/StreamableLikeC4MCPServer.js +145 -0
  51. package/dist/mcp/server/WithMCPServer.js +56 -0
  52. package/dist/mcp/tools/_common.d.ts +8 -7
  53. package/dist/mcp/tools/_common.js +49 -0
  54. package/dist/mcp/tools/find-relationships.d.ts +7 -8
  55. package/dist/mcp/tools/find-relationships.js +150 -0
  56. package/dist/mcp/tools/list-projects.d.ts +3 -3
  57. package/dist/mcp/tools/list-projects.js +62 -0
  58. package/dist/mcp/tools/open-view.d.ts +6 -7
  59. package/dist/mcp/tools/open-view.js +52 -0
  60. package/dist/mcp/tools/read-deployment.d.ts +6 -7
  61. package/dist/mcp/tools/read-deployment.js +132 -0
  62. package/dist/mcp/tools/read-element.d.ts +6 -7
  63. package/dist/mcp/tools/read-element.js +194 -0
  64. package/dist/mcp/tools/read-project-summary.d.ts +5 -6
  65. package/dist/mcp/tools/read-project-summary.js +176 -0
  66. package/dist/mcp/tools/read-view.d.ts +6 -7
  67. package/dist/mcp/tools/read-view.js +203 -0
  68. package/dist/mcp/tools/search-element.d.ts +3 -3
  69. package/dist/mcp/tools/search-element.js +177 -0
  70. package/dist/mcp/utils.d.ts +2 -2
  71. package/dist/mcp/utils.js +48 -0
  72. package/dist/model/builder/MergedExtends.js +74 -0
  73. package/dist/model/builder/MergedSpecification.js +175 -0
  74. package/dist/model/builder/buildModel.js +176 -0
  75. package/dist/model/deployments-index.js +102 -0
  76. package/dist/model/fqn-index.d.ts +1 -2
  77. package/dist/model/fqn-index.js +247 -0
  78. package/dist/model/index.js +6 -0
  79. package/dist/model/model-builder.d.ts +13 -11
  80. package/dist/model/model-builder.js +232 -0
  81. package/dist/model/model-locator.d.ts +6 -5
  82. package/dist/model/model-locator.js +240 -0
  83. package/dist/model/model-parser-where.js +81 -0
  84. package/dist/model/model-parser.d.ts +309 -304
  85. package/dist/model/model-parser.js +126 -0
  86. package/dist/model/parser/Base.d.ts +2 -2
  87. package/dist/model/parser/Base.js +367 -0
  88. package/dist/model/parser/DeploymentModelParser.d.ts +2 -2
  89. package/dist/model/parser/DeploymentModelParser.js +176 -0
  90. package/dist/model/parser/DeploymentViewParser.d.ts +3 -3
  91. package/dist/model/parser/DeploymentViewParser.js +86 -0
  92. package/dist/model/parser/FqnRefParser.d.ts +2 -2
  93. package/dist/model/parser/FqnRefParser.js +382 -0
  94. package/dist/model/parser/GlobalsParser.d.ts +6 -6
  95. package/dist/model/parser/GlobalsParser.js +84 -0
  96. package/dist/model/parser/ImportsParser.d.ts +11 -12
  97. package/dist/model/parser/ImportsParser.js +24 -0
  98. package/dist/model/parser/ModelParser.d.ts +2 -2
  99. package/dist/model/parser/ModelParser.js +165 -0
  100. package/dist/model/parser/PredicatesParser.d.ts +2 -2
  101. package/dist/model/parser/PredicatesParser.js +45 -0
  102. package/dist/model/parser/SpecificationParser.d.ts +2 -2
  103. package/dist/model/parser/SpecificationParser.js +113 -0
  104. package/dist/model/parser/ValueConverter.js +12 -0
  105. package/dist/model/parser/ViewsParser.d.ts +3 -3
  106. package/dist/model/parser/ViewsParser.js +479 -0
  107. package/dist/model-change/ModelChanges.d.ts +8 -5
  108. package/dist/model-change/ModelChanges.js +129 -0
  109. package/dist/model-change/changeElementStyle.js +134 -0
  110. package/dist/model-change/changeViewLayout.d.ts +2 -2
  111. package/dist/model-change/changeViewLayout.js +28 -0
  112. package/dist/model-change/removeManualLayoutV1.d.ts +7 -0
  113. package/dist/model-change/removeManualLayoutV1.js +27 -0
  114. package/dist/module.d.ts +10 -5
  115. package/dist/module.js +143 -0
  116. package/dist/protocol.d.ts +34 -27
  117. package/dist/protocol.js +123 -0
  118. package/dist/references/index.js +3 -0
  119. package/dist/references/name-provider.js +37 -0
  120. package/dist/references/scope-computation.js +288 -0
  121. package/dist/references/scope-provider.d.ts +3 -3
  122. package/dist/references/scope-provider.js +242 -0
  123. package/dist/shared/NodeKindProvider.js +57 -0
  124. package/dist/shared/{WorkspaceSymbolProvider.mjs → WorkspaceSymbolProvider.js} +1 -1
  125. package/dist/shared/index.js +2 -0
  126. package/dist/test/index.js +1 -0
  127. package/dist/test/testServices.d.ts +16 -16
  128. package/dist/test/testServices.js +210 -0
  129. package/dist/utils/disposable.js +26 -0
  130. package/dist/utils/elementRef.d.ts +1 -1
  131. package/dist/utils/elementRef.js +27 -0
  132. package/dist/utils/fqnRef.js +63 -0
  133. package/dist/utils/index.js +35 -0
  134. package/dist/utils/printDocs.js +1 -0
  135. package/dist/utils/projectId.js +16 -0
  136. package/dist/utils/stringHash.js +5 -0
  137. package/dist/validation/DocumentValidator.js +17 -0
  138. package/dist/validation/_shared.js +26 -0
  139. package/dist/validation/deployment-checks.js +140 -0
  140. package/dist/validation/dynamic-view.js +67 -0
  141. package/dist/validation/element-ref.js +12 -0
  142. package/dist/validation/element.js +49 -0
  143. package/dist/validation/imports.js +46 -0
  144. package/dist/validation/index.d.ts +1 -1
  145. package/dist/validation/index.js +157 -0
  146. package/dist/validation/property-checks.js +108 -0
  147. package/dist/validation/relation.js +55 -0
  148. package/dist/validation/specification.js +190 -0
  149. package/dist/validation/view-predicates/fqn-expr-with.js +43 -0
  150. package/dist/validation/view-predicates/fqn-ref-expr.js +51 -0
  151. package/dist/validation/view-predicates/incoming.js +16 -0
  152. package/dist/validation/view-predicates/index.js +6 -0
  153. package/dist/validation/view-predicates/outgoing.js +20 -0
  154. package/dist/validation/view-predicates/relation-expr.js +46 -0
  155. package/dist/validation/view-predicates/relation-with.js +16 -0
  156. package/dist/validation/view.d.ts +1 -1
  157. package/dist/validation/view.js +42 -0
  158. package/dist/view-utils/assignNavigateTo.js +27 -0
  159. package/dist/view-utils/index.d.ts +1 -0
  160. package/dist/view-utils/index.js +2 -0
  161. package/dist/view-utils/manual-layout.d.ts +6 -0
  162. package/dist/view-utils/manual-layout.js +149 -0
  163. package/dist/views/ConfigurableLayouter.js +51 -0
  164. package/dist/views/LikeC4ManualLayouts.d.ts +42 -0
  165. package/dist/views/LikeC4ManualLayouts.js +209 -0
  166. package/dist/views/{likec4-views.d.ts → LikeC4Views.d.ts} +32 -10
  167. package/dist/views/LikeC4Views.js +216 -0
  168. package/dist/views/index.d.ts +4 -1
  169. package/dist/views/index.js +11 -0
  170. package/dist/workspace/AstNodeDescriptionProvider.js +18 -0
  171. package/dist/workspace/IndexManager.js +21 -0
  172. package/dist/workspace/LangiumDocuments.d.ts +4 -3
  173. package/dist/workspace/LangiumDocuments.js +72 -0
  174. package/dist/workspace/ProjectsManager.d.ts +25 -16
  175. package/dist/workspace/ProjectsManager.js +469 -0
  176. package/dist/workspace/WorkspaceManager.d.ts +3 -2
  177. package/dist/workspace/WorkspaceManager.js +98 -0
  178. package/dist/workspace/index.js +5 -0
  179. package/likec4lib/package.json +1 -1
  180. package/package.json +30 -28
  181. package/protocol/package.json +1 -1
  182. package/dist/LikeC4LanguageServices.mjs +0 -197
  183. package/dist/Rpc.mjs +0 -296
  184. package/dist/ast.mjs +0 -221
  185. package/dist/browser-worker.mjs +0 -2
  186. package/dist/browser.mjs +0 -32
  187. package/dist/documentation/documentation-provider.mjs +0 -48
  188. package/dist/documentation/index.mjs +0 -1
  189. package/dist/empty.mjs +0 -1
  190. package/dist/filesystem/ChokidarWatcher.mjs +0 -68
  191. package/dist/filesystem/FileSystemWatcher.mjs +0 -11
  192. package/dist/filesystem/LikeC4FileSystem.mjs +0 -64
  193. package/dist/filesystem/index.mjs +0 -19
  194. package/dist/formatting/LikeC4Formatter.mjs +0 -511
  195. package/dist/formatting/utils.mjs +0 -15
  196. package/dist/generated/ast.mjs +0 -2150
  197. package/dist/generated/module.mjs +0 -23
  198. package/dist/index.mjs +0 -50
  199. package/dist/logger.mjs +0 -82
  200. package/dist/lsp/CodeLensProvider.mjs +0 -42
  201. package/dist/lsp/CompletionProvider.mjs +0 -208
  202. package/dist/lsp/DocumentHighlightProvider.mjs +0 -10
  203. package/dist/lsp/DocumentLinkProvider.mjs +0 -53
  204. package/dist/lsp/DocumentSymbolProvider.mjs +0 -287
  205. package/dist/lsp/HoverProvider.mjs +0 -104
  206. package/dist/lsp/RenameProvider.mjs +0 -6
  207. package/dist/lsp/SemanticTokenProvider.mjs +0 -276
  208. package/dist/lsp/index.mjs +0 -7
  209. package/dist/mcp/MCPServerFactory.mjs +0 -70
  210. package/dist/mcp/NoopLikeC4MCPServer.mjs +0 -17
  211. package/dist/mcp/interfaces.mjs +0 -4
  212. package/dist/mcp/server/StdioLikeC4MCPServer.mjs +0 -46
  213. package/dist/mcp/server/StreamableLikeC4MCPServer.mjs +0 -153
  214. package/dist/mcp/server/WithMCPServer.mjs +0 -58
  215. package/dist/mcp/tools/_common.mjs +0 -42
  216. package/dist/mcp/tools/find-relationships.mjs +0 -151
  217. package/dist/mcp/tools/list-projects.mjs +0 -62
  218. package/dist/mcp/tools/open-view.mjs +0 -52
  219. package/dist/mcp/tools/read-deployment.mjs +0 -130
  220. package/dist/mcp/tools/read-element.mjs +0 -198
  221. package/dist/mcp/tools/read-project-summary.mjs +0 -178
  222. package/dist/mcp/tools/read-view.mjs +0 -205
  223. package/dist/mcp/tools/search-element.mjs +0 -171
  224. package/dist/mcp/utils.mjs +0 -47
  225. package/dist/model/builder/MergedExtends.mjs +0 -76
  226. package/dist/model/builder/MergedSpecification.mjs +0 -205
  227. package/dist/model/builder/assignTagColors.d.ts +0 -7
  228. package/dist/model/builder/assignTagColors.mjs +0 -51
  229. package/dist/model/builder/buildModel.mjs +0 -226
  230. package/dist/model/deployments-index.mjs +0 -100
  231. package/dist/model/fqn-index.mjs +0 -243
  232. package/dist/model/index.mjs +0 -6
  233. package/dist/model/model-builder.mjs +0 -285
  234. package/dist/model/model-locator.mjs +0 -239
  235. package/dist/model/model-parser-where.mjs +0 -81
  236. package/dist/model/model-parser.mjs +0 -127
  237. package/dist/model/parser/Base.mjs +0 -376
  238. package/dist/model/parser/DeploymentModelParser.mjs +0 -212
  239. package/dist/model/parser/DeploymentViewParser.mjs +0 -95
  240. package/dist/model/parser/FqnRefParser.mjs +0 -398
  241. package/dist/model/parser/GlobalsParser.mjs +0 -82
  242. package/dist/model/parser/ImportsParser.mjs +0 -28
  243. package/dist/model/parser/ModelParser.mjs +0 -190
  244. package/dist/model/parser/PredicatesParser.mjs +0 -45
  245. package/dist/model/parser/SpecificationParser.mjs +0 -120
  246. package/dist/model/parser/ValueConverter.mjs +0 -12
  247. package/dist/model/parser/ViewsParser.mjs +0 -490
  248. package/dist/model-change/ModelChanges.mjs +0 -89
  249. package/dist/model-change/changeElementStyle.mjs +0 -143
  250. package/dist/model-change/changeViewLayout.mjs +0 -32
  251. package/dist/model-change/saveManualLayout.d.ts +0 -11
  252. package/dist/model-change/saveManualLayout.mjs +0 -27
  253. package/dist/module.mjs +0 -180
  254. package/dist/protocol.mjs +0 -65
  255. package/dist/references/index.mjs +0 -3
  256. package/dist/references/name-provider.mjs +0 -39
  257. package/dist/references/scope-computation.mjs +0 -312
  258. package/dist/references/scope-provider.mjs +0 -239
  259. package/dist/shared/NodeKindProvider.mjs +0 -110
  260. package/dist/shared/index.mjs +0 -2
  261. package/dist/test/index.mjs +0 -1
  262. package/dist/test/testServices.mjs +0 -200
  263. package/dist/utils/disposable.mjs +0 -25
  264. package/dist/utils/elementRef.mjs +0 -20
  265. package/dist/utils/fqnRef.mjs +0 -57
  266. package/dist/utils/index.mjs +0 -33
  267. package/dist/utils/printDocs.mjs +0 -1
  268. package/dist/utils/projectId.mjs +0 -16
  269. package/dist/utils/stringHash.mjs +0 -5
  270. package/dist/validation/DocumentValidator.mjs +0 -16
  271. package/dist/validation/_shared.mjs +0 -25
  272. package/dist/validation/deployment-checks.mjs +0 -146
  273. package/dist/validation/dynamic-view.mjs +0 -67
  274. package/dist/validation/element-ref.mjs +0 -12
  275. package/dist/validation/element.mjs +0 -50
  276. package/dist/validation/imports.mjs +0 -25
  277. package/dist/validation/index.mjs +0 -180
  278. package/dist/validation/property-checks.mjs +0 -107
  279. package/dist/validation/relation.mjs +0 -53
  280. package/dist/validation/specification.mjs +0 -173
  281. package/dist/validation/view-predicates/fqn-expr-with.mjs +0 -43
  282. package/dist/validation/view-predicates/fqn-ref-expr.mjs +0 -53
  283. package/dist/validation/view-predicates/incoming.mjs +0 -16
  284. package/dist/validation/view-predicates/index.mjs +0 -6
  285. package/dist/validation/view-predicates/outgoing.mjs +0 -20
  286. package/dist/validation/view-predicates/relation-expr.mjs +0 -39
  287. package/dist/validation/view-predicates/relation-with.mjs +0 -16
  288. package/dist/validation/view.mjs +0 -25
  289. package/dist/view-utils/assignNavigateTo.mjs +0 -25
  290. package/dist/view-utils/index.mjs +0 -1
  291. package/dist/view-utils/manual-layout.mjs +0 -99
  292. package/dist/views/configurable-layouter.mjs +0 -51
  293. package/dist/views/index.mjs +0 -1
  294. package/dist/views/likec4-views.mjs +0 -166
  295. package/dist/workspace/AstNodeDescriptionProvider.mjs +0 -17
  296. package/dist/workspace/IndexManager.mjs +0 -17
  297. package/dist/workspace/LangiumDocuments.mjs +0 -53
  298. package/dist/workspace/ProjectsManager.mjs +0 -360
  299. package/dist/workspace/WorkspaceManager.mjs +0 -83
  300. package/dist/workspace/index.mjs +0 -5
  301. /package/dist/views/{configurable-layouter.d.ts → ConfigurableLayouter.d.ts} +0 -0
@@ -0,0 +1,98 @@
1
+ import { invariant } from '@likec4/core';
2
+ import { DefaultWorkspaceManager } from 'langium';
3
+ import { hasAtLeast } from 'remeda';
4
+ import { URI } from 'vscode-uri';
5
+ import * as BuiltIn from '../likec4lib';
6
+ import { logger, logWarnError } from '../logger';
7
+ export class LikeC4WorkspaceManager extends DefaultWorkspaceManager {
8
+ services;
9
+ documentFactory;
10
+ fileSystemProvider;
11
+ initialBuildOptions = {
12
+ eagerLinking: true,
13
+ validation: true,
14
+ };
15
+ constructor(services) {
16
+ super(services);
17
+ this.services = services;
18
+ this.documentFactory = services.workspace.LangiumDocumentFactory;
19
+ this.fileSystemProvider = services.workspace.FileSystemProvider;
20
+ }
21
+ /**
22
+ * First load all project config files, then load all documents in the workspace.
23
+ */
24
+ async performStartup(folders) {
25
+ this.folders ??= folders;
26
+ const configFiles = [];
27
+ for (const folder of folders) {
28
+ try {
29
+ const uri = URI.parse(folder.uri);
30
+ const found = await this.fileSystemProvider.scanProjectFiles(uri);
31
+ configFiles.push(...found);
32
+ this.services.workspace.FileSystemWatcher.watch(uri.fsPath);
33
+ }
34
+ catch (error) {
35
+ logWarnError(error);
36
+ }
37
+ }
38
+ // Project config files
39
+ const projects = this.services.workspace.ProjectsManager;
40
+ for (const entry of configFiles) {
41
+ try {
42
+ await projects.registerConfigFile(entry.uri);
43
+ }
44
+ catch (error) {
45
+ logWarnError(error);
46
+ }
47
+ }
48
+ return await super.performStartup(folders);
49
+ }
50
+ /**
51
+ * Load all additional documents that shall be visible in the context of the given workspace
52
+ * folders and add them to the collector. This can be used to include built-in libraries of
53
+ * your language, which can be either loaded from provided files or constructed in memory.
54
+ */
55
+ async loadAdditionalDocuments(folders, collector) {
56
+ collector(this.documentFactory.fromString(BuiltIn.Content, URI.parse(BuiltIn.Uri)));
57
+ await super.loadAdditionalDocuments(folders, collector);
58
+ }
59
+ /**
60
+ * Determine whether the given folder entry shall be included while indexing the workspace.
61
+ */
62
+ includeEntry(_workspaceFolder, entry, selector) {
63
+ if (this.services.workspace.ProjectsManager.isConfigFile(entry.uri)) {
64
+ return false;
65
+ }
66
+ if (entry.isFile) {
67
+ return !this.services.workspace.ProjectsManager.isExcluded(entry.uri);
68
+ }
69
+ return super.includeEntry(_workspaceFolder, entry, selector);
70
+ }
71
+ workspace() {
72
+ if (this.folders && hasAtLeast(this.folders, 1)) {
73
+ return this.folders[0];
74
+ }
75
+ return null;
76
+ }
77
+ async rebuildAll(cancelToken) {
78
+ if (!cancelToken) {
79
+ return await this.services.workspace.WorkspaceLock.write(async (ct) => {
80
+ await this.rebuildAll(ct);
81
+ });
82
+ }
83
+ const docs = this.services.workspace.LangiumDocuments.all.map(d => d.uri).toArray();
84
+ logger.info('invalidate and rebuild all {docs} documents', { docs: docs.length });
85
+ this.services.workspace.Cache.clear();
86
+ await this.documentBuilder.update(docs, [], cancelToken);
87
+ }
88
+ get workspaceUri() {
89
+ const workspace = this.workspace();
90
+ invariant(workspace, 'Workspace not initialized');
91
+ return URI.parse(workspace.uri);
92
+ }
93
+ get workspaceURL() {
94
+ const workspace = this.workspace();
95
+ invariant(workspace, 'Workspace not initialized');
96
+ return new URL(workspace.uri);
97
+ }
98
+ }
@@ -0,0 +1,5 @@
1
+ export * from './AstNodeDescriptionProvider';
2
+ export * from './IndexManager';
3
+ export * from './LangiumDocuments';
4
+ export * from './ProjectsManager';
5
+ export * from './WorkspaceManager';
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "types": "../dist/likec4lib.d.ts",
3
- "module": "../dist/likec4lib.mjs"
3
+ "module": "../dist/likec4lib.js"
4
4
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@likec4/language-server",
3
3
  "description": "LikeC4 Language Server",
4
- "version": "1.43.0",
4
+ "version": "1.45.0",
5
5
  "license": "MIT",
6
6
  "bugs": "https://github.com/likec4/likec4/issues",
7
7
  "homepage": "https://likec4.dev",
@@ -34,39 +34,39 @@
34
34
  "sources": "./src/index.ts",
35
35
  "default": {
36
36
  "types": "./dist/index.d.ts",
37
- "default": "./dist/index.mjs"
37
+ "default": "./dist/index.js"
38
38
  }
39
39
  },
40
40
  "./likec4lib": {
41
41
  "sources": "./src/likec4lib.ts",
42
42
  "default": {
43
43
  "types": "./dist/likec4lib.d.ts",
44
- "import": "./dist/likec4lib.mjs",
45
- "default": "./dist/likec4lib.mjs"
44
+ "import": "./dist/likec4lib.js",
45
+ "default": "./dist/likec4lib.js"
46
46
  }
47
47
  },
48
48
  "./browser-worker": {
49
49
  "sources": "./src/browser-worker.ts",
50
50
  "default": {
51
51
  "types": "./dist/browser-worker.d.ts",
52
- "import": "./dist/browser-worker.mjs",
53
- "default": "./dist/browser-worker.mjs"
52
+ "import": "./dist/browser-worker.js",
53
+ "default": "./dist/browser-worker.js"
54
54
  }
55
55
  },
56
56
  "./browser": {
57
57
  "sources": "./src/browser.ts",
58
58
  "default": {
59
59
  "types": "./dist/browser.d.ts",
60
- "import": "./dist/browser.mjs",
61
- "default": "./dist/browser.mjs"
60
+ "import": "./dist/browser.js",
61
+ "default": "./dist/browser.js"
62
62
  }
63
63
  },
64
64
  "./protocol": {
65
65
  "sources": "./src/protocol.ts",
66
66
  "default": {
67
67
  "types": "./dist/protocol.d.ts",
68
- "import": "./dist/protocol.mjs",
69
- "default": "./dist/protocol.mjs"
68
+ "import": "./dist/protocol.js",
69
+ "default": "./dist/protocol.js"
70
70
  }
71
71
  },
72
72
  "./bundled": "./dist/bundled.mjs"
@@ -76,15 +76,15 @@
76
76
  "access": "public"
77
77
  },
78
78
  "dependencies": {
79
- "@hpcc-js/wasm-graphviz": "1.12.0",
79
+ "@hpcc-js/wasm-graphviz": "1.15.0",
80
80
  "bundle-require": "^5.1.0",
81
- "esbuild": "0.25.11"
81
+ "esbuild": "0.27.0"
82
82
  },
83
83
  "devDependencies": {
84
- "@hono/node-server": "^1.19.5",
85
- "@modelcontextprotocol/sdk": "^1.17.5",
84
+ "@hono/node-server": "^1.19.6",
85
+ "@modelcontextprotocol/sdk": "^1.20.1",
86
86
  "@msgpack/msgpack": "^3.1.2",
87
- "@smithy/util-base64": "^4.0.0",
87
+ "@smithy/util-base64": "^4.3.0",
88
88
  "@types/natural-compare-lite": "^1.4.2",
89
89
  "@types/node": "~20.19.22",
90
90
  "@types/picomatch": "^4.0.2",
@@ -93,16 +93,18 @@
93
93
  "chokidar": "^4.0.3",
94
94
  "defu": "^6.1.4",
95
95
  "esm-env": "^1.2.2",
96
- "fast-equals": "^5.3.2",
96
+ "fast-equals": "^5.3.3",
97
97
  "fdir": "6.4.0",
98
98
  "fetch-to-node": "^2.1.0",
99
- "hono": "^4.10.1",
99
+ "hono": "^4.10.6",
100
+ "immer": "^10.2.0",
100
101
  "indent-string": "^5.0.0",
101
102
  "json5": "^2.2.3",
102
103
  "langium": "3.5.0",
103
104
  "langium-cli": "3.5.2",
105
+ "nano-spawn": "^1.0.3",
104
106
  "natural-compare-lite": "^1.4.0",
105
- "oxlint": "1.24.0",
107
+ "oxlint": "1.29.0",
106
108
  "p-debounce": "4.0.0",
107
109
  "p-queue": "8.1.1",
108
110
  "p-timeout": "6.1.4",
@@ -111,12 +113,12 @@
111
113
  "remeda": "^2.32.0",
112
114
  "strip-indent": "^4.1.1",
113
115
  "tsx": "4.20.6",
114
- "turbo": "2.5.8",
116
+ "turbo": "2.6.1",
115
117
  "type-fest": "^4.41.0",
116
118
  "typescript": "5.9.3",
117
119
  "ufo": "1.6.1",
118
120
  "unbuild": "3.5.0",
119
- "vitest": "3.2.4",
121
+ "vitest": "4.0.13",
120
122
  "vscode-jsonrpc": "8.2.1",
121
123
  "vscode-languageserver": "9.0.1",
122
124
  "vscode-languageserver-protocol": "3.17.5",
@@ -124,13 +126,13 @@
124
126
  "vscode-uri": "3.1.0",
125
127
  "which": "^5.0.0",
126
128
  "zod": "^3.25.76",
127
- "@likec4/core": "1.43.0",
128
- "@likec4/config": "1.43.0",
129
- "@likec4/icons": "1.43.0",
130
- "@likec4/layouts": "1.43.0",
131
- "@likec4/log": "1.43.0",
132
- "@likec4/tsconfig": "1.43.0",
133
- "@likec4/devops": "1.42.0"
129
+ "@likec4/config": "1.45.0",
130
+ "@likec4/core": "1.45.0",
131
+ "@likec4/devops": "1.42.0",
132
+ "@likec4/icons": "1.45.0",
133
+ "@likec4/layouts": "1.45.0",
134
+ "@likec4/log": "1.45.0",
135
+ "@likec4/tsconfig": "1.45.0"
134
136
  },
135
137
  "scripts": {
136
138
  "typecheck": "tsc -b --verbose",
@@ -151,5 +153,5 @@
151
153
  "test:watch": "vitest"
152
154
  },
153
155
  "types": "dist/index.d.ts",
154
- "module": "dist/index.mjs"
156
+ "module": "dist/index.js"
155
157
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "types": "../dist/protocol.d.ts",
3
- "module": "../dist/protocol.mjs"
3
+ "module": "../dist/protocol.js"
4
4
  }
@@ -1,197 +0,0 @@
1
- import {
2
- nonexhaustive
3
- } from "@likec4/core";
4
- import { LikeC4Model } from "@likec4/core/model";
5
- import { loggable } from "@likec4/log";
6
- import { URI } from "langium";
7
- import { entries, hasAtLeast, indexBy, map, pipe, prop } from "remeda";
8
- import { DiagnosticSeverity } from "vscode-languageserver-types";
9
- import { isLikeC4LangiumDocument } from "./ast.mjs";
10
- import { logger as mainLogger, logWarnError } from "./logger.mjs";
11
- import { ProjectsManager } from "./workspace/index.mjs";
12
- const logger = mainLogger.getChild("LanguageServices");
13
- export class DefaultLikeC4LanguageServices {
14
- constructor(services) {
15
- this.services = services;
16
- this.builder = services.likec4.ModelBuilder;
17
- this.projectsManager = services.shared.workspace.ProjectsManager;
18
- }
19
- builder;
20
- projectsManager;
21
- get views() {
22
- return this.services.likec4.Views;
23
- }
24
- get workspaceUri() {
25
- return this.services.shared.workspace.WorkspaceManager.workspaceUri;
26
- }
27
- projects() {
28
- const projectsManager = this.services.shared.workspace.ProjectsManager;
29
- const projectsWithDocs = pipe(
30
- this.services.shared.workspace.LangiumDocuments.groupedByProject(),
31
- entries(),
32
- map(([projectId, docs]) => {
33
- const id = projectId;
34
- const { folderUri: folderUri2, config: config2 } = projectsManager.getProject(id);
35
- return {
36
- id,
37
- folder: folderUri2,
38
- title: config2.title ?? config2.name,
39
- documents: map(docs, prop("uri")),
40
- config: config2
41
- };
42
- })
43
- );
44
- if (hasAtLeast(projectsWithDocs, 2) && projectsManager.defaultProjectId) {
45
- const idx = projectsWithDocs.findIndex((p) => p.id === projectsManager.defaultProjectId);
46
- if (idx > 0) {
47
- const [defaultProject] = projectsWithDocs.splice(idx, 1);
48
- return [defaultProject, ...projectsWithDocs];
49
- }
50
- return projectsWithDocs;
51
- }
52
- if (hasAtLeast(projectsWithDocs, 1)) {
53
- return projectsWithDocs;
54
- }
55
- const { folderUri, config } = projectsManager.getProject(ProjectsManager.DefaultProjectId);
56
- const documents = map(
57
- this.services.shared.workspace.LangiumDocuments.projectDocuments(ProjectsManager.DefaultProjectId).toArray(),
58
- prop("uri")
59
- );
60
- return [{
61
- id: ProjectsManager.DefaultProjectId,
62
- folder: folderUri,
63
- title: config.title ?? config.name,
64
- documents,
65
- config
66
- }];
67
- }
68
- project(projectId) {
69
- projectId = this.projectsManager.ensureProjectId(projectId);
70
- const projectsManager = this.services.shared.workspace.ProjectsManager;
71
- const { folderUri, config } = projectsManager.getProject(projectId);
72
- const documents = map(
73
- this.services.shared.workspace.LangiumDocuments.projectDocuments(projectId).toArray(),
74
- prop("uri")
75
- );
76
- return {
77
- id: projectId,
78
- folder: folderUri,
79
- title: config.title ?? config.name,
80
- documents,
81
- config
82
- };
83
- }
84
- /**
85
- * Diagram is a computed view, layouted using Graphviz
86
- * Used in React components
87
- */
88
- async diagrams() {
89
- return await this.views.diagrams();
90
- }
91
- /**
92
- * Builds LikeC4Model from all documents
93
- * Only computes view predicates {@link ComputedView} - i.e. no layout
94
- * Not ready for rendering, but enough to traverse
95
- */
96
- async computedModel(project) {
97
- const projectId = this.projectsManager.ensureProjectId(project);
98
- return await this.builder.buildLikeC4Model(projectId);
99
- }
100
- /**
101
- * Same as {@link computedModel()}, but also applies layout
102
- * Ready for rendering
103
- */
104
- async layoutedModel(project) {
105
- const projectId = this.projectsManager.ensureProjectId(project);
106
- const parsed = await this.builder.parseModel(projectId);
107
- if (!parsed) {
108
- throw new Error("Failed to parse model");
109
- }
110
- const diagrams = await this.views.diagrams(projectId);
111
- return LikeC4Model.create({
112
- ...parsed.$data,
113
- _stage: "layouted",
114
- views: indexBy(diagrams, prop("id"))
115
- });
116
- }
117
- getErrors() {
118
- const docs = this.services.shared.workspace.LangiumDocuments.allExcludingBuiltin.toArray();
119
- return docs.flatMap((doc) => {
120
- return (doc.diagnostics ?? []).filter((d) => d.severity === DiagnosticSeverity.Error).map(({ message, range }) => ({
121
- message,
122
- line: range.start.line,
123
- range,
124
- sourceFsPath: doc.uri.fsPath
125
- }));
126
- });
127
- }
128
- /**
129
- * TODO Replace with watcher
130
- */
131
- async notifyUpdate({ changed, removed }) {
132
- if (!changed && !removed) {
133
- return false;
134
- }
135
- const _changed = changed ? URI.file(changed) : void 0;
136
- const _removed = removed ? URI.file(removed) : void 0;
137
- const pm = this.services.shared.workspace.ProjectsManager;
138
- if (_changed && pm.isConfigFile(_changed) || _removed && pm.isConfigFile(_removed)) {
139
- await pm.reloadProjects();
140
- return true;
141
- }
142
- const mutex = this.services.shared.workspace.WorkspaceLock;
143
- try {
144
- let completed = false;
145
- await mutex.write(async (token) => {
146
- await this.services.shared.workspace.DocumentBuilder.update(
147
- _changed ? [_changed] : [],
148
- _removed ? [_removed] : [],
149
- token
150
- );
151
- completed = !token.isCancellationRequested;
152
- });
153
- return completed;
154
- } catch (e) {
155
- logger.error(loggable(e));
156
- return false;
157
- }
158
- }
159
- locate(params) {
160
- switch (true) {
161
- case "element" in params:
162
- return this.services.likec4.ModelLocator.locateElement(params.element, params.projectId);
163
- case "relation" in params:
164
- return this.services.likec4.ModelLocator.locateRelation(params.relation, params.projectId);
165
- case "view" in params:
166
- return this.services.likec4.ModelLocator.locateView(params.view, params.projectId);
167
- case "deployment" in params:
168
- return this.services.likec4.ModelLocator.locateDeploymentElement(
169
- params.deployment,
170
- params.projectId
171
- );
172
- default:
173
- nonexhaustive(params);
174
- }
175
- }
176
- /**
177
- * Checks if the specified document should be excluded from processing.
178
- */
179
- isExcluded(doc) {
180
- try {
181
- return !isLikeC4LangiumDocument(doc) || this.services.shared.workspace.ProjectsManager.checkIfExcluded(doc);
182
- } catch (e) {
183
- logWarnError(e);
184
- return false;
185
- }
186
- }
187
- async dispose() {
188
- logger.debug("disposing LikeC4LanguageServices");
189
- await this.services.shared.workspace.FileSystemWatcher.dispose();
190
- if (this.services.mcp.Server.isStarted) {
191
- await this.services.mcp.Server.stop();
192
- }
193
- this.services.Rpc.dispose();
194
- this.services.likec4.ModelBuilder.dispose();
195
- logger.debug("LikeC4LanguageServices disposed");
196
- }
197
- }