@likec4/language-server 1.22.0 → 1.22.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.
package/dist/browser.js CHANGED
@@ -1,7 +1,6 @@
1
1
  import { configureLogger, getConsoleSink } from "@likec4/log";
2
2
  import { startLanguageServer as startLanguim } from "langium/lsp";
3
3
  import { BrowserMessageReader, BrowserMessageWriter, createConnection } from "vscode-languageserver/browser";
4
- import { getLspConnectionSink } from "./logger.js";
5
4
  import { createLanguageServices } from "./module.js";
6
5
  export { logger as lspLogger } from "./logger.js";
7
6
  export { createCustomLanguageServices, createLanguageServices, LikeC4Module } from "./module.js";
@@ -11,13 +10,12 @@ export async function startLanguageServer() {
11
10
  const connection = createConnection(messageReader, messageWriter);
12
11
  await configureLogger({
13
12
  sinks: {
14
- console: getConsoleSink(),
15
- lsp: getLspConnectionSink(connection)
13
+ console: getConsoleSink()
16
14
  },
17
15
  loggers: [
18
16
  {
19
17
  category: "likec4",
20
- sinks: ["console", "lsp"],
18
+ sinks: ["console"],
21
19
  lowestLevel: "debug"
22
20
  }
23
21
  ]
package/dist/bundled.mjs CHANGED
@@ -66,14 +66,14 @@ target:a,stackError:o});return EM({target:u,source:s,parent:t,child:e}),kM(u,s,{
66
66
  `),t.map(n=>`${" ".repeat(e)}${n}`).join(`
67
67
  `)}function qh(t){if(typeof t=="string")return t;if(t instanceof Error){const e=ZR(t);if(e.stack){const n=nS(e.stack);return e.message+`
68
68
  `+Zy(n.slice(1))}return e.message}return HM(t)}function VM(t){const e=Object.values(t.properties).filter(n=>n instanceof Error).map(n=>{const r=ZR(n);return r.stack&&(r.stack=nS(r.stack).join(`
69
- `)),r});return e.length===0?null:e.length===1?e[0]:new AggregateError(e)}function KM(t,e=!1){const n=VM(t.record);if(n){let r=n.message;return n.stack&&(r=r+`
69
+ `)),r});return e.length===0?null:e.length===1?e[0]:new AggregateError(e)}function KM(t,e){const n=VM(t.record);if(n){let r=n.message;return n.stack&&(r=r+`
70
70
  `+Zy(n.stack.split(`
71
- `).slice(1))),e&&(r=`RED: ${QM.red}${r}${JM}`),{...t,message:t.message+`
72
- `+Zy(r)}}return t}const YM={debug:"DEBUG",info:"INFO ",warning:"WARN ",error:"ERROR",fatal:"FATAL"},XM=t=>YM[t],JM="\x1B[0m",QM={red:"\x1B[31m"};function ZM(t){const e=({timestamp:n,level:r,category:i,message:s})=>`${n} ${r} ${i} ${s}`;return xR({timestamp:"time",level:XM,categoryStyle:"bold",categoryColor:"cyan",category:".",...t,format:n=>e(KM(n,!0))})}function rS(t){return CR({formatter:ZM(),...t})}const Br=NO("likec4");function ez(t){return Br.getChild(t)}let tz=!1;async function nz(t){try{tz=
73
- !0;const e=t?.sinks??{};await qO({...t,sinks:{...e,console:e.console??rS()},loggers:[{category:["logtape","meta"],sinks:["console"],lowestLevel:"warning"},...t?.loggers??[{category:"likec4",sinks:["console"],lowestLevel:"debug"}]]})}catch(e){console.error(e)}}var Lo={},Jt={},iS;function ev(){if(iS)return Jt;iS=1,Object.defineProperty(Jt,"__esModule",{value:!0}),Jt.thenable=Jt.typedArray=Jt.stringArray=Jt.array=Jt.func=Jt.error=Jt.number=Jt.string=Jt.boolean=void 0;function t(c){return c===!0||c===
74
- !1}Jt.boolean=t;function e(c){return typeof c=="string"||c instanceof String}Jt.string=e;function n(c){return typeof c=="number"||c instanceof Number}Jt.number=n;function r(c){return c instanceof Error}Jt.error=r;function i(c){return typeof c=="function"}Jt.func=i;function s(c){return Array.isArray(c)}Jt.array=s;function o(c){return s(c)&&c.every(l=>e(l))}Jt.stringArray=o;function a(c,l){return Array.isArray(c)&&c.every(l)}Jt.typedArray=a;function u(c){return c&&i(c.then)}return Jt.thenable=u,Jt}
75
- var gt={},Mo={},zo={},jh={},tv={},qe={},Tn={},sS;function fc(){if(sS)return Tn;sS=1,Object.defineProperty(Tn,"__esModule",{value:!0}),Tn.stringArray=Tn.array=Tn.func=Tn.error=Tn.number=Tn.string=Tn.boolean=void 0;function t(a){return a===!0||a===!1}Tn.boolean=t;function e(a){return typeof a=="string"||a instanceof String}Tn.string=e;function n(a){return typeof a=="number"||a instanceof Number}Tn.number=n;function r(a){return a instanceof Error}Tn.error=r;function i(a){return typeof a=="function"}
76
- Tn.func=i;function s(a){return Array.isArray(a)}Tn.array=s;function o(a){return s(a)&&a.every(u=>e(u))}return Tn.stringArray=o,Tn}var oS;function aS(){if(oS)return qe;oS=1,Object.defineProperty(qe,"__esModule",{value:!0}),qe.Message=qe.NotificationType9=qe.NotificationType8=qe.NotificationType7=qe.NotificationType6=qe.NotificationType5=qe.NotificationType4=qe.NotificationType3=qe.NotificationType2=qe.NotificationType1=qe.NotificationType0=qe.NotificationType=qe.RequestType9=qe.RequestType8=qe.RequestType7=
71
+ `).slice(1))),r=`${QM.red}${r}${JM}`,{...t,message:t.message+`
72
+ `+Zy(r)}}return t}const YM={debug:"DEBUG",info:"INFO ",warning:"WARN ",error:"ERROR",fatal:"FATAL"},XM=t=>YM[t],JM="\x1B[0m",QM={red:"\x1B[31m"};function ZM(t){const e=({timestamp:n,level:r,category:i,message:s})=>`${n} ${r} ${i} ${s}`;return xR({timestamp:"time",level:XM,categoryStyle:"bold",categoryColor:"cyan",category:".",...t,format:n=>e(KM(n))})}function rS(t){return CR({formatter:ZM(),...t})}const Br=NO("likec4");function ez(t){return Br.getChild(t)}let tz=!1;async function nz(t){try{tz=!0;
73
+ const e=t?.sinks??{};await qO({...t,sinks:{...e,console:e.console??rS()},loggers:[{category:["logtape","meta"],sinks:["console"],lowestLevel:"warning"},...t?.loggers??[{category:"likec4",sinks:["console"],lowestLevel:"debug"}]]})}catch(e){console.error(e)}}var Lo={},Jt={},iS;function ev(){if(iS)return Jt;iS=1,Object.defineProperty(Jt,"__esModule",{value:!0}),Jt.thenable=Jt.typedArray=Jt.stringArray=Jt.array=Jt.func=Jt.error=Jt.number=Jt.string=Jt.boolean=void 0;function t(c){return c===!0||c===!1}
74
+ Jt.boolean=t;function e(c){return typeof c=="string"||c instanceof String}Jt.string=e;function n(c){return typeof c=="number"||c instanceof Number}Jt.number=n;function r(c){return c instanceof Error}Jt.error=r;function i(c){return typeof c=="function"}Jt.func=i;function s(c){return Array.isArray(c)}Jt.array=s;function o(c){return s(c)&&c.every(l=>e(l))}Jt.stringArray=o;function a(c,l){return Array.isArray(c)&&c.every(l)}Jt.typedArray=a;function u(c){return c&&i(c.then)}return Jt.thenable=u,Jt}var gt={},
75
+ Mo={},zo={},jh={},tv={},qe={},Tn={},sS;function fc(){if(sS)return Tn;sS=1,Object.defineProperty(Tn,"__esModule",{value:!0}),Tn.stringArray=Tn.array=Tn.func=Tn.error=Tn.number=Tn.string=Tn.boolean=void 0;function t(a){return a===!0||a===!1}Tn.boolean=t;function e(a){return typeof a=="string"||a instanceof String}Tn.string=e;function n(a){return typeof a=="number"||a instanceof Number}Tn.number=n;function r(a){return a instanceof Error}Tn.error=r;function i(a){return typeof a=="function"}Tn.func=i;
76
+ function s(a){return Array.isArray(a)}Tn.array=s;function o(a){return s(a)&&a.every(u=>e(u))}return Tn.stringArray=o,Tn}var oS;function aS(){if(oS)return qe;oS=1,Object.defineProperty(qe,"__esModule",{value:!0}),qe.Message=qe.NotificationType9=qe.NotificationType8=qe.NotificationType7=qe.NotificationType6=qe.NotificationType5=qe.NotificationType4=qe.NotificationType3=qe.NotificationType2=qe.NotificationType1=qe.NotificationType0=qe.NotificationType=qe.RequestType9=qe.RequestType8=qe.RequestType7=
77
77
  qe.RequestType6=qe.RequestType5=qe.RequestType4=qe.RequestType3=qe.RequestType2=qe.RequestType1=qe.RequestType=qe.RequestType0=qe.AbstractMessageSignature=qe.ParameterStructures=qe.ResponseError=qe.ErrorCodes=void 0;const t=fc();var e;(function(_){_.ParseError=-32700,_.InvalidRequest=-32600,_.MethodNotFound=-32601,_.InvalidParams=-32602,_.InternalError=-32603,_.jsonrpcReservedErrorRangeStart=-32099,_.serverErrorStart=-32099,_.MessageWriteError=-32099,_.MessageReadError=-32098,_.PendingResponseRejected=
78
78
  -32097,_.ConnectionInactive=-32096,_.ServerNotInitialized=-32002,_.UnknownErrorCode=-32001,_.jsonrpcReservedErrorRangeEnd=-32e3,_.serverErrorEnd=-32e3})(e||(qe.ErrorCodes=e={}));class n extends Error{constructor(M,K,ee){super(K),this.code=t.number(M)?M:e.UnknownErrorCode,this.data=ee,Object.setPrototypeOf(this,n.prototype)}toJson(){const M={code:this.code,message:this.message};return this.data!==void 0&&(M.data=this.data),M}}qe.ResponseError=n;class r{constructor(M){this.kind=M}static is(M){return M===
79
79
  r.auto||M===r.byName||M===r.byPosition}toString(){return this.kind}}qe.ParameterStructures=r,r.auto=new r("auto"),r.byPosition=new r("byPosition"),r.byName=new r("byName");class i{constructor(M,K){this.method=M,this.numberOfParams=K}get parameterStructures(){return r.auto}}qe.AbstractMessageSignature=i;class s extends i{constructor(M){super(M,0)}}qe.RequestType0=s;class o extends i{constructor(M,K=r.auto){super(M,1),this._parameterStructures=K}get parameterStructures(){return this._parameterStructures}}
@@ -4332,8 +4332,8 @@ PATH,pathExt:y=process.env.PATHEXT,delimiter:v=r})=>{const b=p.match(a)?[""]:[..
4332
4332
  $=[];for(const k of y){const C=d(k,p);for(const R of v){const x=C+R;if(await t(x,{pathExt:b,ignoreErrors:!0})){if(!g.all)return x;$.push(x)}}}if(g.all&&$.length)return $;if(g.nothrow)return null;throw c(p)},h=(p,g={})=>{const{pathEnv:y,pathExt:v,pathExtExe:b}=l(p,g),$=[];for(const k of y){const C=d(k,p);for(const R of v){const x=C+R;if(e(x,{pathExt:b,ignoreErrors:!0})){if(!g.all)return x;$.push(x)}}}if(g.all&&$.length)return $;if(g.nothrow)return null;throw c(p)};return oR=f,f.sync=h,oR}var Nie=Iie();
