@likec4/language-server 1.46.4 → 1.48.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 (316) hide show
  1. package/LICENSE +1 -1
  2. package/browser/package.json +2 -2
  3. package/browser-worker/package.json +2 -2
  4. package/bundled/package.json +4 -0
  5. package/dist/LikeC4LanguageServices.d.mts +4 -0
  6. package/dist/LikeC4LanguageServices.mjs +3 -0
  7. package/dist/_chunks/ConfigurableLayouter.mjs +1956 -0
  8. package/dist/_chunks/LikeC4LanguageServices.d.mts +1978 -0
  9. package/dist/_chunks/LikeC4LanguageServices.mjs +725 -0
  10. package/dist/_chunks/ast.d.mts +1444 -0
  11. package/dist/_chunks/ast.mjs +2375 -0
  12. package/dist/_chunks/ast2.mjs +176 -0
  13. package/dist/_chunks/common-exports.mjs +0 -0
  14. package/dist/_chunks/filesystem.mjs +58 -0
  15. package/dist/_chunks/grammar.mjs +8 -0
  16. package/dist/_chunks/icons.mjs +5211 -0
  17. package/dist/_chunks/libs/@hono/node-server.mjs +436 -0
  18. package/dist/_chunks/libs/@msgpack/msgpack.mjs +805 -0
  19. package/dist/_chunks/libs/eventemitter3.mjs +243 -0
  20. package/dist/_chunks/libs/fast-equals.mjs +446 -0
  21. package/dist/_chunks/libs/hono.mjs +1829 -0
  22. package/dist/_chunks/libs/p-queue.mjs +449 -0
  23. package/dist/_chunks/libs/parse-ms.mjs +36 -0
  24. package/dist/_chunks/libs/picomatch.mjs +1673 -0
  25. package/dist/_chunks/libs/pretty-ms.mjs +80 -0
  26. package/dist/_chunks/libs/remeda.mjs +482 -0
  27. package/dist/_chunks/libs/strip-indent.mjs +15 -0
  28. package/dist/_chunks/libs/ufo.mjs +166 -0
  29. package/dist/_chunks/likec4lib.mjs +9 -0
  30. package/dist/_chunks/mcp.mjs +33 -0
  31. package/dist/_chunks/module.mjs +28 -0
  32. package/dist/_chunks/module2.mjs +6576 -0
  33. package/dist/_chunks/protocol.d.mts +311 -0
  34. package/dist/_chunks/protocol.mjs +78 -0
  35. package/dist/_chunks/rolldown-runtime.mjs +42 -0
  36. package/dist/ast.d.mts +4 -0
  37. package/dist/ast.mjs +4 -0
  38. package/dist/browser-worker.d.mts +1 -0
  39. package/dist/browser-worker.mjs +6 -0
  40. package/dist/browser.d.mts +11 -0
  41. package/dist/browser.mjs +27 -0
  42. package/dist/bundled.d.mts +28 -0
  43. package/dist/bundled.mjs +51 -4681
  44. package/dist/common-exports.d.mts +4 -0
  45. package/dist/common-exports.mjs +5 -0
  46. package/dist/filesystem/index.d.mts +4 -0
  47. package/dist/filesystem/index.mjs +3 -0
  48. package/dist/generated/ast.d.mts +2 -0
  49. package/dist/generated/ast.mjs +3 -0
  50. package/dist/generated/grammar.d.mts +6 -0
  51. package/dist/generated/grammar.mjs +3 -0
  52. package/dist/generated/module.d.mts +14 -0
  53. package/dist/generated/module.mjs +3 -0
  54. package/dist/generated-lib/icons.d.mts +4 -0
  55. package/dist/generated-lib/icons.mjs +3 -0
  56. package/dist/index.d.mts +4 -0
  57. package/dist/index.mjs +48 -0
  58. package/dist/likec4lib.d.mts +9 -0
  59. package/dist/likec4lib.mjs +4 -0
  60. package/dist/mcp/index.d.mts +4 -0
  61. package/dist/mcp/index.mjs +3 -0
  62. package/dist/module.d.mts +4 -0
  63. package/dist/module.mjs +3 -0
  64. package/dist/protocol.d.mts +2 -0
  65. package/dist/protocol.mjs +3 -0
  66. package/likec4lib/package.json +2 -2
  67. package/package.json +106 -62
  68. package/protocol/package.json +2 -2
  69. package/dist/LikeC4LanguageServices.d.ts +0 -109
  70. package/dist/LikeC4LanguageServices.js +0 -154
  71. package/dist/Rpc.d.ts +0 -9
  72. package/dist/Rpc.js +0 -270
  73. package/dist/ast.d.ts +0 -226
  74. package/dist/ast.js +0 -264
  75. package/dist/browser-worker.d.ts +0 -1
  76. package/dist/browser-worker.js +0 -4
  77. package/dist/browser.d.ts +0 -11
  78. package/dist/browser.js +0 -35
  79. package/dist/bundled.d.ts +0 -8
  80. package/dist/bundled.js +0 -44
  81. package/dist/documentation/documentation-provider.d.ts +0 -8
  82. package/dist/documentation/documentation-provider.js +0 -51
  83. package/dist/documentation/index.d.ts +0 -1
  84. package/dist/documentation/index.js +0 -1
  85. package/dist/empty.d.ts +0 -2
  86. package/dist/empty.js +0 -2
  87. package/dist/filesystem/ChokidarWatcher.d.ts +0 -16
  88. package/dist/filesystem/ChokidarWatcher.js +0 -108
  89. package/dist/filesystem/FileSystemWatcher.d.ts +0 -19
  90. package/dist/filesystem/FileSystemWatcher.js +0 -14
  91. package/dist/filesystem/LikeC4FileSystem.d.ts +0 -3
  92. package/dist/filesystem/LikeC4FileSystem.js +0 -130
  93. package/dist/filesystem/index.d.ts +0 -55
  94. package/dist/filesystem/index.js +0 -29
  95. package/dist/formatting/LikeC4Formatter.d.ts +0 -59
  96. package/dist/formatting/LikeC4Formatter.js +0 -637
  97. package/dist/formatting/utils.d.ts +0 -6
  98. package/dist/formatting/utils.js +0 -18
  99. package/dist/generated/ast.d.ts +0 -1411
  100. package/dist/generated/ast.js +0 -2207
  101. package/dist/generated/grammar.d.ts +0 -6
  102. package/dist/generated/grammar.js +0 -7
  103. package/dist/generated/module.d.ts +0 -14
  104. package/dist/generated/module.js +0 -27
  105. package/dist/generated-lib/icons.d.ts +0 -1
  106. package/dist/generated-lib/icons.js +0 -18
  107. package/dist/index.d.ts +0 -38
  108. package/dist/index.js +0 -55
  109. package/dist/likec4lib.d.ts +0 -6
  110. package/dist/likec4lib.js +0 -7
  111. package/dist/logger.d.ts +0 -17
  112. package/dist/logger.js +0 -81
  113. package/dist/lsp/CodeActionProvider.d.ts +0 -14
  114. package/dist/lsp/CodeActionProvider.js +0 -33
  115. package/dist/lsp/CodeLensProvider.d.ts +0 -9
  116. package/dist/lsp/CodeLensProvider.js +0 -44
  117. package/dist/lsp/CompletionProvider.d.ts +0 -11
  118. package/dist/lsp/CompletionProvider.js +0 -200
  119. package/dist/lsp/DocumentHighlightProvider.d.ts +0 -9
  120. package/dist/lsp/DocumentHighlightProvider.js +0 -10
  121. package/dist/lsp/DocumentLinkProvider.d.ts +0 -11
  122. package/dist/lsp/DocumentLinkProvider.js +0 -58
  123. package/dist/lsp/DocumentSymbolProvider.d.ts +0 -33
  124. package/dist/lsp/DocumentSymbolProvider.js +0 -317
  125. package/dist/lsp/HoverProvider.d.ts +0 -10
  126. package/dist/lsp/HoverProvider.js +0 -106
  127. package/dist/lsp/RenameProvider.d.ts +0 -5
  128. package/dist/lsp/RenameProvider.js +0 -6
  129. package/dist/lsp/SemanticTokenProvider.d.ts +0 -12
  130. package/dist/lsp/SemanticTokenProvider.js +0 -264
  131. package/dist/lsp/index.d.ts +0 -8
  132. package/dist/lsp/index.js +0 -9
  133. package/dist/mcp/MCPServerFactory.d.ts +0 -8
  134. package/dist/mcp/MCPServerFactory.js +0 -73
  135. package/dist/mcp/NoopLikeC4MCPServer.d.ts +0 -9
  136. package/dist/mcp/NoopLikeC4MCPServer.js +0 -17
  137. package/dist/mcp/interfaces.d.ts +0 -13
  138. package/dist/mcp/interfaces.js +0 -5
  139. package/dist/mcp/server/StdioLikeC4MCPServer.d.ts +0 -16
  140. package/dist/mcp/server/StdioLikeC4MCPServer.js +0 -51
  141. package/dist/mcp/server/StreamableLikeC4MCPServer.d.ts +0 -16
  142. package/dist/mcp/server/StreamableLikeC4MCPServer.js +0 -145
  143. package/dist/mcp/server/WithMCPServer.d.ts +0 -4
  144. package/dist/mcp/server/WithMCPServer.js +0 -54
  145. package/dist/mcp/tools/_common.d.ts +0 -88
  146. package/dist/mcp/tools/_common.js +0 -49
  147. package/dist/mcp/tools/find-relationships.d.ts +0 -12
  148. package/dist/mcp/tools/find-relationships.js +0 -150
  149. package/dist/mcp/tools/list-projects.d.ts +0 -6
  150. package/dist/mcp/tools/list-projects.js +0 -62
  151. package/dist/mcp/tools/open-view.d.ts +0 -10
  152. package/dist/mcp/tools/open-view.js +0 -52
  153. package/dist/mcp/tools/read-deployment.d.ts +0 -10
  154. package/dist/mcp/tools/read-deployment.js +0 -150
  155. package/dist/mcp/tools/read-element.d.ts +0 -10
  156. package/dist/mcp/tools/read-element.js +0 -218
  157. package/dist/mcp/tools/read-project-summary.d.ts +0 -8
  158. package/dist/mcp/tools/read-project-summary.js +0 -176
  159. package/dist/mcp/tools/read-view.d.ts +0 -10
  160. package/dist/mcp/tools/read-view.js +0 -203
  161. package/dist/mcp/tools/search-element.d.ts +0 -8
  162. package/dist/mcp/tools/search-element.js +0 -177
  163. package/dist/mcp/utils.d.ts +0 -18
  164. package/dist/mcp/utils.js +0 -48
  165. package/dist/model/builder/MergedExtends.d.ts +0 -13
  166. package/dist/model/builder/MergedExtends.js +0 -74
  167. package/dist/model/builder/MergedSpecification.d.ts +0 -32
  168. package/dist/model/builder/MergedSpecification.js +0 -175
  169. package/dist/model/builder/buildModel.d.ts +0 -16
  170. package/dist/model/builder/buildModel.js +0 -245
  171. package/dist/model/deployments-index.d.ts +0 -10
  172. package/dist/model/deployments-index.js +0 -102
  173. package/dist/model/fqn-index.d.ts +0 -61
  174. package/dist/model/fqn-index.js +0 -253
  175. package/dist/model/index.d.ts +0 -6
  176. package/dist/model/index.js +0 -6
  177. package/dist/model/model-builder.d.ts +0 -52
  178. package/dist/model/model-builder.js +0 -224
  179. package/dist/model/model-locator.d.ts +0 -39
  180. package/dist/model/model-locator.js +0 -240
  181. package/dist/model/model-parser-where.d.ts +0 -4
  182. package/dist/model/model-parser-where.js +0 -81
  183. package/dist/model/model-parser.d.ts +0 -645
  184. package/dist/model/model-parser.js +0 -133
  185. package/dist/model/parser/Base.d.ts +0 -69
  186. package/dist/model/parser/Base.js +0 -372
  187. package/dist/model/parser/DeploymentModelParser.d.ts +0 -71
  188. package/dist/model/parser/DeploymentModelParser.js +0 -176
  189. package/dist/model/parser/DeploymentViewParser.d.ts +0 -75
  190. package/dist/model/parser/DeploymentViewParser.js +0 -86
  191. package/dist/model/parser/FqnRefParser.d.ts +0 -66
  192. package/dist/model/parser/FqnRefParser.js +0 -382
  193. package/dist/model/parser/GlobalsParser.d.ts +0 -109
  194. package/dist/model/parser/GlobalsParser.js +0 -84
  195. package/dist/model/parser/ImportsParser.d.ts +0 -46
  196. package/dist/model/parser/ImportsParser.js +0 -24
  197. package/dist/model/parser/ModelParser.d.ts +0 -71
  198. package/dist/model/parser/ModelParser.js +0 -209
  199. package/dist/model/parser/PredicatesParser.d.ts +0 -75
  200. package/dist/model/parser/PredicatesParser.js +0 -45
  201. package/dist/model/parser/SpecificationParser.d.ts +0 -53
  202. package/dist/model/parser/SpecificationParser.js +0 -113
  203. package/dist/model/parser/ValueConverter.d.ts +0 -4
  204. package/dist/model/parser/ValueConverter.js +0 -12
  205. package/dist/model/parser/ViewsParser.d.ts +0 -112
  206. package/dist/model/parser/ViewsParser.js +0 -492
  207. package/dist/model-change/ModelChanges.d.ts +0 -18
  208. package/dist/model-change/ModelChanges.js +0 -129
  209. package/dist/model-change/changeElementStyle.d.ts +0 -16
  210. package/dist/model-change/changeElementStyle.js +0 -134
  211. package/dist/model-change/changeViewLayout.d.ts +0 -12
  212. package/dist/model-change/changeViewLayout.js +0 -28
  213. package/dist/model-change/removeManualLayoutV1.d.ts +0 -7
  214. package/dist/model-change/removeManualLayoutV1.js +0 -27
  215. package/dist/module.d.ts +0 -92
  216. package/dist/module.js +0 -143
  217. package/dist/protocol.d.ts +0 -284
  218. package/dist/protocol.js +0 -123
  219. package/dist/references/index.d.ts +0 -3
  220. package/dist/references/index.js +0 -3
  221. package/dist/references/name-provider.d.ts +0 -9
  222. package/dist/references/name-provider.js +0 -37
  223. package/dist/references/scope-computation.d.ts +0 -20
  224. package/dist/references/scope-computation.js +0 -288
  225. package/dist/references/scope-provider.d.ts +0 -40
  226. package/dist/references/scope-provider.js +0 -239
  227. package/dist/shared/NodeKindProvider.d.ts +0 -15
  228. package/dist/shared/NodeKindProvider.js +0 -57
  229. package/dist/shared/WorkspaceSymbolProvider.d.ts +0 -3
  230. package/dist/shared/WorkspaceSymbolProvider.js +0 -3
  231. package/dist/shared/index.d.ts +0 -2
  232. package/dist/shared/index.js +0 -2
  233. package/dist/test/index.d.ts +0 -1
  234. package/dist/test/index.js +0 -1
  235. package/dist/test/testServices.d.ts +0 -64
  236. package/dist/test/testServices.js +0 -210
  237. package/dist/utils/disposable.d.ts +0 -8
  238. package/dist/utils/disposable.js +0 -26
  239. package/dist/utils/elementRef.d.ts +0 -11
  240. package/dist/utils/elementRef.js +0 -27
  241. package/dist/utils/fqnRef.d.ts +0 -11
  242. package/dist/utils/fqnRef.js +0 -63
  243. package/dist/utils/index.d.ts +0 -11
  244. package/dist/utils/index.js +0 -35
  245. package/dist/utils/printDocs.d.ts +0 -2
  246. package/dist/utils/printDocs.js +0 -1
  247. package/dist/utils/projectId.d.ts +0 -4
  248. package/dist/utils/projectId.js +0 -16
  249. package/dist/utils/stringHash.d.ts +0 -1
  250. package/dist/utils/stringHash.js +0 -5
  251. package/dist/validation/DocumentValidator.d.ts +0 -11
  252. package/dist/validation/DocumentValidator.js +0 -17
  253. package/dist/validation/_shared.d.ts +0 -3
  254. package/dist/validation/_shared.js +0 -26
  255. package/dist/validation/deployment-checks.d.ts +0 -7
  256. package/dist/validation/deployment-checks.js +0 -140
  257. package/dist/validation/dynamic-view.d.ts +0 -6
  258. package/dist/validation/dynamic-view.js +0 -67
  259. package/dist/validation/element-ref.d.ts +0 -4
  260. package/dist/validation/element-ref.js +0 -12
  261. package/dist/validation/element.d.ts +0 -4
  262. package/dist/validation/element.js +0 -49
  263. package/dist/validation/imports.d.ts +0 -4
  264. package/dist/validation/imports.js +0 -46
  265. package/dist/validation/index.d.ts +0 -15
  266. package/dist/validation/index.js +0 -167
  267. package/dist/validation/property-checks.d.ts +0 -7
  268. package/dist/validation/property-checks.js +0 -108
  269. package/dist/validation/relation.d.ts +0 -6
  270. package/dist/validation/relation.js +0 -141
  271. package/dist/validation/specification.d.ts +0 -12
  272. package/dist/validation/specification.js +0 -190
  273. package/dist/validation/view-checks.d.ts +0 -4
  274. package/dist/validation/view-checks.js +0 -46
  275. package/dist/validation/view-predicates/fqn-expr-with.d.ts +0 -4
  276. package/dist/validation/view-predicates/fqn-expr-with.js +0 -43
  277. package/dist/validation/view-predicates/fqn-ref-expr.d.ts +0 -4
  278. package/dist/validation/view-predicates/fqn-ref-expr.js +0 -51
  279. package/dist/validation/view-predicates/incoming.d.ts +0 -4
  280. package/dist/validation/view-predicates/incoming.js +0 -16
  281. package/dist/validation/view-predicates/index.d.ts +0 -6
  282. package/dist/validation/view-predicates/index.js +0 -6
  283. package/dist/validation/view-predicates/outgoing.d.ts +0 -4
  284. package/dist/validation/view-predicates/outgoing.js +0 -20
  285. package/dist/validation/view-predicates/relation-expr.d.ts +0 -4
  286. package/dist/validation/view-predicates/relation-expr.js +0 -46
  287. package/dist/validation/view-predicates/relation-with.d.ts +0 -4
  288. package/dist/validation/view-predicates/relation-with.js +0 -16
  289. package/dist/validation/view.d.ts +0 -4
  290. package/dist/validation/view.js +0 -42
  291. package/dist/view-utils/assignNavigateTo.d.ts +0 -2
  292. package/dist/view-utils/assignNavigateTo.js +0 -27
  293. package/dist/view-utils/index.d.ts +0 -2
  294. package/dist/view-utils/index.js +0 -2
  295. package/dist/view-utils/manual-layout.d.ts +0 -13
  296. package/dist/view-utils/manual-layout.js +0 -149
  297. package/dist/views/ConfigurableLayouter.d.ts +0 -7
  298. package/dist/views/ConfigurableLayouter.js +0 -51
  299. package/dist/views/LikeC4ManualLayouts.d.ts +0 -42
  300. package/dist/views/LikeC4ManualLayouts.js +0 -209
  301. package/dist/views/LikeC4Views.d.ts +0 -89
  302. package/dist/views/LikeC4Views.js +0 -216
  303. package/dist/views/index.d.ts +0 -4
  304. package/dist/views/index.js +0 -11
  305. package/dist/workspace/AstNodeDescriptionProvider.d.ts +0 -7
  306. package/dist/workspace/AstNodeDescriptionProvider.js +0 -18
  307. package/dist/workspace/IndexManager.d.ts +0 -10
  308. package/dist/workspace/IndexManager.js +0 -26
  309. package/dist/workspace/LangiumDocuments.d.ts +0 -25
  310. package/dist/workspace/LangiumDocuments.js +0 -98
  311. package/dist/workspace/ProjectsManager.d.ts +0 -130
  312. package/dist/workspace/ProjectsManager.js +0 -605
  313. package/dist/workspace/WorkspaceManager.d.ts +0 -31
  314. package/dist/workspace/WorkspaceManager.js +0 -132
  315. package/dist/workspace/index.d.ts +0 -5
  316. package/dist/workspace/index.js +0 -5
