@likec4/language-server 1.10.1 → 1.11.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 (43) hide show
  1. package/dist/browser.cjs +5 -1
  2. package/dist/browser.d.cts +7 -5
  3. package/dist/browser.d.mts +7 -5
  4. package/dist/browser.d.ts +7 -5
  5. package/dist/browser.mjs +3 -2
  6. package/dist/index.cjs +15 -2
  7. package/dist/index.d.cts +14 -11
  8. package/dist/index.d.mts +14 -11
  9. package/dist/index.d.ts +14 -11
  10. package/dist/index.mjs +17 -1
  11. package/dist/likec4lib.cjs +949 -952
  12. package/dist/likec4lib.d.cts +1 -1
  13. package/dist/likec4lib.d.mts +1 -1
  14. package/dist/likec4lib.d.ts +1 -1
  15. package/dist/likec4lib.mjs +949 -952
  16. package/dist/protocol.cjs +1 -1
  17. package/dist/protocol.d.cts +3 -1
  18. package/dist/protocol.d.mts +3 -1
  19. package/dist/protocol.d.ts +3 -1
  20. package/dist/protocol.mjs +1 -1
  21. package/dist/shared/{language-server.Bfc-5M8A.cjs → language-server.C8lV6gDw.cjs} +116 -115
  22. package/dist/shared/{language-server.BFBeyvV8.mjs → language-server.CCOotWDz.mjs} +116 -116
  23. package/dist/shared/{language-server.CnVuAxDh.d.ts → language-server.Cyw-bCtc.d.ts} +143 -136
  24. package/dist/shared/{language-server.DEK39RmI.d.mts → language-server.DGjTE7xL.d.mts} +143 -136
  25. package/dist/shared/{language-server.BGy3FJPJ.d.cts → language-server.Ol32Kygo.d.cts} +143 -136
  26. package/package.json +30 -26
  27. package/src/Rpc.ts +10 -6
  28. package/src/ast.ts +1 -1
  29. package/src/browser.ts +5 -0
  30. package/src/generated-lib/icons.ts +949 -952
  31. package/src/index.ts +23 -2
  32. package/src/likec4lib.ts +1 -1
  33. package/src/logger.ts +16 -16
  34. package/src/model/model-builder.ts +12 -12
  35. package/src/model-graph/utils/applyCustomRelationProperties.ts +1 -1
  36. package/src/protocol.ts +5 -1
  37. package/src/shared/WorkspaceManager.ts +1 -1
  38. package/dist/node.cjs +0 -18
  39. package/dist/node.d.cts +0 -19
  40. package/dist/node.d.mts +0 -19
  41. package/dist/node.d.ts +0 -19
  42. package/dist/node.mjs +0 -16
  43. package/src/node.ts +0 -20
package/src/index.ts CHANGED
@@ -1,4 +1,25 @@
1
- export { setLogLevel } from './logger'
1
+ import { startLanguageServer as startLanguim } from 'langium/lsp'
2
+ import { NodeFileSystem } from 'langium/node'
3
+ import { createConnection, ProposedFeatures } from 'vscode-languageserver/node'
4
+ import { createLanguageServices } from './module'
5
+
6
+ export { logger as lspLogger, setLogLevel } from './logger'
2
7
  export type * from './model'
3
- export { createCustomLanguageServices, createLanguageServices, LikeC4Module } from './module'
4
8
  export type * from './module'
9
+ export { createCustomLanguageServices, createLanguageServices, LikeC4Module } from './module'
10
+
11
+ export function startLanguageServer() {
12
+ /* browser specific setup code */
13
+ const connection = createConnection(ProposedFeatures.all)
14
+
15
+ // Inject the shared services and language-specific services
16
+ const services = createLanguageServices({ connection, ...NodeFileSystem })
17
+
18
+ // Start the language server with the shared services
19
+ startLanguim(services.shared)
20
+
21
+ return {
22
+ ...services,
23
+ connection
24
+ }
25
+ }
package/src/likec4lib.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { LibIcons } from './generated-lib/icons'
2
2
 
3
3
  export const Scheme = 'likec4builtin'
4
- export const Uri = `${Scheme}:///likec4/lib/icons.c4`
4
+ export const Uri = `${Scheme}:///likec4/lib/icons.c4` as const
5
5
 
