@oml/server 0.14.0 → 0.14.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 (42) hide show
  1. package/out/cli.d.ts +1 -0
  2. package/{src/cli.ts → out/cli.js} +23 -45
  3. package/out/cli.js.map +1 -0
  4. package/out/index.d.ts +7 -0
  5. package/{src/index.ts → out/index.js} +1 -1
  6. package/out/index.js.map +1 -0
  7. package/out/lsp/diagram-server.d.ts +6 -0
  8. package/out/lsp/diagram-server.js +36 -0
  9. package/out/lsp/diagram-server.js.map +1 -0
  10. package/out/lsp/language-server.d.ts +13 -0
  11. package/{src/lsp/language-server.ts → out/lsp/language-server.js} +62 -120
  12. package/out/lsp/language-server.js.map +1 -0
  13. package/out/lsp/protocol/browser-fs-protocol.d.ts +14 -0
  14. package/{src/lsp/protocol/browser-fs-protocol.ts → out/lsp/protocol/browser-fs-protocol.js} +2 -14
  15. package/out/lsp/protocol/browser-fs-protocol.js.map +1 -0
  16. package/{src/lsp/protocol/reasoner-protocol.ts → out/lsp/protocol/reasoner-protocol.d.ts} +10 -24
  17. package/out/lsp/protocol/reasoner-protocol.js +12 -0
  18. package/out/lsp/protocol/reasoner-protocol.js.map +1 -0
  19. package/out/lsp/providers/browser-fs-provider.d.ts +21 -0
  20. package/{src/lsp/providers/browser-fs-provider.ts → out/lsp/providers/browser-fs-provider.js} +22 -34
  21. package/out/lsp/providers/browser-fs-provider.js.map +1 -0
  22. package/out/lsp/providers/hybrid-fs-provider.d.ts +28 -0
  23. package/{src/lsp/providers/hybrid-fs-provider.ts → out/lsp/providers/hybrid-fs-provider.js} +22 -44
  24. package/out/lsp/providers/hybrid-fs-provider.js.map +1 -0
  25. package/out/rest/export.d.ts +16 -0
  26. package/{src/rest/export.ts → out/rest/export.js} +14 -35
  27. package/out/rest/export.js.map +1 -0
  28. package/out/rest/routes.d.ts +49 -0
  29. package/{src/rest/routes.ts → out/rest/routes.js} +5 -27
  30. package/out/rest/routes.js.map +1 -0
  31. package/out/rest/server.d.ts +15 -0
  32. package/{src/rest/server.ts → out/rest/server.js} +207 -479
  33. package/out/rest/server.js.map +1 -0
  34. package/out/rest/template.d.ts +18 -0
  35. package/{src/rest/template.ts → out/rest/template.js} +21 -80
  36. package/out/rest/template.js.map +1 -0
  37. package/out/rest/validation.d.ts +49 -0
  38. package/{src/rest/validation.ts → out/rest/validation.js} +59 -163
  39. package/out/rest/validation.js.map +1 -0
  40. package/package.json +9 -4
  41. package/src/lsp/diagram-server.ts +0 -48
  42. package/tsconfig.json +0 -22
package/out/cli.d.ts ADDED
@@ -0,0 +1 @@
1
+ export declare function runServerCli(argv?: string[]): void;
@@ -1,26 +1,15 @@
1
1
  // Copyright (c) 2026 Modelware. All rights reserved.
2
-
3
2
  import * as fs from 'node:fs/promises';
4
3
  import * as os from 'node:os';
5
4
  import * as path from 'node:path';
6
5
  import { createHash } from 'node:crypto';
7
6
  import { NodeFileSystem } from 'langium/node';
8
7
  import { createConnection } from 'vscode-languageserver/node.js';
9
- import { startOmlLanguageServer, type OmlLanguageServerRuntime } from './lsp/language-server.js';
8
+ import { startOmlLanguageServer } from './lsp/language-server.js';
10
9
  import { startOmlRestServer } from './rest/server.js';
