@oml/server 0.14.0 → 0.14.2

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 (48) hide show
  1. package/out/auth/feature-gate.d.ts +23 -0
  2. package/out/auth/feature-gate.js +172 -0
  3. package/out/auth/feature-gate.js.map +1 -0
  4. package/out/auth/feature-policy.d.ts +13 -0
  5. package/out/auth/feature-policy.js +38 -0
  6. package/out/auth/feature-policy.js.map +1 -0
  7. package/out/cli.d.ts +1 -0
  8. package/{src/cli.ts → out/cli.js} +45 -55
  9. package/out/cli.js.map +1 -0
  10. package/out/index.d.ts +7 -0
  11. package/{src/index.ts → out/index.js} +1 -1
  12. package/out/index.js.map +1 -0
  13. package/out/lsp/diagram-server.d.ts +6 -0
  14. package/out/lsp/diagram-server.js +36 -0
  15. package/out/lsp/diagram-server.js.map +1 -0
  16. package/out/lsp/language-server.d.ts +15 -0
  17. package/{src/lsp/language-server.ts → out/lsp/language-server.js} +95 -120
  18. package/out/lsp/language-server.js.map +1 -0
  19. package/out/lsp/protocol/browser-fs-protocol.d.ts +14 -0
  20. package/{src/lsp/protocol/browser-fs-protocol.ts → out/lsp/protocol/browser-fs-protocol.js} +2 -14
  21. package/out/lsp/protocol/browser-fs-protocol.js.map +1 -0
  22. package/{src/lsp/protocol/reasoner-protocol.ts → out/lsp/protocol/reasoner-protocol.d.ts} +10 -24
  23. package/out/lsp/protocol/reasoner-protocol.js +12 -0
  24. package/out/lsp/protocol/reasoner-protocol.js.map +1 -0
  25. package/out/lsp/providers/browser-fs-provider.d.ts +21 -0
  26. package/{src/lsp/providers/browser-fs-provider.ts → out/lsp/providers/browser-fs-provider.js} +22 -34
  27. package/out/lsp/providers/browser-fs-provider.js.map +1 -0
  28. package/out/lsp/providers/hybrid-fs-provider.d.ts +28 -0
  29. package/{src/lsp/providers/hybrid-fs-provider.ts → out/lsp/providers/hybrid-fs-provider.js} +22 -44
  30. package/out/lsp/providers/hybrid-fs-provider.js.map +1 -0
  31. package/out/rest/export.d.ts +16 -0
  32. package/{src/rest/export.ts → out/rest/export.js} +14 -35
  33. package/out/rest/export.js.map +1 -0
  34. package/out/rest/routes.d.ts +47 -0
  35. package/{src/rest/routes.ts → out/rest/routes.js} +40 -35
  36. package/out/rest/routes.js.map +1 -0
  37. package/out/rest/server.d.ts +17 -0
  38. package/{src/rest/server.ts → out/rest/server.js} +232 -485
  39. package/out/rest/server.js.map +1 -0
  40. package/out/rest/template.d.ts +18 -0
  41. package/{src/rest/template.ts → out/rest/template.js} +21 -80
  42. package/out/rest/template.js.map +1 -0
  43. package/out/rest/validation.d.ts +49 -0
  44. package/{src/rest/validation.ts → out/rest/validation.js} +59 -163
  45. package/out/rest/validation.js.map +1 -0
  46. package/package.json +9 -4
  47. package/src/lsp/diagram-server.ts +0 -48
  48. package/tsconfig.json +0 -22
