@likec4/language-server 1.18.0 → 1.19.1

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 (250) hide show
  1. package/dist/LikeC4FileSystem.d.ts +13 -0
  2. package/dist/LikeC4FileSystem.js +27 -0
  3. package/dist/Rpc.d.ts +9 -0
  4. package/dist/Rpc.js +132 -0
  5. package/dist/ast.d.ts +200 -0
  6. package/dist/ast.js +276 -0
  7. package/dist/browser.d.ts +7 -20
  8. package/dist/browser.js +13 -0
  9. package/dist/documentation/documentation-provider.d.ts +8 -0
  10. package/dist/documentation/documentation-provider.js +46 -0
  11. package/dist/documentation/index.d.ts +1 -0
  12. package/dist/documentation/index.js +1 -0
  13. package/dist/formatting/LikeC4Formatter.d.ts +27 -0
  14. package/dist/formatting/LikeC4Formatter.js +261 -0
  15. package/dist/formatting/utils.d.ts +6 -0
  16. package/dist/formatting/utils.js +15 -0
  17. package/dist/generated/ast.d.ts +1242 -0
  18. package/dist/generated/ast.js +1945 -0
  19. package/dist/generated/grammar.d.ts +6 -0
  20. package/dist/generated/grammar.js +3 -0
  21. package/dist/generated/module.d.ts +9 -0
  22. package/dist/generated/module.js +23 -0
  23. package/dist/generated-lib/icons.d.ts +1 -0
  24. package/dist/{likec4lib.mjs → generated-lib/icons.js} +1 -6
  25. package/dist/index.d.ts +9 -31
  26. package/dist/index.js +14 -0
  27. package/dist/like-c4.langium +845 -0
  28. package/dist/likec4lib.d.ts +4 -6
  29. package/dist/likec4lib.js +4 -0
  30. package/dist/logger.d.ts +7 -0
  31. package/dist/logger.js +73 -0
  32. package/dist/lsp/CodeLensProvider.d.ts +9 -0
  33. package/dist/lsp/CodeLensProvider.js +40 -0
  34. package/dist/lsp/CompletionProvider.d.ts +6 -0
  35. package/dist/lsp/CompletionProvider.js +135 -0
  36. package/dist/lsp/DocumentHighlightProvider.d.ts +9 -0
  37. package/dist/lsp/DocumentHighlightProvider.js +10 -0
  38. package/dist/lsp/DocumentLinkProvider.d.ts +11 -0
  39. package/dist/lsp/DocumentLinkProvider.js +49 -0
  40. package/dist/lsp/DocumentSymbolProvider.d.ts +32 -0
  41. package/dist/lsp/DocumentSymbolProvider.js +274 -0
  42. package/dist/lsp/HoverProvider.d.ts +10 -0
  43. package/dist/lsp/HoverProvider.js +69 -0
  44. package/dist/lsp/RenameProvider.d.ts +5 -0
  45. package/dist/lsp/RenameProvider.js +6 -0
  46. package/dist/lsp/SemanticTokenProvider.d.ts +7 -0
  47. package/dist/lsp/SemanticTokenProvider.js +297 -0
  48. package/dist/lsp/index.d.ts +7 -0
  49. package/dist/lsp/index.js +7 -0
  50. package/dist/model/deployments-index.d.ts +60 -0
  51. package/dist/model/deployments-index.js +181 -0
  52. package/dist/model/fqn-computation.d.ts +3 -0
  53. package/dist/model/fqn-computation.js +72 -0
  54. package/dist/model/fqn-index.d.ts +25 -0
  55. package/dist/model/fqn-index.js +96 -0
  56. package/dist/model/index.d.ts +6 -0
  57. package/dist/model/index.js +6 -0
  58. package/dist/model/model-builder.d.ts +32 -0
  59. package/dist/model/model-builder.js +598 -0
  60. package/dist/model/model-locator.d.ts +23 -0
  61. package/dist/model/model-locator.js +126 -0
  62. package/dist/model/model-parser-where.d.ts +3 -0
  63. package/dist/model/model-parser-where.js +70 -0
  64. package/dist/model/model-parser.d.ts +292 -0
  65. package/dist/model/model-parser.js +72 -0
  66. package/dist/model/parser/Base.d.ts +28 -0
  67. package/dist/model/parser/Base.js +87 -0
  68. package/dist/model/parser/DeploymentModelParser.d.ts +33 -0
  69. package/dist/model/parser/DeploymentModelParser.js +162 -0
  70. package/dist/model/parser/DeploymentViewParser.d.ts +38 -0
  71. package/dist/model/parser/DeploymentViewParser.js +98 -0
  72. package/dist/model/parser/FqnRefParser.d.ts +29 -0
  73. package/dist/model/parser/FqnRefParser.js +108 -0
  74. package/dist/model/parser/GlobalsParser.d.ts +66 -0
  75. package/dist/model/parser/GlobalsParser.js +80 -0
  76. package/dist/model/parser/ModelParser.d.ts +27 -0
  77. package/dist/model/parser/ModelParser.js +122 -0
  78. package/dist/model/parser/PredicatesParser.d.ts +34 -0
  79. package/dist/model/parser/PredicatesParser.js +272 -0
  80. package/dist/model/parser/SpecificationParser.d.ts +27 -0
  81. package/dist/model/parser/SpecificationParser.js +120 -0
  82. package/dist/model/parser/ViewsParser.d.ts +64 -0
  83. package/dist/model/parser/ViewsParser.js +377 -0
  84. package/dist/model-change/ModelChanges.d.ts +15 -0
  85. package/dist/model-change/ModelChanges.js +89 -0
  86. package/dist/model-change/changeElementStyle.d.ts +16 -0
  87. package/dist/model-change/changeElementStyle.js +136 -0
  88. package/dist/model-change/changeViewLayout.d.ts +12 -0
  89. package/dist/model-change/changeViewLayout.js +32 -0
  90. package/dist/model-change/saveManualLayout.d.ts +11 -0
  91. package/dist/model-change/saveManualLayout.js +27 -0
  92. package/dist/module.d.ts +70 -0
  93. package/dist/module.js +162 -0
  94. package/dist/protocol.d.ts +38 -23
  95. package/dist/protocol.js +15 -0
  96. package/dist/references/index.d.ts +3 -0
  97. package/dist/references/index.js +3 -0
  98. package/dist/references/name-provider.d.ts +9 -0
  99. package/dist/references/name-provider.js +33 -0
  100. package/dist/references/scope-computation.d.ts +20 -0
  101. package/dist/references/scope-computation.js +281 -0
  102. package/dist/references/scope-provider.d.ts +16 -0
  103. package/dist/references/scope-provider.js +165 -0
  104. package/dist/shared/NodeKindProvider.d.ts +15 -0
  105. package/dist/shared/NodeKindProvider.js +108 -0
  106. package/dist/shared/WorkspaceManager.d.ts +18 -0
  107. package/dist/shared/WorkspaceManager.js +36 -0
  108. package/dist/shared/WorkspaceSymbolProvider.d.ts +3 -0
  109. package/dist/shared/WorkspaceSymbolProvider.js +3 -0
  110. package/dist/shared/index.d.ts +3 -0
  111. package/dist/shared/index.js +3 -0
  112. package/dist/test/index.d.ts +1 -0
  113. package/dist/test/index.js +1 -0
  114. package/dist/test/setup.d.ts +1 -0
  115. package/dist/test/setup.js +7 -0
  116. package/dist/test/testServices.d.ts +22 -0
  117. package/dist/test/testServices.js +119 -0
  118. package/dist/utils/elementRef.d.ts +11 -0
  119. package/dist/utils/elementRef.js +15 -0
  120. package/dist/utils/fqnRef.d.ts +8 -0
  121. package/dist/utils/fqnRef.js +46 -0
  122. package/dist/utils/index.d.ts +1 -0
  123. package/dist/utils/index.js +1 -0
  124. package/dist/utils/printDocs.d.ts +2 -0
  125. package/dist/utils/printDocs.js +1 -0
  126. package/dist/utils/stringHash.d.ts +1 -0
  127. package/dist/utils/stringHash.js +5 -0
  128. package/dist/validation/_shared.d.ts +3 -0
  129. package/dist/validation/_shared.js +22 -0
  130. package/dist/validation/deployment-checks.d.ts +6 -0
  131. package/dist/validation/deployment-checks.js +114 -0
  132. package/dist/validation/dynamic-view-rule.d.ts +4 -0
  133. package/dist/validation/dynamic-view-rule.js +17 -0
  134. package/dist/validation/dynamic-view-step.d.ts +4 -0
  135. package/dist/validation/dynamic-view-step.js +29 -0
  136. package/dist/validation/element.d.ts +4 -0
  137. package/dist/validation/element.js +49 -0
  138. package/dist/validation/index.d.ts +15 -0
  139. package/dist/validation/index.js +152 -0
  140. package/dist/validation/property-checks.d.ts +6 -0
  141. package/dist/validation/property-checks.js +39 -0
  142. package/dist/validation/relation.d.ts +5 -0
  143. package/dist/validation/relation.js +56 -0
  144. package/dist/validation/specification.d.ts +11 -0
  145. package/dist/validation/specification.js +136 -0
  146. package/dist/validation/view-predicates/element-with.d.ts +4 -0
  147. package/dist/validation/view-predicates/element-with.js +31 -0
  148. package/dist/validation/view-predicates/expanded-element.d.ts +4 -0
  149. package/dist/validation/view-predicates/expanded-element.js +12 -0
  150. package/dist/validation/view-predicates/expression-v2.d.ts +5 -0
  151. package/dist/validation/view-predicates/expression-v2.js +83 -0
  152. package/dist/validation/view-predicates/incoming.d.ts +4 -0
  153. package/dist/validation/view-predicates/incoming.js +16 -0
  154. package/dist/validation/view-predicates/index.d.ts +6 -0
  155. package/dist/validation/view-predicates/index.js +6 -0
  156. package/dist/validation/view-predicates/outgoing.d.ts +4 -0
  157. package/dist/validation/view-predicates/outgoing.js +16 -0
  158. package/dist/validation/view-predicates/relation-with.d.ts +4 -0
  159. package/dist/validation/view-predicates/relation-with.js +13 -0
  160. package/dist/validation/view.d.ts +4 -0
  161. package/dist/validation/view.js +23 -0
  162. package/dist/view-utils/assignNavigateTo.d.ts +2 -0
  163. package/dist/view-utils/assignNavigateTo.js +25 -0
  164. package/dist/view-utils/index.d.ts +2 -0
  165. package/dist/view-utils/index.js +2 -0
  166. package/dist/view-utils/manual-layout.d.ts +7 -0
  167. package/dist/view-utils/manual-layout.js +99 -0
  168. package/dist/view-utils/resolve-relative-paths.d.ts +2 -0
  169. package/dist/view-utils/resolve-relative-paths.js +78 -0
  170. package/dist/views/configurable-layouter.d.ts +7 -0
  171. package/dist/views/configurable-layouter.js +55 -0
  172. package/dist/views/index.d.ts +1 -0
  173. package/dist/views/index.js +1 -0
  174. package/dist/views/likec4-views.d.ts +26 -0
  175. package/dist/views/likec4-views.js +113 -0
  176. package/package.json +40 -54
  177. package/src/LikeC4FileSystem.ts +22 -21
  178. package/src/Rpc.ts +13 -7
  179. package/src/ast.ts +44 -133
  180. package/src/browser.ts +11 -11
  181. package/src/documentation/documentation-provider.ts +52 -0
  182. package/src/documentation/index.ts +1 -0
  183. package/src/generated/ast.ts +177 -177
  184. package/src/generated/grammar.ts +1 -1
  185. package/src/index.ts +13 -9
  186. package/src/like-c4.langium +37 -34
  187. package/src/logger.ts +34 -55
  188. package/src/lsp/CompletionProvider.ts +4 -4
  189. package/src/lsp/DocumentSymbolProvider.ts +110 -28
  190. package/src/lsp/HoverProvider.ts +5 -3
  191. package/src/lsp/SemanticTokenProvider.ts +2 -2
  192. package/src/model/deployments-index.ts +18 -14
  193. package/src/model/fqn-computation.ts +8 -8
  194. package/src/model/model-builder.ts +62 -60
  195. package/src/model/model-parser.ts +62 -1574
  196. package/src/model/parser/Base.ts +107 -0
  197. package/src/model/parser/DeploymentModelParser.ts +192 -0
  198. package/src/model/parser/DeploymentViewParser.ts +116 -0
  199. package/src/model/parser/FqnRefParser.ts +118 -0
  200. package/src/model/parser/GlobalsParser.ts +96 -0
  201. package/src/model/parser/ModelParser.ts +141 -0
  202. package/src/model/parser/PredicatesParser.ts +291 -0
  203. package/src/model/parser/SpecificationParser.ts +133 -0
  204. package/src/model/parser/ViewsParser.ts +428 -0
  205. package/src/module.ts +71 -25
  206. package/src/protocol.ts +29 -4
  207. package/src/references/scope-computation.ts +35 -35
  208. package/src/references/scope-provider.ts +13 -7
  209. package/src/utils/{deploymentRef.ts → fqnRef.ts} +27 -2
  210. package/src/validation/_shared.ts +0 -1
  211. package/src/validation/deployment-checks.ts +49 -62
  212. package/src/validation/dynamic-view-rule.ts +5 -4
  213. package/src/validation/dynamic-view-step.ts +23 -26
  214. package/src/validation/index.ts +100 -9
  215. package/src/validation/property-checks.ts +11 -10
  216. package/src/validation/specification.ts +38 -38
  217. package/src/validation/view-predicates/element-with.ts +6 -5
  218. package/src/validation/view-predicates/expanded-element.ts +6 -5
  219. package/src/validation/view-predicates/expression-v2.ts +101 -0
  220. package/src/validation/view-predicates/incoming.ts +6 -5
  221. package/src/validation/view-predicates/index.ts +1 -1
  222. package/src/validation/view-predicates/outgoing.ts +6 -5
  223. package/src/validation/view-predicates/relation-with.ts +6 -5
  224. package/src/validation/view.ts +5 -5
  225. package/src/view-utils/assignNavigateTo.ts +1 -1
  226. package/src/view-utils/manual-layout.ts +25 -0
  227. package/src/views/configurable-layouter.ts +65 -0
  228. package/src/views/index.ts +1 -0
  229. package/src/views/likec4-views.ts +139 -0
  230. package/dist/browser.cjs +0 -25
  231. package/dist/browser.d.cts +0 -23
  232. package/dist/browser.d.mts +0 -23
  233. package/dist/browser.mjs +0 -20
  234. package/dist/index.cjs +0 -53
  235. package/dist/index.d.cts +0 -34
  236. package/dist/index.d.mts +0 -34
  237. package/dist/index.mjs +0 -46
  238. package/dist/likec4lib.cjs +0 -1546
  239. package/dist/likec4lib.d.cts +0 -6
  240. package/dist/likec4lib.d.mts +0 -6
  241. package/dist/protocol.cjs +0 -25
  242. package/dist/protocol.d.cts +0 -48
  243. package/dist/protocol.d.mts +0 -48
  244. package/dist/protocol.mjs +0 -17
  245. package/dist/shared/language-server.CO_nmHiL.cjs +0 -7689
  246. package/dist/shared/language-server.Da6ey08o.d.cts +0 -1619
  247. package/dist/shared/language-server.De7S3e5Z.d.ts +0 -1619
  248. package/dist/shared/language-server.Dj4iDjtB.d.mts +0 -1619
  249. package/dist/shared/language-server.oO_9JoAG.mjs +0 -7666
  250. package/src/validation/view-predicates/deployments.ts +0 -56