11
-
12
- interface RemoteOptions {
13
- host: string;
14
- port: number;
15
- workspaceRoot: string;
16
- token?: string;
17
- }
18
-
19
- type ServerLockOwner = 'daemon' | 'extension';
20
-
21
- function formatStartupError(error: unknown, host: string, port: number): string {
10
+ function formatStartupError(error, host, port) {
22
11
  if (error && typeof error === 'object' && 'code' in error) {
23
- const code = (error as NodeJS.ErrnoException).code;
12
+ const code = error.code;
24
13
  if (code === 'EADDRINUSE') {
25
14
  return `Port ${port} is already in use on ${host}.`;
26
15
  }
@@ -30,8 +19,7 @@ function formatStartupError(error: unknown, host: string, port: number): string
30
19
  }
31
20
  return error instanceof Error ? error.message : String(error);
32
21
  }
33
-
34
- function readOptionValue(argv: string[], index: number, aliases: string[]): string {
22
+ function readOptionValue(argv, index, aliases) {
35
23
  const current = argv[index];
36
24
  const equalsIndex = current.indexOf('=');
37
25
  if (equalsIndex >= 0) {
@@ -43,11 +31,10 @@ function readOptionValue(argv: string[], index: number, aliases: string[]): stri
43
31
  }
44
32
  return next;
45
33
  }
46
-
47
- function parseRemoteOptions(argv: string[]): RemoteOptions {
48
- let portValue: string | undefined;
49
- let workspaceValue: string | undefined;
50
- let tokenValue: string | undefined;
34
+ function parseRemoteOptions(argv) {
35
+ let portValue;
36
+ let workspaceValue;
37
+ let tokenValue;
51
38
  for (let index = 0; index < argv.length; index += 1) {
52
39
  const arg = argv[index];
53
40
  if (arg === '--node-ipc' || arg.startsWith('--clientProcessId=')) {
@@ -78,7 +65,6 @@ function parseRemoteOptions(argv: string[]): RemoteOptions {
78
65
  throw new Error(`Unknown option '${arg}'.`);
79
66
  }
80
67
  }
81
-
82
68
  const host = '127.0.0.1';
83
69
  const rawPort = Number(portValue ?? process.env.OML_SERVER_PORT ?? '8080');
84
70
  const port = Number.isFinite(rawPort) ? Math.max(0, Math.min(65535, Math.trunc(rawPort))) : 8080;
@@ -86,8 +72,7 @@ function parseRemoteOptions(argv: string[]): RemoteOptions {
86
72
  const token = tokenValue && tokenValue.length > 0 ? tokenValue : undefined;
87
73
  return { host, port, workspaceRoot, token };
88
74
  }
89
-
90
- function startIpcLanguageServerIfAvailable(): { connection: import('vscode-languageserver').Connection; runtime: OmlLanguageServerRuntime } | undefined {
75
+ function startIpcLanguageServerIfAvailable() {
91
76
  if (typeof process.send !== 'function') {
92
77
  return undefined;
93
78
  }
@@ -100,39 +85,34 @@ function startIpcLanguageServerIfAvailable(): { connection: import('vscode-langu
100
85
  });
101
86
  return { connection, runtime };
102
87
  }
103
-
104
- function workspaceHash(workspaceRoot: string): string {
88
+ function workspaceHash(workspaceRoot) {
105
89
  return createHash('sha256').update(path.resolve(workspaceRoot)).digest('hex');
106
90
  }
107
-
108
- function lockFilePathForWorkspace(workspaceRoot: string): string {
91
+ function lockFilePathForWorkspace(workspaceRoot) {
109
92
  return path.join(os.homedir(), '.oml', 'workspaces', workspaceHash(workspaceRoot), 'server.lock');
110
93
  }
111
-
112
- async function writeServerLock(workspaceRoot: string, port: number, owner: ServerLockOwner): Promise<string> {
94
+ async function writeServerLock(workspaceRoot, port, owner) {
113
95
  const lockFile = lockFilePathForWorkspace(workspaceRoot);
114
96
  await fs.mkdir(path.dirname(lockFile), { recursive: true });
115
97
  await fs.writeFile(lockFile, JSON.stringify({ port, pid: process.pid, owner }) + '\n', 'utf-8');
116
98
  return lockFile;
117
99
  }
118
-
119
- async function removeServerLock(lockFile: string): Promise<void> {
100
+ async function removeServerLock(lockFile) {
120
101
  await fs.rm(lockFile, { force: true });
121
102
  }
122
-
123
- function resolveListeningPort(server: import('node:http').Server): number {
103
+ function resolveListeningPort(server) {
124
104
  const address = server.address();
125
105
  if (!address || typeof address === 'string') {
126
106
  throw new Error('Unable to resolve listening port.');
127
107
  }
128
108
  return address.port;
129
109
  }
130
-
131
- export function runServerCli(argv: string[] = process.argv.slice(2)): void {
132
- let options: RemoteOptions;
110
+ export function runServerCli(argv = process.argv.slice(2)) {
111
+ let options;
133
112
  try {
134
113
  options = parseRemoteOptions(argv);
135
- } catch (error) {
114
+ }
115
+ catch (error) {
136
116
  const message = error instanceof Error ? error.message : String(error);
137
117
  process.stderr.write(`[oml-server] REST startup failed: ${message}\n`);
138
118
  process.exitCode = 1;
@@ -140,7 +120,7 @@ export function runServerCli(argv: string[] = process.argv.slice(2)): void {
140
120
  return;
141
121
  }
142
122
  const ipcServer = startIpcLanguageServerIfAvailable();
143
- const owner: ServerLockOwner = ipcServer ? 'extension' : 'daemon';
123
+ const owner = ipcServer ? 'extension' : 'daemon';
144
124
  void startOmlRestServer({
145
125
  host: options.host,
146
126
  port: options.port,
@@ -150,7 +130,7 @@ export function runServerCli(argv: string[] = process.argv.slice(2)): void {
150
130
  runtime: ipcServer?.runtime,
151
131
  }).then(async ({ server, updateToken }) => {
152
132
  if (ipcServer) {
153
- ipcServer.connection.onNotification('$/tokenRefreshed', (params: { accessToken: string }) => {
133
+ ipcServer.connection.onNotification('$/tokenRefreshed', (params) => {
154
134
  if (params?.accessToken) {
155
135
  updateToken(params.accessToken);
156
136
  }
@@ -159,7 +139,7 @@ export function runServerCli(argv: string[] = process.argv.slice(2)): void {
159
139
  const listeningPort = resolveListeningPort(server);
160
140
  const lockFile = await writeServerLock(options.workspaceRoot, listeningPort, owner);
161
141
  let shuttingDown = false;
162
- const shutdown = (exitCode: number): void => {
142
+ const shutdown = (exitCode) => {
163
143
  if (shuttingDown) {
164
144
  return;
165
145
  }
@@ -170,20 +150,18 @@ export function runServerCli(argv: string[] = process.argv.slice(2)): void {
170
150
  });
171
151
  });
172
152
  };
173
-
174
153
  process.once('SIGINT', () => shutdown(0));
175
154
  process.once('SIGTERM', () => shutdown(0));
176
155
  server.once('close', () => {
177
156
  void removeServerLock(lockFile);
178
157
  });
179
-
180
158
  process.stdout.write(`[oml-server] REST listening on http://${options.host}:${listeningPort}\n`);
181
- }).catch((error: unknown) => {
159
+ }).catch((error) => {
182
160
  const message = formatStartupError(error, options.host, options.port);
183
161
  process.stderr.write(`[oml-server] REST startup failed: ${message}\n`);
184
162
  process.exitCode = 1;
185
163
  process.exit();
186
164
  });
187
165
  }
188
-
189
166
  runServerCli();
167
+ //# sourceMappingURL=cli.js.map
package/out/cli.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/out/index.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ export * from './lsp/language-server.js';
2
+ export * from './lsp/diagram-server.js';
3
+ export * from './rest/server.js';
4
+ export * from './lsp/providers/browser-fs-provider.js';
5
+ export * from './lsp/providers/hybrid-fs-provider.js';
6
+ export * from './lsp/protocol/reasoner-protocol.js';
7
+ export * from './lsp/protocol/browser-fs-protocol.js';
@@ -1,5 +1,4 @@
1
1
  // Copyright (c) 2026 Modelware. All rights reserved.
2
-
3
2
  export * from './lsp/language-server.js';
4
3
  export * from './lsp/diagram-server.js';
5
4
  export * from './rest/server.js';
@@ -7,3 +6,4 @@ export * from './lsp/providers/browser-fs-provider.js';
7
6
  export * from './lsp/providers/hybrid-fs-provider.js';
8
7
  export * from './lsp/protocol/reasoner-protocol.js';
9
8
  export * from './lsp/protocol/browser-fs-protocol.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,qDAAqD;AAErD,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wCAAwC,CAAC;AACvD,cAAc,uCAAuC,CAAC;AACtD,cAAc,qCAAqC,CAAC;AACpD,cAAc,uCAAuC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { RequestType } from 'vscode-languageserver-protocol';
2
+ type ConnectionLike = {
3
+ onRequest: (type: RequestType<any, any, any>, handler: (params: any) => any | Promise<any>) => void;
4
+ };
5
+ export declare function registerDiagramRequests(connection: ConnectionLike, shared: any, oml?: any): void;
6
+ export {};
@@ -0,0 +1,36 @@
1
+ // Copyright (c) 2026 Modelware. All rights reserved.
2
+ import { computeLaidOutSModelForUri, resolveDefinition, resolveOntologyMemberLabels, } from '@oml/language';
3
+ import { RequestType } from 'vscode-languageserver-protocol';
4
+ const DiagramModelRequest = new RequestType('oml/diagram/model');
5
+ const DefinitionRequest = new RequestType('oml/definition');
6
+ const OntologyLabelsRequest = new RequestType('oml/labels');
7
+ export function registerDiagramRequests(connection, shared, oml) {
8
+ connection.onRequest(DiagramModelRequest, async ({ modelUri }) => {
9
+ try {
10
+ return await computeLaidOutSModelForUri(shared, modelUri);
11
+ }
12
+ catch (err) {
13
+ console.error('[oml] diagram model error', err);
14
+ return { id: 'root', type: 'graph', children: [] };
15
+ }
16
+ });
17
+ connection.onRequest(DefinitionRequest, async ({ elementId, referencingUri }) => {
18
+ try {
19
+ return await resolveDefinition(shared, elementId, referencingUri);
20
+ }
21
+ catch (err) {
22
+ console.error('[oml] definition error', err);
23
+ return null;
24
+ }
25
+ });
26
+ connection.onRequest(OntologyLabelsRequest, async ({ modelUri }) => {
27
+ try {
28
+ return await resolveOntologyMemberLabels(shared, oml, modelUri);
29
+ }
30
+ catch (err) {
31
+ console.error('[oml] labels error', err);
32
+ return [];
33
+ }
34
+ });
35
+ }
36
+ //# sourceMappingURL=diagram-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagram-server.js","sourceRoot":"","sources":["../../src/lsp/diagram-server.ts"],"names":[],"mappings":"AAAA,qDAAqD;AAGrD,OAAO,EACH,0BAA0B,EAC1B,iBAAiB,EACjB,2BAA2B,GAG9B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAM7D,MAAM,mBAAmB,GAAG,IAAI,WAAW,CAAyC,mBAAmB,CAAC,CAAC;AACzG,MAAM,iBAAiB,GAAG,IAAI,WAAW,CAA6E,gBAAgB,CAAC,CAAC;AACxI,MAAM,qBAAqB,GAAG,IAAI,WAAW,CAAyD,YAAY,CAAC,CAAC;AAEpH,MAAM,UAAU,uBAAuB,CAAC,UAA0B,EAAE,MAAW,EAAE,GAAS;IACtF,UAAU,CAAC,SAAS,CAAC,mBAAmB,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC7D,IAAI,CAAC;YACD,OAAO,MAAM,0BAA0B,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC9D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,GAAG,CAAC,CAAC;YAChD,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAA2B,CAAC;QAChF,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,SAAS,CAAC,iBAAiB,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,EAAE,EAAE;QAC5E,IAAI,CAAC;YACD,OAAO,MAAM,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;QACtE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC;YAC7C,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,SAAS,CAAC,qBAAqB,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC/D,IAAI,CAAC;YACD,OAAO,MAAM,2BAA2B,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;QACpE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;YACzC,OAAO,EAAE,CAAC;QACd,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { DefaultSharedModuleContext } from 'langium/lsp';
2
+ import type { Connection } from 'vscode-languageserver';
3
+ export interface OmlLanguageServerStartOptions {
4
+ fileSystem: Omit<DefaultSharedModuleContext, 'connection'>;
5
+ registerDiagramHandlers?: boolean;
6
+ suppressTransientDiagnostics?: boolean;
7
+ installNodeProcessHandlers?: boolean;
8
+ }
9
+ export interface OmlLanguageServerRuntime {
10
+ shared: any;
11
+ Oml: any;
12
+ }
13
+ export declare function startOmlLanguageServer(connection: Connection, options: OmlLanguageServerStartOptions): OmlLanguageServerRuntime;
@@ -1,78 +1,29 @@
1
1
  // Copyright (c) 2026 Modelware. All rights reserved.
2
-
3
2
  import { DocumentState, URI } from 'langium';
4
3
  import { startLanguageServer } from 'langium/lsp';
5
- import type { DefaultSharedModuleContext } from 'langium/lsp';
6
- import type { Connection } from 'vscode-languageserver';
7
- import {
8
- collectOntologyMembers,
9
- getIriForNode,
10
- getOntologyModelIndex,
11
- iriFragment,
12
- isDescription,
13
- isOntology,
14
- type OmlFuzzyIndexedEntry,
15
- isVocabulary,
16
- registerOmlCandidatesRequests,
17
- registerOmlEditRequests,
18
- tokenizeForFuzzy,
19
- } from '@oml/language';
4
+ import { collectOntologyMembers, getIriForNode, getOntologyModelIndex, iriFragment, isDescription, isOntology, isVocabulary, registerOmlCandidatesRequests, registerOmlEditRequests, tokenizeForFuzzy, } from '@oml/language';
20
5
  import { createOwlServices, detectSparqlKind, registerShaclValidationRequests } from '@oml/owl';
21
6
  import uFuzzy from '@leeoniya/ufuzzy';
22
- import {
23
- MarkdownExecutionRequest,
24
- MarkdownExecutor,
25
- type MdExecuteBlocksParams,
26
- type MdExecuteBlocksResult
27
- } from '@oml/markdown';
7
+ import { MarkdownExecutionRequest, MarkdownExecutor } from '@oml/markdown';
28
8
  import { registerDiagramRequests } from './diagram-server.js';
29
- import {
30
- ReasoningNotifications,
31
- ReasoningRequests,
32
- type ActiveDocumentParams,
33
- type FuzzySearchParams,
34
- type FuzzySearchResult,
35
- type ResolveModelUriParams,
36
- type ResolveModelUriResult,
37
- type SemanticChangedParams,
38
- type SparqlQueryParams,
39
- type SparqlQueryResult,
40
- type SparqlTermDto,
41
- } from './protocol/reasoner-protocol.js';
42
-
43
- export interface OmlLanguageServerStartOptions {
44
- fileSystem: Omit<DefaultSharedModuleContext, 'connection'>;
45
- registerDiagramHandlers?: boolean;
46
- suppressTransientDiagnostics?: boolean;
47
- installNodeProcessHandlers?: boolean;
48
- }
49
-
50
- export interface OmlLanguageServerRuntime {
51
- shared: any;
52
- Oml: any;
53
- }
54
-
55
- const workspacePreloadState = new WeakMap<object, { completed: boolean; promise?: Promise<void> }>();
56
-
57
- function formatError(error: unknown, depth = 0): string {
9
+ import { ReasoningNotifications, ReasoningRequests, } from './protocol/reasoner-protocol.js';
10
+ const workspacePreloadState = new WeakMap();
11
+ function formatError(error, depth = 0) {
58
12
  if (!(error instanceof Error)) {
59
13
  return String(error);
60
14
  }
61
-
62
15
  const indent = depth > 0 ? '\n' + ' '.repeat(depth) : '';
63
16
  const stack = error.stack ? `${indent}${error.stack}` : `${indent}${error.message}`;
64
- const cause = (error as any).cause;
17
+ const cause = error.cause;
65
18
  if (cause === undefined) {
66
19
  return stack;
67
20
  }
68
21
  return `${stack}\n${' '.repeat(depth)}cause: ${formatError(cause, depth + 1)}`;
69
22
  }
70
-
71
- export function startOmlLanguageServer(connection: Connection, options: OmlLanguageServerStartOptions): OmlLanguageServerRuntime {
72
- const logServerError = (scope: string, error: unknown): void => {
23
+ export function startOmlLanguageServer(connection, options) {
24
+ const logServerError = (scope, error) => {
73
25
  connection.console.error(`[oml] ${scope}: ${formatError(error)}`);
74
26
  };
75
-
76
27
  if (options.installNodeProcessHandlers) {
77
28
  process.on('unhandledRejection', (reason) => {
78
29
  logServerError('Unhandled rejection', reason);
@@ -81,9 +32,8 @@ export function startOmlLanguageServer(connection: Connection, options: OmlLangu
81
32
  logServerError('Uncaught exception', error);
82
33
  });
83
34
  }
84
-
85
35
  const sendDiagnostics = connection.sendDiagnostics.bind(connection);
86
- connection.sendDiagnostics = ((params: any): Promise<void> => {
36
+ connection.sendDiagnostics = ((params) => {
87
37
  if (!params?.uri) {
88
38
  return sendDiagnostics(params);
89
39
  }
@@ -91,38 +41,35 @@ export function startOmlLanguageServer(connection: Connection, options: OmlLangu
91
41
  return sendDiagnostics({ ...params, diagnostics: [] });
92
42
  }
93
43
  return sendDiagnostics(params);
94
- }) as any;
95
-
44
+ });
96
45
  const { shared, Oml } = createOwlServices({ connection, ...options.fileSystem });
97
-
98
46
  if (options.registerDiagramHandlers !== false) {
99
- registerDiagramRequests(connection as any, shared, Oml);
47
+ registerDiagramRequests(connection, shared, Oml);
100
48
  }
101
- registerOmlCandidatesRequests(connection as any, shared);
102
- registerOmlEditRequests(connection as any, shared);
103
- registerShaclValidationRequests(connection as any, Oml);
104
-
49
+ registerOmlCandidatesRequests(connection, shared);
50
+ registerOmlEditRequests(connection, shared);
51
+ registerShaclValidationRequests(connection, Oml);
105
52
  {
106
- const reasoningService = Oml.reasoning.ReasoningService as any;
107
- reasoningService.onSemanticChanged((modelUris: string[]) => {
108
- const params: SemanticChangedParams = { modelUris };
53
+ const reasoningService = Oml.reasoning.ReasoningService;
54
+ reasoningService.onSemanticChanged((modelUris) => {
55
+ const params = { modelUris };
109
56
  connection.sendNotification(ReasoningNotifications.semanticChanged, params);
110
57
  });
111
58
  }
112
- connection.onNotification(ReasoningNotifications.markDocumentActive, ({ modelUri }: ActiveDocumentParams) => {
113
- const reasoningService = Oml.reasoning.ReasoningService as any;
59
+ connection.onNotification(ReasoningNotifications.markDocumentActive, ({ modelUri }) => {
60
+ const reasoningService = Oml.reasoning.ReasoningService;
114
61
  reasoningService.markDocumentActive(modelUri);
115
62
  });
116
- connection.onNotification(ReasoningNotifications.markDocumentInactive, ({ modelUri }: ActiveDocumentParams) => {
117
- const reasoningService = Oml.reasoning.ReasoningService as any;
63
+ connection.onNotification(ReasoningNotifications.markDocumentInactive, ({ modelUri }) => {
64
+ const reasoningService = Oml.reasoning.ReasoningService;
118
65
  reasoningService.markDocumentInactive(modelUri);
119
66
  });
120
- connection.onRequest(MarkdownExecutionRequest, async (params: MdExecuteBlocksParams): Promise<MdExecuteBlocksResult> => {
67
+ connection.onRequest(MarkdownExecutionRequest, async (params) => {
121
68
  try {
122
- const reasoningService = Oml.reasoning.ReasoningService as any;
123
- const ontologyIndex = getOntologyModelIndex(shared as any);
124
- const knownNamespaceCache = new Map<string, boolean>();
125
- const isKnownOntologyIriNamespace = (ontologyIri: string): boolean => {
69
+ const reasoningService = Oml.reasoning.ReasoningService;
70
+ const ontologyIndex = getOntologyModelIndex(shared);
71
+ const knownNamespaceCache = new Map();
72
+ const isKnownOntologyIriNamespace = (ontologyIri) => {
126
73
  const normalized = ontologyIri.trim().replace(/[\/#]+$/, '');
127
74
  if (!normalized) {
128
75
  return false;
@@ -148,7 +95,8 @@ export function startOmlLanguageServer(connection: Connection, options: OmlLangu
148
95
  isKnownOntologyIriNamespace,
149
96
  });
150
97
  return await executor.executeBlocks(params);
151
- } catch (error) {
98
+ }
99
+ catch (error) {
152
100
  logServerError('MarkdownExecutionRequest failed', error);
153
101
  return {
154
102
  results: params.blocks.map((block) => ({
@@ -161,9 +109,9 @@ export function startOmlLanguageServer(connection: Connection, options: OmlLangu
161
109
  };
162
110
  }
163
111
  });
164
- connection.onRequest(ReasoningRequests.sparqlQuery, async (params: SparqlQueryParams): Promise<SparqlQueryResult> => {
112
+ connection.onRequest(ReasoningRequests.sparqlQuery, async (params) => {
165
113
  try {
166
- const reasoningService = Oml.reasoning.ReasoningService as any;
114
+ const reasoningService = Oml.reasoning.ReasoningService;
167
115
  const kind = detectSparqlKind(params.sparql);
168
116
  await reasoningService.ensureQueryContext(params.modelUri);
169
117
  const sparqlService = reasoningService.getSparqlService();
@@ -173,7 +121,7 @@ export function startOmlLanguageServer(connection: Connection, options: OmlLangu
173
121
  success: result.success,
174
122
  kind,
175
123
  warnings: result.warnings ?? [],
176
- rows: result.rows.map((row: Map<string, any>) => toRowDto(row)),
124
+ rows: result.rows.map((row) => toRowDto(row)),
177
125
  error: result.error,
178
126
  };
179
127
  }
@@ -193,7 +141,7 @@ export function startOmlLanguageServer(connection: Connection, options: OmlLangu
193
141
  success: result.success,
194
142
  kind,
195
143
  warnings: result.warnings ?? [],
196
- quads: result.quads.map((quad: any) => ({
144
+ quads: result.quads.map((quad) => ({
197
145
  subject: quad.subject.value,
198
146
  predicate: quad.predicate.value,
199
147
  object: quad.object.value,
@@ -208,7 +156,8 @@ export function startOmlLanguageServer(connection: Connection, options: OmlLangu
208
156
  warnings: [],
209
157
  error: 'Unsupported or unknown SPARQL query kind.',
210
158
  };
211
- } catch (error) {
159
+ }
160
+ catch (error) {
212
161
  logServerError('oml/query failed', error);
213
162
  return {
214
163
  success: false,
@@ -218,22 +167,21 @@ export function startOmlLanguageServer(connection: Connection, options: OmlLangu
218
167
  };
219
168
  }
220
169
  });
221
-
222
- connection.onRequest(ReasoningRequests.fuzzySearch, async (params: FuzzySearchParams): Promise<FuzzySearchResult> => {
170
+ connection.onRequest(ReasoningRequests.fuzzySearch, async (params) => {
223
171
  try {
224
172
  const text = (params.text ?? '').trim();
225
173
  if (!text) {
226
174
  return { success: true, candidates: [] };
227
175
  }
228
176
  const limit = Math.max(1, Math.min(50, params.limit ?? 12));
229
- const ontologyIndex = getOntologyModelIndex(shared as any);
230
- const langiumDocuments: any = shared.workspace.LangiumDocuments;
177
+ const ontologyIndex = getOntologyModelIndex(shared);
178
+ const langiumDocuments = shared.workspace.LangiumDocuments;
231
179
  const allDocs = langiumDocuments.all ?? [];
232
- const iterable: any[] = Array.isArray(allDocs)
180
+ const iterable = Array.isArray(allDocs)
233
181
  ? allDocs
234
- : (typeof allDocs?.toArray === 'function' ? allDocs.toArray() : Array.from(allDocs as Iterable<any>));
235
- const modelUris: string[] = [];
236
- const candidateByIri = new Map<string, { iri: string; label?: string }>();
182
+ : (typeof allDocs?.toArray === 'function' ? allDocs.toArray() : Array.from(allDocs));
183
+ const modelUris = [];
184
+ const candidateByIri = new Map();
237
185
  for (const doc of iterable) {
238
186
  const root = doc?.parseResult?.value;
239
187
  if (!root || !isOntology(root) || (!isVocabulary(root) && !isDescription(root))) {
@@ -254,8 +202,7 @@ export function startOmlLanguageServer(connection: Connection, options: OmlLangu
254
202
  entry.label = label;
255
203
  candidateByIri.set(iri, entry);
256
204
  }
257
-
258
- const indexedEntries: OmlFuzzyIndexedEntry[] = [...candidateByIri.values()].map((entry) => ({
205
+ const indexedEntries = [...candidateByIri.values()].map((entry) => ({
259
206
  iri: entry.iri,
260
207
  label: entry.label,
261
208
  fragment: iriFragment(entry.iri),
@@ -271,11 +218,11 @@ export function startOmlLanguageServer(connection: Connection, options: OmlLangu
271
218
  const info = uf.info(filtered, haystack, text);
272
219
  const order = info ? uf.sort(info, haystack, text) : null;
273
220
  const ranked = (order ?? filtered.map((_, index) => index))
274
- .map((index) => filtered[index]!)
221
+ .map((index) => filtered[index])
275
222
  .slice(0, limit);
276
223
  const queryTokens = tokenizeForFuzzy(text).slice(0, 6);
277
224
  const candidates = ranked.map((entryIndex, index) => {
278
- const entry = indexedEntries[entryIndex]!;
225
+ const entry = indexedEntries[entryIndex];
279
226
  const fragment = entry.fragment.toLowerCase();
280
227
  const lowerLabel = (entry.label ?? '').toLowerCase();
281
228
  const lowerInput = text.toLowerCase();
@@ -308,13 +255,13 @@ export function startOmlLanguageServer(connection: Connection, options: OmlLangu
308
255
  };
309
256
  });
310
257
  return { success: true, candidates };
311
- } catch (error) {
258
+ }
259
+ catch (error) {
312
260
  logServerError('oml/fuzzysearch failed', error);
313
261
  return { success: false, candidates: [], error: error instanceof Error ? error.message : String(error) };
314
262
  }
315
263
  });
316
-
317
- connection.onRequest(ReasoningRequests.resolveModelUri, async (params: ResolveModelUriParams): Promise<ResolveModelUriResult> => {
264
+ connection.onRequest(ReasoningRequests.resolveModelUri, async (params) => {
318
265
  await ensureWorkspaceIndexed(shared);
319
266
  const ontologyIri = typeof params?.ontologyIri === 'string' ? params.ontologyIri.trim() : '';
320
267
  if (!ontologyIri) {
@@ -324,38 +271,35 @@ export function startOmlLanguageServer(connection: Connection, options: OmlLangu
324
271
  ? params.referencingUri.trim()
325
272
  : undefined;
326
273
  const normalized = normalizeOntologyIri(ontologyIri);
327
- const ontologyIndex = getOntologyModelIndex(shared as any);
274
+ const ontologyIndex = getOntologyModelIndex(shared);
328
275
  const modelUri = ontologyIndex.resolveModelUri(normalized, referencingUri);
329
276
  if (modelUri) {
330
277
  await ensureResolvedModelDocumentLoaded(shared, modelUri);
331
278
  }
332
279
  return modelUri ? { modelUri } : {};
333
280
  });
334
-
335
281
  startLanguageServer(shared, {
336
282
  CodeActionProvider: DocumentState.IndexedReferences
337
283
  });
338
284
  return { shared, Oml };
339
285
  }
340
-
341
- function normalizeOntologyIri(value: string): string {
286
+ function normalizeOntologyIri(value) {
342
287
  return value.replace(/^<|>$/g, '').replace(/[\/#]+$/, '');
343
288
  }
344
-
345
- function isTransientDiagnosticsUri(uri: string): boolean {
289
+ function isTransientDiagnosticsUri(uri) {
346
290
  try {
347
291
  const scheme = URI.parse(uri).scheme;
348
292
  return scheme === 'git'
349
293
  || scheme === 'chat-editing-text-model'
350
294
  || scheme === 'chat-editing-snapshot-text-model'
351
295
  || scheme === 'vscode-chat-code-block';
352
- } catch {
296
+ }
297
+ catch {
353
298
  return false;
354
299
  }
355
300
  }
356
-
357
- async function ensureWorkspaceIndexed(sharedServices: any): Promise<void> {
358
- const key = sharedServices as object;
301
+ async function ensureWorkspaceIndexed(sharedServices) {
302
+ const key = sharedServices;
359
303
  const existing = workspacePreloadState.get(key);
360
304
  if (existing?.completed) {
361
305
  return;
@@ -371,7 +315,7 @@ async function ensureWorkspaceIndexed(sharedServices: any): Promise<void> {
371
315
  const builder = sharedServices.workspace.DocumentBuilder;
372
316
  await workspace.ready;
373
317
  const folderUris = workspace.workspaceFolders ?? [];
374
- const omlUris = new Set<string>();
318
+ const omlUris = new Set();
375
319
  for (const folder of folderUris) {
376
320
  const entries = await workspace.searchFolder(URI.parse(folder.uri));
377
321
  for (const entry of entries) {
@@ -382,9 +326,7 @@ async function ensureWorkspaceIndexed(sharedServices: any): Promise<void> {
382
326
  }
383
327
  }
384
328
  if (omlUris.size > 0) {
385
- const docs = await Promise.all(
386
- [...omlUris].map((uri) => documents.getOrCreateDocument(URI.parse(uri)))
387
- );
329
+ const docs = await Promise.all([...omlUris].map((uri) => documents.getOrCreateDocument(URI.parse(uri))));
388
330
  await builder.build(docs, { validation: { categories: ['built-in', 'fast'] } });
389
331
  }
390
332
  state.completed = true;
@@ -395,22 +337,21 @@ async function ensureWorkspaceIndexed(sharedServices: any): Promise<void> {
395
337
  workspacePreloadState.set(key, state);
396
338
  await promise;
397
339
  }
398
-
399
- async function ensureResolvedModelDocumentLoaded(sharedServices: any, modelUri: string): Promise<void> {
340
+ async function ensureResolvedModelDocumentLoaded(sharedServices, modelUri) {
400
341
  try {
401
342
  const documents = sharedServices.workspace.LangiumDocuments;
402
343
  const uri = URI.parse(modelUri);
403
344
  if (!documents.getDocument(uri)) {
404
345
  await documents.getOrCreateDocument(uri);
405
346
  }
406
- } catch {
347
+ }
348
+ catch {
407
349
  // Resolution must stay deterministic and non-throwing;
408
350
  // loading failures are surfaced later by query/edit operations.
409
351
  }
410
352
  }
411
-
412
- function toRowDto(row: Map<string, any>): Record<string, SparqlTermDto> {
413
- const result: Record<string, SparqlTermDto> = {};
353
+ function toRowDto(row) {
354
+ const result = {};
414
355
  for (const [name, term] of row.entries()) {
415
356
  result[name] = {
416
357
  termType: term.termType,
@@ -421,3 +362,4 @@ function toRowDto(row: Map<string, any>): Record<string, SparqlTermDto> {
421
362
  }
422
363
  return result;
423
364
  }
365
+ //# sourceMappingURL=language-server.js.map