@@ -0,0 +1,23 @@
1
+ import { type OmlFeatureGateLike } from './feature-policy.js';
2
+ export declare class OmlFeatureGate implements OmlFeatureGateLike {
3
+ private currentAccessToken?;
4
+ private readonly apiBaseUrl;
5
+ private readonly tool;
6
+ private runtimeToken?;
7
+ private client;
8
+ private readonly storage;
9
+ private initPromise?;
10
+ constructor(options?: {
11
+ apiBaseUrl?: string;
12
+ initialAccessToken?: string;
13
+ tool?: string;
14
+ });
15
+ setAccessToken(token: string | undefined): void;
16
+ getAccessToken(): string | undefined;
17
+ primeEntitlements(tokenOverride?: string): Promise<void>;
18
+ requireFeature(featureId: string): Promise<void>;
19
+ runWithFeature<T>(featureId: string, action: () => Promise<T>, metadata?: Record<string, unknown>): Promise<T>;
20
+ dispose(): Promise<void>;
21
+ private ensureRuntime;
22
+ private reinitializeClient;
23
+ }
@@ -0,0 +1,172 @@
1
+ // Copyright (c) 2026 Modelware. All rights reserved.
2
+ import { OmlClient } from '@oml/platform';
3
+ import { OmlAccessError } from './feature-policy.js';
4
+ const DEFAULT_API_BASE_URL = 'https://oml-platform-worker.melaasar.workers.dev';
5
+ export class OmlFeatureGate {
6
+ constructor(options) {
7
+ this.client = null;
8
+ this.storage = new InMemoryTokenStorage();
9
+ this.apiBaseUrl = normalizeApiBaseUrl(options?.apiBaseUrl);
10
+ this.currentAccessToken = normalizeToken(options?.initialAccessToken);
11
+ this.tool = normalizeTool(options?.tool);
12
+ }
13
+ setAccessToken(token) {
14
+ const normalized = normalizeToken(token);
15
+ const changed = normalized !== this.currentAccessToken;
16
+ this.currentAccessToken = normalized;
17
+ if (changed) {
18
+ this.runtimeToken = undefined;
19
+ }
20
+ }
21
+ getAccessToken() {
22
+ return this.currentAccessToken;
23
+ }
24
+ async primeEntitlements(tokenOverride) {
25
+ const accessToken = normalizeToken(tokenOverride) ?? this.currentAccessToken;
26
+ await this.ensureRuntime(accessToken);
27
+ }
28
+ async requireFeature(featureId) {
29
+ const accessToken = this.currentAccessToken;
30
+ const client = await this.ensureRuntime(accessToken);
31
+ if (!client.hasFeature(featureId)) {
32
+ throw new OmlAccessError(`Feature '${featureId}' is not enabled for this account.`, 403, 'FORBIDDEN');
33
+ }
34
+ }
35
+ async runWithFeature(featureId, action, metadata) {
36
+ const accessToken = this.currentAccessToken;
37
+ const client = await this.ensureRuntime(accessToken);
38
+ if (!client.hasFeature(featureId)) {
39
+ throw new OmlAccessError(`Feature '${featureId}' is not enabled for this account.`, 403, 'FORBIDDEN');
40
+ }
41
+ const done = client.trackInvocation(featureId, metadata);
42
+ try {
43
+ const result = await action();
44
+ done();
45
+ return result;
46
+ }
47
+ catch (error) {
48
+ done(error);
49
+ throw error;
50
+ }
51
+ }
52
+ async dispose() {
53
+ if (this.initPromise) {
54
+ try {
55
+ await this.initPromise;
56
+ }
57
+ catch {
58
+ // ignore init failure during disposal
59
+ }
60
+ }
61
+ const activeClient = this.client;
62
+ this.client = null;
63
+ this.runtimeToken = undefined;
64
+ if (activeClient) {
65
+ await activeClient.dispose();
66
+ }
67
+ }
68
+ async ensureRuntime(accessToken) {
69
+ const token = normalizeToken(accessToken);
70
+ if (!token) {
71
+ throw new OmlAccessError('OML server access requires authentication. Log in to continue.', 401, 'UNAUTHORIZED');
72
+ }
73
+ if (this.client && this.runtimeToken === token) {
74
+ return this.client;
75
+ }
76
+ if (this.initPromise) {
77
+ await this.initPromise;
78
+ if (this.client && this.runtimeToken === token) {
79
+ return this.client;
80
+ }
81
+ }
82
+ this.initPromise = this.reinitializeClient(token).finally(() => {
83
+ this.initPromise = undefined;
84
+ });
85
+ await this.initPromise;
86
+ if (!this.client || this.runtimeToken !== token) {
87
+ throw new Error('Failed to initialize OML platform runtime.');
88
+ }
89
+ return this.client;
90
+ }
91
+ async reinitializeClient(token) {
92
+ this.storage.setToken(token);
93
+ const previous = this.client;
94
+ this.client = null;
95
+ this.runtimeToken = undefined;
96
+ if (previous) {
97
+ await previous.dispose();
98
+ }
99
+ const config = {
100
+ apiBaseUrl: this.apiBaseUrl,
101
+ tool: this.tool,
102
+ storage: this.storage,
103
+ auth: {
104
+ method: 'oauth',
105
+ getToken: async () => this.storage.getToken(),
106
+ refreshToken: async () => {
107
+ throw new OmlAccessError('OML server session expired. Refresh authentication and try again.', 401, 'UNAUTHORIZED');
108
+ },
109
+ },
110
+ debug: false,
111
+ };
112
+ const client = new OmlClient(config);
113
+ try {
114
+ await client.initialize();
115
+ if (this.currentAccessToken !== token) {
116
+ await client.dispose();
117
+ return;
118
+ }
119
+ this.client = client;
120
+ this.runtimeToken = token;
121
+ }
122
+ catch (error) {
123
+ await client.dispose().catch(() => undefined);
124
+ if (error instanceof OmlAccessError) {
125
+ throw error;
126
+ }
127
+ const message = error instanceof Error ? error.message : String(error);
128
+ if (message.includes('401')) {
129
+ throw new OmlAccessError('OML server access requires authentication. Log in to continue.', 401, 'UNAUTHORIZED');
130
+ }
131
+ if (message.includes('403')) {
132
+ throw new OmlAccessError('Authenticated, but permission was denied by OML Platform.', 403, 'FORBIDDEN');
133
+ }
134
+ throw error;
135
+ }
136
+ }
137
+ }
138
+ function normalizeToken(value) {
139
+ const trimmed = typeof value === 'string' ? value.trim() : '';
140
+ return trimmed.length > 0 ? trimmed : undefined;
141
+ }
142
+ function normalizeApiBaseUrl(value) {
143
+ const trimmed = typeof value === 'string' ? value.trim() : '';
144
+ const base = trimmed.length > 0 ? trimmed : DEFAULT_API_BASE_URL;
145
+ return base.replace(/\/+$/, '');
146
+ }
147
+ function normalizeTool(value) {
148
+ const trimmed = typeof value === 'string' ? value.trim() : '';
149
+ return trimmed.length > 0 ? trimmed : 'oml-cli';
150
+ }
151
+ class InMemoryTokenStorage {
152
+ constructor() {
153
+ this.entries = new Map();
154
+ }
155
+ async get(key) {
156
+ return this.entries.get(key) ?? null;
157
+ }
158
+ async set(key, value) {
159
+ this.entries.set(key, value);
160
+ }
161
+ async delete(key) {
162
+ this.entries.delete(key);
163
+ }
164
+ setToken(token) {
165
+ this.entries.set(InMemoryTokenStorage.AccessTokenKey, token);
166
+ }
167
+ getToken() {
168
+ return this.entries.get(InMemoryTokenStorage.AccessTokenKey) ?? '';
169
+ }
170
+ }
171
+ InMemoryTokenStorage.AccessTokenKey = 'access_token';
172
+ //# sourceMappingURL=feature-gate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-gate.js","sourceRoot":"","sources":["../../src/auth/feature-gate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export declare class OmlAccessError extends Error {
2
+ readonly statusCode: number;
3
+ readonly code: 'UNAUTHORIZED' | 'FORBIDDEN';
4
+ constructor(message: string, statusCode: number, code: 'UNAUTHORIZED' | 'FORBIDDEN');
5
+ }
6
+ export interface OmlFeatureGateLike {
7
+ setAccessToken(token: string | undefined): void;
8
+ primeEntitlements(tokenOverride?: string): Promise<void>;
9
+ runWithFeature<T>(featureId: string, action: () => Promise<T>, metadata?: Record<string, unknown>): Promise<T>;
10
+ dispose(): Promise<void>;
11
+ }
12
+ export declare function requiredFeatureForRestOperation(operationId: string): string | undefined;
13
+ export declare function requiredFeatureForLspMethod(method: string): string | undefined;
@@ -0,0 +1,38 @@
1
+ // Copyright (c) 2026 Modelware. All rights reserved.
2
+ const REST_FEATURES_BY_OPERATION = {
3
+ query: 'oml-text',
4
+ update: 'oml-update',
5
+ fuzzysearch: 'oml-text',
6
+ lint: 'oml-lint',
7
+ reason: 'oml-reason',
8
+ validate: 'oml-validate',
9
+ render: 'oml-render',
10
+ export: 'oml-export',
11
+ };
12
+ const LSP_FEATURES_BY_METHOD = {
13
+ 'oml/query': 'oml-text',
14
+ 'oml/fuzzysearch': 'oml-text',
15
+ 'oml/resolveModelUri': 'oml-text',
16
+ 'oml/completion': 'oml-text',
17
+ 'oml/update': 'oml-update',
18
+ 'oml/validate': 'oml-validate',
19
+ 'oml/markdown': 'oml-markdown',
20
+ 'oml/diagram/model': 'oml-diagram',
21
+ 'oml/definition': 'oml-text',
22
+ 'oml/labels': 'oml-text',
23
+ };
24
+ export class OmlAccessError extends Error {
25
+ constructor(message, statusCode, code) {
26
+ super(message);
27
+ this.name = 'OmlAccessError';
28
+ this.statusCode = statusCode;
29
+ this.code = code;
30
+ }
31
+ }
32
+ export function requiredFeatureForRestOperation(operationId) {
33
+ return REST_FEATURES_BY_OPERATION[operationId];
34
+ }
35
+ export function requiredFeatureForLspMethod(method) {
36
+ return LSP_FEATURES_BY_METHOD[method];
37
+ }
38
+ //# sourceMappingURL=feature-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-policy.js","sourceRoot":"","sources":["../../src/auth/feature-policy.ts"],"names":[],"mappings":"AAAA,qDAAqD;AAErD,MAAM,0BAA0B,GAA2B;IACvD,KAAK,EAAE,UAAU;IACjB,MAAM,EAAE,YAAY;IACpB,WAAW,EAAE,UAAU;IACvB,IAAI,EAAE,UAAU;IAChB,MAAM,EAAE,YAAY;IACpB,QAAQ,EAAE,cAAc;IACxB,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,YAAY;CACvB,CAAC;AAEF,MAAM,sBAAsB,GAA2B;IACnD,WAAW,EAAE,UAAU;IACvB,iBAAiB,EAAE,UAAU;IAC7B,qBAAqB,EAAE,UAAU;IACjC,gBAAgB,EAAE,UAAU;IAC5B,YAAY,EAAE,YAAY;IAC1B,cAAc,EAAE,cAAc;IAC9B,cAAc,EAAE,cAAc;IAC9B,mBAAmB,EAAE,aAAa;IAClC,gBAAgB,EAAE,UAAU;IAC5B,YAAY,EAAE,UAAU;CAC3B,CAAC;AAEF,MAAM,OAAO,cAAe,SAAQ,KAAK;IAIrC,YAAY,OAAe,EAAE,UAAkB,EAAE,IAAkC;QAC/E,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;CACJ;AAaD,MAAM,UAAU,+BAA+B,CAAC,WAAmB;IAC/D,OAAO,0BAA0B,CAAC,WAAW,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,MAAc;IACtD,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC;AAC1C,CAAC"}
package/out/cli.d.ts ADDED
@@ -0,0 +1 @@
1
+ export declare function runServerCli(argv?: string[]): void;
@@ -1,26 +1,16 @@
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
+ import { OmlFeatureGate } from './auth/feature-gate.js';
11
+ function formatStartupError(error, host, port) {
22
12
  if (error && typeof error === 'object' && 'code' in error) {
23
- const code = (error as NodeJS.ErrnoException).code;
13
+ const code = error.code;
24
14
  if (code === 'EADDRINUSE') {
25
15
  return `Port ${port} is already in use on ${host}.`;
26
16
  }
@@ -30,8 +20,7 @@ function formatStartupError(error: unknown, host: string, port: number): string
30
20
  }
31
21
  return error instanceof Error ? error.message : String(error);
32
22
  }