4333
4333
  const aR=Xs(Nie),uR=x2(Math.max(1,CO.cpus().length));class Oie{dotpath;unflattenpath;constructor(e){this.dotpath=e||aR.sync("dot"),this.unflattenpath=aR.sync("unflatten")}async unflatten(e){return await uR(async()=>{const n=Br.getChild("graphviz-binary");let r;try{const i=await Dy(this.unflattenpath,["-l 1","-c 3"],{timeout:1e4,stdin:{string:e}});r=i.stdout,bn(i.stderr)||n.warn`Command ${i.command} has stderr:\n${i.stderr}`}catch(i){n.error("FAILED GraphvizBinaryAdapter.unflatten",{error:i}),i instanceof
4334
4334
  Ga&&!bn(i.stdout)&&(n.warn`Command: '${i.command}' returned result but also failed (exitcode ${i.exitCode}): "${i.stderr}"`,r=i.stdout)}return r&&(e=r.replaceAll(/\t\[/g," [").replaceAll(/\t/g," ")),e})}async layoutJson(e){return await uR(async()=>{const n=Br.getChild("graphviz-binary");let r;try{const i=await Dy(this.dotpath,["-Tjson","-y"],{timeout:1e4,stdin:{string:e}});r=i.stdout,bn(i.stderr)||n.warn`Command ${i.command} has stderr:\n${i.stderr}`}catch(i){if(n.error("FAILED GraphvizBinary\
4335
- Adapter.layoutJson",{error:i}),n.warn`FAILED DOT:\n${e}`,i instanceof Ga&&!bn(i.stdout))n.warn(`Command: '${i.command}' returned result but also failed (exitcode ${i.exitCode}): "${i.stderr}"`),r=i.stdout;else throw i}return r})}async acyclic(e){return Promise.reject(new Error("Method not implemented."))}async svg(e){return await uR(async()=>{const n=Br.getChild("graphviz-binary");let r;try{const i=await Dy(this.dotpath,["-Tsvg","-y"],{timeout:1e4,stdin:{string:e}});r=i.stdout,bn(i.stderr)||n.warn`Command ${i.
4336
- command} has stderr:\n${i.stderr}`}catch(i){if(n.error("FAILED GraphvizBinaryAdapter.svg",{error:i}),n.warn`FAILED DOT:\n${e}`,i instanceof Ga&&!bn(i.stdout))n.warn`Command: '${i.command}' returned result but also failed (exitcode ${i.exitCode}): "${i.stderr}"`,r=i.stdout;else throw i}return r})}}function Lie(){try{return aR.sync("dot")}catch(t){return tt.error("Error checking for native Graphviz:",{error:t}),null}}const Mie={likec4:{Layouter(t){tt.debug("Creating ConfigurableLayouter");const e=new cc,
4337
- n=new _2(e),r=t.LanguageMetaData.languageId;return t.shared.workspace.ConfigurationProvider.onConfigurationSectionUpdate(i=>{if(tt.debug("Configuration update",{update:i}),i.section===r){try{const{mode:s,path:o}=i.configuration.graphviz??{mode:"wasm",path:""};if(s==="wasm"){n.changePort(e),tt.info("use graphviz wasm");return}let a=bn(o)?Lie():o;if(a===null){n.changePort(e),tt.warn("No Graphviz binaries found on PATH, use graphviz wasm"),t.shared.lsp.Connection?.window.showWarningMessage("No Grap\
4338
- hviz binaries found on PATH, set path to binaries in settings.");return}n.changePort(new Oie(a)),tt.info(`use graphviz binary: ${a}`)}catch(s){tt.error("Failed to update configuration",{error:s})}return}tt.warn("Unexpected configuration update",{update:i})}),n}}};async function zie(){const t=Ax.createConnection(Ax.ProposedFeatures.all);await nz({sinks:{console:rS()},loggers:[{category:["likec4"],sinks:["console"]}]}),tt.info("Starting LikeC4 language server");const e=aie({connection:t,...VH},Mie);
4339
- return KB(e.shared),e}export{zie as startLanguageServer};
4335
+ Adapter.layoutJson",{error:i}),n.warn(`FAILED DOT:
4336
+ ${e}`),i instanceof Ga&&!bn(i.stdout))n.warn(`Command: '${i.command}' returned result but also failed (exitcode ${i.exitCode}): "${i.stderr}"`),r=i.stdout;else throw i}return r})}async acyclic(e){return Promise.reject(new Error("Method not implemented."))}async svg(e){return await uR(async()=>{const n=Br.getChild("graphviz-binary");let r;try{const i=await Dy(this.dotpath,["-Tsvg","-y"],{timeout:1e4,stdin:{string:e}});r=i.stdout,bn(i.stderr)||n.warn`Command ${i.command} has stderr:\n${i.stderr}`}catch(i){
4337
+ if(n.error("FAILED GraphvizBinaryAdapter.svg",{error:i}),n.warn`FAILED DOT:\n${e}`,i instanceof Ga&&!bn(i.stdout))n.warn`Command: '${i.command}' returned result but also failed (exitcode ${i.exitCode}): "${i.stderr}"`,r=i.stdout;else throw i}return r})}}function Lie(){try{return aR.sync("dot")}catch(t){return tt.error("Error checking for native Graphviz:",{error:t}),null}}const Mie={likec4:{Layouter(t){tt.debug("Creating ConfigurableLayouter");const e=new cc,n=new _2(e),r=t.LanguageMetaData.languageId;
4338
+ return t.shared.workspace.ConfigurationProvider.onConfigurationSectionUpdate(i=>{if(tt.debug("Configuration update",{update:i}),i.section===r){try{const{mode:s,path:o}=i.configuration.graphviz??{mode:"wasm",path:""};if(s==="wasm"){n.changePort(e),tt.info("use graphviz wasm");return}let a=bn(o)?Lie():o;if(a===null){n.changePort(e),tt.warn("No Graphviz binaries found on PATH, use graphviz wasm"),t.shared.lsp.Connection?.window.showWarningMessage("No Graphviz binaries found on PATH, set path to bin\
4339
+ aries in settings.");return}n.changePort(new Oie(a)),tt.info(`use graphviz binary: ${a}`)}catch(s){tt.error("Failed to update configuration",{error:s})}return}tt.warn("Unexpected configuration update",{update:i})}),n}}};async function zie(){const t=Ax.createConnection(Ax.ProposedFeatures.all);await nz({sinks:{console:rS()},loggers:[{category:["likec4"],sinks:["console"]}]}),tt.info("Starting LikeC4 language server");const e=aie({connection:t,...VH},Mie);return KB(e.shared),e}export{zie as startLanguageServer};
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@ import { configureLogger, getConsoleSink, getTextFormatter } from "@likec4/log";
2
2
  import { startLanguageServer as startLanguim } from "langium/lsp";
3
3
  import { createConnection, ProposedFeatures } from "vscode-languageserver/node";
4
4
  import { LikeC4FileSystem } from "./LikeC4FileSystem.js";
5
- import { getLspConnectionSink, logger } from "./logger.js";
5
+ import { getTelemetrySink, logger } from "./logger.js";
6
6
  import { createCustomLanguageServices } from "./module.js";
7
7
  import { ConfigurableLayouter } from "./views/configurable-layouter.js";
8
8
  export { getLspConnectionSink, logger as lspLogger } from "./logger.js";
@@ -10,21 +10,17 @@ export { createCustomLanguageServices, createLanguageServices, LikeC4Module } fr
10
10
  export { LikeC4FileSystem };
11
11
  export async function startLanguageServer() {
12
12
  const connection = createConnection(ProposedFeatures.all);
13
- const isDebug = process.env.NODE_ENV === "development";
14
13
  await configureLogger({
15
14
  sinks: {
16
15
  console: getConsoleSink({
17
16
  formatter: getTextFormatter()
18
17
  }),
19
- lsp: getLspConnectionSink(connection)
18
+ telemetry: getTelemetrySink(connection)
20
19
  },
21
- // filters: {
22
- // errors: 'error'
23
- // },
24
20
  loggers: [
25
21
  {
26
22
  category: ["likec4"],
27
- sinks: ["console", "lsp"]
23
+ sinks: ["console", "telemetry"]
28
24
  }
29
25
  ]
30
26
  });
package/dist/logger.d.ts CHANGED
@@ -13,4 +13,5 @@ type LspConnectionSinkProps = {
13
13
  formatter?: TextFormatter;
14
14
  };
15
15
  export declare function getLspConnectionSink(connection: Connection, props?: LspConnectionSinkProps): Sink;
16
+ export declare function getTelemetrySink(connection: Connection): Sink;
16
17
  export {};
package/dist/logger.js CHANGED
@@ -18,26 +18,52 @@ export function getLspConnectionSink(connection, props) {
18
18
  return `${category} ${message}`;
19
19
  }
20
20
  });
21
+ return (logObj) => {
22
+ try {
23
+ switch (logObj.level) {
24
+ case "debug":
25
+ connection.console.debug(format(logObj));
26
+ break;
27
+ case "info":
28
+ connection.console.info(format(logObj));
29
+ break;
30
+ case "warning":
31
+ connection.console.warn(format(logObj));
32
+ break;
33
+ case "error":
34
+ case "fatal": {
35
+ connection.console.error(format(logObj));
36
+ break;
37
+ }
38
+ }
39
+ } catch (e) {
40
+ console.error("Error while logging to LSP connection:", e);
41
+ }
42
+ };
43
+ }
44
+ export function getTelemetrySink(connection) {
21
45
  const messageOnly = getMessageOnlyFormatter();
22
46
  return (logObj) => {
23
47
  try {
24
48
  switch (logObj.level) {
25
- // case 'debug':
26
- // connection.console.debug(format(logObj).trimEnd())
27
- // break
28
- // case 'info':
29
- // connection.console.info(format(logObj).trimEnd())
30
- // break
31
- // case 'warning':
32
- // connection.console.warn(format(logObj).trimEnd())
33
- // break
34
49
  case "error":
35
50
  case "fatal": {
36
51
  const err = errorFromLogRecord(logObj);
37
52
  if (err) {
38
- connection.telemetry.logEvent({ eventName: "error", ...err });
53
+ connection.telemetry.logEvent({
54
+ eventName: "error",
55
+ message: `${err.name}: ${err.message}`,
56
+ category: logObj.category.join("."),
57
+ ...err.stack && {
58
+ stack: err.stack
59
+ }
60
+ });
39
61
  } else {
40
- connection.telemetry.logEvent({ eventName: "error", message: messageOnly(logObj) });
62
+ connection.telemetry.logEvent({
63
+ eventName: "error",
64
+ message: messageOnly(logObj),
65
+ category: logObj.category.join(".")
66
+ });
41
67
  }
42
68
  break;
43
69
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@likec4/language-server",
3
3
  "description": "LikeC4 Language Server",
4
- "version": "1.22.0",
4
+ "version": "1.22.1",
5
5
  "license": "MIT",
6
6
  "bugs": "https://github.com/likec4/likec4/issues",
7
7
  "homepage": "https://likec4.dev",
@@ -92,11 +92,11 @@
92
92
  "@hpcc-js/wasm-graphviz": "1.7.0"
93
93
  },
94
94
  "devDependencies": {
95
- "@likec4/core": "1.22.0",
96
- "@likec4/icons": "1.22.0",
97
- "@likec4/layouts": "1.22.0",
98
- "@likec4/log": "1.22.0",
99
- "@likec4/tsconfig": "1.22.0",
95
+ "@likec4/core": "1.22.1",
96
+ "@likec4/icons": "1.22.1",
97
+ "@likec4/layouts": "1.22.1",
98
+ "@likec4/log": "1.22.1",
99
+ "@likec4/tsconfig": "1.22.1",
100
100
  "@msgpack/msgpack": "^3.0.0",
101
101
  "@smithy/util-base64": "^4.0.0",
102
102
  "@types/node": "^20.17.17",