@@ -1,7 +1,13 @@
1
+ import type * as c4 from '@likec4/core'
1
2
  import { isAutoLayoutDirection, type ViewManualLayout } from '@likec4/core'
2
3
  import { decode, encode } from '@msgpack/msgpack'
3
4
  import { fromBase64, toBase64 } from '@smithy/util-base64'
5
+ import { AstUtils, CstUtils } from 'langium'
4
6
  import { mapValues } from 'remeda'
7
+ import type { ast } from '../ast'
8
+ import { logger } from '../logger'
9
+
10
+ const { getDocument } = AstUtils
5
11
 
6
12
  function pack({
7
13
  nodes,
@@ -89,3 +95,22 @@ export function deserializeFromComment(comment: string): ViewManualLayout {
89
95
  const decodedb64 = fromBase64(b64)
90
96
  return unpack(decode(decodedb64) as any) as ViewManualLayout
91
97
  }
98
+
99
+ export function parseViewManualLayout(node: ast.LikeC4View): c4.ViewManualLayout | undefined {
100
+ const commentNode = CstUtils.findCommentNode(node.$cstNode, ['BLOCK_COMMENT'])
101
+ if (!commentNode || !hasManualLayout(commentNode.text)) {
102
+ return undefined
103
+ }
104
+ try {
105
+ return deserializeFromComment(commentNode.text)
106
+ } catch (e) {
107
+ const doc = getDocument(node)
108
+ logger.warn(e)
109
+ logger.warn(
110
+ `Ignoring manual layout of "${node.name ?? 'unnamed'}" at ${doc.uri.fsPath}:${
111
+ 1 + (commentNode.range.start.line || 0)
112
+ }`
113
+ )
114
+ return undefined
115
+ }
116
+ }
@@ -0,0 +1,65 @@
1
+ import { GraphvizLayouter, GraphvizWasmAdapter } from '@likec4/layouts'
2
+ import { GraphvizBinaryAdapter } from '@likec4/layouts/graphviz/binary'
3
+ import { isEmpty } from 'remeda'
4
+ import which from 'which'
5
+ import { logger } from '../logger'
6
+ import type { LikeC4Services } from '../module'
7
+
8
+ function graphvizBinPath() {
9
+ try {
10
+ return which.sync('dot')
11
+ } catch (error) {
12
+ logger.error('Error checking for native Graphviz:', error)
13
+ return null
14
+ }
15
+ }
16
+
17
+ export const ConfigurableLayouter = {
18
+ likec4: {
19
+ Layouter(services: LikeC4Services): GraphvizLayouter {
20
+ logger.debug('Creating ConfigurableLayouter')
21
+ const wasmAdapter = new GraphvizWasmAdapter()
22
+ const layouter = new GraphvizLayouter(wasmAdapter)
23
+ const langId = services.LanguageMetaData.languageId
24
+ services.shared.workspace.ConfigurationProvider.onConfigurationSectionUpdate((update) => {
25
+ logger.debug('Configuration update', update)
26
+ if (update.section === langId) {
27
+ try {
28
+ const { mode, path } = update.configuration.graphviz ?? {
29
+ mode: 'wasm',
30
+ path: '',
31
+ }
32
+
33
+ if (mode === 'wasm') {
34
+ layouter.changePort(wasmAdapter)
35
+ logger.info('use graphviz wasm')
36
+ return
37
+ }
38
+
39
+ let binaryPath = isEmpty(path) ? graphvizBinPath() : path
40
+
41
+ if (binaryPath === null) {
42
+ layouter.changePort(wasmAdapter)
43
+ logger.warn(`No Graphviz binaries found on PATH, use graphviz wasm`)
44
+ services.shared.lsp.Connection?.window.showWarningMessage(
45
+ 'No Graphviz binaries found on PATH, set path to binaries in settings.',
46
+ )
47
+ return
48
+ }
49
+
50
+ layouter.changePort(new GraphvizBinaryAdapter(binaryPath))
51
+
52
+ logger.info(`use graphviz binary: ${binaryPath}`)
53
+ } catch (error) {
54
+ logger.error('Failed to update configuration', error)
55
+ }
56
+ return
57
+ }
58
+
59
+ logger.warn('Unexpected configuration update', update)
60
+ })
61
+
62
+ return layouter
63
+ },
64
+ },
65
+ }
@@ -0,0 +1 @@
1
+ export { LikeC4Views } from './likec4-views'
@@ -0,0 +1,139 @@
1
+ import type { ComputedView, DiagramView, OverviewGraph, ViewId } from '@likec4/core'
2
+ import { GraphvizLayouter } from '@likec4/layouts'
3
+ import { type Cancellation, type WorkspaceCache } from 'langium'
4
+ import { values } from 'remeda'
5
+ import { logger, logWarnError } from '../logger'
6
+ import type { LikeC4Services } from '../module'
7
+
8
+ export type GraphvizOut = {
9
+ dot: string
10
+ diagram: DiagramView
11
+ }
12
+
13
+ type GraphvizSvgOut = {
14
+ id: ViewId
15
+ dot: string
16
+ svg: string
17
+ }
18
+
19
+ export class LikeC4Views {
20
+ private cache = new WeakMap<ComputedView, GraphvizOut>()
21
+
22
+ private viewsWithReportedErrors = new Set<ViewId>()
23
+
24
+ constructor(private services: LikeC4Services) {
25
+ }
26
+
27
+ private get layouter(): GraphvizLayouter {
28
+ return this.services.likec4.Layouter
29
+ }
30
+
31
+ async computedViews(cancelToken?: Cancellation.CancellationToken): Promise<ComputedView[]> {
32
+ const model = await this.services.likec4.ModelBuilder.buildComputedModel(cancelToken)
33
+ return model ? values(model.views) : []
34
+ }
35
+
36
+ async layoutAllViews(cancelToken?: Cancellation.CancellationToken): Promise<Array<Readonly<GraphvizOut>>> {
37
+ const views = await this.computedViews(cancelToken)
38
+ if (views.length === 0) {
39
+ return []
40
+ }
41
+ const results = [] as GraphvizOut[]
42
+ const tasks = [] as Promise<GraphvizOut>[]
43
+ for (const view of views) {
44
+ this.viewsWithReportedErrors.delete(view.id)
45
+ tasks.push(
46
+ this.layouter.layout(view)
47
+ .then(result => {
48
+ this.cache.set(view, result)
49
+ return result
50
+ })
51
+ .catch(e => {
52
+ this.cache.delete(view)
53
+ logWarnError(e)
54
+ return Promise.reject(e)
55
+ }),
56
+ )
57
+ }
58
+ for (const task of await Promise.allSettled(tasks)) {
59
+ if (task.status === 'fulfilled') {
60
+ results.push(task.value)
61
+ }
62
+ }
63
+ return results
64
+ }
65
+
66
+ async layoutView(viewId: ViewId, cancelToken?: Cancellation.CancellationToken): Promise<GraphvizOut | null> {
67
+ const model = await this.services.likec4.ModelBuilder.buildComputedModel(cancelToken)
68
+ if (!model) {
69
+ return null
70
+ }
71
+ const view = model.views[viewId]
72
+ if (!view) {
73
+ return null
74
+ }
75
+ let cached = this.cache.get(view)
76
+ if (cached) {
77
+ return cached
78
+ }
79
+ try {
80
+ const result = await this.layouter.layout(view)
81
+ this.viewsWithReportedErrors.delete(viewId)
82
+ this.cache.set(view, result)
83
+ return result
84
+ } catch (e) {
85
+ if (!this.viewsWithReportedErrors.has(viewId)) {
86
+ const errMessage = e instanceof Error ? e.message : '' + e
87
+ this.services.shared.lsp.Connection?.window.showErrorMessage(`LikeC4: ${errMessage}`)
88
+ this.viewsWithReportedErrors.add(viewId)
89
+ }
90
+ logger.error(e)
91
+ return Promise.reject(e)
92
+ }
93
+ }
94
+
95
+ async diagrams(): Promise<Array<DiagramView>> {
96
+ const layouted = await this.layoutAllViews()
97
+ return layouted.map(l => l.diagram)
98
+ }
99
+
100
+ async viewsAsGraphvizOut(): Promise<Array<GraphvizSvgOut>> {
101
+ const KEY = 'All-LayoutedViews-DotWithSvg'
102
+ const cache = this.services.WorkspaceCache as WorkspaceCache<string, GraphvizSvgOut[]>
103
+ if (cache.has(KEY)) {
104
+ return await Promise.resolve(cache.get(KEY)!)
105
+ }
106
+ const views = await this.computedViews()
107
+ const tasks = views.map(async view => {
108
+ const { dot, svg } = await this.layouter.svg(view)
109
+ return {
110
+ id: view.id,
111
+ dot,
112
+ svg,
113
+ }
114
+ })
115
+ const succeed = [] as GraphvizSvgOut[]
116
+ const settledResult = await Promise.allSettled(tasks)
117
+ for (const result of settledResult) {
118
+ if (result.status === 'fulfilled') {
119
+ succeed.push(result.value)
120
+ } else {
121
+ logWarnError(result.reason)
122
+ }
123
+ }
124
+ cache.set(KEY, succeed)
125
+ return succeed
126
+ }
127
+
128
+ async overviewGraph(): Promise<OverviewGraph> {
129
+ const KEY = 'OverviewGraph'
130
+ const cache = this.services.WorkspaceCache as WorkspaceCache<string, OverviewGraph>
131
+ if (cache.has(KEY)) {
132
+ return await Promise.resolve(cache.get(KEY)!)
133
+ }
134
+ const views = await this.computedViews()
135
+ const overviewGraph = await this.layouter.layoutOverviewGraph(views)
136
+ cache.set(KEY, overviewGraph)
137
+ return overviewGraph
138
+ }
139
+ }
package/dist/browser.cjs DELETED
@@ -1,25 +0,0 @@
1
- 'use strict';
2
-
3
- const lsp = require('langium/lsp');
4
- const browser = require('vscode-languageserver/browser');
5
- const module$1 = require('./shared/language-server.CO_nmHiL.cjs');
6
-
7
- function startLanguageServer() {
8
- const messageReader = new browser.BrowserMessageReader(self);
9
- const messageWriter = new browser.BrowserMessageWriter(self);
10
- const connection = browser.createConnection(messageReader, messageWriter);
11
- const services = module$1.createLanguageServices({ connection });
12
- lsp.startLanguageServer(services.shared);
13
- return {
14
- ...services,
15
- connection,
16
- messageReader,
17
- messageWriter
18
- };
19
- }
20
-
21
- exports.LikeC4Module = module$1.LikeC4Module;
22
- exports.createCustomLanguageServices = module$1.createCustomLanguageServices;
23
- exports.createLanguageServices = module$1.createLanguageServices;
24
- exports.setLogLevel = module$1.setLogLevel;
25
- exports.startLanguageServer = startLanguageServer;
@@ -1,23 +0,0 @@
1
- import { L as LikeC4SharedServices, a as LikeC4Services } from './shared/language-server.Da6ey08o.cjs';
2
- export { D as DeploymentsIndex, e as DocumentDeploymentsIndex, g as FqnIndex, F as FqnIndexEntry, I as IsValidFn, l as LanguageServicesContext, k as LikeC4AddedServices, h as LikeC4ModelBuilder, i as LikeC4ModelLocator, j as LikeC4ModelParser, d as LikeC4Module, M as ModelParsedListener, f as computeDocumentFqn, c as createCustomLanguageServices, b as createLanguageServices, m as createSharedServices, s as setLogLevel } from './shared/language-server.Da6ey08o.cjs';
3
- import * as vscode_languageserver from 'vscode-languageserver';
4
- import { BrowserMessageReader, BrowserMessageWriter } from 'vscode-languageserver/browser';
5
- import 'langium';
6
- import 'langium/lsp';
7
- import 'vscode-languageserver-types';
8
- import '@likec4/core';
9
- import 'type-fest';
10
- import './protocol.cjs';
11
- import 'vscode-jsonrpc';
12
- import 'vscode-uri';
13
- import '@likec4/log';
14
-
15
- declare function startLanguageServer(): {
16
- connection: vscode_languageserver.Connection;
17
- messageReader: BrowserMessageReader;
18
- messageWriter: BrowserMessageWriter;
19
- shared: LikeC4SharedServices;
20
- likec4: LikeC4Services;
21
- };
22
-
23
- export { LikeC4Services, LikeC4SharedServices, startLanguageServer };
@@ -1,23 +0,0 @@
1
- import { L as LikeC4SharedServices, a as LikeC4Services } from './shared/language-server.Dj4iDjtB.mjs';
2
- export { D as DeploymentsIndex, e as DocumentDeploymentsIndex, g as FqnIndex, F as FqnIndexEntry, I as IsValidFn, l as LanguageServicesContext, k as LikeC4AddedServices, h as LikeC4ModelBuilder, i as LikeC4ModelLocator, j as LikeC4ModelParser, d as LikeC4Module, M as ModelParsedListener, f as computeDocumentFqn, c as createCustomLanguageServices, b as createLanguageServices, m as createSharedServices, s as setLogLevel } from './shared/language-server.Dj4iDjtB.mjs';
3
- import * as vscode_languageserver from 'vscode-languageserver';
4
- import { BrowserMessageReader, BrowserMessageWriter } from 'vscode-languageserver/browser';
5
- import 'langium';
6
- import 'langium/lsp';
7
- import 'vscode-languageserver-types';
8
- import '@likec4/core';
9
- import 'type-fest';
10
- import './protocol.mjs';
11
- import 'vscode-jsonrpc';
12
- import 'vscode-uri';
13
- import '@likec4/log';
14
-
15
- declare function startLanguageServer(): {
16
- connection: vscode_languageserver.Connection;
17
- messageReader: BrowserMessageReader;
18
- messageWriter: BrowserMessageWriter;
19
- shared: LikeC4SharedServices;
20
- likec4: LikeC4Services;
21
- };
22
-
23
- export { LikeC4Services, LikeC4SharedServices, startLanguageServer };
package/dist/browser.mjs DELETED
@@ -1,20 +0,0 @@
1
- import { startLanguageServer as startLanguageServer$1 } from 'langium/lsp';
2
- import { BrowserMessageReader, BrowserMessageWriter, createConnection } from 'vscode-languageserver/browser';
3
- import { c as createLanguageServices } from './shared/language-server.oO_9JoAG.mjs';
4
- export { L as LikeC4Module, a as createCustomLanguageServices, s as setLogLevel } from './shared/language-server.oO_9JoAG.mjs';
5
-
6
- function startLanguageServer() {
7
- const messageReader = new BrowserMessageReader(self);
8
- const messageWriter = new BrowserMessageWriter(self);
9
- const connection = createConnection(messageReader, messageWriter);
10
- const services = createLanguageServices({ connection });
11
- startLanguageServer$1(services.shared);
12
- return {
13
- ...services,
14
- connection,
15
- messageReader,
16
- messageWriter
17
- };
18
- }
19
-
20
- export { createLanguageServices, startLanguageServer };
package/dist/index.cjs DELETED
@@ -1,53 +0,0 @@
1
- 'use strict';
2
-
3
- const lsp = require('langium/lsp');
4
- const node$1 = require('vscode-languageserver/node');
5
- const langium = require('langium');
6
- const node = require('langium/node');
7
- const node_fs = require('node:fs');
8
- const promises = require('node:fs/promises');
9
- const node_path = require('node:path');
10
- const module$1 = require('./shared/language-server.CO_nmHiL.cjs');
11
-
12
- const LikeC4FileSystem = {
13
- fileSystemProvider: () => new SymLinkTraversingFileSystemProvider()
14
- };
15
- class SymLinkTraversingFileSystemProvider extends node.NodeFileSystemProvider {
16
- async readDirectory(folderPath) {
17
- const dirents = await promises.readdir(folderPath.fsPath, { withFileTypes: true });
18
- return dirents.map((dirent) => this.followUri(langium.UriUtils.joinPath(folderPath, dirent.name)));
19
- }
20
- followUri(uri) {
21
- const directoryPath = node_path.dirname(uri.fsPath);
22
- const stat = node_fs.lstatSync(uri.fsPath);
23
- if (stat.isSymbolicLink()) {
24
- const resolved_link = node_fs.readlinkSync(uri.fsPath);
25
- const linked_path = node_path.resolve(directoryPath, resolved_link);
26
- return this.followUri(langium.URI.file(linked_path));
27
- } else {
28
- return {
29
- isFile: stat.isFile(),
30
- isDirectory: stat.isDirectory(),
31
- uri
32
- };
33
- }
34
- }
35
- }
36
-
37
- function startLanguageServer() {
38
- const connection = node$1.createConnection(node$1.ProposedFeatures.all);
39
- const services = module$1.createLanguageServices({ connection, ...LikeC4FileSystem });
40
- lsp.startLanguageServer(services.shared);
41
- return {
42
- ...services,
43
- connection
44
- };
45
- }
46
-
47
- exports.LikeC4Module = module$1.LikeC4Module;
48
- exports.createCustomLanguageServices = module$1.createCustomLanguageServices;
49
- exports.createLanguageServices = module$1.createLanguageServices;
50
- exports.lspLogger = module$1.logger;
51
- exports.setLogLevel = module$1.setLogLevel;
52
- exports.LikeC4FileSystem = LikeC4FileSystem;
53
- exports.startLanguageServer = startLanguageServer;
package/dist/index.d.cts DELETED
@@ -1,34 +0,0 @@
1
- import { L as LikeC4SharedServices, a as LikeC4Services } from './shared/language-server.Da6ey08o.cjs';
2
- export { D as DeploymentsIndex, e as DocumentDeploymentsIndex, g as FqnIndex, F as FqnIndexEntry, I as IsValidFn, l as LanguageServicesContext, k as LikeC4AddedServices, h as LikeC4ModelBuilder, i as LikeC4ModelLocator, j as LikeC4ModelParser, d as LikeC4Module, M as ModelParsedListener, f as computeDocumentFqn, c as createCustomLanguageServices, b as createLanguageServices, m as createSharedServices, n as lspLogger, s as setLogLevel } from './shared/language-server.Da6ey08o.cjs';
3
- import * as vscode_languageserver_lib_common_inlineCompletion_proposed from 'vscode-languageserver/lib/common/inlineCompletion.proposed';
4
- import * as vscode_languageserver from 'vscode-languageserver';
5
- import { URI, FileSystemNode } from 'langium';
6
- import { NodeFileSystemProvider } from 'langium/node';
7
- import 'langium/lsp';
8
- import 'vscode-languageserver-types';
9
- import '@likec4/core';
10
- import 'type-fest';
11
- import './protocol.cjs';
12
- import 'vscode-jsonrpc';
13
- import 'vscode-uri';
14
- import '@likec4/log';
15
-
16
- declare const LikeC4FileSystem: {
17
- fileSystemProvider: () => SymLinkTraversingFileSystemProvider;
18
- };
19
- /**
20
- * A file system provider that follows symbolic links.
21
- * @see https://github.com/likec4/likec4/pull/1213
22
- */
23
- declare class SymLinkTraversingFileSystemProvider extends NodeFileSystemProvider {
24
- readDirectory(folderPath: URI): Promise<FileSystemNode[]>;
25
- followUri(uri: URI): FileSystemNode;
26
- }
27
-
28
- declare function startLanguageServer(): {
29
- connection: vscode_languageserver._Connection<vscode_languageserver._, vscode_languageserver._, vscode_languageserver._, vscode_languageserver._, vscode_languageserver._, vscode_languageserver._, vscode_languageserver_lib_common_inlineCompletion_proposed.InlineCompletionFeatureShape, vscode_languageserver._>;
30
- shared: LikeC4SharedServices;
31
- likec4: LikeC4Services;
32
- };
33
-
34
- export { LikeC4FileSystem, LikeC4Services, LikeC4SharedServices, startLanguageServer };
package/dist/index.d.mts DELETED
@@ -1,34 +0,0 @@
1
- import { L as LikeC4SharedServices, a as LikeC4Services } from './shared/language-server.Dj4iDjtB.mjs';
2
- export { D as DeploymentsIndex, e as DocumentDeploymentsIndex, g as FqnIndex, F as FqnIndexEntry, I as IsValidFn, l as LanguageServicesContext, k as LikeC4AddedServices, h as LikeC4ModelBuilder, i as LikeC4ModelLocator, j as LikeC4ModelParser, d as LikeC4Module, M as ModelParsedListener, f as computeDocumentFqn, c as createCustomLanguageServices, b as createLanguageServices, m as createSharedServices, n as lspLogger, s as setLogLevel } from './shared/language-server.Dj4iDjtB.mjs';
3
- import * as vscode_languageserver_lib_common_inlineCompletion_proposed from 'vscode-languageserver/lib/common/inlineCompletion.proposed';
4
- import * as vscode_languageserver from 'vscode-languageserver';
5
- import { URI, FileSystemNode } from 'langium';
6
- import { NodeFileSystemProvider } from 'langium/node';
7
- import 'langium/lsp';
8
- import 'vscode-languageserver-types';
9
- import '@likec4/core';
10
- import 'type-fest';
11
- import './protocol.mjs';
12
- import 'vscode-jsonrpc';
13
- import 'vscode-uri';
14
- import '@likec4/log';
15
-
16
- declare const LikeC4FileSystem: {
17
- fileSystemProvider: () => SymLinkTraversingFileSystemProvider;
18
- };
19
- /**
20
- * A file system provider that follows symbolic links.
21
- * @see https://github.com/likec4/likec4/pull/1213
22
- */
23
- declare class SymLinkTraversingFileSystemProvider extends NodeFileSystemProvider {
24
- readDirectory(folderPath: URI): Promise<FileSystemNode[]>;
25
- followUri(uri: URI): FileSystemNode;
26
- }
27
-
28
- declare function startLanguageServer(): {
29
- connection: vscode_languageserver._Connection<vscode_languageserver._, vscode_languageserver._, vscode_languageserver._, vscode_languageserver._, vscode_languageserver._, vscode_languageserver._, vscode_languageserver_lib_common_inlineCompletion_proposed.InlineCompletionFeatureShape, vscode_languageserver._>;
30
- shared: LikeC4SharedServices;
31
- likec4: LikeC4Services;
32
- };
33
-
34
- export { LikeC4FileSystem, LikeC4Services, LikeC4SharedServices, startLanguageServer };
package/dist/index.mjs DELETED
@@ -1,46 +0,0 @@
1
- import { startLanguageServer as startLanguageServer$1 } from 'langium/lsp';
2
- import { createConnection, ProposedFeatures } from 'vscode-languageserver/node';
3
- import { UriUtils, URI } from 'langium';
4
- import { NodeFileSystemProvider } from 'langium/node';
5
- import { lstatSync, readlinkSync } from 'node:fs';
6
- import { readdir } from 'node:fs/promises';
7
- import { dirname, resolve } from 'node:path';
8
- import { c as createLanguageServices } from './shared/language-server.oO_9JoAG.mjs';
9
- export { L as LikeC4Module, a as createCustomLanguageServices, l as lspLogger, s as setLogLevel } from './shared/language-server.oO_9JoAG.mjs';
10
-
11
- const LikeC4FileSystem = {
12
- fileSystemProvider: () => new SymLinkTraversingFileSystemProvider()
13
- };
14
- class SymLinkTraversingFileSystemProvider extends NodeFileSystemProvider {
15
- async readDirectory(folderPath) {
16
- const dirents = await readdir(folderPath.fsPath, { withFileTypes: true });
17
- return dirents.map((dirent) => this.followUri(UriUtils.joinPath(folderPath, dirent.name)));
18
- }
19
- followUri(uri) {
20
- const directoryPath = dirname(uri.fsPath);
21
- const stat = lstatSync(uri.fsPath);
22
- if (stat.isSymbolicLink()) {
23
- const resolved_link = readlinkSync(uri.fsPath);
24
- const linked_path = resolve(directoryPath, resolved_link);
25
- return this.followUri(URI.file(linked_path));
26
- } else {
27
- return {
28
- isFile: stat.isFile(),
29
- isDirectory: stat.isDirectory(),
30
- uri
31
- };
32
- }
33
- }
34
- }
35
-
36
- function startLanguageServer() {
37
- const connection = createConnection(ProposedFeatures.all);
38
- const services = createLanguageServices({ connection, ...LikeC4FileSystem });
39
- startLanguageServer$1(services.shared);
40
- return {
41
- ...services,
42
- connection
43
- };
44
- }
45
-
46
- export { LikeC4FileSystem, createLanguageServices, startLanguageServer };