33
-
34
- function readOptionValue(argv: string[], index: number, aliases: string[]): string {
23
+ function readOptionValue(argv, index, aliases) {
35
24
  const current = argv[index];
36
25
  const equalsIndex = current.indexOf('=');
37
26
  if (equalsIndex >= 0) {
@@ -43,11 +32,10 @@ function readOptionValue(argv: string[], index: number, aliases: string[]): stri
43
32
  }
44
33
  return next;
45
34
  }
46
-
47
- function parseRemoteOptions(argv: string[]): RemoteOptions {
48
- let portValue: string | undefined;
49
- let workspaceValue: string | undefined;
50
- let tokenValue: string | undefined;
35
+ function parseRemoteOptions(argv) {
36
+ let portValue;
37
+ let workspaceValue;
38
+ let tokenValue;
51
39
  for (let index = 0; index < argv.length; index += 1) {
52
40
  const arg = argv[index];
53
41
  if (arg === '--node-ipc' || arg.startsWith('--clientProcessId=')) {
@@ -78,7 +66,6 @@ function parseRemoteOptions(argv: string[]): RemoteOptions {
78
66
  throw new Error(`Unknown option '${arg}'.`);
79
67
  }
80
68
  }
81
-
82
69
  const host = '127.0.0.1';
83
70
  const rawPort = Number(portValue ?? process.env.OML_SERVER_PORT ?? '8080');
84
71
  const port = Number.isFinite(rawPort) ? Math.max(0, Math.min(65535, Math.trunc(rawPort))) : 8080;
@@ -86,8 +73,7 @@ function parseRemoteOptions(argv: string[]): RemoteOptions {
86
73
  const token = tokenValue && tokenValue.length > 0 ? tokenValue : undefined;
87
74
  return { host, port, workspaceRoot, token };
88
75
  }
89
-
90
- function startIpcLanguageServerIfAvailable(): { connection: import('vscode-languageserver').Connection; runtime: OmlLanguageServerRuntime } | undefined {
76
+ function startIpcLanguageServerIfAvailable(featureGate) {
91
77
  if (typeof process.send !== 'function') {
92
78
  return undefined;
93
79
  }
@@ -97,69 +83,75 @@ function startIpcLanguageServerIfAvailable(): { connection: import('vscode-langu
97
83
  registerDiagramHandlers: true,
98
84
  suppressTransientDiagnostics: true,
99
85
  installNodeProcessHandlers: true,
86
+ featureGate,
100
87
  });
101
88
  return { connection, runtime };
102
89
  }
103
-
104
- function workspaceHash(workspaceRoot: string): string {
90
+ function workspaceHash(workspaceRoot) {
105
91
  return createHash('sha256').update(path.resolve(workspaceRoot)).digest('hex');
106
92
  }
107
-
108
- function lockFilePathForWorkspace(workspaceRoot: string): string {
93
+ function lockFilePathForWorkspace(workspaceRoot) {
109
94
  return path.join(os.homedir(), '.oml', 'workspaces', workspaceHash(workspaceRoot), 'server.lock');
110
95
  }
111
-
112
- async function writeServerLock(workspaceRoot: string, port: number, owner: ServerLockOwner): Promise<string> {
96
+ async function writeServerLock(workspaceRoot, port, owner) {
113
97
  const lockFile = lockFilePathForWorkspace(workspaceRoot);
114
98
  await fs.mkdir(path.dirname(lockFile), { recursive: true });
115
99
  await fs.writeFile(lockFile, JSON.stringify({ port, pid: process.pid, owner }) + '\n', 'utf-8');
116
100
  return lockFile;
117
101
  }
118
-
119
- async function removeServerLock(lockFile: string): Promise<void> {
102
+ async function removeServerLock(lockFile) {
120
103
  await fs.rm(lockFile, { force: true });
121
104
  }
122
-
123
- function resolveListeningPort(server: import('node:http').Server): number {
105
+ function resolveListeningPort(server) {
124
106
  const address = server.address();
125
107
  if (!address || typeof address === 'string') {
126
108
  throw new Error('Unable to resolve listening port.');
127
109
  }
128
110
  return address.port;
129
111
  }
130
-
131
- export function runServerCli(argv: string[] = process.argv.slice(2)): void {
132
- let options: RemoteOptions;
112
+ export function runServerCli(argv = process.argv.slice(2)) {
113
+ let options;
133
114
  try {
134
115
  options = parseRemoteOptions(argv);
135
- } catch (error) {
116
+ }
117
+ catch (error) {
136
118
  const message = error instanceof Error ? error.message : String(error);
137
119
  process.stderr.write(`[oml-server] REST startup failed: ${message}\n`);
138
120
  process.exitCode = 1;
139
121
  process.exit();
140
122
  return;
141
123
  }
142
- const ipcServer = startIpcLanguageServerIfAvailable();
143
- const owner: ServerLockOwner = ipcServer ? 'extension' : 'daemon';
144
- void startOmlRestServer({
145
- host: options.host,
146
- port: options.port,
147
- workspaceRoot: options.workspaceRoot,
148
- watchWorkspace: true,
149
- authToken: options.token,
150
- runtime: ipcServer?.runtime,
151
- }).then(async ({ server, updateToken }) => {
124
+ void (async () => {
125
+ const runtimeTool = typeof process.send === 'function' ? 'oml-code' : 'oml-cli';
126
+ const featureGate = new OmlFeatureGate({ initialAccessToken: options.token, tool: runtimeTool });
127
+ if (options.token) {
128
+ await featureGate.primeEntitlements();
129
+ }
130
+ const ipcServer = startIpcLanguageServerIfAvailable(featureGate);
131
+ const owner = ipcServer ? 'extension' : 'daemon';
132
+ const { server, updateToken } = await startOmlRestServer({
133
+ host: options.host,
134
+ port: options.port,
135
+ workspaceRoot: options.workspaceRoot,
136
+ watchWorkspace: true,
137
+ authToken: options.token,
138
+ runtime: ipcServer?.runtime,
139
+ featureGate,
140
+ });
152
141
  if (ipcServer) {
153
- ipcServer.connection.onNotification('$/tokenRefreshed', (params: { accessToken: string }) => {
142
+ ipcServer.connection.onNotification('$/tokenRefreshed', (params) => {
154
143
  if (params?.accessToken) {
155
- updateToken(params.accessToken);
144
+ void updateToken(params.accessToken).catch((error) => {
145
+ const message = error instanceof Error ? error.message : String(error);
146
+ process.stderr.write(`[oml-server] token refresh entitlement sync failed: ${message}\n`);
147
+ });
156
148
  }
157
149
  });
158
150
  }
159
151
  const listeningPort = resolveListeningPort(server);
160
152
  const lockFile = await writeServerLock(options.workspaceRoot, listeningPort, owner);
161
153
  let shuttingDown = false;
162
- const shutdown = (exitCode: number): void => {
154
+ const shutdown = (exitCode) => {
163
155
  if (shuttingDown) {
164
156
  return;
165
157
  }
@@ -170,20 +162,18 @@ export function runServerCli(argv: string[] = process.argv.slice(2)): void {
170
162
  });
171
163
  });
172
164
  };
173
-
174
165
  process.once('SIGINT', () => shutdown(0));
175
166
  process.once('SIGTERM', () => shutdown(0));
176
167
  server.once('close', () => {
177
168
  void removeServerLock(lockFile);
178
169
  });
179
-
180
170
  process.stdout.write(`[oml-server] REST listening on http://${options.host}:${listeningPort}\n`);
181
- }).catch((error: unknown) => {
171
+ })().catch((error) => {
182
172
  const message = formatStartupError(error, options.host, options.port);
183
173
  process.stderr.write(`[oml-server] REST startup failed: ${message}\n`);
184
174
  process.exitCode = 1;
185
175
  process.exit();
186
176
  });
187
177
  }
188
-
189
178
  runServerCli();
179
+ //# 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,15 @@
1
+ import type { DefaultSharedModuleContext } from 'langium/lsp';
2
+ import type { Connection } from 'vscode-languageserver';
3
+ import { type OmlFeatureGateLike } from '../auth/feature-policy.js';
4
+ export interface OmlLanguageServerStartOptions {
5
+ fileSystem: Omit<DefaultSharedModuleContext, 'connection'>;
6
+ registerDiagramHandlers?: boolean;
7
+ suppressTransientDiagnostics?: boolean;
8
+ installNodeProcessHandlers?: boolean;
9
+ featureGate?: OmlFeatureGateLike;
10
+ }
11
+ export interface OmlLanguageServerRuntime {
12
+ shared: any;
13
+ Oml: any;
14
+ }
15
+ export declare function startOmlLanguageServer(connection: Connection, options: OmlLanguageServerStartOptions): OmlLanguageServerRuntime;