@likec4/language-server 1.47.0 → 1.49.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 (297) hide show
  1. package/browser/package.json +2 -2
  2. package/browser-worker/package.json +2 -2
  3. package/bundled/package.json +4 -0
  4. package/dist/THIRD-PARTY-LICENSES.md +178 -0
  5. package/dist/_chunks/ConfigurableLayouter.mjs +1 -0
  6. package/dist/_chunks/LikeC4FileSystem.mjs +3 -0
  7. package/dist/_chunks/LikeC4Views.mjs +34 -0
  8. package/dist/_chunks/ProjectsManager.mjs +1 -0
  9. package/dist/_chunks/WithMCPServer.mjs +481 -0
  10. package/dist/_chunks/icons.mjs +2 -0
  11. package/dist/_chunks/index.d.mts +3107 -0
  12. package/dist/_chunks/libs/@msgpack/msgpack.mjs +1 -0
  13. package/dist/_chunks/libs/eventemitter3.mjs +1 -0
  14. package/dist/_chunks/libs/fast-equals.mjs +1 -0
  15. package/dist/_chunks/libs/p-queue.mjs +1 -0
  16. package/dist/_chunks/libs/parse-ms.mjs +1 -0
  17. package/dist/_chunks/libs/picomatch.mjs +1 -0
  18. package/dist/_chunks/libs/pretty-ms.mjs +1 -0
  19. package/dist/_chunks/libs/remeda.mjs +1 -0
  20. package/dist/_chunks/libs/strip-indent.mjs +1 -0
  21. package/dist/_chunks/libs/ufo.mjs +1 -0
  22. package/dist/_chunks/logger.mjs +1 -0
  23. package/dist/_chunks/rolldown-runtime.mjs +1 -0
  24. package/dist/_chunks/utils.mjs +1 -0
  25. package/dist/browser/index.d.mts +10 -0
  26. package/dist/browser/index.mjs +1 -0
  27. package/dist/browser/worker.d.mts +1 -0
  28. package/dist/browser/worker.mjs +1 -0
  29. package/dist/bundled.d.mts +27 -0
  30. package/dist/bundled.mjs +1 -4853
  31. package/dist/filesystem/index.d.mts +2 -0
  32. package/dist/filesystem/index.mjs +1 -0
  33. package/dist/index.d.mts +39 -0
  34. package/dist/index.mjs +1 -0
  35. package/dist/likec4lib.d.mts +16 -0
  36. package/dist/likec4lib.mjs +1 -0
  37. package/dist/mcp/index.d.mts +2 -0
  38. package/dist/mcp/index.mjs +1 -0
  39. package/dist/module.d.mts +126 -0
  40. package/dist/module.mjs +1 -0
  41. package/dist/protocol.d.mts +315 -0
  42. package/dist/protocol.mjs +1 -0
  43. package/filesystem/package.json +4 -0
  44. package/likec4lib/package.json +2 -2
  45. package/mcp/package.json +4 -0
  46. package/module/package.json +4 -0
  47. package/package.json +128 -62
  48. package/protocol/package.json +2 -2
  49. package/LICENSE +0 -21
  50. package/dist/LikeC4LanguageServices.d.ts +0 -115
  51. package/dist/LikeC4LanguageServices.js +0 -164
  52. package/dist/Rpc.d.ts +0 -9
  53. package/dist/Rpc.js +0 -276
  54. package/dist/ast.d.ts +0 -226
  55. package/dist/ast.js +0 -264
  56. package/dist/browser-worker.d.ts +0 -1
  57. package/dist/browser-worker.js +0 -4
  58. package/dist/browser.d.ts +0 -10
  59. package/dist/browser.js +0 -34
  60. package/dist/bundled.d.ts +0 -8
  61. package/dist/bundled.js +0 -44
  62. package/dist/documentation/documentation-provider.d.ts +0 -8
  63. package/dist/documentation/documentation-provider.js +0 -51
  64. package/dist/documentation/index.d.ts +0 -1
  65. package/dist/documentation/index.js +0 -1
  66. package/dist/empty.d.ts +0 -2
  67. package/dist/empty.js +0 -2
  68. package/dist/filesystem/ChokidarWatcher.d.ts +0 -19
  69. package/dist/filesystem/ChokidarWatcher.js +0 -133
  70. package/dist/filesystem/FileSystemWatcher.d.ts +0 -19
  71. package/dist/filesystem/FileSystemWatcher.js +0 -14
  72. package/dist/filesystem/LikeC4FileSystem.d.ts +0 -3
  73. package/dist/filesystem/LikeC4FileSystem.js +0 -140
  74. package/dist/filesystem/index.d.ts +0 -55
  75. package/dist/filesystem/index.js +0 -29
  76. package/dist/formatting/LikeC4Formatter.d.ts +0 -59
  77. package/dist/formatting/LikeC4Formatter.js +0 -637
  78. package/dist/formatting/utils.d.ts +0 -6
  79. package/dist/formatting/utils.js +0 -18
  80. package/dist/generated/ast.d.ts +0 -1411
  81. package/dist/generated/ast.js +0 -2207
  82. package/dist/generated/grammar.d.ts +0 -6
  83. package/dist/generated/grammar.js +0 -7
  84. package/dist/generated/module.d.ts +0 -14
  85. package/dist/generated/module.js +0 -27
  86. package/dist/generated-lib/icons.d.ts +0 -1
  87. package/dist/generated-lib/icons.js +0 -18
  88. package/dist/index.d.ts +0 -37
  89. package/dist/index.js +0 -54
  90. package/dist/likec4lib.d.ts +0 -6
  91. package/dist/likec4lib.js +0 -7
  92. package/dist/logger.d.ts +0 -17
  93. package/dist/logger.js +0 -81
  94. package/dist/lsp/CodeActionProvider.d.ts +0 -14
  95. package/dist/lsp/CodeActionProvider.js +0 -33
  96. package/dist/lsp/CodeLensProvider.d.ts +0 -9
  97. package/dist/lsp/CodeLensProvider.js +0 -44
  98. package/dist/lsp/CompletionProvider.d.ts +0 -13
  99. package/dist/lsp/CompletionProvider.js +0 -238
  100. package/dist/lsp/DocumentHighlightProvider.d.ts +0 -9
  101. package/dist/lsp/DocumentHighlightProvider.js +0 -10
  102. package/dist/lsp/DocumentLinkProvider.d.ts +0 -11
  103. package/dist/lsp/DocumentLinkProvider.js +0 -58
  104. package/dist/lsp/DocumentSymbolProvider.d.ts +0 -33
  105. package/dist/lsp/DocumentSymbolProvider.js +0 -317
  106. package/dist/lsp/HoverProvider.d.ts +0 -10
  107. package/dist/lsp/HoverProvider.js +0 -106
  108. package/dist/lsp/RenameProvider.d.ts +0 -5
  109. package/dist/lsp/RenameProvider.js +0 -6
  110. package/dist/lsp/SemanticTokenProvider.d.ts +0 -19
  111. package/dist/lsp/SemanticTokenProvider.js +0 -305
  112. package/dist/lsp/index.d.ts +0 -8
  113. package/dist/lsp/index.js +0 -9
  114. package/dist/mcp/MCPServerFactory.d.ts +0 -8
  115. package/dist/mcp/MCPServerFactory.js +0 -73
  116. package/dist/mcp/NoopLikeC4MCPServer.d.ts +0 -9
  117. package/dist/mcp/NoopLikeC4MCPServer.js +0 -17
  118. package/dist/mcp/interfaces.d.ts +0 -13
  119. package/dist/mcp/interfaces.js +0 -4
  120. package/dist/mcp/server/StdioLikeC4MCPServer.d.ts +0 -16
  121. package/dist/mcp/server/StdioLikeC4MCPServer.js +0 -51
  122. package/dist/mcp/server/StreamableLikeC4MCPServer.d.ts +0 -16
  123. package/dist/mcp/server/StreamableLikeC4MCPServer.js +0 -121
  124. package/dist/mcp/server/WithMCPServer.d.ts +0 -4
  125. package/dist/mcp/server/WithMCPServer.js +0 -54
  126. package/dist/mcp/tools/_common.d.ts +0 -88
  127. package/dist/mcp/tools/_common.js +0 -49
  128. package/dist/mcp/tools/find-relationships.d.ts +0 -202
  129. package/dist/mcp/tools/find-relationships.js +0 -150
  130. package/dist/mcp/tools/list-projects.d.ts +0 -194
  131. package/dist/mcp/tools/list-projects.js +0 -62
  132. package/dist/mcp/tools/open-view.d.ts +0 -200
  133. package/dist/mcp/tools/open-view.js +0 -52
  134. package/dist/mcp/tools/read-deployment.d.ts +0 -200
  135. package/dist/mcp/tools/read-deployment.js +0 -150
  136. package/dist/mcp/tools/read-element.d.ts +0 -200
  137. package/dist/mcp/tools/read-element.js +0 -218
  138. package/dist/mcp/tools/read-project-summary.d.ts +0 -198
  139. package/dist/mcp/tools/read-project-summary.js +0 -176
  140. package/dist/mcp/tools/read-view.d.ts +0 -200
  141. package/dist/mcp/tools/read-view.js +0 -203
  142. package/dist/mcp/tools/search-element.d.ts +0 -198
  143. package/dist/mcp/tools/search-element.js +0 -177
  144. package/dist/mcp/utils.d.ts +0 -18
  145. package/dist/mcp/utils.js +0 -48
  146. package/dist/model/builder/MergedExtends.d.ts +0 -13
  147. package/dist/model/builder/MergedExtends.js +0 -74
  148. package/dist/model/builder/MergedSpecification.d.ts +0 -32
  149. package/dist/model/builder/MergedSpecification.js +0 -175
  150. package/dist/model/builder/buildModel.d.ts +0 -16
  151. package/dist/model/builder/buildModel.js +0 -245
  152. package/dist/model/deployments-index.d.ts +0 -10
  153. package/dist/model/deployments-index.js +0 -102
  154. package/dist/model/fqn-index.d.ts +0 -61
  155. package/dist/model/fqn-index.js +0 -253
  156. package/dist/model/index.d.ts +0 -6
  157. package/dist/model/index.js +0 -6
  158. package/dist/model/model-builder.d.ts +0 -54
  159. package/dist/model/model-builder.js +0 -233
  160. package/dist/model/model-locator.d.ts +0 -39
  161. package/dist/model/model-locator.js +0 -240
  162. package/dist/model/model-parser-where.d.ts +0 -4
  163. package/dist/model/model-parser-where.js +0 -81
  164. package/dist/model/model-parser.d.ts +0 -645
  165. package/dist/model/model-parser.js +0 -133
  166. package/dist/model/parser/Base.d.ts +0 -69
  167. package/dist/model/parser/Base.js +0 -382
  168. package/dist/model/parser/DeploymentModelParser.d.ts +0 -71
  169. package/dist/model/parser/DeploymentModelParser.js +0 -176
  170. package/dist/model/parser/DeploymentViewParser.d.ts +0 -75
  171. package/dist/model/parser/DeploymentViewParser.js +0 -86
  172. package/dist/model/parser/FqnRefParser.d.ts +0 -66
  173. package/dist/model/parser/FqnRefParser.js +0 -382
  174. package/dist/model/parser/GlobalsParser.d.ts +0 -109
  175. package/dist/model/parser/GlobalsParser.js +0 -84
  176. package/dist/model/parser/ImportsParser.d.ts +0 -46
  177. package/dist/model/parser/ImportsParser.js +0 -24
  178. package/dist/model/parser/ModelParser.d.ts +0 -71
  179. package/dist/model/parser/ModelParser.js +0 -209
  180. package/dist/model/parser/PredicatesParser.d.ts +0 -75
  181. package/dist/model/parser/PredicatesParser.js +0 -45
  182. package/dist/model/parser/SpecificationParser.d.ts +0 -53
  183. package/dist/model/parser/SpecificationParser.js +0 -113
  184. package/dist/model/parser/ValueConverter.d.ts +0 -4
  185. package/dist/model/parser/ValueConverter.js +0 -12
  186. package/dist/model/parser/ViewsParser.d.ts +0 -112
  187. package/dist/model/parser/ViewsParser.js +0 -492
  188. package/dist/model-change/ModelChanges.d.ts +0 -18
  189. package/dist/model-change/ModelChanges.js +0 -129
  190. package/dist/model-change/changeElementStyle.d.ts +0 -16
  191. package/dist/model-change/changeElementStyle.js +0 -134
  192. package/dist/model-change/changeViewLayout.d.ts +0 -12
  193. package/dist/model-change/changeViewLayout.js +0 -28
  194. package/dist/model-change/removeManualLayoutV1.d.ts +0 -7
  195. package/dist/model-change/removeManualLayoutV1.js +0 -27
  196. package/dist/module.d.ts +0 -92
  197. package/dist/module.js +0 -143
  198. package/dist/protocol.d.ts +0 -289
  199. package/dist/protocol.js +0 -123
  200. package/dist/references/index.d.ts +0 -3
  201. package/dist/references/index.js +0 -3
  202. package/dist/references/name-provider.d.ts +0 -9
  203. package/dist/references/name-provider.js +0 -37
  204. package/dist/references/scope-computation.d.ts +0 -20
  205. package/dist/references/scope-computation.js +0 -288
  206. package/dist/references/scope-provider.d.ts +0 -40
  207. package/dist/references/scope-provider.js +0 -239
  208. package/dist/shared/NodeKindProvider.d.ts +0 -15
  209. package/dist/shared/NodeKindProvider.js +0 -57
  210. package/dist/shared/WorkspaceSymbolProvider.d.ts +0 -3
  211. package/dist/shared/WorkspaceSymbolProvider.js +0 -3
  212. package/dist/shared/index.d.ts +0 -2
  213. package/dist/shared/index.js +0 -2
  214. package/dist/test/index.d.ts +0 -1
  215. package/dist/test/index.js +0 -1
  216. package/dist/test/testServices.d.ts +0 -64
  217. package/dist/test/testServices.js +0 -210
  218. package/dist/utils/disposable.d.ts +0 -8
  219. package/dist/utils/disposable.js +0 -26
  220. package/dist/utils/elementRef.d.ts +0 -11
  221. package/dist/utils/elementRef.js +0 -33
  222. package/dist/utils/fqnRef.d.ts +0 -11
  223. package/dist/utils/fqnRef.js +0 -63
  224. package/dist/utils/index.d.ts +0 -11
  225. package/dist/utils/index.js +0 -35
  226. package/dist/utils/printDocs.d.ts +0 -2
  227. package/dist/utils/printDocs.js +0 -1
  228. package/dist/utils/projectId.d.ts +0 -4
  229. package/dist/utils/projectId.js +0 -16
  230. package/dist/utils/stringHash.d.ts +0 -1
  231. package/dist/utils/stringHash.js +0 -5
  232. package/dist/validation/DocumentValidator.d.ts +0 -11
  233. package/dist/validation/DocumentValidator.js +0 -17
  234. package/dist/validation/_shared.d.ts +0 -3
  235. package/dist/validation/_shared.js +0 -26
  236. package/dist/validation/deployment-checks.d.ts +0 -7
  237. package/dist/validation/deployment-checks.js +0 -140
  238. package/dist/validation/dynamic-view.d.ts +0 -6
  239. package/dist/validation/dynamic-view.js +0 -67
  240. package/dist/validation/element-ref.d.ts +0 -4
  241. package/dist/validation/element-ref.js +0 -12
  242. package/dist/validation/element.d.ts +0 -4
  243. package/dist/validation/element.js +0 -49
  244. package/dist/validation/imports.d.ts +0 -4
  245. package/dist/validation/imports.js +0 -46
  246. package/dist/validation/index.d.ts +0 -15
  247. package/dist/validation/index.js +0 -167
  248. package/dist/validation/property-checks.d.ts +0 -7
  249. package/dist/validation/property-checks.js +0 -108
  250. package/dist/validation/relation.d.ts +0 -6
  251. package/dist/validation/relation.js +0 -141
  252. package/dist/validation/specification.d.ts +0 -12
  253. package/dist/validation/specification.js +0 -190
  254. package/dist/validation/view-checks.d.ts +0 -4
  255. package/dist/validation/view-checks.js +0 -46
  256. package/dist/validation/view-predicates/fqn-expr-with.d.ts +0 -4
  257. package/dist/validation/view-predicates/fqn-expr-with.js +0 -43
  258. package/dist/validation/view-predicates/fqn-ref-expr.d.ts +0 -4
  259. package/dist/validation/view-predicates/fqn-ref-expr.js +0 -51
  260. package/dist/validation/view-predicates/incoming.d.ts +0 -4
  261. package/dist/validation/view-predicates/incoming.js +0 -16
  262. package/dist/validation/view-predicates/index.d.ts +0 -6
  263. package/dist/validation/view-predicates/index.js +0 -6
  264. package/dist/validation/view-predicates/outgoing.d.ts +0 -4
  265. package/dist/validation/view-predicates/outgoing.js +0 -20
  266. package/dist/validation/view-predicates/relation-expr.d.ts +0 -4
  267. package/dist/validation/view-predicates/relation-expr.js +0 -46
  268. package/dist/validation/view-predicates/relation-with.d.ts +0 -4
  269. package/dist/validation/view-predicates/relation-with.js +0 -16
  270. package/dist/validation/view.d.ts +0 -4
  271. package/dist/validation/view.js +0 -42
  272. package/dist/view-utils/assignNavigateTo.d.ts +0 -2
  273. package/dist/view-utils/assignNavigateTo.js +0 -27
  274. package/dist/view-utils/index.d.ts +0 -2
  275. package/dist/view-utils/index.js +0 -2
  276. package/dist/view-utils/manual-layout.d.ts +0 -13
  277. package/dist/view-utils/manual-layout.js +0 -149
  278. package/dist/views/ConfigurableLayouter.d.ts +0 -7
  279. package/dist/views/ConfigurableLayouter.js +0 -51
  280. package/dist/views/LikeC4ManualLayouts.d.ts +0 -42
  281. package/dist/views/LikeC4ManualLayouts.js +0 -209
  282. package/dist/views/LikeC4Views.d.ts +0 -89
  283. package/dist/views/LikeC4Views.js +0 -216
  284. package/dist/views/index.d.ts +0 -4
  285. package/dist/views/index.js +0 -11
  286. package/dist/workspace/AstNodeDescriptionProvider.d.ts +0 -7
  287. package/dist/workspace/AstNodeDescriptionProvider.js +0 -18
  288. package/dist/workspace/IndexManager.d.ts +0 -10
  289. package/dist/workspace/IndexManager.js +0 -26
  290. package/dist/workspace/LangiumDocuments.d.ts +0 -29
  291. package/dist/workspace/LangiumDocuments.js +0 -104
  292. package/dist/workspace/ProjectsManager.d.ts +0 -134
  293. package/dist/workspace/ProjectsManager.js +0 -610
  294. package/dist/workspace/WorkspaceManager.d.ts +0 -31
  295. package/dist/workspace/WorkspaceManager.js +0 -132
  296. package/dist/workspace/index.d.ts +0 -5
  297. 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 {};