@likec4/language-server 1.47.0 → 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 -4853
  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 -63
  68. package/protocol/package.json +2 -2
  69. package/dist/LikeC4LanguageServices.d.ts +0 -115
  70. package/dist/LikeC4LanguageServices.js +0 -164
  71. package/dist/Rpc.d.ts +0 -9
  72. package/dist/Rpc.js +0 -276
  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 -10
  78. package/dist/browser.js +0 -34
  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 -19
  88. package/dist/filesystem/ChokidarWatcher.js +0 -133
  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 -140
  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 -37
  108. package/dist/index.js +0 -54
  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 -13
  118. package/dist/lsp/CompletionProvider.js +0 -238
  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 -19
  130. package/dist/lsp/SemanticTokenProvider.js +0 -305
  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 -4
  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 -121
  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 -202
  148. package/dist/mcp/tools/find-relationships.js +0 -150
  149. package/dist/mcp/tools/list-projects.d.ts +0 -194
  150. package/dist/mcp/tools/list-projects.js +0 -62
  151. package/dist/mcp/tools/open-view.d.ts +0 -200
  152. package/dist/mcp/tools/open-view.js +0 -52
  153. package/dist/mcp/tools/read-deployment.d.ts +0 -200
  154. package/dist/mcp/tools/read-deployment.js +0 -150
  155. package/dist/mcp/tools/read-element.d.ts +0 -200
  156. package/dist/mcp/tools/read-element.js +0 -218
  157. package/dist/mcp/tools/read-project-summary.d.ts +0 -198
  158. package/dist/mcp/tools/read-project-summary.js +0 -176
  159. package/dist/mcp/tools/read-view.d.ts +0 -200
  160. package/dist/mcp/tools/read-view.js +0 -203
  161. package/dist/mcp/tools/search-element.d.ts +0 -198
  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 -54
  178. package/dist/model/model-builder.js +0 -233
  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 -382
  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 -289
  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 -33
  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 -29
  310. package/dist/workspace/LangiumDocuments.js +0 -104
  311. package/dist/workspace/ProjectsManager.d.ts +0 -134
  312. package/dist/workspace/ProjectsManager.js +0 -610
  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,29 +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