@@ -1,216 +0,0 @@
1
- import { _layout, applyManualLayout, calcDriftsFromSnapshot } from '@likec4/core';
2
- import { GraphvizLayouter } from '@likec4/layouts';
3
- import { loggable } from '@likec4/log';
4
- import { interruptAndCheck } from 'langium';
5
- import { isTruthy, values } from 'remeda';
6
- import { logger as rootLogger, logWarnError } from '../logger';
7
- import { performanceMark } from '../utils';
8
- const viewsLogger = rootLogger.getChild('views');
9
- export class DefaultLikeC4Views {
10
- services;
11
- cache = new WeakMap();
12
- /**
13
- * Set of viewIds with reported errors
14
- * value is `${projectId}-${viewId}`
15
- */
16
- viewsWithReportedErrors = new Set();
17
- ModelBuilder;
18
- constructor(services) {
19
- this.services = services;
20
- this.ModelBuilder = services.likec4.ModelBuilder;
21
- }
22
- get layouter() {
23
- return this.services.likec4.Layouter;
24
- }
25
- async computedViews(projectId, cancelToken) {
26
- const likeC4Model = await this.ModelBuilder.computeModel(projectId, cancelToken);
27
- return values(likeC4Model.$data.views);
28
- }
29
- async _layoutAllViews(likeC4Model, cancelToken) {
30
- const views = values(likeC4Model.$data.views);
31
- if (views.length === 0) {
32
- return [];
33
- }
34
- const m0 = performanceMark();
35
- const projectId = likeC4Model.project.id;
36
- const logger = viewsLogger.getChild(projectId);
37
- logger.debug `layoutAll: ${views.length} views`;
38
- const tasks = [];
39
- const styles = likeC4Model.$styles;
40
- const results = [];
41
- //
42
- for (const view of views) {
43
- let cached = this.cache.get(view);
44
- if (cached) {
45
- logger.debug `layout ${view.id} from cache`;
46
- results.push(cached);
47
- continue;
48
- }
49
- tasks.push({
50
- view,
51
- styles,
52
- });
53
- }
54
- if (tasks.length > 0) {
55
- await this.layouter.batchLayout({
56
- batch: tasks,
57
- cancelToken,
58
- onSuccess: (task, result) => {
59
- results.push(this.viewSucceed(task.view, likeC4Model, result));
60
- },
61
- onError: (task, error) => {
62
- logger.warn(`Fail layout view ${task.view.id}`, { error });
63
- },
64
- });
65
- }
66
- if (cancelToken && cancelToken.isCancellationRequested) {
67
- await interruptAndCheck(cancelToken);
68
- }
69
- if (results.length !== views.length) {
70
- logger.warn `layouted ${results.length} of ${views.length} views in ${m0.pretty}`;
71
- }
72
- else if (results.length > 0) {
73
- logger.debug `layouted all ${results.length} views in ${m0.pretty}`;
74
- }
75
- return results;
76
- }
77
- async layoutAllViews(projectId, cancelToken) {
78
- const likeC4Model = await this.ModelBuilder.computeModel(projectId, cancelToken);
79
- return await this._layoutAllViews(likeC4Model, cancelToken);
80
- }
81
- async layoutView({ viewId, layoutType, projectId, cancelToken, }) {
82
- const model = await this.ModelBuilder.computeModel(projectId, cancelToken);
83
- const view = model.findView(viewId)?.$view;
84
- projectId = model.project.id;
85
- const logger = viewsLogger.getChild(projectId);
86
- if (!view) {
87
- logger.warn `layoutView ${viewId} not found`;
88
- const snapshot = model.findManualLayout(viewId);
89
- if (snapshot) {
90
- logger.debug `found manual layout for ${viewId}`;
91
- let diagram = { ...snapshot };
92
- diagram.drifts = [
93
- 'not-exists',
94
- ];
95
- diagram._layout = 'manual';
96
- return {
97
- diagram: diagram,
98
- dot: '# manual layout',
99
- };
100
- }
101
- return null;
102
- }
103
- try {
104
- const m0 = performanceMark();
105
- const out = this.cache.get(view) ?? await this.layouter.layout({
106
- view,
107
- styles: model.$styles,
108
- });
109
- if (this.cache.has(view)) {
110
- logger.debug `layout ${viewId} from cache`;
111
- }
112
- else {
113
- this.viewSucceed(view, model, out);
114
- logger.debug(`layout {viewId} in ${m0.pretty}`, { viewId });
115
- }
116
- if (isTruthy(layoutType)) {
117
- return {
118
- dot: out.dot,
119
- diagram: this.withLayoutType(out.diagram, model, layoutType),
120
- };
121
- }
122
- return out;
123
- }
124
- catch (e) {
125
- const errMessage = loggable(e);
126
- logger.warn(errMessage);
127
- this.reportViewError(view, projectId, errMessage);
128
- return Promise.reject(e);
129
- }
130
- }
131
- async diagrams(projectId, cancelToken) {
132
- const likeC4Model = await this.ModelBuilder.computeModel(projectId, cancelToken);
133
- const layouted = await this._layoutAllViews(likeC4Model, cancelToken);
134
- return layouted.map(({ diagram }) => {
135
- // Apply manual layout if any
136
- return this.withLayoutType(diagram, likeC4Model, 'manual');
137
- });
138
- }
139
- async viewsAsGraphvizOut(projectId, cancelToken) {
140
- const KEY = 'All-LayoutedViews-DotWithSvg';
141
- const cache = this.services.shared.workspace.Cache;
142
- if (cache.has(KEY)) {
143
- return await Promise.resolve(cache.get(KEY));
144
- }
145
- const likeC4Model = await this.ModelBuilder.computeModel(projectId, cancelToken);
146
- const views = values(likeC4Model.$data.views);
147
- if (views.length === 0) {
148
- return [];
149
- }
150
- const tasks = views.map(async (view) => {
151
- const { dot, svg } = await this.layouter.svg({
152
- view,
153
- styles: likeC4Model.$styles,
154
- });
155
- return {
156
- id: view.id,
157
- dot,
158
- svg,
159
- };
160
- });
161
- const succeed = [];
162
- const settledResult = await Promise.allSettled(tasks);
163
- for (const result of settledResult) {
164
- if (result.status === 'fulfilled') {
165
- succeed.push(result.value);
166
- }
167
- else {
168
- logWarnError(result.reason);
169
- }
170
- }
171
- cache.set(KEY, succeed);
172
- return succeed;
173
- }
174
- /**
175
- * Open a view in the preview panel.
176
- */
177
- async openView(viewId, projectId) {
178
- await this.services.Rpc.openView({ viewId, projectId });
179
- }
180
- reportViewError(view, projectId, error) {
181
- const key = `${projectId}-${view.id}`;
182
- this.cache.delete(view);
183
- if (!this.viewsWithReportedErrors.has(key)) {
184
- this.services.shared.lsp.Connection?.window.showErrorMessage(`LikeC4: ${error}`);
185
- this.viewsWithReportedErrors.add(key);
186
- }
187
- }
188
- /**
189
- * Applies manual layout or calculates drifts from snapshot
190
- * if layoutType is specified
191
- */
192
- withLayoutType(layouted, likec4model, layoutType) {
193
- if (!layoutType) {
194
- return layouted;
195
- }
196
- const snapshot = likec4model.findManualLayout(layouted.id);
197
- if (!snapshot) {
198
- return layouted;
199
- }
200
- if (layoutType === 'manual') {
201
- if (layouted[_layout] === 'manual') {
202
- viewsLogger.error(`View ${layouted.id} already has manual layout, this should not happen`);
203
- return layouted;
204
- }
205
- return applyManualLayout(layouted, snapshot);
206
- }
207
- return calcDriftsFromSnapshot(layouted, snapshot);
208
- }
209
- viewSucceed(view, likec4model, result) {
210
- const projectId = likec4model.project.id;
211
- const key = `${projectId}-${view.id}`;
212
- this.viewsWithReportedErrors.delete(key);
213
- this.cache.set(view, result);
214
- return result;
215
- }
216
- }
@@ -1,4 +0,0 @@
1
- import type { LikeC4ManualLayouts, LikeC4ManualLayoutsModuleContext } from './LikeC4ManualLayouts';
2
- export { DefaultLikeC4Views, type LikeC4Views } from './LikeC4Views';
3
- export type { LikeC4ManualLayouts, LikeC4ManualLayoutsModuleContext };
4
- export declare const NoopLikeC4ManualLayouts: LikeC4ManualLayoutsModuleContext;
@@ -1,11 +0,0 @@
1
- export { DefaultLikeC4Views } from './LikeC4Views';
2
- export const NoopLikeC4ManualLayouts = {
3
- manualLayouts: () => {
4
- return {
5
- read: () => Promise.resolve(null),
6
- write: () => Promise.reject(new Error('NoopLikeC4ManualLayouts: write operation is not supported')),
7
- remove: () => Promise.resolve(null),
8
- clearCaches: () => { },
9
- };
10
- },
11
- };
@@ -1,7 +0,0 @@
1
- import { type AstNode, type AstNodeDescription, type LangiumDocument, DefaultAstNodeDescriptionProvider } from 'langium';
2
- import type { LikeC4Services } from '../module';
3
- export declare class AstNodeDescriptionProvider extends DefaultAstNodeDescriptionProvider {
4
- protected services: LikeC4Services;
5
- constructor(services: LikeC4Services);
6
- createDescription(node: AstNode, name: string | undefined, document?: LangiumDocument): AstNodeDescription;
7
- }
@@ -1,18 +0,0 @@
1
- import { AstUtils, DefaultAstNodeDescriptionProvider, } from 'langium';
2
- import { isLikeC4Builtin } from '../likec4lib';
3
- export class AstNodeDescriptionProvider extends DefaultAstNodeDescriptionProvider {
4
- services;
5
- constructor(services) {
6
- super(services);
7
- this.services = services;
8
- }
9
- createDescription(node, name, document) {
10
- document ??= AstUtils.getDocument(node);
11
- const description = super.createDescription(node, name, document);
12
- if (!isLikeC4Builtin(document.uri)) {
13
- document.likec4ProjectId ??= this.services.shared.workspace.ProjectsManager.belongsTo(document);
14
- description.likec4ProjectId = document.likec4ProjectId;
15
- }
16
- return description;
17
- }
18
- }
@@ -1,10 +0,0 @@
1
- import type { ProjectId } from '@likec4/core';
2
- import { type AstNodeDescription, type LangiumDocument, type Stream, DefaultIndexManager } from 'langium';
3
- import type { CancellationToken } from 'vscode-languageserver';
4
- import type { LikeC4SharedServices } from '../module';
5
- export declare class IndexManager extends DefaultIndexManager {
6
- protected services: LikeC4SharedServices;
7
- constructor(services: LikeC4SharedServices);
8
- updateContent(document: LangiumDocument, cancelToken?: CancellationToken): Promise<void>;
9
- projectElements(projectId: ProjectId, nodeType?: string, uris?: Set<string>): Stream<AstNodeDescription>;
10
- }
@@ -1,26 +0,0 @@
1
- import { DefaultIndexManager, stream } from 'langium';
2
- export class IndexManager extends DefaultIndexManager {
3
- services;
4
- constructor(services) {
5
- super(services);
6
- this.services = services;
7
- }
8
- async updateContent(document, cancelToken) {
9
- const projects = this.services.workspace.ProjectsManager;
10
- // Ensure the document is assigned to a project
11
- document.likec4ProjectId = projects.belongsTo(document);
12
- await super.updateContent(document, cancelToken);
13
- }
14
- projectElements(projectId, nodeType, uris) {
15
- const projects = this.services.workspace.ProjectsManager;
16
- let documentUris = stream(this.symbolIndex.keys());
17
- return documentUris
18
- .filter(uri => {
19
- if (uris && !uris.has(uri)) {
20
- return false;
21
- }
22
- return projects.isIncluded(projectId, uri);
23
- })
24
- .flatMap(uri => this.getFileDescriptions(uri, nodeType));
25
- }
26
- }
@@ -1,25 +0,0 @@
1
- import type { NonEmptyArray, ProjectId } from '@likec4/core';
2
- import type { LangiumDocument, Stream, URI } from 'langium';
3
- import { DefaultLangiumDocuments } from 'langium';
4
- import { type LikeC4LangiumDocument } from '../ast';
5
- import type { LikeC4SharedServices } from '../module';
6
- export declare class LangiumDocuments extends DefaultLangiumDocuments {
7
- protected services: LikeC4SharedServices;
8
- constructor(services: LikeC4SharedServices);
9
- addDocument(document: LangiumDocument): void;
10
- getDocument(uri: URI): LikeC4LangiumDocument | undefined;
11
- get all(): Stream<LikeC4LangiumDocument>;
12
- /**
13
- * Returns all documents, excluding built-in documents and documents excluded by ProjectsManager.
14
- */
15
- get allExcludingBuiltin(): Stream<LikeC4LangiumDocument>;
16
- /**
17
- * Returns all documents for a project, including both project documents and documents included by the project.
18
- */
19
- projectDocuments(projectId: ProjectId): Stream<LikeC4LangiumDocument>;
20
- groupedByProject(): Record<ProjectId, NonEmptyArray<LikeC4LangiumDocument>>;
21
- /**
22
- * Reset the project IDs of all documents.
23
- */
24
- resetProjectIds(): void;
25
- }
@@ -1,98 +0,0 @@
1
- import { compareNaturalHierarchically } from '@likec4/core/utils';
2
- import { DefaultLangiumDocuments, stream } from 'langium';
3
- import { hasAtLeast } from 'remeda';
4
- import { isLikeC4LangiumDocument } from '../ast';
5
- import { LikeC4LanguageMetaData } from '../generated/module';
6
- import { isLikeC4Builtin } from '../likec4lib';
7
- /**
8
- * Compare function for document paths to ensure consistent order
9
- */
10
- const compare = compareNaturalHierarchically('/', true);
11
- const ensureOrder = (a, b) => compare(a.uri.path, b.uri.path);
12
- const exclude = (doc) => {
13
- return doc.textDocument.languageId !== LikeC4LanguageMetaData.languageId || isLikeC4Builtin(doc.uri);
14
- };
15
- export class LangiumDocuments extends DefaultLangiumDocuments {
16
- services;
17
- constructor(services) {
18
- super(services);
19
- this.services = services;
20
- }
21
- addDocument(document) {
22
- const uriString = document.uri.toString();
23
- if (this.documentMap.has(uriString)) {
24
- throw new Error(`A document with the URI '${uriString}' is already present.`);
25
- }
26
- const docs = [...this.documentMap.values(), document].sort(ensureOrder);
27
- // Clear and re-add documents to ensure consistent order
28
- this.documentMap.clear();
29
- for (const doc of docs) {
30
- this.documentMap.set(doc.uri.toString(), doc);
31
- }
32
- }
33
- getDocument(uri) {
34
- const doc = super.getDocument(uri);
35
- if (doc && !exclude(doc)) {
36
- doc.likec4ProjectId = this.services.workspace.ProjectsManager.belongsTo(doc);
37
- }
38
- if (doc && !isLikeC4LangiumDocument(doc)) {
39
- throw new Error(`Document ${doc.uri.path} is not a LikeC4 document`);
40
- }
41
- return doc;
42
- }
43
- get all() {
44
- return stream(this.documentMap.values())
45
- .filter((doc) => {
46
- if (doc.textDocument.languageId === LikeC4LanguageMetaData.languageId) {
47
- if (!isLikeC4Builtin(doc.uri)) {
48
- doc.likec4ProjectId = this.services.workspace.ProjectsManager.belongsTo(doc);
49
- }
50
- return true;
51
- }
52
- return false;
53
- });
54
- }
55
- /**
56
- * Returns all documents, excluding built-in documents and documents excluded by ProjectsManager.
57
- */
58
- get allExcludingBuiltin() {
59
- const projects = this.services.workspace.ProjectsManager;
60
- return this.all.filter((doc) => {
61
- return !(isLikeC4Builtin(doc.uri) || projects.isExcluded(doc));
62
- });
63
- }
64
- /**
65
- * Returns all documents for a project, including both project documents and documents included by the project.
66
- */
67
- projectDocuments(projectId) {
68
- const projects = this.services.workspace.ProjectsManager;
69
- return this.all.filter(doc => {
70
- if (isLikeC4Builtin(doc.uri)) {
71
- return false;
72
- }
73
- return projects.isIncluded(projectId, doc.uri);
74
- });
75
- }
76
- groupedByProject() {
77
- return this.services.workspace.ProjectsManager
78
- .all
79
- .reduce((acc, projectId) => {
80
- const docs = this.projectDocuments(projectId).toArray();
81
- if (hasAtLeast(docs, 1)) {
82
- acc[projectId] = docs;
83
- }
84
- return acc;
85
- }, {});
86
- }
87
- /**
88
- * Reset the project IDs of all documents.
89
- */
90
- resetProjectIds() {
91
- super.all.forEach(doc => {
92
- if (exclude(doc)) {
93
- return;
94
- }
95
- delete doc.likec4ProjectId;
96
- });
97
- }
98
- }
@@ -1,130 +0,0 @@
1
- import { type IncludeConfig, type LikeC4ProjectConfig, type LikeC4ProjectConfigInput } from '@likec4/config';
2
- import type { NonEmptyArray, NonEmptyReadonlyArray } from '@likec4/core';
3
- import type { ProjectId, scalar } from '@likec4/core/types';
4
- import { type Cancellation, type LangiumDocument, URI, WorkspaceCache } from 'langium';
5
- import picomatch from 'picomatch';
6
- import type { Tagged } from 'type-fest';
7
- import type { LikeC4SharedServices } from '../module';
8
- /**
9
- * A tagged string that represents a project folder URI
10
- * Always has trailing slash.
11
- */
12
- export type ProjectFolder = Tagged<string, 'ProjectFolder'>;
13
- export declare function ProjectFolder(folder: URI | string): ProjectFolder;
14
- interface ProjectData {
15
- id: scalar.ProjectId;
16
- config: LikeC4ProjectConfig;
17
- folder: ProjectFolder;
18
- folderUri: URI;
19
- exclude?: picomatch.Matcher;
20
- /**
21
- * Resolved include paths with both URI and folder string representations.
22
- * These are additional directories that are part of this project.
23
- */
24
- includePaths?: NonEmptyArray<{
25
- uri: URI;
26
- folder: ProjectFolder;
27
- }>;
28
- /**
29
- * Normalized include configuration (paths, maxDepth, fileThreshold).
30
- */
31
- includeConfig: IncludeConfig;
32
- }
33
- export interface Project {
34
- id: scalar.ProjectId;
35
- folderUri: URI;
36
- config: LikeC4ProjectConfig;
37
- /**
38
- * Resolved include paths as URIs (if configured).
39
- */
40
- includePaths?: NonEmptyReadonlyArray<URI>;
41
- }
42
- export declare class ProjectsManager {
43
- #private;
44
- protected services: LikeC4SharedServices;
45
- /**
46
- * The global project ID used for all documents
47
- * that are not part of a specific project.
48
- */
49
- static readonly DefaultProjectId: ProjectId<string>;
50
- constructor(services: LikeC4SharedServices);
51
- /**
52
- * Returns:
53
- * - configured default project ID if set
54
- * - the default project ID if there are no projects.
55
- * - the ID of the only project
56
- * - undefined if there are multiple projects.
57
- */
58
- get defaultProjectId(): scalar.ProjectId | undefined;
59
- set defaultProjectId(id: string | scalar.ProjectId | undefined);
60
- get default(): ProjectData;
61
- get all(): NonEmptyReadonlyArray<scalar.ProjectId>;
62
- getProject(arg: scalar.ProjectId | LangiumDocument): Project;
63
- /**
64
- * Validates and ensures the project ID.
65
- * If no project ID is specified, returns default project ID
66
- * If there are multiple projects and default project is not set, throws an error
67
- */
68
- ensureProjectId(projectId?: scalar.ProjectId | undefined): scalar.ProjectId;
69
- /**
70
- * Validates and ensures the project.
71
- */
72
- ensureProject(projectId?: scalar.ProjectId | undefined): Project;
73
- hasMultipleProjects(): boolean;
74
- /**
75
- * Checks if the specified document should be excluded from processing.
76
- */
77
- isExcluded(document: LangiumDocument | URI | string): boolean;
78
- /**
79
- * Checks if the specified document is included by the project:
80
- * - if the document belongs to the project and is not excluded
81
- * - if the document is included by the project
82
- */
83
- isIncluded(projectId: ProjectId, document: LangiumDocument | URI | string): boolean;
84
- /**
85
- * Checks if it is a config file and it is not excluded by default exclude pattern
86
- *
87
- * @param entry The file system entry to check
88
- */
89
- isConfigFile(entry: URI): boolean;
90
- /**
91
- * Registers likec4 project by config file.
92
- */
93
- registerConfigFile(configFile: URI, cancelToken?: Cancellation.CancellationToken): Promise<ProjectData>;
94
- /**
95
- * Registers (or reloads) likec4 project by config file or config object.
96
- * If there is some project registered at same folder, it will be reloaded.
97
- */
98
- registerProject(opts: {
99
- config: LikeC4ProjectConfig | LikeC4ProjectConfigInput;
100
- folderUri: URI | string;
101
- }, cancelToken?: Cancellation.CancellationToken): Promise<ProjectData>;
102
- /**
103
- * Determines which project the given document belongs to.
104
- * If the document does not belong to any project, returns the default project ID.
105
- */
106
- belongsTo(document: LangiumDocument | URI | string): scalar.ProjectId;
107
- reloadProjects(cancelToken?: Cancellation.CancellationToken): Promise<void>;
108
- protected _reloadProjects(cancelToken?: Cancellation.CancellationToken): Promise<void>;
109
- protected uniqueProjectId(name: string): scalar.ProjectId;
110
- protected reset(): void;
111
- rebuidProject(projectId: ProjectId, cancelToken?: Cancellation.CancellationToken): Promise<void>;
112
- protected findProjectForDocument(documentUri: string): ProjectData;
113
- protected get mappingsToProject(): WorkspaceCache<string, ProjectData>;
114
- /**
115
- * The mapping between documents and projects they belong to.
116
- * Lazy-created due to initialization order of the LanguageServer
117
- */
118
- protected get documentBelongsTo(): WorkspaceCache<LangiumDocument, ProjectData>;
119
- /**
120
- * Returns all include paths from all projects.
121
- * Used by WorkspaceManager to scan additional directories for C4 files.
122
- */
123
- getAllIncludePaths(): Array<{
124
- projectId: scalar.ProjectId;
125
- includePath: URI;
126
- includeConfig: IncludeConfig;
127
- }>;
128
- private getWorkspaceFolder;
129
- }
130
- export {};