6
6
  export { LibIcons as Content }
package/src/logger.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
2
  import { type ConsolaReporter, LogLevels, rootLogger as root } from '@likec4/log'
3
+ import { isError } from 'remeda'
3
4
  import type { Connection } from 'vscode-languageserver'
4
5
 
5
6
  export const logger = root.withTag('lsp')
@@ -28,13 +29,13 @@ export function logErrorToTelemetry(connection: Connection): void {
28
29
  }
29
30
  const tag = logObj.tag || ''
30
31
  const parts = logObj.args.map((arg) => {
31
- if (arg && typeof arg.stack === 'string') {
32
- return arg.message + '\n' + arg.stack
32
+ if (isError(arg)) {
33
+ return arg.stack ?? arg.message
33
34
  }
34
35
  if (typeof arg === 'string') {
35
36
  return arg
36
37
  }
37
- return String(arg)
38
+ return '' + arg
38
39
  })
39
40
  if (tag) {
40
41
  parts.unshift(`[${tag}]`)
@@ -52,33 +53,29 @@ export function logToLspConnection(connection: Connection): void {
52
53
  log: ({ level, ...logObj }, ctx) => {
53
54
  const tag = logObj.tag || ''
54
55
  const parts = logObj.args.map((arg) => {
55
- if (arg && typeof arg.stack === 'string') {
56
- return arg.message + '\n' + arg.stack
56
+ if (isError(arg)) {
57
+ return arg.stack ?? arg.message
57
58
  }
58
59
  if (typeof arg === 'string') {
59
60
  return arg
60
61
  }
61
- return String(arg)
62
+ return '' + arg
62
63
  })
63
64
  if (tag) {
64
65
  parts.unshift(`[${tag}]`)
65
66
  }
66
67
  const message = parts.join(' ')
67
68
  switch (true) {
68
- case level >= LogLevels.trace: {
69
- connection.tracer.log(message)
70
- break
71
- }
72
69
  case level >= LogLevels.debug: {
73
70
  connection.console.debug(message)
74
71
  break
75
72
  }
76
- case level >= LogLevels.info: {
77
- connection.console.info(message)
78
- break
79
- }
73
+ // case level >= LogLevels.info: {
74
+ // connection.console.info(message)
75
+ // break
76
+ // }
80
77
  case level >= LogLevels.log: {
81
- connection.console.log(message)
78
+ connection.console.info(message)
82
79
  break
83
80
  }
84
81
  case level >= LogLevels.warn: {
@@ -89,9 +86,12 @@ export function logToLspConnection(connection: Connection): void {
89
86
  connection.console.error(message)
90
87
  break
91
88
  }
89
+ default: {
90
+ connection.console.log(message)
91
+ }
92
92
  }
93
93
  }
94
94
  }
95
- root.addReporter(reporter)
95
+ root.setReporters([reporter])
96
96
  logger.setReporters(root.options.reporters)
97
97
  }
@@ -315,7 +315,7 @@ export class LikeC4ModelBuilder {
315
315
  async (docs, _cancelToken) => {
316
316
  let parsed = [] as URI[]
317
317
  try {
318
- logger.debug(`[ModelBuilder] onValidated (${docs.length} docs)\n${printDocs(docs)}`)
318
+ logger.debug(`[ModelBuilder] onValidated (${docs.length} docs)`)
319
319
  for (const doc of parser.parse(docs)) {
320
320
  parsed.push(doc.uri)
321
321
  }
@@ -344,7 +344,7 @@ export class LikeC4ModelBuilder {
344
344
  logger.debug('[ModelBuilder] No documents to build model from')
345
345
  return null
346
346
  }
347
- logger.debug(`[ModelBuilder] buildModel from ${docs.length} docs:\n${printDocs(docs)}`)
347
+ logger.debug(`[ModelBuilder] onValidated (${docs.length} docs)`)
348
348
  return buildModel(this.services, docs)
349
349
  })
350
350
  }
@@ -408,14 +408,14 @@ export class LikeC4ModelBuilder {
408
408
  if (cache.has(CACHE_KEY_COMPUTED_MODEL)) {
409
409
  return cache.get(CACHE_KEY_COMPUTED_MODEL)!
410
410
  }
411
- const model = await this.buildModel(cancelToken)
412
- if (!model) {
413
- return null
414
- }
415
411
  return await this.services.shared.workspace.WorkspaceLock.read(async () => {
416
412
  if (cancelToken) {
417
413
  await interruptAndCheck(cancelToken)
418
414
  }
415
+ const model = this.unsafeSyncBuildModel()
416
+ if (!model) {
417
+ return null
418
+ }
419
419
  return this.unsafeSyncBuildComputedModel(model)
420
420
  })
421
421
  }
@@ -429,17 +429,17 @@ export class LikeC4ModelBuilder {
429
429
  if (cache.has(cacheKey)) {
430
430
  return cache.get(cacheKey)!
431
431
  }
432
- const model = await this.buildModel(cancelToken)
433
- const view = model?.views[viewId]
434
- if (!view) {
435
- logger.warn(`[ModelBuilder] Cannot find view ${viewId}`)
436
- return null
437
- }
438
432
  return await this.services.shared.workspace.WorkspaceLock.read(async () => {
439
433
  if (cancelToken) {
440
434
  await interruptAndCheck(cancelToken)
441
435
  }
442
436
  return cache.get(cacheKey, () => {
437
+ const model = this.unsafeSyncBuildModel()
438
+ const view = model?.views[viewId]
439
+ if (!view) {
440
+ logger.warn(`[ModelBuilder] Cannot find view ${viewId}`)
441
+ return null
442
+ }
443
443
  const index = new LikeC4ModelGraph(model)
444
444
  const result = isElementView(view) ? computeView(view, index) : computeDynamicView(view, index)
445
445
  if (!result.isSuccess) {
@@ -1,6 +1,6 @@
1
1
  import type { ComputedEdge, ComputedNode, Element, ViewRule } from '@likec4/core'
2
2
  import { Expr, nonexhaustive } from '@likec4/core'
3
- import { isEmpty, isNullish, omitBy } from 'remeda'
3
+ import { isNullish, omitBy } from 'remeda'
4
4
  import { elementExprToPredicate } from './elementExpressionToPredicate'
5
5
 
6
6
  function relationExpressionToPredicates(
package/src/protocol.ts CHANGED
@@ -21,7 +21,11 @@ export const fetchModel = new RequestType0<{ model: ParsedLikeC4Model | null },
21
21
  )
22
22
  export type FetchModelRequest = typeof fetchModel
23
23
 
24
- export const fetchComputedModel = new RequestType0<{ model: ComputedLikeC4Model | null }, void>(
24
+ export const fetchComputedModel = new RequestType<
25
+ { cleanCaches?: boolean | undefined },
26
+ { model: ComputedLikeC4Model | null },
27
+ void
28
+ >(
25
29
  'likec4/fetchComputedModel'
26
30
  )
27
31
  export type FetchComputedModelRequest = typeof fetchComputedModel
@@ -23,8 +23,8 @@ export class LikeC4WorkspaceManager extends DefaultWorkspaceManager {
23
23
  folders: WorkspaceFolder[],
24
24
  collector: (document: LangiumDocument) => void
25
25
  ): Promise<void> {
26
- await super.loadAdditionalDocuments(folders, collector)
27
26
  collector(this.documentFactory.fromString(BuiltIn.Content, URI.parse(BuiltIn.Uri)))
27
+ await super.loadAdditionalDocuments(folders, collector)
28
28
  }
29
29
 
30
30
  public workspace() {
package/dist/node.cjs DELETED
@@ -1,18 +0,0 @@
1
- 'use strict';
2
-
3
- const lsp = require('langium/lsp');
4
- const node$1 = require('langium/node');
5
- const node = require('vscode-languageserver/node');
6
- const module$1 = require('./shared/language-server.Bfc-5M8A.cjs');
7
-
8
- function startLanguageServer() {
9
- const connection = node.createConnection(node.ProposedFeatures.all);
10
- const services = module$1.createLanguageServices({ connection, ...node$1.NodeFileSystem });
11
- lsp.startLanguageServer(services.shared);
12
- return {
13
- ...services,
14
- connection
15
- };
16
- }
17
-
18
- exports.startLanguageServer = startLanguageServer;
package/dist/node.d.cts DELETED
@@ -1,19 +0,0 @@
1
- import { i as LikeC4SharedServices, a as LikeC4Services } from './shared/language-server.BGy3FJPJ.cjs';
2
- import * as vscode_languageserver_lib_common_inlineCompletion_proposed from 'vscode-languageserver/lib/common/inlineCompletion.proposed';
3
- import * as vscode_languageserver from 'vscode-languageserver';
4
- import '@likec4/core';
5
- import 'langium';
6
- import 'type-fest';
7
- import 'vscode-languageserver-types';
8
- import 'langium/lsp';
9
- import './protocol.cjs';
10
- import 'vscode-jsonrpc';
11
- import 'vscode-uri';
12
-
13
- declare function startLanguageServer(): {
14
- 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._>;
15
- shared: LikeC4SharedServices;
16
- likec4: LikeC4Services;
17
- };
18
-
19
- export { startLanguageServer };
package/dist/node.d.mts DELETED
@@ -1,19 +0,0 @@
1
- import { i as LikeC4SharedServices, a as LikeC4Services } from './shared/language-server.DEK39RmI.mjs';
2
- import * as vscode_languageserver_lib_common_inlineCompletion_proposed from 'vscode-languageserver/lib/common/inlineCompletion.proposed';
3
- import * as vscode_languageserver from 'vscode-languageserver';
4
- import '@likec4/core';
5
- import 'langium';
6
- import 'type-fest';
7
- import 'vscode-languageserver-types';
8
- import 'langium/lsp';
9
- import './protocol.mjs';
10
- import 'vscode-jsonrpc';
11
- import 'vscode-uri';
12
-
13
- declare function startLanguageServer(): {
14
- 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._>;
15
- shared: LikeC4SharedServices;
16
- likec4: LikeC4Services;
17
- };
18
-
19
- export { startLanguageServer };
package/dist/node.d.ts DELETED
@@ -1,19 +0,0 @@
1
- import { i as LikeC4SharedServices, a as LikeC4Services } from './shared/language-server.CnVuAxDh.js';
2
- import * as vscode_languageserver_lib_common_inlineCompletion_proposed from 'vscode-languageserver/lib/common/inlineCompletion.proposed';
3
- import * as vscode_languageserver from 'vscode-languageserver';
4
- import '@likec4/core';
5
- import 'langium';
6
- import 'type-fest';
7
- import 'vscode-languageserver-types';
8
- import 'langium/lsp';
9
- import './protocol.js';
10
- import 'vscode-jsonrpc';
11
- import 'vscode-uri';
12
-
13
- declare function startLanguageServer(): {
14
- 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._>;
15
- shared: LikeC4SharedServices;
16
- likec4: LikeC4Services;
17
- };
18
-
19
- export { startLanguageServer };
package/dist/node.mjs DELETED
@@ -1,16 +0,0 @@
1
- import { startLanguageServer as startLanguageServer$1 } from 'langium/lsp';
2
- import { NodeFileSystem } from 'langium/node';
3
- import { createConnection, ProposedFeatures } from 'vscode-languageserver/node';
4
- import { a as createLanguageServices } from './shared/language-server.BFBeyvV8.mjs';
5
-
6
- function startLanguageServer() {
7
- const connection = createConnection(ProposedFeatures.all);
8
- const services = createLanguageServices({ connection, ...NodeFileSystem });
9
- startLanguageServer$1(services.shared);
10
- return {
11
- ...services,
12
- connection
13
- };
14
- }
15
-
16
- export { startLanguageServer };
package/src/node.ts DELETED
@@ -1,20 +0,0 @@
1
- import { startLanguageServer as startLanguim } from 'langium/lsp'
2
- import { NodeFileSystem } from 'langium/node'
3
- import { createConnection, ProposedFeatures } from 'vscode-languageserver/node'
4
- import { createLanguageServices } from './module'
5
-
6
- export function startLanguageServer() {
7
- /* browser specific setup code */
8
- const connection = createConnection(ProposedFeatures.all)
9
-
10
- // Inject the shared services and language-specific services
11
- const services = createLanguageServices({ connection, ...NodeFileSystem })
12
-
13
- // Start the language server with the shared services
14
- startLanguim(services.shared)
15
-
16
- return {
17
- ...services,
18
- connection
19
- }
20
- }