- /**
12
- * Returns all known documents, without any filtering.
13
- */
14
- get allKnownDocuments(): Stream<LangiumDocument>;
15
- get all(): Stream<LikeC4LangiumDocument>;
16
- /**
17
- * Returns all documents, excluding built-in documents and documents excluded by ProjectsManager.
18
- */
19
- get allExcludingBuiltin(): Stream<LikeC4LangiumDocument>;
20
- /**
21
- * Returns all documents for a project, including both project documents and documents included by the project.
22
- */
23
- projectDocuments(projectId: ProjectId): Stream<LikeC4LangiumDocument>;
24
- groupedByProject(): Record<ProjectId, NonEmptyArray<LikeC4LangiumDocument>>;
25
- /**
26
- * Reset the project IDs of all documents.
27
- */
28
- resetProjectIds(): void;
29
- }
@@ -1,104 +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 && !isLikeC4LangiumDocument(doc)) {
36
- throw new Error(`Document ${doc.uri.path} is not a LikeC4 document`);
37
- }
38
- if (doc && !exclude(doc)) {
39
- doc.likec4ProjectId = this.services.workspace.ProjectsManager.belongsTo(doc);
40
- }
41
- return doc;
42
- }
43
- /**
44
- * Returns all known documents, without any filtering.
45
- */
46
- get allKnownDocuments() {
47
- return stream(this.documentMap.values());
48
- }
49
- get all() {
50
- return this.allKnownDocuments
51
- .filter((doc) => {
52
- if (doc.textDocument.languageId === LikeC4LanguageMetaData.languageId) {
53
- if (!isLikeC4Builtin(doc.uri)) {
54
- doc.likec4ProjectId = this.services.workspace.ProjectsManager.belongsTo(doc);
55
- }
56
- return true;
57
- }
58
- return false;
59
- });
60
- }
61
- /**
62
- * Returns all documents, excluding built-in documents and documents excluded by ProjectsManager.
63
- */
64
- get allExcludingBuiltin() {
65
- const projects = this.services.workspace.ProjectsManager;
66
- return this.all.filter((doc) => {
67
- return !(isLikeC4Builtin(doc.uri) || projects.isExcluded(doc));
68
- });
69
- }
70
- /**
71
- * Returns all documents for a project, including both project documents and documents included by the project.
72
- */
73
- projectDocuments(projectId) {
74
- const projects = this.services.workspace.ProjectsManager;
75
- return this.all.filter(doc => {
76
- if (isLikeC4Builtin(doc.uri)) {
77
- return false;
78
- }
79
- return projects.isIncluded(projectId, doc.uri);
80
- });
81
- }
82
- groupedByProject() {
83
- return this.services.workspace.ProjectsManager
84
- .all
85
- .reduce((acc, projectId) => {
86
- const docs = this.projectDocuments(projectId).toArray();
87
- if (hasAtLeast(docs, 1)) {
88
- acc[projectId] = docs;
89
- }
90
- return acc;
91
- }, {});
92
- }
93
- /**
94
- * Reset the project IDs of all documents.
95
- */
96
- resetProjectIds() {
97
- this.allKnownDocuments.forEach(doc => {
98
- if (exclude(doc)) {
99
- return;
100
- }
101
- delete doc.likec4ProjectId;
102
- });
103
- }
104
- }
@@ -1,134 +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
- * Returns all projects that include the specified folder, or inside the folder.
65
- */
66
- findAllProjectsByFolder(folder: URI | string): ProjectData[];
67
- /**
68
- * Validates and ensures the project ID.
69
- * If no project ID is specified, returns default project ID
70
- * If there are multiple projects and default project is not set, throws an error
71
- */
72
- ensureProjectId(projectId?: scalar.ProjectId | undefined): scalar.ProjectId;
73
- /**
74
- * Validates and ensures the project.
75
- */
76
- ensureProject(projectId?: scalar.ProjectId | undefined): Project;
77
- hasMultipleProjects(): boolean;
78
- /**
79
- * Checks if the specified document should be excluded from processing.
80
- */
81
- isExcluded(document: LangiumDocument | URI | string): boolean;
82
- /**
83
- * Checks if the specified document is included by the project:
84
- * - if the document belongs to the project and is not excluded
85
- * - if the document is included by the project
86
- */
87
- isIncluded(projectId: ProjectId, document: LangiumDocument | URI | string): boolean;
88
- /**
89
- * Checks if it is a config file and it is not excluded by default exclude pattern
90
- *
91
- * @param entry The file system entry to check
92
- */
93
- isConfigFile(entry: URI): boolean;
94
- /**
95
- * Registers likec4 project by config file.
96
- */
97
- registerConfigFile(configFile: URI, cancelToken?: Cancellation.CancellationToken): Promise<ProjectData>;
98
- /**
99
- * Registers (or reloads) likec4 project by config file or config object.
100
- * If there is some project registered at same folder, it will be reloaded.
101
- */
102
- registerProject(opts: {
103
- config: LikeC4ProjectConfig | LikeC4ProjectConfigInput;
104
- folderUri: URI | string;
105
- }, cancelToken?: Cancellation.CancellationToken): Promise<ProjectData>;
106
- /**
107
- * Determines which project the given document belongs to.
108
- * If the document does not belong to any project, returns the default project ID.
109
- */
110
- belongsTo(document: LangiumDocument | URI | string): scalar.ProjectId;
111
- reloadProjects(cancelToken?: Cancellation.CancellationToken): Promise<void>;
112
- protected _reloadProjects(cancelToken?: Cancellation.CancellationToken): Promise<void>;
113
- protected uniqueProjectId(name: string): scalar.ProjectId;
114
- protected reset(): void;
115
- rebuidProject(projectId: ProjectId, cancelToken?: Cancellation.CancellationToken): Promise<void>;
116
- protected findProjectForDocument(documentUri: string): ProjectData;
117
- protected get mappingsToProject(): WorkspaceCache<string, ProjectData>;
118
- /**
119
- * The mapping between documents and projects they belong to.
120
- * Lazy-created due to initialization order of the LanguageServer
121
- */
122
- protected get documentBelongsTo(): WorkspaceCache<LangiumDocument, ProjectData>;
123
- /**
124
- * Returns all include paths from all projects.
125
- * Used by WorkspaceManager to scan additional directories for C4 files.
126
- */
127
- getAllIncludePaths(): Array<{
128
- projectId: scalar.ProjectId;
129
- includePath: URI;
130
- includeConfig: IncludeConfig;
131
- }>;
132
- private getWorkspaceFolder;
133
- }
134
- export {};